023ecd05e6583e630e06b9efbb1ca74864b02ff3
[dragonfly.git] / gnu / usr.bin / cc50 / drivers / cc / gcc.1
1 .\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.20)
2 .\"
3 .\" Standard preamble:
4 .\" ========================================================================
5 .de Sp \" Vertical space (when we can't use .PP)
6 .if t .sp .5v
7 .if n .sp
8 ..
9 .de Vb \" Begin verbatim text
10 .ft CW
11 .nf
12 .ne \\$1
13 ..
14 .de Ve \" End verbatim text
15 .ft R
16 .fi
17 ..
18 .\" Set up some character translations and predefined strings.  \*(-- will
19 .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
20 .\" double quote, and \*(R" will give a right double quote.  \*(C+ will
21 .\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
22 .\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
23 .\" nothing in troff, for use with C<>.
24 .tr \(*W-
25 .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
26 .ie n \{\
27 .    ds -- \(*W-
28 .    ds PI pi
29 .    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
30 .    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
31 .    ds L" ""
32 .    ds R" ""
33 .    ds C` ""
34 .    ds C' ""
35 'br\}
36 .el\{\
37 .    ds -- \|\(em\|
38 .    ds PI \(*p
39 .    ds L" ``
40 .    ds R" ''
41 'br\}
42 .\"
43 .\" Escape single quotes in literal strings from groff's Unicode transform.
44 .ie \n(.g .ds Aq \(aq
45 .el       .ds Aq '
46 .\"
47 .\" If the F register is turned on, we'll generate index entries on stderr for
48 .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
49 .\" entries marked with X<> in POD.  Of course, you'll have to process the
50 .\" output yourself in some meaningful fashion.
51 .ie \nF \{\
52 .    de IX
53 .    tm Index:\\$1\t\\n%\t"\\$2"
54 ..
55 .    nr % 0
56 .    rr F
57 .\}
58 .el \{\
59 .    de IX
60 ..
61 .\}
62 .\"
63 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
64 .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
65 .    \" fudge factors for nroff and troff
66 .if n \{\
67 .    ds #H 0
68 .    ds #V .8m
69 .    ds #F .3m
70 .    ds #[ \f1
71 .    ds #] \fP
72 .\}
73 .if t \{\
74 .    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
75 .    ds #V .6m
76 .    ds #F 0
77 .    ds #[ \&
78 .    ds #] \&
79 .\}
80 .    \" simple accents for nroff and troff
81 .if n \{\
82 .    ds ' \&
83 .    ds ` \&
84 .    ds ^ \&
85 .    ds , \&
86 .    ds ~ ~
87 .    ds /
88 .\}
89 .if t \{\
90 .    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
91 .    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
92 .    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
93 .    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
94 .    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
95 .    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
96 .\}
97 .    \" troff and (daisy-wheel) nroff accents
98 .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
99 .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
100 .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
101 .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
102 .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
103 .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
104 .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
105 .ds ae a\h'-(\w'a'u*4/10)'e
106 .ds Ae A\h'-(\w'A'u*4/10)'E
107 .    \" corrections for vroff
108 .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
109 .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
110 .    \" for low resolution devices (crt and lpr)
111 .if \n(.H>23 .if \n(.V>19 \
112 \{\
113 .    ds : e
114 .    ds 8 ss
115 .    ds o a
116 .    ds d- d\h'-1'\(ga
117 .    ds D- D\h'-1'\(hy
118 .    ds th \o'bp'
119 .    ds Th \o'LP'
120 .    ds ae ae
121 .    ds Ae AE
122 .\}
123 .rm #[ #] #H #V #F C
124 .\" ========================================================================
125 .\"
126 .IX Title "GCC 1"
127 .TH GCC 1 "2015-01-11" "gcc-5.0.0" "GNU"
128 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
129 .\" way too many mistakes in technical documents.
130 .if n .ad l
131 .nh
132 .SH "NAME"
133 gcc \- GNU project C and C++ compiler
134 .SH "SYNOPSIS"
135 .IX Header "SYNOPSIS"
136 gcc [\fB\-c\fR|\fB\-S\fR|\fB\-E\fR] [\fB\-std=\fR\fIstandard\fR]
137     [\fB\-g\fR] [\fB\-pg\fR] [\fB\-O\fR\fIlevel\fR]
138     [\fB\-W\fR\fIwarn\fR...] [\fB\-Wpedantic\fR]
139     [\fB\-I\fR\fIdir\fR...] [\fB\-L\fR\fIdir\fR...]
140     [\fB\-D\fR\fImacro\fR[=\fIdefn\fR]...] [\fB\-U\fR\fImacro\fR]
141     [\fB\-f\fR\fIoption\fR...] [\fB\-m\fR\fImachine-option\fR...]
142     [\fB\-o\fR \fIoutfile\fR] [@\fIfile\fR] \fIinfile\fR...
143 .PP
144 Only the most useful options are listed here; see below for the
145 remainder.  \fBg++\fR accepts mostly the same options as \fBgcc\fR.
146 .SH "DESCRIPTION"
147 .IX Header "DESCRIPTION"
148 When you invoke \s-1GCC\s0, it normally does preprocessing, compilation,
149 assembly and linking.  The \*(L"overall options\*(R" allow you to stop this
150 process at an intermediate stage.  For example, the \fB\-c\fR option
151 says not to run the linker.  Then the output consists of object files
152 output by the assembler.
153 .PP
154 Other options are passed on to one stage of processing.  Some options
155 control the preprocessor and others the compiler itself.  Yet other
156 options control the assembler and linker; most of these are not
157 documented here, since you rarely need to use any of them.
158 .PP
159 Most of the command-line options that you can use with \s-1GCC\s0 are useful
160 for C programs; when an option is only useful with another language
161 (usually \*(C+), the explanation says so explicitly.  If the description
162 for a particular option does not mention a source language, you can use
163 that option with all supported languages.
164 .PP
165 The \fBgcc\fR program accepts options and file names as operands.  Many
166 options have multi-letter names; therefore multiple single-letter options
167 may \fInot\fR be grouped: \fB\-dv\fR is very different from \fB\-d\ \-v\fR.
168 .PP
169 You can mix options and other arguments.  For the most part, the order
170 you use doesn't matter.  Order does matter when you use several
171 options of the same kind; for example, if you specify \fB\-L\fR more
172 than once, the directories are searched in the order specified.  Also,
173 the placement of the \fB\-l\fR option is significant.
174 .PP
175 Many options have long names starting with \fB\-f\fR or with
176 \&\fB\-W\fR\-\-\-for example,
177 \&\fB\-fmove\-loop\-invariants\fR, \fB\-Wformat\fR and so on.  Most of
178 these have both positive and negative forms; the negative form of
179 \&\fB\-ffoo\fR is \fB\-fno\-foo\fR.  This manual documents
180 only one of these two forms, whichever one is not the default.
181 .SH "OPTIONS"
182 .IX Header "OPTIONS"
183 .SS "Option Summary"
184 .IX Subsection "Option Summary"
185 Here is a summary of all the options, grouped by type.  Explanations are
186 in the following sections.
187 .IP "\fIOverall Options\fR" 4
188 .IX Item "Overall Options"
189 \&\fB\-c  \-S  \-E  \-o\fR \fIfile\fR  \fB\-no\-canonical\-prefixes  
190 \&\-pipe  \-pass\-exit\-codes  
191 \&\-x\fR \fIlanguage\fR  \fB\-v  \-###  \-\-help\fR[\fB=\fR\fIclass\fR[\fB,...\fR]]  \fB\-\-target\-help  
192 \&\-\-version \-wrapper @\fR\fIfile\fR \fB\-fplugin=\fR\fIfile\fR \fB\-fplugin\-arg\-\fR\fIname\fR\fB=\fR\fIarg\fR  
193 \&\fB\-fdump\-ada\-spec\fR[\fB\-slim\fR] \fB\-fada\-spec\-parent=\fR\fIunit\fR \fB\-fdump\-go\-spec=\fR\fIfile\fR
194 .IP "\fIC Language Options\fR" 4
195 .IX Item "C Language Options"
196 \&\fB\-ansi  \-std=\fR\fIstandard\fR  \fB\-fgnu89\-inline 
197 \&\-aux\-info\fR \fIfilename\fR \fB\-fallow\-parameterless\-variadic\-functions 
198 \&\-fno\-asm  \-fno\-builtin  \-fno\-builtin\-\fR\fIfunction\fR 
199 \&\fB\-fhosted  \-ffreestanding \-fopenmp \-fopenmp\-simd \-fms\-extensions 
200 \&\-fplan9\-extensions \-trigraphs  \-traditional  \-traditional\-cpp 
201 \&\-fallow\-single\-precision  \-fcond\-mismatch \-flax\-vector\-conversions 
202 \&\-fsigned\-bitfields  \-fsigned\-char 
203 \&\-funsigned\-bitfields  \-funsigned\-char\fR
204 .IP "\fI\*(C+ Language Options\fR" 4
205 .IX Item " Language Options"
206 \&\fB\-fabi\-version=\fR\fIn\fR  \fB\-fno\-access\-control  \-fcheck\-new 
207 \&\-fconstexpr\-depth=\fR\fIn\fR  \fB\-ffriend\-injection 
208 \&\-fno\-elide\-constructors 
209 \&\-fno\-enforce\-eh\-specs 
210 \&\-ffor\-scope  \-fno\-for\-scope  \-fno\-gnu\-keywords 
211 \&\-fno\-implicit\-templates 
212 \&\-fno\-implicit\-inline\-templates 
213 \&\-fno\-implement\-inlines  \-fms\-extensions 
214 \&\-fno\-nonansi\-builtins  \-fnothrow\-opt  \-fno\-operator\-names 
215 \&\-fno\-optional\-diags  \-fpermissive 
216 \&\-fno\-pretty\-templates 
217 \&\-frepo  \-fno\-rtti \-fsized\-deallocation 
218 \&\-fstats  \-ftemplate\-backtrace\-limit=\fR\fIn\fR 
219 \&\fB\-ftemplate\-depth=\fR\fIn\fR 
220 \&\fB\-fno\-threadsafe\-statics  \-fuse\-cxa\-atexit 
221 \&\-fno\-weak  \-nostdinc++ 
222 \&\-fvisibility\-inlines\-hidden 
223 \&\-fvtable\-verify=\fR[\fBstd\fR|\fBpreinit\fR|\fBnone\fR] 
224 \&\fB\-fvtv\-counts \-fvtv\-debug 
225 \&\-fvisibility\-ms\-compat 
226 \&\-fext\-numeric\-literals 
227 \&\-Wabi=\fR\fIn\fR  \fB\-Wconversion\-null  \-Wctor\-dtor\-privacy 
228 \&\-Wdelete\-non\-virtual\-dtor \-Wliteral\-suffix \-Wnarrowing 
229 \&\-Wnoexcept \-Wnon\-virtual\-dtor  \-Wreorder 
230 \&\-Weffc++  \-Wstrict\-null\-sentinel 
231 \&\-Wno\-non\-template\-friend  \-Wold\-style\-cast 
232 \&\-Woverloaded\-virtual  \-Wno\-pmf\-conversions 
233 \&\-Wsign\-promo\fR
234 .IP "\fIObjective-C and Objective\-\*(C+ Language Options\fR" 4
235 .IX Item "Objective-C and Objective- Language Options"
236 \&\fB\-fconstant\-string\-class=\fR\fIclass-name\fR 
237 \&\fB\-fgnu\-runtime  \-fnext\-runtime 
238 \&\-fno\-nil\-receivers 
239 \&\-fobjc\-abi\-version=\fR\fIn\fR 
240 \&\fB\-fobjc\-call\-cxx\-cdtors 
241 \&\-fobjc\-direct\-dispatch 
242 \&\-fobjc\-exceptions 
243 \&\-fobjc\-gc 
244 \&\-fobjc\-nilcheck 
245 \&\-fobjc\-std=objc1 
246 \&\-fno\-local\-ivars 
247 \&\-fivar\-visibility=\fR[\fBpublic\fR|\fBprotected\fR|\fBprivate\fR|\fBpackage\fR] 
248 \&\fB\-freplace\-objc\-classes 
249 \&\-fzero\-link 
250 \&\-gen\-decls 
251 \&\-Wassign\-intercept 
252 \&\-Wno\-protocol  \-Wselector 
253 \&\-Wstrict\-selector\-match 
254 \&\-Wundeclared\-selector\fR
255 .IP "\fILanguage Independent Options\fR" 4
256 .IX Item "Language Independent Options"
257 \&\fB\-fmessage\-length=\fR\fIn\fR  
258 \&\fB\-fdiagnostics\-show\-location=\fR[\fBonce\fR|\fBevery-line\fR]  
259 \&\fB\-fdiagnostics\-color=\fR[\fBauto\fR|\fBnever\fR|\fBalways\fR]  
260 \&\fB\-fno\-diagnostics\-show\-option \-fno\-diagnostics\-show\-caret\fR
261 .IP "\fIWarning Options\fR" 4
262 .IX Item "Warning Options"
263 \&\fB\-fsyntax\-only  \-fmax\-errors=\fR\fIn\fR  \fB\-Wpedantic 
264 \&\-pedantic\-errors 
265 \&\-w  \-Wextra  \-Wall  \-Waddress  \-Waggregate\-return  
266 \&\-Waggressive\-loop\-optimizations \-Warray\-bounds 
267 \&\-Wbool\-compare 
268 \&\-Wno\-attributes \-Wno\-builtin\-macro\-redefined 
269 \&\-Wc90\-c99\-compat \-Wc99\-c11\-compat 
270 \&\-Wc++\-compat \-Wc++11\-compat \-Wc++14\-compat \-Wcast\-align  \-Wcast\-qual  
271 \&\-Wchar\-subscripts \-Wclobbered  \-Wcomment \-Wconditionally\-supported  
272 \&\-Wconversion \-Wcoverage\-mismatch \-Wdate\-time \-Wdelete\-incomplete \-Wno\-cpp  
273 \&\-Wno\-deprecated \-Wno\-deprecated\-declarations \-Wno\-designated\-init 
274 \&\-Wdisabled\-optimization 
275 \&\-Wno\-discarded\-qualifiers \-Wno\-discarded\-array\-qualifiers 
276 \&\-Wno\-div\-by\-zero \-Wdouble\-promotion \-Wempty\-body  \-Wenum\-compare 
277 \&\-Wno\-endif\-labels \-Werror  \-Werror=* 
278 \&\-Wfatal\-errors  \-Wfloat\-equal  \-Wformat  \-Wformat=2 
279 \&\-Wno\-format\-contains\-nul \-Wno\-format\-extra\-args \-Wformat\-nonliteral 
280 \&\-Wformat\-security  \-Wformat\-signedness  \-Wformat\-y2k 
281 \&\-Wframe\-larger\-than=\fR\fIlen\fR \fB\-Wno\-free\-nonheap\-object \-Wjump\-misses\-init 
282 \&\-Wignored\-qualifiers  \-Wincompatible\-pointer\-types 
283 \&\-Wimplicit  \-Wimplicit\-function\-declaration  \-Wimplicit\-int 
284 \&\-Winit\-self  \-Winline  \-Wno\-int\-conversion 
285 \&\-Wno\-int\-to\-pointer\-cast \-Wno\-invalid\-offsetof 
286 \&\-Winvalid\-pch \-Wlarger\-than=\fR\fIlen\fR  \fB\-Wunsafe\-loop\-optimizations 
287 \&\-Wlogical\-op \-Wlogical\-not\-parentheses \-Wlong\-long 
288 \&\-Wmain \-Wmaybe\-uninitialized \-Wmemset\-transposed\-args \-Wmissing\-braces 
289 \&\-Wmissing\-field\-initializers \-Wmissing\-include\-dirs 
290 \&\-Wno\-multichar  \-Wnonnull  \-Wnormalized=\fR[\fBnone\fR|\fBid\fR|\fBnfc\fR|\fBnfkc\fR] 
291  \fB\-Wodr  \-Wno\-overflow  \-Wopenmp\-simd 
292 \&\-Woverlength\-strings  \-Wpacked  \-Wpacked\-bitfield\-compat  \-Wpadded 
293 \&\-Wparentheses  \-Wpedantic\-ms\-format \-Wno\-pedantic\-ms\-format 
294 \&\-Wpointer\-arith  \-Wno\-pointer\-to\-int\-cast 
295 \&\-Wredundant\-decls  \-Wno\-return\-local\-addr 
296 \&\-Wreturn\-type  \-Wsequence\-point  \-Wshadow  \-Wno\-shadow\-ivar 
297 \&\-Wshift\-count\-negative \-Wshift\-count\-overflow 
298 \&\-Wsign\-compare  \-Wsign\-conversion \-Wfloat\-conversion 
299 \&\-Wsizeof\-pointer\-memaccess  \-Wsizeof\-array\-argument 
300 \&\-Wstack\-protector \-Wstack\-usage=\fR\fIlen\fR \fB\-Wstrict\-aliasing 
301 \&\-Wstrict\-aliasing=n  \-Wstrict\-overflow \-Wstrict\-overflow=\fR\fIn\fR 
302 \&\fB\-Wsuggest\-attribute=\fR[\fBpure\fR|\fBconst\fR|\fBnoreturn\fR|\fBformat\fR] 
303 \&\fB\-Wsuggest\-final\-types  \-Wsuggest\-final\-methods  \-Wsuggest\-override 
304 \&\-Wmissing\-format\-attribute 
305 \&\-Wswitch  \-Wswitch\-default  \-Wswitch\-enum \-Wswitch\-bool \-Wsync\-nand 
306 \&\-Wsystem\-headers  \-Wtrampolines  \-Wtrigraphs  \-Wtype\-limits  \-Wundef 
307 \&\-Wuninitialized  \-Wunknown\-pragmas  \-Wno\-pragmas 
308 \&\-Wunsuffixed\-float\-constants  \-Wunused  \-Wunused\-function 
309 \&\-Wunused\-label  \-Wunused\-local\-typedefs \-Wunused\-parameter 
310 \&\-Wno\-unused\-result \-Wunused\-value  \-Wunused\-variable 
311 \&\-Wunused\-but\-set\-parameter \-Wunused\-but\-set\-variable 
312 \&\-Wuseless\-cast \-Wvariadic\-macros \-Wvector\-operation\-performance 
313 \&\-Wvla \-Wvolatile\-register\-var  \-Wwrite\-strings 
314 \&\-Wzero\-as\-null\-pointer\-constant\fR
315 .IP "\fIC and Objective-C-only Warning Options\fR" 4
316 .IX Item "C and Objective-C-only Warning Options"
317 \&\fB\-Wbad\-function\-cast  \-Wmissing\-declarations 
318 \&\-Wmissing\-parameter\-type  \-Wmissing\-prototypes  \-Wnested\-externs 
319 \&\-Wold\-style\-declaration  \-Wold\-style\-definition 
320 \&\-Wstrict\-prototypes  \-Wtraditional  \-Wtraditional\-conversion 
321 \&\-Wdeclaration\-after\-statement \-Wpointer\-sign\fR
322 .IP "\fIDebugging Options\fR" 4
323 .IX Item "Debugging Options"
324 \&\fB\-d\fR\fIletters\fR  \fB\-dumpspecs  \-dumpmachine  \-dumpversion 
325 \&\-fsanitize=\fR\fIstyle\fR \fB\-fsanitize\-recover \-fsanitize\-recover=\fR\fIstyle\fR 
326 \&\fB\-fasan\-shadow\-offset=\fR\fInumber\fR \fB\-fsanitize\-undefined\-trap\-on\-error 
327 \&\-fdbg\-cnt\-list \-fdbg\-cnt=\fR\fIcounter-value-list\fR 
328 \&\fB\-fdisable\-ipa\-\fR\fIpass_name\fR 
329 \&\fB\-fdisable\-rtl\-\fR\fIpass_name\fR 
330 \&\fB\-fdisable\-rtl\-\fR\fIpass-name\fR\fB=\fR\fIrange-list\fR 
331 \&\fB\-fdisable\-tree\-\fR\fIpass_name\fR 
332 \&\fB\-fdisable\-tree\-\fR\fIpass-name\fR\fB=\fR\fIrange-list\fR 
333 \&\fB\-fdump\-noaddr \-fdump\-unnumbered \-fdump\-unnumbered\-links 
334 \&\-fdump\-translation\-unit\fR[\fB\-\fR\fIn\fR] 
335 \&\fB\-fdump\-class\-hierarchy\fR[\fB\-\fR\fIn\fR] 
336 \&\fB\-fdump\-ipa\-all \-fdump\-ipa\-cgraph \-fdump\-ipa\-inline 
337 \&\-fdump\-passes 
338 \&\-fdump\-statistics 
339 \&\-fdump\-tree\-all 
340 \&\-fdump\-tree\-original\fR[\fB\-\fR\fIn\fR]  
341 \&\fB\-fdump\-tree\-optimized\fR[\fB\-\fR\fIn\fR] 
342 \&\fB\-fdump\-tree\-cfg \-fdump\-tree\-alias 
343 \&\-fdump\-tree\-ch 
344 \&\-fdump\-tree\-ssa\fR[\fB\-\fR\fIn\fR] \fB\-fdump\-tree\-pre\fR[\fB\-\fR\fIn\fR] 
345 \&\fB\-fdump\-tree\-ccp\fR[\fB\-\fR\fIn\fR] \fB\-fdump\-tree\-dce\fR[\fB\-\fR\fIn\fR] 
346 \&\fB\-fdump\-tree\-gimple\fR[\fB\-raw\fR] 
347 \&\fB\-fdump\-tree\-dom\fR[\fB\-\fR\fIn\fR] 
348 \&\fB\-fdump\-tree\-dse\fR[\fB\-\fR\fIn\fR] 
349 \&\fB\-fdump\-tree\-phiprop\fR[\fB\-\fR\fIn\fR] 
350 \&\fB\-fdump\-tree\-phiopt\fR[\fB\-\fR\fIn\fR] 
351 \&\fB\-fdump\-tree\-forwprop\fR[\fB\-\fR\fIn\fR] 
352 \&\fB\-fdump\-tree\-copyrename\fR[\fB\-\fR\fIn\fR] 
353 \&\fB\-fdump\-tree\-nrv \-fdump\-tree\-vect 
354 \&\-fdump\-tree\-sink 
355 \&\-fdump\-tree\-sra\fR[\fB\-\fR\fIn\fR] 
356 \&\fB\-fdump\-tree\-forwprop\fR[\fB\-\fR\fIn\fR] 
357 \&\fB\-fdump\-tree\-fre\fR[\fB\-\fR\fIn\fR] 
358 \&\fB\-fdump\-tree\-vtable\-verify 
359 \&\-fdump\-tree\-vrp\fR[\fB\-\fR\fIn\fR] 
360 \&\fB\-fdump\-tree\-storeccp\fR[\fB\-\fR\fIn\fR] 
361 \&\fB\-fdump\-final\-insns=\fR\fIfile\fR 
362 \&\fB\-fcompare\-debug\fR[\fB=\fR\fIopts\fR]  \fB\-fcompare\-debug\-second 
363 \&\-feliminate\-dwarf2\-dups \-fno\-eliminate\-unused\-debug\-types 
364 \&\-feliminate\-unused\-debug\-symbols \-femit\-class\-debug\-always 
365 \&\-fenable\-\fR\fIkind\fR\fB\-\fR\fIpass\fR 
366 \&\fB\-fenable\-\fR\fIkind\fR\fB\-\fR\fIpass\fR\fB=\fR\fIrange-list\fR 
367 \&\fB\-fdebug\-types\-section \-fmem\-report\-wpa 
368 \&\-fmem\-report \-fpre\-ipa\-mem\-report \-fpost\-ipa\-mem\-report \-fprofile\-arcs 
369 \&\-fopt\-info 
370 \&\-fopt\-info\-\fR\fIoptions\fR[\fB=\fR\fIfile\fR] 
371 \&\fB\-frandom\-seed=\fR\fInumber\fR \fB\-fsched\-verbose=\fR\fIn\fR 
372 \&\fB\-fsel\-sched\-verbose \-fsel\-sched\-dump\-cfg \-fsel\-sched\-pipelining\-verbose 
373 \&\-fstack\-usage  \-ftest\-coverage  \-ftime\-report \-fvar\-tracking 
374 \&\-fvar\-tracking\-assignments  \-fvar\-tracking\-assignments\-toggle 
375 \&\-g  \-g\fR\fIlevel\fR  \fB\-gtoggle  \-gcoff  \-gdwarf\-\fR\fIversion\fR 
376 \&\fB\-ggdb  \-grecord\-gcc\-switches  \-gno\-record\-gcc\-switches 
377 \&\-gstabs  \-gstabs+  \-gstrict\-dwarf  \-gno\-strict\-dwarf 
378 \&\-gvms  \-gxcoff  \-gxcoff+ \-gz\fR[\fB=\fR\fItype\fR] 
379 \&\fB\-fno\-merge\-debug\-strings \-fno\-dwarf2\-cfi\-asm 
380 \&\-fdebug\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR 
381 \&\fB\-femit\-struct\-debug\-baseonly \-femit\-struct\-debug\-reduced 
382 \&\-femit\-struct\-debug\-detailed\fR[\fB=\fR\fIspec-list\fR] 
383 \&\fB\-p  \-pg  \-print\-file\-name=\fR\fIlibrary\fR  \fB\-print\-libgcc\-file\-name 
384 \&\-print\-multi\-directory  \-print\-multi\-lib  \-print\-multi\-os\-directory 
385 \&\-print\-prog\-name=\fR\fIprogram\fR  \fB\-print\-search\-dirs  \-Q 
386 \&\-print\-sysroot \-print\-sysroot\-headers\-suffix 
387 \&\-save\-temps \-save\-temps=cwd \-save\-temps=obj \-time\fR[\fB=\fR\fIfile\fR]
388 .IP "\fIOptimization Options\fR" 4
389 .IX Item "Optimization Options"
390 \&\fB\-faggressive\-loop\-optimizations \-falign\-functions[=\fR\fIn\fR\fB] 
391 \&\-falign\-jumps[=\fR\fIn\fR\fB] 
392 \&\-falign\-labels[=\fR\fIn\fR\fB] \-falign\-loops[=\fR\fIn\fR\fB] 
393 \&\-fassociative\-math \-fauto\-profile \-fauto\-profile[=\fR\fIpath\fR\fB] 
394 \&\-fauto\-inc\-dec \-fbranch\-probabilities 
395 \&\-fbranch\-target\-load\-optimize \-fbranch\-target\-load\-optimize2 
396 \&\-fbtr\-bb\-exclusive \-fcaller\-saves 
397 \&\-fcheck\-data\-deps \-fcombine\-stack\-adjustments \-fconserve\-stack 
398 \&\-fcompare\-elim \-fcprop\-registers \-fcrossjumping 
399 \&\-fcse\-follow\-jumps \-fcse\-skip\-blocks \-fcx\-fortran\-rules 
400 \&\-fcx\-limited\-range 
401 \&\-fdata\-sections \-fdce \-fdelayed\-branch 
402 \&\-fdelete\-null\-pointer\-checks \-fdevirtualize \-fdevirtualize\-speculatively 
403 \&\-fdevirtualize\-at\-ltrans \-fdse 
404 \&\-fearly\-inlining \-fipa\-sra \-fexpensive\-optimizations \-ffat\-lto\-objects 
405 \&\-ffast\-math \-ffinite\-math\-only \-ffloat\-store \-fexcess\-precision=\fR\fIstyle\fR 
406 \&\fB\-fforward\-propagate \-ffp\-contract=\fR\fIstyle\fR \fB\-ffunction\-sections 
407 \&\-fgcse \-fgcse\-after\-reload \-fgcse\-las \-fgcse\-lm \-fgraphite\-identity 
408 \&\-fgcse\-sm \-fhoist\-adjacent\-loads \-fif\-conversion 
409 \&\-fif\-conversion2 \-findirect\-inlining 
410 \&\-finline\-functions \-finline\-functions\-called\-once \-finline\-limit=\fR\fIn\fR 
411 \&\fB\-finline\-small\-functions \-fipa\-cp \-fipa\-cp\-clone 
412 \&\-fipa\-pta \-fipa\-profile \-fipa\-pure\-const \-fipa\-reference \-fipa\-icf 
413 \&\-fira\-algorithm=\fR\fIalgorithm\fR 
414 \&\fB\-fira\-region=\fR\fIregion\fR \fB\-fira\-hoist\-pressure 
415 \&\-fira\-loop\-pressure \-fno\-ira\-share\-save\-slots 
416 \&\-fno\-ira\-share\-spill\-slots \-fira\-verbose=\fR\fIn\fR 
417 \&\fB\-fisolate\-erroneous\-paths\-dereference \-fisolate\-erroneous\-paths\-attribute 
418 \&\-fivopts \-fkeep\-inline\-functions \-fkeep\-static\-consts 
419 \&\-flive\-range\-shrinkage 
420 \&\-floop\-block \-floop\-interchange \-floop\-strip\-mine   
421 \&\-floop\-unroll\-and\-jam \-floop\-nest\-optimize 
422 \&\-floop\-parallelize\-all \-flra\-remat \-flto \-flto\-compression\-level 
423 \&\-flto\-partition=\fR\fIalg\fR \fB\-flto\-report \-flto\-report\-wpa \-fmerge\-all\-constants 
424 \&\-fmerge\-constants \-fmodulo\-sched \-fmodulo\-sched\-allow\-regmoves 
425 \&\-fmove\-loop\-invariants \-fno\-branch\-count\-reg 
426 \&\-fno\-defer\-pop \-fno\-function\-cse \-fno\-guess\-branch\-probability 
427 \&\-fno\-inline \-fno\-math\-errno \-fno\-peephole \-fno\-peephole2 
428 \&\-fno\-sched\-interblock \-fno\-sched\-spec \-fno\-signed\-zeros 
429 \&\-fno\-toplevel\-reorder \-fno\-trapping\-math \-fno\-zero\-initialized\-in\-bss 
430 \&\-fomit\-frame\-pointer \-foptimize\-sibling\-calls 
431 \&\-fpartial\-inlining \-fpeel\-loops \-fpredictive\-commoning 
432 \&\-fprefetch\-loop\-arrays \-fprofile\-report 
433 \&\-fprofile\-correction \-fprofile\-dir=\fR\fIpath\fR \fB\-fprofile\-generate 
434 \&\-fprofile\-generate=\fR\fIpath\fR 
435 \&\fB\-fprofile\-use \-fprofile\-use=\fR\fIpath\fR \fB\-fprofile\-values 
436 \&\-fprofile\-reorder\-functions 
437 \&\-freciprocal\-math \-free \-frename\-registers \-freorder\-blocks 
438 \&\-freorder\-blocks\-and\-partition \-freorder\-functions 
439 \&\-frerun\-cse\-after\-loop \-freschedule\-modulo\-scheduled\-loops 
440 \&\-frounding\-math \-fsched2\-use\-superblocks \-fsched\-pressure 
441 \&\-fsched\-spec\-load \-fsched\-spec\-load\-dangerous 
442 \&\-fsched\-stalled\-insns\-dep[=\fR\fIn\fR\fB] \-fsched\-stalled\-insns[=\fR\fIn\fR\fB] 
443 \&\-fsched\-group\-heuristic \-fsched\-critical\-path\-heuristic 
444 \&\-fsched\-spec\-insn\-heuristic \-fsched\-rank\-heuristic 
445 \&\-fsched\-last\-insn\-heuristic \-fsched\-dep\-count\-heuristic 
446 \&\-fschedule\-fusion 
447 \&\-fschedule\-insns \-fschedule\-insns2 \-fsection\-anchors 
448 \&\-fselective\-scheduling \-fselective\-scheduling2 
449 \&\-fsel\-sched\-pipelining \-fsel\-sched\-pipelining\-outer\-loops 
450 \&\-fsemantic\-interposition 
451 \&\-fshrink\-wrap \-fsignaling\-nans \-fsingle\-precision\-constant 
452 \&\-fsplit\-ivs\-in\-unroller \-fsplit\-wide\-types \-fssa\-phiopt \-fstack\-protector 
453 \&\-fstack\-protector\-all \-fstack\-protector\-strong \-fstrict\-aliasing 
454 \&\-fstrict\-overflow \-fthread\-jumps \-ftracer \-ftree\-bit\-ccp 
455 \&\-ftree\-builtin\-call\-dce \-ftree\-ccp \-ftree\-ch 
456 \&\-ftree\-coalesce\-inline\-vars \-ftree\-coalesce\-vars \-ftree\-copy\-prop 
457 \&\-ftree\-copyrename \-ftree\-dce \-ftree\-dominator\-opts \-ftree\-dse 
458 \&\-ftree\-forwprop \-ftree\-fre \-ftree\-loop\-if\-convert 
459 \&\-ftree\-loop\-if\-convert\-stores \-ftree\-loop\-im 
460 \&\-ftree\-phiprop \-ftree\-loop\-distribution \-ftree\-loop\-distribute\-patterns 
461 \&\-ftree\-loop\-ivcanon \-ftree\-loop\-linear \-ftree\-loop\-optimize 
462 \&\-ftree\-loop\-vectorize 
463 \&\-ftree\-parallelize\-loops=\fR\fIn\fR \fB\-ftree\-pre \-ftree\-partial\-pre \-ftree\-pta 
464 \&\-ftree\-reassoc \-ftree\-sink \-ftree\-slsr \-ftree\-sra 
465 \&\-ftree\-switch\-conversion \-ftree\-tail\-merge \-ftree\-ter 
466 \&\-ftree\-vectorize \-ftree\-vrp 
467 \&\-funit\-at\-a\-time \-funroll\-all\-loops \-funroll\-loops 
468 \&\-funsafe\-loop\-optimizations \-funsafe\-math\-optimizations \-funswitch\-loops 
469 \&\-fipa\-ra \-fvariable\-expansion\-in\-unroller \-fvect\-cost\-model \-fvpt 
470 \&\-fweb \-fwhole\-program \-fwpa \-fuse\-ld=\fR\fIlinker\fR \fB\-fuse\-linker\-plugin 
471 \&\-\-param\fR \fIname\fR\fB=\fR\fIvalue\fR
472 \&\fB\-O  \-O0  \-O1  \-O2  \-O3  \-Os \-Ofast \-Og\fR
473 .IP "\fIPreprocessor Options\fR" 4
474 .IX Item "Preprocessor Options"
475 \&\fB\-A\fR\fIquestion\fR\fB=\fR\fIanswer\fR 
476 \&\fB\-A\-\fR\fIquestion\fR[\fB=\fR\fIanswer\fR] 
477 \&\fB\-C  \-dD  \-dI  \-dM  \-dN 
478 \&\-D\fR\fImacro\fR[\fB=\fR\fIdefn\fR]  \fB\-E  \-H 
479 \&\-idirafter\fR \fIdir\fR 
480 \&\fB\-include\fR \fIfile\fR  \fB\-imacros\fR \fIfile\fR 
481 \&\fB\-iprefix\fR \fIfile\fR  \fB\-iwithprefix\fR \fIdir\fR 
482 \&\fB\-iwithprefixbefore\fR \fIdir\fR  \fB\-isystem\fR \fIdir\fR 
483 \&\fB\-imultilib\fR \fIdir\fR \fB\-isysroot\fR \fIdir\fR 
484 \&\fB\-M  \-MM  \-MF  \-MG  \-MP  \-MQ  \-MT  \-nostdinc  
485 \&\-P  \-fdebug\-cpp \-ftrack\-macro\-expansion \-fworking\-directory 
486 \&\-remap \-trigraphs  \-undef  \-U\fR\fImacro\fR  
487 \&\fB\-Wp,\fR\fIoption\fR \fB\-Xpreprocessor\fR \fIoption\fR \fB\-no\-integrated\-cpp\fR
488 .IP "\fIAssembler Option\fR" 4
489 .IX Item "Assembler Option"
490 \&\fB\-Wa,\fR\fIoption\fR  \fB\-Xassembler\fR \fIoption\fR
491 .IP "\fILinker Options\fR" 4
492 .IX Item "Linker Options"
493 \&\fIobject-file-name\fR  \fB\-l\fR\fIlibrary\fR 
494 \&\fB\-nostartfiles  \-nodefaultlibs  \-nostdlib \-pie \-rdynamic 
495 \&\-s  \-static \-static\-libgcc \-static\-libstdc++ 
496 \&\-static\-libasan \-static\-libtsan \-static\-liblsan \-static\-libubsan 
497 \&\-shared \-shared\-libgcc  \-symbolic 
498 \&\-T\fR \fIscript\fR  \fB\-Wl,\fR\fIoption\fR  \fB\-Xlinker\fR \fIoption\fR 
499 \&\fB\-u\fR \fIsymbol\fR \fB\-z\fR \fIkeyword\fR
500 .IP "\fIDirectory Options\fR" 4
501 .IX Item "Directory Options"
502 \&\fB\-B\fR\fIprefix\fR \fB\-I\fR\fIdir\fR \fB\-iplugindir=\fR\fIdir\fR 
503 \&\fB\-iquote\fR\fIdir\fR \fB\-L\fR\fIdir\fR \fB\-specs=\fR\fIfile\fR \fB\-I\- 
504 \&\-\-sysroot=\fR\fIdir\fR \fB\-\-no\-sysroot\-suffix\fR
505 .IP "\fIMachine Dependent Options\fR" 4
506 .IX Item "Machine Dependent Options"
507 \&\fIAArch64 Options\fR
508 \&\fB\-mabi=\fR\fIname\fR  \fB\-mbig\-endian  \-mlittle\-endian 
509 \&\-mgeneral\-regs\-only 
510 \&\-mcmodel=tiny  \-mcmodel=small  \-mcmodel=large 
511 \&\-mstrict\-align 
512 \&\-momit\-leaf\-frame\-pointer  \-mno\-omit\-leaf\-frame\-pointer 
513 \&\-mtls\-dialect=desc  \-mtls\-dialect=traditional 
514 \&\-mfix\-cortex\-a53\-835769  \-mno\-fix\-cortex\-a53\-835769 
515 \&\-march=\fR\fIname\fR  \fB\-mcpu=\fR\fIname\fR  \fB\-mtune=\fR\fIname\fR
516 .Sp
517 \&\fIAdapteva Epiphany Options\fR
518 \&\fB\-mhalf\-reg\-file \-mprefer\-short\-insn\-regs 
519 \&\-mbranch\-cost=\fR\fInum\fR \fB\-mcmove \-mnops=\fR\fInum\fR \fB\-msoft\-cmpsf 
520 \&\-msplit\-lohi \-mpost\-inc \-mpost\-modify \-mstack\-offset=\fR\fInum\fR 
521 \&\fB\-mround\-nearest \-mlong\-calls \-mshort\-calls \-msmall16 
522 \&\-mfp\-mode=\fR\fImode\fR \fB\-mvect\-double \-max\-vect\-align=\fR\fInum\fR 
523 \&\fB\-msplit\-vecmove\-early \-m1reg\-\fR\fIreg\fR
524 .Sp
525 \&\fI\s-1ARC\s0 Options\fR
526 \&\fB\-mbarrel\-shifter 
527 \&\-mcpu=\fR\fIcpu\fR \fB\-mA6 \-mARC600 \-mA7 \-mARC700 
528 \&\-mdpfp \-mdpfp\-compact \-mdpfp\-fast \-mno\-dpfp\-lrsr 
529 \&\-mea \-mno\-mpy \-mmul32x16 \-mmul64 
530 \&\-mnorm \-mspfp \-mspfp\-compact \-mspfp\-fast \-msimd \-msoft\-float \-mswap 
531 \&\-mcrc \-mdsp\-packa \-mdvbf \-mlock \-mmac\-d16 \-mmac\-24 \-mrtsc \-mswape 
532 \&\-mtelephony \-mxy \-misize \-mannotate\-align \-marclinux \-marclinux_prof 
533 \&\-mepilogue\-cfi \-mlong\-calls \-mmedium\-calls \-msdata 
534 \&\-mucb\-mcount \-mvolatile\-cache 
535 \&\-malign\-call \-mauto\-modify\-reg \-mbbit\-peephole \-mno\-brcc 
536 \&\-mcase\-vector\-pcrel \-mcompact\-casesi \-mno\-cond\-exec \-mearly\-cbranchsi 
537 \&\-mexpand\-adddi \-mindexed\-loads \-mlra \-mlra\-priority\-none 
538 \&\-mlra\-priority\-compact mlra-priority-noncompact \-mno\-millicode 
539 \&\-mmixed\-code \-mq\-class \-mRcq \-mRcw \-msize\-level=\fR\fIlevel\fR 
540 \&\fB\-mtune=\fR\fIcpu\fR \fB\-mmultcost=\fR\fInum\fR \fB\-munalign\-prob\-threshold=\fR\fIprobability\fR
541 .Sp
542 \&\fI\s-1ARM\s0 Options\fR
543 \&\fB\-mapcs\-frame  \-mno\-apcs\-frame 
544 \&\-mabi=\fR\fIname\fR 
545 \&\fB\-mapcs\-stack\-check  \-mno\-apcs\-stack\-check 
546 \&\-mapcs\-float  \-mno\-apcs\-float 
547 \&\-mapcs\-reentrant  \-mno\-apcs\-reentrant 
548 \&\-msched\-prolog  \-mno\-sched\-prolog 
549 \&\-mlittle\-endian  \-mbig\-endian 
550 \&\-mfloat\-abi=\fR\fIname\fR 
551 \&\fB\-mfp16\-format=\fR\fIname\fR
552 \&\fB\-mthumb\-interwork  \-mno\-thumb\-interwork 
553 \&\-mcpu=\fR\fIname\fR  \fB\-march=\fR\fIname\fR  \fB\-mfpu=\fR\fIname\fR  
554 \&\fB\-mstructure\-size\-boundary=\fR\fIn\fR 
555 \&\fB\-mabort\-on\-noreturn 
556 \&\-mlong\-calls  \-mno\-long\-calls 
557 \&\-msingle\-pic\-base  \-mno\-single\-pic\-base 
558 \&\-mpic\-register=\fR\fIreg\fR 
559 \&\fB\-mnop\-fun\-dllimport 
560 \&\-mpoke\-function\-name 
561 \&\-mthumb  \-marm 
562 \&\-mtpcs\-frame  \-mtpcs\-leaf\-frame 
563 \&\-mcaller\-super\-interworking  \-mcallee\-super\-interworking 
564 \&\-mtp=\fR\fIname\fR \fB\-mtls\-dialect=\fR\fIdialect\fR 
565 \&\fB\-mword\-relocations 
566 \&\-mfix\-cortex\-m3\-ldrd 
567 \&\-munaligned\-access 
568 \&\-mneon\-for\-64bits 
569 \&\-mslow\-flash\-data 
570 \&\-masm\-syntax\-unified 
571 \&\-mrestrict\-it\fR
572 .Sp
573 \&\fI\s-1AVR\s0 Options\fR
574 \&\fB\-mmcu=\fR\fImcu\fR \fB\-maccumulate\-args \-mbranch\-cost=\fR\fIcost\fR 
575 \&\fB\-mcall\-prologues \-mint8 \-mno\-interrupts \-mrelax 
576 \&\-mstrict\-X \-mtiny\-stack \-Waddr\-space\-convert\fR
577 .Sp
578 \&\fIBlackfin Options\fR
579 \&\fB\-mcpu=\fR\fIcpu\fR[\fB\-\fR\fIsirevision\fR] 
580 \&\fB\-msim \-momit\-leaf\-frame\-pointer  \-mno\-omit\-leaf\-frame\-pointer 
581 \&\-mspecld\-anomaly  \-mno\-specld\-anomaly  \-mcsync\-anomaly  \-mno\-csync\-anomaly 
582 \&\-mlow\-64k \-mno\-low64k  \-mstack\-check\-l1  \-mid\-shared\-library 
583 \&\-mno\-id\-shared\-library  \-mshared\-library\-id=\fR\fIn\fR 
584 \&\fB\-mleaf\-id\-shared\-library  \-mno\-leaf\-id\-shared\-library 
585 \&\-msep\-data  \-mno\-sep\-data  \-mlong\-calls  \-mno\-long\-calls 
586 \&\-mfast\-fp \-minline\-plt \-mmulticore  \-mcorea  \-mcoreb  \-msdram 
587 \&\-micplb\fR
588 .Sp
589 \&\fIC6X Options\fR
590 \&\fB\-mbig\-endian  \-mlittle\-endian \-march=\fR\fIcpu\fR 
591 \&\fB\-msim \-msdata=\fR\fIsdata-type\fR
592 .Sp
593 \&\fI\s-1CRIS\s0 Options\fR
594 \&\fB\-mcpu=\fR\fIcpu\fR  \fB\-march=\fR\fIcpu\fR  \fB\-mtune=\fR\fIcpu\fR 
595 \&\fB\-mmax\-stack\-frame=\fR\fIn\fR  \fB\-melinux\-stacksize=\fR\fIn\fR 
596 \&\fB\-metrax4  \-metrax100  \-mpdebug  \-mcc\-init  \-mno\-side\-effects 
597 \&\-mstack\-align  \-mdata\-align  \-mconst\-align 
598 \&\-m32\-bit  \-m16\-bit  \-m8\-bit  \-mno\-prologue\-epilogue  \-mno\-gotplt 
599 \&\-melf  \-maout  \-melinux  \-mlinux  \-sim  \-sim2 
600 \&\-mmul\-bug\-workaround  \-mno\-mul\-bug\-workaround\fR
601 .Sp
602 \&\fI\s-1CR16\s0 Options\fR
603 \&\fB\-mmac 
604 \&\-mcr16cplus \-mcr16c 
605 \&\-msim \-mint32 \-mbit\-ops
606 \&\-mdata\-model=\fR\fImodel\fR
607 .Sp
608 \&\fIDarwin Options\fR
609 \&\fB\-all_load  \-allowable_client  \-arch  \-arch_errors_fatal 
610 \&\-arch_only  \-bind_at_load  \-bundle  \-bundle_loader 
611 \&\-client_name  \-compatibility_version  \-current_version 
612 \&\-dead_strip 
613 \&\-dependency\-file  \-dylib_file  \-dylinker_install_name 
614 \&\-dynamic  \-dynamiclib  \-exported_symbols_list 
615 \&\-filelist  \-flat_namespace  \-force_cpusubtype_ALL 
616 \&\-force_flat_namespace  \-headerpad_max_install_names 
617 \&\-iframework 
618 \&\-image_base  \-init  \-install_name  \-keep_private_externs 
619 \&\-multi_module  \-multiply_defined  \-multiply_defined_unused 
620 \&\-noall_load   \-no_dead_strip_inits_and_terms 
621 \&\-nofixprebinding \-nomultidefs  \-noprebind  \-noseglinkedit 
622 \&\-pagezero_size  \-prebind  \-prebind_all_twolevel_modules 
623 \&\-private_bundle  \-read_only_relocs  \-sectalign 
624 \&\-sectobjectsymbols  \-whyload  \-seg1addr 
625 \&\-sectcreate  \-sectobjectsymbols  \-sectorder 
626 \&\-segaddr \-segs_read_only_addr \-segs_read_write_addr 
627 \&\-seg_addr_table  \-seg_addr_table_filename  \-seglinkedit 
628 \&\-segprot  \-segs_read_only_addr  \-segs_read_write_addr 
629 \&\-single_module  \-static  \-sub_library  \-sub_umbrella 
630 \&\-twolevel_namespace  \-umbrella  \-undefined 
631 \&\-unexported_symbols_list  \-weak_reference_mismatches 
632 \&\-whatsloaded \-F \-gused \-gfull \-mmacosx\-version\-min=\fR\fIversion\fR 
633 \&\fB\-mkernel \-mone\-byte\-bool\fR
634 .Sp
635 \&\fI\s-1DEC\s0 Alpha Options\fR
636 \&\fB\-mno\-fp\-regs  \-msoft\-float 
637 \&\-mieee  \-mieee\-with\-inexact  \-mieee\-conformant 
638 \&\-mfp\-trap\-mode=\fR\fImode\fR  \fB\-mfp\-rounding\-mode=\fR\fImode\fR 
639 \&\fB\-mtrap\-precision=\fR\fImode\fR  \fB\-mbuild\-constants 
640 \&\-mcpu=\fR\fIcpu-type\fR  \fB\-mtune=\fR\fIcpu-type\fR 
641 \&\fB\-mbwx  \-mmax  \-mfix  \-mcix 
642 \&\-mfloat\-vax  \-mfloat\-ieee 
643 \&\-mexplicit\-relocs  \-msmall\-data  \-mlarge\-data 
644 \&\-msmall\-text  \-mlarge\-text 
645 \&\-mmemory\-latency=\fR\fItime\fR
646 .Sp
647 \&\fI\s-1FR30\s0 Options\fR
648 \&\fB\-msmall\-model \-mno\-lsim\fR
649 .Sp
650 \&\fI\s-1FRV\s0 Options\fR
651 \&\fB\-mgpr\-32  \-mgpr\-64  \-mfpr\-32  \-mfpr\-64 
652 \&\-mhard\-float  \-msoft\-float 
653 \&\-malloc\-cc  \-mfixed\-cc  \-mdword  \-mno\-dword 
654 \&\-mdouble  \-mno\-double 
655 \&\-mmedia  \-mno\-media  \-mmuladd  \-mno\-muladd 
656 \&\-mfdpic  \-minline\-plt \-mgprel\-ro  \-multilib\-library\-pic 
657 \&\-mlinked\-fp  \-mlong\-calls  \-malign\-labels 
658 \&\-mlibrary\-pic  \-macc\-4  \-macc\-8 
659 \&\-mpack  \-mno\-pack  \-mno\-eflags  \-mcond\-move  \-mno\-cond\-move 
660 \&\-moptimize\-membar \-mno\-optimize\-membar 
661 \&\-mscc  \-mno\-scc  \-mcond\-exec  \-mno\-cond\-exec 
662 \&\-mvliw\-branch  \-mno\-vliw\-branch 
663 \&\-mmulti\-cond\-exec  \-mno\-multi\-cond\-exec  \-mnested\-cond\-exec 
664 \&\-mno\-nested\-cond\-exec  \-mtomcat\-stats 
665 \&\-mTLS \-mtls 
666 \&\-mcpu=\fR\fIcpu\fR
667 .Sp
668 \&\fIGNU/Linux Options\fR
669 \&\fB\-mglibc \-muclibc \-mbionic \-mandroid 
670 \&\-tno\-android\-cc \-tno\-android\-ld\fR
671 .Sp
672 \&\fIH8/300 Options\fR
673 \&\fB\-mrelax  \-mh  \-ms  \-mn  \-mexr \-mno\-exr  \-mint32  \-malign\-300\fR
674 .Sp
675 \&\fI\s-1HPPA\s0 Options\fR
676 \&\fB\-march=\fR\fIarchitecture-type\fR 
677 \&\fB\-mdisable\-fpregs  \-mdisable\-indexing 
678 \&\-mfast\-indirect\-calls  \-mgas  \-mgnu\-ld   \-mhp\-ld 
679 \&\-mfixed\-range=\fR\fIregister-range\fR 
680 \&\fB\-mjump\-in\-delay \-mlinker\-opt \-mlong\-calls 
681 \&\-mlong\-load\-store  \-mno\-disable\-fpregs 
682 \&\-mno\-disable\-indexing  \-mno\-fast\-indirect\-calls  \-mno\-gas 
683 \&\-mno\-jump\-in\-delay  \-mno\-long\-load\-store 
684 \&\-mno\-portable\-runtime  \-mno\-soft\-float 
685 \&\-mno\-space\-regs  \-msoft\-float  \-mpa\-risc\-1\-0 
686 \&\-mpa\-risc\-1\-1  \-mpa\-risc\-2\-0  \-mportable\-runtime 
687 \&\-mschedule=\fR\fIcpu-type\fR  \fB\-mspace\-regs  \-msio  \-mwsio 
688 \&\-munix=\fR\fIunix-std\fR  \fB\-nolibdld  \-static  \-threads\fR
689 .Sp
690 \&\fIi386 and x86\-64 Options\fR
691 \&\fB\-mtune=\fR\fIcpu-type\fR  \fB\-march=\fR\fIcpu-type\fR 
692 \&\fB\-mtune\-ctrl=\fR\fIfeature-list\fR \fB\-mdump\-tune\-features \-mno\-default 
693 \&\-mfpmath=\fR\fIunit\fR 
694 \&\fB\-masm=\fR\fIdialect\fR  \fB\-mno\-fancy\-math\-387 
695 \&\-mno\-fp\-ret\-in\-387  \-msoft\-float 
696 \&\-mno\-wide\-multiply  \-mrtd  \-malign\-double 
697 \&\-mpreferred\-stack\-boundary=\fR\fInum\fR 
698 \&\fB\-mincoming\-stack\-boundary=\fR\fInum\fR 
699 \&\fB\-mcld \-mcx16 \-msahf \-mmovbe \-mcrc32 
700 \&\-mrecip \-mrecip=\fR\fIopt\fR 
701 \&\fB\-mvzeroupper \-mprefer\-avx128 
702 \&\-mmmx  \-msse  \-msse2 \-msse3 \-mssse3 \-msse4.1 \-msse4.2 \-msse4 \-mavx 
703 \&\-mavx2 \-mavx512f \-mavx512pf \-mavx512er \-mavx512cd \-msha 
704 \&\-maes \-mpclmul \-mfsgsbase \-mrdrnd \-mf16c \-mfma \-mprefetchwt1 
705 \&\-mclflushopt \-mxsavec \-mxsaves 
706 \&\-msse4a \-m3dnow \-mpopcnt \-mabm \-mbmi \-mtbm \-mfma4 \-mxop \-mlzcnt 
707 \&\-mbmi2 \-mfxsr \-mxsave \-mxsaveopt \-mrtm \-mlwp \-mmpx \-mthreads 
708 \&\-mno\-align\-stringops  \-minline\-all\-stringops 
709 \&\-minline\-stringops\-dynamically \-mstringop\-strategy=\fR\fIalg\fR 
710 \&\fB\-mmemcpy\-strategy=\fR\fIstrategy\fR \fB\-mmemset\-strategy=\fR\fIstrategy\fR 
711 \&\fB\-mpush\-args  \-maccumulate\-outgoing\-args  \-m128bit\-long\-double 
712 \&\-m96bit\-long\-double \-mlong\-double\-64 \-mlong\-double\-80 \-mlong\-double\-128 
713 \&\-mregparm=\fR\fInum\fR  \fB\-msseregparm 
714 \&\-mveclibabi=\fR\fItype\fR \fB\-mvect8\-ret\-in\-mem 
715 \&\-mpc32 \-mpc64 \-mpc80 \-mstackrealign 
716 \&\-momit\-leaf\-frame\-pointer  \-mno\-red\-zone \-mno\-tls\-direct\-seg\-refs 
717 \&\-mcmodel=\fR\fIcode-model\fR \fB\-mabi=\fR\fIname\fR \fB\-maddress\-mode=\fR\fImode\fR 
718 \&\fB\-m32 \-m64 \-mx32 \-m16 \-mlarge\-data\-threshold=\fR\fInum\fR 
719 \&\fB\-msse2avx \-mfentry \-mrecord\-mcount \-mnop\-mcount \-m8bit\-idiv 
720 \&\-mavx256\-split\-unaligned\-load \-mavx256\-split\-unaligned\-store 
721 \&\-malign\-data=\fR\fItype\fR \fB\-mstack\-protector\-guard=\fR\fIguard\fR
722 .Sp
723 \&\fIi386 and x86\-64 Windows Options\fR
724 \&\fB\-mconsole \-mcygwin \-mno\-cygwin \-mdll 
725 \&\-mnop\-fun\-dllimport \-mthread 
726 \&\-municode \-mwin32 \-mwindows \-fno\-set\-stack\-executable\fR
727 .Sp
728 \&\fI\s-1IA\-64\s0 Options\fR
729 \&\fB\-mbig\-endian  \-mlittle\-endian  \-mgnu\-as  \-mgnu\-ld  \-mno\-pic 
730 \&\-mvolatile\-asm\-stop  \-mregister\-names  \-msdata \-mno\-sdata 
731 \&\-mconstant\-gp  \-mauto\-pic  \-mfused\-madd 
732 \&\-minline\-float\-divide\-min\-latency 
733 \&\-minline\-float\-divide\-max\-throughput 
734 \&\-mno\-inline\-float\-divide 
735 \&\-minline\-int\-divide\-min\-latency 
736 \&\-minline\-int\-divide\-max\-throughput  
737 \&\-mno\-inline\-int\-divide 
738 \&\-minline\-sqrt\-min\-latency \-minline\-sqrt\-max\-throughput 
739 \&\-mno\-inline\-sqrt 
740 \&\-mdwarf2\-asm \-mearly\-stop\-bits 
741 \&\-mfixed\-range=\fR\fIregister-range\fR \fB\-mtls\-size=\fR\fItls-size\fR 
742 \&\fB\-mtune=\fR\fIcpu-type\fR \fB\-milp32 \-mlp64 
743 \&\-msched\-br\-data\-spec \-msched\-ar\-data\-spec \-msched\-control\-spec 
744 \&\-msched\-br\-in\-data\-spec \-msched\-ar\-in\-data\-spec \-msched\-in\-control\-spec 
745 \&\-msched\-spec\-ldc \-msched\-spec\-control\-ldc 
746 \&\-msched\-prefer\-non\-data\-spec\-insns \-msched\-prefer\-non\-control\-spec\-insns 
747 \&\-msched\-stop\-bits\-after\-every\-cycle \-msched\-count\-spec\-in\-critical\-path 
748 \&\-msel\-sched\-dont\-check\-control\-spec \-msched\-fp\-mem\-deps\-zero\-cost 
749 \&\-msched\-max\-memory\-insns\-hard\-limit \-msched\-max\-memory\-insns=\fR\fImax-insns\fR
750 .Sp
751 \&\fI\s-1LM32\s0 Options\fR
752 \&\fB\-mbarrel\-shift\-enabled \-mdivide\-enabled \-mmultiply\-enabled 
753 \&\-msign\-extend\-enabled \-muser\-enabled\fR
754 .Sp
755 \&\fIM32R/D Options\fR
756 \&\fB\-m32r2 \-m32rx \-m32r 
757 \&\-mdebug 
758 \&\-malign\-loops \-mno\-align\-loops 
759 \&\-missue\-rate=\fR\fInumber\fR 
760 \&\fB\-mbranch\-cost=\fR\fInumber\fR 
761 \&\fB\-mmodel=\fR\fIcode-size-model-type\fR 
762 \&\fB\-msdata=\fR\fIsdata-type\fR 
763 \&\fB\-mno\-flush\-func \-mflush\-func=\fR\fIname\fR 
764 \&\fB\-mno\-flush\-trap \-mflush\-trap=\fR\fInumber\fR 
765 \&\fB\-G\fR \fInum\fR
766 .Sp
767 \&\fIM32C Options\fR
768 \&\fB\-mcpu=\fR\fIcpu\fR \fB\-msim \-memregs=\fR\fInumber\fR
769 .Sp
770 \&\fIM680x0 Options\fR
771 \&\fB\-march=\fR\fIarch\fR  \fB\-mcpu=\fR\fIcpu\fR  \fB\-mtune=\fR\fItune\fR 
772 \&\fB\-m68000  \-m68020  \-m68020\-40  \-m68020\-60  \-m68030  \-m68040 
773 \&\-m68060  \-mcpu32  \-m5200  \-m5206e  \-m528x  \-m5307  \-m5407 
774 \&\-mcfv4e  \-mbitfield  \-mno\-bitfield  \-mc68000  \-mc68020 
775 \&\-mnobitfield  \-mrtd  \-mno\-rtd  \-mdiv  \-mno\-div  \-mshort 
776 \&\-mno\-short  \-mhard\-float  \-m68881  \-msoft\-float  \-mpcrel 
777 \&\-malign\-int  \-mstrict\-align  \-msep\-data  \-mno\-sep\-data 
778 \&\-mshared\-library\-id=n  \-mid\-shared\-library  \-mno\-id\-shared\-library 
779 \&\-mxgot \-mno\-xgot\fR
780 .Sp
781 \&\fIMCore Options\fR
782 \&\fB\-mhardlit  \-mno\-hardlit  \-mdiv  \-mno\-div  \-mrelax\-immediates 
783 \&\-mno\-relax\-immediates  \-mwide\-bitfields  \-mno\-wide\-bitfields 
784 \&\-m4byte\-functions  \-mno\-4byte\-functions  \-mcallgraph\-data 
785 \&\-mno\-callgraph\-data  \-mslow\-bytes  \-mno\-slow\-bytes  \-mno\-lsim 
786 \&\-mlittle\-endian  \-mbig\-endian  \-m210  \-m340  \-mstack\-increment\fR
787 .Sp
788 \&\fIMeP Options\fR
789 \&\fB\-mabsdiff \-mall\-opts \-maverage \-mbased=\fR\fIn\fR \fB\-mbitops 
790 \&\-mc=\fR\fIn\fR \fB\-mclip \-mconfig=\fR\fIname\fR \fB\-mcop \-mcop32 \-mcop64 \-mivc2 
791 \&\-mdc \-mdiv \-meb \-mel \-mio\-volatile \-ml \-mleadz \-mm \-mminmax 
792 \&\-mmult \-mno\-opts \-mrepeat \-ms \-msatur \-msdram \-msim \-msimnovec \-mtf 
793 \&\-mtiny=\fR\fIn\fR
794 .Sp
795 \&\fIMicroBlaze Options\fR
796 \&\fB\-msoft\-float \-mhard\-float \-msmall\-divides \-mcpu=\fR\fIcpu\fR 
797 \&\fB\-mmemcpy \-mxl\-soft\-mul \-mxl\-soft\-div \-mxl\-barrel\-shift 
798 \&\-mxl\-pattern\-compare \-mxl\-stack\-check \-mxl\-gp\-opt \-mno\-clearbss 
799 \&\-mxl\-multiply\-high \-mxl\-float\-convert \-mxl\-float\-sqrt 
800 \&\-mbig\-endian \-mlittle\-endian \-mxl\-reorder \-mxl\-mode\-\fR\fIapp-model\fR
801 .Sp
802 \&\fI\s-1MIPS\s0 Options\fR
803 \&\fB\-EL  \-EB  \-march=\fR\fIarch\fR  \fB\-mtune=\fR\fIarch\fR 
804 \&\fB\-mips1  \-mips2  \-mips3  \-mips4  \-mips32  \-mips32r2  \-mips32r3  \-mips32r5 
805 \&\-mips32r6  \-mips64  \-mips64r2  \-mips64r3  \-mips64r5  \-mips64r6 
806 \&\-mips16  \-mno\-mips16  \-mflip\-mips16 
807 \&\-minterlink\-compressed \-mno\-interlink\-compressed 
808 \&\-minterlink\-mips16  \-mno\-interlink\-mips16 
809 \&\-mabi=\fR\fIabi\fR  \fB\-mabicalls  \-mno\-abicalls 
810 \&\-mshared  \-mno\-shared  \-mplt  \-mno\-plt  \-mxgot  \-mno\-xgot 
811 \&\-mgp32  \-mgp64  \-mfp32  \-mfpxx  \-mfp64  \-mhard\-float  \-msoft\-float 
812 \&\-mno\-float  \-msingle\-float  \-mdouble\-float 
813 \&\-modd\-spreg \-mno\-odd\-spreg 
814 \&\-mabs=\fR\fImode\fR  \fB\-mnan=\fR\fIencoding\fR 
815 \&\fB\-mdsp  \-mno\-dsp  \-mdspr2  \-mno\-dspr2 
816 \&\-mmcu \-mmno\-mcu 
817 \&\-meva \-mno\-eva 
818 \&\-mvirt \-mno\-virt 
819 \&\-mxpa \-mno\-xpa 
820 \&\-mmicromips \-mno\-micromips 
821 \&\-mfpu=\fR\fIfpu-type\fR 
822 \&\fB\-msmartmips  \-mno\-smartmips 
823 \&\-mpaired\-single  \-mno\-paired\-single  \-mdmx  \-mno\-mdmx 
824 \&\-mips3d  \-mno\-mips3d  \-mmt  \-mno\-mt  \-mllsc  \-mno\-llsc 
825 \&\-mlong64  \-mlong32  \-msym32  \-mno\-sym32 
826 \&\-G\fR\fInum\fR  \fB\-mlocal\-sdata  \-mno\-local\-sdata 
827 \&\-mextern\-sdata  \-mno\-extern\-sdata  \-mgpopt  \-mno\-gopt 
828 \&\-membedded\-data  \-mno\-embedded\-data 
829 \&\-muninit\-const\-in\-rodata  \-mno\-uninit\-const\-in\-rodata 
830 \&\-mcode\-readable=\fR\fIsetting\fR 
831 \&\fB\-msplit\-addresses  \-mno\-split\-addresses 
832 \&\-mexplicit\-relocs  \-mno\-explicit\-relocs 
833 \&\-mcheck\-zero\-division  \-mno\-check\-zero\-division 
834 \&\-mdivide\-traps  \-mdivide\-breaks 
835 \&\-mmemcpy  \-mno\-memcpy  \-mlong\-calls  \-mno\-long\-calls 
836 \&\-mmad \-mno\-mad \-mimadd \-mno\-imadd \-mfused\-madd  \-mno\-fused\-madd  \-nocpp 
837 \&\-mfix\-24k \-mno\-fix\-24k 
838 \&\-mfix\-r4000  \-mno\-fix\-r4000  \-mfix\-r4400  \-mno\-fix\-r4400 
839 \&\-mfix\-r10000 \-mno\-fix\-r10000  \-mfix\-rm7000 \-mno\-fix\-rm7000 
840 \&\-mfix\-vr4120  \-mno\-fix\-vr4120 
841 \&\-mfix\-vr4130  \-mno\-fix\-vr4130  \-mfix\-sb1  \-mno\-fix\-sb1 
842 \&\-mflush\-func=\fR\fIfunc\fR  \fB\-mno\-flush\-func 
843 \&\-mbranch\-cost=\fR\fInum\fR  \fB\-mbranch\-likely  \-mno\-branch\-likely 
844 \&\-mfp\-exceptions \-mno\-fp\-exceptions 
845 \&\-mvr4130\-align \-mno\-vr4130\-align \-msynci \-mno\-synci 
846 \&\-mrelax\-pic\-calls \-mno\-relax\-pic\-calls \-mmcount\-ra\-address\fR
847 .Sp
848 \&\fI\s-1MMIX\s0 Options\fR
849 \&\fB\-mlibfuncs  \-mno\-libfuncs  \-mepsilon  \-mno\-epsilon  \-mabi=gnu 
850 \&\-mabi=mmixware  \-mzero\-extend  \-mknuthdiv  \-mtoplevel\-symbols 
851 \&\-melf  \-mbranch\-predict  \-mno\-branch\-predict  \-mbase\-addresses 
852 \&\-mno\-base\-addresses  \-msingle\-exit  \-mno\-single\-exit\fR
853 .Sp
854 \&\fI\s-1MN10300\s0 Options\fR
855 \&\fB\-mmult\-bug  \-mno\-mult\-bug 
856 \&\-mno\-am33 \-mam33 \-mam33\-2 \-mam34 
857 \&\-mtune=\fR\fIcpu-type\fR 
858 \&\fB\-mreturn\-pointer\-on\-d0 
859 \&\-mno\-crt0  \-mrelax \-mliw \-msetlb\fR
860 .Sp
861 \&\fIMoxie Options\fR
862 \&\fB\-meb \-mel \-mmul.x \-mno\-crt0\fR
863 .Sp
864 \&\fI\s-1MSP430\s0 Options\fR
865 \&\fB\-msim \-masm\-hex \-mmcu= \-mcpu= \-mlarge \-msmall \-mrelax 
866 \&\-mhwmult= \-minrt\fR
867 .Sp
868 \&\fI\s-1NDS32\s0 Options\fR
869 \&\fB\-mbig\-endian \-mlittle\-endian 
870 \&\-mreduced\-regs \-mfull\-regs 
871 \&\-mcmov \-mno\-cmov 
872 \&\-mperf\-ext \-mno\-perf\-ext 
873 \&\-mv3push \-mno\-v3push 
874 \&\-m16bit \-mno\-16bit 
875 \&\-mgp\-direct \-mno\-gp\-direct 
876 \&\-misr\-vector\-size=\fR\fInum\fR 
877 \&\fB\-mcache\-block\-size=\fR\fInum\fR 
878 \&\fB\-march=\fR\fIarch\fR 
879 \&\fB\-mforce\-fp\-as\-gp \-mforbid\-fp\-as\-gp 
880 \&\-mex9 \-mctor\-dtor \-mrelax\fR
881 .Sp
882 \&\fINios \s-1II\s0 Options\fR
883 \&\fB\-G\fR \fInum\fR \fB\-mgpopt \-mno\-gpopt \-mel \-meb 
884 \&\-mno\-bypass\-cache \-mbypass\-cache 
885 \&\-mno\-cache\-volatile \-mcache\-volatile 
886 \&\-mno\-fast\-sw\-div \-mfast\-sw\-div 
887 \&\-mhw\-mul \-mno\-hw\-mul \-mhw\-mulx \-mno\-hw\-mulx \-mno\-hw\-div \-mhw\-div 
888 \&\-mcustom\-\fR\fIinsn\fR\fB=\fR\fIN\fR \fB\-mno\-custom\-\fR\fIinsn\fR 
889 \&\fB\-mcustom\-fpu\-cfg=\fR\fIname\fR 
890 \&\fB\-mhal \-msmallc \-msys\-crt0=\fR\fIname\fR \fB\-msys\-lib=\fR\fIname\fR
891 .Sp
892 \&\fI\s-1PDP\-11\s0 Options\fR
893 \&\fB\-mfpu  \-msoft\-float  \-mac0  \-mno\-ac0  \-m40  \-m45  \-m10 
894 \&\-mbcopy  \-mbcopy\-builtin  \-mint32  \-mno\-int16 
895 \&\-mint16  \-mno\-int32  \-mfloat32  \-mno\-float64 
896 \&\-mfloat64  \-mno\-float32  \-mabshi  \-mno\-abshi 
897 \&\-mbranch\-expensive  \-mbranch\-cheap 
898 \&\-munix\-asm  \-mdec\-asm\fR
899 .Sp
900 \&\fIpicoChip Options\fR
901 \&\fB\-mae=\fR\fIae_type\fR \fB\-mvliw\-lookahead=\fR\fIN\fR 
902 \&\fB\-msymbol\-as\-address \-mno\-inefficient\-warnings\fR
903 .Sp
904 \&\fIPowerPC Options\fR
905 See \s-1RS/6000\s0 and PowerPC Options.
906 .Sp
907 \&\fI\s-1RL78\s0 Options\fR
908 \&\fB\-msim \-mmul=none \-mmul=g13 \-mmul=rl78 
909 \&\-m64bit\-doubles \-m32bit\-doubles\fR
910 .Sp
911 \&\fI\s-1RS/6000\s0 and PowerPC Options\fR
912 \&\fB\-mcpu=\fR\fIcpu-type\fR 
913 \&\fB\-mtune=\fR\fIcpu-type\fR 
914 \&\fB\-mcmodel=\fR\fIcode-model\fR 
915 \&\fB\-mpowerpc64 
916 \&\-maltivec  \-mno\-altivec 
917 \&\-mpowerpc\-gpopt  \-mno\-powerpc\-gpopt 
918 \&\-mpowerpc\-gfxopt  \-mno\-powerpc\-gfxopt 
919 \&\-mmfcrf  \-mno\-mfcrf  \-mpopcntb  \-mno\-popcntb \-mpopcntd \-mno\-popcntd 
920 \&\-mfprnd  \-mno\-fprnd 
921 \&\-mcmpb \-mno\-cmpb \-mmfpgpr \-mno\-mfpgpr \-mhard\-dfp \-mno\-hard\-dfp 
922 \&\-mfull\-toc   \-mminimal\-toc  \-mno\-fp\-in\-toc  \-mno\-sum\-in\-toc 
923 \&\-m64  \-m32  \-mxl\-compat  \-mno\-xl\-compat  \-mpe 
924 \&\-malign\-power  \-malign\-natural 
925 \&\-msoft\-float  \-mhard\-float  \-mmultiple  \-mno\-multiple 
926 \&\-msingle\-float \-mdouble\-float \-msimple\-fpu 
927 \&\-mstring  \-mno\-string  \-mupdate  \-mno\-update 
928 \&\-mavoid\-indexed\-addresses  \-mno\-avoid\-indexed\-addresses 
929 \&\-mfused\-madd  \-mno\-fused\-madd  \-mbit\-align  \-mno\-bit\-align 
930 \&\-mstrict\-align  \-mno\-strict\-align  \-mrelocatable 
931 \&\-mno\-relocatable  \-mrelocatable\-lib  \-mno\-relocatable\-lib 
932 \&\-mtoc  \-mno\-toc  \-mlittle  \-mlittle\-endian  \-mbig  \-mbig\-endian 
933 \&\-mdynamic\-no\-pic  \-maltivec \-mswdiv  \-msingle\-pic\-base 
934 \&\-mprioritize\-restricted\-insns=\fR\fIpriority\fR 
935 \&\fB\-msched\-costly\-dep=\fR\fIdependence_type\fR 
936 \&\fB\-minsert\-sched\-nops=\fR\fIscheme\fR 
937 \&\fB\-mcall\-sysv  \-mcall\-netbsd 
938 \&\-maix\-struct\-return  \-msvr4\-struct\-return 
939 \&\-mabi=\fR\fIabi-type\fR \fB\-msecure\-plt \-mbss\-plt 
940 \&\-mblock\-move\-inline\-limit=\fR\fInum\fR 
941 \&\fB\-misel \-mno\-isel 
942 \&\-misel=yes  \-misel=no 
943 \&\-mspe \-mno\-spe 
944 \&\-mspe=yes  \-mspe=no 
945 \&\-mpaired 
946 \&\-mgen\-cell\-microcode \-mwarn\-cell\-microcode 
947 \&\-mvrsave \-mno\-vrsave 
948 \&\-mmulhw \-mno\-mulhw 
949 \&\-mdlmzb \-mno\-dlmzb 
950 \&\-mfloat\-gprs=yes  \-mfloat\-gprs=no \-mfloat\-gprs=single \-mfloat\-gprs=double 
951 \&\-mprototype  \-mno\-prototype 
952 \&\-msim  \-mmvme  \-mads  \-myellowknife  \-memb  \-msdata 
953 \&\-msdata=\fR\fIopt\fR  \fB\-mvxworks  \-G\fR \fInum\fR  \fB\-pthread 
954 \&\-mrecip \-mrecip=\fR\fIopt\fR \fB\-mno\-recip \-mrecip\-precision 
955 \&\-mno\-recip\-precision 
956 \&\-mveclibabi=\fR\fItype\fR \fB\-mfriz \-mno\-friz 
957 \&\-mpointers\-to\-nested\-functions \-mno\-pointers\-to\-nested\-functions 
958 \&\-msave\-toc\-indirect \-mno\-save\-toc\-indirect 
959 \&\-mpower8\-fusion \-mno\-mpower8\-fusion \-mpower8\-vector \-mno\-power8\-vector 
960 \&\-mcrypto \-mno\-crypto \-mdirect\-move \-mno\-direct\-move 
961 \&\-mquad\-memory \-mno\-quad\-memory 
962 \&\-mquad\-memory\-atomic \-mno\-quad\-memory\-atomic 
963 \&\-mcompat\-align\-parm \-mno\-compat\-align\-parm 
964 \&\-mupper\-regs\-df \-mno\-upper\-regs\-df \-mupper\-regs\-sf \-mno\-upper\-regs\-sf 
965 \&\-mupper\-regs \-mno\-upper\-regs\fR
966 .Sp
967 \&\fI\s-1RX\s0 Options\fR
968 \&\fB\-m64bit\-doubles  \-m32bit\-doubles  \-fpu  \-nofpu
969 \&\-mcpu=
970 \&\-mbig\-endian\-data \-mlittle\-endian\-data 
971 \&\-msmall\-data 
972 \&\-msim  \-mno\-sim
973 \&\-mas100\-syntax \-mno\-as100\-syntax
974 \&\-mrelax
975 \&\-mmax\-constant\-size=
976 \&\-mint\-register=
977 \&\-mpid
978 \&\-mno\-warn\-multiple\-fast\-interrupts
979 \&\-msave\-acc\-in\-interrupts\fR
980 .Sp
981 \&\fIS/390 and zSeries Options\fR
982 \&\fB\-mtune=\fR\fIcpu-type\fR  \fB\-march=\fR\fIcpu-type\fR 
983 \&\fB\-mhard\-float  \-msoft\-float  \-mhard\-dfp \-mno\-hard\-dfp 
984 \&\-mlong\-double\-64 \-mlong\-double\-128 
985 \&\-mbackchain  \-mno\-backchain \-mpacked\-stack  \-mno\-packed\-stack 
986 \&\-msmall\-exec  \-mno\-small\-exec  \-mmvcle \-mno\-mvcle 
987 \&\-m64  \-m31  \-mdebug  \-mno\-debug  \-mesa  \-mzarch 
988 \&\-mtpf\-trace \-mno\-tpf\-trace  \-mfused\-madd  \-mno\-fused\-madd 
989 \&\-mwarn\-framesize  \-mwarn\-dynamicstack  \-mstack\-size \-mstack\-guard 
990 \&\-mhotpatch[=\fR\fIhalfwords\fR\fB] \-mno\-hotpatch\fR
991 .Sp
992 \&\fIScore Options\fR
993 \&\fB\-meb \-mel 
994 \&\-mnhwloop 
995 \&\-muls 
996 \&\-mmac 
997 \&\-mscore5 \-mscore5u \-mscore7 \-mscore7d\fR
998 .Sp
999 \&\fI\s-1SH\s0 Options\fR
1000 \&\fB\-m1  \-m2  \-m2e 
1001 \&\-m2a\-nofpu \-m2a\-single\-only \-m2a\-single \-m2a 
1002 \&\-m3  \-m3e 
1003 \&\-m4\-nofpu  \-m4\-single\-only  \-m4\-single  \-m4 
1004 \&\-m4a\-nofpu \-m4a\-single\-only \-m4a\-single \-m4a \-m4al 
1005 \&\-m5\-64media  \-m5\-64media\-nofpu 
1006 \&\-m5\-32media  \-m5\-32media\-nofpu 
1007 \&\-m5\-compact  \-m5\-compact\-nofpu 
1008 \&\-mb  \-ml  \-mdalign  \-mrelax 
1009 \&\-mbigtable \-mfmovd \-mhitachi \-mrenesas \-mno\-renesas \-mnomacsave 
1010 \&\-mieee \-mno\-ieee \-mbitops  \-misize  \-minline\-ic_invalidate \-mpadstruct 
1011 \&\-mspace \-mprefergot  \-musermode \-multcost=\fR\fInumber\fR \fB\-mdiv=\fR\fIstrategy\fR 
1012 \&\fB\-mdivsi3_libfunc=\fR\fIname\fR \fB\-mfixed\-range=\fR\fIregister-range\fR 
1013 \&\fB\-mindexed\-addressing \-mgettrcost=\fR\fInumber\fR \fB\-mpt\-fixed 
1014 \&\-maccumulate\-outgoing\-args \-minvalid\-symbols 
1015 \&\-matomic\-model=\fR\fIatomic-model\fR 
1016 \&\fB\-mbranch\-cost=\fR\fInum\fR \fB\-mzdcbranch \-mno\-zdcbranch 
1017 \&\-mfused\-madd \-mno\-fused\-madd \-mfsca \-mno\-fsca \-mfsrra \-mno\-fsrra 
1018 \&\-mpretend\-cmove \-mtas\fR
1019 .Sp
1020 \&\fISolaris 2 Options\fR
1021 \&\fB\-mclear\-hwcap \-mno\-clear\-hwcap \-mimpure\-text  \-mno\-impure\-text 
1022 \&\-pthreads \-pthread\fR
1023 .Sp
1024 \&\fI\s-1SPARC\s0 Options\fR
1025 \&\fB\-mcpu=\fR\fIcpu-type\fR 
1026 \&\fB\-mtune=\fR\fIcpu-type\fR 
1027 \&\fB\-mcmodel=\fR\fIcode-model\fR 
1028 \&\fB\-mmemory\-model=\fR\fImem-model\fR 
1029 \&\fB\-m32  \-m64  \-mapp\-regs  \-mno\-app\-regs 
1030 \&\-mfaster\-structs  \-mno\-faster\-structs  \-mflat  \-mno\-flat 
1031 \&\-mfpu  \-mno\-fpu  \-mhard\-float  \-msoft\-float 
1032 \&\-mhard\-quad\-float  \-msoft\-quad\-float 
1033 \&\-mstack\-bias  \-mno\-stack\-bias 
1034 \&\-munaligned\-doubles  \-mno\-unaligned\-doubles 
1035 \&\-muser\-mode  \-mno\-user\-mode 
1036 \&\-mv8plus  \-mno\-v8plus  \-mvis  \-mno\-vis 
1037 \&\-mvis2  \-mno\-vis2  \-mvis3  \-mno\-vis3 
1038 \&\-mcbcond \-mno\-cbcond 
1039 \&\-mfmaf  \-mno\-fmaf  \-mpopc  \-mno\-popc 
1040 \&\-mfix\-at697f \-mfix\-ut699\fR
1041 .Sp
1042 \&\fI\s-1SPU\s0 Options\fR
1043 \&\fB\-mwarn\-reloc \-merror\-reloc 
1044 \&\-msafe\-dma \-munsafe\-dma 
1045 \&\-mbranch\-hints 
1046 \&\-msmall\-mem \-mlarge\-mem \-mstdmain 
1047 \&\-mfixed\-range=\fR\fIregister-range\fR 
1048 \&\fB\-mea32 \-mea64 
1049 \&\-maddress\-space\-conversion \-mno\-address\-space\-conversion 
1050 \&\-mcache\-size=\fR\fIcache-size\fR 
1051 \&\fB\-matomic\-updates \-mno\-atomic\-updates\fR
1052 .Sp
1053 \&\fISystem V Options\fR
1054 \&\fB\-Qy  \-Qn  \-YP,\fR\fIpaths\fR  \fB\-Ym,\fR\fIdir\fR
1055 .Sp
1056 \&\fITILE-Gx Options\fR
1057 \&\fB\-mcpu=CPU \-m32 \-m64 \-mbig\-endian \-mlittle\-endian 
1058 \&\-mcmodel=\fR\fIcode-model\fR
1059 .Sp
1060 \&\fITILEPro Options\fR
1061 \&\fB\-mcpu=\fR\fIcpu\fR \fB\-m32\fR
1062 .Sp
1063 \&\fIV850 Options\fR
1064 \&\fB\-mlong\-calls  \-mno\-long\-calls  \-mep  \-mno\-ep 
1065 \&\-mprolog\-function  \-mno\-prolog\-function  \-mspace 
1066 \&\-mtda=\fR\fIn\fR  \fB\-msda=\fR\fIn\fR  \fB\-mzda=\fR\fIn\fR 
1067 \&\fB\-mapp\-regs  \-mno\-app\-regs 
1068 \&\-mdisable\-callt  \-mno\-disable\-callt 
1069 \&\-mv850e2v3 \-mv850e2 \-mv850e1 \-mv850es 
1070 \&\-mv850e \-mv850 \-mv850e3v5 
1071 \&\-mloop 
1072 \&\-mrelax 
1073 \&\-mlong\-jumps 
1074 \&\-msoft\-float 
1075 \&\-mhard\-float 
1076 \&\-mgcc\-abi 
1077 \&\-mrh850\-abi 
1078 \&\-mbig\-switch\fR
1079 .Sp
1080 \&\fI\s-1VAX\s0 Options\fR
1081 \&\fB\-mg  \-mgnu  \-munix\fR
1082 .Sp
1083 \&\fIVisium Options\fR
1084 \&\fB\-mdebug \-msim \-mfpu \-mno\-fpu \-mhard\-float \-msoft\-float 
1085 \&\-mcpu=\fR\fIcpu-type\fR \fB\-mtune=\fR\fIcpu-type\fR \fB\-msv\-mode \-muser\-mode\fR
1086 .Sp
1087 \&\fI\s-1VMS\s0 Options\fR
1088 \&\fB\-mvms\-return\-codes \-mdebug\-main=\fR\fIprefix\fR \fB\-mmalloc64 
1089 \&\-mpointer\-size=\fR\fIsize\fR
1090 .Sp
1091 \&\fIVxWorks Options\fR
1092 \&\fB\-mrtp  \-non\-static  \-Bstatic  \-Bdynamic 
1093 \&\-Xbind\-lazy  \-Xbind\-now\fR
1094 .Sp
1095 \&\fIx86\-64 Options\fR
1096 See i386 and x86\-64 Options.
1097 .Sp
1098 \&\fIXstormy16 Options\fR
1099 \&\fB\-msim\fR
1100 .Sp
1101 \&\fIXtensa Options\fR
1102 \&\fB\-mconst16 \-mno\-const16 
1103 \&\-mfused\-madd  \-mno\-fused\-madd 
1104 \&\-mforce\-no\-pic 
1105 \&\-mserialize\-volatile  \-mno\-serialize\-volatile 
1106 \&\-mtext\-section\-literals  \-mno\-text\-section\-literals 
1107 \&\-mtarget\-align  \-mno\-target\-align 
1108 \&\-mlongcalls  \-mno\-longcalls\fR
1109 .Sp
1110 \&\fIzSeries Options\fR
1111 See S/390 and zSeries Options.
1112 .IP "\fICode Generation Options\fR" 4
1113 .IX Item "Code Generation Options"
1114 \&\fB\-fcall\-saved\-\fR\fIreg\fR  \fB\-fcall\-used\-\fR\fIreg\fR 
1115 \&\fB\-ffixed\-\fR\fIreg\fR  \fB\-fexceptions 
1116 \&\-fnon\-call\-exceptions  \-fdelete\-dead\-exceptions  \-funwind\-tables 
1117 \&\-fasynchronous\-unwind\-tables 
1118 \&\-fno\-gnu\-unique 
1119 \&\-finhibit\-size\-directive  \-finstrument\-functions 
1120 \&\-finstrument\-functions\-exclude\-function\-list=\fR\fIsym\fR\fB,\fR\fIsym\fR\fB,... 
1121 \&\-finstrument\-functions\-exclude\-file\-list=\fR\fIfile\fR\fB,\fR\fIfile\fR\fB,... 
1122 \&\-fno\-common  \-fno\-ident 
1123 \&\-fpcc\-struct\-return  \-fpic  \-fPIC \-fpie \-fPIE 
1124 \&\-fno\-jump\-tables 
1125 \&\-frecord\-gcc\-switches 
1126 \&\-freg\-struct\-return  \-fshort\-enums 
1127 \&\-fshort\-double  \-fshort\-wchar 
1128 \&\-fverbose\-asm  \-fpack\-struct[=\fR\fIn\fR\fB]  \-fstack\-check 
1129 \&\-fstack\-limit\-register=\fR\fIreg\fR  \fB\-fstack\-limit\-symbol=\fR\fIsym\fR 
1130 \&\fB\-fno\-stack\-limit \-fsplit\-stack 
1131 \&\-fleading\-underscore  \-ftls\-model=\fR\fImodel\fR 
1132 \&\fB\-fstack\-reuse=\fR\fIreuse_level\fR 
1133 \&\fB\-ftrapv  \-fwrapv  \-fbounds\-check 
1134 \&\-fvisibility=\fR[\fBdefault\fR|\fBinternal\fR|\fBhidden\fR|\fBprotected\fR] 
1135 \&\fB\-fstrict\-volatile\-bitfields \-fsync\-libcalls\fR
1136 .SS "Options Controlling the Kind of Output"
1137 .IX Subsection "Options Controlling the Kind of Output"
1138 Compilation can involve up to four stages: preprocessing, compilation
1139 proper, assembly and linking, always in that order.  \s-1GCC\s0 is capable of
1140 preprocessing and compiling several files either into several
1141 assembler input files, or into one assembler input file; then each
1142 assembler input file produces an object file, and linking combines all
1143 the object files (those newly compiled, and those specified as input)
1144 into an executable file.
1145 .PP
1146 For any given input file, the file name suffix determines what kind of
1147 compilation is done:
1148 .IP "\fIfile\fR\fB.c\fR" 4
1149 .IX Item "file.c"
1150 C source code that must be preprocessed.
1151 .IP "\fIfile\fR\fB.i\fR" 4
1152 .IX Item "file.i"
1153 C source code that should not be preprocessed.
1154 .IP "\fIfile\fR\fB.ii\fR" 4
1155 .IX Item "file.ii"
1156 \&\*(C+ source code that should not be preprocessed.
1157 .IP "\fIfile\fR\fB.m\fR" 4
1158 .IX Item "file.m"
1159 Objective-C source code.  Note that you must link with the \fIlibobjc\fR
1160 library to make an Objective-C program work.
1161 .IP "\fIfile\fR\fB.mi\fR" 4
1162 .IX Item "file.mi"
1163 Objective-C source code that should not be preprocessed.
1164 .IP "\fIfile\fR\fB.mm\fR" 4
1165 .IX Item "file.mm"
1166 .PD 0
1167 .IP "\fIfile\fR\fB.M\fR" 4
1168 .IX Item "file.M"
1169 .PD
1170 Objective\-\*(C+ source code.  Note that you must link with the \fIlibobjc\fR
1171 library to make an Objective\-\*(C+ program work.  Note that \fB.M\fR refers
1172 to a literal capital M.
1173 .IP "\fIfile\fR\fB.mii\fR" 4
1174 .IX Item "file.mii"
1175 Objective\-\*(C+ source code that should not be preprocessed.
1176 .IP "\fIfile\fR\fB.h\fR" 4
1177 .IX Item "file.h"
1178 C, \*(C+, Objective-C or Objective\-\*(C+ header file to be turned into a
1179 precompiled header (default), or C, \*(C+ header file to be turned into an
1180 Ada spec (via the \fB\-fdump\-ada\-spec\fR switch).
1181 .IP "\fIfile\fR\fB.cc\fR" 4
1182 .IX Item "file.cc"
1183 .PD 0
1184 .IP "\fIfile\fR\fB.cp\fR" 4
1185 .IX Item "file.cp"
1186 .IP "\fIfile\fR\fB.cxx\fR" 4
1187 .IX Item "file.cxx"
1188 .IP "\fIfile\fR\fB.cpp\fR" 4
1189 .IX Item "file.cpp"
1190 .IP "\fIfile\fR\fB.CPP\fR" 4
1191 .IX Item "file.CPP"
1192 .IP "\fIfile\fR\fB.c++\fR" 4
1193 .IX Item "file.c++"
1194 .IP "\fIfile\fR\fB.C\fR" 4
1195 .IX Item "file.C"
1196 .PD
1197 \&\*(C+ source code that must be preprocessed.  Note that in \fB.cxx\fR,
1198 the last two letters must both be literally \fBx\fR.  Likewise,
1199 \&\fB.C\fR refers to a literal capital C.
1200 .IP "\fIfile\fR\fB.mm\fR" 4
1201 .IX Item "file.mm"
1202 .PD 0
1203 .IP "\fIfile\fR\fB.M\fR" 4
1204 .IX Item "file.M"
1205 .PD
1206 Objective\-\*(C+ source code that must be preprocessed.
1207 .IP "\fIfile\fR\fB.mii\fR" 4
1208 .IX Item "file.mii"
1209 Objective\-\*(C+ source code that should not be preprocessed.
1210 .IP "\fIfile\fR\fB.hh\fR" 4
1211 .IX Item "file.hh"
1212 .PD 0
1213 .IP "\fIfile\fR\fB.H\fR" 4
1214 .IX Item "file.H"
1215 .IP "\fIfile\fR\fB.hp\fR" 4
1216 .IX Item "file.hp"
1217 .IP "\fIfile\fR\fB.hxx\fR" 4
1218 .IX Item "file.hxx"
1219 .IP "\fIfile\fR\fB.hpp\fR" 4
1220 .IX Item "file.hpp"
1221 .IP "\fIfile\fR\fB.HPP\fR" 4
1222 .IX Item "file.HPP"
1223 .IP "\fIfile\fR\fB.h++\fR" 4
1224 .IX Item "file.h++"
1225 .IP "\fIfile\fR\fB.tcc\fR" 4
1226 .IX Item "file.tcc"
1227 .PD
1228 \&\*(C+ header file to be turned into a precompiled header or Ada spec.
1229 .IP "\fIfile\fR\fB.f\fR" 4
1230 .IX Item "file.f"
1231 .PD 0
1232 .IP "\fIfile\fR\fB.for\fR" 4
1233 .IX Item "file.for"
1234 .IP "\fIfile\fR\fB.ftn\fR" 4
1235 .IX Item "file.ftn"
1236 .PD
1237 Fixed form Fortran source code that should not be preprocessed.
1238 .IP "\fIfile\fR\fB.F\fR" 4
1239 .IX Item "file.F"
1240 .PD 0
1241 .IP "\fIfile\fR\fB.FOR\fR" 4
1242 .IX Item "file.FOR"
1243 .IP "\fIfile\fR\fB.fpp\fR" 4
1244 .IX Item "file.fpp"
1245 .IP "\fIfile\fR\fB.FPP\fR" 4
1246 .IX Item "file.FPP"
1247 .IP "\fIfile\fR\fB.FTN\fR" 4
1248 .IX Item "file.FTN"
1249 .PD
1250 Fixed form Fortran source code that must be preprocessed (with the traditional
1251 preprocessor).
1252 .IP "\fIfile\fR\fB.f90\fR" 4
1253 .IX Item "file.f90"
1254 .PD 0
1255 .IP "\fIfile\fR\fB.f95\fR" 4
1256 .IX Item "file.f95"
1257 .IP "\fIfile\fR\fB.f03\fR" 4
1258 .IX Item "file.f03"
1259 .IP "\fIfile\fR\fB.f08\fR" 4
1260 .IX Item "file.f08"
1261 .PD
1262 Free form Fortran source code that should not be preprocessed.
1263 .IP "\fIfile\fR\fB.F90\fR" 4
1264 .IX Item "file.F90"
1265 .PD 0
1266 .IP "\fIfile\fR\fB.F95\fR" 4
1267 .IX Item "file.F95"
1268 .IP "\fIfile\fR\fB.F03\fR" 4
1269 .IX Item "file.F03"
1270 .IP "\fIfile\fR\fB.F08\fR" 4
1271 .IX Item "file.F08"
1272 .PD
1273 Free form Fortran source code that must be preprocessed (with the
1274 traditional preprocessor).
1275 .IP "\fIfile\fR\fB.go\fR" 4
1276 .IX Item "file.go"
1277 Go source code.
1278 .IP "\fIfile\fR\fB.ads\fR" 4
1279 .IX Item "file.ads"
1280 Ada source code file that contains a library unit declaration (a
1281 declaration of a package, subprogram, or generic, or a generic
1282 instantiation), or a library unit renaming declaration (a package,
1283 generic, or subprogram renaming declaration).  Such files are also
1284 called \fIspecs\fR.
1285 .IP "\fIfile\fR\fB.adb\fR" 4
1286 .IX Item "file.adb"
1287 Ada source code file containing a library unit body (a subprogram or
1288 package body).  Such files are also called \fIbodies\fR.
1289 .IP "\fIfile\fR\fB.s\fR" 4
1290 .IX Item "file.s"
1291 Assembler code.
1292 .IP "\fIfile\fR\fB.S\fR" 4
1293 .IX Item "file.S"
1294 .PD 0
1295 .IP "\fIfile\fR\fB.sx\fR" 4
1296 .IX Item "file.sx"
1297 .PD
1298 Assembler code that must be preprocessed.
1299 .IP "\fIother\fR" 4
1300 .IX Item "other"
1301 An object file to be fed straight into linking.
1302 Any file name with no recognized suffix is treated this way.
1303 .PP
1304 You can specify the input language explicitly with the \fB\-x\fR option:
1305 .IP "\fB\-x\fR \fIlanguage\fR" 4
1306 .IX Item "-x language"
1307 Specify explicitly the \fIlanguage\fR for the following input files
1308 (rather than letting the compiler choose a default based on the file
1309 name suffix).  This option applies to all following input files until
1310 the next \fB\-x\fR option.  Possible values for \fIlanguage\fR are:
1311 .Sp
1312 .Vb 9
1313 \&        c  c\-header  cpp\-output
1314 \&        c++  c++\-header  c++\-cpp\-output
1315 \&        objective\-c  objective\-c\-header  objective\-c\-cpp\-output
1316 \&        objective\-c++ objective\-c++\-header objective\-c++\-cpp\-output
1317 \&        assembler  assembler\-with\-cpp
1318 \&        ada
1319 \&        f77  f77\-cpp\-input f95  f95\-cpp\-input
1320 \&        go
1321 \&        java
1322 .Ve
1323 .IP "\fB\-x none\fR" 4
1324 .IX Item "-x none"
1325 Turn off any specification of a language, so that subsequent files are
1326 handled according to their file name suffixes (as they are if \fB\-x\fR
1327 has not been used at all).
1328 .IP "\fB\-pass\-exit\-codes\fR" 4
1329 .IX Item "-pass-exit-codes"
1330 Normally the \fBgcc\fR program exits with the code of 1 if any
1331 phase of the compiler returns a non-success return code.  If you specify
1332 \&\fB\-pass\-exit\-codes\fR, the \fBgcc\fR program instead returns with
1333 the numerically highest error produced by any phase returning an error
1334 indication.  The C, \*(C+, and Fortran front ends return 4 if an internal
1335 compiler error is encountered.
1336 .PP
1337 If you only want some of the stages of compilation, you can use
1338 \&\fB\-x\fR (or filename suffixes) to tell \fBgcc\fR where to start, and
1339 one of the options \fB\-c\fR, \fB\-S\fR, or \fB\-E\fR to say where
1340 \&\fBgcc\fR is to stop.  Note that some combinations (for example,
1341 \&\fB\-x cpp-output \-E\fR) instruct \fBgcc\fR to do nothing at all.
1342 .IP "\fB\-c\fR" 4
1343 .IX Item "-c"
1344 Compile or assemble the source files, but do not link.  The linking
1345 stage simply is not done.  The ultimate output is in the form of an
1346 object file for each source file.
1347 .Sp
1348 By default, the object file name for a source file is made by replacing
1349 the suffix \fB.c\fR, \fB.i\fR, \fB.s\fR, etc., with \fB.o\fR.
1350 .Sp
1351 Unrecognized input files, not requiring compilation or assembly, are
1352 ignored.
1353 .IP "\fB\-S\fR" 4
1354 .IX Item "-S"
1355 Stop after the stage of compilation proper; do not assemble.  The output
1356 is in the form of an assembler code file for each non-assembler input
1357 file specified.
1358 .Sp
1359 By default, the assembler file name for a source file is made by
1360 replacing the suffix \fB.c\fR, \fB.i\fR, etc., with \fB.s\fR.
1361 .Sp
1362 Input files that don't require compilation are ignored.
1363 .IP "\fB\-E\fR" 4
1364 .IX Item "-E"
1365 Stop after the preprocessing stage; do not run the compiler proper.  The
1366 output is in the form of preprocessed source code, which is sent to the
1367 standard output.
1368 .Sp
1369 Input files that don't require preprocessing are ignored.
1370 .IP "\fB\-o\fR \fIfile\fR" 4
1371 .IX Item "-o file"
1372 Place output in file \fIfile\fR.  This applies to whatever
1373 sort of output is being produced, whether it be an executable file,
1374 an object file, an assembler file or preprocessed C code.
1375 .Sp
1376 If \fB\-o\fR is not specified, the default is to put an executable
1377 file in \fIa.out\fR, the object file for
1378 \&\fI\fIsource\fI.\fIsuffix\fI\fR in \fI\fIsource\fI.o\fR, its
1379 assembler file in \fI\fIsource\fI.s\fR, a precompiled header file in
1380 \&\fI\fIsource\fI.\fIsuffix\fI.gch\fR, and all preprocessed C source on
1381 standard output.
1382 .IP "\fB\-v\fR" 4
1383 .IX Item "-v"
1384 Print (on standard error output) the commands executed to run the stages
1385 of compilation.  Also print the version number of the compiler driver
1386 program and of the preprocessor and the compiler proper.
1387 .IP "\fB\-###\fR" 4
1388 .IX Item "-###"
1389 Like \fB\-v\fR except the commands are not executed and arguments
1390 are quoted unless they contain only alphanumeric characters or \f(CW\*(C`./\-_\*(C'\fR.
1391 This is useful for shell scripts to capture the driver-generated command lines.
1392 .IP "\fB\-pipe\fR" 4
1393 .IX Item "-pipe"
1394 Use pipes rather than temporary files for communication between the
1395 various stages of compilation.  This fails to work on some systems where
1396 the assembler is unable to read from a pipe; but the \s-1GNU\s0 assembler has
1397 no trouble.
1398 .IP "\fB\-\-help\fR" 4
1399 .IX Item "--help"
1400 Print (on the standard output) a description of the command-line options
1401 understood by \fBgcc\fR.  If the \fB\-v\fR option is also specified
1402 then \fB\-\-help\fR is also passed on to the various processes
1403 invoked by \fBgcc\fR, so that they can display the command-line options
1404 they accept.  If the \fB\-Wextra\fR option has also been specified
1405 (prior to the \fB\-\-help\fR option), then command-line options that
1406 have no documentation associated with them are also displayed.
1407 .IP "\fB\-\-target\-help\fR" 4
1408 .IX Item "--target-help"
1409 Print (on the standard output) a description of target-specific command-line
1410 options for each tool.  For some targets extra target-specific
1411 information may also be printed.
1412 .IP "\fB\-\-help={\fR\fIclass\fR|[\fB^\fR]\fIqualifier\fR\fB}\fR[\fB,...\fR]" 4
1413 .IX Item "--help={class|[^]qualifier}[,...]"
1414 Print (on the standard output) a description of the command-line
1415 options understood by the compiler that fit into all specified classes
1416 and qualifiers.  These are the supported classes:
1417 .RS 4
1418 .IP "\fBoptimizers\fR" 4
1419 .IX Item "optimizers"
1420 Display all of the optimization options supported by the
1421 compiler.
1422 .IP "\fBwarnings\fR" 4
1423 .IX Item "warnings"
1424 Display all of the options controlling warning messages
1425 produced by the compiler.
1426 .IP "\fBtarget\fR" 4
1427 .IX Item "target"
1428 Display target-specific options.  Unlike the
1429 \&\fB\-\-target\-help\fR option however, target-specific options of the
1430 linker and assembler are not displayed.  This is because those
1431 tools do not currently support the extended \fB\-\-help=\fR syntax.
1432 .IP "\fBparams\fR" 4
1433 .IX Item "params"
1434 Display the values recognized by the \fB\-\-param\fR
1435 option.
1436 .IP "\fIlanguage\fR" 4
1437 .IX Item "language"
1438 Display the options supported for \fIlanguage\fR, where
1439 \&\fIlanguage\fR is the name of one of the languages supported in this
1440 version of \s-1GCC\s0.
1441 .IP "\fBcommon\fR" 4
1442 .IX Item "common"
1443 Display the options that are common to all languages.
1444 .RE
1445 .RS 4
1446 .Sp
1447 These are the supported qualifiers:
1448 .IP "\fBundocumented\fR" 4
1449 .IX Item "undocumented"
1450 Display only those options that are undocumented.
1451 .IP "\fBjoined\fR" 4
1452 .IX Item "joined"
1453 Display options taking an argument that appears after an equal
1454 sign in the same continuous piece of text, such as:
1455 \&\fB\-\-help=target\fR.
1456 .IP "\fBseparate\fR" 4
1457 .IX Item "separate"
1458 Display options taking an argument that appears as a separate word
1459 following the original option, such as: \fB\-o output-file\fR.
1460 .RE
1461 .RS 4
1462 .Sp
1463 Thus for example to display all the undocumented target-specific
1464 switches supported by the compiler, use:
1465 .Sp
1466 .Vb 1
1467 \&        \-\-help=target,undocumented
1468 .Ve
1469 .Sp
1470 The sense of a qualifier can be inverted by prefixing it with the
1471 \&\fB^\fR character, so for example to display all binary warning
1472 options (i.e., ones that are either on or off and that do not take an
1473 argument) that have a description, use:
1474 .Sp
1475 .Vb 1
1476 \&        \-\-help=warnings,^joined,^undocumented
1477 .Ve
1478 .Sp
1479 The argument to \fB\-\-help=\fR should not consist solely of inverted
1480 qualifiers.
1481 .Sp
1482 Combining several classes is possible, although this usually
1483 restricts the output so much that there is nothing to display.  One
1484 case where it does work, however, is when one of the classes is
1485 \&\fItarget\fR.  For example, to display all the target-specific
1486 optimization options, use:
1487 .Sp
1488 .Vb 1
1489 \&        \-\-help=target,optimizers
1490 .Ve
1491 .Sp
1492 The \fB\-\-help=\fR option can be repeated on the command line.  Each
1493 successive use displays its requested class of options, skipping
1494 those that have already been displayed.
1495 .Sp
1496 If the \fB\-Q\fR option appears on the command line before the
1497 \&\fB\-\-help=\fR option, then the descriptive text displayed by
1498 \&\fB\-\-help=\fR is changed.  Instead of describing the displayed
1499 options, an indication is given as to whether the option is enabled,
1500 disabled or set to a specific value (assuming that the compiler
1501 knows this at the point where the \fB\-\-help=\fR option is used).
1502 .Sp
1503 Here is a truncated example from the \s-1ARM\s0 port of \fBgcc\fR:
1504 .Sp
1505 .Vb 5
1506 \&          % gcc \-Q \-mabi=2 \-\-help=target \-c
1507 \&          The following options are target specific:
1508 \&          \-mabi=                                2
1509 \&          \-mabort\-on\-noreturn                   [disabled]
1510 \&          \-mapcs                                [disabled]
1511 .Ve
1512 .Sp
1513 The output is sensitive to the effects of previous command-line
1514 options, so for example it is possible to find out which optimizations
1515 are enabled at \fB\-O2\fR by using:
1516 .Sp
1517 .Vb 1
1518 \&        \-Q \-O2 \-\-help=optimizers
1519 .Ve
1520 .Sp
1521 Alternatively you can discover which binary optimizations are enabled
1522 by \fB\-O3\fR by using:
1523 .Sp
1524 .Vb 3
1525 \&        gcc \-c \-Q \-O3 \-\-help=optimizers > /tmp/O3\-opts
1526 \&        gcc \-c \-Q \-O2 \-\-help=optimizers > /tmp/O2\-opts
1527 \&        diff /tmp/O2\-opts /tmp/O3\-opts | grep enabled
1528 .Ve
1529 .RE
1530 .IP "\fB\-no\-canonical\-prefixes\fR" 4
1531 .IX Item "-no-canonical-prefixes"
1532 Do not expand any symbolic links, resolve references to \fB/../\fR
1533 or \fB/./\fR, or make the path absolute when generating a relative
1534 prefix.
1535 .IP "\fB\-\-version\fR" 4
1536 .IX Item "--version"
1537 Display the version number and copyrights of the invoked \s-1GCC\s0.
1538 .IP "\fB\-wrapper\fR" 4
1539 .IX Item "-wrapper"
1540 Invoke all subcommands under a wrapper program.  The name of the
1541 wrapper program and its parameters are passed as a comma separated
1542 list.
1543 .Sp
1544 .Vb 1
1545 \&        gcc \-c t.c \-wrapper gdb,\-\-args
1546 .Ve
1547 .Sp
1548 This invokes all subprograms of \fBgcc\fR under
1549 \&\fBgdb \-\-args\fR, thus the invocation of \fBcc1\fR is
1550 \&\fBgdb \-\-args cc1 ...\fR.
1551 .IP "\fB\-fplugin=\fR\fIname\fR\fB.so\fR" 4
1552 .IX Item "-fplugin=name.so"
1553 Load the plugin code in file \fIname\fR.so, assumed to be a
1554 shared object to be dlopen'd by the compiler.  The base name of
1555 the shared object file is used to identify the plugin for the
1556 purposes of argument parsing (See
1557 \&\fB\-fplugin\-arg\-\fR\fIname\fR\fB\-\fR\fIkey\fR\fB=\fR\fIvalue\fR below).
1558 Each plugin should define the callback functions specified in the
1559 Plugins \s-1API\s0.
1560 .IP "\fB\-fplugin\-arg\-\fR\fIname\fR\fB\-\fR\fIkey\fR\fB=\fR\fIvalue\fR" 4
1561 .IX Item "-fplugin-arg-name-key=value"
1562 Define an argument called \fIkey\fR with a value of \fIvalue\fR
1563 for the plugin called \fIname\fR.
1564 .IP "\fB\-fdump\-ada\-spec\fR[\fB\-slim\fR]" 4
1565 .IX Item "-fdump-ada-spec[-slim]"
1566 For C and \*(C+ source and include files, generate corresponding Ada specs.
1567 .IP "\fB\-fada\-spec\-parent=\fR\fIunit\fR" 4
1568 .IX Item "-fada-spec-parent=unit"
1569 In conjunction with \fB\-fdump\-ada\-spec\fR[\fB\-slim\fR] above, generate
1570 Ada specs as child units of parent \fIunit\fR.
1571 .IP "\fB\-fdump\-go\-spec=\fR\fIfile\fR" 4
1572 .IX Item "-fdump-go-spec=file"
1573 For input files in any language, generate corresponding Go
1574 declarations in \fIfile\fR.  This generates Go \f(CW\*(C`const\*(C'\fR,
1575 \&\f(CW\*(C`type\*(C'\fR, \f(CW\*(C`var\*(C'\fR, and \f(CW\*(C`func\*(C'\fR declarations which may be a
1576 useful way to start writing a Go interface to code written in some
1577 other language.
1578 .IP "\fB@\fR\fIfile\fR" 4
1579 .IX Item "@file"
1580 Read command-line options from \fIfile\fR.  The options read are
1581 inserted in place of the original @\fIfile\fR option.  If \fIfile\fR
1582 does not exist, or cannot be read, then the option will be treated
1583 literally, and not removed.
1584 .Sp
1585 Options in \fIfile\fR are separated by whitespace.  A whitespace
1586 character may be included in an option by surrounding the entire
1587 option in either single or double quotes.  Any character (including a
1588 backslash) may be included by prefixing the character to be included
1589 with a backslash.  The \fIfile\fR may itself contain additional
1590 @\fIfile\fR options; any such options will be processed recursively.
1591 .SS "Compiling \*(C+ Programs"
1592 .IX Subsection "Compiling  Programs"
1593 \&\*(C+ source files conventionally use one of the suffixes \fB.C\fR,
1594 \&\fB.cc\fR, \fB.cpp\fR, \fB.CPP\fR, \fB.c++\fR, \fB.cp\fR, or
1595 \&\fB.cxx\fR; \*(C+ header files often use \fB.hh\fR, \fB.hpp\fR,
1596 \&\fB.H\fR, or (for shared template code) \fB.tcc\fR; and
1597 preprocessed \*(C+ files use the suffix \fB.ii\fR.  \s-1GCC\s0 recognizes
1598 files with these names and compiles them as \*(C+ programs even if you
1599 call the compiler the same way as for compiling C programs (usually
1600 with the name \fBgcc\fR).
1601 .PP
1602 However, the use of \fBgcc\fR does not add the \*(C+ library.
1603 \&\fBg++\fR is a program that calls \s-1GCC\s0 and automatically specifies linking
1604 against the \*(C+ library.  It treats \fB.c\fR,
1605 \&\fB.h\fR and \fB.i\fR files as \*(C+ source files instead of C source
1606 files unless \fB\-x\fR is used.  This program is also useful when
1607 precompiling a C header file with a \fB.h\fR extension for use in \*(C+
1608 compilations.  On many systems, \fBg++\fR is also installed with
1609 the name \fBc++\fR.
1610 .PP
1611 When you compile \*(C+ programs, you may specify many of the same
1612 command-line options that you use for compiling programs in any
1613 language; or command-line options meaningful for C and related
1614 languages; or options that are meaningful only for \*(C+ programs.
1615 .SS "Options Controlling C Dialect"
1616 .IX Subsection "Options Controlling C Dialect"
1617 The following options control the dialect of C (or languages derived
1618 from C, such as \*(C+, Objective-C and Objective\-\*(C+) that the compiler
1619 accepts:
1620 .IP "\fB\-ansi\fR" 4
1621 .IX Item "-ansi"
1622 In C mode, this is equivalent to \fB\-std=c90\fR. In \*(C+ mode, it is
1623 equivalent to \fB\-std=c++98\fR.
1624 .Sp
1625 This turns off certain features of \s-1GCC\s0 that are incompatible with \s-1ISO\s0
1626 C90 (when compiling C code), or of standard \*(C+ (when compiling \*(C+ code),
1627 such as the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR keywords, and
1628 predefined macros such as \f(CW\*(C`unix\*(C'\fR and \f(CW\*(C`vax\*(C'\fR that identify the
1629 type of system you are using.  It also enables the undesirable and
1630 rarely used \s-1ISO\s0 trigraph feature.  For the C compiler,
1631 it disables recognition of \*(C+ style \fB//\fR comments as well as
1632 the \f(CW\*(C`inline\*(C'\fR keyword.
1633 .Sp
1634 The alternate keywords \f(CW\*(C`_\|_asm_\|_\*(C'\fR, \f(CW\*(C`_\|_extension_\|_\*(C'\fR,
1635 \&\f(CW\*(C`_\|_inline_\|_\*(C'\fR and \f(CW\*(C`_\|_typeof_\|_\*(C'\fR continue to work despite
1636 \&\fB\-ansi\fR.  You would not want to use them in an \s-1ISO\s0 C program, of
1637 course, but it is useful to put them in header files that might be included
1638 in compilations done with \fB\-ansi\fR.  Alternate predefined macros
1639 such as \f(CW\*(C`_\|_unix_\|_\*(C'\fR and \f(CW\*(C`_\|_vax_\|_\*(C'\fR are also available, with or
1640 without \fB\-ansi\fR.
1641 .Sp
1642 The \fB\-ansi\fR option does not cause non-ISO programs to be
1643 rejected gratuitously.  For that, \fB\-Wpedantic\fR is required in
1644 addition to \fB\-ansi\fR.
1645 .Sp
1646 The macro \f(CW\*(C`_\|_STRICT_ANSI_\|_\*(C'\fR is predefined when the \fB\-ansi\fR
1647 option is used.  Some header files may notice this macro and refrain
1648 from declaring certain functions or defining certain macros that the
1649 \&\s-1ISO\s0 standard doesn't call for; this is to avoid interfering with any
1650 programs that might use these names for other things.
1651 .Sp
1652 Functions that are normally built in but do not have semantics
1653 defined by \s-1ISO\s0 C (such as \f(CW\*(C`alloca\*(C'\fR and \f(CW\*(C`ffs\*(C'\fR) are not built-in
1654 functions when \fB\-ansi\fR is used.
1655 .IP "\fB\-std=\fR" 4
1656 .IX Item "-std="
1657 Determine the language standard.   This option
1658 is currently only supported when compiling C or \*(C+.
1659 .Sp
1660 The compiler can accept several base standards, such as \fBc90\fR or
1661 \&\fBc++98\fR, and \s-1GNU\s0 dialects of those standards, such as
1662 \&\fBgnu90\fR or \fBgnu++98\fR.  When a base standard is specified, the
1663 compiler accepts all programs following that standard plus those
1664 using \s-1GNU\s0 extensions that do not contradict it.  For example,
1665 \&\fB\-std=c90\fR turns off certain features of \s-1GCC\s0 that are
1666 incompatible with \s-1ISO\s0 C90, such as the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR
1667 keywords, but not other \s-1GNU\s0 extensions that do not have a meaning in
1668 \&\s-1ISO\s0 C90, such as omitting the middle term of a \f(CW\*(C`?:\*(C'\fR
1669 expression. On the other hand, when a \s-1GNU\s0 dialect of a standard is
1670 specified, all features supported by the compiler are enabled, even when
1671 those features change the meaning of the base standard.  As a result, some
1672 strict-conforming programs may be rejected.  The particular standard
1673 is used by \fB\-Wpedantic\fR to identify which features are \s-1GNU\s0
1674 extensions given that version of the standard. For example
1675 \&\fB\-std=gnu90 \-Wpedantic\fR warns about \*(C+ style \fB//\fR
1676 comments, while \fB\-std=gnu99 \-Wpedantic\fR does not.
1677 .Sp
1678 A value for this option must be provided; possible values are
1679 .RS 4
1680 .IP "\fBc90\fR" 4
1681 .IX Item "c90"
1682 .PD 0
1683 .IP "\fBc89\fR" 4
1684 .IX Item "c89"
1685 .IP "\fBiso9899:1990\fR" 4
1686 .IX Item "iso9899:1990"
1687 .PD
1688 Support all \s-1ISO\s0 C90 programs (certain \s-1GNU\s0 extensions that conflict
1689 with \s-1ISO\s0 C90 are disabled). Same as \fB\-ansi\fR for C code.
1690 .IP "\fBiso9899:199409\fR" 4
1691 .IX Item "iso9899:199409"
1692 \&\s-1ISO\s0 C90 as modified in amendment 1.
1693 .IP "\fBc99\fR" 4
1694 .IX Item "c99"
1695 .PD 0
1696 .IP "\fBc9x\fR" 4
1697 .IX Item "c9x"
1698 .IP "\fBiso9899:1999\fR" 4
1699 .IX Item "iso9899:1999"
1700 .IP "\fBiso9899:199x\fR" 4
1701 .IX Item "iso9899:199x"
1702 .PD
1703 \&\s-1ISO\s0 C99.  This standard is substantially completely supported, modulo
1704 bugs and floating-point issues
1705 (mainly but not entirely relating to optional C99 features from
1706 Annexes F and G).  See
1707 <\fBhttp://gcc.gnu.org/c99status.html\fR> for more information.  The
1708 names \fBc9x\fR and \fBiso9899:199x\fR are deprecated.
1709 .IP "\fBc11\fR" 4
1710 .IX Item "c11"
1711 .PD 0
1712 .IP "\fBc1x\fR" 4
1713 .IX Item "c1x"
1714 .IP "\fBiso9899:2011\fR" 4
1715 .IX Item "iso9899:2011"
1716 .PD
1717 \&\s-1ISO\s0 C11, the 2011 revision of the \s-1ISO\s0 C standard.  This standard is
1718 substantially completely supported, modulo bugs, floating-point issues
1719 (mainly but not entirely relating to optional C11 features from
1720 Annexes F and G) and the optional Annexes K (Bounds-checking
1721 interfaces) and L (Analyzability).  The name \fBc1x\fR is deprecated.
1722 .IP "\fBgnu90\fR" 4
1723 .IX Item "gnu90"
1724 .PD 0
1725 .IP "\fBgnu89\fR" 4
1726 .IX Item "gnu89"
1727 .PD
1728 \&\s-1GNU\s0 dialect of \s-1ISO\s0 C90 (including some C99 features).
1729 .IP "\fBgnu99\fR" 4
1730 .IX Item "gnu99"
1731 .PD 0
1732 .IP "\fBgnu9x\fR" 4
1733 .IX Item "gnu9x"
1734 .PD
1735 \&\s-1GNU\s0 dialect of \s-1ISO\s0 C99.  The name \fBgnu9x\fR is deprecated.
1736 .IP "\fBgnu11\fR" 4
1737 .IX Item "gnu11"
1738 .PD 0
1739 .IP "\fBgnu1x\fR" 4
1740 .IX Item "gnu1x"
1741 .PD
1742 \&\s-1GNU\s0 dialect of \s-1ISO\s0 C11.  This is the default for C code.
1743 The name \fBgnu1x\fR is deprecated.
1744 .IP "\fBc++98\fR" 4
1745 .IX Item "c++98"
1746 .PD 0
1747 .IP "\fBc++03\fR" 4
1748 .IX Item "c++03"
1749 .PD
1750 The 1998 \s-1ISO\s0 \*(C+ standard plus the 2003 technical corrigendum and some
1751 additional defect reports. Same as \fB\-ansi\fR for \*(C+ code.
1752 .IP "\fBgnu++98\fR" 4
1753 .IX Item "gnu++98"
1754 .PD 0
1755 .IP "\fBgnu++03\fR" 4
1756 .IX Item "gnu++03"
1757 .PD
1758 \&\s-1GNU\s0 dialect of \fB\-std=c++98\fR.  This is the default for
1759 \&\*(C+ code.
1760 .IP "\fBc++11\fR" 4
1761 .IX Item "c++11"
1762 .PD 0
1763 .IP "\fBc++0x\fR" 4
1764 .IX Item "c++0x"
1765 .PD
1766 The 2011 \s-1ISO\s0 \*(C+ standard plus amendments.
1767 The name \fBc++0x\fR is deprecated.
1768 .IP "\fBgnu++11\fR" 4
1769 .IX Item "gnu++11"
1770 .PD 0
1771 .IP "\fBgnu++0x\fR" 4
1772 .IX Item "gnu++0x"
1773 .PD
1774 \&\s-1GNU\s0 dialect of \fB\-std=c++11\fR.
1775 The name \fBgnu++0x\fR is deprecated.
1776 .IP "\fBc++14\fR" 4
1777 .IX Item "c++14"
1778 .PD 0
1779 .IP "\fBc++1y\fR" 4
1780 .IX Item "c++1y"
1781 .PD
1782 The 2014 \s-1ISO\s0 \*(C+ standard plus amendments.
1783 The name \fBc++1y\fR is deprecated.
1784 .IP "\fBgnu++14\fR" 4
1785 .IX Item "gnu++14"
1786 .PD 0
1787 .IP "\fBgnu++1y\fR" 4
1788 .IX Item "gnu++1y"
1789 .PD
1790 \&\s-1GNU\s0 dialect of \fB\-std=c++14\fR.
1791 The name \fBgnu++1y\fR is deprecated.
1792 .IP "\fBc++1z\fR" 4
1793 .IX Item "c++1z"
1794 The next revision of the \s-1ISO\s0 \*(C+ standard, tentatively planned for
1795 2017.  Support is highly experimental, and will almost certainly
1796 change in incompatible ways in future releases.
1797 .IP "\fBgnu++1z\fR" 4
1798 .IX Item "gnu++1z"
1799 \&\s-1GNU\s0 dialect of \fB\-std=c++1z\fR.  Support is highly experimental,
1800 and will almost certainly change in incompatible ways in future
1801 releases.
1802 .RE
1803 .RS 4
1804 .RE
1805 .IP "\fB\-fgnu89\-inline\fR" 4
1806 .IX Item "-fgnu89-inline"
1807 The option \fB\-fgnu89\-inline\fR tells \s-1GCC\s0 to use the traditional
1808 \&\s-1GNU\s0 semantics for \f(CW\*(C`inline\*(C'\fR functions when in C99 mode.
1809   This option
1810 is accepted and ignored by \s-1GCC\s0 versions 4.1.3 up to but not including
1811 4.3.  In \s-1GCC\s0 versions 4.3 and later it changes the behavior of \s-1GCC\s0 in
1812 C99 mode.  Using this option is roughly equivalent to adding the
1813 \&\f(CW\*(C`gnu_inline\*(C'\fR function attribute to all inline functions.
1814 .Sp
1815 The option \fB\-fno\-gnu89\-inline\fR explicitly tells \s-1GCC\s0 to use the
1816 C99 semantics for \f(CW\*(C`inline\*(C'\fR when in C99 or gnu99 mode (i.e., it
1817 specifies the default behavior).  This option was first supported in
1818 \&\s-1GCC\s0 4.3.  This option is not supported in \fB\-std=c90\fR or
1819 \&\fB\-std=gnu90\fR mode.
1820 .Sp
1821 The preprocessor macros \f(CW\*(C`_\|_GNUC_GNU_INLINE_\|_\*(C'\fR and
1822 \&\f(CW\*(C`_\|_GNUC_STDC_INLINE_\|_\*(C'\fR may be used to check which semantics are
1823 in effect for \f(CW\*(C`inline\*(C'\fR functions.
1824 .IP "\fB\-aux\-info\fR \fIfilename\fR" 4
1825 .IX Item "-aux-info filename"
1826 Output to the given filename prototyped declarations for all functions
1827 declared and/or defined in a translation unit, including those in header
1828 files.  This option is silently ignored in any language other than C.
1829 .Sp
1830 Besides declarations, the file indicates, in comments, the origin of
1831 each declaration (source file and line), whether the declaration was
1832 implicit, prototyped or unprototyped (\fBI\fR, \fBN\fR for new or
1833 \&\fBO\fR for old, respectively, in the first character after the line
1834 number and the colon), and whether it came from a declaration or a
1835 definition (\fBC\fR or \fBF\fR, respectively, in the following
1836 character).  In the case of function definitions, a K&R\-style list of
1837 arguments followed by their declarations is also provided, inside
1838 comments, after the declaration.
1839 .IP "\fB\-fallow\-parameterless\-variadic\-functions\fR" 4
1840 .IX Item "-fallow-parameterless-variadic-functions"
1841 Accept variadic functions without named parameters.
1842 .Sp
1843 Although it is possible to define such a function, this is not very
1844 useful as it is not possible to read the arguments.  This is only
1845 supported for C as this construct is allowed by \*(C+.
1846 .IP "\fB\-fno\-asm\fR" 4
1847 .IX Item "-fno-asm"
1848 Do not recognize \f(CW\*(C`asm\*(C'\fR, \f(CW\*(C`inline\*(C'\fR or \f(CW\*(C`typeof\*(C'\fR as a
1849 keyword, so that code can use these words as identifiers.  You can use
1850 the keywords \f(CW\*(C`_\|_asm_\|_\*(C'\fR, \f(CW\*(C`_\|_inline_\|_\*(C'\fR and \f(CW\*(C`_\|_typeof_\|_\*(C'\fR
1851 instead.  \fB\-ansi\fR implies \fB\-fno\-asm\fR.
1852 .Sp
1853 In \*(C+, this switch only affects the \f(CW\*(C`typeof\*(C'\fR keyword, since
1854 \&\f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`inline\*(C'\fR are standard keywords.  You may want to
1855 use the \fB\-fno\-gnu\-keywords\fR flag instead, which has the same
1856 effect.  In C99 mode (\fB\-std=c99\fR or \fB\-std=gnu99\fR), this
1857 switch only affects the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR keywords, since
1858 \&\f(CW\*(C`inline\*(C'\fR is a standard keyword in \s-1ISO\s0 C99.
1859 .IP "\fB\-fno\-builtin\fR" 4
1860 .IX Item "-fno-builtin"
1861 .PD 0
1862 .IP "\fB\-fno\-builtin\-\fR\fIfunction\fR" 4
1863 .IX Item "-fno-builtin-function"
1864 .PD
1865 Don't recognize built-in functions that do not begin with
1866 \&\fB_\|_builtin_\fR as prefix.
1867 .Sp
1868 \&\s-1GCC\s0 normally generates special code to handle certain built-in functions
1869 more efficiently; for instance, calls to \f(CW\*(C`alloca\*(C'\fR may become single
1870 instructions which adjust the stack directly, and calls to \f(CW\*(C`memcpy\*(C'\fR
1871 may become inline copy loops.  The resulting code is often both smaller
1872 and faster, but since the function calls no longer appear as such, you
1873 cannot set a breakpoint on those calls, nor can you change the behavior
1874 of the functions by linking with a different library.  In addition,
1875 when a function is recognized as a built-in function, \s-1GCC\s0 may use
1876 information about that function to warn about problems with calls to
1877 that function, or to generate more efficient code, even if the
1878 resulting code still contains calls to that function.  For example,
1879 warnings are given with \fB\-Wformat\fR for bad calls to
1880 \&\f(CW\*(C`printf\*(C'\fR when \f(CW\*(C`printf\*(C'\fR is built in and \f(CW\*(C`strlen\*(C'\fR is
1881 known not to modify global memory.
1882 .Sp
1883 With the \fB\-fno\-builtin\-\fR\fIfunction\fR option
1884 only the built-in function \fIfunction\fR is
1885 disabled.  \fIfunction\fR must not begin with \fB_\|_builtin_\fR.  If a
1886 function is named that is not built-in in this version of \s-1GCC\s0, this
1887 option is ignored.  There is no corresponding
1888 \&\fB\-fbuiltin\-\fR\fIfunction\fR option; if you wish to enable
1889 built-in functions selectively when using \fB\-fno\-builtin\fR or
1890 \&\fB\-ffreestanding\fR, you may define macros such as:
1891 .Sp
1892 .Vb 2
1893 \&        #define abs(n)          _\|_builtin_abs ((n))
1894 \&        #define strcpy(d, s)    _\|_builtin_strcpy ((d), (s))
1895 .Ve
1896 .IP "\fB\-fhosted\fR" 4
1897 .IX Item "-fhosted"
1898 Assert that compilation targets a hosted environment.  This implies
1899 \&\fB\-fbuiltin\fR.  A hosted environment is one in which the
1900 entire standard library is available, and in which \f(CW\*(C`main\*(C'\fR has a return
1901 type of \f(CW\*(C`int\*(C'\fR.  Examples are nearly everything except a kernel.
1902 This is equivalent to \fB\-fno\-freestanding\fR.
1903 .IP "\fB\-ffreestanding\fR" 4
1904 .IX Item "-ffreestanding"
1905 Assert that compilation targets a freestanding environment.  This
1906 implies \fB\-fno\-builtin\fR.  A freestanding environment
1907 is one in which the standard library may not exist, and program startup may
1908 not necessarily be at \f(CW\*(C`main\*(C'\fR.  The most obvious example is an \s-1OS\s0 kernel.
1909 This is equivalent to \fB\-fno\-hosted\fR.
1910 .IP "\fB\-fopenmp\fR" 4
1911 .IX Item "-fopenmp"
1912 Enable handling of OpenMP directives \f(CW\*(C`#pragma omp\*(C'\fR in C/\*(C+ and
1913 \&\f(CW\*(C`!$omp\*(C'\fR in Fortran.  When \fB\-fopenmp\fR is specified, the
1914 compiler generates parallel code according to the OpenMP Application
1915 Program Interface v4.0 <\fBhttp://www.openmp.org/\fR>.  This option
1916 implies \fB\-pthread\fR, and thus is only supported on targets that
1917 have support for \fB\-pthread\fR. \fB\-fopenmp\fR implies
1918 \&\fB\-fopenmp\-simd\fR.
1919 .IP "\fB\-fopenmp\-simd\fR" 4
1920 .IX Item "-fopenmp-simd"
1921 Enable handling of OpenMP's \s-1SIMD\s0 directives with \f(CW\*(C`#pragma omp\*(C'\fR
1922 in C/\*(C+ and \f(CW\*(C`!$omp\*(C'\fR in Fortran. Other OpenMP directives
1923 are ignored.
1924 .IP "\fB\-fcilkplus\fR" 4
1925 .IX Item "-fcilkplus"
1926 Enable the usage of Cilk Plus language extension features for C/\*(C+.
1927 When the option \fB\-fcilkplus\fR is specified, enable the usage of
1928 the Cilk Plus Language extension features for C/\*(C+.  The present
1929 implementation follows \s-1ABI\s0 version 1.2.  This is an experimental
1930 feature that is only partially complete, and whose interface may
1931 change in future versions of \s-1GCC\s0 as the official specification
1932 changes.  Currently, all features but \f(CW\*(C`_Cilk_for\*(C'\fR have been
1933 implemented.
1934 .IP "\fB\-fgnu\-tm\fR" 4
1935 .IX Item "-fgnu-tm"
1936 When the option \fB\-fgnu\-tm\fR is specified, the compiler
1937 generates code for the Linux variant of Intel's current Transactional
1938 Memory \s-1ABI\s0 specification document (Revision 1.1, May 6 2009).  This is
1939 an experimental feature whose interface may change in future versions
1940 of \s-1GCC\s0, as the official specification changes.  Please note that not
1941 all architectures are supported for this feature.
1942 .Sp
1943 For more information on \s-1GCC\s0's support for transactional memory,
1944 .Sp
1945 Note that the transactional memory feature is not supported with
1946 non-call exceptions (\fB\-fnon\-call\-exceptions\fR).
1947 .IP "\fB\-fms\-extensions\fR" 4
1948 .IX Item "-fms-extensions"
1949 Accept some non-standard constructs used in Microsoft header files.
1950 .Sp
1951 In \*(C+ code, this allows member names in structures to be similar
1952 to previous types declarations.
1953 .Sp
1954 .Vb 4
1955 \&        typedef int UOW;
1956 \&        struct ABC {
1957 \&          UOW UOW;
1958 \&        };
1959 .Ve
1960 .Sp
1961 Some cases of unnamed fields in structures and unions are only
1962 accepted with this option.
1963 .Sp
1964 Note that this option is off for all targets but i?86 and x86_64
1965 targets using ms-abi.
1966 .IP "\fB\-fplan9\-extensions\fR" 4
1967 .IX Item "-fplan9-extensions"
1968 Accept some non-standard constructs used in Plan 9 code.
1969 .Sp
1970 This enables \fB\-fms\-extensions\fR, permits passing pointers to
1971 structures with anonymous fields to functions that expect pointers to
1972 elements of the type of the field, and permits referring to anonymous
1973 fields declared using a typedef.    This is only
1974 supported for C, not \*(C+.
1975 .IP "\fB\-trigraphs\fR" 4
1976 .IX Item "-trigraphs"
1977 Support \s-1ISO\s0 C trigraphs.  The \fB\-ansi\fR option (and \fB\-std\fR
1978 options for strict \s-1ISO\s0 C conformance) implies \fB\-trigraphs\fR.
1979 .IP "\fB\-traditional\fR" 4
1980 .IX Item "-traditional"
1981 .PD 0
1982 .IP "\fB\-traditional\-cpp\fR" 4
1983 .IX Item "-traditional-cpp"
1984 .PD
1985 Formerly, these options caused \s-1GCC\s0 to attempt to emulate a pre-standard
1986 C compiler.  They are now only supported with the \fB\-E\fR switch.
1987 The preprocessor continues to support a pre-standard mode.  See the \s-1GNU\s0
1988 \&\s-1CPP\s0 manual for details.
1989 .IP "\fB\-fcond\-mismatch\fR" 4
1990 .IX Item "-fcond-mismatch"
1991 Allow conditional expressions with mismatched types in the second and
1992 third arguments.  The value of such an expression is void.  This option
1993 is not supported for \*(C+.
1994 .IP "\fB\-flax\-vector\-conversions\fR" 4
1995 .IX Item "-flax-vector-conversions"
1996 Allow implicit conversions between vectors with differing numbers of
1997 elements and/or incompatible element types.  This option should not be
1998 used for new code.
1999 .IP "\fB\-funsigned\-char\fR" 4
2000 .IX Item "-funsigned-char"
2001 Let the type \f(CW\*(C`char\*(C'\fR be unsigned, like \f(CW\*(C`unsigned char\*(C'\fR.
2002 .Sp
2003 Each kind of machine has a default for what \f(CW\*(C`char\*(C'\fR should
2004 be.  It is either like \f(CW\*(C`unsigned char\*(C'\fR by default or like
2005 \&\f(CW\*(C`signed char\*(C'\fR by default.
2006 .Sp
2007 Ideally, a portable program should always use \f(CW\*(C`signed char\*(C'\fR or
2008 \&\f(CW\*(C`unsigned char\*(C'\fR when it depends on the signedness of an object.
2009 But many programs have been written to use plain \f(CW\*(C`char\*(C'\fR and
2010 expect it to be signed, or expect it to be unsigned, depending on the
2011 machines they were written for.  This option, and its inverse, let you
2012 make such a program work with the opposite default.
2013 .Sp
2014 The type \f(CW\*(C`char\*(C'\fR is always a distinct type from each of
2015 \&\f(CW\*(C`signed char\*(C'\fR or \f(CW\*(C`unsigned char\*(C'\fR, even though its behavior
2016 is always just like one of those two.
2017 .IP "\fB\-fsigned\-char\fR" 4
2018 .IX Item "-fsigned-char"
2019 Let the type \f(CW\*(C`char\*(C'\fR be signed, like \f(CW\*(C`signed char\*(C'\fR.
2020 .Sp
2021 Note that this is equivalent to \fB\-fno\-unsigned\-char\fR, which is
2022 the negative form of \fB\-funsigned\-char\fR.  Likewise, the option
2023 \&\fB\-fno\-signed\-char\fR is equivalent to \fB\-funsigned\-char\fR.
2024 .IP "\fB\-fsigned\-bitfields\fR" 4
2025 .IX Item "-fsigned-bitfields"
2026 .PD 0
2027 .IP "\fB\-funsigned\-bitfields\fR" 4
2028 .IX Item "-funsigned-bitfields"
2029 .IP "\fB\-fno\-signed\-bitfields\fR" 4
2030 .IX Item "-fno-signed-bitfields"
2031 .IP "\fB\-fno\-unsigned\-bitfields\fR" 4
2032 .IX Item "-fno-unsigned-bitfields"
2033 .PD
2034 These options control whether a bit-field is signed or unsigned, when the
2035 declaration does not use either \f(CW\*(C`signed\*(C'\fR or \f(CW\*(C`unsigned\*(C'\fR.  By
2036 default, such a bit-field is signed, because this is consistent: the
2037 basic integer types such as \f(CW\*(C`int\*(C'\fR are signed types.
2038 .SS "Options Controlling \*(C+ Dialect"
2039 .IX Subsection "Options Controlling  Dialect"
2040 This section describes the command-line options that are only meaningful
2041 for \*(C+ programs.  You can also use most of the \s-1GNU\s0 compiler options
2042 regardless of what language your program is in.  For example, you
2043 might compile a file \fIfirstClass.C\fR like this:
2044 .PP
2045 .Vb 1
2046 \&        g++ \-g \-frepo \-O \-c firstClass.C
2047 .Ve
2048 .PP
2049 In this example, only \fB\-frepo\fR is an option meant
2050 only for \*(C+ programs; you can use the other options with any
2051 language supported by \s-1GCC\s0.
2052 .PP
2053 Here is a list of options that are \fIonly\fR for compiling \*(C+ programs:
2054 .IP "\fB\-fabi\-version=\fR\fIn\fR" 4
2055 .IX Item "-fabi-version=n"
2056 Use version \fIn\fR of the \*(C+ \s-1ABI\s0.  The default is version 0.
2057 .Sp
2058 Version 0 refers to the version conforming most closely to
2059 the \*(C+ \s-1ABI\s0 specification.  Therefore, the \s-1ABI\s0 obtained using version 0
2060 will change in different versions of G++ as \s-1ABI\s0 bugs are fixed.
2061 .Sp
2062 Version 1 is the version of the \*(C+ \s-1ABI\s0 that first appeared in G++ 3.2.
2063 .Sp
2064 Version 2 is the version of the \*(C+ \s-1ABI\s0 that first appeared in G++
2065 3.4, and was the default through G++ 4.9.
2066 .Sp
2067 Version 3 corrects an error in mangling a constant address as a
2068 template argument.
2069 .Sp
2070 Version 4, which first appeared in G++ 4.5, implements a standard
2071 mangling for vector types.
2072 .Sp
2073 Version 5, which first appeared in G++ 4.6, corrects the mangling of
2074 attribute const/volatile on function pointer types, decltype of a
2075 plain decl, and use of a function parameter in the declaration of
2076 another parameter.
2077 .Sp
2078 Version 6, which first appeared in G++ 4.7, corrects the promotion
2079 behavior of \*(C+11 scoped enums and the mangling of template argument
2080 packs, const/static_cast, prefix ++ and \-\-, and a class scope function
2081 used as a template argument.
2082 .Sp
2083 Version 7, which first appeared in G++ 4.8, that treats nullptr_t as a
2084 builtin type and corrects the mangling of lambdas in default argument
2085 scope.
2086 .Sp
2087 Version 8, which first appeared in G++ 4.9, corrects the substitution
2088 behavior of function types with function-cv-qualifiers.
2089 .Sp
2090 See also \fB\-Wabi\fR.
2091 .IP "\fB\-fabi\-compat\-version=\fR\fIn\fR" 4
2092 .IX Item "-fabi-compat-version=n"
2093 Starting with \s-1GCC\s0 4.5, on targets that support strong aliases, G++
2094 works around mangling changes by creating an alias with the correct
2095 mangled name when defining a symbol with an incorrect mangled name.
2096 This switch specifies which \s-1ABI\s0 version to use for the alias.
2097 .Sp
2098 With \fB\-fabi\-version=0\fR (the default), this defaults to 2.  If
2099 another \s-1ABI\s0 version is explicitly selected, this defaults to 0.
2100 .Sp
2101 The compatibility version is also set by \fB\-Wabi=\fR\fIn\fR.
2102 .IP "\fB\-fno\-access\-control\fR" 4
2103 .IX Item "-fno-access-control"
2104 Turn off all access checking.  This switch is mainly useful for working
2105 around bugs in the access control code.
2106 .IP "\fB\-fcheck\-new\fR" 4
2107 .IX Item "-fcheck-new"
2108 Check that the pointer returned by \f(CW\*(C`operator new\*(C'\fR is non-null
2109 before attempting to modify the storage allocated.  This check is
2110 normally unnecessary because the \*(C+ standard specifies that
2111 \&\f(CW\*(C`operator new\*(C'\fR only returns \f(CW0\fR if it is declared
2112 \&\f(CW\*(C`throw()\*(C'\fR, in which case the compiler always checks the
2113 return value even without this option.  In all other cases, when
2114 \&\f(CW\*(C`operator new\*(C'\fR has a non-empty exception specification, memory
2115 exhaustion is signalled by throwing \f(CW\*(C`std::bad_alloc\*(C'\fR.  See also
2116 \&\fBnew (nothrow)\fR.
2117 .IP "\fB\-fconstexpr\-depth=\fR\fIn\fR" 4
2118 .IX Item "-fconstexpr-depth=n"
2119 Set the maximum nested evaluation depth for \*(C+11 constexpr functions
2120 to \fIn\fR.  A limit is needed to detect endless recursion during
2121 constant expression evaluation.  The minimum specified by the standard
2122 is 512.
2123 .IP "\fB\-fdeduce\-init\-list\fR" 4
2124 .IX Item "-fdeduce-init-list"
2125 Enable deduction of a template type parameter as
2126 \&\f(CW\*(C`std::initializer_list\*(C'\fR from a brace-enclosed initializer list, i.e.
2127 .Sp
2128 .Vb 4
2129 \&        template <class T> auto forward(T t) \-> decltype (realfn (t))
2130 \&        {
2131 \&          return realfn (t);
2132 \&        }
2133 \&        
2134 \&        void f()
2135 \&        {
2136 \&          forward({1,2}); // call forward<std::initializer_list<int>>
2137 \&        }
2138 .Ve
2139 .Sp
2140 This deduction was implemented as a possible extension to the
2141 originally proposed semantics for the \*(C+11 standard, but was not part
2142 of the final standard, so it is disabled by default.  This option is
2143 deprecated, and may be removed in a future version of G++.
2144 .IP "\fB\-ffriend\-injection\fR" 4
2145 .IX Item "-ffriend-injection"
2146 Inject friend functions into the enclosing namespace, so that they are
2147 visible outside the scope of the class in which they are declared.
2148 Friend functions were documented to work this way in the old Annotated
2149 \&\*(C+ Reference Manual, and versions of G++ before 4.1 always worked
2150 that way.  However, in \s-1ISO\s0 \*(C+ a friend function that is not declared
2151 in an enclosing scope can only be found using argument dependent
2152 lookup.  This option causes friends to be injected as they were in
2153 earlier releases.
2154 .Sp
2155 This option is for compatibility, and may be removed in a future
2156 release of G++.
2157 .IP "\fB\-fno\-elide\-constructors\fR" 4
2158 .IX Item "-fno-elide-constructors"
2159 The \*(C+ standard allows an implementation to omit creating a temporary
2160 that is only used to initialize another object of the same type.
2161 Specifying this option disables that optimization, and forces G++ to
2162 call the copy constructor in all cases.
2163 .IP "\fB\-fno\-enforce\-eh\-specs\fR" 4
2164 .IX Item "-fno-enforce-eh-specs"
2165 Don't generate code to check for violation of exception specifications
2166 at run time.  This option violates the \*(C+ standard, but may be useful
2167 for reducing code size in production builds, much like defining
2168 \&\f(CW\*(C`NDEBUG\*(C'\fR.  This does not give user code permission to throw
2169 exceptions in violation of the exception specifications; the compiler
2170 still optimizes based on the specifications, so throwing an
2171 unexpected exception results in undefined behavior at run time.
2172 .IP "\fB\-fextern\-tls\-init\fR" 4
2173 .IX Item "-fextern-tls-init"
2174 .PD 0
2175 .IP "\fB\-fno\-extern\-tls\-init\fR" 4
2176 .IX Item "-fno-extern-tls-init"
2177 .PD
2178 The \*(C+11 and OpenMP standards allow \f(CW\*(C`thread_local\*(C'\fR and
2179 \&\f(CW\*(C`threadprivate\*(C'\fR variables to have dynamic (runtime)
2180 initialization.  To support this, any use of such a variable goes
2181 through a wrapper function that performs any necessary initialization.
2182 When the use and definition of the variable are in the same
2183 translation unit, this overhead can be optimized away, but when the
2184 use is in a different translation unit there is significant overhead
2185 even if the variable doesn't actually need dynamic initialization.  If
2186 the programmer can be sure that no use of the variable in a
2187 non-defining \s-1TU\s0 needs to trigger dynamic initialization (either
2188 because the variable is statically initialized, or a use of the
2189 variable in the defining \s-1TU\s0 will be executed before any uses in
2190 another \s-1TU\s0), they can avoid this overhead with the
2191 \&\fB\-fno\-extern\-tls\-init\fR option.
2192 .Sp
2193 On targets that support symbol aliases, the default is
2194 \&\fB\-fextern\-tls\-init\fR.  On targets that do not support symbol
2195 aliases, the default is \fB\-fno\-extern\-tls\-init\fR.
2196 .IP "\fB\-ffor\-scope\fR" 4
2197 .IX Item "-ffor-scope"
2198 .PD 0
2199 .IP "\fB\-fno\-for\-scope\fR" 4
2200 .IX Item "-fno-for-scope"
2201 .PD
2202 If \fB\-ffor\-scope\fR is specified, the scope of variables declared in
2203 a \fIfor-init-statement\fR is limited to the \f(CW\*(C`for\*(C'\fR loop itself,
2204 as specified by the \*(C+ standard.
2205 If \fB\-fno\-for\-scope\fR is specified, the scope of variables declared in
2206 a \fIfor-init-statement\fR extends to the end of the enclosing scope,
2207 as was the case in old versions of G++, and other (traditional)
2208 implementations of \*(C+.
2209 .Sp
2210 If neither flag is given, the default is to follow the standard,
2211 but to allow and give a warning for old-style code that would
2212 otherwise be invalid, or have different behavior.
2213 .IP "\fB\-fno\-gnu\-keywords\fR" 4
2214 .IX Item "-fno-gnu-keywords"
2215 Do not recognize \f(CW\*(C`typeof\*(C'\fR as a keyword, so that code can use this
2216 word as an identifier.  You can use the keyword \f(CW\*(C`_\|_typeof_\|_\*(C'\fR instead.
2217 \&\fB\-ansi\fR implies \fB\-fno\-gnu\-keywords\fR.
2218 .IP "\fB\-fno\-implicit\-templates\fR" 4
2219 .IX Item "-fno-implicit-templates"
2220 Never emit code for non-inline templates that are instantiated
2221 implicitly (i.e. by use); only emit code for explicit instantiations.
2222 .IP "\fB\-fno\-implicit\-inline\-templates\fR" 4
2223 .IX Item "-fno-implicit-inline-templates"
2224 Don't emit code for implicit instantiations of inline templates, either.
2225 The default is to handle inlines differently so that compiles with and
2226 without optimization need the same set of explicit instantiations.
2227 .IP "\fB\-fno\-implement\-inlines\fR" 4
2228 .IX Item "-fno-implement-inlines"
2229 To save space, do not emit out-of-line copies of inline functions
2230 controlled by \f(CW\*(C`#pragma implementation\*(C'\fR.  This causes linker
2231 errors if these functions are not inlined everywhere they are called.
2232 .IP "\fB\-fms\-extensions\fR" 4
2233 .IX Item "-fms-extensions"
2234 Disable Wpedantic warnings about constructs used in \s-1MFC\s0, such as implicit
2235 int and getting a pointer to member function via non-standard syntax.
2236 .IP "\fB\-fno\-nonansi\-builtins\fR" 4
2237 .IX Item "-fno-nonansi-builtins"
2238 Disable built-in declarations of functions that are not mandated by
2239 \&\s-1ANSI/ISO\s0 C.  These include \f(CW\*(C`ffs\*(C'\fR, \f(CW\*(C`alloca\*(C'\fR, \f(CW\*(C`_exit\*(C'\fR,
2240 \&\f(CW\*(C`index\*(C'\fR, \f(CW\*(C`bzero\*(C'\fR, \f(CW\*(C`conjf\*(C'\fR, and other related functions.
2241 .IP "\fB\-fnothrow\-opt\fR" 4
2242 .IX Item "-fnothrow-opt"
2243 Treat a \f(CW\*(C`throw()\*(C'\fR exception specification as if it were a
2244 \&\f(CW\*(C`noexcept\*(C'\fR specification to reduce or eliminate the text size
2245 overhead relative to a function with no exception specification.  If
2246 the function has local variables of types with non-trivial
2247 destructors, the exception specification actually makes the
2248 function smaller because the \s-1EH\s0 cleanups for those variables can be
2249 optimized away.  The semantic effect is that an exception thrown out of
2250 a function with such an exception specification results in a call
2251 to \f(CW\*(C`terminate\*(C'\fR rather than \f(CW\*(C`unexpected\*(C'\fR.
2252 .IP "\fB\-fno\-operator\-names\fR" 4
2253 .IX Item "-fno-operator-names"
2254 Do not treat the operator name keywords \f(CW\*(C`and\*(C'\fR, \f(CW\*(C`bitand\*(C'\fR,
2255 \&\f(CW\*(C`bitor\*(C'\fR, \f(CW\*(C`compl\*(C'\fR, \f(CW\*(C`not\*(C'\fR, \f(CW\*(C`or\*(C'\fR and \f(CW\*(C`xor\*(C'\fR as
2256 synonyms as keywords.
2257 .IP "\fB\-fno\-optional\-diags\fR" 4
2258 .IX Item "-fno-optional-diags"
2259 Disable diagnostics that the standard says a compiler does not need to
2260 issue.  Currently, the only such diagnostic issued by G++ is the one for
2261 a name having multiple meanings within a class.
2262 .IP "\fB\-fpermissive\fR" 4
2263 .IX Item "-fpermissive"
2264 Downgrade some diagnostics about nonconformant code from errors to
2265 warnings.  Thus, using \fB\-fpermissive\fR allows some
2266 nonconforming code to compile.
2267 .IP "\fB\-fno\-pretty\-templates\fR" 4
2268 .IX Item "-fno-pretty-templates"
2269 When an error message refers to a specialization of a function
2270 template, the compiler normally prints the signature of the
2271 template followed by the template arguments and any typedefs or
2272 typenames in the signature (e.g. \f(CW\*(C`void f(T) [with T = int]\*(C'\fR
2273 rather than \f(CW\*(C`void f(int)\*(C'\fR) so that it's clear which template is
2274 involved.  When an error message refers to a specialization of a class
2275 template, the compiler omits any template arguments that match
2276 the default template arguments for that template.  If either of these
2277 behaviors make it harder to understand the error message rather than
2278 easier, you can use \fB\-fno\-pretty\-templates\fR to disable them.
2279 .IP "\fB\-frepo\fR" 4
2280 .IX Item "-frepo"
2281 Enable automatic template instantiation at link time.  This option also
2282 implies \fB\-fno\-implicit\-templates\fR.
2283 .IP "\fB\-fno\-rtti\fR" 4
2284 .IX Item "-fno-rtti"
2285 Disable generation of information about every class with virtual
2286 functions for use by the \*(C+ run-time type identification features
2287 (\f(CW\*(C`dynamic_cast\*(C'\fR and \f(CW\*(C`typeid\*(C'\fR).  If you don't use those parts
2288 of the language, you can save some space by using this flag.  Note that
2289 exception handling uses the same information, but G++ generates it as
2290 needed. The \f(CW\*(C`dynamic_cast\*(C'\fR operator can still be used for casts that
2291 do not require run-time type information, i.e. casts to \f(CW\*(C`void *\*(C'\fR or to
2292 unambiguous base classes.
2293 .IP "\fB\-fsized\-deallocation\fR" 4
2294 .IX Item "-fsized-deallocation"
2295 Enable the built-in global declarations
2296 .Sp
2297 .Vb 2
2298 \&        void operator delete (void *, std::size_t) noexcept;
2299 \&        void operator delete[] (void *, std::size_t) noexcept;
2300 .Ve
2301 .Sp
2302 as introduced in \*(C+14.  This is useful for user-defined replacement
2303 deallocation functions that, for example, use the size of the object
2304 to make deallocation faster.  Enabled by default under
2305 \&\fB\-std=c++14\fR and above.  The flag \fB\-Wsized\-deallocation\fR
2306 warns about places that might want to add a definition.
2307 .IP "\fB\-fstats\fR" 4
2308 .IX Item "-fstats"
2309 Emit statistics about front-end processing at the end of the compilation.
2310 This information is generally only useful to the G++ development team.
2311 .IP "\fB\-fstrict\-enums\fR" 4
2312 .IX Item "-fstrict-enums"
2313 Allow the compiler to optimize using the assumption that a value of
2314 enumerated type can only be one of the values of the enumeration (as
2315 defined in the \*(C+ standard; basically, a value that can be
2316 represented in the minimum number of bits needed to represent all the
2317 enumerators).  This assumption may not be valid if the program uses a
2318 cast to convert an arbitrary integer value to the enumerated type.
2319 .IP "\fB\-ftemplate\-backtrace\-limit=\fR\fIn\fR" 4
2320 .IX Item "-ftemplate-backtrace-limit=n"
2321 Set the maximum number of template instantiation notes for a single
2322 warning or error to \fIn\fR.  The default value is 10.
2323 .IP "\fB\-ftemplate\-depth=\fR\fIn\fR" 4
2324 .IX Item "-ftemplate-depth=n"
2325 Set the maximum instantiation depth for template classes to \fIn\fR.
2326 A limit on the template instantiation depth is needed to detect
2327 endless recursions during template class instantiation.  \s-1ANSI/ISO\s0 \*(C+
2328 conforming programs must not rely on a maximum depth greater than 17
2329 (changed to 1024 in \*(C+11).  The default value is 900, as the compiler
2330 can run out of stack space before hitting 1024 in some situations.
2331 .IP "\fB\-fno\-threadsafe\-statics\fR" 4
2332 .IX Item "-fno-threadsafe-statics"
2333 Do not emit the extra code to use the routines specified in the \*(C+
2334 \&\s-1ABI\s0 for thread-safe initialization of local statics.  You can use this
2335 option to reduce code size slightly in code that doesn't need to be
2336 thread-safe.
2337 .IP "\fB\-fuse\-cxa\-atexit\fR" 4
2338 .IX Item "-fuse-cxa-atexit"
2339 Register destructors for objects with static storage duration with the
2340 \&\f(CW\*(C`_\|_cxa_atexit\*(C'\fR function rather than the \f(CW\*(C`atexit\*(C'\fR function.
2341 This option is required for fully standards-compliant handling of static
2342 destructors, but only works if your C library supports
2343 \&\f(CW\*(C`_\|_cxa_atexit\*(C'\fR.
2344 .IP "\fB\-fno\-use\-cxa\-get\-exception\-ptr\fR" 4
2345 .IX Item "-fno-use-cxa-get-exception-ptr"
2346 Don't use the \f(CW\*(C`_\|_cxa_get_exception_ptr\*(C'\fR runtime routine.  This
2347 causes \f(CW\*(C`std::uncaught_exception\*(C'\fR to be incorrect, but is necessary
2348 if the runtime routine is not available.
2349 .IP "\fB\-fvisibility\-inlines\-hidden\fR" 4
2350 .IX Item "-fvisibility-inlines-hidden"
2351 This switch declares that the user does not attempt to compare
2352 pointers to inline functions or methods where the addresses of the two functions
2353 are taken in different shared objects.
2354 .Sp
2355 The effect of this is that \s-1GCC\s0 may, effectively, mark inline methods with
2356 \&\f(CW\*(C`_\|_attribute_\|_ ((visibility ("hidden")))\*(C'\fR so that they do not
2357 appear in the export table of a \s-1DSO\s0 and do not require a \s-1PLT\s0 indirection
2358 when used within the \s-1DSO\s0.  Enabling this option can have a dramatic effect
2359 on load and link times of a \s-1DSO\s0 as it massively reduces the size of the
2360 dynamic export table when the library makes heavy use of templates.
2361 .Sp
2362 The behavior of this switch is not quite the same as marking the
2363 methods as hidden directly, because it does not affect static variables
2364 local to the function or cause the compiler to deduce that
2365 the function is defined in only one shared object.
2366 .Sp
2367 You may mark a method as having a visibility explicitly to negate the
2368 effect of the switch for that method.  For example, if you do want to
2369 compare pointers to a particular inline method, you might mark it as
2370 having default visibility.  Marking the enclosing class with explicit
2371 visibility has no effect.
2372 .Sp
2373 Explicitly instantiated inline methods are unaffected by this option
2374 as their linkage might otherwise cross a shared library boundary.
2375 .IP "\fB\-fvisibility\-ms\-compat\fR" 4
2376 .IX Item "-fvisibility-ms-compat"
2377 This flag attempts to use visibility settings to make \s-1GCC\s0's \*(C+
2378 linkage model compatible with that of Microsoft Visual Studio.
2379 .Sp
2380 The flag makes these changes to \s-1GCC\s0's linkage model:
2381 .RS 4
2382 .IP "1." 4
2383 .IX Item "1."
2384 It sets the default visibility to \f(CW\*(C`hidden\*(C'\fR, like
2385 \&\fB\-fvisibility=hidden\fR.
2386 .IP "2." 4
2387 .IX Item "2."
2388 Types, but not their members, are not hidden by default.
2389 .IP "3." 4
2390 .IX Item "3."
2391 The One Definition Rule is relaxed for types without explicit
2392 visibility specifications that are defined in more than one
2393 shared object: those declarations are permitted if they are
2394 permitted when this option is not used.
2395 .RE
2396 .RS 4
2397 .Sp
2398 In new code it is better to use \fB\-fvisibility=hidden\fR and
2399 export those classes that are intended to be externally visible.
2400 Unfortunately it is possible for code to rely, perhaps accidentally,
2401 on the Visual Studio behavior.
2402 .Sp
2403 Among the consequences of these changes are that static data members
2404 of the same type with the same name but defined in different shared
2405 objects are different, so changing one does not change the other;
2406 and that pointers to function members defined in different shared
2407 objects may not compare equal.  When this flag is given, it is a
2408 violation of the \s-1ODR\s0 to define types with the same name differently.
2409 .RE
2410 .IP "\fB\-fvtable\-verify=\fR[\fBstd\fR|\fBpreinit\fR|\fBnone\fR]" 4
2411 .IX Item "-fvtable-verify=[std|preinit|none]"
2412 Turn on (or off, if using \fB\-fvtable\-verify=none\fR) the security
2413 feature that verifies at run time, for every virtual call, that
2414 the vtable pointer through which the call is made is valid for the type of
2415 the object, and has not been corrupted or overwritten.  If an invalid vtable
2416 pointer is detected at run time, an error is reported and execution of the
2417 program is immediately halted.
2418 .Sp
2419 This option causes run-time data structures to be built at program startup,
2420 which are used for verifying the vtable pointers.  
2421 The options \fBstd\fR and \fBpreinit\fR
2422 control the timing of when these data structures are built.  In both cases the
2423 data structures are built before execution reaches \f(CW\*(C`main\*(C'\fR.  Using
2424 \&\fB\-fvtable\-verify=std\fR causes the data structures to be built after
2425 shared libraries have been loaded and initialized.
2426 \&\fB\-fvtable\-verify=preinit\fR causes them to be built before shared
2427 libraries have been loaded and initialized.
2428 .Sp
2429 If this option appears multiple times in the command line with different
2430 values specified, \fBnone\fR takes highest priority over both \fBstd\fR and
2431 \&\fBpreinit\fR; \fBpreinit\fR takes priority over \fBstd\fR.
2432 .IP "\fB\-fvtv\-debug\fR" 4
2433 .IX Item "-fvtv-debug"
2434 When used in conjunction with \fB\-fvtable\-verify=std\fR or 
2435 \&\fB\-fvtable\-verify=preinit\fR, causes debug versions of the 
2436 runtime functions for the vtable verification feature to be called.  
2437 This flag also causes the compiler to log information about which 
2438 vtable pointers it finds for each class.
2439 This information is written to a file named \fIvtv_set_ptr_data.log\fR 
2440 in the directory named by the environment variable \fB\s-1VTV_LOGS_DIR\s0\fR 
2441 if that is defined or the current working directory otherwise.
2442 .Sp
2443 Note:  This feature \fIappends\fR data to the log file. If you want a fresh log
2444 file, be sure to delete any existing one.
2445 .IP "\fB\-fvtv\-counts\fR" 4
2446 .IX Item "-fvtv-counts"
2447 This is a debugging flag.  When used in conjunction with
2448 \&\fB\-fvtable\-verify=std\fR or \fB\-fvtable\-verify=preinit\fR, this
2449 causes the compiler to keep track of the total number of virtual calls
2450 it encounters and the number of verifications it inserts.  It also
2451 counts the number of calls to certain run-time library functions
2452 that it inserts and logs this information for each compilation unit.
2453 The compiler writes this information to a file named
2454 \&\fIvtv_count_data.log\fR in the directory named by the environment
2455 variable \fB\s-1VTV_LOGS_DIR\s0\fR if that is defined or the current working
2456 directory otherwise.  It also counts the size of the vtable pointer sets
2457 for each class, and writes this information to \fIvtv_class_set_sizes.log\fR
2458 in the same directory.
2459 .Sp
2460 Note:  This feature \fIappends\fR data to the log files.  To get fresh log
2461 files, be sure to delete any existing ones.
2462 .IP "\fB\-fno\-weak\fR" 4
2463 .IX Item "-fno-weak"
2464 Do not use weak symbol support, even if it is provided by the linker.
2465 By default, G++ uses weak symbols if they are available.  This
2466 option exists only for testing, and should not be used by end-users;
2467 it results in inferior code and has no benefits.  This option may
2468 be removed in a future release of G++.
2469 .IP "\fB\-nostdinc++\fR" 4
2470 .IX Item "-nostdinc++"
2471 Do not search for header files in the standard directories specific to
2472 \&\*(C+, but do still search the other standard directories.  (This option
2473 is used when building the \*(C+ library.)
2474 .PP
2475 In addition, these optimization, warning, and code generation options
2476 have meanings only for \*(C+ programs:
2477 .IP "\fB\-Wabi\fR (C, Objective-C, \*(C+ and Objective\-\*(C+ only)" 4
2478 .IX Item "-Wabi (C, Objective-C,  and Objective- only)"
2479 When an explicit \fB\-fabi\-version=\fR\fIn\fR option is used, causes
2480 G++ to warn when it generates code that is probably not compatible with the
2481 vendor-neutral \*(C+ \s-1ABI\s0.  Since G++ now defaults to
2482 \&\fB\-fabi\-version=0\fR, \fB\-Wabi\fR has no effect unless either
2483 an older \s-1ABI\s0 version is selected (with \fB\-fabi\-version=\fR\fIn\fR)
2484 or an older compatibility version is selected (with
2485 \&\fB\-Wabi=\fR\fIn\fR or \fB\-fabi\-compat\-version=\fR\fIn\fR).
2486 .Sp
2487 Although an effort has been made to warn about
2488 all such cases, there are probably some cases that are not warned about,
2489 even though G++ is generating incompatible code.  There may also be
2490 cases where warnings are emitted even though the code that is generated
2491 is compatible.
2492 .Sp
2493 You should rewrite your code to avoid these warnings if you are
2494 concerned about the fact that code generated by G++ may not be binary
2495 compatible with code generated by other compilers.
2496 .Sp
2497 \&\fB\-Wabi\fR can also be used with an explicit version number to
2498 warn about compatibility with a particular \fB\-fabi\-version\fR
2499 level, e.g. \fB\-Wabi=2\fR to warn about changes relative to
2500 \&\fB\-fabi\-version=2\fR.  Specifying a version number also sets
2501 \&\fB\-fabi\-compat\-version=\fR\fIn\fR.
2502 .Sp
2503 The known incompatibilities in \fB\-fabi\-version=2\fR (which was the
2504 default from \s-1GCC\s0 3.4 to 4.9) include:
2505 .RS 4
2506 .IP "*" 4
2507 A template with a non-type template parameter of reference type was
2508 mangled incorrectly:
2509 .Sp
2510 .Vb 3
2511 \&        extern int N;
2512 \&        template <int &> struct S {};
2513 \&        void n (S<N>) {2}
2514 .Ve
2515 .Sp
2516 This was fixed in \fB\-fabi\-version=3\fR.
2517 .IP "*" 4
2518 \&\s-1SIMD\s0 vector types declared using \f(CW\*(C`_\|_attribute ((vector_size))\*(C'\fR were
2519 mangled in a non-standard way that does not allow for overloading of
2520 functions taking vectors of different sizes.
2521 .Sp
2522 The mangling was changed in \fB\-fabi\-version=4\fR.
2523 .IP "*" 4
2524 \&\f(CW\*(C`_\|_attribute ((const))\*(C'\fR and \f(CW\*(C`noreturn\*(C'\fR were mangled as type
2525 qualifiers, and \f(CW\*(C`decltype\*(C'\fR of a plain declaration was folded away.
2526 .Sp
2527 These mangling issues were fixed in \fB\-fabi\-version=5\fR.
2528 .IP "*" 4
2529 Scoped enumerators passed as arguments to a variadic function are
2530 promoted like unscoped enumerators, causing \f(CW\*(C`va_arg\*(C'\fR to complain.
2531 On most targets this does not actually affect the parameter passing
2532 \&\s-1ABI\s0, as there is no way to pass an argument smaller than \f(CW\*(C`int\*(C'\fR.
2533 .Sp
2534 Also, the \s-1ABI\s0 changed the mangling of template argument packs,
2535 \&\f(CW\*(C`const_cast\*(C'\fR, \f(CW\*(C`static_cast\*(C'\fR, prefix increment/decrement, and
2536 a class scope function used as a template argument.
2537 .Sp
2538 These issues were corrected in \fB\-fabi\-version=6\fR.
2539 .IP "*" 4
2540 Lambdas in default argument scope were mangled incorrectly, and the
2541 \&\s-1ABI\s0 changed the mangling of \f(CW\*(C`nullptr_t\*(C'\fR.
2542 .Sp
2543 These issues were corrected in \fB\-fabi\-version=7\fR.
2544 .IP "*" 4
2545 When mangling a function type with function-cv-qualifiers, the
2546 un-qualified function type was incorrectly treated as a substitution
2547 candidate.
2548 .Sp
2549 This was fixed in \fB\-fabi\-version=8\fR.
2550 .RE
2551 .RS 4
2552 .Sp
2553 It also warns about psABI-related changes.  The known psABI changes at this
2554 point include:
2555 .IP "*" 4
2556 For SysV/x86\-64, unions with \f(CW\*(C`long double\*(C'\fR members are 
2557 passed in memory as specified in psABI.  For example:
2558 .Sp
2559 .Vb 4
2560 \&        union U {
2561 \&          long double ld;
2562 \&          int i;
2563 \&        };
2564 .Ve
2565 .Sp
2566 \&\f(CW\*(C`union U\*(C'\fR is always passed in memory.
2567 .RE
2568 .RS 4
2569 .RE
2570 .IP "\fB\-Wctor\-dtor\-privacy\fR (\*(C+ and Objective\-\*(C+ only)" 4
2571 .IX Item "-Wctor-dtor-privacy ( and Objective- only)"
2572 Warn when a class seems unusable because all the constructors or
2573 destructors in that class are private, and it has neither friends nor
2574 public static member functions.  Also warn if there are no non-private
2575 methods, and there's at least one private member function that isn't
2576 a constructor or destructor.
2577 .IP "\fB\-Wdelete\-non\-virtual\-dtor\fR (\*(C+ and Objective\-\*(C+ only)" 4
2578 .IX Item "-Wdelete-non-virtual-dtor ( and Objective- only)"
2579 Warn when \f(CW\*(C`delete\*(C'\fR is used to destroy an instance of a class that
2580 has virtual functions and non-virtual destructor. It is unsafe to delete
2581 an instance of a derived class through a pointer to a base class if the
2582 base class does not have a virtual destructor.  This warning is enabled
2583 by \fB\-Wall\fR.
2584 .IP "\fB\-Wliteral\-suffix\fR (\*(C+ and Objective\-\*(C+ only)" 4
2585 .IX Item "-Wliteral-suffix ( and Objective- only)"
2586 Warn when a string or character literal is followed by a ud-suffix which does
2587 not begin with an underscore.  As a conforming extension, \s-1GCC\s0 treats such
2588 suffixes as separate preprocessing tokens in order to maintain backwards
2589 compatibility with code that uses formatting macros from \f(CW\*(C`<inttypes.h>\*(C'\fR.
2590 For example:
2591 .Sp
2592 .Vb 3
2593 \&        #define _\|_STDC_FORMAT_MACROS
2594 \&        #include <inttypes.h>
2595 \&        #include <stdio.h>
2596 \&        
2597 \&        int main() {
2598 \&          int64_t i64 = 123;
2599 \&          printf("My int64: %"PRId64"\en", i64);
2600 \&        }
2601 .Ve
2602 .Sp
2603 In this case, \f(CW\*(C`PRId64\*(C'\fR is treated as a separate preprocessing token.
2604 .Sp
2605 This warning is enabled by default.
2606 .IP "\fB\-Wnarrowing\fR (\*(C+ and Objective\-\*(C+ only)" 4
2607 .IX Item "-Wnarrowing ( and Objective- only)"
2608 Warn when a narrowing conversion prohibited by \*(C+11 occurs within
2609 \&\fB{ }\fR, e.g.
2610 .Sp
2611 .Vb 1
2612 \&        int i = { 2.2 }; // error: narrowing from double to int
2613 .Ve
2614 .Sp
2615 This flag is included in \fB\-Wall\fR and \fB\-Wc++11\-compat\fR.
2616 .Sp
2617 With \fB\-std=c++11\fR, \fB\-Wno\-narrowing\fR suppresses for
2618 non-constants the diagnostic required by the standard.  Note that this
2619 does not affect the meaning of well-formed code; narrowing conversions
2620 are still considered ill-formed in \s-1SFINAE\s0 context.
2621 .IP "\fB\-Wnoexcept\fR (\*(C+ and Objective\-\*(C+ only)" 4
2622 .IX Item "-Wnoexcept ( and Objective- only)"
2623 Warn when a noexcept-expression evaluates to false because of a call
2624 to a function that does not have a non-throwing exception
2625 specification (i.e. \f(CW\*(C`throw()\*(C'\fR or \f(CW\*(C`noexcept\*(C'\fR) but is known by
2626 the compiler to never throw an exception.
2627 .IP "\fB\-Wnon\-virtual\-dtor\fR (\*(C+ and Objective\-\*(C+ only)" 4
2628 .IX Item "-Wnon-virtual-dtor ( and Objective- only)"
2629 Warn when a class has virtual functions and an accessible non-virtual
2630 destructor itself or in an accessible polymorphic base class, in which
2631 case it is possible but unsafe to delete an instance of a derived
2632 class through a pointer to the class itself or base class.  This
2633 warning is automatically enabled if \fB\-Weffc++\fR is specified.
2634 .IP "\fB\-Wreorder\fR (\*(C+ and Objective\-\*(C+ only)" 4
2635 .IX Item "-Wreorder ( and Objective- only)"
2636 Warn when the order of member initializers given in the code does not
2637 match the order in which they must be executed.  For instance:
2638 .Sp
2639 .Vb 5
2640 \&        struct A {
2641 \&          int i;
2642 \&          int j;
2643 \&          A(): j (0), i (1) { }
2644 \&        };
2645 .Ve
2646 .Sp
2647 The compiler rearranges the member initializers for \f(CW\*(C`i\*(C'\fR
2648 and \f(CW\*(C`j\*(C'\fR to match the declaration order of the members, emitting
2649 a warning to that effect.  This warning is enabled by \fB\-Wall\fR.
2650 .IP "\fB\-fext\-numeric\-literals\fR (\*(C+ and Objective\-\*(C+ only)" 4
2651 .IX Item "-fext-numeric-literals ( and Objective- only)"
2652 Accept imaginary, fixed-point, or machine-defined
2653 literal number suffixes as \s-1GNU\s0 extensions.
2654 When this option is turned off these suffixes are treated
2655 as \*(C+11 user-defined literal numeric suffixes.
2656 This is on by default for all pre\-\*(C+11 dialects and all \s-1GNU\s0 dialects:
2657 \&\fB\-std=c++98\fR, \fB\-std=gnu++98\fR, \fB\-std=gnu++11\fR,
2658 \&\fB\-std=gnu++14\fR.
2659 This option is off by default
2660 for \s-1ISO\s0 \*(C+11 onwards (\fB\-std=c++11\fR, ...).
2661 .PP
2662 The following \fB\-W...\fR options are not affected by \fB\-Wall\fR.
2663 .IP "\fB\-Weffc++\fR (\*(C+ and Objective\-\*(C+ only)" 4
2664 .IX Item "-Weffc++ ( and Objective- only)"
2665 Warn about violations of the following style guidelines from Scott Meyers'
2666 \&\fIEffective \*(C+\fR series of books:
2667 .RS 4
2668 .IP "*" 4
2669 Define a copy constructor and an assignment operator for classes
2670 with dynamically-allocated memory.
2671 .IP "*" 4
2672 Prefer initialization to assignment in constructors.
2673 .IP "*" 4
2674 Have \f(CW\*(C`operator=\*(C'\fR return a reference to \f(CW*this\fR.
2675 .IP "*" 4
2676 Don't try to return a reference when you must return an object.
2677 .IP "*" 4
2678 Distinguish between prefix and postfix forms of increment and
2679 decrement operators.
2680 .IP "*" 4
2681 Never overload \f(CW\*(C`&&\*(C'\fR, \f(CW\*(C`||\*(C'\fR, or \f(CW\*(C`,\*(C'\fR.
2682 .RE
2683 .RS 4
2684 .Sp
2685 This option also enables \fB\-Wnon\-virtual\-dtor\fR, which is also
2686 one of the effective \*(C+ recommendations.  However, the check is
2687 extended to warn about the lack of virtual destructor in accessible
2688 non-polymorphic bases classes too.
2689 .Sp
2690 When selecting this option, be aware that the standard library
2691 headers do not obey all of these guidelines; use \fBgrep \-v\fR
2692 to filter out those warnings.
2693 .RE
2694 .IP "\fB\-Wstrict\-null\-sentinel\fR (\*(C+ and Objective\-\*(C+ only)" 4
2695 .IX Item "-Wstrict-null-sentinel ( and Objective- only)"
2696 Warn about the use of an uncasted \f(CW\*(C`NULL\*(C'\fR as sentinel.  When
2697 compiling only with \s-1GCC\s0 this is a valid sentinel, as \f(CW\*(C`NULL\*(C'\fR is defined
2698 to \f(CW\*(C`_\|_null\*(C'\fR.  Although it is a null pointer constant rather than a
2699 null pointer, it is guaranteed to be of the same size as a pointer.
2700 But this use is not portable across different compilers.
2701 .IP "\fB\-Wno\-non\-template\-friend\fR (\*(C+ and Objective\-\*(C+ only)" 4
2702 .IX Item "-Wno-non-template-friend ( and Objective- only)"
2703 Disable warnings when non-templatized friend functions are declared
2704 within a template.  Since the advent of explicit template specification
2705 support in G++, if the name of the friend is an unqualified-id (i.e.,
2706 \&\fBfriend foo(int)\fR), the \*(C+ language specification demands that the
2707 friend declare or define an ordinary, nontemplate function.  (Section
2708 14.5.3).  Before G++ implemented explicit specification, unqualified-ids
2709 could be interpreted as a particular specialization of a templatized
2710 function.  Because this non-conforming behavior is no longer the default
2711 behavior for G++, \fB\-Wnon\-template\-friend\fR allows the compiler to
2712 check existing code for potential trouble spots and is on by default.
2713 This new compiler behavior can be turned off with
2714 \&\fB\-Wno\-non\-template\-friend\fR, which keeps the conformant compiler code
2715 but disables the helpful warning.
2716 .IP "\fB\-Wold\-style\-cast\fR (\*(C+ and Objective\-\*(C+ only)" 4
2717 .IX Item "-Wold-style-cast ( and Objective- only)"
2718 Warn if an old-style (C\-style) cast to a non-void type is used within
2719 a \*(C+ program.  The new-style casts (\f(CW\*(C`dynamic_cast\*(C'\fR,
2720 \&\f(CW\*(C`static_cast\*(C'\fR, \f(CW\*(C`reinterpret_cast\*(C'\fR, and \f(CW\*(C`const_cast\*(C'\fR) are
2721 less vulnerable to unintended effects and much easier to search for.
2722 .IP "\fB\-Woverloaded\-virtual\fR (\*(C+ and Objective\-\*(C+ only)" 4
2723 .IX Item "-Woverloaded-virtual ( and Objective- only)"
2724 Warn when a function declaration hides virtual functions from a
2725 base class.  For example, in:
2726 .Sp
2727 .Vb 3
2728 \&        struct A {
2729 \&          virtual void f();
2730 \&        };
2731 \&        
2732 \&        struct B: public A {
2733 \&          void f(int);
2734 \&        };
2735 .Ve
2736 .Sp
2737 the \f(CW\*(C`A\*(C'\fR class version of \f(CW\*(C`f\*(C'\fR is hidden in \f(CW\*(C`B\*(C'\fR, and code
2738 like:
2739 .Sp
2740 .Vb 2
2741 \&        B* b;
2742 \&        b\->f();
2743 .Ve
2744 .Sp
2745 fails to compile.
2746 .IP "\fB\-Wno\-pmf\-conversions\fR (\*(C+ and Objective\-\*(C+ only)" 4
2747 .IX Item "-Wno-pmf-conversions ( and Objective- only)"
2748 Disable the diagnostic for converting a bound pointer to member function
2749 to a plain pointer.
2750 .IP "\fB\-Wsign\-promo\fR (\*(C+ and Objective\-\*(C+ only)" 4
2751 .IX Item "-Wsign-promo ( and Objective- only)"
2752 Warn when overload resolution chooses a promotion from unsigned or
2753 enumerated type to a signed type, over a conversion to an unsigned type of
2754 the same size.  Previous versions of G++ tried to preserve
2755 unsignedness, but the standard mandates the current behavior.
2756 .SS "Options Controlling Objective-C and Objective\-\*(C+ Dialects"
2757 .IX Subsection "Options Controlling Objective-C and Objective- Dialects"
2758 (\s-1NOTE:\s0 This manual does not describe the Objective-C and Objective\-\*(C+
2759 languages themselves.
2760 .PP
2761 This section describes the command-line options that are only meaningful
2762 for Objective-C and Objective\-\*(C+ programs.  You can also use most of
2763 the language-independent \s-1GNU\s0 compiler options.
2764 For example, you might compile a file \fIsome_class.m\fR like this:
2765 .PP
2766 .Vb 1
2767 \&        gcc \-g \-fgnu\-runtime \-O \-c some_class.m
2768 .Ve
2769 .PP
2770 In this example, \fB\-fgnu\-runtime\fR is an option meant only for
2771 Objective-C and Objective\-\*(C+ programs; you can use the other options with
2772 any language supported by \s-1GCC\s0.
2773 .PP
2774 Note that since Objective-C is an extension of the C language, Objective-C
2775 compilations may also use options specific to the C front-end (e.g.,
2776 \&\fB\-Wtraditional\fR).  Similarly, Objective\-\*(C+ compilations may use
2777 \&\*(C+\-specific options (e.g., \fB\-Wabi\fR).
2778 .PP
2779 Here is a list of options that are \fIonly\fR for compiling Objective-C
2780 and Objective\-\*(C+ programs:
2781 .IP "\fB\-fconstant\-string\-class=\fR\fIclass-name\fR" 4
2782 .IX Item "-fconstant-string-class=class-name"
2783 Use \fIclass-name\fR as the name of the class to instantiate for each
2784 literal string specified with the syntax \f(CW\*(C`@"..."\*(C'\fR.  The default
2785 class name is \f(CW\*(C`NXConstantString\*(C'\fR if the \s-1GNU\s0 runtime is being used, and
2786 \&\f(CW\*(C`NSConstantString\*(C'\fR if the NeXT runtime is being used (see below).  The
2787 \&\fB\-fconstant\-cfstrings\fR option, if also present, overrides the
2788 \&\fB\-fconstant\-string\-class\fR setting and cause \f(CW\*(C`@"..."\*(C'\fR literals
2789 to be laid out as constant CoreFoundation strings.
2790 .IP "\fB\-fgnu\-runtime\fR" 4
2791 .IX Item "-fgnu-runtime"
2792 Generate object code compatible with the standard \s-1GNU\s0 Objective-C
2793 runtime.  This is the default for most types of systems.
2794 .IP "\fB\-fnext\-runtime\fR" 4
2795 .IX Item "-fnext-runtime"
2796 Generate output compatible with the NeXT runtime.  This is the default
2797 for NeXT-based systems, including Darwin and Mac \s-1OS\s0 X.  The macro
2798 \&\f(CW\*(C`_\|_NEXT_RUNTIME_\|_\*(C'\fR is predefined if (and only if) this option is
2799 used.
2800 .IP "\fB\-fno\-nil\-receivers\fR" 4
2801 .IX Item "-fno-nil-receivers"
2802 Assume that all Objective-C message dispatches (\f(CW\*(C`[receiver
2803 message:arg]\*(C'\fR) in this translation unit ensure that the receiver is
2804 not \f(CW\*(C`nil\*(C'\fR.  This allows for more efficient entry points in the
2805 runtime to be used.  This option is only available in conjunction with
2806 the NeXT runtime and \s-1ABI\s0 version 0 or 1.
2807 .IP "\fB\-fobjc\-abi\-version=\fR\fIn\fR" 4
2808 .IX Item "-fobjc-abi-version=n"
2809 Use version \fIn\fR of the Objective-C \s-1ABI\s0 for the selected runtime.
2810 This option is currently supported only for the NeXT runtime.  In that
2811 case, Version 0 is the traditional (32\-bit) \s-1ABI\s0 without support for
2812 properties and other Objective-C 2.0 additions.  Version 1 is the
2813 traditional (32\-bit) \s-1ABI\s0 with support for properties and other
2814 Objective-C 2.0 additions.  Version 2 is the modern (64\-bit) \s-1ABI\s0.  If
2815 nothing is specified, the default is Version 0 on 32\-bit target
2816 machines, and Version 2 on 64\-bit target machines.
2817 .IP "\fB\-fobjc\-call\-cxx\-cdtors\fR" 4
2818 .IX Item "-fobjc-call-cxx-cdtors"
2819 For each Objective-C class, check if any of its instance variables is a
2820 \&\*(C+ object with a non-trivial default constructor.  If so, synthesize a
2821 special \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR instance method which runs
2822 non-trivial default constructors on any such instance variables, in order,
2823 and then return \f(CW\*(C`self\*(C'\fR.  Similarly, check if any instance variable
2824 is a \*(C+ object with a non-trivial destructor, and if so, synthesize a
2825 special \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR method which runs
2826 all such default destructors, in reverse order.
2827 .Sp
2828 The \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR and \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR
2829 methods thusly generated only operate on instance variables
2830 declared in the current Objective-C class, and not those inherited
2831 from superclasses.  It is the responsibility of the Objective-C
2832 runtime to invoke all such methods in an object's inheritance
2833 hierarchy.  The \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR methods are invoked
2834 by the runtime immediately after a new object instance is allocated;
2835 the \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR methods are invoked immediately
2836 before the runtime deallocates an object instance.
2837 .Sp
2838 As of this writing, only the NeXT runtime on Mac \s-1OS\s0 X 10.4 and later has
2839 support for invoking the \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR and
2840 \&\f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR methods.
2841 .IP "\fB\-fobjc\-direct\-dispatch\fR" 4
2842 .IX Item "-fobjc-direct-dispatch"
2843 Allow fast jumps to the message dispatcher.  On Darwin this is
2844 accomplished via the comm page.
2845 .IP "\fB\-fobjc\-exceptions\fR" 4
2846 .IX Item "-fobjc-exceptions"
2847 Enable syntactic support for structured exception handling in
2848 Objective-C, similar to what is offered by \*(C+ and Java.  This option
2849 is required to use the Objective-C keywords \f(CW@try\fR,
2850 \&\f(CW@throw\fR, \f(CW@catch\fR, \f(CW@finally\fR and
2851 \&\f(CW@synchronized\fR.  This option is available with both the \s-1GNU\s0
2852 runtime and the NeXT runtime (but not available in conjunction with
2853 the NeXT runtime on Mac \s-1OS\s0 X 10.2 and earlier).
2854 .IP "\fB\-fobjc\-gc\fR" 4
2855 .IX Item "-fobjc-gc"
2856 Enable garbage collection (\s-1GC\s0) in Objective-C and Objective\-\*(C+
2857 programs.  This option is only available with the NeXT runtime; the
2858 \&\s-1GNU\s0 runtime has a different garbage collection implementation that
2859 does not require special compiler flags.
2860 .IP "\fB\-fobjc\-nilcheck\fR" 4
2861 .IX Item "-fobjc-nilcheck"
2862 For the NeXT runtime with version 2 of the \s-1ABI\s0, check for a nil
2863 receiver in method invocations before doing the actual method call.
2864 This is the default and can be disabled using
2865 \&\fB\-fno\-objc\-nilcheck\fR.  Class methods and super calls are never
2866 checked for nil in this way no matter what this flag is set to.
2867 Currently this flag does nothing when the \s-1GNU\s0 runtime, or an older
2868 version of the NeXT runtime \s-1ABI\s0, is used.
2869 .IP "\fB\-fobjc\-std=objc1\fR" 4
2870 .IX Item "-fobjc-std=objc1"
2871 Conform to the language syntax of Objective-C 1.0, the language
2872 recognized by \s-1GCC\s0 4.0.  This only affects the Objective-C additions to
2873 the C/\*(C+ language; it does not affect conformance to C/\*(C+ standards,
2874 which is controlled by the separate C/\*(C+ dialect option flags.  When
2875 this option is used with the Objective-C or Objective\-\*(C+ compiler,
2876 any Objective-C syntax that is not recognized by \s-1GCC\s0 4.0 is rejected.
2877 This is useful if you need to make sure that your Objective-C code can
2878 be compiled with older versions of \s-1GCC\s0.
2879 .IP "\fB\-freplace\-objc\-classes\fR" 4
2880 .IX Item "-freplace-objc-classes"
2881 Emit a special marker instructing \fB\f(BIld\fB\|(1)\fR not to statically link in
2882 the resulting object file, and allow \fB\f(BIdyld\fB\|(1)\fR to load it in at
2883 run time instead.  This is used in conjunction with the Fix-and-Continue
2884 debugging mode, where the object file in question may be recompiled and
2885 dynamically reloaded in the course of program execution, without the need
2886 to restart the program itself.  Currently, Fix-and-Continue functionality
2887 is only available in conjunction with the NeXT runtime on Mac \s-1OS\s0 X 10.3
2888 and later.
2889 .IP "\fB\-fzero\-link\fR" 4
2890 .IX Item "-fzero-link"
2891 When compiling for the NeXT runtime, the compiler ordinarily replaces calls
2892 to \f(CW\*(C`objc_getClass("...")\*(C'\fR (when the name of the class is known at
2893 compile time) with static class references that get initialized at load time,
2894 which improves run-time performance.  Specifying the \fB\-fzero\-link\fR flag
2895 suppresses this behavior and causes calls to \f(CW\*(C`objc_getClass("...")\*(C'\fR
2896 to be retained.  This is useful in Zero-Link debugging mode, since it allows
2897 for individual class implementations to be modified during program execution.
2898 The \s-1GNU\s0 runtime currently always retains calls to \f(CW\*(C`objc_get_class("...")\*(C'\fR
2899 regardless of command-line options.
2900 .IP "\fB\-fno\-local\-ivars\fR" 4
2901 .IX Item "-fno-local-ivars"
2902 By default instance variables in Objective-C can be accessed as if
2903 they were local variables from within the methods of the class they're
2904 declared in.  This can lead to shadowing between instance variables
2905 and other variables declared either locally inside a class method or
2906 globally with the same name.  Specifying the \fB\-fno\-local\-ivars\fR
2907 flag disables this behavior thus avoiding variable shadowing issues.
2908 .IP "\fB\-fivar\-visibility=\fR[\fBpublic\fR|\fBprotected\fR|\fBprivate\fR|\fBpackage\fR]" 4
2909 .IX Item "-fivar-visibility=[public|protected|private|package]"
2910 Set the default instance variable visibility to the specified option
2911 so that instance variables declared outside the scope of any access
2912 modifier directives default to the specified visibility.
2913 .IP "\fB\-gen\-decls\fR" 4
2914 .IX Item "-gen-decls"
2915 Dump interface declarations for all classes seen in the source file to a
2916 file named \fI\fIsourcename\fI.decl\fR.
2917 .IP "\fB\-Wassign\-intercept\fR (Objective-C and Objective\-\*(C+ only)" 4
2918 .IX Item "-Wassign-intercept (Objective-C and Objective- only)"
2919 Warn whenever an Objective-C assignment is being intercepted by the
2920 garbage collector.
2921 .IP "\fB\-Wno\-protocol\fR (Objective-C and Objective\-\*(C+ only)" 4
2922 .IX Item "-Wno-protocol (Objective-C and Objective- only)"
2923 If a class is declared to implement a protocol, a warning is issued for
2924 every method in the protocol that is not implemented by the class.  The
2925 default behavior is to issue a warning for every method not explicitly
2926 implemented in the class, even if a method implementation is inherited
2927 from the superclass.  If you use the \fB\-Wno\-protocol\fR option, then
2928 methods inherited from the superclass are considered to be implemented,
2929 and no warning is issued for them.
2930 .IP "\fB\-Wselector\fR (Objective-C and Objective\-\*(C+ only)" 4
2931 .IX Item "-Wselector (Objective-C and Objective- only)"
2932 Warn if multiple methods of different types for the same selector are
2933 found during compilation.  The check is performed on the list of methods
2934 in the final stage of compilation.  Additionally, a check is performed
2935 for each selector appearing in a \f(CW\*(C`@selector(...)\*(C'\fR
2936 expression, and a corresponding method for that selector has been found
2937 during compilation.  Because these checks scan the method table only at
2938 the end of compilation, these warnings are not produced if the final
2939 stage of compilation is not reached, for example because an error is
2940 found during compilation, or because the \fB\-fsyntax\-only\fR option is
2941 being used.
2942 .IP "\fB\-Wstrict\-selector\-match\fR (Objective-C and Objective\-\*(C+ only)" 4
2943 .IX Item "-Wstrict-selector-match (Objective-C and Objective- only)"
2944 Warn if multiple methods with differing argument and/or return types are
2945 found for a given selector when attempting to send a message using this
2946 selector to a receiver of type \f(CW\*(C`id\*(C'\fR or \f(CW\*(C`Class\*(C'\fR.  When this flag
2947 is off (which is the default behavior), the compiler omits such warnings
2948 if any differences found are confined to types that share the same size
2949 and alignment.
2950 .IP "\fB\-Wundeclared\-selector\fR (Objective-C and Objective\-\*(C+ only)" 4
2951 .IX Item "-Wundeclared-selector (Objective-C and Objective- only)"
2952 Warn if a \f(CW\*(C`@selector(...)\*(C'\fR expression referring to an
2953 undeclared selector is found.  A selector is considered undeclared if no
2954 method with that name has been declared before the
2955 \&\f(CW\*(C`@selector(...)\*(C'\fR expression, either explicitly in an
2956 \&\f(CW@interface\fR or \f(CW@protocol\fR declaration, or implicitly in
2957 an \f(CW@implementation\fR section.  This option always performs its
2958 checks as soon as a \f(CW\*(C`@selector(...)\*(C'\fR expression is found,
2959 while \fB\-Wselector\fR only performs its checks in the final stage of
2960 compilation.  This also enforces the coding style convention
2961 that methods and selectors must be declared before being used.
2962 .IP "\fB\-print\-objc\-runtime\-info\fR" 4
2963 .IX Item "-print-objc-runtime-info"
2964 Generate C header describing the largest structure that is passed by
2965 value, if any.
2966 .SS "Options to Control Diagnostic Messages Formatting"
2967 .IX Subsection "Options to Control Diagnostic Messages Formatting"
2968 Traditionally, diagnostic messages have been formatted irrespective of
2969 the output device's aspect (e.g. its width, ...).  You can use the
2970 options described below
2971 to control the formatting algorithm for diagnostic messages, 
2972 e.g. how many characters per line, how often source location
2973 information should be reported.  Note that some language front ends may not
2974 honor these options.
2975 .IP "\fB\-fmessage\-length=\fR\fIn\fR" 4
2976 .IX Item "-fmessage-length=n"
2977 Try to format error messages so that they fit on lines of about
2978 \&\fIn\fR characters.  If \fIn\fR is zero, then no line-wrapping is
2979 done; each error message appears on a single line.  This is the
2980 default for all front ends.
2981 .IP "\fB\-fdiagnostics\-show\-location=once\fR" 4
2982 .IX Item "-fdiagnostics-show-location=once"
2983 Only meaningful in line-wrapping mode.  Instructs the diagnostic messages
2984 reporter to emit source location information \fIonce\fR; that is, in
2985 case the message is too long to fit on a single physical line and has to
2986 be wrapped, the source location won't be emitted (as prefix) again,
2987 over and over, in subsequent continuation lines.  This is the default
2988 behavior.
2989 .IP "\fB\-fdiagnostics\-show\-location=every\-line\fR" 4
2990 .IX Item "-fdiagnostics-show-location=every-line"
2991 Only meaningful in line-wrapping mode.  Instructs the diagnostic
2992 messages reporter to emit the same source location information (as
2993 prefix) for physical lines that result from the process of breaking
2994 a message which is too long to fit on a single line.
2995 .IP "\fB\-fdiagnostics\-color[=\fR\fI\s-1WHEN\s0\fR\fB]\fR" 4
2996 .IX Item "-fdiagnostics-color[=WHEN]"
2997 .PD 0
2998 .IP "\fB\-fno\-diagnostics\-color\fR" 4
2999 .IX Item "-fno-diagnostics-color"
3000 .PD
3001 Use color in diagnostics.  \fI\s-1WHEN\s0\fR is \fBnever\fR, \fBalways\fR,
3002 or \fBauto\fR.  The default depends on how the compiler has been configured,
3003 it can be any of the above \fI\s-1WHEN\s0\fR options or also \fBnever\fR
3004 if \fB\s-1GCC_COLORS\s0\fR environment variable isn't present in the environment,
3005 and \fBauto\fR otherwise.
3006 \&\fBauto\fR means to use color only when the standard error is a terminal.
3007 The forms \fB\-fdiagnostics\-color\fR and \fB\-fno\-diagnostics\-color\fR are
3008 aliases for \fB\-fdiagnostics\-color=always\fR and
3009 \&\fB\-fdiagnostics\-color=never\fR, respectively.
3010 .Sp
3011 The colors are defined by the environment variable \fB\s-1GCC_COLORS\s0\fR.
3012 Its value is a colon-separated list of capabilities and Select Graphic
3013 Rendition (\s-1SGR\s0) substrings. \s-1SGR\s0 commands are interpreted by the
3014 terminal or terminal emulator.  (See the section in the documentation
3015 of your text terminal for permitted values and their meanings as
3016 character attributes.)  These substring values are integers in decimal
3017 representation and can be concatenated with semicolons.
3018 Common values to concatenate include
3019 \&\fB1\fR for bold,
3020 \&\fB4\fR for underline,
3021 \&\fB5\fR for blink,
3022 \&\fB7\fR for inverse,
3023 \&\fB39\fR for default foreground color,
3024 \&\fB30\fR to \fB37\fR for foreground colors,
3025 \&\fB90\fR to \fB97\fR for 16\-color mode foreground colors,
3026 \&\fB38;5;0\fR to \fB38;5;255\fR
3027 for 88\-color and 256\-color modes foreground colors,
3028 \&\fB49\fR for default background color,
3029 \&\fB40\fR to \fB47\fR for background colors,
3030 \&\fB100\fR to \fB107\fR for 16\-color mode background colors,
3031 and \fB48;5;0\fR to \fB48;5;255\fR
3032 for 88\-color and 256\-color modes background colors.
3033 .Sp
3034 The default \fB\s-1GCC_COLORS\s0\fR is
3035 .Sp
3036 .Vb 1
3037 \&        error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01
3038 .Ve
3039 .Sp
3040 where \fB01;31\fR is bold red, \fB01;35\fR is bold magenta,
3041 \&\fB01;36\fR is bold cyan, \fB01;32\fR is bold green and
3042 \&\fB01\fR is bold. Setting \fB\s-1GCC_COLORS\s0\fR to the empty
3043 string disables colors.
3044 Supported capabilities are as follows.
3045 .RS 4
3046 .ie n .IP """error=""" 4
3047 .el .IP "\f(CWerror=\fR" 4
3048 .IX Item "error="
3049 \&\s-1SGR\s0 substring for error: markers.
3050 .ie n .IP """warning=""" 4
3051 .el .IP "\f(CWwarning=\fR" 4
3052 .IX Item "warning="
3053 \&\s-1SGR\s0 substring for warning: markers.
3054 .ie n .IP """note=""" 4
3055 .el .IP "\f(CWnote=\fR" 4
3056 .IX Item "note="
3057 \&\s-1SGR\s0 substring for note: markers.
3058 .ie n .IP """caret=""" 4
3059 .el .IP "\f(CWcaret=\fR" 4
3060 .IX Item "caret="
3061 \&\s-1SGR\s0 substring for caret line.
3062 .ie n .IP """locus=""" 4
3063 .el .IP "\f(CWlocus=\fR" 4
3064 .IX Item "locus="
3065 \&\s-1SGR\s0 substring for location information, \fBfile:line\fR or
3066 \&\fBfile:line:column\fR etc.
3067 .ie n .IP """quote=""" 4
3068 .el .IP "\f(CWquote=\fR" 4
3069 .IX Item "quote="
3070 \&\s-1SGR\s0 substring for information printed within quotes.
3071 .RE
3072 .RS 4
3073 .RE
3074 .IP "\fB\-fno\-diagnostics\-show\-option\fR" 4
3075 .IX Item "-fno-diagnostics-show-option"
3076 By default, each diagnostic emitted includes text indicating the
3077 command-line option that directly controls the diagnostic (if such an
3078 option is known to the diagnostic machinery).  Specifying the
3079 \&\fB\-fno\-diagnostics\-show\-option\fR flag suppresses that behavior.
3080 .IP "\fB\-fno\-diagnostics\-show\-caret\fR" 4
3081 .IX Item "-fno-diagnostics-show-caret"
3082 By default, each diagnostic emitted includes the original source line
3083 and a caret '^' indicating the column.  This option suppresses this
3084 information.  The source line is truncated to \fIn\fR characters, if
3085 the \fB\-fmessage\-length=n\fR is given.  When the output is done
3086 to the terminal, the width is limited to the width given by the
3087 \&\fB\s-1COLUMNS\s0\fR environment variable or, if not set, to the terminal width.
3088 .SS "Options to Request or Suppress Warnings"
3089 .IX Subsection "Options to Request or Suppress Warnings"
3090 Warnings are diagnostic messages that report constructions that
3091 are not inherently erroneous but that are risky or suggest there
3092 may have been an error.
3093 .PP
3094 The following language-independent options do not enable specific
3095 warnings but control the kinds of diagnostics produced by \s-1GCC\s0.
3096 .IP "\fB\-fsyntax\-only\fR" 4
3097 .IX Item "-fsyntax-only"
3098 Check the code for syntax errors, but don't do anything beyond that.
3099 .IP "\fB\-fmax\-errors=\fR\fIn\fR" 4
3100 .IX Item "-fmax-errors=n"
3101 Limits the maximum number of error messages to \fIn\fR, at which point
3102 \&\s-1GCC\s0 bails out rather than attempting to continue processing the source
3103 code.  If \fIn\fR is 0 (the default), there is no limit on the number
3104 of error messages produced.  If \fB\-Wfatal\-errors\fR is also
3105 specified, then \fB\-Wfatal\-errors\fR takes precedence over this
3106 option.
3107 .IP "\fB\-w\fR" 4
3108 .IX Item "-w"
3109 Inhibit all warning messages.
3110 .IP "\fB\-Werror\fR" 4
3111 .IX Item "-Werror"
3112 Make all warnings into errors.
3113 .IP "\fB\-Werror=\fR" 4
3114 .IX Item "-Werror="
3115 Make the specified warning into an error.  The specifier for a warning
3116 is appended; for example \fB\-Werror=switch\fR turns the warnings
3117 controlled by \fB\-Wswitch\fR into errors.  This switch takes a
3118 negative form, to be used to negate \fB\-Werror\fR for specific
3119 warnings; for example \fB\-Wno\-error=switch\fR makes
3120 \&\fB\-Wswitch\fR warnings not be errors, even when \fB\-Werror\fR
3121 is in effect.
3122 .Sp
3123 The warning message for each controllable warning includes the
3124 option that controls the warning.  That option can then be used with
3125 \&\fB\-Werror=\fR and \fB\-Wno\-error=\fR as described above.
3126 (Printing of the option in the warning message can be disabled using the
3127 \&\fB\-fno\-diagnostics\-show\-option\fR flag.)
3128 .Sp
3129 Note that specifying \fB\-Werror=\fR\fIfoo\fR automatically implies
3130 \&\fB\-W\fR\fIfoo\fR.  However, \fB\-Wno\-error=\fR\fIfoo\fR does not
3131 imply anything.
3132 .IP "\fB\-Wfatal\-errors\fR" 4
3133 .IX Item "-Wfatal-errors"
3134 This option causes the compiler to abort compilation on the first error
3135 occurred rather than trying to keep going and printing further error
3136 messages.
3137 .PP
3138 You can request many specific warnings with options beginning with
3139 \&\fB\-W\fR, for example \fB\-Wimplicit\fR to request warnings on
3140 implicit declarations.  Each of these specific warning options also
3141 has a negative form beginning \fB\-Wno\-\fR to turn off warnings; for
3142 example, \fB\-Wno\-implicit\fR.  This manual lists only one of the
3143 two forms, whichever is not the default.  For further
3144 language-specific options also refer to \fB\*(C+ Dialect Options\fR and
3145 \&\fBObjective-C and Objective\-\*(C+ Dialect Options\fR.
3146 .PP
3147 Some options, such as \fB\-Wall\fR and \fB\-Wextra\fR, turn on other
3148 options, such as \fB\-Wunused\fR, which may turn on further options,
3149 such as \fB\-Wunused\-value\fR. The combined effect of positive and
3150 negative forms is that more specific options have priority over less
3151 specific ones, independently of their position in the command-line. For
3152 options of the same specificity, the last one takes effect. Options
3153 enabled or disabled via pragmas take effect
3154 as if they appeared at the end of the command-line.
3155 .PP
3156 When an unrecognized warning option is requested (e.g.,
3157 \&\fB\-Wunknown\-warning\fR), \s-1GCC\s0 emits a diagnostic stating
3158 that the option is not recognized.  However, if the \fB\-Wno\-\fR form
3159 is used, the behavior is slightly different: no diagnostic is
3160 produced for \fB\-Wno\-unknown\-warning\fR unless other diagnostics
3161 are being produced.  This allows the use of new \fB\-Wno\-\fR options
3162 with old compilers, but if something goes wrong, the compiler
3163 warns that an unrecognized option is present.
3164 .IP "\fB\-Wpedantic\fR" 4
3165 .IX Item "-Wpedantic"
3166 .PD 0
3167 .IP "\fB\-pedantic\fR" 4
3168 .IX Item "-pedantic"
3169 .PD
3170 Issue all the warnings demanded by strict \s-1ISO\s0 C and \s-1ISO\s0 \*(C+;
3171 reject all programs that use forbidden extensions, and some other
3172 programs that do not follow \s-1ISO\s0 C and \s-1ISO\s0 \*(C+.  For \s-1ISO\s0 C, follows the
3173 version of the \s-1ISO\s0 C standard specified by any \fB\-std\fR option used.
3174 .Sp
3175 Valid \s-1ISO\s0 C and \s-1ISO\s0 \*(C+ programs should compile properly with or without
3176 this option (though a rare few require \fB\-ansi\fR or a
3177 \&\fB\-std\fR option specifying the required version of \s-1ISO\s0 C).  However,
3178 without this option, certain \s-1GNU\s0 extensions and traditional C and \*(C+
3179 features are supported as well.  With this option, they are rejected.
3180 .Sp
3181 \&\fB\-Wpedantic\fR does not cause warning messages for use of the
3182 alternate keywords whose names begin and end with \fB_\|_\fR.  Pedantic
3183 warnings are also disabled in the expression that follows
3184 \&\f(CW\*(C`_\|_extension_\|_\*(C'\fR.  However, only system header files should use
3185 these escape routes; application programs should avoid them.
3186 .Sp
3187 Some users try to use \fB\-Wpedantic\fR to check programs for strict \s-1ISO\s0
3188 C conformance.  They soon find that it does not do quite what they want:
3189 it finds some non-ISO practices, but not all\-\-\-only those for which
3190 \&\s-1ISO\s0 C \fIrequires\fR a diagnostic, and some others for which
3191 diagnostics have been added.
3192 .Sp
3193 A feature to report any failure to conform to \s-1ISO\s0 C might be useful in
3194 some instances, but would require considerable additional work and would
3195 be quite different from \fB\-Wpedantic\fR.  We don't have plans to
3196 support such a feature in the near future.
3197 .Sp
3198 Where the standard specified with \fB\-std\fR represents a \s-1GNU\s0
3199 extended dialect of C, such as \fBgnu90\fR or \fBgnu99\fR, there is a
3200 corresponding \fIbase standard\fR, the version of \s-1ISO\s0 C on which the \s-1GNU\s0
3201 extended dialect is based.  Warnings from \fB\-Wpedantic\fR are given
3202 where they are required by the base standard.  (It does not make sense
3203 for such warnings to be given only for features not in the specified \s-1GNU\s0
3204 C dialect, since by definition the \s-1GNU\s0 dialects of C include all
3205 features the compiler supports with the given option, and there would be
3206 nothing to warn about.)
3207 .IP "\fB\-pedantic\-errors\fR" 4
3208 .IX Item "-pedantic-errors"
3209 Give an error whenever the \fIbase standard\fR (see \fB\-Wpedantic\fR)
3210 requires a diagnostic, in some cases where there is undefined behavior
3211 at compile-time and in some other cases that do not prevent compilation
3212 of programs that are valid according to the standard. This is not
3213 equivalent to \fB\-Werror=pedantic\fR, since there are errors enabled
3214 by this option and not enabled by the latter and vice versa.
3215 .IP "\fB\-Wall\fR" 4
3216 .IX Item "-Wall"
3217 This enables all the warnings about constructions that some users
3218 consider questionable, and that are easy to avoid (or modify to
3219 prevent the warning), even in conjunction with macros.  This also
3220 enables some language-specific warnings described in \fB\*(C+ Dialect
3221 Options\fR and \fBObjective-C and Objective\-\*(C+ Dialect Options\fR.
3222 .Sp
3223 \&\fB\-Wall\fR turns on the following warning flags:
3224 .Sp
3225 \&\fB\-Waddress   
3226 \&\-Warray\-bounds\fR (only with\fB \fR\fB\-O2\fR)  
3227 \&\fB\-Wc++11\-compat  \-Wc++14\-compat
3228 \&\-Wchar\-subscripts  
3229 \&\-Wenum\-compare\fR (in C/ObjC; this is on by default in \*(C+) 
3230 \&\fB\-Wimplicit\-int\fR (C and Objective-C only) 
3231 \&\fB\-Wimplicit\-function\-declaration\fR (C and Objective-C only) 
3232 \&\fB\-Wcomment  
3233 \&\-Wformat   
3234 \&\-Wmain\fR (only for C/ObjC and unless\fB \fR\fB\-ffreestanding\fR)  
3235 \&\fB\-Wmaybe\-uninitialized 
3236 \&\-Wmissing\-braces\fR (only for C/ObjC) 
3237 \&\fB\-Wnonnull  
3238 \&\-Wopenmp\-simd 
3239 \&\-Wparentheses  
3240 \&\-Wpointer\-sign  
3241 \&\-Wreorder   
3242 \&\-Wreturn\-type  
3243 \&\-Wsequence\-point  
3244 \&\-Wsign\-compare\fR (only in \*(C+)  
3245 \&\fB\-Wstrict\-aliasing  
3246 \&\-Wstrict\-overflow=1  
3247 \&\-Wswitch  
3248 \&\-Wtrigraphs  
3249 \&\-Wuninitialized  
3250 \&\-Wunknown\-pragmas  
3251 \&\-Wunused\-function  
3252 \&\-Wunused\-label     
3253 \&\-Wunused\-value     
3254 \&\-Wunused\-variable  
3255 \&\-Wvolatile\-register\-var\fR
3256 .Sp
3257 Note that some warning flags are not implied by \fB\-Wall\fR.  Some of
3258 them warn about constructions that users generally do not consider
3259 questionable, but which occasionally you might wish to check for;
3260 others warn about constructions that are necessary or hard to avoid in
3261 some cases, and there is no simple way to modify the code to suppress
3262 the warning. Some of them are enabled by \fB\-Wextra\fR but many of
3263 them must be enabled individually.
3264 .IP "\fB\-Wextra\fR" 4
3265 .IX Item "-Wextra"
3266 This enables some extra warning flags that are not enabled by
3267 \&\fB\-Wall\fR. (This option used to be called \fB\-W\fR.  The older
3268 name is still supported, but the newer name is more descriptive.)
3269 .Sp
3270 \&\fB\-Wclobbered  
3271 \&\-Wempty\-body  
3272 \&\-Wignored\-qualifiers 
3273 \&\-Wmissing\-field\-initializers  
3274 \&\-Wmissing\-parameter\-type\fR (C only)  
3275 \&\fB\-Wold\-style\-declaration\fR (C only)  
3276 \&\fB\-Woverride\-init  
3277 \&\-Wsign\-compare  
3278 \&\-Wtype\-limits  
3279 \&\-Wuninitialized  
3280 \&\-Wunused\-parameter\fR (only with\fB \fR\fB\-Wunused\fR\fB \fRor\fB \fR\fB\-Wall\fR) 
3281 \&\fB\-Wunused\-but\-set\-parameter\fR (only with\fB \fR\fB\-Wunused\fR\fB \fRor\fB \fR\fB\-Wall\fR)  \fB \fR
3282 .Sp
3283 The option \fB\-Wextra\fR also prints warning messages for the
3284 following cases:
3285 .RS 4
3286 .IP "*" 4
3287 A pointer is compared against integer zero with \f(CW\*(C`<\*(C'\fR, \f(CW\*(C`<=\*(C'\fR,
3288 \&\f(CW\*(C`>\*(C'\fR, or \f(CW\*(C`>=\*(C'\fR.
3289 .IP "*" 4
3290 (\*(C+ only) An enumerator and a non-enumerator both appear in a
3291 conditional expression.
3292 .IP "*" 4
3293 (\*(C+ only) Ambiguous virtual bases.
3294 .IP "*" 4
3295 (\*(C+ only) Subscripting an array that has been declared \f(CW\*(C`register\*(C'\fR.
3296 .IP "*" 4
3297 (\*(C+ only) Taking the address of a variable that has been declared
3298 \&\f(CW\*(C`register\*(C'\fR.
3299 .IP "*" 4
3300 (\*(C+ only) A base class is not initialized in a derived class's copy
3301 constructor.
3302 .RE
3303 .RS 4
3304 .RE
3305 .IP "\fB\-Wchar\-subscripts\fR" 4
3306 .IX Item "-Wchar-subscripts"
3307 Warn if an array subscript has type \f(CW\*(C`char\*(C'\fR.  This is a common cause
3308 of error, as programmers often forget that this type is signed on some
3309 machines.
3310 This warning is enabled by \fB\-Wall\fR.
3311 .IP "\fB\-Wcomment\fR" 4
3312 .IX Item "-Wcomment"
3313 Warn whenever a comment-start sequence \fB/*\fR appears in a \fB/*\fR
3314 comment, or whenever a Backslash-Newline appears in a \fB//\fR comment.
3315 This warning is enabled by \fB\-Wall\fR.
3316 .IP "\fB\-Wno\-coverage\-mismatch\fR" 4
3317 .IX Item "-Wno-coverage-mismatch"
3318 Warn if feedback profiles do not match when using the
3319 \&\fB\-fprofile\-use\fR option.
3320 If a source file is changed between compiling with \fB\-fprofile\-gen\fR and
3321 with \fB\-fprofile\-use\fR, the files with the profile feedback can fail
3322 to match the source file and \s-1GCC\s0 cannot use the profile feedback
3323 information.  By default, this warning is enabled and is treated as an
3324 error.  \fB\-Wno\-coverage\-mismatch\fR can be used to disable the
3325 warning or \fB\-Wno\-error=coverage\-mismatch\fR can be used to
3326 disable the error.  Disabling the error for this warning can result in
3327 poorly optimized code and is useful only in the
3328 case of very minor changes such as bug fixes to an existing code-base.
3329 Completely disabling the warning is not recommended.
3330 .IP "\fB\-Wno\-cpp\fR" 4
3331 .IX Item "-Wno-cpp"
3332 (C, Objective-C, \*(C+, Objective\-\*(C+ and Fortran only)
3333 .Sp
3334 Suppress warning messages emitted by \f(CW\*(C`#warning\*(C'\fR directives.
3335 .IP "\fB\-Wdouble\-promotion\fR (C, \*(C+, Objective-C and Objective\-\*(C+ only)" 4
3336 .IX Item "-Wdouble-promotion (C, , Objective-C and Objective- only)"
3337 Give a warning when a value of type \f(CW\*(C`float\*(C'\fR is implicitly
3338 promoted to \f(CW\*(C`double\*(C'\fR.  CPUs with a 32\-bit \*(L"single-precision\*(R"
3339 floating-point unit implement \f(CW\*(C`float\*(C'\fR in hardware, but emulate
3340 \&\f(CW\*(C`double\*(C'\fR in software.  On such a machine, doing computations
3341 using \f(CW\*(C`double\*(C'\fR values is much more expensive because of the
3342 overhead required for software emulation.
3343 .Sp
3344 It is easy to accidentally do computations with \f(CW\*(C`double\*(C'\fR because
3345 floating-point literals are implicitly of type \f(CW\*(C`double\*(C'\fR.  For
3346 example, in:
3347 .Sp
3348 .Vb 4
3349 \&        float area(float radius)
3350 \&        {
3351 \&           return 3.14159 * radius * radius;
3352 \&        }
3353 .Ve
3354 .Sp
3355 the compiler performs the entire computation with \f(CW\*(C`double\*(C'\fR
3356 because the floating-point literal is a \f(CW\*(C`double\*(C'\fR.
3357 .IP "\fB\-Wformat\fR" 4
3358 .IX Item "-Wformat"
3359 .PD 0
3360 .IP "\fB\-Wformat=\fR\fIn\fR" 4
3361 .IX Item "-Wformat=n"
3362 .PD
3363 Check calls to \f(CW\*(C`printf\*(C'\fR and \f(CW\*(C`scanf\*(C'\fR, etc., to make sure that
3364 the arguments supplied have types appropriate to the format string
3365 specified, and that the conversions specified in the format string make
3366 sense.  This includes standard functions, and others specified by format
3367 attributes, in the \f(CW\*(C`printf\*(C'\fR,
3368 \&\f(CW\*(C`scanf\*(C'\fR, \f(CW\*(C`strftime\*(C'\fR and \f(CW\*(C`strfmon\*(C'\fR (an X/Open extension,
3369 not in the C standard) families (or other target-specific families).
3370 Which functions are checked without format attributes having been
3371 specified depends on the standard version selected, and such checks of
3372 functions without the attribute specified are disabled by
3373 \&\fB\-ffreestanding\fR or \fB\-fno\-builtin\fR.
3374 .Sp
3375 The formats are checked against the format features supported by \s-1GNU\s0
3376 libc version 2.2.  These include all \s-1ISO\s0 C90 and C99 features, as well
3377 as features from the Single Unix Specification and some \s-1BSD\s0 and \s-1GNU\s0
3378 extensions.  Other library implementations may not support all these
3379 features; \s-1GCC\s0 does not support warning about features that go beyond a
3380 particular library's limitations.  However, if \fB\-Wpedantic\fR is used
3381 with \fB\-Wformat\fR, warnings are given about format features not
3382 in the selected standard version (but not for \f(CW\*(C`strfmon\*(C'\fR formats,
3383 since those are not in any version of the C standard).
3384 .RS 4
3385 .IP "\fB\-Wformat=1\fR" 4
3386 .IX Item "-Wformat=1"
3387 .PD 0
3388 .IP "\fB\-Wformat\fR" 4
3389 .IX Item "-Wformat"
3390 .PD
3391 Option \fB\-Wformat\fR is equivalent to \fB\-Wformat=1\fR, and
3392 \&\fB\-Wno\-format\fR is equivalent to \fB\-Wformat=0\fR.  Since
3393 \&\fB\-Wformat\fR also checks for null format arguments for several
3394 functions, \fB\-Wformat\fR also implies \fB\-Wnonnull\fR.  Some
3395 aspects of this level of format checking can be disabled by the
3396 options: \fB\-Wno\-format\-contains\-nul\fR,
3397 \&\fB\-Wno\-format\-extra\-args\fR, and \fB\-Wno\-format\-zero\-length\fR.
3398 \&\fB\-Wformat\fR is enabled by \fB\-Wall\fR.
3399 .IP "\fB\-Wno\-format\-contains\-nul\fR" 4
3400 .IX Item "-Wno-format-contains-nul"
3401 If \fB\-Wformat\fR is specified, do not warn about format strings that
3402 contain \s-1NUL\s0 bytes.
3403 .IP "\fB\-Wno\-format\-extra\-args\fR" 4
3404 .IX Item "-Wno-format-extra-args"
3405 If \fB\-Wformat\fR is specified, do not warn about excess arguments to a
3406 \&\f(CW\*(C`printf\*(C'\fR or \f(CW\*(C`scanf\*(C'\fR format function.  The C standard specifies
3407 that such arguments are ignored.
3408 .Sp
3409 Where the unused arguments lie between used arguments that are
3410 specified with \fB$\fR operand number specifications, normally
3411 warnings are still given, since the implementation could not know what
3412 type to pass to \f(CW\*(C`va_arg\*(C'\fR to skip the unused arguments.  However,
3413 in the case of \f(CW\*(C`scanf\*(C'\fR formats, this option suppresses the
3414 warning if the unused arguments are all pointers, since the Single
3415 Unix Specification says that such unused arguments are allowed.
3416 .IP "\fB\-Wno\-format\-zero\-length\fR" 4
3417 .IX Item "-Wno-format-zero-length"
3418 If \fB\-Wformat\fR is specified, do not warn about zero-length formats.
3419 The C standard specifies that zero-length formats are allowed.
3420 .IP "\fB\-Wformat=2\fR" 4
3421 .IX Item "-Wformat=2"
3422 Enable \fB\-Wformat\fR plus additional format checks.  Currently
3423 equivalent to \fB\-Wformat \-Wformat\-nonliteral \-Wformat\-security
3424 \&\-Wformat\-signedness \-Wformat\-y2k\fR.
3425 .IP "\fB\-Wformat\-nonliteral\fR" 4
3426 .IX Item "-Wformat-nonliteral"
3427 If \fB\-Wformat\fR is specified, also warn if the format string is not a
3428 string literal and so cannot be checked, unless the format function
3429 takes its format arguments as a \f(CW\*(C`va_list\*(C'\fR.
3430 .IP "\fB\-Wformat\-security\fR" 4
3431 .IX Item "-Wformat-security"
3432 If \fB\-Wformat\fR is specified, also warn about uses of format
3433 functions that represent possible security problems.  At present, this
3434 warns about calls to \f(CW\*(C`printf\*(C'\fR and \f(CW\*(C`scanf\*(C'\fR functions where the
3435 format string is not a string literal and there are no format arguments,
3436 as in \f(CW\*(C`printf (foo);\*(C'\fR.  This may be a security hole if the format
3437 string came from untrusted input and contains \fB\f(CB%n\fB\fR.  (This is
3438 currently a subset of what \fB\-Wformat\-nonliteral\fR warns about, but
3439 in future warnings may be added to \fB\-Wformat\-security\fR that are not
3440 included in \fB\-Wformat\-nonliteral\fR.)
3441 .IP "\fB\-Wformat\-signedness\fR" 4
3442 .IX Item "-Wformat-signedness"
3443 If \fB\-Wformat\fR is specified, also warn if the format string
3444 requires an unsigned argument and the argument is signed and vice versa.
3445 .IP "\fB\-Wformat\-y2k\fR" 4
3446 .IX Item "-Wformat-y2k"
3447 If \fB\-Wformat\fR is specified, also warn about \f(CW\*(C`strftime\*(C'\fR
3448 formats that may yield only a two-digit year.
3449 .RE
3450 .RS 4
3451 .RE
3452 .IP "\fB\-Wnonnull\fR" 4
3453 .IX Item "-Wnonnull"
3454 Warn about passing a null pointer for arguments marked as
3455 requiring a non-null value by the \f(CW\*(C`nonnull\*(C'\fR function attribute.
3456 .Sp
3457 \&\fB\-Wnonnull\fR is included in \fB\-Wall\fR and \fB\-Wformat\fR.  It
3458 can be disabled with the \fB\-Wno\-nonnull\fR option.
3459 .IP "\fB\-Winit\-self\fR (C, \*(C+, Objective-C and Objective\-\*(C+ only)" 4
3460 .IX Item "-Winit-self (C, , Objective-C and Objective- only)"
3461 Warn about uninitialized variables that are initialized with themselves.
3462 Note this option can only be used with the \fB\-Wuninitialized\fR option.
3463 .Sp
3464 For example, \s-1GCC\s0 warns about \f(CW\*(C`i\*(C'\fR being uninitialized in the
3465 following snippet only when \fB\-Winit\-self\fR has been specified:
3466 .Sp
3467 .Vb 5
3468 \&        int f()
3469 \&        {
3470 \&          int i = i;
3471 \&          return i;
3472 \&        }
3473 .Ve
3474 .Sp
3475 This warning is enabled by \fB\-Wall\fR in \*(C+.
3476 .IP "\fB\-Wimplicit\-int\fR (C and Objective-C only)" 4
3477 .IX Item "-Wimplicit-int (C and Objective-C only)"
3478 Warn when a declaration does not specify a type.
3479 This warning is enabled by \fB\-Wall\fR.
3480 .IP "\fB\-Wimplicit\-function\-declaration\fR (C and Objective-C only)" 4
3481 .IX Item "-Wimplicit-function-declaration (C and Objective-C only)"
3482 Give a warning whenever a function is used before being declared. In
3483 C99 mode (\fB\-std=c99\fR or \fB\-std=gnu99\fR), this warning is
3484 enabled by default and it is made into an error by
3485 \&\fB\-pedantic\-errors\fR. This warning is also enabled by
3486 \&\fB\-Wall\fR.
3487 .IP "\fB\-Wimplicit\fR (C and Objective-C only)" 4
3488 .IX Item "-Wimplicit (C and Objective-C only)"
3489 Same as \fB\-Wimplicit\-int\fR and \fB\-Wimplicit\-function\-declaration\fR.
3490 This warning is enabled by \fB\-Wall\fR.
3491 .IP "\fB\-Wignored\-qualifiers\fR (C and \*(C+ only)" 4
3492 .IX Item "-Wignored-qualifiers (C and  only)"
3493 Warn if the return type of a function has a type qualifier
3494 such as \f(CW\*(C`const\*(C'\fR.  For \s-1ISO\s0 C such a type qualifier has no effect,
3495 since the value returned by a function is not an lvalue.
3496 For \*(C+, the warning is only emitted for scalar types or \f(CW\*(C`void\*(C'\fR.
3497 \&\s-1ISO\s0 C prohibits qualified \f(CW\*(C`void\*(C'\fR return types on function
3498 definitions, so such return types always receive a warning
3499 even without this option.
3500 .Sp
3501 This warning is also enabled by \fB\-Wextra\fR.
3502 .IP "\fB\-Wmain\fR" 4
3503 .IX Item "-Wmain"
3504 Warn if the type of \f(CW\*(C`main\*(C'\fR is suspicious.  \f(CW\*(C`main\*(C'\fR should be
3505 a function with external linkage, returning int, taking either zero
3506 arguments, two, or three arguments of appropriate types.  This warning
3507 is enabled by default in \*(C+ and is enabled by either \fB\-Wall\fR
3508 or \fB\-Wpedantic\fR.
3509 .IP "\fB\-Wmissing\-braces\fR" 4
3510 .IX Item "-Wmissing-braces"
3511 Warn if an aggregate or union initializer is not fully bracketed.  In
3512 the following example, the initializer for \f(CW\*(C`a\*(C'\fR is not fully
3513 bracketed, but that for \f(CW\*(C`b\*(C'\fR is fully bracketed.  This warning is
3514 enabled by \fB\-Wall\fR in C.
3515 .Sp
3516 .Vb 2
3517 \&        int a[2][2] = { 0, 1, 2, 3 };
3518 \&        int b[2][2] = { { 0, 1 }, { 2, 3 } };
3519 .Ve
3520 .Sp
3521 This warning is enabled by \fB\-Wall\fR.
3522 .IP "\fB\-Wmissing\-include\-dirs\fR (C, \*(C+, Objective-C and Objective\-\*(C+ only)" 4
3523 .IX Item "-Wmissing-include-dirs (C, , Objective-C and Objective- only)"
3524 Warn if a user-supplied include directory does not exist.
3525 .IP "\fB\-Wparentheses\fR" 4
3526 .IX Item "-Wparentheses"
3527 Warn if parentheses are omitted in certain contexts, such
3528 as when there is an assignment in a context where a truth value
3529 is expected, or when operators are nested whose precedence people
3530 often get confused about.
3531 .Sp
3532 Also warn if a comparison like \f(CW\*(C`x<=y<=z\*(C'\fR appears; this is
3533 equivalent to \f(CW\*(C`(x<=y ? 1 : 0) <= z\*(C'\fR, which is a different
3534 interpretation from that of ordinary mathematical notation.
3535 .Sp
3536 Also warn about constructions where there may be confusion to which
3537 \&\f(CW\*(C`if\*(C'\fR statement an \f(CW\*(C`else\*(C'\fR branch belongs.  Here is an example of
3538 such a case:
3539 .Sp
3540 .Vb 7
3541 \&        {
3542 \&          if (a)
3543 \&            if (b)
3544 \&              foo ();
3545 \&          else
3546 \&            bar ();
3547 \&        }
3548 .Ve
3549 .Sp
3550 In C/\*(C+, every \f(CW\*(C`else\*(C'\fR branch belongs to the innermost possible
3551 \&\f(CW\*(C`if\*(C'\fR statement, which in this example is \f(CW\*(C`if (b)\*(C'\fR.  This is
3552 often not what the programmer expected, as illustrated in the above
3553 example by indentation the programmer chose.  When there is the
3554 potential for this confusion, \s-1GCC\s0 issues a warning when this flag
3555 is specified.  To eliminate the warning, add explicit braces around
3556 the innermost \f(CW\*(C`if\*(C'\fR statement so there is no way the \f(CW\*(C`else\*(C'\fR
3557 can belong to the enclosing \f(CW\*(C`if\*(C'\fR.  The resulting code
3558 looks like this:
3559 .Sp
3560 .Vb 9
3561 \&        {
3562 \&          if (a)
3563 \&            {
3564 \&              if (b)
3565 \&                foo ();
3566 \&              else
3567 \&                bar ();
3568 \&            }
3569 \&        }
3570 .Ve
3571 .Sp
3572 Also warn for dangerous uses of the \s-1GNU\s0 extension to
3573 \&\f(CW\*(C`?:\*(C'\fR with omitted middle operand. When the condition
3574 in the \f(CW\*(C`?\*(C'\fR: operator is a boolean expression, the omitted value is
3575 always 1.  Often programmers expect it to be a value computed
3576 inside the conditional expression instead.
3577 .Sp
3578 This warning is enabled by \fB\-Wall\fR.
3579 .IP "\fB\-Wsequence\-point\fR" 4
3580 .IX Item "-Wsequence-point"
3581 Warn about code that may have undefined semantics because of violations
3582 of sequence point rules in the C and \*(C+ standards.
3583 .Sp
3584 The C and \*(C+ standards define the order in which expressions in a C/\*(C+
3585 program are evaluated in terms of \fIsequence points\fR, which represent
3586 a partial ordering between the execution of parts of the program: those
3587 executed before the sequence point, and those executed after it.  These
3588 occur after the evaluation of a full expression (one which is not part
3589 of a larger expression), after the evaluation of the first operand of a
3590 \&\f(CW\*(C`&&\*(C'\fR, \f(CW\*(C`||\*(C'\fR, \f(CW\*(C`? :\*(C'\fR or \f(CW\*(C`,\*(C'\fR (comma) operator, before a
3591 function is called (but after the evaluation of its arguments and the
3592 expression denoting the called function), and in certain other places.
3593 Other than as expressed by the sequence point rules, the order of
3594 evaluation of subexpressions of an expression is not specified.  All
3595 these rules describe only a partial order rather than a total order,
3596 since, for example, if two functions are called within one expression
3597 with no sequence point between them, the order in which the functions
3598 are called is not specified.  However, the standards committee have
3599 ruled that function calls do not overlap.
3600 .Sp
3601 It is not specified when between sequence points modifications to the
3602 values of objects take effect.  Programs whose behavior depends on this
3603 have undefined behavior; the C and \*(C+ standards specify that \*(L"Between
3604 the previous and next sequence point an object shall have its stored
3605 value modified at most once by the evaluation of an expression.
3606 Furthermore, the prior value shall be read only to determine the value
3607 to be stored.\*(R".  If a program breaks these rules, the results on any
3608 particular implementation are entirely unpredictable.
3609 .Sp
3610 Examples of code with undefined behavior are \f(CW\*(C`a = a++;\*(C'\fR, \f(CW\*(C`a[n]
3611 = b[n++]\*(C'\fR and \f(CW\*(C`a[i++] = i;\*(C'\fR.  Some more complicated cases are not
3612 diagnosed by this option, and it may give an occasional false positive
3613 result, but in general it has been found fairly effective at detecting
3614 this sort of problem in programs.
3615 .Sp
3616 The standard is worded confusingly, therefore there is some debate
3617 over the precise meaning of the sequence point rules in subtle cases.
3618 Links to discussions of the problem, including proposed formal
3619 definitions, may be found on the \s-1GCC\s0 readings page, at
3620 <\fBhttp://gcc.gnu.org/readings.html\fR>.
3621 .Sp
3622 This warning is enabled by \fB\-Wall\fR for C and \*(C+.
3623 .IP "\fB\-Wno\-return\-local\-addr\fR" 4
3624 .IX Item "-Wno-return-local-addr"
3625 Do not warn about returning a pointer (or in \*(C+, a reference) to a
3626 variable that goes out of scope after the function returns.
3627 .IP "\fB\-Wreturn\-type\fR" 4
3628 .IX Item "-Wreturn-type"
3629 Warn whenever a function is defined with a return type that defaults
3630 to \f(CW\*(C`int\*(C'\fR.  Also warn about any \f(CW\*(C`return\*(C'\fR statement with no
3631 return value in a function whose return type is not \f(CW\*(C`void\*(C'\fR
3632 (falling off the end of the function body is considered returning
3633 without a value), and about a \f(CW\*(C`return\*(C'\fR statement with an
3634 expression in a function whose return type is \f(CW\*(C`void\*(C'\fR.
3635 .Sp
3636 For \*(C+, a function without return type always produces a diagnostic
3637 message, even when \fB\-Wno\-return\-type\fR is specified.  The only
3638 exceptions are \f(CW\*(C`main\*(C'\fR and functions defined in system headers.
3639 .Sp
3640 This warning is enabled by \fB\-Wall\fR.
3641 .IP "\fB\-Wshift\-count\-negative\fR" 4
3642 .IX Item "-Wshift-count-negative"
3643 Warn if shift count is negative. This warning is enabled by default.
3644 .IP "\fB\-Wshift\-count\-overflow\fR" 4
3645 .IX Item "-Wshift-count-overflow"
3646 Warn if shift count >= width of type. This warning is enabled by default.
3647 .IP "\fB\-Wswitch\fR" 4
3648 .IX Item "-Wswitch"
3649 Warn whenever a \f(CW\*(C`switch\*(C'\fR statement has an index of enumerated type
3650 and lacks a \f(CW\*(C`case\*(C'\fR for one or more of the named codes of that
3651 enumeration.  (The presence of a \f(CW\*(C`default\*(C'\fR label prevents this
3652 warning.)  \f(CW\*(C`case\*(C'\fR labels outside the enumeration range also
3653 provoke warnings when this option is used (even if there is a
3654 \&\f(CW\*(C`default\*(C'\fR label).
3655 This warning is enabled by \fB\-Wall\fR.
3656 .IP "\fB\-Wswitch\-default\fR" 4
3657 .IX Item "-Wswitch-default"
3658 Warn whenever a \f(CW\*(C`switch\*(C'\fR statement does not have a \f(CW\*(C`default\*(C'\fR
3659 case.
3660 .IP "\fB\-Wswitch\-enum\fR" 4
3661 .IX Item "-Wswitch-enum"
3662 Warn whenever a \f(CW\*(C`switch\*(C'\fR statement has an index of enumerated type
3663 and lacks a \f(CW\*(C`case\*(C'\fR for one or more of the named codes of that
3664 enumeration.  \f(CW\*(C`case\*(C'\fR labels outside the enumeration range also
3665 provoke warnings when this option is used.  The only difference
3666 between \fB\-Wswitch\fR and this option is that this option gives a
3667 warning about an omitted enumeration code even if there is a
3668 \&\f(CW\*(C`default\*(C'\fR label.
3669 .IP "\fB\-Wswitch\-bool\fR" 4
3670 .IX Item "-Wswitch-bool"
3671 Warn whenever a \f(CW\*(C`switch\*(C'\fR statement has an index of boolean type.
3672 It is possible to suppress this warning by casting the controlling
3673 expression to a type other than \f(CW\*(C`bool\*(C'\fR.  For example:
3674 .Sp
3675 .Vb 4
3676 \&        switch ((int) (a == 4))
3677 \&          {
3678 \&          ...
3679 \&          }
3680 .Ve
3681 .Sp
3682 This warning is enabled by default for C and \*(C+ programs.
3683 .IP "\fB\-Wsync\-nand\fR (C and \*(C+ only)" 4
3684 .IX Item "-Wsync-nand (C and  only)"
3685 Warn when \f(CW\*(C`_\|_sync_fetch_and_nand\*(C'\fR and \f(CW\*(C`_\|_sync_nand_and_fetch\*(C'\fR
3686 built-in functions are used.  These functions changed semantics in \s-1GCC\s0 4.4.
3687 .IP "\fB\-Wtrigraphs\fR" 4
3688 .IX Item "-Wtrigraphs"
3689 Warn if any trigraphs are encountered that might change the meaning of
3690 the program (trigraphs within comments are not warned about).
3691 This warning is enabled by \fB\-Wall\fR.
3692 .IP "\fB\-Wunused\-but\-set\-parameter\fR" 4
3693 .IX Item "-Wunused-but-set-parameter"
3694 Warn whenever a function parameter is assigned to, but otherwise unused
3695 (aside from its declaration).
3696 .Sp
3697 To suppress this warning use the \f(CW\*(C`unused\*(C'\fR attribute.
3698 .Sp
3699 This warning is also enabled by \fB\-Wunused\fR together with
3700 \&\fB\-Wextra\fR.
3701 .IP "\fB\-Wunused\-but\-set\-variable\fR" 4
3702 .IX Item "-Wunused-but-set-variable"
3703 Warn whenever a local variable is assigned to, but otherwise unused
3704 (aside from its declaration).
3705 This warning is enabled by \fB\-Wall\fR.
3706 .Sp
3707 To suppress this warning use the \f(CW\*(C`unused\*(C'\fR attribute.
3708 .Sp
3709 This warning is also enabled by \fB\-Wunused\fR, which is enabled
3710 by \fB\-Wall\fR.
3711 .IP "\fB\-Wunused\-function\fR" 4
3712 .IX Item "-Wunused-function"
3713 Warn whenever a static function is declared but not defined or a
3714 non-inline static function is unused.
3715 This warning is enabled by \fB\-Wall\fR.
3716 .IP "\fB\-Wunused\-label\fR" 4
3717 .IX Item "-Wunused-label"
3718 Warn whenever a label is declared but not used.
3719 This warning is enabled by \fB\-Wall\fR.
3720 .Sp
3721 To suppress this warning use the \f(CW\*(C`unused\*(C'\fR attribute.
3722 .IP "\fB\-Wunused\-local\-typedefs\fR (C, Objective-C, \*(C+ and Objective\-\*(C+ only)" 4
3723 .IX Item "-Wunused-local-typedefs (C, Objective-C,  and Objective- only)"
3724 Warn when a typedef locally defined in a function is not used.
3725 This warning is enabled by \fB\-Wall\fR.
3726 .IP "\fB\-Wunused\-parameter\fR" 4
3727 .IX Item "-Wunused-parameter"
3728 Warn whenever a function parameter is unused aside from its declaration.
3729 .Sp
3730 To suppress this warning use the \f(CW\*(C`unused\*(C'\fR attribute.
3731 .IP "\fB\-Wno\-unused\-result\fR" 4
3732 .IX Item "-Wno-unused-result"
3733 Do not warn if a caller of a function marked with attribute
3734 \&\f(CW\*(C`warn_unused_result\*(C'\fR does not use
3735 its return value. The default is \fB\-Wunused\-result\fR.
3736 .IP "\fB\-Wunused\-variable\fR" 4
3737 .IX Item "-Wunused-variable"
3738 Warn whenever a local variable or non-constant static variable is unused
3739 aside from its declaration.
3740 This warning is enabled by \fB\-Wall\fR.
3741 .Sp
3742 To suppress this warning use the \f(CW\*(C`unused\*(C'\fR attribute.
3743 .IP "\fB\-Wunused\-value\fR" 4
3744 .IX Item "-Wunused-value"
3745 Warn whenever a statement computes a result that is explicitly not
3746 used. To suppress this warning cast the unused expression to
3747 \&\f(CW\*(C`void\*(C'\fR. This includes an expression-statement or the left-hand
3748 side of a comma expression that contains no side effects. For example,
3749 an expression such as \f(CW\*(C`x[i,j]\*(C'\fR causes a warning, while
3750 \&\f(CW\*(C`x[(void)i,j]\*(C'\fR does not.
3751 .Sp
3752 This warning is enabled by \fB\-Wall\fR.
3753 .IP "\fB\-Wunused\fR" 4
3754 .IX Item "-Wunused"
3755 All the above \fB\-Wunused\fR options combined.
3756 .Sp
3757 In order to get a warning about an unused function parameter, you must
3758 either specify \fB\-Wextra \-Wunused\fR (note that \fB\-Wall\fR implies
3759 \&\fB\-Wunused\fR), or separately specify \fB\-Wunused\-parameter\fR.
3760 .IP "\fB\-Wuninitialized\fR" 4
3761 .IX Item "-Wuninitialized"
3762 Warn if an automatic variable is used without first being initialized
3763 or if a variable may be clobbered by a \f(CW\*(C`setjmp\*(C'\fR call. In \*(C+,
3764 warn if a non-static reference or non-static \f(CW\*(C`const\*(C'\fR member
3765 appears in a class without constructors.
3766 .Sp
3767 If you want to warn about code that uses the uninitialized value of the
3768 variable in its own initializer, use the \fB\-Winit\-self\fR option.
3769 .Sp
3770 These warnings occur for individual uninitialized or clobbered
3771 elements of structure, union or array variables as well as for
3772 variables that are uninitialized or clobbered as a whole.  They do
3773 not occur for variables or elements declared \f(CW\*(C`volatile\*(C'\fR.  Because
3774 these warnings depend on optimization, the exact variables or elements
3775 for which there are warnings depends on the precise optimization
3776 options and version of \s-1GCC\s0 used.
3777 .Sp
3778 Note that there may be no warning about a variable that is used only
3779 to compute a value that itself is never used, because such
3780 computations may be deleted by data flow analysis before the warnings
3781 are printed.
3782 .IP "\fB\-Wmaybe\-uninitialized\fR" 4
3783 .IX Item "-Wmaybe-uninitialized"
3784 For an automatic variable, if there exists a path from the function
3785 entry to a use of the variable that is initialized, but there exist
3786 some other paths for which the variable is not initialized, the compiler
3787 emits a warning if it cannot prove the uninitialized paths are not
3788 executed at run time. These warnings are made optional because \s-1GCC\s0 is
3789 not smart enough to see all the reasons why the code might be correct
3790 in spite of appearing to have an error.  Here is one example of how
3791 this can happen:
3792 .Sp
3793 .Vb 12
3794 \&        {
3795 \&          int x;
3796 \&          switch (y)
3797 \&            {
3798 \&            case 1: x = 1;
3799 \&              break;
3800 \&            case 2: x = 4;
3801 \&              break;
3802 \&            case 3: x = 5;
3803 \&            }
3804 \&          foo (x);
3805 \&        }
3806 .Ve
3807 .Sp
3808 If the value of \f(CW\*(C`y\*(C'\fR is always 1, 2 or 3, then \f(CW\*(C`x\*(C'\fR is
3809 always initialized, but \s-1GCC\s0 doesn't know this. To suppress the
3810 warning, you need to provide a default case with \fIassert\fR\|(0) or
3811 similar code.
3812 .Sp
3813 This option also warns when a non-volatile automatic variable might be
3814 changed by a call to \f(CW\*(C`longjmp\*(C'\fR.  These warnings as well are possible
3815 only in optimizing compilation.
3816 .Sp
3817 The compiler sees only the calls to \f(CW\*(C`setjmp\*(C'\fR.  It cannot know
3818 where \f(CW\*(C`longjmp\*(C'\fR will be called; in fact, a signal handler could
3819 call it at any point in the code.  As a result, you may get a warning
3820 even when there is in fact no problem because \f(CW\*(C`longjmp\*(C'\fR cannot
3821 in fact be called at the place that would cause a problem.
3822 .Sp
3823 Some spurious warnings can be avoided if you declare all the functions
3824 you use that never return as \f(CW\*(C`noreturn\*(C'\fR.
3825 .Sp
3826 This warning is enabled by \fB\-Wall\fR or \fB\-Wextra\fR.
3827 .IP "\fB\-Wunknown\-pragmas\fR" 4
3828 .IX Item "-Wunknown-pragmas"
3829 Warn when a \f(CW\*(C`#pragma\*(C'\fR directive is encountered that is not understood by 
3830 \&\s-1GCC\s0.  If this command-line option is used, warnings are even issued
3831 for unknown pragmas in system header files.  This is not the case if
3832 the warnings are only enabled by the \fB\-Wall\fR command-line option.
3833 .IP "\fB\-Wno\-pragmas\fR" 4
3834 .IX Item "-Wno-pragmas"
3835 Do not warn about misuses of pragmas, such as incorrect parameters,
3836 invalid syntax, or conflicts between pragmas.  See also
3837 \&\fB\-Wunknown\-pragmas\fR.
3838 .IP "\fB\-Wstrict\-aliasing\fR" 4
3839 .IX Item "-Wstrict-aliasing"
3840 This option is only active when \fB\-fstrict\-aliasing\fR is active.
3841 It warns about code that might break the strict aliasing rules that the
3842 compiler is using for optimization.  The warning does not catch all
3843 cases, but does attempt to catch the more common pitfalls.  It is
3844 included in \fB\-Wall\fR.
3845 It is equivalent to \fB\-Wstrict\-aliasing=3\fR
3846 .IP "\fB\-Wstrict\-aliasing=n\fR" 4
3847 .IX Item "-Wstrict-aliasing=n"
3848 This option is only active when \fB\-fstrict\-aliasing\fR is active.
3849 It warns about code that might break the strict aliasing rules that the
3850 compiler is using for optimization.
3851 Higher levels correspond to higher accuracy (fewer false positives).
3852 Higher levels also correspond to more effort, similar to the way \fB\-O\fR 
3853 works.
3854 \&\fB\-Wstrict\-aliasing\fR is equivalent to \fB\-Wstrict\-aliasing=3\fR.
3855 .Sp
3856 Level 1: Most aggressive, quick, least accurate.
3857 Possibly useful when higher levels
3858 do not warn but \fB\-fstrict\-aliasing\fR still breaks the code, as it has very few
3859 false negatives.  However, it has many false positives.
3860 Warns for all pointer conversions between possibly incompatible types,
3861 even if never dereferenced.  Runs in the front end only.
3862 .Sp
3863 Level 2: Aggressive, quick, not too precise.
3864 May still have many false positives (not as many as level 1 though),
3865 and few false negatives (but possibly more than level 1).
3866 Unlike level 1, it only warns when an address is taken.  Warns about
3867 incomplete types.  Runs in the front end only.
3868 .Sp
3869 Level 3 (default for \fB\-Wstrict\-aliasing\fR):
3870 Should have very few false positives and few false
3871 negatives.  Slightly slower than levels 1 or 2 when optimization is enabled.
3872 Takes care of the common pun+dereference pattern in the front end:
3873 \&\f(CW\*(C`*(int*)&some_float\*(C'\fR.
3874 If optimization is enabled, it also runs in the back end, where it deals
3875 with multiple statement cases using flow-sensitive points-to information.
3876 Only warns when the converted pointer is dereferenced.
3877 Does not warn about incomplete types.
3878 .IP "\fB\-Wstrict\-overflow\fR" 4
3879 .IX Item "-Wstrict-overflow"
3880 .PD 0
3881 .IP "\fB\-Wstrict\-overflow=\fR\fIn\fR" 4
3882 .IX Item "-Wstrict-overflow=n"
3883 .PD
3884 This option is only active when \fB\-fstrict\-overflow\fR is active.
3885 It warns about cases where the compiler optimizes based on the
3886 assumption that signed overflow does not occur.  Note that it does not
3887 warn about all cases where the code might overflow: it only warns
3888 about cases where the compiler implements some optimization.  Thus
3889 this warning depends on the optimization level.
3890 .Sp
3891 An optimization that assumes that signed overflow does not occur is
3892 perfectly safe if the values of the variables involved are such that
3893 overflow never does, in fact, occur.  Therefore this warning can
3894 easily give a false positive: a warning about code that is not
3895 actually a problem.  To help focus on important issues, several
3896 warning levels are defined.  No warnings are issued for the use of
3897 undefined signed overflow when estimating how many iterations a loop
3898 requires, in particular when determining whether a loop will be
3899 executed at all.
3900 .RS 4
3901 .IP "\fB\-Wstrict\-overflow=1\fR" 4
3902 .IX Item "-Wstrict-overflow=1"
3903 Warn about cases that are both questionable and easy to avoid.  For
3904 example,  with \fB\-fstrict\-overflow\fR, the compiler simplifies
3905 \&\f(CW\*(C`x + 1 > x\*(C'\fR to \f(CW1\fR.  This level of
3906 \&\fB\-Wstrict\-overflow\fR is enabled by \fB\-Wall\fR; higher levels
3907 are not, and must be explicitly requested.
3908 .IP "\fB\-Wstrict\-overflow=2\fR" 4
3909 .IX Item "-Wstrict-overflow=2"
3910 Also warn about other cases where a comparison is simplified to a
3911 constant.  For example: \f(CW\*(C`abs (x) >= 0\*(C'\fR.  This can only be
3912 simplified when \fB\-fstrict\-overflow\fR is in effect, because
3913 \&\f(CW\*(C`abs (INT_MIN)\*(C'\fR overflows to \f(CW\*(C`INT_MIN\*(C'\fR, which is less than
3914 zero.  \fB\-Wstrict\-overflow\fR (with no level) is the same as
3915 \&\fB\-Wstrict\-overflow=2\fR.
3916 .IP "\fB\-Wstrict\-overflow=3\fR" 4
3917 .IX Item "-Wstrict-overflow=3"
3918 Also warn about other cases where a comparison is simplified.  For
3919 example: \f(CW\*(C`x + 1 > 1\*(C'\fR is simplified to \f(CW\*(C`x > 0\*(C'\fR.
3920 .IP "\fB\-Wstrict\-overflow=4\fR" 4
3921 .IX Item "-Wstrict-overflow=4"
3922 Also warn about other simplifications not covered by the above cases.
3923 For example: \f(CW\*(C`(x * 10) / 5\*(C'\fR is simplified to \f(CW\*(C`x * 2\*(C'\fR.
3924 .IP "\fB\-Wstrict\-overflow=5\fR" 4
3925 .IX Item "-Wstrict-overflow=5"
3926 Also warn about cases where the compiler reduces the magnitude of a
3927 constant involved in a comparison.  For example: \f(CW\*(C`x + 2 > y\*(C'\fR is
3928 simplified to \f(CW\*(C`x + 1 >= y\*(C'\fR.  This is reported only at the
3929 highest warning level because this simplification applies to many
3930 comparisons, so this warning level gives a very large number of
3931 false positives.
3932 .RE
3933 .RS 4
3934 .RE
3935 .IP "\fB\-Wsuggest\-attribute=\fR[\fBpure\fR|\fBconst\fR|\fBnoreturn\fR|\fBformat\fR]" 4
3936 .IX Item "-Wsuggest-attribute=[pure|const|noreturn|format]"
3937 Warn for cases where adding an attribute may be beneficial. The
3938 attributes currently supported are listed below.
3939 .RS 4
3940 .IP "\fB\-Wsuggest\-attribute=pure\fR" 4
3941 .IX Item "-Wsuggest-attribute=pure"
3942 .PD 0
3943 .IP "\fB\-Wsuggest\-attribute=const\fR" 4
3944 .IX Item "-Wsuggest-attribute=const"
3945 .IP "\fB\-Wsuggest\-attribute=noreturn\fR" 4
3946 .IX Item "-Wsuggest-attribute=noreturn"
3947 .PD
3948 Warn about functions that might be candidates for attributes
3949 \&\f(CW\*(C`pure\*(C'\fR, \f(CW\*(C`const\*(C'\fR or \f(CW\*(C`noreturn\*(C'\fR.  The compiler only warns for
3950 functions visible in other compilation units or (in the case of \f(CW\*(C`pure\*(C'\fR and
3951 \&\f(CW\*(C`const\*(C'\fR) if it cannot prove that the function returns normally. A function
3952 returns normally if it doesn't contain an infinite loop or return abnormally
3953 by throwing, calling \f(CW\*(C`abort()\*(C'\fR or trapping.  This analysis requires option
3954 \&\fB\-fipa\-pure\-const\fR, which is enabled by default at \fB\-O\fR and
3955 higher.  Higher optimization levels improve the accuracy of the analysis.
3956 .IP "\fB\-Wsuggest\-attribute=format\fR" 4
3957 .IX Item "-Wsuggest-attribute=format"
3958 .PD 0
3959 .IP "\fB\-Wmissing\-format\-attribute\fR" 4
3960 .IX Item "-Wmissing-format-attribute"
3961 .PD
3962 Warn about function pointers that might be candidates for \f(CW\*(C`format\*(C'\fR
3963 attributes.  Note these are only possible candidates, not absolute ones.
3964 \&\s-1GCC\s0 guesses that function pointers with \f(CW\*(C`format\*(C'\fR attributes that
3965 are used in assignment, initialization, parameter passing or return
3966 statements should have a corresponding \f(CW\*(C`format\*(C'\fR attribute in the
3967 resulting type.  I.e. the left-hand side of the assignment or
3968 initialization, the type of the parameter variable, or the return type
3969 of the containing function respectively should also have a \f(CW\*(C`format\*(C'\fR
3970 attribute to avoid the warning.
3971 .Sp
3972 \&\s-1GCC\s0 also warns about function definitions that might be
3973 candidates for \f(CW\*(C`format\*(C'\fR attributes.  Again, these are only
3974 possible candidates.  \s-1GCC\s0 guesses that \f(CW\*(C`format\*(C'\fR attributes
3975 might be appropriate for any function that calls a function like
3976 \&\f(CW\*(C`vprintf\*(C'\fR or \f(CW\*(C`vscanf\*(C'\fR, but this might not always be the
3977 case, and some functions for which \f(CW\*(C`format\*(C'\fR attributes are
3978 appropriate may not be detected.
3979 .RE
3980 .RS 4
3981 .RE
3982 .IP "\fB\-Wsuggest\-final\-types\fR" 4
3983 .IX Item "-Wsuggest-final-types"
3984 Warn about types with virtual methods where code quality would be improved
3985 if the type were declared with the \*(C+11 \f(CW\*(C`final\*(C'\fR specifier, 
3986 or, if possible,
3987 declared in an anonymous namespace. This allows \s-1GCC\s0 to more aggressively
3988 devirtualize the polymorphic calls. This warning is more effective with link
3989 time optimization, where the information about the class hierarchy graph is
3990 more complete.
3991 .IP "\fB\-Wsuggest\-final\-methods\fR" 4
3992 .IX Item "-Wsuggest-final-methods"
3993 Warn about virtual methods where code quality would be improved if the method
3994 were declared with the \*(C+11 \f(CW\*(C`final\*(C'\fR specifier, 
3995 or, if possible, its type were
3996 declared in an anonymous namespace or with the \f(CW\*(C`final\*(C'\fR specifier.
3997 This warning is
3998 more effective with link time optimization, where the information about the
3999 class hierarchy graph is more complete. It is recommended to first consider
4000 suggestions of \fB\-Wsuggest\-final\-types\fR and then rebuild with new
4001 annotations.
4002 .IP "\fB\-Wsuggest\-override\fR" 4
4003 .IX Item "-Wsuggest-override"
4004 Warn about overriding virtual functions that are not marked with the override
4005 keyword.
4006 .IP "\fB\-Warray\-bounds\fR" 4
4007 .IX Item "-Warray-bounds"
4008 This option is only active when \fB\-ftree\-vrp\fR is active
4009 (default for \fB\-O2\fR and above). It warns about subscripts to arrays
4010 that are always out of bounds. This warning is enabled by \fB\-Wall\fR.
4011 .IP "\fB\-Wbool\-compare\fR" 4
4012 .IX Item "-Wbool-compare"
4013 Warn about boolean expression compared with an integer value different from
4014 \&\f(CW\*(C`true\*(C'\fR/\f(CW\*(C`false\*(C'\fR.  For instance, the following comparison is
4015 always false:
4016 .Sp
4017 .Vb 3
4018 \&        int n = 5;
4019 \&        ...
4020 \&        if ((n > 1) == 2) { ... }
4021 .Ve
4022 .Sp
4023 This warning is enabled by \fB\-Wall\fR.
4024 .IP "\fB\-Wno\-discarded\-qualifiers\fR (C and Objective-C only)" 4
4025 .IX Item "-Wno-discarded-qualifiers (C and Objective-C only)"
4026 Do not warn if type qualifiers on pointers are being discarded.
4027 Typically, the compiler warns if a \f(CW\*(C`const char *\*(C'\fR variable is
4028 passed to a function that takes a \f(CW\*(C`char *\*(C'\fR parameter.  This option
4029 can be used to suppress such a warning.
4030 .IP "\fB\-Wno\-discarded\-array\-qualifiers\fR (C and Objective-C only)" 4
4031 .IX Item "-Wno-discarded-array-qualifiers (C and Objective-C only)"
4032 Do not warn if type qualifiers on arrays which are pointer targets
4033 are being discarded. Typically, the compiler warns if a
4034 \&\f(CW\*(C`const int (*)[]\*(C'\fR variable is passed to a function that
4035 takes a \f(CW\*(C`int (*)[]\*(C'\fR parameter.  This option can be used to
4036 suppress such a warning.
4037 .IP "\fB\-Wno\-incompatible\-pointer\-types\fR (C and Objective-C only)" 4
4038 .IX Item "-Wno-incompatible-pointer-types (C and Objective-C only)"
4039 Do not warn when there is a conversion between pointers that have incompatible
4040 types.  This warning is for cases not covered by \fB\-Wno\-pointer\-sign\fR,
4041 which warns for pointer argument passing or assignment with different
4042 signedness.
4043 .IP "\fB\-Wno\-int\-conversion\fR (C and Objective-C only)" 4
4044 .IX Item "-Wno-int-conversion (C and Objective-C only)"
4045 Do not warn about incompatible integer to pointer and pointer to integer
4046 conversions.  This warning is about implicit conversions; for explicit
4047 conversions the warnings \fB\-Wno\-int\-to\-pointer\-cast\fR and
4048 \&\fB\-Wno\-pointer\-to\-int\-cast\fR may be used.
4049 .IP "\fB\-Wno\-div\-by\-zero\fR" 4
4050 .IX Item "-Wno-div-by-zero"
4051 Do not warn about compile-time integer division by zero.  Floating-point
4052 division by zero is not warned about, as it can be a legitimate way of
4053 obtaining infinities and NaNs.
4054 .IP "\fB\-Wsystem\-headers\fR" 4
4055 .IX Item "-Wsystem-headers"
4056 Print warning messages for constructs found in system header files.
4057 Warnings from system headers are normally suppressed, on the assumption
4058 that they usually do not indicate real problems and would only make the
4059 compiler output harder to read.  Using this command-line option tells
4060 \&\s-1GCC\s0 to emit warnings from system headers as if they occurred in user
4061 code.  However, note that using \fB\-Wall\fR in conjunction with this
4062 option does \fInot\fR warn about unknown pragmas in system
4063 headers\-\-\-for that, \fB\-Wunknown\-pragmas\fR must also be used.
4064 .IP "\fB\-Wtrampolines\fR" 4
4065 .IX Item "-Wtrampolines"
4066 Warn about trampolines generated for pointers to nested functions.
4067 A trampoline is a small piece of data or code that is created at run
4068 time on the stack when the address of a nested function is taken, and is
4069 used to call the nested function indirectly.  For some targets, it is
4070 made up of data only and thus requires no special treatment.  But, for
4071 most targets, it is made up of code and thus requires the stack to be
4072 made executable in order for the program to work properly.
4073 .IP "\fB\-Wfloat\-equal\fR" 4
4074 .IX Item "-Wfloat-equal"
4075 Warn if floating-point values are used in equality comparisons.
4076 .Sp
4077 The idea behind this is that sometimes it is convenient (for the
4078 programmer) to consider floating-point values as approximations to
4079 infinitely precise real numbers.  If you are doing this, then you need
4080 to compute (by analyzing the code, or in some other way) the maximum or
4081 likely maximum error that the computation introduces, and allow for it
4082 when performing comparisons (and when producing output, but that's a
4083 different problem).  In particular, instead of testing for equality, you
4084 should check to see whether the two values have ranges that overlap; and
4085 this is done with the relational operators, so equality comparisons are
4086 probably mistaken.
4087 .IP "\fB\-Wtraditional\fR (C and Objective-C only)" 4
4088 .IX Item "-Wtraditional (C and Objective-C only)"
4089 Warn about certain constructs that behave differently in traditional and
4090 \&\s-1ISO\s0 C.  Also warn about \s-1ISO\s0 C constructs that have no traditional C
4091 equivalent, and/or problematic constructs that should be avoided.
4092 .RS 4
4093 .IP "*" 4
4094 Macro parameters that appear within string literals in the macro body.
4095 In traditional C macro replacement takes place within string literals,
4096 but in \s-1ISO\s0 C it does not.
4097 .IP "*" 4
4098 In traditional C, some preprocessor directives did not exist.
4099 Traditional preprocessors only considered a line to be a directive
4100 if the \fB#\fR appeared in column 1 on the line.  Therefore
4101 \&\fB\-Wtraditional\fR warns about directives that traditional C
4102 understands but ignores because the \fB#\fR does not appear as the
4103 first character on the line.  It also suggests you hide directives like
4104 \&\f(CW\*(C`#pragma\*(C'\fR not understood by traditional C by indenting them.  Some
4105 traditional implementations do not recognize \f(CW\*(C`#elif\*(C'\fR, so this option
4106 suggests avoiding it altogether.
4107 .IP "*" 4
4108 A function-like macro that appears without arguments.
4109 .IP "*" 4
4110 The unary plus operator.
4111 .IP "*" 4
4112 The \fBU\fR integer constant suffix, or the \fBF\fR or \fBL\fR floating-point
4113 constant suffixes.  (Traditional C does support the \fBL\fR suffix on integer
4114 constants.)  Note, these suffixes appear in macros defined in the system
4115 headers of most modern systems, e.g. the \fB_MIN\fR/\fB_MAX\fR macros in \f(CW\*(C`<limits.h>\*(C'\fR.
4116 Use of these macros in user code might normally lead to spurious
4117 warnings, however \s-1GCC\s0's integrated preprocessor has enough context to
4118 avoid warning in these cases.
4119 .IP "*" 4
4120 A function declared external in one block and then used after the end of
4121 the block.
4122 .IP "*" 4
4123 A \f(CW\*(C`switch\*(C'\fR statement has an operand of type \f(CW\*(C`long\*(C'\fR.
4124 .IP "*" 4
4125 A non\-\f(CW\*(C`static\*(C'\fR function declaration follows a \f(CW\*(C`static\*(C'\fR one.
4126 This construct is not accepted by some traditional C compilers.
4127 .IP "*" 4
4128 The \s-1ISO\s0 type of an integer constant has a different width or
4129 signedness from its traditional type.  This warning is only issued if
4130 the base of the constant is ten.  I.e. hexadecimal or octal values, which
4131 typically represent bit patterns, are not warned about.
4132 .IP "*" 4
4133 Usage of \s-1ISO\s0 string concatenation is detected.
4134 .IP "*" 4
4135 Initialization of automatic aggregates.
4136 .IP "*" 4
4137 Identifier conflicts with labels.  Traditional C lacks a separate
4138 namespace for labels.
4139 .IP "*" 4
4140 Initialization of unions.  If the initializer is zero, the warning is
4141 omitted.  This is done under the assumption that the zero initializer in
4142 user code appears conditioned on e.g. \f(CW\*(C`_\|_STDC_\|_\*(C'\fR to avoid missing
4143 initializer warnings and relies on default initialization to zero in the
4144 traditional C case.
4145 .IP "*" 4
4146 Conversions by prototypes between fixed/floating\-point values and vice
4147 versa.  The absence of these prototypes when compiling with traditional
4148 C causes serious problems.  This is a subset of the possible
4149 conversion warnings; for the full set use \fB\-Wtraditional\-conversion\fR.
4150 .IP "*" 4
4151 Use of \s-1ISO\s0 C style function definitions.  This warning intentionally is
4152 \&\fInot\fR issued for prototype declarations or variadic functions
4153 because these \s-1ISO\s0 C features appear in your code when using
4154 libiberty's traditional C compatibility macros, \f(CW\*(C`PARAMS\*(C'\fR and
4155 \&\f(CW\*(C`VPARAMS\*(C'\fR.  This warning is also bypassed for nested functions
4156 because that feature is already a \s-1GCC\s0 extension and thus not relevant to
4157 traditional C compatibility.
4158 .RE
4159 .RS 4
4160 .RE
4161 .IP "\fB\-Wtraditional\-conversion\fR (C and Objective-C only)" 4
4162 .IX Item "-Wtraditional-conversion (C and Objective-C only)"
4163 Warn if a prototype causes a type conversion that is different from what
4164 would happen to the same argument in the absence of a prototype.  This
4165 includes conversions of fixed point to floating and vice versa, and
4166 conversions changing the width or signedness of a fixed-point argument
4167 except when the same as the default promotion.
4168 .IP "\fB\-Wdeclaration\-after\-statement\fR (C and Objective-C only)" 4
4169 .IX Item "-Wdeclaration-after-statement (C and Objective-C only)"
4170 Warn when a declaration is found after a statement in a block.  This
4171 construct, known from \*(C+, was introduced with \s-1ISO\s0 C99 and is by default
4172 allowed in \s-1GCC\s0.  It is not supported by \s-1ISO\s0 C90 and was not supported by
4173 \&\s-1GCC\s0 versions before \s-1GCC\s0 3.0.
4174 .IP "\fB\-Wundef\fR" 4
4175 .IX Item "-Wundef"
4176 Warn if an undefined identifier is evaluated in an \f(CW\*(C`#if\*(C'\fR directive.
4177 .IP "\fB\-Wno\-endif\-labels\fR" 4
4178 .IX Item "-Wno-endif-labels"
4179 Do not warn whenever an \f(CW\*(C`#else\*(C'\fR or an \f(CW\*(C`#endif\*(C'\fR are followed by text.
4180 .IP "\fB\-Wshadow\fR" 4
4181 .IX Item "-Wshadow"
4182 Warn whenever a local variable or type declaration shadows another
4183 variable, parameter, type, class member (in \*(C+), or instance variable
4184 (in Objective-C) or whenever a built-in function is shadowed. Note
4185 that in \*(C+, the compiler warns if a local variable shadows an
4186 explicit typedef, but not if it shadows a struct/class/enum.
4187 .IP "\fB\-Wno\-shadow\-ivar\fR (Objective-C only)" 4
4188 .IX Item "-Wno-shadow-ivar (Objective-C only)"
4189 Do not warn whenever a local variable shadows an instance variable in an
4190 Objective-C method.
4191 .IP "\fB\-Wlarger\-than=\fR\fIlen\fR" 4
4192 .IX Item "-Wlarger-than=len"
4193 Warn whenever an object of larger than \fIlen\fR bytes is defined.
4194 .IP "\fB\-Wframe\-larger\-than=\fR\fIlen\fR" 4
4195 .IX Item "-Wframe-larger-than=len"
4196 Warn if the size of a function frame is larger than \fIlen\fR bytes.
4197 The computation done to determine the stack frame size is approximate
4198 and not conservative.
4199 The actual requirements may be somewhat greater than \fIlen\fR
4200 even if you do not get a warning.  In addition, any space allocated
4201 via \f(CW\*(C`alloca\*(C'\fR, variable-length arrays, or related constructs
4202 is not included by the compiler when determining
4203 whether or not to issue a warning.
4204 .IP "\fB\-Wno\-free\-nonheap\-object\fR" 4
4205 .IX Item "-Wno-free-nonheap-object"
4206 Do not warn when attempting to free an object that was not allocated
4207 on the heap.
4208 .IP "\fB\-Wstack\-usage=\fR\fIlen\fR" 4
4209 .IX Item "-Wstack-usage=len"
4210 Warn if the stack usage of a function might be larger than \fIlen\fR bytes.
4211 The computation done to determine the stack usage is conservative.
4212 Any space allocated via \f(CW\*(C`alloca\*(C'\fR, variable-length arrays, or related
4213 constructs is included by the compiler when determining whether or not to
4214 issue a warning.
4215 .Sp
4216 The message is in keeping with the output of \fB\-fstack\-usage\fR.
4217 .RS 4
4218 .IP "*" 4
4219 If the stack usage is fully static but exceeds the specified amount, it's:
4220 .Sp
4221 .Vb 1
4222 \&          warning: stack usage is 1120 bytes
4223 .Ve
4224 .IP "*" 4
4225 If the stack usage is (partly) dynamic but bounded, it's:
4226 .Sp
4227 .Vb 1
4228 \&          warning: stack usage might be 1648 bytes
4229 .Ve
4230 .IP "*" 4
4231 If the stack usage is (partly) dynamic and not bounded, it's:
4232 .Sp
4233 .Vb 1
4234 \&          warning: stack usage might be unbounded
4235 .Ve
4236 .RE
4237 .RS 4
4238 .RE
4239 .IP "\fB\-Wunsafe\-loop\-optimizations\fR" 4
4240 .IX Item "-Wunsafe-loop-optimizations"
4241 Warn if the loop cannot be optimized because the compiler cannot
4242 assume anything on the bounds of the loop indices.  With
4243 \&\fB\-funsafe\-loop\-optimizations\fR warn if the compiler makes
4244 such assumptions.
4245 .IP "\fB\-Wno\-pedantic\-ms\-format\fR (MinGW targets only)" 4
4246 .IX Item "-Wno-pedantic-ms-format (MinGW targets only)"
4247 When used in combination with \fB\-Wformat\fR
4248 and \fB\-pedantic\fR without \s-1GNU\s0 extensions, this option
4249 disables the warnings about non-ISO \f(CW\*(C`printf\*(C'\fR / \f(CW\*(C`scanf\*(C'\fR format
4250 width specifiers \f(CW\*(C`I32\*(C'\fR, \f(CW\*(C`I64\*(C'\fR, and \f(CW\*(C`I\*(C'\fR used on Windows targets,
4251 which depend on the \s-1MS\s0 runtime.
4252 .IP "\fB\-Wpointer\-arith\fR" 4
4253 .IX Item "-Wpointer-arith"
4254 Warn about anything that depends on the \*(L"size of\*(R" a function type or
4255 of \f(CW\*(C`void\*(C'\fR.  \s-1GNU\s0 C assigns these types a size of 1, for
4256 convenience in calculations with \f(CW\*(C`void *\*(C'\fR pointers and pointers
4257 to functions.  In \*(C+, warn also when an arithmetic operation involves
4258 \&\f(CW\*(C`NULL\*(C'\fR.  This warning is also enabled by \fB\-Wpedantic\fR.
4259 .IP "\fB\-Wtype\-limits\fR" 4
4260 .IX Item "-Wtype-limits"
4261 Warn if a comparison is always true or always false due to the limited
4262 range of the data type, but do not warn for constant expressions.  For
4263 example, warn if an unsigned variable is compared against zero with
4264 \&\f(CW\*(C`<\*(C'\fR or \f(CW\*(C`>=\*(C'\fR.  This warning is also enabled by
4265 \&\fB\-Wextra\fR.
4266 .IP "\fB\-Wbad\-function\-cast\fR (C and Objective-C only)" 4
4267 .IX Item "-Wbad-function-cast (C and Objective-C only)"
4268 Warn whenever a function call is cast to a non-matching type.
4269 For example, warn if \f(CW\*(C`int malloc()\*(C'\fR is cast to \f(CW\*(C`anything *\*(C'\fR.
4270 .IP "\fB\-Wc90\-c99\-compat\fR (C and Objective-C only)" 4
4271 .IX Item "-Wc90-c99-compat (C and Objective-C only)"
4272 Warn about features not present in \s-1ISO\s0 C90, but present in \s-1ISO\s0 C99.
4273 For instance, warn about use of variable length arrays, \f(CW\*(C`long long\*(C'\fR
4274 type, \f(CW\*(C`bool\*(C'\fR type, compound literals, designated initializers, and so
4275 on.  This option is independent of the standards mode.  Warnings are disabled
4276 in the expression that follows \f(CW\*(C`_\|_extension_\|_\*(C'\fR.
4277 .IP "\fB\-Wc99\-c11\-compat\fR (C and Objective-C only)" 4
4278 .IX Item "-Wc99-c11-compat (C and Objective-C only)"
4279 Warn about features not present in \s-1ISO\s0 C99, but present in \s-1ISO\s0 C11.
4280 For instance, warn about use of anonymous structures and unions,
4281 \&\f(CW\*(C`_Atomic\*(C'\fR type qualifier, \f(CW\*(C`_Thread_local\*(C'\fR storage-class specifier,
4282 \&\f(CW\*(C`_Alignas\*(C'\fR specifier, \f(CW\*(C`Alignof\*(C'\fR operator, \f(CW\*(C`_Generic\*(C'\fR keyword,
4283 and so on.  This option is independent of the standards mode.  Warnings are
4284 disabled in the expression that follows \f(CW\*(C`_\|_extension_\|_\*(C'\fR.
4285 .IP "\fB\-Wc++\-compat\fR (C and Objective-C only)" 4
4286 .IX Item "-Wc++-compat (C and Objective-C only)"
4287 Warn about \s-1ISO\s0 C constructs that are outside of the common subset of
4288 \&\s-1ISO\s0 C and \s-1ISO\s0 \*(C+, e.g. request for implicit conversion from
4289 \&\f(CW\*(C`void *\*(C'\fR to a pointer to non\-\f(CW\*(C`void\*(C'\fR type.
4290 .IP "\fB\-Wc++11\-compat\fR (\*(C+ and Objective\-\*(C+ only)" 4
4291 .IX Item "-Wc++11-compat ( and Objective- only)"
4292 Warn about \*(C+ constructs whose meaning differs between \s-1ISO\s0 \*(C+ 1998
4293 and \s-1ISO\s0 \*(C+ 2011, e.g., identifiers in \s-1ISO\s0 \*(C+ 1998 that are keywords
4294 in \s-1ISO\s0 \*(C+ 2011.  This warning turns on \fB\-Wnarrowing\fR and is
4295 enabled by \fB\-Wall\fR.
4296 .IP "\fB\-Wc++14\-compat\fR (\*(C+ and Objective\-\*(C+ only)" 4
4297 .IX Item "-Wc++14-compat ( and Objective- only)"
4298 Warn about \*(C+ constructs whose meaning differs between \s-1ISO\s0 \*(C+ 2011
4299 and \s-1ISO\s0 \*(C+ 2014.  This warning is enabled by \fB\-Wall\fR.
4300 .IP "\fB\-Wcast\-qual\fR" 4
4301 .IX Item "-Wcast-qual"
4302 Warn whenever a pointer is cast so as to remove a type qualifier from
4303 the target type.  For example, warn if a \f(CW\*(C`const char *\*(C'\fR is cast
4304 to an ordinary \f(CW\*(C`char *\*(C'\fR.
4305 .Sp
4306 Also warn when making a cast that introduces a type qualifier in an
4307 unsafe way.  For example, casting \f(CW\*(C`char **\*(C'\fR to \f(CW\*(C`const char **\*(C'\fR
4308 is unsafe, as in this example:
4309 .Sp
4310 .Vb 6
4311 \&          /* p is char ** value.  */
4312 \&          const char **q = (const char **) p;
4313 \&          /* Assignment of readonly string to const char * is OK.  */
4314 \&          *q = "string";
4315 \&          /* Now char** pointer points to read\-only memory.  */
4316 \&          **p = \*(Aqb\*(Aq;
4317 .Ve
4318 .IP "\fB\-Wcast\-align\fR" 4
4319 .IX Item "-Wcast-align"
4320 Warn whenever a pointer is cast such that the required alignment of the
4321 target is increased.  For example, warn if a \f(CW\*(C`char *\*(C'\fR is cast to
4322 an \f(CW\*(C`int *\*(C'\fR on machines where integers can only be accessed at
4323 two\- or four-byte boundaries.
4324 .IP "\fB\-Wwrite\-strings\fR" 4
4325 .IX Item "-Wwrite-strings"
4326 When compiling C, give string constants the type \f(CW\*(C`const
4327 char[\f(CIlength\f(CW]\*(C'\fR so that copying the address of one into a
4328 non\-\f(CW\*(C`const\*(C'\fR \f(CW\*(C`char *\*(C'\fR pointer produces a warning.  These
4329 warnings help you find at compile time code that can try to write
4330 into a string constant, but only if you have been very careful about
4331 using \f(CW\*(C`const\*(C'\fR in declarations and prototypes.  Otherwise, it is
4332 just a nuisance. This is why we did not make \fB\-Wall\fR request
4333 these warnings.
4334 .Sp
4335 When compiling \*(C+, warn about the deprecated conversion from string
4336 literals to \f(CW\*(C`char *\*(C'\fR.  This warning is enabled by default for \*(C+
4337 programs.
4338 .IP "\fB\-Wclobbered\fR" 4
4339 .IX Item "-Wclobbered"
4340 Warn for variables that might be changed by \f(CW\*(C`longjmp\*(C'\fR or
4341 \&\f(CW\*(C`vfork\*(C'\fR.  This warning is also enabled by \fB\-Wextra\fR.
4342 .IP "\fB\-Wconditionally\-supported\fR (\*(C+ and Objective\-\*(C+ only)" 4
4343 .IX Item "-Wconditionally-supported ( and Objective- only)"
4344 Warn for conditionally-supported (\*(C+11 [intro.defs]) constructs.
4345 .IP "\fB\-Wconversion\fR" 4
4346 .IX Item "-Wconversion"
4347 Warn for implicit conversions that may alter a value. This includes
4348 conversions between real and integer, like \f(CW\*(C`abs (x)\*(C'\fR when
4349 \&\f(CW\*(C`x\*(C'\fR is \f(CW\*(C`double\*(C'\fR; conversions between signed and unsigned,
4350 like \f(CW\*(C`unsigned ui = \-1\*(C'\fR; and conversions to smaller types, like
4351 \&\f(CW\*(C`sqrtf (M_PI)\*(C'\fR. Do not warn for explicit casts like \f(CW\*(C`abs
4352 ((int) x)\*(C'\fR and \f(CW\*(C`ui = (unsigned) \-1\*(C'\fR, or if the value is not
4353 changed by the conversion like in \f(CW\*(C`abs (2.0)\*(C'\fR.  Warnings about
4354 conversions between signed and unsigned integers can be disabled by
4355 using \fB\-Wno\-sign\-conversion\fR.
4356 .Sp
4357 For \*(C+, also warn for confusing overload resolution for user-defined
4358 conversions; and conversions that never use a type conversion
4359 operator: conversions to \f(CW\*(C`void\*(C'\fR, the same type, a base class or a
4360 reference to them. Warnings about conversions between signed and
4361 unsigned integers are disabled by default in \*(C+ unless
4362 \&\fB\-Wsign\-conversion\fR is explicitly enabled.
4363 .IP "\fB\-Wno\-conversion\-null\fR (\*(C+ and Objective\-\*(C+ only)" 4
4364 .IX Item "-Wno-conversion-null ( and Objective- only)"
4365 Do not warn for conversions between \f(CW\*(C`NULL\*(C'\fR and non-pointer
4366 types. \fB\-Wconversion\-null\fR is enabled by default.
4367 .IP "\fB\-Wzero\-as\-null\-pointer\-constant\fR (\*(C+ and Objective\-\*(C+ only)" 4
4368 .IX Item "-Wzero-as-null-pointer-constant ( and Objective- only)"
4369 Warn when a literal '0' is used as null pointer constant.  This can
4370 be useful to facilitate the conversion to \f(CW\*(C`nullptr\*(C'\fR in \*(C+11.
4371 .IP "\fB\-Wdate\-time\fR" 4
4372 .IX Item "-Wdate-time"
4373 Warn when macros \f(CW\*(C`_\|_TIME_\|_\*(C'\fR, \f(CW\*(C`_\|_DATE_\|_\*(C'\fR or \f(CW\*(C`_\|_TIMESTAMP_\|_\*(C'\fR
4374 are encountered as they might prevent bit-wise-identical reproducible
4375 compilations.
4376 .IP "\fB\-Wdelete\-incomplete\fR (\*(C+ and Objective\-\*(C+ only)" 4
4377 .IX Item "-Wdelete-incomplete ( and Objective- only)"
4378 Warn when deleting a pointer to incomplete type, which may cause
4379 undefined behavior at runtime.  This warning is enabled by default.
4380 .IP "\fB\-Wuseless\-cast\fR (\*(C+ and Objective\-\*(C+ only)" 4
4381 .IX Item "-Wuseless-cast ( and Objective- only)"
4382 Warn when an expression is casted to its own type.
4383 .IP "\fB\-Wempty\-body\fR" 4
4384 .IX Item "-Wempty-body"
4385 Warn if an empty body occurs in an \f(CW\*(C`if\*(C'\fR, \f(CW\*(C`else\*(C'\fR or \f(CW\*(C`do
4386 while\*(C'\fR statement.  This warning is also enabled by \fB\-Wextra\fR.
4387 .IP "\fB\-Wenum\-compare\fR" 4
4388 .IX Item "-Wenum-compare"
4389 Warn about a comparison between values of different enumerated types.
4390 In \*(C+ enumeral mismatches in conditional expressions are also
4391 diagnosed and the warning is enabled by default.  In C this warning is 
4392 enabled by \fB\-Wall\fR.
4393 .IP "\fB\-Wjump\-misses\-init\fR (C, Objective-C only)" 4
4394 .IX Item "-Wjump-misses-init (C, Objective-C only)"
4395 Warn if a \f(CW\*(C`goto\*(C'\fR statement or a \f(CW\*(C`switch\*(C'\fR statement jumps
4396 forward across the initialization of a variable, or jumps backward to a
4397 label after the variable has been initialized.  This only warns about
4398 variables that are initialized when they are declared.  This warning is
4399 only supported for C and Objective-C; in \*(C+ this sort of branch is an
4400 error in any case.
4401 .Sp
4402 \&\fB\-Wjump\-misses\-init\fR is included in \fB\-Wc++\-compat\fR.  It
4403 can be disabled with the \fB\-Wno\-jump\-misses\-init\fR option.
4404 .IP "\fB\-Wsign\-compare\fR" 4
4405 .IX Item "-Wsign-compare"
4406 Warn when a comparison between signed and unsigned values could produce
4407 an incorrect result when the signed value is converted to unsigned.
4408 This warning is also enabled by \fB\-Wextra\fR; to get the other warnings
4409 of \fB\-Wextra\fR without this warning, use \fB\-Wextra \-Wno\-sign\-compare\fR.
4410 .IP "\fB\-Wsign\-conversion\fR" 4
4411 .IX Item "-Wsign-conversion"
4412 Warn for implicit conversions that may change the sign of an integer
4413 value, like assigning a signed integer expression to an unsigned
4414 integer variable. An explicit cast silences the warning. In C, this
4415 option is enabled also by \fB\-Wconversion\fR.
4416 .IP "\fB\-Wfloat\-conversion\fR" 4
4417 .IX Item "-Wfloat-conversion"
4418 Warn for implicit conversions that reduce the precision of a real value.
4419 This includes conversions from real to integer, and from higher precision
4420 real to lower precision real values.  This option is also enabled by
4421 \&\fB\-Wconversion\fR.
4422 .IP "\fB\-Wsized\-deallocation\fR (\*(C+ and Objective\-\*(C+ only)" 4
4423 .IX Item "-Wsized-deallocation ( and Objective- only)"
4424 Warn about a definition of an unsized deallocation function
4425 .Sp
4426 .Vb 2
4427 \&        void operator delete (void *) noexcept;
4428 \&        void operator delete[] (void *) noexcept;
4429 .Ve
4430 .Sp
4431 without a definition of the corresponding sized deallocation function
4432 .Sp
4433 .Vb 2
4434 \&        void operator delete (void *, std::size_t) noexcept;
4435 \&        void operator delete[] (void *, std::size_t) noexcept;
4436 .Ve
4437 .Sp
4438 or vice versa.  Enabled by \fB\-Wextra\fR along with
4439 \&\fB\-fsized\-deallocation\fR.
4440 .IP "\fB\-Wsizeof\-pointer\-memaccess\fR" 4
4441 .IX Item "-Wsizeof-pointer-memaccess"
4442 Warn for suspicious length parameters to certain string and memory built-in
4443 functions if the argument uses \f(CW\*(C`sizeof\*(C'\fR.  This warning warns e.g.
4444 about \f(CW\*(C`memset (ptr, 0, sizeof (ptr));\*(C'\fR if \f(CW\*(C`ptr\*(C'\fR is not an array,
4445 but a pointer, and suggests a possible fix, or about
4446 \&\f(CW\*(C`memcpy (&foo, ptr, sizeof (&foo));\*(C'\fR.  This warning is enabled by
4447 \&\fB\-Wall\fR.
4448 .IP "\fB\-Wsizeof\-array\-argument\fR" 4
4449 .IX Item "-Wsizeof-array-argument"
4450 Warn when the \f(CW\*(C`sizeof\*(C'\fR operator is applied to a parameter that is
4451 declared as an array in a function definition.  This warning is enabled by
4452 default for C and \*(C+ programs.
4453 .IP "\fB\-Wmemset\-transposed\-args\fR" 4
4454 .IX Item "-Wmemset-transposed-args"
4455 Warn for suspicious calls to the \f(CW\*(C`memset\*(C'\fR built-in function, if the
4456 second argument is not zero and the third argument is zero.  This warns e.g.@
4457 about \f(CW\*(C`memset (buf, sizeof buf, 0)\*(C'\fR where most probably
4458 \&\f(CW\*(C`memset (buf, 0, sizeof buf)\*(C'\fR was meant instead.  The diagnostics
4459 is only emitted if the third argument is literal zero, if it is some expression
4460 that is folded to zero, or e.g. a cast of zero to some type etc., it
4461 is far less likely that user has mistakenly exchanged the arguments and
4462 no warning is emitted.  This warning is enabled by \fB\-Wall\fR.
4463 .IP "\fB\-Waddress\fR" 4
4464 .IX Item "-Waddress"
4465 Warn about suspicious uses of memory addresses. These include using
4466 the address of a function in a conditional expression, such as
4467 \&\f(CW\*(C`void func(void); if (func)\*(C'\fR, and comparisons against the memory
4468 address of a string literal, such as \f(CW\*(C`if (x == "abc")\*(C'\fR.  Such
4469 uses typically indicate a programmer error: the address of a function
4470 always evaluates to true, so their use in a conditional usually
4471 indicate that the programmer forgot the parentheses in a function
4472 call; and comparisons against string literals result in unspecified
4473 behavior and are not portable in C, so they usually indicate that the
4474 programmer intended to use \f(CW\*(C`strcmp\*(C'\fR.  This warning is enabled by
4475 \&\fB\-Wall\fR.
4476 .IP "\fB\-Wlogical\-op\fR" 4
4477 .IX Item "-Wlogical-op"
4478 Warn about suspicious uses of logical operators in expressions.
4479 This includes using logical operators in contexts where a
4480 bit-wise operator is likely to be expected.
4481 .IP "\fB\-Wlogical\-not\-parentheses\fR" 4
4482 .IX Item "-Wlogical-not-parentheses"
4483 Warn about logical not used on the left hand side operand of a comparison.
4484 This option does not warn if the \s-1RHS\s0 operand is of a boolean type.  Its
4485 purpose is to detect suspicious code like the following:
4486 .Sp
4487 .Vb 3
4488 \&        int a;
4489 \&        ...
4490 \&        if (!a > 1) { ... }
4491 .Ve
4492 .Sp
4493 It is possible to suppress the warning by wrapping the \s-1LHS\s0 into
4494 parentheses:
4495 .Sp
4496 .Vb 1
4497 \&        if ((!a) > 1) { ... }
4498 .Ve
4499 .Sp
4500 This warning is enabled by \fB\-Wall\fR.
4501 .IP "\fB\-Waggregate\-return\fR" 4
4502 .IX Item "-Waggregate-return"
4503 Warn if any functions that return structures or unions are defined or
4504 called.  (In languages where you can return an array, this also elicits
4505 a warning.)
4506 .IP "\fB\-Wno\-aggressive\-loop\-optimizations\fR" 4
4507 .IX Item "-Wno-aggressive-loop-optimizations"
4508 Warn if in a loop with constant number of iterations the compiler detects
4509 undefined behavior in some statement during one or more of the iterations.
4510 .IP "\fB\-Wno\-attributes\fR" 4
4511 .IX Item "-Wno-attributes"
4512 Do not warn if an unexpected \f(CW\*(C`_\|_attribute_\|_\*(C'\fR is used, such as
4513 unrecognized attributes, function attributes applied to variables,
4514 etc.  This does not stop errors for incorrect use of supported
4515 attributes.
4516 .IP "\fB\-Wno\-builtin\-macro\-redefined\fR" 4
4517 .IX Item "-Wno-builtin-macro-redefined"
4518 Do not warn if certain built-in macros are redefined.  This suppresses
4519 warnings for redefinition of \f(CW\*(C`_\|_TIMESTAMP_\|_\*(C'\fR, \f(CW\*(C`_\|_TIME_\|_\*(C'\fR,
4520 \&\f(CW\*(C`_\|_DATE_\|_\*(C'\fR, \f(CW\*(C`_\|_FILE_\|_\*(C'\fR, and \f(CW\*(C`_\|_BASE_FILE_\|_\*(C'\fR.
4521 .IP "\fB\-Wstrict\-prototypes\fR (C and Objective-C only)" 4
4522 .IX Item "-Wstrict-prototypes (C and Objective-C only)"
4523 Warn if a function is declared or defined without specifying the
4524 argument types.  (An old-style function definition is permitted without
4525 a warning if preceded by a declaration that specifies the argument
4526 types.)
4527 .IP "\fB\-Wold\-style\-declaration\fR (C and Objective-C only)" 4
4528 .IX Item "-Wold-style-declaration (C and Objective-C only)"
4529 Warn for obsolescent usages, according to the C Standard, in a
4530 declaration. For example, warn if storage-class specifiers like
4531 \&\f(CW\*(C`static\*(C'\fR are not the first things in a declaration.  This warning
4532 is also enabled by \fB\-Wextra\fR.
4533 .IP "\fB\-Wold\-style\-definition\fR (C and Objective-C only)" 4
4534 .IX Item "-Wold-style-definition (C and Objective-C only)"
4535 Warn if an old-style function definition is used.  A warning is given
4536 even if there is a previous prototype.
4537 .IP "\fB\-Wmissing\-parameter\-type\fR (C and Objective-C only)" 4
4538 .IX Item "-Wmissing-parameter-type (C and Objective-C only)"
4539 A function parameter is declared without a type specifier in K&R\-style
4540 functions:
4541 .Sp
4542 .Vb 1
4543 \&        void foo(bar) { }
4544 .Ve
4545 .Sp
4546 This warning is also enabled by \fB\-Wextra\fR.
4547 .IP "\fB\-Wmissing\-prototypes\fR (C and Objective-C only)" 4
4548 .IX Item "-Wmissing-prototypes (C and Objective-C only)"
4549 Warn if a global function is defined without a previous prototype
4550 declaration.  This warning is issued even if the definition itself
4551 provides a prototype.  Use this option to detect global functions
4552 that do not have a matching prototype declaration in a header file.
4553 This option is not valid for \*(C+ because all function declarations
4554 provide prototypes and a non-matching declaration declares an
4555 overload rather than conflict with an earlier declaration.
4556 Use \fB\-Wmissing\-declarations\fR to detect missing declarations in \*(C+.
4557 .IP "\fB\-Wmissing\-declarations\fR" 4
4558 .IX Item "-Wmissing-declarations"
4559 Warn if a global function is defined without a previous declaration.
4560 Do so even if the definition itself provides a prototype.
4561 Use this option to detect global functions that are not declared in
4562 header files.  In C, no warnings are issued for functions with previous
4563 non-prototype declarations; use \fB\-Wmissing\-prototypes\fR to detect
4564 missing prototypes.  In \*(C+, no warnings are issued for function templates,
4565 or for inline functions, or for functions in anonymous namespaces.
4566 .IP "\fB\-Wmissing\-field\-initializers\fR" 4
4567 .IX Item "-Wmissing-field-initializers"
4568 Warn if a structure's initializer has some fields missing.  For
4569 example, the following code causes such a warning, because
4570 \&\f(CW\*(C`x.h\*(C'\fR is implicitly zero:
4571 .Sp
4572 .Vb 2
4573 \&        struct s { int f, g, h; };
4574 \&        struct s x = { 3, 4 };
4575 .Ve
4576 .Sp
4577 This option does not warn about designated initializers, so the following
4578 modification does not trigger a warning:
4579 .Sp
4580 .Vb 2
4581 \&        struct s { int f, g, h; };
4582 \&        struct s x = { .f = 3, .g = 4 };
4583 .Ve
4584 .Sp
4585 In \*(C+ this option does not warn either about the empty { }
4586 initializer, for example:
4587 .Sp
4588 .Vb 2
4589 \&        struct s { int f, g, h; };
4590 \&        s x = { };
4591 .Ve
4592 .Sp
4593 This warning is included in \fB\-Wextra\fR.  To get other \fB\-Wextra\fR
4594 warnings without this one, use \fB\-Wextra \-Wno\-missing\-field\-initializers\fR.
4595 .IP "\fB\-Wno\-multichar\fR" 4
4596 .IX Item "-Wno-multichar"
4597 Do not warn if a multicharacter constant (\fB'\s-1FOOF\s0'\fR) is used.
4598 Usually they indicate a typo in the user's code, as they have
4599 implementation-defined values, and should not be used in portable code.
4600 .IP "\fB\-Wnormalized\fR[\fB=\fR<\fBnone\fR|\fBid\fR|\fBnfc\fR|\fBnfkc\fR>]" 4
4601 .IX Item "-Wnormalized[=<none|id|nfc|nfkc>]"
4602 In \s-1ISO\s0 C and \s-1ISO\s0 \*(C+, two identifiers are different if they are
4603 different sequences of characters.  However, sometimes when characters
4604 outside the basic \s-1ASCII\s0 character set are used, you can have two
4605 different character sequences that look the same.  To avoid confusion,
4606 the \s-1ISO\s0 10646 standard sets out some \fInormalization rules\fR which
4607 when applied ensure that two sequences that look the same are turned into
4608 the same sequence.  \s-1GCC\s0 can warn you if you are using identifiers that
4609 have not been normalized; this option controls that warning.
4610 .Sp
4611 There are four levels of warning supported by \s-1GCC\s0.  The default is
4612 \&\fB\-Wnormalized=nfc\fR, which warns about any identifier that is
4613 not in the \s-1ISO\s0 10646 \*(L"C\*(R" normalized form, \fI\s-1NFC\s0\fR.  \s-1NFC\s0 is the
4614 recommended form for most uses.  It is equivalent to
4615 \&\fB\-Wnormalized\fR.
4616 .Sp
4617 Unfortunately, there are some characters allowed in identifiers by
4618 \&\s-1ISO\s0 C and \s-1ISO\s0 \*(C+ that, when turned into \s-1NFC\s0, are not allowed in 
4619 identifiers.  That is, there's no way to use these symbols in portable
4620 \&\s-1ISO\s0 C or \*(C+ and have all your identifiers in \s-1NFC\s0.
4621 \&\fB\-Wnormalized=id\fR suppresses the warning for these characters.
4622 It is hoped that future versions of the standards involved will correct
4623 this, which is why this option is not the default.
4624 .Sp
4625 You can switch the warning off for all characters by writing
4626 \&\fB\-Wnormalized=none\fR or \fB\-Wno\-normalized\fR.  You should
4627 only do this if you are using some other normalization scheme (like
4628 \&\*(L"D\*(R"), because otherwise you can easily create bugs that are
4629 literally impossible to see.
4630 .Sp
4631 Some characters in \s-1ISO\s0 10646 have distinct meanings but look identical
4632 in some fonts or display methodologies, especially once formatting has
4633 been applied.  For instance \f(CW\*(C`\eu207F\*(C'\fR, \*(L"\s-1SUPERSCRIPT\s0 \s-1LATIN\s0 \s-1SMALL\s0
4634 \&\s-1LETTER\s0 N\*(R", displays just like a regular \f(CW\*(C`n\*(C'\fR that has been
4635 placed in a superscript.  \s-1ISO\s0 10646 defines the \fI\s-1NFKC\s0\fR
4636 normalization scheme to convert all these into a standard form as
4637 well, and \s-1GCC\s0 warns if your code is not in \s-1NFKC\s0 if you use
4638 \&\fB\-Wnormalized=nfkc\fR.  This warning is comparable to warning
4639 about every identifier that contains the letter O because it might be
4640 confused with the digit 0, and so is not the default, but may be
4641 useful as a local coding convention if the programming environment 
4642 cannot be fixed to display these characters distinctly.
4643 .IP "\fB\-Wno\-deprecated\fR" 4
4644 .IX Item "-Wno-deprecated"
4645 Do not warn about usage of deprecated features.
4646 .IP "\fB\-Wno\-deprecated\-declarations\fR" 4
4647 .IX Item "-Wno-deprecated-declarations"
4648 Do not warn about uses of functions,
4649 variables, and types marked as deprecated by using the \f(CW\*(C`deprecated\*(C'\fR
4650 attribute.
4651 .IP "\fB\-Wno\-overflow\fR" 4
4652 .IX Item "-Wno-overflow"
4653 Do not warn about compile-time overflow in constant expressions.
4654 .IP "\fB\-Wno\-odr\fR" 4
4655 .IX Item "-Wno-odr"
4656 Warn about One Definition Rule violations during link-time optimization.
4657 Requires \fB\-flto\-odr\-type\-merging\fR to be enabled.  Enabled by default.
4658 .IP "\fB\-Wopenmp\-simd\fR" 4
4659 .IX Item "-Wopenmp-simd"
4660 Warn if the vectorizer cost model overrides the OpenMP or the Cilk Plus
4661 simd directive set by user.  The \fB\-fsimd\-cost\-model=unlimited\fR can
4662 be used to relax the cost model.
4663 .IP "\fB\-Woverride\-init\fR (C and Objective-C only)" 4
4664 .IX Item "-Woverride-init (C and Objective-C only)"
4665 Warn if an initialized field without side effects is overridden when
4666 using designated initializers.
4667 .Sp
4668 This warning is included in \fB\-Wextra\fR.  To get other
4669 \&\fB\-Wextra\fR warnings without this one, use \fB\-Wextra
4670 \&\-Wno\-override\-init\fR.
4671 .IP "\fB\-Wpacked\fR" 4
4672 .IX Item "-Wpacked"
4673 Warn if a structure is given the packed attribute, but the packed
4674 attribute has no effect on the layout or size of the structure.
4675 Such structures may be mis-aligned for little benefit.  For
4676 instance, in this code, the variable \f(CW\*(C`f.x\*(C'\fR in \f(CW\*(C`struct bar\*(C'\fR
4677 is misaligned even though \f(CW\*(C`struct bar\*(C'\fR does not itself
4678 have the packed attribute:
4679 .Sp
4680 .Vb 8
4681 \&        struct foo {
4682 \&          int x;
4683 \&          char a, b, c, d;
4684 \&        } _\|_attribute_\|_((packed));
4685 \&        struct bar {
4686 \&          char z;
4687 \&          struct foo f;
4688 \&        };
4689 .Ve
4690 .IP "\fB\-Wpacked\-bitfield\-compat\fR" 4
4691 .IX Item "-Wpacked-bitfield-compat"
4692 The 4.1, 4.2 and 4.3 series of \s-1GCC\s0 ignore the \f(CW\*(C`packed\*(C'\fR attribute
4693 on bit-fields of type \f(CW\*(C`char\*(C'\fR.  This has been fixed in \s-1GCC\s0 4.4 but
4694 the change can lead to differences in the structure layout.  \s-1GCC\s0
4695 informs you when the offset of such a field has changed in \s-1GCC\s0 4.4.
4696 For example there is no longer a 4\-bit padding between field \f(CW\*(C`a\*(C'\fR
4697 and \f(CW\*(C`b\*(C'\fR in this structure:
4698 .Sp
4699 .Vb 5
4700 \&        struct foo
4701 \&        {
4702 \&          char a:4;
4703 \&          char b:8;
4704 \&        } _\|_attribute_\|_ ((packed));
4705 .Ve
4706 .Sp
4707 This warning is enabled by default.  Use
4708 \&\fB\-Wno\-packed\-bitfield\-compat\fR to disable this warning.
4709 .IP "\fB\-Wpadded\fR" 4
4710 .IX Item "-Wpadded"
4711 Warn if padding is included in a structure, either to align an element
4712 of the structure or to align the whole structure.  Sometimes when this
4713 happens it is possible to rearrange the fields of the structure to
4714 reduce the padding and so make the structure smaller.
4715 .IP "\fB\-Wredundant\-decls\fR" 4
4716 .IX Item "-Wredundant-decls"
4717 Warn if anything is declared more than once in the same scope, even in
4718 cases where multiple declaration is valid and changes nothing.
4719 .IP "\fB\-Wnested\-externs\fR (C and Objective-C only)" 4
4720 .IX Item "-Wnested-externs (C and Objective-C only)"
4721 Warn if an \f(CW\*(C`extern\*(C'\fR declaration is encountered within a function.
4722 .IP "\fB\-Wno\-inherited\-variadic\-ctor\fR" 4
4723 .IX Item "-Wno-inherited-variadic-ctor"
4724 Suppress warnings about use of \*(C+11 inheriting constructors when the
4725 base class inherited from has a C variadic constructor; the warning is
4726 on by default because the ellipsis is not inherited.
4727 .IP "\fB\-Winline\fR" 4
4728 .IX Item "-Winline"
4729 Warn if a function that is declared as inline cannot be inlined.
4730 Even with this option, the compiler does not warn about failures to
4731 inline functions declared in system headers.
4732 .Sp
4733 The compiler uses a variety of heuristics to determine whether or not
4734 to inline a function.  For example, the compiler takes into account
4735 the size of the function being inlined and the amount of inlining
4736 that has already been done in the current function.  Therefore,
4737 seemingly insignificant changes in the source program can cause the
4738 warnings produced by \fB\-Winline\fR to appear or disappear.
4739 .IP "\fB\-Wno\-invalid\-offsetof\fR (\*(C+ and Objective\-\*(C+ only)" 4
4740 .IX Item "-Wno-invalid-offsetof ( and Objective- only)"
4741 Suppress warnings from applying the \f(CW\*(C`offsetof\*(C'\fR macro to a non-POD
4742 type.  According to the 2014 \s-1ISO\s0 \*(C+ standard, applying \f(CW\*(C`offsetof\*(C'\fR
4743 to a non-standard-layout type is undefined.  In existing \*(C+ implementations,
4744 however, \f(CW\*(C`offsetof\*(C'\fR typically gives meaningful results.
4745 This flag is for users who are aware that they are
4746 writing nonportable code and who have deliberately chosen to ignore the
4747 warning about it.
4748 .Sp
4749 The restrictions on \f(CW\*(C`offsetof\*(C'\fR may be relaxed in a future version
4750 of the \*(C+ standard.
4751 .IP "\fB\-Wno\-int\-to\-pointer\-cast\fR" 4
4752 .IX Item "-Wno-int-to-pointer-cast"
4753 Suppress warnings from casts to pointer type of an integer of a
4754 different size. In \*(C+, casting to a pointer type of smaller size is
4755 an error. \fBWint-to-pointer-cast\fR is enabled by default.
4756 .IP "\fB\-Wno\-pointer\-to\-int\-cast\fR (C and Objective-C only)" 4
4757 .IX Item "-Wno-pointer-to-int-cast (C and Objective-C only)"
4758 Suppress warnings from casts from a pointer to an integer type of a
4759 different size.
4760 .IP "\fB\-Winvalid\-pch\fR" 4
4761 .IX Item "-Winvalid-pch"
4762 Warn if a precompiled header is found in
4763 the search path but can't be used.
4764 .IP "\fB\-Wlong\-long\fR" 4
4765 .IX Item "-Wlong-long"
4766 Warn if \f(CW\*(C`long long\*(C'\fR type is used.  This is enabled by either
4767 \&\fB\-Wpedantic\fR or \fB\-Wtraditional\fR in \s-1ISO\s0 C90 and \*(C+98
4768 modes.  To inhibit the warning messages, use \fB\-Wno\-long\-long\fR.
4769 .IP "\fB\-Wvariadic\-macros\fR" 4
4770 .IX Item "-Wvariadic-macros"
4771 Warn if variadic macros are used in \s-1ISO\s0 C90 mode, or if the \s-1GNU\s0
4772 alternate syntax is used in \s-1ISO\s0 C99 mode.  This is enabled by either
4773 \&\fB\-Wpedantic\fR or \fB\-Wtraditional\fR.  To inhibit the warning
4774 messages, use \fB\-Wno\-variadic\-macros\fR.
4775 .IP "\fB\-Wvarargs\fR" 4
4776 .IX Item "-Wvarargs"
4777 Warn upon questionable usage of the macros used to handle variable
4778 arguments like \f(CW\*(C`va_start\*(C'\fR.  This is default.  To inhibit the
4779 warning messages, use \fB\-Wno\-varargs\fR.
4780 .IP "\fB\-Wvector\-operation\-performance\fR" 4
4781 .IX Item "-Wvector-operation-performance"
4782 Warn if vector operation is not implemented via \s-1SIMD\s0 capabilities of the
4783 architecture.  Mainly useful for the performance tuning.
4784 Vector operation can be implemented \f(CW\*(C`piecewise\*(C'\fR, which means that the
4785 scalar operation is performed on every vector element; 
4786 \&\f(CW\*(C`in parallel\*(C'\fR, which means that the vector operation is implemented
4787 using scalars of wider type, which normally is more performance efficient;
4788 and \f(CW\*(C`as a single scalar\*(C'\fR, which means that vector fits into a
4789 scalar type.
4790 .IP "\fB\-Wno\-virtual\-move\-assign\fR" 4
4791 .IX Item "-Wno-virtual-move-assign"
4792 Suppress warnings about inheriting from a virtual base with a
4793 non-trivial \*(C+11 move assignment operator.  This is dangerous because
4794 if the virtual base is reachable along more than one path, it is
4795 moved multiple times, which can mean both objects end up in the
4796 moved-from state.  If the move assignment operator is written to avoid
4797 moving from a moved-from object, this warning can be disabled.
4798 .IP "\fB\-Wvla\fR" 4
4799 .IX Item "-Wvla"
4800 Warn if variable length array is used in the code.
4801 \&\fB\-Wno\-vla\fR prevents the \fB\-Wpedantic\fR warning of
4802 the variable length array.
4803 .IP "\fB\-Wvolatile\-register\-var\fR" 4
4804 .IX Item "-Wvolatile-register-var"
4805 Warn if a register variable is declared volatile.  The volatile
4806 modifier does not inhibit all optimizations that may eliminate reads
4807 and/or writes to register variables.  This warning is enabled by
4808 \&\fB\-Wall\fR.
4809 .IP "\fB\-Wdisabled\-optimization\fR" 4
4810 .IX Item "-Wdisabled-optimization"
4811 Warn if a requested optimization pass is disabled.  This warning does
4812 not generally indicate that there is anything wrong with your code; it
4813 merely indicates that \s-1GCC\s0's optimizers are unable to handle the code
4814 effectively.  Often, the problem is that your code is too big or too
4815 complex; \s-1GCC\s0 refuses to optimize programs when the optimization
4816 itself is likely to take inordinate amounts of time.
4817 .IP "\fB\-Wpointer\-sign\fR (C and Objective-C only)" 4
4818 .IX Item "-Wpointer-sign (C and Objective-C only)"
4819 Warn for pointer argument passing or assignment with different signedness.
4820 This option is only supported for C and Objective-C.  It is implied by
4821 \&\fB\-Wall\fR and by \fB\-Wpedantic\fR, which can be disabled with
4822 \&\fB\-Wno\-pointer\-sign\fR.
4823 .IP "\fB\-Wstack\-protector\fR" 4
4824 .IX Item "-Wstack-protector"
4825 This option is only active when \fB\-fstack\-protector\fR is active.  It
4826 warns about functions that are not protected against stack smashing.
4827 .IP "\fB\-Woverlength\-strings\fR" 4
4828 .IX Item "-Woverlength-strings"
4829 Warn about string constants that are longer than the \*(L"minimum
4830 maximum\*(R" length specified in the C standard.  Modern compilers
4831 generally allow string constants that are much longer than the
4832 standard's minimum limit, but very portable programs should avoid
4833 using longer strings.
4834 .Sp
4835 The limit applies \fIafter\fR string constant concatenation, and does
4836 not count the trailing \s-1NUL\s0.  In C90, the limit was 509 characters; in
4837 C99, it was raised to 4095.  \*(C+98 does not specify a normative
4838 minimum maximum, so we do not diagnose overlength strings in \*(C+.
4839 .Sp
4840 This option is implied by \fB\-Wpedantic\fR, and can be disabled with
4841 \&\fB\-Wno\-overlength\-strings\fR.
4842 .IP "\fB\-Wunsuffixed\-float\-constants\fR (C and Objective-C only)" 4
4843 .IX Item "-Wunsuffixed-float-constants (C and Objective-C only)"
4844 Issue a warning for any floating constant that does not have
4845 a suffix.  When used together with \fB\-Wsystem\-headers\fR it
4846 warns about such constants in system header files.  This can be useful
4847 when preparing code to use with the \f(CW\*(C`FLOAT_CONST_DECIMAL64\*(C'\fR pragma
4848 from the decimal floating-point extension to C99.
4849 .IP "\fB\-Wno\-designated\-init\fR (C and Objective-C only)" 4
4850 .IX Item "-Wno-designated-init (C and Objective-C only)"
4851 Suppress warnings when a positional initializer is used to initialize
4852 a structure that has been marked with the \f(CW\*(C`designated_init\*(C'\fR
4853 attribute.
4854 .SS "Options for Debugging Your Program or \s-1GCC\s0"
4855 .IX Subsection "Options for Debugging Your Program or GCC"
4856 \&\s-1GCC\s0 has various special options that are used for debugging
4857 either your program or \s-1GCC:\s0
4858 .IP "\fB\-g\fR" 4
4859 .IX Item "-g"
4860 Produce debugging information in the operating system's native format
4861 (stabs, \s-1COFF\s0, \s-1XCOFF\s0, or \s-1DWARF\s0 2).  \s-1GDB\s0 can work with this debugging
4862 information.
4863 .Sp
4864 On most systems that use stabs format, \fB\-g\fR enables use of extra
4865 debugging information that only \s-1GDB\s0 can use; this extra information
4866 makes debugging work better in \s-1GDB\s0 but probably makes other debuggers
4867 crash or
4868 refuse to read the program.  If you want to control for certain whether
4869 to generate the extra information, use \fB\-gstabs+\fR, \fB\-gstabs\fR,
4870 \&\fB\-gxcoff+\fR, \fB\-gxcoff\fR, or \fB\-gvms\fR (see below).
4871 .Sp
4872 \&\s-1GCC\s0 allows you to use \fB\-g\fR with
4873 \&\fB\-O\fR.  The shortcuts taken by optimized code may occasionally
4874 produce surprising results: some variables you declared may not exist
4875 at all; flow of control may briefly move where you did not expect it;
4876 some statements may not be executed because they compute constant
4877 results or their values are already at hand; some statements may
4878 execute in different places because they have been moved out of loops.
4879 .Sp
4880 Nevertheless it proves possible to debug optimized output.  This makes
4881 it reasonable to use the optimizer for programs that might have bugs.
4882 .Sp
4883 The following options are useful when \s-1GCC\s0 is generated with the
4884 capability for more than one debugging format.
4885 .IP "\fB\-gsplit\-dwarf\fR" 4
4886 .IX Item "-gsplit-dwarf"
4887 Separate as much dwarf debugging information as possible into a
4888 separate output file with the extension .dwo.  This option allows
4889 the build system to avoid linking files with debug information.  To
4890 be useful, this option requires a debugger capable of reading .dwo
4891 files.
4892 .IP "\fB\-ggdb\fR" 4
4893 .IX Item "-ggdb"
4894 Produce debugging information for use by \s-1GDB\s0.  This means to use the
4895 most expressive format available (\s-1DWARF\s0 2, stabs, or the native format
4896 if neither of those are supported), including \s-1GDB\s0 extensions if at all
4897 possible.
4898 .IP "\fB\-gpubnames\fR" 4
4899 .IX Item "-gpubnames"
4900 Generate dwarf .debug_pubnames and .debug_pubtypes sections.
4901 .IP "\fB\-ggnu\-pubnames\fR" 4
4902 .IX Item "-ggnu-pubnames"
4903 Generate .debug_pubnames and .debug_pubtypes sections in a format
4904 suitable for conversion into a \s-1GDB\s0 index.  This option is only useful
4905 with a linker that can produce \s-1GDB\s0 index version 7.
4906 .IP "\fB\-gstabs\fR" 4
4907 .IX Item "-gstabs"
4908 Produce debugging information in stabs format (if that is supported),
4909 without \s-1GDB\s0 extensions.  This is the format used by \s-1DBX\s0 on most \s-1BSD\s0
4910 systems.  On \s-1MIPS\s0, Alpha and System V Release 4 systems this option
4911 produces stabs debugging output that is not understood by \s-1DBX\s0 or \s-1SDB\s0.
4912 On System V Release 4 systems this option requires the \s-1GNU\s0 assembler.
4913 .IP "\fB\-feliminate\-unused\-debug\-symbols\fR" 4
4914 .IX Item "-feliminate-unused-debug-symbols"
4915 Produce debugging information in stabs format (if that is supported),
4916 for only symbols that are actually used.
4917 .IP "\fB\-femit\-class\-debug\-always\fR" 4
4918 .IX Item "-femit-class-debug-always"
4919 Instead of emitting debugging information for a \*(C+ class in only one
4920 object file, emit it in all object files using the class.  This option
4921 should be used only with debuggers that are unable to handle the way \s-1GCC\s0
4922 normally emits debugging information for classes because using this
4923 option increases the size of debugging information by as much as a
4924 factor of two.
4925 .IP "\fB\-fdebug\-types\-section\fR" 4
4926 .IX Item "-fdebug-types-section"
4927 When using \s-1DWARF\s0 Version 4 or higher, type DIEs can be put into
4928 their own \f(CW\*(C`.debug_types\*(C'\fR section instead of making them part of the
4929 \&\f(CW\*(C`.debug_info\*(C'\fR section.  It is more efficient to put them in a separate
4930 comdat sections since the linker can then remove duplicates.
4931 But not all \s-1DWARF\s0 consumers support \f(CW\*(C`.debug_types\*(C'\fR sections yet
4932 and on some objects \f(CW\*(C`.debug_types\*(C'\fR produces larger instead of smaller
4933 debugging information.
4934 .IP "\fB\-gstabs+\fR" 4
4935 .IX Item "-gstabs+"
4936 Produce debugging information in stabs format (if that is supported),
4937 using \s-1GNU\s0 extensions understood only by the \s-1GNU\s0 debugger (\s-1GDB\s0).  The
4938 use of these extensions is likely to make other debuggers crash or
4939 refuse to read the program.
4940 .IP "\fB\-gcoff\fR" 4
4941 .IX Item "-gcoff"
4942 Produce debugging information in \s-1COFF\s0 format (if that is supported).
4943 This is the format used by \s-1SDB\s0 on most System V systems prior to
4944 System V Release 4.
4945 .IP "\fB\-gxcoff\fR" 4
4946 .IX Item "-gxcoff"
4947 Produce debugging information in \s-1XCOFF\s0 format (if that is supported).
4948 This is the format used by the \s-1DBX\s0 debugger on \s-1IBM\s0 \s-1RS/6000\s0 systems.
4949 .IP "\fB\-gxcoff+\fR" 4
4950 .IX Item "-gxcoff+"
4951 Produce debugging information in \s-1XCOFF\s0 format (if that is supported),
4952 using \s-1GNU\s0 extensions understood only by the \s-1GNU\s0 debugger (\s-1GDB\s0).  The
4953 use of these extensions is likely to make other debuggers crash or
4954 refuse to read the program, and may cause assemblers other than the \s-1GNU\s0
4955 assembler (\s-1GAS\s0) to fail with an error.
4956 .IP "\fB\-gdwarf\-\fR\fIversion\fR" 4
4957 .IX Item "-gdwarf-version"
4958 Produce debugging information in \s-1DWARF\s0 format (if that is supported).
4959 The value of \fIversion\fR may be either 2, 3, 4 or 5; the default version
4960 for most targets is 4.  \s-1DWARF\s0 Version 5 is only experimental.
4961 .Sp
4962 Note that with \s-1DWARF\s0 Version 2, some ports require and always
4963 use some non-conflicting \s-1DWARF\s0 3 extensions in the unwind tables.
4964 .Sp
4965 Version 4 may require \s-1GDB\s0 7.0 and \fB\-fvar\-tracking\-assignments\fR
4966 for maximum benefit.
4967 .IP "\fB\-grecord\-gcc\-switches\fR" 4
4968 .IX Item "-grecord-gcc-switches"
4969 This switch causes the command-line options used to invoke the
4970 compiler that may affect code generation to be appended to the
4971 DW_AT_producer attribute in \s-1DWARF\s0 debugging information.  The options
4972 are concatenated with spaces separating them from each other and from
4973 the compiler version.  See also \fB\-frecord\-gcc\-switches\fR for another
4974 way of storing compiler options into the object file.  This is the default.
4975 .IP "\fB\-gno\-record\-gcc\-switches\fR" 4
4976 .IX Item "-gno-record-gcc-switches"
4977 Disallow appending command-line options to the DW_AT_producer attribute
4978 in \s-1DWARF\s0 debugging information.
4979 .IP "\fB\-gstrict\-dwarf\fR" 4
4980 .IX Item "-gstrict-dwarf"
4981 Disallow using extensions of later \s-1DWARF\s0 standard version than selected
4982 with \fB\-gdwarf\-\fR\fIversion\fR.  On most targets using non-conflicting
4983 \&\s-1DWARF\s0 extensions from later standard versions is allowed.
4984 .IP "\fB\-gno\-strict\-dwarf\fR" 4
4985 .IX Item "-gno-strict-dwarf"
4986 Allow using extensions of later \s-1DWARF\s0 standard version than selected with
4987 \&\fB\-gdwarf\-\fR\fIversion\fR.
4988 .IP "\fB\-gz\fR[\fB=\fR\fItype\fR]" 4
4989 .IX Item "-gz[=type]"
4990 Produce compressed debug sections in \s-1DWARF\s0 format, if that is supported.
4991 If \fItype\fR is not given, the default type depends on the capabilities
4992 of the assembler and linker used.  \fItype\fR may be one of
4993 \&\fBnone\fR (don't compress debug sections), \fBzlib\fR (use zlib
4994 compression in \s-1ELF\s0 gABI format), or \fBzlib-gnu\fR (use zlib
4995 compression in traditional \s-1GNU\s0 format).  If the linker doesn't support
4996 writing compressed debug sections, the option is rejected.  Otherwise,
4997 if the assembler does not support them, \fB\-gz\fR is silently ignored
4998 when producing object files.
4999 .IP "\fB\-gvms\fR" 4
5000 .IX Item "-gvms"
5001 Produce debugging information in Alpha/VMS debug format (if that is
5002 supported).  This is the format used by \s-1DEBUG\s0 on Alpha/VMS systems.
5003 .IP "\fB\-g\fR\fIlevel\fR" 4
5004 .IX Item "-glevel"
5005 .PD 0
5006 .IP "\fB\-ggdb\fR\fIlevel\fR" 4
5007 .IX Item "-ggdblevel"
5008 .IP "\fB\-gstabs\fR\fIlevel\fR" 4
5009 .IX Item "-gstabslevel"
5010 .IP "\fB\-gcoff\fR\fIlevel\fR" 4
5011 .IX Item "-gcofflevel"
5012 .IP "\fB\-gxcoff\fR\fIlevel\fR" 4
5013 .IX Item "-gxcofflevel"
5014 .IP "\fB\-gvms\fR\fIlevel\fR" 4
5015 .IX Item "-gvmslevel"
5016 .PD
5017 Request debugging information and also use \fIlevel\fR to specify how
5018 much information.  The default level is 2.
5019 .Sp
5020 Level 0 produces no debug information at all.  Thus, \fB\-g0\fR negates
5021 \&\fB\-g\fR.
5022 .Sp
5023 Level 1 produces minimal information, enough for making backtraces in
5024 parts of the program that you don't plan to debug.  This includes
5025 descriptions of functions and external variables, and line number
5026 tables, but no information about local variables.
5027 .Sp
5028 Level 3 includes extra information, such as all the macro definitions
5029 present in the program.  Some debuggers support macro expansion when
5030 you use \fB\-g3\fR.
5031 .Sp
5032 \&\fB\-gdwarf\-2\fR does not accept a concatenated debug level, because
5033 \&\s-1GCC\s0 used to support an option \fB\-gdwarf\fR that meant to generate
5034 debug information in version 1 of the \s-1DWARF\s0 format (which is very
5035 different from version 2), and it would have been too confusing.  That
5036 debug format is long obsolete, but the option cannot be changed now.
5037 Instead use an additional \fB\-g\fR\fIlevel\fR option to change the
5038 debug level for \s-1DWARF\s0.
5039 .IP "\fB\-gtoggle\fR" 4
5040 .IX Item "-gtoggle"
5041 Turn off generation of debug info, if leaving out this option
5042 generates it, or turn it on at level 2 otherwise.  The position of this
5043 argument in the command line does not matter; it takes effect after all
5044 other options are processed, and it does so only once, no matter how
5045 many times it is given.  This is mainly intended to be used with
5046 \&\fB\-fcompare\-debug\fR.
5047 .IP "\fB\-fsanitize=address\fR" 4
5048 .IX Item "-fsanitize=address"
5049 Enable AddressSanitizer, a fast memory error detector.
5050 Memory access instructions are instrumented to detect
5051 out-of-bounds and use-after-free bugs.
5052 See <\fBhttp://code.google.com/p/address\-sanitizer/\fR> for
5053 more details.  The run-time behavior can be influenced using the
5054 \&\fB\s-1ASAN_OPTIONS\s0\fR environment variable; see
5055 <\fBhttps://code.google.com/p/address\-sanitizer/wiki/Flags#Run\-time_flags\fR> for
5056 a list of supported options.
5057 .IP "\fB\-fsanitize=kernel\-address\fR" 4
5058 .IX Item "-fsanitize=kernel-address"
5059 Enable AddressSanitizer for Linux kernel.
5060 See <\fBhttp://code.google.com/p/address\-sanitizer/wiki/AddressSanitizerForKernel\fR> for more details.
5061 .IP "\fB\-fsanitize=thread\fR" 4
5062 .IX Item "-fsanitize=thread"
5063 Enable ThreadSanitizer, a fast data race detector.
5064 Memory access instructions are instrumented to detect
5065 data race bugs.  See <\fBhttp://code.google.com/p/thread\-sanitizer/\fR> for more
5066 details. The run-time behavior can be influenced using the \fB\s-1TSAN_OPTIONS\s0\fR
5067 environment variable; see
5068 <\fBhttps://code.google.com/p/thread\-sanitizer/wiki/Flags\fR> for a list of
5069 supported options.
5070 .IP "\fB\-fsanitize=leak\fR" 4
5071 .IX Item "-fsanitize=leak"
5072 Enable LeakSanitizer, a memory leak detector.
5073 This option only matters for linking of executables and if neither
5074 \&\fB\-fsanitize=address\fR nor \fB\-fsanitize=thread\fR is used.  In that
5075 case the executable is linked against a library that overrides \f(CW\*(C`malloc\*(C'\fR
5076 and other allocator functions.  See
5077 <\fBhttps://code.google.com/p/address\-sanitizer/wiki/LeakSanitizer\fR> for more
5078 details.  The run-time behavior can be influenced using the
5079 \&\fB\s-1LSAN_OPTIONS\s0\fR environment variable.
5080 .IP "\fB\-fsanitize=undefined\fR" 4
5081 .IX Item "-fsanitize=undefined"
5082 Enable UndefinedBehaviorSanitizer, a fast undefined behavior detector.
5083 Various computations are instrumented to detect undefined behavior
5084 at runtime.  Current suboptions are:
5085 .RS 4
5086 .IP "\fB\-fsanitize=shift\fR" 4
5087 .IX Item "-fsanitize=shift"
5088 This option enables checking that the result of a shift operation is
5089 not undefined.  Note that what exactly is considered undefined differs
5090 slightly between C and \*(C+, as well as between \s-1ISO\s0 C90 and C99, etc.
5091 .IP "\fB\-fsanitize=integer\-divide\-by\-zero\fR" 4
5092 .IX Item "-fsanitize=integer-divide-by-zero"
5093 Detect integer division by zero as well as \f(CW\*(C`INT_MIN / \-1\*(C'\fR division.
5094 .IP "\fB\-fsanitize=unreachable\fR" 4
5095 .IX Item "-fsanitize=unreachable"
5096 With this option, the compiler turns the \f(CW\*(C`_\|_builtin_unreachable\*(C'\fR
5097 call into a diagnostics message call instead.  When reaching the
5098 \&\f(CW\*(C`_\|_builtin_unreachable\*(C'\fR call, the behavior is undefined.
5099 .IP "\fB\-fsanitize=vla\-bound\fR" 4
5100 .IX Item "-fsanitize=vla-bound"
5101 This option instructs the compiler to check that the size of a variable
5102 length array is positive.
5103 .IP "\fB\-fsanitize=null\fR" 4
5104 .IX Item "-fsanitize=null"
5105 This option enables pointer checking.  Particularly, the application
5106 built with this option turned on will issue an error message when it
5107 tries to dereference a \s-1NULL\s0 pointer, or if a reference (possibly an
5108 rvalue reference) is bound to a \s-1NULL\s0 pointer, or if a method is invoked
5109 on an object pointed by a \s-1NULL\s0 pointer.
5110 .IP "\fB\-fsanitize=return\fR" 4
5111 .IX Item "-fsanitize=return"
5112 This option enables return statement checking.  Programs
5113 built with this option turned on will issue an error message
5114 when the end of a non-void function is reached without actually
5115 returning a value.  This option works in \*(C+ only.
5116 .IP "\fB\-fsanitize=signed\-integer\-overflow\fR" 4
5117 .IX Item "-fsanitize=signed-integer-overflow"
5118 This option enables signed integer overflow checking.  We check that
5119 the result of \f(CW\*(C`+\*(C'\fR, \f(CW\*(C`*\*(C'\fR, and both unary and binary \f(CW\*(C`\-\*(C'\fR
5120 does not overflow in the signed arithmetics.  Note, integer promotion
5121 rules must be taken into account.  That is, the following is not an
5122 overflow:
5123 .Sp
5124 .Vb 2
5125 \&        signed char a = SCHAR_MAX;
5126 \&        a++;
5127 .Ve
5128 .IP "\fB\-fsanitize=bounds\fR" 4
5129 .IX Item "-fsanitize=bounds"
5130 This option enables instrumentation of array bounds.  Various out of bounds
5131 accesses are detected.  Flexible array members and initializers of variables
5132 with static storage are not instrumented.
5133 .IP "\fB\-fsanitize=alignment\fR" 4
5134 .IX Item "-fsanitize=alignment"
5135 This option enables checking of alignment of pointers when they are
5136 dereferenced, or when a reference is bound to insufficiently aligned target,
5137 or when a method or constructor is invoked on insufficiently aligned object.
5138 .IP "\fB\-fsanitize=object\-size\fR" 4
5139 .IX Item "-fsanitize=object-size"
5140 This option enables instrumentation of memory references using the
5141 \&\f(CW\*(C`_\|_builtin_object_size\*(C'\fR function.  Various out of bounds pointer
5142 accesses are detected.
5143 .IP "\fB\-fsanitize=float\-divide\-by\-zero\fR" 4
5144 .IX Item "-fsanitize=float-divide-by-zero"
5145 Detect floating-point division by zero.  Unlike other similar options,
5146 \&\fB\-fsanitize=float\-divide\-by\-zero\fR is not enabled by
5147 \&\fB\-fsanitize=undefined\fR, since floating-point division by zero can
5148 be a legitimate way of obtaining infinities and NaNs.
5149 .IP "\fB\-fsanitize=float\-cast\-overflow\fR" 4
5150 .IX Item "-fsanitize=float-cast-overflow"
5151 This option enables floating-point type to integer conversion checking.
5152 We check that the result of the conversion does not overflow.
5153 Unlike other similar options, \fB\-fsanitize=float\-cast\-overflow\fR is
5154 not enabled by \fB\-fsanitize=undefined\fR.
5155 This option does not work well with \f(CW\*(C`FE_INVALID\*(C'\fR exceptions enabled.
5156 .IP "\fB\-fsanitize=nonnull\-attribute\fR" 4
5157 .IX Item "-fsanitize=nonnull-attribute"
5158 This option enables instrumentation of calls, checking whether null values
5159 are not passed to arguments marked as requiring a non-null value by the
5160 \&\f(CW\*(C`nonnull\*(C'\fR function attribute.
5161 .IP "\fB\-fsanitize=returns\-nonnull\-attribute\fR" 4
5162 .IX Item "-fsanitize=returns-nonnull-attribute"
5163 This option enables instrumentation of return statements in functions
5164 marked with \f(CW\*(C`returns_nonnull\*(C'\fR function attribute, to detect returning
5165 of null values from such functions.
5166 .IP "\fB\-fsanitize=bool\fR" 4
5167 .IX Item "-fsanitize=bool"
5168 This option enables instrumentation of loads from bool.  If a value other
5169 than 0/1 is loaded, a run-time error is issued.
5170 .IP "\fB\-fsanitize=enum\fR" 4
5171 .IX Item "-fsanitize=enum"
5172 This option enables instrumentation of loads from an enum type.  If
5173 a value outside the range of values for the enum type is loaded,
5174 a run-time error is issued.
5175 .RE
5176 .RS 4
5177 .Sp
5178 While \fB\-ftrapv\fR causes traps for signed overflows to be emitted,
5179 \&\fB\-fsanitize=undefined\fR gives a diagnostic message.
5180 This currently works only for the C family of languages.
5181 .RE
5182 .IP "\fB\-fno\-sanitize=all\fR" 4
5183 .IX Item "-fno-sanitize=all"
5184 This option disables all previously enabled sanitizers.
5185 \&\fB\-fsanitize=all\fR is not allowed, as some sanitizers cannot be used
5186 together.
5187 .IP "\fB\-fasan\-shadow\-offset=\fR\fInumber\fR" 4
5188 .IX Item "-fasan-shadow-offset=number"
5189 This option forces \s-1GCC\s0 to use custom shadow offset in AddressSanitizer checks.
5190 It is useful for experimenting with different shadow memory layouts in
5191 Kernel AddressSanitizer.
5192 .IP "\fB\-fsanitize\-recover\fR[\fB=\fR\fIopts\fR]" 4
5193 .IX Item "-fsanitize-recover[=opts]"
5194 \&\fB\-fsanitize\-recover=\fR controls error recovery mode for sanitizers
5195 mentioned in comma-separated list of \fIopts\fR.  Enabling this option
5196 for a sanitizer component causes it to attempt to continue
5197 running the program as if no error happened.  This means multiple
5198 runtime errors can be reported in a single program run, and the exit
5199 code of the program may indicate success even when errors
5200 have been reported.  The \fB\-fno\-sanitize\-recover=\fR can be used to alter
5201 this behavior: only the first detected error is reported
5202 and program then exits with a non-zero exit code.
5203 .Sp
5204 Currently this feature only works for \fB\-fsanitize=undefined\fR (and its suboptions
5205 except for \fB\-fsanitize=unreachable\fR and \fB\-fsanitize=return\fR),
5206 \&\fB\-fsanitize=float\-cast\-overflow\fR, \fB\-fsanitize=float\-divide\-by\-zero\fR and
5207 \&\fB\-fsanitize=kernel\-address\fR.  For these sanitizers error recovery is turned on by default.
5208 \&\fB\-fsanitize\-recover=all\fR and \fB\-fno\-sanitize\-recover=all\fR is also
5209 accepted, the former enables recovery for all sanitizers that support it,
5210 the latter disables recovery for all sanitizers that support it.
5211 .Sp
5212 Syntax without explicit \fIopts\fR parameter is deprecated.  It is equivalent to
5213 .Sp
5214 .Vb 1
5215 \&        \-fsanitize\-recover=undefined,float\-cast\-overflow,float\-divide\-by\-zero
5216 .Ve
5217 .Sp
5218 Similarly \fB\-fno\-sanitize\-recover\fR is equivalent to
5219 .Sp
5220 .Vb 1
5221 \&        \-fno\-sanitize\-recover=undefined,float\-cast\-overflow,float\-divide\-by\-zero
5222 .Ve
5223 .IP "\fB\-fsanitize\-undefined\-trap\-on\-error\fR" 4
5224 .IX Item "-fsanitize-undefined-trap-on-error"
5225 The \fB\-fsanitize\-undefined\-trap\-on\-error\fR instructs the compiler to
5226 report undefined behavior using \f(CW\*(C`_\|_builtin_trap ()\*(C'\fR rather than
5227 a \f(CW\*(C`libubsan\*(C'\fR library routine.  The advantage of this is that the
5228 \&\f(CW\*(C`libubsan\*(C'\fR library is not needed and is not linked in, so this
5229 is usable even in freestanding environments.
5230 .IP "\fB\-fdump\-final\-insns\fR[\fB=\fR\fIfile\fR]" 4
5231 .IX Item "-fdump-final-insns[=file]"
5232 Dump the final internal representation (\s-1RTL\s0) to \fIfile\fR.  If the
5233 optional argument is omitted (or if \fIfile\fR is \f(CW\*(C`.\*(C'\fR), the name
5234 of the dump file is determined by appending \f(CW\*(C`.gkd\*(C'\fR to the
5235 compilation output file name.
5236 .IP "\fB\-fcompare\-debug\fR[\fB=\fR\fIopts\fR]" 4
5237 .IX Item "-fcompare-debug[=opts]"
5238 If no error occurs during compilation, run the compiler a second time,
5239 adding \fIopts\fR and \fB\-fcompare\-debug\-second\fR to the arguments
5240 passed to the second compilation.  Dump the final internal
5241 representation in both compilations, and print an error if they differ.
5242 .Sp
5243 If the equal sign is omitted, the default \fB\-gtoggle\fR is used.
5244 .Sp
5245 The environment variable \fB\s-1GCC_COMPARE_DEBUG\s0\fR, if defined, non-empty
5246 and nonzero, implicitly enables \fB\-fcompare\-debug\fR.  If
5247 \&\fB\s-1GCC_COMPARE_DEBUG\s0\fR is defined to a string starting with a dash,
5248 then it is used for \fIopts\fR, otherwise the default \fB\-gtoggle\fR
5249 is used.
5250 .Sp
5251 \&\fB\-fcompare\-debug=\fR, with the equal sign but without \fIopts\fR,
5252 is equivalent to \fB\-fno\-compare\-debug\fR, which disables the dumping
5253 of the final representation and the second compilation, preventing even
5254 \&\fB\s-1GCC_COMPARE_DEBUG\s0\fR from taking effect.
5255 .Sp
5256 To verify full coverage during \fB\-fcompare\-debug\fR testing, set
5257 \&\fB\s-1GCC_COMPARE_DEBUG\s0\fR to say \fB\-fcompare\-debug\-not\-overridden\fR,
5258 which \s-1GCC\s0 rejects as an invalid option in any actual compilation
5259 (rather than preprocessing, assembly or linking).  To get just a
5260 warning, setting \fB\s-1GCC_COMPARE_DEBUG\s0\fR to \fB\-w%n\-fcompare\-debug
5261 not overridden\fR will do.
5262 .IP "\fB\-fcompare\-debug\-second\fR" 4
5263 .IX Item "-fcompare-debug-second"
5264 This option is implicitly passed to the compiler for the second
5265 compilation requested by \fB\-fcompare\-debug\fR, along with options to
5266 silence warnings, and omitting other options that would cause
5267 side-effect compiler outputs to files or to the standard output.  Dump
5268 files and preserved temporary files are renamed so as to contain the
5269 \&\f(CW\*(C`.gk\*(C'\fR additional extension during the second compilation, to avoid
5270 overwriting those generated by the first.
5271 .Sp
5272 When this option is passed to the compiler driver, it causes the
5273 \&\fIfirst\fR compilation to be skipped, which makes it useful for little
5274 other than debugging the compiler proper.
5275 .IP "\fB\-feliminate\-dwarf2\-dups\fR" 4
5276 .IX Item "-feliminate-dwarf2-dups"
5277 Compress \s-1DWARF\s0 2 debugging information by eliminating duplicated
5278 information about each symbol.  This option only makes sense when
5279 generating \s-1DWARF\s0 2 debugging information with \fB\-gdwarf\-2\fR.
5280 .IP "\fB\-femit\-struct\-debug\-baseonly\fR" 4
5281 .IX Item "-femit-struct-debug-baseonly"
5282 Emit debug information for struct-like types
5283 only when the base name of the compilation source file
5284 matches the base name of file in which the struct is defined.
5285 .Sp
5286 This option substantially reduces the size of debugging information,
5287 but at significant potential loss in type information to the debugger.
5288 See \fB\-femit\-struct\-debug\-reduced\fR for a less aggressive option.
5289 See \fB\-femit\-struct\-debug\-detailed\fR for more detailed control.
5290 .Sp
5291 This option works only with \s-1DWARF\s0 2.
5292 .IP "\fB\-femit\-struct\-debug\-reduced\fR" 4
5293 .IX Item "-femit-struct-debug-reduced"
5294 Emit debug information for struct-like types
5295 only when the base name of the compilation source file
5296 matches the base name of file in which the type is defined,
5297 unless the struct is a template or defined in a system header.
5298 .Sp
5299 This option significantly reduces the size of debugging information,
5300 with some potential loss in type information to the debugger.
5301 See \fB\-femit\-struct\-debug\-baseonly\fR for a more aggressive option.
5302 See \fB\-femit\-struct\-debug\-detailed\fR for more detailed control.
5303 .Sp
5304 This option works only with \s-1DWARF\s0 2.
5305 .IP "\fB\-femit\-struct\-debug\-detailed\fR[\fB=\fR\fIspec-list\fR]" 4
5306 .IX Item "-femit-struct-debug-detailed[=spec-list]"
5307 Specify the struct-like types
5308 for which the compiler generates debug information.
5309 The intent is to reduce duplicate struct debug information
5310 between different object files within the same program.
5311 .Sp
5312 This option is a detailed version of
5313 \&\fB\-femit\-struct\-debug\-reduced\fR and \fB\-femit\-struct\-debug\-baseonly\fR,
5314 which serves for most needs.
5315 .Sp
5316 A specification has the syntax[\fBdir:\fR|\fBind:\fR][\fBord:\fR|\fBgen:\fR](\fBany\fR|\fBsys\fR|\fBbase\fR|\fBnone\fR)
5317 .Sp
5318 The optional first word limits the specification to
5319 structs that are used directly (\fBdir:\fR) or used indirectly (\fBind:\fR).
5320 A struct type is used directly when it is the type of a variable, member.
5321 Indirect uses arise through pointers to structs.
5322 That is, when use of an incomplete struct is valid, the use is indirect.
5323 An example is
5324 \&\fBstruct one direct; struct two * indirect;\fR.
5325 .Sp
5326 The optional second word limits the specification to
5327 ordinary structs (\fBord:\fR) or generic structs (\fBgen:\fR).
5328 Generic structs are a bit complicated to explain.
5329 For \*(C+, these are non-explicit specializations of template classes,
5330 or non-template classes within the above.
5331 Other programming languages have generics,
5332 but \fB\-femit\-struct\-debug\-detailed\fR does not yet implement them.
5333 .Sp
5334 The third word specifies the source files for those
5335 structs for which the compiler should emit debug information.
5336 The values \fBnone\fR and \fBany\fR have the normal meaning.
5337 The value \fBbase\fR means that
5338 the base of name of the file in which the type declaration appears
5339 must match the base of the name of the main compilation file.
5340 In practice, this means that when compiling \fIfoo.c\fR, debug information
5341 is generated for types declared in that file and \fIfoo.h\fR,
5342 but not other header files.
5343 The value \fBsys\fR means those types satisfying \fBbase\fR
5344 or declared in system or compiler headers.
5345 .Sp
5346 You may need to experiment to determine the best settings for your application.
5347 .Sp
5348 The default is \fB\-femit\-struct\-debug\-detailed=all\fR.
5349 .Sp
5350 This option works only with \s-1DWARF\s0 2.
5351 .IP "\fB\-fno\-merge\-debug\-strings\fR" 4
5352 .IX Item "-fno-merge-debug-strings"
5353 Direct the linker to not merge together strings in the debugging
5354 information that are identical in different object files.  Merging is
5355 not supported by all assemblers or linkers.  Merging decreases the size
5356 of the debug information in the output file at the cost of increasing
5357 link processing time.  Merging is enabled by default.
5358 .IP "\fB\-fdebug\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR" 4
5359 .IX Item "-fdebug-prefix-map=old=new"
5360 When compiling files in directory \fI\fIold\fI\fR, record debugging
5361 information describing them as in \fI\fInew\fI\fR instead.
5362 .IP "\fB\-fno\-dwarf2\-cfi\-asm\fR" 4
5363 .IX Item "-fno-dwarf2-cfi-asm"
5364 Emit \s-1DWARF\s0 2 unwind info as compiler generated \f(CW\*(C`.eh_frame\*(C'\fR section
5365 instead of using \s-1GAS\s0 \f(CW\*(C`.cfi_*\*(C'\fR directives.
5366 .IP "\fB\-p\fR" 4
5367 .IX Item "-p"
5368 Generate extra code to write profile information suitable for the
5369 analysis program \fBprof\fR.  You must use this option when compiling
5370 the source files you want data about, and you must also use it when
5371 linking.
5372 .IP "\fB\-pg\fR" 4
5373 .IX Item "-pg"
5374 Generate extra code to write profile information suitable for the
5375 analysis program \fBgprof\fR.  You must use this option when compiling
5376 the source files you want data about, and you must also use it when
5377 linking.
5378 .IP "\fB\-Q\fR" 4
5379 .IX Item "-Q"
5380 Makes the compiler print out each function name as it is compiled, and
5381 print some statistics about each pass when it finishes.
5382 .IP "\fB\-ftime\-report\fR" 4
5383 .IX Item "-ftime-report"
5384 Makes the compiler print some statistics about the time consumed by each
5385 pass when it finishes.
5386 .IP "\fB\-fmem\-report\fR" 4
5387 .IX Item "-fmem-report"
5388 Makes the compiler print some statistics about permanent memory
5389 allocation when it finishes.
5390 .IP "\fB\-fmem\-report\-wpa\fR" 4
5391 .IX Item "-fmem-report-wpa"
5392 Makes the compiler print some statistics about permanent memory
5393 allocation for the \s-1WPA\s0 phase only.
5394 .IP "\fB\-fpre\-ipa\-mem\-report\fR" 4
5395 .IX Item "-fpre-ipa-mem-report"
5396 .PD 0
5397 .IP "\fB\-fpost\-ipa\-mem\-report\fR" 4
5398 .IX Item "-fpost-ipa-mem-report"
5399 .PD
5400 Makes the compiler print some statistics about permanent memory
5401 allocation before or after interprocedural optimization.
5402 .IP "\fB\-fprofile\-report\fR" 4
5403 .IX Item "-fprofile-report"
5404 Makes the compiler print some statistics about consistency of the
5405 (estimated) profile and effect of individual passes.
5406 .IP "\fB\-fstack\-usage\fR" 4
5407 .IX Item "-fstack-usage"
5408 Makes the compiler output stack usage information for the program, on a
5409 per-function basis.  The filename for the dump is made by appending
5410 \&\fI.su\fR to the \fIauxname\fR.  \fIauxname\fR is generated from the name of
5411 the output file, if explicitly specified and it is not an executable,
5412 otherwise it is the basename of the source file.  An entry is made up
5413 of three fields:
5414 .RS 4
5415 .IP "*" 4
5416 The name of the function.
5417 .IP "*" 4
5418 A number of bytes.
5419 .IP "*" 4
5420 One or more qualifiers: \f(CW\*(C`static\*(C'\fR, \f(CW\*(C`dynamic\*(C'\fR, \f(CW\*(C`bounded\*(C'\fR.
5421 .RE
5422 .RS 4
5423 .Sp
5424 The qualifier \f(CW\*(C`static\*(C'\fR means that the function manipulates the stack
5425 statically: a fixed number of bytes are allocated for the frame on function
5426 entry and released on function exit; no stack adjustments are otherwise made
5427 in the function.  The second field is this fixed number of bytes.
5428 .Sp
5429 The qualifier \f(CW\*(C`dynamic\*(C'\fR means that the function manipulates the stack
5430 dynamically: in addition to the static allocation described above, stack
5431 adjustments are made in the body of the function, for example to push/pop
5432 arguments around function calls.  If the qualifier \f(CW\*(C`bounded\*(C'\fR is also
5433 present, the amount of these adjustments is bounded at compile time and
5434 the second field is an upper bound of the total amount of stack used by
5435 the function.  If it is not present, the amount of these adjustments is
5436 not bounded at compile time and the second field only represents the
5437 bounded part.
5438 .RE
5439 .IP "\fB\-fprofile\-arcs\fR" 4
5440 .IX Item "-fprofile-arcs"
5441 Add code so that program flow \fIarcs\fR are instrumented.  During
5442 execution the program records how many times each branch and call is
5443 executed and how many times it is taken or returns.  When the compiled
5444 program exits it saves this data to a file called
5445 \&\fI\fIauxname\fI.gcda\fR for each source file.  The data may be used for
5446 profile-directed optimizations (\fB\-fbranch\-probabilities\fR), or for
5447 test coverage analysis (\fB\-ftest\-coverage\fR).  Each object file's
5448 \&\fIauxname\fR is generated from the name of the output file, if
5449 explicitly specified and it is not the final executable, otherwise it is
5450 the basename of the source file.  In both cases any suffix is removed
5451 (e.g. \fIfoo.gcda\fR for input file \fIdir/foo.c\fR, or
5452 \&\fIdir/foo.gcda\fR for output file specified as \fB\-o dir/foo.o\fR).
5453 .IP "\fB\-\-coverage\fR" 4
5454 .IX Item "--coverage"
5455 This option is used to compile and link code instrumented for coverage
5456 analysis.  The option is a synonym for \fB\-fprofile\-arcs\fR
5457 \&\fB\-ftest\-coverage\fR (when compiling) and \fB\-lgcov\fR (when
5458 linking).  See the documentation for those options for more details.
5459 .RS 4
5460 .IP "*" 4
5461 Compile the source files with \fB\-fprofile\-arcs\fR plus optimization
5462 and code generation options.  For test coverage analysis, use the
5463 additional \fB\-ftest\-coverage\fR option.  You do not need to profile
5464 every source file in a program.
5465 .IP "*" 4
5466 Link your object files with \fB\-lgcov\fR or \fB\-fprofile\-arcs\fR
5467 (the latter implies the former).
5468 .IP "*" 4
5469 Run the program on a representative workload to generate the arc profile
5470 information.  This may be repeated any number of times.  You can run
5471 concurrent instances of your program, and provided that the file system
5472 supports locking, the data files will be correctly updated.  Also
5473 \&\f(CW\*(C`fork\*(C'\fR calls are detected and correctly handled (double counting
5474 will not happen).
5475 .IP "*" 4
5476 For profile-directed optimizations, compile the source files again with
5477 the same optimization and code generation options plus
5478 \&\fB\-fbranch\-probabilities\fR.
5479 .IP "*" 4
5480 For test coverage analysis, use \fBgcov\fR to produce human readable
5481 information from the \fI.gcno\fR and \fI.gcda\fR files.  Refer to the
5482 \&\fBgcov\fR documentation for further information.
5483 .RE
5484 .RS 4
5485 .Sp
5486 With \fB\-fprofile\-arcs\fR, for each function of your program \s-1GCC\s0
5487 creates a program flow graph, then finds a spanning tree for the graph.
5488 Only arcs that are not on the spanning tree have to be instrumented: the
5489 compiler adds code to count the number of times that these arcs are
5490 executed.  When an arc is the only exit or only entrance to a block, the
5491 instrumentation code can be added to the block; otherwise, a new basic
5492 block must be created to hold the instrumentation code.
5493 .RE
5494 .IP "\fB\-ftest\-coverage\fR" 4
5495 .IX Item "-ftest-coverage"
5496 Produce a notes file that the \fBgcov\fR code-coverage utility can use to
5497 show program coverage.  Each source file's note file is called
5498 \&\fI\fIauxname\fI.gcno\fR.  Refer to the \fB\-fprofile\-arcs\fR option
5499 above for a description of \fIauxname\fR and instructions on how to
5500 generate test coverage data.  Coverage data matches the source files
5501 more closely if you do not optimize.
5502 .IP "\fB\-fdbg\-cnt\-list\fR" 4
5503 .IX Item "-fdbg-cnt-list"
5504 Print the name and the counter upper bound for all debug counters.
5505 .IP "\fB\-fdbg\-cnt=\fR\fIcounter-value-list\fR" 4
5506 .IX Item "-fdbg-cnt=counter-value-list"
5507 Set the internal debug counter upper bound.  \fIcounter-value-list\fR
5508 is a comma-separated list of \fIname\fR:\fIvalue\fR pairs
5509 which sets the upper bound of each debug counter \fIname\fR to \fIvalue\fR.
5510 All debug counters have the initial upper bound of \f(CW\*(C`UINT_MAX\*(C'\fR;
5511 thus \f(CW\*(C`dbg_cnt()\*(C'\fR returns true always unless the upper bound
5512 is set by this option.
5513 For example, with \fB\-fdbg\-cnt=dce:10,tail_call:0\fR,
5514 \&\f(CW\*(C`dbg_cnt(dce)\*(C'\fR returns true only for first 10 invocations.
5515 .IP "\fB\-fenable\-\fR\fIkind\fR\fB\-\fR\fIpass\fR" 4
5516 .IX Item "-fenable-kind-pass"
5517 .PD 0
5518 .IP "\fB\-fdisable\-\fR\fIkind\fR\fB\-\fR\fIpass\fR\fB=\fR\fIrange-list\fR" 4
5519 .IX Item "-fdisable-kind-pass=range-list"
5520 .PD
5521 This is a set of options that are used to explicitly disable/enable
5522 optimization passes.  These options are intended for use for debugging \s-1GCC\s0.
5523 Compiler users should use regular options for enabling/disabling
5524 passes instead.
5525 .RS 4
5526 .IP "\fB\-fdisable\-ipa\-\fR\fIpass\fR" 4
5527 .IX Item "-fdisable-ipa-pass"
5528 Disable \s-1IPA\s0 pass \fIpass\fR. \fIpass\fR is the pass name.  If the same pass is
5529 statically invoked in the compiler multiple times, the pass name should be
5530 appended with a sequential number starting from 1.
5531 .IP "\fB\-fdisable\-rtl\-\fR\fIpass\fR" 4
5532 .IX Item "-fdisable-rtl-pass"
5533 .PD 0
5534 .IP "\fB\-fdisable\-rtl\-\fR\fIpass\fR\fB=\fR\fIrange-list\fR" 4
5535 .IX Item "-fdisable-rtl-pass=range-list"
5536 .PD
5537 Disable \s-1RTL\s0 pass \fIpass\fR.  \fIpass\fR is the pass name.  If the same pass is
5538 statically invoked in the compiler multiple times, the pass name should be
5539 appended with a sequential number starting from 1.  \fIrange-list\fR is a 
5540 comma-separated list of function ranges or assembler names.  Each range is a number
5541 pair separated by a colon.  The range is inclusive in both ends.  If the range
5542 is trivial, the number pair can be simplified as a single number.  If the
5543 function's call graph node's \fIuid\fR falls within one of the specified ranges,
5544 the \fIpass\fR is disabled for that function.  The \fIuid\fR is shown in the
5545 function header of a dump file, and the pass names can be dumped by using
5546 option \fB\-fdump\-passes\fR.
5547 .IP "\fB\-fdisable\-tree\-\fR\fIpass\fR" 4
5548 .IX Item "-fdisable-tree-pass"
5549 .PD 0
5550 .IP "\fB\-fdisable\-tree\-\fR\fIpass\fR\fB=\fR\fIrange-list\fR" 4
5551 .IX Item "-fdisable-tree-pass=range-list"
5552 .PD
5553 Disable tree pass \fIpass\fR.  See \fB\-fdisable\-rtl\fR for the description of
5554 option arguments.
5555 .IP "\fB\-fenable\-ipa\-\fR\fIpass\fR" 4
5556 .IX Item "-fenable-ipa-pass"
5557 Enable \s-1IPA\s0 pass \fIpass\fR.  \fIpass\fR is the pass name.  If the same pass is
5558 statically invoked in the compiler multiple times, the pass name should be
5559 appended with a sequential number starting from 1.
5560 .IP "\fB\-fenable\-rtl\-\fR\fIpass\fR" 4
5561 .IX Item "-fenable-rtl-pass"
5562 .PD 0
5563 .IP "\fB\-fenable\-rtl\-\fR\fIpass\fR\fB=\fR\fIrange-list\fR" 4
5564 .IX Item "-fenable-rtl-pass=range-list"
5565 .PD
5566 Enable \s-1RTL\s0 pass \fIpass\fR.  See \fB\-fdisable\-rtl\fR for option argument
5567 description and examples.
5568 .IP "\fB\-fenable\-tree\-\fR\fIpass\fR" 4
5569 .IX Item "-fenable-tree-pass"
5570 .PD 0
5571 .IP "\fB\-fenable\-tree\-\fR\fIpass\fR\fB=\fR\fIrange-list\fR" 4
5572 .IX Item "-fenable-tree-pass=range-list"
5573 .PD
5574 Enable tree pass \fIpass\fR.  See \fB\-fdisable\-rtl\fR for the description
5575 of option arguments.
5576 .RE
5577 .RS 4
5578 .Sp
5579 Here are some examples showing uses of these options.
5580 .Sp
5581 .Vb 10
5582 \&        # disable ccp1 for all functions
5583 \&           \-fdisable\-tree\-ccp1
5584 \&        # disable complete unroll for function whose cgraph node uid is 1
5585 \&           \-fenable\-tree\-cunroll=1
5586 \&        # disable gcse2 for functions at the following ranges [1,1],
5587 \&        # [300,400], and [400,1000]
5588 \&        # disable gcse2 for functions foo and foo2
5589 \&           \-fdisable\-rtl\-gcse2=foo,foo2
5590 \&        # disable early inlining
5591 \&           \-fdisable\-tree\-einline
5592 \&        # disable ipa inlining
5593 \&           \-fdisable\-ipa\-inline
5594 \&        # enable tree full unroll
5595 \&           \-fenable\-tree\-unroll
5596 .Ve
5597 .RE
5598 .IP "\fB\-d\fR\fIletters\fR" 4
5599 .IX Item "-dletters"
5600 .PD 0
5601 .IP "\fB\-fdump\-rtl\-\fR\fIpass\fR" 4
5602 .IX Item "-fdump-rtl-pass"
5603 .IP "\fB\-fdump\-rtl\-\fR\fIpass\fR\fB=\fR\fIfilename\fR" 4
5604 .IX Item "-fdump-rtl-pass=filename"
5605 .PD
5606 Says to make debugging dumps during compilation at times specified by
5607 \&\fIletters\fR.  This is used for debugging the RTL-based passes of the
5608 compiler.  The file names for most of the dumps are made by appending
5609 a pass number and a word to the \fIdumpname\fR, and the files are
5610 created in the directory of the output file. In case of
5611 \&\fB=\fR\fIfilename\fR option, the dump is output on the given file
5612 instead of the pass numbered dump files. Note that the pass number is
5613 computed statically as passes get registered into the pass manager.
5614 Thus the numbering is not related to the dynamic order of execution of
5615 passes.  In particular, a pass installed by a plugin could have a
5616 number over 200 even if it executed quite early.  \fIdumpname\fR is
5617 generated from the name of the output file, if explicitly specified
5618 and it is not an executable, otherwise it is the basename of the
5619 source file. These switches may have different effects when
5620 \&\fB\-E\fR is used for preprocessing.
5621 .Sp
5622 Debug dumps can be enabled with a \fB\-fdump\-rtl\fR switch or some
5623 \&\fB\-d\fR option \fIletters\fR.  Here are the possible
5624 letters for use in \fIpass\fR and \fIletters\fR, and their meanings:
5625 .RS 4
5626 .IP "\fB\-fdump\-rtl\-alignments\fR" 4
5627 .IX Item "-fdump-rtl-alignments"
5628 Dump after branch alignments have been computed.
5629 .IP "\fB\-fdump\-rtl\-asmcons\fR" 4
5630 .IX Item "-fdump-rtl-asmcons"
5631 Dump after fixing rtl statements that have unsatisfied in/out constraints.
5632 .IP "\fB\-fdump\-rtl\-auto_inc_dec\fR" 4
5633 .IX Item "-fdump-rtl-auto_inc_dec"
5634 Dump after auto-inc-dec discovery.  This pass is only run on
5635 architectures that have auto inc or auto dec instructions.
5636 .IP "\fB\-fdump\-rtl\-barriers\fR" 4
5637 .IX Item "-fdump-rtl-barriers"
5638 Dump after cleaning up the barrier instructions.
5639 .IP "\fB\-fdump\-rtl\-bbpart\fR" 4
5640 .IX Item "-fdump-rtl-bbpart"
5641 Dump after partitioning hot and cold basic blocks.
5642 .IP "\fB\-fdump\-rtl\-bbro\fR" 4
5643 .IX Item "-fdump-rtl-bbro"
5644 Dump after block reordering.
5645 .IP "\fB\-fdump\-rtl\-btl1\fR" 4
5646 .IX Item "-fdump-rtl-btl1"
5647 .PD 0
5648 .IP "\fB\-fdump\-rtl\-btl2\fR" 4
5649 .IX Item "-fdump-rtl-btl2"
5650 .PD
5651 \&\fB\-fdump\-rtl\-btl1\fR and \fB\-fdump\-rtl\-btl2\fR enable dumping
5652 after the two branch
5653 target load optimization passes.
5654 .IP "\fB\-fdump\-rtl\-bypass\fR" 4
5655 .IX Item "-fdump-rtl-bypass"
5656 Dump after jump bypassing and control flow optimizations.
5657 .IP "\fB\-fdump\-rtl\-combine\fR" 4
5658 .IX Item "-fdump-rtl-combine"
5659 Dump after the \s-1RTL\s0 instruction combination pass.
5660 .IP "\fB\-fdump\-rtl\-compgotos\fR" 4
5661 .IX Item "-fdump-rtl-compgotos"
5662 Dump after duplicating the computed gotos.
5663 .IP "\fB\-fdump\-rtl\-ce1\fR" 4
5664 .IX Item "-fdump-rtl-ce1"
5665 .PD 0
5666 .IP "\fB\-fdump\-rtl\-ce2\fR" 4
5667 .IX Item "-fdump-rtl-ce2"
5668 .IP "\fB\-fdump\-rtl\-ce3\fR" 4
5669 .IX Item "-fdump-rtl-ce3"
5670 .PD
5671 \&\fB\-fdump\-rtl\-ce1\fR, \fB\-fdump\-rtl\-ce2\fR, and
5672 \&\fB\-fdump\-rtl\-ce3\fR enable dumping after the three
5673 if conversion passes.
5674 .IP "\fB\-fdump\-rtl\-cprop_hardreg\fR" 4
5675 .IX Item "-fdump-rtl-cprop_hardreg"
5676 Dump after hard register copy propagation.
5677 .IP "\fB\-fdump\-rtl\-csa\fR" 4
5678 .IX Item "-fdump-rtl-csa"
5679 Dump after combining stack adjustments.
5680 .IP "\fB\-fdump\-rtl\-cse1\fR" 4
5681 .IX Item "-fdump-rtl-cse1"
5682 .PD 0
5683 .IP "\fB\-fdump\-rtl\-cse2\fR" 4
5684 .IX Item "-fdump-rtl-cse2"
5685 .PD
5686 \&\fB\-fdump\-rtl\-cse1\fR and \fB\-fdump\-rtl\-cse2\fR enable dumping after
5687 the two common subexpression elimination passes.
5688 .IP "\fB\-fdump\-rtl\-dce\fR" 4
5689 .IX Item "-fdump-rtl-dce"
5690 Dump after the standalone dead code elimination passes.
5691 .IP "\fB\-fdump\-rtl\-dbr\fR" 4
5692 .IX Item "-fdump-rtl-dbr"
5693 Dump after delayed branch scheduling.
5694 .IP "\fB\-fdump\-rtl\-dce1\fR" 4
5695 .IX Item "-fdump-rtl-dce1"
5696 .PD 0
5697 .IP "\fB\-fdump\-rtl\-dce2\fR" 4
5698 .IX Item "-fdump-rtl-dce2"
5699 .PD
5700 \&\fB\-fdump\-rtl\-dce1\fR and \fB\-fdump\-rtl\-dce2\fR enable dumping after
5701 the two dead store elimination passes.
5702 .IP "\fB\-fdump\-rtl\-eh\fR" 4
5703 .IX Item "-fdump-rtl-eh"
5704 Dump after finalization of \s-1EH\s0 handling code.
5705 .IP "\fB\-fdump\-rtl\-eh_ranges\fR" 4
5706 .IX Item "-fdump-rtl-eh_ranges"
5707 Dump after conversion of \s-1EH\s0 handling range regions.
5708 .IP "\fB\-fdump\-rtl\-expand\fR" 4
5709 .IX Item "-fdump-rtl-expand"
5710 Dump after \s-1RTL\s0 generation.
5711 .IP "\fB\-fdump\-rtl\-fwprop1\fR" 4
5712 .IX Item "-fdump-rtl-fwprop1"
5713 .PD 0
5714 .IP "\fB\-fdump\-rtl\-fwprop2\fR" 4
5715 .IX Item "-fdump-rtl-fwprop2"
5716 .PD
5717 \&\fB\-fdump\-rtl\-fwprop1\fR and \fB\-fdump\-rtl\-fwprop2\fR enable
5718 dumping after the two forward propagation passes.
5719 .IP "\fB\-fdump\-rtl\-gcse1\fR" 4
5720 .IX Item "-fdump-rtl-gcse1"
5721 .PD 0
5722 .IP "\fB\-fdump\-rtl\-gcse2\fR" 4
5723 .IX Item "-fdump-rtl-gcse2"
5724 .PD
5725 \&\fB\-fdump\-rtl\-gcse1\fR and \fB\-fdump\-rtl\-gcse2\fR enable dumping
5726 after global common subexpression elimination.
5727 .IP "\fB\-fdump\-rtl\-init\-regs\fR" 4
5728 .IX Item "-fdump-rtl-init-regs"
5729 Dump after the initialization of the registers.
5730 .IP "\fB\-fdump\-rtl\-initvals\fR" 4
5731 .IX Item "-fdump-rtl-initvals"
5732 Dump after the computation of the initial value sets.
5733 .IP "\fB\-fdump\-rtl\-into_cfglayout\fR" 4
5734 .IX Item "-fdump-rtl-into_cfglayout"
5735 Dump after converting to cfglayout mode.
5736 .IP "\fB\-fdump\-rtl\-ira\fR" 4
5737 .IX Item "-fdump-rtl-ira"
5738 Dump after iterated register allocation.
5739 .IP "\fB\-fdump\-rtl\-jump\fR" 4
5740 .IX Item "-fdump-rtl-jump"
5741 Dump after the second jump optimization.
5742 .IP "\fB\-fdump\-rtl\-loop2\fR" 4
5743 .IX Item "-fdump-rtl-loop2"
5744 \&\fB\-fdump\-rtl\-loop2\fR enables dumping after the rtl
5745 loop optimization passes.
5746 .IP "\fB\-fdump\-rtl\-mach\fR" 4
5747 .IX Item "-fdump-rtl-mach"
5748 Dump after performing the machine dependent reorganization pass, if that
5749 pass exists.
5750 .IP "\fB\-fdump\-rtl\-mode_sw\fR" 4
5751 .IX Item "-fdump-rtl-mode_sw"
5752 Dump after removing redundant mode switches.
5753 .IP "\fB\-fdump\-rtl\-rnreg\fR" 4
5754 .IX Item "-fdump-rtl-rnreg"
5755 Dump after register renumbering.
5756 .IP "\fB\-fdump\-rtl\-outof_cfglayout\fR" 4
5757 .IX Item "-fdump-rtl-outof_cfglayout"
5758 Dump after converting from cfglayout mode.
5759 .IP "\fB\-fdump\-rtl\-peephole2\fR" 4
5760 .IX Item "-fdump-rtl-peephole2"
5761 Dump after the peephole pass.
5762 .IP "\fB\-fdump\-rtl\-postreload\fR" 4
5763 .IX Item "-fdump-rtl-postreload"
5764 Dump after post-reload optimizations.
5765 .IP "\fB\-fdump\-rtl\-pro_and_epilogue\fR" 4
5766 .IX Item "-fdump-rtl-pro_and_epilogue"
5767 Dump after generating the function prologues and epilogues.
5768 .IP "\fB\-fdump\-rtl\-sched1\fR" 4
5769 .IX Item "-fdump-rtl-sched1"
5770 .PD 0
5771 .IP "\fB\-fdump\-rtl\-sched2\fR" 4
5772 .IX Item "-fdump-rtl-sched2"
5773 .PD
5774 \&\fB\-fdump\-rtl\-sched1\fR and \fB\-fdump\-rtl\-sched2\fR enable dumping
5775 after the basic block scheduling passes.
5776 .IP "\fB\-fdump\-rtl\-ree\fR" 4
5777 .IX Item "-fdump-rtl-ree"
5778 Dump after sign/zero extension elimination.
5779 .IP "\fB\-fdump\-rtl\-seqabstr\fR" 4
5780 .IX Item "-fdump-rtl-seqabstr"
5781 Dump after common sequence discovery.
5782 .IP "\fB\-fdump\-rtl\-shorten\fR" 4
5783 .IX Item "-fdump-rtl-shorten"
5784 Dump after shortening branches.
5785 .IP "\fB\-fdump\-rtl\-sibling\fR" 4
5786 .IX Item "-fdump-rtl-sibling"
5787 Dump after sibling call optimizations.
5788 .IP "\fB\-fdump\-rtl\-split1\fR" 4
5789 .IX Item "-fdump-rtl-split1"
5790 .PD 0
5791 .IP "\fB\-fdump\-rtl\-split2\fR" 4
5792 .IX Item "-fdump-rtl-split2"
5793 .IP "\fB\-fdump\-rtl\-split3\fR" 4
5794 .IX Item "-fdump-rtl-split3"
5795 .IP "\fB\-fdump\-rtl\-split4\fR" 4
5796 .IX Item "-fdump-rtl-split4"
5797 .IP "\fB\-fdump\-rtl\-split5\fR" 4
5798 .IX Item "-fdump-rtl-split5"
5799 .PD
5800 These options enable dumping after five rounds of
5801 instruction splitting.
5802 .IP "\fB\-fdump\-rtl\-sms\fR" 4
5803 .IX Item "-fdump-rtl-sms"
5804 Dump after modulo scheduling.  This pass is only run on some
5805 architectures.
5806 .IP "\fB\-fdump\-rtl\-stack\fR" 4
5807 .IX Item "-fdump-rtl-stack"
5808 Dump after conversion from \s-1GCC\s0's \*(L"flat register file\*(R" registers to the
5809 x87's stack-like registers.  This pass is only run on x86 variants.
5810 .IP "\fB\-fdump\-rtl\-subreg1\fR" 4
5811 .IX Item "-fdump-rtl-subreg1"
5812 .PD 0
5813 .IP "\fB\-fdump\-rtl\-subreg2\fR" 4
5814 .IX Item "-fdump-rtl-subreg2"
5815 .PD
5816 \&\fB\-fdump\-rtl\-subreg1\fR and \fB\-fdump\-rtl\-subreg2\fR enable dumping after
5817 the two subreg expansion passes.
5818 .IP "\fB\-fdump\-rtl\-unshare\fR" 4
5819 .IX Item "-fdump-rtl-unshare"
5820 Dump after all rtl has been unshared.
5821 .IP "\fB\-fdump\-rtl\-vartrack\fR" 4
5822 .IX Item "-fdump-rtl-vartrack"
5823 Dump after variable tracking.
5824 .IP "\fB\-fdump\-rtl\-vregs\fR" 4
5825 .IX Item "-fdump-rtl-vregs"
5826 Dump after converting virtual registers to hard registers.
5827 .IP "\fB\-fdump\-rtl\-web\fR" 4
5828 .IX Item "-fdump-rtl-web"
5829 Dump after live range splitting.
5830 .IP "\fB\-fdump\-rtl\-regclass\fR" 4
5831 .IX Item "-fdump-rtl-regclass"
5832 .PD 0
5833 .IP "\fB\-fdump\-rtl\-subregs_of_mode_init\fR" 4
5834 .IX Item "-fdump-rtl-subregs_of_mode_init"
5835 .IP "\fB\-fdump\-rtl\-subregs_of_mode_finish\fR" 4
5836 .IX Item "-fdump-rtl-subregs_of_mode_finish"
5837 .IP "\fB\-fdump\-rtl\-dfinit\fR" 4
5838 .IX Item "-fdump-rtl-dfinit"
5839 .IP "\fB\-fdump\-rtl\-dfinish\fR" 4
5840 .IX Item "-fdump-rtl-dfinish"
5841 .PD
5842 These dumps are defined but always produce empty files.
5843 .IP "\fB\-da\fR" 4
5844 .IX Item "-da"
5845 .PD 0
5846 .IP "\fB\-fdump\-rtl\-all\fR" 4
5847 .IX Item "-fdump-rtl-all"
5848 .PD
5849 Produce all the dumps listed above.
5850 .IP "\fB\-dA\fR" 4
5851 .IX Item "-dA"
5852 Annotate the assembler output with miscellaneous debugging information.
5853 .IP "\fB\-dD\fR" 4
5854 .IX Item "-dD"
5855 Dump all macro definitions, at the end of preprocessing, in addition to
5856 normal output.
5857 .IP "\fB\-dH\fR" 4
5858 .IX Item "-dH"
5859 Produce a core dump whenever an error occurs.
5860 .IP "\fB\-dp\fR" 4
5861 .IX Item "-dp"
5862 Annotate the assembler output with a comment indicating which
5863 pattern and alternative is used.  The length of each instruction is
5864 also printed.
5865 .IP "\fB\-dP\fR" 4
5866 .IX Item "-dP"
5867 Dump the \s-1RTL\s0 in the assembler output as a comment before each instruction.
5868 Also turns on \fB\-dp\fR annotation.
5869 .IP "\fB\-dx\fR" 4
5870 .IX Item "-dx"
5871 Just generate \s-1RTL\s0 for a function instead of compiling it.  Usually used
5872 with \fB\-fdump\-rtl\-expand\fR.
5873 .RE
5874 .RS 4
5875 .RE
5876 .IP "\fB\-fdump\-noaddr\fR" 4
5877 .IX Item "-fdump-noaddr"
5878 When doing debugging dumps, suppress address output.  This makes it more
5879 feasible to use diff on debugging dumps for compiler invocations with
5880 different compiler binaries and/or different
5881 text / bss / data / heap / stack / dso start locations.
5882 .IP "\fB\-freport\-bug\fR" 4
5883 .IX Item "-freport-bug"
5884 Collect and dump debug information into temporary file if \s-1ICE\s0 in C/\*(C+
5885 compiler occured.
5886 .IP "\fB\-fdump\-unnumbered\fR" 4
5887 .IX Item "-fdump-unnumbered"
5888 When doing debugging dumps, suppress instruction numbers and address output.
5889 This makes it more feasible to use diff on debugging dumps for compiler
5890 invocations with different options, in particular with and without
5891 \&\fB\-g\fR.
5892 .IP "\fB\-fdump\-unnumbered\-links\fR" 4
5893 .IX Item "-fdump-unnumbered-links"
5894 When doing debugging dumps (see \fB\-d\fR option above), suppress
5895 instruction numbers for the links to the previous and next instructions
5896 in a sequence.
5897 .IP "\fB\-fdump\-translation\-unit\fR (\*(C+ only)" 4
5898 .IX Item "-fdump-translation-unit ( only)"
5899 .PD 0
5900 .IP "\fB\-fdump\-translation\-unit\-\fR\fIoptions\fR\fB \fR(\*(C+ only)" 4
5901 .IX Item "-fdump-translation-unit-options ( only)"
5902 .PD
5903 Dump a representation of the tree structure for the entire translation
5904 unit to a file.  The file name is made by appending \fI.tu\fR to the
5905 source file name, and the file is created in the same directory as the
5906 output file.  If the \fB\-\fR\fIoptions\fR form is used, \fIoptions\fR
5907 controls the details of the dump as described for the
5908 \&\fB\-fdump\-tree\fR options.
5909 .IP "\fB\-fdump\-class\-hierarchy\fR (\*(C+ only)" 4
5910 .IX Item "-fdump-class-hierarchy ( only)"
5911 .PD 0
5912 .IP "\fB\-fdump\-class\-hierarchy\-\fR\fIoptions\fR\fB \fR(\*(C+ only)" 4
5913 .IX Item "-fdump-class-hierarchy-options ( only)"
5914 .PD
5915 Dump a representation of each class's hierarchy and virtual function
5916 table layout to a file.  The file name is made by appending
5917 \&\fI.class\fR to the source file name, and the file is created in the
5918 same directory as the output file.  If the \fB\-\fR\fIoptions\fR form
5919 is used, \fIoptions\fR controls the details of the dump as described
5920 for the \fB\-fdump\-tree\fR options.
5921 .IP "\fB\-fdump\-ipa\-\fR\fIswitch\fR" 4
5922 .IX Item "-fdump-ipa-switch"
5923 Control the dumping at various stages of inter-procedural analysis
5924 language tree to a file.  The file name is generated by appending a
5925 switch specific suffix to the source file name, and the file is created
5926 in the same directory as the output file.  The following dumps are
5927 possible:
5928 .RS 4
5929 .IP "\fBall\fR" 4
5930 .IX Item "all"
5931 Enables all inter-procedural analysis dumps.
5932 .IP "\fBcgraph\fR" 4
5933 .IX Item "cgraph"
5934 Dumps information about call-graph optimization, unused function removal,
5935 and inlining decisions.
5936 .IP "\fBinline\fR" 4
5937 .IX Item "inline"
5938 Dump after function inlining.
5939 .RE
5940 .RS 4
5941 .RE
5942 .IP "\fB\-fdump\-passes\fR" 4
5943 .IX Item "-fdump-passes"
5944 Dump the list of optimization passes that are turned on and off by
5945 the current command-line options.
5946 .IP "\fB\-fdump\-statistics\-\fR\fIoption\fR" 4
5947 .IX Item "-fdump-statistics-option"
5948 Enable and control dumping of pass statistics in a separate file.  The
5949 file name is generated by appending a suffix ending in
5950 \&\fB.statistics\fR to the source file name, and the file is created in
5951 the same directory as the output file.  If the \fB\-\fR\fIoption\fR
5952 form is used, \fB\-stats\fR causes counters to be summed over the
5953 whole compilation unit while \fB\-details\fR dumps every event as
5954 the passes generate them.  The default with no option is to sum
5955 counters for each function compiled.
5956 .IP "\fB\-fdump\-tree\-\fR\fIswitch\fR" 4
5957 .IX Item "-fdump-tree-switch"
5958 .PD 0
5959 .IP "\fB\-fdump\-tree\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR" 4
5960 .IX Item "-fdump-tree-switch-options"
5961 .IP "\fB\-fdump\-tree\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR\fB=\fR\fIfilename\fR" 4
5962 .IX Item "-fdump-tree-switch-options=filename"
5963 .PD
5964 Control the dumping at various stages of processing the intermediate
5965 language tree to a file.  The file name is generated by appending a
5966 switch-specific suffix to the source file name, and the file is
5967 created in the same directory as the output file. In case of
5968 \&\fB=\fR\fIfilename\fR option, the dump is output on the given file
5969 instead of the auto named dump files.  If the \fB\-\fR\fIoptions\fR
5970 form is used, \fIoptions\fR is a list of \fB\-\fR separated options
5971 which control the details of the dump.  Not all options are applicable
5972 to all dumps; those that are not meaningful are ignored.  The
5973 following options are available
5974 .RS 4
5975 .IP "\fBaddress\fR" 4
5976 .IX Item "address"
5977 Print the address of each node.  Usually this is not meaningful as it
5978 changes according to the environment and source file.  Its primary use
5979 is for tying up a dump file with a debug environment.
5980 .IP "\fBasmname\fR" 4
5981 .IX Item "asmname"
5982 If \f(CW\*(C`DECL_ASSEMBLER_NAME\*(C'\fR has been set for a given decl, use that
5983 in the dump instead of \f(CW\*(C`DECL_NAME\*(C'\fR.  Its primary use is ease of
5984 use working backward from mangled names in the assembly file.
5985 .IP "\fBslim\fR" 4
5986 .IX Item "slim"
5987 When dumping front-end intermediate representations, inhibit dumping
5988 of members of a scope or body of a function merely because that scope
5989 has been reached.  Only dump such items when they are directly reachable
5990 by some other path.
5991 .Sp
5992 When dumping pretty-printed trees, this option inhibits dumping the
5993 bodies of control structures.
5994 .Sp
5995 When dumping \s-1RTL\s0, print the \s-1RTL\s0 in slim (condensed) form instead of
5996 the default LISP-like representation.
5997 .IP "\fBraw\fR" 4
5998 .IX Item "raw"
5999 Print a raw representation of the tree.  By default, trees are
6000 pretty-printed into a C\-like representation.
6001 .IP "\fBdetails\fR" 4
6002 .IX Item "details"
6003 Enable more detailed dumps (not honored by every dump option). Also
6004 include information from the optimization passes.
6005 .IP "\fBstats\fR" 4
6006 .IX Item "stats"
6007 Enable dumping various statistics about the pass (not honored by every dump
6008 option).
6009 .IP "\fBblocks\fR" 4
6010 .IX Item "blocks"
6011 Enable showing basic block boundaries (disabled in raw dumps).
6012 .IP "\fBgraph\fR" 4
6013 .IX Item "graph"
6014 For each of the other indicated dump files (\fB\-fdump\-rtl\-\fR\fIpass\fR),
6015 dump a representation of the control flow graph suitable for viewing with
6016 GraphViz to \fI\fIfile\fI.\fIpassid\fI.\fIpass\fI.dot\fR.  Each function in
6017 the file is pretty-printed as a subgraph, so that GraphViz can render them
6018 all in a single plot.
6019 .Sp
6020 This option currently only works for \s-1RTL\s0 dumps, and the \s-1RTL\s0 is always
6021 dumped in slim form.
6022 .IP "\fBvops\fR" 4
6023 .IX Item "vops"
6024 Enable showing virtual operands for every statement.
6025 .IP "\fBlineno\fR" 4
6026 .IX Item "lineno"
6027 Enable showing line numbers for statements.
6028 .IP "\fBuid\fR" 4
6029 .IX Item "uid"
6030 Enable showing the unique \s-1ID\s0 (\f(CW\*(C`DECL_UID\*(C'\fR) for each variable.
6031 .IP "\fBverbose\fR" 4
6032 .IX Item "verbose"
6033 Enable showing the tree dump for each statement.
6034 .IP "\fBeh\fR" 4
6035 .IX Item "eh"
6036 Enable showing the \s-1EH\s0 region number holding each statement.
6037 .IP "\fBscev\fR" 4
6038 .IX Item "scev"
6039 Enable showing scalar evolution analysis details.
6040 .IP "\fBoptimized\fR" 4
6041 .IX Item "optimized"
6042 Enable showing optimization information (only available in certain
6043 passes).
6044 .IP "\fBmissed\fR" 4
6045 .IX Item "missed"
6046 Enable showing missed optimization information (only available in certain
6047 passes).
6048 .IP "\fBnote\fR" 4
6049 .IX Item "note"
6050 Enable other detailed optimization information (only available in
6051 certain passes).
6052 .IP "\fB=\fR\fIfilename\fR" 4
6053 .IX Item "=filename"
6054 Instead of an auto named dump file, output into the given file
6055 name. The file names \fIstdout\fR and \fIstderr\fR are treated
6056 specially and are considered already open standard streams. For
6057 example,
6058 .Sp
6059 .Vb 2
6060 \&        gcc \-O2 \-ftree\-vectorize \-fdump\-tree\-vect\-blocks=foo.dump
6061 \&             \-fdump\-tree\-pre=stderr file.c
6062 .Ve
6063 .Sp
6064 outputs vectorizer dump into \fIfoo.dump\fR, while the \s-1PRE\s0 dump is
6065 output on to \fIstderr\fR. If two conflicting dump filenames are
6066 given for the same pass, then the latter option overrides the earlier
6067 one.
6068 .IP "\fBall\fR" 4
6069 .IX Item "all"
6070 Turn on all options, except \fBraw\fR, \fBslim\fR, \fBverbose\fR
6071 and \fBlineno\fR.
6072 .IP "\fBoptall\fR" 4
6073 .IX Item "optall"
6074 Turn on all optimization options, i.e., \fBoptimized\fR,
6075 \&\fBmissed\fR, and \fBnote\fR.
6076 .RE
6077 .RS 4
6078 .Sp
6079 The following tree dumps are possible:
6080 .IP "\fBoriginal\fR" 4
6081 .IX Item "original"
6082 Dump before any tree based optimization, to \fI\fIfile\fI.original\fR.
6083 .IP "\fBoptimized\fR" 4
6084 .IX Item "optimized"
6085 Dump after all tree based optimization, to \fI\fIfile\fI.optimized\fR.
6086 .IP "\fBgimple\fR" 4
6087 .IX Item "gimple"
6088 Dump each function before and after the gimplification pass to a file.  The
6089 file name is made by appending \fI.gimple\fR to the source file name.
6090 .IP "\fBcfg\fR" 4
6091 .IX Item "cfg"
6092 Dump the control flow graph of each function to a file.  The file name is
6093 made by appending \fI.cfg\fR to the source file name.
6094 .IP "\fBch\fR" 4
6095 .IX Item "ch"
6096 Dump each function after copying loop headers.  The file name is made by
6097 appending \fI.ch\fR to the source file name.
6098 .IP "\fBssa\fR" 4
6099 .IX Item "ssa"
6100 Dump \s-1SSA\s0 related information to a file.  The file name is made by appending
6101 \&\fI.ssa\fR to the source file name.
6102 .IP "\fBalias\fR" 4
6103 .IX Item "alias"
6104 Dump aliasing information for each function.  The file name is made by
6105 appending \fI.alias\fR to the source file name.
6106 .IP "\fBccp\fR" 4
6107 .IX Item "ccp"
6108 Dump each function after \s-1CCP\s0.  The file name is made by appending
6109 \&\fI.ccp\fR to the source file name.
6110 .IP "\fBstoreccp\fR" 4
6111 .IX Item "storeccp"
6112 Dump each function after STORE-CCP.  The file name is made by appending
6113 \&\fI.storeccp\fR to the source file name.
6114 .IP "\fBpre\fR" 4
6115 .IX Item "pre"
6116 Dump trees after partial redundancy elimination.  The file name is made
6117 by appending \fI.pre\fR to the source file name.
6118 .IP "\fBfre\fR" 4
6119 .IX Item "fre"
6120 Dump trees after full redundancy elimination.  The file name is made
6121 by appending \fI.fre\fR to the source file name.
6122 .IP "\fBcopyprop\fR" 4
6123 .IX Item "copyprop"
6124 Dump trees after copy propagation.  The file name is made
6125 by appending \fI.copyprop\fR to the source file name.
6126 .IP "\fBstore_copyprop\fR" 4
6127 .IX Item "store_copyprop"
6128 Dump trees after store copy-propagation.  The file name is made
6129 by appending \fI.store_copyprop\fR to the source file name.
6130 .IP "\fBdce\fR" 4
6131 .IX Item "dce"
6132 Dump each function after dead code elimination.  The file name is made by
6133 appending \fI.dce\fR to the source file name.
6134 .IP "\fBsra\fR" 4
6135 .IX Item "sra"
6136 Dump each function after performing scalar replacement of aggregates.  The
6137 file name is made by appending \fI.sra\fR to the source file name.
6138 .IP "\fBsink\fR" 4
6139 .IX Item "sink"
6140 Dump each function after performing code sinking.  The file name is made
6141 by appending \fI.sink\fR to the source file name.
6142 .IP "\fBdom\fR" 4
6143 .IX Item "dom"
6144 Dump each function after applying dominator tree optimizations.  The file
6145 name is made by appending \fI.dom\fR to the source file name.
6146 .IP "\fBdse\fR" 4
6147 .IX Item "dse"
6148 Dump each function after applying dead store elimination.  The file
6149 name is made by appending \fI.dse\fR to the source file name.
6150 .IP "\fBphiopt\fR" 4
6151 .IX Item "phiopt"
6152 Dump each function after optimizing \s-1PHI\s0 nodes into straightline code.  The file
6153 name is made by appending \fI.phiopt\fR to the source file name.
6154 .IP "\fBforwprop\fR" 4
6155 .IX Item "forwprop"
6156 Dump each function after forward propagating single use variables.  The file
6157 name is made by appending \fI.forwprop\fR to the source file name.
6158 .IP "\fBcopyrename\fR" 4
6159 .IX Item "copyrename"
6160 Dump each function after applying the copy rename optimization.  The file
6161 name is made by appending \fI.copyrename\fR to the source file name.
6162 .IP "\fBnrv\fR" 4
6163 .IX Item "nrv"
6164 Dump each function after applying the named return value optimization on
6165 generic trees.  The file name is made by appending \fI.nrv\fR to the source
6166 file name.
6167 .IP "\fBvect\fR" 4
6168 .IX Item "vect"
6169 Dump each function after applying vectorization of loops.  The file name is
6170 made by appending \fI.vect\fR to the source file name.
6171 .IP "\fBslp\fR" 4
6172 .IX Item "slp"
6173 Dump each function after applying vectorization of basic blocks.  The file name
6174 is made by appending \fI.slp\fR to the source file name.
6175 .IP "\fBvrp\fR" 4
6176 .IX Item "vrp"
6177 Dump each function after Value Range Propagation (\s-1VRP\s0).  The file name
6178 is made by appending \fI.vrp\fR to the source file name.
6179 .IP "\fBall\fR" 4
6180 .IX Item "all"
6181 Enable all the available tree dumps with the flags provided in this option.
6182 .RE
6183 .RS 4
6184 .RE
6185 .IP "\fB\-fopt\-info\fR" 4
6186 .IX Item "-fopt-info"
6187 .PD 0
6188 .IP "\fB\-fopt\-info\-\fR\fIoptions\fR" 4
6189 .IX Item "-fopt-info-options"
6190 .IP "\fB\-fopt\-info\-\fR\fIoptions\fR\fB=\fR\fIfilename\fR" 4
6191 .IX Item "-fopt-info-options=filename"
6192 .PD
6193 Controls optimization dumps from various optimization passes. If the
6194 \&\fB\-\fR\fIoptions\fR form is used, \fIoptions\fR is a list of
6195 \&\fB\-\fR separated option keywords to select the dump details and
6196 optimizations.
6197 .Sp
6198 The \fIoptions\fR can be divided into two groups: options describing the
6199 verbosity of the dump, and options describing which optimizations
6200 should be included. The options from both the groups can be freely
6201 mixed as they are non-overlapping. However, in case of any conflicts,
6202 the later options override the earlier options on the command
6203 line.
6204 .Sp
6205 The following options control the dump verbosity:
6206 .RS 4
6207 .IP "\fBoptimized\fR" 4
6208 .IX Item "optimized"
6209 Print information when an optimization is successfully applied. It is
6210 up to a pass to decide which information is relevant. For example, the
6211 vectorizer passes print the source location of loops which are
6212 successfully vectorized.
6213 .IP "\fBmissed\fR" 4
6214 .IX Item "missed"
6215 Print information about missed optimizations. Individual passes
6216 control which information to include in the output.
6217 .IP "\fBnote\fR" 4
6218 .IX Item "note"
6219 Print verbose information about optimizations, such as certain
6220 transformations, more detailed messages about decisions etc.
6221 .IP "\fBall\fR" 4
6222 .IX Item "all"
6223 Print detailed optimization information. This includes
6224 \&\fBoptimized\fR, \fBmissed\fR, and \fBnote\fR.
6225 .RE
6226 .RS 4
6227 .Sp
6228 One or more of the following option keywords can be used to describe a
6229 group of optimizations:
6230 .IP "\fBipa\fR" 4
6231 .IX Item "ipa"
6232 Enable dumps from all interprocedural optimizations.
6233 .IP "\fBloop\fR" 4
6234 .IX Item "loop"
6235 Enable dumps from all loop optimizations.
6236 .IP "\fBinline\fR" 4
6237 .IX Item "inline"
6238 Enable dumps from all inlining optimizations.
6239 .IP "\fBvec\fR" 4
6240 .IX Item "vec"
6241 Enable dumps from all vectorization optimizations.
6242 .IP "\fBoptall\fR" 4
6243 .IX Item "optall"
6244 Enable dumps from all optimizations. This is a superset of
6245 the optimization groups listed above.
6246 .RE
6247 .RS 4
6248 .Sp
6249 If \fIoptions\fR is
6250 omitted, it defaults to \fBoptimized-optall\fR, which means to dump all
6251 info about successful optimizations from all the passes.
6252 .Sp
6253 If the \fIfilename\fR is provided, then the dumps from all the
6254 applicable optimizations are concatenated into the \fIfilename\fR.
6255 Otherwise the dump is output onto \fIstderr\fR. Though multiple
6256 \&\fB\-fopt\-info\fR options are accepted, only one of them can include
6257 a \fIfilename\fR. If other filenames are provided then all but the
6258 first such option are ignored.
6259 .Sp
6260 Note that the output \fIfilename\fR is overwritten
6261 in case of multiple translation units. If a combined output from
6262 multiple translation units is desired, \fIstderr\fR should be used
6263 instead.
6264 .Sp
6265 In the following example, the optimization info is output to
6266 \&\fIstderr\fR:
6267 .Sp
6268 .Vb 1
6269 \&        gcc \-O3 \-fopt\-info
6270 .Ve
6271 .Sp
6272 This example:
6273 .Sp
6274 .Vb 1
6275 \&        gcc \-O3 \-fopt\-info\-missed=missed.all
6276 .Ve
6277 .Sp
6278 outputs missed optimization report from all the passes into
6279 \&\fImissed.all\fR, and this one:
6280 .Sp
6281 .Vb 1
6282 \&        gcc \-O2 \-ftree\-vectorize \-fopt\-info\-vec\-missed
6283 .Ve
6284 .Sp
6285 prints information about missed optimization opportunities from
6286 vectorization passes on \fIstderr\fR.  
6287 Note that \fB\-fopt\-info\-vec\-missed\fR is equivalent to 
6288 \&\fB\-fopt\-info\-missed\-vec\fR.
6289 .Sp
6290 As another example,
6291 .Sp
6292 .Vb 1
6293 \&        gcc \-O3 \-fopt\-info\-inline\-optimized\-missed=inline.txt
6294 .Ve
6295 .Sp
6296 outputs information about missed optimizations as well as
6297 optimized locations from all the inlining passes into
6298 \&\fIinline.txt\fR.
6299 .Sp
6300 Finally, consider:
6301 .Sp
6302 .Vb 1
6303 \&        gcc \-fopt\-info\-vec\-missed=vec.miss \-fopt\-info\-loop\-optimized=loop.opt
6304 .Ve
6305 .Sp
6306 Here the two output filenames \fIvec.miss\fR and \fIloop.opt\fR are
6307 in conflict since only one output file is allowed. In this case, only
6308 the first option takes effect and the subsequent options are
6309 ignored. Thus only \fIvec.miss\fR is produced which contains
6310 dumps from the vectorizer about missed opportunities.
6311 .RE
6312 .IP "\fB\-frandom\-seed=\fR\fInumber\fR" 4
6313 .IX Item "-frandom-seed=number"
6314 This option provides a seed that \s-1GCC\s0 uses in place of
6315 random numbers in generating certain symbol names
6316 that have to be different in every compiled file.  It is also used to
6317 place unique stamps in coverage data files and the object files that
6318 produce them.  You can use the \fB\-frandom\-seed\fR option to produce
6319 reproducibly identical object files.
6320 .Sp
6321 The \fInumber\fR should be different for every file you compile.
6322 .IP "\fB\-fsched\-verbose=\fR\fIn\fR" 4
6323 .IX Item "-fsched-verbose=n"
6324 On targets that use instruction scheduling, this option controls the
6325 amount of debugging output the scheduler prints.  This information is
6326 written to standard error, unless \fB\-fdump\-rtl\-sched1\fR or
6327 \&\fB\-fdump\-rtl\-sched2\fR is specified, in which case it is output
6328 to the usual dump listing file, \fI.sched1\fR or \fI.sched2\fR
6329 respectively.  However for \fIn\fR greater than nine, the output is
6330 always printed to standard error.
6331 .Sp
6332 For \fIn\fR greater than zero, \fB\-fsched\-verbose\fR outputs the
6333 same information as \fB\-fdump\-rtl\-sched1\fR and \fB\-fdump\-rtl\-sched2\fR.
6334 For \fIn\fR greater than one, it also output basic block probabilities,
6335 detailed ready list information and unit/insn info.  For \fIn\fR greater
6336 than two, it includes \s-1RTL\s0 at abort point, control-flow and regions info.
6337 And for \fIn\fR over four, \fB\-fsched\-verbose\fR also includes
6338 dependence info.
6339 .IP "\fB\-save\-temps\fR" 4
6340 .IX Item "-save-temps"
6341 .PD 0
6342 .IP "\fB\-save\-temps=cwd\fR" 4
6343 .IX Item "-save-temps=cwd"
6344 .PD
6345 Store the usual \*(L"temporary\*(R" intermediate files permanently; place them
6346 in the current directory and name them based on the source file.  Thus,
6347 compiling \fIfoo.c\fR with \fB\-c \-save\-temps\fR produces files
6348 \&\fIfoo.i\fR and \fIfoo.s\fR, as well as \fIfoo.o\fR.  This creates a
6349 preprocessed \fIfoo.i\fR output file even though the compiler now
6350 normally uses an integrated preprocessor.
6351 .Sp
6352 When used in combination with the \fB\-x\fR command-line option,
6353 \&\fB\-save\-temps\fR is sensible enough to avoid over writing an
6354 input source file with the same extension as an intermediate file.
6355 The corresponding intermediate file may be obtained by renaming the
6356 source file before using \fB\-save\-temps\fR.
6357 .Sp
6358 If you invoke \s-1GCC\s0 in parallel, compiling several different source
6359 files that share a common base name in different subdirectories or the
6360 same source file compiled for multiple output destinations, it is
6361 likely that the different parallel compilers will interfere with each
6362 other, and overwrite the temporary files.  For instance:
6363 .Sp
6364 .Vb 2
6365 \&        gcc \-save\-temps \-o outdir1/foo.o indir1/foo.c&
6366 \&        gcc \-save\-temps \-o outdir2/foo.o indir2/foo.c&
6367 .Ve
6368 .Sp
6369 may result in \fIfoo.i\fR and \fIfoo.o\fR being written to
6370 simultaneously by both compilers.
6371 .IP "\fB\-save\-temps=obj\fR" 4
6372 .IX Item "-save-temps=obj"
6373 Store the usual \*(L"temporary\*(R" intermediate files permanently.  If the
6374 \&\fB\-o\fR option is used, the temporary files are based on the
6375 object file.  If the \fB\-o\fR option is not used, the
6376 \&\fB\-save\-temps=obj\fR switch behaves like \fB\-save\-temps\fR.
6377 .Sp
6378 For example:
6379 .Sp
6380 .Vb 3
6381 \&        gcc \-save\-temps=obj \-c foo.c
6382 \&        gcc \-save\-temps=obj \-c bar.c \-o dir/xbar.o
6383 \&        gcc \-save\-temps=obj foobar.c \-o dir2/yfoobar
6384 .Ve
6385 .Sp
6386 creates \fIfoo.i\fR, \fIfoo.s\fR, \fIdir/xbar.i\fR,
6387 \&\fIdir/xbar.s\fR, \fIdir2/yfoobar.i\fR, \fIdir2/yfoobar.s\fR, and
6388 \&\fIdir2/yfoobar.o\fR.
6389 .IP "\fB\-time\fR[\fB=\fR\fIfile\fR]" 4
6390 .IX Item "-time[=file]"
6391 Report the \s-1CPU\s0 time taken by each subprocess in the compilation
6392 sequence.  For C source files, this is the compiler proper and assembler
6393 (plus the linker if linking is done).
6394 .Sp
6395 Without the specification of an output file, the output looks like this:
6396 .Sp
6397 .Vb 2
6398 \&        # cc1 0.12 0.01
6399 \&        # as 0.00 0.01
6400 .Ve
6401 .Sp
6402 The first number on each line is the \*(L"user time\*(R", that is time spent
6403 executing the program itself.  The second number is \*(L"system time\*(R",
6404 time spent executing operating system routines on behalf of the program.
6405 Both numbers are in seconds.
6406 .Sp
6407 With the specification of an output file, the output is appended to the
6408 named file, and it looks like this:
6409 .Sp
6410 .Vb 2
6411 \&        0.12 0.01 cc1 <options>
6412 \&        0.00 0.01 as <options>
6413 .Ve
6414 .Sp
6415 The \*(L"user time\*(R" and the \*(L"system time\*(R" are moved before the program
6416 name, and the options passed to the program are displayed, so that one
6417 can later tell what file was being compiled, and with which options.
6418 .IP "\fB\-fvar\-tracking\fR" 4
6419 .IX Item "-fvar-tracking"
6420 Run variable tracking pass.  It computes where variables are stored at each
6421 position in code.  Better debugging information is then generated
6422 (if the debugging information format supports this information).
6423 .Sp
6424 It is enabled by default when compiling with optimization (\fB\-Os\fR,
6425 \&\fB\-O\fR, \fB\-O2\fR, ...), debugging information (\fB\-g\fR) and
6426 the debug info format supports it.
6427 .IP "\fB\-fvar\-tracking\-assignments\fR" 4
6428 .IX Item "-fvar-tracking-assignments"
6429 Annotate assignments to user variables early in the compilation and
6430 attempt to carry the annotations over throughout the compilation all the
6431 way to the end, in an attempt to improve debug information while
6432 optimizing.  Use of \fB\-gdwarf\-4\fR is recommended along with it.
6433 .Sp
6434 It can be enabled even if var-tracking is disabled, in which case
6435 annotations are created and maintained, but discarded at the end.
6436 .IP "\fB\-fvar\-tracking\-assignments\-toggle\fR" 4
6437 .IX Item "-fvar-tracking-assignments-toggle"
6438 Toggle \fB\-fvar\-tracking\-assignments\fR, in the same way that
6439 \&\fB\-gtoggle\fR toggles \fB\-g\fR.
6440 .IP "\fB\-print\-file\-name=\fR\fIlibrary\fR" 4
6441 .IX Item "-print-file-name=library"
6442 Print the full absolute name of the library file \fIlibrary\fR that
6443 would be used when linking\-\-\-and don't do anything else.  With this
6444 option, \s-1GCC\s0 does not compile or link anything; it just prints the
6445 file name.
6446 .IP "\fB\-print\-multi\-directory\fR" 4
6447 .IX Item "-print-multi-directory"
6448 Print the directory name corresponding to the multilib selected by any
6449 other switches present in the command line.  This directory is supposed
6450 to exist in \fB\s-1GCC_EXEC_PREFIX\s0\fR.
6451 .IP "\fB\-print\-multi\-lib\fR" 4
6452 .IX Item "-print-multi-lib"
6453 Print the mapping from multilib directory names to compiler switches
6454 that enable them.  The directory name is separated from the switches by
6455 \&\fB;\fR, and each switch starts with an \fB@\fR instead of the
6456 \&\fB\-\fR, without spaces between multiple switches.  This is supposed to
6457 ease shell processing.
6458 .IP "\fB\-print\-multi\-os\-directory\fR" 4
6459 .IX Item "-print-multi-os-directory"
6460 Print the path to \s-1OS\s0 libraries for the selected
6461 multilib, relative to some \fIlib\fR subdirectory.  If \s-1OS\s0 libraries are
6462 present in the \fIlib\fR subdirectory and no multilibs are used, this is
6463 usually just \fI.\fR, if \s-1OS\s0 libraries are present in \fIlib\fIsuffix\fI\fR
6464 sibling directories this prints e.g. \fI../lib64\fR, \fI../lib\fR or
6465 \&\fI../lib32\fR, or if \s-1OS\s0 libraries are present in \fIlib/\fIsubdir\fI\fR
6466 subdirectories it prints e.g. \fIamd64\fR, \fIsparcv9\fR or \fIev6\fR.
6467 .IP "\fB\-print\-multiarch\fR" 4
6468 .IX Item "-print-multiarch"
6469 Print the path to \s-1OS\s0 libraries for the selected multiarch,
6470 relative to some \fIlib\fR subdirectory.
6471 .IP "\fB\-print\-prog\-name=\fR\fIprogram\fR" 4
6472 .IX Item "-print-prog-name=program"
6473 Like \fB\-print\-file\-name\fR, but searches for a program such as \fBcpp\fR.
6474 .IP "\fB\-print\-libgcc\-file\-name\fR" 4
6475 .IX Item "-print-libgcc-file-name"
6476 Same as \fB\-print\-file\-name=libgcc.a\fR.
6477 .Sp
6478 This is useful when you use \fB\-nostdlib\fR or \fB\-nodefaultlibs\fR
6479 but you do want to link with \fIlibgcc.a\fR.  You can do:
6480 .Sp
6481 .Vb 1
6482 \&        gcc \-nostdlib <files>... \`gcc \-print\-libgcc\-file\-name\`
6483 .Ve
6484 .IP "\fB\-print\-search\-dirs\fR" 4
6485 .IX Item "-print-search-dirs"
6486 Print the name of the configured installation directory and a list of
6487 program and library directories \fBgcc\fR searches\-\-\-and don't do anything else.
6488 .Sp
6489 This is useful when \fBgcc\fR prints the error message
6490 \&\fBinstallation problem, cannot exec cpp0: No such file or directory\fR.
6491 To resolve this you either need to put \fIcpp0\fR and the other compiler
6492 components where \fBgcc\fR expects to find them, or you can set the environment
6493 variable \fB\s-1GCC_EXEC_PREFIX\s0\fR to the directory where you installed them.
6494 Don't forget the trailing \fB/\fR.
6495 .IP "\fB\-print\-sysroot\fR" 4
6496 .IX Item "-print-sysroot"
6497 Print the target sysroot directory that is used during
6498 compilation.  This is the target sysroot specified either at configure
6499 time or using the \fB\-\-sysroot\fR option, possibly with an extra
6500 suffix that depends on compilation options.  If no target sysroot is
6501 specified, the option prints nothing.
6502 .IP "\fB\-print\-sysroot\-headers\-suffix\fR" 4
6503 .IX Item "-print-sysroot-headers-suffix"
6504 Print the suffix added to the target sysroot when searching for
6505 headers, or give an error if the compiler is not configured with such
6506 a suffix\-\-\-and don't do anything else.
6507 .IP "\fB\-dumpmachine\fR" 4
6508 .IX Item "-dumpmachine"
6509 Print the compiler's target machine (for example,
6510 \&\fBi686\-pc\-linux\-gnu\fR)\-\-\-and don't do anything else.
6511 .IP "\fB\-dumpversion\fR" 4
6512 .IX Item "-dumpversion"
6513 Print the compiler version (for example, \f(CW3.0\fR)\-\-\-and don't do
6514 anything else.
6515 .IP "\fB\-dumpspecs\fR" 4
6516 .IX Item "-dumpspecs"
6517 Print the compiler's built-in specs\-\-\-and don't do anything else.  (This
6518 is used when \s-1GCC\s0 itself is being built.)
6519 .IP "\fB\-fno\-eliminate\-unused\-debug\-types\fR" 4
6520 .IX Item "-fno-eliminate-unused-debug-types"
6521 Normally, when producing \s-1DWARF\s0 2 output, \s-1GCC\s0 avoids producing debug symbol 
6522 output for types that are nowhere used in the source file being compiled.
6523 Sometimes it is useful to have \s-1GCC\s0 emit debugging
6524 information for all types declared in a compilation
6525 unit, regardless of whether or not they are actually used
6526 in that compilation unit, for example 
6527 if, in the debugger, you want to cast a value to a type that is
6528 not actually used in your program (but is declared).  More often,
6529 however, this results in a significant amount of wasted space.
6530 .SS "Options That Control Optimization"
6531 .IX Subsection "Options That Control Optimization"
6532 These options control various sorts of optimizations.
6533 .PP
6534 Without any optimization option, the compiler's goal is to reduce the
6535 cost of compilation and to make debugging produce the expected
6536 results.  Statements are independent: if you stop the program with a
6537 breakpoint between statements, you can then assign a new value to any
6538 variable or change the program counter to any other statement in the
6539 function and get exactly the results you expect from the source
6540 code.
6541 .PP
6542 Turning on optimization flags makes the compiler attempt to improve
6543 the performance and/or code size at the expense of compilation time
6544 and possibly the ability to debug the program.
6545 .PP
6546 The compiler performs optimization based on the knowledge it has of the
6547 program.  Compiling multiple files at once to a single output file mode allows
6548 the compiler to use information gained from all of the files when compiling
6549 each of them.
6550 .PP
6551 Not all optimizations are controlled directly by a flag.  Only
6552 optimizations that have a flag are listed in this section.
6553 .PP
6554 Most optimizations are only enabled if an \fB\-O\fR level is set on
6555 the command line.  Otherwise they are disabled, even if individual
6556 optimization flags are specified.
6557 .PP
6558 Depending on the target and how \s-1GCC\s0 was configured, a slightly different
6559 set of optimizations may be enabled at each \fB\-O\fR level than
6560 those listed here.  You can invoke \s-1GCC\s0 with \fB\-Q \-\-help=optimizers\fR
6561 to find out the exact set of optimizations that are enabled at each level.
6562 .IP "\fB\-O\fR" 4
6563 .IX Item "-O"
6564 .PD 0
6565 .IP "\fB\-O1\fR" 4
6566 .IX Item "-O1"
6567 .PD
6568 Optimize.  Optimizing compilation takes somewhat more time, and a lot
6569 more memory for a large function.
6570 .Sp
6571 With \fB\-O\fR, the compiler tries to reduce code size and execution
6572 time, without performing any optimizations that take a great deal of
6573 compilation time.
6574 .Sp
6575 \&\fB\-O\fR turns on the following optimization flags:
6576 .Sp
6577 \&\fB\-fauto\-inc\-dec 
6578 \&\-fbranch\-count\-reg 
6579 \&\-fcombine\-stack\-adjustments 
6580 \&\-fcompare\-elim 
6581 \&\-fcprop\-registers 
6582 \&\-fdce 
6583 \&\-fdefer\-pop 
6584 \&\-fdelayed\-branch 
6585 \&\-fdse 
6586 \&\-fforward\-propagate 
6587 \&\-fguess\-branch\-probability 
6588 \&\-fif\-conversion2 
6589 \&\-fif\-conversion 
6590 \&\-finline\-functions\-called\-once 
6591 \&\-fipa\-pure\-const 
6592 \&\-fipa\-profile 
6593 \&\-fipa\-reference 
6594 \&\-fmerge\-constants 
6595 \&\-fmove\-loop\-invariants 
6596 \&\-fshrink\-wrap 
6597 \&\-fsplit\-wide\-types 
6598 \&\-ftree\-bit\-ccp 
6599 \&\-ftree\-ccp 
6600 \&\-fssa\-phiopt 
6601 \&\-ftree\-ch 
6602 \&\-ftree\-copy\-prop 
6603 \&\-ftree\-copyrename 
6604 \&\-ftree\-dce 
6605 \&\-ftree\-dominator\-opts 
6606 \&\-ftree\-dse 
6607 \&\-ftree\-forwprop 
6608 \&\-ftree\-fre 
6609 \&\-ftree\-phiprop 
6610 \&\-ftree\-sink 
6611 \&\-ftree\-slsr 
6612 \&\-ftree\-sra 
6613 \&\-ftree\-pta 
6614 \&\-ftree\-ter 
6615 \&\-funit\-at\-a\-time\fR
6616 .Sp
6617 \&\fB\-O\fR also turns on \fB\-fomit\-frame\-pointer\fR on machines
6618 where doing so does not interfere with debugging.
6619 .IP "\fB\-O2\fR" 4
6620 .IX Item "-O2"
6621 Optimize even more.  \s-1GCC\s0 performs nearly all supported optimizations
6622 that do not involve a space-speed tradeoff.
6623 As compared to \fB\-O\fR, this option increases both compilation time
6624 and the performance of the generated code.
6625 .Sp
6626 \&\fB\-O2\fR turns on all optimization flags specified by \fB\-O\fR.  It
6627 also turns on the following optimization flags:
6628 \&\fB\-fthread\-jumps 
6629 \&\-falign\-functions  \-falign\-jumps 
6630 \&\-falign\-loops  \-falign\-labels 
6631 \&\-fcaller\-saves 
6632 \&\-fcrossjumping 
6633 \&\-fcse\-follow\-jumps  \-fcse\-skip\-blocks 
6634 \&\-fdelete\-null\-pointer\-checks 
6635 \&\-fdevirtualize \-fdevirtualize\-speculatively 
6636 \&\-fexpensive\-optimizations 
6637 \&\-fgcse  \-fgcse\-lm  
6638 \&\-fhoist\-adjacent\-loads 
6639 \&\-finline\-small\-functions 
6640 \&\-findirect\-inlining 
6641 \&\-fipa\-cp 
6642 \&\-fipa\-sra 
6643 \&\-fipa\-icf 
6644 \&\-fisolate\-erroneous\-paths\-dereference 
6645 \&\-flra\-remat 
6646 \&\-foptimize\-sibling\-calls 
6647 \&\-foptimize\-strlen 
6648 \&\-fpartial\-inlining 
6649 \&\-fpeephole2 
6650 \&\-freorder\-blocks \-freorder\-blocks\-and\-partition \-freorder\-functions 
6651 \&\-frerun\-cse\-after\-loop  
6652 \&\-fsched\-interblock  \-fsched\-spec 
6653 \&\-fschedule\-insns  \-fschedule\-insns2 
6654 \&\-fstrict\-aliasing \-fstrict\-overflow 
6655 \&\-ftree\-builtin\-call\-dce 
6656 \&\-ftree\-switch\-conversion \-ftree\-tail\-merge 
6657 \&\-ftree\-pre 
6658 \&\-ftree\-vrp 
6659 \&\-fipa\-ra\fR
6660 .Sp
6661 Please note the warning under \fB\-fgcse\fR about
6662 invoking \fB\-O2\fR on programs that use computed gotos.
6663 .IP "\fB\-O3\fR" 4
6664 .IX Item "-O3"
6665 Optimize yet more.  \fB\-O3\fR turns on all optimizations specified
6666 by \fB\-O2\fR and also turns on the \fB\-finline\-functions\fR,
6667 \&\fB\-funswitch\-loops\fR, \fB\-fpredictive\-commoning\fR,
6668 \&\fB\-fgcse\-after\-reload\fR, \fB\-ftree\-loop\-vectorize\fR,
6669 \&\fB\-ftree\-loop\-distribute\-patterns\fR,
6670 \&\fB\-ftree\-slp\-vectorize\fR, \fB\-fvect\-cost\-model\fR,
6671 \&\fB\-ftree\-partial\-pre\fR and \fB\-fipa\-cp\-clone\fR options.
6672 .IP "\fB\-O0\fR" 4
6673 .IX Item "-O0"
6674 Reduce compilation time and make debugging produce the expected
6675 results.  This is the default.
6676 .IP "\fB\-Os\fR" 4
6677 .IX Item "-Os"
6678 Optimize for size.  \fB\-Os\fR enables all \fB\-O2\fR optimizations that
6679 do not typically increase code size.  It also performs further
6680 optimizations designed to reduce code size.
6681 .Sp
6682 \&\fB\-Os\fR disables the following optimization flags:
6683 \&\fB\-falign\-functions  \-falign\-jumps  \-falign\-loops 
6684 \&\-falign\-labels  \-freorder\-blocks  \-freorder\-blocks\-and\-partition 
6685 \&\-fprefetch\-loop\-arrays\fR
6686 .IP "\fB\-Ofast\fR" 4
6687 .IX Item "-Ofast"
6688 Disregard strict standards compliance.  \fB\-Ofast\fR enables all
6689 \&\fB\-O3\fR optimizations.  It also enables optimizations that are not
6690 valid for all standard-compliant programs.
6691 It turns on \fB\-ffast\-math\fR and the Fortran-specific
6692 \&\fB\-fno\-protect\-parens\fR and \fB\-fstack\-arrays\fR.
6693 .IP "\fB\-Og\fR" 4
6694 .IX Item "-Og"
6695 Optimize debugging experience.  \fB\-Og\fR enables optimizations
6696 that do not interfere with debugging. It should be the optimization
6697 level of choice for the standard edit-compile-debug cycle, offering
6698 a reasonable level of optimization while maintaining fast compilation
6699 and a good debugging experience.
6700 .Sp
6701 If you use multiple \fB\-O\fR options, with or without level numbers,
6702 the last such option is the one that is effective.
6703 .PP
6704 Options of the form \fB\-f\fR\fIflag\fR specify machine-independent
6705 flags.  Most flags have both positive and negative forms; the negative
6706 form of \fB\-ffoo\fR is \fB\-fno\-foo\fR.  In the table
6707 below, only one of the forms is listed\-\-\-the one you typically 
6708 use.  You can figure out the other form by either removing \fBno\-\fR
6709 or adding it.
6710 .PP
6711 The following options control specific optimizations.  They are either
6712 activated by \fB\-O\fR options or are related to ones that are.  You
6713 can use the following flags in the rare cases when \*(L"fine-tuning\*(R" of
6714 optimizations to be performed is desired.
6715 .IP "\fB\-fno\-defer\-pop\fR" 4
6716 .IX Item "-fno-defer-pop"
6717 Always pop the arguments to each function call as soon as that function
6718 returns.  For machines that must pop arguments after a function call,
6719 the compiler normally lets arguments accumulate on the stack for several
6720 function calls and pops them all at once.
6721 .Sp
6722 Disabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
6723 .IP "\fB\-fforward\-propagate\fR" 4
6724 .IX Item "-fforward-propagate"
6725 Perform a forward propagation pass on \s-1RTL\s0.  The pass tries to combine two
6726 instructions and checks if the result can be simplified.  If loop unrolling
6727 is active, two passes are performed and the second is scheduled after
6728 loop unrolling.
6729 .Sp
6730 This option is enabled by default at optimization levels \fB\-O\fR,
6731 \&\fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
6732 .IP "\fB\-ffp\-contract=\fR\fIstyle\fR" 4
6733 .IX Item "-ffp-contract=style"
6734 \&\fB\-ffp\-contract=off\fR disables floating-point expression contraction.
6735 \&\fB\-ffp\-contract=fast\fR enables floating-point expression contraction
6736 such as forming of fused multiply-add operations if the target has
6737 native support for them.
6738 \&\fB\-ffp\-contract=on\fR enables floating-point expression contraction
6739 if allowed by the language standard.  This is currently not implemented
6740 and treated equal to \fB\-ffp\-contract=off\fR.
6741 .Sp
6742 The default is \fB\-ffp\-contract=fast\fR.
6743 .IP "\fB\-fomit\-frame\-pointer\fR" 4
6744 .IX Item "-fomit-frame-pointer"
6745 Don't keep the frame pointer in a register for functions that
6746 don't need one.  This avoids the instructions to save, set up and
6747 restore frame pointers; it also makes an extra register available
6748 in many functions.  \fBIt also makes debugging impossible on
6749 some machines.\fR
6750 .Sp
6751 On some machines, such as the \s-1VAX\s0, this flag has no effect, because
6752 the standard calling sequence automatically handles the frame pointer
6753 and nothing is saved by pretending it doesn't exist.  The
6754 machine-description macro \f(CW\*(C`FRAME_POINTER_REQUIRED\*(C'\fR controls
6755 whether a target machine supports this flag.
6756 .Sp
6757 Starting with \s-1GCC\s0 version 4.6, the default setting (when not optimizing for
6758 size) for 32\-bit GNU/Linux x86 and 32\-bit Darwin x86 targets has been changed to
6759 \&\fB\-fomit\-frame\-pointer\fR.  The default can be reverted to
6760 \&\fB\-fno\-omit\-frame\-pointer\fR by configuring \s-1GCC\s0 with the
6761 \&\fB\-\-enable\-frame\-pointer\fR configure option.
6762 .Sp
6763 Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
6764 .IP "\fB\-foptimize\-sibling\-calls\fR" 4
6765 .IX Item "-foptimize-sibling-calls"
6766 Optimize sibling and tail recursive calls.
6767 .Sp
6768 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
6769 .IP "\fB\-foptimize\-strlen\fR" 4
6770 .IX Item "-foptimize-strlen"
6771 Optimize various standard C string functions (e.g. \f(CW\*(C`strlen\*(C'\fR,
6772 \&\f(CW\*(C`strchr\*(C'\fR or \f(CW\*(C`strcpy\*(C'\fR) and
6773 their \f(CW\*(C`_FORTIFY_SOURCE\*(C'\fR counterparts into faster alternatives.
6774 .Sp
6775 Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
6776 .IP "\fB\-fno\-inline\fR" 4
6777 .IX Item "-fno-inline"
6778 Do not expand any functions inline apart from those marked with
6779 the \f(CW\*(C`always_inline\*(C'\fR attribute.  This is the default when not
6780 optimizing.
6781 .Sp
6782 Single functions can be exempted from inlining by marking them
6783 with the \f(CW\*(C`noinline\*(C'\fR attribute.
6784 .IP "\fB\-finline\-small\-functions\fR" 4
6785 .IX Item "-finline-small-functions"
6786 Integrate functions into their callers when their body is smaller than expected
6787 function call code (so overall size of program gets smaller).  The compiler
6788 heuristically decides which functions are simple enough to be worth integrating
6789 in this way.  This inlining applies to all functions, even those not declared
6790 inline.
6791 .Sp
6792 Enabled at level \fB\-O2\fR.
6793 .IP "\fB\-findirect\-inlining\fR" 4
6794 .IX Item "-findirect-inlining"
6795 Inline also indirect calls that are discovered to be known at compile
6796 time thanks to previous inlining.  This option has any effect only
6797 when inlining itself is turned on by the \fB\-finline\-functions\fR
6798 or \fB\-finline\-small\-functions\fR options.
6799 .Sp
6800 Enabled at level \fB\-O2\fR.
6801 .IP "\fB\-finline\-functions\fR" 4
6802 .IX Item "-finline-functions"
6803 Consider all functions for inlining, even if they are not declared inline.
6804 The compiler heuristically decides which functions are worth integrating
6805 in this way.
6806 .Sp
6807 If all calls to a given function are integrated, and the function is
6808 declared \f(CW\*(C`static\*(C'\fR, then the function is normally not output as
6809 assembler code in its own right.
6810 .Sp
6811 Enabled at level \fB\-O3\fR.
6812 .IP "\fB\-finline\-functions\-called\-once\fR" 4
6813 .IX Item "-finline-functions-called-once"
6814 Consider all \f(CW\*(C`static\*(C'\fR functions called once for inlining into their
6815 caller even if they are not marked \f(CW\*(C`inline\*(C'\fR.  If a call to a given
6816 function is integrated, then the function is not output as assembler code
6817 in its own right.
6818 .Sp
6819 Enabled at levels \fB\-O1\fR, \fB\-O2\fR, \fB\-O3\fR and \fB\-Os\fR.
6820 .IP "\fB\-fearly\-inlining\fR" 4
6821 .IX Item "-fearly-inlining"
6822 Inline functions marked by \f(CW\*(C`always_inline\*(C'\fR and functions whose body seems
6823 smaller than the function call overhead early before doing
6824 \&\fB\-fprofile\-generate\fR instrumentation and real inlining pass.  Doing so
6825 makes profiling significantly cheaper and usually inlining faster on programs
6826 having large chains of nested wrapper functions.
6827 .Sp
6828 Enabled by default.
6829 .IP "\fB\-fipa\-sra\fR" 4
6830 .IX Item "-fipa-sra"
6831 Perform interprocedural scalar replacement of aggregates, removal of
6832 unused parameters and replacement of parameters passed by reference
6833 by parameters passed by value.
6834 .Sp
6835 Enabled at levels \fB\-O2\fR, \fB\-O3\fR and \fB\-Os\fR.
6836 .IP "\fB\-finline\-limit=\fR\fIn\fR" 4
6837 .IX Item "-finline-limit=n"
6838 By default, \s-1GCC\s0 limits the size of functions that can be inlined.  This flag
6839 allows coarse control of this limit.  \fIn\fR is the size of functions that
6840 can be inlined in number of pseudo instructions.
6841 .Sp
6842 Inlining is actually controlled by a number of parameters, which may be
6843 specified individually by using \fB\-\-param\fR \fIname\fR\fB=\fR\fIvalue\fR.
6844 The \fB\-finline\-limit=\fR\fIn\fR option sets some of these parameters
6845 as follows:
6846 .RS 4
6847 .IP "\fBmax-inline-insns-single\fR" 4
6848 .IX Item "max-inline-insns-single"
6849 is set to \fIn\fR/2.
6850 .IP "\fBmax-inline-insns-auto\fR" 4
6851 .IX Item "max-inline-insns-auto"
6852 is set to \fIn\fR/2.
6853 .RE
6854 .RS 4
6855 .Sp
6856 See below for a documentation of the individual
6857 parameters controlling inlining and for the defaults of these parameters.
6858 .Sp
6859 \&\fINote:\fR there may be no value to \fB\-finline\-limit\fR that results
6860 in default behavior.
6861 .Sp
6862 \&\fINote:\fR pseudo instruction represents, in this particular context, an
6863 abstract measurement of function's size.  In no way does it represent a count
6864 of assembly instructions and as such its exact meaning might change from one
6865 release to an another.
6866 .RE
6867 .IP "\fB\-fno\-keep\-inline\-dllexport\fR" 4
6868 .IX Item "-fno-keep-inline-dllexport"
6869 This is a more fine-grained version of \fB\-fkeep\-inline\-functions\fR,
6870 which applies only to functions that are declared using the \f(CW\*(C`dllexport\*(C'\fR
6871 attribute or declspec
6872 .IP "\fB\-fkeep\-inline\-functions\fR" 4
6873 .IX Item "-fkeep-inline-functions"
6874 In C, emit \f(CW\*(C`static\*(C'\fR functions that are declared \f(CW\*(C`inline\*(C'\fR
6875 into the object file, even if the function has been inlined into all
6876 of its callers.  This switch does not affect functions using the
6877 \&\f(CW\*(C`extern inline\*(C'\fR extension in \s-1GNU\s0 C90.  In \*(C+, emit any and all
6878 inline functions into the object file.
6879 .IP "\fB\-fkeep\-static\-consts\fR" 4
6880 .IX Item "-fkeep-static-consts"
6881 Emit variables declared \f(CW\*(C`static const\*(C'\fR when optimization isn't turned
6882 on, even if the variables aren't referenced.
6883 .Sp
6884 \&\s-1GCC\s0 enables this option by default.  If you want to force the compiler to
6885 check if a variable is referenced, regardless of whether or not
6886 optimization is turned on, use the \fB\-fno\-keep\-static\-consts\fR option.
6887 .IP "\fB\-fmerge\-constants\fR" 4
6888 .IX Item "-fmerge-constants"
6889 Attempt to merge identical constants (string constants and floating-point
6890 constants) across compilation units.
6891 .Sp
6892 This option is the default for optimized compilation if the assembler and
6893 linker support it.  Use \fB\-fno\-merge\-constants\fR to inhibit this
6894 behavior.
6895 .Sp
6896 Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
6897 .IP "\fB\-fmerge\-all\-constants\fR" 4
6898 .IX Item "-fmerge-all-constants"
6899 Attempt to merge identical constants and identical variables.
6900 .Sp
6901 This option implies \fB\-fmerge\-constants\fR.  In addition to
6902 \&\fB\-fmerge\-constants\fR this considers e.g. even constant initialized
6903 arrays or initialized constant variables with integral or floating-point
6904 types.  Languages like C or \*(C+ require each variable, including multiple
6905 instances of the same variable in recursive calls, to have distinct locations,
6906 so using this option results in non-conforming
6907 behavior.
6908 .IP "\fB\-fmodulo\-sched\fR" 4
6909 .IX Item "-fmodulo-sched"
6910 Perform swing modulo scheduling immediately before the first scheduling
6911 pass.  This pass looks at innermost loops and reorders their
6912 instructions by overlapping different iterations.
6913 .IP "\fB\-fmodulo\-sched\-allow\-regmoves\fR" 4
6914 .IX Item "-fmodulo-sched-allow-regmoves"
6915 Perform more aggressive SMS-based modulo scheduling with register moves
6916 allowed.  By setting this flag certain anti-dependences edges are
6917 deleted, which triggers the generation of reg-moves based on the
6918 life-range analysis.  This option is effective only with
6919 \&\fB\-fmodulo\-sched\fR enabled.
6920 .IP "\fB\-fno\-branch\-count\-reg\fR" 4
6921 .IX Item "-fno-branch-count-reg"
6922 Do not use \*(L"decrement and branch\*(R" instructions on a count register,
6923 but instead generate a sequence of instructions that decrement a
6924 register, compare it against zero, then branch based upon the result.
6925 This option is only meaningful on architectures that support such
6926 instructions, which include x86, PowerPC, \s-1IA\-64\s0 and S/390.
6927 .Sp
6928 Enabled by default at \fB\-O1\fR and higher.
6929 .Sp
6930 The default is \fB\-fbranch\-count\-reg\fR.
6931 .IP "\fB\-fno\-function\-cse\fR" 4
6932 .IX Item "-fno-function-cse"
6933 Do not put function addresses in registers; make each instruction that
6934 calls a constant function contain the function's address explicitly.
6935 .Sp
6936 This option results in less efficient code, but some strange hacks
6937 that alter the assembler output may be confused by the optimizations
6938 performed when this option is not used.
6939 .Sp
6940 The default is \fB\-ffunction\-cse\fR
6941 .IP "\fB\-fno\-zero\-initialized\-in\-bss\fR" 4
6942 .IX Item "-fno-zero-initialized-in-bss"
6943 If the target supports a \s-1BSS\s0 section, \s-1GCC\s0 by default puts variables that
6944 are initialized to zero into \s-1BSS\s0.  This can save space in the resulting
6945 code.
6946 .Sp
6947 This option turns off this behavior because some programs explicitly
6948 rely on variables going to the data section\-\-\-e.g., so that the
6949 resulting executable can find the beginning of that section and/or make
6950 assumptions based on that.
6951 .Sp
6952 The default is \fB\-fzero\-initialized\-in\-bss\fR.
6953 .IP "\fB\-fthread\-jumps\fR" 4
6954 .IX Item "-fthread-jumps"
6955 Perform optimizations that check to see if a jump branches to a
6956 location where another comparison subsumed by the first is found.  If
6957 so, the first branch is redirected to either the destination of the
6958 second branch or a point immediately following it, depending on whether
6959 the condition is known to be true or false.
6960 .Sp
6961 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
6962 .IP "\fB\-fsplit\-wide\-types\fR" 4
6963 .IX Item "-fsplit-wide-types"
6964 When using a type that occupies multiple registers, such as \f(CW\*(C`long
6965 long\*(C'\fR on a 32\-bit system, split the registers apart and allocate them
6966 independently.  This normally generates better code for those types,
6967 but may make debugging more difficult.
6968 .Sp
6969 Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR,
6970 \&\fB\-Os\fR.
6971 .IP "\fB\-fcse\-follow\-jumps\fR" 4
6972 .IX Item "-fcse-follow-jumps"
6973 In common subexpression elimination (\s-1CSE\s0), scan through jump instructions
6974 when the target of the jump is not reached by any other path.  For
6975 example, when \s-1CSE\s0 encounters an \f(CW\*(C`if\*(C'\fR statement with an
6976 \&\f(CW\*(C`else\*(C'\fR clause, \s-1CSE\s0 follows the jump when the condition
6977 tested is false.
6978 .Sp
6979 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
6980 .IP "\fB\-fcse\-skip\-blocks\fR" 4
6981 .IX Item "-fcse-skip-blocks"
6982 This is similar to \fB\-fcse\-follow\-jumps\fR, but causes \s-1CSE\s0 to
6983 follow jumps that conditionally skip over blocks.  When \s-1CSE\s0
6984 encounters a simple \f(CW\*(C`if\*(C'\fR statement with no else clause,
6985 \&\fB\-fcse\-skip\-blocks\fR causes \s-1CSE\s0 to follow the jump around the
6986 body of the \f(CW\*(C`if\*(C'\fR.
6987 .Sp
6988 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
6989 .IP "\fB\-frerun\-cse\-after\-loop\fR" 4
6990 .IX Item "-frerun-cse-after-loop"
6991 Re-run common subexpression elimination after loop optimizations are
6992 performed.
6993 .Sp
6994 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
6995 .IP "\fB\-fgcse\fR" 4
6996 .IX Item "-fgcse"
6997 Perform a global common subexpression elimination pass.
6998 This pass also performs global constant and copy propagation.
6999 .Sp
7000 \&\fINote:\fR When compiling a program using computed gotos, a \s-1GCC\s0
7001 extension, you may get better run-time performance if you disable
7002 the global common subexpression elimination pass by adding
7003 \&\fB\-fno\-gcse\fR to the command line.
7004 .Sp
7005 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
7006 .IP "\fB\-fgcse\-lm\fR" 4
7007 .IX Item "-fgcse-lm"
7008 When \fB\-fgcse\-lm\fR is enabled, global common subexpression elimination
7009 attempts to move loads that are only killed by stores into themselves.  This
7010 allows a loop containing a load/store sequence to be changed to a load outside
7011 the loop, and a copy/store within the loop.
7012 .Sp
7013 Enabled by default when \fB\-fgcse\fR is enabled.
7014 .IP "\fB\-fgcse\-sm\fR" 4
7015 .IX Item "-fgcse-sm"
7016 When \fB\-fgcse\-sm\fR is enabled, a store motion pass is run after
7017 global common subexpression elimination.  This pass attempts to move
7018 stores out of loops.  When used in conjunction with \fB\-fgcse\-lm\fR,
7019 loops containing a load/store sequence can be changed to a load before
7020 the loop and a store after the loop.
7021 .Sp
7022 Not enabled at any optimization level.
7023 .IP "\fB\-fgcse\-las\fR" 4
7024 .IX Item "-fgcse-las"
7025 When \fB\-fgcse\-las\fR is enabled, the global common subexpression
7026 elimination pass eliminates redundant loads that come after stores to the
7027 same memory location (both partial and full redundancies).
7028 .Sp
7029 Not enabled at any optimization level.
7030 .IP "\fB\-fgcse\-after\-reload\fR" 4
7031 .IX Item "-fgcse-after-reload"
7032 When \fB\-fgcse\-after\-reload\fR is enabled, a redundant load elimination
7033 pass is performed after reload.  The purpose of this pass is to clean up
7034 redundant spilling.
7035 .IP "\fB\-faggressive\-loop\-optimizations\fR" 4
7036 .IX Item "-faggressive-loop-optimizations"
7037 This option tells the loop optimizer to use language constraints to
7038 derive bounds for the number of iterations of a loop.  This assumes that
7039 loop code does not invoke undefined behavior by for example causing signed
7040 integer overflows or out-of-bound array accesses.  The bounds for the
7041 number of iterations of a loop are used to guide loop unrolling and peeling
7042 and loop exit test optimizations.
7043 This option is enabled by default.
7044 .IP "\fB\-funsafe\-loop\-optimizations\fR" 4
7045 .IX Item "-funsafe-loop-optimizations"
7046 This option tells the loop optimizer to assume that loop indices do not
7047 overflow, and that loops with nontrivial exit condition are not
7048 infinite.  This enables a wider range of loop optimizations even if
7049 the loop optimizer itself cannot prove that these assumptions are valid.
7050 If you use \fB\-Wunsafe\-loop\-optimizations\fR, the compiler warns you
7051 if it finds this kind of loop.
7052 .IP "\fB\-fcrossjumping\fR" 4
7053 .IX Item "-fcrossjumping"
7054 Perform cross-jumping transformation.
7055 This transformation unifies equivalent code and saves code size.  The
7056 resulting code may or may not perform better than without cross-jumping.
7057 .Sp
7058 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
7059 .IP "\fB\-fauto\-inc\-dec\fR" 4
7060 .IX Item "-fauto-inc-dec"
7061 Combine increments or decrements of addresses with memory accesses.
7062 This pass is always skipped on architectures that do not have
7063 instructions to support this.  Enabled by default at \fB\-O\fR and
7064 higher on architectures that support this.
7065 .IP "\fB\-fdce\fR" 4
7066 .IX Item "-fdce"
7067 Perform dead code elimination (\s-1DCE\s0) on \s-1RTL\s0.
7068 Enabled by default at \fB\-O\fR and higher.
7069 .IP "\fB\-fdse\fR" 4
7070 .IX Item "-fdse"
7071 Perform dead store elimination (\s-1DSE\s0) on \s-1RTL\s0.
7072 Enabled by default at \fB\-O\fR and higher.
7073 .IP "\fB\-fif\-conversion\fR" 4
7074 .IX Item "-fif-conversion"
7075 Attempt to transform conditional jumps into branch-less equivalents.  This
7076 includes use of conditional moves, min, max, set flags and abs instructions, and
7077 some tricks doable by standard arithmetics.  The use of conditional execution
7078 on chips where it is available is controlled by \fB\-fif\-conversion2\fR.
7079 .Sp
7080 Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
7081 .IP "\fB\-fif\-conversion2\fR" 4
7082 .IX Item "-fif-conversion2"
7083 Use conditional execution (where available) to transform conditional jumps into
7084 branch-less equivalents.
7085 .Sp
7086 Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
7087 .IP "\fB\-fdeclone\-ctor\-dtor\fR" 4
7088 .IX Item "-fdeclone-ctor-dtor"
7089 The \*(C+ \s-1ABI\s0 requires multiple entry points for constructors and
7090 destructors: one for a base subobject, one for a complete object, and
7091 one for a virtual destructor that calls operator delete afterwards.
7092 For a hierarchy with virtual bases, the base and complete variants are
7093 clones, which means two copies of the function.  With this option, the
7094 base and complete variants are changed to be thunks that call a common
7095 implementation.
7096 .Sp
7097 Enabled by \fB\-Os\fR.
7098 .IP "\fB\-fdelete\-null\-pointer\-checks\fR" 4
7099 .IX Item "-fdelete-null-pointer-checks"
7100 Assume that programs cannot safely dereference null pointers, and that
7101 no code or data element resides there.  This enables simple constant
7102 folding optimizations at all optimization levels.  In addition, other
7103 optimization passes in \s-1GCC\s0 use this flag to control global dataflow
7104 analyses that eliminate useless checks for null pointers; these assume
7105 that if a pointer is checked after it has already been dereferenced,
7106 it cannot be null.
7107 .Sp
7108 Note however that in some environments this assumption is not true.
7109 Use \fB\-fno\-delete\-null\-pointer\-checks\fR to disable this optimization
7110 for programs that depend on that behavior.
7111 .Sp
7112 Some targets, especially embedded ones, disable this option at all levels.
7113 Otherwise it is enabled at all levels: \fB\-O0\fR, \fB\-O1\fR,
7114 \&\fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.  Passes that use the information
7115 are enabled independently at different optimization levels.
7116 .IP "\fB\-fdevirtualize\fR" 4
7117 .IX Item "-fdevirtualize"
7118 Attempt to convert calls to virtual functions to direct calls.  This
7119 is done both within a procedure and interprocedurally as part of
7120 indirect inlining (\fB\-findirect\-inlining\fR) and interprocedural constant
7121 propagation (\fB\-fipa\-cp\fR).
7122 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
7123 .IP "\fB\-fdevirtualize\-speculatively\fR" 4
7124 .IX Item "-fdevirtualize-speculatively"
7125 Attempt to convert calls to virtual functions to speculative direct calls.
7126 Based on the analysis of the type inheritance graph, determine for a given call
7127 the set of likely targets. If the set is small, preferably of size 1, change
7128 the call into a conditional deciding between direct and indirect calls.  The
7129 speculative calls enable more optimizations, such as inlining.  When they seem
7130 useless after further optimization, they are converted back into original form.
7131 .IP "\fB\-fdevirtualize\-at\-ltrans\fR" 4
7132 .IX Item "-fdevirtualize-at-ltrans"
7133 Stream extra information needed for aggressive devirtualization when running
7134 the link-time optimizer in local transformation mode.  
7135 This option enables more devirtualization but
7136 significantly increases the size of streamed data. For this reason it is
7137 disabled by default.
7138 .IP "\fB\-fexpensive\-optimizations\fR" 4
7139 .IX Item "-fexpensive-optimizations"
7140 Perform a number of minor optimizations that are relatively expensive.
7141 .Sp
7142 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
7143 .IP "\fB\-free\fR" 4
7144 .IX Item "-free"
7145 Attempt to remove redundant extension instructions.  This is especially
7146 helpful for the x86\-64 architecture, which implicitly zero-extends in 64\-bit
7147 registers after writing to their lower 32\-bit half.
7148 .Sp
7149 Enabled for Alpha, AArch64 and x86 at levels \fB\-O2\fR,
7150 \&\fB\-O3\fR, \fB\-Os\fR.
7151 .IP "\fB\-flive\-range\-shrinkage\fR" 4
7152 .IX Item "-flive-range-shrinkage"
7153 Attempt to decrease register pressure through register live range
7154 shrinkage.  This is helpful for fast processors with small or moderate
7155 size register sets.
7156 .IP "\fB\-fira\-algorithm=\fR\fIalgorithm\fR" 4
7157 .IX Item "-fira-algorithm=algorithm"
7158 Use the specified coloring algorithm for the integrated register
7159 allocator.  The \fIalgorithm\fR argument can be \fBpriority\fR, which
7160 specifies Chow's priority coloring, or \fB\s-1CB\s0\fR, which specifies
7161 Chaitin-Briggs coloring.  Chaitin-Briggs coloring is not implemented
7162 for all architectures, but for those targets that do support it, it is
7163 the default because it generates better code.
7164 .IP "\fB\-fira\-region=\fR\fIregion\fR" 4
7165 .IX Item "-fira-region=region"
7166 Use specified regions for the integrated register allocator.  The
7167 \&\fIregion\fR argument should be one of the following:
7168 .RS 4
7169 .IP "\fBall\fR" 4
7170 .IX Item "all"
7171 Use all loops as register allocation regions.
7172 This can give the best results for machines with a small and/or
7173 irregular register set.
7174 .IP "\fBmixed\fR" 4
7175 .IX Item "mixed"
7176 Use all loops except for loops with small register pressure 
7177 as the regions.  This value usually gives
7178 the best results in most cases and for most architectures,
7179 and is enabled by default when compiling with optimization for speed
7180 (\fB\-O\fR, \fB\-O2\fR, ...).
7181 .IP "\fBone\fR" 4
7182 .IX Item "one"
7183 Use all functions as a single region.  
7184 This typically results in the smallest code size, and is enabled by default for
7185 \&\fB\-Os\fR or \fB\-O0\fR.
7186 .RE
7187 .RS 4
7188 .RE
7189 .IP "\fB\-fira\-hoist\-pressure\fR" 4
7190 .IX Item "-fira-hoist-pressure"
7191 Use \s-1IRA\s0 to evaluate register pressure in the code hoisting pass for
7192 decisions to hoist expressions.  This option usually results in smaller
7193 code, but it can slow the compiler down.
7194 .Sp
7195 This option is enabled at level \fB\-Os\fR for all targets.
7196 .IP "\fB\-fira\-loop\-pressure\fR" 4
7197 .IX Item "-fira-loop-pressure"
7198 Use \s-1IRA\s0 to evaluate register pressure in loops for decisions to move
7199 loop invariants.  This option usually results in generation
7200 of faster and smaller code on machines with large register files (>= 32
7201 registers), but it can slow the compiler down.
7202 .Sp
7203 This option is enabled at level \fB\-O3\fR for some targets.
7204 .IP "\fB\-fno\-ira\-share\-save\-slots\fR" 4
7205 .IX Item "-fno-ira-share-save-slots"
7206 Disable sharing of stack slots used for saving call-used hard
7207 registers living through a call.  Each hard register gets a
7208 separate stack slot, and as a result function stack frames are
7209 larger.
7210 .IP "\fB\-fno\-ira\-share\-spill\-slots\fR" 4
7211 .IX Item "-fno-ira-share-spill-slots"
7212 Disable sharing of stack slots allocated for pseudo-registers.  Each
7213 pseudo-register that does not get a hard register gets a separate
7214 stack slot, and as a result function stack frames are larger.
7215 .IP "\fB\-fira\-verbose=\fR\fIn\fR" 4
7216 .IX Item "-fira-verbose=n"
7217 Control the verbosity of the dump file for the integrated register allocator.
7218 The default value is 5.  If the value \fIn\fR is greater or equal to 10,
7219 the dump output is sent to stderr using the same format as \fIn\fR minus 10.
7220 .IP "\fB\-flra\-remat\fR" 4
7221 .IX Item "-flra-remat"
7222 Enable CFG-sensitive rematerialization in \s-1LRA\s0.  Instead of loading
7223 values of spilled pseudos, \s-1LRA\s0 tries to rematerialize (recalculate)
7224 values if it is profitable.
7225 .Sp
7226 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
7227 .IP "\fB\-fdelayed\-branch\fR" 4
7228 .IX Item "-fdelayed-branch"
7229 If supported for the target machine, attempt to reorder instructions
7230 to exploit instruction slots available after delayed branch
7231 instructions.
7232 .Sp
7233 Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
7234 .IP "\fB\-fschedule\-insns\fR" 4
7235 .IX Item "-fschedule-insns"
7236 If supported for the target machine, attempt to reorder instructions to
7237 eliminate execution stalls due to required data being unavailable.  This
7238 helps machines that have slow floating point or memory load instructions
7239 by allowing other instructions to be issued until the result of the load
7240 or floating-point instruction is required.
7241 .Sp
7242 Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
7243 .IP "\fB\-fschedule\-insns2\fR" 4
7244 .IX Item "-fschedule-insns2"
7245 Similar to \fB\-fschedule\-insns\fR, but requests an additional pass of
7246 instruction scheduling after register allocation has been done.  This is
7247 especially useful on machines with a relatively small number of
7248 registers and where memory load instructions take more than one cycle.
7249 .Sp
7250 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
7251 .IP "\fB\-fno\-sched\-interblock\fR" 4
7252 .IX Item "-fno-sched-interblock"
7253 Don't schedule instructions across basic blocks.  This is normally
7254 enabled by default when scheduling before register allocation, i.e.
7255 with \fB\-fschedule\-insns\fR or at \fB\-O2\fR or higher.
7256 .IP "\fB\-fno\-sched\-spec\fR" 4
7257 .IX Item "-fno-sched-spec"
7258 Don't allow speculative motion of non-load instructions.  This is normally
7259 enabled by default when scheduling before register allocation, i.e.
7260 with \fB\-fschedule\-insns\fR or at \fB\-O2\fR or higher.
7261 .IP "\fB\-fsched\-pressure\fR" 4
7262 .IX Item "-fsched-pressure"
7263 Enable register pressure sensitive insn scheduling before register
7264 allocation.  This only makes sense when scheduling before register
7265 allocation is enabled, i.e. with \fB\-fschedule\-insns\fR or at
7266 \&\fB\-O2\fR or higher.  Usage of this option can improve the
7267 generated code and decrease its size by preventing register pressure
7268 increase above the number of available hard registers and subsequent
7269 spills in register allocation.
7270 .IP "\fB\-fsched\-spec\-load\fR" 4
7271 .IX Item "-fsched-spec-load"
7272 Allow speculative motion of some load instructions.  This only makes
7273 sense when scheduling before register allocation, i.e. with
7274 \&\fB\-fschedule\-insns\fR or at \fB\-O2\fR or higher.
7275 .IP "\fB\-fsched\-spec\-load\-dangerous\fR" 4
7276 .IX Item "-fsched-spec-load-dangerous"
7277 Allow speculative motion of more load instructions.  This only makes
7278 sense when scheduling before register allocation, i.e. with
7279 \&\fB\-fschedule\-insns\fR or at \fB\-O2\fR or higher.
7280 .IP "\fB\-fsched\-stalled\-insns\fR" 4
7281 .IX Item "-fsched-stalled-insns"
7282 .PD 0
7283 .IP "\fB\-fsched\-stalled\-insns=\fR\fIn\fR" 4
7284 .IX Item "-fsched-stalled-insns=n"
7285 .PD
7286 Define how many insns (if any) can be moved prematurely from the queue
7287 of stalled insns into the ready list during the second scheduling pass.
7288 \&\fB\-fno\-sched\-stalled\-insns\fR means that no insns are moved
7289 prematurely, \fB\-fsched\-stalled\-insns=0\fR means there is no limit
7290 on how many queued insns can be moved prematurely.
7291 \&\fB\-fsched\-stalled\-insns\fR without a value is equivalent to
7292 \&\fB\-fsched\-stalled\-insns=1\fR.
7293 .IP "\fB\-fsched\-stalled\-insns\-dep\fR" 4
7294 .IX Item "-fsched-stalled-insns-dep"
7295 .PD 0
7296 .IP "\fB\-fsched\-stalled\-insns\-dep=\fR\fIn\fR" 4
7297 .IX Item "-fsched-stalled-insns-dep=n"
7298 .PD
7299 Define how many insn groups (cycles) are examined for a dependency
7300 on a stalled insn that is a candidate for premature removal from the queue
7301 of stalled insns.  This has an effect only during the second scheduling pass,
7302 and only if \fB\-fsched\-stalled\-insns\fR is used.
7303 \&\fB\-fno\-sched\-stalled\-insns\-dep\fR is equivalent to
7304 \&\fB\-fsched\-stalled\-insns\-dep=0\fR.
7305 \&\fB\-fsched\-stalled\-insns\-dep\fR without a value is equivalent to
7306 \&\fB\-fsched\-stalled\-insns\-dep=1\fR.
7307 .IP "\fB\-fsched2\-use\-superblocks\fR" 4
7308 .IX Item "-fsched2-use-superblocks"
7309 When scheduling after register allocation, use superblock scheduling.
7310 This allows motion across basic block boundaries,
7311 resulting in faster schedules.  This option is experimental, as not all machine
7312 descriptions used by \s-1GCC\s0 model the \s-1CPU\s0 closely enough to avoid unreliable
7313 results from the algorithm.
7314 .Sp
7315 This only makes sense when scheduling after register allocation, i.e. with
7316 \&\fB\-fschedule\-insns2\fR or at \fB\-O2\fR or higher.
7317 .IP "\fB\-fsched\-group\-heuristic\fR" 4
7318 .IX Item "-fsched-group-heuristic"
7319 Enable the group heuristic in the scheduler.  This heuristic favors
7320 the instruction that belongs to a schedule group.  This is enabled
7321 by default when scheduling is enabled, i.e. with \fB\-fschedule\-insns\fR
7322 or \fB\-fschedule\-insns2\fR or at \fB\-O2\fR or higher.
7323 .IP "\fB\-fsched\-critical\-path\-heuristic\fR" 4
7324 .IX Item "-fsched-critical-path-heuristic"
7325 Enable the critical-path heuristic in the scheduler.  This heuristic favors
7326 instructions on the critical path.  This is enabled by default when
7327 scheduling is enabled, i.e. with \fB\-fschedule\-insns\fR
7328 or \fB\-fschedule\-insns2\fR or at \fB\-O2\fR or higher.
7329 .IP "\fB\-fsched\-spec\-insn\-heuristic\fR" 4
7330 .IX Item "-fsched-spec-insn-heuristic"
7331 Enable the speculative instruction heuristic in the scheduler.  This
7332 heuristic favors speculative instructions with greater dependency weakness.
7333 This is enabled by default when scheduling is enabled, i.e.
7334 with \fB\-fschedule\-insns\fR or \fB\-fschedule\-insns2\fR
7335 or at \fB\-O2\fR or higher.
7336 .IP "\fB\-fsched\-rank\-heuristic\fR" 4
7337 .IX Item "-fsched-rank-heuristic"
7338 Enable the rank heuristic in the scheduler.  This heuristic favors
7339 the instruction belonging to a basic block with greater size or frequency.
7340 This is enabled by default when scheduling is enabled, i.e.
7341 with \fB\-fschedule\-insns\fR or \fB\-fschedule\-insns2\fR or
7342 at \fB\-O2\fR or higher.
7343 .IP "\fB\-fsched\-last\-insn\-heuristic\fR" 4
7344 .IX Item "-fsched-last-insn-heuristic"
7345 Enable the last-instruction heuristic in the scheduler.  This heuristic
7346 favors the instruction that is less dependent on the last instruction
7347 scheduled.  This is enabled by default when scheduling is enabled,
7348 i.e. with \fB\-fschedule\-insns\fR or \fB\-fschedule\-insns2\fR or
7349 at \fB\-O2\fR or higher.
7350 .IP "\fB\-fsched\-dep\-count\-heuristic\fR" 4
7351 .IX Item "-fsched-dep-count-heuristic"
7352 Enable the dependent-count heuristic in the scheduler.  This heuristic
7353 favors the instruction that has more instructions depending on it.
7354 This is enabled by default when scheduling is enabled, i.e.
7355 with \fB\-fschedule\-insns\fR or \fB\-fschedule\-insns2\fR or
7356 at \fB\-O2\fR or higher.
7357 .IP "\fB\-freschedule\-modulo\-scheduled\-loops\fR" 4
7358 .IX Item "-freschedule-modulo-scheduled-loops"
7359 Modulo scheduling is performed before traditional scheduling.  If a loop
7360 is modulo scheduled, later scheduling passes may change its schedule.  
7361 Use this option to control that behavior.
7362 .IP "\fB\-fselective\-scheduling\fR" 4
7363 .IX Item "-fselective-scheduling"
7364 Schedule instructions using selective scheduling algorithm.  Selective
7365 scheduling runs instead of the first scheduler pass.
7366 .IP "\fB\-fselective\-scheduling2\fR" 4
7367 .IX Item "-fselective-scheduling2"
7368 Schedule instructions using selective scheduling algorithm.  Selective
7369 scheduling runs instead of the second scheduler pass.
7370 .IP "\fB\-fsel\-sched\-pipelining\fR" 4
7371 .IX Item "-fsel-sched-pipelining"
7372 Enable software pipelining of innermost loops during selective scheduling.
7373 This option has no effect unless one of \fB\-fselective\-scheduling\fR or
7374 \&\fB\-fselective\-scheduling2\fR is turned on.
7375 .IP "\fB\-fsel\-sched\-pipelining\-outer\-loops\fR" 4
7376 .IX Item "-fsel-sched-pipelining-outer-loops"
7377 When pipelining loops during selective scheduling, also pipeline outer loops.
7378 This option has no effect unless \fB\-fsel\-sched\-pipelining\fR is turned on.
7379 .IP "\fB\-fsemantic\-interposition\fR" 4
7380 .IX Item "-fsemantic-interposition"
7381 Some object formats, like \s-1ELF\s0, allow interposing of symbols by the 
7382 dynamic linker.
7383 This means that for symbols exported from the \s-1DSO\s0, the compiler cannot perform
7384 interprocedural propagation, inlining and other optimizations in anticipation
7385 that the function or variable in question may change. While this feature is
7386 useful, for example, to rewrite memory allocation functions by a debugging
7387 implementation, it is expensive in the terms of code quality.
7388 With \fB\-fno\-semantic\-interposition\fR the compiler assumes that 
7389 if interposition happens for functions the overwriting function will have 
7390 precisely the same semantics (and side effects). 
7391 Similarly if interposition happens
7392 for variables, the constructor of the variable will be the same. The flag
7393 has no effect for functions explicitly declared inline 
7394 (where it is never allowed for interposition to change semantics) 
7395 and for symbols explicitly declared weak.
7396 .IP "\fB\-fshrink\-wrap\fR" 4
7397 .IX Item "-fshrink-wrap"
7398 Emit function prologues only before parts of the function that need it,
7399 rather than at the top of the function.  This flag is enabled by default at
7400 \&\fB\-O\fR and higher.
7401 .IP "\fB\-fcaller\-saves\fR" 4
7402 .IX Item "-fcaller-saves"
7403 Enable allocation of values to registers that are clobbered by
7404 function calls, by emitting extra instructions to save and restore the
7405 registers around such calls.  Such allocation is done only when it
7406 seems to result in better code.
7407 .Sp
7408 This option is always enabled by default on certain machines, usually
7409 those which have no call-preserved registers to use instead.
7410 .Sp
7411 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
7412 .IP "\fB\-fcombine\-stack\-adjustments\fR" 4
7413 .IX Item "-fcombine-stack-adjustments"
7414 Tracks stack adjustments (pushes and pops) and stack memory references
7415 and then tries to find ways to combine them.
7416 .Sp
7417 Enabled by default at \fB\-O1\fR and higher.
7418 .IP "\fB\-fipa\-ra\fR" 4
7419 .IX Item "-fipa-ra"
7420 Use caller save registers for allocation if those registers are not used by
7421 any called function.  In that case it is not necessary to save and restore
7422 them around calls.  This is only possible if called functions are part of
7423 same compilation unit as current function and they are compiled before it.
7424 .Sp
7425 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
7426 .IP "\fB\-fconserve\-stack\fR" 4
7427 .IX Item "-fconserve-stack"
7428 Attempt to minimize stack usage.  The compiler attempts to use less
7429 stack space, even if that makes the program slower.  This option
7430 implies setting the \fBlarge-stack-frame\fR parameter to 100
7431 and the \fBlarge-stack-frame-growth\fR parameter to 400.
7432 .IP "\fB\-ftree\-reassoc\fR" 4
7433 .IX Item "-ftree-reassoc"
7434 Perform reassociation on trees.  This flag is enabled by default
7435 at \fB\-O\fR and higher.
7436 .IP "\fB\-ftree\-pre\fR" 4
7437 .IX Item "-ftree-pre"
7438 Perform partial redundancy elimination (\s-1PRE\s0) on trees.  This flag is
7439 enabled by default at \fB\-O2\fR and \fB\-O3\fR.
7440 .IP "\fB\-ftree\-partial\-pre\fR" 4
7441 .IX Item "-ftree-partial-pre"
7442 Make partial redundancy elimination (\s-1PRE\s0) more aggressive.  This flag is
7443 enabled by default at \fB\-O3\fR.
7444 .IP "\fB\-ftree\-forwprop\fR" 4
7445 .IX Item "-ftree-forwprop"
7446 Perform forward propagation on trees.  This flag is enabled by default
7447 at \fB\-O\fR and higher.
7448 .IP "\fB\-ftree\-fre\fR" 4
7449 .IX Item "-ftree-fre"
7450 Perform full redundancy elimination (\s-1FRE\s0) on trees.  The difference
7451 between \s-1FRE\s0 and \s-1PRE\s0 is that \s-1FRE\s0 only considers expressions
7452 that are computed on all paths leading to the redundant computation.
7453 This analysis is faster than \s-1PRE\s0, though it exposes fewer redundancies.
7454 This flag is enabled by default at \fB\-O\fR and higher.
7455 .IP "\fB\-ftree\-phiprop\fR" 4
7456 .IX Item "-ftree-phiprop"
7457 Perform hoisting of loads from conditional pointers on trees.  This
7458 pass is enabled by default at \fB\-O\fR and higher.
7459 .IP "\fB\-fhoist\-adjacent\-loads\fR" 4
7460 .IX Item "-fhoist-adjacent-loads"
7461 Speculatively hoist loads from both branches of an if-then-else if the
7462 loads are from adjacent locations in the same structure and the target
7463 architecture has a conditional move instruction.  This flag is enabled
7464 by default at \fB\-O2\fR and higher.
7465 .IP "\fB\-ftree\-copy\-prop\fR" 4
7466 .IX Item "-ftree-copy-prop"
7467 Perform copy propagation on trees.  This pass eliminates unnecessary
7468 copy operations.  This flag is enabled by default at \fB\-O\fR and
7469 higher.
7470 .IP "\fB\-fipa\-pure\-const\fR" 4
7471 .IX Item "-fipa-pure-const"
7472 Discover which functions are pure or constant.
7473 Enabled by default at \fB\-O\fR and higher.
7474 .IP "\fB\-fipa\-reference\fR" 4
7475 .IX Item "-fipa-reference"
7476 Discover which static variables do not escape the
7477 compilation unit.
7478 Enabled by default at \fB\-O\fR and higher.
7479 .IP "\fB\-fipa\-pta\fR" 4
7480 .IX Item "-fipa-pta"
7481 Perform interprocedural pointer analysis and interprocedural modification
7482 and reference analysis.  This option can cause excessive memory and
7483 compile-time usage on large compilation units.  It is not enabled by
7484 default at any optimization level.
7485 .IP "\fB\-fipa\-profile\fR" 4
7486 .IX Item "-fipa-profile"
7487 Perform interprocedural profile propagation.  The functions called only from
7488 cold functions are marked as cold. Also functions executed once (such as
7489 \&\f(CW\*(C`cold\*(C'\fR, \f(CW\*(C`noreturn\*(C'\fR, static constructors or destructors) are identified. Cold
7490 functions and loop less parts of functions executed once are then optimized for
7491 size.
7492 Enabled by default at \fB\-O\fR and higher.
7493 .IP "\fB\-fipa\-cp\fR" 4
7494 .IX Item "-fipa-cp"
7495 Perform interprocedural constant propagation.
7496 This optimization analyzes the program to determine when values passed
7497 to functions are constants and then optimizes accordingly.
7498 This optimization can substantially increase performance
7499 if the application has constants passed to functions.
7500 This flag is enabled by default at \fB\-O2\fR, \fB\-Os\fR and \fB\-O3\fR.
7501 .IP "\fB\-fipa\-cp\-clone\fR" 4
7502 .IX Item "-fipa-cp-clone"
7503 Perform function cloning to make interprocedural constant propagation stronger.
7504 When enabled, interprocedural constant propagation performs function cloning
7505 when externally visible function can be called with constant arguments.
7506 Because this optimization can create multiple copies of functions,
7507 it may significantly increase code size
7508 (see \fB\-\-param ipcp\-unit\-growth=\fR\fIvalue\fR).
7509 This flag is enabled by default at \fB\-O3\fR.
7510 .IP "\fB\-fipa\-icf\fR" 4
7511 .IX Item "-fipa-icf"
7512 Perform Identical Code Folding for functions and read-only variables.
7513 The optimization reduces code size and may disturb unwind stacks by replacing
7514 a function by equivalent one with a different name. The optimization works
7515 more effectively with link time optimization enabled.
7516 .Sp
7517 Nevertheless the behavior is similar to Gold Linker \s-1ICF\s0 optimization, \s-1GCC\s0 \s-1ICF\s0
7518 works on different levels and thus the optimizations are not same \- there are
7519 equivalences that are found only by \s-1GCC\s0 and equivalences found only by Gold.
7520 .Sp
7521 This flag is enabled by default at \fB\-O2\fR and \fB\-Os\fR.
7522 .IP "\fB\-fisolate\-erroneous\-paths\-dereference\fR" 4
7523 .IX Item "-fisolate-erroneous-paths-dereference"
7524 Detect paths that trigger erroneous or undefined behavior due to
7525 dereferencing a null pointer.  Isolate those paths from the main control
7526 flow and turn the statement with erroneous or undefined behavior into a trap.
7527 This flag is enabled by default at \fB\-O2\fR and higher.
7528 .IP "\fB\-fisolate\-erroneous\-paths\-attribute\fR" 4
7529 .IX Item "-fisolate-erroneous-paths-attribute"
7530 Detect paths that trigger erroneous or undefined behavior due a null value
7531 being used in a way forbidden by a \f(CW\*(C`returns_nonnull\*(C'\fR or \f(CW\*(C`nonnull\*(C'\fR
7532 attribute.  Isolate those paths from the main control flow and turn the
7533 statement with erroneous or undefined behavior into a trap.  This is not
7534 currently enabled, but may be enabled by \fB\-O2\fR in the future.
7535 .IP "\fB\-ftree\-sink\fR" 4
7536 .IX Item "-ftree-sink"
7537 Perform forward store motion  on trees.  This flag is
7538 enabled by default at \fB\-O\fR and higher.
7539 .IP "\fB\-ftree\-bit\-ccp\fR" 4
7540 .IX Item "-ftree-bit-ccp"
7541 Perform sparse conditional bit constant propagation on trees and propagate
7542 pointer alignment information.
7543 This pass only operates on local scalar variables and is enabled by default
7544 at \fB\-O\fR and higher.  It requires that \fB\-ftree\-ccp\fR is enabled.
7545 .IP "\fB\-ftree\-ccp\fR" 4
7546 .IX Item "-ftree-ccp"
7547 Perform sparse conditional constant propagation (\s-1CCP\s0) on trees.  This
7548 pass only operates on local scalar variables and is enabled by default
7549 at \fB\-O\fR and higher.
7550 .IP "\fB\-fssa\-phiopt\fR" 4
7551 .IX Item "-fssa-phiopt"
7552 Perform pattern matching on \s-1SSA\s0 \s-1PHI\s0 nodes to optimize conditional
7553 code.  This pass is enabled by default at \fB\-O\fR and higher.
7554 .IP "\fB\-ftree\-switch\-conversion\fR" 4
7555 .IX Item "-ftree-switch-conversion"
7556 Perform conversion of simple initializations in a switch to
7557 initializations from a scalar array.  This flag is enabled by default
7558 at \fB\-O2\fR and higher.
7559 .IP "\fB\-ftree\-tail\-merge\fR" 4
7560 .IX Item "-ftree-tail-merge"
7561 Look for identical code sequences.  When found, replace one with a jump to the
7562 other.  This optimization is known as tail merging or cross jumping.  This flag
7563 is enabled by default at \fB\-O2\fR and higher.  The compilation time
7564 in this pass can
7565 be limited using \fBmax-tail-merge-comparisons\fR parameter and
7566 \&\fBmax-tail-merge-iterations\fR parameter.
7567 .IP "\fB\-ftree\-dce\fR" 4
7568 .IX Item "-ftree-dce"
7569 Perform dead code elimination (\s-1DCE\s0) on trees.  This flag is enabled by
7570 default at \fB\-O\fR and higher.
7571 .IP "\fB\-ftree\-builtin\-call\-dce\fR" 4
7572 .IX Item "-ftree-builtin-call-dce"
7573 Perform conditional dead code elimination (\s-1DCE\s0) for calls to built-in functions
7574 that may set \f(CW\*(C`errno\*(C'\fR but are otherwise side-effect free.  This flag is
7575 enabled by default at \fB\-O2\fR and higher if \fB\-Os\fR is not also
7576 specified.
7577 .IP "\fB\-ftree\-dominator\-opts\fR" 4
7578 .IX Item "-ftree-dominator-opts"
7579 Perform a variety of simple scalar cleanups (constant/copy
7580 propagation, redundancy elimination, range propagation and expression
7581 simplification) based on a dominator tree traversal.  This also
7582 performs jump threading (to reduce jumps to jumps). This flag is
7583 enabled by default at \fB\-O\fR and higher.
7584 .IP "\fB\-ftree\-dse\fR" 4
7585 .IX Item "-ftree-dse"
7586 Perform dead store elimination (\s-1DSE\s0) on trees.  A dead store is a store into
7587 a memory location that is later overwritten by another store without
7588 any intervening loads.  In this case the earlier store can be deleted.  This
7589 flag is enabled by default at \fB\-O\fR and higher.
7590 .IP "\fB\-ftree\-ch\fR" 4
7591 .IX Item "-ftree-ch"
7592 Perform loop header copying on trees.  This is beneficial since it increases
7593 effectiveness of code motion optimizations.  It also saves one jump.  This flag
7594 is enabled by default at \fB\-O\fR and higher.  It is not enabled
7595 for \fB\-Os\fR, since it usually increases code size.
7596 .IP "\fB\-ftree\-loop\-optimize\fR" 4
7597 .IX Item "-ftree-loop-optimize"
7598 Perform loop optimizations on trees.  This flag is enabled by default
7599 at \fB\-O\fR and higher.
7600 .IP "\fB\-ftree\-loop\-linear\fR" 4
7601 .IX Item "-ftree-loop-linear"
7602 Perform loop interchange transformations on tree.  Same as
7603 \&\fB\-floop\-interchange\fR.  To use this code transformation, \s-1GCC\s0 has
7604 to be configured with \fB\-\-with\-isl\fR to enable the Graphite loop
7605 transformation infrastructure.
7606 .IP "\fB\-floop\-interchange\fR" 4
7607 .IX Item "-floop-interchange"
7608 Perform loop interchange transformations on loops.  Interchanging two
7609 nested loops switches the inner and outer loops.  For example, given a
7610 loop like:
7611 .Sp
7612 .Vb 5
7613 \&        DO J = 1, M
7614 \&          DO I = 1, N
7615 \&            A(J, I) = A(J, I) * C
7616 \&          ENDDO
7617 \&        ENDDO
7618 .Ve
7619 .Sp
7620 loop interchange transforms the loop as if it were written:
7621 .Sp
7622 .Vb 5
7623 \&        DO I = 1, N
7624 \&          DO J = 1, M
7625 \&            A(J, I) = A(J, I) * C
7626 \&          ENDDO
7627 \&        ENDDO
7628 .Ve
7629 .Sp
7630 which can be beneficial when \f(CW\*(C`N\*(C'\fR is larger than the caches,
7631 because in Fortran, the elements of an array are stored in memory
7632 contiguously by column, and the original loop iterates over rows,
7633 potentially creating at each access a cache miss.  This optimization
7634 applies to all the languages supported by \s-1GCC\s0 and is not limited to
7635 Fortran.  To use this code transformation, \s-1GCC\s0 has to be configured
7636 with \fB\-\-with\-isl\fR to enable the Graphite loop transformation
7637 infrastructure.
7638 .IP "\fB\-floop\-strip\-mine\fR" 4
7639 .IX Item "-floop-strip-mine"
7640 Perform loop strip mining transformations on loops.  Strip mining
7641 splits a loop into two nested loops.  The outer loop has strides
7642 equal to the strip size and the inner loop has strides of the
7643 original loop within a strip.  The strip length can be changed
7644 using the \fBloop-block-tile-size\fR parameter.  For example,
7645 given a loop like:
7646 .Sp
7647 .Vb 3
7648 \&        DO I = 1, N
7649 \&          A(I) = A(I) + C
7650 \&        ENDDO
7651 .Ve
7652 .Sp
7653 loop strip mining transforms the loop as if it were written:
7654 .Sp
7655 .Vb 5
7656 \&        DO II = 1, N, 51
7657 \&          DO I = II, min (II + 50, N)
7658 \&            A(I) = A(I) + C
7659 \&          ENDDO
7660 \&        ENDDO
7661 .Ve
7662 .Sp
7663 This optimization applies to all the languages supported by \s-1GCC\s0 and is
7664 not limited to Fortran.  To use this code transformation, \s-1GCC\s0 has to
7665 be configured with \fB\-\-with\-isl\fR to enable the Graphite loop
7666 transformation infrastructure.
7667 .IP "\fB\-floop\-block\fR" 4
7668 .IX Item "-floop-block"
7669 Perform loop blocking transformations on loops.  Blocking strip mines
7670 each loop in the loop nest such that the memory accesses of the
7671 element loops fit inside caches.  The strip length can be changed
7672 using the \fBloop-block-tile-size\fR parameter.  For example, given
7673 a loop like:
7674 .Sp
7675 .Vb 5
7676 \&        DO I = 1, N
7677 \&          DO J = 1, M
7678 \&            A(J, I) = B(I) + C(J)
7679 \&          ENDDO
7680 \&        ENDDO
7681 .Ve
7682 .Sp
7683 loop blocking transforms the loop as if it were written:
7684 .Sp
7685 .Vb 9
7686 \&        DO II = 1, N, 51
7687 \&          DO JJ = 1, M, 51
7688 \&            DO I = II, min (II + 50, N)
7689 \&              DO J = JJ, min (JJ + 50, M)
7690 \&                A(J, I) = B(I) + C(J)
7691 \&              ENDDO
7692 \&            ENDDO
7693 \&          ENDDO
7694 \&        ENDDO
7695 .Ve
7696 .Sp
7697 which can be beneficial when \f(CW\*(C`M\*(C'\fR is larger than the caches,
7698 because the innermost loop iterates over a smaller amount of data
7699 which can be kept in the caches.  This optimization applies to all the
7700 languages supported by \s-1GCC\s0 and is not limited to Fortran.  To use this
7701 code transformation, \s-1GCC\s0 has to be configured with \fB\-\-with\-isl\fR
7702 to enable the Graphite loop transformation infrastructure.
7703 .IP "\fB\-fgraphite\-identity\fR" 4
7704 .IX Item "-fgraphite-identity"
7705 Enable the identity transformation for graphite.  For every SCoP we generate
7706 the polyhedral representation and transform it back to gimple.  Using
7707 \&\fB\-fgraphite\-identity\fR we can check the costs or benefits of the
7708 \&\s-1GIMPLE\s0 \-> \s-1GRAPHITE\s0 \-> \s-1GIMPLE\s0 transformation.  Some minimal optimizations
7709 are also performed by the code generator \s-1ISL\s0, like index splitting and
7710 dead code elimination in loops.
7711 .IP "\fB\-floop\-nest\-optimize\fR" 4
7712 .IX Item "-floop-nest-optimize"
7713 Enable the \s-1ISL\s0 based loop nest optimizer.  This is a generic loop nest
7714 optimizer based on the Pluto optimization algorithms.  It calculates a loop
7715 structure optimized for data-locality and parallelism.  This option
7716 is experimental.
7717 .IP "\fB\-floop\-unroll\-and\-jam\fR" 4
7718 .IX Item "-floop-unroll-and-jam"
7719 Enable unroll and jam for the \s-1ISL\s0 based loop nest optimizer.  The unroll 
7720 factor can be changed using the \fBloop-unroll-jam-size\fR parameter.
7721 The unrolled dimension (counting from the most inner one) can be changed 
7722 using the \fBloop-unroll-jam-depth\fR parameter.                 .
7723 .IP "\fB\-floop\-parallelize\-all\fR" 4
7724 .IX Item "-floop-parallelize-all"
7725 Use the Graphite data dependence analysis to identify loops that can
7726 be parallelized.  Parallelize all the loops that can be analyzed to
7727 not contain loop carried dependences without checking that it is
7728 profitable to parallelize the loops.
7729 .IP "\fB\-fcheck\-data\-deps\fR" 4
7730 .IX Item "-fcheck-data-deps"
7731 Compare the results of several data dependence analyzers.  This option
7732 is used for debugging the data dependence analyzers.
7733 .IP "\fB\-ftree\-loop\-if\-convert\fR" 4
7734 .IX Item "-ftree-loop-if-convert"
7735 Attempt to transform conditional jumps in the innermost loops to
7736 branch-less equivalents.  The intent is to remove control-flow from
7737 the innermost loops in order to improve the ability of the
7738 vectorization pass to handle these loops.  This is enabled by default
7739 if vectorization is enabled.
7740 .IP "\fB\-ftree\-loop\-if\-convert\-stores\fR" 4
7741 .IX Item "-ftree-loop-if-convert-stores"
7742 Attempt to also if-convert conditional jumps containing memory writes.
7743 This transformation can be unsafe for multi-threaded programs as it
7744 transforms conditional memory writes into unconditional memory writes.
7745 For example,
7746 .Sp
7747 .Vb 3
7748 \&        for (i = 0; i < N; i++)
7749 \&          if (cond)
7750 \&            A[i] = expr;
7751 .Ve
7752 .Sp
7753 is transformed to
7754 .Sp
7755 .Vb 2
7756 \&        for (i = 0; i < N; i++)
7757 \&          A[i] = cond ? expr : A[i];
7758 .Ve
7759 .Sp
7760 potentially producing data races.
7761 .IP "\fB\-ftree\-loop\-distribution\fR" 4
7762 .IX Item "-ftree-loop-distribution"
7763 Perform loop distribution.  This flag can improve cache performance on
7764 big loop bodies and allow further loop optimizations, like
7765 parallelization or vectorization, to take place.  For example, the loop
7766 .Sp
7767 .Vb 4
7768 \&        DO I = 1, N
7769 \&          A(I) = B(I) + C
7770 \&          D(I) = E(I) * F
7771 \&        ENDDO
7772 .Ve
7773 .Sp
7774 is transformed to
7775 .Sp
7776 .Vb 6
7777 \&        DO I = 1, N
7778 \&           A(I) = B(I) + C
7779 \&        ENDDO
7780 \&        DO I = 1, N
7781 \&           D(I) = E(I) * F
7782 \&        ENDDO
7783 .Ve
7784 .IP "\fB\-ftree\-loop\-distribute\-patterns\fR" 4
7785 .IX Item "-ftree-loop-distribute-patterns"
7786 Perform loop distribution of patterns that can be code generated with
7787 calls to a library.  This flag is enabled by default at \fB\-O3\fR.
7788 .Sp
7789 This pass distributes the initialization loops and generates a call to
7790 memset zero.  For example, the loop
7791 .Sp
7792 .Vb 4
7793 \&        DO I = 1, N
7794 \&          A(I) = 0
7795 \&          B(I) = A(I) + I
7796 \&        ENDDO
7797 .Ve
7798 .Sp
7799 is transformed to
7800 .Sp
7801 .Vb 6
7802 \&        DO I = 1, N
7803 \&           A(I) = 0
7804 \&        ENDDO
7805 \&        DO I = 1, N
7806 \&           B(I) = A(I) + I
7807 \&        ENDDO
7808 .Ve
7809 .Sp
7810 and the initialization loop is transformed into a call to memset zero.
7811 .IP "\fB\-ftree\-loop\-im\fR" 4
7812 .IX Item "-ftree-loop-im"
7813 Perform loop invariant motion on trees.  This pass moves only invariants that
7814 are hard to handle at \s-1RTL\s0 level (function calls, operations that expand to
7815 nontrivial sequences of insns).  With \fB\-funswitch\-loops\fR it also moves
7816 operands of conditions that are invariant out of the loop, so that we can use
7817 just trivial invariantness analysis in loop unswitching.  The pass also includes
7818 store motion.
7819 .IP "\fB\-ftree\-loop\-ivcanon\fR" 4
7820 .IX Item "-ftree-loop-ivcanon"
7821 Create a canonical counter for number of iterations in loops for which
7822 determining number of iterations requires complicated analysis.  Later
7823 optimizations then may determine the number easily.  Useful especially
7824 in connection with unrolling.
7825 .IP "\fB\-fivopts\fR" 4
7826 .IX Item "-fivopts"
7827 Perform induction variable optimizations (strength reduction, induction
7828 variable merging and induction variable elimination) on trees.
7829 .IP "\fB\-ftree\-parallelize\-loops=n\fR" 4
7830 .IX Item "-ftree-parallelize-loops=n"
7831 Parallelize loops, i.e., split their iteration space to run in n threads.
7832 This is only possible for loops whose iterations are independent
7833 and can be arbitrarily reordered.  The optimization is only
7834 profitable on multiprocessor machines, for loops that are CPU-intensive,
7835 rather than constrained e.g. by memory bandwidth.  This option
7836 implies \fB\-pthread\fR, and thus is only supported on targets
7837 that have support for \fB\-pthread\fR.
7838 .IP "\fB\-ftree\-pta\fR" 4
7839 .IX Item "-ftree-pta"
7840 Perform function-local points-to analysis on trees.  This flag is
7841 enabled by default at \fB\-O\fR and higher.
7842 .IP "\fB\-ftree\-sra\fR" 4
7843 .IX Item "-ftree-sra"
7844 Perform scalar replacement of aggregates.  This pass replaces structure
7845 references with scalars to prevent committing structures to memory too
7846 early.  This flag is enabled by default at \fB\-O\fR and higher.
7847 .IP "\fB\-ftree\-copyrename\fR" 4
7848 .IX Item "-ftree-copyrename"
7849 Perform copy renaming on trees.  This pass attempts to rename compiler
7850 temporaries to other variables at copy locations, usually resulting in
7851 variable names which more closely resemble the original variables.  This flag
7852 is enabled by default at \fB\-O\fR and higher.
7853 .IP "\fB\-ftree\-coalesce\-inlined\-vars\fR" 4
7854 .IX Item "-ftree-coalesce-inlined-vars"
7855 Tell the copyrename pass (see \fB\-ftree\-copyrename\fR) to attempt to
7856 combine small user-defined variables too, but only if they are inlined
7857 from other functions.  It is a more limited form of
7858 \&\fB\-ftree\-coalesce\-vars\fR.  This may harm debug information of such
7859 inlined variables, but it keeps variables of the inlined-into
7860 function apart from each other, such that they are more likely to
7861 contain the expected values in a debugging session.  This was the
7862 default in \s-1GCC\s0 versions older than 4.7.
7863 .IP "\fB\-ftree\-coalesce\-vars\fR" 4
7864 .IX Item "-ftree-coalesce-vars"
7865 Tell the copyrename pass (see \fB\-ftree\-copyrename\fR) to attempt to
7866 combine small user-defined variables too, instead of just compiler
7867 temporaries.  This may severely limit the ability to debug an optimized
7868 program compiled with \fB\-fno\-var\-tracking\-assignments\fR.  In the
7869 negated form, this flag prevents \s-1SSA\s0 coalescing of user variables,
7870 including inlined ones.  This option is enabled by default.
7871 .IP "\fB\-ftree\-ter\fR" 4
7872 .IX Item "-ftree-ter"
7873 Perform temporary expression replacement during the \s-1SSA\-\s0>normal phase.  Single
7874 use/single def temporaries are replaced at their use location with their
7875 defining expression.  This results in non-GIMPLE code, but gives the expanders
7876 much more complex trees to work on resulting in better \s-1RTL\s0 generation.  This is
7877 enabled by default at \fB\-O\fR and higher.
7878 .IP "\fB\-ftree\-slsr\fR" 4
7879 .IX Item "-ftree-slsr"
7880 Perform straight-line strength reduction on trees.  This recognizes related
7881 expressions involving multiplications and replaces them by less expensive
7882 calculations when possible.  This is enabled by default at \fB\-O\fR and
7883 higher.
7884 .IP "\fB\-ftree\-vectorize\fR" 4
7885 .IX Item "-ftree-vectorize"
7886 Perform vectorization on trees. This flag enables \fB\-ftree\-loop\-vectorize\fR
7887 and \fB\-ftree\-slp\-vectorize\fR if not explicitly specified.
7888 .IP "\fB\-ftree\-loop\-vectorize\fR" 4
7889 .IX Item "-ftree-loop-vectorize"
7890 Perform loop vectorization on trees. This flag is enabled by default at
7891 \&\fB\-O3\fR and when \fB\-ftree\-vectorize\fR is enabled.
7892 .IP "\fB\-ftree\-slp\-vectorize\fR" 4
7893 .IX Item "-ftree-slp-vectorize"
7894 Perform basic block vectorization on trees. This flag is enabled by default at
7895 \&\fB\-O3\fR and when \fB\-ftree\-vectorize\fR is enabled.
7896 .IP "\fB\-fvect\-cost\-model=\fR\fImodel\fR" 4
7897 .IX Item "-fvect-cost-model=model"
7898 Alter the cost model used for vectorization.  The \fImodel\fR argument
7899 should be one of \fBunlimited\fR, \fBdynamic\fR or \fBcheap\fR.
7900 With the \fBunlimited\fR model the vectorized code-path is assumed
7901 to be profitable while with the \fBdynamic\fR model a runtime check
7902 guards the vectorized code-path to enable it only for iteration
7903 counts that will likely execute faster than when executing the original
7904 scalar loop.  The \fBcheap\fR model disables vectorization of
7905 loops where doing so would be cost prohibitive for example due to
7906 required runtime checks for data dependence or alignment but otherwise
7907 is equal to the \fBdynamic\fR model.
7908 The default cost model depends on other optimization flags and is
7909 either \fBdynamic\fR or \fBcheap\fR.
7910 .IP "\fB\-fsimd\-cost\-model=\fR\fImodel\fR" 4
7911 .IX Item "-fsimd-cost-model=model"
7912 Alter the cost model used for vectorization of loops marked with the OpenMP
7913 or Cilk Plus simd directive.  The \fImodel\fR argument should be one of
7914 \&\fBunlimited\fR, \fBdynamic\fR, \fBcheap\fR.  All values of \fImodel\fR
7915 have the same meaning as described in \fB\-fvect\-cost\-model\fR and by
7916 default a cost model defined with \fB\-fvect\-cost\-model\fR is used.
7917 .IP "\fB\-ftree\-vrp\fR" 4
7918 .IX Item "-ftree-vrp"
7919 Perform Value Range Propagation on trees.  This is similar to the
7920 constant propagation pass, but instead of values, ranges of values are
7921 propagated.  This allows the optimizers to remove unnecessary range
7922 checks like array bound checks and null pointer checks.  This is
7923 enabled by default at \fB\-O2\fR and higher.  Null pointer check
7924 elimination is only done if \fB\-fdelete\-null\-pointer\-checks\fR is
7925 enabled.
7926 .IP "\fB\-ftracer\fR" 4
7927 .IX Item "-ftracer"
7928 Perform tail duplication to enlarge superblock size.  This transformation
7929 simplifies the control flow of the function allowing other optimizations to do
7930 a better job.
7931 .IP "\fB\-funroll\-loops\fR" 4
7932 .IX Item "-funroll-loops"
7933 Unroll loops whose number of iterations can be determined at compile
7934 time or upon entry to the loop.  \fB\-funroll\-loops\fR implies
7935 \&\fB\-frerun\-cse\-after\-loop\fR.  This option makes code larger,
7936 and may or may not make it run faster.
7937 .IP "\fB\-funroll\-all\-loops\fR" 4
7938 .IX Item "-funroll-all-loops"
7939 Unroll all loops, even if their number of iterations is uncertain when
7940 the loop is entered.  This usually makes programs run more slowly.
7941 \&\fB\-funroll\-all\-loops\fR implies the same options as
7942 \&\fB\-funroll\-loops\fR,
7943 .IP "\fB\-fsplit\-ivs\-in\-unroller\fR" 4
7944 .IX Item "-fsplit-ivs-in-unroller"
7945 Enables expression of values of induction variables in later iterations
7946 of the unrolled loop using the value in the first iteration.  This breaks
7947 long dependency chains, thus improving efficiency of the scheduling passes.
7948 .Sp
7949 A combination of \fB\-fweb\fR and \s-1CSE\s0 is often sufficient to obtain the
7950 same effect.  However, that is not reliable in cases where the loop body
7951 is more complicated than a single basic block.  It also does not work at all
7952 on some architectures due to restrictions in the \s-1CSE\s0 pass.
7953 .Sp
7954 This optimization is enabled by default.
7955 .IP "\fB\-fvariable\-expansion\-in\-unroller\fR" 4
7956 .IX Item "-fvariable-expansion-in-unroller"
7957 With this option, the compiler creates multiple copies of some
7958 local variables when unrolling a loop, which can result in superior code.
7959 .IP "\fB\-fpartial\-inlining\fR" 4
7960 .IX Item "-fpartial-inlining"
7961 Inline parts of functions.  This option has any effect only
7962 when inlining itself is turned on by the \fB\-finline\-functions\fR
7963 or \fB\-finline\-small\-functions\fR options.
7964 .Sp
7965 Enabled at level \fB\-O2\fR.
7966 .IP "\fB\-fpredictive\-commoning\fR" 4
7967 .IX Item "-fpredictive-commoning"
7968 Perform predictive commoning optimization, i.e., reusing computations
7969 (especially memory loads and stores) performed in previous
7970 iterations of loops.
7971 .Sp
7972 This option is enabled at level \fB\-O3\fR.
7973 .IP "\fB\-fprefetch\-loop\-arrays\fR" 4
7974 .IX Item "-fprefetch-loop-arrays"
7975 If supported by the target machine, generate instructions to prefetch
7976 memory to improve the performance of loops that access large arrays.
7977 .Sp
7978 This option may generate better or worse code; results are highly
7979 dependent on the structure of loops within the source code.
7980 .Sp
7981 Disabled at level \fB\-Os\fR.
7982 .IP "\fB\-fno\-peephole\fR" 4
7983 .IX Item "-fno-peephole"
7984 .PD 0
7985 .IP "\fB\-fno\-peephole2\fR" 4
7986 .IX Item "-fno-peephole2"
7987 .PD
7988 Disable any machine-specific peephole optimizations.  The difference
7989 between \fB\-fno\-peephole\fR and \fB\-fno\-peephole2\fR is in how they
7990 are implemented in the compiler; some targets use one, some use the
7991 other, a few use both.
7992 .Sp
7993 \&\fB\-fpeephole\fR is enabled by default.
7994 \&\fB\-fpeephole2\fR enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
7995 .IP "\fB\-fno\-guess\-branch\-probability\fR" 4
7996 .IX Item "-fno-guess-branch-probability"
7997 Do not guess branch probabilities using heuristics.
7998 .Sp
7999 \&\s-1GCC\s0 uses heuristics to guess branch probabilities if they are
8000 not provided by profiling feedback (\fB\-fprofile\-arcs\fR).  These
8001 heuristics are based on the control flow graph.  If some branch probabilities
8002 are specified by \f(CW\*(C`_\|_builtin_expect\*(C'\fR, then the heuristics are
8003 used to guess branch probabilities for the rest of the control flow graph,
8004 taking the \f(CW\*(C`_\|_builtin_expect\*(C'\fR info into account.  The interactions
8005 between the heuristics and \f(CW\*(C`_\|_builtin_expect\*(C'\fR can be complex, and in
8006 some cases, it may be useful to disable the heuristics so that the effects
8007 of \f(CW\*(C`_\|_builtin_expect\*(C'\fR are easier to understand.
8008 .Sp
8009 The default is \fB\-fguess\-branch\-probability\fR at levels
8010 \&\fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
8011 .IP "\fB\-freorder\-blocks\fR" 4
8012 .IX Item "-freorder-blocks"
8013 Reorder basic blocks in the compiled function in order to reduce number of
8014 taken branches and improve code locality.
8015 .Sp
8016 Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
8017 .IP "\fB\-freorder\-blocks\-and\-partition\fR" 4
8018 .IX Item "-freorder-blocks-and-partition"
8019 In addition to reordering basic blocks in the compiled function, in order
8020 to reduce number of taken branches, partitions hot and cold basic blocks
8021 into separate sections of the assembly and .o files, to improve
8022 paging and cache locality performance.
8023 .Sp
8024 This optimization is automatically turned off in the presence of
8025 exception handling, for linkonce sections, for functions with a user-defined
8026 section attribute and on any architecture that does not support named
8027 sections.
8028 .Sp
8029 Enabled for x86 at levels \fB\-O2\fR, \fB\-O3\fR.
8030 .IP "\fB\-freorder\-functions\fR" 4
8031 .IX Item "-freorder-functions"
8032 Reorder functions in the object file in order to
8033 improve code locality.  This is implemented by using special
8034 subsections \f(CW\*(C`.text.hot\*(C'\fR for most frequently executed functions and
8035 \&\f(CW\*(C`.text.unlikely\*(C'\fR for unlikely executed functions.  Reordering is done by
8036 the linker so object file format must support named sections and linker must
8037 place them in a reasonable way.
8038 .Sp
8039 Also profile feedback must be available to make this option effective.  See
8040 \&\fB\-fprofile\-arcs\fR for details.
8041 .Sp
8042 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
8043 .IP "\fB\-fstrict\-aliasing\fR" 4
8044 .IX Item "-fstrict-aliasing"
8045 Allow the compiler to assume the strictest aliasing rules applicable to
8046 the language being compiled.  For C (and \*(C+), this activates
8047 optimizations based on the type of expressions.  In particular, an
8048 object of one type is assumed never to reside at the same address as an
8049 object of a different type, unless the types are almost the same.  For
8050 example, an \f(CW\*(C`unsigned int\*(C'\fR can alias an \f(CW\*(C`int\*(C'\fR, but not a
8051 \&\f(CW\*(C`void*\*(C'\fR or a \f(CW\*(C`double\*(C'\fR.  A character type may alias any other
8052 type.
8053 .Sp
8054 Pay special attention to code like this:
8055 .Sp
8056 .Vb 4
8057 \&        union a_union {
8058 \&          int i;
8059 \&          double d;
8060 \&        };
8061 \&        
8062 \&        int f() {
8063 \&          union a_union t;
8064 \&          t.d = 3.0;
8065 \&          return t.i;
8066 \&        }
8067 .Ve
8068 .Sp
8069 The practice of reading from a different union member than the one most
8070 recently written to (called \*(L"type-punning\*(R") is common.  Even with
8071 \&\fB\-fstrict\-aliasing\fR, type-punning is allowed, provided the memory
8072 is accessed through the union type.  So, the code above works as
8073 expected.    However, this code might not:
8074 .Sp
8075 .Vb 7
8076 \&        int f() {
8077 \&          union a_union t;
8078 \&          int* ip;
8079 \&          t.d = 3.0;
8080 \&          ip = &t.i;
8081 \&          return *ip;
8082 \&        }
8083 .Ve
8084 .Sp
8085 Similarly, access by taking the address, casting the resulting pointer
8086 and dereferencing the result has undefined behavior, even if the cast
8087 uses a union type, e.g.:
8088 .Sp
8089 .Vb 4
8090 \&        int f() {
8091 \&          double d = 3.0;
8092 \&          return ((union a_union *) &d)\->i;
8093 \&        }
8094 .Ve
8095 .Sp
8096 The \fB\-fstrict\-aliasing\fR option is enabled at levels
8097 \&\fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
8098 .IP "\fB\-fstrict\-overflow\fR" 4
8099 .IX Item "-fstrict-overflow"
8100 Allow the compiler to assume strict signed overflow rules, depending
8101 on the language being compiled.  For C (and \*(C+) this means that
8102 overflow when doing arithmetic with signed numbers is undefined, which
8103 means that the compiler may assume that it does not happen.  This
8104 permits various optimizations.  For example, the compiler assumes
8105 that an expression like \f(CW\*(C`i + 10 > i\*(C'\fR is always true for
8106 signed \f(CW\*(C`i\*(C'\fR.  This assumption is only valid if signed overflow is
8107 undefined, as the expression is false if \f(CW\*(C`i + 10\*(C'\fR overflows when
8108 using twos complement arithmetic.  When this option is in effect any
8109 attempt to determine whether an operation on signed numbers 
8110 overflows must be written carefully to not actually involve overflow.
8111 .Sp
8112 This option also allows the compiler to assume strict pointer
8113 semantics: given a pointer to an object, if adding an offset to that
8114 pointer does not produce a pointer to the same object, the addition is
8115 undefined.  This permits the compiler to conclude that \f(CW\*(C`p + u >
8116 p\*(C'\fR is always true for a pointer \f(CW\*(C`p\*(C'\fR and unsigned integer
8117 \&\f(CW\*(C`u\*(C'\fR.  This assumption is only valid because pointer wraparound is
8118 undefined, as the expression is false if \f(CW\*(C`p + u\*(C'\fR overflows using
8119 twos complement arithmetic.
8120 .Sp
8121 See also the \fB\-fwrapv\fR option.  Using \fB\-fwrapv\fR means
8122 that integer signed overflow is fully defined: it wraps.  When
8123 \&\fB\-fwrapv\fR is used, there is no difference between
8124 \&\fB\-fstrict\-overflow\fR and \fB\-fno\-strict\-overflow\fR for
8125 integers.  With \fB\-fwrapv\fR certain types of overflow are
8126 permitted.  For example, if the compiler gets an overflow when doing
8127 arithmetic on constants, the overflowed value can still be used with
8128 \&\fB\-fwrapv\fR, but not otherwise.
8129 .Sp
8130 The \fB\-fstrict\-overflow\fR option is enabled at levels
8131 \&\fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
8132 .IP "\fB\-falign\-functions\fR" 4
8133 .IX Item "-falign-functions"
8134 .PD 0
8135 .IP "\fB\-falign\-functions=\fR\fIn\fR" 4
8136 .IX Item "-falign-functions=n"
8137 .PD
8138 Align the start of functions to the next power-of-two greater than
8139 \&\fIn\fR, skipping up to \fIn\fR bytes.  For instance,
8140 \&\fB\-falign\-functions=32\fR aligns functions to the next 32\-byte
8141 boundary, but \fB\-falign\-functions=24\fR aligns to the next
8142 32\-byte boundary only if this can be done by skipping 23 bytes or less.
8143 .Sp
8144 \&\fB\-fno\-align\-functions\fR and \fB\-falign\-functions=1\fR are
8145 equivalent and mean that functions are not aligned.
8146 .Sp
8147 Some assemblers only support this flag when \fIn\fR is a power of two;
8148 in that case, it is rounded up.
8149 .Sp
8150 If \fIn\fR is not specified or is zero, use a machine-dependent default.
8151 .Sp
8152 Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
8153 .IP "\fB\-falign\-labels\fR" 4
8154 .IX Item "-falign-labels"
8155 .PD 0
8156 .IP "\fB\-falign\-labels=\fR\fIn\fR" 4
8157 .IX Item "-falign-labels=n"
8158 .PD
8159 Align all branch targets to a power-of-two boundary, skipping up to
8160 \&\fIn\fR bytes like \fB\-falign\-functions\fR.  This option can easily
8161 make code slower, because it must insert dummy operations for when the
8162 branch target is reached in the usual flow of the code.
8163 .Sp
8164 \&\fB\-fno\-align\-labels\fR and \fB\-falign\-labels=1\fR are
8165 equivalent and mean that labels are not aligned.
8166 .Sp
8167 If \fB\-falign\-loops\fR or \fB\-falign\-jumps\fR are applicable and
8168 are greater than this value, then their values are used instead.
8169 .Sp
8170 If \fIn\fR is not specified or is zero, use a machine-dependent default
8171 which is very likely to be \fB1\fR, meaning no alignment.
8172 .Sp
8173 Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
8174 .IP "\fB\-falign\-loops\fR" 4
8175 .IX Item "-falign-loops"
8176 .PD 0
8177 .IP "\fB\-falign\-loops=\fR\fIn\fR" 4
8178 .IX Item "-falign-loops=n"
8179 .PD
8180 Align loops to a power-of-two boundary, skipping up to \fIn\fR bytes
8181 like \fB\-falign\-functions\fR.  If the loops are
8182 executed many times, this makes up for any execution of the dummy
8183 operations.
8184 .Sp
8185 \&\fB\-fno\-align\-loops\fR and \fB\-falign\-loops=1\fR are
8186 equivalent and mean that loops are not aligned.
8187 .Sp
8188 If \fIn\fR is not specified or is zero, use a machine-dependent default.
8189 .Sp
8190 Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
8191 .IP "\fB\-falign\-jumps\fR" 4
8192 .IX Item "-falign-jumps"
8193 .PD 0
8194 .IP "\fB\-falign\-jumps=\fR\fIn\fR" 4
8195 .IX Item "-falign-jumps=n"
8196 .PD
8197 Align branch targets to a power-of-two boundary, for branch targets
8198 where the targets can only be reached by jumping, skipping up to \fIn\fR
8199 bytes like \fB\-falign\-functions\fR.  In this case, no dummy operations
8200 need be executed.
8201 .Sp
8202 \&\fB\-fno\-align\-jumps\fR and \fB\-falign\-jumps=1\fR are
8203 equivalent and mean that loops are not aligned.
8204 .Sp
8205 If \fIn\fR is not specified or is zero, use a machine-dependent default.
8206 .Sp
8207 Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
8208 .IP "\fB\-funit\-at\-a\-time\fR" 4
8209 .IX Item "-funit-at-a-time"
8210 This option is left for compatibility reasons. \fB\-funit\-at\-a\-time\fR
8211 has no effect, while \fB\-fno\-unit\-at\-a\-time\fR implies
8212 \&\fB\-fno\-toplevel\-reorder\fR and \fB\-fno\-section\-anchors\fR.
8213 .Sp
8214 Enabled by default.
8215 .IP "\fB\-fno\-toplevel\-reorder\fR" 4
8216 .IX Item "-fno-toplevel-reorder"
8217 Do not reorder top-level functions, variables, and \f(CW\*(C`asm\*(C'\fR
8218 statements.  Output them in the same order that they appear in the
8219 input file.  When this option is used, unreferenced static variables
8220 are not removed.  This option is intended to support existing code
8221 that relies on a particular ordering.  For new code, it is better to
8222 use attributes when possible.
8223 .Sp
8224 Enabled at level \fB\-O0\fR.  When disabled explicitly, it also implies
8225 \&\fB\-fno\-section\-anchors\fR, which is otherwise enabled at \fB\-O0\fR on some
8226 targets.
8227 .IP "\fB\-fweb\fR" 4
8228 .IX Item "-fweb"
8229 Constructs webs as commonly used for register allocation purposes and assign
8230 each web individual pseudo register.  This allows the register allocation pass
8231 to operate on pseudos directly, but also strengthens several other optimization
8232 passes, such as \s-1CSE\s0, loop optimizer and trivial dead code remover.  It can,
8233 however, make debugging impossible, since variables no longer stay in a
8234 \&\*(L"home register\*(R".
8235 .Sp
8236 Enabled by default with \fB\-funroll\-loops\fR.
8237 .IP "\fB\-fwhole\-program\fR" 4
8238 .IX Item "-fwhole-program"
8239 Assume that the current compilation unit represents the whole program being
8240 compiled.  All public functions and variables with the exception of \f(CW\*(C`main\*(C'\fR
8241 and those merged by attribute \f(CW\*(C`externally_visible\*(C'\fR become static functions
8242 and in effect are optimized more aggressively by interprocedural optimizers.
8243 .Sp
8244 This option should not be used in combination with \fB\-flto\fR.
8245 Instead relying on a linker plugin should provide safer and more precise
8246 information.
8247 .IP "\fB\-flto[=\fR\fIn\fR\fB]\fR" 4
8248 .IX Item "-flto[=n]"
8249 This option runs the standard link-time optimizer.  When invoked
8250 with source code, it generates \s-1GIMPLE\s0 (one of \s-1GCC\s0's internal
8251 representations) and writes it to special \s-1ELF\s0 sections in the object
8252 file.  When the object files are linked together, all the function
8253 bodies are read from these \s-1ELF\s0 sections and instantiated as if they
8254 had been part of the same translation unit.
8255 .Sp
8256 To use the link-time optimizer, \fB\-flto\fR and optimization
8257 options should be specified at compile time and during the final link.
8258 For example:
8259 .Sp
8260 .Vb 3
8261 \&        gcc \-c \-O2 \-flto foo.c
8262 \&        gcc \-c \-O2 \-flto bar.c
8263 \&        gcc \-o myprog \-flto \-O2 foo.o bar.o
8264 .Ve
8265 .Sp
8266 The first two invocations to \s-1GCC\s0 save a bytecode representation
8267 of \s-1GIMPLE\s0 into special \s-1ELF\s0 sections inside \fIfoo.o\fR and
8268 \&\fIbar.o\fR.  The final invocation reads the \s-1GIMPLE\s0 bytecode from
8269 \&\fIfoo.o\fR and \fIbar.o\fR, merges the two files into a single
8270 internal image, and compiles the result as usual.  Since both
8271 \&\fIfoo.o\fR and \fIbar.o\fR are merged into a single image, this
8272 causes all the interprocedural analyses and optimizations in \s-1GCC\s0 to
8273 work across the two files as if they were a single one.  This means,
8274 for example, that the inliner is able to inline functions in
8275 \&\fIbar.o\fR into functions in \fIfoo.o\fR and vice-versa.
8276 .Sp
8277 Another (simpler) way to enable link-time optimization is:
8278 .Sp
8279 .Vb 1
8280 \&        gcc \-o myprog \-flto \-O2 foo.c bar.c
8281 .Ve
8282 .Sp
8283 The above generates bytecode for \fIfoo.c\fR and \fIbar.c\fR,
8284 merges them together into a single \s-1GIMPLE\s0 representation and optimizes
8285 them as usual to produce \fImyprog\fR.
8286 .Sp
8287 The only important thing to keep in mind is that to enable link-time
8288 optimizations you need to use the \s-1GCC\s0 driver to perform the link-step.
8289 \&\s-1GCC\s0 then automatically performs link-time optimization if any of the
8290 objects involved were compiled with the \fB\-flto\fR.  You generally
8291 should specify the optimization options to be used for link-time
8292 optimization though \s-1GCC\s0 tries to be clever at guessing an
8293 optimization level to use from the options used at compile-time
8294 if you fail to specify one at link-time.  You can always override
8295 the automatic decision to do link-time optimization at link-time
8296 by passing \fB\-fno\-lto\fR to the link command.
8297 .Sp
8298 To make whole program optimization effective, it is necessary to make
8299 certain whole program assumptions.  The compiler needs to know
8300 what functions and variables can be accessed by libraries and runtime
8301 outside of the link-time optimized unit.  When supported by the linker,
8302 the linker plugin (see \fB\-fuse\-linker\-plugin\fR) passes information
8303 to the compiler about used and externally visible symbols.  When
8304 the linker plugin is not available, \fB\-fwhole\-program\fR should be
8305 used to allow the compiler to make these assumptions, which leads
8306 to more aggressive optimization decisions.
8307 .Sp
8308 When \fB\-fuse\-linker\-plugin\fR is not enabled then, when a file is
8309 compiled with \fB\-flto\fR, the generated object file is larger than
8310 a regular object file because it contains \s-1GIMPLE\s0 bytecodes and the usual
8311 final code (see \fB\-ffat\-lto\-objects\fR.  This means that
8312 object files with \s-1LTO\s0 information can be linked as normal object
8313 files; if \fB\-fno\-lto\fR is passed to the linker, no
8314 interprocedural optimizations are applied.  Note that when
8315 \&\fB\-fno\-fat\-lto\-objects\fR is enabled the compile-stage is faster
8316 but you cannot perform a regular, non-LTO link on them.
8317 .Sp
8318 Additionally, the optimization flags used to compile individual files
8319 are not necessarily related to those used at link time.  For instance,
8320 .Sp
8321 .Vb 3
8322 \&        gcc \-c \-O0 \-ffat\-lto\-objects \-flto foo.c
8323 \&        gcc \-c \-O0 \-ffat\-lto\-objects \-flto bar.c
8324 \&        gcc \-o myprog \-O3 foo.o bar.o
8325 .Ve
8326 .Sp
8327 This produces individual object files with unoptimized assembler
8328 code, but the resulting binary \fImyprog\fR is optimized at
8329 \&\fB\-O3\fR.  If, instead, the final binary is generated with
8330 \&\fB\-fno\-lto\fR, then \fImyprog\fR is not optimized.
8331 .Sp
8332 When producing the final binary, \s-1GCC\s0 only
8333 applies link-time optimizations to those files that contain bytecode.
8334 Therefore, you can mix and match object files and libraries with
8335 \&\s-1GIMPLE\s0 bytecodes and final object code.  \s-1GCC\s0 automatically selects
8336 which files to optimize in \s-1LTO\s0 mode and which files to link without
8337 further processing.
8338 .Sp
8339 There are some code generation flags preserved by \s-1GCC\s0 when
8340 generating bytecodes, as they need to be used during the final link
8341 stage.  Generally options specified at link-time override those
8342 specified at compile-time.
8343 .Sp
8344 If you do not specify an optimization level option \fB\-O\fR at
8345 link-time then \s-1GCC\s0 computes one based on the optimization levels
8346 used when compiling the object files.  The highest optimization
8347 level wins here.
8348 .Sp
8349 Currently, the following options and their setting are take from
8350 the first object file that explicitely specified it: 
8351 \&\fB\-fPIC\fR, \fB\-fpic\fR, \fB\-fpie\fR, \fB\-fcommon\fR,
8352 \&\fB\-fexceptions\fR, \fB\-fnon\-call\-exceptions\fR, \fB\-fgnu\-tm\fR
8353 and all the \fB\-m\fR target flags.
8354 .Sp
8355 Certain \s-1ABI\s0 changing flags are required to match in all compilation-units
8356 and trying to override this at link-time with a conflicting value
8357 is ignored.  This includes options such as \fB\-freg\-struct\-return\fR
8358 and \fB\-fpcc\-struct\-return\fR.
8359 .Sp
8360 Other options such as \fB\-ffp\-contract\fR, \fB\-fno\-strict\-overflow\fR,
8361 \&\fB\-fwrapv\fR, \fB\-fno\-trapv\fR or \fB\-fno\-strict\-aliasing\fR
8362 are passed through to the link stage and merged conservatively for
8363 conflicting translation units.  Specifically
8364 \&\fB\-fno\-strict\-overflow\fR, \fB\-fwrapv\fR and \fB\-fno\-trapv\fR take
8365 precedence and for example \fB\-ffp\-contract=off\fR takes precedence
8366 over \fB\-ffp\-contract=fast\fR.  You can override them at linke-time.
8367 .Sp
8368 It is recommended that you compile all the files participating in the
8369 same link with the same options and also specify those options at
8370 link time.
8371 .Sp
8372 If \s-1LTO\s0 encounters objects with C linkage declared with incompatible
8373 types in separate translation units to be linked together (undefined
8374 behavior according to \s-1ISO\s0 C99 6.2.7), a non-fatal diagnostic may be
8375 issued.  The behavior is still undefined at run time.  Similar
8376 diagnostics may be raised for other languages.
8377 .Sp
8378 Another feature of \s-1LTO\s0 is that it is possible to apply interprocedural
8379 optimizations on files written in different languages:
8380 .Sp
8381 .Vb 4
8382 \&        gcc \-c \-flto foo.c
8383 \&        g++ \-c \-flto bar.cc
8384 \&        gfortran \-c \-flto baz.f90
8385 \&        g++ \-o myprog \-flto \-O3 foo.o bar.o baz.o \-lgfortran
8386 .Ve
8387 .Sp
8388 Notice that the final link is done with \fBg++\fR to get the \*(C+
8389 runtime libraries and \fB\-lgfortran\fR is added to get the Fortran
8390 runtime libraries.  In general, when mixing languages in \s-1LTO\s0 mode, you
8391 should use the same link command options as when mixing languages in a
8392 regular (non-LTO) compilation.
8393 .Sp
8394 If object files containing \s-1GIMPLE\s0 bytecode are stored in a library archive, say
8395 \&\fIlibfoo.a\fR, it is possible to extract and use them in an \s-1LTO\s0 link if you
8396 are using a linker with plugin support.  To create static libraries suitable
8397 for \s-1LTO\s0, use \fBgcc-ar\fR and \fBgcc-ranlib\fR instead of \fBar\fR
8398 and \fBranlib\fR; 
8399 to show the symbols of object files with \s-1GIMPLE\s0 bytecode, use
8400 \&\fBgcc-nm\fR.  Those commands require that \fBar\fR, \fBranlib\fR
8401 and \fBnm\fR have been compiled with plugin support.  At link time, use the the
8402 flag \fB\-fuse\-linker\-plugin\fR to ensure that the library participates in
8403 the \s-1LTO\s0 optimization process:
8404 .Sp
8405 .Vb 1
8406 \&        gcc \-o myprog \-O2 \-flto \-fuse\-linker\-plugin a.o b.o \-lfoo
8407 .Ve
8408 .Sp
8409 With the linker plugin enabled, the linker extracts the needed
8410 \&\s-1GIMPLE\s0 files from \fIlibfoo.a\fR and passes them on to the running \s-1GCC\s0
8411 to make them part of the aggregated \s-1GIMPLE\s0 image to be optimized.
8412 .Sp
8413 If you are not using a linker with plugin support and/or do not
8414 enable the linker plugin, then the objects inside \fIlibfoo.a\fR
8415 are extracted and linked as usual, but they do not participate
8416 in the \s-1LTO\s0 optimization process.  In order to make a static library suitable
8417 for both \s-1LTO\s0 optimization and usual linkage, compile its object files with
8418 \&\fB\-flto\fR \fB\-ffat\-lto\-objects\fR.
8419 .Sp
8420 Link-time optimizations do not require the presence of the whole program to
8421 operate.  If the program does not require any symbols to be exported, it is
8422 possible to combine \fB\-flto\fR and \fB\-fwhole\-program\fR to allow
8423 the interprocedural optimizers to use more aggressive assumptions which may
8424 lead to improved optimization opportunities.
8425 Use of \fB\-fwhole\-program\fR is not needed when linker plugin is
8426 active (see \fB\-fuse\-linker\-plugin\fR).
8427 .Sp
8428 The current implementation of \s-1LTO\s0 makes no
8429 attempt to generate bytecode that is portable between different
8430 types of hosts.  The bytecode files are versioned and there is a
8431 strict version check, so bytecode files generated in one version of
8432 \&\s-1GCC\s0 do not work with an older or newer version of \s-1GCC\s0.
8433 .Sp
8434 Link-time optimization does not work well with generation of debugging
8435 information.  Combining \fB\-flto\fR with
8436 \&\fB\-g\fR is currently experimental and expected to produce unexpected
8437 results.
8438 .Sp
8439 If you specify the optional \fIn\fR, the optimization and code
8440 generation done at link time is executed in parallel using \fIn\fR
8441 parallel jobs by utilizing an installed \fBmake\fR program.  The
8442 environment variable \fB\s-1MAKE\s0\fR may be used to override the program
8443 used.  The default value for \fIn\fR is 1.
8444 .Sp
8445 You can also specify \fB\-flto=jobserver\fR to use \s-1GNU\s0 make's
8446 job server mode to determine the number of parallel jobs. This
8447 is useful when the Makefile calling \s-1GCC\s0 is already executing in parallel.
8448 You must prepend a \fB+\fR to the command recipe in the parent Makefile
8449 for this to work.  This option likely only works if \fB\s-1MAKE\s0\fR is
8450 \&\s-1GNU\s0 make.
8451 .IP "\fB\-flto\-partition=\fR\fIalg\fR" 4
8452 .IX Item "-flto-partition=alg"
8453 Specify the partitioning algorithm used by the link-time optimizer.
8454 The value is either \fB1to1\fR to specify a partitioning mirroring
8455 the original source files or \fBbalanced\fR to specify partitioning
8456 into equally sized chunks (whenever possible) or \fBmax\fR to create
8457 new partition for every symbol where possible.  Specifying \fBnone\fR
8458 as an algorithm disables partitioning and streaming completely. 
8459 The default value is \fBbalanced\fR. While \fB1to1\fR can be used
8460 as an workaround for various code ordering issues, the \fBmax\fR
8461 partitioning is intended for internal testing only.
8462 The value \fBone\fR specifies that exactly one partition should be
8463 used while the value \fBnone\fR bypasses partitioning and executes
8464 the link-time optimization step directly from the \s-1WPA\s0 phase.
8465 .IP "\fB\-flto\-odr\-type\-merging\fR" 4
8466 .IX Item "-flto-odr-type-merging"
8467 Enable streaming of mangled types names of \*(C+ types and their unification
8468 at linktime.  This increases size of \s-1LTO\s0 object files, but enable
8469 diagnostics about One Definition Rule violations.
8470 .IP "\fB\-flto\-compression\-level=\fR\fIn\fR" 4
8471 .IX Item "-flto-compression-level=n"
8472 This option specifies the level of compression used for intermediate
8473 language written to \s-1LTO\s0 object files, and is only meaningful in
8474 conjunction with \s-1LTO\s0 mode (\fB\-flto\fR).  Valid
8475 values are 0 (no compression) to 9 (maximum compression).  Values
8476 outside this range are clamped to either 0 or 9.  If the option is not
8477 given, a default balanced compression setting is used.
8478 .IP "\fB\-flto\-report\fR" 4
8479 .IX Item "-flto-report"
8480 Prints a report with internal details on the workings of the link-time
8481 optimizer.  The contents of this report vary from version to version.
8482 It is meant to be useful to \s-1GCC\s0 developers when processing object
8483 files in \s-1LTO\s0 mode (via \fB\-flto\fR).
8484 .Sp
8485 Disabled by default.
8486 .IP "\fB\-flto\-report\-wpa\fR" 4
8487 .IX Item "-flto-report-wpa"
8488 Like \fB\-flto\-report\fR, but only print for the \s-1WPA\s0 phase of Link
8489 Time Optimization.
8490 .IP "\fB\-fuse\-linker\-plugin\fR" 4
8491 .IX Item "-fuse-linker-plugin"
8492 Enables the use of a linker plugin during link-time optimization.  This
8493 option relies on plugin support in the linker, which is available in gold
8494 or in \s-1GNU\s0 ld 2.21 or newer.
8495 .Sp
8496 This option enables the extraction of object files with \s-1GIMPLE\s0 bytecode out
8497 of library archives. This improves the quality of optimization by exposing
8498 more code to the link-time optimizer.  This information specifies what
8499 symbols can be accessed externally (by non-LTO object or during dynamic
8500 linking).  Resulting code quality improvements on binaries (and shared
8501 libraries that use hidden visibility) are similar to \fB\-fwhole\-program\fR.
8502 See \fB\-flto\fR for a description of the effect of this flag and how to
8503 use it.
8504 .Sp
8505 This option is enabled by default when \s-1LTO\s0 support in \s-1GCC\s0 is enabled
8506 and \s-1GCC\s0 was configured for use with
8507 a linker supporting plugins (\s-1GNU\s0 ld 2.21 or newer or gold).
8508 .IP "\fB\-ffat\-lto\-objects\fR" 4
8509 .IX Item "-ffat-lto-objects"
8510 Fat \s-1LTO\s0 objects are object files that contain both the intermediate language
8511 and the object code. This makes them usable for both \s-1LTO\s0 linking and normal
8512 linking. This option is effective only when compiling with \fB\-flto\fR
8513 and is ignored at link time.
8514 .Sp
8515 \&\fB\-fno\-fat\-lto\-objects\fR improves compilation time over plain \s-1LTO\s0, but
8516 requires the complete toolchain to be aware of \s-1LTO\s0. It requires a linker with
8517 linker plugin support for basic functionality.  Additionally,
8518 \&\fBnm\fR, \fBar\fR and \fBranlib\fR
8519 need to support linker plugins to allow a full-featured build environment
8520 (capable of building static libraries etc).  \s-1GCC\s0 provides the \fBgcc-ar\fR,
8521 \&\fBgcc-nm\fR, \fBgcc-ranlib\fR wrappers to pass the right options
8522 to these tools. With non fat \s-1LTO\s0 makefiles need to be modified to use them.
8523 .Sp
8524 The default is \fB\-fno\-fat\-lto\-objects\fR on targets with linker plugin
8525 support.
8526 .IP "\fB\-fcompare\-elim\fR" 4
8527 .IX Item "-fcompare-elim"
8528 After register allocation and post-register allocation instruction splitting,
8529 identify arithmetic instructions that compute processor flags similar to a
8530 comparison operation based on that arithmetic.  If possible, eliminate the
8531 explicit comparison operation.
8532 .Sp
8533 This pass only applies to certain targets that cannot explicitly represent
8534 the comparison operation before register allocation is complete.
8535 .Sp
8536 Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
8537 .IP "\fB\-fuse\-ld=bfd\fR" 4
8538 .IX Item "-fuse-ld=bfd"
8539 Use the \fBbfd\fR linker instead of the default linker.
8540 .IP "\fB\-fuse\-ld=gold\fR" 4
8541 .IX Item "-fuse-ld=gold"
8542 Use the \fBgold\fR linker instead of the default linker.
8543 .IP "\fB\-fcprop\-registers\fR" 4
8544 .IX Item "-fcprop-registers"
8545 After register allocation and post-register allocation instruction splitting,
8546 perform a copy-propagation pass to try to reduce scheduling dependencies
8547 and occasionally eliminate the copy.
8548 .Sp
8549 Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
8550 .IP "\fB\-fprofile\-correction\fR" 4
8551 .IX Item "-fprofile-correction"
8552 Profiles collected using an instrumented binary for multi-threaded programs may
8553 be inconsistent due to missed counter updates. When this option is specified,
8554 \&\s-1GCC\s0 uses heuristics to correct or smooth out such inconsistencies. By
8555 default, \s-1GCC\s0 emits an error message when an inconsistent profile is detected.
8556 .IP "\fB\-fprofile\-dir=\fR\fIpath\fR" 4
8557 .IX Item "-fprofile-dir=path"
8558 Set the directory to search for the profile data files in to \fIpath\fR.
8559 This option affects only the profile data generated by
8560 \&\fB\-fprofile\-generate\fR, \fB\-ftest\-coverage\fR, \fB\-fprofile\-arcs\fR
8561 and used by \fB\-fprofile\-use\fR and \fB\-fbranch\-probabilities\fR
8562 and its related options.  Both absolute and relative paths can be used.
8563 By default, \s-1GCC\s0 uses the current directory as \fIpath\fR, thus the
8564 profile data file appears in the same directory as the object file.
8565 .IP "\fB\-fprofile\-generate\fR" 4
8566 .IX Item "-fprofile-generate"
8567 .PD 0
8568 .IP "\fB\-fprofile\-generate=\fR\fIpath\fR" 4
8569 .IX Item "-fprofile-generate=path"
8570 .PD
8571 Enable options usually used for instrumenting application to produce
8572 profile useful for later recompilation with profile feedback based
8573 optimization.  You must use \fB\-fprofile\-generate\fR both when
8574 compiling and when linking your program.
8575 .Sp
8576 The following options are enabled: \fB\-fprofile\-arcs\fR, \fB\-fprofile\-values\fR, \fB\-fvpt\fR.
8577 .Sp
8578 If \fIpath\fR is specified, \s-1GCC\s0 looks at the \fIpath\fR to find
8579 the profile feedback data files. See \fB\-fprofile\-dir\fR.
8580 .IP "\fB\-fprofile\-use\fR" 4
8581 .IX Item "-fprofile-use"
8582 .PD 0
8583 .IP "\fB\-fprofile\-use=\fR\fIpath\fR" 4
8584 .IX Item "-fprofile-use=path"
8585 .PD
8586 Enable profile feedback-directed optimizations, 
8587 and the following optimizations
8588 which are generally profitable only with profile feedback available:
8589 \&\fB\-fbranch\-probabilities\fR, \fB\-fvpt\fR,
8590 \&\fB\-funroll\-loops\fR, \fB\-fpeel\-loops\fR, \fB\-ftracer\fR, 
8591 \&\fB\-ftree\-vectorize\fR, and \fBftree-loop-distribute-patterns\fR.
8592 .Sp
8593 By default, \s-1GCC\s0 emits an error message if the feedback profiles do not
8594 match the source code.  This error can be turned into a warning by using
8595 \&\fB\-Wcoverage\-mismatch\fR.  Note this may result in poorly optimized
8596 code.
8597 .Sp
8598 If \fIpath\fR is specified, \s-1GCC\s0 looks at the \fIpath\fR to find
8599 the profile feedback data files. See \fB\-fprofile\-dir\fR.
8600 .IP "\fB\-fauto\-profile\fR" 4
8601 .IX Item "-fauto-profile"
8602 .PD 0
8603 .IP "\fB\-fauto\-profile=\fR\fIpath\fR" 4
8604 .IX Item "-fauto-profile=path"
8605 .PD
8606 Enable sampling-based feedback-directed optimizations, 
8607 and the following optimizations
8608 which are generally profitable only with profile feedback available:
8609 \&\fB\-fbranch\-probabilities\fR, \fB\-fvpt\fR,
8610 \&\fB\-funroll\-loops\fR, \fB\-fpeel\-loops\fR, \fB\-ftracer\fR, 
8611 \&\fB\-ftree\-vectorize\fR,
8612 \&\fB\-finline\-functions\fR, \fB\-fipa\-cp\fR, \fB\-fipa\-cp\-clone\fR,
8613 \&\fB\-fpredictive\-commoning\fR, \fB\-funswitch\-loops\fR,
8614 \&\fB\-fgcse\-after\-reload\fR, and \fB\-ftree\-loop\-distribute\-patterns\fR.
8615 .Sp
8616 \&\fIpath\fR is the name of a file containing AutoFDO profile information.
8617 If omitted, it defaults to \fIfbdata.afdo\fR in the current directory.
8618 .Sp
8619 Producing an AutoFDO profile data file requires running your program
8620 with the \fBperf\fR utility on a supported GNU/Linux target system.
8621 For more information, see <\fBhttps://perf.wiki.kernel.org/\fR>.
8622 .Sp
8623 E.g.
8624 .Sp
8625 .Vb 2
8626 \&        perf record \-e br_inst_retired:near_taken \-b \-o perf.data \e
8627 \&            \-\- your_program
8628 .Ve
8629 .Sp
8630 Then use the \fBcreate_gcov\fR tool to convert the raw profile data
8631 to a format that can be used by \s-1GCC\s0.  You must also supply the 
8632 unstripped binary for your program to this tool.  
8633 See <\fBhttps://github.com/google/autofdo\fR>.
8634 .Sp
8635 E.g.
8636 .Sp
8637 .Vb 2
8638 \&        create_gcov \-\-binary=your_program.unstripped \-\-profile=perf.data \e
8639 \&            \-\-gcov=profile.afdo
8640 .Ve
8641 .PP
8642 The following options control compiler behavior regarding floating-point 
8643 arithmetic.  These options trade off between speed and
8644 correctness.  All must be specifically enabled.
8645 .IP "\fB\-ffloat\-store\fR" 4
8646 .IX Item "-ffloat-store"
8647 Do not store floating-point variables in registers, and inhibit other
8648 options that might change whether a floating-point value is taken from a
8649 register or memory.
8650 .Sp
8651 This option prevents undesirable excess precision on machines such as
8652 the 68000 where the floating registers (of the 68881) keep more
8653 precision than a \f(CW\*(C`double\*(C'\fR is supposed to have.  Similarly for the
8654 x86 architecture.  For most programs, the excess precision does only
8655 good, but a few programs rely on the precise definition of \s-1IEEE\s0 floating
8656 point.  Use \fB\-ffloat\-store\fR for such programs, after modifying
8657 them to store all pertinent intermediate computations into variables.
8658 .IP "\fB\-fexcess\-precision=\fR\fIstyle\fR" 4
8659 .IX Item "-fexcess-precision=style"
8660 This option allows further control over excess precision on machines
8661 where floating-point registers have more precision than the \s-1IEEE\s0
8662 \&\f(CW\*(C`float\*(C'\fR and \f(CW\*(C`double\*(C'\fR types and the processor does not
8663 support operations rounding to those types.  By default,
8664 \&\fB\-fexcess\-precision=fast\fR is in effect; this means that
8665 operations are carried out in the precision of the registers and that
8666 it is unpredictable when rounding to the types specified in the source
8667 code takes place.  When compiling C, if
8668 \&\fB\-fexcess\-precision=standard\fR is specified then excess
8669 precision follows the rules specified in \s-1ISO\s0 C99; in particular,
8670 both casts and assignments cause values to be rounded to their
8671 semantic types (whereas \fB\-ffloat\-store\fR only affects
8672 assignments).  This option is enabled by default for C if a strict
8673 conformance option such as \fB\-std=c99\fR is used.
8674 .Sp
8675 \&\fB\-fexcess\-precision=standard\fR is not implemented for languages
8676 other than C, and has no effect if
8677 \&\fB\-funsafe\-math\-optimizations\fR or \fB\-ffast\-math\fR is
8678 specified.  On the x86, it also has no effect if \fB\-mfpmath=sse\fR
8679 or \fB\-mfpmath=sse+387\fR is specified; in the former case, \s-1IEEE\s0
8680 semantics apply without excess precision, and in the latter, rounding
8681 is unpredictable.
8682 .IP "\fB\-ffast\-math\fR" 4
8683 .IX Item "-ffast-math"
8684 Sets the options \fB\-fno\-math\-errno\fR, \fB\-funsafe\-math\-optimizations\fR,
8685 \&\fB\-ffinite\-math\-only\fR, \fB\-fno\-rounding\-math\fR,
8686 \&\fB\-fno\-signaling\-nans\fR and \fB\-fcx\-limited\-range\fR.
8687 .Sp
8688 This option causes the preprocessor macro \f(CW\*(C`_\|_FAST_MATH_\|_\*(C'\fR to be defined.
8689 .Sp
8690 This option is not turned on by any \fB\-O\fR option besides
8691 \&\fB\-Ofast\fR since it can result in incorrect output for programs
8692 that depend on an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications
8693 for math functions. It may, however, yield faster code for programs
8694 that do not require the guarantees of these specifications.
8695 .IP "\fB\-fno\-math\-errno\fR" 4
8696 .IX Item "-fno-math-errno"
8697 Do not set \f(CW\*(C`errno\*(C'\fR after calling math functions that are executed
8698 with a single instruction, e.g., \f(CW\*(C`sqrt\*(C'\fR.  A program that relies on
8699 \&\s-1IEEE\s0 exceptions for math error handling may want to use this flag
8700 for speed while maintaining \s-1IEEE\s0 arithmetic compatibility.
8701 .Sp
8702 This option is not turned on by any \fB\-O\fR option since
8703 it can result in incorrect output for programs that depend on
8704 an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
8705 math functions. It may, however, yield faster code for programs
8706 that do not require the guarantees of these specifications.
8707 .Sp
8708 The default is \fB\-fmath\-errno\fR.
8709 .Sp
8710 On Darwin systems, the math library never sets \f(CW\*(C`errno\*(C'\fR.  There is
8711 therefore no reason for the compiler to consider the possibility that
8712 it might, and \fB\-fno\-math\-errno\fR is the default.
8713 .IP "\fB\-funsafe\-math\-optimizations\fR" 4
8714 .IX Item "-funsafe-math-optimizations"
8715 Allow optimizations for floating-point arithmetic that (a) assume
8716 that arguments and results are valid and (b) may violate \s-1IEEE\s0 or
8717 \&\s-1ANSI\s0 standards.  When used at link-time, it may include libraries
8718 or startup files that change the default \s-1FPU\s0 control word or other
8719 similar optimizations.
8720 .Sp
8721 This option is not turned on by any \fB\-O\fR option since
8722 it can result in incorrect output for programs that depend on
8723 an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
8724 math functions. It may, however, yield faster code for programs
8725 that do not require the guarantees of these specifications.
8726 Enables \fB\-fno\-signed\-zeros\fR, \fB\-fno\-trapping\-math\fR,
8727 \&\fB\-fassociative\-math\fR and \fB\-freciprocal\-math\fR.
8728 .Sp
8729 The default is \fB\-fno\-unsafe\-math\-optimizations\fR.
8730 .IP "\fB\-fassociative\-math\fR" 4
8731 .IX Item "-fassociative-math"
8732 Allow re-association of operands in series of floating-point operations.
8733 This violates the \s-1ISO\s0 C and \*(C+ language standard by possibly changing
8734 computation result.  \s-1NOTE:\s0 re-ordering may change the sign of zero as
8735 well as ignore NaNs and inhibit or create underflow or overflow (and
8736 thus cannot be used on code that relies on rounding behavior like
8737 \&\f(CW\*(C`(x + 2**52) \- 2**52\*(C'\fR.  May also reorder floating-point comparisons
8738 and thus may not be used when ordered comparisons are required.
8739 This option requires that both \fB\-fno\-signed\-zeros\fR and
8740 \&\fB\-fno\-trapping\-math\fR be in effect.  Moreover, it doesn't make
8741 much sense with \fB\-frounding\-math\fR. For Fortran the option
8742 is automatically enabled when both \fB\-fno\-signed\-zeros\fR and
8743 \&\fB\-fno\-trapping\-math\fR are in effect.
8744 .Sp
8745 The default is \fB\-fno\-associative\-math\fR.
8746 .IP "\fB\-freciprocal\-math\fR" 4
8747 .IX Item "-freciprocal-math"
8748 Allow the reciprocal of a value to be used instead of dividing by
8749 the value if this enables optimizations.  For example \f(CW\*(C`x / y\*(C'\fR
8750 can be replaced with \f(CW\*(C`x * (1/y)\*(C'\fR, which is useful if \f(CW\*(C`(1/y)\*(C'\fR
8751 is subject to common subexpression elimination.  Note that this loses
8752 precision and increases the number of flops operating on the value.
8753 .Sp
8754 The default is \fB\-fno\-reciprocal\-math\fR.
8755 .IP "\fB\-ffinite\-math\-only\fR" 4
8756 .IX Item "-ffinite-math-only"
8757 Allow optimizations for floating-point arithmetic that assume
8758 that arguments and results are not NaNs or +\-Infs.
8759 .Sp
8760 This option is not turned on by any \fB\-O\fR option since
8761 it can result in incorrect output for programs that depend on
8762 an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
8763 math functions. It may, however, yield faster code for programs
8764 that do not require the guarantees of these specifications.
8765 .Sp
8766 The default is \fB\-fno\-finite\-math\-only\fR.
8767 .IP "\fB\-fno\-signed\-zeros\fR" 4
8768 .IX Item "-fno-signed-zeros"
8769 Allow optimizations for floating-point arithmetic that ignore the
8770 signedness of zero.  \s-1IEEE\s0 arithmetic specifies the behavior of
8771 distinct +0.0 and \-0.0 values, which then prohibits simplification
8772 of expressions such as x+0.0 or 0.0*x (even with \fB\-ffinite\-math\-only\fR).
8773 This option implies that the sign of a zero result isn't significant.
8774 .Sp
8775 The default is \fB\-fsigned\-zeros\fR.
8776 .IP "\fB\-fno\-trapping\-math\fR" 4
8777 .IX Item "-fno-trapping-math"
8778 Compile code assuming that floating-point operations cannot generate
8779 user-visible traps.  These traps include division by zero, overflow,
8780 underflow, inexact result and invalid operation.  This option requires
8781 that \fB\-fno\-signaling\-nans\fR be in effect.  Setting this option may
8782 allow faster code if one relies on \*(L"non-stop\*(R" \s-1IEEE\s0 arithmetic, for example.
8783 .Sp
8784 This option should never be turned on by any \fB\-O\fR option since
8785 it can result in incorrect output for programs that depend on
8786 an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
8787 math functions.
8788 .Sp
8789 The default is \fB\-ftrapping\-math\fR.
8790 .IP "\fB\-frounding\-math\fR" 4
8791 .IX Item "-frounding-math"
8792 Disable transformations and optimizations that assume default floating-point
8793 rounding behavior.  This is round-to-zero for all floating point
8794 to integer conversions, and round-to-nearest for all other arithmetic
8795 truncations.  This option should be specified for programs that change
8796 the \s-1FP\s0 rounding mode dynamically, or that may be executed with a
8797 non-default rounding mode.  This option disables constant folding of
8798 floating-point expressions at compile time (which may be affected by
8799 rounding mode) and arithmetic transformations that are unsafe in the
8800 presence of sign-dependent rounding modes.
8801 .Sp
8802 The default is \fB\-fno\-rounding\-math\fR.
8803 .Sp
8804 This option is experimental and does not currently guarantee to
8805 disable all \s-1GCC\s0 optimizations that are affected by rounding mode.
8806 Future versions of \s-1GCC\s0 may provide finer control of this setting
8807 using C99's \f(CW\*(C`FENV_ACCESS\*(C'\fR pragma.  This command-line option
8808 will be used to specify the default state for \f(CW\*(C`FENV_ACCESS\*(C'\fR.
8809 .IP "\fB\-fsignaling\-nans\fR" 4
8810 .IX Item "-fsignaling-nans"
8811 Compile code assuming that \s-1IEEE\s0 signaling NaNs may generate user-visible
8812 traps during floating-point operations.  Setting this option disables
8813 optimizations that may change the number of exceptions visible with
8814 signaling NaNs.  This option implies \fB\-ftrapping\-math\fR.
8815 .Sp
8816 This option causes the preprocessor macro \f(CW\*(C`_\|_SUPPORT_SNAN_\|_\*(C'\fR to
8817 be defined.
8818 .Sp
8819 The default is \fB\-fno\-signaling\-nans\fR.
8820 .Sp
8821 This option is experimental and does not currently guarantee to
8822 disable all \s-1GCC\s0 optimizations that affect signaling NaN behavior.
8823 .IP "\fB\-fsingle\-precision\-constant\fR" 4
8824 .IX Item "-fsingle-precision-constant"
8825 Treat floating-point constants as single precision instead of
8826 implicitly converting them to double-precision constants.
8827 .IP "\fB\-fcx\-limited\-range\fR" 4
8828 .IX Item "-fcx-limited-range"
8829 When enabled, this option states that a range reduction step is not
8830 needed when performing complex division.  Also, there is no checking
8831 whether the result of a complex multiplication or division is \f(CW\*(C`NaN
8832 + I*NaN\*(C'\fR, with an attempt to rescue the situation in that case.  The
8833 default is \fB\-fno\-cx\-limited\-range\fR, but is enabled by
8834 \&\fB\-ffast\-math\fR.
8835 .Sp
8836 This option controls the default setting of the \s-1ISO\s0 C99
8837 \&\f(CW\*(C`CX_LIMITED_RANGE\*(C'\fR pragma.  Nevertheless, the option applies to
8838 all languages.
8839 .IP "\fB\-fcx\-fortran\-rules\fR" 4
8840 .IX Item "-fcx-fortran-rules"
8841 Complex multiplication and division follow Fortran rules.  Range
8842 reduction is done as part of complex division, but there is no checking
8843 whether the result of a complex multiplication or division is \f(CW\*(C`NaN
8844 + I*NaN\*(C'\fR, with an attempt to rescue the situation in that case.
8845 .Sp
8846 The default is \fB\-fno\-cx\-fortran\-rules\fR.
8847 .PP
8848 The following options control optimizations that may improve
8849 performance, but are not enabled by any \fB\-O\fR options.  This
8850 section includes experimental options that may produce broken code.
8851 .IP "\fB\-fbranch\-probabilities\fR" 4
8852 .IX Item "-fbranch-probabilities"
8853 After running a program compiled with \fB\-fprofile\-arcs\fR, you can compile it a second time using
8854 \&\fB\-fbranch\-probabilities\fR, to improve optimizations based on
8855 the number of times each branch was taken.  When a program
8856 compiled with \fB\-fprofile\-arcs\fR exits, it saves arc execution
8857 counts to a file called \fI\fIsourcename\fI.gcda\fR for each source
8858 file.  The information in this data file is very dependent on the
8859 structure of the generated code, so you must use the same source code
8860 and the same optimization options for both compilations.
8861 .Sp
8862 With \fB\-fbranch\-probabilities\fR, \s-1GCC\s0 puts a
8863 \&\fB\s-1REG_BR_PROB\s0\fR note on each \fB\s-1JUMP_INSN\s0\fR and \fB\s-1CALL_INSN\s0\fR.
8864 These can be used to improve optimization.  Currently, they are only
8865 used in one place: in \fIreorg.c\fR, instead of guessing which path a
8866 branch is most likely to take, the \fB\s-1REG_BR_PROB\s0\fR values are used to
8867 exactly determine which path is taken more often.
8868 .IP "\fB\-fprofile\-values\fR" 4
8869 .IX Item "-fprofile-values"
8870 If combined with \fB\-fprofile\-arcs\fR, it adds code so that some
8871 data about values of expressions in the program is gathered.
8872 .Sp
8873 With \fB\-fbranch\-probabilities\fR, it reads back the data gathered
8874 from profiling values of expressions for usage in optimizations.
8875 .Sp
8876 Enabled with \fB\-fprofile\-generate\fR and \fB\-fprofile\-use\fR.
8877 .IP "\fB\-fprofile\-reorder\-functions\fR" 4
8878 .IX Item "-fprofile-reorder-functions"
8879 Function reordering based on profile instrumentation collects
8880 first time of execution of a function and orders these functions
8881 in ascending order.
8882 .Sp
8883 Enabled with \fB\-fprofile\-use\fR.
8884 .IP "\fB\-fvpt\fR" 4
8885 .IX Item "-fvpt"
8886 If combined with \fB\-fprofile\-arcs\fR, this option instructs the compiler
8887 to add code to gather information about values of expressions.
8888 .Sp
8889 With \fB\-fbranch\-probabilities\fR, it reads back the data gathered
8890 and actually performs the optimizations based on them.
8891 Currently the optimizations include specialization of division operations
8892 using the knowledge about the value of the denominator.
8893 .IP "\fB\-frename\-registers\fR" 4
8894 .IX Item "-frename-registers"
8895 Attempt to avoid false dependencies in scheduled code by making use
8896 of registers left over after register allocation.  This optimization
8897 most benefits processors with lots of registers.  Depending on the
8898 debug information format adopted by the target, however, it can
8899 make debugging impossible, since variables no longer stay in
8900 a \*(L"home register\*(R".
8901 .Sp
8902 Enabled by default with \fB\-funroll\-loops\fR and \fB\-fpeel\-loops\fR.
8903 .IP "\fB\-fschedule\-fusion\fR" 4
8904 .IX Item "-fschedule-fusion"
8905 Performs a target dependent pass over the instruction stream to schedule
8906 instructions of same type together because target machine can execute them
8907 more efficiently if they are adjacent to each other in the instruction flow.
8908 .Sp
8909 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
8910 .IP "\fB\-ftracer\fR" 4
8911 .IX Item "-ftracer"
8912 Perform tail duplication to enlarge superblock size.  This transformation
8913 simplifies the control flow of the function allowing other optimizations to do
8914 a better job.
8915 .Sp
8916 Enabled with \fB\-fprofile\-use\fR.
8917 .IP "\fB\-funroll\-loops\fR" 4
8918 .IX Item "-funroll-loops"
8919 Unroll loops whose number of iterations can be determined at compile time or
8920 upon entry to the loop.  \fB\-funroll\-loops\fR implies
8921 \&\fB\-frerun\-cse\-after\-loop\fR, \fB\-fweb\fR and \fB\-frename\-registers\fR.
8922 It also turns on complete loop peeling (i.e. complete removal of loops with
8923 a small constant number of iterations).  This option makes code larger, and may
8924 or may not make it run faster.
8925 .Sp
8926 Enabled with \fB\-fprofile\-use\fR.
8927 .IP "\fB\-funroll\-all\-loops\fR" 4
8928 .IX Item "-funroll-all-loops"
8929 Unroll all loops, even if their number of iterations is uncertain when
8930 the loop is entered.  This usually makes programs run more slowly.
8931 \&\fB\-funroll\-all\-loops\fR implies the same options as
8932 \&\fB\-funroll\-loops\fR.
8933 .IP "\fB\-fpeel\-loops\fR" 4
8934 .IX Item "-fpeel-loops"
8935 Peels loops for which there is enough information that they do not
8936 roll much (from profile feedback).  It also turns on complete loop peeling
8937 (i.e. complete removal of loops with small constant number of iterations).
8938 .Sp
8939 Enabled with \fB\-fprofile\-use\fR.
8940 .IP "\fB\-fmove\-loop\-invariants\fR" 4
8941 .IX Item "-fmove-loop-invariants"
8942 Enables the loop invariant motion pass in the \s-1RTL\s0 loop optimizer.  Enabled
8943 at level \fB\-O1\fR
8944 .IP "\fB\-funswitch\-loops\fR" 4
8945 .IX Item "-funswitch-loops"
8946 Move branches with loop invariant conditions out of the loop, with duplicates
8947 of the loop on both branches (modified according to result of the condition).
8948 .IP "\fB\-ffunction\-sections\fR" 4
8949 .IX Item "-ffunction-sections"
8950 .PD 0
8951 .IP "\fB\-fdata\-sections\fR" 4
8952 .IX Item "-fdata-sections"
8953 .PD
8954 Place each function or data item into its own section in the output
8955 file if the target supports arbitrary sections.  The name of the
8956 function or the name of the data item determines the section's name
8957 in the output file.
8958 .Sp
8959 Use these options on systems where the linker can perform optimizations
8960 to improve locality of reference in the instruction space.  Most systems
8961 using the \s-1ELF\s0 object format and \s-1SPARC\s0 processors running Solaris 2 have
8962 linkers with such optimizations.  \s-1AIX\s0 may have these optimizations in
8963 the future.
8964 .Sp
8965 Only use these options when there are significant benefits from doing
8966 so.  When you specify these options, the assembler and linker
8967 create larger object and executable files and are also slower.
8968 You cannot use \fBgprof\fR on all systems if you
8969 specify this option, and you may have problems with debugging if
8970 you specify both this option and \fB\-g\fR.
8971 .IP "\fB\-fbranch\-target\-load\-optimize\fR" 4
8972 .IX Item "-fbranch-target-load-optimize"
8973 Perform branch target register load optimization before prologue / epilogue
8974 threading.
8975 The use of target registers can typically be exposed only during reload,
8976 thus hoisting loads out of loops and doing inter-block scheduling needs
8977 a separate optimization pass.
8978 .IP "\fB\-fbranch\-target\-load\-optimize2\fR" 4
8979 .IX Item "-fbranch-target-load-optimize2"
8980 Perform branch target register load optimization after prologue / epilogue
8981 threading.
8982 .IP "\fB\-fbtr\-bb\-exclusive\fR" 4
8983 .IX Item "-fbtr-bb-exclusive"
8984 When performing branch target register load optimization, don't reuse
8985 branch target registers within any basic block.
8986 .IP "\fB\-fstack\-protector\fR" 4
8987 .IX Item "-fstack-protector"
8988 Emit extra code to check for buffer overflows, such as stack smashing
8989 attacks.  This is done by adding a guard variable to functions with
8990 vulnerable objects.  This includes functions that call \f(CW\*(C`alloca\*(C'\fR, and
8991 functions with buffers larger than 8 bytes.  The guards are initialized
8992 when a function is entered and then checked when the function exits.
8993 If a guard check fails, an error message is printed and the program exits.
8994 .IP "\fB\-fstack\-protector\-all\fR" 4
8995 .IX Item "-fstack-protector-all"
8996 Like \fB\-fstack\-protector\fR except that all functions are protected.
8997 .IP "\fB\-fstack\-protector\-strong\fR" 4
8998 .IX Item "-fstack-protector-strong"
8999 Like \fB\-fstack\-protector\fR but includes additional functions to
9000 be protected \-\-\- those that have local array definitions, or have
9001 references to local frame addresses.
9002 .IP "\fB\-fsection\-anchors\fR" 4
9003 .IX Item "-fsection-anchors"
9004 Try to reduce the number of symbolic address calculations by using
9005 shared \*(L"anchor\*(R" symbols to address nearby objects.  This transformation
9006 can help to reduce the number of \s-1GOT\s0 entries and \s-1GOT\s0 accesses on some
9007 targets.
9008 .Sp
9009 For example, the implementation of the following function \f(CW\*(C`foo\*(C'\fR:
9010 .Sp
9011 .Vb 2
9012 \&        static int a, b, c;
9013 \&        int foo (void) { return a + b + c; }
9014 .Ve
9015 .Sp
9016 usually calculates the addresses of all three variables, but if you
9017 compile it with \fB\-fsection\-anchors\fR, it accesses the variables
9018 from a common anchor point instead.  The effect is similar to the
9019 following pseudocode (which isn't valid C):
9020 .Sp
9021 .Vb 5
9022 \&        int foo (void)
9023 \&        {
9024 \&          register int *xr = &x;
9025 \&          return xr[&a \- &x] + xr[&b \- &x] + xr[&c \- &x];
9026 \&        }
9027 .Ve
9028 .Sp
9029 Not all targets support this option.
9030 .IP "\fB\-\-param\fR \fIname\fR\fB=\fR\fIvalue\fR" 4
9031 .IX Item "--param name=value"
9032 In some places, \s-1GCC\s0 uses various constants to control the amount of
9033 optimization that is done.  For example, \s-1GCC\s0 does not inline functions
9034 that contain more than a certain number of instructions.  You can
9035 control some of these constants on the command line using the
9036 \&\fB\-\-param\fR option.
9037 .Sp
9038 The names of specific parameters, and the meaning of the values, are
9039 tied to the internals of the compiler, and are subject to change
9040 without notice in future releases.
9041 .Sp
9042 In each case, the \fIvalue\fR is an integer.  The allowable choices for
9043 \&\fIname\fR are:
9044 .RS 4
9045 .IP "\fBpredictable-branch-outcome\fR" 4
9046 .IX Item "predictable-branch-outcome"
9047 When branch is predicted to be taken with probability lower than this threshold
9048 (in percent), then it is considered well predictable. The default is 10.
9049 .IP "\fBmax-crossjump-edges\fR" 4
9050 .IX Item "max-crossjump-edges"
9051 The maximum number of incoming edges to consider for cross-jumping.
9052 The algorithm used by \fB\-fcrossjumping\fR is O(N^2) in
9053 the number of edges incoming to each block.  Increasing values mean
9054 more aggressive optimization, making the compilation time increase with
9055 probably small improvement in executable size.
9056 .IP "\fBmin-crossjump-insns\fR" 4
9057 .IX Item "min-crossjump-insns"
9058 The minimum number of instructions that must be matched at the end
9059 of two blocks before cross-jumping is performed on them.  This
9060 value is ignored in the case where all instructions in the block being
9061 cross-jumped from are matched.  The default value is 5.
9062 .IP "\fBmax-grow-copy-bb-insns\fR" 4
9063 .IX Item "max-grow-copy-bb-insns"
9064 The maximum code size expansion factor when copying basic blocks
9065 instead of jumping.  The expansion is relative to a jump instruction.
9066 The default value is 8.
9067 .IP "\fBmax-goto-duplication-insns\fR" 4
9068 .IX Item "max-goto-duplication-insns"
9069 The maximum number of instructions to duplicate to a block that jumps
9070 to a computed goto.  To avoid O(N^2) behavior in a number of
9071 passes, \s-1GCC\s0 factors computed gotos early in the compilation process,
9072 and unfactors them as late as possible.  Only computed jumps at the
9073 end of a basic blocks with no more than max-goto-duplication-insns are
9074 unfactored.  The default value is 8.
9075 .IP "\fBmax-delay-slot-insn-search\fR" 4
9076 .IX Item "max-delay-slot-insn-search"
9077 The maximum number of instructions to consider when looking for an
9078 instruction to fill a delay slot.  If more than this arbitrary number of
9079 instructions are searched, the time savings from filling the delay slot
9080 are minimal, so stop searching.  Increasing values mean more
9081 aggressive optimization, making the compilation time increase with probably
9082 small improvement in execution time.
9083 .IP "\fBmax-delay-slot-live-search\fR" 4
9084 .IX Item "max-delay-slot-live-search"
9085 When trying to fill delay slots, the maximum number of instructions to
9086 consider when searching for a block with valid live register
9087 information.  Increasing this arbitrarily chosen value means more
9088 aggressive optimization, increasing the compilation time.  This parameter
9089 should be removed when the delay slot code is rewritten to maintain the
9090 control-flow graph.
9091 .IP "\fBmax-gcse-memory\fR" 4
9092 .IX Item "max-gcse-memory"
9093 The approximate maximum amount of memory that can be allocated in
9094 order to perform the global common subexpression elimination
9095 optimization.  If more memory than specified is required, the
9096 optimization is not done.
9097 .IP "\fBmax-gcse-insertion-ratio\fR" 4
9098 .IX Item "max-gcse-insertion-ratio"
9099 If the ratio of expression insertions to deletions is larger than this value
9100 for any expression, then \s-1RTL\s0 \s-1PRE\s0 inserts or removes the expression and thus
9101 leaves partially redundant computations in the instruction stream.  The default value is 20.
9102 .IP "\fBmax-pending-list-length\fR" 4
9103 .IX Item "max-pending-list-length"
9104 The maximum number of pending dependencies scheduling allows
9105 before flushing the current state and starting over.  Large functions
9106 with few branches or calls can create excessively large lists which
9107 needlessly consume memory and resources.
9108 .IP "\fBmax-modulo-backtrack-attempts\fR" 4
9109 .IX Item "max-modulo-backtrack-attempts"
9110 The maximum number of backtrack attempts the scheduler should make
9111 when modulo scheduling a loop.  Larger values can exponentially increase
9112 compilation time.
9113 .IP "\fBmax-inline-insns-single\fR" 4
9114 .IX Item "max-inline-insns-single"
9115 Several parameters control the tree inliner used in \s-1GCC\s0.
9116 This number sets the maximum number of instructions (counted in \s-1GCC\s0's
9117 internal representation) in a single function that the tree inliner
9118 considers for inlining.  This only affects functions declared
9119 inline and methods implemented in a class declaration (\*(C+).
9120 The default value is 400.
9121 .IP "\fBmax-inline-insns-auto\fR" 4
9122 .IX Item "max-inline-insns-auto"
9123 When you use \fB\-finline\-functions\fR (included in \fB\-O3\fR),
9124 a lot of functions that would otherwise not be considered for inlining
9125 by the compiler are investigated.  To those functions, a different
9126 (more restrictive) limit compared to functions declared inline can
9127 be applied.
9128 The default value is 40.
9129 .IP "\fBinline-min-speedup\fR" 4
9130 .IX Item "inline-min-speedup"
9131 When estimated performance improvement of caller + callee runtime exceeds this
9132 threshold (in precent), the function can be inlined regardless the limit on
9133 \&\fB\-\-param max-inline-insns-single\fR and \fB\-\-param
9134 max-inline-insns-auto\fR.
9135 .IP "\fBlarge-function-insns\fR" 4
9136 .IX Item "large-function-insns"
9137 The limit specifying really large functions.  For functions larger than this
9138 limit after inlining, inlining is constrained by
9139 \&\fB\-\-param large-function-growth\fR.  This parameter is useful primarily
9140 to avoid extreme compilation time caused by non-linear algorithms used by the
9141 back end.
9142 The default value is 2700.
9143 .IP "\fBlarge-function-growth\fR" 4
9144 .IX Item "large-function-growth"
9145 Specifies maximal growth of large function caused by inlining in percents.
9146 The default value is 100 which limits large function growth to 2.0 times
9147 the original size.
9148 .IP "\fBlarge-unit-insns\fR" 4
9149 .IX Item "large-unit-insns"
9150 The limit specifying large translation unit.  Growth caused by inlining of
9151 units larger than this limit is limited by \fB\-\-param inline-unit-growth\fR.
9152 For small units this might be too tight.
9153 For example, consider a unit consisting of function A
9154 that is inline and B that just calls A three times.  If B is small relative to
9155 A, the growth of unit is 300\e% and yet such inlining is very sane.  For very
9156 large units consisting of small inlineable functions, however, the overall unit
9157 growth limit is needed to avoid exponential explosion of code size.  Thus for
9158 smaller units, the size is increased to \fB\-\-param large-unit-insns\fR
9159 before applying \fB\-\-param inline-unit-growth\fR.  The default is 10000.
9160 .IP "\fBinline-unit-growth\fR" 4
9161 .IX Item "inline-unit-growth"
9162 Specifies maximal overall growth of the compilation unit caused by inlining.
9163 The default value is 30 which limits unit growth to 1.3 times the original
9164 size. Cold functions (either marked cold via an attribute or by profile
9165 feedback) are not accounted into the unit size.
9166 .IP "\fBipcp-unit-growth\fR" 4
9167 .IX Item "ipcp-unit-growth"
9168 Specifies maximal overall growth of the compilation unit caused by
9169 interprocedural constant propagation.  The default value is 10 which limits
9170 unit growth to 1.1 times the original size.
9171 .IP "\fBlarge-stack-frame\fR" 4
9172 .IX Item "large-stack-frame"
9173 The limit specifying large stack frames.  While inlining the algorithm is trying
9174 to not grow past this limit too much.  The default value is 256 bytes.
9175 .IP "\fBlarge-stack-frame-growth\fR" 4
9176 .IX Item "large-stack-frame-growth"
9177 Specifies maximal growth of large stack frames caused by inlining in percents.
9178 The default value is 1000 which limits large stack frame growth to 11 times
9179 the original size.
9180 .IP "\fBmax-inline-insns-recursive\fR" 4
9181 .IX Item "max-inline-insns-recursive"
9182 .PD 0
9183 .IP "\fBmax-inline-insns-recursive-auto\fR" 4
9184 .IX Item "max-inline-insns-recursive-auto"
9185 .PD
9186 Specifies the maximum number of instructions an out-of-line copy of a
9187 self-recursive inline
9188 function can grow into by performing recursive inlining.
9189 .Sp
9190 \&\fB\-\-param max-inline-insns-recursive\fR applies to functions
9191 declared inline.
9192 For functions not declared inline, recursive inlining
9193 happens only when \fB\-finline\-functions\fR (included in \fB\-O3\fR) is
9194 enabled; \fB\-\-param max-inline-insns-recursive-auto\fR applies instead.  The
9195 default value is 450.
9196 .IP "\fBmax-inline-recursive-depth\fR" 4
9197 .IX Item "max-inline-recursive-depth"
9198 .PD 0
9199 .IP "\fBmax-inline-recursive-depth-auto\fR" 4
9200 .IX Item "max-inline-recursive-depth-auto"
9201 .PD
9202 Specifies the maximum recursion depth used for recursive inlining.
9203 .Sp
9204 \&\fB\-\-param max-inline-recursive-depth\fR applies to functions
9205 declared inline.  For functions not declared inline, recursive inlining
9206 happens only when \fB\-finline\-functions\fR (included in \fB\-O3\fR) is
9207 enabled; \fB\-\-param max-inline-recursive-depth-auto\fR applies instead.  The
9208 default value is 8.
9209 .IP "\fBmin-inline-recursive-probability\fR" 4
9210 .IX Item "min-inline-recursive-probability"
9211 Recursive inlining is profitable only for function having deep recursion
9212 in average and can hurt for function having little recursion depth by
9213 increasing the prologue size or complexity of function body to other
9214 optimizers.
9215 .Sp
9216 When profile feedback is available (see \fB\-fprofile\-generate\fR) the actual
9217 recursion depth can be guessed from probability that function recurses via a
9218 given call expression.  This parameter limits inlining only to call expressions
9219 whose probability exceeds the given threshold (in percents).
9220 The default value is 10.
9221 .IP "\fBearly-inlining-insns\fR" 4
9222 .IX Item "early-inlining-insns"
9223 Specify growth that the early inliner can make.  In effect it increases
9224 the amount of inlining for code having a large abstraction penalty.
9225 The default value is 10.
9226 .IP "\fBmax-early-inliner-iterations\fR" 4
9227 .IX Item "max-early-inliner-iterations"
9228 Limit of iterations of the early inliner.  This basically bounds
9229 the number of nested indirect calls the early inliner can resolve.
9230 Deeper chains are still handled by late inlining.
9231 .IP "\fBcomdat-sharing-probability\fR" 4
9232 .IX Item "comdat-sharing-probability"
9233 Probability (in percent) that \*(C+ inline function with comdat visibility
9234 are shared across multiple compilation units.  The default value is 20.
9235 .IP "\fBprofile-func-internal-id\fR" 4
9236 .IX Item "profile-func-internal-id"
9237 A parameter to control whether to use function internal id in profile
9238 database lookup. If the value is 0, the compiler uses an id that
9239 is based on function assembler name and filename, which makes old profile
9240 data more tolerant to source changes such as function reordering etc.
9241 The default value is 0.
9242 .IP "\fBmin-vect-loop-bound\fR" 4
9243 .IX Item "min-vect-loop-bound"
9244 The minimum number of iterations under which loops are not vectorized
9245 when \fB\-ftree\-vectorize\fR is used.  The number of iterations after
9246 vectorization needs to be greater than the value specified by this option
9247 to allow vectorization.  The default value is 0.
9248 .IP "\fBgcse-cost-distance-ratio\fR" 4
9249 .IX Item "gcse-cost-distance-ratio"
9250 Scaling factor in calculation of maximum distance an expression
9251 can be moved by \s-1GCSE\s0 optimizations.  This is currently supported only in the
9252 code hoisting pass.  The bigger the ratio, the more aggressive code hoisting
9253 is with simple expressions, i.e., the expressions that have cost
9254 less than \fBgcse-unrestricted-cost\fR.  Specifying 0 disables
9255 hoisting of simple expressions.  The default value is 10.
9256 .IP "\fBgcse-unrestricted-cost\fR" 4
9257 .IX Item "gcse-unrestricted-cost"
9258 Cost, roughly measured as the cost of a single typical machine
9259 instruction, at which \s-1GCSE\s0 optimizations do not constrain
9260 the distance an expression can travel.  This is currently
9261 supported only in the code hoisting pass.  The lesser the cost,
9262 the more aggressive code hoisting is.  Specifying 0 
9263 allows all expressions to travel unrestricted distances.
9264 The default value is 3.
9265 .IP "\fBmax-hoist-depth\fR" 4
9266 .IX Item "max-hoist-depth"
9267 The depth of search in the dominator tree for expressions to hoist.
9268 This is used to avoid quadratic behavior in hoisting algorithm.
9269 The value of 0 does not limit on the search, but may slow down compilation
9270 of huge functions.  The default value is 30.
9271 .IP "\fBmax-tail-merge-comparisons\fR" 4
9272 .IX Item "max-tail-merge-comparisons"
9273 The maximum amount of similar bbs to compare a bb with.  This is used to
9274 avoid quadratic behavior in tree tail merging.  The default value is 10.
9275 .IP "\fBmax-tail-merge-iterations\fR" 4
9276 .IX Item "max-tail-merge-iterations"
9277 The maximum amount of iterations of the pass over the function.  This is used to
9278 limit compilation time in tree tail merging.  The default value is 2.
9279 .IP "\fBmax-unrolled-insns\fR" 4
9280 .IX Item "max-unrolled-insns"
9281 The maximum number of instructions that a loop may have to be unrolled.
9282 If a loop is unrolled, this parameter also determines how many times
9283 the loop code is unrolled.
9284 .IP "\fBmax-average-unrolled-insns\fR" 4
9285 .IX Item "max-average-unrolled-insns"
9286 The maximum number of instructions biased by probabilities of their execution
9287 that a loop may have to be unrolled.  If a loop is unrolled,
9288 this parameter also determines how many times the loop code is unrolled.
9289 .IP "\fBmax-unroll-times\fR" 4
9290 .IX Item "max-unroll-times"
9291 The maximum number of unrollings of a single loop.
9292 .IP "\fBmax-peeled-insns\fR" 4
9293 .IX Item "max-peeled-insns"
9294 The maximum number of instructions that a loop may have to be peeled.
9295 If a loop is peeled, this parameter also determines how many times
9296 the loop code is peeled.
9297 .IP "\fBmax-peel-times\fR" 4
9298 .IX Item "max-peel-times"
9299 The maximum number of peelings of a single loop.
9300 .IP "\fBmax-peel-branches\fR" 4
9301 .IX Item "max-peel-branches"
9302 The maximum number of branches on the hot path through the peeled sequence.
9303 .IP "\fBmax-completely-peeled-insns\fR" 4
9304 .IX Item "max-completely-peeled-insns"
9305 The maximum number of insns of a completely peeled loop.
9306 .IP "\fBmax-completely-peel-times\fR" 4
9307 .IX Item "max-completely-peel-times"
9308 The maximum number of iterations of a loop to be suitable for complete peeling.
9309 .IP "\fBmax-completely-peel-loop-nest-depth\fR" 4
9310 .IX Item "max-completely-peel-loop-nest-depth"
9311 The maximum depth of a loop nest suitable for complete peeling.
9312 .IP "\fBmax-unswitch-insns\fR" 4
9313 .IX Item "max-unswitch-insns"
9314 The maximum number of insns of an unswitched loop.
9315 .IP "\fBmax-unswitch-level\fR" 4
9316 .IX Item "max-unswitch-level"
9317 The maximum number of branches unswitched in a single loop.
9318 .IP "\fBlim-expensive\fR" 4
9319 .IX Item "lim-expensive"
9320 The minimum cost of an expensive expression in the loop invariant motion.
9321 .IP "\fBiv-consider-all-candidates-bound\fR" 4
9322 .IX Item "iv-consider-all-candidates-bound"
9323 Bound on number of candidates for induction variables, below which
9324 all candidates are considered for each use in induction variable
9325 optimizations.  If there are more candidates than this,
9326 only the most relevant ones are considered to avoid quadratic time complexity.
9327 .IP "\fBiv-max-considered-uses\fR" 4
9328 .IX Item "iv-max-considered-uses"
9329 The induction variable optimizations give up on loops that contain more
9330 induction variable uses.
9331 .IP "\fBiv-always-prune-cand-set-bound\fR" 4
9332 .IX Item "iv-always-prune-cand-set-bound"
9333 If the number of candidates in the set is smaller than this value,
9334 always try to remove unnecessary ivs from the set
9335 when adding a new one.
9336 .IP "\fBscev-max-expr-size\fR" 4
9337 .IX Item "scev-max-expr-size"
9338 Bound on size of expressions used in the scalar evolutions analyzer.
9339 Large expressions slow the analyzer.
9340 .IP "\fBscev-max-expr-complexity\fR" 4
9341 .IX Item "scev-max-expr-complexity"
9342 Bound on the complexity of the expressions in the scalar evolutions analyzer.
9343 Complex expressions slow the analyzer.
9344 .IP "\fBomega-max-vars\fR" 4
9345 .IX Item "omega-max-vars"
9346 The maximum number of variables in an Omega constraint system.
9347 The default value is 128.
9348 .IP "\fBomega-max-geqs\fR" 4
9349 .IX Item "omega-max-geqs"
9350 The maximum number of inequalities in an Omega constraint system.
9351 The default value is 256.
9352 .IP "\fBomega-max-eqs\fR" 4
9353 .IX Item "omega-max-eqs"
9354 The maximum number of equalities in an Omega constraint system.
9355 The default value is 128.
9356 .IP "\fBomega-max-wild-cards\fR" 4
9357 .IX Item "omega-max-wild-cards"
9358 The maximum number of wildcard variables that the Omega solver is
9359 able to insert.  The default value is 18.
9360 .IP "\fBomega-hash-table-size\fR" 4
9361 .IX Item "omega-hash-table-size"
9362 The size of the hash table in the Omega solver.  The default value is
9363 550.
9364 .IP "\fBomega-max-keys\fR" 4
9365 .IX Item "omega-max-keys"
9366 The maximal number of keys used by the Omega solver.  The default
9367 value is 500.
9368 .IP "\fBomega-eliminate-redundant-constraints\fR" 4
9369 .IX Item "omega-eliminate-redundant-constraints"
9370 When set to 1, use expensive methods to eliminate all redundant
9371 constraints.  The default value is 0.
9372 .IP "\fBvect-max-version-for-alignment-checks\fR" 4
9373 .IX Item "vect-max-version-for-alignment-checks"
9374 The maximum number of run-time checks that can be performed when
9375 doing loop versioning for alignment in the vectorizer.
9376 .IP "\fBvect-max-version-for-alias-checks\fR" 4
9377 .IX Item "vect-max-version-for-alias-checks"
9378 The maximum number of run-time checks that can be performed when
9379 doing loop versioning for alias in the vectorizer.
9380 .IP "\fBvect-max-peeling-for-alignment\fR" 4
9381 .IX Item "vect-max-peeling-for-alignment"
9382 The maximum number of loop peels to enhance access alignment
9383 for vectorizer. Value \-1 means 'no limit'.
9384 .IP "\fBmax-iterations-to-track\fR" 4
9385 .IX Item "max-iterations-to-track"
9386 The maximum number of iterations of a loop the brute-force algorithm
9387 for analysis of the number of iterations of the loop tries to evaluate.
9388 .IP "\fBhot-bb-count-ws-permille\fR" 4
9389 .IX Item "hot-bb-count-ws-permille"
9390 A basic block profile count is considered hot if it contributes to 
9391 the given permillage (i.e. 0...1000) of the entire profiled execution.
9392 .IP "\fBhot-bb-frequency-fraction\fR" 4
9393 .IX Item "hot-bb-frequency-fraction"
9394 Select fraction of the entry block frequency of executions of basic block in
9395 function given basic block needs to have to be considered hot.
9396 .IP "\fBmax-predicted-iterations\fR" 4
9397 .IX Item "max-predicted-iterations"
9398 The maximum number of loop iterations we predict statically.  This is useful
9399 in cases where a function contains a single loop with known bound and
9400 another loop with unknown bound.
9401 The known number of iterations is predicted correctly, while
9402 the unknown number of iterations average to roughly 10.  This means that the
9403 loop without bounds appears artificially cold relative to the other one.
9404 .IP "\fBbuiltin-expect-probability\fR" 4
9405 .IX Item "builtin-expect-probability"
9406 Control the probability of the expression having the specified value. This
9407 parameter takes a percentage (i.e. 0 ... 100) as input.
9408 The default probability of 90 is obtained empirically.
9409 .IP "\fBalign-threshold\fR" 4
9410 .IX Item "align-threshold"
9411 Select fraction of the maximal frequency of executions of a basic block in
9412 a function to align the basic block.
9413 .IP "\fBalign-loop-iterations\fR" 4
9414 .IX Item "align-loop-iterations"
9415 A loop expected to iterate at least the selected number of iterations is
9416 aligned.
9417 .IP "\fBtracer-dynamic-coverage\fR" 4
9418 .IX Item "tracer-dynamic-coverage"
9419 .PD 0
9420 .IP "\fBtracer-dynamic-coverage-feedback\fR" 4
9421 .IX Item "tracer-dynamic-coverage-feedback"
9422 .PD
9423 This value is used to limit superblock formation once the given percentage of
9424 executed instructions is covered.  This limits unnecessary code size
9425 expansion.
9426 .Sp
9427 The \fBtracer-dynamic-coverage-feedback\fR is used only when profile
9428 feedback is available.  The real profiles (as opposed to statically estimated
9429 ones) are much less balanced allowing the threshold to be larger value.
9430 .IP "\fBtracer-max-code-growth\fR" 4
9431 .IX Item "tracer-max-code-growth"
9432 Stop tail duplication once code growth has reached given percentage.  This is
9433 a rather artificial limit, as most of the duplicates are eliminated later in
9434 cross jumping, so it may be set to much higher values than is the desired code
9435 growth.
9436 .IP "\fBtracer-min-branch-ratio\fR" 4
9437 .IX Item "tracer-min-branch-ratio"
9438 Stop reverse growth when the reverse probability of best edge is less than this
9439 threshold (in percent).
9440 .IP "\fBtracer-min-branch-ratio\fR" 4
9441 .IX Item "tracer-min-branch-ratio"
9442 .PD 0
9443 .IP "\fBtracer-min-branch-ratio-feedback\fR" 4
9444 .IX Item "tracer-min-branch-ratio-feedback"
9445 .PD
9446 Stop forward growth if the best edge has probability lower than this
9447 threshold.
9448 .Sp
9449 Similarly to \fBtracer-dynamic-coverage\fR two values are present, one for
9450 compilation for profile feedback and one for compilation without.  The value
9451 for compilation with profile feedback needs to be more conservative (higher) in
9452 order to make tracer effective.
9453 .IP "\fBmax-cse-path-length\fR" 4
9454 .IX Item "max-cse-path-length"
9455 The maximum number of basic blocks on path that \s-1CSE\s0 considers.
9456 The default is 10.
9457 .IP "\fBmax-cse-insns\fR" 4
9458 .IX Item "max-cse-insns"
9459 The maximum number of instructions \s-1CSE\s0 processes before flushing.
9460 The default is 1000.
9461 .IP "\fBggc-min-expand\fR" 4
9462 .IX Item "ggc-min-expand"
9463 \&\s-1GCC\s0 uses a garbage collector to manage its own memory allocation.  This
9464 parameter specifies the minimum percentage by which the garbage
9465 collector's heap should be allowed to expand between collections.
9466 Tuning this may improve compilation speed; it has no effect on code
9467 generation.
9468 .Sp
9469 The default is 30% + 70% * (\s-1RAM/1GB\s0) with an upper bound of 100% when
9470 \&\s-1RAM\s0 >= 1GB.  If \f(CW\*(C`getrlimit\*(C'\fR is available, the notion of \*(L"\s-1RAM\s0\*(R" is
9471 the smallest of actual \s-1RAM\s0 and \f(CW\*(C`RLIMIT_DATA\*(C'\fR or \f(CW\*(C`RLIMIT_AS\*(C'\fR.  If
9472 \&\s-1GCC\s0 is not able to calculate \s-1RAM\s0 on a particular platform, the lower
9473 bound of 30% is used.  Setting this parameter and
9474 \&\fBggc-min-heapsize\fR to zero causes a full collection to occur at
9475 every opportunity.  This is extremely slow, but can be useful for
9476 debugging.
9477 .IP "\fBggc-min-heapsize\fR" 4
9478 .IX Item "ggc-min-heapsize"
9479 Minimum size of the garbage collector's heap before it begins bothering
9480 to collect garbage.  The first collection occurs after the heap expands
9481 by \fBggc-min-expand\fR% beyond \fBggc-min-heapsize\fR.  Again,
9482 tuning this may improve compilation speed, and has no effect on code
9483 generation.
9484 .Sp
9485 The default is the smaller of \s-1RAM/8\s0, \s-1RLIMIT_RSS\s0, or a limit that
9486 tries to ensure that \s-1RLIMIT_DATA\s0 or \s-1RLIMIT_AS\s0 are not exceeded, but
9487 with a lower bound of 4096 (four megabytes) and an upper bound of
9488 131072 (128 megabytes).  If \s-1GCC\s0 is not able to calculate \s-1RAM\s0 on a
9489 particular platform, the lower bound is used.  Setting this parameter
9490 very large effectively disables garbage collection.  Setting this
9491 parameter and \fBggc-min-expand\fR to zero causes a full collection
9492 to occur at every opportunity.
9493 .IP "\fBmax-reload-search-insns\fR" 4
9494 .IX Item "max-reload-search-insns"
9495 The maximum number of instruction reload should look backward for equivalent
9496 register.  Increasing values mean more aggressive optimization, making the
9497 compilation time increase with probably slightly better performance.
9498 The default value is 100.
9499 .IP "\fBmax-cselib-memory-locations\fR" 4
9500 .IX Item "max-cselib-memory-locations"
9501 The maximum number of memory locations cselib should take into account.
9502 Increasing values mean more aggressive optimization, making the compilation time
9503 increase with probably slightly better performance.  The default value is 500.
9504 .IP "\fBreorder-blocks-duplicate\fR" 4
9505 .IX Item "reorder-blocks-duplicate"
9506 .PD 0
9507 .IP "\fBreorder-blocks-duplicate-feedback\fR" 4
9508 .IX Item "reorder-blocks-duplicate-feedback"
9509 .PD
9510 Used by the basic block reordering pass to decide whether to use unconditional
9511 branch or duplicate the code on its destination.  Code is duplicated when its
9512 estimated size is smaller than this value multiplied by the estimated size of
9513 unconditional jump in the hot spots of the program.
9514 .Sp
9515 The \fBreorder-block-duplicate-feedback\fR is used only when profile
9516 feedback is available.  It may be set to higher values than
9517 \&\fBreorder-block-duplicate\fR since information about the hot spots is more
9518 accurate.
9519 .IP "\fBmax-sched-ready-insns\fR" 4
9520 .IX Item "max-sched-ready-insns"
9521 The maximum number of instructions ready to be issued the scheduler should
9522 consider at any given time during the first scheduling pass.  Increasing
9523 values mean more thorough searches, making the compilation time increase
9524 with probably little benefit.  The default value is 100.
9525 .IP "\fBmax-sched-region-blocks\fR" 4
9526 .IX Item "max-sched-region-blocks"
9527 The maximum number of blocks in a region to be considered for
9528 interblock scheduling.  The default value is 10.
9529 .IP "\fBmax-pipeline-region-blocks\fR" 4
9530 .IX Item "max-pipeline-region-blocks"
9531 The maximum number of blocks in a region to be considered for
9532 pipelining in the selective scheduler.  The default value is 15.
9533 .IP "\fBmax-sched-region-insns\fR" 4
9534 .IX Item "max-sched-region-insns"
9535 The maximum number of insns in a region to be considered for
9536 interblock scheduling.  The default value is 100.
9537 .IP "\fBmax-pipeline-region-insns\fR" 4
9538 .IX Item "max-pipeline-region-insns"
9539 The maximum number of insns in a region to be considered for
9540 pipelining in the selective scheduler.  The default value is 200.
9541 .IP "\fBmin-spec-prob\fR" 4
9542 .IX Item "min-spec-prob"
9543 The minimum probability (in percents) of reaching a source block
9544 for interblock speculative scheduling.  The default value is 40.
9545 .IP "\fBmax-sched-extend-regions-iters\fR" 4
9546 .IX Item "max-sched-extend-regions-iters"
9547 The maximum number of iterations through \s-1CFG\s0 to extend regions.
9548 A value of 0 (the default) disables region extensions.
9549 .IP "\fBmax-sched-insn-conflict-delay\fR" 4
9550 .IX Item "max-sched-insn-conflict-delay"
9551 The maximum conflict delay for an insn to be considered for speculative motion.
9552 The default value is 3.
9553 .IP "\fBsched-spec-prob-cutoff\fR" 4
9554 .IX Item "sched-spec-prob-cutoff"
9555 The minimal probability of speculation success (in percents), so that
9556 speculative insns are scheduled.
9557 The default value is 40.
9558 .IP "\fBsched-spec-state-edge-prob-cutoff\fR" 4
9559 .IX Item "sched-spec-state-edge-prob-cutoff"
9560 The minimum probability an edge must have for the scheduler to save its
9561 state across it.
9562 The default value is 10.
9563 .IP "\fBsched-mem-true-dep-cost\fR" 4
9564 .IX Item "sched-mem-true-dep-cost"
9565 Minimal distance (in \s-1CPU\s0 cycles) between store and load targeting same
9566 memory locations.  The default value is 1.
9567 .IP "\fBselsched-max-lookahead\fR" 4
9568 .IX Item "selsched-max-lookahead"
9569 The maximum size of the lookahead window of selective scheduling.  It is a
9570 depth of search for available instructions.
9571 The default value is 50.
9572 .IP "\fBselsched-max-sched-times\fR" 4
9573 .IX Item "selsched-max-sched-times"
9574 The maximum number of times that an instruction is scheduled during
9575 selective scheduling.  This is the limit on the number of iterations
9576 through which the instruction may be pipelined.  The default value is 2.
9577 .IP "\fBselsched-max-insns-to-rename\fR" 4
9578 .IX Item "selsched-max-insns-to-rename"
9579 The maximum number of best instructions in the ready list that are considered
9580 for renaming in the selective scheduler.  The default value is 2.
9581 .IP "\fBsms-min-sc\fR" 4
9582 .IX Item "sms-min-sc"
9583 The minimum value of stage count that swing modulo scheduler
9584 generates.  The default value is 2.
9585 .IP "\fBmax-last-value-rtl\fR" 4
9586 .IX Item "max-last-value-rtl"
9587 The maximum size measured as number of RTLs that can be recorded in an expression
9588 in combiner for a pseudo register as last known value of that register.  The default
9589 is 10000.
9590 .IP "\fBmax-combine-insns\fR" 4
9591 .IX Item "max-combine-insns"
9592 The maximum number of instructions the \s-1RTL\s0 combiner tries to combine.
9593 The default value is 2 at \fB\-Og\fR and 4 otherwise.
9594 .IP "\fBinteger-share-limit\fR" 4
9595 .IX Item "integer-share-limit"
9596 Small integer constants can use a shared data structure, reducing the
9597 compiler's memory usage and increasing its speed.  This sets the maximum
9598 value of a shared integer constant.  The default value is 256.
9599 .IP "\fBssp-buffer-size\fR" 4
9600 .IX Item "ssp-buffer-size"
9601 The minimum size of buffers (i.e. arrays) that receive stack smashing
9602 protection when \fB\-fstack\-protection\fR is used.
9603 .IP "\fBmin-size-for-stack-sharing\fR" 4
9604 .IX Item "min-size-for-stack-sharing"
9605 The minimum size of variables taking part in stack slot sharing when not
9606 optimizing. The default value is 32.
9607 .IP "\fBmax-jump-thread-duplication-stmts\fR" 4
9608 .IX Item "max-jump-thread-duplication-stmts"
9609 Maximum number of statements allowed in a block that needs to be
9610 duplicated when threading jumps.
9611 .IP "\fBmax-fields-for-field-sensitive\fR" 4
9612 .IX Item "max-fields-for-field-sensitive"
9613 Maximum number of fields in a structure treated in
9614 a field sensitive manner during pointer analysis.  The default is zero
9615 for \fB\-O0\fR and \fB\-O1\fR,
9616 and 100 for \fB\-Os\fR, \fB\-O2\fR, and \fB\-O3\fR.
9617 .IP "\fBprefetch-latency\fR" 4
9618 .IX Item "prefetch-latency"
9619 Estimate on average number of instructions that are executed before
9620 prefetch finishes.  The distance prefetched ahead is proportional
9621 to this constant.  Increasing this number may also lead to less
9622 streams being prefetched (see \fBsimultaneous-prefetches\fR).
9623 .IP "\fBsimultaneous-prefetches\fR" 4
9624 .IX Item "simultaneous-prefetches"
9625 Maximum number of prefetches that can run at the same time.
9626 .IP "\fBl1\-cache\-line\-size\fR" 4
9627 .IX Item "l1-cache-line-size"
9628 The size of cache line in L1 cache, in bytes.
9629 .IP "\fBl1\-cache\-size\fR" 4
9630 .IX Item "l1-cache-size"
9631 The size of L1 cache, in kilobytes.
9632 .IP "\fBl2\-cache\-size\fR" 4
9633 .IX Item "l2-cache-size"
9634 The size of L2 cache, in kilobytes.
9635 .IP "\fBmin-insn-to-prefetch-ratio\fR" 4
9636 .IX Item "min-insn-to-prefetch-ratio"
9637 The minimum ratio between the number of instructions and the
9638 number of prefetches to enable prefetching in a loop.
9639 .IP "\fBprefetch-min-insn-to-mem-ratio\fR" 4
9640 .IX Item "prefetch-min-insn-to-mem-ratio"
9641 The minimum ratio between the number of instructions and the
9642 number of memory references to enable prefetching in a loop.
9643 .IP "\fBuse-canonical-types\fR" 4
9644 .IX Item "use-canonical-types"
9645 Whether the compiler should use the \*(L"canonical\*(R" type system.  By
9646 default, this should always be 1, which uses a more efficient internal
9647 mechanism for comparing types in \*(C+ and Objective\-\*(C+.  However, if
9648 bugs in the canonical type system are causing compilation failures,
9649 set this value to 0 to disable canonical types.
9650 .IP "\fBswitch-conversion-max-branch-ratio\fR" 4
9651 .IX Item "switch-conversion-max-branch-ratio"
9652 Switch initialization conversion refuses to create arrays that are
9653 bigger than \fBswitch-conversion-max-branch-ratio\fR times the number of
9654 branches in the switch.
9655 .IP "\fBmax-partial-antic-length\fR" 4
9656 .IX Item "max-partial-antic-length"
9657 Maximum length of the partial antic set computed during the tree
9658 partial redundancy elimination optimization (\fB\-ftree\-pre\fR) when
9659 optimizing at \fB\-O3\fR and above.  For some sorts of source code
9660 the enhanced partial redundancy elimination optimization can run away,
9661 consuming all of the memory available on the host machine.  This
9662 parameter sets a limit on the length of the sets that are computed,
9663 which prevents the runaway behavior.  Setting a value of 0 for
9664 this parameter allows an unlimited set length.
9665 .IP "\fBsccvn-max-scc-size\fR" 4
9666 .IX Item "sccvn-max-scc-size"
9667 Maximum size of a strongly connected component (\s-1SCC\s0) during \s-1SCCVN\s0
9668 processing.  If this limit is hit, \s-1SCCVN\s0 processing for the whole
9669 function is not done and optimizations depending on it are
9670 disabled.  The default maximum \s-1SCC\s0 size is 10000.
9671 .IP "\fBsccvn-max-alias-queries-per-access\fR" 4
9672 .IX Item "sccvn-max-alias-queries-per-access"
9673 Maximum number of alias-oracle queries we perform when looking for
9674 redundancies for loads and stores.  If this limit is hit the search
9675 is aborted and the load or store is not considered redundant.  The
9676 number of queries is algorithmically limited to the number of
9677 stores on all paths from the load to the function entry.
9678 The default maxmimum number of queries is 1000.
9679 .IP "\fBira-max-loops-num\fR" 4
9680 .IX Item "ira-max-loops-num"
9681 \&\s-1IRA\s0 uses regional register allocation by default.  If a function
9682 contains more loops than the number given by this parameter, only at most
9683 the given number of the most frequently-executed loops form regions
9684 for regional register allocation.  The default value of the
9685 parameter is 100.
9686 .IP "\fBira-max-conflict-table-size\fR" 4
9687 .IX Item "ira-max-conflict-table-size"
9688 Although \s-1IRA\s0 uses a sophisticated algorithm to compress the conflict
9689 table, the table can still require excessive amounts of memory for
9690 huge functions.  If the conflict table for a function could be more
9691 than the size in \s-1MB\s0 given by this parameter, the register allocator
9692 instead uses a faster, simpler, and lower-quality
9693 algorithm that does not require building a pseudo-register conflict table.  
9694 The default value of the parameter is 2000.
9695 .IP "\fBira-loop-reserved-regs\fR" 4
9696 .IX Item "ira-loop-reserved-regs"
9697 \&\s-1IRA\s0 can be used to evaluate more accurate register pressure in loops
9698 for decisions to move loop invariants (see \fB\-O3\fR).  The number
9699 of available registers reserved for some other purposes is given
9700 by this parameter.  The default value of the parameter is 2, which is
9701 the minimal number of registers needed by typical instructions.
9702 This value is the best found from numerous experiments.
9703 .IP "\fBloop-invariant-max-bbs-in-loop\fR" 4
9704 .IX Item "loop-invariant-max-bbs-in-loop"
9705 Loop invariant motion can be very expensive, both in compilation time and
9706 in amount of needed compile-time memory, with very large loops.  Loops
9707 with more basic blocks than this parameter won't have loop invariant
9708 motion optimization performed on them.  The default value of the
9709 parameter is 1000 for \fB\-O1\fR and 10000 for \fB\-O2\fR and above.
9710 .IP "\fBloop-max-datarefs-for-datadeps\fR" 4
9711 .IX Item "loop-max-datarefs-for-datadeps"
9712 Building data dapendencies is expensive for very large loops.  This
9713 parameter limits the number of data references in loops that are
9714 considered for data dependence analysis.  These large loops are no
9715 handled by the optimizations using loop data dependencies.
9716 The default value is 1000.
9717 .IP "\fBmax-vartrack-size\fR" 4
9718 .IX Item "max-vartrack-size"
9719 Sets a maximum number of hash table slots to use during variable
9720 tracking dataflow analysis of any function.  If this limit is exceeded
9721 with variable tracking at assignments enabled, analysis for that
9722 function is retried without it, after removing all debug insns from
9723 the function.  If the limit is exceeded even without debug insns, var
9724 tracking analysis is completely disabled for the function.  Setting
9725 the parameter to zero makes it unlimited.
9726 .IP "\fBmax-vartrack-expr-depth\fR" 4
9727 .IX Item "max-vartrack-expr-depth"
9728 Sets a maximum number of recursion levels when attempting to map
9729 variable names or debug temporaries to value expressions.  This trades
9730 compilation time for more complete debug information.  If this is set too
9731 low, value expressions that are available and could be represented in
9732 debug information may end up not being used; setting this higher may
9733 enable the compiler to find more complex debug expressions, but compile
9734 time and memory use may grow.  The default is 12.
9735 .IP "\fBmin-nondebug-insn-uid\fR" 4
9736 .IX Item "min-nondebug-insn-uid"
9737 Use uids starting at this parameter for nondebug insns.  The range below
9738 the parameter is reserved exclusively for debug insns created by
9739 \&\fB\-fvar\-tracking\-assignments\fR, but debug insns may get
9740 (non-overlapping) uids above it if the reserved range is exhausted.
9741 .IP "\fBipa-sra-ptr-growth-factor\fR" 4
9742 .IX Item "ipa-sra-ptr-growth-factor"
9743 IPA-SRA replaces a pointer to an aggregate with one or more new
9744 parameters only when their cumulative size is less or equal to
9745 \&\fBipa-sra-ptr-growth-factor\fR times the size of the original
9746 pointer parameter.
9747 .IP "\fBsra-max-scalarization-size-Ospeed\fR" 4
9748 .IX Item "sra-max-scalarization-size-Ospeed"
9749 .PD 0
9750 .IP "\fBsra-max-scalarization-size-Osize\fR" 4
9751 .IX Item "sra-max-scalarization-size-Osize"
9752 .PD
9753 The two Scalar Reduction of Aggregates passes (\s-1SRA\s0 and IPA-SRA) aim to
9754 replace scalar parts of aggregates with uses of independent scalar
9755 variables.  These parameters control the maximum size, in storage units,
9756 of aggregate which is considered for replacement when compiling for
9757 speed
9758 (\fBsra-max-scalarization-size-Ospeed\fR) or size
9759 (\fBsra-max-scalarization-size-Osize\fR) respectively.
9760 .IP "\fBtm-max-aggregate-size\fR" 4
9761 .IX Item "tm-max-aggregate-size"
9762 When making copies of thread-local variables in a transaction, this
9763 parameter specifies the size in bytes after which variables are
9764 saved with the logging functions as opposed to save/restore code
9765 sequence pairs.  This option only applies when using
9766 \&\fB\-fgnu\-tm\fR.
9767 .IP "\fBgraphite-max-nb-scop-params\fR" 4
9768 .IX Item "graphite-max-nb-scop-params"
9769 To avoid exponential effects in the Graphite loop transforms, the
9770 number of parameters in a Static Control Part (SCoP) is bounded.  The
9771 default value is 10 parameters.  A variable whose value is unknown at
9772 compilation time and defined outside a SCoP is a parameter of the SCoP.
9773 .IP "\fBgraphite-max-bbs-per-function\fR" 4
9774 .IX Item "graphite-max-bbs-per-function"
9775 To avoid exponential effects in the detection of SCoPs, the size of
9776 the functions analyzed by Graphite is bounded.  The default value is
9777 100 basic blocks.
9778 .IP "\fBloop-block-tile-size\fR" 4
9779 .IX Item "loop-block-tile-size"
9780 Loop blocking or strip mining transforms, enabled with
9781 \&\fB\-floop\-block\fR or \fB\-floop\-strip\-mine\fR, strip mine each
9782 loop in the loop nest by a given number of iterations.  The strip
9783 length can be changed using the \fBloop-block-tile-size\fR
9784 parameter.  The default value is 51 iterations.
9785 .IP "\fBloop-unroll-jam-size\fR" 4
9786 .IX Item "loop-unroll-jam-size"
9787 Specify the unroll factor for the \fB\-floop\-unroll\-and\-jam\fR.  The 
9788 default value is 4.
9789 .IP "\fBloop-unroll-jam-depth\fR" 4
9790 .IX Item "loop-unroll-jam-depth"
9791 Specify the dimension to be unrolled (counting from the most inner loop)
9792 for the  \fB\-floop\-unroll\-and\-jam\fR.  The default value is 2.
9793 .IP "\fBipa-cp-value-list-size\fR" 4
9794 .IX Item "ipa-cp-value-list-size"
9795 IPA-CP attempts to track all possible values and types passed to a function's
9796 parameter in order to propagate them and perform devirtualization.
9797 \&\fBipa-cp-value-list-size\fR is the maximum number of values and types it
9798 stores per one formal parameter of a function.
9799 .IP "\fBipa-cp-eval-threshold\fR" 4
9800 .IX Item "ipa-cp-eval-threshold"
9801 IPA-CP calculates its own score of cloning profitability heuristics
9802 and performs those cloning opportunities with scores that exceed
9803 \&\fBipa-cp-eval-threshold\fR.
9804 .IP "\fBipa-max-agg-items\fR" 4
9805 .IX Item "ipa-max-agg-items"
9806 IPA-CP is also capable to propagate a number of scalar values passed
9807 in an aggregate. \fBipa-max-agg-items\fR controls the maximum
9808 number of such values per one parameter.
9809 .IP "\fBipa-cp-loop-hint-bonus\fR" 4
9810 .IX Item "ipa-cp-loop-hint-bonus"
9811 When IPA-CP determines that a cloning candidate would make the number
9812 of iterations of a loop known, it adds a bonus of
9813 \&\fBipa-cp-loop-hint-bonus\fR to the profitability score of
9814 the candidate.
9815 .IP "\fBipa-cp-array-index-hint-bonus\fR" 4
9816 .IX Item "ipa-cp-array-index-hint-bonus"
9817 When IPA-CP determines that a cloning candidate would make the index of
9818 an array access known, it adds a bonus of
9819 \&\fBipa-cp-array-index-hint-bonus\fR to the profitability
9820 score of the candidate.
9821 .IP "\fBipa-max-aa-steps\fR" 4
9822 .IX Item "ipa-max-aa-steps"
9823 During its analysis of function bodies, IPA-CP employs alias analysis
9824 in order to track values pointed to by function parameters.  In order
9825 not spend too much time analyzing huge functions, it gives up and
9826 consider all memory clobbered after examining
9827 \&\fBipa-max-aa-steps\fR statements modifying memory.
9828 .IP "\fBlto-partitions\fR" 4
9829 .IX Item "lto-partitions"
9830 Specify desired number of partitions produced during \s-1WHOPR\s0 compilation.
9831 The number of partitions should exceed the number of CPUs used for compilation.
9832 The default value is 32.
9833 .IP "\fBlto-minpartition\fR" 4
9834 .IX Item "lto-minpartition"
9835 Size of minimal partition for \s-1WHOPR\s0 (in estimated instructions).
9836 This prevents expenses of splitting very small programs into too many
9837 partitions.
9838 .IP "\fBcxx-max-namespaces-for-diagnostic-help\fR" 4
9839 .IX Item "cxx-max-namespaces-for-diagnostic-help"
9840 The maximum number of namespaces to consult for suggestions when \*(C+
9841 name lookup fails for an identifier.  The default is 1000.
9842 .IP "\fBsink-frequency-threshold\fR" 4
9843 .IX Item "sink-frequency-threshold"
9844 The maximum relative execution frequency (in percents) of the target block
9845 relative to a statement's original block to allow statement sinking of a
9846 statement.  Larger numbers result in more aggressive statement sinking.
9847 The default value is 75.  A small positive adjustment is applied for
9848 statements with memory operands as those are even more profitable so sink.
9849 .IP "\fBmax-stores-to-sink\fR" 4
9850 .IX Item "max-stores-to-sink"
9851 The maximum number of conditional stores paires that can be sunk.  Set to 0
9852 if either vectorization (\fB\-ftree\-vectorize\fR) or if-conversion
9853 (\fB\-ftree\-loop\-if\-convert\fR) is disabled.  The default is 2.
9854 .IP "\fBallow-store-data-races\fR" 4
9855 .IX Item "allow-store-data-races"
9856 Allow optimizers to introduce new data races on stores.
9857 Set to 1 to allow, otherwise to 0.  This option is enabled by default
9858 at optimization level \fB\-Ofast\fR.
9859 .IP "\fBcase-values-threshold\fR" 4
9860 .IX Item "case-values-threshold"
9861 The smallest number of different values for which it is best to use a
9862 jump-table instead of a tree of conditional branches.  If the value is
9863 0, use the default for the machine.  The default is 0.
9864 .IP "\fBtree-reassoc-width\fR" 4
9865 .IX Item "tree-reassoc-width"
9866 Set the maximum number of instructions executed in parallel in
9867 reassociated tree. This parameter overrides target dependent
9868 heuristics used by default if has non zero value.
9869 .IP "\fBsched-pressure-algorithm\fR" 4
9870 .IX Item "sched-pressure-algorithm"
9871 Choose between the two available implementations of
9872 \&\fB\-fsched\-pressure\fR.  Algorithm 1 is the original implementation
9873 and is the more likely to prevent instructions from being reordered.
9874 Algorithm 2 was designed to be a compromise between the relatively
9875 conservative approach taken by algorithm 1 and the rather aggressive
9876 approach taken by the default scheduler.  It relies more heavily on
9877 having a regular register file and accurate register pressure classes.
9878 See \fIhaifa\-sched.c\fR in the \s-1GCC\s0 sources for more details.
9879 .Sp
9880 The default choice depends on the target.
9881 .IP "\fBmax-slsr-cand-scan\fR" 4
9882 .IX Item "max-slsr-cand-scan"
9883 Set the maximum number of existing candidates that are considered when
9884 seeking a basis for a new straight-line strength reduction candidate.
9885 .IP "\fBasan-globals\fR" 4
9886 .IX Item "asan-globals"
9887 Enable buffer overflow detection for global objects.  This kind
9888 of protection is enabled by default if you are using
9889 \&\fB\-fsanitize=address\fR option.
9890 To disable global objects protection use \fB\-\-param asan\-globals=0\fR.
9891 .IP "\fBasan-stack\fR" 4
9892 .IX Item "asan-stack"
9893 Enable buffer overflow detection for stack objects.  This kind of
9894 protection is enabled by default when using\fB\-fsanitize=address\fR.
9895 To disable stack protection use \fB\-\-param asan\-stack=0\fR option.
9896 .IP "\fBasan-instrument-reads\fR" 4
9897 .IX Item "asan-instrument-reads"
9898 Enable buffer overflow detection for memory reads.  This kind of
9899 protection is enabled by default when using \fB\-fsanitize=address\fR.
9900 To disable memory reads protection use
9901 \&\fB\-\-param asan\-instrument\-reads=0\fR.
9902 .IP "\fBasan-instrument-writes\fR" 4
9903 .IX Item "asan-instrument-writes"
9904 Enable buffer overflow detection for memory writes.  This kind of
9905 protection is enabled by default when using \fB\-fsanitize=address\fR.
9906 To disable memory writes protection use
9907 \&\fB\-\-param asan\-instrument\-writes=0\fR option.
9908 .IP "\fBasan-memintrin\fR" 4
9909 .IX Item "asan-memintrin"
9910 Enable detection for built-in functions.  This kind of protection
9911 is enabled by default when using \fB\-fsanitize=address\fR.
9912 To disable built-in functions protection use
9913 \&\fB\-\-param asan\-memintrin=0\fR.
9914 .IP "\fBasan-use-after-return\fR" 4
9915 .IX Item "asan-use-after-return"
9916 Enable detection of use-after-return.  This kind of protection
9917 is enabled by default when using \fB\-fsanitize=address\fR option.
9918 To disable use-after-return detection use 
9919 \&\fB\-\-param asan\-use\-after\-return=0\fR.
9920 .IP "\fBasan-instrumentation-with-call-threshold\fR" 4
9921 .IX Item "asan-instrumentation-with-call-threshold"
9922 If number of memory accesses in function being instrumented
9923 is greater or equal to this number, use callbacks instead of inline checks.
9924 E.g. to disable inline code use
9925 \&\fB\-\-param asan\-instrumentation\-with\-call\-threshold=0\fR.
9926 .IP "\fBchkp-max-ctor-size\fR" 4
9927 .IX Item "chkp-max-ctor-size"
9928 Static constructors generated by Pointer Bounds Checker may become very
9929 large and significantly increase compile time at optimization level
9930 \&\fB\-O1\fR and higher.  This parameter is a maximum nubmer of statements
9931 in a single generated constructor.  Default value is 5000.
9932 .IP "\fBmax-fsm-thread-path-insns\fR" 4
9933 .IX Item "max-fsm-thread-path-insns"
9934 Maximum number of instructions to copy when duplicating blocks on a
9935 finite state automaton jump thread path.  The default is 100.
9936 .IP "\fBmax-fsm-thread-length\fR" 4
9937 .IX Item "max-fsm-thread-length"
9938 Maximum number of basic blocks on a finite state automaton jump thread
9939 path.  The default is 10.
9940 .IP "\fBmax-fsm-thread-paths\fR" 4
9941 .IX Item "max-fsm-thread-paths"
9942 Maximum number of new jump thread paths to create for a finite state
9943 automaton.  The default is 50.
9944 .RE
9945 .RS 4
9946 .RE
9947 .SS "Options Controlling the Preprocessor"
9948 .IX Subsection "Options Controlling the Preprocessor"
9949 These options control the C preprocessor, which is run on each C source
9950 file before actual compilation.
9951 .PP
9952 If you use the \fB\-E\fR option, nothing is done except preprocessing.
9953 Some of these options make sense only together with \fB\-E\fR because
9954 they cause the preprocessor output to be unsuitable for actual
9955 compilation.
9956 .IP "\fB\-Wp,\fR\fIoption\fR" 4
9957 .IX Item "-Wp,option"
9958 You can use \fB\-Wp,\fR\fIoption\fR to bypass the compiler driver
9959 and pass \fIoption\fR directly through to the preprocessor.  If
9960 \&\fIoption\fR contains commas, it is split into multiple options at the
9961 commas.  However, many options are modified, translated or interpreted
9962 by the compiler driver before being passed to the preprocessor, and
9963 \&\fB\-Wp\fR forcibly bypasses this phase.  The preprocessor's direct
9964 interface is undocumented and subject to change, so whenever possible
9965 you should avoid using \fB\-Wp\fR and let the driver handle the
9966 options instead.
9967 .IP "\fB\-Xpreprocessor\fR \fIoption\fR" 4
9968 .IX Item "-Xpreprocessor option"
9969 Pass \fIoption\fR as an option to the preprocessor.  You can use this to
9970 supply system-specific preprocessor options that \s-1GCC\s0 does not 
9971 recognize.
9972 .Sp
9973 If you want to pass an option that takes an argument, you must use
9974 \&\fB\-Xpreprocessor\fR twice, once for the option and once for the argument.
9975 .IP "\fB\-no\-integrated\-cpp\fR" 4
9976 .IX Item "-no-integrated-cpp"
9977 Perform preprocessing as a separate pass before compilation.
9978 By default, \s-1GCC\s0 performs preprocessing as an integrated part of
9979 input tokenization and parsing.
9980 If this option is provided, the appropriate language front end
9981 (\fBcc1\fR, \fBcc1plus\fR, or \fBcc1obj\fR for C, \*(C+,
9982 and Objective-C, respectively) is instead invoked twice,
9983 once for preprocessing only and once for actual compilation
9984 of the preprocessed input.
9985 This option may be useful in conjunction with the \fB\-B\fR or
9986 \&\fB\-wrapper\fR options to specify an alternate preprocessor or
9987 perform additional processing of the program source between
9988 normal preprocessing and compilation.
9989 .IP "\fB\-D\fR \fIname\fR" 4
9990 .IX Item "-D name"
9991 Predefine \fIname\fR as a macro, with definition \f(CW1\fR.
9992 .IP "\fB\-D\fR \fIname\fR\fB=\fR\fIdefinition\fR" 4
9993 .IX Item "-D name=definition"
9994 The contents of \fIdefinition\fR are tokenized and processed as if
9995 they appeared during translation phase three in a \fB#define\fR
9996 directive.  In particular, the definition will be truncated by
9997 embedded newline characters.
9998 .Sp
9999 If you are invoking the preprocessor from a shell or shell-like
10000 program you may need to use the shell's quoting syntax to protect
10001 characters such as spaces that have a meaning in the shell syntax.
10002 .Sp
10003 If you wish to define a function-like macro on the command line, write
10004 its argument list with surrounding parentheses before the equals sign
10005 (if any).  Parentheses are meaningful to most shells, so you will need
10006 to quote the option.  With \fBsh\fR and \fBcsh\fR,
10007 \&\fB\-D'\fR\fIname\fR\fB(\fR\fIargs...\fR\fB)=\fR\fIdefinition\fR\fB'\fR works.
10008 .Sp
10009 \&\fB\-D\fR and \fB\-U\fR options are processed in the order they
10010 are given on the command line.  All \fB\-imacros\fR \fIfile\fR and
10011 \&\fB\-include\fR \fIfile\fR options are processed after all
10012 \&\fB\-D\fR and \fB\-U\fR options.
10013 .IP "\fB\-U\fR \fIname\fR" 4
10014 .IX Item "-U name"
10015 Cancel any previous definition of \fIname\fR, either built in or
10016 provided with a \fB\-D\fR option.
10017 .IP "\fB\-undef\fR" 4
10018 .IX Item "-undef"
10019 Do not predefine any system-specific or GCC-specific macros.  The
10020 standard predefined macros remain defined.
10021 .IP "\fB\-I\fR \fIdir\fR" 4
10022 .IX Item "-I dir"
10023 Add the directory \fIdir\fR to the list of directories to be searched
10024 for header files.
10025 Directories named by \fB\-I\fR are searched before the standard
10026 system include directories.  If the directory \fIdir\fR is a standard
10027 system include directory, the option is ignored to ensure that the
10028 default search order for system directories and the special treatment
10029 of system headers are not defeated
10030 \&.
10031 If \fIdir\fR begins with \f(CW\*(C`=\*(C'\fR, then the \f(CW\*(C`=\*(C'\fR will be replaced
10032 by the sysroot prefix; see \fB\-\-sysroot\fR and \fB\-isysroot\fR.
10033 .IP "\fB\-o\fR \fIfile\fR" 4
10034 .IX Item "-o file"
10035 Write output to \fIfile\fR.  This is the same as specifying \fIfile\fR
10036 as the second non-option argument to \fBcpp\fR.  \fBgcc\fR has a
10037 different interpretation of a second non-option argument, so you must
10038 use \fB\-o\fR to specify the output file.
10039 .IP "\fB\-Wall\fR" 4
10040 .IX Item "-Wall"
10041 Turns on all optional warnings which are desirable for normal code.
10042 At present this is \fB\-Wcomment\fR, \fB\-Wtrigraphs\fR,
10043 \&\fB\-Wmultichar\fR and a warning about integer promotion causing a
10044 change of sign in \f(CW\*(C`#if\*(C'\fR expressions.  Note that many of the
10045 preprocessor's warnings are on by default and have no options to
10046 control them.
10047 .IP "\fB\-Wcomment\fR" 4
10048 .IX Item "-Wcomment"
10049 .PD 0
10050 .IP "\fB\-Wcomments\fR" 4
10051 .IX Item "-Wcomments"
10052 .PD
10053 Warn whenever a comment-start sequence \fB/*\fR appears in a \fB/*\fR
10054 comment, or whenever a backslash-newline appears in a \fB//\fR comment.
10055 (Both forms have the same effect.)
10056 .IP "\fB\-Wtrigraphs\fR" 4
10057 .IX Item "-Wtrigraphs"
10058 Most trigraphs in comments cannot affect the meaning of the program.
10059 However, a trigraph that would form an escaped newline (\fB??/\fR at
10060 the end of a line) can, by changing where the comment begins or ends.
10061 Therefore, only trigraphs that would form escaped newlines produce
10062 warnings inside a comment.
10063 .Sp
10064 This option is implied by \fB\-Wall\fR.  If \fB\-Wall\fR is not
10065 given, this option is still enabled unless trigraphs are enabled.  To
10066 get trigraph conversion without warnings, but get the other
10067 \&\fB\-Wall\fR warnings, use \fB\-trigraphs \-Wall \-Wno\-trigraphs\fR.
10068 .IP "\fB\-Wtraditional\fR" 4
10069 .IX Item "-Wtraditional"
10070 Warn about certain constructs that behave differently in traditional and
10071 \&\s-1ISO\s0 C.  Also warn about \s-1ISO\s0 C constructs that have no traditional C
10072 equivalent, and problematic constructs which should be avoided.
10073 .IP "\fB\-Wundef\fR" 4
10074 .IX Item "-Wundef"
10075 Warn whenever an identifier which is not a macro is encountered in an
10076 \&\fB#if\fR directive, outside of \fBdefined\fR.  Such identifiers are
10077 replaced with zero.
10078 .IP "\fB\-Wunused\-macros\fR" 4
10079 .IX Item "-Wunused-macros"
10080 Warn about macros defined in the main file that are unused.  A macro
10081 is \fIused\fR if it is expanded or tested for existence at least once.
10082 The preprocessor will also warn if the macro has not been used at the
10083 time it is redefined or undefined.
10084 .Sp
10085 Built-in macros, macros defined on the command line, and macros
10086 defined in include files are not warned about.
10087 .Sp
10088 \&\fINote:\fR If a macro is actually used, but only used in skipped
10089 conditional blocks, then \s-1CPP\s0 will report it as unused.  To avoid the
10090 warning in such a case, you might improve the scope of the macro's
10091 definition by, for example, moving it into the first skipped block.
10092 Alternatively, you could provide a dummy use with something like:
10093 .Sp
10094 .Vb 2
10095 \&        #if defined the_macro_causing_the_warning
10096 \&        #endif
10097 .Ve
10098 .IP "\fB\-Wendif\-labels\fR" 4
10099 .IX Item "-Wendif-labels"
10100 Warn whenever an \fB#else\fR or an \fB#endif\fR are followed by text.
10101 This usually happens in code of the form
10102 .Sp
10103 .Vb 5
10104 \&        #if FOO
10105 \&        ...
10106 \&        #else FOO
10107 \&        ...
10108 \&        #endif FOO
10109 .Ve
10110 .Sp
10111 The second and third \f(CW\*(C`FOO\*(C'\fR should be in comments, but often are not
10112 in older programs.  This warning is on by default.
10113 .IP "\fB\-Werror\fR" 4
10114 .IX Item "-Werror"
10115 Make all warnings into hard errors.  Source code which triggers warnings
10116 will be rejected.
10117 .IP "\fB\-Wsystem\-headers\fR" 4
10118 .IX Item "-Wsystem-headers"
10119 Issue warnings for code in system headers.  These are normally unhelpful
10120 in finding bugs in your own code, therefore suppressed.  If you are
10121 responsible for the system library, you may want to see them.
10122 .IP "\fB\-w\fR" 4
10123 .IX Item "-w"
10124 Suppress all warnings, including those which \s-1GNU\s0 \s-1CPP\s0 issues by default.
10125 .IP "\fB\-pedantic\fR" 4
10126 .IX Item "-pedantic"
10127 Issue all the mandatory diagnostics listed in the C standard.  Some of
10128 them are left out by default, since they trigger frequently on harmless
10129 code.
10130 .IP "\fB\-pedantic\-errors\fR" 4
10131 .IX Item "-pedantic-errors"
10132 Issue all the mandatory diagnostics, and make all mandatory diagnostics
10133 into errors.  This includes mandatory diagnostics that \s-1GCC\s0 issues
10134 without \fB\-pedantic\fR but treats as warnings.
10135 .IP "\fB\-M\fR" 4
10136 .IX Item "-M"
10137 Instead of outputting the result of preprocessing, output a rule
10138 suitable for \fBmake\fR describing the dependencies of the main
10139 source file.  The preprocessor outputs one \fBmake\fR rule containing
10140 the object file name for that source file, a colon, and the names of all
10141 the included files, including those coming from \fB\-include\fR or
10142 \&\fB\-imacros\fR command line options.
10143 .Sp
10144 Unless specified explicitly (with \fB\-MT\fR or \fB\-MQ\fR), the
10145 object file name consists of the name of the source file with any
10146 suffix replaced with object file suffix and with any leading directory
10147 parts removed.  If there are many included files then the rule is
10148 split into several lines using \fB\e\fR\-newline.  The rule has no
10149 commands.
10150 .Sp
10151 This option does not suppress the preprocessor's debug output, such as
10152 \&\fB\-dM\fR.  To avoid mixing such debug output with the dependency
10153 rules you should explicitly specify the dependency output file with
10154 \&\fB\-MF\fR, or use an environment variable like
10155 \&\fB\s-1DEPENDENCIES_OUTPUT\s0\fR.  Debug output
10156 will still be sent to the regular output stream as normal.
10157 .Sp
10158 Passing \fB\-M\fR to the driver implies \fB\-E\fR, and suppresses
10159 warnings with an implicit \fB\-w\fR.
10160 .IP "\fB\-MM\fR" 4
10161 .IX Item "-MM"
10162 Like \fB\-M\fR but do not mention header files that are found in
10163 system header directories, nor header files that are included,
10164 directly or indirectly, from such a header.
10165 .Sp
10166 This implies that the choice of angle brackets or double quotes in an
10167 \&\fB#include\fR directive does not in itself determine whether that
10168 header will appear in \fB\-MM\fR dependency output.  This is a
10169 slight change in semantics from \s-1GCC\s0 versions 3.0 and earlier.
10170 .IP "\fB\-MF\fR \fIfile\fR" 4
10171 .IX Item "-MF file"
10172 When used with \fB\-M\fR or \fB\-MM\fR, specifies a
10173 file to write the dependencies to.  If no \fB\-MF\fR switch is given
10174 the preprocessor sends the rules to the same place it would have sent
10175 preprocessed output.
10176 .Sp
10177 When used with the driver options \fB\-MD\fR or \fB\-MMD\fR,
10178 \&\fB\-MF\fR overrides the default dependency output file.
10179 .IP "\fB\-MG\fR" 4
10180 .IX Item "-MG"
10181 In conjunction with an option such as \fB\-M\fR requesting
10182 dependency generation, \fB\-MG\fR assumes missing header files are
10183 generated files and adds them to the dependency list without raising
10184 an error.  The dependency filename is taken directly from the
10185 \&\f(CW\*(C`#include\*(C'\fR directive without prepending any path.  \fB\-MG\fR
10186 also suppresses preprocessed output, as a missing header file renders
10187 this useless.
10188 .Sp
10189 This feature is used in automatic updating of makefiles.
10190 .IP "\fB\-MP\fR" 4
10191 .IX Item "-MP"
10192 This option instructs \s-1CPP\s0 to add a phony target for each dependency
10193 other than the main file, causing each to depend on nothing.  These
10194 dummy rules work around errors \fBmake\fR gives if you remove header
10195 files without updating the \fIMakefile\fR to match.
10196 .Sp
10197 This is typical output:
10198 .Sp
10199 .Vb 1
10200 \&        test.o: test.c test.h
10201 \&        
10202 \&        test.h:
10203 .Ve
10204 .IP "\fB\-MT\fR \fItarget\fR" 4
10205 .IX Item "-MT target"
10206 Change the target of the rule emitted by dependency generation.  By
10207 default \s-1CPP\s0 takes the name of the main input file, deletes any
10208 directory components and any file suffix such as \fB.c\fR, and
10209 appends the platform's usual object suffix.  The result is the target.
10210 .Sp
10211 An \fB\-MT\fR option will set the target to be exactly the string you
10212 specify.  If you want multiple targets, you can specify them as a single
10213 argument to \fB\-MT\fR, or use multiple \fB\-MT\fR options.
10214 .Sp
10215 For example, \fB\-MT\ '$(objpfx)foo.o'\fR might give
10216 .Sp
10217 .Vb 1
10218 \&        $(objpfx)foo.o: foo.c
10219 .Ve
10220 .IP "\fB\-MQ\fR \fItarget\fR" 4
10221 .IX Item "-MQ target"
10222 Same as \fB\-MT\fR, but it quotes any characters which are special to
10223 Make.  \fB\-MQ\ '$(objpfx)foo.o'\fR gives
10224 .Sp
10225 .Vb 1
10226 \&        $$(objpfx)foo.o: foo.c
10227 .Ve
10228 .Sp
10229 The default target is automatically quoted, as if it were given with
10230 \&\fB\-MQ\fR.
10231 .IP "\fB\-MD\fR" 4
10232 .IX Item "-MD"
10233 \&\fB\-MD\fR is equivalent to \fB\-M \-MF\fR \fIfile\fR, except that
10234 \&\fB\-E\fR is not implied.  The driver determines \fIfile\fR based on
10235 whether an \fB\-o\fR option is given.  If it is, the driver uses its
10236 argument but with a suffix of \fI.d\fR, otherwise it takes the name
10237 of the input file, removes any directory components and suffix, and
10238 applies a \fI.d\fR suffix.
10239 .Sp
10240 If \fB\-MD\fR is used in conjunction with \fB\-E\fR, any
10241 \&\fB\-o\fR switch is understood to specify the dependency output file, but if used without \fB\-E\fR, each \fB\-o\fR
10242 is understood to specify a target object file.
10243 .Sp
10244 Since \fB\-E\fR is not implied, \fB\-MD\fR can be used to generate
10245 a dependency output file as a side-effect of the compilation process.
10246 .IP "\fB\-MMD\fR" 4
10247 .IX Item "-MMD"
10248 Like \fB\-MD\fR except mention only user header files, not system
10249 header files.
10250 .IP "\fB\-fpch\-deps\fR" 4
10251 .IX Item "-fpch-deps"
10252 When using precompiled headers, this flag
10253 will cause the dependency-output flags to also list the files from the
10254 precompiled header's dependencies.  If not specified only the
10255 precompiled header would be listed and not the files that were used to
10256 create it because those files are not consulted when a precompiled
10257 header is used.
10258 .IP "\fB\-fpch\-preprocess\fR" 4
10259 .IX Item "-fpch-preprocess"
10260 This option allows use of a precompiled header together with \fB\-E\fR.  It inserts a special \f(CW\*(C`#pragma\*(C'\fR,
10261 \&\f(CW\*(C`#pragma GCC pch_preprocess "\f(CIfilename\f(CW"\*(C'\fR in the output to mark
10262 the place where the precompiled header was found, and its \fIfilename\fR.
10263 When \fB\-fpreprocessed\fR is in use, \s-1GCC\s0 recognizes this \f(CW\*(C`#pragma\*(C'\fR
10264 and loads the \s-1PCH\s0.
10265 .Sp
10266 This option is off by default, because the resulting preprocessed output
10267 is only really suitable as input to \s-1GCC\s0.  It is switched on by
10268 \&\fB\-save\-temps\fR.
10269 .Sp
10270 You should not write this \f(CW\*(C`#pragma\*(C'\fR in your own code, but it is
10271 safe to edit the filename if the \s-1PCH\s0 file is available in a different
10272 location.  The filename may be absolute or it may be relative to \s-1GCC\s0's
10273 current directory.
10274 .IP "\fB\-x c\fR" 4
10275 .IX Item "-x c"
10276 .PD 0
10277 .IP "\fB\-x c++\fR" 4
10278 .IX Item "-x c++"
10279 .IP "\fB\-x objective-c\fR" 4
10280 .IX Item "-x objective-c"
10281 .IP "\fB\-x assembler-with-cpp\fR" 4
10282 .IX Item "-x assembler-with-cpp"
10283 .PD
10284 Specify the source language: C, \*(C+, Objective-C, or assembly.  This has
10285 nothing to do with standards conformance or extensions; it merely
10286 selects which base syntax to expect.  If you give none of these options,
10287 cpp will deduce the language from the extension of the source file:
10288 \&\fB.c\fR, \fB.cc\fR, \fB.m\fR, or \fB.S\fR.  Some other common
10289 extensions for \*(C+ and assembly are also recognized.  If cpp does not
10290 recognize the extension, it will treat the file as C; this is the most
10291 generic mode.
10292 .Sp
10293 \&\fINote:\fR Previous versions of cpp accepted a \fB\-lang\fR option
10294 which selected both the language and the standards conformance level.
10295 This option has been removed, because it conflicts with the \fB\-l\fR
10296 option.
10297 .IP "\fB\-std=\fR\fIstandard\fR" 4
10298 .IX Item "-std=standard"
10299 .PD 0
10300 .IP "\fB\-ansi\fR" 4
10301 .IX Item "-ansi"
10302 .PD
10303 Specify the standard to which the code should conform.  Currently \s-1CPP\s0
10304 knows about C and \*(C+ standards; others may be added in the future.
10305 .Sp
10306 \&\fIstandard\fR
10307 may be one of:
10308 .RS 4
10309 .ie n .IP """c90""" 4
10310 .el .IP "\f(CWc90\fR" 4
10311 .IX Item "c90"
10312 .PD 0
10313 .ie n .IP """c89""" 4
10314 .el .IP "\f(CWc89\fR" 4
10315 .IX Item "c89"
10316 .ie n .IP """iso9899:1990""" 4
10317 .el .IP "\f(CWiso9899:1990\fR" 4
10318 .IX Item "iso9899:1990"
10319 .PD
10320 The \s-1ISO\s0 C standard from 1990.  \fBc90\fR is the customary shorthand for
10321 this version of the standard.
10322 .Sp
10323 The \fB\-ansi\fR option is equivalent to \fB\-std=c90\fR.
10324 .ie n .IP """iso9899:199409""" 4
10325 .el .IP "\f(CWiso9899:199409\fR" 4
10326 .IX Item "iso9899:199409"
10327 The 1990 C standard, as amended in 1994.
10328 .ie n .IP """iso9899:1999""" 4
10329 .el .IP "\f(CWiso9899:1999\fR" 4
10330 .IX Item "iso9899:1999"
10331 .PD 0
10332 .ie n .IP """c99""" 4
10333 .el .IP "\f(CWc99\fR" 4
10334 .IX Item "c99"
10335 .ie n .IP """iso9899:199x""" 4
10336 .el .IP "\f(CWiso9899:199x\fR" 4
10337 .IX Item "iso9899:199x"
10338 .ie n .IP """c9x""" 4
10339 .el .IP "\f(CWc9x\fR" 4
10340 .IX Item "c9x"
10341 .PD
10342 The revised \s-1ISO\s0 C standard, published in December 1999.  Before
10343 publication, this was known as C9X.
10344 .ie n .IP """iso9899:2011""" 4
10345 .el .IP "\f(CWiso9899:2011\fR" 4
10346 .IX Item "iso9899:2011"
10347 .PD 0
10348 .ie n .IP """c11""" 4
10349 .el .IP "\f(CWc11\fR" 4
10350 .IX Item "c11"
10351 .ie n .IP """c1x""" 4
10352 .el .IP "\f(CWc1x\fR" 4
10353 .IX Item "c1x"
10354 .PD
10355 The revised \s-1ISO\s0 C standard, published in December 2011.  Before
10356 publication, this was known as C1X.
10357 .ie n .IP """gnu90""" 4
10358 .el .IP "\f(CWgnu90\fR" 4
10359 .IX Item "gnu90"
10360 .PD 0
10361 .ie n .IP """gnu89""" 4
10362 .el .IP "\f(CWgnu89\fR" 4
10363 .IX Item "gnu89"
10364 .PD
10365 The 1990 C standard plus \s-1GNU\s0 extensions.  This is the default.
10366 .ie n .IP """gnu99""" 4
10367 .el .IP "\f(CWgnu99\fR" 4
10368 .IX Item "gnu99"
10369 .PD 0
10370 .ie n .IP """gnu9x""" 4
10371 .el .IP "\f(CWgnu9x\fR" 4
10372 .IX Item "gnu9x"
10373 .PD
10374 The 1999 C standard plus \s-1GNU\s0 extensions.
10375 .ie n .IP """gnu11""" 4
10376 .el .IP "\f(CWgnu11\fR" 4
10377 .IX Item "gnu11"
10378 .PD 0
10379 .ie n .IP """gnu1x""" 4
10380 .el .IP "\f(CWgnu1x\fR" 4
10381 .IX Item "gnu1x"
10382 .PD
10383 The 2011 C standard plus \s-1GNU\s0 extensions.
10384 .ie n .IP """c++98""" 4
10385 .el .IP "\f(CWc++98\fR" 4
10386 .IX Item "c++98"
10387 The 1998 \s-1ISO\s0 \*(C+ standard plus amendments.
10388 .ie n .IP """gnu++98""" 4
10389 .el .IP "\f(CWgnu++98\fR" 4
10390 .IX Item "gnu++98"
10391 The same as \fB\-std=c++98\fR plus \s-1GNU\s0 extensions.  This is the
10392 default for \*(C+ code.
10393 .RE
10394 .RS 4
10395 .RE
10396 .IP "\fB\-I\-\fR" 4
10397 .IX Item "-I-"
10398 Split the include path.  Any directories specified with \fB\-I\fR
10399 options before \fB\-I\-\fR are searched only for headers requested with
10400 \&\f(CW\*(C`#include\ "\f(CIfile\f(CW"\*(C'\fR; they are not searched for
10401 \&\f(CW\*(C`#include\ <\f(CIfile\f(CW>\*(C'\fR.  If additional directories are
10402 specified with \fB\-I\fR options after the \fB\-I\-\fR, those
10403 directories are searched for all \fB#include\fR directives.
10404 .Sp
10405 In addition, \fB\-I\-\fR inhibits the use of the directory of the current
10406 file directory as the first search directory for \f(CW\*(C`#include\ "\f(CIfile\f(CW"\*(C'\fR.
10407 This option has been deprecated.
10408 .IP "\fB\-nostdinc\fR" 4
10409 .IX Item "-nostdinc"
10410 Do not search the standard system directories for header files.
10411 Only the directories you have specified with \fB\-I\fR options
10412 (and the directory of the current file, if appropriate) are searched.
10413 .IP "\fB\-nostdinc++\fR" 4
10414 .IX Item "-nostdinc++"
10415 Do not search for header files in the \*(C+\-specific standard directories,
10416 but do still search the other standard directories.  (This option is
10417 used when building the \*(C+ library.)
10418 .IP "\fB\-include\fR \fIfile\fR" 4
10419 .IX Item "-include file"
10420 Process \fIfile\fR as if \f(CW\*(C`#include "file"\*(C'\fR appeared as the first
10421 line of the primary source file.  However, the first directory searched
10422 for \fIfile\fR is the preprocessor's working directory \fIinstead of\fR
10423 the directory containing the main source file.  If not found there, it
10424 is searched for in the remainder of the \f(CW\*(C`#include "..."\*(C'\fR search
10425 chain as normal.
10426 .Sp
10427 If multiple \fB\-include\fR options are given, the files are included
10428 in the order they appear on the command line.
10429 .IP "\fB\-imacros\fR \fIfile\fR" 4
10430 .IX Item "-imacros file"
10431 Exactly like \fB\-include\fR, except that any output produced by
10432 scanning \fIfile\fR is thrown away.  Macros it defines remain defined.
10433 This allows you to acquire all the macros from a header without also
10434 processing its declarations.
10435 .Sp
10436 All files specified by \fB\-imacros\fR are processed before all files
10437 specified by \fB\-include\fR.
10438 .IP "\fB\-idirafter\fR \fIdir\fR" 4
10439 .IX Item "-idirafter dir"
10440 Search \fIdir\fR for header files, but do it \fIafter\fR all
10441 directories specified with \fB\-I\fR and the standard system directories
10442 have been exhausted.  \fIdir\fR is treated as a system include directory.
10443 If \fIdir\fR begins with \f(CW\*(C`=\*(C'\fR, then the \f(CW\*(C`=\*(C'\fR will be replaced
10444 by the sysroot prefix; see \fB\-\-sysroot\fR and \fB\-isysroot\fR.
10445 .IP "\fB\-iprefix\fR \fIprefix\fR" 4
10446 .IX Item "-iprefix prefix"
10447 Specify \fIprefix\fR as the prefix for subsequent \fB\-iwithprefix\fR
10448 options.  If the prefix represents a directory, you should include the
10449 final \fB/\fR.
10450 .IP "\fB\-iwithprefix\fR \fIdir\fR" 4
10451 .IX Item "-iwithprefix dir"
10452 .PD 0
10453 .IP "\fB\-iwithprefixbefore\fR \fIdir\fR" 4
10454 .IX Item "-iwithprefixbefore dir"
10455 .PD
10456 Append \fIdir\fR to the prefix specified previously with
10457 \&\fB\-iprefix\fR, and add the resulting directory to the include search
10458 path.  \fB\-iwithprefixbefore\fR puts it in the same place \fB\-I\fR
10459 would; \fB\-iwithprefix\fR puts it where \fB\-idirafter\fR would.
10460 .IP "\fB\-isysroot\fR \fIdir\fR" 4
10461 .IX Item "-isysroot dir"
10462 This option is like the \fB\-\-sysroot\fR option, but applies only to
10463 header files (except for Darwin targets, where it applies to both header
10464 files and libraries).  See the \fB\-\-sysroot\fR option for more
10465 information.
10466 .IP "\fB\-imultilib\fR \fIdir\fR" 4
10467 .IX Item "-imultilib dir"
10468 Use \fIdir\fR as a subdirectory of the directory containing
10469 target-specific \*(C+ headers.
10470 .IP "\fB\-isystem\fR \fIdir\fR" 4
10471 .IX Item "-isystem dir"
10472 Search \fIdir\fR for header files, after all directories specified by
10473 \&\fB\-I\fR but before the standard system directories.  Mark it
10474 as a system directory, so that it gets the same special treatment as
10475 is applied to the standard system directories.
10476 If \fIdir\fR begins with \f(CW\*(C`=\*(C'\fR, then the \f(CW\*(C`=\*(C'\fR will be replaced
10477 by the sysroot prefix; see \fB\-\-sysroot\fR and \fB\-isysroot\fR.
10478 .IP "\fB\-iquote\fR \fIdir\fR" 4
10479 .IX Item "-iquote dir"
10480 Search \fIdir\fR only for header files requested with
10481 \&\f(CW\*(C`#include\ "\f(CIfile\f(CW"\*(C'\fR; they are not searched for
10482 \&\f(CW\*(C`#include\ <\f(CIfile\f(CW>\*(C'\fR, before all directories specified by
10483 \&\fB\-I\fR and before the standard system directories.
10484 If \fIdir\fR begins with \f(CW\*(C`=\*(C'\fR, then the \f(CW\*(C`=\*(C'\fR will be replaced
10485 by the sysroot prefix; see \fB\-\-sysroot\fR and \fB\-isysroot\fR.
10486 .IP "\fB\-fdirectives\-only\fR" 4
10487 .IX Item "-fdirectives-only"
10488 When preprocessing, handle directives, but do not expand macros.
10489 .Sp
10490 The option's behavior depends on the \fB\-E\fR and \fB\-fpreprocessed\fR
10491 options.
10492 .Sp
10493 With \fB\-E\fR, preprocessing is limited to the handling of directives
10494 such as \f(CW\*(C`#define\*(C'\fR, \f(CW\*(C`#ifdef\*(C'\fR, and \f(CW\*(C`#error\*(C'\fR.  Other
10495 preprocessor operations, such as macro expansion and trigraph
10496 conversion are not performed.  In addition, the \fB\-dD\fR option is
10497 implicitly enabled.
10498 .Sp
10499 With \fB\-fpreprocessed\fR, predefinition of command line and most
10500 builtin macros is disabled.  Macros such as \f(CW\*(C`_\|_LINE_\|_\*(C'\fR, which are
10501 contextually dependent, are handled normally.  This enables compilation of
10502 files previously preprocessed with \f(CW\*(C`\-E \-fdirectives\-only\*(C'\fR.
10503 .Sp
10504 With both \fB\-E\fR and \fB\-fpreprocessed\fR, the rules for
10505 \&\fB\-fpreprocessed\fR take precedence.  This enables full preprocessing of
10506 files previously preprocessed with \f(CW\*(C`\-E \-fdirectives\-only\*(C'\fR.
10507 .IP "\fB\-fdollars\-in\-identifiers\fR" 4
10508 .IX Item "-fdollars-in-identifiers"
10509 Accept \fB$\fR in identifiers.
10510 .IP "\fB\-fextended\-identifiers\fR" 4
10511 .IX Item "-fextended-identifiers"
10512 Accept universal character names in identifiers.  This option is
10513 enabled by default for C99 (and later C standard versions) and \*(C+.
10514 .IP "\fB\-fno\-canonical\-system\-headers\fR" 4
10515 .IX Item "-fno-canonical-system-headers"
10516 When preprocessing, do not shorten system header paths with canonicalization.
10517 .IP "\fB\-fpreprocessed\fR" 4
10518 .IX Item "-fpreprocessed"
10519 Indicate to the preprocessor that the input file has already been
10520 preprocessed.  This suppresses things like macro expansion, trigraph
10521 conversion, escaped newline splicing, and processing of most directives.
10522 The preprocessor still recognizes and removes comments, so that you can
10523 pass a file preprocessed with \fB\-C\fR to the compiler without
10524 problems.  In this mode the integrated preprocessor is little more than
10525 a tokenizer for the front ends.
10526 .Sp
10527 \&\fB\-fpreprocessed\fR is implicit if the input file has one of the
10528 extensions \fB.i\fR, \fB.ii\fR or \fB.mi\fR.  These are the
10529 extensions that \s-1GCC\s0 uses for preprocessed files created by
10530 \&\fB\-save\-temps\fR.
10531 .IP "\fB\-ftabstop=\fR\fIwidth\fR" 4
10532 .IX Item "-ftabstop=width"
10533 Set the distance between tab stops.  This helps the preprocessor report
10534 correct column numbers in warnings or errors, even if tabs appear on the
10535 line.  If the value is less than 1 or greater than 100, the option is
10536 ignored.  The default is 8.
10537 .IP "\fB\-fdebug\-cpp\fR" 4
10538 .IX Item "-fdebug-cpp"
10539 This option is only useful for debugging \s-1GCC\s0.  When used with
10540 \&\fB\-E\fR, dumps debugging information about location maps.  Every
10541 token in the output is preceded by the dump of the map its location
10542 belongs to.  The dump of the map holding the location of a token would
10543 be:
10544 .Sp
10545 .Vb 1
10546 \&        {"P":F</file/path>;"F":F</includer/path>;"L":<line_num>;"C":<col_num>;"S":<system_header_p>;"M":<map_address>;"E":<macro_expansion_p>,"loc":<location>}
10547 .Ve
10548 .Sp
10549 When used without \fB\-E\fR, this option has no effect.
10550 .IP "\fB\-ftrack\-macro\-expansion\fR[\fB=\fR\fIlevel\fR]" 4
10551 .IX Item "-ftrack-macro-expansion[=level]"
10552 Track locations of tokens across macro expansions. This allows the
10553 compiler to emit diagnostic about the current macro expansion stack
10554 when a compilation error occurs in a macro expansion. Using this
10555 option makes the preprocessor and the compiler consume more
10556 memory. The \fIlevel\fR parameter can be used to choose the level of
10557 precision of token location tracking thus decreasing the memory
10558 consumption if necessary. Value \fB0\fR of \fIlevel\fR de-activates
10559 this option just as if no \fB\-ftrack\-macro\-expansion\fR was present
10560 on the command line. Value \fB1\fR tracks tokens locations in a
10561 degraded mode for the sake of minimal memory overhead. In this mode
10562 all tokens resulting from the expansion of an argument of a
10563 function-like macro have the same location. Value \fB2\fR tracks
10564 tokens locations completely. This value is the most memory hungry.
10565 When this option is given no argument, the default parameter value is
10566 \&\fB2\fR.
10567 .Sp
10568 Note that \f(CW\*(C`\-ftrack\-macro\-expansion=2\*(C'\fR is activated by default.
10569 .IP "\fB\-fexec\-charset=\fR\fIcharset\fR" 4
10570 .IX Item "-fexec-charset=charset"
10571 Set the execution character set, used for string and character
10572 constants.  The default is \s-1UTF\-8\s0.  \fIcharset\fR can be any encoding
10573 supported by the system's \f(CW\*(C`iconv\*(C'\fR library routine.
10574 .IP "\fB\-fwide\-exec\-charset=\fR\fIcharset\fR" 4
10575 .IX Item "-fwide-exec-charset=charset"
10576 Set the wide execution character set, used for wide string and
10577 character constants.  The default is \s-1UTF\-32\s0 or \s-1UTF\-16\s0, whichever
10578 corresponds to the width of \f(CW\*(C`wchar_t\*(C'\fR.  As with
10579 \&\fB\-fexec\-charset\fR, \fIcharset\fR can be any encoding supported
10580 by the system's \f(CW\*(C`iconv\*(C'\fR library routine; however, you will have
10581 problems with encodings that do not fit exactly in \f(CW\*(C`wchar_t\*(C'\fR.
10582 .IP "\fB\-finput\-charset=\fR\fIcharset\fR" 4
10583 .IX Item "-finput-charset=charset"
10584 Set the input character set, used for translation from the character
10585 set of the input file to the source character set used by \s-1GCC\s0.  If the
10586 locale does not specify, or \s-1GCC\s0 cannot get this information from the
10587 locale, the default is \s-1UTF\-8\s0.  This can be overridden by either the locale
10588 or this command line option.  Currently the command line option takes
10589 precedence if there's a conflict.  \fIcharset\fR can be any encoding
10590 supported by the system's \f(CW\*(C`iconv\*(C'\fR library routine.
10591 .IP "\fB\-fworking\-directory\fR" 4
10592 .IX Item "-fworking-directory"
10593 Enable generation of linemarkers in the preprocessor output that will
10594 let the compiler know the current working directory at the time of
10595 preprocessing.  When this option is enabled, the preprocessor will
10596 emit, after the initial linemarker, a second linemarker with the
10597 current working directory followed by two slashes.  \s-1GCC\s0 will use this
10598 directory, when it's present in the preprocessed input, as the
10599 directory emitted as the current working directory in some debugging
10600 information formats.  This option is implicitly enabled if debugging
10601 information is enabled, but this can be inhibited with the negated
10602 form \fB\-fno\-working\-directory\fR.  If the \fB\-P\fR flag is
10603 present in the command line, this option has no effect, since no
10604 \&\f(CW\*(C`#line\*(C'\fR directives are emitted whatsoever.
10605 .IP "\fB\-fno\-show\-column\fR" 4
10606 .IX Item "-fno-show-column"
10607 Do not print column numbers in diagnostics.  This may be necessary if
10608 diagnostics are being scanned by a program that does not understand the
10609 column numbers, such as \fBdejagnu\fR.
10610 .IP "\fB\-A\fR \fIpredicate\fR\fB=\fR\fIanswer\fR" 4
10611 .IX Item "-A predicate=answer"
10612 Make an assertion with the predicate \fIpredicate\fR and answer
10613 \&\fIanswer\fR.  This form is preferred to the older form \fB\-A\fR
10614 \&\fIpredicate\fR\fB(\fR\fIanswer\fR\fB)\fR, which is still supported, because
10615 it does not use shell special characters.
10616 .IP "\fB\-A \-\fR\fIpredicate\fR\fB=\fR\fIanswer\fR" 4
10617 .IX Item "-A -predicate=answer"
10618 Cancel an assertion with the predicate \fIpredicate\fR and answer
10619 \&\fIanswer\fR.
10620 .IP "\fB\-dCHARS\fR" 4
10621 .IX Item "-dCHARS"
10622 \&\fI\s-1CHARS\s0\fR is a sequence of one or more of the following characters,
10623 and must not be preceded by a space.  Other characters are interpreted
10624 by the compiler proper, or reserved for future versions of \s-1GCC\s0, and so
10625 are silently ignored.  If you specify characters whose behavior
10626 conflicts, the result is undefined.
10627 .RS 4
10628 .IP "\fBM\fR" 4
10629 .IX Item "M"
10630 Instead of the normal output, generate a list of \fB#define\fR
10631 directives for all the macros defined during the execution of the
10632 preprocessor, including predefined macros.  This gives you a way of
10633 finding out what is predefined in your version of the preprocessor.
10634 Assuming you have no file \fIfoo.h\fR, the command
10635 .Sp
10636 .Vb 1
10637 \&        touch foo.h; cpp \-dM foo.h
10638 .Ve
10639 .Sp
10640 will show all the predefined macros.
10641 .Sp
10642 If you use \fB\-dM\fR without the \fB\-E\fR option, \fB\-dM\fR is
10643 interpreted as a synonym for \fB\-fdump\-rtl\-mach\fR.
10644 .IP "\fBD\fR" 4
10645 .IX Item "D"
10646 Like \fBM\fR except in two respects: it does \fInot\fR include the
10647 predefined macros, and it outputs \fIboth\fR the \fB#define\fR
10648 directives and the result of preprocessing.  Both kinds of output go to
10649 the standard output file.
10650 .IP "\fBN\fR" 4
10651 .IX Item "N"
10652 Like \fBD\fR, but emit only the macro names, not their expansions.
10653 .IP "\fBI\fR" 4
10654 .IX Item "I"
10655 Output \fB#include\fR directives in addition to the result of
10656 preprocessing.
10657 .IP "\fBU\fR" 4
10658 .IX Item "U"
10659 Like \fBD\fR except that only macros that are expanded, or whose
10660 definedness is tested in preprocessor directives, are output; the
10661 output is delayed until the use or test of the macro; and
10662 \&\fB#undef\fR directives are also output for macros tested but
10663 undefined at the time.
10664 .RE
10665 .RS 4
10666 .RE
10667 .IP "\fB\-P\fR" 4
10668 .IX Item "-P"
10669 Inhibit generation of linemarkers in the output from the preprocessor.
10670 This might be useful when running the preprocessor on something that is
10671 not C code, and will be sent to a program which might be confused by the
10672 linemarkers.
10673 .IP "\fB\-C\fR" 4
10674 .IX Item "-C"
10675 Do not discard comments.  All comments are passed through to the output
10676 file, except for comments in processed directives, which are deleted
10677 along with the directive.
10678 .Sp
10679 You should be prepared for side effects when using \fB\-C\fR; it
10680 causes the preprocessor to treat comments as tokens in their own right.
10681 For example, comments appearing at the start of what would be a
10682 directive line have the effect of turning that line into an ordinary
10683 source line, since the first token on the line is no longer a \fB#\fR.
10684 .IP "\fB\-CC\fR" 4
10685 .IX Item "-CC"
10686 Do not discard comments, including during macro expansion.  This is
10687 like \fB\-C\fR, except that comments contained within macros are
10688 also passed through to the output file where the macro is expanded.
10689 .Sp
10690 In addition to the side-effects of the \fB\-C\fR option, the
10691 \&\fB\-CC\fR option causes all \*(C+\-style comments inside a macro
10692 to be converted to C\-style comments.  This is to prevent later use
10693 of that macro from inadvertently commenting out the remainder of
10694 the source line.
10695 .Sp
10696 The \fB\-CC\fR option is generally used to support lint comments.
10697 .IP "\fB\-traditional\-cpp\fR" 4
10698 .IX Item "-traditional-cpp"
10699 Try to imitate the behavior of old-fashioned C preprocessors, as
10700 opposed to \s-1ISO\s0 C preprocessors.
10701 .IP "\fB\-trigraphs\fR" 4
10702 .IX Item "-trigraphs"
10703 Process trigraph sequences.
10704 These are three-character sequences, all starting with \fB??\fR, that
10705 are defined by \s-1ISO\s0 C to stand for single characters.  For example,
10706 \&\fB??/\fR stands for \fB\e\fR, so \fB'??/n'\fR is a character
10707 constant for a newline.  By default, \s-1GCC\s0 ignores trigraphs, but in
10708 standard-conforming modes it converts them.  See the \fB\-std\fR and
10709 \&\fB\-ansi\fR options.
10710 .Sp
10711 The nine trigraphs and their replacements are
10712 .Sp
10713 .Vb 2
10714 \&        Trigraph:       ??(  ??)  ??<  ??>  ??=  ??/  ??\*(Aq  ??!  ??\-
10715 \&        Replacement:      [    ]    {    }    #    \e    ^    |    ~
10716 .Ve
10717 .IP "\fB\-remap\fR" 4
10718 .IX Item "-remap"
10719 Enable special code to work around file systems which only permit very
10720 short file names, such as MS-DOS.
10721 .IP "\fB\-\-help\fR" 4
10722 .IX Item "--help"
10723 .PD 0
10724 .IP "\fB\-\-target\-help\fR" 4
10725 .IX Item "--target-help"
10726 .PD
10727 Print text describing all the command line options instead of
10728 preprocessing anything.
10729 .IP "\fB\-v\fR" 4
10730 .IX Item "-v"
10731 Verbose mode.  Print out \s-1GNU\s0 \s-1CPP\s0's version number at the beginning of
10732 execution, and report the final form of the include path.
10733 .IP "\fB\-H\fR" 4
10734 .IX Item "-H"
10735 Print the name of each header file used, in addition to other normal
10736 activities.  Each name is indented to show how deep in the
10737 \&\fB#include\fR stack it is.  Precompiled header files are also
10738 printed, even if they are found to be invalid; an invalid precompiled
10739 header file is printed with \fB...x\fR and a valid one with \fB...!\fR .
10740 .IP "\fB\-version\fR" 4
10741 .IX Item "-version"
10742 .PD 0
10743 .IP "\fB\-\-version\fR" 4
10744 .IX Item "--version"
10745 .PD
10746 Print out \s-1GNU\s0 \s-1CPP\s0's version number.  With one dash, proceed to
10747 preprocess as normal.  With two dashes, exit immediately.
10748 .SS "Passing Options to the Assembler"
10749 .IX Subsection "Passing Options to the Assembler"
10750 You can pass options to the assembler.
10751 .IP "\fB\-Wa,\fR\fIoption\fR" 4
10752 .IX Item "-Wa,option"
10753 Pass \fIoption\fR as an option to the assembler.  If \fIoption\fR
10754 contains commas, it is split into multiple options at the commas.
10755 .IP "\fB\-Xassembler\fR \fIoption\fR" 4
10756 .IX Item "-Xassembler option"
10757 Pass \fIoption\fR as an option to the assembler.  You can use this to
10758 supply system-specific assembler options that \s-1GCC\s0 does not
10759 recognize.
10760 .Sp
10761 If you want to pass an option that takes an argument, you must use
10762 \&\fB\-Xassembler\fR twice, once for the option and once for the argument.
10763 .SS "Options for Linking"
10764 .IX Subsection "Options for Linking"
10765 These options come into play when the compiler links object files into
10766 an executable output file.  They are meaningless if the compiler is
10767 not doing a link step.
10768 .IP "\fIobject-file-name\fR" 4
10769 .IX Item "object-file-name"
10770 A file name that does not end in a special recognized suffix is
10771 considered to name an object file or library.  (Object files are
10772 distinguished from libraries by the linker according to the file
10773 contents.)  If linking is done, these object files are used as input
10774 to the linker.
10775 .IP "\fB\-c\fR" 4
10776 .IX Item "-c"
10777 .PD 0
10778 .IP "\fB\-S\fR" 4
10779 .IX Item "-S"
10780 .IP "\fB\-E\fR" 4
10781 .IX Item "-E"
10782 .PD
10783 If any of these options is used, then the linker is not run, and
10784 object file names should not be used as arguments.
10785 .IP "\fB\-l\fR\fIlibrary\fR" 4
10786 .IX Item "-llibrary"
10787 .PD 0
10788 .IP "\fB\-l\fR \fIlibrary\fR" 4
10789 .IX Item "-l library"
10790 .PD
10791 Search the library named \fIlibrary\fR when linking.  (The second
10792 alternative with the library as a separate argument is only for
10793 \&\s-1POSIX\s0 compliance and is not recommended.)
10794 .Sp
10795 It makes a difference where in the command you write this option; the
10796 linker searches and processes libraries and object files in the order they
10797 are specified.  Thus, \fBfoo.o \-lz bar.o\fR searches library \fBz\fR
10798 after file \fIfoo.o\fR but before \fIbar.o\fR.  If \fIbar.o\fR refers
10799 to functions in \fBz\fR, those functions may not be loaded.
10800 .Sp
10801 The linker searches a standard list of directories for the library,
10802 which is actually a file named \fIlib\fIlibrary\fI.a\fR.  The linker
10803 then uses this file as if it had been specified precisely by name.
10804 .Sp
10805 The directories searched include several standard system directories
10806 plus any that you specify with \fB\-L\fR.
10807 .Sp
10808 Normally the files found this way are library files\-\-\-archive files
10809 whose members are object files.  The linker handles an archive file by
10810 scanning through it for members which define symbols that have so far
10811 been referenced but not defined.  But if the file that is found is an
10812 ordinary object file, it is linked in the usual fashion.  The only
10813 difference between using an \fB\-l\fR option and specifying a file name
10814 is that \fB\-l\fR surrounds \fIlibrary\fR with \fBlib\fR and \fB.a\fR
10815 and searches several directories.
10816 .IP "\fB\-lobjc\fR" 4
10817 .IX Item "-lobjc"
10818 You need this special case of the \fB\-l\fR option in order to
10819 link an Objective-C or Objective\-\*(C+ program.
10820 .IP "\fB\-nostartfiles\fR" 4
10821 .IX Item "-nostartfiles"
10822 Do not use the standard system startup files when linking.
10823 The standard system libraries are used normally, unless \fB\-nostdlib\fR
10824 or \fB\-nodefaultlibs\fR is used.
10825 .IP "\fB\-nodefaultlibs\fR" 4
10826 .IX Item "-nodefaultlibs"
10827 Do not use the standard system libraries when linking.
10828 Only the libraries you specify are passed to the linker, and options
10829 specifying linkage of the system libraries, such as \fB\-static\-libgcc\fR
10830 or \fB\-shared\-libgcc\fR, are ignored.  
10831 The standard startup files are used normally, unless \fB\-nostartfiles\fR
10832 is used.
10833 .Sp
10834 The compiler may generate calls to \f(CW\*(C`memcmp\*(C'\fR,
10835 \&\f(CW\*(C`memset\*(C'\fR, \f(CW\*(C`memcpy\*(C'\fR and \f(CW\*(C`memmove\*(C'\fR.
10836 These entries are usually resolved by entries in
10837 libc.  These entry points should be supplied through some other
10838 mechanism when this option is specified.
10839 .IP "\fB\-nostdlib\fR" 4
10840 .IX Item "-nostdlib"
10841 Do not use the standard system startup files or libraries when linking.
10842 No startup files and only the libraries you specify are passed to
10843 the linker, and options specifying linkage of the system libraries, such as
10844 \&\fB\-static\-libgcc\fR or \fB\-shared\-libgcc\fR, are ignored.
10845 .Sp
10846 The compiler may generate calls to \f(CW\*(C`memcmp\*(C'\fR, \f(CW\*(C`memset\*(C'\fR,
10847 \&\f(CW\*(C`memcpy\*(C'\fR and \f(CW\*(C`memmove\*(C'\fR.
10848 These entries are usually resolved by entries in
10849 libc.  These entry points should be supplied through some other
10850 mechanism when this option is specified.
10851 .Sp
10852 One of the standard libraries bypassed by \fB\-nostdlib\fR and
10853 \&\fB\-nodefaultlibs\fR is \fIlibgcc.a\fR, a library of internal subroutines
10854 which \s-1GCC\s0 uses to overcome shortcomings of particular machines, or special
10855 needs for some languages.
10856 .Sp
10857 In most cases, you need \fIlibgcc.a\fR even when you want to avoid
10858 other standard libraries.  In other words, when you specify \fB\-nostdlib\fR
10859 or \fB\-nodefaultlibs\fR you should usually specify \fB\-lgcc\fR as well.
10860 This ensures that you have no unresolved references to internal \s-1GCC\s0
10861 library subroutines.
10862 (An example of such an internal subroutine is \f(CW\*(C`_\|_main\*(C'\fR, used to ensure \*(C+
10863 constructors are called.)
10864 .IP "\fB\-pie\fR" 4
10865 .IX Item "-pie"
10866 Produce a position independent executable on targets that support it.
10867 For predictable results, you must also specify the same set of options
10868 used for compilation (\fB\-fpie\fR, \fB\-fPIE\fR,
10869 or model suboptions) when you specify this linker option.
10870 .IP "\fB\-rdynamic\fR" 4
10871 .IX Item "-rdynamic"
10872 Pass the flag \fB\-export\-dynamic\fR to the \s-1ELF\s0 linker, on targets
10873 that support it. This instructs the linker to add all symbols, not
10874 only used ones, to the dynamic symbol table. This option is needed
10875 for some uses of \f(CW\*(C`dlopen\*(C'\fR or to allow obtaining backtraces
10876 from within a program.
10877 .IP "\fB\-s\fR" 4
10878 .IX Item "-s"
10879 Remove all symbol table and relocation information from the executable.
10880 .IP "\fB\-static\fR" 4
10881 .IX Item "-static"
10882 On systems that support dynamic linking, this prevents linking with the shared
10883 libraries.  On other systems, this option has no effect.
10884 .IP "\fB\-shared\fR" 4
10885 .IX Item "-shared"
10886 Produce a shared object which can then be linked with other objects to
10887 form an executable.  Not all systems support this option.  For predictable
10888 results, you must also specify the same set of options used for compilation
10889 (\fB\-fpic\fR, \fB\-fPIC\fR, or model suboptions) when
10890 you specify this linker option.[1]
10891 .IP "\fB\-shared\-libgcc\fR" 4
10892 .IX Item "-shared-libgcc"
10893 .PD 0
10894 .IP "\fB\-static\-libgcc\fR" 4
10895 .IX Item "-static-libgcc"
10896 .PD
10897 On systems that provide \fIlibgcc\fR as a shared library, these options
10898 force the use of either the shared or static version, respectively.
10899 If no shared version of \fIlibgcc\fR was built when the compiler was
10900 configured, these options have no effect.
10901 .Sp
10902 There are several situations in which an application should use the
10903 shared \fIlibgcc\fR instead of the static version.  The most common
10904 of these is when the application wishes to throw and catch exceptions
10905 across different shared libraries.  In that case, each of the libraries
10906 as well as the application itself should use the shared \fIlibgcc\fR.
10907 .Sp
10908 Therefore, the G++ and \s-1GCJ\s0 drivers automatically add
10909 \&\fB\-shared\-libgcc\fR whenever you build a shared library or a main
10910 executable, because \*(C+ and Java programs typically use exceptions, so
10911 this is the right thing to do.
10912 .Sp
10913 If, instead, you use the \s-1GCC\s0 driver to create shared libraries, you may
10914 find that they are not always linked with the shared \fIlibgcc\fR.
10915 If \s-1GCC\s0 finds, at its configuration time, that you have a non-GNU linker
10916 or a \s-1GNU\s0 linker that does not support option \fB\-\-eh\-frame\-hdr\fR,
10917 it links the shared version of \fIlibgcc\fR into shared libraries
10918 by default.  Otherwise, it takes advantage of the linker and optimizes
10919 away the linking with the shared version of \fIlibgcc\fR, linking with
10920 the static version of libgcc by default.  This allows exceptions to
10921 propagate through such shared libraries, without incurring relocation
10922 costs at library load time.
10923 .Sp
10924 However, if a library or main executable is supposed to throw or catch
10925 exceptions, you must link it using the G++ or \s-1GCJ\s0 driver, as appropriate
10926 for the languages used in the program, or using the option
10927 \&\fB\-shared\-libgcc\fR, such that it is linked with the shared
10928 \&\fIlibgcc\fR.
10929 .IP "\fB\-static\-libasan\fR" 4
10930 .IX Item "-static-libasan"
10931 When the \fB\-fsanitize=address\fR option is used to link a program,
10932 the \s-1GCC\s0 driver automatically links against \fBlibasan\fR.  If
10933 \&\fIlibasan\fR is available as a shared library, and the \fB\-static\fR
10934 option is not used, then this links against the shared version of
10935 \&\fIlibasan\fR.  The \fB\-static\-libasan\fR option directs the \s-1GCC\s0
10936 driver to link \fIlibasan\fR statically, without necessarily linking
10937 other libraries statically.
10938 .IP "\fB\-static\-libtsan\fR" 4
10939 .IX Item "-static-libtsan"
10940 When the \fB\-fsanitize=thread\fR option is used to link a program,
10941 the \s-1GCC\s0 driver automatically links against \fBlibtsan\fR.  If
10942 \&\fIlibtsan\fR is available as a shared library, and the \fB\-static\fR
10943 option is not used, then this links against the shared version of
10944 \&\fIlibtsan\fR.  The \fB\-static\-libtsan\fR option directs the \s-1GCC\s0
10945 driver to link \fIlibtsan\fR statically, without necessarily linking
10946 other libraries statically.
10947 .IP "\fB\-static\-liblsan\fR" 4
10948 .IX Item "-static-liblsan"
10949 When the \fB\-fsanitize=leak\fR option is used to link a program,
10950 the \s-1GCC\s0 driver automatically links against \fBliblsan\fR.  If
10951 \&\fIliblsan\fR is available as a shared library, and the \fB\-static\fR
10952 option is not used, then this links against the shared version of
10953 \&\fIliblsan\fR.  The \fB\-static\-liblsan\fR option directs the \s-1GCC\s0
10954 driver to link \fIliblsan\fR statically, without necessarily linking
10955 other libraries statically.
10956 .IP "\fB\-static\-libubsan\fR" 4
10957 .IX Item "-static-libubsan"
10958 When the \fB\-fsanitize=undefined\fR option is used to link a program,
10959 the \s-1GCC\s0 driver automatically links against \fBlibubsan\fR.  If
10960 \&\fIlibubsan\fR is available as a shared library, and the \fB\-static\fR
10961 option is not used, then this links against the shared version of
10962 \&\fIlibubsan\fR.  The \fB\-static\-libubsan\fR option directs the \s-1GCC\s0
10963 driver to link \fIlibubsan\fR statically, without necessarily linking
10964 other libraries statically.
10965 .IP "\fB\-static\-libstdc++\fR" 4
10966 .IX Item "-static-libstdc++"
10967 When the \fBg++\fR program is used to link a \*(C+ program, it
10968 normally automatically links against \fBlibstdc++\fR.  If
10969 \&\fIlibstdc++\fR is available as a shared library, and the
10970 \&\fB\-static\fR option is not used, then this links against the
10971 shared version of \fIlibstdc++\fR.  That is normally fine.  However, it
10972 is sometimes useful to freeze the version of \fIlibstdc++\fR used by
10973 the program without going all the way to a fully static link.  The
10974 \&\fB\-static\-libstdc++\fR option directs the \fBg++\fR driver to
10975 link \fIlibstdc++\fR statically, without necessarily linking other
10976 libraries statically.
10977 .IP "\fB\-symbolic\fR" 4
10978 .IX Item "-symbolic"
10979 Bind references to global symbols when building a shared object.  Warn
10980 about any unresolved references (unless overridden by the link editor
10981 option \fB\-Xlinker \-z \-Xlinker defs\fR).  Only a few systems support
10982 this option.
10983 .IP "\fB\-T\fR \fIscript\fR" 4
10984 .IX Item "-T script"
10985 Use \fIscript\fR as the linker script.  This option is supported by most
10986 systems using the \s-1GNU\s0 linker.  On some targets, such as bare-board
10987 targets without an operating system, the \fB\-T\fR option may be required
10988 when linking to avoid references to undefined symbols.
10989 .IP "\fB\-Xlinker\fR \fIoption\fR" 4
10990 .IX Item "-Xlinker option"
10991 Pass \fIoption\fR as an option to the linker.  You can use this to
10992 supply system-specific linker options that \s-1GCC\s0 does not recognize.
10993 .Sp
10994 If you want to pass an option that takes a separate argument, you must use
10995 \&\fB\-Xlinker\fR twice, once for the option and once for the argument.
10996 For example, to pass \fB\-assert definitions\fR, you must write
10997 \&\fB\-Xlinker \-assert \-Xlinker definitions\fR.  It does not work to write
10998 \&\fB\-Xlinker \*(L"\-assert definitions\*(R"\fR, because this passes the entire
10999 string as a single argument, which is not what the linker expects.
11000 .Sp
11001 When using the \s-1GNU\s0 linker, it is usually more convenient to pass
11002 arguments to linker options using the \fIoption\fR\fB=\fR\fIvalue\fR
11003 syntax than as separate arguments.  For example, you can specify
11004 \&\fB\-Xlinker \-Map=output.map\fR rather than
11005 \&\fB\-Xlinker \-Map \-Xlinker output.map\fR.  Other linkers may not support
11006 this syntax for command-line options.
11007 .IP "\fB\-Wl,\fR\fIoption\fR" 4
11008 .IX Item "-Wl,option"
11009 Pass \fIoption\fR as an option to the linker.  If \fIoption\fR contains
11010 commas, it is split into multiple options at the commas.  You can use this
11011 syntax to pass an argument to the option.
11012 For example, \fB\-Wl,\-Map,output.map\fR passes \fB\-Map output.map\fR to the
11013 linker.  When using the \s-1GNU\s0 linker, you can also get the same effect with
11014 \&\fB\-Wl,\-Map=output.map\fR.
11015 .IP "\fB\-u\fR \fIsymbol\fR" 4
11016 .IX Item "-u symbol"
11017 Pretend the symbol \fIsymbol\fR is undefined, to force linking of
11018 library modules to define it.  You can use \fB\-u\fR multiple times with
11019 different symbols to force loading of additional library modules.
11020 .IP "\fB\-z\fR \fIkeyword\fR" 4
11021 .IX Item "-z keyword"
11022 \&\fB\-z\fR is passed directly on to the linker along with the keyword
11023 \&\fIkeyword\fR. See the section in the documentation of your linker for
11024 permitted values and their meanings.
11025 .SS "Options for Directory Search"
11026 .IX Subsection "Options for Directory Search"
11027 These options specify directories to search for header files, for
11028 libraries and for parts of the compiler:
11029 .IP "\fB\-I\fR\fIdir\fR" 4
11030 .IX Item "-Idir"
11031 Add the directory \fIdir\fR to the head of the list of directories to be
11032 searched for header files.  This can be used to override a system header
11033 file, substituting your own version, since these directories are
11034 searched before the system header file directories.  However, you should
11035 not use this option to add directories that contain vendor-supplied
11036 system header files (use \fB\-isystem\fR for that).  If you use more than
11037 one \fB\-I\fR option, the directories are scanned in left-to-right
11038 order; the standard system directories come after.
11039 .Sp
11040 If a standard system include directory, or a directory specified with
11041 \&\fB\-isystem\fR, is also specified with \fB\-I\fR, the \fB\-I\fR
11042 option is ignored.  The directory is still searched but as a
11043 system directory at its normal position in the system include chain.
11044 This is to ensure that \s-1GCC\s0's procedure to fix buggy system headers and
11045 the ordering for the \f(CW\*(C`include_next\*(C'\fR directive are not inadvertently changed.
11046 If you really need to change the search order for system directories,
11047 use the \fB\-nostdinc\fR and/or \fB\-isystem\fR options.
11048 .IP "\fB\-iplugindir=\fR\fIdir\fR" 4
11049 .IX Item "-iplugindir=dir"
11050 Set the directory to search for plugins that are passed
11051 by \fB\-fplugin=\fR\fIname\fR instead of
11052 \&\fB\-fplugin=\fR\fIpath\fR\fB/\fR\fIname\fR\fB.so\fR.  This option is not meant
11053 to be used by the user, but only passed by the driver.
11054 .IP "\fB\-iquote\fR\fIdir\fR" 4
11055 .IX Item "-iquotedir"
11056 Add the directory \fIdir\fR to the head of the list of directories to
11057 be searched for header files only for the case of \f(CW\*(C`#include
11058 "\f(CIfile\f(CW"\*(C'\fR; they are not searched for \f(CW\*(C`#include <\f(CIfile\f(CW>\*(C'\fR,
11059 otherwise just like \fB\-I\fR.
11060 .IP "\fB\-L\fR\fIdir\fR" 4
11061 .IX Item "-Ldir"
11062 Add directory \fIdir\fR to the list of directories to be searched
11063 for \fB\-l\fR.
11064 .IP "\fB\-B\fR\fIprefix\fR" 4
11065 .IX Item "-Bprefix"
11066 This option specifies where to find the executables, libraries,
11067 include files, and data files of the compiler itself.
11068 .Sp
11069 The compiler driver program runs one or more of the subprograms
11070 \&\fBcpp\fR, \fBcc1\fR, \fBas\fR and \fBld\fR.  It tries
11071 \&\fIprefix\fR as a prefix for each program it tries to run, both with and
11072 without \fImachine\fR\fB/\fR\fIversion\fR\fB/\fR.
11073 .Sp
11074 For each subprogram to be run, the compiler driver first tries the
11075 \&\fB\-B\fR prefix, if any.  If that name is not found, or if \fB\-B\fR
11076 is not specified, the driver tries two standard prefixes, 
11077 \&\fI/usr/lib/gcc/\fR and \fI/usr/local/lib/gcc/\fR.  If neither of
11078 those results in a file name that is found, the unmodified program
11079 name is searched for using the directories specified in your
11080 \&\fB\s-1PATH\s0\fR environment variable.
11081 .Sp
11082 The compiler checks to see if the path provided by the \fB\-B\fR
11083 refers to a directory, and if necessary it adds a directory
11084 separator character at the end of the path.
11085 .Sp
11086 \&\fB\-B\fR prefixes that effectively specify directory names also apply
11087 to libraries in the linker, because the compiler translates these
11088 options into \fB\-L\fR options for the linker.  They also apply to
11089 include files in the preprocessor, because the compiler translates these
11090 options into \fB\-isystem\fR options for the preprocessor.  In this case,
11091 the compiler appends \fBinclude\fR to the prefix.
11092 .Sp
11093 The runtime support file \fIlibgcc.a\fR can also be searched for using
11094 the \fB\-B\fR prefix, if needed.  If it is not found there, the two
11095 standard prefixes above are tried, and that is all.  The file is left
11096 out of the link if it is not found by those means.
11097 .Sp
11098 Another way to specify a prefix much like the \fB\-B\fR prefix is to use
11099 the environment variable \fB\s-1GCC_EXEC_PREFIX\s0\fR.
11100 .Sp
11101 As a special kludge, if the path provided by \fB\-B\fR is
11102 \&\fI[dir/]stage\fIN\fI/\fR, where \fIN\fR is a number in the range 0 to
11103 9, then it is replaced by \fI[dir/]include\fR.  This is to help
11104 with boot-strapping the compiler.
11105 .IP "\fB\-specs=\fR\fIfile\fR" 4
11106 .IX Item "-specs=file"
11107 Process \fIfile\fR after the compiler reads in the standard \fIspecs\fR
11108 file, in order to override the defaults which the \fBgcc\fR driver
11109 program uses when determining what switches to pass to \fBcc1\fR,
11110 \&\fBcc1plus\fR, \fBas\fR, \fBld\fR, etc.  More than one
11111 \&\fB\-specs=\fR\fIfile\fR can be specified on the command line, and they
11112 are processed in order, from left to right.
11113 .IP "\fB\-\-sysroot=\fR\fIdir\fR" 4
11114 .IX Item "--sysroot=dir"
11115 Use \fIdir\fR as the logical root directory for headers and libraries.
11116 For example, if the compiler normally searches for headers in
11117 \&\fI/usr/include\fR and libraries in \fI/usr/lib\fR, it instead
11118 searches \fI\fIdir\fI/usr/include\fR and \fI\fIdir\fI/usr/lib\fR.
11119 .Sp
11120 If you use both this option and the \fB\-isysroot\fR option, then
11121 the \fB\-\-sysroot\fR option applies to libraries, but the
11122 \&\fB\-isysroot\fR option applies to header files.
11123 .Sp
11124 The \s-1GNU\s0 linker (beginning with version 2.16) has the necessary support
11125 for this option.  If your linker does not support this option, the
11126 header file aspect of \fB\-\-sysroot\fR still works, but the
11127 library aspect does not.
11128 .IP "\fB\-\-no\-sysroot\-suffix\fR" 4
11129 .IX Item "--no-sysroot-suffix"
11130 For some targets, a suffix is added to the root directory specified
11131 with \fB\-\-sysroot\fR, depending on the other options used, so that
11132 headers may for example be found in
11133 \&\fI\fIdir\fI/\fIsuffix\fI/usr/include\fR instead of
11134 \&\fI\fIdir\fI/usr/include\fR.  This option disables the addition of
11135 such a suffix.
11136 .IP "\fB\-I\-\fR" 4
11137 .IX Item "-I-"
11138 This option has been deprecated.  Please use \fB\-iquote\fR instead for
11139 \&\fB\-I\fR directories before the \fB\-I\-\fR and remove the \fB\-I\-\fR.
11140 Any directories you specify with \fB\-I\fR options before the \fB\-I\-\fR
11141 option are searched only for the case of \f(CW\*(C`#include "\f(CIfile\f(CW"\*(C'\fR;
11142 they are not searched for \f(CW\*(C`#include <\f(CIfile\f(CW>\*(C'\fR.
11143 .Sp
11144 If additional directories are specified with \fB\-I\fR options after
11145 the \fB\-I\-\fR, these directories are searched for all \f(CW\*(C`#include\*(C'\fR
11146 directives.  (Ordinarily \fIall\fR \fB\-I\fR directories are used
11147 this way.)
11148 .Sp
11149 In addition, the \fB\-I\-\fR option inhibits the use of the current
11150 directory (where the current input file came from) as the first search
11151 directory for \f(CW\*(C`#include "\f(CIfile\f(CW"\*(C'\fR.  There is no way to
11152 override this effect of \fB\-I\-\fR.  With \fB\-I.\fR you can specify
11153 searching the directory that is current when the compiler is
11154 invoked.  That is not exactly the same as what the preprocessor does
11155 by default, but it is often satisfactory.
11156 .Sp
11157 \&\fB\-I\-\fR does not inhibit the use of the standard system directories
11158 for header files.  Thus, \fB\-I\-\fR and \fB\-nostdinc\fR are
11159 independent.
11160 .SS "Specifying Target Machine and Compiler Version"
11161 .IX Subsection "Specifying Target Machine and Compiler Version"
11162 The usual way to run \s-1GCC\s0 is to run the executable called \fBgcc\fR, or
11163 \&\fImachine\fR\fB\-gcc\fR when cross-compiling, or
11164 \&\fImachine\fR\fB\-gcc\-\fR\fIversion\fR to run a version other than the
11165 one that was installed last.
11166 .SS "Hardware Models and Configurations"
11167 .IX Subsection "Hardware Models and Configurations"
11168 Each target machine types can have its own
11169 special options, starting with \fB\-m\fR, to choose among various
11170 hardware models or configurations\-\-\-for example, 68010 vs 68020,
11171 floating coprocessor or none.  A single installed version of the
11172 compiler can compile for any model or configuration, according to the
11173 options specified.
11174 .PP
11175 Some configurations of the compiler also support additional special
11176 options, usually for compatibility with other compilers on the same
11177 platform.
11178 .PP
11179 \fIAArch64 Options\fR
11180 .IX Subsection "AArch64 Options"
11181 .PP
11182 These options are defined for AArch64 implementations:
11183 .IP "\fB\-mabi=\fR\fIname\fR" 4
11184 .IX Item "-mabi=name"
11185 Generate code for the specified data model.  Permissible values
11186 are \fBilp32\fR for SysV-like data model where int, long int and pointer
11187 are 32\-bit, and \fBlp64\fR for SysV-like data model where int is 32\-bit,
11188 but long int and pointer are 64\-bit.
11189 .Sp
11190 The default depends on the specific target configuration.  Note that
11191 the \s-1LP64\s0 and \s-1ILP32\s0 ABIs are not link-compatible; you must compile your
11192 entire program with the same \s-1ABI\s0, and link with a compatible set of libraries.
11193 .IP "\fB\-mbig\-endian\fR" 4
11194 .IX Item "-mbig-endian"
11195 Generate big-endian code.  This is the default when \s-1GCC\s0 is configured for an
11196 \&\fBaarch64_be\-*\-*\fR target.
11197 .IP "\fB\-mgeneral\-regs\-only\fR" 4
11198 .IX Item "-mgeneral-regs-only"
11199 Generate code which uses only the general registers.
11200 .IP "\fB\-mlittle\-endian\fR" 4
11201 .IX Item "-mlittle-endian"
11202 Generate little-endian code.  This is the default when \s-1GCC\s0 is configured for an
11203 \&\fBaarch64\-*\-*\fR but not an \fBaarch64_be\-*\-*\fR target.
11204 .IP "\fB\-mcmodel=tiny\fR" 4
11205 .IX Item "-mcmodel=tiny"
11206 Generate code for the tiny code model.  The program and its statically defined
11207 symbols must be within 1GB of each other.  Pointers are 64 bits.  Programs can
11208 be statically or dynamically linked.  This model is not fully implemented and
11209 mostly treated as \fBsmall\fR.
11210 .IP "\fB\-mcmodel=small\fR" 4
11211 .IX Item "-mcmodel=small"
11212 Generate code for the small code model.  The program and its statically defined
11213 symbols must be within 4GB of each other.  Pointers are 64 bits.  Programs can
11214 be statically or dynamically linked.  This is the default code model.
11215 .IP "\fB\-mcmodel=large\fR" 4
11216 .IX Item "-mcmodel=large"
11217 Generate code for the large code model.  This makes no assumptions about
11218 addresses and sizes of sections.  Pointers are 64 bits.  Programs can be
11219 statically linked only.
11220 .IP "\fB\-mstrict\-align\fR" 4
11221 .IX Item "-mstrict-align"
11222 Do not assume that unaligned memory references are handled by the system.
11223 .IP "\fB\-momit\-leaf\-frame\-pointer\fR" 4
11224 .IX Item "-momit-leaf-frame-pointer"
11225 .PD 0
11226 .IP "\fB\-mno\-omit\-leaf\-frame\-pointer\fR" 4
11227 .IX Item "-mno-omit-leaf-frame-pointer"
11228 .PD
11229 Omit or keep the frame pointer in leaf functions.  The former behaviour is the
11230 default.
11231 .IP "\fB\-mtls\-dialect=desc\fR" 4
11232 .IX Item "-mtls-dialect=desc"
11233 Use \s-1TLS\s0 descriptors as the thread-local storage mechanism for dynamic accesses
11234 of \s-1TLS\s0 variables.  This is the default.
11235 .IP "\fB\-mtls\-dialect=traditional\fR" 4
11236 .IX Item "-mtls-dialect=traditional"
11237 Use traditional \s-1TLS\s0 as the thread-local storage mechanism for dynamic accesses
11238 of \s-1TLS\s0 variables.
11239 .IP "\fB\-mfix\-cortex\-a53\-835769\fR" 4
11240 .IX Item "-mfix-cortex-a53-835769"
11241 .PD 0
11242 .IP "\fB\-mno\-fix\-cortex\-a53\-835769\fR" 4
11243 .IX Item "-mno-fix-cortex-a53-835769"
11244 .PD
11245 Enable or disable the workaround for the \s-1ARM\s0 Cortex\-A53 erratum number 835769.
11246 This involves inserting a \s-1NOP\s0 instruction between memory instructions and
11247 64\-bit integer multiply-accumulate instructions.
11248 .IP "\fB\-march=\fR\fIname\fR" 4
11249 .IX Item "-march=name"
11250 Specify the name of the target architecture, optionally suffixed by one or
11251 more feature modifiers.  This option has the form
11252 \&\fB\-march=\fR\fIarch\fR{\fB+\fR[\fBno\fR]\fIfeature\fR}*, where the
11253 only permissible value for \fIarch\fR is \fBarmv8\-a\fR.  The permissible
11254 values for \fIfeature\fR are documented in the sub-section below.
11255 .Sp
11256 Where conflicting feature modifiers are specified, the right-most feature is
11257 used.
11258 .Sp
11259 \&\s-1GCC\s0 uses this name to determine what kind of instructions it can emit when
11260 generating assembly code.
11261 .Sp
11262 Where \fB\-march\fR is specified without either of \fB\-mtune\fR
11263 or \fB\-mcpu\fR also being specified, the code is tuned to perform
11264 well across a range of target processors implementing the target
11265 architecture.
11266 .IP "\fB\-mtune=\fR\fIname\fR" 4
11267 .IX Item "-mtune=name"
11268 Specify the name of the target processor for which \s-1GCC\s0 should tune the
11269 performance of the code.  Permissible values for this option are:
11270 \&\fBgeneric\fR, \fBcortex\-a53\fR, \fBcortex\-a57\fR, \fBthunderx\fR.
11271 .Sp
11272 Additionally, this option can specify that \s-1GCC\s0 should tune the performance
11273 of the code for a big.LITTLE system.  The only permissible value is
11274 \&\fBcortex\-a57.cortex\-a53\fR.
11275 .Sp
11276 Where none of \fB\-mtune=\fR, \fB\-mcpu=\fR or \fB\-march=\fR
11277 are specified, the code is tuned to perform well across a range
11278 of target processors.
11279 .Sp
11280 This option cannot be suffixed by feature modifiers.
11281 .IP "\fB\-mcpu=\fR\fIname\fR" 4
11282 .IX Item "-mcpu=name"
11283 Specify the name of the target processor, optionally suffixed by one or more
11284 feature modifiers.  This option has the form
11285 \&\fB\-mcpu=\fR\fIcpu\fR{\fB+\fR[\fBno\fR]\fIfeature\fR}*, where the
11286 permissible values for \fIcpu\fR are the same as those available for
11287 \&\fB\-mtune\fR.
11288 .Sp
11289 The permissible values for \fIfeature\fR are documented in the sub-section
11290 below.
11291 .Sp
11292 Where conflicting feature modifiers are specified, the right-most feature is
11293 used.
11294 .Sp
11295 \&\s-1GCC\s0 uses this name to determine what kind of instructions it can emit when
11296 generating assembly code (as if by \fB\-march\fR) and to determine
11297 the target processor for which to tune for performance (as if
11298 by \fB\-mtune\fR).  Where this option is used in conjunction
11299 with \fB\-march\fR or \fB\-mtune\fR, those options take precedence
11300 over the appropriate part of this option.
11301 .PP
11302 \fB\-march\fR and \fB\-mcpu\fR feature modifiers
11303 .IX Subsection "-march and -mcpu feature modifiers"
11304 .PP
11305 Feature modifiers used with \fB\-march\fR and \fB\-mcpu\fR can be one
11306 the following:
11307 .IP "\fBcrc\fR" 4
11308 .IX Item "crc"
11309 Enable \s-1CRC\s0 extension.
11310 .IP "\fBcrypto\fR" 4
11311 .IX Item "crypto"
11312 Enable Crypto extension.  This implies Advanced \s-1SIMD\s0 is enabled.
11313 .IP "\fBfp\fR" 4
11314 .IX Item "fp"
11315 Enable floating-point instructions.
11316 .IP "\fBsimd\fR" 4
11317 .IX Item "simd"
11318 Enable Advanced \s-1SIMD\s0 instructions.  This implies floating-point instructions
11319 are enabled.  This is the default for all current possible values for options
11320 \&\fB\-march\fR and \fB\-mcpu=\fR.
11321 .PP
11322 \fIAdapteva Epiphany Options\fR
11323 .IX Subsection "Adapteva Epiphany Options"
11324 .PP
11325 These \fB\-m\fR options are defined for Adapteva Epiphany:
11326 .IP "\fB\-mhalf\-reg\-file\fR" 4
11327 .IX Item "-mhalf-reg-file"
11328 Don't allocate any register in the range \f(CW\*(C`r32\*(C'\fR...\f(CW\*(C`r63\*(C'\fR.
11329 That allows code to run on hardware variants that lack these registers.
11330 .IP "\fB\-mprefer\-short\-insn\-regs\fR" 4
11331 .IX Item "-mprefer-short-insn-regs"
11332 Preferrentially allocate registers that allow short instruction generation.
11333 This can result in increased instruction count, so this may either reduce or
11334 increase overall code size.
11335 .IP "\fB\-mbranch\-cost=\fR\fInum\fR" 4
11336 .IX Item "-mbranch-cost=num"
11337 Set the cost of branches to roughly \fInum\fR \*(L"simple\*(R" instructions.
11338 This cost is only a heuristic and is not guaranteed to produce
11339 consistent results across releases.
11340 .IP "\fB\-mcmove\fR" 4
11341 .IX Item "-mcmove"
11342 Enable the generation of conditional moves.
11343 .IP "\fB\-mnops=\fR\fInum\fR" 4
11344 .IX Item "-mnops=num"
11345 Emit \fInum\fR NOPs before every other generated instruction.
11346 .IP "\fB\-mno\-soft\-cmpsf\fR" 4
11347 .IX Item "-mno-soft-cmpsf"
11348 For single-precision floating-point comparisons, emit an \f(CW\*(C`fsub\*(C'\fR instruction
11349 and test the flags.  This is faster than a software comparison, but can
11350 get incorrect results in the presence of NaNs, or when two different small
11351 numbers are compared such that their difference is calculated as zero.
11352 The default is \fB\-msoft\-cmpsf\fR, which uses slower, but IEEE-compliant,
11353 software comparisons.
11354 .IP "\fB\-mstack\-offset=\fR\fInum\fR" 4
11355 .IX Item "-mstack-offset=num"
11356 Set the offset between the top of the stack and the stack pointer.
11357 E.g., a value of 8 means that the eight bytes in the range \f(CW\*(C`sp+0...sp+7\*(C'\fR
11358 can be used by leaf functions without stack allocation.
11359 Values other than \fB8\fR or \fB16\fR are untested and unlikely to work.
11360 Note also that this option changes the \s-1ABI\s0; compiling a program with a
11361 different stack offset than the libraries have been compiled with
11362 generally does not work.
11363 This option can be useful if you want to evaluate if a different stack
11364 offset would give you better code, but to actually use a different stack
11365 offset to build working programs, it is recommended to configure the
11366 toolchain with the appropriate \fB\-\-with\-stack\-offset=\fR\fInum\fR option.
11367 .IP "\fB\-mno\-round\-nearest\fR" 4
11368 .IX Item "-mno-round-nearest"
11369 Make the scheduler assume that the rounding mode has been set to
11370 truncating.  The default is \fB\-mround\-nearest\fR.
11371 .IP "\fB\-mlong\-calls\fR" 4
11372 .IX Item "-mlong-calls"
11373 If not otherwise specified by an attribute, assume all calls might be beyond
11374 the offset range of the \f(CW\*(C`b\*(C'\fR / \f(CW\*(C`bl\*(C'\fR instructions, and therefore load the
11375 function address into a register before performing a (otherwise direct) call.
11376 This is the default.
11377 .IP "\fB\-mshort\-calls\fR" 4
11378 .IX Item "-mshort-calls"
11379 If not otherwise specified by an attribute, assume all direct calls are
11380 in the range of the \f(CW\*(C`b\*(C'\fR / \f(CW\*(C`bl\*(C'\fR instructions, so use these instructions
11381 for direct calls.  The default is \fB\-mlong\-calls\fR.
11382 .IP "\fB\-msmall16\fR" 4
11383 .IX Item "-msmall16"
11384 Assume addresses can be loaded as 16\-bit unsigned values.  This does not
11385 apply to function addresses for which \fB\-mlong\-calls\fR semantics
11386 are in effect.
11387 .IP "\fB\-mfp\-mode=\fR\fImode\fR" 4
11388 .IX Item "-mfp-mode=mode"
11389 Set the prevailing mode of the floating-point unit.
11390 This determines the floating-point mode that is provided and expected
11391 at function call and return time.  Making this mode match the mode you
11392 predominantly need at function start can make your programs smaller and
11393 faster by avoiding unnecessary mode switches.
11394 .Sp
11395 \&\fImode\fR can be set to one the following values:
11396 .RS 4
11397 .IP "\fBcaller\fR" 4
11398 .IX Item "caller"
11399 Any mode at function entry is valid, and retained or restored when
11400 the function returns, and when it calls other functions.
11401 This mode is useful for compiling libraries or other compilation units
11402 you might want to incorporate into different programs with different
11403 prevailing \s-1FPU\s0 modes, and the convenience of being able to use a single
11404 object file outweighs the size and speed overhead for any extra
11405 mode switching that might be needed, compared with what would be needed
11406 with a more specific choice of prevailing \s-1FPU\s0 mode.
11407 .IP "\fBtruncate\fR" 4
11408 .IX Item "truncate"
11409 This is the mode used for floating-point calculations with
11410 truncating (i.e. round towards zero) rounding mode.  That includes
11411 conversion from floating point to integer.
11412 .IP "\fBround-nearest\fR" 4
11413 .IX Item "round-nearest"
11414 This is the mode used for floating-point calculations with
11415 round-to-nearest-or-even rounding mode.
11416 .IP "\fBint\fR" 4
11417 .IX Item "int"
11418 This is the mode used to perform integer calculations in the \s-1FPU\s0, e.g.
11419 integer multiply, or integer multiply-and-accumulate.
11420 .RE
11421 .RS 4
11422 .Sp
11423 The default is \fB\-mfp\-mode=caller\fR
11424 .RE
11425 .IP "\fB\-mnosplit\-lohi\fR" 4
11426 .IX Item "-mnosplit-lohi"
11427 .PD 0
11428 .IP "\fB\-mno\-postinc\fR" 4
11429 .IX Item "-mno-postinc"
11430 .IP "\fB\-mno\-postmodify\fR" 4
11431 .IX Item "-mno-postmodify"
11432 .PD
11433 Code generation tweaks that disable, respectively, splitting of 32\-bit
11434 loads, generation of post-increment addresses, and generation of
11435 post-modify addresses.  The defaults are \fBmsplit-lohi\fR,
11436 \&\fB\-mpost\-inc\fR, and \fB\-mpost\-modify\fR.
11437 .IP "\fB\-mnovect\-double\fR" 4
11438 .IX Item "-mnovect-double"
11439 Change the preferred \s-1SIMD\s0 mode to SImode.  The default is
11440 \&\fB\-mvect\-double\fR, which uses DImode as preferred \s-1SIMD\s0 mode.
11441 .IP "\fB\-max\-vect\-align=\fR\fInum\fR" 4
11442 .IX Item "-max-vect-align=num"
11443 The maximum alignment for \s-1SIMD\s0 vector mode types.
11444 \&\fInum\fR may be 4 or 8.  The default is 8.
11445 Note that this is an \s-1ABI\s0 change, even though many library function
11446 interfaces are unaffected if they don't use \s-1SIMD\s0 vector modes
11447 in places that affect size and/or alignment of relevant types.
11448 .IP "\fB\-msplit\-vecmove\-early\fR" 4
11449 .IX Item "-msplit-vecmove-early"
11450 Split vector moves into single word moves before reload.  In theory this
11451 can give better register allocation, but so far the reverse seems to be
11452 generally the case.
11453 .IP "\fB\-m1reg\-\fR\fIreg\fR" 4
11454 .IX Item "-m1reg-reg"
11455 Specify a register to hold the constant \-1, which makes loading small negative
11456 constants and certain bitmasks faster.
11457 Allowable values for \fIreg\fR are \fBr43\fR and \fBr63\fR,
11458 which specify use of that register as a fixed register,
11459 and \fBnone\fR, which means that no register is used for this
11460 purpose.  The default is \fB\-m1reg\-none\fR.
11461 .PP
11462 \fI\s-1ARC\s0 Options\fR
11463 .IX Subsection "ARC Options"
11464 .PP
11465 The following options control the architecture variant for which code
11466 is being compiled:
11467 .IP "\fB\-mbarrel\-shifter\fR" 4
11468 .IX Item "-mbarrel-shifter"
11469 Generate instructions supported by barrel shifter.  This is the default
11470 unless \fB\-mcpu=ARC601\fR is in effect.
11471 .IP "\fB\-mcpu=\fR\fIcpu\fR" 4
11472 .IX Item "-mcpu=cpu"
11473 Set architecture type, register usage, and instruction scheduling
11474 parameters for \fIcpu\fR.  There are also shortcut alias options
11475 available for backward compatibility and convenience.  Supported
11476 values for \fIcpu\fR are
11477 .RS 4
11478 .IP "\fB\s-1ARC600\s0\fR" 4
11479 .IX Item "ARC600"
11480 Compile for \s-1ARC600\s0.  Aliases: \fB\-mA6\fR, \fB\-mARC600\fR.
11481 .IP "\fB\s-1ARC601\s0\fR" 4
11482 .IX Item "ARC601"
11483 Compile for \s-1ARC601\s0.  Alias: \fB\-mARC601\fR.
11484 .IP "\fB\s-1ARC700\s0\fR" 4
11485 .IX Item "ARC700"
11486 Compile for \s-1ARC700\s0.  Aliases: \fB\-mA7\fR, \fB\-mARC700\fR.
11487 This is the default when configured with \fB\-\-with\-cpu=arc700\fR.
11488 .RE
11489 .RS 4
11490 .RE
11491 .IP "\fB\-mdpfp\fR" 4
11492 .IX Item "-mdpfp"
11493 .PD 0
11494 .IP "\fB\-mdpfp\-compact\fR" 4
11495 .IX Item "-mdpfp-compact"
11496 .PD
11497 \&\s-1FPX:\s0 Generate Double Precision \s-1FPX\s0 instructions, tuned for the compact
11498 implementation.
11499 .IP "\fB\-mdpfp\-fast\fR" 4
11500 .IX Item "-mdpfp-fast"
11501 \&\s-1FPX:\s0 Generate Double Precision \s-1FPX\s0 instructions, tuned for the fast
11502 implementation.
11503 .IP "\fB\-mno\-dpfp\-lrsr\fR" 4
11504 .IX Item "-mno-dpfp-lrsr"
11505 Disable \s-1LR\s0 and \s-1SR\s0 instructions from using \s-1FPX\s0 extension aux registers.
11506 .IP "\fB\-mea\fR" 4
11507 .IX Item "-mea"
11508 Generate Extended arithmetic instructions.  Currently only
11509 \&\f(CW\*(C`divaw\*(C'\fR, \f(CW\*(C`adds\*(C'\fR, \f(CW\*(C`subs\*(C'\fR, and \f(CW\*(C`sat16\*(C'\fR are
11510 supported.  This is always enabled for \fB\-mcpu=ARC700\fR.
11511 .IP "\fB\-mno\-mpy\fR" 4
11512 .IX Item "-mno-mpy"
11513 Do not generate mpy instructions for \s-1ARC700\s0.
11514 .IP "\fB\-mmul32x16\fR" 4
11515 .IX Item "-mmul32x16"
11516 Generate 32x16 bit multiply and mac instructions.
11517 .IP "\fB\-mmul64\fR" 4
11518 .IX Item "-mmul64"
11519 Generate mul64 and mulu64 instructions.  Only valid for \fB\-mcpu=ARC600\fR.
11520 .IP "\fB\-mnorm\fR" 4
11521 .IX Item "-mnorm"
11522 Generate norm instruction.  This is the default if \fB\-mcpu=ARC700\fR
11523 is in effect.
11524 .IP "\fB\-mspfp\fR" 4
11525 .IX Item "-mspfp"
11526 .PD 0
11527 .IP "\fB\-mspfp\-compact\fR" 4
11528 .IX Item "-mspfp-compact"
11529 .PD
11530 \&\s-1FPX:\s0 Generate Single Precision \s-1FPX\s0 instructions, tuned for the compact
11531 implementation.
11532 .IP "\fB\-mspfp\-fast\fR" 4
11533 .IX Item "-mspfp-fast"
11534 \&\s-1FPX:\s0 Generate Single Precision \s-1FPX\s0 instructions, tuned for the fast
11535 implementation.
11536 .IP "\fB\-msimd\fR" 4
11537 .IX Item "-msimd"
11538 Enable generation of \s-1ARC\s0 \s-1SIMD\s0 instructions via target-specific
11539 builtins.  Only valid for \fB\-mcpu=ARC700\fR.
11540 .IP "\fB\-msoft\-float\fR" 4
11541 .IX Item "-msoft-float"
11542 This option ignored; it is provided for compatibility purposes only.
11543 Software floating point code is emitted by default, and this default
11544 can overridden by \s-1FPX\s0 options; \fBmspfp\fR, \fBmspfp-compact\fR, or
11545 \&\fBmspfp-fast\fR for single precision, and \fBmdpfp\fR,
11546 \&\fBmdpfp-compact\fR, or \fBmdpfp-fast\fR for double precision.
11547 .IP "\fB\-mswap\fR" 4
11548 .IX Item "-mswap"
11549 Generate swap instructions.
11550 .PP
11551 The following options are passed through to the assembler, and also
11552 define preprocessor macro symbols.
11553 .IP "\fB\-mdsp\-packa\fR" 4
11554 .IX Item "-mdsp-packa"
11555 Passed down to the assembler to enable the \s-1DSP\s0 Pack A extensions.
11556 Also sets the preprocessor symbol \f(CW\*(C`_\|_Xdsp_packa\*(C'\fR.
11557 .IP "\fB\-mdvbf\fR" 4
11558 .IX Item "-mdvbf"
11559 Passed down to the assembler to enable the dual viterbi butterfly
11560 extension.  Also sets the preprocessor symbol \f(CW\*(C`_\|_Xdvbf\*(C'\fR.
11561 .IP "\fB\-mlock\fR" 4
11562 .IX Item "-mlock"
11563 Passed down to the assembler to enable the Locked Load/Store
11564 Conditional extension.  Also sets the preprocessor symbol
11565 \&\f(CW\*(C`_\|_Xlock\*(C'\fR.
11566 .IP "\fB\-mmac\-d16\fR" 4
11567 .IX Item "-mmac-d16"
11568 Passed down to the assembler.  Also sets the preprocessor symbol
11569 \&\f(CW\*(C`_\|_Xxmac_d16\*(C'\fR.
11570 .IP "\fB\-mmac\-24\fR" 4
11571 .IX Item "-mmac-24"
11572 Passed down to the assembler.  Also sets the preprocessor symbol
11573 \&\f(CW\*(C`_\|_Xxmac_24\*(C'\fR.
11574 .IP "\fB\-mrtsc\fR" 4
11575 .IX Item "-mrtsc"
11576 Passed down to the assembler to enable the 64\-bit Time-Stamp Counter
11577 extension instruction.  Also sets the preprocessor symbol
11578 \&\f(CW\*(C`_\|_Xrtsc\*(C'\fR.
11579 .IP "\fB\-mswape\fR" 4
11580 .IX Item "-mswape"
11581 Passed down to the assembler to enable the swap byte ordering
11582 extension instruction.  Also sets the preprocessor symbol
11583 \&\f(CW\*(C`_\|_Xswape\*(C'\fR.
11584 .IP "\fB\-mtelephony\fR" 4
11585 .IX Item "-mtelephony"
11586 Passed down to the assembler to enable dual and single operand
11587 instructions for telephony.  Also sets the preprocessor symbol
11588 \&\f(CW\*(C`_\|_Xtelephony\*(C'\fR.
11589 .IP "\fB\-mxy\fR" 4
11590 .IX Item "-mxy"
11591 Passed down to the assembler to enable the \s-1XY\s0 Memory extension.  Also
11592 sets the preprocessor symbol \f(CW\*(C`_\|_Xxy\*(C'\fR.
11593 .PP
11594 The following options control how the assembly code is annotated:
11595 .IP "\fB\-misize\fR" 4
11596 .IX Item "-misize"
11597 Annotate assembler instructions with estimated addresses.
11598 .IP "\fB\-mannotate\-align\fR" 4
11599 .IX Item "-mannotate-align"
11600 Explain what alignment considerations lead to the decision to make an
11601 instruction short or long.
11602 .PP
11603 The following options are passed through to the linker:
11604 .IP "\fB\-marclinux\fR" 4
11605 .IX Item "-marclinux"
11606 Passed through to the linker, to specify use of the \f(CW\*(C`arclinux\*(C'\fR emulation.
11607 This option is enabled by default in tool chains built for
11608 \&\f(CW\*(C`arc\-linux\-uclibc\*(C'\fR and \f(CW\*(C`arceb\-linux\-uclibc\*(C'\fR targets
11609 when profiling is not requested.
11610 .IP "\fB\-marclinux_prof\fR" 4
11611 .IX Item "-marclinux_prof"
11612 Passed through to the linker, to specify use of the
11613 \&\f(CW\*(C`arclinux_prof\*(C'\fR emulation.  This option is enabled by default in
11614 tool chains built for \f(CW\*(C`arc\-linux\-uclibc\*(C'\fR and
11615 \&\f(CW\*(C`arceb\-linux\-uclibc\*(C'\fR targets when profiling is requested.
11616 .PP
11617 The following options control the semantics of generated code:
11618 .IP "\fB\-mepilogue\-cfi\fR" 4
11619 .IX Item "-mepilogue-cfi"
11620 Enable generation of call frame information for epilogues.
11621 .IP "\fB\-mno\-epilogue\-cfi\fR" 4
11622 .IX Item "-mno-epilogue-cfi"
11623 Disable generation of call frame information for epilogues.
11624 .IP "\fB\-mlong\-calls\fR" 4
11625 .IX Item "-mlong-calls"
11626 Generate call insns as register indirect calls, thus providing access
11627 to the full 32\-bit address range.
11628 .IP "\fB\-mmedium\-calls\fR" 4
11629 .IX Item "-mmedium-calls"
11630 Don't use less than 25 bit addressing range for calls, which is the
11631 offset available for an unconditional branch-and-link
11632 instruction.  Conditional execution of function calls is suppressed, to
11633 allow use of the 25\-bit range, rather than the 21\-bit range with
11634 conditional branch-and-link.  This is the default for tool chains built
11635 for \f(CW\*(C`arc\-linux\-uclibc\*(C'\fR and \f(CW\*(C`arceb\-linux\-uclibc\*(C'\fR targets.
11636 .IP "\fB\-mno\-sdata\fR" 4
11637 .IX Item "-mno-sdata"
11638 Do not generate sdata references.  This is the default for tool chains
11639 built for \f(CW\*(C`arc\-linux\-uclibc\*(C'\fR and \f(CW\*(C`arceb\-linux\-uclibc\*(C'\fR
11640 targets.
11641 .IP "\fB\-mucb\-mcount\fR" 4
11642 .IX Item "-mucb-mcount"
11643 Instrument with mcount calls as used in \s-1UCB\s0 code.  I.e. do the
11644 counting in the callee, not the caller.  By default \s-1ARC\s0 instrumentation
11645 counts in the caller.
11646 .IP "\fB\-mvolatile\-cache\fR" 4
11647 .IX Item "-mvolatile-cache"
11648 Use ordinarily cached memory accesses for volatile references.  This is the
11649 default.
11650 .IP "\fB\-mno\-volatile\-cache\fR" 4
11651 .IX Item "-mno-volatile-cache"
11652 Enable cache bypass for volatile references.
11653 .PP
11654 The following options fine tune code generation:
11655 .IP "\fB\-malign\-call\fR" 4
11656 .IX Item "-malign-call"
11657 Do alignment optimizations for call instructions.
11658 .IP "\fB\-mauto\-modify\-reg\fR" 4
11659 .IX Item "-mauto-modify-reg"
11660 Enable the use of pre/post modify with register displacement.
11661 .IP "\fB\-mbbit\-peephole\fR" 4
11662 .IX Item "-mbbit-peephole"
11663 Enable bbit peephole2.
11664 .IP "\fB\-mno\-brcc\fR" 4
11665 .IX Item "-mno-brcc"
11666 This option disables a target-specific pass in \fIarc_reorg\fR to
11667 generate \f(CW\*(C`BRcc\*(C'\fR instructions.  It has no effect on \f(CW\*(C`BRcc\*(C'\fR
11668 generation driven by the combiner pass.
11669 .IP "\fB\-mcase\-vector\-pcrel\fR" 4
11670 .IX Item "-mcase-vector-pcrel"
11671 Use pc-relative switch case tables \- this enables case table shortening.
11672 This is the default for \fB\-Os\fR.
11673 .IP "\fB\-mcompact\-casesi\fR" 4
11674 .IX Item "-mcompact-casesi"
11675 Enable compact casesi pattern.
11676 This is the default for \fB\-Os\fR.
11677 .IP "\fB\-mno\-cond\-exec\fR" 4
11678 .IX Item "-mno-cond-exec"
11679 Disable ARCompact specific pass to generate conditional execution instructions.
11680 Due to delay slot scheduling and interactions between operand numbers,
11681 literal sizes, instruction lengths, and the support for conditional execution,
11682 the target-independent pass to generate conditional execution is often lacking,
11683 so the \s-1ARC\s0 port has kept a special pass around that tries to find more
11684 conditional execution generating opportunities after register allocation,
11685 branch shortening, and delay slot scheduling have been done.  This pass
11686 generally, but not always, improves performance and code size, at the cost of
11687 extra compilation time, which is why there is an option to switch it off.
11688 If you have a problem with call instructions exceeding their allowable
11689 offset range because they are conditionalized, you should consider using
11690 \&\fB\-mmedium\-calls\fR instead.
11691 .IP "\fB\-mearly\-cbranchsi\fR" 4
11692 .IX Item "-mearly-cbranchsi"
11693 Enable pre-reload use of the cbranchsi pattern.
11694 .IP "\fB\-mexpand\-adddi\fR" 4
11695 .IX Item "-mexpand-adddi"
11696 Expand \f(CW\*(C`adddi3\*(C'\fR and \f(CW\*(C`subdi3\*(C'\fR at rtl generation time into
11697 \&\f(CW\*(C`add.f\*(C'\fR, \f(CW\*(C`adc\*(C'\fR etc.
11698 .IP "\fB\-mindexed\-loads\fR" 4
11699 .IX Item "-mindexed-loads"
11700 Enable the use of indexed loads.  This can be problematic because some
11701 optimizers then assume that indexed stores exist, which is not
11702 the case.
11703 .IP "\fB\-mlra\fR" 4
11704 .IX Item "-mlra"
11705 Enable Local Register Allocation.  This is still experimental for \s-1ARC\s0,
11706 so by default the compiler uses standard reload
11707 (i.e. \fB\-mno\-lra\fR).
11708 .IP "\fB\-mlra\-priority\-none\fR" 4
11709 .IX Item "-mlra-priority-none"
11710 Don't indicate any priority for target registers.
11711 .IP "\fB\-mlra\-priority\-compact\fR" 4
11712 .IX Item "-mlra-priority-compact"
11713 Indicate target register priority for r0..r3 / r12..r15.
11714 .IP "\fB\-mlra\-priority\-noncompact\fR" 4
11715 .IX Item "-mlra-priority-noncompact"
11716 Reduce target regsiter priority for r0..r3 / r12..r15.
11717 .IP "\fB\-mno\-millicode\fR" 4
11718 .IX Item "-mno-millicode"
11719 When optimizing for size (using \fB\-Os\fR), prologues and epilogues
11720 that have to save or restore a large number of registers are often
11721 shortened by using call to a special function in libgcc; this is
11722 referred to as a \fImillicode\fR call.  As these calls can pose
11723 performance issues, and/or cause linking issues when linking in a
11724 nonstandard way, this option is provided to turn off millicode call
11725 generation.
11726 .IP "\fB\-mmixed\-code\fR" 4
11727 .IX Item "-mmixed-code"
11728 Tweak register allocation to help 16\-bit instruction generation.
11729 This generally has the effect of decreasing the average instruction size
11730 while increasing the instruction count.
11731 .IP "\fB\-mq\-class\fR" 4
11732 .IX Item "-mq-class"
11733 Enable 'q' instruction alternatives.
11734 This is the default for \fB\-Os\fR.
11735 .IP "\fB\-mRcq\fR" 4
11736 .IX Item "-mRcq"
11737 Enable Rcq constraint handling \- most short code generation depends on this.
11738 This is the default.
11739 .IP "\fB\-mRcw\fR" 4
11740 .IX Item "-mRcw"
11741 Enable Rcw constraint handling \- ccfsm condexec mostly depends on this.
11742 This is the default.
11743 .IP "\fB\-msize\-level=\fR\fIlevel\fR" 4
11744 .IX Item "-msize-level=level"
11745 Fine-tune size optimization with regards to instruction lengths and alignment.
11746 The recognized values for \fIlevel\fR are:
11747 .RS 4
11748 .IP "\fB0\fR" 4
11749 .IX Item "0"
11750 No size optimization.  This level is deprecated and treated like \fB1\fR.
11751 .IP "\fB1\fR" 4
11752 .IX Item "1"
11753 Short instructions are used opportunistically.
11754 .IP "\fB2\fR" 4
11755 .IX Item "2"
11756 In addition, alignment of loops and of code after barriers are dropped.
11757 .IP "\fB3\fR" 4
11758 .IX Item "3"
11759 In addition, optional data alignment is dropped, and the option \fBOs\fR is enabled.
11760 .RE
11761 .RS 4
11762 .Sp
11763 This defaults to \fB3\fR when \fB\-Os\fR is in effect.  Otherwise,
11764 the behavior when this is not set is equivalent to level \fB1\fR.
11765 .RE
11766 .IP "\fB\-mtune=\fR\fIcpu\fR" 4
11767 .IX Item "-mtune=cpu"
11768 Set instruction scheduling parameters for \fIcpu\fR, overriding any implied
11769 by \fB\-mcpu=\fR.
11770 .Sp
11771 Supported values for \fIcpu\fR are
11772 .RS 4
11773 .IP "\fB\s-1ARC600\s0\fR" 4
11774 .IX Item "ARC600"
11775 Tune for \s-1ARC600\s0 cpu.
11776 .IP "\fB\s-1ARC601\s0\fR" 4
11777 .IX Item "ARC601"
11778 Tune for \s-1ARC601\s0 cpu.
11779 .IP "\fB\s-1ARC700\s0\fR" 4
11780 .IX Item "ARC700"
11781 Tune for \s-1ARC700\s0 cpu with standard multiplier block.
11782 .IP "\fBARC700\-xmac\fR" 4
11783 .IX Item "ARC700-xmac"
11784 Tune for \s-1ARC700\s0 cpu with \s-1XMAC\s0 block.
11785 .IP "\fB\s-1ARC725D\s0\fR" 4
11786 .IX Item "ARC725D"
11787 Tune for \s-1ARC725D\s0 cpu.
11788 .IP "\fB\s-1ARC750D\s0\fR" 4
11789 .IX Item "ARC750D"
11790 Tune for \s-1ARC750D\s0 cpu.
11791 .RE
11792 .RS 4
11793 .RE
11794 .IP "\fB\-mmultcost=\fR\fInum\fR" 4
11795 .IX Item "-mmultcost=num"
11796 Cost to assume for a multiply instruction, with \fB4\fR being equal to a
11797 normal instruction.
11798 .IP "\fB\-munalign\-prob\-threshold=\fR\fIprobability\fR" 4
11799 .IX Item "-munalign-prob-threshold=probability"
11800 Set probability threshold for unaligning branches.
11801 When tuning for \fB\s-1ARC700\s0\fR and optimizing for speed, branches without
11802 filled delay slot are preferably emitted unaligned and long, unless
11803 profiling indicates that the probability for the branch to be taken
11804 is below \fIprobability\fR.  
11805 The default is (\s-1REG_BR_PROB_BASE/2\s0), i.e. 5000.
11806 .PP
11807 The following options are maintained for backward compatibility, but
11808 are now deprecated and will be removed in a future release:
11809 .IP "\fB\-margonaut\fR" 4
11810 .IX Item "-margonaut"
11811 Obsolete \s-1FPX\s0.
11812 .IP "\fB\-mbig\-endian\fR" 4
11813 .IX Item "-mbig-endian"
11814 .PD 0
11815 .IP "\fB\-EB\fR" 4
11816 .IX Item "-EB"
11817 .PD
11818 Compile code for big endian targets.  Use of these options is now
11819 deprecated.  Users wanting big-endian code, should use the
11820 \&\f(CW\*(C`arceb\-elf32\*(C'\fR and \f(CW\*(C`arceb\-linux\-uclibc\*(C'\fR targets when
11821 building the tool chain, for which big-endian is the default.
11822 .IP "\fB\-mlittle\-endian\fR" 4
11823 .IX Item "-mlittle-endian"
11824 .PD 0
11825 .IP "\fB\-EL\fR" 4
11826 .IX Item "-EL"
11827 .PD
11828 Compile code for little endian targets.  Use of these options is now
11829 deprecated.  Users wanting little-endian code should use the
11830 \&\f(CW\*(C`arc\-elf32\*(C'\fR and \f(CW\*(C`arc\-linux\-uclibc\*(C'\fR targets when
11831 building the tool chain, for which little-endian is the default.
11832 .IP "\fB\-mbarrel_shifter\fR" 4
11833 .IX Item "-mbarrel_shifter"
11834 Replaced by \fB\-mbarrel\-shifter\fR.
11835 .IP "\fB\-mdpfp_compact\fR" 4
11836 .IX Item "-mdpfp_compact"
11837 Replaced by \fB\-mdpfp\-compact\fR.
11838 .IP "\fB\-mdpfp_fast\fR" 4
11839 .IX Item "-mdpfp_fast"
11840 Replaced by \fB\-mdpfp\-fast\fR.
11841 .IP "\fB\-mdsp_packa\fR" 4
11842 .IX Item "-mdsp_packa"
11843 Replaced by \fB\-mdsp\-packa\fR.
11844 .IP "\fB\-mEA\fR" 4
11845 .IX Item "-mEA"
11846 Replaced by \fB\-mea\fR.
11847 .IP "\fB\-mmac_24\fR" 4
11848 .IX Item "-mmac_24"
11849 Replaced by \fB\-mmac\-24\fR.
11850 .IP "\fB\-mmac_d16\fR" 4
11851 .IX Item "-mmac_d16"
11852 Replaced by \fB\-mmac\-d16\fR.
11853 .IP "\fB\-mspfp_compact\fR" 4
11854 .IX Item "-mspfp_compact"
11855 Replaced by \fB\-mspfp\-compact\fR.
11856 .IP "\fB\-mspfp_fast\fR" 4
11857 .IX Item "-mspfp_fast"
11858 Replaced by \fB\-mspfp\-fast\fR.
11859 .IP "\fB\-mtune=\fR\fIcpu\fR" 4
11860 .IX Item "-mtune=cpu"
11861 Values \fBarc600\fR, \fBarc601\fR, \fBarc700\fR and
11862 \&\fBarc700\-xmac\fR for \fIcpu\fR are replaced by \fB\s-1ARC600\s0\fR,
11863 \&\fB\s-1ARC601\s0\fR, \fB\s-1ARC700\s0\fR and \fBARC700\-xmac\fR respectively
11864 .IP "\fB\-multcost=\fR\fInum\fR" 4
11865 .IX Item "-multcost=num"
11866 Replaced by \fB\-mmultcost\fR.
11867 .PP
11868 \fI\s-1ARM\s0 Options\fR
11869 .IX Subsection "ARM Options"
11870 .PP
11871 These \fB\-m\fR options are defined for the \s-1ARM\s0 port:
11872 .IP "\fB\-mabi=\fR\fIname\fR" 4
11873 .IX Item "-mabi=name"
11874 Generate code for the specified \s-1ABI\s0.  Permissible values are: \fBapcs-gnu\fR,
11875 \&\fBatpcs\fR, \fBaapcs\fR, \fBaapcs-linux\fR and \fBiwmmxt\fR.
11876 .IP "\fB\-mapcs\-frame\fR" 4
11877 .IX Item "-mapcs-frame"
11878 Generate a stack frame that is compliant with the \s-1ARM\s0 Procedure Call
11879 Standard for all functions, even if this is not strictly necessary for
11880 correct execution of the code.  Specifying \fB\-fomit\-frame\-pointer\fR
11881 with this option causes the stack frames not to be generated for
11882 leaf functions.  The default is \fB\-mno\-apcs\-frame\fR.
11883 .IP "\fB\-mapcs\fR" 4
11884 .IX Item "-mapcs"
11885 This is a synonym for \fB\-mapcs\-frame\fR.
11886 .IP "\fB\-mthumb\-interwork\fR" 4
11887 .IX Item "-mthumb-interwork"
11888 Generate code that supports calling between the \s-1ARM\s0 and Thumb
11889 instruction sets.  Without this option, on pre\-v5 architectures, the
11890 two instruction sets cannot be reliably used inside one program.  The
11891 default is \fB\-mno\-thumb\-interwork\fR, since slightly larger code
11892 is generated when \fB\-mthumb\-interwork\fR is specified.  In \s-1AAPCS\s0
11893 configurations this option is meaningless.
11894 .IP "\fB\-mno\-sched\-prolog\fR" 4
11895 .IX Item "-mno-sched-prolog"
11896 Prevent the reordering of instructions in the function prologue, or the
11897 merging of those instruction with the instructions in the function's
11898 body.  This means that all functions start with a recognizable set
11899 of instructions (or in fact one of a choice from a small set of
11900 different function prologues), and this information can be used to
11901 locate the start of functions inside an executable piece of code.  The
11902 default is \fB\-msched\-prolog\fR.
11903 .IP "\fB\-mfloat\-abi=\fR\fIname\fR" 4
11904 .IX Item "-mfloat-abi=name"
11905 Specifies which floating-point \s-1ABI\s0 to use.  Permissible values
11906 are: \fBsoft\fR, \fBsoftfp\fR and \fBhard\fR.
11907 .Sp
11908 Specifying \fBsoft\fR causes \s-1GCC\s0 to generate output containing
11909 library calls for floating-point operations.
11910 \&\fBsoftfp\fR allows the generation of code using hardware floating-point
11911 instructions, but still uses the soft-float calling conventions.
11912 \&\fBhard\fR allows generation of floating-point instructions
11913 and uses FPU-specific calling conventions.
11914 .Sp
11915 The default depends on the specific target configuration.  Note that
11916 the hard-float and soft-float ABIs are not link-compatible; you must
11917 compile your entire program with the same \s-1ABI\s0, and link with a
11918 compatible set of libraries.
11919 .IP "\fB\-mlittle\-endian\fR" 4
11920 .IX Item "-mlittle-endian"
11921 Generate code for a processor running in little-endian mode.  This is
11922 the default for all standard configurations.
11923 .IP "\fB\-mbig\-endian\fR" 4
11924 .IX Item "-mbig-endian"
11925 Generate code for a processor running in big-endian mode; the default is
11926 to compile code for a little-endian processor.
11927 .IP "\fB\-march=\fR\fIname\fR" 4
11928 .IX Item "-march=name"
11929 This specifies the name of the target \s-1ARM\s0 architecture.  \s-1GCC\s0 uses this
11930 name to determine what kind of instructions it can emit when generating
11931 assembly code.  This option can be used in conjunction with or instead
11932 of the \fB\-mcpu=\fR option.  Permissible names are: \fBarmv2\fR,
11933 \&\fBarmv2a\fR, \fBarmv3\fR, \fBarmv3m\fR, \fBarmv4\fR, \fBarmv4t\fR,
11934 \&\fBarmv5\fR, \fBarmv5t\fR, \fBarmv5e\fR, \fBarmv5te\fR,
11935 \&\fBarmv6\fR, \fBarmv6j\fR,
11936 \&\fBarmv6t2\fR, \fBarmv6z\fR, \fBarmv6zk\fR, \fBarmv6\-m\fR,
11937 \&\fBarmv7\fR, \fBarmv7\-a\fR, \fBarmv7\-r\fR, \fBarmv7\-m\fR, \fBarmv7e\-m\fR,
11938 \&\fBarmv7ve\fR, \fBarmv8\-a\fR, \fBarmv8\-a+crc\fR,
11939 \&\fBiwmmxt\fR, \fBiwmmxt2\fR, \fBep9312\fR.
11940 .Sp
11941 \&\fB\-march=armv7ve\fR is the armv7\-a architecture with virtualization
11942 extensions.
11943 .Sp
11944 \&\fB\-march=armv8\-a+crc\fR enables code generation for the ARMv8\-A
11945 architecture together with the optional \s-1CRC32\s0 extensions.
11946 .Sp
11947 \&\fB\-march=native\fR causes the compiler to auto-detect the architecture
11948 of the build computer.  At present, this feature is only supported on
11949 GNU/Linux, and not all architectures are recognized.  If the auto-detect
11950 is unsuccessful the option has no effect.
11951 .IP "\fB\-mtune=\fR\fIname\fR" 4
11952 .IX Item "-mtune=name"
11953 This option specifies the name of the target \s-1ARM\s0 processor for
11954 which \s-1GCC\s0 should tune the performance of the code.
11955 For some \s-1ARM\s0 implementations better performance can be obtained by using
11956 this option.
11957 Permissible names are: \fBarm2\fR, \fBarm250\fR,
11958 \&\fBarm3\fR, \fBarm6\fR, \fBarm60\fR, \fBarm600\fR, \fBarm610\fR,
11959 \&\fBarm620\fR, \fBarm7\fR, \fBarm7m\fR, \fBarm7d\fR, \fBarm7dm\fR,
11960 \&\fBarm7di\fR, \fBarm7dmi\fR, \fBarm70\fR, \fBarm700\fR,
11961 \&\fBarm700i\fR, \fBarm710\fR, \fBarm710c\fR, \fBarm7100\fR,
11962 \&\fBarm720\fR,
11963 \&\fBarm7500\fR, \fBarm7500fe\fR, \fBarm7tdmi\fR, \fBarm7tdmi\-s\fR,
11964 \&\fBarm710t\fR, \fBarm720t\fR, \fBarm740t\fR,
11965 \&\fBstrongarm\fR, \fBstrongarm110\fR, \fBstrongarm1100\fR,
11966 \&\fBstrongarm1110\fR,
11967 \&\fBarm8\fR, \fBarm810\fR, \fBarm9\fR, \fBarm9e\fR, \fBarm920\fR,
11968 \&\fBarm920t\fR, \fBarm922t\fR, \fBarm946e\-s\fR, \fBarm966e\-s\fR,
11969 \&\fBarm968e\-s\fR, \fBarm926ej\-s\fR, \fBarm940t\fR, \fBarm9tdmi\fR,
11970 \&\fBarm10tdmi\fR, \fBarm1020t\fR, \fBarm1026ej\-s\fR,
11971 \&\fBarm10e\fR, \fBarm1020e\fR, \fBarm1022e\fR,
11972 \&\fBarm1136j\-s\fR, \fBarm1136jf\-s\fR, \fBmpcore\fR, \fBmpcorenovfp\fR,
11973 \&\fBarm1156t2\-s\fR, \fBarm1156t2f\-s\fR, \fBarm1176jz\-s\fR, \fBarm1176jzf\-s\fR,
11974 \&\fBcortex\-a5\fR, \fBcortex\-a7\fR, \fBcortex\-a8\fR, \fBcortex\-a9\fR,
11975 \&\fBcortex\-a12\fR, \fBcortex\-a15\fR, \fBcortex\-a53\fR, \fBcortex\-a57\fR,
11976 \&\fBcortex\-r4\fR,
11977 \&\fBcortex\-r4f\fR, \fBcortex\-r5\fR, \fBcortex\-r7\fR, \fBcortex\-m7\fR,
11978 \&\fBcortex\-m4\fR,
11979 \&\fBcortex\-m3\fR,
11980 \&\fBcortex\-m1\fR,
11981 \&\fBcortex\-m0\fR,
11982 \&\fBcortex\-m0plus\fR,
11983 \&\fBcortex\-m1.small\-multiply\fR,
11984 \&\fBcortex\-m0.small\-multiply\fR,
11985 \&\fBcortex\-m0plus.small\-multiply\fR,
11986 \&\fBmarvell\-pj4\fR,
11987 \&\fBxscale\fR, \fBiwmmxt\fR, \fBiwmmxt2\fR, \fBep9312\fR,
11988 \&\fBfa526\fR, \fBfa626\fR,
11989 \&\fBfa606te\fR, \fBfa626te\fR, \fBfmp626\fR, \fBfa726te\fR.
11990 .Sp
11991 Additionally, this option can specify that \s-1GCC\s0 should tune the performance
11992 of the code for a big.LITTLE system.  Permissible names are:
11993 \&\fBcortex\-a15.cortex\-a7\fR, \fBcortex\-a57.cortex\-a53\fR.
11994 .Sp
11995 \&\fB\-mtune=generic\-\fR\fIarch\fR specifies that \s-1GCC\s0 should tune the
11996 performance for a blend of processors within architecture \fIarch\fR.
11997 The aim is to generate code that run well on the current most popular
11998 processors, balancing between optimizations that benefit some CPUs in the
11999 range, and avoiding performance pitfalls of other CPUs.  The effects of
12000 this option may change in future \s-1GCC\s0 versions as \s-1CPU\s0 models come and go.
12001 .Sp
12002 \&\fB\-mtune=native\fR causes the compiler to auto-detect the \s-1CPU\s0
12003 of the build computer.  At present, this feature is only supported on
12004 GNU/Linux, and not all architectures are recognized.  If the auto-detect is
12005 unsuccessful the option has no effect.
12006 .IP "\fB\-mcpu=\fR\fIname\fR" 4
12007 .IX Item "-mcpu=name"
12008 This specifies the name of the target \s-1ARM\s0 processor.  \s-1GCC\s0 uses this name
12009 to derive the name of the target \s-1ARM\s0 architecture (as if specified
12010 by \fB\-march\fR) and the \s-1ARM\s0 processor type for which to tune for
12011 performance (as if specified by \fB\-mtune\fR).  Where this option
12012 is used in conjunction with \fB\-march\fR or \fB\-mtune\fR,
12013 those options take precedence over the appropriate part of this option.
12014 .Sp
12015 Permissible names for this option are the same as those for
12016 \&\fB\-mtune\fR.
12017 .Sp
12018 \&\fB\-mcpu=generic\-\fR\fIarch\fR is also permissible, and is
12019 equivalent to \fB\-march=\fR\fIarch\fR \fB\-mtune=generic\-\fR\fIarch\fR.
12020 See \fB\-mtune\fR for more information.
12021 .Sp
12022 \&\fB\-mcpu=native\fR causes the compiler to auto-detect the \s-1CPU\s0
12023 of the build computer.  At present, this feature is only supported on
12024 GNU/Linux, and not all architectures are recognized.  If the auto-detect
12025 is unsuccessful the option has no effect.
12026 .IP "\fB\-mfpu=\fR\fIname\fR" 4
12027 .IX Item "-mfpu=name"
12028 This specifies what floating-point hardware (or hardware emulation) is
12029 available on the target.  Permissible names are: \fBvfp\fR, \fBvfpv3\fR,
12030 \&\fBvfpv3\-fp16\fR, \fBvfpv3\-d16\fR, \fBvfpv3\-d16\-fp16\fR, \fBvfpv3xd\fR,
12031 \&\fBvfpv3xd\-fp16\fR, \fBneon\fR, \fBneon\-fp16\fR, \fBvfpv4\fR,
12032 \&\fBvfpv4\-d16\fR, \fBfpv4\-sp\-d16\fR, \fBneon\-vfpv4\fR,
12033 \&\fBfpv5\-d16\fR, \fBfpv5\-sp\-d16\fR,
12034 \&\fBfp\-armv8\fR, \fBneon\-fp\-armv8\fR, and \fBcrypto\-neon\-fp\-armv8\fR.
12035 .Sp
12036 If \fB\-msoft\-float\fR is specified this specifies the format of
12037 floating-point values.
12038 .Sp
12039 If the selected floating-point hardware includes the \s-1NEON\s0 extension
12040 (e.g. \fB\-mfpu\fR=\fBneon\fR), note that floating-point
12041 operations are not generated by \s-1GCC\s0's auto-vectorization pass unless
12042 \&\fB\-funsafe\-math\-optimizations\fR is also specified.  This is
12043 because \s-1NEON\s0 hardware does not fully implement the \s-1IEEE\s0 754 standard for
12044 floating-point arithmetic (in particular denormal values are treated as
12045 zero), so the use of \s-1NEON\s0 instructions may lead to a loss of precision.
12046 .IP "\fB\-mfp16\-format=\fR\fIname\fR" 4
12047 .IX Item "-mfp16-format=name"
12048 Specify the format of the \f(CW\*(C`_\|_fp16\*(C'\fR half-precision floating-point type.
12049 Permissible names are \fBnone\fR, \fBieee\fR, and \fBalternative\fR;
12050 the default is \fBnone\fR, in which case the \f(CW\*(C`_\|_fp16\*(C'\fR type is not
12051 defined.
12052 .IP "\fB\-mstructure\-size\-boundary=\fR\fIn\fR" 4
12053 .IX Item "-mstructure-size-boundary=n"
12054 The sizes of all structures and unions are rounded up to a multiple
12055 of the number of bits set by this option.  Permissible values are 8, 32
12056 and 64.  The default value varies for different toolchains.  For the \s-1COFF\s0
12057 targeted toolchain the default value is 8.  A value of 64 is only allowed
12058 if the underlying \s-1ABI\s0 supports it.
12059 .Sp
12060 Specifying a larger number can produce faster, more efficient code, but
12061 can also increase the size of the program.  Different values are potentially
12062 incompatible.  Code compiled with one value cannot necessarily expect to
12063 work with code or libraries compiled with another value, if they exchange
12064 information using structures or unions.
12065 .IP "\fB\-mabort\-on\-noreturn\fR" 4
12066 .IX Item "-mabort-on-noreturn"
12067 Generate a call to the function \f(CW\*(C`abort\*(C'\fR at the end of a
12068 \&\f(CW\*(C`noreturn\*(C'\fR function.  It is executed if the function tries to
12069 return.
12070 .IP "\fB\-mlong\-calls\fR" 4
12071 .IX Item "-mlong-calls"
12072 .PD 0
12073 .IP "\fB\-mno\-long\-calls\fR" 4
12074 .IX Item "-mno-long-calls"
12075 .PD
12076 Tells the compiler to perform function calls by first loading the
12077 address of the function into a register and then performing a subroutine
12078 call on this register.  This switch is needed if the target function
12079 lies outside of the 64\-megabyte addressing range of the offset-based
12080 version of subroutine call instruction.
12081 .Sp
12082 Even if this switch is enabled, not all function calls are turned
12083 into long calls.  The heuristic is that static functions, functions
12084 that have the \f(CW\*(C`short_call\*(C'\fR attribute, functions that are inside
12085 the scope of a \f(CW\*(C`#pragma no_long_calls\*(C'\fR directive, and functions whose
12086 definitions have already been compiled within the current compilation
12087 unit are not turned into long calls.  The exceptions to this rule are
12088 that weak function definitions, functions with the \f(CW\*(C`long_call\*(C'\fR
12089 attribute or the \f(CW\*(C`section\*(C'\fR attribute, and functions that are within
12090 the scope of a \f(CW\*(C`#pragma long_calls\*(C'\fR directive are always
12091 turned into long calls.
12092 .Sp
12093 This feature is not enabled by default.  Specifying
12094 \&\fB\-mno\-long\-calls\fR restores the default behavior, as does
12095 placing the function calls within the scope of a \f(CW\*(C`#pragma
12096 long_calls_off\*(C'\fR directive.  Note these switches have no effect on how
12097 the compiler generates code to handle function calls via function
12098 pointers.
12099 .IP "\fB\-msingle\-pic\-base\fR" 4
12100 .IX Item "-msingle-pic-base"
12101 Treat the register used for \s-1PIC\s0 addressing as read-only, rather than
12102 loading it in the prologue for each function.  The runtime system is
12103 responsible for initializing this register with an appropriate value
12104 before execution begins.
12105 .IP "\fB\-mpic\-register=\fR\fIreg\fR" 4
12106 .IX Item "-mpic-register=reg"
12107 Specify the register to be used for \s-1PIC\s0 addressing.
12108 For standard \s-1PIC\s0 base case, the default is any suitable register
12109 determined by compiler.  For single \s-1PIC\s0 base case, the default is
12110 \&\fBR9\fR if target is \s-1EABI\s0 based or stack-checking is enabled,
12111 otherwise the default is \fBR10\fR.
12112 .IP "\fB\-mpic\-data\-is\-text\-relative\fR" 4
12113 .IX Item "-mpic-data-is-text-relative"
12114 Assume that each data segments are relative to text segment at load time.
12115 Therefore, it permits addressing data using PC-relative operations.
12116 This option is on by default for targets other than VxWorks \s-1RTP\s0.
12117 .IP "\fB\-mpoke\-function\-name\fR" 4
12118 .IX Item "-mpoke-function-name"
12119 Write the name of each function into the text section, directly
12120 preceding the function prologue.  The generated code is similar to this:
12121 .Sp
12122 .Vb 9
12123 \&             t0
12124 \&                 .ascii "arm_poke_function_name", 0
12125 \&                 .align
12126 \&             t1
12127 \&                 .word 0xff000000 + (t1 \- t0)
12128 \&             arm_poke_function_name
12129 \&                 mov     ip, sp
12130 \&                 stmfd   sp!, {fp, ip, lr, pc}
12131 \&                 sub     fp, ip, #4
12132 .Ve
12133 .Sp
12134 When performing a stack backtrace, code can inspect the value of
12135 \&\f(CW\*(C`pc\*(C'\fR stored at \f(CW\*(C`fp + 0\*(C'\fR.  If the trace function then looks at
12136 location \f(CW\*(C`pc \- 12\*(C'\fR and the top 8 bits are set, then we know that
12137 there is a function name embedded immediately preceding this location
12138 and has length \f(CW\*(C`((pc[\-3]) & 0xff000000)\*(C'\fR.
12139 .IP "\fB\-mthumb\fR" 4
12140 .IX Item "-mthumb"
12141 .PD 0
12142 .IP "\fB\-marm\fR" 4
12143 .IX Item "-marm"
12144 .PD
12145 Select between generating code that executes in \s-1ARM\s0 and Thumb
12146 states.  The default for most configurations is to generate code
12147 that executes in \s-1ARM\s0 state, but the default can be changed by
12148 configuring \s-1GCC\s0 with the \fB\-\-with\-mode=\fR\fIstate\fR
12149 configure option.
12150 .IP "\fB\-mtpcs\-frame\fR" 4
12151 .IX Item "-mtpcs-frame"
12152 Generate a stack frame that is compliant with the Thumb Procedure Call
12153 Standard for all non-leaf functions.  (A leaf function is one that does
12154 not call any other functions.)  The default is \fB\-mno\-tpcs\-frame\fR.
12155 .IP "\fB\-mtpcs\-leaf\-frame\fR" 4
12156 .IX Item "-mtpcs-leaf-frame"
12157 Generate a stack frame that is compliant with the Thumb Procedure Call
12158 Standard for all leaf functions.  (A leaf function is one that does
12159 not call any other functions.)  The default is \fB\-mno\-apcs\-leaf\-frame\fR.
12160 .IP "\fB\-mcallee\-super\-interworking\fR" 4
12161 .IX Item "-mcallee-super-interworking"
12162 Gives all externally visible functions in the file being compiled an \s-1ARM\s0
12163 instruction set header which switches to Thumb mode before executing the
12164 rest of the function.  This allows these functions to be called from
12165 non-interworking code.  This option is not valid in \s-1AAPCS\s0 configurations
12166 because interworking is enabled by default.
12167 .IP "\fB\-mcaller\-super\-interworking\fR" 4
12168 .IX Item "-mcaller-super-interworking"
12169 Allows calls via function pointers (including virtual functions) to
12170 execute correctly regardless of whether the target code has been
12171 compiled for interworking or not.  There is a small overhead in the cost
12172 of executing a function pointer if this option is enabled.  This option
12173 is not valid in \s-1AAPCS\s0 configurations because interworking is enabled
12174 by default.
12175 .IP "\fB\-mtp=\fR\fIname\fR" 4
12176 .IX Item "-mtp=name"
12177 Specify the access model for the thread local storage pointer.  The valid
12178 models are \fBsoft\fR, which generates calls to \f(CW\*(C`_\|_aeabi_read_tp\*(C'\fR,
12179 \&\fBcp15\fR, which fetches the thread pointer from \f(CW\*(C`cp15\*(C'\fR directly
12180 (supported in the arm6k architecture), and \fBauto\fR, which uses the
12181 best available method for the selected processor.  The default setting is
12182 \&\fBauto\fR.
12183 .IP "\fB\-mtls\-dialect=\fR\fIdialect\fR" 4
12184 .IX Item "-mtls-dialect=dialect"
12185 Specify the dialect to use for accessing thread local storage.  Two
12186 \&\fIdialect\fRs are supported\-\-\-\fBgnu\fR and \fBgnu2\fR.  The
12187 \&\fBgnu\fR dialect selects the original \s-1GNU\s0 scheme for supporting
12188 local and global dynamic \s-1TLS\s0 models.  The \fBgnu2\fR dialect
12189 selects the \s-1GNU\s0 descriptor scheme, which provides better performance
12190 for shared libraries.  The \s-1GNU\s0 descriptor scheme is compatible with
12191 the original scheme, but does require new assembler, linker and
12192 library support.  Initial and local exec \s-1TLS\s0 models are unaffected by
12193 this option and always use the original scheme.
12194 .IP "\fB\-mword\-relocations\fR" 4
12195 .IX Item "-mword-relocations"
12196 Only generate absolute relocations on word-sized values (i.e. R_ARM_ABS32).
12197 This is enabled by default on targets (uClinux, SymbianOS) where the runtime
12198 loader imposes this restriction, and when \fB\-fpic\fR or \fB\-fPIC\fR
12199 is specified.
12200 .IP "\fB\-mfix\-cortex\-m3\-ldrd\fR" 4
12201 .IX Item "-mfix-cortex-m3-ldrd"
12202 Some Cortex\-M3 cores can cause data corruption when \f(CW\*(C`ldrd\*(C'\fR instructions
12203 with overlapping destination and base registers are used.  This option avoids
12204 generating these instructions.  This option is enabled by default when
12205 \&\fB\-mcpu=cortex\-m3\fR is specified.
12206 .IP "\fB\-munaligned\-access\fR" 4
12207 .IX Item "-munaligned-access"
12208 .PD 0
12209 .IP "\fB\-mno\-unaligned\-access\fR" 4
12210 .IX Item "-mno-unaligned-access"
12211 .PD
12212 Enables (or disables) reading and writing of 16\- and 32\- bit values
12213 from addresses that are not 16\- or 32\- bit aligned.  By default
12214 unaligned access is disabled for all pre\-ARMv6 and all ARMv6\-M
12215 architectures, and enabled for all other architectures.  If unaligned
12216 access is not enabled then words in packed data structures are
12217 accessed a byte at a time.
12218 .Sp
12219 The \s-1ARM\s0 attribute \f(CW\*(C`Tag_CPU_unaligned_access\*(C'\fR is set in the
12220 generated object file to either true or false, depending upon the
12221 setting of this option.  If unaligned access is enabled then the
12222 preprocessor symbol \f(CW\*(C`_\|_ARM_FEATURE_UNALIGNED\*(C'\fR is also
12223 defined.
12224 .IP "\fB\-mneon\-for\-64bits\fR" 4
12225 .IX Item "-mneon-for-64bits"
12226 Enables using Neon to handle scalar 64\-bits operations. This is
12227 disabled by default since the cost of moving data from core registers
12228 to Neon is high.
12229 .IP "\fB\-mslow\-flash\-data\fR" 4
12230 .IX Item "-mslow-flash-data"
12231 Assume loading data from flash is slower than fetching instruction.
12232 Therefore literal load is minimized for better performance.
12233 This option is only supported when compiling for ARMv7 M\-profile and
12234 off by default.
12235 .IP "\fB\-masm\-syntax\-unified\fR" 4
12236 .IX Item "-masm-syntax-unified"
12237 Assume inline assembler is using unified asm syntax.  The default is
12238 currently off which implies divided syntax.  Currently this option is
12239 available only for Thumb1 and has no effect on \s-1ARM\s0 state and Thumb2.
12240 However, this may change in future releases of \s-1GCC\s0.  Divided syntax
12241 should be considered deprecated.
12242 .IP "\fB\-mrestrict\-it\fR" 4
12243 .IX Item "-mrestrict-it"
12244 Restricts generation of \s-1IT\s0 blocks to conform to the rules of ARMv8.
12245 \&\s-1IT\s0 blocks can only contain a single 16\-bit instruction from a select
12246 set of instructions. This option is on by default for ARMv8 Thumb mode.
12247 .PP
12248 \fI\s-1AVR\s0 Options\fR
12249 .IX Subsection "AVR Options"
12250 .PP
12251 These options are defined for \s-1AVR\s0 implementations:
12252 .IP "\fB\-mmcu=\fR\fImcu\fR" 4
12253 .IX Item "-mmcu=mcu"
12254 Specify Atmel \s-1AVR\s0 instruction set architectures (\s-1ISA\s0) or \s-1MCU\s0 type.
12255 .Sp
12256 The default for this option is@tie{}\fBavr2\fR.
12257 .Sp
12258 \&\s-1GCC\s0 supports the following \s-1AVR\s0 devices and ISAs:
12259 .RS 4
12260 .ie n .IP """avr2""" 4
12261 .el .IP "\f(CWavr2\fR" 4
12262 .IX Item "avr2"
12263 \&\*(L"Classic\*(R" devices with up to 8@tie{}KiB of program memory.
12264 \&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`attiny22\*(C'\fR, \f(CW\*(C`attiny26\*(C'\fR, \f(CW\*(C`at90c8534\*(C'\fR, \f(CW\*(C`at90s2313\*(C'\fR, \f(CW\*(C`at90s2323\*(C'\fR, \f(CW\*(C`at90s2333\*(C'\fR, \f(CW\*(C`at90s2343\*(C'\fR, \f(CW\*(C`at90s4414\*(C'\fR, \f(CW\*(C`at90s4433\*(C'\fR, \f(CW\*(C`at90s4434\*(C'\fR, \f(CW\*(C`at90s8515\*(C'\fR, \f(CW\*(C`at90s8535\*(C'\fR.
12265 .ie n .IP """avr25""" 4
12266 .el .IP "\f(CWavr25\fR" 4
12267 .IX Item "avr25"
12268 \&\*(L"Classic\*(R" devices with up to 8@tie{}KiB of program memory and with the \f(CW\*(C`MOVW\*(C'\fR instruction.
12269 \&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`ata5272\*(C'\fR, \f(CW\*(C`ata6616c\*(C'\fR, \f(CW\*(C`attiny13\*(C'\fR, \f(CW\*(C`attiny13a\*(C'\fR, \f(CW\*(C`attiny2313\*(C'\fR, \f(CW\*(C`attiny2313a\*(C'\fR, \f(CW\*(C`attiny24\*(C'\fR, \f(CW\*(C`attiny24a\*(C'\fR, \f(CW\*(C`attiny25\*(C'\fR, \f(CW\*(C`attiny261\*(C'\fR, \f(CW\*(C`attiny261a\*(C'\fR, \f(CW\*(C`attiny43u\*(C'\fR, \f(CW\*(C`attiny4313\*(C'\fR, \f(CW\*(C`attiny44\*(C'\fR, \f(CW\*(C`attiny44a\*(C'\fR, \f(CW\*(C`attiny441\*(C'\fR, \f(CW\*(C`attiny45\*(C'\fR, \f(CW\*(C`attiny461\*(C'\fR, \f(CW\*(C`attiny461a\*(C'\fR, \f(CW\*(C`attiny48\*(C'\fR, \f(CW\*(C`attiny828\*(C'\fR, \f(CW\*(C`attiny84\*(C'\fR, \f(CW\*(C`attiny84a\*(C'\fR, \f(CW\*(C`attiny841\*(C'\fR, \f(CW\*(C`attiny85\*(C'\fR, \f(CW\*(C`attiny861\*(C'\fR, \f(CW\*(C`attiny861a\*(C'\fR, \f(CW\*(C`attiny87\*(C'\fR, \f(CW\*(C`attiny88\*(C'\fR, \f(CW\*(C`at86rf401\*(C'\fR.
12270 .ie n .IP """avr3""" 4
12271 .el .IP "\f(CWavr3\fR" 4
12272 .IX Item "avr3"
12273 \&\*(L"Classic\*(R" devices with 16@tie{}KiB up to 64@tie{}KiB of  program memory.
12274 \&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`at43usb355\*(C'\fR, \f(CW\*(C`at76c711\*(C'\fR.
12275 .ie n .IP """avr31""" 4
12276 .el .IP "\f(CWavr31\fR" 4
12277 .IX Item "avr31"
12278 \&\*(L"Classic\*(R" devices with 128@tie{}KiB of program memory.
12279 \&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`atmega103\*(C'\fR, \f(CW\*(C`at43usb320\*(C'\fR.
12280 .ie n .IP """avr35""" 4
12281 .el .IP "\f(CWavr35\fR" 4
12282 .IX Item "avr35"
12283 \&\*(L"Classic\*(R" devices with 16@tie{}KiB up to 64@tie{}KiB of program memory and with the \f(CW\*(C`MOVW\*(C'\fR instruction.
12284 \&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`ata5505\*(C'\fR, \f(CW\*(C`ata6617c\*(C'\fR, \f(CW\*(C`ata664251\*(C'\fR, \f(CW\*(C`atmega16u2\*(C'\fR, \f(CW\*(C`atmega32u2\*(C'\fR, \f(CW\*(C`atmega8u2\*(C'\fR, \f(CW\*(C`attiny1634\*(C'\fR, \f(CW\*(C`attiny167\*(C'\fR, \f(CW\*(C`at90usb162\*(C'\fR, \f(CW\*(C`at90usb82\*(C'\fR.
12285 .ie n .IP """avr4""" 4
12286 .el .IP "\f(CWavr4\fR" 4
12287 .IX Item "avr4"
12288 \&\*(L"Enhanced\*(R" devices with up to 8@tie{}KiB of program memory.
12289 \&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`ata6285\*(C'\fR, \f(CW\*(C`ata6286\*(C'\fR, \f(CW\*(C`ata6289\*(C'\fR, \f(CW\*(C`ata6612c\*(C'\fR, \f(CW\*(C`atmega48\*(C'\fR, \f(CW\*(C`atmega48a\*(C'\fR, \f(CW\*(C`atmega48p\*(C'\fR, \f(CW\*(C`atmega48pa\*(C'\fR, \f(CW\*(C`atmega8\*(C'\fR, \f(CW\*(C`atmega8a\*(C'\fR, \f(CW\*(C`atmega8hva\*(C'\fR, \f(CW\*(C`atmega8515\*(C'\fR, \f(CW\*(C`atmega8535\*(C'\fR, \f(CW\*(C`atmega88\*(C'\fR, \f(CW\*(C`atmega88a\*(C'\fR, \f(CW\*(C`atmega88p\*(C'\fR, \f(CW\*(C`atmega88pa\*(C'\fR, \f(CW\*(C`at90pwm1\*(C'\fR, \f(CW\*(C`at90pwm2\*(C'\fR, \f(CW\*(C`at90pwm2b\*(C'\fR, \f(CW\*(C`at90pwm3\*(C'\fR, \f(CW\*(C`at90pwm3b\*(C'\fR, \f(CW\*(C`at90pwm81\*(C'\fR.
12290 .ie n .IP """avr5""" 4
12291 .el .IP "\f(CWavr5\fR" 4
12292 .IX Item "avr5"
12293 \&\*(L"Enhanced\*(R" devices with 16@tie{}KiB up to 64@tie{}KiB of program memory.
12294 \&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`ata5702m322\*(C'\fR, \f(CW\*(C`ata5782\*(C'\fR, \f(CW\*(C`ata5790\*(C'\fR, \f(CW\*(C`ata5790n\*(C'\fR, \f(CW\*(C`ata5795\*(C'\fR, \f(CW\*(C`ata5831\*(C'\fR, \f(CW\*(C`ata6613c\*(C'\fR, \f(CW\*(C`ata6614q\*(C'\fR, \f(CW\*(C`atmega16\*(C'\fR, \f(CW\*(C`atmega16a\*(C'\fR, \f(CW\*(C`atmega16hva\*(C'\fR, \f(CW\*(C`atmega16hva2\*(C'\fR, \f(CW\*(C`atmega16hvb\*(C'\fR, \f(CW\*(C`atmega16hvbrevb\*(C'\fR, \f(CW\*(C`atmega16m1\*(C'\fR, \f(CW\*(C`atmega16u4\*(C'\fR, \f(CW\*(C`atmega161\*(C'\fR, \f(CW\*(C`atmega162\*(C'\fR, \f(CW\*(C`atmega163\*(C'\fR, \f(CW\*(C`atmega164a\*(C'\fR, \f(CW\*(C`atmega164p\*(C'\fR, \f(CW\*(C`atmega164pa\*(C'\fR, \f(CW\*(C`atmega165\*(C'\fR, \f(CW\*(C`atmega165a\*(C'\fR, \f(CW\*(C`atmega165p\*(C'\fR, \f(CW\*(C`atmega165pa\*(C'\fR, \f(CW\*(C`atmega168\*(C'\fR, \f(CW\*(C`atmega168a\*(C'\fR, \f(CW\*(C`atmega168p\*(C'\fR, \f(CW\*(C`atmega168pa\*(C'\fR, \f(CW\*(C`atmega169\*(C'\fR, \f(CW\*(C`atmega169a\*(C'\fR, \f(CW\*(C`atmega169p\*(C'\fR, \f(CW\*(C`atmega169pa\*(C'\fR, \f(CW\*(C`atmega32\*(C'\fR, \f(CW\*(C`atmega32a\*(C'\fR, \f(CW\*(C`atmega32c1\*(C'\fR, \f(CW\*(C`atmega32hvb\*(C'\fR, \f(CW\*(C`atmega32hvbrevb\*(C'\fR, \f(CW\*(C`atmega32m1\*(C'\fR, \f(CW\*(C`atmega32u4\*(C'\fR, \f(CW\*(C`atmega32u6\*(C'\fR, \f(CW\*(C`atmega323\*(C'\fR, \f(CW\*(C`atmega324a\*(C'\fR, \f(CW\*(C`atmega324p\*(C'\fR, \f(CW\*(C`atmega324pa\*(C'\fR, \f(CW\*(C`atmega325\*(C'\fR, \f(CW\*(C`atmega325a\*(C'\fR, \f(CW\*(C`atmega325p\*(C'\fR, \f(CW\*(C`atmega325pa\*(C'\fR, \f(CW\*(C`atmega3250\*(C'\fR, \f(CW\*(C`atmega3250a\*(C'\fR, \f(CW\*(C`atmega3250p\*(C'\fR, \f(CW\*(C`atmega3250pa\*(C'\fR, \f(CW\*(C`atmega328\*(C'\fR, \f(CW\*(C`atmega328p\*(C'\fR, \f(CW\*(C`atmega329\*(C'\fR, \f(CW\*(C`atmega329a\*(C'\fR, \f(CW\*(C`atmega329p\*(C'\fR, \f(CW\*(C`atmega329pa\*(C'\fR, \f(CW\*(C`atmega3290\*(C'\fR, \f(CW\*(C`atmega3290a\*(C'\fR, \f(CW\*(C`atmega3290p\*(C'\fR, \f(CW\*(C`atmega3290pa\*(C'\fR, \f(CW\*(C`atmega406\*(C'\fR, \f(CW\*(C`atmega64\*(C'\fR, \f(CW\*(C`atmega64a\*(C'\fR, \f(CW\*(C`atmega64c1\*(C'\fR, \f(CW\*(C`atmega64hve\*(C'\fR, \f(CW\*(C`atmega64hve2\*(C'\fR, \f(CW\*(C`atmega64m1\*(C'\fR, \f(CW\*(C`atmega64rfr2\*(C'\fR, \f(CW\*(C`atmega640\*(C'\fR, \f(CW\*(C`atmega644\*(C'\fR, \f(CW\*(C`atmega644a\*(C'\fR, \f(CW\*(C`atmega644p\*(C'\fR, \f(CW\*(C`atmega644pa\*(C'\fR, \f(CW\*(C`atmega644rfr2\*(C'\fR, \f(CW\*(C`atmega645\*(C'\fR, \f(CW\*(C`atmega645a\*(C'\fR, \f(CW\*(C`atmega645p\*(C'\fR, \f(CW\*(C`atmega6450\*(C'\fR, \f(CW\*(C`atmega6450a\*(C'\fR, \f(CW\*(C`atmega6450p\*(C'\fR, \f(CW\*(C`atmega649\*(C'\fR, \f(CW\*(C`atmega649a\*(C'\fR, \f(CW\*(C`atmega649p\*(C'\fR, \f(CW\*(C`atmega6490\*(C'\fR, \f(CW\*(C`atmega6490a\*(C'\fR, \f(CW\*(C`atmega6490p\*(C'\fR, \f(CW\*(C`at90can32\*(C'\fR, \f(CW\*(C`at90can64\*(C'\fR, \f(CW\*(C`at90pwm161\*(C'\fR, \f(CW\*(C`at90pwm216\*(C'\fR, \f(CW\*(C`at90pwm316\*(C'\fR, \f(CW\*(C`at90scr100\*(C'\fR, \f(CW\*(C`at90usb646\*(C'\fR, \f(CW\*(C`at90usb647\*(C'\fR, \f(CW\*(C`at94k\*(C'\fR, \f(CW\*(C`m3000\*(C'\fR.
12295 .ie n .IP """avr51""" 4
12296 .el .IP "\f(CWavr51\fR" 4
12297 .IX Item "avr51"
12298 \&\*(L"Enhanced\*(R" devices with 128@tie{}KiB of program memory.
12299 \&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`atmega128\*(C'\fR, \f(CW\*(C`atmega128a\*(C'\fR, \f(CW\*(C`atmega128rfa1\*(C'\fR, \f(CW\*(C`atmega128rfr2\*(C'\fR, \f(CW\*(C`atmega1280\*(C'\fR, \f(CW\*(C`atmega1281\*(C'\fR, \f(CW\*(C`atmega1284\*(C'\fR, \f(CW\*(C`atmega1284p\*(C'\fR, \f(CW\*(C`atmega1284rfr2\*(C'\fR, \f(CW\*(C`at90can128\*(C'\fR, \f(CW\*(C`at90usb1286\*(C'\fR, \f(CW\*(C`at90usb1287\*(C'\fR.
12300 .ie n .IP """avr6""" 4
12301 .el .IP "\f(CWavr6\fR" 4
12302 .IX Item "avr6"
12303 \&\*(L"Enhanced\*(R" devices with 3\-byte \s-1PC\s0, i.e. with more than 128@tie{}KiB of program memory.
12304 \&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`atmega256rfr2\*(C'\fR, \f(CW\*(C`atmega2560\*(C'\fR, \f(CW\*(C`atmega2561\*(C'\fR, \f(CW\*(C`atmega2564rfr2\*(C'\fR.
12305 .ie n .IP """avrxmega2""" 4
12306 .el .IP "\f(CWavrxmega2\fR" 4
12307 .IX Item "avrxmega2"
12308 \&\*(L"\s-1XMEGA\s0\*(R" devices with more than 8@tie{}KiB and up to 64@tie{}KiB of program memory.
12309 \&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`atxmega16a4\*(C'\fR, \f(CW\*(C`atxmega16a4u\*(C'\fR, \f(CW\*(C`atxmega16c4\*(C'\fR, \f(CW\*(C`atxmega16d4\*(C'\fR, \f(CW\*(C`atxmega16e5\*(C'\fR, \f(CW\*(C`atxmega32a4\*(C'\fR, \f(CW\*(C`atxmega32a4u\*(C'\fR, \f(CW\*(C`atxmega32c3\*(C'\fR, \f(CW\*(C`atxmega32c4\*(C'\fR, \f(CW\*(C`atxmega32d3\*(C'\fR, \f(CW\*(C`atxmega32d4\*(C'\fR, \f(CW\*(C`atxmega32e5\*(C'\fR, \f(CW\*(C`atxmega8e5\*(C'\fR.
12310 .ie n .IP """avrxmega4""" 4
12311 .el .IP "\f(CWavrxmega4\fR" 4
12312 .IX Item "avrxmega4"
12313 \&\*(L"\s-1XMEGA\s0\*(R" devices with more than 64@tie{}KiB and up to 128@tie{}KiB of program memory.
12314 \&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`atxmega64a3\*(C'\fR, \f(CW\*(C`atxmega64a3u\*(C'\fR, \f(CW\*(C`atxmega64a4u\*(C'\fR, \f(CW\*(C`atxmega64b1\*(C'\fR, \f(CW\*(C`atxmega64b3\*(C'\fR, \f(CW\*(C`atxmega64c3\*(C'\fR, \f(CW\*(C`atxmega64d3\*(C'\fR, \f(CW\*(C`atxmega64d4\*(C'\fR.
12315 .ie n .IP """avrxmega5""" 4
12316 .el .IP "\f(CWavrxmega5\fR" 4
12317 .IX Item "avrxmega5"
12318 \&\*(L"\s-1XMEGA\s0\*(R" devices with more than 64@tie{}KiB and up to 128@tie{}KiB of program memory and more than 64@tie{}KiB of \s-1RAM\s0.
12319 \&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`atxmega64a1\*(C'\fR, \f(CW\*(C`atxmega64a1u\*(C'\fR.
12320 .ie n .IP """avrxmega6""" 4
12321 .el .IP "\f(CWavrxmega6\fR" 4
12322 .IX Item "avrxmega6"
12323 \&\*(L"\s-1XMEGA\s0\*(R" devices with more than 128@tie{}KiB of program memory.
12324 \&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`atxmega128a3\*(C'\fR, \f(CW\*(C`atxmega128a3u\*(C'\fR, \f(CW\*(C`atxmega128b1\*(C'\fR, \f(CW\*(C`atxmega128b3\*(C'\fR, \f(CW\*(C`atxmega128c3\*(C'\fR, \f(CW\*(C`atxmega128d3\*(C'\fR, \f(CW\*(C`atxmega128d4\*(C'\fR, \f(CW\*(C`atxmega192a3\*(C'\fR, \f(CW\*(C`atxmega192a3u\*(C'\fR, \f(CW\*(C`atxmega192c3\*(C'\fR, \f(CW\*(C`atxmega192d3\*(C'\fR, \f(CW\*(C`atxmega256a3\*(C'\fR, \f(CW\*(C`atxmega256a3b\*(C'\fR, \f(CW\*(C`atxmega256a3bu\*(C'\fR, \f(CW\*(C`atxmega256a3u\*(C'\fR, \f(CW\*(C`atxmega256c3\*(C'\fR, \f(CW\*(C`atxmega256d3\*(C'\fR, \f(CW\*(C`atxmega384c3\*(C'\fR, \f(CW\*(C`atxmega384d3\*(C'\fR.
12325 .ie n .IP """avrxmega7""" 4
12326 .el .IP "\f(CWavrxmega7\fR" 4
12327 .IX Item "avrxmega7"
12328 \&\*(L"\s-1XMEGA\s0\*(R" devices with more than 128@tie{}KiB of program memory and more than 64@tie{}KiB of \s-1RAM\s0.
12329 \&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`atxmega128a1\*(C'\fR, \f(CW\*(C`atxmega128a1u\*(C'\fR, \f(CW\*(C`atxmega128a4u\*(C'\fR.
12330 .ie n .IP """avrtiny""" 4
12331 .el .IP "\f(CWavrtiny\fR" 4
12332 .IX Item "avrtiny"
12333 \&\*(L"\s-1TINY\s0\*(R" Tiny core devices with 512@tie{}B up to 4@tie{}KiB of program memory.
12334 \&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`attiny10\*(C'\fR, \f(CW\*(C`attiny20\*(C'\fR, \f(CW\*(C`attiny4\*(C'\fR, \f(CW\*(C`attiny40\*(C'\fR, \f(CW\*(C`attiny5\*(C'\fR, \f(CW\*(C`attiny9\*(C'\fR.
12335 .ie n .IP """avr1""" 4
12336 .el .IP "\f(CWavr1\fR" 4
12337 .IX Item "avr1"
12338 This \s-1ISA\s0 is implemented by the minimal \s-1AVR\s0 core and supported for assembler only.
12339 \&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`attiny11\*(C'\fR, \f(CW\*(C`attiny12\*(C'\fR, \f(CW\*(C`attiny15\*(C'\fR, \f(CW\*(C`attiny28\*(C'\fR, \f(CW\*(C`at90s1200\*(C'\fR.
12340 .RE
12341 .RS 4
12342 .RE
12343 .IP "\fB\-maccumulate\-args\fR" 4
12344 .IX Item "-maccumulate-args"
12345 Accumulate outgoing function arguments and acquire/release the needed
12346 stack space for outgoing function arguments once in function
12347 prologue/epilogue.  Without this option, outgoing arguments are pushed
12348 before calling a function and popped afterwards.
12349 .Sp
12350 Popping the arguments after the function call can be expensive on
12351 \&\s-1AVR\s0 so that accumulating the stack space might lead to smaller
12352 executables because arguments need not to be removed from the
12353 stack after such a function call.
12354 .Sp
12355 This option can lead to reduced code size for functions that perform
12356 several calls to functions that get their arguments on the stack like
12357 calls to printf-like functions.
12358 .IP "\fB\-mbranch\-cost=\fR\fIcost\fR" 4
12359 .IX Item "-mbranch-cost=cost"
12360 Set the branch costs for conditional branch instructions to
12361 \&\fIcost\fR.  Reasonable values for \fIcost\fR are small, non-negative
12362 integers. The default branch cost is 0.
12363 .IP "\fB\-mcall\-prologues\fR" 4
12364 .IX Item "-mcall-prologues"
12365 Functions prologues/epilogues are expanded as calls to appropriate
12366 subroutines.  Code size is smaller.
12367 .IP "\fB\-mint8\fR" 4
12368 .IX Item "-mint8"
12369 Assume \f(CW\*(C`int\*(C'\fR to be 8\-bit integer.  This affects the sizes of all types: a
12370 \&\f(CW\*(C`char\*(C'\fR is 1 byte, an \f(CW\*(C`int\*(C'\fR is 1 byte, a \f(CW\*(C`long\*(C'\fR is 2 bytes,
12371 and \f(CW\*(C`long long\*(C'\fR is 4 bytes.  Please note that this option does not
12372 conform to the C standards, but it results in smaller code
12373 size.
12374 .IP "\fB\-mno\-interrupts\fR" 4
12375 .IX Item "-mno-interrupts"
12376 Generated code is not compatible with hardware interrupts.
12377 Code size is smaller.
12378 .IP "\fB\-mrelax\fR" 4
12379 .IX Item "-mrelax"
12380 Try to replace \f(CW\*(C`CALL\*(C'\fR resp. \f(CW\*(C`JMP\*(C'\fR instruction by the shorter
12381 \&\f(CW\*(C`RCALL\*(C'\fR resp. \f(CW\*(C`RJMP\*(C'\fR instruction if applicable.
12382 Setting \fB\-mrelax\fR just adds the \fB\-\-relax\fR option to the
12383 linker command line when the linker is called.
12384 .Sp
12385 Jump relaxing is performed by the linker because jump offsets are not
12386 known before code is located. Therefore, the assembler code generated by the
12387 compiler is the same, but the instructions in the executable may
12388 differ from instructions in the assembler code.
12389 .Sp
12390 Relaxing must be turned on if linker stubs are needed, see the
12391 section on \f(CW\*(C`EIND\*(C'\fR and linker stubs below.
12392 .IP "\fB\-msp8\fR" 4
12393 .IX Item "-msp8"
12394 Treat the stack pointer register as an 8\-bit register,
12395 i.e. assume the high byte of the stack pointer is zero.
12396 In general, you don't need to set this option by hand.
12397 .Sp
12398 This option is used internally by the compiler to select and
12399 build multilibs for architectures \f(CW\*(C`avr2\*(C'\fR and \f(CW\*(C`avr25\*(C'\fR.
12400 These architectures mix devices with and without \f(CW\*(C`SPH\*(C'\fR.
12401 For any setting other than \fB\-mmcu=avr2\fR or \fB\-mmcu=avr25\fR
12402 the compiler driver adds or removes this option from the compiler
12403 proper's command line, because the compiler then knows if the device
12404 or architecture has an 8\-bit stack pointer and thus no \f(CW\*(C`SPH\*(C'\fR
12405 register or not.
12406 .IP "\fB\-mstrict\-X\fR" 4
12407 .IX Item "-mstrict-X"
12408 Use address register \f(CW\*(C`X\*(C'\fR in a way proposed by the hardware.  This means
12409 that \f(CW\*(C`X\*(C'\fR is only used in indirect, post-increment or
12410 pre-decrement addressing.
12411 .Sp
12412 Without this option, the \f(CW\*(C`X\*(C'\fR register may be used in the same way
12413 as \f(CW\*(C`Y\*(C'\fR or \f(CW\*(C`Z\*(C'\fR which then is emulated by additional
12414 instructions.  
12415 For example, loading a value with \f(CW\*(C`X+const\*(C'\fR addressing with a
12416 small non-negative \f(CW\*(C`const < 64\*(C'\fR to a register \fIRn\fR is
12417 performed as
12418 .Sp
12419 .Vb 3
12420 \&        adiw r26, const   ; X += const
12421 \&        ld   <Rn>, X        ; <Rn> = *X
12422 \&        sbiw r26, const   ; X \-= const
12423 .Ve
12424 .IP "\fB\-mtiny\-stack\fR" 4
12425 .IX Item "-mtiny-stack"
12426 Only change the lower 8@tie{}bits of the stack pointer.
12427 .IP "\fB\-Waddr\-space\-convert\fR" 4
12428 .IX Item "-Waddr-space-convert"
12429 Warn about conversions between address spaces in the case where the
12430 resulting address space is not contained in the incoming address space.
12431 .PP
12432 \f(CW\*(C`EIND\*(C'\fR and Devices with more than 128 Ki Bytes of Flash
12433 .IX Subsection "EIND and Devices with more than 128 Ki Bytes of Flash"
12434 .PP
12435 Pointers in the implementation are 16@tie{}bits wide.
12436 The address of a function or label is represented as word address so
12437 that indirect jumps and calls can target any code address in the
12438 range of 64@tie{}Ki words.
12439 .PP
12440 In order to facilitate indirect jump on devices with more than 128@tie{}Ki
12441 bytes of program memory space, there is a special function register called
12442 \&\f(CW\*(C`EIND\*(C'\fR that serves as most significant part of the target address
12443 when \f(CW\*(C`EICALL\*(C'\fR or \f(CW\*(C`EIJMP\*(C'\fR instructions are used.
12444 .PP
12445 Indirect jumps and calls on these devices are handled as follows by
12446 the compiler and are subject to some limitations:
12447 .IP "*" 4
12448 The compiler never sets \f(CW\*(C`EIND\*(C'\fR.
12449 .IP "*" 4
12450 The compiler uses \f(CW\*(C`EIND\*(C'\fR implicitely in \f(CW\*(C`EICALL\*(C'\fR/\f(CW\*(C`EIJMP\*(C'\fR
12451 instructions or might read \f(CW\*(C`EIND\*(C'\fR directly in order to emulate an
12452 indirect call/jump by means of a \f(CW\*(C`RET\*(C'\fR instruction.
12453 .IP "*" 4
12454 The compiler assumes that \f(CW\*(C`EIND\*(C'\fR never changes during the startup
12455 code or during the application. In particular, \f(CW\*(C`EIND\*(C'\fR is not
12456 saved/restored in function or interrupt service routine
12457 prologue/epilogue.
12458 .IP "*" 4
12459 For indirect calls to functions and computed goto, the linker
12460 generates \fIstubs\fR. Stubs are jump pads sometimes also called
12461 \&\fItrampolines\fR. Thus, the indirect call/jump jumps to such a stub.
12462 The stub contains a direct jump to the desired address.
12463 .IP "*" 4
12464 Linker relaxation must be turned on so that the linker generates
12465 the stubs correctly in all situations. See the compiler option
12466 \&\fB\-mrelax\fR and the linker option \fB\-\-relax\fR.
12467 There are corner cases where the linker is supposed to generate stubs
12468 but aborts without relaxation and without a helpful error message.
12469 .IP "*" 4
12470 The default linker script is arranged for code with \f(CW\*(C`EIND = 0\*(C'\fR.
12471 If code is supposed to work for a setup with \f(CW\*(C`EIND != 0\*(C'\fR, a custom
12472 linker script has to be used in order to place the sections whose
12473 name start with \f(CW\*(C`.trampolines\*(C'\fR into the segment where \f(CW\*(C`EIND\*(C'\fR
12474 points to.
12475 .IP "*" 4
12476 The startup code from libgcc never sets \f(CW\*(C`EIND\*(C'\fR.
12477 Notice that startup code is a blend of code from libgcc and AVR-LibC.
12478 For the impact of AVR-LibC on \f(CW\*(C`EIND\*(C'\fR, see the
12479 AVR-LibC\ user\ manual (\f(CW\*(C`http://nongnu.org/avr\-libc/user\-manual/\*(C'\fR).
12480 .IP "*" 4
12481 It is legitimate for user-specific startup code to set up \f(CW\*(C`EIND\*(C'\fR
12482 early, for example by means of initialization code located in
12483 section \f(CW\*(C`.init3\*(C'\fR. Such code runs prior to general startup code
12484 that initializes \s-1RAM\s0 and calls constructors, but after the bit
12485 of startup code from AVR-LibC that sets \f(CW\*(C`EIND\*(C'\fR to the segment
12486 where the vector table is located.
12487 .Sp
12488 .Vb 1
12489 \&        #include <avr/io.h>
12490 \&        
12491 \&        static void
12492 \&        _\|_attribute_\|_((section(".init3"),naked,used,no_instrument_function))
12493 \&        init3_set_eind (void)
12494 \&        {
12495 \&          _\|_asm volatile ("ldi r24,pm_hh8(_\|_trampolines_start)\en\et"
12496 \&                          "out %i0,r24" :: "n" (&EIND) : "r24","memory");
12497 \&        }
12498 .Ve
12499 .Sp
12500 The \f(CW\*(C`_\|_trampolines_start\*(C'\fR symbol is defined in the linker script.
12501 .IP "*" 4
12502 Stubs are generated automatically by the linker if
12503 the following two conditions are met:
12504 .RS 4
12505 .ie n .IP "\-<The address of a label is taken by means of the ""gs"" modifier>" 4
12506 .el .IP "\-<The address of a label is taken by means of the \f(CWgs\fR modifier>" 4
12507 .IX Item "-<The address of a label is taken by means of the gs modifier>"
12508 (short for \fIgenerate stubs\fR) like so:
12509 .Sp
12510 .Vb 2
12511 \&        LDI r24, lo8(gs(<func>))
12512 \&        LDI r25, hi8(gs(<func>))
12513 .Ve
12514 .IP "\-<The final location of that label is in a code segment>" 4
12515 .IX Item "-<The final location of that label is in a code segment>"
12516 \&\fIoutside\fR the segment where the stubs are located.
12517 .RE
12518 .RS 4
12519 .RE
12520 .IP "*" 4
12521 The compiler emits such \f(CW\*(C`gs\*(C'\fR modifiers for code labels in the
12522 following situations:
12523 .RS 4
12524 .IP "\-<Taking address of a function or code label.>" 4
12525 .IX Item "-<Taking address of a function or code label.>"
12526 .PD 0
12527 .IP "\-<Computed goto.>" 4
12528 .IX Item "-<Computed goto.>"
12529 .IP "\-<If prologue-save function is used, see \fB\-mcall\-prologues\fR>" 4
12530 .IX Item "-<If prologue-save function is used, see -mcall-prologues>"
12531 .PD
12532 command-line option.
12533 .IP "\-<Switch/case dispatch tables. If you do not want such dispatch>" 4
12534 .IX Item "-<Switch/case dispatch tables. If you do not want such dispatch>"
12535 tables you can specify the \fB\-fno\-jump\-tables\fR command-line option.
12536 .IP "\-<C and \*(C+ constructors/destructors called during startup/shutdown.>" 4
12537 .IX Item "-<C and  constructors/destructors called during startup/shutdown.>"
12538 .PD 0
12539 .ie n .IP "\-<If the tools hit a ""gs()"" modifier explained above.>" 4
12540 .el .IP "\-<If the tools hit a \f(CWgs()\fR modifier explained above.>" 4
12541 .IX Item "-<If the tools hit a gs() modifier explained above.>"
12542 .RE
12543 .RS 4
12544 .RE
12545 .IP "*" 4
12546 .PD
12547 Jumping to non-symbolic addresses like so is \fInot\fR supported:
12548 .Sp
12549 .Vb 5
12550 \&        int main (void)
12551 \&        {
12552 \&            /* Call function at word address 0x2 */
12553 \&            return ((int(*)(void)) 0x2)();
12554 \&        }
12555 .Ve
12556 .Sp
12557 Instead, a stub has to be set up, i.e. the function has to be called
12558 through a symbol (\f(CW\*(C`func_4\*(C'\fR in the example):
12559 .Sp
12560 .Vb 3
12561 \&        int main (void)
12562 \&        {
12563 \&            extern int func_4 (void);
12564 \&        
12565 \&            /* Call function at byte address 0x4 */
12566 \&            return func_4();
12567 \&        }
12568 .Ve
12569 .Sp
12570 and the application be linked with \fB\-Wl,\-\-defsym,func_4=0x4\fR.
12571 Alternatively, \f(CW\*(C`func_4\*(C'\fR can be defined in the linker script.
12572 .PP
12573 Handling of the \f(CW\*(C`RAMPD\*(C'\fR, \f(CW\*(C`RAMPX\*(C'\fR, \f(CW\*(C`RAMPY\*(C'\fR and \f(CW\*(C`RAMPZ\*(C'\fR Special Function Registers
12574 .IX Subsection "Handling of the RAMPD, RAMPX, RAMPY and RAMPZ Special Function Registers"
12575 .PP
12576 Some \s-1AVR\s0 devices support memories larger than the 64@tie{}KiB range
12577 that can be accessed with 16\-bit pointers.  To access memory locations
12578 outside this 64@tie{}KiB range, the contentent of a \f(CW\*(C`RAMP\*(C'\fR
12579 register is used as high part of the address:
12580 The \f(CW\*(C`X\*(C'\fR, \f(CW\*(C`Y\*(C'\fR, \f(CW\*(C`Z\*(C'\fR address register is concatenated
12581 with the \f(CW\*(C`RAMPX\*(C'\fR, \f(CW\*(C`RAMPY\*(C'\fR, \f(CW\*(C`RAMPZ\*(C'\fR special function
12582 register, respectively, to get a wide address. Similarly,
12583 \&\f(CW\*(C`RAMPD\*(C'\fR is used together with direct addressing.
12584 .IP "*" 4
12585 The startup code initializes the \f(CW\*(C`RAMP\*(C'\fR special function
12586 registers with zero.
12587 .IP "*" 4
12588 If a \fB\s-1AVR\s0 Named Address Spaces,named address space\fR other than
12589 generic or \f(CW\*(C`_\|_flash\*(C'\fR is used, then \f(CW\*(C`RAMPZ\*(C'\fR is set
12590 as needed before the operation.
12591 .IP "*" 4
12592 If the device supports \s-1RAM\s0 larger than 64@tie{}KiB and the compiler
12593 needs to change \f(CW\*(C`RAMPZ\*(C'\fR to accomplish an operation, \f(CW\*(C`RAMPZ\*(C'\fR
12594 is reset to zero after the operation.
12595 .IP "*" 4
12596 If the device comes with a specific \f(CW\*(C`RAMP\*(C'\fR register, the \s-1ISR\s0
12597 prologue/epilogue saves/restores that \s-1SFR\s0 and initializes it with
12598 zero in case the \s-1ISR\s0 code might (implicitly) use it.
12599 .IP "*" 4
12600 \&\s-1RAM\s0 larger than 64@tie{}KiB is not supported by \s-1GCC\s0 for \s-1AVR\s0 targets.
12601 If you use inline assembler to read from locations outside the
12602 16\-bit address range and change one of the \f(CW\*(C`RAMP\*(C'\fR registers,
12603 you must reset it to zero after the access.
12604 .PP
12605 \s-1AVR\s0 Built-in Macros
12606 .IX Subsection "AVR Built-in Macros"
12607 .PP
12608 \&\s-1GCC\s0 defines several built-in macros so that the user code can test
12609 for the presence or absence of features.  Almost any of the following
12610 built-in macros are deduced from device capabilities and thus
12611 triggered by the \fB\-mmcu=\fR command-line option.
12612 .PP
12613 For even more AVR-specific built-in macros see
12614 \&\fB\s-1AVR\s0 Named Address Spaces\fR and \fB\s-1AVR\s0 Built-in Functions\fR.
12615 .ie n .IP """_\|_AVR_ARCH_\|_""" 4
12616 .el .IP "\f(CW_\|_AVR_ARCH_\|_\fR" 4
12617 .IX Item "__AVR_ARCH__"
12618 Build-in macro that resolves to a decimal number that identifies the
12619 architecture and depends on the \fB\-mmcu=\fR\fImcu\fR option.
12620 Possible values are:
12621 .Sp
12622 \&\f(CW2\fR, \f(CW25\fR, \f(CW3\fR, \f(CW31\fR, \f(CW35\fR,
12623 \&\f(CW4\fR, \f(CW5\fR, \f(CW51\fR, \f(CW6\fR, \f(CW102\fR, \f(CW104\fR,
12624 \&\f(CW105\fR, \f(CW106\fR, \f(CW107\fR
12625 .Sp
12626 for \fImcu\fR=\f(CW\*(C`avr2\*(C'\fR, \f(CW\*(C`avr25\*(C'\fR, \f(CW\*(C`avr3\*(C'\fR,
12627 \&\f(CW\*(C`avr31\*(C'\fR, \f(CW\*(C`avr35\*(C'\fR, \f(CW\*(C`avr4\*(C'\fR, \f(CW\*(C`avr5\*(C'\fR, \f(CW\*(C`avr51\*(C'\fR,
12628 \&\f(CW\*(C`avr6\*(C'\fR, \f(CW\*(C`avrxmega2\*(C'\fR, \f(CW\*(C`avrxmega4\*(C'\fR, \f(CW\*(C`avrxmega5\*(C'\fR,
12629 \&\f(CW\*(C`avrxmega6\*(C'\fR, \f(CW\*(C`avrxmega7\*(C'\fR, respectively.
12630 If \fImcu\fR specifies a device, this built-in macro is set
12631 accordingly. For example, with \fB\-mmcu=atmega8\fR the macro is
12632 defined to \f(CW4\fR.
12633 .ie n .IP """_\|_AVR_\f(CIDevice\f(CW_\|_""" 4
12634 .el .IP "\f(CW_\|_AVR_\f(CIDevice\f(CW_\|_\fR" 4
12635 .IX Item "__AVR_Device__"
12636 Setting \fB\-mmcu=\fR\fIdevice\fR defines this built-in macro which reflects
12637 the device's name. For example, \fB\-mmcu=atmega8\fR defines the
12638 built-in macro \f(CW\*(C`_\|_AVR_ATmega8_\|_\*(C'\fR, \fB\-mmcu=attiny261a\fR defines
12639 \&\f(CW\*(C`_\|_AVR_ATtiny261A_\|_\*(C'\fR, etc.
12640 .Sp
12641 The built-in macros' names follow
12642 the scheme \f(CW\*(C`_\|_AVR_\f(CIDevice\f(CW_\|_\*(C'\fR where \fIDevice\fR is
12643 the device name as from the \s-1AVR\s0 user manual. The difference between
12644 \&\fIDevice\fR in the built-in macro and \fIdevice\fR in
12645 \&\fB\-mmcu=\fR\fIdevice\fR is that the latter is always lowercase.
12646 .Sp
12647 If \fIdevice\fR is not a device but only a core architecture like
12648 \&\fBavr51\fR, this macro is not defined.
12649 .ie n .IP """_\|_AVR_DEVICE_NAME_\|_""" 4
12650 .el .IP "\f(CW_\|_AVR_DEVICE_NAME_\|_\fR" 4
12651 .IX Item "__AVR_DEVICE_NAME__"
12652 Setting \fB\-mmcu=\fR\fIdevice\fR defines this built-in macro to
12653 the device's name. For example, with \fB\-mmcu=atmega8\fR the macro
12654 is defined to \f(CW\*(C`atmega8\*(C'\fR.
12655 .Sp
12656 If \fIdevice\fR is not a device but only a core architecture like
12657 \&\fBavr51\fR, this macro is not defined.
12658 .ie n .IP """_\|_AVR_XMEGA_\|_""" 4
12659 .el .IP "\f(CW_\|_AVR_XMEGA_\|_\fR" 4
12660 .IX Item "__AVR_XMEGA__"
12661 The device / architecture belongs to the \s-1XMEGA\s0 family of devices.
12662 .ie n .IP """_\|_AVR_HAVE_ELPM_\|_""" 4
12663 .el .IP "\f(CW_\|_AVR_HAVE_ELPM_\|_\fR" 4
12664 .IX Item "__AVR_HAVE_ELPM__"
12665 The device has the the \f(CW\*(C`ELPM\*(C'\fR instruction.
12666 .ie n .IP """_\|_AVR_HAVE_ELPMX_\|_""" 4
12667 .el .IP "\f(CW_\|_AVR_HAVE_ELPMX_\|_\fR" 4
12668 .IX Item "__AVR_HAVE_ELPMX__"
12669 The device has the \f(CW\*(C`ELPM R\f(CIn\f(CW,Z\*(C'\fR and \f(CW\*(C`ELPM
12670 R\f(CIn\f(CW,Z+\*(C'\fR instructions.
12671 .ie n .IP """_\|_AVR_HAVE_MOVW_\|_""" 4
12672 .el .IP "\f(CW_\|_AVR_HAVE_MOVW_\|_\fR" 4
12673 .IX Item "__AVR_HAVE_MOVW__"
12674 The device has the \f(CW\*(C`MOVW\*(C'\fR instruction to perform 16\-bit
12675 register-register moves.
12676 .ie n .IP """_\|_AVR_HAVE_LPMX_\|_""" 4
12677 .el .IP "\f(CW_\|_AVR_HAVE_LPMX_\|_\fR" 4
12678 .IX Item "__AVR_HAVE_LPMX__"
12679 The device has the \f(CW\*(C`LPM R\f(CIn\f(CW,Z\*(C'\fR and
12680 \&\f(CW\*(C`LPM R\f(CIn\f(CW,Z+\*(C'\fR instructions.
12681 .ie n .IP """_\|_AVR_HAVE_MUL_\|_""" 4
12682 .el .IP "\f(CW_\|_AVR_HAVE_MUL_\|_\fR" 4
12683 .IX Item "__AVR_HAVE_MUL__"
12684 The device has a hardware multiplier.
12685 .ie n .IP """_\|_AVR_HAVE_JMP_CALL_\|_""" 4
12686 .el .IP "\f(CW_\|_AVR_HAVE_JMP_CALL_\|_\fR" 4
12687 .IX Item "__AVR_HAVE_JMP_CALL__"
12688 The device has the \f(CW\*(C`JMP\*(C'\fR and \f(CW\*(C`CALL\*(C'\fR instructions.
12689 This is the case for devices with at least 16@tie{}KiB of program
12690 memory.
12691 .ie n .IP """_\|_AVR_HAVE_EIJMP_EICALL_\|_""" 4
12692 .el .IP "\f(CW_\|_AVR_HAVE_EIJMP_EICALL_\|_\fR" 4
12693 .IX Item "__AVR_HAVE_EIJMP_EICALL__"
12694 .PD 0
12695 .ie n .IP """_\|_AVR_3_BYTE_PC_\|_""" 4
12696 .el .IP "\f(CW_\|_AVR_3_BYTE_PC_\|_\fR" 4
12697 .IX Item "__AVR_3_BYTE_PC__"
12698 .PD
12699 The device has the \f(CW\*(C`EIJMP\*(C'\fR and \f(CW\*(C`EICALL\*(C'\fR instructions.
12700 This is the case for devices with more than 128@tie{}KiB of program memory.
12701 This also means that the program counter
12702 (\s-1PC\s0) is 3@tie{}bytes wide.
12703 .ie n .IP """_\|_AVR_2_BYTE_PC_\|_""" 4
12704 .el .IP "\f(CW_\|_AVR_2_BYTE_PC_\|_\fR" 4
12705 .IX Item "__AVR_2_BYTE_PC__"
12706 The program counter (\s-1PC\s0) is 2@tie{}bytes wide. This is the case for devices
12707 with up to 128@tie{}KiB of program memory.
12708 .ie n .IP """_\|_AVR_HAVE_8BIT_SP_\|_""" 4
12709 .el .IP "\f(CW_\|_AVR_HAVE_8BIT_SP_\|_\fR" 4
12710 .IX Item "__AVR_HAVE_8BIT_SP__"
12711 .PD 0
12712 .ie n .IP """_\|_AVR_HAVE_16BIT_SP_\|_""" 4
12713 .el .IP "\f(CW_\|_AVR_HAVE_16BIT_SP_\|_\fR" 4
12714 .IX Item "__AVR_HAVE_16BIT_SP__"
12715 .PD
12716 The stack pointer (\s-1SP\s0) register is treated as 8\-bit respectively
12717 16\-bit register by the compiler.
12718 The definition of these macros is affected by \fB\-mtiny\-stack\fR.
12719 .ie n .IP """_\|_AVR_HAVE_SPH_\|_""" 4
12720 .el .IP "\f(CW_\|_AVR_HAVE_SPH_\|_\fR" 4
12721 .IX Item "__AVR_HAVE_SPH__"
12722 .PD 0
12723 .ie n .IP """_\|_AVR_SP8_\|_""" 4
12724 .el .IP "\f(CW_\|_AVR_SP8_\|_\fR" 4
12725 .IX Item "__AVR_SP8__"
12726 .PD
12727 The device has the \s-1SPH\s0 (high part of stack pointer) special function
12728 register or has an 8\-bit stack pointer, respectively.
12729 The definition of these macros is affected by \fB\-mmcu=\fR and
12730 in the cases of \fB\-mmcu=avr2\fR and \fB\-mmcu=avr25\fR also
12731 by \fB\-msp8\fR.
12732 .ie n .IP """_\|_AVR_HAVE_RAMPD_\|_""" 4
12733 .el .IP "\f(CW_\|_AVR_HAVE_RAMPD_\|_\fR" 4
12734 .IX Item "__AVR_HAVE_RAMPD__"
12735 .PD 0
12736 .ie n .IP """_\|_AVR_HAVE_RAMPX_\|_""" 4
12737 .el .IP "\f(CW_\|_AVR_HAVE_RAMPX_\|_\fR" 4
12738 .IX Item "__AVR_HAVE_RAMPX__"
12739 .ie n .IP """_\|_AVR_HAVE_RAMPY_\|_""" 4
12740 .el .IP "\f(CW_\|_AVR_HAVE_RAMPY_\|_\fR" 4
12741 .IX Item "__AVR_HAVE_RAMPY__"
12742 .ie n .IP """_\|_AVR_HAVE_RAMPZ_\|_""" 4
12743 .el .IP "\f(CW_\|_AVR_HAVE_RAMPZ_\|_\fR" 4
12744 .IX Item "__AVR_HAVE_RAMPZ__"
12745 .PD
12746 The device has the \f(CW\*(C`RAMPD\*(C'\fR, \f(CW\*(C`RAMPX\*(C'\fR, \f(CW\*(C`RAMPY\*(C'\fR,
12747 \&\f(CW\*(C`RAMPZ\*(C'\fR special function register, respectively.
12748 .ie n .IP """_\|_NO_INTERRUPTS_\|_""" 4
12749 .el .IP "\f(CW_\|_NO_INTERRUPTS_\|_\fR" 4
12750 .IX Item "__NO_INTERRUPTS__"
12751 This macro reflects the \fB\-mno\-interrupts\fR command line option.
12752 .ie n .IP """_\|_AVR_ERRATA_SKIP_\|_""" 4
12753 .el .IP "\f(CW_\|_AVR_ERRATA_SKIP_\|_\fR" 4
12754 .IX Item "__AVR_ERRATA_SKIP__"
12755 .PD 0
12756 .ie n .IP """_\|_AVR_ERRATA_SKIP_JMP_CALL_\|_""" 4
12757 .el .IP "\f(CW_\|_AVR_ERRATA_SKIP_JMP_CALL_\|_\fR" 4
12758 .IX Item "__AVR_ERRATA_SKIP_JMP_CALL__"
12759 .PD
12760 Some \s-1AVR\s0 devices (\s-1AT90S8515\s0, ATmega103) must not skip 32\-bit
12761 instructions because of a hardware erratum.  Skip instructions are
12762 \&\f(CW\*(C`SBRS\*(C'\fR, \f(CW\*(C`SBRC\*(C'\fR, \f(CW\*(C`SBIS\*(C'\fR, \f(CW\*(C`SBIC\*(C'\fR and \f(CW\*(C`CPSE\*(C'\fR.
12763 The second macro is only defined if \f(CW\*(C`_\|_AVR_HAVE_JMP_CALL_\|_\*(C'\fR is also
12764 set.
12765 .ie n .IP """_\|_AVR_ISA_RMW_\|_""" 4
12766 .el .IP "\f(CW_\|_AVR_ISA_RMW_\|_\fR" 4
12767 .IX Item "__AVR_ISA_RMW__"
12768 The device has Read-Modify-Write instructions (\s-1XCH\s0, \s-1LAC\s0, \s-1LAS\s0 and \s-1LAT\s0).
12769 .ie n .IP """_\|_AVR_SFR_OFFSET_\|_=\f(CIoffset\f(CW""" 4
12770 .el .IP "\f(CW_\|_AVR_SFR_OFFSET_\|_=\f(CIoffset\f(CW\fR" 4
12771 .IX Item "__AVR_SFR_OFFSET__=offset"
12772 Instructions that can address I/O special function registers directly
12773 like \f(CW\*(C`IN\*(C'\fR, \f(CW\*(C`OUT\*(C'\fR, \f(CW\*(C`SBI\*(C'\fR, etc. may use a different
12774 address as if addressed by an instruction to access \s-1RAM\s0 like \f(CW\*(C`LD\*(C'\fR
12775 or \f(CW\*(C`STS\*(C'\fR. This offset depends on the device architecture and has
12776 to be subtracted from the \s-1RAM\s0 address in order to get the
12777 respective I/O@tie{}address.
12778 .ie n .IP """_\|_WITH_AVRLIBC_\|_""" 4
12779 .el .IP "\f(CW_\|_WITH_AVRLIBC_\|_\fR" 4
12780 .IX Item "__WITH_AVRLIBC__"
12781 The compiler is configured to be used together with AVR-Libc.
12782 See the \fB\-\-with\-avrlibc\fR configure option.
12783 .PP
12784 \fIBlackfin Options\fR
12785 .IX Subsection "Blackfin Options"
12786 .IP "\fB\-mcpu=\fR\fIcpu\fR[\fB\-\fR\fIsirevision\fR]" 4
12787 .IX Item "-mcpu=cpu[-sirevision]"
12788 Specifies the name of the target Blackfin processor.  Currently, \fIcpu\fR
12789 can be one of \fBbf512\fR, \fBbf514\fR, \fBbf516\fR, \fBbf518\fR,
12790 \&\fBbf522\fR, \fBbf523\fR, \fBbf524\fR, \fBbf525\fR, \fBbf526\fR,
12791 \&\fBbf527\fR, \fBbf531\fR, \fBbf532\fR, \fBbf533\fR,
12792 \&\fBbf534\fR, \fBbf536\fR, \fBbf537\fR, \fBbf538\fR, \fBbf539\fR,
12793 \&\fBbf542\fR, \fBbf544\fR, \fBbf547\fR, \fBbf548\fR, \fBbf549\fR,
12794 \&\fBbf542m\fR, \fBbf544m\fR, \fBbf547m\fR, \fBbf548m\fR, \fBbf549m\fR,
12795 \&\fBbf561\fR, \fBbf592\fR.
12796 .Sp
12797 The optional \fIsirevision\fR specifies the silicon revision of the target
12798 Blackfin processor.  Any workarounds available for the targeted silicon revision
12799 are enabled.  If \fIsirevision\fR is \fBnone\fR, no workarounds are enabled.
12800 If \fIsirevision\fR is \fBany\fR, all workarounds for the targeted processor
12801 are enabled.  The \f(CW\*(C`_\|_SILICON_REVISION_\|_\*(C'\fR macro is defined to two
12802 hexadecimal digits representing the major and minor numbers in the silicon
12803 revision.  If \fIsirevision\fR is \fBnone\fR, the \f(CW\*(C`_\|_SILICON_REVISION_\|_\*(C'\fR
12804 is not defined.  If \fIsirevision\fR is \fBany\fR, the
12805 \&\f(CW\*(C`_\|_SILICON_REVISION_\|_\*(C'\fR is defined to be \f(CW0xffff\fR.
12806 If this optional \fIsirevision\fR is not used, \s-1GCC\s0 assumes the latest known
12807 silicon revision of the targeted Blackfin processor.
12808 .Sp
12809 \&\s-1GCC\s0 defines a preprocessor macro for the specified \fIcpu\fR.
12810 For the \fBbfin-elf\fR toolchain, this option causes the hardware \s-1BSP\s0
12811 provided by libgloss to be linked in if \fB\-msim\fR is not given.
12812 .Sp
12813 Without this option, \fBbf532\fR is used as the processor by default.
12814 .Sp
12815 Note that support for \fBbf561\fR is incomplete.  For \fBbf561\fR,
12816 only the preprocessor macro is defined.
12817 .IP "\fB\-msim\fR" 4
12818 .IX Item "-msim"
12819 Specifies that the program will be run on the simulator.  This causes
12820 the simulator \s-1BSP\s0 provided by libgloss to be linked in.  This option
12821 has effect only for \fBbfin-elf\fR toolchain.
12822 Certain other options, such as \fB\-mid\-shared\-library\fR and
12823 \&\fB\-mfdpic\fR, imply \fB\-msim\fR.
12824 .IP "\fB\-momit\-leaf\-frame\-pointer\fR" 4
12825 .IX Item "-momit-leaf-frame-pointer"
12826 Don't keep the frame pointer in a register for leaf functions.  This
12827 avoids the instructions to save, set up and restore frame pointers and
12828 makes an extra register available in leaf functions.  The option
12829 \&\fB\-fomit\-frame\-pointer\fR removes the frame pointer for all functions,
12830 which might make debugging harder.
12831 .IP "\fB\-mspecld\-anomaly\fR" 4
12832 .IX Item "-mspecld-anomaly"
12833 When enabled, the compiler ensures that the generated code does not
12834 contain speculative loads after jump instructions. If this option is used,
12835 \&\f(CW\*(C`_\|_WORKAROUND_SPECULATIVE_LOADS\*(C'\fR is defined.
12836 .IP "\fB\-mno\-specld\-anomaly\fR" 4
12837 .IX Item "-mno-specld-anomaly"
12838 Don't generate extra code to prevent speculative loads from occurring.
12839 .IP "\fB\-mcsync\-anomaly\fR" 4
12840 .IX Item "-mcsync-anomaly"
12841 When enabled, the compiler ensures that the generated code does not
12842 contain \s-1CSYNC\s0 or \s-1SSYNC\s0 instructions too soon after conditional branches.
12843 If this option is used, \f(CW\*(C`_\|_WORKAROUND_SPECULATIVE_SYNCS\*(C'\fR is defined.
12844 .IP "\fB\-mno\-csync\-anomaly\fR" 4
12845 .IX Item "-mno-csync-anomaly"
12846 Don't generate extra code to prevent \s-1CSYNC\s0 or \s-1SSYNC\s0 instructions from
12847 occurring too soon after a conditional branch.
12848 .IP "\fB\-mlow\-64k\fR" 4
12849 .IX Item "-mlow-64k"
12850 When enabled, the compiler is free to take advantage of the knowledge that
12851 the entire program fits into the low 64k of memory.
12852 .IP "\fB\-mno\-low\-64k\fR" 4
12853 .IX Item "-mno-low-64k"
12854 Assume that the program is arbitrarily large.  This is the default.
12855 .IP "\fB\-mstack\-check\-l1\fR" 4
12856 .IX Item "-mstack-check-l1"
12857 Do stack checking using information placed into L1 scratchpad memory by the
12858 uClinux kernel.
12859 .IP "\fB\-mid\-shared\-library\fR" 4
12860 .IX Item "-mid-shared-library"
12861 Generate code that supports shared libraries via the library \s-1ID\s0 method.
12862 This allows for execute in place and shared libraries in an environment
12863 without virtual memory management.  This option implies \fB\-fPIC\fR.
12864 With a \fBbfin-elf\fR target, this option implies \fB\-msim\fR.
12865 .IP "\fB\-mno\-id\-shared\-library\fR" 4
12866 .IX Item "-mno-id-shared-library"
12867 Generate code that doesn't assume ID-based shared libraries are being used.
12868 This is the default.
12869 .IP "\fB\-mleaf\-id\-shared\-library\fR" 4
12870 .IX Item "-mleaf-id-shared-library"
12871 Generate code that supports shared libraries via the library \s-1ID\s0 method,
12872 but assumes that this library or executable won't link against any other
12873 \&\s-1ID\s0 shared libraries.  That allows the compiler to use faster code for jumps
12874 and calls.
12875 .IP "\fB\-mno\-leaf\-id\-shared\-library\fR" 4
12876 .IX Item "-mno-leaf-id-shared-library"
12877 Do not assume that the code being compiled won't link against any \s-1ID\s0 shared
12878 libraries.  Slower code is generated for jump and call insns.
12879 .IP "\fB\-mshared\-library\-id=n\fR" 4
12880 .IX Item "-mshared-library-id=n"
12881 Specifies the identification number of the ID-based shared library being
12882 compiled.  Specifying a value of 0 generates more compact code; specifying
12883 other values forces the allocation of that number to the current
12884 library but is no more space\- or time-efficient than omitting this option.
12885 .IP "\fB\-msep\-data\fR" 4
12886 .IX Item "-msep-data"
12887 Generate code that allows the data segment to be located in a different
12888 area of memory from the text segment.  This allows for execute in place in
12889 an environment without virtual memory management by eliminating relocations
12890 against the text section.
12891 .IP "\fB\-mno\-sep\-data\fR" 4
12892 .IX Item "-mno-sep-data"
12893 Generate code that assumes that the data segment follows the text segment.
12894 This is the default.
12895 .IP "\fB\-mlong\-calls\fR" 4
12896 .IX Item "-mlong-calls"
12897 .PD 0
12898 .IP "\fB\-mno\-long\-calls\fR" 4
12899 .IX Item "-mno-long-calls"
12900 .PD
12901 Tells the compiler to perform function calls by first loading the
12902 address of the function into a register and then performing a subroutine
12903 call on this register.  This switch is needed if the target function
12904 lies outside of the 24\-bit addressing range of the offset-based
12905 version of subroutine call instruction.
12906 .Sp
12907 This feature is not enabled by default.  Specifying
12908 \&\fB\-mno\-long\-calls\fR restores the default behavior.  Note these
12909 switches have no effect on how the compiler generates code to handle
12910 function calls via function pointers.
12911 .IP "\fB\-mfast\-fp\fR" 4
12912 .IX Item "-mfast-fp"
12913 Link with the fast floating-point library. This library relaxes some of
12914 the \s-1IEEE\s0 floating-point standard's rules for checking inputs against
12915 Not-a-Number (\s-1NAN\s0), in the interest of performance.
12916 .IP "\fB\-minline\-plt\fR" 4
12917 .IX Item "-minline-plt"
12918 Enable inlining of \s-1PLT\s0 entries in function calls to functions that are
12919 not known to bind locally.  It has no effect without \fB\-mfdpic\fR.
12920 .IP "\fB\-mmulticore\fR" 4
12921 .IX Item "-mmulticore"
12922 Build a standalone application for multicore Blackfin processors. 
12923 This option causes proper start files and link scripts supporting 
12924 multicore to be used, and defines the macro \f(CW\*(C`_\|_BFIN_MULTICORE\*(C'\fR. 
12925 It can only be used with \fB\-mcpu=bf561\fR[\fB\-\fR\fIsirevision\fR].
12926 .Sp
12927 This option can be used with \fB\-mcorea\fR or \fB\-mcoreb\fR, which
12928 selects the one-application-per-core programming model.  Without
12929 \&\fB\-mcorea\fR or \fB\-mcoreb\fR, the single\-application/dual\-core
12930 programming model is used. In this model, the main function of Core B
12931 should be named as \f(CW\*(C`coreb_main\*(C'\fR.
12932 .Sp
12933 If this option is not used, the single-core application programming
12934 model is used.
12935 .IP "\fB\-mcorea\fR" 4
12936 .IX Item "-mcorea"
12937 Build a standalone application for Core A of \s-1BF561\s0 when using
12938 the one-application-per-core programming model. Proper start files
12939 and link scripts are used to support Core A, and the macro
12940 \&\f(CW\*(C`_\|_BFIN_COREA\*(C'\fR is defined.
12941 This option can only be used in conjunction with \fB\-mmulticore\fR.
12942 .IP "\fB\-mcoreb\fR" 4
12943 .IX Item "-mcoreb"
12944 Build a standalone application for Core B of \s-1BF561\s0 when using
12945 the one-application-per-core programming model. Proper start files
12946 and link scripts are used to support Core B, and the macro
12947 \&\f(CW\*(C`_\|_BFIN_COREB\*(C'\fR is defined. When this option is used, \f(CW\*(C`coreb_main\*(C'\fR
12948 should be used instead of \f(CW\*(C`main\*(C'\fR. 
12949 This option can only be used in conjunction with \fB\-mmulticore\fR.
12950 .IP "\fB\-msdram\fR" 4
12951 .IX Item "-msdram"
12952 Build a standalone application for \s-1SDRAM\s0. Proper start files and
12953 link scripts are used to put the application into \s-1SDRAM\s0, and the macro
12954 \&\f(CW\*(C`_\|_BFIN_SDRAM\*(C'\fR is defined.
12955 The loader should initialize \s-1SDRAM\s0 before loading the application.
12956 .IP "\fB\-micplb\fR" 4
12957 .IX Item "-micplb"
12958 Assume that ICPLBs are enabled at run time.  This has an effect on certain
12959 anomaly workarounds.  For Linux targets, the default is to assume ICPLBs
12960 are enabled; for standalone applications the default is off.
12961 .PP
12962 \fIC6X Options\fR
12963 .IX Subsection "C6X Options"
12964 .IP "\fB\-march=\fR\fIname\fR" 4
12965 .IX Item "-march=name"
12966 This specifies the name of the target architecture.  \s-1GCC\s0 uses this
12967 name to determine what kind of instructions it can emit when generating
12968 assembly code.  Permissible names are: \fBc62x\fR,
12969 \&\fBc64x\fR, \fBc64x+\fR, \fBc67x\fR, \fBc67x+\fR, \fBc674x\fR.
12970 .IP "\fB\-mbig\-endian\fR" 4
12971 .IX Item "-mbig-endian"
12972 Generate code for a big-endian target.
12973 .IP "\fB\-mlittle\-endian\fR" 4
12974 .IX Item "-mlittle-endian"
12975 Generate code for a little-endian target.  This is the default.
12976 .IP "\fB\-msim\fR" 4
12977 .IX Item "-msim"
12978 Choose startup files and linker script suitable for the simulator.
12979 .IP "\fB\-msdata=default\fR" 4
12980 .IX Item "-msdata=default"
12981 Put small global and static data in the \f(CW\*(C`.neardata\*(C'\fR section,
12982 which is pointed to by register \f(CW\*(C`B14\*(C'\fR.  Put small uninitialized
12983 global and static data in the \f(CW\*(C`.bss\*(C'\fR section, which is adjacent
12984 to the \f(CW\*(C`.neardata\*(C'\fR section.  Put small read-only data into the
12985 \&\f(CW\*(C`.rodata\*(C'\fR section.  The corresponding sections used for large
12986 pieces of data are \f(CW\*(C`.fardata\*(C'\fR, \f(CW\*(C`.far\*(C'\fR and \f(CW\*(C`.const\*(C'\fR.
12987 .IP "\fB\-msdata=all\fR" 4
12988 .IX Item "-msdata=all"
12989 Put all data, not just small objects, into the sections reserved for
12990 small data, and use addressing relative to the \f(CW\*(C`B14\*(C'\fR register to
12991 access them.
12992 .IP "\fB\-msdata=none\fR" 4
12993 .IX Item "-msdata=none"
12994 Make no use of the sections reserved for small data, and use absolute
12995 addresses to access all data.  Put all initialized global and static
12996 data in the \f(CW\*(C`.fardata\*(C'\fR section, and all uninitialized data in the
12997 \&\f(CW\*(C`.far\*(C'\fR section.  Put all constant data into the \f(CW\*(C`.const\*(C'\fR
12998 section.
12999 .PP
13000 \fI\s-1CRIS\s0 Options\fR
13001 .IX Subsection "CRIS Options"
13002 .PP
13003 These options are defined specifically for the \s-1CRIS\s0 ports.
13004 .IP "\fB\-march=\fR\fIarchitecture-type\fR" 4
13005 .IX Item "-march=architecture-type"
13006 .PD 0
13007 .IP "\fB\-mcpu=\fR\fIarchitecture-type\fR" 4
13008 .IX Item "-mcpu=architecture-type"
13009 .PD
13010 Generate code for the specified architecture.  The choices for
13011 \&\fIarchitecture-type\fR are \fBv3\fR, \fBv8\fR and \fBv10\fR for
13012 respectively \s-1ETRAX\s0\ 4, \s-1ETRAX\s0\ 100, and \s-1ETRAX\s0\ 100\ \s-1LX\s0.
13013 Default is \fBv0\fR except for cris-axis-linux-gnu, where the default is
13014 \&\fBv10\fR.
13015 .IP "\fB\-mtune=\fR\fIarchitecture-type\fR" 4
13016 .IX Item "-mtune=architecture-type"
13017 Tune to \fIarchitecture-type\fR everything applicable about the generated
13018 code, except for the \s-1ABI\s0 and the set of available instructions.  The
13019 choices for \fIarchitecture-type\fR are the same as for
13020 \&\fB\-march=\fR\fIarchitecture-type\fR.
13021 .IP "\fB\-mmax\-stack\-frame=\fR\fIn\fR" 4
13022 .IX Item "-mmax-stack-frame=n"
13023 Warn when the stack frame of a function exceeds \fIn\fR bytes.
13024 .IP "\fB\-metrax4\fR" 4
13025 .IX Item "-metrax4"
13026 .PD 0
13027 .IP "\fB\-metrax100\fR" 4
13028 .IX Item "-metrax100"
13029 .PD
13030 The options \fB\-metrax4\fR and \fB\-metrax100\fR are synonyms for
13031 \&\fB\-march=v3\fR and \fB\-march=v8\fR respectively.
13032 .IP "\fB\-mmul\-bug\-workaround\fR" 4
13033 .IX Item "-mmul-bug-workaround"
13034 .PD 0
13035 .IP "\fB\-mno\-mul\-bug\-workaround\fR" 4
13036 .IX Item "-mno-mul-bug-workaround"
13037 .PD
13038 Work around a bug in the \f(CW\*(C`muls\*(C'\fR and \f(CW\*(C`mulu\*(C'\fR instructions for \s-1CPU\s0
13039 models where it applies.  This option is active by default.
13040 .IP "\fB\-mpdebug\fR" 4
13041 .IX Item "-mpdebug"
13042 Enable CRIS-specific verbose debug-related information in the assembly
13043 code.  This option also has the effect of turning off the \fB#NO_APP\fR
13044 formatted-code indicator to the assembler at the beginning of the
13045 assembly file.
13046 .IP "\fB\-mcc\-init\fR" 4
13047 .IX Item "-mcc-init"
13048 Do not use condition-code results from previous instruction; always emit
13049 compare and test instructions before use of condition codes.
13050 .IP "\fB\-mno\-side\-effects\fR" 4
13051 .IX Item "-mno-side-effects"
13052 Do not emit instructions with side effects in addressing modes other than
13053 post-increment.
13054 .IP "\fB\-mstack\-align\fR" 4
13055 .IX Item "-mstack-align"
13056 .PD 0
13057 .IP "\fB\-mno\-stack\-align\fR" 4
13058 .IX Item "-mno-stack-align"
13059 .IP "\fB\-mdata\-align\fR" 4
13060 .IX Item "-mdata-align"
13061 .IP "\fB\-mno\-data\-align\fR" 4
13062 .IX Item "-mno-data-align"
13063 .IP "\fB\-mconst\-align\fR" 4
13064 .IX Item "-mconst-align"
13065 .IP "\fB\-mno\-const\-align\fR" 4
13066 .IX Item "-mno-const-align"
13067 .PD
13068 These options (\fBno\-\fR options) arrange (eliminate arrangements) for the
13069 stack frame, individual data and constants to be aligned for the maximum
13070 single data access size for the chosen \s-1CPU\s0 model.  The default is to
13071 arrange for 32\-bit alignment.  \s-1ABI\s0 details such as structure layout are
13072 not affected by these options.
13073 .IP "\fB\-m32\-bit\fR" 4
13074 .IX Item "-m32-bit"
13075 .PD 0
13076 .IP "\fB\-m16\-bit\fR" 4
13077 .IX Item "-m16-bit"
13078 .IP "\fB\-m8\-bit\fR" 4
13079 .IX Item "-m8-bit"
13080 .PD
13081 Similar to the stack\- data\- and const-align options above, these options
13082 arrange for stack frame, writable data and constants to all be 32\-bit,
13083 16\-bit or 8\-bit aligned.  The default is 32\-bit alignment.
13084 .IP "\fB\-mno\-prologue\-epilogue\fR" 4
13085 .IX Item "-mno-prologue-epilogue"
13086 .PD 0
13087 .IP "\fB\-mprologue\-epilogue\fR" 4
13088 .IX Item "-mprologue-epilogue"
13089 .PD
13090 With \fB\-mno\-prologue\-epilogue\fR, the normal function prologue and
13091 epilogue which set up the stack frame are omitted and no return
13092 instructions or return sequences are generated in the code.  Use this
13093 option only together with visual inspection of the compiled code: no
13094 warnings or errors are generated when call-saved registers must be saved,
13095 or storage for local variables needs to be allocated.
13096 .IP "\fB\-mno\-gotplt\fR" 4
13097 .IX Item "-mno-gotplt"
13098 .PD 0
13099 .IP "\fB\-mgotplt\fR" 4
13100 .IX Item "-mgotplt"
13101 .PD
13102 With \fB\-fpic\fR and \fB\-fPIC\fR, don't generate (do generate)
13103 instruction sequences that load addresses for functions from the \s-1PLT\s0 part
13104 of the \s-1GOT\s0 rather than (traditional on other architectures) calls to the
13105 \&\s-1PLT\s0.  The default is \fB\-mgotplt\fR.
13106 .IP "\fB\-melf\fR" 4
13107 .IX Item "-melf"
13108 Legacy no-op option only recognized with the cris-axis-elf and
13109 cris-axis-linux-gnu targets.
13110 .IP "\fB\-mlinux\fR" 4
13111 .IX Item "-mlinux"
13112 Legacy no-op option only recognized with the cris-axis-linux-gnu target.
13113 .IP "\fB\-sim\fR" 4
13114 .IX Item "-sim"
13115 This option, recognized for the cris-axis-elf, arranges
13116 to link with input-output functions from a simulator library.  Code,
13117 initialized data and zero-initialized data are allocated consecutively.
13118 .IP "\fB\-sim2\fR" 4
13119 .IX Item "-sim2"
13120 Like \fB\-sim\fR, but pass linker options to locate initialized data at
13121 0x40000000 and zero-initialized data at 0x80000000.
13122 .PP
13123 \fI\s-1CR16\s0 Options\fR
13124 .IX Subsection "CR16 Options"
13125 .PP
13126 These options are defined specifically for the \s-1CR16\s0 ports.
13127 .IP "\fB\-mmac\fR" 4
13128 .IX Item "-mmac"
13129 Enable the use of multiply-accumulate instructions. Disabled by default.
13130 .IP "\fB\-mcr16cplus\fR" 4
13131 .IX Item "-mcr16cplus"
13132 .PD 0
13133 .IP "\fB\-mcr16c\fR" 4
13134 .IX Item "-mcr16c"
13135 .PD
13136 Generate code for \s-1CR16C\s0 or \s-1CR16C+\s0 architecture. \s-1CR16C+\s0 architecture 
13137 is default.
13138 .IP "\fB\-msim\fR" 4
13139 .IX Item "-msim"
13140 Links the library libsim.a which is in compatible with simulator. Applicable
13141 to \s-1ELF\s0 compiler only.
13142 .IP "\fB\-mint32\fR" 4
13143 .IX Item "-mint32"
13144 Choose integer type as 32\-bit wide.
13145 .IP "\fB\-mbit\-ops\fR" 4
13146 .IX Item "-mbit-ops"
13147 Generates \f(CW\*(C`sbit\*(C'\fR/\f(CW\*(C`cbit\*(C'\fR instructions for bit manipulations.
13148 .IP "\fB\-mdata\-model=\fR\fImodel\fR" 4
13149 .IX Item "-mdata-model=model"
13150 Choose a data model. The choices for \fImodel\fR are \fBnear\fR,
13151 \&\fBfar\fR or \fBmedium\fR. \fBmedium\fR is default.
13152 However, \fBfar\fR is not valid with \fB\-mcr16c\fR, as the
13153 \&\s-1CR16C\s0 architecture does not support the far data model.
13154 .PP
13155 \fIDarwin Options\fR
13156 .IX Subsection "Darwin Options"
13157 .PP
13158 These options are defined for all architectures running the Darwin operating
13159 system.
13160 .PP
13161 \&\s-1FSF\s0 \s-1GCC\s0 on Darwin does not create \*(L"fat\*(R" object files; it creates
13162 an object file for the single architecture that \s-1GCC\s0 was built to
13163 target.  Apple's \s-1GCC\s0 on Darwin does create \*(L"fat\*(R" files if multiple
13164 \&\fB\-arch\fR options are used; it does so by running the compiler or
13165 linker multiple times and joining the results together with
13166 \&\fIlipo\fR.
13167 .PP
13168 The subtype of the file created (like \fBppc7400\fR or \fBppc970\fR or
13169 \&\fBi686\fR) is determined by the flags that specify the \s-1ISA\s0
13170 that \s-1GCC\s0 is targeting, like \fB\-mcpu\fR or \fB\-march\fR.  The
13171 \&\fB\-force_cpusubtype_ALL\fR option can be used to override this.
13172 .PP
13173 The Darwin tools vary in their behavior when presented with an \s-1ISA\s0
13174 mismatch.  The assembler, \fIas\fR, only permits instructions to
13175 be used that are valid for the subtype of the file it is generating,
13176 so you cannot put 64\-bit instructions in a \fBppc750\fR object file.
13177 The linker for shared libraries, \fI/usr/bin/libtool\fR, fails
13178 and prints an error if asked to create a shared library with a less
13179 restrictive subtype than its input files (for instance, trying to put
13180 a \fBppc970\fR object file in a \fBppc7400\fR library).  The linker
13181 for executables, \fBld\fR, quietly gives the executable the most
13182 restrictive subtype of any of its input files.
13183 .IP "\fB\-F\fR\fIdir\fR" 4
13184 .IX Item "-Fdir"
13185 Add the framework directory \fIdir\fR to the head of the list of
13186 directories to be searched for header files.  These directories are
13187 interleaved with those specified by \fB\-I\fR options and are
13188 scanned in a left-to-right order.
13189 .Sp
13190 A framework directory is a directory with frameworks in it.  A
13191 framework is a directory with a \fIHeaders\fR and/or
13192 \&\fIPrivateHeaders\fR directory contained directly in it that ends
13193 in \fI.framework\fR.  The name of a framework is the name of this
13194 directory excluding the \fI.framework\fR.  Headers associated with
13195 the framework are found in one of those two directories, with
13196 \&\fIHeaders\fR being searched first.  A subframework is a framework
13197 directory that is in a framework's \fIFrameworks\fR directory.
13198 Includes of subframework headers can only appear in a header of a
13199 framework that contains the subframework, or in a sibling subframework
13200 header.  Two subframeworks are siblings if they occur in the same
13201 framework.  A subframework should not have the same name as a
13202 framework; a warning is issued if this is violated.  Currently a
13203 subframework cannot have subframeworks; in the future, the mechanism
13204 may be extended to support this.  The standard frameworks can be found
13205 in \fI/System/Library/Frameworks\fR and
13206 \&\fI/Library/Frameworks\fR.  An example include looks like
13207 \&\f(CW\*(C`#include <Framework/header.h>\*(C'\fR, where \fIFramework\fR denotes
13208 the name of the framework and \fIheader.h\fR is found in the
13209 \&\fIPrivateHeaders\fR or \fIHeaders\fR directory.
13210 .IP "\fB\-iframework\fR\fIdir\fR" 4
13211 .IX Item "-iframeworkdir"
13212 Like \fB\-F\fR except the directory is a treated as a system
13213 directory.  The main difference between this \fB\-iframework\fR and
13214 \&\fB\-F\fR is that with \fB\-iframework\fR the compiler does not
13215 warn about constructs contained within header files found via
13216 \&\fIdir\fR.  This option is valid only for the C family of languages.
13217 .IP "\fB\-gused\fR" 4
13218 .IX Item "-gused"
13219 Emit debugging information for symbols that are used.  For stabs
13220 debugging format, this enables \fB\-feliminate\-unused\-debug\-symbols\fR.
13221 This is by default \s-1ON\s0.
13222 .IP "\fB\-gfull\fR" 4
13223 .IX Item "-gfull"
13224 Emit debugging information for all symbols and types.
13225 .IP "\fB\-mmacosx\-version\-min=\fR\fIversion\fR" 4
13226 .IX Item "-mmacosx-version-min=version"
13227 The earliest version of MacOS X that this executable will run on
13228 is \fIversion\fR.  Typical values of \fIversion\fR include \f(CW10.1\fR,
13229 \&\f(CW10.2\fR, and \f(CW10.3.9\fR.
13230 .Sp
13231 If the compiler was built to use the system's headers by default,
13232 then the default for this option is the system version on which the
13233 compiler is running, otherwise the default is to make choices that
13234 are compatible with as many systems and code bases as possible.
13235 .IP "\fB\-mkernel\fR" 4
13236 .IX Item "-mkernel"
13237 Enable kernel development mode.  The \fB\-mkernel\fR option sets
13238 \&\fB\-static\fR, \fB\-fno\-common\fR, \fB\-fno\-use\-cxa\-atexit\fR,
13239 \&\fB\-fno\-exceptions\fR, \fB\-fno\-non\-call\-exceptions\fR,
13240 \&\fB\-fapple\-kext\fR, \fB\-fno\-weak\fR and \fB\-fno\-rtti\fR where
13241 applicable.  This mode also sets \fB\-mno\-altivec\fR,
13242 \&\fB\-msoft\-float\fR, \fB\-fno\-builtin\fR and
13243 \&\fB\-mlong\-branch\fR for PowerPC targets.
13244 .IP "\fB\-mone\-byte\-bool\fR" 4
13245 .IX Item "-mone-byte-bool"
13246 Override the defaults for \f(CW\*(C`bool\*(C'\fR so that \f(CW\*(C`sizeof(bool)==1\*(C'\fR.
13247 By default \f(CW\*(C`sizeof(bool)\*(C'\fR is \f(CW4\fR when compiling for
13248 Darwin/PowerPC and \f(CW1\fR when compiling for Darwin/x86, so this
13249 option has no effect on x86.
13250 .Sp
13251 \&\fBWarning:\fR The \fB\-mone\-byte\-bool\fR switch causes \s-1GCC\s0
13252 to generate code that is not binary compatible with code generated
13253 without that switch.  Using this switch may require recompiling all
13254 other modules in a program, including system libraries.  Use this
13255 switch to conform to a non-default data model.
13256 .IP "\fB\-mfix\-and\-continue\fR" 4
13257 .IX Item "-mfix-and-continue"
13258 .PD 0
13259 .IP "\fB\-ffix\-and\-continue\fR" 4
13260 .IX Item "-ffix-and-continue"
13261 .IP "\fB\-findirect\-data\fR" 4
13262 .IX Item "-findirect-data"
13263 .PD
13264 Generate code suitable for fast turnaround development, such as to
13265 allow \s-1GDB\s0 to dynamically load \fI.o\fR files into already-running
13266 programs.  \fB\-findirect\-data\fR and \fB\-ffix\-and\-continue\fR
13267 are provided for backwards compatibility.
13268 .IP "\fB\-all_load\fR" 4
13269 .IX Item "-all_load"
13270 Loads all members of static archive libraries.
13271 See man \fIld\fR\|(1) for more information.
13272 .IP "\fB\-arch_errors_fatal\fR" 4
13273 .IX Item "-arch_errors_fatal"
13274 Cause the errors having to do with files that have the wrong architecture
13275 to be fatal.
13276 .IP "\fB\-bind_at_load\fR" 4
13277 .IX Item "-bind_at_load"
13278 Causes the output file to be marked such that the dynamic linker will
13279 bind all undefined references when the file is loaded or launched.
13280 .IP "\fB\-bundle\fR" 4
13281 .IX Item "-bundle"
13282 Produce a Mach-o bundle format file.
13283 See man \fIld\fR\|(1) for more information.
13284 .IP "\fB\-bundle_loader\fR \fIexecutable\fR" 4
13285 .IX Item "-bundle_loader executable"
13286 This option specifies the \fIexecutable\fR that will load the build
13287 output file being linked.  See man \fIld\fR\|(1) for more information.
13288 .IP "\fB\-dynamiclib\fR" 4
13289 .IX Item "-dynamiclib"
13290 When passed this option, \s-1GCC\s0 produces a dynamic library instead of
13291 an executable when linking, using the Darwin \fIlibtool\fR command.
13292 .IP "\fB\-force_cpusubtype_ALL\fR" 4
13293 .IX Item "-force_cpusubtype_ALL"
13294 This causes \s-1GCC\s0's output file to have the \fB\s-1ALL\s0\fR subtype, instead of
13295 one controlled by the \fB\-mcpu\fR or \fB\-march\fR option.
13296 .IP "\fB\-allowable_client\fR  \fIclient_name\fR" 4
13297 .IX Item "-allowable_client  client_name"
13298 .PD 0
13299 .IP "\fB\-client_name\fR" 4
13300 .IX Item "-client_name"
13301 .IP "\fB\-compatibility_version\fR" 4
13302 .IX Item "-compatibility_version"
13303 .IP "\fB\-current_version\fR" 4
13304 .IX Item "-current_version"
13305 .IP "\fB\-dead_strip\fR" 4
13306 .IX Item "-dead_strip"
13307 .IP "\fB\-dependency\-file\fR" 4
13308 .IX Item "-dependency-file"
13309 .IP "\fB\-dylib_file\fR" 4
13310 .IX Item "-dylib_file"
13311 .IP "\fB\-dylinker_install_name\fR" 4
13312 .IX Item "-dylinker_install_name"
13313 .IP "\fB\-dynamic\fR" 4
13314 .IX Item "-dynamic"
13315 .IP "\fB\-exported_symbols_list\fR" 4
13316 .IX Item "-exported_symbols_list"
13317 .IP "\fB\-filelist\fR" 4
13318 .IX Item "-filelist"
13319 .IP "\fB\-flat_namespace\fR" 4
13320 .IX Item "-flat_namespace"
13321 .IP "\fB\-force_flat_namespace\fR" 4
13322 .IX Item "-force_flat_namespace"
13323 .IP "\fB\-headerpad_max_install_names\fR" 4
13324 .IX Item "-headerpad_max_install_names"
13325 .IP "\fB\-image_base\fR" 4
13326 .IX Item "-image_base"
13327 .IP "\fB\-init\fR" 4
13328 .IX Item "-init"
13329 .IP "\fB\-install_name\fR" 4
13330 .IX Item "-install_name"
13331 .IP "\fB\-keep_private_externs\fR" 4
13332 .IX Item "-keep_private_externs"
13333 .IP "\fB\-multi_module\fR" 4
13334 .IX Item "-multi_module"
13335 .IP "\fB\-multiply_defined\fR" 4
13336 .IX Item "-multiply_defined"
13337 .IP "\fB\-multiply_defined_unused\fR" 4
13338 .IX Item "-multiply_defined_unused"
13339 .IP "\fB\-noall_load\fR" 4
13340 .IX Item "-noall_load"
13341 .IP "\fB\-no_dead_strip_inits_and_terms\fR" 4
13342 .IX Item "-no_dead_strip_inits_and_terms"
13343 .IP "\fB\-nofixprebinding\fR" 4
13344 .IX Item "-nofixprebinding"
13345 .IP "\fB\-nomultidefs\fR" 4
13346 .IX Item "-nomultidefs"
13347 .IP "\fB\-noprebind\fR" 4
13348 .IX Item "-noprebind"
13349 .IP "\fB\-noseglinkedit\fR" 4
13350 .IX Item "-noseglinkedit"
13351 .IP "\fB\-pagezero_size\fR" 4
13352 .IX Item "-pagezero_size"
13353 .IP "\fB\-prebind\fR" 4
13354 .IX Item "-prebind"
13355 .IP "\fB\-prebind_all_twolevel_modules\fR" 4
13356 .IX Item "-prebind_all_twolevel_modules"
13357 .IP "\fB\-private_bundle\fR" 4
13358 .IX Item "-private_bundle"
13359 .IP "\fB\-read_only_relocs\fR" 4
13360 .IX Item "-read_only_relocs"
13361 .IP "\fB\-sectalign\fR" 4
13362 .IX Item "-sectalign"
13363 .IP "\fB\-sectobjectsymbols\fR" 4
13364 .IX Item "-sectobjectsymbols"
13365 .IP "\fB\-whyload\fR" 4
13366 .IX Item "-whyload"
13367 .IP "\fB\-seg1addr\fR" 4
13368 .IX Item "-seg1addr"
13369 .IP "\fB\-sectcreate\fR" 4
13370 .IX Item "-sectcreate"
13371 .IP "\fB\-sectobjectsymbols\fR" 4
13372 .IX Item "-sectobjectsymbols"
13373 .IP "\fB\-sectorder\fR" 4
13374 .IX Item "-sectorder"
13375 .IP "\fB\-segaddr\fR" 4
13376 .IX Item "-segaddr"
13377 .IP "\fB\-segs_read_only_addr\fR" 4
13378 .IX Item "-segs_read_only_addr"
13379 .IP "\fB\-segs_read_write_addr\fR" 4
13380 .IX Item "-segs_read_write_addr"
13381 .IP "\fB\-seg_addr_table\fR" 4
13382 .IX Item "-seg_addr_table"
13383 .IP "\fB\-seg_addr_table_filename\fR" 4
13384 .IX Item "-seg_addr_table_filename"
13385 .IP "\fB\-seglinkedit\fR" 4
13386 .IX Item "-seglinkedit"
13387 .IP "\fB\-segprot\fR" 4
13388 .IX Item "-segprot"
13389 .IP "\fB\-segs_read_only_addr\fR" 4
13390 .IX Item "-segs_read_only_addr"
13391 .IP "\fB\-segs_read_write_addr\fR" 4
13392 .IX Item "-segs_read_write_addr"
13393 .IP "\fB\-single_module\fR" 4
13394 .IX Item "-single_module"
13395 .IP "\fB\-static\fR" 4
13396 .IX Item "-static"
13397 .IP "\fB\-sub_library\fR" 4
13398 .IX Item "-sub_library"
13399 .IP "\fB\-sub_umbrella\fR" 4
13400 .IX Item "-sub_umbrella"
13401 .IP "\fB\-twolevel_namespace\fR" 4
13402 .IX Item "-twolevel_namespace"
13403 .IP "\fB\-umbrella\fR" 4
13404 .IX Item "-umbrella"
13405 .IP "\fB\-undefined\fR" 4
13406 .IX Item "-undefined"
13407 .IP "\fB\-unexported_symbols_list\fR" 4
13408 .IX Item "-unexported_symbols_list"
13409 .IP "\fB\-weak_reference_mismatches\fR" 4
13410 .IX Item "-weak_reference_mismatches"
13411 .IP "\fB\-whatsloaded\fR" 4
13412 .IX Item "-whatsloaded"
13413 .PD
13414 These options are passed to the Darwin linker.  The Darwin linker man page
13415 describes them in detail.
13416 .PP
13417 \fI\s-1DEC\s0 Alpha Options\fR
13418 .IX Subsection "DEC Alpha Options"
13419 .PP
13420 These \fB\-m\fR options are defined for the \s-1DEC\s0 Alpha implementations:
13421 .IP "\fB\-mno\-soft\-float\fR" 4
13422 .IX Item "-mno-soft-float"
13423 .PD 0
13424 .IP "\fB\-msoft\-float\fR" 4
13425 .IX Item "-msoft-float"
13426 .PD
13427 Use (do not use) the hardware floating-point instructions for
13428 floating-point operations.  When \fB\-msoft\-float\fR is specified,
13429 functions in \fIlibgcc.a\fR are used to perform floating-point
13430 operations.  Unless they are replaced by routines that emulate the
13431 floating-point operations, or compiled in such a way as to call such
13432 emulations routines, these routines issue floating-point
13433 operations.   If you are compiling for an Alpha without floating-point
13434 operations, you must ensure that the library is built so as not to call
13435 them.
13436 .Sp
13437 Note that Alpha implementations without floating-point operations are
13438 required to have floating-point registers.
13439 .IP "\fB\-mfp\-reg\fR" 4
13440 .IX Item "-mfp-reg"
13441 .PD 0
13442 .IP "\fB\-mno\-fp\-regs\fR" 4
13443 .IX Item "-mno-fp-regs"
13444 .PD
13445 Generate code that uses (does not use) the floating-point register set.
13446 \&\fB\-mno\-fp\-regs\fR implies \fB\-msoft\-float\fR.  If the floating-point
13447 register set is not used, floating-point operands are passed in integer
13448 registers as if they were integers and floating-point results are passed
13449 in \f(CW$0\fR instead of \f(CW$f0\fR.  This is a non-standard calling sequence,
13450 so any function with a floating-point argument or return value called by code
13451 compiled with \fB\-mno\-fp\-regs\fR must also be compiled with that
13452 option.
13453 .Sp
13454 A typical use of this option is building a kernel that does not use,
13455 and hence need not save and restore, any floating-point registers.
13456 .IP "\fB\-mieee\fR" 4
13457 .IX Item "-mieee"
13458 The Alpha architecture implements floating-point hardware optimized for
13459 maximum performance.  It is mostly compliant with the \s-1IEEE\s0 floating-point
13460 standard.  However, for full compliance, software assistance is
13461 required.  This option generates code fully IEEE-compliant code
13462 \&\fIexcept\fR that the \fIinexact-flag\fR is not maintained (see below).
13463 If this option is turned on, the preprocessor macro \f(CW\*(C`_IEEE_FP\*(C'\fR is
13464 defined during compilation.  The resulting code is less efficient but is
13465 able to correctly support denormalized numbers and exceptional \s-1IEEE\s0
13466 values such as not-a-number and plus/minus infinity.  Other Alpha
13467 compilers call this option \fB\-ieee_with_no_inexact\fR.
13468 .IP "\fB\-mieee\-with\-inexact\fR" 4
13469 .IX Item "-mieee-with-inexact"
13470 This is like \fB\-mieee\fR except the generated code also maintains
13471 the \s-1IEEE\s0 \fIinexact-flag\fR.  Turning on this option causes the
13472 generated code to implement fully-compliant \s-1IEEE\s0 math.  In addition to
13473 \&\f(CW\*(C`_IEEE_FP\*(C'\fR, \f(CW\*(C`_IEEE_FP_EXACT\*(C'\fR is defined as a preprocessor
13474 macro.  On some Alpha implementations the resulting code may execute
13475 significantly slower than the code generated by default.  Since there is
13476 very little code that depends on the \fIinexact-flag\fR, you should
13477 normally not specify this option.  Other Alpha compilers call this
13478 option \fB\-ieee_with_inexact\fR.
13479 .IP "\fB\-mfp\-trap\-mode=\fR\fItrap-mode\fR" 4
13480 .IX Item "-mfp-trap-mode=trap-mode"
13481 This option controls what floating-point related traps are enabled.
13482 Other Alpha compilers call this option \fB\-fptm\fR \fItrap-mode\fR.
13483 The trap mode can be set to one of four values:
13484 .RS 4
13485 .IP "\fBn\fR" 4
13486 .IX Item "n"
13487 This is the default (normal) setting.  The only traps that are enabled
13488 are the ones that cannot be disabled in software (e.g., division by zero
13489 trap).
13490 .IP "\fBu\fR" 4
13491 .IX Item "u"
13492 In addition to the traps enabled by \fBn\fR, underflow traps are enabled
13493 as well.
13494 .IP "\fBsu\fR" 4
13495 .IX Item "su"
13496 Like \fBu\fR, but the instructions are marked to be safe for software
13497 completion (see Alpha architecture manual for details).
13498 .IP "\fBsui\fR" 4
13499 .IX Item "sui"
13500 Like \fBsu\fR, but inexact traps are enabled as well.
13501 .RE
13502 .RS 4
13503 .RE
13504 .IP "\fB\-mfp\-rounding\-mode=\fR\fIrounding-mode\fR" 4
13505 .IX Item "-mfp-rounding-mode=rounding-mode"
13506 Selects the \s-1IEEE\s0 rounding mode.  Other Alpha compilers call this option
13507 \&\fB\-fprm\fR \fIrounding-mode\fR.  The \fIrounding-mode\fR can be one
13508 of:
13509 .RS 4
13510 .IP "\fBn\fR" 4
13511 .IX Item "n"
13512 Normal \s-1IEEE\s0 rounding mode.  Floating-point numbers are rounded towards
13513 the nearest machine number or towards the even machine number in case
13514 of a tie.
13515 .IP "\fBm\fR" 4
13516 .IX Item "m"
13517 Round towards minus infinity.
13518 .IP "\fBc\fR" 4
13519 .IX Item "c"
13520 Chopped rounding mode.  Floating-point numbers are rounded towards zero.
13521 .IP "\fBd\fR" 4
13522 .IX Item "d"
13523 Dynamic rounding mode.  A field in the floating-point control register
13524 (\fIfpcr\fR, see Alpha architecture reference manual) controls the
13525 rounding mode in effect.  The C library initializes this register for
13526 rounding towards plus infinity.  Thus, unless your program modifies the
13527 \&\fIfpcr\fR, \fBd\fR corresponds to round towards plus infinity.
13528 .RE
13529 .RS 4
13530 .RE
13531 .IP "\fB\-mtrap\-precision=\fR\fItrap-precision\fR" 4
13532 .IX Item "-mtrap-precision=trap-precision"
13533 In the Alpha architecture, floating-point traps are imprecise.  This
13534 means without software assistance it is impossible to recover from a
13535 floating trap and program execution normally needs to be terminated.
13536 \&\s-1GCC\s0 can generate code that can assist operating system trap handlers
13537 in determining the exact location that caused a floating-point trap.
13538 Depending on the requirements of an application, different levels of
13539 precisions can be selected:
13540 .RS 4
13541 .IP "\fBp\fR" 4
13542 .IX Item "p"
13543 Program precision.  This option is the default and means a trap handler
13544 can only identify which program caused a floating-point exception.
13545 .IP "\fBf\fR" 4
13546 .IX Item "f"
13547 Function precision.  The trap handler can determine the function that
13548 caused a floating-point exception.
13549 .IP "\fBi\fR" 4
13550 .IX Item "i"
13551 Instruction precision.  The trap handler can determine the exact
13552 instruction that caused a floating-point exception.
13553 .RE
13554 .RS 4
13555 .Sp
13556 Other Alpha compilers provide the equivalent options called
13557 \&\fB\-scope_safe\fR and \fB\-resumption_safe\fR.
13558 .RE
13559 .IP "\fB\-mieee\-conformant\fR" 4
13560 .IX Item "-mieee-conformant"
13561 This option marks the generated code as \s-1IEEE\s0 conformant.  You must not
13562 use this option unless you also specify \fB\-mtrap\-precision=i\fR and either
13563 \&\fB\-mfp\-trap\-mode=su\fR or \fB\-mfp\-trap\-mode=sui\fR.  Its only effect
13564 is to emit the line \fB.eflag 48\fR in the function prologue of the
13565 generated assembly file.
13566 .IP "\fB\-mbuild\-constants\fR" 4
13567 .IX Item "-mbuild-constants"
13568 Normally \s-1GCC\s0 examines a 32\- or 64\-bit integer constant to
13569 see if it can construct it from smaller constants in two or three
13570 instructions.  If it cannot, it outputs the constant as a literal and
13571 generates code to load it from the data segment at run time.
13572 .Sp
13573 Use this option to require \s-1GCC\s0 to construct \fIall\fR integer constants
13574 using code, even if it takes more instructions (the maximum is six).
13575 .Sp
13576 You typically use this option to build a shared library dynamic
13577 loader.  Itself a shared library, it must relocate itself in memory
13578 before it can find the variables and constants in its own data segment.
13579 .IP "\fB\-mbwx\fR" 4
13580 .IX Item "-mbwx"
13581 .PD 0
13582 .IP "\fB\-mno\-bwx\fR" 4
13583 .IX Item "-mno-bwx"
13584 .IP "\fB\-mcix\fR" 4
13585 .IX Item "-mcix"
13586 .IP "\fB\-mno\-cix\fR" 4
13587 .IX Item "-mno-cix"
13588 .IP "\fB\-mfix\fR" 4
13589 .IX Item "-mfix"
13590 .IP "\fB\-mno\-fix\fR" 4
13591 .IX Item "-mno-fix"
13592 .IP "\fB\-mmax\fR" 4
13593 .IX Item "-mmax"
13594 .IP "\fB\-mno\-max\fR" 4
13595 .IX Item "-mno-max"
13596 .PD
13597 Indicate whether \s-1GCC\s0 should generate code to use the optional \s-1BWX\s0,
13598 \&\s-1CIX\s0, \s-1FIX\s0 and \s-1MAX\s0 instruction sets.  The default is to use the instruction
13599 sets supported by the \s-1CPU\s0 type specified via \fB\-mcpu=\fR option or that
13600 of the \s-1CPU\s0 on which \s-1GCC\s0 was built if none is specified.
13601 .IP "\fB\-mfloat\-vax\fR" 4
13602 .IX Item "-mfloat-vax"
13603 .PD 0
13604 .IP "\fB\-mfloat\-ieee\fR" 4
13605 .IX Item "-mfloat-ieee"
13606 .PD
13607 Generate code that uses (does not use) \s-1VAX\s0 F and G floating-point
13608 arithmetic instead of \s-1IEEE\s0 single and double precision.
13609 .IP "\fB\-mexplicit\-relocs\fR" 4
13610 .IX Item "-mexplicit-relocs"
13611 .PD 0
13612 .IP "\fB\-mno\-explicit\-relocs\fR" 4
13613 .IX Item "-mno-explicit-relocs"
13614 .PD
13615 Older Alpha assemblers provided no way to generate symbol relocations
13616 except via assembler macros.  Use of these macros does not allow
13617 optimal instruction scheduling.  \s-1GNU\s0 binutils as of version 2.12
13618 supports a new syntax that allows the compiler to explicitly mark
13619 which relocations should apply to which instructions.  This option
13620 is mostly useful for debugging, as \s-1GCC\s0 detects the capabilities of
13621 the assembler when it is built and sets the default accordingly.
13622 .IP "\fB\-msmall\-data\fR" 4
13623 .IX Item "-msmall-data"
13624 .PD 0
13625 .IP "\fB\-mlarge\-data\fR" 4
13626 .IX Item "-mlarge-data"
13627 .PD
13628 When \fB\-mexplicit\-relocs\fR is in effect, static data is
13629 accessed via \fIgp-relative\fR relocations.  When \fB\-msmall\-data\fR
13630 is used, objects 8 bytes long or smaller are placed in a \fIsmall data area\fR
13631 (the \f(CW\*(C`.sdata\*(C'\fR and \f(CW\*(C`.sbss\*(C'\fR sections) and are accessed via
13632 16\-bit relocations off of the \f(CW$gp\fR register.  This limits the
13633 size of the small data area to 64KB, but allows the variables to be
13634 directly accessed via a single instruction.
13635 .Sp
13636 The default is \fB\-mlarge\-data\fR.  With this option the data area
13637 is limited to just below 2GB.  Programs that require more than 2GB of
13638 data must use \f(CW\*(C`malloc\*(C'\fR or \f(CW\*(C`mmap\*(C'\fR to allocate the data in the
13639 heap instead of in the program's data segment.
13640 .Sp
13641 When generating code for shared libraries, \fB\-fpic\fR implies
13642 \&\fB\-msmall\-data\fR and \fB\-fPIC\fR implies \fB\-mlarge\-data\fR.
13643 .IP "\fB\-msmall\-text\fR" 4
13644 .IX Item "-msmall-text"
13645 .PD 0
13646 .IP "\fB\-mlarge\-text\fR" 4
13647 .IX Item "-mlarge-text"
13648 .PD
13649 When \fB\-msmall\-text\fR is used, the compiler assumes that the
13650 code of the entire program (or shared library) fits in 4MB, and is
13651 thus reachable with a branch instruction.  When \fB\-msmall\-data\fR
13652 is used, the compiler can assume that all local symbols share the
13653 same \f(CW$gp\fR value, and thus reduce the number of instructions
13654 required for a function call from 4 to 1.
13655 .Sp
13656 The default is \fB\-mlarge\-text\fR.
13657 .IP "\fB\-mcpu=\fR\fIcpu_type\fR" 4
13658 .IX Item "-mcpu=cpu_type"
13659 Set the instruction set and instruction scheduling parameters for
13660 machine type \fIcpu_type\fR.  You can specify either the \fB\s-1EV\s0\fR
13661 style name or the corresponding chip number.  \s-1GCC\s0 supports scheduling
13662 parameters for the \s-1EV4\s0, \s-1EV5\s0 and \s-1EV6\s0 family of processors and
13663 chooses the default values for the instruction set from the processor
13664 you specify.  If you do not specify a processor type, \s-1GCC\s0 defaults
13665 to the processor on which the compiler was built.
13666 .Sp
13667 Supported values for \fIcpu_type\fR are
13668 .RS 4
13669 .IP "\fBev4\fR" 4
13670 .IX Item "ev4"
13671 .PD 0
13672 .IP "\fBev45\fR" 4
13673 .IX Item "ev45"
13674 .IP "\fB21064\fR" 4
13675 .IX Item "21064"
13676 .PD
13677 Schedules as an \s-1EV4\s0 and has no instruction set extensions.
13678 .IP "\fBev5\fR" 4
13679 .IX Item "ev5"
13680 .PD 0
13681 .IP "\fB21164\fR" 4
13682 .IX Item "21164"
13683 .PD
13684 Schedules as an \s-1EV5\s0 and has no instruction set extensions.
13685 .IP "\fBev56\fR" 4
13686 .IX Item "ev56"
13687 .PD 0
13688 .IP "\fB21164a\fR" 4
13689 .IX Item "21164a"
13690 .PD
13691 Schedules as an \s-1EV5\s0 and supports the \s-1BWX\s0 extension.
13692 .IP "\fBpca56\fR" 4
13693 .IX Item "pca56"
13694 .PD 0
13695 .IP "\fB21164pc\fR" 4
13696 .IX Item "21164pc"
13697 .IP "\fB21164PC\fR" 4
13698 .IX Item "21164PC"
13699 .PD
13700 Schedules as an \s-1EV5\s0 and supports the \s-1BWX\s0 and \s-1MAX\s0 extensions.
13701 .IP "\fBev6\fR" 4
13702 .IX Item "ev6"
13703 .PD 0
13704 .IP "\fB21264\fR" 4
13705 .IX Item "21264"
13706 .PD
13707 Schedules as an \s-1EV6\s0 and supports the \s-1BWX\s0, \s-1FIX\s0, and \s-1MAX\s0 extensions.
13708 .IP "\fBev67\fR" 4
13709 .IX Item "ev67"
13710 .PD 0
13711 .IP "\fB21264a\fR" 4
13712 .IX Item "21264a"
13713 .PD
13714 Schedules as an \s-1EV6\s0 and supports the \s-1BWX\s0, \s-1CIX\s0, \s-1FIX\s0, and \s-1MAX\s0 extensions.
13715 .RE
13716 .RS 4
13717 .Sp
13718 Native toolchains also support the value \fBnative\fR,
13719 which selects the best architecture option for the host processor.
13720 \&\fB\-mcpu=native\fR has no effect if \s-1GCC\s0 does not recognize
13721 the processor.
13722 .RE
13723 .IP "\fB\-mtune=\fR\fIcpu_type\fR" 4
13724 .IX Item "-mtune=cpu_type"
13725 Set only the instruction scheduling parameters for machine type
13726 \&\fIcpu_type\fR.  The instruction set is not changed.
13727 .Sp
13728 Native toolchains also support the value \fBnative\fR,
13729 which selects the best architecture option for the host processor.
13730 \&\fB\-mtune=native\fR has no effect if \s-1GCC\s0 does not recognize
13731 the processor.
13732 .IP "\fB\-mmemory\-latency=\fR\fItime\fR" 4
13733 .IX Item "-mmemory-latency=time"
13734 Sets the latency the scheduler should assume for typical memory
13735 references as seen by the application.  This number is highly
13736 dependent on the memory access patterns used by the application
13737 and the size of the external cache on the machine.
13738 .Sp
13739 Valid options for \fItime\fR are
13740 .RS 4
13741 .IP "\fInumber\fR" 4
13742 .IX Item "number"
13743 A decimal number representing clock cycles.
13744 .IP "\fBL1\fR" 4
13745 .IX Item "L1"
13746 .PD 0
13747 .IP "\fBL2\fR" 4
13748 .IX Item "L2"
13749 .IP "\fBL3\fR" 4
13750 .IX Item "L3"
13751 .IP "\fBmain\fR" 4
13752 .IX Item "main"
13753 .PD
13754 The compiler contains estimates of the number of clock cycles for
13755 \&\*(L"typical\*(R" \s-1EV4\s0 & \s-1EV5\s0 hardware for the Level 1, 2 & 3 caches
13756 (also called Dcache, Scache, and Bcache), as well as to main memory.
13757 Note that L3 is only valid for \s-1EV5\s0.
13758 .RE
13759 .RS 4
13760 .RE
13761 .PP
13762 \fI\s-1FR30\s0 Options\fR
13763 .IX Subsection "FR30 Options"
13764 .PP
13765 These options are defined specifically for the \s-1FR30\s0 port.
13766 .IP "\fB\-msmall\-model\fR" 4
13767 .IX Item "-msmall-model"
13768 Use the small address space model.  This can produce smaller code, but
13769 it does assume that all symbolic values and addresses fit into a
13770 20\-bit range.
13771 .IP "\fB\-mno\-lsim\fR" 4
13772 .IX Item "-mno-lsim"
13773 Assume that runtime support has been provided and so there is no need
13774 to include the simulator library (\fIlibsim.a\fR) on the linker
13775 command line.
13776 .PP
13777 \fI\s-1FRV\s0 Options\fR
13778 .IX Subsection "FRV Options"
13779 .IP "\fB\-mgpr\-32\fR" 4
13780 .IX Item "-mgpr-32"
13781 Only use the first 32 general-purpose registers.
13782 .IP "\fB\-mgpr\-64\fR" 4
13783 .IX Item "-mgpr-64"
13784 Use all 64 general-purpose registers.
13785 .IP "\fB\-mfpr\-32\fR" 4
13786 .IX Item "-mfpr-32"
13787 Use only the first 32 floating-point registers.
13788 .IP "\fB\-mfpr\-64\fR" 4
13789 .IX Item "-mfpr-64"
13790 Use all 64 floating-point registers.
13791 .IP "\fB\-mhard\-float\fR" 4
13792 .IX Item "-mhard-float"
13793 Use hardware instructions for floating-point operations.
13794 .IP "\fB\-msoft\-float\fR" 4
13795 .IX Item "-msoft-float"
13796 Use library routines for floating-point operations.
13797 .IP "\fB\-malloc\-cc\fR" 4
13798 .IX Item "-malloc-cc"
13799 Dynamically allocate condition code registers.
13800 .IP "\fB\-mfixed\-cc\fR" 4
13801 .IX Item "-mfixed-cc"
13802 Do not try to dynamically allocate condition code registers, only
13803 use \f(CW\*(C`icc0\*(C'\fR and \f(CW\*(C`fcc0\*(C'\fR.
13804 .IP "\fB\-mdword\fR" 4
13805 .IX Item "-mdword"
13806 Change \s-1ABI\s0 to use double word insns.
13807 .IP "\fB\-mno\-dword\fR" 4
13808 .IX Item "-mno-dword"
13809 Do not use double word instructions.
13810 .IP "\fB\-mdouble\fR" 4
13811 .IX Item "-mdouble"
13812 Use floating-point double instructions.
13813 .IP "\fB\-mno\-double\fR" 4
13814 .IX Item "-mno-double"
13815 Do not use floating-point double instructions.
13816 .IP "\fB\-mmedia\fR" 4
13817 .IX Item "-mmedia"
13818 Use media instructions.
13819 .IP "\fB\-mno\-media\fR" 4
13820 .IX Item "-mno-media"
13821 Do not use media instructions.
13822 .IP "\fB\-mmuladd\fR" 4
13823 .IX Item "-mmuladd"
13824 Use multiply and add/subtract instructions.
13825 .IP "\fB\-mno\-muladd\fR" 4
13826 .IX Item "-mno-muladd"
13827 Do not use multiply and add/subtract instructions.
13828 .IP "\fB\-mfdpic\fR" 4
13829 .IX Item "-mfdpic"
13830 Select the \s-1FDPIC\s0 \s-1ABI\s0, which uses function descriptors to represent
13831 pointers to functions.  Without any PIC/PIE\-related options, it
13832 implies \fB\-fPIE\fR.  With \fB\-fpic\fR or \fB\-fpie\fR, it
13833 assumes \s-1GOT\s0 entries and small data are within a 12\-bit range from the
13834 \&\s-1GOT\s0 base address; with \fB\-fPIC\fR or \fB\-fPIE\fR, \s-1GOT\s0 offsets
13835 are computed with 32 bits.
13836 With a \fBbfin-elf\fR target, this option implies \fB\-msim\fR.
13837 .IP "\fB\-minline\-plt\fR" 4
13838 .IX Item "-minline-plt"
13839 Enable inlining of \s-1PLT\s0 entries in function calls to functions that are
13840 not known to bind locally.  It has no effect without \fB\-mfdpic\fR.
13841 It's enabled by default if optimizing for speed and compiling for
13842 shared libraries (i.e., \fB\-fPIC\fR or \fB\-fpic\fR), or when an
13843 optimization option such as \fB\-O3\fR or above is present in the
13844 command line.
13845 .IP "\fB\-mTLS\fR" 4
13846 .IX Item "-mTLS"
13847 Assume a large \s-1TLS\s0 segment when generating thread-local code.
13848 .IP "\fB\-mtls\fR" 4
13849 .IX Item "-mtls"
13850 Do not assume a large \s-1TLS\s0 segment when generating thread-local code.
13851 .IP "\fB\-mgprel\-ro\fR" 4
13852 .IX Item "-mgprel-ro"
13853 Enable the use of \f(CW\*(C`GPREL\*(C'\fR relocations in the \s-1FDPIC\s0 \s-1ABI\s0 for data
13854 that is known to be in read-only sections.  It's enabled by default,
13855 except for \fB\-fpic\fR or \fB\-fpie\fR: even though it may help
13856 make the global offset table smaller, it trades 1 instruction for 4.
13857 With \fB\-fPIC\fR or \fB\-fPIE\fR, it trades 3 instructions for 4,
13858 one of which may be shared by multiple symbols, and it avoids the need
13859 for a \s-1GOT\s0 entry for the referenced symbol, so it's more likely to be a
13860 win.  If it is not, \fB\-mno\-gprel\-ro\fR can be used to disable it.
13861 .IP "\fB\-multilib\-library\-pic\fR" 4
13862 .IX Item "-multilib-library-pic"
13863 Link with the (library, not \s-1FD\s0) pic libraries.  It's implied by
13864 \&\fB\-mlibrary\-pic\fR, as well as by \fB\-fPIC\fR and
13865 \&\fB\-fpic\fR without \fB\-mfdpic\fR.  You should never have to use
13866 it explicitly.
13867 .IP "\fB\-mlinked\-fp\fR" 4
13868 .IX Item "-mlinked-fp"
13869 Follow the \s-1EABI\s0 requirement of always creating a frame pointer whenever
13870 a stack frame is allocated.  This option is enabled by default and can
13871 be disabled with \fB\-mno\-linked\-fp\fR.
13872 .IP "\fB\-mlong\-calls\fR" 4
13873 .IX Item "-mlong-calls"
13874 Use indirect addressing to call functions outside the current
13875 compilation unit.  This allows the functions to be placed anywhere
13876 within the 32\-bit address space.
13877 .IP "\fB\-malign\-labels\fR" 4
13878 .IX Item "-malign-labels"
13879 Try to align labels to an 8\-byte boundary by inserting NOPs into the
13880 previous packet.  This option only has an effect when \s-1VLIW\s0 packing
13881 is enabled.  It doesn't create new packets; it merely adds NOPs to
13882 existing ones.
13883 .IP "\fB\-mlibrary\-pic\fR" 4
13884 .IX Item "-mlibrary-pic"
13885 Generate position-independent \s-1EABI\s0 code.
13886 .IP "\fB\-macc\-4\fR" 4
13887 .IX Item "-macc-4"
13888 Use only the first four media accumulator registers.
13889 .IP "\fB\-macc\-8\fR" 4
13890 .IX Item "-macc-8"
13891 Use all eight media accumulator registers.
13892 .IP "\fB\-mpack\fR" 4
13893 .IX Item "-mpack"
13894 Pack \s-1VLIW\s0 instructions.
13895 .IP "\fB\-mno\-pack\fR" 4
13896 .IX Item "-mno-pack"
13897 Do not pack \s-1VLIW\s0 instructions.
13898 .IP "\fB\-mno\-eflags\fR" 4
13899 .IX Item "-mno-eflags"
13900 Do not mark \s-1ABI\s0 switches in e_flags.
13901 .IP "\fB\-mcond\-move\fR" 4
13902 .IX Item "-mcond-move"
13903 Enable the use of conditional-move instructions (default).
13904 .Sp
13905 This switch is mainly for debugging the compiler and will likely be removed
13906 in a future version.
13907 .IP "\fB\-mno\-cond\-move\fR" 4
13908 .IX Item "-mno-cond-move"
13909 Disable the use of conditional-move instructions.
13910 .Sp
13911 This switch is mainly for debugging the compiler and will likely be removed
13912 in a future version.
13913 .IP "\fB\-mscc\fR" 4
13914 .IX Item "-mscc"
13915 Enable the use of conditional set instructions (default).
13916 .Sp
13917 This switch is mainly for debugging the compiler and will likely be removed
13918 in a future version.
13919 .IP "\fB\-mno\-scc\fR" 4
13920 .IX Item "-mno-scc"
13921 Disable the use of conditional set instructions.
13922 .Sp
13923 This switch is mainly for debugging the compiler and will likely be removed
13924 in a future version.
13925 .IP "\fB\-mcond\-exec\fR" 4
13926 .IX Item "-mcond-exec"
13927 Enable the use of conditional execution (default).
13928 .Sp
13929 This switch is mainly for debugging the compiler and will likely be removed
13930 in a future version.
13931 .IP "\fB\-mno\-cond\-exec\fR" 4
13932 .IX Item "-mno-cond-exec"
13933 Disable the use of conditional execution.
13934 .Sp
13935 This switch is mainly for debugging the compiler and will likely be removed
13936 in a future version.
13937 .IP "\fB\-mvliw\-branch\fR" 4
13938 .IX Item "-mvliw-branch"
13939 Run a pass to pack branches into \s-1VLIW\s0 instructions (default).
13940 .Sp
13941 This switch is mainly for debugging the compiler and will likely be removed
13942 in a future version.
13943 .IP "\fB\-mno\-vliw\-branch\fR" 4
13944 .IX Item "-mno-vliw-branch"
13945 Do not run a pass to pack branches into \s-1VLIW\s0 instructions.
13946 .Sp
13947 This switch is mainly for debugging the compiler and will likely be removed
13948 in a future version.
13949 .IP "\fB\-mmulti\-cond\-exec\fR" 4
13950 .IX Item "-mmulti-cond-exec"
13951 Enable optimization of \f(CW\*(C`&&\*(C'\fR and \f(CW\*(C`||\*(C'\fR in conditional execution
13952 (default).
13953 .Sp
13954 This switch is mainly for debugging the compiler and will likely be removed
13955 in a future version.
13956 .IP "\fB\-mno\-multi\-cond\-exec\fR" 4
13957 .IX Item "-mno-multi-cond-exec"
13958 Disable optimization of \f(CW\*(C`&&\*(C'\fR and \f(CW\*(C`||\*(C'\fR in conditional execution.
13959 .Sp
13960 This switch is mainly for debugging the compiler and will likely be removed
13961 in a future version.
13962 .IP "\fB\-mnested\-cond\-exec\fR" 4
13963 .IX Item "-mnested-cond-exec"
13964 Enable nested conditional execution optimizations (default).
13965 .Sp
13966 This switch is mainly for debugging the compiler and will likely be removed
13967 in a future version.
13968 .IP "\fB\-mno\-nested\-cond\-exec\fR" 4
13969 .IX Item "-mno-nested-cond-exec"
13970 Disable nested conditional execution optimizations.
13971 .Sp
13972 This switch is mainly for debugging the compiler and will likely be removed
13973 in a future version.
13974 .IP "\fB\-moptimize\-membar\fR" 4
13975 .IX Item "-moptimize-membar"
13976 This switch removes redundant \f(CW\*(C`membar\*(C'\fR instructions from the
13977 compiler-generated code.  It is enabled by default.
13978 .IP "\fB\-mno\-optimize\-membar\fR" 4
13979 .IX Item "-mno-optimize-membar"
13980 This switch disables the automatic removal of redundant \f(CW\*(C`membar\*(C'\fR
13981 instructions from the generated code.
13982 .IP "\fB\-mtomcat\-stats\fR" 4
13983 .IX Item "-mtomcat-stats"
13984 Cause gas to print out tomcat statistics.
13985 .IP "\fB\-mcpu=\fR\fIcpu\fR" 4
13986 .IX Item "-mcpu=cpu"
13987 Select the processor type for which to generate code.  Possible values are
13988 \&\fBfrv\fR, \fBfr550\fR, \fBtomcat\fR, \fBfr500\fR, \fBfr450\fR,
13989 \&\fBfr405\fR, \fBfr400\fR, \fBfr300\fR and \fBsimple\fR.
13990 .PP
13991 \fIGNU/Linux Options\fR
13992 .IX Subsection "GNU/Linux Options"
13993 .PP
13994 These \fB\-m\fR options are defined for GNU/Linux targets:
13995 .IP "\fB\-mglibc\fR" 4
13996 .IX Item "-mglibc"
13997 Use the \s-1GNU\s0 C library.  This is the default except
13998 on \fB*\-*\-linux\-*uclibc*\fR and \fB*\-*\-linux\-*android*\fR targets.
13999 .IP "\fB\-muclibc\fR" 4
14000 .IX Item "-muclibc"
14001 Use uClibc C library.  This is the default on
14002 \&\fB*\-*\-linux\-*uclibc*\fR targets.
14003 .IP "\fB\-mbionic\fR" 4
14004 .IX Item "-mbionic"
14005 Use Bionic C library.  This is the default on
14006 \&\fB*\-*\-linux\-*android*\fR targets.
14007 .IP "\fB\-mandroid\fR" 4
14008 .IX Item "-mandroid"
14009 Compile code compatible with Android platform.  This is the default on
14010 \&\fB*\-*\-linux\-*android*\fR targets.
14011 .Sp
14012 When compiling, this option enables \fB\-mbionic\fR, \fB\-fPIC\fR,
14013 \&\fB\-fno\-exceptions\fR and \fB\-fno\-rtti\fR by default.  When linking,
14014 this option makes the \s-1GCC\s0 driver pass Android-specific options to the linker.
14015 Finally, this option causes the preprocessor macro \f(CW\*(C`_\|_ANDROID_\|_\*(C'\fR
14016 to be defined.
14017 .IP "\fB\-tno\-android\-cc\fR" 4
14018 .IX Item "-tno-android-cc"
14019 Disable compilation effects of \fB\-mandroid\fR, i.e., do not enable
14020 \&\fB\-mbionic\fR, \fB\-fPIC\fR, \fB\-fno\-exceptions\fR and
14021 \&\fB\-fno\-rtti\fR by default.
14022 .IP "\fB\-tno\-android\-ld\fR" 4
14023 .IX Item "-tno-android-ld"
14024 Disable linking effects of \fB\-mandroid\fR, i.e., pass standard Linux
14025 linking options to the linker.
14026 .PP
14027 \fIH8/300 Options\fR
14028 .IX Subsection "H8/300 Options"
14029 .PP
14030 These \fB\-m\fR options are defined for the H8/300 implementations:
14031 .IP "\fB\-mrelax\fR" 4
14032 .IX Item "-mrelax"
14033 Shorten some address references at link time, when possible; uses the
14034 linker option \fB\-relax\fR.
14035 .IP "\fB\-mh\fR" 4
14036 .IX Item "-mh"
14037 Generate code for the H8/300H.
14038 .IP "\fB\-ms\fR" 4
14039 .IX Item "-ms"
14040 Generate code for the H8S.
14041 .IP "\fB\-mn\fR" 4
14042 .IX Item "-mn"
14043 Generate code for the H8S and H8/300H in the normal mode.  This switch
14044 must be used either with \fB\-mh\fR or \fB\-ms\fR.
14045 .IP "\fB\-ms2600\fR" 4
14046 .IX Item "-ms2600"
14047 Generate code for the H8S/2600.  This switch must be used with \fB\-ms\fR.
14048 .IP "\fB\-mexr\fR" 4
14049 .IX Item "-mexr"
14050 Extended registers are stored on stack before execution of function
14051 with monitor attribute. Default option is \fB\-mexr\fR.
14052 This option is valid only for H8S targets.
14053 .IP "\fB\-mno\-exr\fR" 4
14054 .IX Item "-mno-exr"
14055 Extended registers are not stored on stack before execution of function 
14056 with monitor attribute. Default option is \fB\-mno\-exr\fR. 
14057 This option is valid only for H8S targets.
14058 .IP "\fB\-mint32\fR" 4
14059 .IX Item "-mint32"
14060 Make \f(CW\*(C`int\*(C'\fR data 32 bits by default.
14061 .IP "\fB\-malign\-300\fR" 4
14062 .IX Item "-malign-300"
14063 On the H8/300H and H8S, use the same alignment rules as for the H8/300.
14064 The default for the H8/300H and H8S is to align longs and floats on
14065 4\-byte boundaries.
14066 \&\fB\-malign\-300\fR causes them to be aligned on 2\-byte boundaries.
14067 This option has no effect on the H8/300.
14068 .PP
14069 \fI\s-1HPPA\s0 Options\fR
14070 .IX Subsection "HPPA Options"
14071 .PP
14072 These \fB\-m\fR options are defined for the \s-1HPPA\s0 family of computers:
14073 .IP "\fB\-march=\fR\fIarchitecture-type\fR" 4
14074 .IX Item "-march=architecture-type"
14075 Generate code for the specified architecture.  The choices for
14076 \&\fIarchitecture-type\fR are \fB1.0\fR for \s-1PA\s0 1.0, \fB1.1\fR for \s-1PA\s0
14077 1.1, and \fB2.0\fR for \s-1PA\s0 2.0 processors.  Refer to
14078 \&\fI/usr/lib/sched.models\fR on an HP-UX system to determine the proper
14079 architecture option for your machine.  Code compiled for lower numbered
14080 architectures runs on higher numbered architectures, but not the
14081 other way around.
14082 .IP "\fB\-mpa\-risc\-1\-0\fR" 4
14083 .IX Item "-mpa-risc-1-0"
14084 .PD 0
14085 .IP "\fB\-mpa\-risc\-1\-1\fR" 4
14086 .IX Item "-mpa-risc-1-1"
14087 .IP "\fB\-mpa\-risc\-2\-0\fR" 4
14088 .IX Item "-mpa-risc-2-0"
14089 .PD
14090 Synonyms for \fB\-march=1.0\fR, \fB\-march=1.1\fR, and \fB\-march=2.0\fR respectively.
14091 .IP "\fB\-mjump\-in\-delay\fR" 4
14092 .IX Item "-mjump-in-delay"
14093 This option is ignored and provided for compatibility purposes only.
14094 .IP "\fB\-mdisable\-fpregs\fR" 4
14095 .IX Item "-mdisable-fpregs"
14096 Prevent floating-point registers from being used in any manner.  This is
14097 necessary for compiling kernels that perform lazy context switching of
14098 floating-point registers.  If you use this option and attempt to perform
14099 floating-point operations, the compiler aborts.
14100 .IP "\fB\-mdisable\-indexing\fR" 4
14101 .IX Item "-mdisable-indexing"
14102 Prevent the compiler from using indexing address modes.  This avoids some
14103 rather obscure problems when compiling \s-1MIG\s0 generated code under \s-1MACH\s0.
14104 .IP "\fB\-mno\-space\-regs\fR" 4
14105 .IX Item "-mno-space-regs"
14106 Generate code that assumes the target has no space registers.  This allows
14107 \&\s-1GCC\s0 to generate faster indirect calls and use unscaled index address modes.
14108 .Sp
14109 Such code is suitable for level 0 \s-1PA\s0 systems and kernels.
14110 .IP "\fB\-mfast\-indirect\-calls\fR" 4
14111 .IX Item "-mfast-indirect-calls"
14112 Generate code that assumes calls never cross space boundaries.  This
14113 allows \s-1GCC\s0 to emit code that performs faster indirect calls.
14114 .Sp
14115 This option does not work in the presence of shared libraries or nested
14116 functions.
14117 .IP "\fB\-mfixed\-range=\fR\fIregister-range\fR" 4
14118 .IX Item "-mfixed-range=register-range"
14119 Generate code treating the given register range as fixed registers.
14120 A fixed register is one that the register allocator cannot use.  This is
14121 useful when compiling kernel code.  A register range is specified as
14122 two registers separated by a dash.  Multiple register ranges can be
14123 specified separated by a comma.
14124 .IP "\fB\-mlong\-load\-store\fR" 4
14125 .IX Item "-mlong-load-store"
14126 Generate 3\-instruction load and store sequences as sometimes required by
14127 the HP-UX 10 linker.  This is equivalent to the \fB+k\fR option to
14128 the \s-1HP\s0 compilers.
14129 .IP "\fB\-mportable\-runtime\fR" 4
14130 .IX Item "-mportable-runtime"
14131 Use the portable calling conventions proposed by \s-1HP\s0 for \s-1ELF\s0 systems.
14132 .IP "\fB\-mgas\fR" 4
14133 .IX Item "-mgas"
14134 Enable the use of assembler directives only \s-1GAS\s0 understands.
14135 .IP "\fB\-mschedule=\fR\fIcpu-type\fR" 4
14136 .IX Item "-mschedule=cpu-type"
14137 Schedule code according to the constraints for the machine type
14138 \&\fIcpu-type\fR.  The choices for \fIcpu-type\fR are \fB700\fR
14139 \&\fB7100\fR, \fB7100LC\fR, \fB7200\fR, \fB7300\fR and \fB8000\fR.  Refer
14140 to \fI/usr/lib/sched.models\fR on an HP-UX system to determine the
14141 proper scheduling option for your machine.  The default scheduling is
14142 \&\fB8000\fR.
14143 .IP "\fB\-mlinker\-opt\fR" 4
14144 .IX Item "-mlinker-opt"
14145 Enable the optimization pass in the HP-UX linker.  Note this makes symbolic
14146 debugging impossible.  It also triggers a bug in the HP-UX 8 and HP-UX 9
14147 linkers in which they give bogus error messages when linking some programs.
14148 .IP "\fB\-msoft\-float\fR" 4
14149 .IX Item "-msoft-float"
14150 Generate output containing library calls for floating point.
14151 \&\fBWarning:\fR the requisite libraries are not available for all \s-1HPPA\s0
14152 targets.  Normally the facilities of the machine's usual C compiler are
14153 used, but this cannot be done directly in cross-compilation.  You must make
14154 your own arrangements to provide suitable library functions for
14155 cross-compilation.
14156 .Sp
14157 \&\fB\-msoft\-float\fR changes the calling convention in the output file;
14158 therefore, it is only useful if you compile \fIall\fR of a program with
14159 this option.  In particular, you need to compile \fIlibgcc.a\fR, the
14160 library that comes with \s-1GCC\s0, with \fB\-msoft\-float\fR in order for
14161 this to work.
14162 .IP "\fB\-msio\fR" 4
14163 .IX Item "-msio"
14164 Generate the predefine, \f(CW\*(C`_SIO\*(C'\fR, for server \s-1IO\s0.  The default is
14165 \&\fB\-mwsio\fR.  This generates the predefines, \f(CW\*(C`_\|_hp9000s700\*(C'\fR,
14166 \&\f(CW\*(C`_\|_hp9000s700_\|_\*(C'\fR and \f(CW\*(C`_WSIO\*(C'\fR, for workstation \s-1IO\s0.  These
14167 options are available under HP-UX and HI-UX.
14168 .IP "\fB\-mgnu\-ld\fR" 4
14169 .IX Item "-mgnu-ld"
14170 Use options specific to \s-1GNU\s0 \fBld\fR.
14171 This passes \fB\-shared\fR to \fBld\fR when
14172 building a shared library.  It is the default when \s-1GCC\s0 is configured,
14173 explicitly or implicitly, with the \s-1GNU\s0 linker.  This option does not
14174 affect which \fBld\fR is called; it only changes what parameters
14175 are passed to that \fBld\fR.
14176 The \fBld\fR that is called is determined by the
14177 \&\fB\-\-with\-ld\fR configure option, \s-1GCC\s0's program search path, and
14178 finally by the user's \fB\s-1PATH\s0\fR.  The linker used by \s-1GCC\s0 can be printed
14179 using \fBwhich `gcc \-print\-prog\-name=ld`\fR.  This option is only available
14180 on the 64\-bit HP-UX \s-1GCC\s0, i.e. configured with \fBhppa*64*\-*\-hpux*\fR.
14181 .IP "\fB\-mhp\-ld\fR" 4
14182 .IX Item "-mhp-ld"
14183 Use options specific to \s-1HP\s0 \fBld\fR.
14184 This passes \fB\-b\fR to \fBld\fR when building
14185 a shared library and passes \fB+Accept TypeMismatch\fR to \fBld\fR on all
14186 links.  It is the default when \s-1GCC\s0 is configured, explicitly or
14187 implicitly, with the \s-1HP\s0 linker.  This option does not affect
14188 which \fBld\fR is called; it only changes what parameters are passed to that
14189 \&\fBld\fR.
14190 The \fBld\fR that is called is determined by the \fB\-\-with\-ld\fR
14191 configure option, \s-1GCC\s0's program search path, and finally by the user's
14192 \&\fB\s-1PATH\s0\fR.  The linker used by \s-1GCC\s0 can be printed using \fBwhich
14193 `gcc \-print\-prog\-name=ld`\fR.  This option is only available on the 64\-bit
14194 HP-UX \s-1GCC\s0, i.e. configured with \fBhppa*64*\-*\-hpux*\fR.
14195 .IP "\fB\-mlong\-calls\fR" 4
14196 .IX Item "-mlong-calls"
14197 Generate code that uses long call sequences.  This ensures that a call
14198 is always able to reach linker generated stubs.  The default is to generate
14199 long calls only when the distance from the call site to the beginning
14200 of the function or translation unit, as the case may be, exceeds a
14201 predefined limit set by the branch type being used.  The limits for
14202 normal calls are 7,600,000 and 240,000 bytes, respectively for the
14203 \&\s-1PA\s0 2.0 and \s-1PA\s0 1.X architectures.  Sibcalls are always limited at
14204 240,000 bytes.
14205 .Sp
14206 Distances are measured from the beginning of functions when using the
14207 \&\fB\-ffunction\-sections\fR option, or when using the \fB\-mgas\fR
14208 and \fB\-mno\-portable\-runtime\fR options together under HP-UX with
14209 the \s-1SOM\s0 linker.
14210 .Sp
14211 It is normally not desirable to use this option as it degrades
14212 performance.  However, it may be useful in large applications,
14213 particularly when partial linking is used to build the application.
14214 .Sp
14215 The types of long calls used depends on the capabilities of the
14216 assembler and linker, and the type of code being generated.  The
14217 impact on systems that support long absolute calls, and long pic
14218 symbol-difference or pc-relative calls should be relatively small.
14219 However, an indirect call is used on 32\-bit \s-1ELF\s0 systems in pic code
14220 and it is quite long.
14221 .IP "\fB\-munix=\fR\fIunix-std\fR" 4
14222 .IX Item "-munix=unix-std"
14223 Generate compiler predefines and select a startfile for the specified
14224 \&\s-1UNIX\s0 standard.  The choices for \fIunix-std\fR are \fB93\fR, \fB95\fR
14225 and \fB98\fR.  \fB93\fR is supported on all HP-UX versions.  \fB95\fR
14226 is available on HP-UX 10.10 and later.  \fB98\fR is available on HP-UX
14227 11.11 and later.  The default values are \fB93\fR for HP-UX 10.00,
14228 \&\fB95\fR for HP-UX 10.10 though to 11.00, and \fB98\fR for HP-UX 11.11
14229 and later.
14230 .Sp
14231 \&\fB\-munix=93\fR provides the same predefines as \s-1GCC\s0 3.3 and 3.4.
14232 \&\fB\-munix=95\fR provides additional predefines for \f(CW\*(C`XOPEN_UNIX\*(C'\fR
14233 and \f(CW\*(C`_XOPEN_SOURCE_EXTENDED\*(C'\fR, and the startfile \fIunix95.o\fR.
14234 \&\fB\-munix=98\fR provides additional predefines for \f(CW\*(C`_XOPEN_UNIX\*(C'\fR,
14235 \&\f(CW\*(C`_XOPEN_SOURCE_EXTENDED\*(C'\fR, \f(CW\*(C`_INCLUDE_\|_STDC_A1_SOURCE\*(C'\fR and
14236 \&\f(CW\*(C`_INCLUDE_XOPEN_SOURCE_500\*(C'\fR, and the startfile \fIunix98.o\fR.
14237 .Sp
14238 It is \fIimportant\fR to note that this option changes the interfaces
14239 for various library routines.  It also affects the operational behavior
14240 of the C library.  Thus, \fIextreme\fR care is needed in using this
14241 option.
14242 .Sp
14243 Library code that is intended to operate with more than one \s-1UNIX\s0
14244 standard must test, set and restore the variable \f(CW\*(C`_\|_xpg4_extended_mask\*(C'\fR
14245 as appropriate.  Most \s-1GNU\s0 software doesn't provide this capability.
14246 .IP "\fB\-nolibdld\fR" 4
14247 .IX Item "-nolibdld"
14248 Suppress the generation of link options to search libdld.sl when the
14249 \&\fB\-static\fR option is specified on HP-UX 10 and later.
14250 .IP "\fB\-static\fR" 4
14251 .IX Item "-static"
14252 The HP-UX implementation of setlocale in libc has a dependency on
14253 libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
14254 when the \fB\-static\fR option is specified, special link options
14255 are needed to resolve this dependency.
14256 .Sp
14257 On HP-UX 10 and later, the \s-1GCC\s0 driver adds the necessary options to
14258 link with libdld.sl when the \fB\-static\fR option is specified.
14259 This causes the resulting binary to be dynamic.  On the 64\-bit port,
14260 the linkers generate dynamic binaries by default in any case.  The
14261 \&\fB\-nolibdld\fR option can be used to prevent the \s-1GCC\s0 driver from
14262 adding these link options.
14263 .IP "\fB\-threads\fR" 4
14264 .IX Item "-threads"
14265 Add support for multithreading with the \fIdce thread\fR library
14266 under HP-UX.  This option sets flags for both the preprocessor and
14267 linker.
14268 .PP
14269 \fIIntel 386 and \s-1AMD\s0 x86\-64 Options\fR
14270 .IX Subsection "Intel 386 and AMD x86-64 Options"
14271 .PP
14272 These \fB\-m\fR options are defined for the i386 and x86\-64 family of
14273 computers:
14274 .IP "\fB\-march=\fR\fIcpu-type\fR" 4
14275 .IX Item "-march=cpu-type"
14276 Generate instructions for the machine type \fIcpu-type\fR.  In contrast to
14277 \&\fB\-mtune=\fR\fIcpu-type\fR, which merely tunes the generated code 
14278 for the specified \fIcpu-type\fR, \fB\-march=\fR\fIcpu-type\fR allows \s-1GCC\s0
14279 to generate code that may not run at all on processors other than the one
14280 indicated.  Specifying \fB\-march=\fR\fIcpu-type\fR implies 
14281 \&\fB\-mtune=\fR\fIcpu-type\fR.
14282 .Sp
14283 The choices for \fIcpu-type\fR are:
14284 .RS 4
14285 .IP "\fBnative\fR" 4
14286 .IX Item "native"
14287 This selects the \s-1CPU\s0 to generate code for at compilation time by determining
14288 the processor type of the compiling machine.  Using \fB\-march=native\fR
14289 enables all instruction subsets supported by the local machine (hence
14290 the result might not run on different machines).  Using \fB\-mtune=native\fR
14291 produces code optimized for the local machine under the constraints
14292 of the selected instruction set.
14293 .IP "\fBi386\fR" 4
14294 .IX Item "i386"
14295 Original Intel i386 \s-1CPU\s0.
14296 .IP "\fBi486\fR" 4
14297 .IX Item "i486"
14298 Intel i486 \s-1CPU\s0.  (No scheduling is implemented for this chip.)
14299 .IP "\fBi586\fR" 4
14300 .IX Item "i586"
14301 .PD 0
14302 .IP "\fBpentium\fR" 4
14303 .IX Item "pentium"
14304 .PD
14305 Intel Pentium \s-1CPU\s0 with no \s-1MMX\s0 support.
14306 .IP "\fBpentium-mmx\fR" 4
14307 .IX Item "pentium-mmx"
14308 Intel Pentium \s-1MMX\s0 \s-1CPU\s0, based on Pentium core with \s-1MMX\s0 instruction set support.
14309 .IP "\fBpentiumpro\fR" 4
14310 .IX Item "pentiumpro"
14311 Intel Pentium Pro \s-1CPU\s0.
14312 .IP "\fBi686\fR" 4
14313 .IX Item "i686"
14314 When used with \fB\-march\fR, the Pentium Pro
14315 instruction set is used, so the code runs on all i686 family chips.
14316 When used with \fB\-mtune\fR, it has the same meaning as \fBgeneric\fR.
14317 .IP "\fBpentium2\fR" 4
14318 .IX Item "pentium2"
14319 Intel Pentium \s-1II\s0 \s-1CPU\s0, based on Pentium Pro core with \s-1MMX\s0 instruction set
14320 support.
14321 .IP "\fBpentium3\fR" 4
14322 .IX Item "pentium3"
14323 .PD 0
14324 .IP "\fBpentium3m\fR" 4
14325 .IX Item "pentium3m"
14326 .PD
14327 Intel Pentium \s-1III\s0 \s-1CPU\s0, based on Pentium Pro core with \s-1MMX\s0 and \s-1SSE\s0 instruction
14328 set support.
14329 .IP "\fBpentium-m\fR" 4
14330 .IX Item "pentium-m"
14331 Intel Pentium M; low-power version of Intel Pentium \s-1III\s0 \s-1CPU\s0
14332 with \s-1MMX\s0, \s-1SSE\s0 and \s-1SSE2\s0 instruction set support.  Used by Centrino notebooks.
14333 .IP "\fBpentium4\fR" 4
14334 .IX Item "pentium4"
14335 .PD 0
14336 .IP "\fBpentium4m\fR" 4
14337 .IX Item "pentium4m"
14338 .PD
14339 Intel Pentium 4 \s-1CPU\s0 with \s-1MMX\s0, \s-1SSE\s0 and \s-1SSE2\s0 instruction set support.
14340 .IP "\fBprescott\fR" 4
14341 .IX Item "prescott"
14342 Improved version of Intel Pentium 4 \s-1CPU\s0 with \s-1MMX\s0, \s-1SSE\s0, \s-1SSE2\s0 and \s-1SSE3\s0 instruction
14343 set support.
14344 .IP "\fBnocona\fR" 4
14345 .IX Item "nocona"
14346 Improved version of Intel Pentium 4 \s-1CPU\s0 with 64\-bit extensions, \s-1MMX\s0, \s-1SSE\s0,
14347 \&\s-1SSE2\s0 and \s-1SSE3\s0 instruction set support.
14348 .IP "\fBcore2\fR" 4
14349 .IX Item "core2"
14350 Intel Core 2 \s-1CPU\s0 with 64\-bit extensions, \s-1MMX\s0, \s-1SSE\s0, \s-1SSE2\s0, \s-1SSE3\s0 and \s-1SSSE3\s0
14351 instruction set support.
14352 .IP "\fBnehalem\fR" 4
14353 .IX Item "nehalem"
14354 Intel Nehalem \s-1CPU\s0 with 64\-bit extensions, \s-1MMX\s0, \s-1SSE\s0, \s-1SSE2\s0, \s-1SSE3\s0, \s-1SSSE3\s0,
14355 \&\s-1SSE4\s0.1, \s-1SSE4\s0.2 and \s-1POPCNT\s0 instruction set support.
14356 .IP "\fBwestmere\fR" 4
14357 .IX Item "westmere"
14358 Intel Westmere \s-1CPU\s0 with 64\-bit extensions, \s-1MMX\s0, \s-1SSE\s0, \s-1SSE2\s0, \s-1SSE3\s0, \s-1SSSE3\s0,
14359 \&\s-1SSE4\s0.1, \s-1SSE4\s0.2, \s-1POPCNT\s0, \s-1AES\s0 and \s-1PCLMUL\s0 instruction set support.
14360 .IP "\fBsandybridge\fR" 4
14361 .IX Item "sandybridge"
14362 Intel Sandy Bridge \s-1CPU\s0 with 64\-bit extensions, \s-1MMX\s0, \s-1SSE\s0, \s-1SSE2\s0, \s-1SSE3\s0, \s-1SSSE3\s0,
14363 \&\s-1SSE4\s0.1, \s-1SSE4\s0.2, \s-1POPCNT\s0, \s-1AVX\s0, \s-1AES\s0 and \s-1PCLMUL\s0 instruction set support.
14364 .IP "\fBivybridge\fR" 4
14365 .IX Item "ivybridge"
14366 Intel Ivy Bridge \s-1CPU\s0 with 64\-bit extensions, \s-1MMX\s0, \s-1SSE\s0, \s-1SSE2\s0, \s-1SSE3\s0, \s-1SSSE3\s0,
14367 \&\s-1SSE4\s0.1, \s-1SSE4\s0.2, \s-1POPCNT\s0, \s-1AVX\s0, \s-1AES\s0, \s-1PCLMUL\s0, \s-1FSGSBASE\s0, \s-1RDRND\s0 and F16C
14368 instruction set support.
14369 .IP "\fBhaswell\fR" 4
14370 .IX Item "haswell"
14371 Intel Haswell \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE\s0, \s-1MMX\s0, \s-1SSE\s0, \s-1SSE2\s0, \s-1SSE3\s0, \s-1SSSE3\s0,
14372 \&\s-1SSE4\s0.1, \s-1SSE4\s0.2, \s-1POPCNT\s0, \s-1AVX\s0, \s-1AVX2\s0, \s-1AES\s0, \s-1PCLMUL\s0, \s-1FSGSBASE\s0, \s-1RDRND\s0, \s-1FMA\s0,
14373 \&\s-1BMI\s0, \s-1BMI2\s0 and F16C instruction set support.
14374 .IP "\fBbroadwell\fR" 4
14375 .IX Item "broadwell"
14376 Intel Broadwell \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE\s0, \s-1MMX\s0, \s-1SSE\s0, \s-1SSE2\s0, \s-1SSE3\s0, \s-1SSSE3\s0,
14377 \&\s-1SSE4\s0.1, \s-1SSE4\s0.2, \s-1POPCNT\s0, \s-1AVX\s0, \s-1AVX2\s0, \s-1AES\s0, \s-1PCLMUL\s0, \s-1FSGSBASE\s0, \s-1RDRND\s0, \s-1FMA\s0,
14378 \&\s-1BMI\s0, \s-1BMI2\s0, F16C, \s-1RDSEED\s0, \s-1ADCX\s0 and \s-1PREFETCHW\s0 instruction set support.
14379 .IP "\fBbonnell\fR" 4
14380 .IX Item "bonnell"
14381 Intel Bonnell \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE\s0, \s-1MMX\s0, \s-1SSE\s0, \s-1SSE2\s0, \s-1SSE3\s0 and \s-1SSSE3\s0
14382 instruction set support.
14383 .IP "\fBsilvermont\fR" 4
14384 .IX Item "silvermont"
14385 Intel Silvermont \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE\s0, \s-1MMX\s0, \s-1SSE\s0, \s-1SSE2\s0, \s-1SSE3\s0, \s-1SSSE3\s0,
14386 \&\s-1SSE4\s0.1, \s-1SSE4\s0.2, \s-1POPCNT\s0, \s-1AES\s0, \s-1PCLMUL\s0 and \s-1RDRND\s0 instruction set support.
14387 .IP "\fBk6\fR" 4
14388 .IX Item "k6"
14389 \&\s-1AMD\s0 K6 \s-1CPU\s0 with \s-1MMX\s0 instruction set support.
14390 .IP "\fBk6\-2\fR" 4
14391 .IX Item "k6-2"
14392 .PD 0
14393 .IP "\fBk6\-3\fR" 4
14394 .IX Item "k6-3"
14395 .PD
14396 Improved versions of \s-1AMD\s0 K6 \s-1CPU\s0 with \s-1MMX\s0 and 3DNow! instruction set support.
14397 .IP "\fBathlon\fR" 4
14398 .IX Item "athlon"
14399 .PD 0
14400 .IP "\fBathlon-tbird\fR" 4
14401 .IX Item "athlon-tbird"
14402 .PD
14403 \&\s-1AMD\s0 Athlon \s-1CPU\s0 with \s-1MMX\s0, 3dNOW!, enhanced 3DNow! and \s-1SSE\s0 prefetch instructions
14404 support.
14405 .IP "\fBathlon\-4\fR" 4
14406 .IX Item "athlon-4"
14407 .PD 0
14408 .IP "\fBathlon-xp\fR" 4
14409 .IX Item "athlon-xp"
14410 .IP "\fBathlon-mp\fR" 4
14411 .IX Item "athlon-mp"
14412 .PD
14413 Improved \s-1AMD\s0 Athlon \s-1CPU\s0 with \s-1MMX\s0, 3DNow!, enhanced 3DNow! and full \s-1SSE\s0
14414 instruction set support.
14415 .IP "\fBk8\fR" 4
14416 .IX Item "k8"
14417 .PD 0
14418 .IP "\fBopteron\fR" 4
14419 .IX Item "opteron"
14420 .IP "\fBathlon64\fR" 4
14421 .IX Item "athlon64"
14422 .IP "\fBathlon-fx\fR" 4
14423 .IX Item "athlon-fx"
14424 .PD
14425 Processors based on the \s-1AMD\s0 K8 core with x86\-64 instruction set support,
14426 including the \s-1AMD\s0 Opteron, Athlon 64, and Athlon 64 \s-1FX\s0 processors.
14427 (This supersets \s-1MMX\s0, \s-1SSE\s0, \s-1SSE2\s0, 3DNow!, enhanced 3DNow! and 64\-bit
14428 instruction set extensions.)
14429 .IP "\fBk8\-sse3\fR" 4
14430 .IX Item "k8-sse3"
14431 .PD 0
14432 .IP "\fBopteron\-sse3\fR" 4
14433 .IX Item "opteron-sse3"
14434 .IP "\fBathlon64\-sse3\fR" 4
14435 .IX Item "athlon64-sse3"
14436 .PD
14437 Improved versions of \s-1AMD\s0 K8 cores with \s-1SSE3\s0 instruction set support.
14438 .IP "\fBamdfam10\fR" 4
14439 .IX Item "amdfam10"
14440 .PD 0
14441 .IP "\fBbarcelona\fR" 4
14442 .IX Item "barcelona"
14443 .PD
14444 CPUs based on \s-1AMD\s0 Family 10h cores with x86\-64 instruction set support.  (This
14445 supersets \s-1MMX\s0, \s-1SSE\s0, \s-1SSE2\s0, \s-1SSE3\s0, \s-1SSE4A\s0, 3DNow!, enhanced 3DNow!, \s-1ABM\s0 and 64\-bit
14446 instruction set extensions.)
14447 .IP "\fBbdver1\fR" 4
14448 .IX Item "bdver1"
14449 CPUs based on \s-1AMD\s0 Family 15h cores with x86\-64 instruction set support.  (This
14450 supersets \s-1FMA4\s0, \s-1AVX\s0, \s-1XOP\s0, \s-1LWP\s0, \s-1AES\s0, \s-1PCL_MUL\s0, \s-1CX16\s0, \s-1MMX\s0, \s-1SSE\s0, \s-1SSE2\s0, \s-1SSE3\s0, \s-1SSE4A\s0,
14451 \&\s-1SSSE3\s0, \s-1SSE4\s0.1, \s-1SSE4\s0.2, \s-1ABM\s0 and 64\-bit instruction set extensions.)
14452 .IP "\fBbdver2\fR" 4
14453 .IX Item "bdver2"
14454 \&\s-1AMD\s0 Family 15h core based CPUs with x86\-64 instruction set support.  (This
14455 supersets \s-1BMI\s0, \s-1TBM\s0, F16C, \s-1FMA\s0, \s-1FMA4\s0, \s-1AVX\s0, \s-1XOP\s0, \s-1LWP\s0, \s-1AES\s0, \s-1PCL_MUL\s0, \s-1CX16\s0, \s-1MMX\s0,
14456 \&\s-1SSE\s0, \s-1SSE2\s0, \s-1SSE3\s0, \s-1SSE4A\s0, \s-1SSSE3\s0, \s-1SSE4\s0.1, \s-1SSE4\s0.2, \s-1ABM\s0 and 64\-bit instruction set 
14457 extensions.)
14458 .IP "\fBbdver3\fR" 4
14459 .IX Item "bdver3"
14460 \&\s-1AMD\s0 Family 15h core based CPUs with x86\-64 instruction set support.  (This
14461 supersets \s-1BMI\s0, \s-1TBM\s0, F16C, \s-1FMA\s0, \s-1FMA4\s0, \s-1FSGSBASE\s0, \s-1AVX\s0, \s-1XOP\s0, \s-1LWP\s0, \s-1AES\s0, 
14462 \&\s-1PCL_MUL\s0, \s-1CX16\s0, \s-1MMX\s0, \s-1SSE\s0, \s-1SSE2\s0, \s-1SSE3\s0, \s-1SSE4A\s0, \s-1SSSE3\s0, \s-1SSE4\s0.1, \s-1SSE4\s0.2, \s-1ABM\s0 and 
14463 64\-bit instruction set extensions.
14464 .IP "\fBbdver4\fR" 4
14465 .IX Item "bdver4"
14466 \&\s-1AMD\s0 Family 15h core based CPUs with x86\-64 instruction set support.  (This
14467 supersets \s-1BMI\s0, \s-1BMI2\s0, \s-1TBM\s0, F16C, \s-1FMA\s0, \s-1FMA4\s0, \s-1FSGSBASE\s0, \s-1AVX\s0, \s-1AVX2\s0, \s-1XOP\s0, \s-1LWP\s0, 
14468 \&\s-1AES\s0, \s-1PCL_MUL\s0, \s-1CX16\s0, \s-1MOVBE\s0, \s-1MMX\s0, \s-1SSE\s0, \s-1SSE2\s0, \s-1SSE3\s0, \s-1SSE4A\s0, \s-1SSSE3\s0, \s-1SSE4\s0.1, 
14469 \&\s-1SSE4\s0.2, \s-1ABM\s0 and 64\-bit instruction set extensions.
14470 .IP "\fBbtver1\fR" 4
14471 .IX Item "btver1"
14472 CPUs based on \s-1AMD\s0 Family 14h cores with x86\-64 instruction set support.  (This
14473 supersets \s-1MMX\s0, \s-1SSE\s0, \s-1SSE2\s0, \s-1SSE3\s0, \s-1SSSE3\s0, \s-1SSE4A\s0, \s-1CX16\s0, \s-1ABM\s0 and 64\-bit
14474 instruction set extensions.)
14475 .IP "\fBbtver2\fR" 4
14476 .IX Item "btver2"
14477 CPUs based on \s-1AMD\s0 Family 16h cores with x86\-64 instruction set support. This
14478 includes \s-1MOVBE\s0, F16C, \s-1BMI\s0, \s-1AVX\s0, \s-1PCL_MUL\s0, \s-1AES\s0, \s-1SSE4\s0.2, \s-1SSE4\s0.1, \s-1CX16\s0, \s-1ABM\s0,
14479 \&\s-1SSE4A\s0, \s-1SSSE3\s0, \s-1SSE3\s0, \s-1SSE2\s0, \s-1SSE\s0, \s-1MMX\s0 and 64\-bit instruction set extensions.
14480 .IP "\fBwinchip\-c6\fR" 4
14481 .IX Item "winchip-c6"
14482 \&\s-1IDT\s0 WinChip C6 \s-1CPU\s0, dealt in same way as i486 with additional \s-1MMX\s0 instruction
14483 set support.
14484 .IP "\fBwinchip2\fR" 4
14485 .IX Item "winchip2"
14486 \&\s-1IDT\s0 WinChip 2 \s-1CPU\s0, dealt in same way as i486 with additional \s-1MMX\s0 and 3DNow!
14487 instruction set support.
14488 .IP "\fBc3\fR" 4
14489 .IX Item "c3"
14490 \&\s-1VIA\s0 C3 \s-1CPU\s0 with \s-1MMX\s0 and 3DNow! instruction set support.  (No scheduling is
14491 implemented for this chip.)
14492 .IP "\fBc3\-2\fR" 4
14493 .IX Item "c3-2"
14494 \&\s-1VIA\s0 C3\-2 (Nehemiah/C5XL) \s-1CPU\s0 with \s-1MMX\s0 and \s-1SSE\s0 instruction set support.
14495 (No scheduling is
14496 implemented for this chip.)
14497 .IP "\fBgeode\fR" 4
14498 .IX Item "geode"
14499 \&\s-1AMD\s0 Geode embedded processor with \s-1MMX\s0 and 3DNow! instruction set support.
14500 .RE
14501 .RS 4
14502 .RE
14503 .IP "\fB\-mtune=\fR\fIcpu-type\fR" 4
14504 .IX Item "-mtune=cpu-type"
14505 Tune to \fIcpu-type\fR everything applicable about the generated code, except
14506 for the \s-1ABI\s0 and the set of available instructions.  
14507 While picking a specific \fIcpu-type\fR schedules things appropriately
14508 for that particular chip, the compiler does not generate any code that
14509 cannot run on the default machine type unless you use a
14510 \&\fB\-march=\fR\fIcpu-type\fR option.
14511 For example, if \s-1GCC\s0 is configured for i686\-pc\-linux\-gnu
14512 then \fB\-mtune=pentium4\fR generates code that is tuned for Pentium 4
14513 but still runs on i686 machines.
14514 .Sp
14515 The choices for \fIcpu-type\fR are the same as for \fB\-march\fR.
14516 In addition, \fB\-mtune\fR supports 2 extra choices for \fIcpu-type\fR:
14517 .RS 4
14518 .IP "\fBgeneric\fR" 4
14519 .IX Item "generic"
14520 Produce code optimized for the most common \s-1IA32/AMD64/EM64T\s0 processors.
14521 If you know the \s-1CPU\s0 on which your code will run, then you should use
14522 the corresponding \fB\-mtune\fR or \fB\-march\fR option instead of
14523 \&\fB\-mtune=generic\fR.  But, if you do not know exactly what \s-1CPU\s0 users
14524 of your application will have, then you should use this option.
14525 .Sp
14526 As new processors are deployed in the marketplace, the behavior of this
14527 option will change.  Therefore, if you upgrade to a newer version of
14528 \&\s-1GCC\s0, code generation controlled by this option will change to reflect
14529 the processors
14530 that are most common at the time that version of \s-1GCC\s0 is released.
14531 .Sp
14532 There is no \fB\-march=generic\fR option because \fB\-march\fR
14533 indicates the instruction set the compiler can use, and there is no
14534 generic instruction set applicable to all processors.  In contrast,
14535 \&\fB\-mtune\fR indicates the processor (or, in this case, collection of
14536 processors) for which the code is optimized.
14537 .IP "\fBintel\fR" 4
14538 .IX Item "intel"
14539 Produce code optimized for the most current Intel processors, which are
14540 Haswell and Silvermont for this version of \s-1GCC\s0.  If you know the \s-1CPU\s0
14541 on which your code will run, then you should use the corresponding
14542 \&\fB\-mtune\fR or \fB\-march\fR option instead of \fB\-mtune=intel\fR.
14543 But, if you want your application performs better on both Haswell and
14544 Silvermont, then you should use this option.
14545 .Sp
14546 As new Intel processors are deployed in the marketplace, the behavior of
14547 this option will change.  Therefore, if you upgrade to a newer version of
14548 \&\s-1GCC\s0, code generation controlled by this option will change to reflect
14549 the most current Intel processors at the time that version of \s-1GCC\s0 is
14550 released.
14551 .Sp
14552 There is no \fB\-march=intel\fR option because \fB\-march\fR indicates
14553 the instruction set the compiler can use, and there is no common
14554 instruction set applicable to all processors.  In contrast,
14555 \&\fB\-mtune\fR indicates the processor (or, in this case, collection of
14556 processors) for which the code is optimized.
14557 .RE
14558 .RS 4
14559 .RE
14560 .IP "\fB\-mcpu=\fR\fIcpu-type\fR" 4
14561 .IX Item "-mcpu=cpu-type"
14562 A deprecated synonym for \fB\-mtune\fR.
14563 .IP "\fB\-mfpmath=\fR\fIunit\fR" 4
14564 .IX Item "-mfpmath=unit"
14565 Generate floating-point arithmetic for selected unit \fIunit\fR.  The choices
14566 for \fIunit\fR are:
14567 .RS 4
14568 .IP "\fB387\fR" 4
14569 .IX Item "387"
14570 Use the standard 387 floating-point coprocessor present on the majority of chips and
14571 emulated otherwise.  Code compiled with this option runs almost everywhere.
14572 The temporary results are computed in 80\-bit precision instead of the precision
14573 specified by the type, resulting in slightly different results compared to most
14574 of other chips.  See \fB\-ffloat\-store\fR for more detailed description.
14575 .Sp
14576 This is the default choice for i386 compiler.
14577 .IP "\fBsse\fR" 4
14578 .IX Item "sse"
14579 Use scalar floating-point instructions present in the \s-1SSE\s0 instruction set.
14580 This instruction set is supported by Pentium \s-1III\s0 and newer chips,
14581 and in the \s-1AMD\s0 line
14582 by Athlon\-4, Athlon \s-1XP\s0 and Athlon \s-1MP\s0 chips.  The earlier version of the \s-1SSE\s0
14583 instruction set supports only single-precision arithmetic, thus the double and
14584 extended-precision arithmetic are still done using 387.  A later version, present
14585 only in Pentium 4 and \s-1AMD\s0 x86\-64 chips, supports double-precision
14586 arithmetic too.
14587 .Sp
14588 For the i386 compiler, you must use \fB\-march=\fR\fIcpu-type\fR, \fB\-msse\fR
14589 or \fB\-msse2\fR switches to enable \s-1SSE\s0 extensions and make this option
14590 effective.  For the x86\-64 compiler, these extensions are enabled by default.
14591 .Sp
14592 The resulting code should be considerably faster in the majority of cases and avoid
14593 the numerical instability problems of 387 code, but may break some existing
14594 code that expects temporaries to be 80 bits.
14595 .Sp
14596 This is the default choice for the x86\-64 compiler.
14597 .IP "\fBsse,387\fR" 4
14598 .IX Item "sse,387"
14599 .PD 0
14600 .IP "\fBsse+387\fR" 4
14601 .IX Item "sse+387"
14602 .IP "\fBboth\fR" 4
14603 .IX Item "both"
14604 .PD
14605 Attempt to utilize both instruction sets at once.  This effectively doubles the
14606 amount of available registers, and on chips with separate execution units for
14607 387 and \s-1SSE\s0 the execution resources too.  Use this option with care, as it is
14608 still experimental, because the \s-1GCC\s0 register allocator does not model separate
14609 functional units well, resulting in unstable performance.
14610 .RE
14611 .RS 4
14612 .RE
14613 .IP "\fB\-masm=\fR\fIdialect\fR" 4
14614 .IX Item "-masm=dialect"
14615 Output assembly instructions using selected \fIdialect\fR.  Supported
14616 choices are \fBintel\fR or \fBatt\fR (the default).  Darwin does
14617 not support \fBintel\fR.
14618 .IP "\fB\-mieee\-fp\fR" 4
14619 .IX Item "-mieee-fp"
14620 .PD 0
14621 .IP "\fB\-mno\-ieee\-fp\fR" 4
14622 .IX Item "-mno-ieee-fp"
14623 .PD
14624 Control whether or not the compiler uses \s-1IEEE\s0 floating-point
14625 comparisons.  These correctly handle the case where the result of a
14626 comparison is unordered.
14627 .IP "\fB\-msoft\-float\fR" 4
14628 .IX Item "-msoft-float"
14629 Generate output containing library calls for floating point.
14630 .Sp
14631 \&\fBWarning:\fR the requisite libraries are not part of \s-1GCC\s0.
14632 Normally the facilities of the machine's usual C compiler are used, but
14633 this can't be done directly in cross-compilation.  You must make your
14634 own arrangements to provide suitable library functions for
14635 cross-compilation.
14636 .Sp
14637 On machines where a function returns floating-point results in the 80387
14638 register stack, some floating-point opcodes may be emitted even if
14639 \&\fB\-msoft\-float\fR is used.
14640 .IP "\fB\-mno\-fp\-ret\-in\-387\fR" 4
14641 .IX Item "-mno-fp-ret-in-387"
14642 Do not use the \s-1FPU\s0 registers for return values of functions.
14643 .Sp
14644 The usual calling convention has functions return values of types
14645 \&\f(CW\*(C`float\*(C'\fR and \f(CW\*(C`double\*(C'\fR in an \s-1FPU\s0 register, even if there
14646 is no \s-1FPU\s0.  The idea is that the operating system should emulate
14647 an \s-1FPU\s0.
14648 .Sp
14649 The option \fB\-mno\-fp\-ret\-in\-387\fR causes such values to be returned
14650 in ordinary \s-1CPU\s0 registers instead.
14651 .IP "\fB\-mno\-fancy\-math\-387\fR" 4
14652 .IX Item "-mno-fancy-math-387"
14653 Some 387 emulators do not support the \f(CW\*(C`sin\*(C'\fR, \f(CW\*(C`cos\*(C'\fR and
14654 \&\f(CW\*(C`sqrt\*(C'\fR instructions for the 387.  Specify this option to avoid
14655 generating those instructions.  This option is the default on FreeBSD,
14656 OpenBSD and NetBSD.  This option is overridden when \fB\-march\fR
14657 indicates that the target \s-1CPU\s0 always has an \s-1FPU\s0 and so the
14658 instruction does not need emulation.  These
14659 instructions are not generated unless you also use the
14660 \&\fB\-funsafe\-math\-optimizations\fR switch.
14661 .IP "\fB\-malign\-double\fR" 4
14662 .IX Item "-malign-double"
14663 .PD 0
14664 .IP "\fB\-mno\-align\-double\fR" 4
14665 .IX Item "-mno-align-double"
14666 .PD
14667 Control whether \s-1GCC\s0 aligns \f(CW\*(C`double\*(C'\fR, \f(CW\*(C`long double\*(C'\fR, and
14668 \&\f(CW\*(C`long long\*(C'\fR variables on a two-word boundary or a one-word
14669 boundary.  Aligning \f(CW\*(C`double\*(C'\fR variables on a two-word boundary
14670 produces code that runs somewhat faster on a Pentium at the
14671 expense of more memory.
14672 .Sp
14673 On x86\-64, \fB\-malign\-double\fR is enabled by default.
14674 .Sp
14675 \&\fBWarning:\fR if you use the \fB\-malign\-double\fR switch,
14676 structures containing the above types are aligned differently than
14677 the published application binary interface specifications for the 386
14678 and are not binary compatible with structures in code compiled
14679 without that switch.
14680 .IP "\fB\-m96bit\-long\-double\fR" 4
14681 .IX Item "-m96bit-long-double"
14682 .PD 0
14683 .IP "\fB\-m128bit\-long\-double\fR" 4
14684 .IX Item "-m128bit-long-double"
14685 .PD
14686 These switches control the size of \f(CW\*(C`long double\*(C'\fR type.  The i386
14687 application binary interface specifies the size to be 96 bits,
14688 so \fB\-m96bit\-long\-double\fR is the default in 32\-bit mode.
14689 .Sp
14690 Modern architectures (Pentium and newer) prefer \f(CW\*(C`long double\*(C'\fR
14691 to be aligned to an 8\- or 16\-byte boundary.  In arrays or structures
14692 conforming to the \s-1ABI\s0, this is not possible.  So specifying
14693 \&\fB\-m128bit\-long\-double\fR aligns \f(CW\*(C`long double\*(C'\fR
14694 to a 16\-byte boundary by padding the \f(CW\*(C`long double\*(C'\fR with an additional
14695 32\-bit zero.
14696 .Sp
14697 In the x86\-64 compiler, \fB\-m128bit\-long\-double\fR is the default choice as
14698 its \s-1ABI\s0 specifies that \f(CW\*(C`long double\*(C'\fR is aligned on 16\-byte boundary.
14699 .Sp
14700 Notice that neither of these options enable any extra precision over the x87
14701 standard of 80 bits for a \f(CW\*(C`long double\*(C'\fR.
14702 .Sp
14703 \&\fBWarning:\fR if you override the default value for your target \s-1ABI\s0, this
14704 changes the size of 
14705 structures and arrays containing \f(CW\*(C`long double\*(C'\fR variables,
14706 as well as modifying the function calling convention for functions taking
14707 \&\f(CW\*(C`long double\*(C'\fR.  Hence they are not binary-compatible
14708 with code compiled without that switch.
14709 .IP "\fB\-mlong\-double\-64\fR" 4
14710 .IX Item "-mlong-double-64"
14711 .PD 0
14712 .IP "\fB\-mlong\-double\-80\fR" 4
14713 .IX Item "-mlong-double-80"
14714 .IP "\fB\-mlong\-double\-128\fR" 4
14715 .IX Item "-mlong-double-128"
14716 .PD
14717 These switches control the size of \f(CW\*(C`long double\*(C'\fR type. A size
14718 of 64 bits makes the \f(CW\*(C`long double\*(C'\fR type equivalent to the \f(CW\*(C`double\*(C'\fR
14719 type. This is the default for 32\-bit Bionic C library.  A size
14720 of 128 bits makes the \f(CW\*(C`long double\*(C'\fR type equivalent to the
14721 \&\f(CW\*(C`_\|_float128\*(C'\fR type. This is the default for 64\-bit Bionic C library.
14722 .Sp
14723 \&\fBWarning:\fR if you override the default value for your target \s-1ABI\s0, this
14724 changes the size of
14725 structures and arrays containing \f(CW\*(C`long double\*(C'\fR variables,
14726 as well as modifying the function calling convention for functions taking
14727 \&\f(CW\*(C`long double\*(C'\fR.  Hence they are not binary-compatible
14728 with code compiled without that switch.
14729 .IP "\fB\-malign\-data=\fR\fItype\fR" 4
14730 .IX Item "-malign-data=type"
14731 Control how \s-1GCC\s0 aligns variables.  Supported values for \fItype\fR are
14732 \&\fBcompat\fR uses increased alignment value compatible uses \s-1GCC\s0 4.8
14733 and earlier, \fBabi\fR uses alignment value as specified by the
14734 psABI, and \fBcacheline\fR uses increased alignment value to match
14735 the cache line size.  \fBcompat\fR is the default.
14736 .IP "\fB\-mlarge\-data\-threshold=\fR\fIthreshold\fR" 4
14737 .IX Item "-mlarge-data-threshold=threshold"
14738 When \fB\-mcmodel=medium\fR is specified, data objects larger than
14739 \&\fIthreshold\fR are placed in the large data section.  This value must be the
14740 same across all objects linked into the binary, and defaults to 65535.
14741 .IP "\fB\-mrtd\fR" 4
14742 .IX Item "-mrtd"
14743 Use a different function-calling convention, in which functions that
14744 take a fixed number of arguments return with the \f(CW\*(C`ret \f(CInum\f(CW\*(C'\fR
14745 instruction, which pops their arguments while returning.  This saves one
14746 instruction in the caller since there is no need to pop the arguments
14747 there.
14748 .Sp
14749 You can specify that an individual function is called with this calling
14750 sequence with the function attribute \f(CW\*(C`stdcall\*(C'\fR.  You can also
14751 override the \fB\-mrtd\fR option by using the function attribute
14752 \&\f(CW\*(C`cdecl\*(C'\fR.
14753 .Sp
14754 \&\fBWarning:\fR this calling convention is incompatible with the one
14755 normally used on Unix, so you cannot use it if you need to call
14756 libraries compiled with the Unix compiler.
14757 .Sp
14758 Also, you must provide function prototypes for all functions that
14759 take variable numbers of arguments (including \f(CW\*(C`printf\*(C'\fR);
14760 otherwise incorrect code is generated for calls to those
14761 functions.
14762 .Sp
14763 In addition, seriously incorrect code results if you call a
14764 function with too many arguments.  (Normally, extra arguments are
14765 harmlessly ignored.)
14766 .IP "\fB\-mregparm=\fR\fInum\fR" 4
14767 .IX Item "-mregparm=num"
14768 Control how many registers are used to pass integer arguments.  By
14769 default, no registers are used to pass arguments, and at most 3
14770 registers can be used.  You can control this behavior for a specific
14771 function by using the function attribute \f(CW\*(C`regparm\*(C'\fR.
14772 .Sp
14773 \&\fBWarning:\fR if you use this switch, and
14774 \&\fInum\fR is nonzero, then you must build all modules with the same
14775 value, including any libraries.  This includes the system libraries and
14776 startup modules.
14777 .IP "\fB\-msseregparm\fR" 4
14778 .IX Item "-msseregparm"
14779 Use \s-1SSE\s0 register passing conventions for float and double arguments
14780 and return values.  You can control this behavior for a specific
14781 function by using the function attribute \f(CW\*(C`sseregparm\*(C'\fR.
14782 .Sp
14783 \&\fBWarning:\fR if you use this switch then you must build all
14784 modules with the same value, including any libraries.  This includes
14785 the system libraries and startup modules.
14786 .IP "\fB\-mvect8\-ret\-in\-mem\fR" 4
14787 .IX Item "-mvect8-ret-in-mem"
14788 Return 8\-byte vectors in memory instead of \s-1MMX\s0 registers.  This is the
14789 default on Solaris@tie{}8 and 9 and VxWorks to match the \s-1ABI\s0 of the Sun
14790 Studio compilers until version 12.  Later compiler versions (starting
14791 with Studio 12 Update@tie{}1) follow the \s-1ABI\s0 used by other x86 targets, which
14792 is the default on Solaris@tie{}10 and later.  \fIOnly\fR use this option if
14793 you need to remain compatible with existing code produced by those
14794 previous compiler versions or older versions of \s-1GCC\s0.
14795 .IP "\fB\-mpc32\fR" 4
14796 .IX Item "-mpc32"
14797 .PD 0
14798 .IP "\fB\-mpc64\fR" 4
14799 .IX Item "-mpc64"
14800 .IP "\fB\-mpc80\fR" 4
14801 .IX Item "-mpc80"
14802 .PD
14803 Set 80387 floating-point precision to 32, 64 or 80 bits.  When \fB\-mpc32\fR
14804 is specified, the significands of results of floating-point operations are
14805 rounded to 24 bits (single precision); \fB\-mpc64\fR rounds the
14806 significands of results of floating-point operations to 53 bits (double
14807 precision) and \fB\-mpc80\fR rounds the significands of results of
14808 floating-point operations to 64 bits (extended double precision), which is
14809 the default.  When this option is used, floating-point operations in higher
14810 precisions are not available to the programmer without setting the \s-1FPU\s0
14811 control word explicitly.
14812 .Sp
14813 Setting the rounding of floating-point operations to less than the default
14814 80 bits can speed some programs by 2% or more.  Note that some mathematical
14815 libraries assume that extended-precision (80\-bit) floating-point operations
14816 are enabled by default; routines in such libraries could suffer significant
14817 loss of accuracy, typically through so-called \*(L"catastrophic cancellation\*(R",
14818 when this option is used to set the precision to less than extended precision.
14819 .IP "\fB\-mstackrealign\fR" 4
14820 .IX Item "-mstackrealign"
14821 Realign the stack at entry.  On the Intel x86, the \fB\-mstackrealign\fR
14822 option generates an alternate prologue and epilogue that realigns the
14823 run-time stack if necessary.  This supports mixing legacy codes that keep
14824 4\-byte stack alignment with modern codes that keep 16\-byte stack alignment for
14825 \&\s-1SSE\s0 compatibility.  See also the attribute \f(CW\*(C`force_align_arg_pointer\*(C'\fR,
14826 applicable to individual functions.
14827 .IP "\fB\-mpreferred\-stack\-boundary=\fR\fInum\fR" 4
14828 .IX Item "-mpreferred-stack-boundary=num"
14829 Attempt to keep the stack boundary aligned to a 2 raised to \fInum\fR
14830 byte boundary.  If \fB\-mpreferred\-stack\-boundary\fR is not specified,
14831 the default is 4 (16 bytes or 128 bits).
14832 .Sp
14833 \&\fBWarning:\fR When generating code for the x86\-64 architecture with
14834 \&\s-1SSE\s0 extensions disabled, \fB\-mpreferred\-stack\-boundary=3\fR can be
14835 used to keep the stack boundary aligned to 8 byte boundary.  Since
14836 x86\-64 \s-1ABI\s0 require 16 byte stack alignment, this is \s-1ABI\s0 incompatible and
14837 intended to be used in controlled environment where stack space is
14838 important limitation.  This option leads to wrong code when functions
14839 compiled with 16 byte stack alignment (such as functions from a standard
14840 library) are called with misaligned stack.  In this case, \s-1SSE\s0
14841 instructions may lead to misaligned memory access traps.  In addition,
14842 variable arguments are handled incorrectly for 16 byte aligned
14843 objects (including x87 long double and _\|_int128), leading to wrong
14844 results.  You must build all modules with
14845 \&\fB\-mpreferred\-stack\-boundary=3\fR, including any libraries.  This
14846 includes the system libraries and startup modules.
14847 .IP "\fB\-mincoming\-stack\-boundary=\fR\fInum\fR" 4
14848 .IX Item "-mincoming-stack-boundary=num"
14849 Assume the incoming stack is aligned to a 2 raised to \fInum\fR byte
14850 boundary.  If \fB\-mincoming\-stack\-boundary\fR is not specified,
14851 the one specified by \fB\-mpreferred\-stack\-boundary\fR is used.
14852 .Sp
14853 On Pentium and Pentium Pro, \f(CW\*(C`double\*(C'\fR and \f(CW\*(C`long double\*(C'\fR values
14854 should be aligned to an 8\-byte boundary (see \fB\-malign\-double\fR) or
14855 suffer significant run time performance penalties.  On Pentium \s-1III\s0, the
14856 Streaming \s-1SIMD\s0 Extension (\s-1SSE\s0) data type \f(CW\*(C`_\|_m128\*(C'\fR may not work
14857 properly if it is not 16\-byte aligned.
14858 .Sp
14859 To ensure proper alignment of this values on the stack, the stack boundary
14860 must be as aligned as that required by any value stored on the stack.
14861 Further, every function must be generated such that it keeps the stack
14862 aligned.  Thus calling a function compiled with a higher preferred
14863 stack boundary from a function compiled with a lower preferred stack
14864 boundary most likely misaligns the stack.  It is recommended that
14865 libraries that use callbacks always use the default setting.
14866 .Sp
14867 This extra alignment does consume extra stack space, and generally
14868 increases code size.  Code that is sensitive to stack space usage, such
14869 as embedded systems and operating system kernels, may want to reduce the
14870 preferred alignment to \fB\-mpreferred\-stack\-boundary=2\fR.
14871 .IP "\fB\-mmmx\fR" 4
14872 .IX Item "-mmmx"
14873 .PD 0
14874 .IP "\fB\-msse\fR" 4
14875 .IX Item "-msse"
14876 .IP "\fB\-msse2\fR" 4
14877 .IX Item "-msse2"
14878 .IP "\fB\-msse3\fR" 4
14879 .IX Item "-msse3"
14880 .IP "\fB\-mssse3\fR" 4
14881 .IX Item "-mssse3"
14882 .IP "\fB\-msse4\fR" 4
14883 .IX Item "-msse4"
14884 .IP "\fB\-msse4a\fR" 4
14885 .IX Item "-msse4a"
14886 .IP "\fB\-msse4.1\fR" 4
14887 .IX Item "-msse4.1"
14888 .IP "\fB\-msse4.2\fR" 4
14889 .IX Item "-msse4.2"
14890 .IP "\fB\-mavx\fR" 4
14891 .IX Item "-mavx"
14892 .IP "\fB\-mavx2\fR" 4
14893 .IX Item "-mavx2"
14894 .IP "\fB\-mavx512f\fR" 4
14895 .IX Item "-mavx512f"
14896 .IP "\fB\-mavx512pf\fR" 4
14897 .IX Item "-mavx512pf"
14898 .IP "\fB\-mavx512er\fR" 4
14899 .IX Item "-mavx512er"
14900 .IP "\fB\-mavx512cd\fR" 4
14901 .IX Item "-mavx512cd"
14902 .IP "\fB\-msha\fR" 4
14903 .IX Item "-msha"
14904 .IP "\fB\-maes\fR" 4
14905 .IX Item "-maes"
14906 .IP "\fB\-mpclmul\fR" 4
14907 .IX Item "-mpclmul"
14908 .IP "\fB\-mclfushopt\fR" 4
14909 .IX Item "-mclfushopt"
14910 .IP "\fB\-mfsgsbase\fR" 4
14911 .IX Item "-mfsgsbase"
14912 .IP "\fB\-mrdrnd\fR" 4
14913 .IX Item "-mrdrnd"
14914 .IP "\fB\-mf16c\fR" 4
14915 .IX Item "-mf16c"
14916 .IP "\fB\-mfma\fR" 4
14917 .IX Item "-mfma"
14918 .IP "\fB\-mfma4\fR" 4
14919 .IX Item "-mfma4"
14920 .IP "\fB\-mno\-fma4\fR" 4
14921 .IX Item "-mno-fma4"
14922 .IP "\fB\-mprefetchwt1\fR" 4
14923 .IX Item "-mprefetchwt1"
14924 .IP "\fB\-mxop\fR" 4
14925 .IX Item "-mxop"
14926 .IP "\fB\-mlwp\fR" 4
14927 .IX Item "-mlwp"
14928 .IP "\fB\-m3dnow\fR" 4
14929 .IX Item "-m3dnow"
14930 .IP "\fB\-mpopcnt\fR" 4
14931 .IX Item "-mpopcnt"
14932 .IP "\fB\-mabm\fR" 4
14933 .IX Item "-mabm"
14934 .IP "\fB\-mbmi\fR" 4
14935 .IX Item "-mbmi"
14936 .IP "\fB\-mbmi2\fR" 4
14937 .IX Item "-mbmi2"
14938 .IP "\fB\-mlzcnt\fR" 4
14939 .IX Item "-mlzcnt"
14940 .IP "\fB\-mfxsr\fR" 4
14941 .IX Item "-mfxsr"
14942 .IP "\fB\-mxsave\fR" 4
14943 .IX Item "-mxsave"
14944 .IP "\fB\-mxsaveopt\fR" 4
14945 .IX Item "-mxsaveopt"
14946 .IP "\fB\-mxsavec\fR" 4
14947 .IX Item "-mxsavec"
14948 .IP "\fB\-mxsaves\fR" 4
14949 .IX Item "-mxsaves"
14950 .IP "\fB\-mrtm\fR" 4
14951 .IX Item "-mrtm"
14952 .IP "\fB\-mtbm\fR" 4
14953 .IX Item "-mtbm"
14954 .IP "\fB\-mmpx\fR" 4
14955 .IX Item "-mmpx"
14956 .PD
14957 These switches enable the use of instructions in the \s-1MMX\s0, \s-1SSE\s0,
14958 \&\s-1SSE2\s0, \s-1SSE3\s0, \s-1SSSE3\s0, \s-1SSE4\s0.1, \s-1AVX\s0, \s-1AVX2\s0, \s-1AVX512F\s0, \s-1AVX512PF\s0, \s-1AVX512ER\s0, \s-1AVX512CD\s0,
14959 \&\s-1SHA\s0, \s-1AES\s0, \s-1PCLMUL\s0, \s-1FSGSBASE\s0, \s-1RDRND\s0, F16C, \s-1FMA\s0, \s-1SSE4A\s0, \s-1FMA4\s0, \s-1XOP\s0, \s-1LWP\s0, \s-1ABM\s0,
14960 \&\s-1BMI\s0, \s-1BMI2\s0, \s-1FXSR\s0, \s-1XSAVE\s0, \s-1XSAVEOPT\s0, \s-1LZCNT\s0, \s-1RTM\s0, \s-1MPX\s0 or 3DNow!
14961 extended instruction sets.  Each has a corresponding \fB\-mno\-\fR option
14962 to disable use of these instructions.
14963 .Sp
14964 These extensions are also available as built-in functions: see
14965 \&\fBX86 Built-in Functions\fR, for details of the functions enabled and
14966 disabled by these switches.
14967 .Sp
14968 To generate \s-1SSE/SSE2\s0 instructions automatically from floating-point
14969 code (as opposed to 387 instructions), see \fB\-mfpmath=sse\fR.
14970 .Sp
14971 \&\s-1GCC\s0 depresses SSEx instructions when \fB\-mavx\fR is used. Instead, it
14972 generates new \s-1AVX\s0 instructions or \s-1AVX\s0 equivalence for all SSEx instructions
14973 when needed.
14974 .Sp
14975 These options enable \s-1GCC\s0 to use these extended instructions in
14976 generated code, even without \fB\-mfpmath=sse\fR.  Applications that
14977 perform run-time \s-1CPU\s0 detection must compile separate files for each
14978 supported architecture, using the appropriate flags.  In particular,
14979 the file containing the \s-1CPU\s0 detection code should be compiled without
14980 these options.
14981 .IP "\fB\-mdump\-tune\-features\fR" 4
14982 .IX Item "-mdump-tune-features"
14983 This option instructs \s-1GCC\s0 to dump the names of the x86 performance 
14984 tuning features and default settings. The names can be used in 
14985 \&\fB\-mtune\-ctrl=\fR\fIfeature-list\fR.
14986 .IP "\fB\-mtune\-ctrl=\fR\fIfeature-list\fR" 4
14987 .IX Item "-mtune-ctrl=feature-list"
14988 This option is used to do fine grain control of x86 code generation features.
14989 \&\fIfeature-list\fR is a comma separated list of \fIfeature\fR names. See also
14990 \&\fB\-mdump\-tune\-features\fR. When specified, the \fIfeature\fR is turned
14991 on if it is not preceded with \fB^\fR, otherwise, it is turned off. 
14992 \&\fB\-mtune\-ctrl=\fR\fIfeature-list\fR is intended to be used by \s-1GCC\s0
14993 developers. Using it may lead to code paths not covered by testing and can
14994 potentially result in compiler ICEs or runtime errors.
14995 .IP "\fB\-mno\-default\fR" 4
14996 .IX Item "-mno-default"
14997 This option instructs \s-1GCC\s0 to turn off all tunable features. See also 
14998 \&\fB\-mtune\-ctrl=\fR\fIfeature-list\fR and \fB\-mdump\-tune\-features\fR.
14999 .IP "\fB\-mcld\fR" 4
15000 .IX Item "-mcld"
15001 This option instructs \s-1GCC\s0 to emit a \f(CW\*(C`cld\*(C'\fR instruction in the prologue
15002 of functions that use string instructions.  String instructions depend on
15003 the \s-1DF\s0 flag to select between autoincrement or autodecrement mode.  While the
15004 \&\s-1ABI\s0 specifies the \s-1DF\s0 flag to be cleared on function entry, some operating
15005 systems violate this specification by not clearing the \s-1DF\s0 flag in their
15006 exception dispatchers.  The exception handler can be invoked with the \s-1DF\s0 flag
15007 set, which leads to wrong direction mode when string instructions are used.
15008 This option can be enabled by default on 32\-bit x86 targets by configuring
15009 \&\s-1GCC\s0 with the \fB\-\-enable\-cld\fR configure option.  Generation of \f(CW\*(C`cld\*(C'\fR
15010 instructions can be suppressed with the \fB\-mno\-cld\fR compiler option
15011 in this case.
15012 .IP "\fB\-mvzeroupper\fR" 4
15013 .IX Item "-mvzeroupper"
15014 This option instructs \s-1GCC\s0 to emit a \f(CW\*(C`vzeroupper\*(C'\fR instruction
15015 before a transfer of control flow out of the function to minimize
15016 the \s-1AVX\s0 to \s-1SSE\s0 transition penalty as well as remove unnecessary \f(CW\*(C`zeroupper\*(C'\fR
15017 intrinsics.
15018 .IP "\fB\-mprefer\-avx128\fR" 4
15019 .IX Item "-mprefer-avx128"
15020 This option instructs \s-1GCC\s0 to use 128\-bit \s-1AVX\s0 instructions instead of
15021 256\-bit \s-1AVX\s0 instructions in the auto-vectorizer.
15022 .IP "\fB\-mcx16\fR" 4
15023 .IX Item "-mcx16"
15024 This option enables \s-1GCC\s0 to generate \f(CW\*(C`CMPXCHG16B\*(C'\fR instructions.
15025 \&\f(CW\*(C`CMPXCHG16B\*(C'\fR allows for atomic operations on 128\-bit double quadword
15026 (or oword) data types.  
15027 This is useful for high-resolution counters that can be updated
15028 by multiple processors (or cores).  This instruction is generated as part of
15029 atomic built-in functions: see \fB_\|_sync Builtins\fR or
15030 \&\fB_\|_atomic Builtins\fR for details.
15031 .IP "\fB\-msahf\fR" 4
15032 .IX Item "-msahf"
15033 This option enables generation of \f(CW\*(C`SAHF\*(C'\fR instructions in 64\-bit code.
15034 Early Intel Pentium 4 CPUs with Intel 64 support,
15035 prior to the introduction of Pentium 4 G1 step in December 2005,
15036 lacked the \f(CW\*(C`LAHF\*(C'\fR and \f(CW\*(C`SAHF\*(C'\fR instructions
15037 which are supported by \s-1AMD64\s0.
15038 These are load and store instructions, respectively, for certain status flags.
15039 In 64\-bit mode, the \f(CW\*(C`SAHF\*(C'\fR instruction is used to optimize \f(CW\*(C`fmod\*(C'\fR,
15040 \&\f(CW\*(C`drem\*(C'\fR, and \f(CW\*(C`remainder\*(C'\fR built-in functions;
15041 see \fBOther Builtins\fR for details.
15042 .IP "\fB\-mmovbe\fR" 4
15043 .IX Item "-mmovbe"
15044 This option enables use of the \f(CW\*(C`movbe\*(C'\fR instruction to implement
15045 \&\f(CW\*(C`_\|_builtin_bswap32\*(C'\fR and \f(CW\*(C`_\|_builtin_bswap64\*(C'\fR.
15046 .IP "\fB\-mcrc32\fR" 4
15047 .IX Item "-mcrc32"
15048 This option enables built-in functions \f(CW\*(C`_\|_builtin_ia32_crc32qi\*(C'\fR,
15049 \&\f(CW\*(C`_\|_builtin_ia32_crc32hi\*(C'\fR, \f(CW\*(C`_\|_builtin_ia32_crc32si\*(C'\fR and
15050 \&\f(CW\*(C`_\|_builtin_ia32_crc32di\*(C'\fR to generate the \f(CW\*(C`crc32\*(C'\fR machine instruction.
15051 .IP "\fB\-mrecip\fR" 4
15052 .IX Item "-mrecip"
15053 This option enables use of \f(CW\*(C`RCPSS\*(C'\fR and \f(CW\*(C`RSQRTSS\*(C'\fR instructions
15054 (and their vectorized variants \f(CW\*(C`RCPPS\*(C'\fR and \f(CW\*(C`RSQRTPS\*(C'\fR)
15055 with an additional Newton-Raphson step
15056 to increase precision instead of \f(CW\*(C`DIVSS\*(C'\fR and \f(CW\*(C`SQRTSS\*(C'\fR
15057 (and their vectorized
15058 variants) for single-precision floating-point arguments.  These instructions
15059 are generated only when \fB\-funsafe\-math\-optimizations\fR is enabled
15060 together with \fB\-finite\-math\-only\fR and \fB\-fno\-trapping\-math\fR.
15061 Note that while the throughput of the sequence is higher than the throughput
15062 of the non-reciprocal instruction, the precision of the sequence can be
15063 decreased by up to 2 ulp (i.e. the inverse of 1.0 equals 0.99999994).
15064 .Sp
15065 Note that \s-1GCC\s0 implements \f(CW\*(C`1.0f/sqrtf(\f(CIx\f(CW)\*(C'\fR in terms of \f(CW\*(C`RSQRTSS\*(C'\fR
15066 (or \f(CW\*(C`RSQRTPS\*(C'\fR) already with \fB\-ffast\-math\fR (or the above option
15067 combination), and doesn't need \fB\-mrecip\fR.
15068 .Sp
15069 Also note that \s-1GCC\s0 emits the above sequence with additional Newton-Raphson step
15070 for vectorized single-float division and vectorized \f(CW\*(C`sqrtf(\f(CIx\f(CW)\*(C'\fR
15071 already with \fB\-ffast\-math\fR (or the above option combination), and
15072 doesn't need \fB\-mrecip\fR.
15073 .IP "\fB\-mrecip=\fR\fIopt\fR" 4
15074 .IX Item "-mrecip=opt"
15075 This option controls which reciprocal estimate instructions
15076 may be used.  \fIopt\fR is a comma-separated list of options, which may
15077 be preceded by a \fB!\fR to invert the option:
15078 .RS 4
15079 .IP "\fBall\fR" 4
15080 .IX Item "all"
15081 Enable all estimate instructions.
15082 .IP "\fBdefault\fR" 4
15083 .IX Item "default"
15084 Enable the default instructions, equivalent to \fB\-mrecip\fR.
15085 .IP "\fBnone\fR" 4
15086 .IX Item "none"
15087 Disable all estimate instructions, equivalent to \fB\-mno\-recip\fR.
15088 .IP "\fBdiv\fR" 4
15089 .IX Item "div"
15090 Enable the approximation for scalar division.
15091 .IP "\fBvec-div\fR" 4
15092 .IX Item "vec-div"
15093 Enable the approximation for vectorized division.
15094 .IP "\fBsqrt\fR" 4
15095 .IX Item "sqrt"
15096 Enable the approximation for scalar square root.
15097 .IP "\fBvec-sqrt\fR" 4
15098 .IX Item "vec-sqrt"
15099 Enable the approximation for vectorized square root.
15100 .RE
15101 .RS 4
15102 .Sp
15103 So, for example, \fB\-mrecip=all,!sqrt\fR enables
15104 all of the reciprocal approximations, except for square root.
15105 .RE
15106 .IP "\fB\-mveclibabi=\fR\fItype\fR" 4
15107 .IX Item "-mveclibabi=type"
15108 Specifies the \s-1ABI\s0 type to use for vectorizing intrinsics using an
15109 external library.  Supported values for \fItype\fR are \fBsvml\fR 
15110 for the Intel short
15111 vector math library and \fBacml\fR for the \s-1AMD\s0 math core library.
15112 To use this option, both \fB\-ftree\-vectorize\fR and
15113 \&\fB\-funsafe\-math\-optimizations\fR have to be enabled, and an \s-1SVML\s0 or \s-1ACML\s0 
15114 ABI-compatible library must be specified at link time.
15115 .Sp
15116 \&\s-1GCC\s0 currently emits calls to \f(CW\*(C`vmldExp2\*(C'\fR,
15117 \&\f(CW\*(C`vmldLn2\*(C'\fR, \f(CW\*(C`vmldLog102\*(C'\fR, \f(CW\*(C`vmldLog102\*(C'\fR, \f(CW\*(C`vmldPow2\*(C'\fR,
15118 \&\f(CW\*(C`vmldTanh2\*(C'\fR, \f(CW\*(C`vmldTan2\*(C'\fR, \f(CW\*(C`vmldAtan2\*(C'\fR, \f(CW\*(C`vmldAtanh2\*(C'\fR,
15119 \&\f(CW\*(C`vmldCbrt2\*(C'\fR, \f(CW\*(C`vmldSinh2\*(C'\fR, \f(CW\*(C`vmldSin2\*(C'\fR, \f(CW\*(C`vmldAsinh2\*(C'\fR,
15120 \&\f(CW\*(C`vmldAsin2\*(C'\fR, \f(CW\*(C`vmldCosh2\*(C'\fR, \f(CW\*(C`vmldCos2\*(C'\fR, \f(CW\*(C`vmldAcosh2\*(C'\fR,
15121 \&\f(CW\*(C`vmldAcos2\*(C'\fR, \f(CW\*(C`vmlsExp4\*(C'\fR, \f(CW\*(C`vmlsLn4\*(C'\fR, \f(CW\*(C`vmlsLog104\*(C'\fR,
15122 \&\f(CW\*(C`vmlsLog104\*(C'\fR, \f(CW\*(C`vmlsPow4\*(C'\fR, \f(CW\*(C`vmlsTanh4\*(C'\fR, \f(CW\*(C`vmlsTan4\*(C'\fR,
15123 \&\f(CW\*(C`vmlsAtan4\*(C'\fR, \f(CW\*(C`vmlsAtanh4\*(C'\fR, \f(CW\*(C`vmlsCbrt4\*(C'\fR, \f(CW\*(C`vmlsSinh4\*(C'\fR,
15124 \&\f(CW\*(C`vmlsSin4\*(C'\fR, \f(CW\*(C`vmlsAsinh4\*(C'\fR, \f(CW\*(C`vmlsAsin4\*(C'\fR, \f(CW\*(C`vmlsCosh4\*(C'\fR,
15125 \&\f(CW\*(C`vmlsCos4\*(C'\fR, \f(CW\*(C`vmlsAcosh4\*(C'\fR and \f(CW\*(C`vmlsAcos4\*(C'\fR for corresponding
15126 function type when \fB\-mveclibabi=svml\fR is used, and \f(CW\*(C`_\|_vrd2_sin\*(C'\fR,
15127 \&\f(CW\*(C`_\|_vrd2_cos\*(C'\fR, \f(CW\*(C`_\|_vrd2_exp\*(C'\fR, \f(CW\*(C`_\|_vrd2_log\*(C'\fR, \f(CW\*(C`_\|_vrd2_log2\*(C'\fR,
15128 \&\f(CW\*(C`_\|_vrd2_log10\*(C'\fR, \f(CW\*(C`_\|_vrs4_sinf\*(C'\fR, \f(CW\*(C`_\|_vrs4_cosf\*(C'\fR,
15129 \&\f(CW\*(C`_\|_vrs4_expf\*(C'\fR, \f(CW\*(C`_\|_vrs4_logf\*(C'\fR, \f(CW\*(C`_\|_vrs4_log2f\*(C'\fR,
15130 \&\f(CW\*(C`_\|_vrs4_log10f\*(C'\fR and \f(CW\*(C`_\|_vrs4_powf\*(C'\fR for the corresponding function type
15131 when \fB\-mveclibabi=acml\fR is used.
15132 .IP "\fB\-mabi=\fR\fIname\fR" 4
15133 .IX Item "-mabi=name"
15134 Generate code for the specified calling convention.  Permissible values
15135 are \fBsysv\fR for the \s-1ABI\s0 used on GNU/Linux and other systems, and
15136 \&\fBms\fR for the Microsoft \s-1ABI\s0.  The default is to use the Microsoft
15137 \&\s-1ABI\s0 when targeting Microsoft Windows and the SysV \s-1ABI\s0 on all other systems.
15138 You can control this behavior for specific functions by
15139 using the function attributes \f(CW\*(C`ms_abi\*(C'\fR and \f(CW\*(C`sysv_abi\*(C'\fR.
15140 .IP "\fB\-mtls\-dialect=\fR\fItype\fR" 4
15141 .IX Item "-mtls-dialect=type"
15142 Generate code to access thread-local storage using the \fBgnu\fR or
15143 \&\fBgnu2\fR conventions.  \fBgnu\fR is the conservative default;
15144 \&\fBgnu2\fR is more efficient, but it may add compile\- and run-time
15145 requirements that cannot be satisfied on all systems.
15146 .IP "\fB\-mpush\-args\fR" 4
15147 .IX Item "-mpush-args"
15148 .PD 0
15149 .IP "\fB\-mno\-push\-args\fR" 4
15150 .IX Item "-mno-push-args"
15151 .PD
15152 Use \s-1PUSH\s0 operations to store outgoing parameters.  This method is shorter
15153 and usually equally fast as method using \s-1SUB/MOV\s0 operations and is enabled
15154 by default.  In some cases disabling it may improve performance because of
15155 improved scheduling and reduced dependencies.
15156 .IP "\fB\-maccumulate\-outgoing\-args\fR" 4
15157 .IX Item "-maccumulate-outgoing-args"
15158 If enabled, the maximum amount of space required for outgoing arguments is
15159 computed in the function prologue.  This is faster on most modern CPUs
15160 because of reduced dependencies, improved scheduling and reduced stack usage
15161 when the preferred stack boundary is not equal to 2.  The drawback is a notable
15162 increase in code size.  This switch implies \fB\-mno\-push\-args\fR.
15163 .IP "\fB\-mthreads\fR" 4
15164 .IX Item "-mthreads"
15165 Support thread-safe exception handling on MinGW.  Programs that rely
15166 on thread-safe exception handling must compile and link all code with the
15167 \&\fB\-mthreads\fR option.  When compiling, \fB\-mthreads\fR defines
15168 \&\fB\-D_MT\fR; when linking, it links in a special thread helper library
15169 \&\fB\-lmingwthrd\fR which cleans up per-thread exception-handling data.
15170 .IP "\fB\-mno\-align\-stringops\fR" 4
15171 .IX Item "-mno-align-stringops"
15172 Do not align the destination of inlined string operations.  This switch reduces
15173 code size and improves performance in case the destination is already aligned,
15174 but \s-1GCC\s0 doesn't know about it.
15175 .IP "\fB\-minline\-all\-stringops\fR" 4
15176 .IX Item "-minline-all-stringops"
15177 By default \s-1GCC\s0 inlines string operations only when the destination is 
15178 known to be aligned to least a 4\-byte boundary.  
15179 This enables more inlining and increases code
15180 size, but may improve performance of code that depends on fast
15181 \&\f(CW\*(C`memcpy\*(C'\fR, \f(CW\*(C`strlen\*(C'\fR,
15182 and \f(CW\*(C`memset\*(C'\fR for short lengths.
15183 .IP "\fB\-minline\-stringops\-dynamically\fR" 4
15184 .IX Item "-minline-stringops-dynamically"
15185 For string operations of unknown size, use run-time checks with
15186 inline code for small blocks and a library call for large blocks.
15187 .IP "\fB\-mstringop\-strategy=\fR\fIalg\fR" 4
15188 .IX Item "-mstringop-strategy=alg"
15189 Override the internal decision heuristic for the particular algorithm to use
15190 for inlining string operations.  The allowed values for \fIalg\fR are:
15191 .RS 4
15192 .IP "\fBrep_byte\fR" 4
15193 .IX Item "rep_byte"
15194 .PD 0
15195 .IP "\fBrep_4byte\fR" 4
15196 .IX Item "rep_4byte"
15197 .IP "\fBrep_8byte\fR" 4
15198 .IX Item "rep_8byte"
15199 .PD
15200 Expand using i386 \f(CW\*(C`rep\*(C'\fR prefix of the specified size.
15201 .IP "\fBbyte_loop\fR" 4
15202 .IX Item "byte_loop"
15203 .PD 0
15204 .IP "\fBloop\fR" 4
15205 .IX Item "loop"
15206 .IP "\fBunrolled_loop\fR" 4
15207 .IX Item "unrolled_loop"
15208 .PD
15209 Expand into an inline loop.
15210 .IP "\fBlibcall\fR" 4
15211 .IX Item "libcall"
15212 Always use a library call.
15213 .RE
15214 .RS 4
15215 .RE
15216 .IP "\fB\-mmemcpy\-strategy=\fR\fIstrategy\fR" 4
15217 .IX Item "-mmemcpy-strategy=strategy"
15218 Override the internal decision heuristic to decide if \f(CW\*(C`_\|_builtin_memcpy\*(C'\fR
15219 should be inlined and what inline algorithm to use when the expected size
15220 of the copy operation is known. \fIstrategy\fR 
15221 is a comma-separated list of \fIalg\fR:\fImax_size\fR:\fIdest_align\fR triplets. 
15222 \&\fIalg\fR is specified in \fB\-mstringop\-strategy\fR, \fImax_size\fR specifies
15223 the max byte size with which inline algorithm \fIalg\fR is allowed.  For the last
15224 triplet, the \fImax_size\fR must be \f(CW\*(C`\-1\*(C'\fR. The \fImax_size\fR of the triplets
15225 in the list must be specified in increasing order.  The minimal byte size for 
15226 \&\fIalg\fR is \f(CW0\fR for the first triplet and \f(CW\*(C`\f(CImax_size\f(CW + 1\*(C'\fR of the 
15227 preceding range.
15228 .IP "\fB\-mmemset\-strategy=\fR\fIstrategy\fR" 4
15229 .IX Item "-mmemset-strategy=strategy"
15230 The option is similar to \fB\-mmemcpy\-strategy=\fR except that it is to control
15231 \&\f(CW\*(C`_\|_builtin_memset\*(C'\fR expansion.
15232 .IP "\fB\-momit\-leaf\-frame\-pointer\fR" 4
15233 .IX Item "-momit-leaf-frame-pointer"
15234 Don't keep the frame pointer in a register for leaf functions.  This
15235 avoids the instructions to save, set up, and restore frame pointers and
15236 makes an extra register available in leaf functions.  The option
15237 \&\fB\-fomit\-leaf\-frame\-pointer\fR removes the frame pointer for leaf functions,
15238 which might make debugging harder.
15239 .IP "\fB\-mtls\-direct\-seg\-refs\fR" 4
15240 .IX Item "-mtls-direct-seg-refs"
15241 .PD 0
15242 .IP "\fB\-mno\-tls\-direct\-seg\-refs\fR" 4
15243 .IX Item "-mno-tls-direct-seg-refs"
15244 .PD
15245 Controls whether \s-1TLS\s0 variables may be accessed with offsets from the
15246 \&\s-1TLS\s0 segment register (\f(CW%gs\fR for 32\-bit, \f(CW%fs\fR for 64\-bit),
15247 or whether the thread base pointer must be added.  Whether or not this
15248 is valid depends on the operating system, and whether it maps the
15249 segment to cover the entire \s-1TLS\s0 area.
15250 .Sp
15251 For systems that use the \s-1GNU\s0 C Library, the default is on.
15252 .IP "\fB\-msse2avx\fR" 4
15253 .IX Item "-msse2avx"
15254 .PD 0
15255 .IP "\fB\-mno\-sse2avx\fR" 4
15256 .IX Item "-mno-sse2avx"
15257 .PD
15258 Specify that the assembler should encode \s-1SSE\s0 instructions with \s-1VEX\s0
15259 prefix.  The option \fB\-mavx\fR turns this on by default.
15260 .IP "\fB\-mfentry\fR" 4
15261 .IX Item "-mfentry"
15262 .PD 0
15263 .IP "\fB\-mno\-fentry\fR" 4
15264 .IX Item "-mno-fentry"
15265 .PD
15266 If profiling is active (\fB\-pg\fR), put the profiling
15267 counter call before the prologue.
15268 Note: On x86 architectures the attribute \f(CW\*(C`ms_hook_prologue\*(C'\fR
15269 isn't possible at the moment for \fB\-mfentry\fR and \fB\-pg\fR.
15270 .IP "\fB\-mrecord\-mcount\fR" 4
15271 .IX Item "-mrecord-mcount"
15272 .PD 0
15273 .IP "\fB\-mno\-record\-mcount\fR" 4
15274 .IX Item "-mno-record-mcount"
15275 .PD
15276 If profiling is active (\fB\-pg\fR), generate a _\|_mcount_loc section
15277 that contains pointers to each profiling call. This is useful for
15278 automatically patching and out calls.
15279 .IP "\fB\-mnop\-mcount\fR" 4
15280 .IX Item "-mnop-mcount"
15281 .PD 0
15282 .IP "\fB\-mno\-nop\-mcount\fR" 4
15283 .IX Item "-mno-nop-mcount"
15284 .PD
15285 If profiling is active (\fB\-pg\fR), generate the calls to
15286 the profiling functions as nops. This is useful when they
15287 should be patched in later dynamically. This is likely only
15288 useful together with \fB\-mrecord\-mcount\fR.
15289 .IP "\fB\-mskip\-rax\-setup\fR" 4
15290 .IX Item "-mskip-rax-setup"
15291 .PD 0
15292 .IP "\fB\-mno\-skip\-rax\-setup\fR" 4
15293 .IX Item "-mno-skip-rax-setup"
15294 .PD
15295 When generating code for the x86\-64 architecture with \s-1SSE\s0 extensions
15296 disabled, \fB\-skip\-rax\-setup\fR can be used to skip setting up \s-1RAX\s0
15297 register when there are no variable arguments passed in vector registers.
15298 .Sp
15299 \&\fBWarning:\fR Since \s-1RAX\s0 register is used to avoid unnecessarily
15300 saving vector registers on stack when passing variable arguments, the
15301 impacts of this option are callees may waste some stack space,
15302 misbehave or jump to a random location.  \s-1GCC\s0 4.4 or newer don't have
15303 those issues, regardless the \s-1RAX\s0 register value.
15304 .IP "\fB\-m8bit\-idiv\fR" 4
15305 .IX Item "-m8bit-idiv"
15306 .PD 0
15307 .IP "\fB\-mno\-8bit\-idiv\fR" 4
15308 .IX Item "-mno-8bit-idiv"
15309 .PD
15310 On some processors, like Intel Atom, 8\-bit unsigned integer divide is
15311 much faster than 32\-bit/64\-bit integer divide.  This option generates a
15312 run-time check.  If both dividend and divisor are within range of 0
15313 to 255, 8\-bit unsigned integer divide is used instead of
15314 32\-bit/64\-bit integer divide.
15315 .IP "\fB\-mavx256\-split\-unaligned\-load\fR" 4
15316 .IX Item "-mavx256-split-unaligned-load"
15317 .PD 0
15318 .IP "\fB\-mavx256\-split\-unaligned\-store\fR" 4
15319 .IX Item "-mavx256-split-unaligned-store"
15320 .PD
15321 Split 32\-byte \s-1AVX\s0 unaligned load and store.
15322 .IP "\fB\-mstack\-protector\-guard=\fR\fIguard\fR" 4
15323 .IX Item "-mstack-protector-guard=guard"
15324 Generate stack protection code using canary at \fIguard\fR.  Supported
15325 locations are \fBglobal\fR for global canary or \fBtls\fR for per-thread
15326 canary in the \s-1TLS\s0 block (the default).  This option has effect only when
15327 \&\fB\-fstack\-protector\fR or \fB\-fstack\-protector\-all\fR is specified.
15328 .PP
15329 These \fB\-m\fR switches are supported in addition to the above
15330 on x86\-64 processors in 64\-bit environments.
15331 .IP "\fB\-m32\fR" 4
15332 .IX Item "-m32"
15333 .PD 0
15334 .IP "\fB\-m64\fR" 4
15335 .IX Item "-m64"
15336 .IP "\fB\-mx32\fR" 4
15337 .IX Item "-mx32"
15338 .IP "\fB\-m16\fR" 4
15339 .IX Item "-m16"
15340 .PD
15341 Generate code for a 16\-bit, 32\-bit or 64\-bit environment.
15342 The \fB\-m32\fR option sets \f(CW\*(C`int\*(C'\fR, \f(CW\*(C`long\*(C'\fR, and pointer types
15343 to 32 bits, and
15344 generates code that runs on any i386 system.
15345 .Sp
15346 The \fB\-m64\fR option sets \f(CW\*(C`int\*(C'\fR to 32 bits and \f(CW\*(C`long\*(C'\fR and pointer
15347 types to 64 bits, and generates code for the x86\-64 architecture.
15348 For Darwin only the \fB\-m64\fR option also turns off the \fB\-fno\-pic\fR
15349 and \fB\-mdynamic\-no\-pic\fR options.
15350 .Sp
15351 The \fB\-mx32\fR option sets \f(CW\*(C`int\*(C'\fR, \f(CW\*(C`long\*(C'\fR, and pointer types
15352 to 32 bits, and
15353 generates code for the x86\-64 architecture.
15354 .Sp
15355 The \fB\-m16\fR option is the same as \fB\-m32\fR, except for that
15356 it outputs the \f(CW\*(C`.code16gcc\*(C'\fR assembly directive at the beginning of
15357 the assembly output so that the binary can run in 16\-bit mode.
15358 .IP "\fB\-mno\-red\-zone\fR" 4
15359 .IX Item "-mno-red-zone"
15360 Do not use a so-called \*(L"red zone\*(R" for x86\-64 code.  The red zone is mandated
15361 by the x86\-64 \s-1ABI\s0; it is a 128\-byte area beyond the location of the
15362 stack pointer that is not modified by signal or interrupt handlers
15363 and therefore can be used for temporary data without adjusting the stack
15364 pointer.  The flag \fB\-mno\-red\-zone\fR disables this red zone.
15365 .IP "\fB\-mcmodel=small\fR" 4
15366 .IX Item "-mcmodel=small"
15367 Generate code for the small code model: the program and its symbols must
15368 be linked in the lower 2 \s-1GB\s0 of the address space.  Pointers are 64 bits.
15369 Programs can be statically or dynamically linked.  This is the default
15370 code model.
15371 .IP "\fB\-mcmodel=kernel\fR" 4
15372 .IX Item "-mcmodel=kernel"
15373 Generate code for the kernel code model.  The kernel runs in the
15374 negative 2 \s-1GB\s0 of the address space.
15375 This model has to be used for Linux kernel code.
15376 .IP "\fB\-mcmodel=medium\fR" 4
15377 .IX Item "-mcmodel=medium"
15378 Generate code for the medium model: the program is linked in the lower 2
15379 \&\s-1GB\s0 of the address space.  Small symbols are also placed there.  Symbols
15380 with sizes larger than \fB\-mlarge\-data\-threshold\fR are put into
15381 large data or \s-1BSS\s0 sections and can be located above 2GB.  Programs can
15382 be statically or dynamically linked.
15383 .IP "\fB\-mcmodel=large\fR" 4
15384 .IX Item "-mcmodel=large"
15385 Generate code for the large model.  This model makes no assumptions
15386 about addresses and sizes of sections.
15387 .IP "\fB\-maddress\-mode=long\fR" 4
15388 .IX Item "-maddress-mode=long"
15389 Generate code for long address mode.  This is only supported for 64\-bit
15390 and x32 environments.  It is the default address mode for 64\-bit
15391 environments.
15392 .IP "\fB\-maddress\-mode=short\fR" 4
15393 .IX Item "-maddress-mode=short"
15394 Generate code for short address mode.  This is only supported for 32\-bit
15395 and x32 environments.  It is the default address mode for 32\-bit and
15396 x32 environments.
15397 .PP
15398 \fIi386 and x86\-64 Windows Options\fR
15399 .IX Subsection "i386 and x86-64 Windows Options"
15400 .PP
15401 These additional options are available for Microsoft Windows targets:
15402 .IP "\fB\-mconsole\fR" 4
15403 .IX Item "-mconsole"
15404 This option
15405 specifies that a console application is to be generated, by
15406 instructing the linker to set the \s-1PE\s0 header subsystem type
15407 required for console applications.
15408 This option is available for Cygwin and MinGW targets and is
15409 enabled by default on those targets.
15410 .IP "\fB\-mdll\fR" 4
15411 .IX Item "-mdll"
15412 This option is available for Cygwin and MinGW targets.  It
15413 specifies that a DLL\-\-\-a dynamic link library\-\-\-is to be
15414 generated, enabling the selection of the required runtime
15415 startup object and entry point.
15416 .IP "\fB\-mnop\-fun\-dllimport\fR" 4
15417 .IX Item "-mnop-fun-dllimport"
15418 This option is available for Cygwin and MinGW targets.  It
15419 specifies that the \f(CW\*(C`dllimport\*(C'\fR attribute should be ignored.
15420 .IP "\fB\-mthread\fR" 4
15421 .IX Item "-mthread"
15422 This option is available for MinGW targets. It specifies
15423 that MinGW-specific thread support is to be used.
15424 .IP "\fB\-municode\fR" 4
15425 .IX Item "-municode"
15426 This option is available for MinGW\-w64 targets.  It causes
15427 the \f(CW\*(C`UNICODE\*(C'\fR preprocessor macro to be predefined, and
15428 chooses Unicode-capable runtime startup code.
15429 .IP "\fB\-mwin32\fR" 4
15430 .IX Item "-mwin32"
15431 This option is available for Cygwin and MinGW targets.  It
15432 specifies that the typical Microsoft Windows predefined macros are to
15433 be set in the pre-processor, but does not influence the choice
15434 of runtime library/startup code.
15435 .IP "\fB\-mwindows\fR" 4
15436 .IX Item "-mwindows"
15437 This option is available for Cygwin and MinGW targets.  It
15438 specifies that a \s-1GUI\s0 application is to be generated by
15439 instructing the linker to set the \s-1PE\s0 header subsystem type
15440 appropriately.
15441 .IP "\fB\-fno\-set\-stack\-executable\fR" 4
15442 .IX Item "-fno-set-stack-executable"
15443 This option is available for MinGW targets. It specifies that
15444 the executable flag for the stack used by nested functions isn't
15445 set. This is necessary for binaries running in kernel mode of
15446 Microsoft Windows, as there the User32 \s-1API\s0, which is used to set executable
15447 privileges, isn't available.
15448 .IP "\fB\-fwritable\-relocated\-rdata\fR" 4
15449 .IX Item "-fwritable-relocated-rdata"
15450 This option is available for MinGW and Cygwin targets.  It specifies
15451 that relocated-data in read-only section is put into .data
15452 section.  This is a necessary for older runtimes not supporting
15453 modification of .rdata sections for pseudo-relocation.
15454 .IP "\fB\-mpe\-aligned\-commons\fR" 4
15455 .IX Item "-mpe-aligned-commons"
15456 This option is available for Cygwin and MinGW targets.  It
15457 specifies that the \s-1GNU\s0 extension to the \s-1PE\s0 file format that
15458 permits the correct alignment of \s-1COMMON\s0 variables should be
15459 used when generating code.  It is enabled by default if
15460 \&\s-1GCC\s0 detects that the target assembler found during configuration
15461 supports the feature.
15462 .PP
15463 See also under \fBi386 and x86\-64 Options\fR for standard options.
15464 .PP
15465 \fI\s-1IA\-64\s0 Options\fR
15466 .IX Subsection "IA-64 Options"
15467 .PP
15468 These are the \fB\-m\fR options defined for the Intel \s-1IA\-64\s0 architecture.
15469 .IP "\fB\-mbig\-endian\fR" 4
15470 .IX Item "-mbig-endian"
15471 Generate code for a big-endian target.  This is the default for HP-UX.
15472 .IP "\fB\-mlittle\-endian\fR" 4
15473 .IX Item "-mlittle-endian"
15474 Generate code for a little-endian target.  This is the default for \s-1AIX5\s0
15475 and GNU/Linux.
15476 .IP "\fB\-mgnu\-as\fR" 4
15477 .IX Item "-mgnu-as"
15478 .PD 0
15479 .IP "\fB\-mno\-gnu\-as\fR" 4
15480 .IX Item "-mno-gnu-as"
15481 .PD
15482 Generate (or don't) code for the \s-1GNU\s0 assembler.  This is the default.
15483 .IP "\fB\-mgnu\-ld\fR" 4
15484 .IX Item "-mgnu-ld"
15485 .PD 0
15486 .IP "\fB\-mno\-gnu\-ld\fR" 4
15487 .IX Item "-mno-gnu-ld"
15488 .PD
15489 Generate (or don't) code for the \s-1GNU\s0 linker.  This is the default.
15490 .IP "\fB\-mno\-pic\fR" 4
15491 .IX Item "-mno-pic"
15492 Generate code that does not use a global pointer register.  The result
15493 is not position independent code, and violates the \s-1IA\-64\s0 \s-1ABI\s0.
15494 .IP "\fB\-mvolatile\-asm\-stop\fR" 4
15495 .IX Item "-mvolatile-asm-stop"
15496 .PD 0
15497 .IP "\fB\-mno\-volatile\-asm\-stop\fR" 4
15498 .IX Item "-mno-volatile-asm-stop"
15499 .PD
15500 Generate (or don't) a stop bit immediately before and after volatile asm
15501 statements.
15502 .IP "\fB\-mregister\-names\fR" 4
15503 .IX Item "-mregister-names"
15504 .PD 0
15505 .IP "\fB\-mno\-register\-names\fR" 4
15506 .IX Item "-mno-register-names"
15507 .PD
15508 Generate (or don't) \fBin\fR, \fBloc\fR, and \fBout\fR register names for
15509 the stacked registers.  This may make assembler output more readable.
15510 .IP "\fB\-mno\-sdata\fR" 4
15511 .IX Item "-mno-sdata"
15512 .PD 0
15513 .IP "\fB\-msdata\fR" 4
15514 .IX Item "-msdata"
15515 .PD
15516 Disable (or enable) optimizations that use the small data section.  This may
15517 be useful for working around optimizer bugs.
15518 .IP "\fB\-mconstant\-gp\fR" 4
15519 .IX Item "-mconstant-gp"
15520 Generate code that uses a single constant global pointer value.  This is
15521 useful when compiling kernel code.
15522 .IP "\fB\-mauto\-pic\fR" 4
15523 .IX Item "-mauto-pic"
15524 Generate code that is self-relocatable.  This implies \fB\-mconstant\-gp\fR.
15525 This is useful when compiling firmware code.
15526 .IP "\fB\-minline\-float\-divide\-min\-latency\fR" 4
15527 .IX Item "-minline-float-divide-min-latency"
15528 Generate code for inline divides of floating-point values
15529 using the minimum latency algorithm.
15530 .IP "\fB\-minline\-float\-divide\-max\-throughput\fR" 4
15531 .IX Item "-minline-float-divide-max-throughput"
15532 Generate code for inline divides of floating-point values
15533 using the maximum throughput algorithm.
15534 .IP "\fB\-mno\-inline\-float\-divide\fR" 4
15535 .IX Item "-mno-inline-float-divide"
15536 Do not generate inline code for divides of floating-point values.
15537 .IP "\fB\-minline\-int\-divide\-min\-latency\fR" 4
15538 .IX Item "-minline-int-divide-min-latency"
15539 Generate code for inline divides of integer values
15540 using the minimum latency algorithm.
15541 .IP "\fB\-minline\-int\-divide\-max\-throughput\fR" 4
15542 .IX Item "-minline-int-divide-max-throughput"
15543 Generate code for inline divides of integer values
15544 using the maximum throughput algorithm.
15545 .IP "\fB\-mno\-inline\-int\-divide\fR" 4
15546 .IX Item "-mno-inline-int-divide"
15547 Do not generate inline code for divides of integer values.
15548 .IP "\fB\-minline\-sqrt\-min\-latency\fR" 4
15549 .IX Item "-minline-sqrt-min-latency"
15550 Generate code for inline square roots
15551 using the minimum latency algorithm.
15552 .IP "\fB\-minline\-sqrt\-max\-throughput\fR" 4
15553 .IX Item "-minline-sqrt-max-throughput"
15554 Generate code for inline square roots
15555 using the maximum throughput algorithm.
15556 .IP "\fB\-mno\-inline\-sqrt\fR" 4
15557 .IX Item "-mno-inline-sqrt"
15558 Do not generate inline code for \f(CW\*(C`sqrt\*(C'\fR.
15559 .IP "\fB\-mfused\-madd\fR" 4
15560 .IX Item "-mfused-madd"
15561 .PD 0
15562 .IP "\fB\-mno\-fused\-madd\fR" 4
15563 .IX Item "-mno-fused-madd"
15564 .PD
15565 Do (don't) generate code that uses the fused multiply/add or multiply/subtract
15566 instructions.  The default is to use these instructions.
15567 .IP "\fB\-mno\-dwarf2\-asm\fR" 4
15568 .IX Item "-mno-dwarf2-asm"
15569 .PD 0
15570 .IP "\fB\-mdwarf2\-asm\fR" 4
15571 .IX Item "-mdwarf2-asm"
15572 .PD
15573 Don't (or do) generate assembler code for the \s-1DWARF\s0 2 line number debugging
15574 info.  This may be useful when not using the \s-1GNU\s0 assembler.
15575 .IP "\fB\-mearly\-stop\-bits\fR" 4
15576 .IX Item "-mearly-stop-bits"
15577 .PD 0
15578 .IP "\fB\-mno\-early\-stop\-bits\fR" 4
15579 .IX Item "-mno-early-stop-bits"
15580 .PD
15581 Allow stop bits to be placed earlier than immediately preceding the
15582 instruction that triggered the stop bit.  This can improve instruction
15583 scheduling, but does not always do so.
15584 .IP "\fB\-mfixed\-range=\fR\fIregister-range\fR" 4
15585 .IX Item "-mfixed-range=register-range"
15586 Generate code treating the given register range as fixed registers.
15587 A fixed register is one that the register allocator cannot use.  This is
15588 useful when compiling kernel code.  A register range is specified as
15589 two registers separated by a dash.  Multiple register ranges can be
15590 specified separated by a comma.
15591 .IP "\fB\-mtls\-size=\fR\fItls-size\fR" 4
15592 .IX Item "-mtls-size=tls-size"
15593 Specify bit size of immediate \s-1TLS\s0 offsets.  Valid values are 14, 22, and
15594 64.
15595 .IP "\fB\-mtune=\fR\fIcpu-type\fR" 4
15596 .IX Item "-mtune=cpu-type"
15597 Tune the instruction scheduling for a particular \s-1CPU\s0, Valid values are
15598 \&\fBitanium\fR, \fBitanium1\fR, \fBmerced\fR, \fBitanium2\fR,
15599 and \fBmckinley\fR.
15600 .IP "\fB\-milp32\fR" 4
15601 .IX Item "-milp32"
15602 .PD 0
15603 .IP "\fB\-mlp64\fR" 4
15604 .IX Item "-mlp64"
15605 .PD
15606 Generate code for a 32\-bit or 64\-bit environment.
15607 The 32\-bit environment sets int, long and pointer to 32 bits.
15608 The 64\-bit environment sets int to 32 bits and long and pointer
15609 to 64 bits.  These are HP-UX specific flags.
15610 .IP "\fB\-mno\-sched\-br\-data\-spec\fR" 4
15611 .IX Item "-mno-sched-br-data-spec"
15612 .PD 0
15613 .IP "\fB\-msched\-br\-data\-spec\fR" 4
15614 .IX Item "-msched-br-data-spec"
15615 .PD
15616 (Dis/En)able data speculative scheduling before reload.
15617 This results in generation of \f(CW\*(C`ld.a\*(C'\fR instructions and
15618 the corresponding check instructions (\f(CW\*(C`ld.c\*(C'\fR / \f(CW\*(C`chk.a\*(C'\fR).
15619 The default is 'disable'.
15620 .IP "\fB\-msched\-ar\-data\-spec\fR" 4
15621 .IX Item "-msched-ar-data-spec"
15622 .PD 0
15623 .IP "\fB\-mno\-sched\-ar\-data\-spec\fR" 4
15624 .IX Item "-mno-sched-ar-data-spec"
15625 .PD
15626 (En/Dis)able data speculative scheduling after reload.
15627 This results in generation of \f(CW\*(C`ld.a\*(C'\fR instructions and
15628 the corresponding check instructions (\f(CW\*(C`ld.c\*(C'\fR / \f(CW\*(C`chk.a\*(C'\fR).
15629 The default is 'enable'.
15630 .IP "\fB\-mno\-sched\-control\-spec\fR" 4
15631 .IX Item "-mno-sched-control-spec"
15632 .PD 0
15633 .IP "\fB\-msched\-control\-spec\fR" 4
15634 .IX Item "-msched-control-spec"
15635 .PD
15636 (Dis/En)able control speculative scheduling.  This feature is
15637 available only during region scheduling (i.e. before reload).
15638 This results in generation of the \f(CW\*(C`ld.s\*(C'\fR instructions and
15639 the corresponding check instructions \f(CW\*(C`chk.s\*(C'\fR.
15640 The default is 'disable'.
15641 .IP "\fB\-msched\-br\-in\-data\-spec\fR" 4
15642 .IX Item "-msched-br-in-data-spec"
15643 .PD 0
15644 .IP "\fB\-mno\-sched\-br\-in\-data\-spec\fR" 4
15645 .IX Item "-mno-sched-br-in-data-spec"
15646 .PD
15647 (En/Dis)able speculative scheduling of the instructions that
15648 are dependent on the data speculative loads before reload.
15649 This is effective only with \fB\-msched\-br\-data\-spec\fR enabled.
15650 The default is 'enable'.
15651 .IP "\fB\-msched\-ar\-in\-data\-spec\fR" 4
15652 .IX Item "-msched-ar-in-data-spec"
15653 .PD 0
15654 .IP "\fB\-mno\-sched\-ar\-in\-data\-spec\fR" 4
15655 .IX Item "-mno-sched-ar-in-data-spec"
15656 .PD
15657 (En/Dis)able speculative scheduling of the instructions that
15658 are dependent on the data speculative loads after reload.
15659 This is effective only with \fB\-msched\-ar\-data\-spec\fR enabled.
15660 The default is 'enable'.
15661 .IP "\fB\-msched\-in\-control\-spec\fR" 4
15662 .IX Item "-msched-in-control-spec"
15663 .PD 0
15664 .IP "\fB\-mno\-sched\-in\-control\-spec\fR" 4
15665 .IX Item "-mno-sched-in-control-spec"
15666 .PD
15667 (En/Dis)able speculative scheduling of the instructions that
15668 are dependent on the control speculative loads.
15669 This is effective only with \fB\-msched\-control\-spec\fR enabled.
15670 The default is 'enable'.
15671 .IP "\fB\-mno\-sched\-prefer\-non\-data\-spec\-insns\fR" 4
15672 .IX Item "-mno-sched-prefer-non-data-spec-insns"
15673 .PD 0
15674 .IP "\fB\-msched\-prefer\-non\-data\-spec\-insns\fR" 4
15675 .IX Item "-msched-prefer-non-data-spec-insns"
15676 .PD
15677 If enabled, data-speculative instructions are chosen for schedule
15678 only if there are no other choices at the moment.  This makes
15679 the use of the data speculation much more conservative.
15680 The default is 'disable'.
15681 .IP "\fB\-mno\-sched\-prefer\-non\-control\-spec\-insns\fR" 4
15682 .IX Item "-mno-sched-prefer-non-control-spec-insns"
15683 .PD 0
15684 .IP "\fB\-msched\-prefer\-non\-control\-spec\-insns\fR" 4
15685 .IX Item "-msched-prefer-non-control-spec-insns"
15686 .PD
15687 If enabled, control-speculative instructions are chosen for schedule
15688 only if there are no other choices at the moment.  This makes
15689 the use of the control speculation much more conservative.
15690 The default is 'disable'.
15691 .IP "\fB\-mno\-sched\-count\-spec\-in\-critical\-path\fR" 4
15692 .IX Item "-mno-sched-count-spec-in-critical-path"
15693 .PD 0
15694 .IP "\fB\-msched\-count\-spec\-in\-critical\-path\fR" 4
15695 .IX Item "-msched-count-spec-in-critical-path"
15696 .PD
15697 If enabled, speculative dependencies are considered during
15698 computation of the instructions priorities.  This makes the use of the
15699 speculation a bit more conservative.
15700 The default is 'disable'.
15701 .IP "\fB\-msched\-spec\-ldc\fR" 4
15702 .IX Item "-msched-spec-ldc"
15703 Use a simple data speculation check.  This option is on by default.
15704 .IP "\fB\-msched\-control\-spec\-ldc\fR" 4
15705 .IX Item "-msched-control-spec-ldc"
15706 Use a simple check for control speculation.  This option is on by default.
15707 .IP "\fB\-msched\-stop\-bits\-after\-every\-cycle\fR" 4
15708 .IX Item "-msched-stop-bits-after-every-cycle"
15709 Place a stop bit after every cycle when scheduling.  This option is on
15710 by default.
15711 .IP "\fB\-msched\-fp\-mem\-deps\-zero\-cost\fR" 4
15712 .IX Item "-msched-fp-mem-deps-zero-cost"
15713 Assume that floating-point stores and loads are not likely to cause a conflict
15714 when placed into the same instruction group.  This option is disabled by
15715 default.
15716 .IP "\fB\-msel\-sched\-dont\-check\-control\-spec\fR" 4
15717 .IX Item "-msel-sched-dont-check-control-spec"
15718 Generate checks for control speculation in selective scheduling.
15719 This flag is disabled by default.
15720 .IP "\fB\-msched\-max\-memory\-insns=\fR\fImax-insns\fR" 4
15721 .IX Item "-msched-max-memory-insns=max-insns"
15722 Limit on the number of memory insns per instruction group, giving lower
15723 priority to subsequent memory insns attempting to schedule in the same
15724 instruction group. Frequently useful to prevent cache bank conflicts.
15725 The default value is 1.
15726 .IP "\fB\-msched\-max\-memory\-insns\-hard\-limit\fR" 4
15727 .IX Item "-msched-max-memory-insns-hard-limit"
15728 Makes the limit specified by \fBmsched-max-memory-insns\fR a hard limit,
15729 disallowing more than that number in an instruction group.
15730 Otherwise, the limit is \*(L"soft\*(R", meaning that non-memory operations
15731 are preferred when the limit is reached, but memory operations may still
15732 be scheduled.
15733 .PP
15734 \fI\s-1LM32\s0 Options\fR
15735 .IX Subsection "LM32 Options"
15736 .PP
15737 These \fB\-m\fR options are defined for the LatticeMico32 architecture:
15738 .IP "\fB\-mbarrel\-shift\-enabled\fR" 4
15739 .IX Item "-mbarrel-shift-enabled"
15740 Enable barrel-shift instructions.
15741 .IP "\fB\-mdivide\-enabled\fR" 4
15742 .IX Item "-mdivide-enabled"
15743 Enable divide and modulus instructions.
15744 .IP "\fB\-mmultiply\-enabled\fR" 4
15745 .IX Item "-mmultiply-enabled"
15746 Enable multiply instructions.
15747 .IP "\fB\-msign\-extend\-enabled\fR" 4
15748 .IX Item "-msign-extend-enabled"
15749 Enable sign extend instructions.
15750 .IP "\fB\-muser\-enabled\fR" 4
15751 .IX Item "-muser-enabled"
15752 Enable user-defined instructions.
15753 .PP
15754 \fIM32C Options\fR
15755 .IX Subsection "M32C Options"
15756 .IP "\fB\-mcpu=\fR\fIname\fR" 4
15757 .IX Item "-mcpu=name"
15758 Select the \s-1CPU\s0 for which code is generated.  \fIname\fR may be one of
15759 \&\fBr8c\fR for the R8C/Tiny series, \fBm16c\fR for the M16C (up to
15760 /60) series, \fBm32cm\fR for the M16C/80 series, or \fBm32c\fR for
15761 the M32C/80 series.
15762 .IP "\fB\-msim\fR" 4
15763 .IX Item "-msim"
15764 Specifies that the program will be run on the simulator.  This causes
15765 an alternate runtime library to be linked in which supports, for
15766 example, file I/O.  You must not use this option when generating
15767 programs that will run on real hardware; you must provide your own
15768 runtime library for whatever I/O functions are needed.
15769 .IP "\fB\-memregs=\fR\fInumber\fR" 4
15770 .IX Item "-memregs=number"
15771 Specifies the number of memory-based pseudo-registers \s-1GCC\s0 uses
15772 during code generation.  These pseudo-registers are used like real
15773 registers, so there is a tradeoff between \s-1GCC\s0's ability to fit the
15774 code into available registers, and the performance penalty of using
15775 memory instead of registers.  Note that all modules in a program must
15776 be compiled with the same value for this option.  Because of that, you
15777 must not use this option with \s-1GCC\s0's default runtime libraries.
15778 .PP
15779 \fIM32R/D Options\fR
15780 .IX Subsection "M32R/D Options"
15781 .PP
15782 These \fB\-m\fR options are defined for Renesas M32R/D architectures:
15783 .IP "\fB\-m32r2\fR" 4
15784 .IX Item "-m32r2"
15785 Generate code for the M32R/2.
15786 .IP "\fB\-m32rx\fR" 4
15787 .IX Item "-m32rx"
15788 Generate code for the M32R/X.
15789 .IP "\fB\-m32r\fR" 4
15790 .IX Item "-m32r"
15791 Generate code for the M32R.  This is the default.
15792 .IP "\fB\-mmodel=small\fR" 4
15793 .IX Item "-mmodel=small"
15794 Assume all objects live in the lower 16MB of memory (so that their addresses
15795 can be loaded with the \f(CW\*(C`ld24\*(C'\fR instruction), and assume all subroutines
15796 are reachable with the \f(CW\*(C`bl\*(C'\fR instruction.
15797 This is the default.
15798 .Sp
15799 The addressability of a particular object can be set with the
15800 \&\f(CW\*(C`model\*(C'\fR attribute.
15801 .IP "\fB\-mmodel=medium\fR" 4
15802 .IX Item "-mmodel=medium"
15803 Assume objects may be anywhere in the 32\-bit address space (the compiler
15804 generates \f(CW\*(C`seth/add3\*(C'\fR instructions to load their addresses), and
15805 assume all subroutines are reachable with the \f(CW\*(C`bl\*(C'\fR instruction.
15806 .IP "\fB\-mmodel=large\fR" 4
15807 .IX Item "-mmodel=large"
15808 Assume objects may be anywhere in the 32\-bit address space (the compiler
15809 generates \f(CW\*(C`seth/add3\*(C'\fR instructions to load their addresses), and
15810 assume subroutines may not be reachable with the \f(CW\*(C`bl\*(C'\fR instruction
15811 (the compiler generates the much slower \f(CW\*(C`seth/add3/jl\*(C'\fR
15812 instruction sequence).
15813 .IP "\fB\-msdata=none\fR" 4
15814 .IX Item "-msdata=none"
15815 Disable use of the small data area.  Variables are put into
15816 one of \f(CW\*(C`.data\*(C'\fR, \f(CW\*(C`.bss\*(C'\fR, or \f(CW\*(C`.rodata\*(C'\fR (unless the
15817 \&\f(CW\*(C`section\*(C'\fR attribute has been specified).
15818 This is the default.
15819 .Sp
15820 The small data area consists of sections \f(CW\*(C`.sdata\*(C'\fR and \f(CW\*(C`.sbss\*(C'\fR.
15821 Objects may be explicitly put in the small data area with the
15822 \&\f(CW\*(C`section\*(C'\fR attribute using one of these sections.
15823 .IP "\fB\-msdata=sdata\fR" 4
15824 .IX Item "-msdata=sdata"
15825 Put small global and static data in the small data area, but do not
15826 generate special code to reference them.
15827 .IP "\fB\-msdata=use\fR" 4
15828 .IX Item "-msdata=use"
15829 Put small global and static data in the small data area, and generate
15830 special instructions to reference them.
15831 .IP "\fB\-G\fR \fInum\fR" 4
15832 .IX Item "-G num"
15833 Put global and static objects less than or equal to \fInum\fR bytes
15834 into the small data or \s-1BSS\s0 sections instead of the normal data or \s-1BSS\s0
15835 sections.  The default value of \fInum\fR is 8.
15836 The \fB\-msdata\fR option must be set to one of \fBsdata\fR or \fBuse\fR
15837 for this option to have any effect.
15838 .Sp
15839 All modules should be compiled with the same \fB\-G\fR \fInum\fR value.
15840 Compiling with different values of \fInum\fR may or may not work; if it
15841 doesn't the linker gives an error message\-\-\-incorrect code is not
15842 generated.
15843 .IP "\fB\-mdebug\fR" 4
15844 .IX Item "-mdebug"
15845 Makes the M32R\-specific code in the compiler display some statistics
15846 that might help in debugging programs.
15847 .IP "\fB\-malign\-loops\fR" 4
15848 .IX Item "-malign-loops"
15849 Align all loops to a 32\-byte boundary.
15850 .IP "\fB\-mno\-align\-loops\fR" 4
15851 .IX Item "-mno-align-loops"
15852 Do not enforce a 32\-byte alignment for loops.  This is the default.
15853 .IP "\fB\-missue\-rate=\fR\fInumber\fR" 4
15854 .IX Item "-missue-rate=number"
15855 Issue \fInumber\fR instructions per cycle.  \fInumber\fR can only be 1
15856 or 2.
15857 .IP "\fB\-mbranch\-cost=\fR\fInumber\fR" 4
15858 .IX Item "-mbranch-cost=number"
15859 \&\fInumber\fR can only be 1 or 2.  If it is 1 then branches are
15860 preferred over conditional code, if it is 2, then the opposite applies.
15861 .IP "\fB\-mflush\-trap=\fR\fInumber\fR" 4
15862 .IX Item "-mflush-trap=number"
15863 Specifies the trap number to use to flush the cache.  The default is
15864 12.  Valid numbers are between 0 and 15 inclusive.
15865 .IP "\fB\-mno\-flush\-trap\fR" 4
15866 .IX Item "-mno-flush-trap"
15867 Specifies that the cache cannot be flushed by using a trap.
15868 .IP "\fB\-mflush\-func=\fR\fIname\fR" 4
15869 .IX Item "-mflush-func=name"
15870 Specifies the name of the operating system function to call to flush
15871 the cache.  The default is \fB_flush_cache\fR, but a function call
15872 is only used if a trap is not available.
15873 .IP "\fB\-mno\-flush\-func\fR" 4
15874 .IX Item "-mno-flush-func"
15875 Indicates that there is no \s-1OS\s0 function for flushing the cache.
15876 .PP
15877 \fIM680x0 Options\fR
15878 .IX Subsection "M680x0 Options"
15879 .PP
15880 These are the \fB\-m\fR options defined for M680x0 and ColdFire processors.
15881 The default settings depend on which architecture was selected when
15882 the compiler was configured; the defaults for the most common choices
15883 are given below.
15884 .IP "\fB\-march=\fR\fIarch\fR" 4
15885 .IX Item "-march=arch"
15886 Generate code for a specific M680x0 or ColdFire instruction set
15887 architecture.  Permissible values of \fIarch\fR for M680x0
15888 architectures are: \fB68000\fR, \fB68010\fR, \fB68020\fR,
15889 \&\fB68030\fR, \fB68040\fR, \fB68060\fR and \fBcpu32\fR.  ColdFire
15890 architectures are selected according to Freescale's \s-1ISA\s0 classification
15891 and the permissible values are: \fBisaa\fR, \fBisaaplus\fR,
15892 \&\fBisab\fR and \fBisac\fR.
15893 .Sp
15894 \&\s-1GCC\s0 defines a macro \f(CW\*(C`_\|_mcf\f(CIarch\f(CW_\|_\*(C'\fR whenever it is generating
15895 code for a ColdFire target.  The \fIarch\fR in this macro is one of the
15896 \&\fB\-march\fR arguments given above.
15897 .Sp
15898 When used together, \fB\-march\fR and \fB\-mtune\fR select code
15899 that runs on a family of similar processors but that is optimized
15900 for a particular microarchitecture.
15901 .IP "\fB\-mcpu=\fR\fIcpu\fR" 4
15902 .IX Item "-mcpu=cpu"
15903 Generate code for a specific M680x0 or ColdFire processor.
15904 The M680x0 \fIcpu\fRs are: \fB68000\fR, \fB68010\fR, \fB68020\fR,
15905 \&\fB68030\fR, \fB68040\fR, \fB68060\fR, \fB68302\fR, \fB68332\fR
15906 and \fBcpu32\fR.  The ColdFire \fIcpu\fRs are given by the table
15907 below, which also classifies the CPUs into families:
15908 .RS 4
15909 .IP "Family : \fB\-mcpu\fR arguments" 4
15910 .IX Item "Family : -mcpu arguments"
15911 .PD 0
15912 .IP "\fB51\fR : \fB51\fR \fB51ac\fR \fB51ag\fR \fB51cn\fR \fB51em\fR \fB51je\fR \fB51jf\fR \fB51jg\fR \fB51jm\fR \fB51mm\fR \fB51qe\fR \fB51qm\fR" 4
15913 .IX Item "51 : 51 51ac 51ag 51cn 51em 51je 51jf 51jg 51jm 51mm 51qe 51qm"
15914 .IP "\fB5206\fR : \fB5202\fR \fB5204\fR \fB5206\fR" 4
15915 .IX Item "5206 : 5202 5204 5206"
15916 .IP "\fB5206e\fR : \fB5206e\fR" 4
15917 .IX Item "5206e : 5206e"
15918 .IP "\fB5208\fR : \fB5207\fR \fB5208\fR" 4
15919 .IX Item "5208 : 5207 5208"
15920 .IP "\fB5211a\fR : \fB5210a\fR \fB5211a\fR" 4
15921 .IX Item "5211a : 5210a 5211a"
15922 .IP "\fB5213\fR : \fB5211\fR \fB5212\fR \fB5213\fR" 4
15923 .IX Item "5213 : 5211 5212 5213"
15924 .IP "\fB5216\fR : \fB5214\fR \fB5216\fR" 4
15925 .IX Item "5216 : 5214 5216"
15926 .IP "\fB52235\fR : \fB52230\fR \fB52231\fR \fB52232\fR \fB52233\fR \fB52234\fR \fB52235\fR" 4
15927 .IX Item "52235 : 52230 52231 52232 52233 52234 52235"
15928 .IP "\fB5225\fR : \fB5224\fR \fB5225\fR" 4
15929 .IX Item "5225 : 5224 5225"
15930 .IP "\fB52259\fR : \fB52252\fR \fB52254\fR \fB52255\fR \fB52256\fR \fB52258\fR \fB52259\fR" 4
15931 .IX Item "52259 : 52252 52254 52255 52256 52258 52259"
15932 .IP "\fB5235\fR : \fB5232\fR \fB5233\fR \fB5234\fR \fB5235\fR \fB523x\fR" 4
15933 .IX Item "5235 : 5232 5233 5234 5235 523x"
15934 .IP "\fB5249\fR : \fB5249\fR" 4
15935 .IX Item "5249 : 5249"
15936 .IP "\fB5250\fR : \fB5250\fR" 4
15937 .IX Item "5250 : 5250"
15938 .IP "\fB5271\fR : \fB5270\fR \fB5271\fR" 4
15939 .IX Item "5271 : 5270 5271"
15940 .IP "\fB5272\fR : \fB5272\fR" 4
15941 .IX Item "5272 : 5272"
15942 .IP "\fB5275\fR : \fB5274\fR \fB5275\fR" 4
15943 .IX Item "5275 : 5274 5275"
15944 .IP "\fB5282\fR : \fB5280\fR \fB5281\fR \fB5282\fR \fB528x\fR" 4
15945 .IX Item "5282 : 5280 5281 5282 528x"
15946 .IP "\fB53017\fR : \fB53011\fR \fB53012\fR \fB53013\fR \fB53014\fR \fB53015\fR \fB53016\fR \fB53017\fR" 4
15947 .IX Item "53017 : 53011 53012 53013 53014 53015 53016 53017"
15948 .IP "\fB5307\fR : \fB5307\fR" 4
15949 .IX Item "5307 : 5307"
15950 .IP "\fB5329\fR : \fB5327\fR \fB5328\fR \fB5329\fR \fB532x\fR" 4
15951 .IX Item "5329 : 5327 5328 5329 532x"
15952 .IP "\fB5373\fR : \fB5372\fR \fB5373\fR \fB537x\fR" 4
15953 .IX Item "5373 : 5372 5373 537x"
15954 .IP "\fB5407\fR : \fB5407\fR" 4
15955 .IX Item "5407 : 5407"
15956 .IP "\fB5475\fR : \fB5470\fR \fB5471\fR \fB5472\fR \fB5473\fR \fB5474\fR \fB5475\fR \fB547x\fR \fB5480\fR \fB5481\fR \fB5482\fR \fB5483\fR \fB5484\fR \fB5485\fR" 4
15957 .IX Item "5475 : 5470 5471 5472 5473 5474 5475 547x 5480 5481 5482 5483 5484 5485"
15958 .RE
15959 .RS 4
15960 .PD
15961 .Sp
15962 \&\fB\-mcpu=\fR\fIcpu\fR overrides \fB\-march=\fR\fIarch\fR if
15963 \&\fIarch\fR is compatible with \fIcpu\fR.  Other combinations of
15964 \&\fB\-mcpu\fR and \fB\-march\fR are rejected.
15965 .Sp
15966 \&\s-1GCC\s0 defines the macro \f(CW\*(C`_\|_mcf_cpu_\f(CIcpu\f(CW\*(C'\fR when ColdFire target
15967 \&\fIcpu\fR is selected.  It also defines \f(CW\*(C`_\|_mcf_family_\f(CIfamily\f(CW\*(C'\fR,
15968 where the value of \fIfamily\fR is given by the table above.
15969 .RE
15970 .IP "\fB\-mtune=\fR\fItune\fR" 4
15971 .IX Item "-mtune=tune"
15972 Tune the code for a particular microarchitecture within the
15973 constraints set by \fB\-march\fR and \fB\-mcpu\fR.
15974 The M680x0 microarchitectures are: \fB68000\fR, \fB68010\fR,
15975 \&\fB68020\fR, \fB68030\fR, \fB68040\fR, \fB68060\fR
15976 and \fBcpu32\fR.  The ColdFire microarchitectures
15977 are: \fBcfv1\fR, \fBcfv2\fR, \fBcfv3\fR, \fBcfv4\fR and \fBcfv4e\fR.
15978 .Sp
15979 You can also use \fB\-mtune=68020\-40\fR for code that needs
15980 to run relatively well on 68020, 68030 and 68040 targets.
15981 \&\fB\-mtune=68020\-60\fR is similar but includes 68060 targets
15982 as well.  These two options select the same tuning decisions as
15983 \&\fB\-m68020\-40\fR and \fB\-m68020\-60\fR respectively.
15984 .Sp
15985 \&\s-1GCC\s0 defines the macros \f(CW\*(C`_\|_mc\f(CIarch\f(CW\*(C'\fR and \f(CW\*(C`_\|_mc\f(CIarch\f(CW_\|_\*(C'\fR
15986 when tuning for 680x0 architecture \fIarch\fR.  It also defines
15987 \&\f(CW\*(C`mc\f(CIarch\f(CW\*(C'\fR unless either \fB\-ansi\fR or a non-GNU \fB\-std\fR
15988 option is used.  If \s-1GCC\s0 is tuning for a range of architectures,
15989 as selected by \fB\-mtune=68020\-40\fR or \fB\-mtune=68020\-60\fR,
15990 it defines the macros for every architecture in the range.
15991 .Sp
15992 \&\s-1GCC\s0 also defines the macro \f(CW\*(C`_\|_m\f(CIuarch\f(CW_\|_\*(C'\fR when tuning for
15993 ColdFire microarchitecture \fIuarch\fR, where \fIuarch\fR is one
15994 of the arguments given above.
15995 .IP "\fB\-m68000\fR" 4
15996 .IX Item "-m68000"
15997 .PD 0
15998 .IP "\fB\-mc68000\fR" 4
15999 .IX Item "-mc68000"
16000 .PD
16001 Generate output for a 68000.  This is the default
16002 when the compiler is configured for 68000\-based systems.
16003 It is equivalent to \fB\-march=68000\fR.
16004 .Sp
16005 Use this option for microcontrollers with a 68000 or \s-1EC000\s0 core,
16006 including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
16007 .IP "\fB\-m68010\fR" 4
16008 .IX Item "-m68010"
16009 Generate output for a 68010.  This is the default
16010 when the compiler is configured for 68010\-based systems.
16011 It is equivalent to \fB\-march=68010\fR.
16012 .IP "\fB\-m68020\fR" 4
16013 .IX Item "-m68020"
16014 .PD 0
16015 .IP "\fB\-mc68020\fR" 4
16016 .IX Item "-mc68020"
16017 .PD
16018 Generate output for a 68020.  This is the default
16019 when the compiler is configured for 68020\-based systems.
16020 It is equivalent to \fB\-march=68020\fR.
16021 .IP "\fB\-m68030\fR" 4
16022 .IX Item "-m68030"
16023 Generate output for a 68030.  This is the default when the compiler is
16024 configured for 68030\-based systems.  It is equivalent to
16025 \&\fB\-march=68030\fR.
16026 .IP "\fB\-m68040\fR" 4
16027 .IX Item "-m68040"
16028 Generate output for a 68040.  This is the default when the compiler is
16029 configured for 68040\-based systems.  It is equivalent to
16030 \&\fB\-march=68040\fR.
16031 .Sp
16032 This option inhibits the use of 68881/68882 instructions that have to be
16033 emulated by software on the 68040.  Use this option if your 68040 does not
16034 have code to emulate those instructions.
16035 .IP "\fB\-m68060\fR" 4
16036 .IX Item "-m68060"
16037 Generate output for a 68060.  This is the default when the compiler is
16038 configured for 68060\-based systems.  It is equivalent to
16039 \&\fB\-march=68060\fR.
16040 .Sp
16041 This option inhibits the use of 68020 and 68881/68882 instructions that
16042 have to be emulated by software on the 68060.  Use this option if your 68060
16043 does not have code to emulate those instructions.
16044 .IP "\fB\-mcpu32\fR" 4
16045 .IX Item "-mcpu32"
16046 Generate output for a \s-1CPU32\s0.  This is the default
16047 when the compiler is configured for CPU32\-based systems.
16048 It is equivalent to \fB\-march=cpu32\fR.
16049 .Sp
16050 Use this option for microcontrollers with a
16051 \&\s-1CPU32\s0 or \s-1CPU32+\s0 core, including the 68330, 68331, 68332, 68333, 68334,
16052 68336, 68340, 68341, 68349 and 68360.
16053 .IP "\fB\-m5200\fR" 4
16054 .IX Item "-m5200"
16055 Generate output for a 520X ColdFire \s-1CPU\s0.  This is the default
16056 when the compiler is configured for 520X\-based systems.
16057 It is equivalent to \fB\-mcpu=5206\fR, and is now deprecated
16058 in favor of that option.
16059 .Sp
16060 Use this option for microcontroller with a 5200 core, including
16061 the \s-1MCF5202\s0, \s-1MCF5203\s0, \s-1MCF5204\s0 and \s-1MCF5206\s0.
16062 .IP "\fB\-m5206e\fR" 4
16063 .IX Item "-m5206e"
16064 Generate output for a 5206e ColdFire \s-1CPU\s0.  The option is now
16065 deprecated in favor of the equivalent \fB\-mcpu=5206e\fR.
16066 .IP "\fB\-m528x\fR" 4
16067 .IX Item "-m528x"
16068 Generate output for a member of the ColdFire 528X family.
16069 The option is now deprecated in favor of the equivalent
16070 \&\fB\-mcpu=528x\fR.
16071 .IP "\fB\-m5307\fR" 4
16072 .IX Item "-m5307"
16073 Generate output for a ColdFire 5307 \s-1CPU\s0.  The option is now deprecated
16074 in favor of the equivalent \fB\-mcpu=5307\fR.
16075 .IP "\fB\-m5407\fR" 4
16076 .IX Item "-m5407"
16077 Generate output for a ColdFire 5407 \s-1CPU\s0.  The option is now deprecated
16078 in favor of the equivalent \fB\-mcpu=5407\fR.
16079 .IP "\fB\-mcfv4e\fR" 4
16080 .IX Item "-mcfv4e"
16081 Generate output for a ColdFire V4e family \s-1CPU\s0 (e.g. 547x/548x).
16082 This includes use of hardware floating-point instructions.
16083 The option is equivalent to \fB\-mcpu=547x\fR, and is now
16084 deprecated in favor of that option.
16085 .IP "\fB\-m68020\-40\fR" 4
16086 .IX Item "-m68020-40"
16087 Generate output for a 68040, without using any of the new instructions.
16088 This results in code that can run relatively efficiently on either a
16089 68020/68881 or a 68030 or a 68040.  The generated code does use the
16090 68881 instructions that are emulated on the 68040.
16091 .Sp
16092 The option is equivalent to \fB\-march=68020\fR \fB\-mtune=68020\-40\fR.
16093 .IP "\fB\-m68020\-60\fR" 4
16094 .IX Item "-m68020-60"
16095 Generate output for a 68060, without using any of the new instructions.
16096 This results in code that can run relatively efficiently on either a
16097 68020/68881 or a 68030 or a 68040.  The generated code does use the
16098 68881 instructions that are emulated on the 68060.
16099 .Sp
16100 The option is equivalent to \fB\-march=68020\fR \fB\-mtune=68020\-60\fR.
16101 .IP "\fB\-mhard\-float\fR" 4
16102 .IX Item "-mhard-float"
16103 .PD 0
16104 .IP "\fB\-m68881\fR" 4
16105 .IX Item "-m68881"
16106 .PD
16107 Generate floating-point instructions.  This is the default for 68020
16108 and above, and for ColdFire devices that have an \s-1FPU\s0.  It defines the
16109 macro \f(CW\*(C`_\|_HAVE_68881_\|_\*(C'\fR on M680x0 targets and \f(CW\*(C`_\|_mcffpu_\|_\*(C'\fR
16110 on ColdFire targets.
16111 .IP "\fB\-msoft\-float\fR" 4
16112 .IX Item "-msoft-float"
16113 Do not generate floating-point instructions; use library calls instead.
16114 This is the default for 68000, 68010, and 68832 targets.  It is also
16115 the default for ColdFire devices that have no \s-1FPU\s0.
16116 .IP "\fB\-mdiv\fR" 4
16117 .IX Item "-mdiv"
16118 .PD 0
16119 .IP "\fB\-mno\-div\fR" 4
16120 .IX Item "-mno-div"
16121 .PD
16122 Generate (do not generate) ColdFire hardware divide and remainder
16123 instructions.  If \fB\-march\fR is used without \fB\-mcpu\fR,
16124 the default is \*(L"on\*(R" for ColdFire architectures and \*(L"off\*(R" for M680x0
16125 architectures.  Otherwise, the default is taken from the target \s-1CPU\s0
16126 (either the default \s-1CPU\s0, or the one specified by \fB\-mcpu\fR).  For
16127 example, the default is \*(L"off\*(R" for \fB\-mcpu=5206\fR and \*(L"on\*(R" for
16128 \&\fB\-mcpu=5206e\fR.
16129 .Sp
16130 \&\s-1GCC\s0 defines the macro \f(CW\*(C`_\|_mcfhwdiv_\|_\*(C'\fR when this option is enabled.
16131 .IP "\fB\-mshort\fR" 4
16132 .IX Item "-mshort"
16133 Consider type \f(CW\*(C`int\*(C'\fR to be 16 bits wide, like \f(CW\*(C`short int\*(C'\fR.
16134 Additionally, parameters passed on the stack are also aligned to a
16135 16\-bit boundary even on targets whose \s-1API\s0 mandates promotion to 32\-bit.
16136 .IP "\fB\-mno\-short\fR" 4
16137 .IX Item "-mno-short"
16138 Do not consider type \f(CW\*(C`int\*(C'\fR to be 16 bits wide.  This is the default.
16139 .IP "\fB\-mnobitfield\fR" 4
16140 .IX Item "-mnobitfield"
16141 .PD 0
16142 .IP "\fB\-mno\-bitfield\fR" 4
16143 .IX Item "-mno-bitfield"
16144 .PD
16145 Do not use the bit-field instructions.  The \fB\-m68000\fR, \fB\-mcpu32\fR
16146 and \fB\-m5200\fR options imply \fB\-mnobitfield\fR.
16147 .IP "\fB\-mbitfield\fR" 4
16148 .IX Item "-mbitfield"
16149 Do use the bit-field instructions.  The \fB\-m68020\fR option implies
16150 \&\fB\-mbitfield\fR.  This is the default if you use a configuration
16151 designed for a 68020.
16152 .IP "\fB\-mrtd\fR" 4
16153 .IX Item "-mrtd"
16154 Use a different function-calling convention, in which functions
16155 that take a fixed number of arguments return with the \f(CW\*(C`rtd\*(C'\fR
16156 instruction, which pops their arguments while returning.  This
16157 saves one instruction in the caller since there is no need to pop
16158 the arguments there.
16159 .Sp
16160 This calling convention is incompatible with the one normally
16161 used on Unix, so you cannot use it if you need to call libraries
16162 compiled with the Unix compiler.
16163 .Sp
16164 Also, you must provide function prototypes for all functions that
16165 take variable numbers of arguments (including \f(CW\*(C`printf\*(C'\fR);
16166 otherwise incorrect code is generated for calls to those
16167 functions.
16168 .Sp
16169 In addition, seriously incorrect code results if you call a
16170 function with too many arguments.  (Normally, extra arguments are
16171 harmlessly ignored.)
16172 .Sp
16173 The \f(CW\*(C`rtd\*(C'\fR instruction is supported by the 68010, 68020, 68030,
16174 68040, 68060 and \s-1CPU32\s0 processors, but not by the 68000 or 5200.
16175 .IP "\fB\-mno\-rtd\fR" 4
16176 .IX Item "-mno-rtd"
16177 Do not use the calling conventions selected by \fB\-mrtd\fR.
16178 This is the default.
16179 .IP "\fB\-malign\-int\fR" 4
16180 .IX Item "-malign-int"
16181 .PD 0
16182 .IP "\fB\-mno\-align\-int\fR" 4
16183 .IX Item "-mno-align-int"
16184 .PD
16185 Control whether \s-1GCC\s0 aligns \f(CW\*(C`int\*(C'\fR, \f(CW\*(C`long\*(C'\fR, \f(CW\*(C`long long\*(C'\fR,
16186 \&\f(CW\*(C`float\*(C'\fR, \f(CW\*(C`double\*(C'\fR, and \f(CW\*(C`long double\*(C'\fR variables on a 32\-bit
16187 boundary (\fB\-malign\-int\fR) or a 16\-bit boundary (\fB\-mno\-align\-int\fR).
16188 Aligning variables on 32\-bit boundaries produces code that runs somewhat
16189 faster on processors with 32\-bit busses at the expense of more memory.
16190 .Sp
16191 \&\fBWarning:\fR if you use the \fB\-malign\-int\fR switch, \s-1GCC\s0
16192 aligns structures containing the above types differently than
16193 most published application binary interface specifications for the m68k.
16194 .IP "\fB\-mpcrel\fR" 4
16195 .IX Item "-mpcrel"
16196 Use the pc-relative addressing mode of the 68000 directly, instead of
16197 using a global offset table.  At present, this option implies \fB\-fpic\fR,
16198 allowing at most a 16\-bit offset for pc-relative addressing.  \fB\-fPIC\fR is
16199 not presently supported with \fB\-mpcrel\fR, though this could be supported for
16200 68020 and higher processors.
16201 .IP "\fB\-mno\-strict\-align\fR" 4
16202 .IX Item "-mno-strict-align"
16203 .PD 0
16204 .IP "\fB\-mstrict\-align\fR" 4
16205 .IX Item "-mstrict-align"
16206 .PD
16207 Do not (do) assume that unaligned memory references are handled by
16208 the system.
16209 .IP "\fB\-msep\-data\fR" 4
16210 .IX Item "-msep-data"
16211 Generate code that allows the data segment to be located in a different
16212 area of memory from the text segment.  This allows for execute-in-place in
16213 an environment without virtual memory management.  This option implies
16214 \&\fB\-fPIC\fR.
16215 .IP "\fB\-mno\-sep\-data\fR" 4
16216 .IX Item "-mno-sep-data"
16217 Generate code that assumes that the data segment follows the text segment.
16218 This is the default.
16219 .IP "\fB\-mid\-shared\-library\fR" 4
16220 .IX Item "-mid-shared-library"
16221 Generate code that supports shared libraries via the library \s-1ID\s0 method.
16222 This allows for execute-in-place and shared libraries in an environment
16223 without virtual memory management.  This option implies \fB\-fPIC\fR.
16224 .IP "\fB\-mno\-id\-shared\-library\fR" 4
16225 .IX Item "-mno-id-shared-library"
16226 Generate code that doesn't assume ID-based shared libraries are being used.
16227 This is the default.
16228 .IP "\fB\-mshared\-library\-id=n\fR" 4
16229 .IX Item "-mshared-library-id=n"
16230 Specifies the identification number of the ID-based shared library being
16231 compiled.  Specifying a value of 0 generates more compact code; specifying
16232 other values forces the allocation of that number to the current
16233 library, but is no more space\- or time-efficient than omitting this option.
16234 .IP "\fB\-mxgot\fR" 4
16235 .IX Item "-mxgot"
16236 .PD 0
16237 .IP "\fB\-mno\-xgot\fR" 4
16238 .IX Item "-mno-xgot"
16239 .PD
16240 When generating position-independent code for ColdFire, generate code
16241 that works if the \s-1GOT\s0 has more than 8192 entries.  This code is
16242 larger and slower than code generated without this option.  On M680x0
16243 processors, this option is not needed; \fB\-fPIC\fR suffices.
16244 .Sp
16245 \&\s-1GCC\s0 normally uses a single instruction to load values from the \s-1GOT\s0.
16246 While this is relatively efficient, it only works if the \s-1GOT\s0
16247 is smaller than about 64k.  Anything larger causes the linker
16248 to report an error such as:
16249 .Sp
16250 .Vb 1
16251 \&        relocation truncated to fit: R_68K_GOT16O foobar
16252 .Ve
16253 .Sp
16254 If this happens, you should recompile your code with \fB\-mxgot\fR.
16255 It should then work with very large GOTs.  However, code generated with
16256 \&\fB\-mxgot\fR is less efficient, since it takes 4 instructions to fetch
16257 the value of a global symbol.
16258 .Sp
16259 Note that some linkers, including newer versions of the \s-1GNU\s0 linker,
16260 can create multiple GOTs and sort \s-1GOT\s0 entries.  If you have such a linker,
16261 you should only need to use \fB\-mxgot\fR when compiling a single
16262 object file that accesses more than 8192 \s-1GOT\s0 entries.  Very few do.
16263 .Sp
16264 These options have no effect unless \s-1GCC\s0 is generating
16265 position-independent code.
16266 .PP
16267 \fIMCore Options\fR
16268 .IX Subsection "MCore Options"
16269 .PP
16270 These are the \fB\-m\fR options defined for the Motorola M*Core
16271 processors.
16272 .IP "\fB\-mhardlit\fR" 4
16273 .IX Item "-mhardlit"
16274 .PD 0
16275 .IP "\fB\-mno\-hardlit\fR" 4
16276 .IX Item "-mno-hardlit"
16277 .PD
16278 Inline constants into the code stream if it can be done in two
16279 instructions or less.
16280 .IP "\fB\-mdiv\fR" 4
16281 .IX Item "-mdiv"
16282 .PD 0
16283 .IP "\fB\-mno\-div\fR" 4
16284 .IX Item "-mno-div"
16285 .PD
16286 Use the divide instruction.  (Enabled by default).
16287 .IP "\fB\-mrelax\-immediate\fR" 4
16288 .IX Item "-mrelax-immediate"
16289 .PD 0
16290 .IP "\fB\-mno\-relax\-immediate\fR" 4
16291 .IX Item "-mno-relax-immediate"
16292 .PD
16293 Allow arbitrary-sized immediates in bit operations.
16294 .IP "\fB\-mwide\-bitfields\fR" 4
16295 .IX Item "-mwide-bitfields"
16296 .PD 0
16297 .IP "\fB\-mno\-wide\-bitfields\fR" 4
16298 .IX Item "-mno-wide-bitfields"
16299 .PD
16300 Always treat bit-fields as \f(CW\*(C`int\*(C'\fR\-sized.
16301 .IP "\fB\-m4byte\-functions\fR" 4
16302 .IX Item "-m4byte-functions"
16303 .PD 0
16304 .IP "\fB\-mno\-4byte\-functions\fR" 4
16305 .IX Item "-mno-4byte-functions"
16306 .PD
16307 Force all functions to be aligned to a 4\-byte boundary.
16308 .IP "\fB\-mcallgraph\-data\fR" 4
16309 .IX Item "-mcallgraph-data"
16310 .PD 0
16311 .IP "\fB\-mno\-callgraph\-data\fR" 4
16312 .IX Item "-mno-callgraph-data"
16313 .PD
16314 Emit callgraph information.
16315 .IP "\fB\-mslow\-bytes\fR" 4
16316 .IX Item "-mslow-bytes"
16317 .PD 0
16318 .IP "\fB\-mno\-slow\-bytes\fR" 4
16319 .IX Item "-mno-slow-bytes"
16320 .PD
16321 Prefer word access when reading byte quantities.
16322 .IP "\fB\-mlittle\-endian\fR" 4
16323 .IX Item "-mlittle-endian"
16324 .PD 0
16325 .IP "\fB\-mbig\-endian\fR" 4
16326 .IX Item "-mbig-endian"
16327 .PD
16328 Generate code for a little-endian target.
16329 .IP "\fB\-m210\fR" 4
16330 .IX Item "-m210"
16331 .PD 0
16332 .IP "\fB\-m340\fR" 4
16333 .IX Item "-m340"
16334 .PD
16335 Generate code for the 210 processor.
16336 .IP "\fB\-mno\-lsim\fR" 4
16337 .IX Item "-mno-lsim"
16338 Assume that runtime support has been provided and so omit the
16339 simulator library (\fIlibsim.a)\fR from the linker command line.
16340 .IP "\fB\-mstack\-increment=\fR\fIsize\fR" 4
16341 .IX Item "-mstack-increment=size"
16342 Set the maximum amount for a single stack increment operation.  Large
16343 values can increase the speed of programs that contain functions
16344 that need a large amount of stack space, but they can also trigger a
16345 segmentation fault if the stack is extended too much.  The default
16346 value is 0x1000.
16347 .PP
16348 \fIMeP Options\fR
16349 .IX Subsection "MeP Options"
16350 .IP "\fB\-mabsdiff\fR" 4
16351 .IX Item "-mabsdiff"
16352 Enables the \f(CW\*(C`abs\*(C'\fR instruction, which is the absolute difference
16353 between two registers.
16354 .IP "\fB\-mall\-opts\fR" 4
16355 .IX Item "-mall-opts"
16356 Enables all the optional instructions\-\-\-average, multiply, divide, bit
16357 operations, leading zero, absolute difference, min/max, clip, and
16358 saturation.
16359 .IP "\fB\-maverage\fR" 4
16360 .IX Item "-maverage"
16361 Enables the \f(CW\*(C`ave\*(C'\fR instruction, which computes the average of two
16362 registers.
16363 .IP "\fB\-mbased=\fR\fIn\fR" 4
16364 .IX Item "-mbased=n"
16365 Variables of size \fIn\fR bytes or smaller are placed in the
16366 \&\f(CW\*(C`.based\*(C'\fR section by default.  Based variables use the \f(CW$tp\fR
16367 register as a base register, and there is a 128\-byte limit to the
16368 \&\f(CW\*(C`.based\*(C'\fR section.
16369 .IP "\fB\-mbitops\fR" 4
16370 .IX Item "-mbitops"
16371 Enables the bit operation instructions\-\-\-bit test (\f(CW\*(C`btstm\*(C'\fR), set
16372 (\f(CW\*(C`bsetm\*(C'\fR), clear (\f(CW\*(C`bclrm\*(C'\fR), invert (\f(CW\*(C`bnotm\*(C'\fR), and
16373 test-and-set (\f(CW\*(C`tas\*(C'\fR).
16374 .IP "\fB\-mc=\fR\fIname\fR" 4
16375 .IX Item "-mc=name"
16376 Selects which section constant data is placed in.  \fIname\fR may
16377 be \fBtiny\fR, \fBnear\fR, or \fBfar\fR.
16378 .IP "\fB\-mclip\fR" 4
16379 .IX Item "-mclip"
16380 Enables the \f(CW\*(C`clip\*(C'\fR instruction.  Note that \fB\-mclip\fR is not
16381 useful unless you also provide \fB\-mminmax\fR.
16382 .IP "\fB\-mconfig=\fR\fIname\fR" 4
16383 .IX Item "-mconfig=name"
16384 Selects one of the built-in core configurations.  Each MeP chip has
16385 one or more modules in it; each module has a core \s-1CPU\s0 and a variety of
16386 coprocessors, optional instructions, and peripherals.  The
16387 \&\f(CW\*(C`MeP\-Integrator\*(C'\fR tool, not part of \s-1GCC\s0, provides these
16388 configurations through this option; using this option is the same as
16389 using all the corresponding command-line options.  The default
16390 configuration is \fBdefault\fR.
16391 .IP "\fB\-mcop\fR" 4
16392 .IX Item "-mcop"
16393 Enables the coprocessor instructions.  By default, this is a 32\-bit
16394 coprocessor.  Note that the coprocessor is normally enabled via the
16395 \&\fB\-mconfig=\fR option.
16396 .IP "\fB\-mcop32\fR" 4
16397 .IX Item "-mcop32"
16398 Enables the 32\-bit coprocessor's instructions.
16399 .IP "\fB\-mcop64\fR" 4
16400 .IX Item "-mcop64"
16401 Enables the 64\-bit coprocessor's instructions.
16402 .IP "\fB\-mivc2\fR" 4
16403 .IX Item "-mivc2"
16404 Enables \s-1IVC2\s0 scheduling.  \s-1IVC2\s0 is a 64\-bit \s-1VLIW\s0 coprocessor.
16405 .IP "\fB\-mdc\fR" 4
16406 .IX Item "-mdc"
16407 Causes constant variables to be placed in the \f(CW\*(C`.near\*(C'\fR section.
16408 .IP "\fB\-mdiv\fR" 4
16409 .IX Item "-mdiv"
16410 Enables the \f(CW\*(C`div\*(C'\fR and \f(CW\*(C`divu\*(C'\fR instructions.
16411 .IP "\fB\-meb\fR" 4
16412 .IX Item "-meb"
16413 Generate big-endian code.
16414 .IP "\fB\-mel\fR" 4
16415 .IX Item "-mel"
16416 Generate little-endian code.
16417 .IP "\fB\-mio\-volatile\fR" 4
16418 .IX Item "-mio-volatile"
16419 Tells the compiler that any variable marked with the \f(CW\*(C`io\*(C'\fR
16420 attribute is to be considered volatile.
16421 .IP "\fB\-ml\fR" 4
16422 .IX Item "-ml"
16423 Causes variables to be assigned to the \f(CW\*(C`.far\*(C'\fR section by default.
16424 .IP "\fB\-mleadz\fR" 4
16425 .IX Item "-mleadz"
16426 Enables the \f(CW\*(C`leadz\*(C'\fR (leading zero) instruction.
16427 .IP "\fB\-mm\fR" 4
16428 .IX Item "-mm"
16429 Causes variables to be assigned to the \f(CW\*(C`.near\*(C'\fR section by default.
16430 .IP "\fB\-mminmax\fR" 4
16431 .IX Item "-mminmax"
16432 Enables the \f(CW\*(C`min\*(C'\fR and \f(CW\*(C`max\*(C'\fR instructions.
16433 .IP "\fB\-mmult\fR" 4
16434 .IX Item "-mmult"
16435 Enables the multiplication and multiply-accumulate instructions.
16436 .IP "\fB\-mno\-opts\fR" 4
16437 .IX Item "-mno-opts"
16438 Disables all the optional instructions enabled by \fB\-mall\-opts\fR.
16439 .IP "\fB\-mrepeat\fR" 4
16440 .IX Item "-mrepeat"
16441 Enables the \f(CW\*(C`repeat\*(C'\fR and \f(CW\*(C`erepeat\*(C'\fR instructions, used for
16442 low-overhead looping.
16443 .IP "\fB\-ms\fR" 4
16444 .IX Item "-ms"
16445 Causes all variables to default to the \f(CW\*(C`.tiny\*(C'\fR section.  Note
16446 that there is a 65536\-byte limit to this section.  Accesses to these
16447 variables use the \f(CW%gp\fR base register.
16448 .IP "\fB\-msatur\fR" 4
16449 .IX Item "-msatur"
16450 Enables the saturation instructions.  Note that the compiler does not
16451 currently generate these itself, but this option is included for
16452 compatibility with other tools, like \f(CW\*(C`as\*(C'\fR.
16453 .IP "\fB\-msdram\fR" 4
16454 .IX Item "-msdram"
16455 Link the SDRAM-based runtime instead of the default ROM-based runtime.
16456 .IP "\fB\-msim\fR" 4
16457 .IX Item "-msim"
16458 Link the simulator run-time libraries.
16459 .IP "\fB\-msimnovec\fR" 4
16460 .IX Item "-msimnovec"
16461 Link the simulator runtime libraries, excluding built-in support
16462 for reset and exception vectors and tables.
16463 .IP "\fB\-mtf\fR" 4
16464 .IX Item "-mtf"
16465 Causes all functions to default to the \f(CW\*(C`.far\*(C'\fR section.  Without
16466 this option, functions default to the \f(CW\*(C`.near\*(C'\fR section.
16467 .IP "\fB\-mtiny=\fR\fIn\fR" 4
16468 .IX Item "-mtiny=n"
16469 Variables that are \fIn\fR bytes or smaller are allocated to the
16470 \&\f(CW\*(C`.tiny\*(C'\fR section.  These variables use the \f(CW$gp\fR base
16471 register.  The default for this option is 4, but note that there's a
16472 65536\-byte limit to the \f(CW\*(C`.tiny\*(C'\fR section.
16473 .PP
16474 \fIMicroBlaze Options\fR
16475 .IX Subsection "MicroBlaze Options"
16476 .IP "\fB\-msoft\-float\fR" 4
16477 .IX Item "-msoft-float"
16478 Use software emulation for floating point (default).
16479 .IP "\fB\-mhard\-float\fR" 4
16480 .IX Item "-mhard-float"
16481 Use hardware floating-point instructions.
16482 .IP "\fB\-mmemcpy\fR" 4
16483 .IX Item "-mmemcpy"
16484 Do not optimize block moves, use \f(CW\*(C`memcpy\*(C'\fR.
16485 .IP "\fB\-mno\-clearbss\fR" 4
16486 .IX Item "-mno-clearbss"
16487 This option is deprecated.  Use \fB\-fno\-zero\-initialized\-in\-bss\fR instead.
16488 .IP "\fB\-mcpu=\fR\fIcpu-type\fR" 4
16489 .IX Item "-mcpu=cpu-type"
16490 Use features of, and schedule code for, the given \s-1CPU\s0.
16491 Supported values are in the format \fBv\fR\fIX\fR\fB.\fR\fI\s-1YY\s0\fR\fB.\fR\fIZ\fR,
16492 where \fIX\fR is a major version, \fI\s-1YY\s0\fR is the minor version, and
16493 \&\fIZ\fR is compatibility code.  Example values are \fBv3.00.a\fR,
16494 \&\fBv4.00.b\fR, \fBv5.00.a\fR, \fBv5.00.b\fR, \fBv5.00.b\fR, \fBv6.00.a\fR.
16495 .IP "\fB\-mxl\-soft\-mul\fR" 4
16496 .IX Item "-mxl-soft-mul"
16497 Use software multiply emulation (default).
16498 .IP "\fB\-mxl\-soft\-div\fR" 4
16499 .IX Item "-mxl-soft-div"
16500 Use software emulation for divides (default).
16501 .IP "\fB\-mxl\-barrel\-shift\fR" 4
16502 .IX Item "-mxl-barrel-shift"
16503 Use the hardware barrel shifter.
16504 .IP "\fB\-mxl\-pattern\-compare\fR" 4
16505 .IX Item "-mxl-pattern-compare"
16506 Use pattern compare instructions.
16507 .IP "\fB\-msmall\-divides\fR" 4
16508 .IX Item "-msmall-divides"
16509 Use table lookup optimization for small signed integer divisions.
16510 .IP "\fB\-mxl\-stack\-check\fR" 4
16511 .IX Item "-mxl-stack-check"
16512 This option is deprecated.  Use \fB\-fstack\-check\fR instead.
16513 .IP "\fB\-mxl\-gp\-opt\fR" 4
16514 .IX Item "-mxl-gp-opt"
16515 Use GP-relative \f(CW\*(C`.sdata\*(C'\fR/\f(CW\*(C`.sbss\*(C'\fR sections.
16516 .IP "\fB\-mxl\-multiply\-high\fR" 4
16517 .IX Item "-mxl-multiply-high"
16518 Use multiply high instructions for high part of 32x32 multiply.
16519 .IP "\fB\-mxl\-float\-convert\fR" 4
16520 .IX Item "-mxl-float-convert"
16521 Use hardware floating-point conversion instructions.
16522 .IP "\fB\-mxl\-float\-sqrt\fR" 4
16523 .IX Item "-mxl-float-sqrt"
16524 Use hardware floating-point square root instruction.
16525 .IP "\fB\-mbig\-endian\fR" 4
16526 .IX Item "-mbig-endian"
16527 Generate code for a big-endian target.
16528 .IP "\fB\-mlittle\-endian\fR" 4
16529 .IX Item "-mlittle-endian"
16530 Generate code for a little-endian target.
16531 .IP "\fB\-mxl\-reorder\fR" 4
16532 .IX Item "-mxl-reorder"
16533 Use reorder instructions (swap and byte reversed load/store).
16534 .IP "\fB\-mxl\-mode\-\fR\fIapp-model\fR" 4
16535 .IX Item "-mxl-mode-app-model"
16536 Select application model \fIapp-model\fR.  Valid models are
16537 .RS 4
16538 .IP "\fBexecutable\fR" 4
16539 .IX Item "executable"
16540 normal executable (default), uses startup code \fIcrt0.o\fR.
16541 .IP "\fBxmdstub\fR" 4
16542 .IX Item "xmdstub"
16543 for use with Xilinx Microprocessor Debugger (\s-1XMD\s0) based
16544 software intrusive debug agent called xmdstub. This uses startup file
16545 \&\fIcrt1.o\fR and sets the start address of the program to 0x800.
16546 .IP "\fBbootstrap\fR" 4
16547 .IX Item "bootstrap"
16548 for applications that are loaded using a bootloader.
16549 This model uses startup file \fIcrt2.o\fR which does not contain a processor
16550 reset vector handler. This is suitable for transferring control on a
16551 processor reset to the bootloader rather than the application.
16552 .IP "\fBnovectors\fR" 4
16553 .IX Item "novectors"
16554 for applications that do not require any of the
16555 MicroBlaze vectors. This option may be useful for applications running
16556 within a monitoring application. This model uses \fIcrt3.o\fR as a startup file.
16557 .RE
16558 .RS 4
16559 .Sp
16560 Option \fB\-xl\-mode\-\fR\fIapp-model\fR is a deprecated alias for
16561 \&\fB\-mxl\-mode\-\fR\fIapp-model\fR.
16562 .RE
16563 .PP
16564 \fI\s-1MIPS\s0 Options\fR
16565 .IX Subsection "MIPS Options"
16566 .IP "\fB\-EB\fR" 4
16567 .IX Item "-EB"
16568 Generate big-endian code.
16569 .IP "\fB\-EL\fR" 4
16570 .IX Item "-EL"
16571 Generate little-endian code.  This is the default for \fBmips*el\-*\-*\fR
16572 configurations.
16573 .IP "\fB\-march=\fR\fIarch\fR" 4
16574 .IX Item "-march=arch"
16575 Generate code that runs on \fIarch\fR, which can be the name of a
16576 generic \s-1MIPS\s0 \s-1ISA\s0, or the name of a particular processor.
16577 The \s-1ISA\s0 names are:
16578 \&\fBmips1\fR, \fBmips2\fR, \fBmips3\fR, \fBmips4\fR,
16579 \&\fBmips32\fR, \fBmips32r2\fR, \fBmips32r3\fR, \fBmips32r5\fR,
16580 \&\fBmips32r6\fR, \fBmips64\fR, \fBmips64r2\fR, \fBmips64r3\fR,
16581 \&\fBmips64r5\fR and \fBmips64r6\fR.
16582 The processor names are:
16583 \&\fB4kc\fR, \fB4km\fR, \fB4kp\fR, \fB4ksc\fR,
16584 \&\fB4kec\fR, \fB4kem\fR, \fB4kep\fR, \fB4ksd\fR,
16585 \&\fB5kc\fR, \fB5kf\fR,
16586 \&\fB20kc\fR,
16587 \&\fB24kc\fR, \fB24kf2_1\fR, \fB24kf1_1\fR,
16588 \&\fB24kec\fR, \fB24kef2_1\fR, \fB24kef1_1\fR,
16589 \&\fB34kc\fR, \fB34kf2_1\fR, \fB34kf1_1\fR, \fB34kn\fR,
16590 \&\fB74kc\fR, \fB74kf2_1\fR, \fB74kf1_1\fR, \fB74kf3_2\fR,
16591 \&\fB1004kc\fR, \fB1004kf2_1\fR, \fB1004kf1_1\fR,
16592 \&\fBloongson2e\fR, \fBloongson2f\fR, \fBloongson3a\fR,
16593 \&\fBm4k\fR,
16594 \&\fBm14k\fR, \fBm14kc\fR, \fBm14ke\fR, \fBm14kec\fR,
16595 \&\fBocteon\fR, \fBocteon+\fR, \fBocteon2\fR, \fBocteon3\fR,
16596 \&\fBorion\fR,
16597 \&\fBp5600\fR,
16598 \&\fBr2000\fR, \fBr3000\fR, \fBr3900\fR, \fBr4000\fR, \fBr4400\fR,
16599 \&\fBr4600\fR, \fBr4650\fR, \fBr4700\fR, \fBr6000\fR, \fBr8000\fR,
16600 \&\fBrm7000\fR, \fBrm9000\fR,
16601 \&\fBr10000\fR, \fBr12000\fR, \fBr14000\fR, \fBr16000\fR,
16602 \&\fBsb1\fR,
16603 \&\fBsr71000\fR,
16604 \&\fBvr4100\fR, \fBvr4111\fR, \fBvr4120\fR, \fBvr4130\fR, \fBvr4300\fR,
16605 \&\fBvr5000\fR, \fBvr5400\fR, \fBvr5500\fR,
16606 \&\fBxlr\fR and \fBxlp\fR.
16607 The special value \fBfrom-abi\fR selects the
16608 most compatible architecture for the selected \s-1ABI\s0 (that is,
16609 \&\fBmips1\fR for 32\-bit ABIs and \fBmips3\fR for 64\-bit ABIs).
16610 .Sp
16611 The native Linux/GNU toolchain also supports the value \fBnative\fR,
16612 which selects the best architecture option for the host processor.
16613 \&\fB\-march=native\fR has no effect if \s-1GCC\s0 does not recognize
16614 the processor.
16615 .Sp
16616 In processor names, a final \fB000\fR can be abbreviated as \fBk\fR
16617 (for example, \fB\-march=r2k\fR).  Prefixes are optional, and
16618 \&\fBvr\fR may be written \fBr\fR.
16619 .Sp
16620 Names of the form \fIn\fR\fBf2_1\fR refer to processors with
16621 FPUs clocked at half the rate of the core, names of the form
16622 \&\fIn\fR\fBf1_1\fR refer to processors with FPUs clocked at the same
16623 rate as the core, and names of the form \fIn\fR\fBf3_2\fR refer to
16624 processors with FPUs clocked a ratio of 3:2 with respect to the core.
16625 For compatibility reasons, \fIn\fR\fBf\fR is accepted as a synonym
16626 for \fIn\fR\fBf2_1\fR while \fIn\fR\fBx\fR and \fIb\fR\fBfx\fR are
16627 accepted as synonyms for \fIn\fR\fBf1_1\fR.
16628 .Sp
16629 \&\s-1GCC\s0 defines two macros based on the value of this option.  The first
16630 is \f(CW\*(C`_MIPS_ARCH\*(C'\fR, which gives the name of target architecture, as
16631 a string.  The second has the form \f(CW\*(C`_MIPS_ARCH_\f(CIfoo\f(CW\*(C'\fR,
16632 where \fIfoo\fR is the capitalized value of \f(CW\*(C`_MIPS_ARCH\*(C'\fR.
16633 For example, \fB\-march=r2000\fR sets \f(CW\*(C`_MIPS_ARCH\*(C'\fR
16634 to \f(CW"r2000"\fR and defines the macro \f(CW\*(C`_MIPS_ARCH_R2000\*(C'\fR.
16635 .Sp
16636 Note that the \f(CW\*(C`_MIPS_ARCH\*(C'\fR macro uses the processor names given
16637 above.  In other words, it has the full prefix and does not
16638 abbreviate \fB000\fR as \fBk\fR.  In the case of \fBfrom-abi\fR,
16639 the macro names the resolved architecture (either \f(CW"mips1"\fR or
16640 \&\f(CW"mips3"\fR).  It names the default architecture when no
16641 \&\fB\-march\fR option is given.
16642 .IP "\fB\-mtune=\fR\fIarch\fR" 4
16643 .IX Item "-mtune=arch"
16644 Optimize for \fIarch\fR.  Among other things, this option controls
16645 the way instructions are scheduled, and the perceived cost of arithmetic
16646 operations.  The list of \fIarch\fR values is the same as for
16647 \&\fB\-march\fR.
16648 .Sp
16649 When this option is not used, \s-1GCC\s0 optimizes for the processor
16650 specified by \fB\-march\fR.  By using \fB\-march\fR and
16651 \&\fB\-mtune\fR together, it is possible to generate code that
16652 runs on a family of processors, but optimize the code for one
16653 particular member of that family.
16654 .Sp
16655 \&\fB\-mtune\fR defines the macros \f(CW\*(C`_MIPS_TUNE\*(C'\fR and
16656 \&\f(CW\*(C`_MIPS_TUNE_\f(CIfoo\f(CW\*(C'\fR, which work in the same way as the
16657 \&\fB\-march\fR ones described above.
16658 .IP "\fB\-mips1\fR" 4
16659 .IX Item "-mips1"
16660 Equivalent to \fB\-march=mips1\fR.
16661 .IP "\fB\-mips2\fR" 4
16662 .IX Item "-mips2"
16663 Equivalent to \fB\-march=mips2\fR.
16664 .IP "\fB\-mips3\fR" 4
16665 .IX Item "-mips3"
16666 Equivalent to \fB\-march=mips3\fR.
16667 .IP "\fB\-mips4\fR" 4
16668 .IX Item "-mips4"
16669 Equivalent to \fB\-march=mips4\fR.
16670 .IP "\fB\-mips32\fR" 4
16671 .IX Item "-mips32"
16672 Equivalent to \fB\-march=mips32\fR.
16673 .IP "\fB\-mips32r3\fR" 4
16674 .IX Item "-mips32r3"
16675 Equivalent to \fB\-march=mips32r3\fR.
16676 .IP "\fB\-mips32r5\fR" 4
16677 .IX Item "-mips32r5"
16678 Equivalent to \fB\-march=mips32r5\fR.
16679 .IP "\fB\-mips32r6\fR" 4
16680 .IX Item "-mips32r6"
16681 Equivalent to \fB\-march=mips32r6\fR.
16682 .IP "\fB\-mips64\fR" 4
16683 .IX Item "-mips64"
16684 Equivalent to \fB\-march=mips64\fR.
16685 .IP "\fB\-mips64r2\fR" 4
16686 .IX Item "-mips64r2"
16687 Equivalent to \fB\-march=mips64r2\fR.
16688 .IP "\fB\-mips64r3\fR" 4
16689 .IX Item "-mips64r3"
16690 Equivalent to \fB\-march=mips64r3\fR.
16691 .IP "\fB\-mips64r5\fR" 4
16692 .IX Item "-mips64r5"
16693 Equivalent to \fB\-march=mips64r5\fR.
16694 .IP "\fB\-mips64r6\fR" 4
16695 .IX Item "-mips64r6"
16696 Equivalent to \fB\-march=mips64r6\fR.
16697 .IP "\fB\-mips16\fR" 4
16698 .IX Item "-mips16"
16699 .PD 0
16700 .IP "\fB\-mno\-mips16\fR" 4
16701 .IX Item "-mno-mips16"
16702 .PD
16703 Generate (do not generate) \s-1MIPS16\s0 code.  If \s-1GCC\s0 is targeting a
16704 \&\s-1MIPS32\s0 or \s-1MIPS64\s0 architecture, it makes use of the MIPS16e \s-1ASE\s0.
16705 .Sp
16706 \&\s-1MIPS16\s0 code generation can also be controlled on a per-function basis
16707 by means of \f(CW\*(C`mips16\*(C'\fR and \f(CW\*(C`nomips16\*(C'\fR attributes.
16708 .IP "\fB\-mflip\-mips16\fR" 4
16709 .IX Item "-mflip-mips16"
16710 Generate \s-1MIPS16\s0 code on alternating functions.  This option is provided
16711 for regression testing of mixed MIPS16/non\-MIPS16 code generation, and is
16712 not intended for ordinary use in compiling user code.
16713 .IP "\fB\-minterlink\-compressed\fR" 4
16714 .IX Item "-minterlink-compressed"
16715 .PD 0
16716 .IP "\fB\-mno\-interlink\-compressed\fR" 4
16717 .IX Item "-mno-interlink-compressed"
16718 .PD
16719 Require (do not require) that code using the standard (uncompressed) \s-1MIPS\s0 \s-1ISA\s0
16720 be link-compatible with \s-1MIPS16\s0 and microMIPS code, and vice versa.
16721 .Sp
16722 For example, code using the standard \s-1ISA\s0 encoding cannot jump directly
16723 to \s-1MIPS16\s0 or microMIPS code; it must either use a call or an indirect jump.
16724 \&\fB\-minterlink\-compressed\fR therefore disables direct jumps unless \s-1GCC\s0
16725 knows that the target of the jump is not compressed.
16726 .IP "\fB\-minterlink\-mips16\fR" 4
16727 .IX Item "-minterlink-mips16"
16728 .PD 0
16729 .IP "\fB\-mno\-interlink\-mips16\fR" 4
16730 .IX Item "-mno-interlink-mips16"
16731 .PD
16732 Aliases of \fB\-minterlink\-compressed\fR and
16733 \&\fB\-mno\-interlink\-compressed\fR.  These options predate the microMIPS \s-1ASE\s0
16734 and are retained for backwards compatibility.
16735 .IP "\fB\-mabi=32\fR" 4
16736 .IX Item "-mabi=32"
16737 .PD 0
16738 .IP "\fB\-mabi=o64\fR" 4
16739 .IX Item "-mabi=o64"
16740 .IP "\fB\-mabi=n32\fR" 4
16741 .IX Item "-mabi=n32"
16742 .IP "\fB\-mabi=64\fR" 4
16743 .IX Item "-mabi=64"
16744 .IP "\fB\-mabi=eabi\fR" 4
16745 .IX Item "-mabi=eabi"
16746 .PD
16747 Generate code for the given \s-1ABI\s0.
16748 .Sp
16749 Note that the \s-1EABI\s0 has a 32\-bit and a 64\-bit variant.  \s-1GCC\s0 normally
16750 generates 64\-bit code when you select a 64\-bit architecture, but you
16751 can use \fB\-mgp32\fR to get 32\-bit code instead.
16752 .Sp
16753 For information about the O64 \s-1ABI\s0, see
16754 <\fBhttp://gcc.gnu.org/projects/mipso64\-abi.html\fR>.
16755 .Sp
16756 \&\s-1GCC\s0 supports a variant of the o32 \s-1ABI\s0 in which floating-point registers
16757 are 64 rather than 32 bits wide.  You can select this combination with
16758 \&\fB\-mabi=32\fR \fB\-mfp64\fR.  This \s-1ABI\s0 relies on the \f(CW\*(C`mthc1\*(C'\fR
16759 and \f(CW\*(C`mfhc1\*(C'\fR instructions and is therefore only supported for
16760 \&\s-1MIPS32R2\s0, \s-1MIPS32R3\s0 and \s-1MIPS32R5\s0 processors.
16761 .Sp
16762 The register assignments for arguments and return values remain the
16763 same, but each scalar value is passed in a single 64\-bit register
16764 rather than a pair of 32\-bit registers.  For example, scalar
16765 floating-point values are returned in \fB\f(CB$f0\fB\fR only, not a
16766 \&\fB\f(CB$f0\fB\fR/\fB\f(CB$f1\fB\fR pair.  The set of call-saved registers also
16767 remains the same in that the even-numbered double-precision registers
16768 are saved.
16769 .Sp
16770 Two additional variants of the o32 \s-1ABI\s0 are supported to enable
16771 a transition from 32\-bit to 64\-bit registers.  These are \s-1FPXX\s0
16772 (\fB\-mfpxx\fR) and \s-1FP64A\s0 (\fB\-mfp64\fR \fB\-mno\-odd\-spreg\fR).
16773 The \s-1FPXX\s0 extension mandates that all code must execute correctly
16774 when run using 32\-bit or 64\-bit registers.  The code can be interlinked
16775 with either \s-1FP32\s0 or \s-1FP64\s0, but not both.
16776 The \s-1FP64A\s0 extension is similar to the \s-1FP64\s0 extension but forbids the
16777 use of odd-numbered single-precision registers.  This can be used
16778 in conjunction with the \f(CW\*(C`FRE\*(C'\fR mode of FPUs in \s-1MIPS32R5\s0
16779 processors and allows both \s-1FP32\s0 and \s-1FP64A\s0 code to interlink and
16780 run in the same process without changing \s-1FPU\s0 modes.
16781 .IP "\fB\-mabicalls\fR" 4
16782 .IX Item "-mabicalls"
16783 .PD 0
16784 .IP "\fB\-mno\-abicalls\fR" 4
16785 .IX Item "-mno-abicalls"
16786 .PD
16787 Generate (do not generate) code that is suitable for SVR4\-style
16788 dynamic objects.  \fB\-mabicalls\fR is the default for SVR4\-based
16789 systems.
16790 .IP "\fB\-mshared\fR" 4
16791 .IX Item "-mshared"
16792 .PD 0
16793 .IP "\fB\-mno\-shared\fR" 4
16794 .IX Item "-mno-shared"
16795 .PD
16796 Generate (do not generate) code that is fully position-independent,
16797 and that can therefore be linked into shared libraries.  This option
16798 only affects \fB\-mabicalls\fR.
16799 .Sp
16800 All \fB\-mabicalls\fR code has traditionally been position-independent,
16801 regardless of options like \fB\-fPIC\fR and \fB\-fpic\fR.  However,
16802 as an extension, the \s-1GNU\s0 toolchain allows executables to use absolute
16803 accesses for locally-binding symbols.  It can also use shorter \s-1GP\s0
16804 initialization sequences and generate direct calls to locally-defined
16805 functions.  This mode is selected by \fB\-mno\-shared\fR.
16806 .Sp
16807 \&\fB\-mno\-shared\fR depends on binutils 2.16 or higher and generates
16808 objects that can only be linked by the \s-1GNU\s0 linker.  However, the option
16809 does not affect the \s-1ABI\s0 of the final executable; it only affects the \s-1ABI\s0
16810 of relocatable objects.  Using \fB\-mno\-shared\fR generally makes
16811 executables both smaller and quicker.
16812 .Sp
16813 \&\fB\-mshared\fR is the default.
16814 .IP "\fB\-mplt\fR" 4
16815 .IX Item "-mplt"
16816 .PD 0
16817 .IP "\fB\-mno\-plt\fR" 4
16818 .IX Item "-mno-plt"
16819 .PD
16820 Assume (do not assume) that the static and dynamic linkers
16821 support PLTs and copy relocations.  This option only affects
16822 \&\fB\-mno\-shared \-mabicalls\fR.  For the n64 \s-1ABI\s0, this option
16823 has no effect without \fB\-msym32\fR.
16824 .Sp
16825 You can make \fB\-mplt\fR the default by configuring
16826 \&\s-1GCC\s0 with \fB\-\-with\-mips\-plt\fR.  The default is
16827 \&\fB\-mno\-plt\fR otherwise.
16828 .IP "\fB\-mxgot\fR" 4
16829 .IX Item "-mxgot"
16830 .PD 0
16831 .IP "\fB\-mno\-xgot\fR" 4
16832 .IX Item "-mno-xgot"
16833 .PD
16834 Lift (do not lift) the usual restrictions on the size of the global
16835 offset table.
16836 .Sp
16837 \&\s-1GCC\s0 normally uses a single instruction to load values from the \s-1GOT\s0.
16838 While this is relatively efficient, it only works if the \s-1GOT\s0
16839 is smaller than about 64k.  Anything larger causes the linker
16840 to report an error such as:
16841 .Sp
16842 .Vb 1
16843 \&        relocation truncated to fit: R_MIPS_GOT16 foobar
16844 .Ve
16845 .Sp
16846 If this happens, you should recompile your code with \fB\-mxgot\fR.
16847 This works with very large GOTs, although the code is also
16848 less efficient, since it takes three instructions to fetch the
16849 value of a global symbol.
16850 .Sp
16851 Note that some linkers can create multiple GOTs.  If you have such a
16852 linker, you should only need to use \fB\-mxgot\fR when a single object
16853 file accesses more than 64k's worth of \s-1GOT\s0 entries.  Very few do.
16854 .Sp
16855 These options have no effect unless \s-1GCC\s0 is generating position
16856 independent code.
16857 .IP "\fB\-mgp32\fR" 4
16858 .IX Item "-mgp32"
16859 Assume that general-purpose registers are 32 bits wide.
16860 .IP "\fB\-mgp64\fR" 4
16861 .IX Item "-mgp64"
16862 Assume that general-purpose registers are 64 bits wide.
16863 .IP "\fB\-mfp32\fR" 4
16864 .IX Item "-mfp32"
16865 Assume that floating-point registers are 32 bits wide.
16866 .IP "\fB\-mfp64\fR" 4
16867 .IX Item "-mfp64"
16868 Assume that floating-point registers are 64 bits wide.
16869 .IP "\fB\-mfpxx\fR" 4
16870 .IX Item "-mfpxx"
16871 Do not assume the width of floating-point registers.
16872 .IP "\fB\-mhard\-float\fR" 4
16873 .IX Item "-mhard-float"
16874 Use floating-point coprocessor instructions.
16875 .IP "\fB\-msoft\-float\fR" 4
16876 .IX Item "-msoft-float"
16877 Do not use floating-point coprocessor instructions.  Implement
16878 floating-point calculations using library calls instead.
16879 .IP "\fB\-mno\-float\fR" 4
16880 .IX Item "-mno-float"
16881 Equivalent to \fB\-msoft\-float\fR, but additionally asserts that the
16882 program being compiled does not perform any floating-point operations.
16883 This option is presently supported only by some bare-metal \s-1MIPS\s0
16884 configurations, where it may select a special set of libraries
16885 that lack all floating-point support (including, for example, the
16886 floating-point \f(CW\*(C`printf\*(C'\fR formats).  
16887 If code compiled with \fB\-mno\-float\fR accidentally contains
16888 floating-point operations, it is likely to suffer a link-time
16889 or run-time failure.
16890 .IP "\fB\-msingle\-float\fR" 4
16891 .IX Item "-msingle-float"
16892 Assume that the floating-point coprocessor only supports single-precision
16893 operations.
16894 .IP "\fB\-mdouble\-float\fR" 4
16895 .IX Item "-mdouble-float"
16896 Assume that the floating-point coprocessor supports double-precision
16897 operations.  This is the default.
16898 .IP "\fB\-modd\-spreg\fR" 4
16899 .IX Item "-modd-spreg"
16900 .PD 0
16901 .IP "\fB\-mno\-odd\-spreg\fR" 4
16902 .IX Item "-mno-odd-spreg"
16903 .PD
16904 Enable the use of odd-numbered single-precision floating-point registers
16905 for the o32 \s-1ABI\s0.  This is the default for processors that are known to
16906 support these registers.  When using the o32 \s-1FPXX\s0 \s-1ABI\s0, \fB\-mno\-odd\-spreg\fR
16907 is set by default.
16908 .IP "\fB\-mabs=2008\fR" 4
16909 .IX Item "-mabs=2008"
16910 .PD 0
16911 .IP "\fB\-mabs=legacy\fR" 4
16912 .IX Item "-mabs=legacy"
16913 .PD
16914 These options control the treatment of the special not-a-number (NaN)
16915 \&\s-1IEEE\s0 754 floating-point data with the \f(CW\*(C`abs.\f(CIfmt\f(CW\*(C'\fR and
16916 \&\f(CW\*(C`neg.\f(CIfmt\f(CW\*(C'\fR machine instructions.
16917 .Sp
16918 By default or when the \fB\-mabs=legacy\fR is used the legacy
16919 treatment is selected.  In this case these instructions are considered
16920 arithmetic and avoided where correct operation is required and the
16921 input operand might be a NaN.  A longer sequence of instructions that
16922 manipulate the sign bit of floating-point datum manually is used
16923 instead unless the \fB\-ffinite\-math\-only\fR option has also been
16924 specified.
16925 .Sp
16926 The \fB\-mabs=2008\fR option selects the \s-1IEEE\s0 754\-2008 treatment.  In
16927 this case these instructions are considered non-arithmetic and therefore
16928 operating correctly in all cases, including in particular where the
16929 input operand is a NaN.  These instructions are therefore always used
16930 for the respective operations.
16931 .IP "\fB\-mnan=2008\fR" 4
16932 .IX Item "-mnan=2008"
16933 .PD 0
16934 .IP "\fB\-mnan=legacy\fR" 4
16935 .IX Item "-mnan=legacy"
16936 .PD
16937 These options control the encoding of the special not-a-number (NaN)
16938 \&\s-1IEEE\s0 754 floating-point data.
16939 .Sp
16940 The \fB\-mnan=legacy\fR option selects the legacy encoding.  In this
16941 case quiet NaNs (qNaNs) are denoted by the first bit of their trailing
16942 significand field being 0, whereas signalling NaNs (sNaNs) are denoted
16943 by the first bit of their trailing significand field being 1.
16944 .Sp
16945 The \fB\-mnan=2008\fR option selects the \s-1IEEE\s0 754\-2008 encoding.  In
16946 this case qNaNs are denoted by the first bit of their trailing
16947 significand field being 1, whereas sNaNs are denoted by the first bit of
16948 their trailing significand field being 0.
16949 .Sp
16950 The default is \fB\-mnan=legacy\fR unless \s-1GCC\s0 has been configured with
16951 \&\fB\-\-with\-nan=2008\fR.
16952 .IP "\fB\-mllsc\fR" 4
16953 .IX Item "-mllsc"
16954 .PD 0
16955 .IP "\fB\-mno\-llsc\fR" 4
16956 .IX Item "-mno-llsc"
16957 .PD
16958 Use (do not use) \fBll\fR, \fBsc\fR, and \fBsync\fR instructions to
16959 implement atomic memory built-in functions.  When neither option is
16960 specified, \s-1GCC\s0 uses the instructions if the target architecture
16961 supports them.
16962 .Sp
16963 \&\fB\-mllsc\fR is useful if the runtime environment can emulate the
16964 instructions and \fB\-mno\-llsc\fR can be useful when compiling for
16965 nonstandard ISAs.  You can make either option the default by
16966 configuring \s-1GCC\s0 with \fB\-\-with\-llsc\fR and \fB\-\-without\-llsc\fR
16967 respectively.  \fB\-\-with\-llsc\fR is the default for some
16968 configurations; see the installation documentation for details.
16969 .IP "\fB\-mdsp\fR" 4
16970 .IX Item "-mdsp"
16971 .PD 0
16972 .IP "\fB\-mno\-dsp\fR" 4
16973 .IX Item "-mno-dsp"
16974 .PD
16975 Use (do not use) revision 1 of the \s-1MIPS\s0 \s-1DSP\s0 \s-1ASE\s0.
16976   This option defines the
16977 preprocessor macro \f(CW\*(C`_\|_mips_dsp\*(C'\fR.  It also defines
16978 \&\f(CW\*(C`_\|_mips_dsp_rev\*(C'\fR to 1.
16979 .IP "\fB\-mdspr2\fR" 4
16980 .IX Item "-mdspr2"
16981 .PD 0
16982 .IP "\fB\-mno\-dspr2\fR" 4
16983 .IX Item "-mno-dspr2"
16984 .PD
16985 Use (do not use) revision 2 of the \s-1MIPS\s0 \s-1DSP\s0 \s-1ASE\s0.
16986   This option defines the
16987 preprocessor macros \f(CW\*(C`_\|_mips_dsp\*(C'\fR and \f(CW\*(C`_\|_mips_dspr2\*(C'\fR.
16988 It also defines \f(CW\*(C`_\|_mips_dsp_rev\*(C'\fR to 2.
16989 .IP "\fB\-msmartmips\fR" 4
16990 .IX Item "-msmartmips"
16991 .PD 0
16992 .IP "\fB\-mno\-smartmips\fR" 4
16993 .IX Item "-mno-smartmips"
16994 .PD
16995 Use (do not use) the \s-1MIPS\s0 SmartMIPS \s-1ASE\s0.
16996 .IP "\fB\-mpaired\-single\fR" 4
16997 .IX Item "-mpaired-single"
16998 .PD 0
16999 .IP "\fB\-mno\-paired\-single\fR" 4
17000 .IX Item "-mno-paired-single"
17001 .PD
17002 Use (do not use) paired-single floating-point instructions.
17003   This option requires
17004 hardware floating-point support to be enabled.
17005 .IP "\fB\-mdmx\fR" 4
17006 .IX Item "-mdmx"
17007 .PD 0
17008 .IP "\fB\-mno\-mdmx\fR" 4
17009 .IX Item "-mno-mdmx"
17010 .PD
17011 Use (do not use) \s-1MIPS\s0 Digital Media Extension instructions.
17012 This option can only be used when generating 64\-bit code and requires
17013 hardware floating-point support to be enabled.
17014 .IP "\fB\-mips3d\fR" 4
17015 .IX Item "-mips3d"
17016 .PD 0
17017 .IP "\fB\-mno\-mips3d\fR" 4
17018 .IX Item "-mno-mips3d"
17019 .PD
17020 Use (do not use) the \s-1MIPS\-3D\s0 \s-1ASE\s0.  
17021 The option \fB\-mips3d\fR implies \fB\-mpaired\-single\fR.
17022 .IP "\fB\-mmicromips\fR" 4
17023 .IX Item "-mmicromips"
17024 .PD 0
17025 .IP "\fB\-mno\-micromips\fR" 4
17026 .IX Item "-mno-micromips"
17027 .PD
17028 Generate (do not generate) microMIPS code.
17029 .Sp
17030 MicroMIPS code generation can also be controlled on a per-function basis
17031 by means of \f(CW\*(C`micromips\*(C'\fR and \f(CW\*(C`nomicromips\*(C'\fR attributes.
17032 .IP "\fB\-mmt\fR" 4
17033 .IX Item "-mmt"
17034 .PD 0
17035 .IP "\fB\-mno\-mt\fR" 4
17036 .IX Item "-mno-mt"
17037 .PD
17038 Use (do not use) \s-1MT\s0 Multithreading instructions.
17039 .IP "\fB\-mmcu\fR" 4
17040 .IX Item "-mmcu"
17041 .PD 0
17042 .IP "\fB\-mno\-mcu\fR" 4
17043 .IX Item "-mno-mcu"
17044 .PD
17045 Use (do not use) the \s-1MIPS\s0 \s-1MCU\s0 \s-1ASE\s0 instructions.
17046 .IP "\fB\-meva\fR" 4
17047 .IX Item "-meva"
17048 .PD 0
17049 .IP "\fB\-mno\-eva\fR" 4
17050 .IX Item "-mno-eva"
17051 .PD
17052 Use (do not use) the \s-1MIPS\s0 Enhanced Virtual Addressing instructions.
17053 .IP "\fB\-mvirt\fR" 4
17054 .IX Item "-mvirt"
17055 .PD 0
17056 .IP "\fB\-mno\-virt\fR" 4
17057 .IX Item "-mno-virt"
17058 .PD
17059 Use (do not use) the \s-1MIPS\s0 Virtualization Application Specific instructions.
17060 .IP "\fB\-mxpa\fR" 4
17061 .IX Item "-mxpa"
17062 .PD 0
17063 .IP "\fB\-mno\-xpa\fR" 4
17064 .IX Item "-mno-xpa"
17065 .PD
17066 Use (do not use) the \s-1MIPS\s0 eXtended Physical Address (\s-1XPA\s0) instructions.
17067 .IP "\fB\-mlong64\fR" 4
17068 .IX Item "-mlong64"
17069 Force \f(CW\*(C`long\*(C'\fR types to be 64 bits wide.  See \fB\-mlong32\fR for
17070 an explanation of the default and the way that the pointer size is
17071 determined.
17072 .IP "\fB\-mlong32\fR" 4
17073 .IX Item "-mlong32"
17074 Force \f(CW\*(C`long\*(C'\fR, \f(CW\*(C`int\*(C'\fR, and pointer types to be 32 bits wide.
17075 .Sp
17076 The default size of \f(CW\*(C`int\*(C'\fRs, \f(CW\*(C`long\*(C'\fRs and pointers depends on
17077 the \s-1ABI\s0.  All the supported ABIs use 32\-bit \f(CW\*(C`int\*(C'\fRs.  The n64 \s-1ABI\s0
17078 uses 64\-bit \f(CW\*(C`long\*(C'\fRs, as does the 64\-bit \s-1EABI\s0; the others use
17079 32\-bit \f(CW\*(C`long\*(C'\fRs.  Pointers are the same size as \f(CW\*(C`long\*(C'\fRs,
17080 or the same size as integer registers, whichever is smaller.
17081 .IP "\fB\-msym32\fR" 4
17082 .IX Item "-msym32"
17083 .PD 0
17084 .IP "\fB\-mno\-sym32\fR" 4
17085 .IX Item "-mno-sym32"
17086 .PD
17087 Assume (do not assume) that all symbols have 32\-bit values, regardless
17088 of the selected \s-1ABI\s0.  This option is useful in combination with
17089 \&\fB\-mabi=64\fR and \fB\-mno\-abicalls\fR because it allows \s-1GCC\s0
17090 to generate shorter and faster references to symbolic addresses.
17091 .IP "\fB\-G\fR \fInum\fR" 4
17092 .IX Item "-G num"
17093 Put definitions of externally-visible data in a small data section
17094 if that data is no bigger than \fInum\fR bytes.  \s-1GCC\s0 can then generate
17095 more efficient accesses to the data; see \fB\-mgpopt\fR for details.
17096 .Sp
17097 The default \fB\-G\fR option depends on the configuration.
17098 .IP "\fB\-mlocal\-sdata\fR" 4
17099 .IX Item "-mlocal-sdata"
17100 .PD 0
17101 .IP "\fB\-mno\-local\-sdata\fR" 4
17102 .IX Item "-mno-local-sdata"
17103 .PD
17104 Extend (do not extend) the \fB\-G\fR behavior to local data too,
17105 such as to static variables in C.  \fB\-mlocal\-sdata\fR is the
17106 default for all configurations.
17107 .Sp
17108 If the linker complains that an application is using too much small data,
17109 you might want to try rebuilding the less performance-critical parts with
17110 \&\fB\-mno\-local\-sdata\fR.  You might also want to build large
17111 libraries with \fB\-mno\-local\-sdata\fR, so that the libraries leave
17112 more room for the main program.
17113 .IP "\fB\-mextern\-sdata\fR" 4
17114 .IX Item "-mextern-sdata"
17115 .PD 0
17116 .IP "\fB\-mno\-extern\-sdata\fR" 4
17117 .IX Item "-mno-extern-sdata"
17118 .PD
17119 Assume (do not assume) that externally-defined data is in
17120 a small data section if the size of that data is within the \fB\-G\fR limit.
17121 \&\fB\-mextern\-sdata\fR is the default for all configurations.
17122 .Sp
17123 If you compile a module \fIMod\fR with \fB\-mextern\-sdata\fR \fB\-G\fR
17124 \&\fInum\fR \fB\-mgpopt\fR, and \fIMod\fR references a variable \fIVar\fR
17125 that is no bigger than \fInum\fR bytes, you must make sure that \fIVar\fR
17126 is placed in a small data section.  If \fIVar\fR is defined by another
17127 module, you must either compile that module with a high-enough
17128 \&\fB\-G\fR setting or attach a \f(CW\*(C`section\*(C'\fR attribute to \fIVar\fR's
17129 definition.  If \fIVar\fR is common, you must link the application
17130 with a high-enough \fB\-G\fR setting.
17131 .Sp
17132 The easiest way of satisfying these restrictions is to compile
17133 and link every module with the same \fB\-G\fR option.  However,
17134 you may wish to build a library that supports several different
17135 small data limits.  You can do this by compiling the library with
17136 the highest supported \fB\-G\fR setting and additionally using
17137 \&\fB\-mno\-extern\-sdata\fR to stop the library from making assumptions
17138 about externally-defined data.
17139 .IP "\fB\-mgpopt\fR" 4
17140 .IX Item "-mgpopt"
17141 .PD 0
17142 .IP "\fB\-mno\-gpopt\fR" 4
17143 .IX Item "-mno-gpopt"
17144 .PD
17145 Use (do not use) GP-relative accesses for symbols that are known to be
17146 in a small data section; see \fB\-G\fR, \fB\-mlocal\-sdata\fR and
17147 \&\fB\-mextern\-sdata\fR.  \fB\-mgpopt\fR is the default for all
17148 configurations.
17149 .Sp
17150 \&\fB\-mno\-gpopt\fR is useful for cases where the \f(CW$gp\fR register
17151 might not hold the value of \f(CW\*(C`_gp\*(C'\fR.  For example, if the code is
17152 part of a library that might be used in a boot monitor, programs that
17153 call boot monitor routines pass an unknown value in \f(CW$gp\fR.
17154 (In such situations, the boot monitor itself is usually compiled
17155 with \fB\-G0\fR.)
17156 .Sp
17157 \&\fB\-mno\-gpopt\fR implies \fB\-mno\-local\-sdata\fR and
17158 \&\fB\-mno\-extern\-sdata\fR.
17159 .IP "\fB\-membedded\-data\fR" 4
17160 .IX Item "-membedded-data"
17161 .PD 0
17162 .IP "\fB\-mno\-embedded\-data\fR" 4
17163 .IX Item "-mno-embedded-data"
17164 .PD
17165 Allocate variables to the read-only data section first if possible, then
17166 next in the small data section if possible, otherwise in data.  This gives
17167 slightly slower code than the default, but reduces the amount of \s-1RAM\s0 required
17168 when executing, and thus may be preferred for some embedded systems.
17169 .IP "\fB\-muninit\-const\-in\-rodata\fR" 4
17170 .IX Item "-muninit-const-in-rodata"
17171 .PD 0
17172 .IP "\fB\-mno\-uninit\-const\-in\-rodata\fR" 4
17173 .IX Item "-mno-uninit-const-in-rodata"
17174 .PD
17175 Put uninitialized \f(CW\*(C`const\*(C'\fR variables in the read-only data section.
17176 This option is only meaningful in conjunction with \fB\-membedded\-data\fR.
17177 .IP "\fB\-mcode\-readable=\fR\fIsetting\fR" 4
17178 .IX Item "-mcode-readable=setting"
17179 Specify whether \s-1GCC\s0 may generate code that reads from executable sections.
17180 There are three possible settings:
17181 .RS 4
17182 .IP "\fB\-mcode\-readable=yes\fR" 4
17183 .IX Item "-mcode-readable=yes"
17184 Instructions may freely access executable sections.  This is the
17185 default setting.
17186 .IP "\fB\-mcode\-readable=pcrel\fR" 4
17187 .IX Item "-mcode-readable=pcrel"
17188 \&\s-1MIPS16\s0 PC-relative load instructions can access executable sections,
17189 but other instructions must not do so.  This option is useful on 4KSc
17190 and 4KSd processors when the code TLBs have the Read Inhibit bit set.
17191 It is also useful on processors that can be configured to have a dual
17192 instruction/data \s-1SRAM\s0 interface and that, like the M4K, automatically
17193 redirect PC-relative loads to the instruction \s-1RAM\s0.
17194 .IP "\fB\-mcode\-readable=no\fR" 4
17195 .IX Item "-mcode-readable=no"
17196 Instructions must not access executable sections.  This option can be
17197 useful on targets that are configured to have a dual instruction/data
17198 \&\s-1SRAM\s0 interface but that (unlike the M4K) do not automatically redirect
17199 PC-relative loads to the instruction \s-1RAM\s0.
17200 .RE
17201 .RS 4
17202 .RE
17203 .IP "\fB\-msplit\-addresses\fR" 4
17204 .IX Item "-msplit-addresses"
17205 .PD 0
17206 .IP "\fB\-mno\-split\-addresses\fR" 4
17207 .IX Item "-mno-split-addresses"
17208 .PD
17209 Enable (disable) use of the \f(CW\*(C`%hi()\*(C'\fR and \f(CW\*(C`%lo()\*(C'\fR assembler
17210 relocation operators.  This option has been superseded by
17211 \&\fB\-mexplicit\-relocs\fR but is retained for backwards compatibility.
17212 .IP "\fB\-mexplicit\-relocs\fR" 4
17213 .IX Item "-mexplicit-relocs"
17214 .PD 0
17215 .IP "\fB\-mno\-explicit\-relocs\fR" 4
17216 .IX Item "-mno-explicit-relocs"
17217 .PD
17218 Use (do not use) assembler relocation operators when dealing with symbolic
17219 addresses.  The alternative, selected by \fB\-mno\-explicit\-relocs\fR,
17220 is to use assembler macros instead.
17221 .Sp
17222 \&\fB\-mexplicit\-relocs\fR is the default if \s-1GCC\s0 was configured
17223 to use an assembler that supports relocation operators.
17224 .IP "\fB\-mcheck\-zero\-division\fR" 4
17225 .IX Item "-mcheck-zero-division"
17226 .PD 0
17227 .IP "\fB\-mno\-check\-zero\-division\fR" 4
17228 .IX Item "-mno-check-zero-division"
17229 .PD
17230 Trap (do not trap) on integer division by zero.
17231 .Sp
17232 The default is \fB\-mcheck\-zero\-division\fR.
17233 .IP "\fB\-mdivide\-traps\fR" 4
17234 .IX Item "-mdivide-traps"
17235 .PD 0
17236 .IP "\fB\-mdivide\-breaks\fR" 4
17237 .IX Item "-mdivide-breaks"
17238 .PD
17239 \&\s-1MIPS\s0 systems check for division by zero by generating either a
17240 conditional trap or a break instruction.  Using traps results in
17241 smaller code, but is only supported on \s-1MIPS\s0 \s-1II\s0 and later.  Also, some
17242 versions of the Linux kernel have a bug that prevents trap from
17243 generating the proper signal (\f(CW\*(C`SIGFPE\*(C'\fR).  Use \fB\-mdivide\-traps\fR to
17244 allow conditional traps on architectures that support them and
17245 \&\fB\-mdivide\-breaks\fR to force the use of breaks.
17246 .Sp
17247 The default is usually \fB\-mdivide\-traps\fR, but this can be
17248 overridden at configure time using \fB\-\-with\-divide=breaks\fR.
17249 Divide-by-zero checks can be completely disabled using
17250 \&\fB\-mno\-check\-zero\-division\fR.
17251 .IP "\fB\-mmemcpy\fR" 4
17252 .IX Item "-mmemcpy"
17253 .PD 0
17254 .IP "\fB\-mno\-memcpy\fR" 4
17255 .IX Item "-mno-memcpy"
17256 .PD
17257 Force (do not force) the use of \f(CW\*(C`memcpy()\*(C'\fR for non-trivial block
17258 moves.  The default is \fB\-mno\-memcpy\fR, which allows \s-1GCC\s0 to inline
17259 most constant-sized copies.
17260 .IP "\fB\-mlong\-calls\fR" 4
17261 .IX Item "-mlong-calls"
17262 .PD 0
17263 .IP "\fB\-mno\-long\-calls\fR" 4
17264 .IX Item "-mno-long-calls"
17265 .PD
17266 Disable (do not disable) use of the \f(CW\*(C`jal\*(C'\fR instruction.  Calling
17267 functions using \f(CW\*(C`jal\*(C'\fR is more efficient but requires the caller
17268 and callee to be in the same 256 megabyte segment.
17269 .Sp
17270 This option has no effect on abicalls code.  The default is
17271 \&\fB\-mno\-long\-calls\fR.
17272 .IP "\fB\-mmad\fR" 4
17273 .IX Item "-mmad"
17274 .PD 0
17275 .IP "\fB\-mno\-mad\fR" 4
17276 .IX Item "-mno-mad"
17277 .PD
17278 Enable (disable) use of the \f(CW\*(C`mad\*(C'\fR, \f(CW\*(C`madu\*(C'\fR and \f(CW\*(C`mul\*(C'\fR
17279 instructions, as provided by the R4650 \s-1ISA\s0.
17280 .IP "\fB\-mimadd\fR" 4
17281 .IX Item "-mimadd"
17282 .PD 0
17283 .IP "\fB\-mno\-imadd\fR" 4
17284 .IX Item "-mno-imadd"
17285 .PD
17286 Enable (disable) use of the \f(CW\*(C`madd\*(C'\fR and \f(CW\*(C`msub\*(C'\fR integer
17287 instructions.  The default is \fB\-mimadd\fR on architectures
17288 that support \f(CW\*(C`madd\*(C'\fR and \f(CW\*(C`msub\*(C'\fR except for the 74k 
17289 architecture where it was found to generate slower code.
17290 .IP "\fB\-mfused\-madd\fR" 4
17291 .IX Item "-mfused-madd"
17292 .PD 0
17293 .IP "\fB\-mno\-fused\-madd\fR" 4
17294 .IX Item "-mno-fused-madd"
17295 .PD
17296 Enable (disable) use of the floating-point multiply-accumulate
17297 instructions, when they are available.  The default is
17298 \&\fB\-mfused\-madd\fR.
17299 .Sp
17300 On the R8000 \s-1CPU\s0 when multiply-accumulate instructions are used,
17301 the intermediate product is calculated to infinite precision
17302 and is not subject to the \s-1FCSR\s0 Flush to Zero bit.  This may be
17303 undesirable in some circumstances.  On other processors the result
17304 is numerically identical to the equivalent computation using
17305 separate multiply, add, subtract and negate instructions.
17306 .IP "\fB\-nocpp\fR" 4
17307 .IX Item "-nocpp"
17308 Tell the \s-1MIPS\s0 assembler to not run its preprocessor over user
17309 assembler files (with a \fB.s\fR suffix) when assembling them.
17310 .IP "\fB\-mfix\-24k\fR" 4
17311 .IX Item "-mfix-24k"
17312 .PD 0
17313 .IP "\fB\-mno\-fix\-24k\fR" 4
17314 .IX Item "-mno-fix-24k"
17315 .PD
17316 Work around the 24K E48 (lost data on stores during refill) errata.
17317 The workarounds are implemented by the assembler rather than by \s-1GCC\s0.
17318 .IP "\fB\-mfix\-r4000\fR" 4
17319 .IX Item "-mfix-r4000"
17320 .PD 0
17321 .IP "\fB\-mno\-fix\-r4000\fR" 4
17322 .IX Item "-mno-fix-r4000"
17323 .PD
17324 Work around certain R4000 \s-1CPU\s0 errata:
17325 .RS 4
17326 .IP "\-" 4
17327 A double-word or a variable shift may give an incorrect result if executed
17328 immediately after starting an integer division.
17329 .IP "\-" 4
17330 A double-word or a variable shift may give an incorrect result if executed
17331 while an integer multiplication is in progress.
17332 .IP "\-" 4
17333 An integer division may give an incorrect result if started in a delay slot
17334 of a taken branch or a jump.
17335 .RE
17336 .RS 4
17337 .RE
17338 .IP "\fB\-mfix\-r4400\fR" 4
17339 .IX Item "-mfix-r4400"
17340 .PD 0
17341 .IP "\fB\-mno\-fix\-r4400\fR" 4
17342 .IX Item "-mno-fix-r4400"
17343 .PD
17344 Work around certain R4400 \s-1CPU\s0 errata:
17345 .RS 4
17346 .IP "\-" 4
17347 A double-word or a variable shift may give an incorrect result if executed
17348 immediately after starting an integer division.
17349 .RE
17350 .RS 4
17351 .RE
17352 .IP "\fB\-mfix\-r10000\fR" 4
17353 .IX Item "-mfix-r10000"
17354 .PD 0
17355 .IP "\fB\-mno\-fix\-r10000\fR" 4
17356 .IX Item "-mno-fix-r10000"
17357 .PD
17358 Work around certain R10000 errata:
17359 .RS 4
17360 .IP "\-" 4
17361 \&\f(CW\*(C`ll\*(C'\fR/\f(CW\*(C`sc\*(C'\fR sequences may not behave atomically on revisions
17362 prior to 3.0.  They may deadlock on revisions 2.6 and earlier.
17363 .RE
17364 .RS 4
17365 .Sp
17366 This option can only be used if the target architecture supports
17367 branch-likely instructions.  \fB\-mfix\-r10000\fR is the default when
17368 \&\fB\-march=r10000\fR is used; \fB\-mno\-fix\-r10000\fR is the default
17369 otherwise.
17370 .RE
17371 .IP "\fB\-mfix\-rm7000\fR" 4
17372 .IX Item "-mfix-rm7000"
17373 .PD 0
17374 .IP "\fB\-mno\-fix\-rm7000\fR" 4
17375 .IX Item "-mno-fix-rm7000"
17376 .PD
17377 Work around the \s-1RM7000\s0 \f(CW\*(C`dmult\*(C'\fR/\f(CW\*(C`dmultu\*(C'\fR errata.  The
17378 workarounds are implemented by the assembler rather than by \s-1GCC\s0.
17379 .IP "\fB\-mfix\-vr4120\fR" 4
17380 .IX Item "-mfix-vr4120"
17381 .PD 0
17382 .IP "\fB\-mno\-fix\-vr4120\fR" 4
17383 .IX Item "-mno-fix-vr4120"
17384 .PD
17385 Work around certain \s-1VR4120\s0 errata:
17386 .RS 4
17387 .IP "\-" 4
17388 \&\f(CW\*(C`dmultu\*(C'\fR does not always produce the correct result.
17389 .IP "\-" 4
17390 \&\f(CW\*(C`div\*(C'\fR and \f(CW\*(C`ddiv\*(C'\fR do not always produce the correct result if one
17391 of the operands is negative.
17392 .RE
17393 .RS 4
17394 .Sp
17395 The workarounds for the division errata rely on special functions in
17396 \&\fIlibgcc.a\fR.  At present, these functions are only provided by
17397 the \f(CW\*(C`mips64vr*\-elf\*(C'\fR configurations.
17398 .Sp
17399 Other \s-1VR4120\s0 errata require a \s-1NOP\s0 to be inserted between certain pairs of
17400 instructions.  These errata are handled by the assembler, not by \s-1GCC\s0 itself.
17401 .RE
17402 .IP "\fB\-mfix\-vr4130\fR" 4
17403 .IX Item "-mfix-vr4130"
17404 Work around the \s-1VR4130\s0 \f(CW\*(C`mflo\*(C'\fR/\f(CW\*(C`mfhi\*(C'\fR errata.  The
17405 workarounds are implemented by the assembler rather than by \s-1GCC\s0,
17406 although \s-1GCC\s0 avoids using \f(CW\*(C`mflo\*(C'\fR and \f(CW\*(C`mfhi\*(C'\fR if the
17407 \&\s-1VR4130\s0 \f(CW\*(C`macc\*(C'\fR, \f(CW\*(C`macchi\*(C'\fR, \f(CW\*(C`dmacc\*(C'\fR and \f(CW\*(C`dmacchi\*(C'\fR
17408 instructions are available instead.
17409 .IP "\fB\-mfix\-sb1\fR" 4
17410 .IX Item "-mfix-sb1"
17411 .PD 0
17412 .IP "\fB\-mno\-fix\-sb1\fR" 4
17413 .IX Item "-mno-fix-sb1"
17414 .PD
17415 Work around certain \s-1SB\-1\s0 \s-1CPU\s0 core errata.
17416 (This flag currently works around the \s-1SB\-1\s0 revision 2
17417 \&\*(L"F1\*(R" and \*(L"F2\*(R" floating-point errata.)
17418 .IP "\fB\-mr10k\-cache\-barrier=\fR\fIsetting\fR" 4
17419 .IX Item "-mr10k-cache-barrier=setting"
17420 Specify whether \s-1GCC\s0 should insert cache barriers to avoid the
17421 side-effects of speculation on R10K processors.
17422 .Sp
17423 In common with many processors, the R10K tries to predict the outcome
17424 of a conditional branch and speculatively executes instructions from
17425 the \*(L"taken\*(R" branch.  It later aborts these instructions if the
17426 predicted outcome is wrong.  However, on the R10K, even aborted
17427 instructions can have side effects.
17428 .Sp
17429 This problem only affects kernel stores and, depending on the system,
17430 kernel loads.  As an example, a speculatively-executed store may load
17431 the target memory into cache and mark the cache line as dirty, even if
17432 the store itself is later aborted.  If a \s-1DMA\s0 operation writes to the
17433 same area of memory before the \*(L"dirty\*(R" line is flushed, the cached
17434 data overwrites the DMA-ed data.  See the R10K processor manual
17435 for a full description, including other potential problems.
17436 .Sp
17437 One workaround is to insert cache barrier instructions before every memory
17438 access that might be speculatively executed and that might have side
17439 effects even if aborted.  \fB\-mr10k\-cache\-barrier=\fR\fIsetting\fR
17440 controls \s-1GCC\s0's implementation of this workaround.  It assumes that
17441 aborted accesses to any byte in the following regions does not have
17442 side effects:
17443 .RS 4
17444 .IP "1." 4
17445 .IX Item "1."
17446 the memory occupied by the current function's stack frame;
17447 .IP "2." 4
17448 .IX Item "2."
17449 the memory occupied by an incoming stack argument;
17450 .IP "3." 4
17451 .IX Item "3."
17452 the memory occupied by an object with a link-time-constant address.
17453 .RE
17454 .RS 4
17455 .Sp
17456 It is the kernel's responsibility to ensure that speculative
17457 accesses to these regions are indeed safe.
17458 .Sp
17459 If the input program contains a function declaration such as:
17460 .Sp
17461 .Vb 1
17462 \&        void foo (void);
17463 .Ve
17464 .Sp
17465 then the implementation of \f(CW\*(C`foo\*(C'\fR must allow \f(CW\*(C`j foo\*(C'\fR and
17466 \&\f(CW\*(C`jal foo\*(C'\fR to be executed speculatively.  \s-1GCC\s0 honors this
17467 restriction for functions it compiles itself.  It expects non-GCC
17468 functions (such as hand-written assembly code) to do the same.
17469 .Sp
17470 The option has three forms:
17471 .IP "\fB\-mr10k\-cache\-barrier=load\-store\fR" 4
17472 .IX Item "-mr10k-cache-barrier=load-store"
17473 Insert a cache barrier before a load or store that might be
17474 speculatively executed and that might have side effects even
17475 if aborted.
17476 .IP "\fB\-mr10k\-cache\-barrier=store\fR" 4
17477 .IX Item "-mr10k-cache-barrier=store"
17478 Insert a cache barrier before a store that might be speculatively
17479 executed and that might have side effects even if aborted.
17480 .IP "\fB\-mr10k\-cache\-barrier=none\fR" 4
17481 .IX Item "-mr10k-cache-barrier=none"
17482 Disable the insertion of cache barriers.  This is the default setting.
17483 .RE
17484 .RS 4
17485 .RE
17486 .IP "\fB\-mflush\-func=\fR\fIfunc\fR" 4
17487 .IX Item "-mflush-func=func"
17488 .PD 0
17489 .IP "\fB\-mno\-flush\-func\fR" 4
17490 .IX Item "-mno-flush-func"
17491 .PD
17492 Specifies the function to call to flush the I and D caches, or to not
17493 call any such function.  If called, the function must take the same
17494 arguments as the common \f(CW\*(C`_flush_func()\*(C'\fR, that is, the address of the
17495 memory range for which the cache is being flushed, the size of the
17496 memory range, and the number 3 (to flush both caches).  The default
17497 depends on the target \s-1GCC\s0 was configured for, but commonly is either
17498 \&\f(CW\*(C`_flush_func\*(C'\fR or \f(CW\*(C`_\|_cpu_flush\*(C'\fR.
17499 .IP "\fBmbranch\-cost=\fR\fInum\fR" 4
17500 .IX Item "mbranch-cost=num"
17501 Set the cost of branches to roughly \fInum\fR \*(L"simple\*(R" instructions.
17502 This cost is only a heuristic and is not guaranteed to produce
17503 consistent results across releases.  A zero cost redundantly selects
17504 the default, which is based on the \fB\-mtune\fR setting.
17505 .IP "\fB\-mbranch\-likely\fR" 4
17506 .IX Item "-mbranch-likely"
17507 .PD 0
17508 .IP "\fB\-mno\-branch\-likely\fR" 4
17509 .IX Item "-mno-branch-likely"
17510 .PD
17511 Enable or disable use of Branch Likely instructions, regardless of the
17512 default for the selected architecture.  By default, Branch Likely
17513 instructions may be generated if they are supported by the selected
17514 architecture.  An exception is for the \s-1MIPS32\s0 and \s-1MIPS64\s0 architectures
17515 and processors that implement those architectures; for those, Branch
17516 Likely instructions are not be generated by default because the \s-1MIPS32\s0
17517 and \s-1MIPS64\s0 architectures specifically deprecate their use.
17518 .IP "\fB\-mfp\-exceptions\fR" 4
17519 .IX Item "-mfp-exceptions"
17520 .PD 0
17521 .IP "\fB\-mno\-fp\-exceptions\fR" 4
17522 .IX Item "-mno-fp-exceptions"
17523 .PD
17524 Specifies whether \s-1FP\s0 exceptions are enabled.  This affects how
17525 \&\s-1FP\s0 instructions are scheduled for some processors.
17526 The default is that \s-1FP\s0 exceptions are
17527 enabled.
17528 .Sp
17529 For instance, on the \s-1SB\-1\s0, if \s-1FP\s0 exceptions are disabled, and we are emitting
17530 64\-bit code, then we can use both \s-1FP\s0 pipes.  Otherwise, we can only use one
17531 \&\s-1FP\s0 pipe.
17532 .IP "\fB\-mvr4130\-align\fR" 4
17533 .IX Item "-mvr4130-align"
17534 .PD 0
17535 .IP "\fB\-mno\-vr4130\-align\fR" 4
17536 .IX Item "-mno-vr4130-align"
17537 .PD
17538 The \s-1VR4130\s0 pipeline is two-way superscalar, but can only issue two
17539 instructions together if the first one is 8\-byte aligned.  When this
17540 option is enabled, \s-1GCC\s0 aligns pairs of instructions that it
17541 thinks should execute in parallel.
17542 .Sp
17543 This option only has an effect when optimizing for the \s-1VR4130\s0.
17544 It normally makes code faster, but at the expense of making it bigger.
17545 It is enabled by default at optimization level \fB\-O3\fR.
17546 .IP "\fB\-msynci\fR" 4
17547 .IX Item "-msynci"
17548 .PD 0
17549 .IP "\fB\-mno\-synci\fR" 4
17550 .IX Item "-mno-synci"
17551 .PD
17552 Enable (disable) generation of \f(CW\*(C`synci\*(C'\fR instructions on
17553 architectures that support it.  The \f(CW\*(C`synci\*(C'\fR instructions (if
17554 enabled) are generated when \f(CW\*(C`_\|_builtin_\|_\|_clear_cache()\*(C'\fR is
17555 compiled.
17556 .Sp
17557 This option defaults to \fB\-mno\-synci\fR, but the default can be
17558 overridden by configuring \s-1GCC\s0 with \fB\-\-with\-synci\fR.
17559 .Sp
17560 When compiling code for single processor systems, it is generally safe
17561 to use \f(CW\*(C`synci\*(C'\fR.  However, on many multi-core (\s-1SMP\s0) systems, it
17562 does not invalidate the instruction caches on all cores and may lead
17563 to undefined behavior.
17564 .IP "\fB\-mrelax\-pic\-calls\fR" 4
17565 .IX Item "-mrelax-pic-calls"
17566 .PD 0
17567 .IP "\fB\-mno\-relax\-pic\-calls\fR" 4
17568 .IX Item "-mno-relax-pic-calls"
17569 .PD
17570 Try to turn \s-1PIC\s0 calls that are normally dispatched via register
17571 \&\f(CW$25\fR into direct calls.  This is only possible if the linker can
17572 resolve the destination at link-time and if the destination is within
17573 range for a direct call.
17574 .Sp
17575 \&\fB\-mrelax\-pic\-calls\fR is the default if \s-1GCC\s0 was configured to use
17576 an assembler and a linker that support the \f(CW\*(C`.reloc\*(C'\fR assembly
17577 directive and \fB\-mexplicit\-relocs\fR is in effect.  With
17578 \&\fB\-mno\-explicit\-relocs\fR, this optimization can be performed by the
17579 assembler and the linker alone without help from the compiler.
17580 .IP "\fB\-mmcount\-ra\-address\fR" 4
17581 .IX Item "-mmcount-ra-address"
17582 .PD 0
17583 .IP "\fB\-mno\-mcount\-ra\-address\fR" 4
17584 .IX Item "-mno-mcount-ra-address"
17585 .PD
17586 Emit (do not emit) code that allows \f(CW\*(C`_mcount\*(C'\fR to modify the
17587 calling function's return address.  When enabled, this option extends
17588 the usual \f(CW\*(C`_mcount\*(C'\fR interface with a new \fIra-address\fR
17589 parameter, which has type \f(CW\*(C`intptr_t *\*(C'\fR and is passed in register
17590 \&\f(CW$12\fR.  \f(CW\*(C`_mcount\*(C'\fR can then modify the return address by
17591 doing both of the following:
17592 .RS 4
17593 .IP "*" 4
17594 Returning the new address in register \f(CW$31\fR.
17595 .IP "*" 4
17596 Storing the new address in \f(CW\*(C`*\f(CIra\-address\f(CW\*(C'\fR,
17597 if \fIra-address\fR is nonnull.
17598 .RE
17599 .RS 4
17600 .Sp
17601 The default is \fB\-mno\-mcount\-ra\-address\fR.
17602 .RE
17603 .PP
17604 \fI\s-1MMIX\s0 Options\fR
17605 .IX Subsection "MMIX Options"
17606 .PP
17607 These options are defined for the \s-1MMIX:\s0
17608 .IP "\fB\-mlibfuncs\fR" 4
17609 .IX Item "-mlibfuncs"
17610 .PD 0
17611 .IP "\fB\-mno\-libfuncs\fR" 4
17612 .IX Item "-mno-libfuncs"
17613 .PD
17614 Specify that intrinsic library functions are being compiled, passing all
17615 values in registers, no matter the size.
17616 .IP "\fB\-mepsilon\fR" 4
17617 .IX Item "-mepsilon"
17618 .PD 0
17619 .IP "\fB\-mno\-epsilon\fR" 4
17620 .IX Item "-mno-epsilon"
17621 .PD
17622 Generate floating-point comparison instructions that compare with respect
17623 to the \f(CW\*(C`rE\*(C'\fR epsilon register.
17624 .IP "\fB\-mabi=mmixware\fR" 4
17625 .IX Item "-mabi=mmixware"
17626 .PD 0
17627 .IP "\fB\-mabi=gnu\fR" 4
17628 .IX Item "-mabi=gnu"
17629 .PD
17630 Generate code that passes function parameters and return values that (in
17631 the called function) are seen as registers \f(CW$0\fR and up, as opposed to
17632 the \s-1GNU\s0 \s-1ABI\s0 which uses global registers \f(CW$231\fR and up.
17633 .IP "\fB\-mzero\-extend\fR" 4
17634 .IX Item "-mzero-extend"
17635 .PD 0
17636 .IP "\fB\-mno\-zero\-extend\fR" 4
17637 .IX Item "-mno-zero-extend"
17638 .PD
17639 When reading data from memory in sizes shorter than 64 bits, use (do not
17640 use) zero-extending load instructions by default, rather than
17641 sign-extending ones.
17642 .IP "\fB\-mknuthdiv\fR" 4
17643 .IX Item "-mknuthdiv"
17644 .PD 0
17645 .IP "\fB\-mno\-knuthdiv\fR" 4
17646 .IX Item "-mno-knuthdiv"
17647 .PD
17648 Make the result of a division yielding a remainder have the same sign as
17649 the divisor.  With the default, \fB\-mno\-knuthdiv\fR, the sign of the
17650 remainder follows the sign of the dividend.  Both methods are
17651 arithmetically valid, the latter being almost exclusively used.
17652 .IP "\fB\-mtoplevel\-symbols\fR" 4
17653 .IX Item "-mtoplevel-symbols"
17654 .PD 0
17655 .IP "\fB\-mno\-toplevel\-symbols\fR" 4
17656 .IX Item "-mno-toplevel-symbols"
17657 .PD
17658 Prepend (do not prepend) a \fB:\fR to all global symbols, so the assembly
17659 code can be used with the \f(CW\*(C`PREFIX\*(C'\fR assembly directive.
17660 .IP "\fB\-melf\fR" 4
17661 .IX Item "-melf"
17662 Generate an executable in the \s-1ELF\s0 format, rather than the default
17663 \&\fBmmo\fR format used by the \fBmmix\fR simulator.
17664 .IP "\fB\-mbranch\-predict\fR" 4
17665 .IX Item "-mbranch-predict"
17666 .PD 0
17667 .IP "\fB\-mno\-branch\-predict\fR" 4
17668 .IX Item "-mno-branch-predict"
17669 .PD
17670 Use (do not use) the probable-branch instructions, when static branch
17671 prediction indicates a probable branch.
17672 .IP "\fB\-mbase\-addresses\fR" 4
17673 .IX Item "-mbase-addresses"
17674 .PD 0
17675 .IP "\fB\-mno\-base\-addresses\fR" 4
17676 .IX Item "-mno-base-addresses"
17677 .PD
17678 Generate (do not generate) code that uses \fIbase addresses\fR.  Using a
17679 base address automatically generates a request (handled by the assembler
17680 and the linker) for a constant to be set up in a global register.  The
17681 register is used for one or more base address requests within the range 0
17682 to 255 from the value held in the register.  The generally leads to short
17683 and fast code, but the number of different data items that can be
17684 addressed is limited.  This means that a program that uses lots of static
17685 data may require \fB\-mno\-base\-addresses\fR.
17686 .IP "\fB\-msingle\-exit\fR" 4
17687 .IX Item "-msingle-exit"
17688 .PD 0
17689 .IP "\fB\-mno\-single\-exit\fR" 4
17690 .IX Item "-mno-single-exit"
17691 .PD
17692 Force (do not force) generated code to have a single exit point in each
17693 function.
17694 .PP
17695 \fI\s-1MN10300\s0 Options\fR
17696 .IX Subsection "MN10300 Options"
17697 .PP
17698 These \fB\-m\fR options are defined for Matsushita \s-1MN10300\s0 architectures:
17699 .IP "\fB\-mmult\-bug\fR" 4
17700 .IX Item "-mmult-bug"
17701 Generate code to avoid bugs in the multiply instructions for the \s-1MN10300\s0
17702 processors.  This is the default.
17703 .IP "\fB\-mno\-mult\-bug\fR" 4
17704 .IX Item "-mno-mult-bug"
17705 Do not generate code to avoid bugs in the multiply instructions for the
17706 \&\s-1MN10300\s0 processors.
17707 .IP "\fB\-mam33\fR" 4
17708 .IX Item "-mam33"
17709 Generate code using features specific to the \s-1AM33\s0 processor.
17710 .IP "\fB\-mno\-am33\fR" 4
17711 .IX Item "-mno-am33"
17712 Do not generate code using features specific to the \s-1AM33\s0 processor.  This
17713 is the default.
17714 .IP "\fB\-mam33\-2\fR" 4
17715 .IX Item "-mam33-2"
17716 Generate code using features specific to the \s-1AM33/2\s0.0 processor.
17717 .IP "\fB\-mam34\fR" 4
17718 .IX Item "-mam34"
17719 Generate code using features specific to the \s-1AM34\s0 processor.
17720 .IP "\fB\-mtune=\fR\fIcpu-type\fR" 4
17721 .IX Item "-mtune=cpu-type"
17722 Use the timing characteristics of the indicated \s-1CPU\s0 type when
17723 scheduling instructions.  This does not change the targeted processor
17724 type.  The \s-1CPU\s0 type must be one of \fBmn10300\fR, \fBam33\fR,
17725 \&\fBam33\-2\fR or \fBam34\fR.
17726 .IP "\fB\-mreturn\-pointer\-on\-d0\fR" 4
17727 .IX Item "-mreturn-pointer-on-d0"
17728 When generating a function that returns a pointer, return the pointer
17729 in both \f(CW\*(C`a0\*(C'\fR and \f(CW\*(C`d0\*(C'\fR.  Otherwise, the pointer is returned
17730 only in \f(CW\*(C`a0\*(C'\fR, and attempts to call such functions without a prototype
17731 result in errors.  Note that this option is on by default; use
17732 \&\fB\-mno\-return\-pointer\-on\-d0\fR to disable it.
17733 .IP "\fB\-mno\-crt0\fR" 4
17734 .IX Item "-mno-crt0"
17735 Do not link in the C run-time initialization object file.
17736 .IP "\fB\-mrelax\fR" 4
17737 .IX Item "-mrelax"
17738 Indicate to the linker that it should perform a relaxation optimization pass
17739 to shorten branches, calls and absolute memory addresses.  This option only
17740 has an effect when used on the command line for the final link step.
17741 .Sp
17742 This option makes symbolic debugging impossible.
17743 .IP "\fB\-mliw\fR" 4
17744 .IX Item "-mliw"
17745 Allow the compiler to generate \fILong Instruction Word\fR
17746 instructions if the target is the \fB\s-1AM33\s0\fR or later.  This is the
17747 default.  This option defines the preprocessor macro \f(CW\*(C`_\|_LIW_\|_\*(C'\fR.
17748 .IP "\fB\-mnoliw\fR" 4
17749 .IX Item "-mnoliw"
17750 Do not allow the compiler to generate \fILong Instruction Word\fR
17751 instructions.  This option defines the preprocessor macro
17752 \&\f(CW\*(C`_\|_NO_LIW_\|_\*(C'\fR.
17753 .IP "\fB\-msetlb\fR" 4
17754 .IX Item "-msetlb"
17755 Allow the compiler to generate the \fI\s-1SETLB\s0\fR and \fILcc\fR
17756 instructions if the target is the \fB\s-1AM33\s0\fR or later.  This is the
17757 default.  This option defines the preprocessor macro \f(CW\*(C`_\|_SETLB_\|_\*(C'\fR.
17758 .IP "\fB\-mnosetlb\fR" 4
17759 .IX Item "-mnosetlb"
17760 Do not allow the compiler to generate \fI\s-1SETLB\s0\fR or \fILcc\fR
17761 instructions.  This option defines the preprocessor macro
17762 \&\f(CW\*(C`_\|_NO_SETLB_\|_\*(C'\fR.
17763 .PP
17764 \fIMoxie Options\fR
17765 .IX Subsection "Moxie Options"
17766 .IP "\fB\-meb\fR" 4
17767 .IX Item "-meb"
17768 Generate big-endian code.  This is the default for \fBmoxie\-*\-*\fR
17769 configurations.
17770 .IP "\fB\-mel\fR" 4
17771 .IX Item "-mel"
17772 Generate little-endian code.
17773 .IP "\fB\-mmul.x\fR" 4
17774 .IX Item "-mmul.x"
17775 Generate mul.x and umul.x instructions.  This is the default for
17776 \&\fBmoxiebox\-*\-*\fR configurations.
17777 .IP "\fB\-mno\-crt0\fR" 4
17778 .IX Item "-mno-crt0"
17779 Do not link in the C run-time initialization object file.
17780 .PP
17781 \fI\s-1MSP430\s0 Options\fR
17782 .IX Subsection "MSP430 Options"
17783 .PP
17784 These options are defined for the \s-1MSP430:\s0
17785 .IP "\fB\-masm\-hex\fR" 4
17786 .IX Item "-masm-hex"
17787 Force assembly output to always use hex constants.  Normally such
17788 constants are signed decimals, but this option is available for
17789 testsuite and/or aesthetic purposes.
17790 .IP "\fB\-mmcu=\fR" 4
17791 .IX Item "-mmcu="
17792 Select the \s-1MCU\s0 to target.  This is used to create a C preprocessor
17793 symbol based upon the \s-1MCU\s0 name, converted to upper case and pre\- and
17794 post-fixed with \fB_\|_\fR.  This in turn is used by the
17795 \&\fImsp430.h\fR header file to select an MCU-specific supplementary
17796 header file.
17797 .Sp
17798 The option also sets the \s-1ISA\s0 to use.  If the \s-1MCU\s0 name is one that is
17799 known to only support the 430 \s-1ISA\s0 then that is selected, otherwise the
17800 430X \s-1ISA\s0 is selected.  A generic \s-1MCU\s0 name of \fBmsp430\fR can also be
17801 used to select the 430 \s-1ISA\s0.  Similarly the generic \fBmsp430x\fR \s-1MCU\s0
17802 name selects the 430X \s-1ISA\s0.
17803 .Sp
17804 In addition an MCU-specific linker script is added to the linker
17805 command line.  The script's name is the name of the \s-1MCU\s0 with
17806 \&\fI.ld\fR appended.  Thus specifying \fB\-mmcu=xxx\fR on the \fBgcc\fR
17807 command line defines the C preprocessor symbol \f(CW\*(C`_\|_XXX_\|_\*(C'\fR and
17808 cause the linker to search for a script called \fIxxx.ld\fR.
17809 .Sp
17810 This option is also passed on to the assembler.
17811 .IP "\fB\-mcpu=\fR" 4
17812 .IX Item "-mcpu="
17813 Specifies the \s-1ISA\s0 to use.  Accepted values are \fBmsp430\fR,
17814 \&\fBmsp430x\fR and \fBmsp430xv2\fR.  This option is deprecated.  The
17815 \&\fB\-mmcu=\fR option should be used to select the \s-1ISA\s0.
17816 .IP "\fB\-msim\fR" 4
17817 .IX Item "-msim"
17818 Link to the simulator runtime libraries and linker script.  Overrides
17819 any scripts that would be selected by the \fB\-mmcu=\fR option.
17820 .IP "\fB\-mlarge\fR" 4
17821 .IX Item "-mlarge"
17822 Use large-model addressing (20\-bit pointers, 32\-bit \f(CW\*(C`size_t\*(C'\fR).
17823 .IP "\fB\-msmall\fR" 4
17824 .IX Item "-msmall"
17825 Use small-model addressing (16\-bit pointers, 16\-bit \f(CW\*(C`size_t\*(C'\fR).
17826 .IP "\fB\-mrelax\fR" 4
17827 .IX Item "-mrelax"
17828 This option is passed to the assembler and linker, and allows the
17829 linker to perform certain optimizations that cannot be done until
17830 the final link.
17831 .IP "\fBmhwmult=\fR" 4
17832 .IX Item "mhwmult="
17833 Describes the type of hardware multiply supported by the target.
17834 Accepted values are \fBnone\fR for no hardware multiply, \fB16bit\fR
17835 for the original 16\-bit\-only multiply supported by early MCUs.
17836 \&\fB32bit\fR for the 16/32\-bit multiply supported by later MCUs and
17837 \&\fBf5series\fR for the 16/32\-bit multiply supported by F5\-series MCUs.
17838 A value of \fBauto\fR can also be given.  This tells \s-1GCC\s0 to deduce
17839 the hardware multiply support based upon the \s-1MCU\s0 name provided by the
17840 \&\fB\-mmcu\fR option.  If no \fB\-mmcu\fR option is specified then
17841 \&\fB32bit\fR hardware multiply support is assumed.  \fBauto\fR is the
17842 default setting.
17843 .Sp
17844 Hardware multiplies are normally performed by calling a library
17845 routine.  This saves space in the generated code.  When compiling at
17846 \&\fB\-O3\fR or higher however the hardware multiplier is invoked
17847 inline.  This makes for bigger, but faster code.
17848 .Sp
17849 The hardware multiply routines disable interrupts whilst running and
17850 restore the previous interrupt state when they finish.  This makes
17851 them safe to use inside interrupt handlers as well as in normal code.
17852 .IP "\fB\-minrt\fR" 4
17853 .IX Item "-minrt"
17854 Enable the use of a minimum runtime environment \- no static
17855 initializers or constructors.  This is intended for memory-constrained
17856 devices.  The compiler includes special symbols in some objects
17857 that tell the linker and runtime which code fragments are required.
17858 .PP
17859 \fI\s-1NDS32\s0 Options\fR
17860 .IX Subsection "NDS32 Options"
17861 .PP
17862 These options are defined for \s-1NDS32\s0 implementations:
17863 .IP "\fB\-mbig\-endian\fR" 4
17864 .IX Item "-mbig-endian"
17865 Generate code in big-endian mode.
17866 .IP "\fB\-mlittle\-endian\fR" 4
17867 .IX Item "-mlittle-endian"
17868 Generate code in little-endian mode.
17869 .IP "\fB\-mreduced\-regs\fR" 4
17870 .IX Item "-mreduced-regs"
17871 Use reduced-set registers for register allocation.
17872 .IP "\fB\-mfull\-regs\fR" 4
17873 .IX Item "-mfull-regs"
17874 Use full-set registers for register allocation.
17875 .IP "\fB\-mcmov\fR" 4
17876 .IX Item "-mcmov"
17877 Generate conditional move instructions.
17878 .IP "\fB\-mno\-cmov\fR" 4
17879 .IX Item "-mno-cmov"
17880 Do not generate conditional move instructions.
17881 .IP "\fB\-mperf\-ext\fR" 4
17882 .IX Item "-mperf-ext"
17883 Generate performance extension instructions.
17884 .IP "\fB\-mno\-perf\-ext\fR" 4
17885 .IX Item "-mno-perf-ext"
17886 Do not generate performance extension instructions.
17887 .IP "\fB\-mv3push\fR" 4
17888 .IX Item "-mv3push"
17889 Generate v3 push25/pop25 instructions.
17890 .IP "\fB\-mno\-v3push\fR" 4
17891 .IX Item "-mno-v3push"
17892 Do not generate v3 push25/pop25 instructions.
17893 .IP "\fB\-m16\-bit\fR" 4
17894 .IX Item "-m16-bit"
17895 Generate 16\-bit instructions.
17896 .IP "\fB\-mno\-16\-bit\fR" 4
17897 .IX Item "-mno-16-bit"
17898 Do not generate 16\-bit instructions.
17899 .IP "\fB\-mgp\-direct\fR" 4
17900 .IX Item "-mgp-direct"
17901 Generate \s-1GP\s0 base instructions directly.
17902 .IP "\fB\-mno\-gp\-direct\fR" 4
17903 .IX Item "-mno-gp-direct"
17904 Do no generate \s-1GP\s0 base instructions directly.
17905 .IP "\fB\-misr\-vector\-size=\fR\fInum\fR" 4
17906 .IX Item "-misr-vector-size=num"
17907 Specify the size of each interrupt vector, which must be 4 or 16.
17908 .IP "\fB\-mcache\-block\-size=\fR\fInum\fR" 4
17909 .IX Item "-mcache-block-size=num"
17910 Specify the size of each cache block,
17911 which must be a power of 2 between 4 and 512.
17912 .IP "\fB\-march=\fR\fIarch\fR" 4
17913 .IX Item "-march=arch"
17914 Specify the name of the target architecture.
17915 .IP "\fB\-mforce\-fp\-as\-gp\fR" 4
17916 .IX Item "-mforce-fp-as-gp"
17917 Prevent \f(CW$fp\fR being allocated during register allocation so that compiler
17918 is able to force performing fp-as-gp optimization.
17919 .IP "\fB\-mforbid\-fp\-as\-gp\fR" 4
17920 .IX Item "-mforbid-fp-as-gp"
17921 Forbid using \f(CW$fp\fR to access static and global variables.
17922 This option strictly forbids fp-as-gp optimization
17923 regardless of \fB\-mforce\-fp\-as\-gp\fR.
17924 .IP "\fB\-mex9\fR" 4
17925 .IX Item "-mex9"
17926 Use special directives to guide linker doing ex9 optimization.
17927 .IP "\fB\-mctor\-dtor\fR" 4
17928 .IX Item "-mctor-dtor"
17929 Enable constructor/destructor feature.
17930 .IP "\fB\-mrelax\fR" 4
17931 .IX Item "-mrelax"
17932 Guide linker to relax instructions.
17933 .PP
17934 \fINios \s-1II\s0 Options\fR
17935 .IX Subsection "Nios II Options"
17936 .PP
17937 These are the options defined for the Altera Nios \s-1II\s0 processor.
17938 .IP "\fB\-G\fR \fInum\fR" 4
17939 .IX Item "-G num"
17940 Put global and static objects less than or equal to \fInum\fR bytes
17941 into the small data or \s-1BSS\s0 sections instead of the normal data or \s-1BSS\s0
17942 sections.  The default value of \fInum\fR is 8.
17943 .IP "\fB\-mgpopt\fR" 4
17944 .IX Item "-mgpopt"
17945 .PD 0
17946 .IP "\fB\-mno\-gpopt\fR" 4
17947 .IX Item "-mno-gpopt"
17948 .PD
17949 Generate (do not generate) GP-relative accesses for objects in the
17950 small data or \s-1BSS\s0 sections.  The default is \fB\-mgpopt\fR except
17951 when \fB\-fpic\fR or \fB\-fPIC\fR is specified to generate
17952 position-independent code.  Note that the Nios \s-1II\s0 \s-1ABI\s0 does not permit
17953 GP-relative accesses from shared libraries.
17954 .Sp
17955 You may need to specify \fB\-mno\-gpopt\fR explicitly when building
17956 programs that include large amounts of small data, including large
17957 \&\s-1GOT\s0 data sections.  In this case, the 16\-bit offset for GP-relative
17958 addressing may not be large enough to allow access to the entire 
17959 small data section.
17960 .IP "\fB\-mel\fR" 4
17961 .IX Item "-mel"
17962 .PD 0
17963 .IP "\fB\-meb\fR" 4
17964 .IX Item "-meb"
17965 .PD
17966 Generate little-endian (default) or big-endian (experimental) code,
17967 respectively.
17968 .IP "\fB\-mbypass\-cache\fR" 4
17969 .IX Item "-mbypass-cache"
17970 .PD 0
17971 .IP "\fB\-mno\-bypass\-cache\fR" 4
17972 .IX Item "-mno-bypass-cache"
17973 .PD
17974 Force all load and store instructions to always bypass cache by 
17975 using I/O variants of the instructions. The default is not to
17976 bypass the cache.
17977 .IP "\fB\-mno\-cache\-volatile\fR" 4
17978 .IX Item "-mno-cache-volatile"
17979 .PD 0
17980 .IP "\fB\-mcache\-volatile\fR" 4
17981 .IX Item "-mcache-volatile"
17982 .PD
17983 Volatile memory access bypass the cache using the I/O variants of 
17984 the load and store instructions. The default is not to bypass the cache.
17985 .IP "\fB\-mno\-fast\-sw\-div\fR" 4
17986 .IX Item "-mno-fast-sw-div"
17987 .PD 0
17988 .IP "\fB\-mfast\-sw\-div\fR" 4
17989 .IX Item "-mfast-sw-div"
17990 .PD
17991 Do not use table-based fast divide for small numbers. The default 
17992 is to use the fast divide at \fB\-O3\fR and above.
17993 .IP "\fB\-mno\-hw\-mul\fR" 4
17994 .IX Item "-mno-hw-mul"
17995 .PD 0
17996 .IP "\fB\-mhw\-mul\fR" 4
17997 .IX Item "-mhw-mul"
17998 .IP "\fB\-mno\-hw\-mulx\fR" 4
17999 .IX Item "-mno-hw-mulx"
18000 .IP "\fB\-mhw\-mulx\fR" 4
18001 .IX Item "-mhw-mulx"
18002 .IP "\fB\-mno\-hw\-div\fR" 4
18003 .IX Item "-mno-hw-div"
18004 .IP "\fB\-mhw\-div\fR" 4
18005 .IX Item "-mhw-div"
18006 .PD
18007 Enable or disable emitting \f(CW\*(C`mul\*(C'\fR, \f(CW\*(C`mulx\*(C'\fR and \f(CW\*(C`div\*(C'\fR family of 
18008 instructions by the compiler. The default is to emit \f(CW\*(C`mul\*(C'\fR
18009 and not emit \f(CW\*(C`div\*(C'\fR and \f(CW\*(C`mulx\*(C'\fR.
18010 .IP "\fB\-mcustom\-\fR\fIinsn\fR\fB=\fR\fIN\fR" 4
18011 .IX Item "-mcustom-insn=N"
18012 .PD 0
18013 .IP "\fB\-mno\-custom\-\fR\fIinsn\fR" 4
18014 .IX Item "-mno-custom-insn"
18015 .PD
18016 Each \fB\-mcustom\-\fR\fIinsn\fR\fB=\fR\fIN\fR option enables use of a
18017 custom instruction with encoding \fIN\fR when generating code that uses 
18018 \&\fIinsn\fR.  For example, \fB\-mcustom\-fadds=253\fR generates custom
18019 instruction 253 for single-precision floating-point add operations instead
18020 of the default behavior of using a library call.
18021 .Sp
18022 The following values of \fIinsn\fR are supported.  Except as otherwise
18023 noted, floating-point operations are expected to be implemented with
18024 normal \s-1IEEE\s0 754 semantics and correspond directly to the C operators or the
18025 equivalent \s-1GCC\s0 built-in functions.
18026 .Sp
18027 Single-precision floating point:
18028 .RS 4
18029 .IP "\fBfadds\fR, \fBfsubs\fR, \fBfdivs\fR, \fBfmuls\fR" 4
18030 .IX Item "fadds, fsubs, fdivs, fmuls"
18031 Binary arithmetic operations.
18032 .IP "\fBfnegs\fR" 4
18033 .IX Item "fnegs"
18034 Unary negation.
18035 .IP "\fBfabss\fR" 4
18036 .IX Item "fabss"
18037 Unary absolute value.
18038 .IP "\fBfcmpeqs\fR, \fBfcmpges\fR, \fBfcmpgts\fR, \fBfcmples\fR, \fBfcmplts\fR, \fBfcmpnes\fR" 4
18039 .IX Item "fcmpeqs, fcmpges, fcmpgts, fcmples, fcmplts, fcmpnes"
18040 Comparison operations.
18041 .IP "\fBfmins\fR, \fBfmaxs\fR" 4
18042 .IX Item "fmins, fmaxs"
18043 Floating-point minimum and maximum.  These instructions are only
18044 generated if \fB\-ffinite\-math\-only\fR is specified.
18045 .IP "\fBfsqrts\fR" 4
18046 .IX Item "fsqrts"
18047 Unary square root operation.
18048 .IP "\fBfcoss\fR, \fBfsins\fR, \fBftans\fR, \fBfatans\fR, \fBfexps\fR, \fBflogs\fR" 4
18049 .IX Item "fcoss, fsins, ftans, fatans, fexps, flogs"
18050 Floating-point trigonometric and exponential functions.  These instructions
18051 are only generated if \fB\-funsafe\-math\-optimizations\fR is also specified.
18052 .RE
18053 .RS 4
18054 .Sp
18055 Double-precision floating point:
18056 .IP "\fBfaddd\fR, \fBfsubd\fR, \fBfdivd\fR, \fBfmuld\fR" 4
18057 .IX Item "faddd, fsubd, fdivd, fmuld"
18058 Binary arithmetic operations.
18059 .IP "\fBfnegd\fR" 4
18060 .IX Item "fnegd"
18061 Unary negation.
18062 .IP "\fBfabsd\fR" 4
18063 .IX Item "fabsd"
18064 Unary absolute value.
18065 .IP "\fBfcmpeqd\fR, \fBfcmpged\fR, \fBfcmpgtd\fR, \fBfcmpled\fR, \fBfcmpltd\fR, \fBfcmpned\fR" 4
18066 .IX Item "fcmpeqd, fcmpged, fcmpgtd, fcmpled, fcmpltd, fcmpned"
18067 Comparison operations.
18068 .IP "\fBfmind\fR, \fBfmaxd\fR" 4
18069 .IX Item "fmind, fmaxd"
18070 Double-precision minimum and maximum.  These instructions are only
18071 generated if \fB\-ffinite\-math\-only\fR is specified.
18072 .IP "\fBfsqrtd\fR" 4
18073 .IX Item "fsqrtd"
18074 Unary square root operation.
18075 .IP "\fBfcosd\fR, \fBfsind\fR, \fBftand\fR, \fBfatand\fR, \fBfexpd\fR, \fBflogd\fR" 4
18076 .IX Item "fcosd, fsind, ftand, fatand, fexpd, flogd"
18077 Double-precision trigonometric and exponential functions.  These instructions
18078 are only generated if \fB\-funsafe\-math\-optimizations\fR is also specified.
18079 .RE
18080 .RS 4
18081 .Sp
18082 Conversions:
18083 .IP "\fBfextsd\fR" 4
18084 .IX Item "fextsd"
18085 Conversion from single precision to double precision.
18086 .IP "\fBftruncds\fR" 4
18087 .IX Item "ftruncds"
18088 Conversion from double precision to single precision.
18089 .IP "\fBfixsi\fR, \fBfixsu\fR, \fBfixdi\fR, \fBfixdu\fR" 4
18090 .IX Item "fixsi, fixsu, fixdi, fixdu"
18091 Conversion from floating point to signed or unsigned integer types, with
18092 truncation towards zero.
18093 .IP "\fBround\fR" 4
18094 .IX Item "round"
18095 Conversion from single-precision floating point to signed integer,
18096 rounding to the nearest integer and ties away from zero.
18097 This corresponds to the \f(CW\*(C`_\|_builtin_lroundf\*(C'\fR function when
18098 \&\fB\-fno\-math\-errno\fR is used.
18099 .IP "\fBfloatis\fR, \fBfloatus\fR, \fBfloatid\fR, \fBfloatud\fR" 4
18100 .IX Item "floatis, floatus, floatid, floatud"
18101 Conversion from signed or unsigned integer types to floating-point types.
18102 .RE
18103 .RS 4
18104 .Sp
18105 In addition, all of the following transfer instructions for internal
18106 registers X and Y must be provided to use any of the double-precision
18107 floating-point instructions.  Custom instructions taking two
18108 double-precision source operands expect the first operand in the
18109 64\-bit register X.  The other operand (or only operand of a unary
18110 operation) is given to the custom arithmetic instruction with the
18111 least significant half in source register \fIsrc1\fR and the most
18112 significant half in \fIsrc2\fR.  A custom instruction that returns a
18113 double-precision result returns the most significant 32 bits in the
18114 destination register and the other half in 32\-bit register Y.  
18115 \&\s-1GCC\s0 automatically generates the necessary code sequences to write
18116 register X and/or read register Y when double-precision floating-point
18117 instructions are used.
18118 .IP "\fBfwrx\fR" 4
18119 .IX Item "fwrx"
18120 Write \fIsrc1\fR into the least significant half of X and \fIsrc2\fR into
18121 the most significant half of X.
18122 .IP "\fBfwry\fR" 4
18123 .IX Item "fwry"
18124 Write \fIsrc1\fR into Y.
18125 .IP "\fBfrdxhi\fR, \fBfrdxlo\fR" 4
18126 .IX Item "frdxhi, frdxlo"
18127 Read the most or least (respectively) significant half of X and store it in
18128 \&\fIdest\fR.
18129 .IP "\fBfrdy\fR" 4
18130 .IX Item "frdy"
18131 Read the value of Y and store it into \fIdest\fR.
18132 .RE
18133 .RS 4
18134 .Sp
18135 Note that you can gain more local control over generation of Nios \s-1II\s0 custom
18136 instructions by using the \f(CW\*(C`target("custom\-\f(CIinsn\f(CW=\f(CIN\f(CW")\*(C'\fR
18137 and \f(CW\*(C`target("no\-custom\-\f(CIinsn\f(CW")\*(C'\fR function attributes
18138 or pragmas.
18139 .RE
18140 .IP "\fB\-mcustom\-fpu\-cfg=\fR\fIname\fR" 4
18141 .IX Item "-mcustom-fpu-cfg=name"
18142 This option enables a predefined, named set of custom instruction encodings
18143 (see \fB\-mcustom\-\fR\fIinsn\fR above).  
18144 Currently, the following sets are defined:
18145 .Sp
18146 \&\fB\-mcustom\-fpu\-cfg=60\-1\fR is equivalent to:
18147 \&\fB\-mcustom\-fmuls=252 
18148 \&\-mcustom\-fadds=253 
18149 \&\-mcustom\-fsubs=254 
18150 \&\-fsingle\-precision\-constant\fR
18151 .Sp
18152 \&\fB\-mcustom\-fpu\-cfg=60\-2\fR is equivalent to:
18153 \&\fB\-mcustom\-fmuls=252 
18154 \&\-mcustom\-fadds=253 
18155 \&\-mcustom\-fsubs=254 
18156 \&\-mcustom\-fdivs=255 
18157 \&\-fsingle\-precision\-constant\fR
18158 .Sp
18159 \&\fB\-mcustom\-fpu\-cfg=72\-3\fR is equivalent to:
18160 \&\fB\-mcustom\-floatus=243 
18161 \&\-mcustom\-fixsi=244 
18162 \&\-mcustom\-floatis=245 
18163 \&\-mcustom\-fcmpgts=246 
18164 \&\-mcustom\-fcmples=249 
18165 \&\-mcustom\-fcmpeqs=250 
18166 \&\-mcustom\-fcmpnes=251 
18167 \&\-mcustom\-fmuls=252 
18168 \&\-mcustom\-fadds=253 
18169 \&\-mcustom\-fsubs=254 
18170 \&\-mcustom\-fdivs=255 
18171 \&\-fsingle\-precision\-constant\fR
18172 .Sp
18173 Custom instruction assignments given by individual
18174 \&\fB\-mcustom\-\fR\fIinsn\fR\fB=\fR options override those given by
18175 \&\fB\-mcustom\-fpu\-cfg=\fR, regardless of the
18176 order of the options on the command line.
18177 .Sp
18178 Note that you can gain more local control over selection of a \s-1FPU\s0
18179 configuration by using the \f(CW\*(C`target("custom\-fpu\-cfg=\f(CIname\f(CW")\*(C'\fR
18180 function attribute
18181 or pragma.
18182 .PP
18183 These additional \fB\-m\fR options are available for the Altera Nios \s-1II\s0
18184 \&\s-1ELF\s0 (bare-metal) target:
18185 .IP "\fB\-mhal\fR" 4
18186 .IX Item "-mhal"
18187 Link with \s-1HAL\s0 \s-1BSP\s0.  This suppresses linking with the GCC-provided C runtime
18188 startup and termination code, and is typically used in conjunction with
18189 \&\fB\-msys\-crt0=\fR to specify the location of the alternate startup code
18190 provided by the \s-1HAL\s0 \s-1BSP\s0.
18191 .IP "\fB\-msmallc\fR" 4
18192 .IX Item "-msmallc"
18193 Link with a limited version of the C library, \fB\-lsmallc\fR, rather than
18194 Newlib.
18195 .IP "\fB\-msys\-crt0=\fR\fIstartfile\fR" 4
18196 .IX Item "-msys-crt0=startfile"
18197 \&\fIstartfile\fR is the file name of the startfile (crt0) to use 
18198 when linking.  This option is only useful in conjunction with \fB\-mhal\fR.
18199 .IP "\fB\-msys\-lib=\fR\fIsystemlib\fR" 4
18200 .IX Item "-msys-lib=systemlib"
18201 \&\fIsystemlib\fR is the library name of the library that provides
18202 low-level system calls required by the C library,
18203 e.g. \f(CW\*(C`read\*(C'\fR and \f(CW\*(C`write\*(C'\fR.
18204 This option is typically used to link with a library provided by a \s-1HAL\s0 \s-1BSP\s0.
18205 .PP
18206 \fI\s-1PDP\-11\s0 Options\fR
18207 .IX Subsection "PDP-11 Options"
18208 .PP
18209 These options are defined for the \s-1PDP\-11:\s0
18210 .IP "\fB\-mfpu\fR" 4
18211 .IX Item "-mfpu"
18212 Use hardware \s-1FPP\s0 floating point.  This is the default.  (\s-1FIS\s0 floating
18213 point on the \s-1PDP\-11/40\s0 is not supported.)
18214 .IP "\fB\-msoft\-float\fR" 4
18215 .IX Item "-msoft-float"
18216 Do not use hardware floating point.
18217 .IP "\fB\-mac0\fR" 4
18218 .IX Item "-mac0"
18219 Return floating-point results in ac0 (fr0 in Unix assembler syntax).
18220 .IP "\fB\-mno\-ac0\fR" 4
18221 .IX Item "-mno-ac0"
18222 Return floating-point results in memory.  This is the default.
18223 .IP "\fB\-m40\fR" 4
18224 .IX Item "-m40"
18225 Generate code for a \s-1PDP\-11/40\s0.
18226 .IP "\fB\-m45\fR" 4
18227 .IX Item "-m45"
18228 Generate code for a \s-1PDP\-11/45\s0.  This is the default.
18229 .IP "\fB\-m10\fR" 4
18230 .IX Item "-m10"
18231 Generate code for a \s-1PDP\-11/10\s0.
18232 .IP "\fB\-mbcopy\-builtin\fR" 4
18233 .IX Item "-mbcopy-builtin"
18234 Use inline \f(CW\*(C`movmemhi\*(C'\fR patterns for copying memory.  This is the
18235 default.
18236 .IP "\fB\-mbcopy\fR" 4
18237 .IX Item "-mbcopy"
18238 Do not use inline \f(CW\*(C`movmemhi\*(C'\fR patterns for copying memory.
18239 .IP "\fB\-mint16\fR" 4
18240 .IX Item "-mint16"
18241 .PD 0
18242 .IP "\fB\-mno\-int32\fR" 4
18243 .IX Item "-mno-int32"
18244 .PD
18245 Use 16\-bit \f(CW\*(C`int\*(C'\fR.  This is the default.
18246 .IP "\fB\-mint32\fR" 4
18247 .IX Item "-mint32"
18248 .PD 0
18249 .IP "\fB\-mno\-int16\fR" 4
18250 .IX Item "-mno-int16"
18251 .PD
18252 Use 32\-bit \f(CW\*(C`int\*(C'\fR.
18253 .IP "\fB\-mfloat64\fR" 4
18254 .IX Item "-mfloat64"
18255 .PD 0
18256 .IP "\fB\-mno\-float32\fR" 4
18257 .IX Item "-mno-float32"
18258 .PD
18259 Use 64\-bit \f(CW\*(C`float\*(C'\fR.  This is the default.
18260 .IP "\fB\-mfloat32\fR" 4
18261 .IX Item "-mfloat32"
18262 .PD 0
18263 .IP "\fB\-mno\-float64\fR" 4
18264 .IX Item "-mno-float64"
18265 .PD
18266 Use 32\-bit \f(CW\*(C`float\*(C'\fR.
18267 .IP "\fB\-mabshi\fR" 4
18268 .IX Item "-mabshi"
18269 Use \f(CW\*(C`abshi2\*(C'\fR pattern.  This is the default.
18270 .IP "\fB\-mno\-abshi\fR" 4
18271 .IX Item "-mno-abshi"
18272 Do not use \f(CW\*(C`abshi2\*(C'\fR pattern.
18273 .IP "\fB\-mbranch\-expensive\fR" 4
18274 .IX Item "-mbranch-expensive"
18275 Pretend that branches are expensive.  This is for experimenting with
18276 code generation only.
18277 .IP "\fB\-mbranch\-cheap\fR" 4
18278 .IX Item "-mbranch-cheap"
18279 Do not pretend that branches are expensive.  This is the default.
18280 .IP "\fB\-munix\-asm\fR" 4
18281 .IX Item "-munix-asm"
18282 Use Unix assembler syntax.  This is the default when configured for
18283 \&\fBpdp11\-*\-bsd\fR.
18284 .IP "\fB\-mdec\-asm\fR" 4
18285 .IX Item "-mdec-asm"
18286 Use \s-1DEC\s0 assembler syntax.  This is the default when configured for any
18287 \&\s-1PDP\-11\s0 target other than \fBpdp11\-*\-bsd\fR.
18288 .PP
18289 \fIpicoChip Options\fR
18290 .IX Subsection "picoChip Options"
18291 .PP
18292 These \fB\-m\fR options are defined for picoChip implementations:
18293 .IP "\fB\-mae=\fR\fIae_type\fR" 4
18294 .IX Item "-mae=ae_type"
18295 Set the instruction set, register set, and instruction scheduling
18296 parameters for array element type \fIae_type\fR.  Supported values
18297 for \fIae_type\fR are \fB\s-1ANY\s0\fR, \fB\s-1MUL\s0\fR, and \fB\s-1MAC\s0\fR.
18298 .Sp
18299 \&\fB\-mae=ANY\fR selects a completely generic \s-1AE\s0 type.  Code
18300 generated with this option runs on any of the other \s-1AE\s0 types.  The
18301 code is not as efficient as it would be if compiled for a specific
18302 \&\s-1AE\s0 type, and some types of operation (e.g., multiplication) do not
18303 work properly on all types of \s-1AE\s0.
18304 .Sp
18305 \&\fB\-mae=MUL\fR selects a \s-1MUL\s0 \s-1AE\s0 type.  This is the most useful \s-1AE\s0 type
18306 for compiled code, and is the default.
18307 .Sp
18308 \&\fB\-mae=MAC\fR selects a DSP-style \s-1MAC\s0 \s-1AE\s0.  Code compiled with this
18309 option may suffer from poor performance of byte (char) manipulation,
18310 since the \s-1DSP\s0 \s-1AE\s0 does not provide hardware support for byte load/stores.
18311 .IP "\fB\-msymbol\-as\-address\fR" 4
18312 .IX Item "-msymbol-as-address"
18313 Enable the compiler to directly use a symbol name as an address in a
18314 load/store instruction, without first loading it into a
18315 register.  Typically, the use of this option generates larger
18316 programs, which run faster than when the option isn't used.  However, the
18317 results vary from program to program, so it is left as a user option,
18318 rather than being permanently enabled.
18319 .IP "\fB\-mno\-inefficient\-warnings\fR" 4
18320 .IX Item "-mno-inefficient-warnings"
18321 Disables warnings about the generation of inefficient code.  These
18322 warnings can be generated, for example, when compiling code that
18323 performs byte-level memory operations on the \s-1MAC\s0 \s-1AE\s0 type.  The \s-1MAC\s0 \s-1AE\s0 has
18324 no hardware support for byte-level memory operations, so all byte
18325 load/stores must be synthesized from word load/store operations.  This is
18326 inefficient and a warning is generated to indicate
18327 that you should rewrite the code to avoid byte operations, or to target
18328 an \s-1AE\s0 type that has the necessary hardware support.  This option disables
18329 these warnings.
18330 .PP
18331 \fIPowerPC Options\fR
18332 .IX Subsection "PowerPC Options"
18333 .PP
18334 These are listed under
18335 .PP
18336 \fI\s-1RL78\s0 Options\fR
18337 .IX Subsection "RL78 Options"
18338 .IP "\fB\-msim\fR" 4
18339 .IX Item "-msim"
18340 Links in additional target libraries to support operation within a
18341 simulator.
18342 .IP "\fB\-mmul=none\fR" 4
18343 .IX Item "-mmul=none"
18344 .PD 0
18345 .IP "\fB\-mmul=g13\fR" 4
18346 .IX Item "-mmul=g13"
18347 .IP "\fB\-mmul=rl78\fR" 4
18348 .IX Item "-mmul=rl78"
18349 .PD
18350 Specifies the type of hardware multiplication support to be used.  The
18351 default is \fBnone\fR, which uses software multiplication functions.
18352 The \fBg13\fR option is for the hardware multiply/divide peripheral
18353 only on the \s-1RL78/G13\s0 targets.  The \fBrl78\fR option is for the
18354 standard hardware multiplication defined in the \s-1RL78\s0 software manual.
18355 .IP "\fB\-m64bit\-doubles\fR" 4
18356 .IX Item "-m64bit-doubles"
18357 .PD 0
18358 .IP "\fB\-m32bit\-doubles\fR" 4
18359 .IX Item "-m32bit-doubles"
18360 .PD
18361 Make the \f(CW\*(C`double\*(C'\fR data type be 64 bits (\fB\-m64bit\-doubles\fR)
18362 or 32 bits (\fB\-m32bit\-doubles\fR) in size.  The default is
18363 \&\fB\-m32bit\-doubles\fR.
18364 .PP
18365 \fI\s-1IBM\s0 \s-1RS/6000\s0 and PowerPC Options\fR
18366 .IX Subsection "IBM RS/6000 and PowerPC Options"
18367 .PP
18368 These \fB\-m\fR options are defined for the \s-1IBM\s0 \s-1RS/6000\s0 and PowerPC:
18369 .IP "\fB\-mpowerpc\-gpopt\fR" 4
18370 .IX Item "-mpowerpc-gpopt"
18371 .PD 0
18372 .IP "\fB\-mno\-powerpc\-gpopt\fR" 4
18373 .IX Item "-mno-powerpc-gpopt"
18374 .IP "\fB\-mpowerpc\-gfxopt\fR" 4
18375 .IX Item "-mpowerpc-gfxopt"
18376 .IP "\fB\-mno\-powerpc\-gfxopt\fR" 4
18377 .IX Item "-mno-powerpc-gfxopt"
18378 .IP "\fB\-mpowerpc64\fR" 4
18379 .IX Item "-mpowerpc64"
18380 .IP "\fB\-mno\-powerpc64\fR" 4
18381 .IX Item "-mno-powerpc64"
18382 .IP "\fB\-mmfcrf\fR" 4
18383 .IX Item "-mmfcrf"
18384 .IP "\fB\-mno\-mfcrf\fR" 4
18385 .IX Item "-mno-mfcrf"
18386 .IP "\fB\-mpopcntb\fR" 4
18387 .IX Item "-mpopcntb"
18388 .IP "\fB\-mno\-popcntb\fR" 4
18389 .IX Item "-mno-popcntb"
18390 .IP "\fB\-mpopcntd\fR" 4
18391 .IX Item "-mpopcntd"
18392 .IP "\fB\-mno\-popcntd\fR" 4
18393 .IX Item "-mno-popcntd"
18394 .IP "\fB\-mfprnd\fR" 4
18395 .IX Item "-mfprnd"
18396 .IP "\fB\-mno\-fprnd\fR" 4
18397 .IX Item "-mno-fprnd"
18398 .IP "\fB\-mcmpb\fR" 4
18399 .IX Item "-mcmpb"
18400 .IP "\fB\-mno\-cmpb\fR" 4
18401 .IX Item "-mno-cmpb"
18402 .IP "\fB\-mmfpgpr\fR" 4
18403 .IX Item "-mmfpgpr"
18404 .IP "\fB\-mno\-mfpgpr\fR" 4
18405 .IX Item "-mno-mfpgpr"
18406 .IP "\fB\-mhard\-dfp\fR" 4
18407 .IX Item "-mhard-dfp"
18408 .IP "\fB\-mno\-hard\-dfp\fR" 4
18409 .IX Item "-mno-hard-dfp"
18410 .PD
18411 You use these options to specify which instructions are available on the
18412 processor you are using.  The default value of these options is
18413 determined when configuring \s-1GCC\s0.  Specifying the
18414 \&\fB\-mcpu=\fR\fIcpu_type\fR overrides the specification of these
18415 options.  We recommend you use the \fB\-mcpu=\fR\fIcpu_type\fR option
18416 rather than the options listed above.
18417 .Sp
18418 Specifying \fB\-mpowerpc\-gpopt\fR allows
18419 \&\s-1GCC\s0 to use the optional PowerPC architecture instructions in the
18420 General Purpose group, including floating-point square root.  Specifying
18421 \&\fB\-mpowerpc\-gfxopt\fR allows \s-1GCC\s0 to
18422 use the optional PowerPC architecture instructions in the Graphics
18423 group, including floating-point select.
18424 .Sp
18425 The \fB\-mmfcrf\fR option allows \s-1GCC\s0 to generate the move from
18426 condition register field instruction implemented on the \s-1POWER4\s0
18427 processor and other processors that support the PowerPC V2.01
18428 architecture.
18429 The \fB\-mpopcntb\fR option allows \s-1GCC\s0 to generate the popcount and
18430 double-precision \s-1FP\s0 reciprocal estimate instruction implemented on the
18431 \&\s-1POWER5\s0 processor and other processors that support the PowerPC V2.02
18432 architecture.
18433 The \fB\-mpopcntd\fR option allows \s-1GCC\s0 to generate the popcount
18434 instruction implemented on the \s-1POWER7\s0 processor and other processors
18435 that support the PowerPC V2.06 architecture.
18436 The \fB\-mfprnd\fR option allows \s-1GCC\s0 to generate the \s-1FP\s0 round to
18437 integer instructions implemented on the \s-1POWER5+\s0 processor and other
18438 processors that support the PowerPC V2.03 architecture.
18439 The \fB\-mcmpb\fR option allows \s-1GCC\s0 to generate the compare bytes
18440 instruction implemented on the \s-1POWER6\s0 processor and other processors
18441 that support the PowerPC V2.05 architecture.
18442 The \fB\-mmfpgpr\fR option allows \s-1GCC\s0 to generate the \s-1FP\s0 move to/from
18443 general-purpose register instructions implemented on the \s-1POWER6X\s0
18444 processor and other processors that support the extended PowerPC V2.05
18445 architecture.
18446 The \fB\-mhard\-dfp\fR option allows \s-1GCC\s0 to generate the decimal
18447 floating-point instructions implemented on some \s-1POWER\s0 processors.
18448 .Sp
18449 The \fB\-mpowerpc64\fR option allows \s-1GCC\s0 to generate the additional
18450 64\-bit instructions that are found in the full PowerPC64 architecture
18451 and to treat GPRs as 64\-bit, doubleword quantities.  \s-1GCC\s0 defaults to
18452 \&\fB\-mno\-powerpc64\fR.
18453 .IP "\fB\-mcpu=\fR\fIcpu_type\fR" 4
18454 .IX Item "-mcpu=cpu_type"
18455 Set architecture type, register usage, and
18456 instruction scheduling parameters for machine type \fIcpu_type\fR.
18457 Supported values for \fIcpu_type\fR are \fB401\fR, \fB403\fR,
18458 \&\fB405\fR, \fB405fp\fR, \fB440\fR, \fB440fp\fR, \fB464\fR, \fB464fp\fR,
18459 \&\fB476\fR, \fB476fp\fR, \fB505\fR, \fB601\fR, \fB602\fR, \fB603\fR,
18460 \&\fB603e\fR, \fB604\fR, \fB604e\fR, \fB620\fR, \fB630\fR, \fB740\fR,
18461 \&\fB7400\fR, \fB7450\fR, \fB750\fR, \fB801\fR, \fB821\fR, \fB823\fR,
18462 \&\fB860\fR, \fB970\fR, \fB8540\fR, \fBa2\fR, \fBe300c2\fR,
18463 \&\fBe300c3\fR, \fBe500mc\fR, \fBe500mc64\fR, \fBe5500\fR,
18464 \&\fBe6500\fR, \fBec603e\fR, \fBG3\fR, \fBG4\fR, \fBG5\fR,
18465 \&\fBtitan\fR, \fBpower3\fR, \fBpower4\fR, \fBpower5\fR, \fBpower5+\fR,
18466 \&\fBpower6\fR, \fBpower6x\fR, \fBpower7\fR, \fBpower8\fR, \fBpowerpc\fR,
18467 \&\fBpowerpc64\fR, and \fBrs64\fR.
18468 .Sp
18469 \&\fB\-mcpu=powerpc\fR, and \fB\-mcpu=powerpc64\fR specify pure 32\-bit
18470 PowerPC and 64\-bit PowerPC architecture machine
18471 types, with an appropriate, generic processor model assumed for
18472 scheduling purposes.
18473 .Sp
18474 The other options specify a specific processor.  Code generated under
18475 those options runs best on that processor, and may not run at all on
18476 others.
18477 .Sp
18478 The \fB\-mcpu\fR options automatically enable or disable the
18479 following options:
18480 .Sp
18481 \&\fB\-maltivec  \-mfprnd  \-mhard\-float  \-mmfcrf  \-mmultiple 
18482 \&\-mpopcntb \-mpopcntd  \-mpowerpc64 
18483 \&\-mpowerpc\-gpopt  \-mpowerpc\-gfxopt  \-msingle\-float \-mdouble\-float 
18484 \&\-msimple\-fpu \-mstring  \-mmulhw  \-mdlmzb  \-mmfpgpr \-mvsx 
18485 \&\-mcrypto \-mdirect\-move \-mpower8\-fusion \-mpower8\-vector 
18486 \&\-mquad\-memory \-mquad\-memory\-atomic\fR
18487 .Sp
18488 The particular options set for any particular \s-1CPU\s0 varies between
18489 compiler versions, depending on what setting seems to produce optimal
18490 code for that \s-1CPU\s0; it doesn't necessarily reflect the actual hardware's
18491 capabilities.  If you wish to set an individual option to a particular
18492 value, you may specify it after the \fB\-mcpu\fR option, like
18493 \&\fB\-mcpu=970 \-mno\-altivec\fR.
18494 .Sp
18495 On \s-1AIX\s0, the \fB\-maltivec\fR and \fB\-mpowerpc64\fR options are
18496 not enabled or disabled by the \fB\-mcpu\fR option at present because
18497 \&\s-1AIX\s0 does not have full support for these options.  You may still
18498 enable or disable them individually if you're sure it'll work in your
18499 environment.
18500 .IP "\fB\-mtune=\fR\fIcpu_type\fR" 4
18501 .IX Item "-mtune=cpu_type"
18502 Set the instruction scheduling parameters for machine type
18503 \&\fIcpu_type\fR, but do not set the architecture type or register usage,
18504 as \fB\-mcpu=\fR\fIcpu_type\fR does.  The same
18505 values for \fIcpu_type\fR are used for \fB\-mtune\fR as for
18506 \&\fB\-mcpu\fR.  If both are specified, the code generated uses the
18507 architecture and registers set by \fB\-mcpu\fR, but the
18508 scheduling parameters set by \fB\-mtune\fR.
18509 .IP "\fB\-mcmodel=small\fR" 4
18510 .IX Item "-mcmodel=small"
18511 Generate PowerPC64 code for the small model: The \s-1TOC\s0 is limited to
18512 64k.
18513 .IP "\fB\-mcmodel=medium\fR" 4
18514 .IX Item "-mcmodel=medium"
18515 Generate PowerPC64 code for the medium model: The \s-1TOC\s0 and other static
18516 data may be up to a total of 4G in size.
18517 .IP "\fB\-mcmodel=large\fR" 4
18518 .IX Item "-mcmodel=large"
18519 Generate PowerPC64 code for the large model: The \s-1TOC\s0 may be up to 4G
18520 in size.  Other data and code is only limited by the 64\-bit address
18521 space.
18522 .IP "\fB\-maltivec\fR" 4
18523 .IX Item "-maltivec"
18524 .PD 0
18525 .IP "\fB\-mno\-altivec\fR" 4
18526 .IX Item "-mno-altivec"
18527 .PD
18528 Generate code that uses (does not use) AltiVec instructions, and also
18529 enable the use of built-in functions that allow more direct access to
18530 the AltiVec instruction set.  You may also need to set
18531 \&\fB\-mabi=altivec\fR to adjust the current \s-1ABI\s0 with AltiVec \s-1ABI\s0
18532 enhancements.
18533 .Sp
18534 When \fB\-maltivec\fR is used, rather than \fB\-maltivec=le\fR or
18535 \&\fB\-maltivec=be\fR, the element order for Altivec intrinsics such
18536 as \f(CW\*(C`vec_splat\*(C'\fR, \f(CW\*(C`vec_extract\*(C'\fR, and \f(CW\*(C`vec_insert\*(C'\fR 
18537 match array element order corresponding to the endianness of the
18538 target.  That is, element zero identifies the leftmost element in a
18539 vector register when targeting a big-endian platform, and identifies
18540 the rightmost element in a vector register when targeting a
18541 little-endian platform.
18542 .IP "\fB\-maltivec=be\fR" 4
18543 .IX Item "-maltivec=be"
18544 Generate Altivec instructions using big-endian element order,
18545 regardless of whether the target is big\- or little-endian.  This is
18546 the default when targeting a big-endian platform.
18547 .Sp
18548 The element order is used to interpret element numbers in Altivec
18549 intrinsics such as \f(CW\*(C`vec_splat\*(C'\fR, \f(CW\*(C`vec_extract\*(C'\fR, and
18550 \&\f(CW\*(C`vec_insert\*(C'\fR.  By default, these match array element order
18551 corresponding to the endianness for the target.
18552 .IP "\fB\-maltivec=le\fR" 4
18553 .IX Item "-maltivec=le"
18554 Generate Altivec instructions using little-endian element order,
18555 regardless of whether the target is big\- or little-endian.  This is
18556 the default when targeting a little-endian platform.  This option is
18557 currently ignored when targeting a big-endian platform.
18558 .Sp
18559 The element order is used to interpret element numbers in Altivec
18560 intrinsics such as \f(CW\*(C`vec_splat\*(C'\fR, \f(CW\*(C`vec_extract\*(C'\fR, and
18561 \&\f(CW\*(C`vec_insert\*(C'\fR.  By default, these match array element order
18562 corresponding to the endianness for the target.
18563 .IP "\fB\-mvrsave\fR" 4
18564 .IX Item "-mvrsave"
18565 .PD 0
18566 .IP "\fB\-mno\-vrsave\fR" 4
18567 .IX Item "-mno-vrsave"
18568 .PD
18569 Generate \s-1VRSAVE\s0 instructions when generating AltiVec code.
18570 .IP "\fB\-mgen\-cell\-microcode\fR" 4
18571 .IX Item "-mgen-cell-microcode"
18572 Generate Cell microcode instructions.
18573 .IP "\fB\-mwarn\-cell\-microcode\fR" 4
18574 .IX Item "-mwarn-cell-microcode"
18575 Warn when a Cell microcode instruction is emitted.  An example
18576 of a Cell microcode instruction is a variable shift.
18577 .IP "\fB\-msecure\-plt\fR" 4
18578 .IX Item "-msecure-plt"
18579 Generate code that allows \fBld\fR and \fBld.so\fR
18580 to build executables and shared
18581 libraries with non-executable \f(CW\*(C`.plt\*(C'\fR and \f(CW\*(C`.got\*(C'\fR sections.
18582 This is a PowerPC
18583 32\-bit \s-1SYSV\s0 \s-1ABI\s0 option.
18584 .IP "\fB\-mbss\-plt\fR" 4
18585 .IX Item "-mbss-plt"
18586 Generate code that uses a \s-1BSS\s0 \f(CW\*(C`.plt\*(C'\fR section that \fBld.so\fR
18587 fills in, and
18588 requires \f(CW\*(C`.plt\*(C'\fR and \f(CW\*(C`.got\*(C'\fR
18589 sections that are both writable and executable.
18590 This is a PowerPC 32\-bit \s-1SYSV\s0 \s-1ABI\s0 option.
18591 .IP "\fB\-misel\fR" 4
18592 .IX Item "-misel"
18593 .PD 0
18594 .IP "\fB\-mno\-isel\fR" 4
18595 .IX Item "-mno-isel"
18596 .PD
18597 This switch enables or disables the generation of \s-1ISEL\s0 instructions.
18598 .IP "\fB\-misel=\fR\fIyes/no\fR" 4
18599 .IX Item "-misel=yes/no"
18600 This switch has been deprecated.  Use \fB\-misel\fR and
18601 \&\fB\-mno\-isel\fR instead.
18602 .IP "\fB\-mspe\fR" 4
18603 .IX Item "-mspe"
18604 .PD 0
18605 .IP "\fB\-mno\-spe\fR" 4
18606 .IX Item "-mno-spe"
18607 .PD
18608 This switch enables or disables the generation of \s-1SPE\s0 simd
18609 instructions.
18610 .IP "\fB\-mpaired\fR" 4
18611 .IX Item "-mpaired"
18612 .PD 0
18613 .IP "\fB\-mno\-paired\fR" 4
18614 .IX Item "-mno-paired"
18615 .PD
18616 This switch enables or disables the generation of \s-1PAIRED\s0 simd
18617 instructions.
18618 .IP "\fB\-mspe=\fR\fIyes/no\fR" 4
18619 .IX Item "-mspe=yes/no"
18620 This option has been deprecated.  Use \fB\-mspe\fR and
18621 \&\fB\-mno\-spe\fR instead.
18622 .IP "\fB\-mvsx\fR" 4
18623 .IX Item "-mvsx"
18624 .PD 0
18625 .IP "\fB\-mno\-vsx\fR" 4
18626 .IX Item "-mno-vsx"
18627 .PD
18628 Generate code that uses (does not use) vector/scalar (\s-1VSX\s0)
18629 instructions, and also enable the use of built-in functions that allow
18630 more direct access to the \s-1VSX\s0 instruction set.
18631 .IP "\fB\-mcrypto\fR" 4
18632 .IX Item "-mcrypto"
18633 .PD 0
18634 .IP "\fB\-mno\-crypto\fR" 4
18635 .IX Item "-mno-crypto"
18636 .PD
18637 Enable the use (disable) of the built-in functions that allow direct
18638 access to the cryptographic instructions that were added in version
18639 2.07 of the PowerPC \s-1ISA\s0.
18640 .IP "\fB\-mdirect\-move\fR" 4
18641 .IX Item "-mdirect-move"
18642 .PD 0
18643 .IP "\fB\-mno\-direct\-move\fR" 4
18644 .IX Item "-mno-direct-move"
18645 .PD
18646 Generate code that uses (does not use) the instructions to move data
18647 between the general purpose registers and the vector/scalar (\s-1VSX\s0)
18648 registers that were added in version 2.07 of the PowerPC \s-1ISA\s0.
18649 .IP "\fB\-mpower8\-fusion\fR" 4
18650 .IX Item "-mpower8-fusion"
18651 .PD 0
18652 .IP "\fB\-mno\-power8\-fusion\fR" 4
18653 .IX Item "-mno-power8-fusion"
18654 .PD
18655 Generate code that keeps (does not keeps) some integer operations
18656 adjacent so that the instructions can be fused together on power8 and
18657 later processors.
18658 .IP "\fB\-mpower8\-vector\fR" 4
18659 .IX Item "-mpower8-vector"
18660 .PD 0
18661 .IP "\fB\-mno\-power8\-vector\fR" 4
18662 .IX Item "-mno-power8-vector"
18663 .PD
18664 Generate code that uses (does not use) the vector and scalar
18665 instructions that were added in version 2.07 of the PowerPC \s-1ISA\s0.  Also
18666 enable the use of built-in functions that allow more direct access to
18667 the vector instructions.
18668 .IP "\fB\-mquad\-memory\fR" 4
18669 .IX Item "-mquad-memory"
18670 .PD 0
18671 .IP "\fB\-mno\-quad\-memory\fR" 4
18672 .IX Item "-mno-quad-memory"
18673 .PD
18674 Generate code that uses (does not use) the non-atomic quad word memory
18675 instructions.  The \fB\-mquad\-memory\fR option requires use of
18676 64\-bit mode.
18677 .IP "\fB\-mquad\-memory\-atomic\fR" 4
18678 .IX Item "-mquad-memory-atomic"
18679 .PD 0
18680 .IP "\fB\-mno\-quad\-memory\-atomic\fR" 4
18681 .IX Item "-mno-quad-memory-atomic"
18682 .PD
18683 Generate code that uses (does not use) the atomic quad word memory
18684 instructions.  The \fB\-mquad\-memory\-atomic\fR option requires use of
18685 64\-bit mode.
18686 .IP "\fB\-mupper\-regs\-df\fR" 4
18687 .IX Item "-mupper-regs-df"
18688 .PD 0
18689 .IP "\fB\-mno\-upper\-regs\-df\fR" 4
18690 .IX Item "-mno-upper-regs-df"
18691 .PD
18692 Generate code that uses (does not use) the scalar double precision
18693 instructions that target all 64 registers in the vector/scalar
18694 floating point register set that were added in version 2.06 of the
18695 PowerPC \s-1ISA\s0.  The \fB\-mupper\-regs\-df\fR turned on by default if you
18696 use either of the \fB\-mcpu=power7\fR, \fB\-mcpu=power8\fR, or
18697 \&\fB\-mvsx\fR options.
18698 .IP "\fB\-mupper\-regs\-sf\fR" 4
18699 .IX Item "-mupper-regs-sf"
18700 .PD 0
18701 .IP "\fB\-mno\-upper\-regs\-sf\fR" 4
18702 .IX Item "-mno-upper-regs-sf"
18703 .PD
18704 Generate code that uses (does not use) the scalar single precision
18705 instructions that target all 64 registers in the vector/scalar
18706 floating point register set that were added in version 2.07 of the
18707 PowerPC \s-1ISA\s0.  The \fB\-mupper\-regs\-sf\fR turned on by default if you
18708 use either of the \fB\-mcpu=power8\fR, or \fB\-mpower8\-vector\fR
18709 options.
18710 .IP "\fB\-mupper\-regs\fR" 4
18711 .IX Item "-mupper-regs"
18712 .PD 0
18713 .IP "\fB\-mno\-upper\-regs\fR" 4
18714 .IX Item "-mno-upper-regs"
18715 .PD
18716 Generate code that uses (does not use) the scalar
18717 instructions that target all 64 registers in the vector/scalar
18718 floating point register set, depending on the model of the machine.
18719 .Sp
18720 If the \fB\-mno\-upper\-regs\fR option is used, it turns off both
18721 \&\fB\-mupper\-regs\-sf\fR and \fB\-mupper\-regs\-df\fR options.
18722 .IP "\fB\-mfloat\-gprs=\fR\fIyes/single/double/no\fR" 4
18723 .IX Item "-mfloat-gprs=yes/single/double/no"
18724 .PD 0
18725 .IP "\fB\-mfloat\-gprs\fR" 4
18726 .IX Item "-mfloat-gprs"
18727 .PD
18728 This switch enables or disables the generation of floating-point
18729 operations on the general-purpose registers for architectures that
18730 support it.
18731 .Sp
18732 The argument \fByes\fR or \fBsingle\fR enables the use of
18733 single-precision floating-point operations.
18734 .Sp
18735 The argument \fBdouble\fR enables the use of single and
18736 double-precision floating-point operations.
18737 .Sp
18738 The argument \fBno\fR disables floating-point operations on the
18739 general-purpose registers.
18740 .Sp
18741 This option is currently only available on the MPC854x.
18742 .IP "\fB\-m32\fR" 4
18743 .IX Item "-m32"
18744 .PD 0
18745 .IP "\fB\-m64\fR" 4
18746 .IX Item "-m64"
18747 .PD
18748 Generate code for 32\-bit or 64\-bit environments of Darwin and \s-1SVR4\s0
18749 targets (including GNU/Linux).  The 32\-bit environment sets int, long
18750 and pointer to 32 bits and generates code that runs on any PowerPC
18751 variant.  The 64\-bit environment sets int to 32 bits and long and
18752 pointer to 64 bits, and generates code for PowerPC64, as for
18753 \&\fB\-mpowerpc64\fR.
18754 .IP "\fB\-mfull\-toc\fR" 4
18755 .IX Item "-mfull-toc"
18756 .PD 0
18757 .IP "\fB\-mno\-fp\-in\-toc\fR" 4
18758 .IX Item "-mno-fp-in-toc"
18759 .IP "\fB\-mno\-sum\-in\-toc\fR" 4
18760 .IX Item "-mno-sum-in-toc"
18761 .IP "\fB\-mminimal\-toc\fR" 4
18762 .IX Item "-mminimal-toc"
18763 .PD
18764 Modify generation of the \s-1TOC\s0 (Table Of Contents), which is created for
18765 every executable file.  The \fB\-mfull\-toc\fR option is selected by
18766 default.  In that case, \s-1GCC\s0 allocates at least one \s-1TOC\s0 entry for
18767 each unique non-automatic variable reference in your program.  \s-1GCC\s0
18768 also places floating-point constants in the \s-1TOC\s0.  However, only
18769 16,384 entries are available in the \s-1TOC\s0.
18770 .Sp
18771 If you receive a linker error message that saying you have overflowed
18772 the available \s-1TOC\s0 space, you can reduce the amount of \s-1TOC\s0 space used
18773 with the \fB\-mno\-fp\-in\-toc\fR and \fB\-mno\-sum\-in\-toc\fR options.
18774 \&\fB\-mno\-fp\-in\-toc\fR prevents \s-1GCC\s0 from putting floating-point
18775 constants in the \s-1TOC\s0 and \fB\-mno\-sum\-in\-toc\fR forces \s-1GCC\s0 to
18776 generate code to calculate the sum of an address and a constant at
18777 run time instead of putting that sum into the \s-1TOC\s0.  You may specify one
18778 or both of these options.  Each causes \s-1GCC\s0 to produce very slightly
18779 slower and larger code at the expense of conserving \s-1TOC\s0 space.
18780 .Sp
18781 If you still run out of space in the \s-1TOC\s0 even when you specify both of
18782 these options, specify \fB\-mminimal\-toc\fR instead.  This option causes
18783 \&\s-1GCC\s0 to make only one \s-1TOC\s0 entry for every file.  When you specify this
18784 option, \s-1GCC\s0 produces code that is slower and larger but which
18785 uses extremely little \s-1TOC\s0 space.  You may wish to use this option
18786 only on files that contain less frequently-executed code.
18787 .IP "\fB\-maix64\fR" 4
18788 .IX Item "-maix64"
18789 .PD 0
18790 .IP "\fB\-maix32\fR" 4
18791 .IX Item "-maix32"
18792 .PD
18793 Enable 64\-bit \s-1AIX\s0 \s-1ABI\s0 and calling convention: 64\-bit pointers, 64\-bit
18794 \&\f(CW\*(C`long\*(C'\fR type, and the infrastructure needed to support them.
18795 Specifying \fB\-maix64\fR implies \fB\-mpowerpc64\fR,
18796 while \fB\-maix32\fR disables the 64\-bit \s-1ABI\s0 and
18797 implies \fB\-mno\-powerpc64\fR.  \s-1GCC\s0 defaults to \fB\-maix32\fR.
18798 .IP "\fB\-mxl\-compat\fR" 4
18799 .IX Item "-mxl-compat"
18800 .PD 0
18801 .IP "\fB\-mno\-xl\-compat\fR" 4
18802 .IX Item "-mno-xl-compat"
18803 .PD
18804 Produce code that conforms more closely to \s-1IBM\s0 \s-1XL\s0 compiler semantics
18805 when using AIX-compatible \s-1ABI\s0.  Pass floating-point arguments to
18806 prototyped functions beyond the register save area (\s-1RSA\s0) on the stack
18807 in addition to argument FPRs.  Do not assume that most significant
18808 double in 128\-bit long double value is properly rounded when comparing
18809 values and converting to double.  Use \s-1XL\s0 symbol names for long double
18810 support routines.
18811 .Sp
18812 The \s-1AIX\s0 calling convention was extended but not initially documented to
18813 handle an obscure K&R C case of calling a function that takes the
18814 address of its arguments with fewer arguments than declared.  \s-1IBM\s0 \s-1XL\s0
18815 compilers access floating-point arguments that do not fit in the
18816 \&\s-1RSA\s0 from the stack when a subroutine is compiled without
18817 optimization.  Because always storing floating-point arguments on the
18818 stack is inefficient and rarely needed, this option is not enabled by
18819 default and only is necessary when calling subroutines compiled by \s-1IBM\s0
18820 \&\s-1XL\s0 compilers without optimization.
18821 .IP "\fB\-mpe\fR" 4
18822 .IX Item "-mpe"
18823 Support \fI\s-1IBM\s0 \s-1RS/6000\s0 \s-1SP\s0\fR \fIParallel Environment\fR (\s-1PE\s0).  Link an
18824 application written to use message passing with special startup code to
18825 enable the application to run.  The system must have \s-1PE\s0 installed in the
18826 standard location (\fI/usr/lpp/ppe.poe/\fR), or the \fIspecs\fR file
18827 must be overridden with the \fB\-specs=\fR option to specify the
18828 appropriate directory location.  The Parallel Environment does not
18829 support threads, so the \fB\-mpe\fR option and the \fB\-pthread\fR
18830 option are incompatible.
18831 .IP "\fB\-malign\-natural\fR" 4
18832 .IX Item "-malign-natural"
18833 .PD 0
18834 .IP "\fB\-malign\-power\fR" 4
18835 .IX Item "-malign-power"
18836 .PD
18837 On \s-1AIX\s0, 32\-bit Darwin, and 64\-bit PowerPC GNU/Linux, the option
18838 \&\fB\-malign\-natural\fR overrides the ABI-defined alignment of larger
18839 types, such as floating-point doubles, on their natural size-based boundary.
18840 The option \fB\-malign\-power\fR instructs \s-1GCC\s0 to follow the ABI-specified
18841 alignment rules.  \s-1GCC\s0 defaults to the standard alignment defined in the \s-1ABI\s0.
18842 .Sp
18843 On 64\-bit Darwin, natural alignment is the default, and \fB\-malign\-power\fR
18844 is not supported.
18845 .IP "\fB\-msoft\-float\fR" 4
18846 .IX Item "-msoft-float"
18847 .PD 0
18848 .IP "\fB\-mhard\-float\fR" 4
18849 .IX Item "-mhard-float"
18850 .PD
18851 Generate code that does not use (uses) the floating-point register set.
18852 Software floating-point emulation is provided if you use the
18853 \&\fB\-msoft\-float\fR option, and pass the option to \s-1GCC\s0 when linking.
18854 .IP "\fB\-msingle\-float\fR" 4
18855 .IX Item "-msingle-float"
18856 .PD 0
18857 .IP "\fB\-mdouble\-float\fR" 4
18858 .IX Item "-mdouble-float"
18859 .PD
18860 Generate code for single\- or double-precision floating-point operations.
18861 \&\fB\-mdouble\-float\fR implies \fB\-msingle\-float\fR.
18862 .IP "\fB\-msimple\-fpu\fR" 4
18863 .IX Item "-msimple-fpu"
18864 Do not generate \f(CW\*(C`sqrt\*(C'\fR and \f(CW\*(C`div\*(C'\fR instructions for hardware
18865 floating-point unit.
18866 .IP "\fB\-mfpu=\fR\fIname\fR" 4
18867 .IX Item "-mfpu=name"
18868 Specify type of floating-point unit.  Valid values for \fIname\fR are
18869 \&\fBsp_lite\fR (equivalent to \fB\-msingle\-float \-msimple\-fpu\fR),
18870 \&\fBdp_lite\fR (equivalent to \fB\-mdouble\-float \-msimple\-fpu\fR),
18871 \&\fBsp_full\fR (equivalent to \fB\-msingle\-float\fR),
18872 and \fBdp_full\fR (equivalent to \fB\-mdouble\-float\fR).
18873 .IP "\fB\-mxilinx\-fpu\fR" 4
18874 .IX Item "-mxilinx-fpu"
18875 Perform optimizations for the floating-point unit on Xilinx \s-1PPC\s0 405/440.
18876 .IP "\fB\-mmultiple\fR" 4
18877 .IX Item "-mmultiple"
18878 .PD 0
18879 .IP "\fB\-mno\-multiple\fR" 4
18880 .IX Item "-mno-multiple"
18881 .PD
18882 Generate code that uses (does not use) the load multiple word
18883 instructions and the store multiple word instructions.  These
18884 instructions are generated by default on \s-1POWER\s0 systems, and not
18885 generated on PowerPC systems.  Do not use \fB\-mmultiple\fR on little-endian
18886 PowerPC systems, since those instructions do not work when the
18887 processor is in little-endian mode.  The exceptions are \s-1PPC740\s0 and
18888 \&\s-1PPC750\s0 which permit these instructions in little-endian mode.
18889 .IP "\fB\-mstring\fR" 4
18890 .IX Item "-mstring"
18891 .PD 0
18892 .IP "\fB\-mno\-string\fR" 4
18893 .IX Item "-mno-string"
18894 .PD
18895 Generate code that uses (does not use) the load string instructions
18896 and the store string word instructions to save multiple registers and
18897 do small block moves.  These instructions are generated by default on
18898 \&\s-1POWER\s0 systems, and not generated on PowerPC systems.  Do not use
18899 \&\fB\-mstring\fR on little-endian PowerPC systems, since those
18900 instructions do not work when the processor is in little-endian mode.
18901 The exceptions are \s-1PPC740\s0 and \s-1PPC750\s0 which permit these instructions
18902 in little-endian mode.
18903 .IP "\fB\-mupdate\fR" 4
18904 .IX Item "-mupdate"
18905 .PD 0
18906 .IP "\fB\-mno\-update\fR" 4
18907 .IX Item "-mno-update"
18908 .PD
18909 Generate code that uses (does not use) the load or store instructions
18910 that update the base register to the address of the calculated memory
18911 location.  These instructions are generated by default.  If you use
18912 \&\fB\-mno\-update\fR, there is a small window between the time that the
18913 stack pointer is updated and the address of the previous frame is
18914 stored, which means code that walks the stack frame across interrupts or
18915 signals may get corrupted data.
18916 .IP "\fB\-mavoid\-indexed\-addresses\fR" 4
18917 .IX Item "-mavoid-indexed-addresses"
18918 .PD 0
18919 .IP "\fB\-mno\-avoid\-indexed\-addresses\fR" 4
18920 .IX Item "-mno-avoid-indexed-addresses"
18921 .PD
18922 Generate code that tries to avoid (not avoid) the use of indexed load
18923 or store instructions. These instructions can incur a performance
18924 penalty on Power6 processors in certain situations, such as when
18925 stepping through large arrays that cross a 16M boundary.  This option
18926 is enabled by default when targeting Power6 and disabled otherwise.
18927 .IP "\fB\-mfused\-madd\fR" 4
18928 .IX Item "-mfused-madd"
18929 .PD 0
18930 .IP "\fB\-mno\-fused\-madd\fR" 4
18931 .IX Item "-mno-fused-madd"
18932 .PD
18933 Generate code that uses (does not use) the floating-point multiply and
18934 accumulate instructions.  These instructions are generated by default
18935 if hardware floating point is used.  The machine-dependent
18936 \&\fB\-mfused\-madd\fR option is now mapped to the machine-independent
18937 \&\fB\-ffp\-contract=fast\fR option, and \fB\-mno\-fused\-madd\fR is
18938 mapped to \fB\-ffp\-contract=off\fR.
18939 .IP "\fB\-mmulhw\fR" 4
18940 .IX Item "-mmulhw"
18941 .PD 0
18942 .IP "\fB\-mno\-mulhw\fR" 4
18943 .IX Item "-mno-mulhw"
18944 .PD
18945 Generate code that uses (does not use) the half-word multiply and
18946 multiply-accumulate instructions on the \s-1IBM\s0 405, 440, 464 and 476 processors.
18947 These instructions are generated by default when targeting those
18948 processors.
18949 .IP "\fB\-mdlmzb\fR" 4
18950 .IX Item "-mdlmzb"
18951 .PD 0
18952 .IP "\fB\-mno\-dlmzb\fR" 4
18953 .IX Item "-mno-dlmzb"
18954 .PD
18955 Generate code that uses (does not use) the string-search \fBdlmzb\fR
18956 instruction on the \s-1IBM\s0 405, 440, 464 and 476 processors.  This instruction is
18957 generated by default when targeting those processors.
18958 .IP "\fB\-mno\-bit\-align\fR" 4
18959 .IX Item "-mno-bit-align"
18960 .PD 0
18961 .IP "\fB\-mbit\-align\fR" 4
18962 .IX Item "-mbit-align"
18963 .PD
18964 On System V.4 and embedded PowerPC systems do not (do) force structures
18965 and unions that contain bit-fields to be aligned to the base type of the
18966 bit-field.
18967 .Sp
18968 For example, by default a structure containing nothing but 8
18969 \&\f(CW\*(C`unsigned\*(C'\fR bit-fields of length 1 is aligned to a 4\-byte
18970 boundary and has a size of 4 bytes.  By using \fB\-mno\-bit\-align\fR,
18971 the structure is aligned to a 1\-byte boundary and is 1 byte in
18972 size.
18973 .IP "\fB\-mno\-strict\-align\fR" 4
18974 .IX Item "-mno-strict-align"
18975 .PD 0
18976 .IP "\fB\-mstrict\-align\fR" 4
18977 .IX Item "-mstrict-align"
18978 .PD
18979 On System V.4 and embedded PowerPC systems do not (do) assume that
18980 unaligned memory references are handled by the system.
18981 .IP "\fB\-mrelocatable\fR" 4
18982 .IX Item "-mrelocatable"
18983 .PD 0
18984 .IP "\fB\-mno\-relocatable\fR" 4
18985 .IX Item "-mno-relocatable"
18986 .PD
18987 Generate code that allows (does not allow) a static executable to be
18988 relocated to a different address at run time.  A simple embedded
18989 PowerPC system loader should relocate the entire contents of
18990 \&\f(CW\*(C`.got2\*(C'\fR and 4\-byte locations listed in the \f(CW\*(C`.fixup\*(C'\fR section,
18991 a table of 32\-bit addresses generated by this option.  For this to
18992 work, all objects linked together must be compiled with
18993 \&\fB\-mrelocatable\fR or \fB\-mrelocatable\-lib\fR.
18994 \&\fB\-mrelocatable\fR code aligns the stack to an 8\-byte boundary.
18995 .IP "\fB\-mrelocatable\-lib\fR" 4
18996 .IX Item "-mrelocatable-lib"
18997 .PD 0
18998 .IP "\fB\-mno\-relocatable\-lib\fR" 4
18999 .IX Item "-mno-relocatable-lib"
19000 .PD
19001 Like \fB\-mrelocatable\fR, \fB\-mrelocatable\-lib\fR generates a
19002 \&\f(CW\*(C`.fixup\*(C'\fR section to allow static executables to be relocated at
19003 run time, but \fB\-mrelocatable\-lib\fR does not use the smaller stack
19004 alignment of \fB\-mrelocatable\fR.  Objects compiled with
19005 \&\fB\-mrelocatable\-lib\fR may be linked with objects compiled with
19006 any combination of the \fB\-mrelocatable\fR options.
19007 .IP "\fB\-mno\-toc\fR" 4
19008 .IX Item "-mno-toc"
19009 .PD 0
19010 .IP "\fB\-mtoc\fR" 4
19011 .IX Item "-mtoc"
19012 .PD
19013 On System V.4 and embedded PowerPC systems do not (do) assume that
19014 register 2 contains a pointer to a global area pointing to the addresses
19015 used in the program.
19016 .IP "\fB\-mlittle\fR" 4
19017 .IX Item "-mlittle"
19018 .PD 0
19019 .IP "\fB\-mlittle\-endian\fR" 4
19020 .IX Item "-mlittle-endian"
19021 .PD
19022 On System V.4 and embedded PowerPC systems compile code for the
19023 processor in little-endian mode.  The \fB\-mlittle\-endian\fR option is
19024 the same as \fB\-mlittle\fR.
19025 .IP "\fB\-mbig\fR" 4
19026 .IX Item "-mbig"
19027 .PD 0
19028 .IP "\fB\-mbig\-endian\fR" 4
19029 .IX Item "-mbig-endian"
19030 .PD
19031 On System V.4 and embedded PowerPC systems compile code for the
19032 processor in big-endian mode.  The \fB\-mbig\-endian\fR option is
19033 the same as \fB\-mbig\fR.
19034 .IP "\fB\-mdynamic\-no\-pic\fR" 4
19035 .IX Item "-mdynamic-no-pic"
19036 On Darwin and Mac \s-1OS\s0 X systems, compile code so that it is not
19037 relocatable, but that its external references are relocatable.  The
19038 resulting code is suitable for applications, but not shared
19039 libraries.
19040 .IP "\fB\-msingle\-pic\-base\fR" 4
19041 .IX Item "-msingle-pic-base"
19042 Treat the register used for \s-1PIC\s0 addressing as read-only, rather than
19043 loading it in the prologue for each function.  The runtime system is
19044 responsible for initializing this register with an appropriate value
19045 before execution begins.
19046 .IP "\fB\-mprioritize\-restricted\-insns=\fR\fIpriority\fR" 4
19047 .IX Item "-mprioritize-restricted-insns=priority"
19048 This option controls the priority that is assigned to
19049 dispatch-slot restricted instructions during the second scheduling
19050 pass.  The argument \fIpriority\fR takes the value \fB0\fR, \fB1\fR,
19051 or \fB2\fR to assign no, highest, or second-highest (respectively) 
19052 priority to dispatch-slot restricted
19053 instructions.
19054 .IP "\fB\-msched\-costly\-dep=\fR\fIdependence_type\fR" 4
19055 .IX Item "-msched-costly-dep=dependence_type"
19056 This option controls which dependences are considered costly
19057 by the target during instruction scheduling.  The argument
19058 \&\fIdependence_type\fR takes one of the following values:
19059 .RS 4
19060 .IP "\fBno\fR" 4
19061 .IX Item "no"
19062 No dependence is costly.
19063 .IP "\fBall\fR" 4
19064 .IX Item "all"
19065 All dependences are costly.
19066 .IP "\fBtrue_store_to_load\fR" 4
19067 .IX Item "true_store_to_load"
19068 A true dependence from store to load is costly.
19069 .IP "\fBstore_to_load\fR" 4
19070 .IX Item "store_to_load"
19071 Any dependence from store to load is costly.
19072 .IP "\fInumber\fR" 4
19073 .IX Item "number"
19074 Any dependence for which the latency is greater than or equal to 
19075 \&\fInumber\fR is costly.
19076 .RE
19077 .RS 4
19078 .RE
19079 .IP "\fB\-minsert\-sched\-nops=\fR\fIscheme\fR" 4
19080 .IX Item "-minsert-sched-nops=scheme"
19081 This option controls which \s-1NOP\s0 insertion scheme is used during
19082 the second scheduling pass.  The argument \fIscheme\fR takes one of the
19083 following values:
19084 .RS 4
19085 .IP "\fBno\fR" 4
19086 .IX Item "no"
19087 Don't insert NOPs.
19088 .IP "\fBpad\fR" 4
19089 .IX Item "pad"
19090 Pad with NOPs any dispatch group that has vacant issue slots,
19091 according to the scheduler's grouping.
19092 .IP "\fBregroup_exact\fR" 4
19093 .IX Item "regroup_exact"
19094 Insert NOPs to force costly dependent insns into
19095 separate groups.  Insert exactly as many NOPs as needed to force an insn
19096 to a new group, according to the estimated processor grouping.
19097 .IP "\fInumber\fR" 4
19098 .IX Item "number"
19099 Insert NOPs to force costly dependent insns into
19100 separate groups.  Insert \fInumber\fR NOPs to force an insn to a new group.
19101 .RE
19102 .RS 4
19103 .RE
19104 .IP "\fB\-mcall\-sysv\fR" 4
19105 .IX Item "-mcall-sysv"
19106 On System V.4 and embedded PowerPC systems compile code using calling
19107 conventions that adhere to the March 1995 draft of the System V
19108 Application Binary Interface, PowerPC processor supplement.  This is the
19109 default unless you configured \s-1GCC\s0 using \fBpowerpc\-*\-eabiaix\fR.
19110 .IP "\fB\-mcall\-sysv\-eabi\fR" 4
19111 .IX Item "-mcall-sysv-eabi"
19112 .PD 0
19113 .IP "\fB\-mcall\-eabi\fR" 4
19114 .IX Item "-mcall-eabi"
19115 .PD
19116 Specify both \fB\-mcall\-sysv\fR and \fB\-meabi\fR options.
19117 .IP "\fB\-mcall\-sysv\-noeabi\fR" 4
19118 .IX Item "-mcall-sysv-noeabi"
19119 Specify both \fB\-mcall\-sysv\fR and \fB\-mno\-eabi\fR options.
19120 .IP "\fB\-mcall\-aixdesc\fR" 4
19121 .IX Item "-mcall-aixdesc"
19122 On System V.4 and embedded PowerPC systems compile code for the \s-1AIX\s0
19123 operating system.
19124 .IP "\fB\-mcall\-linux\fR" 4
19125 .IX Item "-mcall-linux"
19126 On System V.4 and embedded PowerPC systems compile code for the
19127 Linux-based \s-1GNU\s0 system.
19128 .IP "\fB\-mcall\-freebsd\fR" 4
19129 .IX Item "-mcall-freebsd"
19130 On System V.4 and embedded PowerPC systems compile code for the
19131 FreeBSD operating system.
19132 .IP "\fB\-mcall\-netbsd\fR" 4
19133 .IX Item "-mcall-netbsd"
19134 On System V.4 and embedded PowerPC systems compile code for the
19135 NetBSD operating system.
19136 .IP "\fB\-mcall\-openbsd\fR" 4
19137 .IX Item "-mcall-openbsd"
19138 On System V.4 and embedded PowerPC systems compile code for the
19139 OpenBSD operating system.
19140 .IP "\fB\-maix\-struct\-return\fR" 4
19141 .IX Item "-maix-struct-return"
19142 Return all structures in memory (as specified by the \s-1AIX\s0 \s-1ABI\s0).
19143 .IP "\fB\-msvr4\-struct\-return\fR" 4
19144 .IX Item "-msvr4-struct-return"
19145 Return structures smaller than 8 bytes in registers (as specified by the
19146 \&\s-1SVR4\s0 \s-1ABI\s0).
19147 .IP "\fB\-mabi=\fR\fIabi-type\fR" 4
19148 .IX Item "-mabi=abi-type"
19149 Extend the current \s-1ABI\s0 with a particular extension, or remove such extension.
19150 Valid values are \fBaltivec\fR, \fBno-altivec\fR, \fBspe\fR,
19151 \&\fBno-spe\fR, \fBibmlongdouble\fR, \fBieeelongdouble\fR,
19152 \&\fBelfv1\fR, \fBelfv2\fR.
19153 .IP "\fB\-mabi=spe\fR" 4
19154 .IX Item "-mabi=spe"
19155 Extend the current \s-1ABI\s0 with \s-1SPE\s0 \s-1ABI\s0 extensions.  This does not change
19156 the default \s-1ABI\s0, instead it adds the \s-1SPE\s0 \s-1ABI\s0 extensions to the current
19157 \&\s-1ABI\s0.
19158 .IP "\fB\-mabi=no\-spe\fR" 4
19159 .IX Item "-mabi=no-spe"
19160 Disable Book-E \s-1SPE\s0 \s-1ABI\s0 extensions for the current \s-1ABI\s0.
19161 .IP "\fB\-mabi=ibmlongdouble\fR" 4
19162 .IX Item "-mabi=ibmlongdouble"
19163 Change the current \s-1ABI\s0 to use \s-1IBM\s0 extended-precision long double.
19164 This is a PowerPC 32\-bit \s-1SYSV\s0 \s-1ABI\s0 option.
19165 .IP "\fB\-mabi=ieeelongdouble\fR" 4
19166 .IX Item "-mabi=ieeelongdouble"
19167 Change the current \s-1ABI\s0 to use \s-1IEEE\s0 extended-precision long double.
19168 This is a PowerPC 32\-bit Linux \s-1ABI\s0 option.
19169 .IP "\fB\-mabi=elfv1\fR" 4
19170 .IX Item "-mabi=elfv1"
19171 Change the current \s-1ABI\s0 to use the ELFv1 \s-1ABI\s0.
19172 This is the default \s-1ABI\s0 for big-endian PowerPC 64\-bit Linux.
19173 Overriding the default \s-1ABI\s0 requires special system support and is
19174 likely to fail in spectacular ways.
19175 .IP "\fB\-mabi=elfv2\fR" 4
19176 .IX Item "-mabi=elfv2"
19177 Change the current \s-1ABI\s0 to use the ELFv2 \s-1ABI\s0.
19178 This is the default \s-1ABI\s0 for little-endian PowerPC 64\-bit Linux.
19179 Overriding the default \s-1ABI\s0 requires special system support and is
19180 likely to fail in spectacular ways.
19181 .IP "\fB\-mprototype\fR" 4
19182 .IX Item "-mprototype"
19183 .PD 0
19184 .IP "\fB\-mno\-prototype\fR" 4
19185 .IX Item "-mno-prototype"
19186 .PD
19187 On System V.4 and embedded PowerPC systems assume that all calls to
19188 variable argument functions are properly prototyped.  Otherwise, the
19189 compiler must insert an instruction before every non-prototyped call to
19190 set or clear bit 6 of the condition code register (\f(CW\*(C`CR\*(C'\fR) to
19191 indicate whether floating-point values are passed in the floating-point
19192 registers in case the function takes variable arguments.  With
19193 \&\fB\-mprototype\fR, only calls to prototyped variable argument functions
19194 set or clear the bit.
19195 .IP "\fB\-msim\fR" 4
19196 .IX Item "-msim"
19197 On embedded PowerPC systems, assume that the startup module is called
19198 \&\fIsim\-crt0.o\fR and that the standard C libraries are \fIlibsim.a\fR and
19199 \&\fIlibc.a\fR.  This is the default for \fBpowerpc\-*\-eabisim\fR
19200 configurations.
19201 .IP "\fB\-mmvme\fR" 4
19202 .IX Item "-mmvme"
19203 On embedded PowerPC systems, assume that the startup module is called
19204 \&\fIcrt0.o\fR and the standard C libraries are \fIlibmvme.a\fR and
19205 \&\fIlibc.a\fR.
19206 .IP "\fB\-mads\fR" 4
19207 .IX Item "-mads"
19208 On embedded PowerPC systems, assume that the startup module is called
19209 \&\fIcrt0.o\fR and the standard C libraries are \fIlibads.a\fR and
19210 \&\fIlibc.a\fR.
19211 .IP "\fB\-myellowknife\fR" 4
19212 .IX Item "-myellowknife"
19213 On embedded PowerPC systems, assume that the startup module is called
19214 \&\fIcrt0.o\fR and the standard C libraries are \fIlibyk.a\fR and
19215 \&\fIlibc.a\fR.
19216 .IP "\fB\-mvxworks\fR" 4
19217 .IX Item "-mvxworks"
19218 On System V.4 and embedded PowerPC systems, specify that you are
19219 compiling for a VxWorks system.
19220 .IP "\fB\-memb\fR" 4
19221 .IX Item "-memb"
19222 On embedded PowerPC systems, set the \f(CW\*(C`PPC_EMB\*(C'\fR bit in the \s-1ELF\s0 flags
19223 header to indicate that \fBeabi\fR extended relocations are used.
19224 .IP "\fB\-meabi\fR" 4
19225 .IX Item "-meabi"
19226 .PD 0
19227 .IP "\fB\-mno\-eabi\fR" 4
19228 .IX Item "-mno-eabi"
19229 .PD
19230 On System V.4 and embedded PowerPC systems do (do not) adhere to the
19231 Embedded Applications Binary Interface (\s-1EABI\s0), which is a set of
19232 modifications to the System V.4 specifications.  Selecting \fB\-meabi\fR
19233 means that the stack is aligned to an 8\-byte boundary, a function
19234 \&\f(CW\*(C`_\|_eabi\*(C'\fR is called from \f(CW\*(C`main\*(C'\fR to set up the \s-1EABI\s0
19235 environment, and the \fB\-msdata\fR option can use both \f(CW\*(C`r2\*(C'\fR and
19236 \&\f(CW\*(C`r13\*(C'\fR to point to two separate small data areas.  Selecting
19237 \&\fB\-mno\-eabi\fR means that the stack is aligned to a 16\-byte boundary,
19238 no \s-1EABI\s0 initialization function is called from \f(CW\*(C`main\*(C'\fR, and the
19239 \&\fB\-msdata\fR option only uses \f(CW\*(C`r13\*(C'\fR to point to a single
19240 small data area.  The \fB\-meabi\fR option is on by default if you
19241 configured \s-1GCC\s0 using one of the \fBpowerpc*\-*\-eabi*\fR options.
19242 .IP "\fB\-msdata=eabi\fR" 4
19243 .IX Item "-msdata=eabi"
19244 On System V.4 and embedded PowerPC systems, put small initialized
19245 \&\f(CW\*(C`const\*(C'\fR global and static data in the \f(CW\*(C`.sdata2\*(C'\fR section, which
19246 is pointed to by register \f(CW\*(C`r2\*(C'\fR.  Put small initialized
19247 non\-\f(CW\*(C`const\*(C'\fR global and static data in the \f(CW\*(C`.sdata\*(C'\fR section,
19248 which is pointed to by register \f(CW\*(C`r13\*(C'\fR.  Put small uninitialized
19249 global and static data in the \f(CW\*(C`.sbss\*(C'\fR section, which is adjacent to
19250 the \f(CW\*(C`.sdata\*(C'\fR section.  The \fB\-msdata=eabi\fR option is
19251 incompatible with the \fB\-mrelocatable\fR option.  The
19252 \&\fB\-msdata=eabi\fR option also sets the \fB\-memb\fR option.
19253 .IP "\fB\-msdata=sysv\fR" 4
19254 .IX Item "-msdata=sysv"
19255 On System V.4 and embedded PowerPC systems, put small global and static
19256 data in the \f(CW\*(C`.sdata\*(C'\fR section, which is pointed to by register
19257 \&\f(CW\*(C`r13\*(C'\fR.  Put small uninitialized global and static data in the
19258 \&\f(CW\*(C`.sbss\*(C'\fR section, which is adjacent to the \f(CW\*(C`.sdata\*(C'\fR section.
19259 The \fB\-msdata=sysv\fR option is incompatible with the
19260 \&\fB\-mrelocatable\fR option.
19261 .IP "\fB\-msdata=default\fR" 4
19262 .IX Item "-msdata=default"
19263 .PD 0
19264 .IP "\fB\-msdata\fR" 4
19265 .IX Item "-msdata"
19266 .PD
19267 On System V.4 and embedded PowerPC systems, if \fB\-meabi\fR is used,
19268 compile code the same as \fB\-msdata=eabi\fR, otherwise compile code the
19269 same as \fB\-msdata=sysv\fR.
19270 .IP "\fB\-msdata=data\fR" 4
19271 .IX Item "-msdata=data"
19272 On System V.4 and embedded PowerPC systems, put small global
19273 data in the \f(CW\*(C`.sdata\*(C'\fR section.  Put small uninitialized global
19274 data in the \f(CW\*(C`.sbss\*(C'\fR section.  Do not use register \f(CW\*(C`r13\*(C'\fR
19275 to address small data however.  This is the default behavior unless
19276 other \fB\-msdata\fR options are used.
19277 .IP "\fB\-msdata=none\fR" 4
19278 .IX Item "-msdata=none"
19279 .PD 0
19280 .IP "\fB\-mno\-sdata\fR" 4
19281 .IX Item "-mno-sdata"
19282 .PD
19283 On embedded PowerPC systems, put all initialized global and static data
19284 in the \f(CW\*(C`.data\*(C'\fR section, and all uninitialized data in the
19285 \&\f(CW\*(C`.bss\*(C'\fR section.
19286 .IP "\fB\-mblock\-move\-inline\-limit=\fR\fInum\fR" 4
19287 .IX Item "-mblock-move-inline-limit=num"
19288 Inline all block moves (such as calls to \f(CW\*(C`memcpy\*(C'\fR or structure
19289 copies) less than or equal to \fInum\fR bytes.  The minimum value for
19290 \&\fInum\fR is 32 bytes on 32\-bit targets and 64 bytes on 64\-bit
19291 targets.  The default value is target-specific.
19292 .IP "\fB\-G\fR \fInum\fR" 4
19293 .IX Item "-G num"
19294 On embedded PowerPC systems, put global and static items less than or
19295 equal to \fInum\fR bytes into the small data or \s-1BSS\s0 sections instead of
19296 the normal data or \s-1BSS\s0 section.  By default, \fInum\fR is 8.  The
19297 \&\fB\-G\fR \fInum\fR switch is also passed to the linker.
19298 All modules should be compiled with the same \fB\-G\fR \fInum\fR value.
19299 .IP "\fB\-mregnames\fR" 4
19300 .IX Item "-mregnames"
19301 .PD 0
19302 .IP "\fB\-mno\-regnames\fR" 4
19303 .IX Item "-mno-regnames"
19304 .PD
19305 On System V.4 and embedded PowerPC systems do (do not) emit register
19306 names in the assembly language output using symbolic forms.
19307 .IP "\fB\-mlongcall\fR" 4
19308 .IX Item "-mlongcall"
19309 .PD 0
19310 .IP "\fB\-mno\-longcall\fR" 4
19311 .IX Item "-mno-longcall"
19312 .PD
19313 By default assume that all calls are far away so that a longer and more
19314 expensive calling sequence is required.  This is required for calls
19315 farther than 32 megabytes (33,554,432 bytes) from the current location.
19316 A short call is generated if the compiler knows
19317 the call cannot be that far away.  This setting can be overridden by
19318 the \f(CW\*(C`shortcall\*(C'\fR function attribute, or by \f(CW\*(C`#pragma
19319 longcall(0)\*(C'\fR.
19320 .Sp
19321 Some linkers are capable of detecting out-of-range calls and generating
19322 glue code on the fly.  On these systems, long calls are unnecessary and
19323 generate slower code.  As of this writing, the \s-1AIX\s0 linker can do this,
19324 as can the \s-1GNU\s0 linker for PowerPC/64.  It is planned to add this feature
19325 to the \s-1GNU\s0 linker for 32\-bit PowerPC systems as well.
19326 .Sp
19327 On Darwin/PPC systems, \f(CW\*(C`#pragma longcall\*(C'\fR generates \f(CW\*(C`jbsr
19328 callee, L42\*(C'\fR, plus a \fIbranch island\fR (glue code).  The two target
19329 addresses represent the callee and the branch island.  The
19330 Darwin/PPC linker prefers the first address and generates a \f(CW\*(C`bl
19331 callee\*(C'\fR if the \s-1PPC\s0 \f(CW\*(C`bl\*(C'\fR instruction reaches the callee directly;
19332 otherwise, the linker generates \f(CW\*(C`bl L42\*(C'\fR to call the branch
19333 island.  The branch island is appended to the body of the
19334 calling function; it computes the full 32\-bit address of the callee
19335 and jumps to it.
19336 .Sp
19337 On Mach-O (Darwin) systems, this option directs the compiler emit to
19338 the glue for every direct call, and the Darwin linker decides whether
19339 to use or discard it.
19340 .Sp
19341 In the future, \s-1GCC\s0 may ignore all longcall specifications
19342 when the linker is known to generate glue.
19343 .IP "\fB\-mtls\-markers\fR" 4
19344 .IX Item "-mtls-markers"
19345 .PD 0
19346 .IP "\fB\-mno\-tls\-markers\fR" 4
19347 .IX Item "-mno-tls-markers"
19348 .PD
19349 Mark (do not mark) calls to \f(CW\*(C`_\|_tls_get_addr\*(C'\fR with a relocation
19350 specifying the function argument.  The relocation allows the linker to
19351 reliably associate function call with argument setup instructions for
19352 \&\s-1TLS\s0 optimization, which in turn allows \s-1GCC\s0 to better schedule the
19353 sequence.
19354 .IP "\fB\-pthread\fR" 4
19355 .IX Item "-pthread"
19356 Adds support for multithreading with the \fIpthreads\fR library.
19357 This option sets flags for both the preprocessor and linker.
19358 .IP "\fB\-mrecip\fR" 4
19359 .IX Item "-mrecip"
19360 .PD 0
19361 .IP "\fB\-mno\-recip\fR" 4
19362 .IX Item "-mno-recip"
19363 .PD
19364 This option enables use of the reciprocal estimate and
19365 reciprocal square root estimate instructions with additional
19366 Newton-Raphson steps to increase precision instead of doing a divide or
19367 square root and divide for floating-point arguments.  You should use
19368 the \fB\-ffast\-math\fR option when using \fB\-mrecip\fR (or at
19369 least \fB\-funsafe\-math\-optimizations\fR,
19370 \&\fB\-finite\-math\-only\fR, \fB\-freciprocal\-math\fR and
19371 \&\fB\-fno\-trapping\-math\fR).  Note that while the throughput of the
19372 sequence is generally higher than the throughput of the non-reciprocal
19373 instruction, the precision of the sequence can be decreased by up to 2
19374 ulp (i.e. the inverse of 1.0 equals 0.99999994) for reciprocal square
19375 roots.
19376 .IP "\fB\-mrecip=\fR\fIopt\fR" 4
19377 .IX Item "-mrecip=opt"
19378 This option controls which reciprocal estimate instructions
19379 may be used.  \fIopt\fR is a comma-separated list of options, which may
19380 be preceded by a \f(CW\*(C`!\*(C'\fR to invert the option:
19381 .RS 4
19382 .IP "\fBall\fR" 4
19383 .IX Item "all"
19384 Enable all estimate instructions.
19385 .IP "\fBdefault\fR" 4
19386 .IX Item "default"
19387 Enable the default instructions, equivalent to \fB\-mrecip\fR.
19388 .IP "\fBnone\fR" 4
19389 .IX Item "none"
19390 Disable all estimate instructions, equivalent to \fB\-mno\-recip\fR.
19391 .IP "\fBdiv\fR" 4
19392 .IX Item "div"
19393 Enable the reciprocal approximation instructions for both 
19394 single and double precision.
19395 .IP "\fBdivf\fR" 4
19396 .IX Item "divf"
19397 Enable the single-precision reciprocal approximation instructions.
19398 .IP "\fBdivd\fR" 4
19399 .IX Item "divd"
19400 Enable the double-precision reciprocal approximation instructions.
19401 .IP "\fBrsqrt\fR" 4
19402 .IX Item "rsqrt"
19403 Enable the reciprocal square root approximation instructions for both
19404 single and double precision.
19405 .IP "\fBrsqrtf\fR" 4
19406 .IX Item "rsqrtf"
19407 Enable the single-precision reciprocal square root approximation instructions.
19408 .IP "\fBrsqrtd\fR" 4
19409 .IX Item "rsqrtd"
19410 Enable the double-precision reciprocal square root approximation instructions.
19411 .RE
19412 .RS 4
19413 .Sp
19414 So, for example, \fB\-mrecip=all,!rsqrtd\fR enables
19415 all of the reciprocal estimate instructions, except for the
19416 \&\f(CW\*(C`FRSQRTE\*(C'\fR, \f(CW\*(C`XSRSQRTEDP\*(C'\fR, and \f(CW\*(C`XVRSQRTEDP\*(C'\fR instructions
19417 which handle the double-precision reciprocal square root calculations.
19418 .RE
19419 .IP "\fB\-mrecip\-precision\fR" 4
19420 .IX Item "-mrecip-precision"
19421 .PD 0
19422 .IP "\fB\-mno\-recip\-precision\fR" 4
19423 .IX Item "-mno-recip-precision"
19424 .PD
19425 Assume (do not assume) that the reciprocal estimate instructions
19426 provide higher-precision estimates than is mandated by the PowerPC
19427 \&\s-1ABI\s0.  Selecting \fB\-mcpu=power6\fR, \fB\-mcpu=power7\fR or
19428 \&\fB\-mcpu=power8\fR automatically selects \fB\-mrecip\-precision\fR.
19429 The double-precision square root estimate instructions are not generated by
19430 default on low-precision machines, since they do not provide an
19431 estimate that converges after three steps.
19432 .IP "\fB\-mveclibabi=\fR\fItype\fR" 4
19433 .IX Item "-mveclibabi=type"
19434 Specifies the \s-1ABI\s0 type to use for vectorizing intrinsics using an
19435 external library.  The only type supported at present is \fBmass\fR,
19436 which specifies to use \s-1IBM\s0's Mathematical Acceleration Subsystem
19437 (\s-1MASS\s0) libraries for vectorizing intrinsics using external libraries.
19438 \&\s-1GCC\s0 currently emits calls to \f(CW\*(C`acosd2\*(C'\fR, \f(CW\*(C`acosf4\*(C'\fR,
19439 \&\f(CW\*(C`acoshd2\*(C'\fR, \f(CW\*(C`acoshf4\*(C'\fR, \f(CW\*(C`asind2\*(C'\fR, \f(CW\*(C`asinf4\*(C'\fR,
19440 \&\f(CW\*(C`asinhd2\*(C'\fR, \f(CW\*(C`asinhf4\*(C'\fR, \f(CW\*(C`atan2d2\*(C'\fR, \f(CW\*(C`atan2f4\*(C'\fR,
19441 \&\f(CW\*(C`atand2\*(C'\fR, \f(CW\*(C`atanf4\*(C'\fR, \f(CW\*(C`atanhd2\*(C'\fR, \f(CW\*(C`atanhf4\*(C'\fR,
19442 \&\f(CW\*(C`cbrtd2\*(C'\fR, \f(CW\*(C`cbrtf4\*(C'\fR, \f(CW\*(C`cosd2\*(C'\fR, \f(CW\*(C`cosf4\*(C'\fR,
19443 \&\f(CW\*(C`coshd2\*(C'\fR, \f(CW\*(C`coshf4\*(C'\fR, \f(CW\*(C`erfcd2\*(C'\fR, \f(CW\*(C`erfcf4\*(C'\fR,
19444 \&\f(CW\*(C`erfd2\*(C'\fR, \f(CW\*(C`erff4\*(C'\fR, \f(CW\*(C`exp2d2\*(C'\fR, \f(CW\*(C`exp2f4\*(C'\fR,
19445 \&\f(CW\*(C`expd2\*(C'\fR, \f(CW\*(C`expf4\*(C'\fR, \f(CW\*(C`expm1d2\*(C'\fR, \f(CW\*(C`expm1f4\*(C'\fR,
19446 \&\f(CW\*(C`hypotd2\*(C'\fR, \f(CW\*(C`hypotf4\*(C'\fR, \f(CW\*(C`lgammad2\*(C'\fR, \f(CW\*(C`lgammaf4\*(C'\fR,
19447 \&\f(CW\*(C`log10d2\*(C'\fR, \f(CW\*(C`log10f4\*(C'\fR, \f(CW\*(C`log1pd2\*(C'\fR, \f(CW\*(C`log1pf4\*(C'\fR,
19448 \&\f(CW\*(C`log2d2\*(C'\fR, \f(CW\*(C`log2f4\*(C'\fR, \f(CW\*(C`logd2\*(C'\fR, \f(CW\*(C`logf4\*(C'\fR,
19449 \&\f(CW\*(C`powd2\*(C'\fR, \f(CW\*(C`powf4\*(C'\fR, \f(CW\*(C`sind2\*(C'\fR, \f(CW\*(C`sinf4\*(C'\fR, \f(CW\*(C`sinhd2\*(C'\fR,
19450 \&\f(CW\*(C`sinhf4\*(C'\fR, \f(CW\*(C`sqrtd2\*(C'\fR, \f(CW\*(C`sqrtf4\*(C'\fR, \f(CW\*(C`tand2\*(C'\fR,
19451 \&\f(CW\*(C`tanf4\*(C'\fR, \f(CW\*(C`tanhd2\*(C'\fR, and \f(CW\*(C`tanhf4\*(C'\fR when generating code
19452 for power7.  Both \fB\-ftree\-vectorize\fR and
19453 \&\fB\-funsafe\-math\-optimizations\fR must also be enabled.  The \s-1MASS\s0
19454 libraries must be specified at link time.
19455 .IP "\fB\-mfriz\fR" 4
19456 .IX Item "-mfriz"
19457 .PD 0
19458 .IP "\fB\-mno\-friz\fR" 4
19459 .IX Item "-mno-friz"
19460 .PD
19461 Generate (do not generate) the \f(CW\*(C`friz\*(C'\fR instruction when the
19462 \&\fB\-funsafe\-math\-optimizations\fR option is used to optimize
19463 rounding of floating-point values to 64\-bit integer and back to floating
19464 point.  The \f(CW\*(C`friz\*(C'\fR instruction does not return the same value if
19465 the floating-point number is too large to fit in an integer.
19466 .IP "\fB\-mpointers\-to\-nested\-functions\fR" 4
19467 .IX Item "-mpointers-to-nested-functions"
19468 .PD 0
19469 .IP "\fB\-mno\-pointers\-to\-nested\-functions\fR" 4
19470 .IX Item "-mno-pointers-to-nested-functions"
19471 .PD
19472 Generate (do not generate) code to load up the static chain register
19473 (\f(CW\*(C`r11\*(C'\fR) when calling through a pointer on \s-1AIX\s0 and 64\-bit Linux
19474 systems where a function pointer points to a 3\-word descriptor giving
19475 the function address, \s-1TOC\s0 value to be loaded in register \f(CW\*(C`r2\*(C'\fR, and
19476 static chain value to be loaded in register \f(CW\*(C`r11\*(C'\fR.  The
19477 \&\fB\-mpointers\-to\-nested\-functions\fR is on by default.  You cannot
19478 call through pointers to nested functions or pointers
19479 to functions compiled in other languages that use the static chain if
19480 you use the \fB\-mno\-pointers\-to\-nested\-functions\fR.
19481 .IP "\fB\-msave\-toc\-indirect\fR" 4
19482 .IX Item "-msave-toc-indirect"
19483 .PD 0
19484 .IP "\fB\-mno\-save\-toc\-indirect\fR" 4
19485 .IX Item "-mno-save-toc-indirect"
19486 .PD
19487 Generate (do not generate) code to save the \s-1TOC\s0 value in the reserved
19488 stack location in the function prologue if the function calls through
19489 a pointer on \s-1AIX\s0 and 64\-bit Linux systems.  If the \s-1TOC\s0 value is not
19490 saved in the prologue, it is saved just before the call through the
19491 pointer.  The \fB\-mno\-save\-toc\-indirect\fR option is the default.
19492 .IP "\fB\-mcompat\-align\-parm\fR" 4
19493 .IX Item "-mcompat-align-parm"
19494 .PD 0
19495 .IP "\fB\-mno\-compat\-align\-parm\fR" 4
19496 .IX Item "-mno-compat-align-parm"
19497 .PD
19498 Generate (do not generate) code to pass structure parameters with a
19499 maximum alignment of 64 bits, for compatibility with older versions
19500 of \s-1GCC\s0.
19501 .Sp
19502 Older versions of \s-1GCC\s0 (prior to 4.9.0) incorrectly did not align a
19503 structure parameter on a 128\-bit boundary when that structure contained
19504 a member requiring 128\-bit alignment.  This is corrected in more
19505 recent versions of \s-1GCC\s0.  This option may be used to generate code
19506 that is compatible with functions compiled with older versions of
19507 \&\s-1GCC\s0.
19508 .Sp
19509 The \fB\-mno\-compat\-align\-parm\fR option is the default.
19510 .PP
19511 \fI\s-1RX\s0 Options\fR
19512 .IX Subsection "RX Options"
19513 .PP
19514 These command-line options are defined for \s-1RX\s0 targets:
19515 .IP "\fB\-m64bit\-doubles\fR" 4
19516 .IX Item "-m64bit-doubles"
19517 .PD 0
19518 .IP "\fB\-m32bit\-doubles\fR" 4
19519 .IX Item "-m32bit-doubles"
19520 .PD
19521 Make the \f(CW\*(C`double\*(C'\fR data type be 64 bits (\fB\-m64bit\-doubles\fR)
19522 or 32 bits (\fB\-m32bit\-doubles\fR) in size.  The default is
19523 \&\fB\-m32bit\-doubles\fR.  \fINote\fR \s-1RX\s0 floating-point hardware only
19524 works on 32\-bit values, which is why the default is
19525 \&\fB\-m32bit\-doubles\fR.
19526 .IP "\fB\-fpu\fR" 4
19527 .IX Item "-fpu"
19528 .PD 0
19529 .IP "\fB\-nofpu\fR" 4
19530 .IX Item "-nofpu"
19531 .PD
19532 Enables (\fB\-fpu\fR) or disables (\fB\-nofpu\fR) the use of \s-1RX\s0
19533 floating-point hardware.  The default is enabled for the \s-1RX600\s0
19534 series and disabled for the \s-1RX200\s0 series.
19535 .Sp
19536 Floating-point instructions are only generated for 32\-bit floating-point 
19537 values, however, so the \s-1FPU\s0 hardware is not used for doubles if the
19538 \&\fB\-m64bit\-doubles\fR option is used.
19539 .Sp
19540 \&\fINote\fR If the \fB\-fpu\fR option is enabled then
19541 \&\fB\-funsafe\-math\-optimizations\fR is also enabled automatically.
19542 This is because the \s-1RX\s0 \s-1FPU\s0 instructions are themselves unsafe.
19543 .IP "\fB\-mcpu=\fR\fIname\fR" 4
19544 .IX Item "-mcpu=name"
19545 Selects the type of \s-1RX\s0 \s-1CPU\s0 to be targeted.  Currently three types are
19546 supported, the generic \fB\s-1RX600\s0\fR and \fB\s-1RX200\s0\fR series hardware and
19547 the specific \fB\s-1RX610\s0\fR \s-1CPU\s0.  The default is \fB\s-1RX600\s0\fR.
19548 .Sp
19549 The only difference between \fB\s-1RX600\s0\fR and \fB\s-1RX610\s0\fR is that the
19550 \&\fB\s-1RX610\s0\fR does not support the \f(CW\*(C`MVTIPL\*(C'\fR instruction.
19551 .Sp
19552 The \fB\s-1RX200\s0\fR series does not have a hardware floating-point unit
19553 and so \fB\-nofpu\fR is enabled by default when this type is
19554 selected.
19555 .IP "\fB\-mbig\-endian\-data\fR" 4
19556 .IX Item "-mbig-endian-data"
19557 .PD 0
19558 .IP "\fB\-mlittle\-endian\-data\fR" 4
19559 .IX Item "-mlittle-endian-data"
19560 .PD
19561 Store data (but not code) in the big-endian format.  The default is
19562 \&\fB\-mlittle\-endian\-data\fR, i.e. to store data in the little-endian
19563 format.
19564 .IP "\fB\-msmall\-data\-limit=\fR\fIN\fR" 4
19565 .IX Item "-msmall-data-limit=N"
19566 Specifies the maximum size in bytes of global and static variables
19567 which can be placed into the small data area.  Using the small data
19568 area can lead to smaller and faster code, but the size of area is
19569 limited and it is up to the programmer to ensure that the area does
19570 not overflow.  Also when the small data area is used one of the \s-1RX\s0's
19571 registers (usually \f(CW\*(C`r13\*(C'\fR) is reserved for use pointing to this
19572 area, so it is no longer available for use by the compiler.  This
19573 could result in slower and/or larger code if variables are pushed onto
19574 the stack instead of being held in this register.
19575 .Sp
19576 Note, common variables (variables that have not been initialized) and
19577 constants are not placed into the small data area as they are assigned
19578 to other sections in the output executable.
19579 .Sp
19580 The default value is zero, which disables this feature.  Note, this
19581 feature is not enabled by default with higher optimization levels
19582 (\fB\-O2\fR etc) because of the potentially detrimental effects of
19583 reserving a register.  It is up to the programmer to experiment and
19584 discover whether this feature is of benefit to their program.  See the
19585 description of the \fB\-mpid\fR option for a description of how the
19586 actual register to hold the small data area pointer is chosen.
19587 .IP "\fB\-msim\fR" 4
19588 .IX Item "-msim"
19589 .PD 0
19590 .IP "\fB\-mno\-sim\fR" 4
19591 .IX Item "-mno-sim"
19592 .PD
19593 Use the simulator runtime.  The default is to use the libgloss
19594 board-specific runtime.
19595 .IP "\fB\-mas100\-syntax\fR" 4
19596 .IX Item "-mas100-syntax"
19597 .PD 0
19598 .IP "\fB\-mno\-as100\-syntax\fR" 4
19599 .IX Item "-mno-as100-syntax"
19600 .PD
19601 When generating assembler output use a syntax that is compatible with
19602 Renesas's \s-1AS100\s0 assembler.  This syntax can also be handled by the \s-1GAS\s0
19603 assembler, but it has some restrictions so it is not generated by default.
19604 .IP "\fB\-mmax\-constant\-size=\fR\fIN\fR" 4
19605 .IX Item "-mmax-constant-size=N"
19606 Specifies the maximum size, in bytes, of a constant that can be used as
19607 an operand in a \s-1RX\s0 instruction.  Although the \s-1RX\s0 instruction set does
19608 allow constants of up to 4 bytes in length to be used in instructions,
19609 a longer value equates to a longer instruction.  Thus in some
19610 circumstances it can be beneficial to restrict the size of constants
19611 that are used in instructions.  Constants that are too big are instead
19612 placed into a constant pool and referenced via register indirection.
19613 .Sp
19614 The value \fIN\fR can be between 0 and 4.  A value of 0 (the default)
19615 or 4 means that constants of any size are allowed.
19616 .IP "\fB\-mrelax\fR" 4
19617 .IX Item "-mrelax"
19618 Enable linker relaxation.  Linker relaxation is a process whereby the
19619 linker attempts to reduce the size of a program by finding shorter
19620 versions of various instructions.  Disabled by default.
19621 .IP "\fB\-mint\-register=\fR\fIN\fR" 4
19622 .IX Item "-mint-register=N"
19623 Specify the number of registers to reserve for fast interrupt handler
19624 functions.  The value \fIN\fR can be between 0 and 4.  A value of 1
19625 means that register \f(CW\*(C`r13\*(C'\fR is reserved for the exclusive use
19626 of fast interrupt handlers.  A value of 2 reserves \f(CW\*(C`r13\*(C'\fR and
19627 \&\f(CW\*(C`r12\*(C'\fR.  A value of 3 reserves \f(CW\*(C`r13\*(C'\fR, \f(CW\*(C`r12\*(C'\fR and
19628 \&\f(CW\*(C`r11\*(C'\fR, and a value of 4 reserves \f(CW\*(C`r13\*(C'\fR through \f(CW\*(C`r10\*(C'\fR.
19629 A value of 0, the default, does not reserve any registers.
19630 .IP "\fB\-msave\-acc\-in\-interrupts\fR" 4
19631 .IX Item "-msave-acc-in-interrupts"
19632 Specifies that interrupt handler functions should preserve the
19633 accumulator register.  This is only necessary if normal code might use
19634 the accumulator register, for example because it performs 64\-bit
19635 multiplications.  The default is to ignore the accumulator as this
19636 makes the interrupt handlers faster.
19637 .IP "\fB\-mpid\fR" 4
19638 .IX Item "-mpid"
19639 .PD 0
19640 .IP "\fB\-mno\-pid\fR" 4
19641 .IX Item "-mno-pid"
19642 .PD
19643 Enables the generation of position independent data.  When enabled any
19644 access to constant data is done via an offset from a base address
19645 held in a register.  This allows the location of constant data to be
19646 determined at run time without requiring the executable to be
19647 relocated, which is a benefit to embedded applications with tight
19648 memory constraints.  Data that can be modified is not affected by this
19649 option.
19650 .Sp
19651 Note, using this feature reserves a register, usually \f(CW\*(C`r13\*(C'\fR, for
19652 the constant data base address.  This can result in slower and/or
19653 larger code, especially in complicated functions.
19654 .Sp
19655 The actual register chosen to hold the constant data base address
19656 depends upon whether the \fB\-msmall\-data\-limit\fR and/or the
19657 \&\fB\-mint\-register\fR command-line options are enabled.  Starting
19658 with register \f(CW\*(C`r13\*(C'\fR and proceeding downwards, registers are
19659 allocated first to satisfy the requirements of \fB\-mint\-register\fR,
19660 then \fB\-mpid\fR and finally \fB\-msmall\-data\-limit\fR.  Thus it
19661 is possible for the small data area register to be \f(CW\*(C`r8\*(C'\fR if both
19662 \&\fB\-mint\-register=4\fR and \fB\-mpid\fR are specified on the
19663 command line.
19664 .Sp
19665 By default this feature is not enabled.  The default can be restored
19666 via the \fB\-mno\-pid\fR command-line option.
19667 .IP "\fB\-mno\-warn\-multiple\-fast\-interrupts\fR" 4
19668 .IX Item "-mno-warn-multiple-fast-interrupts"
19669 .PD 0
19670 .IP "\fB\-mwarn\-multiple\-fast\-interrupts\fR" 4
19671 .IX Item "-mwarn-multiple-fast-interrupts"
19672 .PD
19673 Prevents \s-1GCC\s0 from issuing a warning message if it finds more than one
19674 fast interrupt handler when it is compiling a file.  The default is to
19675 issue a warning for each extra fast interrupt handler found, as the \s-1RX\s0
19676 only supports one such interrupt.
19677 .PP
19678 \&\fINote:\fR The generic \s-1GCC\s0 command-line option \fB\-ffixed\-\fR\fIreg\fR
19679 has special significance to the \s-1RX\s0 port when used with the
19680 \&\f(CW\*(C`interrupt\*(C'\fR function attribute.  This attribute indicates a
19681 function intended to process fast interrupts.  \s-1GCC\s0 ensures
19682 that it only uses the registers \f(CW\*(C`r10\*(C'\fR, \f(CW\*(C`r11\*(C'\fR, \f(CW\*(C`r12\*(C'\fR
19683 and/or \f(CW\*(C`r13\*(C'\fR and only provided that the normal use of the
19684 corresponding registers have been restricted via the
19685 \&\fB\-ffixed\-\fR\fIreg\fR or \fB\-mint\-register\fR command-line
19686 options.
19687 .PP
19688 \fIS/390 and zSeries Options\fR
19689 .IX Subsection "S/390 and zSeries Options"
19690 .PP
19691 These are the \fB\-m\fR options defined for the S/390 and zSeries architecture.
19692 .IP "\fB\-mhard\-float\fR" 4
19693 .IX Item "-mhard-float"
19694 .PD 0
19695 .IP "\fB\-msoft\-float\fR" 4
19696 .IX Item "-msoft-float"
19697 .PD
19698 Use (do not use) the hardware floating-point instructions and registers
19699 for floating-point operations.  When \fB\-msoft\-float\fR is specified,
19700 functions in \fIlibgcc.a\fR are used to perform floating-point
19701 operations.  When \fB\-mhard\-float\fR is specified, the compiler
19702 generates \s-1IEEE\s0 floating-point instructions.  This is the default.
19703 .IP "\fB\-mhard\-dfp\fR" 4
19704 .IX Item "-mhard-dfp"
19705 .PD 0
19706 .IP "\fB\-mno\-hard\-dfp\fR" 4
19707 .IX Item "-mno-hard-dfp"
19708 .PD
19709 Use (do not use) the hardware decimal-floating-point instructions for
19710 decimal-floating-point operations.  When \fB\-mno\-hard\-dfp\fR is
19711 specified, functions in \fIlibgcc.a\fR are used to perform
19712 decimal-floating-point operations.  When \fB\-mhard\-dfp\fR is
19713 specified, the compiler generates decimal-floating-point hardware
19714 instructions.  This is the default for \fB\-march=z9\-ec\fR or higher.
19715 .IP "\fB\-mlong\-double\-64\fR" 4
19716 .IX Item "-mlong-double-64"
19717 .PD 0
19718 .IP "\fB\-mlong\-double\-128\fR" 4
19719 .IX Item "-mlong-double-128"
19720 .PD
19721 These switches control the size of \f(CW\*(C`long double\*(C'\fR type. A size
19722 of 64 bits makes the \f(CW\*(C`long double\*(C'\fR type equivalent to the \f(CW\*(C`double\*(C'\fR
19723 type. This is the default.
19724 .IP "\fB\-mbackchain\fR" 4
19725 .IX Item "-mbackchain"
19726 .PD 0
19727 .IP "\fB\-mno\-backchain\fR" 4
19728 .IX Item "-mno-backchain"
19729 .PD
19730 Store (do not store) the address of the caller's frame as backchain pointer
19731 into the callee's stack frame.
19732 A backchain may be needed to allow debugging using tools that do not understand
19733 \&\s-1DWARF\s0 2 call frame information.
19734 When \fB\-mno\-packed\-stack\fR is in effect, the backchain pointer is stored
19735 at the bottom of the stack frame; when \fB\-mpacked\-stack\fR is in effect,
19736 the backchain is placed into the topmost word of the 96/160 byte register
19737 save area.
19738 .Sp
19739 In general, code compiled with \fB\-mbackchain\fR is call-compatible with
19740 code compiled with \fB\-mmo\-backchain\fR; however, use of the backchain
19741 for debugging purposes usually requires that the whole binary is built with
19742 \&\fB\-mbackchain\fR.  Note that the combination of \fB\-mbackchain\fR,
19743 \&\fB\-mpacked\-stack\fR and \fB\-mhard\-float\fR is not supported.  In order
19744 to build a linux kernel use \fB\-msoft\-float\fR.
19745 .Sp
19746 The default is to not maintain the backchain.
19747 .IP "\fB\-mpacked\-stack\fR" 4
19748 .IX Item "-mpacked-stack"
19749 .PD 0
19750 .IP "\fB\-mno\-packed\-stack\fR" 4
19751 .IX Item "-mno-packed-stack"
19752 .PD
19753 Use (do not use) the packed stack layout.  When \fB\-mno\-packed\-stack\fR is
19754 specified, the compiler uses the all fields of the 96/160 byte register save
19755 area only for their default purpose; unused fields still take up stack space.
19756 When \fB\-mpacked\-stack\fR is specified, register save slots are densely
19757 packed at the top of the register save area; unused space is reused for other
19758 purposes, allowing for more efficient use of the available stack space.
19759 However, when \fB\-mbackchain\fR is also in effect, the topmost word of
19760 the save area is always used to store the backchain, and the return address
19761 register is always saved two words below the backchain.
19762 .Sp
19763 As long as the stack frame backchain is not used, code generated with
19764 \&\fB\-mpacked\-stack\fR is call-compatible with code generated with
19765 \&\fB\-mno\-packed\-stack\fR.  Note that some non-FSF releases of \s-1GCC\s0 2.95 for
19766 S/390 or zSeries generated code that uses the stack frame backchain at run
19767 time, not just for debugging purposes.  Such code is not call-compatible
19768 with code compiled with \fB\-mpacked\-stack\fR.  Also, note that the
19769 combination of \fB\-mbackchain\fR,
19770 \&\fB\-mpacked\-stack\fR and \fB\-mhard\-float\fR is not supported.  In order
19771 to build a linux kernel use \fB\-msoft\-float\fR.
19772 .Sp
19773 The default is to not use the packed stack layout.
19774 .IP "\fB\-msmall\-exec\fR" 4
19775 .IX Item "-msmall-exec"
19776 .PD 0
19777 .IP "\fB\-mno\-small\-exec\fR" 4
19778 .IX Item "-mno-small-exec"
19779 .PD
19780 Generate (or do not generate) code using the \f(CW\*(C`bras\*(C'\fR instruction
19781 to do subroutine calls.
19782 This only works reliably if the total executable size does not
19783 exceed 64k.  The default is to use the \f(CW\*(C`basr\*(C'\fR instruction instead,
19784 which does not have this limitation.
19785 .IP "\fB\-m64\fR" 4
19786 .IX Item "-m64"
19787 .PD 0
19788 .IP "\fB\-m31\fR" 4
19789 .IX Item "-m31"
19790 .PD
19791 When \fB\-m31\fR is specified, generate code compliant to the
19792 GNU/Linux for S/390 \s-1ABI\s0.  When \fB\-m64\fR is specified, generate
19793 code compliant to the GNU/Linux for zSeries \s-1ABI\s0.  This allows \s-1GCC\s0 in
19794 particular to generate 64\-bit instructions.  For the \fBs390\fR
19795 targets, the default is \fB\-m31\fR, while the \fBs390x\fR
19796 targets default to \fB\-m64\fR.
19797 .IP "\fB\-mzarch\fR" 4
19798 .IX Item "-mzarch"
19799 .PD 0
19800 .IP "\fB\-mesa\fR" 4
19801 .IX Item "-mesa"
19802 .PD
19803 When \fB\-mzarch\fR is specified, generate code using the
19804 instructions available on z/Architecture.
19805 When \fB\-mesa\fR is specified, generate code using the
19806 instructions available on \s-1ESA/390\s0.  Note that \fB\-mesa\fR is
19807 not possible with \fB\-m64\fR.
19808 When generating code compliant to the GNU/Linux for S/390 \s-1ABI\s0,
19809 the default is \fB\-mesa\fR.  When generating code compliant
19810 to the GNU/Linux for zSeries \s-1ABI\s0, the default is \fB\-mzarch\fR.
19811 .IP "\fB\-mmvcle\fR" 4
19812 .IX Item "-mmvcle"
19813 .PD 0
19814 .IP "\fB\-mno\-mvcle\fR" 4
19815 .IX Item "-mno-mvcle"
19816 .PD
19817 Generate (or do not generate) code using the \f(CW\*(C`mvcle\*(C'\fR instruction
19818 to perform block moves.  When \fB\-mno\-mvcle\fR is specified,
19819 use a \f(CW\*(C`mvc\*(C'\fR loop instead.  This is the default unless optimizing for
19820 size.
19821 .IP "\fB\-mdebug\fR" 4
19822 .IX Item "-mdebug"
19823 .PD 0
19824 .IP "\fB\-mno\-debug\fR" 4
19825 .IX Item "-mno-debug"
19826 .PD
19827 Print (or do not print) additional debug information when compiling.
19828 The default is to not print debug information.
19829 .IP "\fB\-march=\fR\fIcpu-type\fR" 4
19830 .IX Item "-march=cpu-type"
19831 Generate code that runs on \fIcpu-type\fR, which is the name of a system
19832 representing a certain processor type.  Possible values for
19833 \&\fIcpu-type\fR are \fBg5\fR, \fBg6\fR, \fBz900\fR, \fBz990\fR,
19834 \&\fBz9\-109\fR, \fBz9\-ec\fR and \fBz10\fR.
19835 When generating code using the instructions available on z/Architecture,
19836 the default is \fB\-march=z900\fR.  Otherwise, the default is
19837 \&\fB\-march=g5\fR.
19838 .IP "\fB\-mtune=\fR\fIcpu-type\fR" 4
19839 .IX Item "-mtune=cpu-type"
19840 Tune to \fIcpu-type\fR everything applicable about the generated code,
19841 except for the \s-1ABI\s0 and the set of available instructions.
19842 The list of \fIcpu-type\fR values is the same as for \fB\-march\fR.
19843 The default is the value used for \fB\-march\fR.
19844 .IP "\fB\-mtpf\-trace\fR" 4
19845 .IX Item "-mtpf-trace"
19846 .PD 0
19847 .IP "\fB\-mno\-tpf\-trace\fR" 4
19848 .IX Item "-mno-tpf-trace"
19849 .PD
19850 Generate code that adds (does not add) in \s-1TPF\s0 \s-1OS\s0 specific branches to trace
19851 routines in the operating system.  This option is off by default, even
19852 when compiling for the \s-1TPF\s0 \s-1OS\s0.
19853 .IP "\fB\-mfused\-madd\fR" 4
19854 .IX Item "-mfused-madd"
19855 .PD 0
19856 .IP "\fB\-mno\-fused\-madd\fR" 4
19857 .IX Item "-mno-fused-madd"
19858 .PD
19859 Generate code that uses (does not use) the floating-point multiply and
19860 accumulate instructions.  These instructions are generated by default if
19861 hardware floating point is used.
19862 .IP "\fB\-mwarn\-framesize=\fR\fIframesize\fR" 4
19863 .IX Item "-mwarn-framesize=framesize"
19864 Emit a warning if the current function exceeds the given frame size.  Because
19865 this is a compile-time check it doesn't need to be a real problem when the program
19866 runs.  It is intended to identify functions that most probably cause
19867 a stack overflow.  It is useful to be used in an environment with limited stack
19868 size e.g. the linux kernel.
19869 .IP "\fB\-mwarn\-dynamicstack\fR" 4
19870 .IX Item "-mwarn-dynamicstack"
19871 Emit a warning if the function calls \f(CW\*(C`alloca\*(C'\fR or uses dynamically-sized
19872 arrays.  This is generally a bad idea with a limited stack size.
19873 .IP "\fB\-mstack\-guard=\fR\fIstack-guard\fR" 4
19874 .IX Item "-mstack-guard=stack-guard"
19875 .PD 0
19876 .IP "\fB\-mstack\-size=\fR\fIstack-size\fR" 4
19877 .IX Item "-mstack-size=stack-size"
19878 .PD
19879 If these options are provided the S/390 back end emits additional instructions in
19880 the function prologue that trigger a trap if the stack size is \fIstack-guard\fR
19881 bytes above the \fIstack-size\fR (remember that the stack on S/390 grows downward).
19882 If the \fIstack-guard\fR option is omitted the smallest power of 2 larger than
19883 the frame size of the compiled function is chosen.
19884 These options are intended to be used to help debugging stack overflow problems.
19885 The additionally emitted code causes only little overhead and hence can also be
19886 used in production-like systems without greater performance degradation.  The given
19887 values have to be exact powers of 2 and \fIstack-size\fR has to be greater than
19888 \&\fIstack-guard\fR without exceeding 64k.
19889 In order to be efficient the extra code makes the assumption that the stack starts
19890 at an address aligned to the value given by \fIstack-size\fR.
19891 The \fIstack-guard\fR option can only be used in conjunction with \fIstack-size\fR.
19892 .IP "\fB\-mhotpatch[=\fR\fIhalfwords\fR\fB]\fR" 4
19893 .IX Item "-mhotpatch[=halfwords]"
19894 .PD 0
19895 .IP "\fB\-mno\-hotpatch\fR" 4
19896 .IX Item "-mno-hotpatch"
19897 .PD
19898 If the hotpatch option is enabled, a \*(L"hot-patching\*(R" function
19899 prologue is generated for all functions in the compilation unit.
19900 The funtion label is prepended with the given number of two-byte
19901 Nop instructions (\fIhalfwords\fR, maximum 1000000) or 12 Nop
19902 instructions if no argument is present.  Functions with a
19903 hot-patching prologue are never inlined automatically, and a
19904 hot-patching prologue is never generated for functions
19905 that are explicitly inline.
19906 .Sp
19907 This option can be overridden for individual functions with the
19908 \&\f(CW\*(C`hotpatch\*(C'\fR attribute.
19909 .PP
19910 \fIScore Options\fR
19911 .IX Subsection "Score Options"
19912 .PP
19913 These options are defined for Score implementations:
19914 .IP "\fB\-meb\fR" 4
19915 .IX Item "-meb"
19916 Compile code for big-endian mode.  This is the default.
19917 .IP "\fB\-mel\fR" 4
19918 .IX Item "-mel"
19919 Compile code for little-endian mode.
19920 .IP "\fB\-mnhwloop\fR" 4
19921 .IX Item "-mnhwloop"
19922 Disable generation of \f(CW\*(C`bcnz\*(C'\fR instructions.
19923 .IP "\fB\-muls\fR" 4
19924 .IX Item "-muls"
19925 Enable generation of unaligned load and store instructions.
19926 .IP "\fB\-mmac\fR" 4
19927 .IX Item "-mmac"
19928 Enable the use of multiply-accumulate instructions. Disabled by default.
19929 .IP "\fB\-mscore5\fR" 4
19930 .IX Item "-mscore5"
19931 Specify the \s-1SCORE5\s0 as the target architecture.
19932 .IP "\fB\-mscore5u\fR" 4
19933 .IX Item "-mscore5u"
19934 Specify the \s-1SCORE5U\s0 of the target architecture.
19935 .IP "\fB\-mscore7\fR" 4
19936 .IX Item "-mscore7"
19937 Specify the \s-1SCORE7\s0 as the target architecture. This is the default.
19938 .IP "\fB\-mscore7d\fR" 4
19939 .IX Item "-mscore7d"
19940 Specify the \s-1SCORE7D\s0 as the target architecture.
19941 .PP
19942 \fI\s-1SH\s0 Options\fR
19943 .IX Subsection "SH Options"
19944 .PP
19945 These \fB\-m\fR options are defined for the \s-1SH\s0 implementations:
19946 .IP "\fB\-m1\fR" 4
19947 .IX Item "-m1"
19948 Generate code for the \s-1SH1\s0.
19949 .IP "\fB\-m2\fR" 4
19950 .IX Item "-m2"
19951 Generate code for the \s-1SH2\s0.
19952 .IP "\fB\-m2e\fR" 4
19953 .IX Item "-m2e"
19954 Generate code for the SH2e.
19955 .IP "\fB\-m2a\-nofpu\fR" 4
19956 .IX Item "-m2a-nofpu"
19957 Generate code for the SH2a without \s-1FPU\s0, or for a SH2a\-FPU in such a way
19958 that the floating-point unit is not used.
19959 .IP "\fB\-m2a\-single\-only\fR" 4
19960 .IX Item "-m2a-single-only"
19961 Generate code for the SH2a\-FPU, in such a way that no double-precision
19962 floating-point operations are used.
19963 .IP "\fB\-m2a\-single\fR" 4
19964 .IX Item "-m2a-single"
19965 Generate code for the SH2a\-FPU assuming the floating-point unit is in
19966 single-precision mode by default.
19967 .IP "\fB\-m2a\fR" 4
19968 .IX Item "-m2a"
19969 Generate code for the SH2a\-FPU assuming the floating-point unit is in
19970 double-precision mode by default.
19971 .IP "\fB\-m3\fR" 4
19972 .IX Item "-m3"
19973 Generate code for the \s-1SH3\s0.
19974 .IP "\fB\-m3e\fR" 4
19975 .IX Item "-m3e"
19976 Generate code for the SH3e.
19977 .IP "\fB\-m4\-nofpu\fR" 4
19978 .IX Item "-m4-nofpu"
19979 Generate code for the \s-1SH4\s0 without a floating-point unit.
19980 .IP "\fB\-m4\-single\-only\fR" 4
19981 .IX Item "-m4-single-only"
19982 Generate code for the \s-1SH4\s0 with a floating-point unit that only
19983 supports single-precision arithmetic.
19984 .IP "\fB\-m4\-single\fR" 4
19985 .IX Item "-m4-single"
19986 Generate code for the \s-1SH4\s0 assuming the floating-point unit is in
19987 single-precision mode by default.
19988 .IP "\fB\-m4\fR" 4
19989 .IX Item "-m4"
19990 Generate code for the \s-1SH4\s0.
19991 .IP "\fB\-m4\-100\fR" 4
19992 .IX Item "-m4-100"
19993 Generate code for \s-1SH4\-100\s0.
19994 .IP "\fB\-m4\-100\-nofpu\fR" 4
19995 .IX Item "-m4-100-nofpu"
19996 Generate code for \s-1SH4\-100\s0 in such a way that the
19997 floating-point unit is not used.
19998 .IP "\fB\-m4\-100\-single\fR" 4
19999 .IX Item "-m4-100-single"
20000 Generate code for \s-1SH4\-100\s0 assuming the floating-point unit is in
20001 single-precision mode by default.
20002 .IP "\fB\-m4\-100\-single\-only\fR" 4
20003 .IX Item "-m4-100-single-only"
20004 Generate code for \s-1SH4\-100\s0 in such a way that no double-precision
20005 floating-point operations are used.
20006 .IP "\fB\-m4\-200\fR" 4
20007 .IX Item "-m4-200"
20008 Generate code for \s-1SH4\-200\s0.
20009 .IP "\fB\-m4\-200\-nofpu\fR" 4
20010 .IX Item "-m4-200-nofpu"
20011 Generate code for \s-1SH4\-200\s0 without in such a way that the
20012 floating-point unit is not used.
20013 .IP "\fB\-m4\-200\-single\fR" 4
20014 .IX Item "-m4-200-single"
20015 Generate code for \s-1SH4\-200\s0 assuming the floating-point unit is in
20016 single-precision mode by default.
20017 .IP "\fB\-m4\-200\-single\-only\fR" 4
20018 .IX Item "-m4-200-single-only"
20019 Generate code for \s-1SH4\-200\s0 in such a way that no double-precision
20020 floating-point operations are used.
20021 .IP "\fB\-m4\-300\fR" 4
20022 .IX Item "-m4-300"
20023 Generate code for \s-1SH4\-300\s0.
20024 .IP "\fB\-m4\-300\-nofpu\fR" 4
20025 .IX Item "-m4-300-nofpu"
20026 Generate code for \s-1SH4\-300\s0 without in such a way that the
20027 floating-point unit is not used.
20028 .IP "\fB\-m4\-300\-single\fR" 4
20029 .IX Item "-m4-300-single"
20030 Generate code for \s-1SH4\-300\s0 in such a way that no double-precision
20031 floating-point operations are used.
20032 .IP "\fB\-m4\-300\-single\-only\fR" 4
20033 .IX Item "-m4-300-single-only"
20034 Generate code for \s-1SH4\-300\s0 in such a way that no double-precision
20035 floating-point operations are used.
20036 .IP "\fB\-m4\-340\fR" 4
20037 .IX Item "-m4-340"
20038 Generate code for \s-1SH4\-340\s0 (no \s-1MMU\s0, no \s-1FPU\s0).
20039 .IP "\fB\-m4\-500\fR" 4
20040 .IX Item "-m4-500"
20041 Generate code for \s-1SH4\-500\s0 (no \s-1FPU\s0).  Passes \fB\-isa=sh4\-nofpu\fR to the
20042 assembler.
20043 .IP "\fB\-m4a\-nofpu\fR" 4
20044 .IX Item "-m4a-nofpu"
20045 Generate code for the SH4al\-dsp, or for a SH4a in such a way that the
20046 floating-point unit is not used.
20047 .IP "\fB\-m4a\-single\-only\fR" 4
20048 .IX Item "-m4a-single-only"
20049 Generate code for the SH4a, in such a way that no double-precision
20050 floating-point operations are used.
20051 .IP "\fB\-m4a\-single\fR" 4
20052 .IX Item "-m4a-single"
20053 Generate code for the SH4a assuming the floating-point unit is in
20054 single-precision mode by default.
20055 .IP "\fB\-m4a\fR" 4
20056 .IX Item "-m4a"
20057 Generate code for the SH4a.
20058 .IP "\fB\-m4al\fR" 4
20059 .IX Item "-m4al"
20060 Same as \fB\-m4a\-nofpu\fR, except that it implicitly passes
20061 \&\fB\-dsp\fR to the assembler.  \s-1GCC\s0 doesn't generate any \s-1DSP\s0
20062 instructions at the moment.
20063 .IP "\fB\-m5\-32media\fR" 4
20064 .IX Item "-m5-32media"
20065 Generate 32\-bit code for SHmedia.
20066 .IP "\fB\-m5\-32media\-nofpu\fR" 4
20067 .IX Item "-m5-32media-nofpu"
20068 Generate 32\-bit code for SHmedia in such a way that the
20069 floating-point unit is not used.
20070 .IP "\fB\-m5\-64media\fR" 4
20071 .IX Item "-m5-64media"
20072 Generate 64\-bit code for SHmedia.
20073 .IP "\fB\-m5\-64media\-nofpu\fR" 4
20074 .IX Item "-m5-64media-nofpu"
20075 Generate 64\-bit code for SHmedia in such a way that the
20076 floating-point unit is not used.
20077 .IP "\fB\-m5\-compact\fR" 4
20078 .IX Item "-m5-compact"
20079 Generate code for SHcompact.
20080 .IP "\fB\-m5\-compact\-nofpu\fR" 4
20081 .IX Item "-m5-compact-nofpu"
20082 Generate code for SHcompact in such a way that the
20083 floating-point unit is not used.
20084 .IP "\fB\-mb\fR" 4
20085 .IX Item "-mb"
20086 Compile code for the processor in big-endian mode.
20087 .IP "\fB\-ml\fR" 4
20088 .IX Item "-ml"
20089 Compile code for the processor in little-endian mode.
20090 .IP "\fB\-mdalign\fR" 4
20091 .IX Item "-mdalign"
20092 Align doubles at 64\-bit boundaries.  Note that this changes the calling
20093 conventions, and thus some functions from the standard C library do
20094 not work unless you recompile it first with \fB\-mdalign\fR.
20095 .IP "\fB\-mrelax\fR" 4
20096 .IX Item "-mrelax"
20097 Shorten some address references at link time, when possible; uses the
20098 linker option \fB\-relax\fR.
20099 .IP "\fB\-mbigtable\fR" 4
20100 .IX Item "-mbigtable"
20101 Use 32\-bit offsets in \f(CW\*(C`switch\*(C'\fR tables.  The default is to use
20102 16\-bit offsets.
20103 .IP "\fB\-mbitops\fR" 4
20104 .IX Item "-mbitops"
20105 Enable the use of bit manipulation instructions on \s-1SH2A\s0.
20106 .IP "\fB\-mfmovd\fR" 4
20107 .IX Item "-mfmovd"
20108 Enable the use of the instruction \f(CW\*(C`fmovd\*(C'\fR.  Check \fB\-mdalign\fR for
20109 alignment constraints.
20110 .IP "\fB\-mrenesas\fR" 4
20111 .IX Item "-mrenesas"
20112 Comply with the calling conventions defined by Renesas.
20113 .IP "\fB\-mno\-renesas\fR" 4
20114 .IX Item "-mno-renesas"
20115 Comply with the calling conventions defined for \s-1GCC\s0 before the Renesas
20116 conventions were available.  This option is the default for all
20117 targets of the \s-1SH\s0 toolchain.
20118 .IP "\fB\-mnomacsave\fR" 4
20119 .IX Item "-mnomacsave"
20120 Mark the \f(CW\*(C`MAC\*(C'\fR register as call-clobbered, even if
20121 \&\fB\-mrenesas\fR is given.
20122 .IP "\fB\-mieee\fR" 4
20123 .IX Item "-mieee"
20124 .PD 0
20125 .IP "\fB\-mno\-ieee\fR" 4
20126 .IX Item "-mno-ieee"
20127 .PD
20128 Control the \s-1IEEE\s0 compliance of floating-point comparisons, which affects the
20129 handling of cases where the result of a comparison is unordered.  By default
20130 \&\fB\-mieee\fR is implicitly enabled.  If \fB\-ffinite\-math\-only\fR is
20131 enabled \fB\-mno\-ieee\fR is implicitly set, which results in faster
20132 floating-point greater-equal and less-equal comparisons.  The implcit settings
20133 can be overridden by specifying either \fB\-mieee\fR or \fB\-mno\-ieee\fR.
20134 .IP "\fB\-minline\-ic_invalidate\fR" 4
20135 .IX Item "-minline-ic_invalidate"
20136 Inline code to invalidate instruction cache entries after setting up
20137 nested function trampolines.
20138 This option has no effect if \fB\-musermode\fR is in effect and the selected
20139 code generation option (e.g. \fB\-m4\fR) does not allow the use of the \f(CW\*(C`icbi\*(C'\fR
20140 instruction.
20141 If the selected code generation option does not allow the use of the \f(CW\*(C`icbi\*(C'\fR
20142 instruction, and \fB\-musermode\fR is not in effect, the inlined code
20143 manipulates the instruction cache address array directly with an associative
20144 write.  This not only requires privileged mode at run time, but it also
20145 fails if the cache line had been mapped via the \s-1TLB\s0 and has become unmapped.
20146 .IP "\fB\-misize\fR" 4
20147 .IX Item "-misize"
20148 Dump instruction size and location in the assembly code.
20149 .IP "\fB\-mpadstruct\fR" 4
20150 .IX Item "-mpadstruct"
20151 This option is deprecated.  It pads structures to multiple of 4 bytes,
20152 which is incompatible with the \s-1SH\s0 \s-1ABI\s0.
20153 .IP "\fB\-matomic\-model=\fR\fImodel\fR" 4
20154 .IX Item "-matomic-model=model"
20155 Sets the model of atomic operations and additional parameters as a comma
20156 separated list.  For details on the atomic built-in functions see
20157 \&\fB_\|_atomic Builtins\fR.  The following models and parameters are supported:
20158 .RS 4
20159 .IP "\fBnone\fR" 4
20160 .IX Item "none"
20161 Disable compiler generated atomic sequences and emit library calls for atomic
20162 operations.  This is the default if the target is not \f(CW\*(C`sh*\-*\-linux*\*(C'\fR.
20163 .IP "\fBsoft-gusa\fR" 4
20164 .IX Item "soft-gusa"
20165 Generate GNU/Linux compatible gUSA software atomic sequences for the atomic
20166 built-in functions.  The generated atomic sequences require additional support
20167 from the interrupt/exception handling code of the system and are only suitable
20168 for SH3* and SH4* single-core systems.  This option is enabled by default when
20169 the target is \f(CW\*(C`sh*\-*\-linux*\*(C'\fR and SH3* or SH4*.  When the target is \s-1SH4A\s0,
20170 this option also partially utilizes the hardware atomic instructions
20171 \&\f(CW\*(C`movli.l\*(C'\fR and \f(CW\*(C`movco.l\*(C'\fR to create more efficient code, unless
20172 \&\fBstrict\fR is specified.
20173 .IP "\fBsoft-tcb\fR" 4
20174 .IX Item "soft-tcb"
20175 Generate software atomic sequences that use a variable in the thread control
20176 block.  This is a variation of the gUSA sequences which can also be used on
20177 SH1* and SH2* targets.  The generated atomic sequences require additional
20178 support from the interrupt/exception handling code of the system and are only
20179 suitable for single-core systems.  When using this model, the \fBgbr\-offset=\fR
20180 parameter has to be specified as well.
20181 .IP "\fBsoft-imask\fR" 4
20182 .IX Item "soft-imask"
20183 Generate software atomic sequences that temporarily disable interrupts by
20184 setting \f(CW\*(C`SR.IMASK = 1111\*(C'\fR.  This model works only when the program runs
20185 in privileged mode and is only suitable for single-core systems.  Additional
20186 support from the interrupt/exception handling code of the system is not
20187 required.  This model is enabled by default when the target is
20188 \&\f(CW\*(C`sh*\-*\-linux*\*(C'\fR and SH1* or SH2*.
20189 .IP "\fBhard-llcs\fR" 4
20190 .IX Item "hard-llcs"
20191 Generate hardware atomic sequences using the \f(CW\*(C`movli.l\*(C'\fR and \f(CW\*(C`movco.l\*(C'\fR
20192 instructions only.  This is only available on \s-1SH4A\s0 and is suitable for
20193 multi-core systems.  Since the hardware instructions support only 32 bit atomic
20194 variables access to 8 or 16 bit variables is emulated with 32 bit accesses.
20195 Code compiled with this option is also compatible with other software
20196 atomic model interrupt/exception handling systems if executed on an \s-1SH4A\s0
20197 system.  Additional support from the interrupt/exception handling code of the
20198 system is not required for this model.
20199 .IP "\fBgbr\-offset=\fR" 4
20200 .IX Item "gbr-offset="
20201 This parameter specifies the offset in bytes of the variable in the thread
20202 control block structure that should be used by the generated atomic sequences
20203 when the \fBsoft-tcb\fR model has been selected.  For other models this
20204 parameter is ignored.  The specified value must be an integer multiple of four
20205 and in the range 0\-1020.
20206 .IP "\fBstrict\fR" 4
20207 .IX Item "strict"
20208 This parameter prevents mixed usage of multiple atomic models, even if they
20209 are compatible, and makes the compiler generate atomic sequences of the
20210 specified model only.
20211 .RE
20212 .RS 4
20213 .RE
20214 .IP "\fB\-mtas\fR" 4
20215 .IX Item "-mtas"
20216 Generate the \f(CW\*(C`tas.b\*(C'\fR opcode for \f(CW\*(C`_\|_atomic_test_and_set\*(C'\fR.
20217 Notice that depending on the particular hardware and software configuration
20218 this can degrade overall performance due to the operand cache line flushes
20219 that are implied by the \f(CW\*(C`tas.b\*(C'\fR instruction.  On multi-core \s-1SH4A\s0
20220 processors the \f(CW\*(C`tas.b\*(C'\fR instruction must be used with caution since it
20221 can result in data corruption for certain cache configurations.
20222 .IP "\fB\-mprefergot\fR" 4
20223 .IX Item "-mprefergot"
20224 When generating position-independent code, emit function calls using
20225 the Global Offset Table instead of the Procedure Linkage Table.
20226 .IP "\fB\-musermode\fR" 4
20227 .IX Item "-musermode"
20228 .PD 0
20229 .IP "\fB\-mno\-usermode\fR" 4
20230 .IX Item "-mno-usermode"
20231 .PD
20232 Don't allow (allow) the compiler generating privileged mode code.  Specifying
20233 \&\fB\-musermode\fR also implies \fB\-mno\-inline\-ic_invalidate\fR if the
20234 inlined code would not work in user mode.  \fB\-musermode\fR is the default
20235 when the target is \f(CW\*(C`sh*\-*\-linux*\*(C'\fR.  If the target is SH1* or SH2*
20236 \&\fB\-musermode\fR has no effect, since there is no user mode.
20237 .IP "\fB\-multcost=\fR\fInumber\fR" 4
20238 .IX Item "-multcost=number"
20239 Set the cost to assume for a multiply insn.
20240 .IP "\fB\-mdiv=\fR\fIstrategy\fR" 4
20241 .IX Item "-mdiv=strategy"
20242 Set the division strategy to be used for integer division operations.
20243 For SHmedia \fIstrategy\fR can be one of:
20244 .RS 4
20245 .IP "\fBfp\fR" 4
20246 .IX Item "fp"
20247 Performs the operation in floating point.  This has a very high latency,
20248 but needs only a few instructions, so it might be a good choice if
20249 your code has enough easily-exploitable \s-1ILP\s0 to allow the compiler to
20250 schedule the floating-point instructions together with other instructions.
20251 Division by zero causes a floating-point exception.
20252 .IP "\fBinv\fR" 4
20253 .IX Item "inv"
20254 Uses integer operations to calculate the inverse of the divisor,
20255 and then multiplies the dividend with the inverse.  This strategy allows
20256 \&\s-1CSE\s0 and hoisting of the inverse calculation.  Division by zero calculates
20257 an unspecified result, but does not trap.
20258 .IP "\fBinv:minlat\fR" 4
20259 .IX Item "inv:minlat"
20260 A variant of \fBinv\fR where, if no \s-1CSE\s0 or hoisting opportunities
20261 have been found, or if the entire operation has been hoisted to the same
20262 place, the last stages of the inverse calculation are intertwined with the
20263 final multiply to reduce the overall latency, at the expense of using a few
20264 more instructions, and thus offering fewer scheduling opportunities with
20265 other code.
20266 .IP "\fBcall\fR" 4
20267 .IX Item "call"
20268 Calls a library function that usually implements the \fBinv:minlat\fR
20269 strategy.
20270 This gives high code density for \f(CW\*(C`m5\-*media\-nofpu\*(C'\fR compilations.
20271 .IP "\fBcall2\fR" 4
20272 .IX Item "call2"
20273 Uses a different entry point of the same library function, where it
20274 assumes that a pointer to a lookup table has already been set up, which
20275 exposes the pointer load to \s-1CSE\s0 and code hoisting optimizations.
20276 .IP "\fBinv:call\fR" 4
20277 .IX Item "inv:call"
20278 .PD 0
20279 .IP "\fBinv:call2\fR" 4
20280 .IX Item "inv:call2"
20281 .IP "\fBinv:fp\fR" 4
20282 .IX Item "inv:fp"
20283 .PD
20284 Use the \fBinv\fR algorithm for initial
20285 code generation, but if the code stays unoptimized, revert to the \fBcall\fR,
20286 \&\fBcall2\fR, or \fBfp\fR strategies, respectively.  Note that the
20287 potentially-trapping side effect of division by zero is carried by a
20288 separate instruction, so it is possible that all the integer instructions
20289 are hoisted out, but the marker for the side effect stays where it is.
20290 A recombination to floating-point operations or a call is not possible
20291 in that case.
20292 .IP "\fBinv20u\fR" 4
20293 .IX Item "inv20u"
20294 .PD 0
20295 .IP "\fBinv20l\fR" 4
20296 .IX Item "inv20l"
20297 .PD
20298 Variants of the \fBinv:minlat\fR strategy.  In the case
20299 that the inverse calculation is not separated from the multiply, they speed
20300 up division where the dividend fits into 20 bits (plus sign where applicable)
20301 by inserting a test to skip a number of operations in this case; this test
20302 slows down the case of larger dividends.  \fBinv20u\fR assumes the case of a such
20303 a small dividend to be unlikely, and \fBinv20l\fR assumes it to be likely.
20304 .RE
20305 .RS 4
20306 .Sp
20307 For targets other than SHmedia \fIstrategy\fR can be one of:
20308 .IP "\fBcall\-div1\fR" 4
20309 .IX Item "call-div1"
20310 Calls a library function that uses the single-step division instruction
20311 \&\f(CW\*(C`div1\*(C'\fR to perform the operation.  Division by zero calculates an
20312 unspecified result and does not trap.  This is the default except for \s-1SH4\s0,
20313 \&\s-1SH2A\s0 and SHcompact.
20314 .IP "\fBcall-fp\fR" 4
20315 .IX Item "call-fp"
20316 Calls a library function that performs the operation in double precision
20317 floating point.  Division by zero causes a floating-point exception.  This is
20318 the default for SHcompact with \s-1FPU\s0.  Specifying this for targets that do not
20319 have a double precision \s-1FPU\s0 defaults to \f(CW\*(C`call\-div1\*(C'\fR.
20320 .IP "\fBcall-table\fR" 4
20321 .IX Item "call-table"
20322 Calls a library function that uses a lookup table for small divisors and
20323 the \f(CW\*(C`div1\*(C'\fR instruction with case distinction for larger divisors.  Division
20324 by zero calculates an unspecified result and does not trap.  This is the default
20325 for \s-1SH4\s0.  Specifying this for targets that do not have dynamic shift
20326 instructions defaults to \f(CW\*(C`call\-div1\*(C'\fR.
20327 .RE
20328 .RS 4
20329 .Sp
20330 When a division strategy has not been specified the default strategy is
20331 selected based on the current target.  For \s-1SH2A\s0 the default strategy is to
20332 use the \f(CW\*(C`divs\*(C'\fR and \f(CW\*(C`divu\*(C'\fR instructions instead of library function
20333 calls.
20334 .RE
20335 .IP "\fB\-maccumulate\-outgoing\-args\fR" 4
20336 .IX Item "-maccumulate-outgoing-args"
20337 Reserve space once for outgoing arguments in the function prologue rather
20338 than around each call.  Generally beneficial for performance and size.  Also
20339 needed for unwinding to avoid changing the stack frame around conditional code.
20340 .IP "\fB\-mdivsi3_libfunc=\fR\fIname\fR" 4
20341 .IX Item "-mdivsi3_libfunc=name"
20342 Set the name of the library function used for 32\-bit signed division to
20343 \&\fIname\fR.
20344 This only affects the name used in the \fBcall\fR and \fBinv:call\fR
20345 division strategies, and the compiler still expects the same
20346 sets of input/output/clobbered registers as if this option were not present.
20347 .IP "\fB\-mfixed\-range=\fR\fIregister-range\fR" 4
20348 .IX Item "-mfixed-range=register-range"
20349 Generate code treating the given register range as fixed registers.
20350 A fixed register is one that the register allocator can not use.  This is
20351 useful when compiling kernel code.  A register range is specified as
20352 two registers separated by a dash.  Multiple register ranges can be
20353 specified separated by a comma.
20354 .IP "\fB\-mindexed\-addressing\fR" 4
20355 .IX Item "-mindexed-addressing"
20356 Enable the use of the indexed addressing mode for SHmedia32/SHcompact.
20357 This is only safe if the hardware and/or \s-1OS\s0 implement 32\-bit wrap-around
20358 semantics for the indexed addressing mode.  The architecture allows the
20359 implementation of processors with 64\-bit \s-1MMU\s0, which the \s-1OS\s0 could use to
20360 get 32\-bit addressing, but since no current hardware implementation supports
20361 this or any other way to make the indexed addressing mode safe to use in
20362 the 32\-bit \s-1ABI\s0, the default is \fB\-mno\-indexed\-addressing\fR.
20363 .IP "\fB\-mgettrcost=\fR\fInumber\fR" 4
20364 .IX Item "-mgettrcost=number"
20365 Set the cost assumed for the \f(CW\*(C`gettr\*(C'\fR instruction to \fInumber\fR.
20366 The default is 2 if \fB\-mpt\-fixed\fR is in effect, 100 otherwise.
20367 .IP "\fB\-mpt\-fixed\fR" 4
20368 .IX Item "-mpt-fixed"
20369 Assume \f(CW\*(C`pt*\*(C'\fR instructions won't trap.  This generally generates
20370 better-scheduled code, but is unsafe on current hardware.
20371 The current architecture
20372 definition says that \f(CW\*(C`ptabs\*(C'\fR and \f(CW\*(C`ptrel\*(C'\fR trap when the target 
20373 anded with 3 is 3.
20374 This has the unintentional effect of making it unsafe to schedule these
20375 instructions before a branch, or hoist them out of a loop.  For example,
20376 \&\f(CW\*(C`_\|_do_global_ctors\*(C'\fR, a part of \fIlibgcc\fR
20377 that runs constructors at program
20378 startup, calls functions in a list which is delimited by \-1.  With the
20379 \&\fB\-mpt\-fixed\fR option, the \f(CW\*(C`ptabs\*(C'\fR is done before testing against \-1.
20380 That means that all the constructors run a bit more quickly, but when
20381 the loop comes to the end of the list, the program crashes because \f(CW\*(C`ptabs\*(C'\fR
20382 loads \-1 into a target register.
20383 .Sp
20384 Since this option is unsafe for any
20385 hardware implementing the current architecture specification, the default
20386 is \fB\-mno\-pt\-fixed\fR.  Unless specified explicitly with 
20387 \&\fB\-mgettrcost\fR, \fB\-mno\-pt\-fixed\fR also implies \fB\-mgettrcost=100\fR;
20388 this deters register allocation from using target registers for storing
20389 ordinary integers.
20390 .IP "\fB\-minvalid\-symbols\fR" 4
20391 .IX Item "-minvalid-symbols"
20392 Assume symbols might be invalid.  Ordinary function symbols generated by
20393 the compiler are always valid to load with
20394 \&\f(CW\*(C`movi\*(C'\fR/\f(CW\*(C`shori\*(C'\fR/\f(CW\*(C`ptabs\*(C'\fR or
20395 \&\f(CW\*(C`movi\*(C'\fR/\f(CW\*(C`shori\*(C'\fR/\f(CW\*(C`ptrel\*(C'\fR,
20396 but with assembler and/or linker tricks it is possible
20397 to generate symbols that cause \f(CW\*(C`ptabs\*(C'\fR or \f(CW\*(C`ptrel\*(C'\fR to trap.
20398 This option is only meaningful when \fB\-mno\-pt\-fixed\fR is in effect.
20399 It prevents cross-basic-block \s-1CSE\s0, hoisting and most scheduling
20400 of symbol loads.  The default is \fB\-mno\-invalid\-symbols\fR.
20401 .IP "\fB\-mbranch\-cost=\fR\fInum\fR" 4
20402 .IX Item "-mbranch-cost=num"
20403 Assume \fInum\fR to be the cost for a branch instruction.  Higher numbers
20404 make the compiler try to generate more branch-free code if possible.  
20405 If not specified the value is selected depending on the processor type that
20406 is being compiled for.
20407 .IP "\fB\-mzdcbranch\fR" 4
20408 .IX Item "-mzdcbranch"
20409 .PD 0
20410 .IP "\fB\-mno\-zdcbranch\fR" 4
20411 .IX Item "-mno-zdcbranch"
20412 .PD
20413 Assume (do not assume) that zero displacement conditional branch instructions
20414 \&\f(CW\*(C`bt\*(C'\fR and \f(CW\*(C`bf\*(C'\fR are fast.  If \fB\-mzdcbranch\fR is specified, the
20415 compiler prefers zero displacement branch code sequences.  This is
20416 enabled by default when generating code for \s-1SH4\s0 and \s-1SH4A\s0.  It can be explicitly
20417 disabled by specifying \fB\-mno\-zdcbranch\fR.
20418 .IP "\fB\-mfused\-madd\fR" 4
20419 .IX Item "-mfused-madd"
20420 .PD 0
20421 .IP "\fB\-mno\-fused\-madd\fR" 4
20422 .IX Item "-mno-fused-madd"
20423 .PD
20424 Generate code that uses (does not use) the floating-point multiply and
20425 accumulate instructions.  These instructions are generated by default
20426 if hardware floating point is used.  The machine-dependent
20427 \&\fB\-mfused\-madd\fR option is now mapped to the machine-independent
20428 \&\fB\-ffp\-contract=fast\fR option, and \fB\-mno\-fused\-madd\fR is
20429 mapped to \fB\-ffp\-contract=off\fR.
20430 .IP "\fB\-mfsca\fR" 4
20431 .IX Item "-mfsca"
20432 .PD 0
20433 .IP "\fB\-mno\-fsca\fR" 4
20434 .IX Item "-mno-fsca"
20435 .PD
20436 Allow or disallow the compiler to emit the \f(CW\*(C`fsca\*(C'\fR instruction for sine
20437 and cosine approximations.  The option \fB\-mfsca\fR must be used in
20438 combination with \fB\-funsafe\-math\-optimizations\fR.  It is enabled by default
20439 when generating code for \s-1SH4A\s0.  Using \fB\-mno\-fsca\fR disables sine and cosine
20440 approximations even if \fB\-funsafe\-math\-optimizations\fR is in effect.
20441 .IP "\fB\-mfsrra\fR" 4
20442 .IX Item "-mfsrra"
20443 .PD 0
20444 .IP "\fB\-mno\-fsrra\fR" 4
20445 .IX Item "-mno-fsrra"
20446 .PD
20447 Allow or disallow the compiler to emit the \f(CW\*(C`fsrra\*(C'\fR instruction for
20448 reciprocal square root approximations.  The option \fB\-mfsrra\fR must be used
20449 in combination with \fB\-funsafe\-math\-optimizations\fR and
20450 \&\fB\-ffinite\-math\-only\fR.  It is enabled by default when generating code for
20451 \&\s-1SH4A\s0.  Using \fB\-mno\-fsrra\fR disables reciprocal square root approximations
20452 even if \fB\-funsafe\-math\-optimizations\fR and \fB\-ffinite\-math\-only\fR are
20453 in effect.
20454 .IP "\fB\-mpretend\-cmove\fR" 4
20455 .IX Item "-mpretend-cmove"
20456 Prefer zero-displacement conditional branches for conditional move instruction
20457 patterns.  This can result in faster code on the \s-1SH4\s0 processor.
20458 .PP
20459 \fISolaris 2 Options\fR
20460 .IX Subsection "Solaris 2 Options"
20461 .PP
20462 These \fB\-m\fR options are supported on Solaris 2:
20463 .IP "\fB\-mclear\-hwcap\fR" 4
20464 .IX Item "-mclear-hwcap"
20465 \&\fB\-mclear\-hwcap\fR tells the compiler to remove the hardware
20466 capabilities generated by the Solaris assembler.  This is only necessary
20467 when object files use \s-1ISA\s0 extensions not supported by the current
20468 machine, but check at runtime whether or not to use them.
20469 .IP "\fB\-mimpure\-text\fR" 4
20470 .IX Item "-mimpure-text"
20471 \&\fB\-mimpure\-text\fR, used in addition to \fB\-shared\fR, tells
20472 the compiler to not pass \fB\-z text\fR to the linker when linking a
20473 shared object.  Using this option, you can link position-dependent
20474 code into a shared object.
20475 .Sp
20476 \&\fB\-mimpure\-text\fR suppresses the \*(L"relocations remain against
20477 allocatable but non-writable sections\*(R" linker error message.
20478 However, the necessary relocations trigger copy-on-write, and the
20479 shared object is not actually shared across processes.  Instead of
20480 using \fB\-mimpure\-text\fR, you should compile all source code with
20481 \&\fB\-fpic\fR or \fB\-fPIC\fR.
20482 .PP
20483 These switches are supported in addition to the above on Solaris 2:
20484 .IP "\fB\-pthreads\fR" 4
20485 .IX Item "-pthreads"
20486 Add support for multithreading using the \s-1POSIX\s0 threads library.  This
20487 option sets flags for both the preprocessor and linker.  This option does
20488 not affect the thread safety of object code produced  by the compiler or
20489 that of libraries supplied with it.
20490 .IP "\fB\-pthread\fR" 4
20491 .IX Item "-pthread"
20492 This is a synonym for \fB\-pthreads\fR.
20493 .PP
20494 \fI\s-1SPARC\s0 Options\fR
20495 .IX Subsection "SPARC Options"
20496 .PP
20497 These \fB\-m\fR options are supported on the \s-1SPARC:\s0
20498 .IP "\fB\-mno\-app\-regs\fR" 4
20499 .IX Item "-mno-app-regs"
20500 .PD 0
20501 .IP "\fB\-mapp\-regs\fR" 4
20502 .IX Item "-mapp-regs"
20503 .PD
20504 Specify \fB\-mapp\-regs\fR to generate output using the global registers
20505 2 through 4, which the \s-1SPARC\s0 \s-1SVR4\s0 \s-1ABI\s0 reserves for applications.  Like the
20506 global register 1, each global register 2 through 4 is then treated as an
20507 allocable register that is clobbered by function calls.  This is the default.
20508 .Sp
20509 To be fully \s-1SVR4\s0 ABI-compliant at the cost of some performance loss,
20510 specify \fB\-mno\-app\-regs\fR.  You should compile libraries and system
20511 software with this option.
20512 .IP "\fB\-mflat\fR" 4
20513 .IX Item "-mflat"
20514 .PD 0
20515 .IP "\fB\-mno\-flat\fR" 4
20516 .IX Item "-mno-flat"
20517 .PD
20518 With \fB\-mflat\fR, the compiler does not generate save/restore instructions
20519 and uses a \*(L"flat\*(R" or single register window model.  This model is compatible
20520 with the regular register window model.  The local registers and the input
20521 registers (0\-\-5) are still treated as \*(L"call-saved\*(R" registers and are
20522 saved on the stack as needed.
20523 .Sp
20524 With \fB\-mno\-flat\fR (the default), the compiler generates save/restore
20525 instructions (except for leaf functions).  This is the normal operating mode.
20526 .IP "\fB\-mfpu\fR" 4
20527 .IX Item "-mfpu"
20528 .PD 0
20529 .IP "\fB\-mhard\-float\fR" 4
20530 .IX Item "-mhard-float"
20531 .PD
20532 Generate output containing floating-point instructions.  This is the
20533 default.
20534 .IP "\fB\-mno\-fpu\fR" 4
20535 .IX Item "-mno-fpu"
20536 .PD 0
20537 .IP "\fB\-msoft\-float\fR" 4
20538 .IX Item "-msoft-float"
20539 .PD
20540 Generate output containing library calls for floating point.
20541 \&\fBWarning:\fR the requisite libraries are not available for all \s-1SPARC\s0
20542 targets.  Normally the facilities of the machine's usual C compiler are
20543 used, but this cannot be done directly in cross-compilation.  You must make
20544 your own arrangements to provide suitable library functions for
20545 cross-compilation.  The embedded targets \fBsparc\-*\-aout\fR and
20546 \&\fBsparclite\-*\-*\fR do provide software floating-point support.
20547 .Sp
20548 \&\fB\-msoft\-float\fR changes the calling convention in the output file;
20549 therefore, it is only useful if you compile \fIall\fR of a program with
20550 this option.  In particular, you need to compile \fIlibgcc.a\fR, the
20551 library that comes with \s-1GCC\s0, with \fB\-msoft\-float\fR in order for
20552 this to work.
20553 .IP "\fB\-mhard\-quad\-float\fR" 4
20554 .IX Item "-mhard-quad-float"
20555 Generate output containing quad-word (long double) floating-point
20556 instructions.
20557 .IP "\fB\-msoft\-quad\-float\fR" 4
20558 .IX Item "-msoft-quad-float"
20559 Generate output containing library calls for quad-word (long double)
20560 floating-point instructions.  The functions called are those specified
20561 in the \s-1SPARC\s0 \s-1ABI\s0.  This is the default.
20562 .Sp
20563 As of this writing, there are no \s-1SPARC\s0 implementations that have hardware
20564 support for the quad-word floating-point instructions.  They all invoke
20565 a trap handler for one of these instructions, and then the trap handler
20566 emulates the effect of the instruction.  Because of the trap handler overhead,
20567 this is much slower than calling the \s-1ABI\s0 library routines.  Thus the
20568 \&\fB\-msoft\-quad\-float\fR option is the default.
20569 .IP "\fB\-mno\-unaligned\-doubles\fR" 4
20570 .IX Item "-mno-unaligned-doubles"
20571 .PD 0
20572 .IP "\fB\-munaligned\-doubles\fR" 4
20573 .IX Item "-munaligned-doubles"
20574 .PD
20575 Assume that doubles have 8\-byte alignment.  This is the default.
20576 .Sp
20577 With \fB\-munaligned\-doubles\fR, \s-1GCC\s0 assumes that doubles have 8\-byte
20578 alignment only if they are contained in another type, or if they have an
20579 absolute address.  Otherwise, it assumes they have 4\-byte alignment.
20580 Specifying this option avoids some rare compatibility problems with code
20581 generated by other compilers.  It is not the default because it results
20582 in a performance loss, especially for floating-point code.
20583 .IP "\fB\-muser\-mode\fR" 4
20584 .IX Item "-muser-mode"
20585 .PD 0
20586 .IP "\fB\-mno\-user\-mode\fR" 4
20587 .IX Item "-mno-user-mode"
20588 .PD
20589 Do not generate code that can only run in supervisor mode.  This is relevant
20590 only for the \f(CW\*(C`casa\*(C'\fR instruction emitted for the \s-1LEON3\s0 processor.  The
20591 default is \fB\-mno\-user\-mode\fR.
20592 .IP "\fB\-mno\-faster\-structs\fR" 4
20593 .IX Item "-mno-faster-structs"
20594 .PD 0
20595 .IP "\fB\-mfaster\-structs\fR" 4
20596 .IX Item "-mfaster-structs"
20597 .PD
20598 With \fB\-mfaster\-structs\fR, the compiler assumes that structures
20599 should have 8\-byte alignment.  This enables the use of pairs of
20600 \&\f(CW\*(C`ldd\*(C'\fR and \f(CW\*(C`std\*(C'\fR instructions for copies in structure
20601 assignment, in place of twice as many \f(CW\*(C`ld\*(C'\fR and \f(CW\*(C`st\*(C'\fR pairs.
20602 However, the use of this changed alignment directly violates the \s-1SPARC\s0
20603 \&\s-1ABI\s0.  Thus, it's intended only for use on targets where the developer
20604 acknowledges that their resulting code is not directly in line with
20605 the rules of the \s-1ABI\s0.
20606 .IP "\fB\-mcpu=\fR\fIcpu_type\fR" 4
20607 .IX Item "-mcpu=cpu_type"
20608 Set the instruction set, register set, and instruction scheduling parameters
20609 for machine type \fIcpu_type\fR.  Supported values for \fIcpu_type\fR are
20610 \&\fBv7\fR, \fBcypress\fR, \fBv8\fR, \fBsupersparc\fR, \fBhypersparc\fR,
20611 \&\fBleon\fR, \fBleon3\fR, \fBleon3v7\fR, \fBsparclite\fR, \fBf930\fR,
20612 \&\fBf934\fR, \fBsparclite86x\fR, \fBsparclet\fR, \fBtsc701\fR, \fBv9\fR,
20613 \&\fBultrasparc\fR, \fBultrasparc3\fR, \fBniagara\fR, \fBniagara2\fR,
20614 \&\fBniagara3\fR and \fBniagara4\fR.
20615 .Sp
20616 Native Solaris and GNU/Linux toolchains also support the value \fBnative\fR,
20617 which selects the best architecture option for the host processor.
20618 \&\fB\-mcpu=native\fR has no effect if \s-1GCC\s0 does not recognize
20619 the processor.
20620 .Sp
20621 Default instruction scheduling parameters are used for values that select
20622 an architecture and not an implementation.  These are \fBv7\fR, \fBv8\fR,
20623 \&\fBsparclite\fR, \fBsparclet\fR, \fBv9\fR.
20624 .Sp
20625 Here is a list of each supported architecture and their supported
20626 implementations.
20627 .RS 4
20628 .IP "v7" 4
20629 .IX Item "v7"
20630 cypress, leon3v7
20631 .IP "v8" 4
20632 .IX Item "v8"
20633 supersparc, hypersparc, leon, leon3
20634 .IP "sparclite" 4
20635 .IX Item "sparclite"
20636 f930, f934, sparclite86x
20637 .IP "sparclet" 4
20638 .IX Item "sparclet"
20639 tsc701
20640 .IP "v9" 4
20641 .IX Item "v9"
20642 ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4
20643 .RE
20644 .RS 4
20645 .Sp
20646 By default (unless configured otherwise), \s-1GCC\s0 generates code for the V7
20647 variant of the \s-1SPARC\s0 architecture.  With \fB\-mcpu=cypress\fR, the compiler
20648 additionally optimizes it for the Cypress \s-1CY7C602\s0 chip, as used in the
20649 SPARCStation/SPARCServer 3xx series.  This is also appropriate for the older
20650 SPARCStation 1, 2, \s-1IPX\s0 etc.
20651 .Sp
20652 With \fB\-mcpu=v8\fR, \s-1GCC\s0 generates code for the V8 variant of the \s-1SPARC\s0
20653 architecture.  The only difference from V7 code is that the compiler emits
20654 the integer multiply and integer divide instructions which exist in \s-1SPARC\-V8\s0
20655 but not in \s-1SPARC\-V7\s0.  With \fB\-mcpu=supersparc\fR, the compiler additionally
20656 optimizes it for the SuperSPARC chip, as used in the SPARCStation 10, 1000 and
20657 2000 series.
20658 .Sp
20659 With \fB\-mcpu=sparclite\fR, \s-1GCC\s0 generates code for the SPARClite variant of
20660 the \s-1SPARC\s0 architecture.  This adds the integer multiply, integer divide step
20661 and scan (\f(CW\*(C`ffs\*(C'\fR) instructions which exist in SPARClite but not in \s-1SPARC\-V7\s0.
20662 With \fB\-mcpu=f930\fR, the compiler additionally optimizes it for the
20663 Fujitsu \s-1MB86930\s0 chip, which is the original SPARClite, with no \s-1FPU\s0.  With
20664 \&\fB\-mcpu=f934\fR, the compiler additionally optimizes it for the Fujitsu
20665 \&\s-1MB86934\s0 chip, which is the more recent SPARClite with \s-1FPU\s0.
20666 .Sp
20667 With \fB\-mcpu=sparclet\fR, \s-1GCC\s0 generates code for the SPARClet variant of
20668 the \s-1SPARC\s0 architecture.  This adds the integer multiply, multiply/accumulate,
20669 integer divide step and scan (\f(CW\*(C`ffs\*(C'\fR) instructions which exist in SPARClet
20670 but not in \s-1SPARC\-V7\s0.  With \fB\-mcpu=tsc701\fR, the compiler additionally
20671 optimizes it for the \s-1TEMIC\s0 SPARClet chip.
20672 .Sp
20673 With \fB\-mcpu=v9\fR, \s-1GCC\s0 generates code for the V9 variant of the \s-1SPARC\s0
20674 architecture.  This adds 64\-bit integer and floating-point move instructions,
20675 3 additional floating-point condition code registers and conditional move
20676 instructions.  With \fB\-mcpu=ultrasparc\fR, the compiler additionally
20677 optimizes it for the Sun UltraSPARC I/II/IIi chips.  With
20678 \&\fB\-mcpu=ultrasparc3\fR, the compiler additionally optimizes it for the
20679 Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+ chips.  With
20680 \&\fB\-mcpu=niagara\fR, the compiler additionally optimizes it for
20681 Sun UltraSPARC T1 chips.  With \fB\-mcpu=niagara2\fR, the compiler
20682 additionally optimizes it for Sun UltraSPARC T2 chips. With
20683 \&\fB\-mcpu=niagara3\fR, the compiler additionally optimizes it for Sun
20684 UltraSPARC T3 chips.  With \fB\-mcpu=niagara4\fR, the compiler
20685 additionally optimizes it for Sun UltraSPARC T4 chips.
20686 .RE
20687 .IP "\fB\-mtune=\fR\fIcpu_type\fR" 4
20688 .IX Item "-mtune=cpu_type"
20689 Set the instruction scheduling parameters for machine type
20690 \&\fIcpu_type\fR, but do not set the instruction set or register set that the
20691 option \fB\-mcpu=\fR\fIcpu_type\fR does.
20692 .Sp
20693 The same values for \fB\-mcpu=\fR\fIcpu_type\fR can be used for
20694 \&\fB\-mtune=\fR\fIcpu_type\fR, but the only useful values are those
20695 that select a particular \s-1CPU\s0 implementation.  Those are \fBcypress\fR,
20696 \&\fBsupersparc\fR, \fBhypersparc\fR, \fBleon\fR, \fBleon3\fR,
20697 \&\fBleon3v7\fR, \fBf930\fR, \fBf934\fR, \fBsparclite86x\fR, \fBtsc701\fR,
20698 \&\fBultrasparc\fR, \fBultrasparc3\fR, \fBniagara\fR, \fBniagara2\fR,
20699 \&\fBniagara3\fR and \fBniagara4\fR.  With native Solaris and GNU/Linux
20700 toolchains, \fBnative\fR can also be used.
20701 .IP "\fB\-mv8plus\fR" 4
20702 .IX Item "-mv8plus"
20703 .PD 0
20704 .IP "\fB\-mno\-v8plus\fR" 4
20705 .IX Item "-mno-v8plus"
20706 .PD
20707 With \fB\-mv8plus\fR, \s-1GCC\s0 generates code for the \s-1SPARC\-V8+\s0 \s-1ABI\s0.  The
20708 difference from the V8 \s-1ABI\s0 is that the global and out registers are
20709 considered 64 bits wide.  This is enabled by default on Solaris in 32\-bit
20710 mode for all \s-1SPARC\-V9\s0 processors.
20711 .IP "\fB\-mvis\fR" 4
20712 .IX Item "-mvis"
20713 .PD 0
20714 .IP "\fB\-mno\-vis\fR" 4
20715 .IX Item "-mno-vis"
20716 .PD
20717 With \fB\-mvis\fR, \s-1GCC\s0 generates code that takes advantage of the UltraSPARC
20718 Visual Instruction Set extensions.  The default is \fB\-mno\-vis\fR.
20719 .IP "\fB\-mvis2\fR" 4
20720 .IX Item "-mvis2"
20721 .PD 0
20722 .IP "\fB\-mno\-vis2\fR" 4
20723 .IX Item "-mno-vis2"
20724 .PD
20725 With \fB\-mvis2\fR, \s-1GCC\s0 generates code that takes advantage of
20726 version 2.0 of the UltraSPARC Visual Instruction Set extensions.  The
20727 default is \fB\-mvis2\fR when targeting a cpu that supports such
20728 instructions, such as UltraSPARC-III and later.  Setting \fB\-mvis2\fR
20729 also sets \fB\-mvis\fR.
20730 .IP "\fB\-mvis3\fR" 4
20731 .IX Item "-mvis3"
20732 .PD 0
20733 .IP "\fB\-mno\-vis3\fR" 4
20734 .IX Item "-mno-vis3"
20735 .PD
20736 With \fB\-mvis3\fR, \s-1GCC\s0 generates code that takes advantage of
20737 version 3.0 of the UltraSPARC Visual Instruction Set extensions.  The
20738 default is \fB\-mvis3\fR when targeting a cpu that supports such
20739 instructions, such as niagara\-3 and later.  Setting \fB\-mvis3\fR
20740 also sets \fB\-mvis2\fR and \fB\-mvis\fR.
20741 .IP "\fB\-mcbcond\fR" 4
20742 .IX Item "-mcbcond"
20743 .PD 0
20744 .IP "\fB\-mno\-cbcond\fR" 4
20745 .IX Item "-mno-cbcond"
20746 .PD
20747 With \fB\-mcbcond\fR, \s-1GCC\s0 generates code that takes advantage of
20748 compare-and-branch instructions, as defined in the Sparc Architecture 2011.
20749 The default is \fB\-mcbcond\fR when targeting a cpu that supports such
20750 instructions, such as niagara\-4 and later.
20751 .IP "\fB\-mpopc\fR" 4
20752 .IX Item "-mpopc"
20753 .PD 0
20754 .IP "\fB\-mno\-popc\fR" 4
20755 .IX Item "-mno-popc"
20756 .PD
20757 With \fB\-mpopc\fR, \s-1GCC\s0 generates code that takes advantage of the UltraSPARC
20758 population count instruction.  The default is \fB\-mpopc\fR
20759 when targeting a cpu that supports such instructions, such as Niagara\-2 and
20760 later.
20761 .IP "\fB\-mfmaf\fR" 4
20762 .IX Item "-mfmaf"
20763 .PD 0
20764 .IP "\fB\-mno\-fmaf\fR" 4
20765 .IX Item "-mno-fmaf"
20766 .PD
20767 With \fB\-mfmaf\fR, \s-1GCC\s0 generates code that takes advantage of the UltraSPARC
20768 Fused Multiply-Add Floating-point extensions.  The default is \fB\-mfmaf\fR
20769 when targeting a cpu that supports such instructions, such as Niagara\-3 and
20770 later.
20771 .IP "\fB\-mfix\-at697f\fR" 4
20772 .IX Item "-mfix-at697f"
20773 Enable the documented workaround for the single erratum of the Atmel \s-1AT697F\s0
20774 processor (which corresponds to erratum #13 of the \s-1AT697E\s0 processor).
20775 .IP "\fB\-mfix\-ut699\fR" 4
20776 .IX Item "-mfix-ut699"
20777 Enable the documented workarounds for the floating-point errata and the data
20778 cache nullify errata of the \s-1UT699\s0 processor.
20779 .PP
20780 These \fB\-m\fR options are supported in addition to the above
20781 on \s-1SPARC\-V9\s0 processors in 64\-bit environments:
20782 .IP "\fB\-m32\fR" 4
20783 .IX Item "-m32"
20784 .PD 0
20785 .IP "\fB\-m64\fR" 4
20786 .IX Item "-m64"
20787 .PD
20788 Generate code for a 32\-bit or 64\-bit environment.
20789 The 32\-bit environment sets int, long and pointer to 32 bits.
20790 The 64\-bit environment sets int to 32 bits and long and pointer
20791 to 64 bits.
20792 .IP "\fB\-mcmodel=\fR\fIwhich\fR" 4
20793 .IX Item "-mcmodel=which"
20794 Set the code model to one of
20795 .RS 4
20796 .IP "\fBmedlow\fR" 4
20797 .IX Item "medlow"
20798 The Medium/Low code model: 64\-bit addresses, programs
20799 must be linked in the low 32 bits of memory.  Programs can be statically
20800 or dynamically linked.
20801 .IP "\fBmedmid\fR" 4
20802 .IX Item "medmid"
20803 The Medium/Middle code model: 64\-bit addresses, programs
20804 must be linked in the low 44 bits of memory, the text and data segments must
20805 be less than 2GB in size and the data segment must be located within 2GB of
20806 the text segment.
20807 .IP "\fBmedany\fR" 4
20808 .IX Item "medany"
20809 The Medium/Anywhere code model: 64\-bit addresses, programs
20810 may be linked anywhere in memory, the text and data segments must be less
20811 than 2GB in size and the data segment must be located within 2GB of the
20812 text segment.
20813 .IP "\fBembmedany\fR" 4
20814 .IX Item "embmedany"
20815 The Medium/Anywhere code model for embedded systems:
20816 64\-bit addresses, the text and data segments must be less than 2GB in
20817 size, both starting anywhere in memory (determined at link time).  The
20818 global register \f(CW%g4\fR points to the base of the data segment.  Programs
20819 are statically linked and \s-1PIC\s0 is not supported.
20820 .RE
20821 .RS 4
20822 .RE
20823 .IP "\fB\-mmemory\-model=\fR\fImem-model\fR" 4
20824 .IX Item "-mmemory-model=mem-model"
20825 Set the memory model in force on the processor to one of
20826 .RS 4
20827 .IP "\fBdefault\fR" 4
20828 .IX Item "default"
20829 The default memory model for the processor and operating system.
20830 .IP "\fBrmo\fR" 4
20831 .IX Item "rmo"
20832 Relaxed Memory Order
20833 .IP "\fBpso\fR" 4
20834 .IX Item "pso"
20835 Partial Store Order
20836 .IP "\fBtso\fR" 4
20837 .IX Item "tso"
20838 Total Store Order
20839 .IP "\fBsc\fR" 4
20840 .IX Item "sc"
20841 Sequential Consistency
20842 .RE
20843 .RS 4
20844 .Sp
20845 These memory models are formally defined in Appendix D of the Sparc V9
20846 architecture manual, as set in the processor's \f(CW\*(C`PSTATE.MM\*(C'\fR field.
20847 .RE
20848 .IP "\fB\-mstack\-bias\fR" 4
20849 .IX Item "-mstack-bias"
20850 .PD 0
20851 .IP "\fB\-mno\-stack\-bias\fR" 4
20852 .IX Item "-mno-stack-bias"
20853 .PD
20854 With \fB\-mstack\-bias\fR, \s-1GCC\s0 assumes that the stack pointer, and
20855 frame pointer if present, are offset by \-2047 which must be added back
20856 when making stack frame references.  This is the default in 64\-bit mode.
20857 Otherwise, assume no such offset is present.
20858 .PP
20859 \fI\s-1SPU\s0 Options\fR
20860 .IX Subsection "SPU Options"
20861 .PP
20862 These \fB\-m\fR options are supported on the \s-1SPU:\s0
20863 .IP "\fB\-mwarn\-reloc\fR" 4
20864 .IX Item "-mwarn-reloc"
20865 .PD 0
20866 .IP "\fB\-merror\-reloc\fR" 4
20867 .IX Item "-merror-reloc"
20868 .PD
20869 The loader for \s-1SPU\s0 does not handle dynamic relocations.  By default, \s-1GCC\s0
20870 gives an error when it generates code that requires a dynamic
20871 relocation.  \fB\-mno\-error\-reloc\fR disables the error,
20872 \&\fB\-mwarn\-reloc\fR generates a warning instead.
20873 .IP "\fB\-msafe\-dma\fR" 4
20874 .IX Item "-msafe-dma"
20875 .PD 0
20876 .IP "\fB\-munsafe\-dma\fR" 4
20877 .IX Item "-munsafe-dma"
20878 .PD
20879 Instructions that initiate or test completion of \s-1DMA\s0 must not be
20880 reordered with respect to loads and stores of the memory that is being
20881 accessed.
20882 With \fB\-munsafe\-dma\fR you must use the \f(CW\*(C`volatile\*(C'\fR keyword to protect
20883 memory accesses, but that can lead to inefficient code in places where the
20884 memory is known to not change.  Rather than mark the memory as volatile,
20885 you can use \fB\-msafe\-dma\fR to tell the compiler to treat
20886 the \s-1DMA\s0 instructions as potentially affecting all memory.
20887 .IP "\fB\-mbranch\-hints\fR" 4
20888 .IX Item "-mbranch-hints"
20889 By default, \s-1GCC\s0 generates a branch hint instruction to avoid
20890 pipeline stalls for always-taken or probably-taken branches.  A hint
20891 is not generated closer than 8 instructions away from its branch.
20892 There is little reason to disable them, except for debugging purposes,
20893 or to make an object a little bit smaller.
20894 .IP "\fB\-msmall\-mem\fR" 4
20895 .IX Item "-msmall-mem"
20896 .PD 0
20897 .IP "\fB\-mlarge\-mem\fR" 4
20898 .IX Item "-mlarge-mem"
20899 .PD
20900 By default, \s-1GCC\s0 generates code assuming that addresses are never larger
20901 than 18 bits.  With \fB\-mlarge\-mem\fR code is generated that assumes
20902 a full 32\-bit address.
20903 .IP "\fB\-mstdmain\fR" 4
20904 .IX Item "-mstdmain"
20905 By default, \s-1GCC\s0 links against startup code that assumes the SPU-style
20906 main function interface (which has an unconventional parameter list).
20907 With \fB\-mstdmain\fR, \s-1GCC\s0 links your program against startup
20908 code that assumes a C99\-style interface to \f(CW\*(C`main\*(C'\fR, including a
20909 local copy of \f(CW\*(C`argv\*(C'\fR strings.
20910 .IP "\fB\-mfixed\-range=\fR\fIregister-range\fR" 4
20911 .IX Item "-mfixed-range=register-range"
20912 Generate code treating the given register range as fixed registers.
20913 A fixed register is one that the register allocator cannot use.  This is
20914 useful when compiling kernel code.  A register range is specified as
20915 two registers separated by a dash.  Multiple register ranges can be
20916 specified separated by a comma.
20917 .IP "\fB\-mea32\fR" 4
20918 .IX Item "-mea32"
20919 .PD 0
20920 .IP "\fB\-mea64\fR" 4
20921 .IX Item "-mea64"
20922 .PD
20923 Compile code assuming that pointers to the \s-1PPU\s0 address space accessed
20924 via the \f(CW\*(C`_\|_ea\*(C'\fR named address space qualifier are either 32 or 64
20925 bits wide.  The default is 32 bits.  As this is an ABI-changing option,
20926 all object code in an executable must be compiled with the same setting.
20927 .IP "\fB\-maddress\-space\-conversion\fR" 4
20928 .IX Item "-maddress-space-conversion"
20929 .PD 0
20930 .IP "\fB\-mno\-address\-space\-conversion\fR" 4
20931 .IX Item "-mno-address-space-conversion"
20932 .PD
20933 Allow/disallow treating the \f(CW\*(C`_\|_ea\*(C'\fR address space as superset
20934 of the generic address space.  This enables explicit type casts
20935 between \f(CW\*(C`_\|_ea\*(C'\fR and generic pointer as well as implicit
20936 conversions of generic pointers to \f(CW\*(C`_\|_ea\*(C'\fR pointers.  The
20937 default is to allow address space pointer conversions.
20938 .IP "\fB\-mcache\-size=\fR\fIcache-size\fR" 4
20939 .IX Item "-mcache-size=cache-size"
20940 This option controls the version of libgcc that the compiler links to an
20941 executable and selects a software-managed cache for accessing variables
20942 in the \f(CW\*(C`_\|_ea\*(C'\fR address space with a particular cache size.  Possible
20943 options for \fIcache-size\fR are \fB8\fR, \fB16\fR, \fB32\fR, \fB64\fR
20944 and \fB128\fR.  The default cache size is 64KB.
20945 .IP "\fB\-matomic\-updates\fR" 4
20946 .IX Item "-matomic-updates"
20947 .PD 0
20948 .IP "\fB\-mno\-atomic\-updates\fR" 4
20949 .IX Item "-mno-atomic-updates"
20950 .PD
20951 This option controls the version of libgcc that the compiler links to an
20952 executable and selects whether atomic updates to the software-managed
20953 cache of PPU-side variables are used.  If you use atomic updates, changes
20954 to a \s-1PPU\s0 variable from \s-1SPU\s0 code using the \f(CW\*(C`_\|_ea\*(C'\fR named address space
20955 qualifier do not interfere with changes to other \s-1PPU\s0 variables residing
20956 in the same cache line from \s-1PPU\s0 code.  If you do not use atomic updates,
20957 such interference may occur; however, writing back cache lines is
20958 more efficient.  The default behavior is to use atomic updates.
20959 .IP "\fB\-mdual\-nops\fR" 4
20960 .IX Item "-mdual-nops"
20961 .PD 0
20962 .IP "\fB\-mdual\-nops=\fR\fIn\fR" 4
20963 .IX Item "-mdual-nops=n"
20964 .PD
20965 By default, \s-1GCC\s0 inserts nops to increase dual issue when it expects
20966 it to increase performance.  \fIn\fR can be a value from 0 to 10.  A
20967 smaller \fIn\fR inserts fewer nops.  10 is the default, 0 is the
20968 same as \fB\-mno\-dual\-nops\fR.  Disabled with \fB\-Os\fR.
20969 .IP "\fB\-mhint\-max\-nops=\fR\fIn\fR" 4
20970 .IX Item "-mhint-max-nops=n"
20971 Maximum number of nops to insert for a branch hint.  A branch hint must
20972 be at least 8 instructions away from the branch it is affecting.  \s-1GCC\s0
20973 inserts up to \fIn\fR nops to enforce this, otherwise it does not
20974 generate the branch hint.
20975 .IP "\fB\-mhint\-max\-distance=\fR\fIn\fR" 4
20976 .IX Item "-mhint-max-distance=n"
20977 The encoding of the branch hint instruction limits the hint to be within
20978 256 instructions of the branch it is affecting.  By default, \s-1GCC\s0 makes
20979 sure it is within 125.
20980 .IP "\fB\-msafe\-hints\fR" 4
20981 .IX Item "-msafe-hints"
20982 Work around a hardware bug that causes the \s-1SPU\s0 to stall indefinitely.
20983 By default, \s-1GCC\s0 inserts the \f(CW\*(C`hbrp\*(C'\fR instruction to make sure
20984 this stall won't happen.
20985 .PP
20986 \fIOptions for System V\fR
20987 .IX Subsection "Options for System V"
20988 .PP
20989 These additional options are available on System V Release 4 for
20990 compatibility with other compilers on those systems:
20991 .IP "\fB\-G\fR" 4
20992 .IX Item "-G"
20993 Create a shared object.
20994 It is recommended that \fB\-symbolic\fR or \fB\-shared\fR be used instead.
20995 .IP "\fB\-Qy\fR" 4
20996 .IX Item "-Qy"
20997 Identify the versions of each tool used by the compiler, in a
20998 \&\f(CW\*(C`.ident\*(C'\fR assembler directive in the output.
20999 .IP "\fB\-Qn\fR" 4
21000 .IX Item "-Qn"
21001 Refrain from adding \f(CW\*(C`.ident\*(C'\fR directives to the output file (this is
21002 the default).
21003 .IP "\fB\-YP,\fR\fIdirs\fR" 4
21004 .IX Item "-YP,dirs"
21005 Search the directories \fIdirs\fR, and no others, for libraries
21006 specified with \fB\-l\fR.
21007 .IP "\fB\-Ym,\fR\fIdir\fR" 4
21008 .IX Item "-Ym,dir"
21009 Look in the directory \fIdir\fR to find the M4 preprocessor.
21010 The assembler uses this option.
21011 .PP
21012 \fITILE-Gx Options\fR
21013 .IX Subsection "TILE-Gx Options"
21014 .PP
21015 These \fB\-m\fR options are supported on the TILE-Gx:
21016 .IP "\fB\-mcmodel=small\fR" 4
21017 .IX Item "-mcmodel=small"
21018 Generate code for the small model.  The distance for direct calls is
21019 limited to 500M in either direction.  PC-relative addresses are 32
21020 bits.  Absolute addresses support the full address range.
21021 .IP "\fB\-mcmodel=large\fR" 4
21022 .IX Item "-mcmodel=large"
21023 Generate code for the large model.  There is no limitation on call
21024 distance, pc-relative addresses, or absolute addresses.
21025 .IP "\fB\-mcpu=\fR\fIname\fR" 4
21026 .IX Item "-mcpu=name"
21027 Selects the type of \s-1CPU\s0 to be targeted.  Currently the only supported
21028 type is \fBtilegx\fR.
21029 .IP "\fB\-m32\fR" 4
21030 .IX Item "-m32"
21031 .PD 0
21032 .IP "\fB\-m64\fR" 4
21033 .IX Item "-m64"
21034 .PD
21035 Generate code for a 32\-bit or 64\-bit environment.  The 32\-bit
21036 environment sets int, long, and pointer to 32 bits.  The 64\-bit
21037 environment sets int to 32 bits and long and pointer to 64 bits.
21038 .IP "\fB\-mbig\-endian\fR" 4
21039 .IX Item "-mbig-endian"
21040 .PD 0
21041 .IP "\fB\-mlittle\-endian\fR" 4
21042 .IX Item "-mlittle-endian"
21043 .PD
21044 Generate code in big/little endian mode, respectively.
21045 .PP
21046 \fITILEPro Options\fR
21047 .IX Subsection "TILEPro Options"
21048 .PP
21049 These \fB\-m\fR options are supported on the TILEPro:
21050 .IP "\fB\-mcpu=\fR\fIname\fR" 4
21051 .IX Item "-mcpu=name"
21052 Selects the type of \s-1CPU\s0 to be targeted.  Currently the only supported
21053 type is \fBtilepro\fR.
21054 .IP "\fB\-m32\fR" 4
21055 .IX Item "-m32"
21056 Generate code for a 32\-bit environment, which sets int, long, and
21057 pointer to 32 bits.  This is the only supported behavior so the flag
21058 is essentially ignored.
21059 .PP
21060 \fIV850 Options\fR
21061 .IX Subsection "V850 Options"
21062 .PP
21063 These \fB\-m\fR options are defined for V850 implementations:
21064 .IP "\fB\-mlong\-calls\fR" 4
21065 .IX Item "-mlong-calls"
21066 .PD 0
21067 .IP "\fB\-mno\-long\-calls\fR" 4
21068 .IX Item "-mno-long-calls"
21069 .PD
21070 Treat all calls as being far away (near).  If calls are assumed to be
21071 far away, the compiler always loads the function's address into a
21072 register, and calls indirect through the pointer.
21073 .IP "\fB\-mno\-ep\fR" 4
21074 .IX Item "-mno-ep"
21075 .PD 0
21076 .IP "\fB\-mep\fR" 4
21077 .IX Item "-mep"
21078 .PD
21079 Do not optimize (do optimize) basic blocks that use the same index
21080 pointer 4 or more times to copy pointer into the \f(CW\*(C`ep\*(C'\fR register, and
21081 use the shorter \f(CW\*(C`sld\*(C'\fR and \f(CW\*(C`sst\*(C'\fR instructions.  The \fB\-mep\fR
21082 option is on by default if you optimize.
21083 .IP "\fB\-mno\-prolog\-function\fR" 4
21084 .IX Item "-mno-prolog-function"
21085 .PD 0
21086 .IP "\fB\-mprolog\-function\fR" 4
21087 .IX Item "-mprolog-function"
21088 .PD
21089 Do not use (do use) external functions to save and restore registers
21090 at the prologue and epilogue of a function.  The external functions
21091 are slower, but use less code space if more than one function saves
21092 the same number of registers.  The \fB\-mprolog\-function\fR option
21093 is on by default if you optimize.
21094 .IP "\fB\-mspace\fR" 4
21095 .IX Item "-mspace"
21096 Try to make the code as small as possible.  At present, this just turns
21097 on the \fB\-mep\fR and \fB\-mprolog\-function\fR options.
21098 .IP "\fB\-mtda=\fR\fIn\fR" 4
21099 .IX Item "-mtda=n"
21100 Put static or global variables whose size is \fIn\fR bytes or less into
21101 the tiny data area that register \f(CW\*(C`ep\*(C'\fR points to.  The tiny data
21102 area can hold up to 256 bytes in total (128 bytes for byte references).
21103 .IP "\fB\-msda=\fR\fIn\fR" 4
21104 .IX Item "-msda=n"
21105 Put static or global variables whose size is \fIn\fR bytes or less into
21106 the small data area that register \f(CW\*(C`gp\*(C'\fR points to.  The small data
21107 area can hold up to 64 kilobytes.
21108 .IP "\fB\-mzda=\fR\fIn\fR" 4
21109 .IX Item "-mzda=n"
21110 Put static or global variables whose size is \fIn\fR bytes or less into
21111 the first 32 kilobytes of memory.
21112 .IP "\fB\-mv850\fR" 4
21113 .IX Item "-mv850"
21114 Specify that the target processor is the V850.
21115 .IP "\fB\-mv850e3v5\fR" 4
21116 .IX Item "-mv850e3v5"
21117 Specify that the target processor is the V850E3V5.  The preprocessor
21118 constant \f(CW\*(C`_\|_v850e3v5_\|_\*(C'\fR is defined if this option is used.
21119 .IP "\fB\-mv850e2v4\fR" 4
21120 .IX Item "-mv850e2v4"
21121 Specify that the target processor is the V850E3V5.  This is an alias for
21122 the \fB\-mv850e3v5\fR option.
21123 .IP "\fB\-mv850e2v3\fR" 4
21124 .IX Item "-mv850e2v3"
21125 Specify that the target processor is the V850E2V3.  The preprocessor
21126 constant \f(CW\*(C`_\|_v850e2v3_\|_\*(C'\fR is defined if this option is used.
21127 .IP "\fB\-mv850e2\fR" 4
21128 .IX Item "-mv850e2"
21129 Specify that the target processor is the V850E2.  The preprocessor
21130 constant \f(CW\*(C`_\|_v850e2_\|_\*(C'\fR is defined if this option is used.
21131 .IP "\fB\-mv850e1\fR" 4
21132 .IX Item "-mv850e1"
21133 Specify that the target processor is the V850E1.  The preprocessor
21134 constants \f(CW\*(C`_\|_v850e1_\|_\*(C'\fR and \f(CW\*(C`_\|_v850e_\|_\*(C'\fR are defined if
21135 this option is used.
21136 .IP "\fB\-mv850es\fR" 4
21137 .IX Item "-mv850es"
21138 Specify that the target processor is the V850ES.  This is an alias for
21139 the \fB\-mv850e1\fR option.
21140 .IP "\fB\-mv850e\fR" 4
21141 .IX Item "-mv850e"
21142 Specify that the target processor is the V850E.  The preprocessor
21143 constant \f(CW\*(C`_\|_v850e_\|_\*(C'\fR is defined if this option is used.
21144 .Sp
21145 If neither \fB\-mv850\fR nor \fB\-mv850e\fR nor \fB\-mv850e1\fR
21146 nor \fB\-mv850e2\fR nor \fB\-mv850e2v3\fR nor \fB\-mv850e3v5\fR
21147 are defined then a default target processor is chosen and the
21148 relevant \fB_\|_v850*_\|_\fR preprocessor constant is defined.
21149 .Sp
21150 The preprocessor constants \f(CW\*(C`_\|_v850\*(C'\fR and \f(CW\*(C`_\|_v851_\|_\*(C'\fR are always
21151 defined, regardless of which processor variant is the target.
21152 .IP "\fB\-mdisable\-callt\fR" 4
21153 .IX Item "-mdisable-callt"
21154 .PD 0
21155 .IP "\fB\-mno\-disable\-callt\fR" 4
21156 .IX Item "-mno-disable-callt"
21157 .PD
21158 This option suppresses generation of the \f(CW\*(C`CALLT\*(C'\fR instruction for the
21159 v850e, v850e1, v850e2, v850e2v3 and v850e3v5 flavors of the v850
21160 architecture.
21161 .Sp
21162 This option is enabled by default when the \s-1RH850\s0 \s-1ABI\s0 is
21163 in use (see \fB\-mrh850\-abi\fR), and disabled by default when the
21164 \&\s-1GCC\s0 \s-1ABI\s0 is in use.  If \f(CW\*(C`CALLT\*(C'\fR instructions are being generated
21165 then the C preprocessor symbol \f(CW\*(C`_\|_V850_CALLT_\|_\*(C'\fR is defined.
21166 .IP "\fB\-mrelax\fR" 4
21167 .IX Item "-mrelax"
21168 .PD 0
21169 .IP "\fB\-mno\-relax\fR" 4
21170 .IX Item "-mno-relax"
21171 .PD
21172 Pass on (or do not pass on) the \fB\-mrelax\fR command line option
21173 to the assembler.
21174 .IP "\fB\-mlong\-jumps\fR" 4
21175 .IX Item "-mlong-jumps"
21176 .PD 0
21177 .IP "\fB\-mno\-long\-jumps\fR" 4
21178 .IX Item "-mno-long-jumps"
21179 .PD
21180 Disable (or re-enable) the generation of PC-relative jump instructions.
21181 .IP "\fB\-msoft\-float\fR" 4
21182 .IX Item "-msoft-float"
21183 .PD 0
21184 .IP "\fB\-mhard\-float\fR" 4
21185 .IX Item "-mhard-float"
21186 .PD
21187 Disable (or re-enable) the generation of hardware floating point
21188 instructions.  This option is only significant when the target
21189 architecture is \fBV850E2V3\fR or higher.  If hardware floating point
21190 instructions are being generated then the C preprocessor symbol
21191 \&\f(CW\*(C`_\|_FPU_OK_\|_\*(C'\fR is defined, otherwise the symbol
21192 \&\f(CW\*(C`_\|_NO_FPU_\|_\*(C'\fR is defined.
21193 .IP "\fB\-mloop\fR" 4
21194 .IX Item "-mloop"
21195 Enables the use of the e3v5 \s-1LOOP\s0 instruction.  The use of this
21196 instruction is not enabled by default when the e3v5 architecture is
21197 selected because its use is still experimental.
21198 .IP "\fB\-mrh850\-abi\fR" 4
21199 .IX Item "-mrh850-abi"
21200 .PD 0
21201 .IP "\fB\-mghs\fR" 4
21202 .IX Item "-mghs"
21203 .PD
21204 Enables support for the \s-1RH850\s0 version of the V850 \s-1ABI\s0.  This is the
21205 default.  With this version of the \s-1ABI\s0 the following rules apply:
21206 .RS 4
21207 .IP "*" 4
21208 Integer sized structures and unions are returned via a memory pointer
21209 rather than a register.
21210 .IP "*" 4
21211 Large structures and unions (more than 8 bytes in size) are passed by
21212 value.
21213 .IP "*" 4
21214 Functions are aligned to 16\-bit boundaries.
21215 .IP "*" 4
21216 The \fB\-m8byte\-align\fR command line option is supported.
21217 .IP "*" 4
21218 The \fB\-mdisable\-callt\fR command line option is enabled by
21219 default.  The \fB\-mno\-disable\-callt\fR command line option is not
21220 supported.
21221 .RE
21222 .RS 4
21223 .Sp
21224 When this version of the \s-1ABI\s0 is enabled the C preprocessor symbol
21225 \&\f(CW\*(C`_\|_V850_RH850_ABI_\|_\*(C'\fR is defined.
21226 .RE
21227 .IP "\fB\-mgcc\-abi\fR" 4
21228 .IX Item "-mgcc-abi"
21229 Enables support for the old \s-1GCC\s0 version of the V850 \s-1ABI\s0.  With this
21230 version of the \s-1ABI\s0 the following rules apply:
21231 .RS 4
21232 .IP "*" 4
21233 Integer sized structures and unions are returned in register \f(CW\*(C`r10\*(C'\fR.
21234 .IP "*" 4
21235 Large structures and unions (more than 8 bytes in size) are passed by
21236 reference.
21237 .IP "*" 4
21238 Functions are aligned to 32\-bit boundaries, unless optimizing for
21239 size.
21240 .IP "*" 4
21241 The \fB\-m8byte\-align\fR command line option is not supported.
21242 .IP "*" 4
21243 The \fB\-mdisable\-callt\fR command line option is supported but not
21244 enabled by default.
21245 .RE
21246 .RS 4
21247 .Sp
21248 When this version of the \s-1ABI\s0 is enabled the C preprocessor symbol
21249 \&\f(CW\*(C`_\|_V850_GCC_ABI_\|_\*(C'\fR is defined.
21250 .RE
21251 .IP "\fB\-m8byte\-align\fR" 4
21252 .IX Item "-m8byte-align"
21253 .PD 0
21254 .IP "\fB\-mno\-8byte\-align\fR" 4
21255 .IX Item "-mno-8byte-align"
21256 .PD
21257 Enables support for \f(CW\*(C`double\*(C'\fR and \f(CW\*(C`long long\*(C'\fR types to be
21258 aligned on 8\-byte boundaries.  The default is to restrict the
21259 alignment of all objects to at most 4\-bytes.  When
21260 \&\fB\-m8byte\-align\fR is in effect the C preprocessor symbol
21261 \&\f(CW\*(C`_\|_V850_8BYTE_ALIGN_\|_\*(C'\fR is defined.
21262 .IP "\fB\-mbig\-switch\fR" 4
21263 .IX Item "-mbig-switch"
21264 Generate code suitable for big switch tables.  Use this option only if
21265 the assembler/linker complain about out of range branches within a switch
21266 table.
21267 .IP "\fB\-mapp\-regs\fR" 4
21268 .IX Item "-mapp-regs"
21269 This option causes r2 and r5 to be used in the code generated by
21270 the compiler.  This setting is the default.
21271 .IP "\fB\-mno\-app\-regs\fR" 4
21272 .IX Item "-mno-app-regs"
21273 This option causes r2 and r5 to be treated as fixed registers.
21274 .PP
21275 \fI\s-1VAX\s0 Options\fR
21276 .IX Subsection "VAX Options"
21277 .PP
21278 These \fB\-m\fR options are defined for the \s-1VAX:\s0
21279 .IP "\fB\-munix\fR" 4
21280 .IX Item "-munix"
21281 Do not output certain jump instructions (\f(CW\*(C`aobleq\*(C'\fR and so on)
21282 that the Unix assembler for the \s-1VAX\s0 cannot handle across long
21283 ranges.
21284 .IP "\fB\-mgnu\fR" 4
21285 .IX Item "-mgnu"
21286 Do output those jump instructions, on the assumption that the
21287 \&\s-1GNU\s0 assembler is being used.
21288 .IP "\fB\-mg\fR" 4
21289 .IX Item "-mg"
21290 Output code for G\-format floating-point numbers instead of D\-format.
21291 .PP
21292 \fIVisium Options\fR
21293 .IX Subsection "Visium Options"
21294 .IP "\fB\-mdebug\fR" 4
21295 .IX Item "-mdebug"
21296 A program which performs file I/O and is destined to run on an \s-1MCM\s0 target
21297 should be linked with this option.  It causes the libraries libc.a and
21298 libdebug.a to be linked.  The program should be run on the target under
21299 the control of the \s-1GDB\s0 remote debugging stub.
21300 .IP "\fB\-msim\fR" 4
21301 .IX Item "-msim"
21302 A program which performs file I/O and is destined to run on the simulator
21303 should be linked with option.  This causes libraries libc.a and libsim.a to
21304 be linked.
21305 .IP "\fB\-mfpu\fR" 4
21306 .IX Item "-mfpu"
21307 .PD 0
21308 .IP "\fB\-mhard\-float\fR" 4
21309 .IX Item "-mhard-float"
21310 .PD
21311 Generate code containing floating-point instructions.  This is the
21312 default.
21313 .IP "\fB\-mno\-fpu\fR" 4
21314 .IX Item "-mno-fpu"
21315 .PD 0
21316 .IP "\fB\-msoft\-float\fR" 4
21317 .IX Item "-msoft-float"
21318 .PD
21319 Generate code containing library calls for floating-point.
21320 .Sp
21321 \&\fB\-msoft\-float\fR changes the calling convention in the output file;
21322 therefore, it is only useful if you compile \fIall\fR of a program with
21323 this option.  In particular, you need to compile \fIlibgcc.a\fR, the
21324 library that comes with \s-1GCC\s0, with \fB\-msoft\-float\fR in order for
21325 this to work.
21326 .IP "\fB\-mcpu=\fR\fIcpu_type\fR" 4
21327 .IX Item "-mcpu=cpu_type"
21328 Set the instruction set, register set, and instruction scheduling parameters
21329 for machine type \fIcpu_type\fR.  Supported values for \fIcpu_type\fR are
21330 \&\fBmcm\fR, \fBgr5\fR and \fBgr6\fR.
21331 .Sp
21332 \&\fBmcm\fR is a synonym of \fBgr5\fR present for backward compatibility.
21333 .Sp
21334 By default (unless configured otherwise), \s-1GCC\s0 generates code for the \s-1GR5\s0
21335 variant of the Visium architecture.
21336 .Sp
21337 With \fB\-mcpu=gr6\fR, \s-1GCC\s0 generates code for the \s-1GR6\s0 variant of the Visium
21338 architecture.  The only difference from \s-1GR5\s0 code is that the compiler will
21339 generate block move instructions.
21340 .IP "\fB\-mtune=\fR\fIcpu_type\fR" 4
21341 .IX Item "-mtune=cpu_type"
21342 Set the instruction scheduling parameters for machine type \fIcpu_type\fR,
21343 but do not set the instruction set or register set that the option
21344 \&\fB\-mcpu=\fR\fIcpu_type\fR would.
21345 .IP "\fB\-msv\-mode\fR" 4
21346 .IX Item "-msv-mode"
21347 Generate code for the supervisor mode, where there are no restrictions on
21348 the access to general registers.  This is the default.
21349 .IP "\fB\-muser\-mode\fR" 4
21350 .IX Item "-muser-mode"
21351 Generate code for the user mode, where the access to some general registers
21352 is forbidden: on the \s-1GR5\s0, registers r24 to r31 cannot be accessed in this
21353 mode; on the \s-1GR6\s0, only registers r29 to r31 are affected.
21354 .PP
21355 \fI\s-1VMS\s0 Options\fR
21356 .IX Subsection "VMS Options"
21357 .PP
21358 These \fB\-m\fR options are defined for the \s-1VMS\s0 implementations:
21359 .IP "\fB\-mvms\-return\-codes\fR" 4
21360 .IX Item "-mvms-return-codes"
21361 Return \s-1VMS\s0 condition codes from \f(CW\*(C`main\*(C'\fR. The default is to return POSIX-style
21362 condition (e.g. error) codes.
21363 .IP "\fB\-mdebug\-main=\fR\fIprefix\fR" 4
21364 .IX Item "-mdebug-main=prefix"
21365 Flag the first routine whose name starts with \fIprefix\fR as the main
21366 routine for the debugger.
21367 .IP "\fB\-mmalloc64\fR" 4
21368 .IX Item "-mmalloc64"
21369 Default to 64\-bit memory allocation routines.
21370 .IP "\fB\-mpointer\-size=\fR\fIsize\fR" 4
21371 .IX Item "-mpointer-size=size"
21372 Set the default size of pointers. Possible options for \fIsize\fR are
21373 \&\fB32\fR or \fBshort\fR for 32 bit pointers, \fB64\fR or \fBlong\fR
21374 for 64 bit pointers, and \fBno\fR for supporting only 32 bit pointers.
21375 The later option disables \f(CW\*(C`pragma pointer_size\*(C'\fR.
21376 .PP
21377 \fIVxWorks Options\fR
21378 .IX Subsection "VxWorks Options"
21379 .PP
21380 The options in this section are defined for all VxWorks targets.
21381 Options specific to the target hardware are listed with the other
21382 options for that target.
21383 .IP "\fB\-mrtp\fR" 4
21384 .IX Item "-mrtp"
21385 \&\s-1GCC\s0 can generate code for both VxWorks kernels and real time processes
21386 (RTPs).  This option switches from the former to the latter.  It also
21387 defines the preprocessor macro \f(CW\*(C`_\|_RTP_\|_\*(C'\fR.
21388 .IP "\fB\-non\-static\fR" 4
21389 .IX Item "-non-static"
21390 Link an \s-1RTP\s0 executable against shared libraries rather than static
21391 libraries.  The options \fB\-static\fR and \fB\-shared\fR can
21392 also be used for RTPs; \fB\-static\fR
21393 is the default.
21394 .IP "\fB\-Bstatic\fR" 4
21395 .IX Item "-Bstatic"
21396 .PD 0
21397 .IP "\fB\-Bdynamic\fR" 4
21398 .IX Item "-Bdynamic"
21399 .PD
21400 These options are passed down to the linker.  They are defined for
21401 compatibility with Diab.
21402 .IP "\fB\-Xbind\-lazy\fR" 4
21403 .IX Item "-Xbind-lazy"
21404 Enable lazy binding of function calls.  This option is equivalent to
21405 \&\fB\-Wl,\-z,now\fR and is defined for compatibility with Diab.
21406 .IP "\fB\-Xbind\-now\fR" 4
21407 .IX Item "-Xbind-now"
21408 Disable lazy binding of function calls.  This option is the default and
21409 is defined for compatibility with Diab.
21410 .PP
21411 \fIx86\-64 Options\fR
21412 .IX Subsection "x86-64 Options"
21413 .PP
21414 These are listed under
21415 .PP
21416 \fIXstormy16 Options\fR
21417 .IX Subsection "Xstormy16 Options"
21418 .PP
21419 These options are defined for Xstormy16:
21420 .IP "\fB\-msim\fR" 4
21421 .IX Item "-msim"
21422 Choose startup files and linker script suitable for the simulator.
21423 .PP
21424 \fIXtensa Options\fR
21425 .IX Subsection "Xtensa Options"
21426 .PP
21427 These options are supported for Xtensa targets:
21428 .IP "\fB\-mconst16\fR" 4
21429 .IX Item "-mconst16"
21430 .PD 0
21431 .IP "\fB\-mno\-const16\fR" 4
21432 .IX Item "-mno-const16"
21433 .PD
21434 Enable or disable use of \f(CW\*(C`CONST16\*(C'\fR instructions for loading
21435 constant values.  The \f(CW\*(C`CONST16\*(C'\fR instruction is currently not a
21436 standard option from Tensilica.  When enabled, \f(CW\*(C`CONST16\*(C'\fR
21437 instructions are always used in place of the standard \f(CW\*(C`L32R\*(C'\fR
21438 instructions.  The use of \f(CW\*(C`CONST16\*(C'\fR is enabled by default only if
21439 the \f(CW\*(C`L32R\*(C'\fR instruction is not available.
21440 .IP "\fB\-mfused\-madd\fR" 4
21441 .IX Item "-mfused-madd"
21442 .PD 0
21443 .IP "\fB\-mno\-fused\-madd\fR" 4
21444 .IX Item "-mno-fused-madd"
21445 .PD
21446 Enable or disable use of fused multiply/add and multiply/subtract
21447 instructions in the floating-point option.  This has no effect if the
21448 floating-point option is not also enabled.  Disabling fused multiply/add
21449 and multiply/subtract instructions forces the compiler to use separate
21450 instructions for the multiply and add/subtract operations.  This may be
21451 desirable in some cases where strict \s-1IEEE\s0 754\-compliant results are
21452 required: the fused multiply add/subtract instructions do not round the
21453 intermediate result, thereby producing results with \fImore\fR bits of
21454 precision than specified by the \s-1IEEE\s0 standard.  Disabling fused multiply
21455 add/subtract instructions also ensures that the program output is not
21456 sensitive to the compiler's ability to combine multiply and add/subtract
21457 operations.
21458 .IP "\fB\-mserialize\-volatile\fR" 4
21459 .IX Item "-mserialize-volatile"
21460 .PD 0
21461 .IP "\fB\-mno\-serialize\-volatile\fR" 4
21462 .IX Item "-mno-serialize-volatile"
21463 .PD
21464 When this option is enabled, \s-1GCC\s0 inserts \f(CW\*(C`MEMW\*(C'\fR instructions before
21465 \&\f(CW\*(C`volatile\*(C'\fR memory references to guarantee sequential consistency.
21466 The default is \fB\-mserialize\-volatile\fR.  Use
21467 \&\fB\-mno\-serialize\-volatile\fR to omit the \f(CW\*(C`MEMW\*(C'\fR instructions.
21468 .IP "\fB\-mforce\-no\-pic\fR" 4
21469 .IX Item "-mforce-no-pic"
21470 For targets, like GNU/Linux, where all user-mode Xtensa code must be
21471 position-independent code (\s-1PIC\s0), this option disables \s-1PIC\s0 for compiling
21472 kernel code.
21473 .IP "\fB\-mtext\-section\-literals\fR" 4
21474 .IX Item "-mtext-section-literals"
21475 .PD 0
21476 .IP "\fB\-mno\-text\-section\-literals\fR" 4
21477 .IX Item "-mno-text-section-literals"
21478 .PD
21479 These options control the treatment of literal pools.  The default is
21480 \&\fB\-mno\-text\-section\-literals\fR, which places literals in a separate
21481 section in the output file.  This allows the literal pool to be placed
21482 in a data \s-1RAM/ROM\s0, and it also allows the linker to combine literal
21483 pools from separate object files to remove redundant literals and
21484 improve code size.  With \fB\-mtext\-section\-literals\fR, the literals
21485 are interspersed in the text section in order to keep them as close as
21486 possible to their references.  This may be necessary for large assembly
21487 files.
21488 .IP "\fB\-mtarget\-align\fR" 4
21489 .IX Item "-mtarget-align"
21490 .PD 0
21491 .IP "\fB\-mno\-target\-align\fR" 4
21492 .IX Item "-mno-target-align"
21493 .PD
21494 When this option is enabled, \s-1GCC\s0 instructs the assembler to
21495 automatically align instructions to reduce branch penalties at the
21496 expense of some code density.  The assembler attempts to widen density
21497 instructions to align branch targets and the instructions following call
21498 instructions.  If there are not enough preceding safe density
21499 instructions to align a target, no widening is performed.  The
21500 default is \fB\-mtarget\-align\fR.  These options do not affect the
21501 treatment of auto-aligned instructions like \f(CW\*(C`LOOP\*(C'\fR, which the
21502 assembler always aligns, either by widening density instructions or
21503 by inserting \s-1NOP\s0 instructions.
21504 .IP "\fB\-mlongcalls\fR" 4
21505 .IX Item "-mlongcalls"
21506 .PD 0
21507 .IP "\fB\-mno\-longcalls\fR" 4
21508 .IX Item "-mno-longcalls"
21509 .PD
21510 When this option is enabled, \s-1GCC\s0 instructs the assembler to translate
21511 direct calls to indirect calls unless it can determine that the target
21512 of a direct call is in the range allowed by the call instruction.  This
21513 translation typically occurs for calls to functions in other source
21514 files.  Specifically, the assembler translates a direct \f(CW\*(C`CALL\*(C'\fR
21515 instruction into an \f(CW\*(C`L32R\*(C'\fR followed by a \f(CW\*(C`CALLX\*(C'\fR instruction.
21516 The default is \fB\-mno\-longcalls\fR.  This option should be used in
21517 programs where the call target can potentially be out of range.  This
21518 option is implemented in the assembler, not the compiler, so the
21519 assembly code generated by \s-1GCC\s0 still shows direct call
21520 instructions\-\-\-look at the disassembled object code to see the actual
21521 instructions.  Note that the assembler uses an indirect call for
21522 every cross-file call, not just those that really are out of range.
21523 .PP
21524 \fIzSeries Options\fR
21525 .IX Subsection "zSeries Options"
21526 .PP
21527 These are listed under
21528 .SS "Options for Code Generation Conventions"
21529 .IX Subsection "Options for Code Generation Conventions"
21530 These machine-independent options control the interface conventions
21531 used in code generation.
21532 .PP
21533 Most of them have both positive and negative forms; the negative form
21534 of \fB\-ffoo\fR is \fB\-fno\-foo\fR.  In the table below, only
21535 one of the forms is listed\-\-\-the one that is not the default.  You
21536 can figure out the other form by either removing \fBno\-\fR or adding
21537 it.
21538 .IP "\fB\-fbounds\-check\fR" 4
21539 .IX Item "-fbounds-check"
21540 For front ends that support it, generate additional code to check that
21541 indices used to access arrays are within the declared range.  This is
21542 currently only supported by the Java and Fortran front ends, where
21543 this option defaults to true and false respectively.
21544 .IP "\fB\-fstack\-reuse=\fR\fIreuse-level\fR" 4
21545 .IX Item "-fstack-reuse=reuse-level"
21546 This option controls stack space reuse for user declared local/auto variables
21547 and compiler generated temporaries.  \fIreuse_level\fR can be \fBall\fR,
21548 \&\fBnamed_vars\fR, or \fBnone\fR. \fBall\fR enables stack reuse for all
21549 local variables and temporaries, \fBnamed_vars\fR enables the reuse only for
21550 user defined local variables with names, and \fBnone\fR disables stack reuse
21551 completely. The default value is \fBall\fR. The option is needed when the
21552 program extends the lifetime of a scoped local variable or a compiler generated
21553 temporary beyond the end point defined by the language.  When a lifetime of
21554 a variable ends, and if the variable lives in memory, the optimizing compiler
21555 has the freedom to reuse its stack space with other temporaries or scoped
21556 local variables whose live range does not overlap with it. Legacy code extending
21557 local lifetime is likely to break with the stack reuse optimization.
21558 .Sp
21559 For example,
21560 .Sp
21561 .Vb 3
21562 \&           int *p;
21563 \&           {
21564 \&             int local1;
21565 \&        
21566 \&             p = &local1;
21567 \&             local1 = 10;
21568 \&             ....
21569 \&           }
21570 \&           {
21571 \&              int local2;
21572 \&              local2 = 20;
21573 \&              ...
21574 \&           }
21575 \&        
21576 \&           if (*p == 10)  // out of scope use of local1
21577 \&             {
21578 \&        
21579 \&             }
21580 .Ve
21581 .Sp
21582 Another example:
21583 .Sp
21584 .Vb 6
21585 \&           struct A
21586 \&           {
21587 \&               A(int k) : i(k), j(k) { }
21588 \&               int i;
21589 \&               int j;
21590 \&           };
21591 \&        
21592 \&           A *ap;
21593 \&        
21594 \&           void foo(const A& ar)
21595 \&           {
21596 \&              ap = &ar;
21597 \&           }
21598 \&        
21599 \&           void bar()
21600 \&           {
21601 \&              foo(A(10)); // temp object\*(Aqs lifetime ends when foo returns
21602 \&        
21603 \&              {
21604 \&                A a(20);
21605 \&                ....
21606 \&              }
21607 \&              ap\->i+= 10;  // ap references out of scope temp whose space
21608 \&                           // is reused with a. What is the value of ap\->i?
21609 \&           }
21610 .Ve
21611 .Sp
21612 The lifetime of a compiler generated temporary is well defined by the \*(C+
21613 standard. When a lifetime of a temporary ends, and if the temporary lives
21614 in memory, the optimizing compiler has the freedom to reuse its stack
21615 space with other temporaries or scoped local variables whose live range
21616 does not overlap with it. However some of the legacy code relies on
21617 the behavior of older compilers in which temporaries' stack space is
21618 not reused, the aggressive stack reuse can lead to runtime errors. This
21619 option is used to control the temporary stack reuse optimization.
21620 .IP "\fB\-ftrapv\fR" 4
21621 .IX Item "-ftrapv"
21622 This option generates traps for signed overflow on addition, subtraction,
21623 multiplication operations.
21624 .IP "\fB\-fwrapv\fR" 4
21625 .IX Item "-fwrapv"
21626 This option instructs the compiler to assume that signed arithmetic
21627 overflow of addition, subtraction and multiplication wraps around
21628 using twos-complement representation.  This flag enables some optimizations
21629 and disables others.  This option is enabled by default for the Java
21630 front end, as required by the Java language specification.
21631 .IP "\fB\-fexceptions\fR" 4
21632 .IX Item "-fexceptions"
21633 Enable exception handling.  Generates extra code needed to propagate
21634 exceptions.  For some targets, this implies \s-1GCC\s0 generates frame
21635 unwind information for all functions, which can produce significant data
21636 size overhead, although it does not affect execution.  If you do not
21637 specify this option, \s-1GCC\s0 enables it by default for languages like
21638 \&\*(C+ that normally require exception handling, and disables it for
21639 languages like C that do not normally require it.  However, you may need
21640 to enable this option when compiling C code that needs to interoperate
21641 properly with exception handlers written in \*(C+.  You may also wish to
21642 disable this option if you are compiling older \*(C+ programs that don't
21643 use exception handling.
21644 .IP "\fB\-fnon\-call\-exceptions\fR" 4
21645 .IX Item "-fnon-call-exceptions"
21646 Generate code that allows trapping instructions to throw exceptions.
21647 Note that this requires platform-specific runtime support that does
21648 not exist everywhere.  Moreover, it only allows \fItrapping\fR
21649 instructions to throw exceptions, i.e. memory references or floating-point
21650 instructions.  It does not allow exceptions to be thrown from
21651 arbitrary signal handlers such as \f(CW\*(C`SIGALRM\*(C'\fR.
21652 .IP "\fB\-fdelete\-dead\-exceptions\fR" 4
21653 .IX Item "-fdelete-dead-exceptions"
21654 Consider that instructions that may throw exceptions but don't otherwise
21655 contribute to the execution of the program can be optimized away.
21656 This option is enabled by default for the Ada front end, as permitted by
21657 the Ada language specification.
21658 Optimization passes that cause dead exceptions to be removed are enabled independently at different optimization levels.
21659 .IP "\fB\-funwind\-tables\fR" 4
21660 .IX Item "-funwind-tables"
21661 Similar to \fB\-fexceptions\fR, except that it just generates any needed
21662 static data, but does not affect the generated code in any other way.
21663 You normally do not need to enable this option; instead, a language processor
21664 that needs this handling enables it on your behalf.
21665 .IP "\fB\-fasynchronous\-unwind\-tables\fR" 4
21666 .IX Item "-fasynchronous-unwind-tables"
21667 Generate unwind table in \s-1DWARF\s0 2 format, if supported by target machine.  The
21668 table is exact at each instruction boundary, so it can be used for stack
21669 unwinding from asynchronous events (such as debugger or garbage collector).
21670 .IP "\fB\-fno\-gnu\-unique\fR" 4
21671 .IX Item "-fno-gnu-unique"
21672 On systems with recent \s-1GNU\s0 assembler and C library, the \*(C+ compiler
21673 uses the \f(CW\*(C`STB_GNU_UNIQUE\*(C'\fR binding to make sure that definitions
21674 of template static data members and static local variables in inline
21675 functions are unique even in the presence of \f(CW\*(C`RTLD_LOCAL\*(C'\fR; this
21676 is necessary to avoid problems with a library used by two different
21677 \&\f(CW\*(C`RTLD_LOCAL\*(C'\fR plugins depending on a definition in one of them and
21678 therefore disagreeing with the other one about the binding of the
21679 symbol.  But this causes \f(CW\*(C`dlclose\*(C'\fR to be ignored for affected
21680 DSOs; if your program relies on reinitialization of a \s-1DSO\s0 via
21681 \&\f(CW\*(C`dlclose\*(C'\fR and \f(CW\*(C`dlopen\*(C'\fR, you can use
21682 \&\fB\-fno\-gnu\-unique\fR.
21683 .IP "\fB\-fpcc\-struct\-return\fR" 4
21684 .IX Item "-fpcc-struct-return"
21685 Return \*(L"short\*(R" \f(CW\*(C`struct\*(C'\fR and \f(CW\*(C`union\*(C'\fR values in memory like
21686 longer ones, rather than in registers.  This convention is less
21687 efficient, but it has the advantage of allowing intercallability between
21688 GCC-compiled files and files compiled with other compilers, particularly
21689 the Portable C Compiler (pcc).
21690 .Sp
21691 The precise convention for returning structures in memory depends
21692 on the target configuration macros.
21693 .Sp
21694 Short structures and unions are those whose size and alignment match
21695 that of some integer type.
21696 .Sp
21697 \&\fBWarning:\fR code compiled with the \fB\-fpcc\-struct\-return\fR
21698 switch is not binary compatible with code compiled with the
21699 \&\fB\-freg\-struct\-return\fR switch.
21700 Use it to conform to a non-default application binary interface.
21701 .IP "\fB\-freg\-struct\-return\fR" 4
21702 .IX Item "-freg-struct-return"
21703 Return \f(CW\*(C`struct\*(C'\fR and \f(CW\*(C`union\*(C'\fR values in registers when possible.
21704 This is more efficient for small structures than
21705 \&\fB\-fpcc\-struct\-return\fR.
21706 .Sp
21707 If you specify neither \fB\-fpcc\-struct\-return\fR nor
21708 \&\fB\-freg\-struct\-return\fR, \s-1GCC\s0 defaults to whichever convention is
21709 standard for the target.  If there is no standard convention, \s-1GCC\s0
21710 defaults to \fB\-fpcc\-struct\-return\fR, except on targets where \s-1GCC\s0 is
21711 the principal compiler.  In those cases, we can choose the standard, and
21712 we chose the more efficient register return alternative.
21713 .Sp
21714 \&\fBWarning:\fR code compiled with the \fB\-freg\-struct\-return\fR
21715 switch is not binary compatible with code compiled with the
21716 \&\fB\-fpcc\-struct\-return\fR switch.
21717 Use it to conform to a non-default application binary interface.
21718 .IP "\fB\-fshort\-enums\fR" 4
21719 .IX Item "-fshort-enums"
21720 Allocate to an \f(CW\*(C`enum\*(C'\fR type only as many bytes as it needs for the
21721 declared range of possible values.  Specifically, the \f(CW\*(C`enum\*(C'\fR type
21722 is equivalent to the smallest integer type that has enough room.
21723 .Sp
21724 \&\fBWarning:\fR the \fB\-fshort\-enums\fR switch causes \s-1GCC\s0 to generate
21725 code that is not binary compatible with code generated without that switch.
21726 Use it to conform to a non-default application binary interface.
21727 .IP "\fB\-fshort\-double\fR" 4
21728 .IX Item "-fshort-double"
21729 Use the same size for \f(CW\*(C`double\*(C'\fR as for \f(CW\*(C`float\*(C'\fR.
21730 .Sp
21731 \&\fBWarning:\fR the \fB\-fshort\-double\fR switch causes \s-1GCC\s0 to generate
21732 code that is not binary compatible with code generated without that switch.
21733 Use it to conform to a non-default application binary interface.
21734 .IP "\fB\-fshort\-wchar\fR" 4
21735 .IX Item "-fshort-wchar"
21736 Override the underlying type for \f(CW\*(C`wchar_t\*(C'\fR to be \f(CW\*(C`short
21737 unsigned int\*(C'\fR instead of the default for the target.  This option is
21738 useful for building programs to run under \s-1WINE\s0.
21739 .Sp
21740 \&\fBWarning:\fR the \fB\-fshort\-wchar\fR switch causes \s-1GCC\s0 to generate
21741 code that is not binary compatible with code generated without that switch.
21742 Use it to conform to a non-default application binary interface.
21743 .IP "\fB\-fno\-common\fR" 4
21744 .IX Item "-fno-common"
21745 In C code, controls the placement of uninitialized global variables.
21746 Unix C compilers have traditionally permitted multiple definitions of
21747 such variables in different compilation units by placing the variables
21748 in a common block.
21749 This is the behavior specified by \fB\-fcommon\fR, and is the default
21750 for \s-1GCC\s0 on most targets.
21751 On the other hand, this behavior is not required by \s-1ISO\s0 C, and on some
21752 targets may carry a speed or code size penalty on variable references.
21753 The \fB\-fno\-common\fR option specifies that the compiler should place
21754 uninitialized global variables in the data section of the object file,
21755 rather than generating them as common blocks.
21756 This has the effect that if the same variable is declared
21757 (without \f(CW\*(C`extern\*(C'\fR) in two different compilations,
21758 you get a multiple-definition error when you link them.
21759 In this case, you must compile with \fB\-fcommon\fR instead.
21760 Compiling with \fB\-fno\-common\fR is useful on targets for which
21761 it provides better performance, or if you wish to verify that the
21762 program will work on other systems that always treat uninitialized
21763 variable declarations this way.
21764 .IP "\fB\-fno\-ident\fR" 4
21765 .IX Item "-fno-ident"
21766 Ignore the \f(CW\*(C`#ident\*(C'\fR directive.
21767 .IP "\fB\-finhibit\-size\-directive\fR" 4
21768 .IX Item "-finhibit-size-directive"
21769 Don't output a \f(CW\*(C`.size\*(C'\fR assembler directive, or anything else that
21770 would cause trouble if the function is split in the middle, and the
21771 two halves are placed at locations far apart in memory.  This option is
21772 used when compiling \fIcrtstuff.c\fR; you should not need to use it
21773 for anything else.
21774 .IP "\fB\-fverbose\-asm\fR" 4
21775 .IX Item "-fverbose-asm"
21776 Put extra commentary information in the generated assembly code to
21777 make it more readable.  This option is generally only of use to those
21778 who actually need to read the generated assembly code (perhaps while
21779 debugging the compiler itself).
21780 .Sp
21781 \&\fB\-fno\-verbose\-asm\fR, the default, causes the
21782 extra information to be omitted and is useful when comparing two assembler
21783 files.
21784 .IP "\fB\-frecord\-gcc\-switches\fR" 4
21785 .IX Item "-frecord-gcc-switches"
21786 This switch causes the command line used to invoke the
21787 compiler to be recorded into the object file that is being created.
21788 This switch is only implemented on some targets and the exact format
21789 of the recording is target and binary file format dependent, but it
21790 usually takes the form of a section containing \s-1ASCII\s0 text.  This
21791 switch is related to the \fB\-fverbose\-asm\fR switch, but that
21792 switch only records information in the assembler output file as
21793 comments, so it never reaches the object file.
21794 See also \fB\-grecord\-gcc\-switches\fR for another
21795 way of storing compiler options into the object file.
21796 .IP "\fB\-fpic\fR" 4
21797 .IX Item "-fpic"
21798 Generate position-independent code (\s-1PIC\s0) suitable for use in a shared
21799 library, if supported for the target machine.  Such code accesses all
21800 constant addresses through a global offset table (\s-1GOT\s0).  The dynamic
21801 loader resolves the \s-1GOT\s0 entries when the program starts (the dynamic
21802 loader is not part of \s-1GCC\s0; it is part of the operating system).  If
21803 the \s-1GOT\s0 size for the linked executable exceeds a machine-specific
21804 maximum size, you get an error message from the linker indicating that
21805 \&\fB\-fpic\fR does not work; in that case, recompile with \fB\-fPIC\fR
21806 instead.  (These maximums are 8k on the \s-1SPARC\s0 and 32k
21807 on the m68k and \s-1RS/6000\s0.  The 386 has no such limit.)
21808 .Sp
21809 Position-independent code requires special support, and therefore works
21810 only on certain machines.  For the 386, \s-1GCC\s0 supports \s-1PIC\s0 for System V
21811 but not for the Sun 386i.  Code generated for the \s-1IBM\s0 \s-1RS/6000\s0 is always
21812 position-independent.
21813 .Sp
21814 When this flag is set, the macros \f(CW\*(C`_\|_pic_\|_\*(C'\fR and \f(CW\*(C`_\|_PIC_\|_\*(C'\fR
21815 are defined to 1.
21816 .IP "\fB\-fPIC\fR" 4
21817 .IX Item "-fPIC"
21818 If supported for the target machine, emit position-independent code,
21819 suitable for dynamic linking and avoiding any limit on the size of the
21820 global offset table.  This option makes a difference on the m68k,
21821 PowerPC and \s-1SPARC\s0.
21822 .Sp
21823 Position-independent code requires special support, and therefore works
21824 only on certain machines.
21825 .Sp
21826 When this flag is set, the macros \f(CW\*(C`_\|_pic_\|_\*(C'\fR and \f(CW\*(C`_\|_PIC_\|_\*(C'\fR
21827 are defined to 2.
21828 .IP "\fB\-fpie\fR" 4
21829 .IX Item "-fpie"
21830 .PD 0
21831 .IP "\fB\-fPIE\fR" 4
21832 .IX Item "-fPIE"
21833 .PD
21834 These options are similar to \fB\-fpic\fR and \fB\-fPIC\fR, but
21835 generated position independent code can be only linked into executables.
21836 Usually these options are used when \fB\-pie\fR \s-1GCC\s0 option is
21837 used during linking.
21838 .Sp
21839 \&\fB\-fpie\fR and \fB\-fPIE\fR both define the macros
21840 \&\f(CW\*(C`_\|_pie_\|_\*(C'\fR and \f(CW\*(C`_\|_PIE_\|_\*(C'\fR.  The macros have the value 1
21841 for \fB\-fpie\fR and 2 for \fB\-fPIE\fR.
21842 .IP "\fB\-fno\-jump\-tables\fR" 4
21843 .IX Item "-fno-jump-tables"
21844 Do not use jump tables for switch statements even where it would be
21845 more efficient than other code generation strategies.  This option is
21846 of use in conjunction with \fB\-fpic\fR or \fB\-fPIC\fR for
21847 building code that forms part of a dynamic linker and cannot
21848 reference the address of a jump table.  On some targets, jump tables
21849 do not require a \s-1GOT\s0 and this option is not needed.
21850 .IP "\fB\-ffixed\-\fR\fIreg\fR" 4
21851 .IX Item "-ffixed-reg"
21852 Treat the register named \fIreg\fR as a fixed register; generated code
21853 should never refer to it (except perhaps as a stack pointer, frame
21854 pointer or in some other fixed role).
21855 .Sp
21856 \&\fIreg\fR must be the name of a register.  The register names accepted
21857 are machine-specific and are defined in the \f(CW\*(C`REGISTER_NAMES\*(C'\fR
21858 macro in the machine description macro file.
21859 .Sp
21860 This flag does not have a negative form, because it specifies a
21861 three-way choice.
21862 .IP "\fB\-fcall\-used\-\fR\fIreg\fR" 4
21863 .IX Item "-fcall-used-reg"
21864 Treat the register named \fIreg\fR as an allocable register that is
21865 clobbered by function calls.  It may be allocated for temporaries or
21866 variables that do not live across a call.  Functions compiled this way
21867 do not save and restore the register \fIreg\fR.
21868 .Sp
21869 It is an error to use this flag with the frame pointer or stack pointer.
21870 Use of this flag for other registers that have fixed pervasive roles in
21871 the machine's execution model produces disastrous results.
21872 .Sp
21873 This flag does not have a negative form, because it specifies a
21874 three-way choice.
21875 .IP "\fB\-fcall\-saved\-\fR\fIreg\fR" 4
21876 .IX Item "-fcall-saved-reg"
21877 Treat the register named \fIreg\fR as an allocable register saved by
21878 functions.  It may be allocated even for temporaries or variables that
21879 live across a call.  Functions compiled this way save and restore
21880 the register \fIreg\fR if they use it.
21881 .Sp
21882 It is an error to use this flag with the frame pointer or stack pointer.
21883 Use of this flag for other registers that have fixed pervasive roles in
21884 the machine's execution model produces disastrous results.
21885 .Sp
21886 A different sort of disaster results from the use of this flag for
21887 a register in which function values may be returned.
21888 .Sp
21889 This flag does not have a negative form, because it specifies a
21890 three-way choice.
21891 .IP "\fB\-fpack\-struct[=\fR\fIn\fR\fB]\fR" 4
21892 .IX Item "-fpack-struct[=n]"
21893 Without a value specified, pack all structure members together without
21894 holes.  When a value is specified (which must be a small power of two), pack
21895 structure members according to this value, representing the maximum
21896 alignment (that is, objects with default alignment requirements larger than
21897 this are output potentially unaligned at the next fitting location.
21898 .Sp
21899 \&\fBWarning:\fR the \fB\-fpack\-struct\fR switch causes \s-1GCC\s0 to generate
21900 code that is not binary compatible with code generated without that switch.
21901 Additionally, it makes the code suboptimal.
21902 Use it to conform to a non-default application binary interface.
21903 .IP "\fB\-finstrument\-functions\fR" 4
21904 .IX Item "-finstrument-functions"
21905 Generate instrumentation calls for entry and exit to functions.  Just
21906 after function entry and just before function exit, the following
21907 profiling functions are called with the address of the current
21908 function and its call site.  (On some platforms,
21909 \&\f(CW\*(C`_\|_builtin_return_address\*(C'\fR does not work beyond the current
21910 function, so the call site information may not be available to the
21911 profiling functions otherwise.)
21912 .Sp
21913 .Vb 4
21914 \&        void _\|_cyg_profile_func_enter (void *this_fn,
21915 \&                                       void *call_site);
21916 \&        void _\|_cyg_profile_func_exit  (void *this_fn,
21917 \&                                       void *call_site);
21918 .Ve
21919 .Sp
21920 The first argument is the address of the start of the current function,
21921 which may be looked up exactly in the symbol table.
21922 .Sp
21923 This instrumentation is also done for functions expanded inline in other
21924 functions.  The profiling calls indicate where, conceptually, the
21925 inline function is entered and exited.  This means that addressable
21926 versions of such functions must be available.  If all your uses of a
21927 function are expanded inline, this may mean an additional expansion of
21928 code size.  If you use \f(CW\*(C`extern inline\*(C'\fR in your C code, an
21929 addressable version of such functions must be provided.  (This is
21930 normally the case anyway, but if you get lucky and the optimizer always
21931 expands the functions inline, you might have gotten away without
21932 providing static copies.)
21933 .Sp
21934 A function may be given the attribute \f(CW\*(C`no_instrument_function\*(C'\fR, in
21935 which case this instrumentation is not done.  This can be used, for
21936 example, for the profiling functions listed above, high-priority
21937 interrupt routines, and any functions from which the profiling functions
21938 cannot safely be called (perhaps signal handlers, if the profiling
21939 routines generate output or allocate memory).
21940 .IP "\fB\-finstrument\-functions\-exclude\-file\-list=\fR\fIfile\fR\fB,\fR\fIfile\fR\fB,...\fR" 4
21941 .IX Item "-finstrument-functions-exclude-file-list=file,file,..."
21942 Set the list of functions that are excluded from instrumentation (see
21943 the description of \fB\-finstrument\-functions\fR).  If the file that
21944 contains a function definition matches with one of \fIfile\fR, then
21945 that function is not instrumented.  The match is done on substrings:
21946 if the \fIfile\fR parameter is a substring of the file name, it is
21947 considered to be a match.
21948 .Sp
21949 For example:
21950 .Sp
21951 .Vb 1
21952 \&        \-finstrument\-functions\-exclude\-file\-list=/bits/stl,include/sys
21953 .Ve
21954 .Sp
21955 excludes any inline function defined in files whose pathnames
21956 contain \fI/bits/stl\fR or \fIinclude/sys\fR.
21957 .Sp
21958 If, for some reason, you want to include letter \fB,\fR in one of
21959 \&\fIsym\fR, write \fB,\fR. For example,
21960 \&\fB\-finstrument\-functions\-exclude\-file\-list=',,tmp'\fR
21961 (note the single quote surrounding the option).
21962 .IP "\fB\-finstrument\-functions\-exclude\-function\-list=\fR\fIsym\fR\fB,\fR\fIsym\fR\fB,...\fR" 4
21963 .IX Item "-finstrument-functions-exclude-function-list=sym,sym,..."
21964 This is similar to \fB\-finstrument\-functions\-exclude\-file\-list\fR,
21965 but this option sets the list of function names to be excluded from
21966 instrumentation.  The function name to be matched is its user-visible
21967 name, such as \f(CW\*(C`vector<int> blah(const vector<int> &)\*(C'\fR, not the
21968 internal mangled name (e.g., \f(CW\*(C`_Z4blahRSt6vectorIiSaIiEE\*(C'\fR).  The
21969 match is done on substrings: if the \fIsym\fR parameter is a substring
21970 of the function name, it is considered to be a match.  For C99 and \*(C+
21971 extended identifiers, the function name must be given in \s-1UTF\-8\s0, not
21972 using universal character names.
21973 .IP "\fB\-fstack\-check\fR" 4
21974 .IX Item "-fstack-check"
21975 Generate code to verify that you do not go beyond the boundary of the
21976 stack.  You should specify this flag if you are running in an
21977 environment with multiple threads, but you only rarely need to specify it in
21978 a single-threaded environment since stack overflow is automatically
21979 detected on nearly all systems if there is only one stack.
21980 .Sp
21981 Note that this switch does not actually cause checking to be done; the
21982 operating system or the language runtime must do that.  The switch causes
21983 generation of code to ensure that they see the stack being extended.
21984 .Sp
21985 You can additionally specify a string parameter: \fBno\fR means no
21986 checking, \fBgeneric\fR means force the use of old-style checking,
21987 \&\fBspecific\fR means use the best checking method and is equivalent
21988 to bare \fB\-fstack\-check\fR.
21989 .Sp
21990 Old-style checking is a generic mechanism that requires no specific
21991 target support in the compiler but comes with the following drawbacks:
21992 .RS 4
21993 .IP "1." 4
21994 .IX Item "1."
21995 Modified allocation strategy for large objects: they are always
21996 allocated dynamically if their size exceeds a fixed threshold.
21997 .IP "2." 4
21998 .IX Item "2."
21999 Fixed limit on the size of the static frame of functions: when it is
22000 topped by a particular function, stack checking is not reliable and
22001 a warning is issued by the compiler.
22002 .IP "3." 4
22003 .IX Item "3."
22004 Inefficiency: because of both the modified allocation strategy and the
22005 generic implementation, code performance is hampered.
22006 .RE
22007 .RS 4
22008 .Sp
22009 Note that old-style stack checking is also the fallback method for
22010 \&\fBspecific\fR if no target support has been added in the compiler.
22011 .RE
22012 .IP "\fB\-fstack\-limit\-register=\fR\fIreg\fR" 4
22013 .IX Item "-fstack-limit-register=reg"
22014 .PD 0
22015 .IP "\fB\-fstack\-limit\-symbol=\fR\fIsym\fR" 4
22016 .IX Item "-fstack-limit-symbol=sym"
22017 .IP "\fB\-fno\-stack\-limit\fR" 4
22018 .IX Item "-fno-stack-limit"
22019 .PD
22020 Generate code to ensure that the stack does not grow beyond a certain value,
22021 either the value of a register or the address of a symbol.  If a larger
22022 stack is required, a signal is raised at run time.  For most targets,
22023 the signal is raised before the stack overruns the boundary, so
22024 it is possible to catch the signal without taking special precautions.
22025 .Sp
22026 For instance, if the stack starts at absolute address \fB0x80000000\fR
22027 and grows downwards, you can use the flags
22028 \&\fB\-fstack\-limit\-symbol=_\|_stack_limit\fR and
22029 \&\fB\-Wl,\-\-defsym,_\|_stack_limit=0x7ffe0000\fR to enforce a stack limit
22030 of 128KB.  Note that this may only work with the \s-1GNU\s0 linker.
22031 .IP "\fB\-fsplit\-stack\fR" 4
22032 .IX Item "-fsplit-stack"
22033 Generate code to automatically split the stack before it overflows.
22034 The resulting program has a discontiguous stack which can only
22035 overflow if the program is unable to allocate any more memory.  This
22036 is most useful when running threaded programs, as it is no longer
22037 necessary to calculate a good stack size to use for each thread.  This
22038 is currently only implemented for the i386 and x86_64 back ends running
22039 GNU/Linux.
22040 .Sp
22041 When code compiled with \fB\-fsplit\-stack\fR calls code compiled
22042 without \fB\-fsplit\-stack\fR, there may not be much stack space
22043 available for the latter code to run.  If compiling all code,
22044 including library code, with \fB\-fsplit\-stack\fR is not an option,
22045 then the linker can fix up these calls so that the code compiled
22046 without \fB\-fsplit\-stack\fR always has a large stack.  Support for
22047 this is implemented in the gold linker in \s-1GNU\s0 binutils release 2.21
22048 and later.
22049 .IP "\fB\-fleading\-underscore\fR" 4
22050 .IX Item "-fleading-underscore"
22051 This option and its counterpart, \fB\-fno\-leading\-underscore\fR, forcibly
22052 change the way C symbols are represented in the object file.  One use
22053 is to help link with legacy assembly code.
22054 .Sp
22055 \&\fBWarning:\fR the \fB\-fleading\-underscore\fR switch causes \s-1GCC\s0 to
22056 generate code that is not binary compatible with code generated without that
22057 switch.  Use it to conform to a non-default application binary interface.
22058 Not all targets provide complete support for this switch.
22059 .IP "\fB\-ftls\-model=\fR\fImodel\fR" 4
22060 .IX Item "-ftls-model=model"
22061 Alter the thread-local storage model to be used.
22062 The \fImodel\fR argument should be one of \fBglobal-dynamic\fR,
22063 \&\fBlocal-dynamic\fR, \fBinitial-exec\fR or \fBlocal-exec\fR.
22064 Note that the choice is subject to optimization: the compiler may use
22065 a more efficient model for symbols not visible outside of the translation
22066 unit, or if \fB\-fpic\fR is not given on the command line.
22067 .Sp
22068 The default without \fB\-fpic\fR is \fBinitial-exec\fR; with
22069 \&\fB\-fpic\fR the default is \fBglobal-dynamic\fR.
22070 .IP "\fB\-fvisibility=\fR[\fBdefault\fR|\fBinternal\fR|\fBhidden\fR|\fBprotected\fR]" 4
22071 .IX Item "-fvisibility=[default|internal|hidden|protected]"
22072 Set the default \s-1ELF\s0 image symbol visibility to the specified option\-\-\-all
22073 symbols are marked with this unless overridden within the code.
22074 Using this feature can very substantially improve linking and
22075 load times of shared object libraries, produce more optimized
22076 code, provide near-perfect \s-1API\s0 export and prevent symbol clashes.
22077 It is \fBstrongly\fR recommended that you use this in any shared objects
22078 you distribute.
22079 .Sp
22080 Despite the nomenclature, \fBdefault\fR always means public; i.e.,
22081 available to be linked against from outside the shared object.
22082 \&\fBprotected\fR and \fBinternal\fR are pretty useless in real-world
22083 usage so the only other commonly used option is \fBhidden\fR.
22084 The default if \fB\-fvisibility\fR isn't specified is
22085 \&\fBdefault\fR, i.e., make every
22086 symbol public\-\-\-this causes the same behavior as previous versions of
22087 \&\s-1GCC\s0.
22088 .Sp
22089 A good explanation of the benefits offered by ensuring \s-1ELF\s0
22090 symbols have the correct visibility is given by \*(L"How To Write
22091 Shared Libraries\*(R" by Ulrich Drepper (which can be found at
22092 <\fBhttp://people.redhat.com/~drepper/\fR>)\-\-\-however a superior
22093 solution made possible by this option to marking things hidden when
22094 the default is public is to make the default hidden and mark things
22095 public.  This is the norm with DLLs on Windows and with \fB\-fvisibility=hidden\fR
22096 and \f(CW\*(C`_\|_attribute_\|_ ((visibility("default")))\*(C'\fR instead of
22097 \&\f(CW\*(C`_\|_declspec(dllexport)\*(C'\fR you get almost identical semantics with
22098 identical syntax.  This is a great boon to those working with
22099 cross-platform projects.
22100 .Sp
22101 For those adding visibility support to existing code, you may find
22102 \&\f(CW\*(C`#pragma GCC visibility\*(C'\fR of use.  This works by you enclosing
22103 the declarations you wish to set visibility for with (for example)
22104 \&\f(CW\*(C`#pragma GCC visibility push(hidden)\*(C'\fR and
22105 \&\f(CW\*(C`#pragma GCC visibility pop\*(C'\fR.
22106 Bear in mind that symbol visibility should be viewed \fBas
22107 part of the \s-1API\s0 interface contract\fR and thus all new code should
22108 always specify visibility when it is not the default; i.e., declarations
22109 only for use within the local \s-1DSO\s0 should \fBalways\fR be marked explicitly
22110 as hidden as so to avoid \s-1PLT\s0 indirection overheads\-\-\-making this
22111 abundantly clear also aids readability and self-documentation of the code.
22112 Note that due to \s-1ISO\s0 \*(C+ specification requirements, \f(CW\*(C`operator new\*(C'\fR and
22113 \&\f(CW\*(C`operator delete\*(C'\fR must always be of default visibility.
22114 .Sp
22115 Be aware that headers from outside your project, in particular system
22116 headers and headers from any other library you use, may not be
22117 expecting to be compiled with visibility other than the default.  You
22118 may need to explicitly say \f(CW\*(C`#pragma GCC visibility push(default)\*(C'\fR
22119 before including any such headers.
22120 .Sp
22121 \&\f(CW\*(C`extern\*(C'\fR declarations are not affected by \fB\-fvisibility\fR, so
22122 a lot of code can be recompiled with \fB\-fvisibility=hidden\fR with
22123 no modifications.  However, this means that calls to \f(CW\*(C`extern\*(C'\fR
22124 functions with no explicit visibility use the \s-1PLT\s0, so it is more
22125 effective to use \f(CW\*(C`_\|_attribute ((visibility))\*(C'\fR and/or
22126 \&\f(CW\*(C`#pragma GCC visibility\*(C'\fR to tell the compiler which \f(CW\*(C`extern\*(C'\fR
22127 declarations should be treated as hidden.
22128 .Sp
22129 Note that \fB\-fvisibility\fR does affect \*(C+ vague linkage
22130 entities. This means that, for instance, an exception class that is
22131 be thrown between DSOs must be explicitly marked with default
22132 visibility so that the \fBtype_info\fR nodes are unified between
22133 the DSOs.
22134 .Sp
22135 An overview of these techniques, their benefits and how to use them
22136 is at <\fBhttp://gcc.gnu.org/wiki/Visibility\fR>.
22137 .IP "\fB\-fstrict\-volatile\-bitfields\fR" 4
22138 .IX Item "-fstrict-volatile-bitfields"
22139 This option should be used if accesses to volatile bit-fields (or other
22140 structure fields, although the compiler usually honors those types
22141 anyway) should use a single access of the width of the
22142 field's type, aligned to a natural alignment if possible.  For
22143 example, targets with memory-mapped peripheral registers might require
22144 all such accesses to be 16 bits wide; with this flag you can
22145 declare all peripheral bit-fields as \f(CW\*(C`unsigned short\*(C'\fR (assuming short
22146 is 16 bits on these targets) to force \s-1GCC\s0 to use 16\-bit accesses
22147 instead of, perhaps, a more efficient 32\-bit access.
22148 .Sp
22149 If this option is disabled, the compiler uses the most efficient
22150 instruction.  In the previous example, that might be a 32\-bit load
22151 instruction, even though that accesses bytes that do not contain
22152 any portion of the bit-field, or memory-mapped registers unrelated to
22153 the one being updated.
22154 .Sp
22155 In some cases, such as when the \f(CW\*(C`packed\*(C'\fR attribute is applied to a 
22156 structure field, it may not be possible to access the field with a single
22157 read or write that is correctly aligned for the target machine.  In this
22158 case \s-1GCC\s0 falls back to generating multiple accesses rather than code that 
22159 will fault or truncate the result at run time.
22160 .Sp
22161 Note:  Due to restrictions of the C/\*(C+11 memory model, write accesses are
22162 not allowed to touch non bit-field members.  It is therefore recommended
22163 to define all bits of the field's type as bit-field members.
22164 .Sp
22165 The default value of this option is determined by the application binary
22166 interface for the target processor.
22167 .IP "\fB\-fsync\-libcalls\fR" 4
22168 .IX Item "-fsync-libcalls"
22169 This option controls whether any out-of-line instance of the \f(CW\*(C`_\|_sync\*(C'\fR
22170 family of functions may be used to implement the \*(C+11 \f(CW\*(C`_\|_atomic\*(C'\fR
22171 family of functions.
22172 .Sp
22173 The default value of this option is enabled, thus the only useful form
22174 of the option is \fB\-fno\-sync\-libcalls\fR.  This option is used in
22175 the implementation of the \fIlibatomic\fR runtime library.
22176 .SH "ENVIRONMENT"
22177 .IX Header "ENVIRONMENT"
22178 This section describes several environment variables that affect how \s-1GCC\s0
22179 operates.  Some of them work by specifying directories or prefixes to use
22180 when searching for various kinds of files.  Some are used to specify other
22181 aspects of the compilation environment.
22182 .PP
22183 Note that you can also specify places to search using options such as
22184 \&\fB\-B\fR, \fB\-I\fR and \fB\-L\fR.  These
22185 take precedence over places specified using environment variables, which
22186 in turn take precedence over those specified by the configuration of \s-1GCC\s0.
22187 .IP "\fB\s-1LANG\s0\fR" 4
22188 .IX Item "LANG"
22189 .PD 0
22190 .IP "\fB\s-1LC_CTYPE\s0\fR" 4
22191 .IX Item "LC_CTYPE"
22192 .IP "\fB\s-1LC_MESSAGES\s0\fR" 4
22193 .IX Item "LC_MESSAGES"
22194 .IP "\fB\s-1LC_ALL\s0\fR" 4
22195 .IX Item "LC_ALL"
22196 .PD
22197 These environment variables control the way that \s-1GCC\s0 uses
22198 localization information which allows \s-1GCC\s0 to work with different
22199 national conventions.  \s-1GCC\s0 inspects the locale categories
22200 \&\fB\s-1LC_CTYPE\s0\fR and \fB\s-1LC_MESSAGES\s0\fR if it has been configured to do
22201 so.  These locale categories can be set to any value supported by your
22202 installation.  A typical value is \fBen_GB.UTF\-8\fR for English in the United
22203 Kingdom encoded in \s-1UTF\-8\s0.
22204 .Sp
22205 The \fB\s-1LC_CTYPE\s0\fR environment variable specifies character
22206 classification.  \s-1GCC\s0 uses it to determine the character boundaries in
22207 a string; this is needed for some multibyte encodings that contain quote
22208 and escape characters that are otherwise interpreted as a string
22209 end or escape.
22210 .Sp
22211 The \fB\s-1LC_MESSAGES\s0\fR environment variable specifies the language to
22212 use in diagnostic messages.
22213 .Sp
22214 If the \fB\s-1LC_ALL\s0\fR environment variable is set, it overrides the value
22215 of \fB\s-1LC_CTYPE\s0\fR and \fB\s-1LC_MESSAGES\s0\fR; otherwise, \fB\s-1LC_CTYPE\s0\fR
22216 and \fB\s-1LC_MESSAGES\s0\fR default to the value of the \fB\s-1LANG\s0\fR
22217 environment variable.  If none of these variables are set, \s-1GCC\s0
22218 defaults to traditional C English behavior.
22219 .IP "\fB\s-1TMPDIR\s0\fR" 4
22220 .IX Item "TMPDIR"
22221 If \fB\s-1TMPDIR\s0\fR is set, it specifies the directory to use for temporary
22222 files.  \s-1GCC\s0 uses temporary files to hold the output of one stage of
22223 compilation which is to be used as input to the next stage: for example,
22224 the output of the preprocessor, which is the input to the compiler
22225 proper.
22226 .IP "\fB\s-1GCC_COMPARE_DEBUG\s0\fR" 4
22227 .IX Item "GCC_COMPARE_DEBUG"
22228 Setting \fB\s-1GCC_COMPARE_DEBUG\s0\fR is nearly equivalent to passing
22229 \&\fB\-fcompare\-debug\fR to the compiler driver.  See the documentation
22230 of this option for more details.
22231 .IP "\fB\s-1GCC_EXEC_PREFIX\s0\fR" 4
22232 .IX Item "GCC_EXEC_PREFIX"
22233 If \fB\s-1GCC_EXEC_PREFIX\s0\fR is set, it specifies a prefix to use in the
22234 names of the subprograms executed by the compiler.  No slash is added
22235 when this prefix is combined with the name of a subprogram, but you can
22236 specify a prefix that ends with a slash if you wish.
22237 .Sp
22238 If \fB\s-1GCC_EXEC_PREFIX\s0\fR is not set, \s-1GCC\s0 attempts to figure out
22239 an appropriate prefix to use based on the pathname it is invoked with.
22240 .Sp
22241 If \s-1GCC\s0 cannot find the subprogram using the specified prefix, it
22242 tries looking in the usual places for the subprogram.
22243 .Sp
22244 The default value of \fB\s-1GCC_EXEC_PREFIX\s0\fR is
22245 \&\fI\fIprefix\fI/lib/gcc/\fR where \fIprefix\fR is the prefix to
22246 the installed compiler. In many cases \fIprefix\fR is the value
22247 of \f(CW\*(C`prefix\*(C'\fR when you ran the \fIconfigure\fR script.
22248 .Sp
22249 Other prefixes specified with \fB\-B\fR take precedence over this prefix.
22250 .Sp
22251 This prefix is also used for finding files such as \fIcrt0.o\fR that are
22252 used for linking.
22253 .Sp
22254 In addition, the prefix is used in an unusual way in finding the
22255 directories to search for header files.  For each of the standard
22256 directories whose name normally begins with \fB/usr/local/lib/gcc\fR
22257 (more precisely, with the value of \fB\s-1GCC_INCLUDE_DIR\s0\fR), \s-1GCC\s0 tries
22258 replacing that beginning with the specified prefix to produce an
22259 alternate directory name.  Thus, with \fB\-Bfoo/\fR, \s-1GCC\s0 searches
22260 \&\fIfoo/bar\fR just before it searches the standard directory 
22261 \&\fI/usr/local/lib/bar\fR.
22262 If a standard directory begins with the configured
22263 \&\fIprefix\fR then the value of \fIprefix\fR is replaced by
22264 \&\fB\s-1GCC_EXEC_PREFIX\s0\fR when looking for header files.
22265 .IP "\fB\s-1COMPILER_PATH\s0\fR" 4
22266 .IX Item "COMPILER_PATH"
22267 The value of \fB\s-1COMPILER_PATH\s0\fR is a colon-separated list of
22268 directories, much like \fB\s-1PATH\s0\fR.  \s-1GCC\s0 tries the directories thus
22269 specified when searching for subprograms, if it can't find the
22270 subprograms using \fB\s-1GCC_EXEC_PREFIX\s0\fR.
22271 .IP "\fB\s-1LIBRARY_PATH\s0\fR" 4
22272 .IX Item "LIBRARY_PATH"
22273 The value of \fB\s-1LIBRARY_PATH\s0\fR is a colon-separated list of
22274 directories, much like \fB\s-1PATH\s0\fR.  When configured as a native compiler,
22275 \&\s-1GCC\s0 tries the directories thus specified when searching for special
22276 linker files, if it can't find them using \fB\s-1GCC_EXEC_PREFIX\s0\fR.  Linking
22277 using \s-1GCC\s0 also uses these directories when searching for ordinary
22278 libraries for the \fB\-l\fR option (but directories specified with
22279 \&\fB\-L\fR come first).
22280 .IP "\fB\s-1LANG\s0\fR" 4
22281 .IX Item "LANG"
22282 This variable is used to pass locale information to the compiler.  One way in
22283 which this information is used is to determine the character set to be used
22284 when character literals, string literals and comments are parsed in C and \*(C+.
22285 When the compiler is configured to allow multibyte characters,
22286 the following values for \fB\s-1LANG\s0\fR are recognized:
22287 .RS 4
22288 .IP "\fBC\-JIS\fR" 4
22289 .IX Item "C-JIS"
22290 Recognize \s-1JIS\s0 characters.
22291 .IP "\fBC\-SJIS\fR" 4
22292 .IX Item "C-SJIS"
22293 Recognize \s-1SJIS\s0 characters.
22294 .IP "\fBC\-EUCJP\fR" 4
22295 .IX Item "C-EUCJP"
22296 Recognize \s-1EUCJP\s0 characters.
22297 .RE
22298 .RS 4
22299 .Sp
22300 If \fB\s-1LANG\s0\fR is not defined, or if it has some other value, then the
22301 compiler uses \f(CW\*(C`mblen\*(C'\fR and \f(CW\*(C`mbtowc\*(C'\fR as defined by the default locale to
22302 recognize and translate multibyte characters.
22303 .RE
22304 .PP
22305 Some additional environment variables affect the behavior of the
22306 preprocessor.
22307 .IP "\fB\s-1CPATH\s0\fR" 4
22308 .IX Item "CPATH"
22309 .PD 0
22310 .IP "\fBC_INCLUDE_PATH\fR" 4
22311 .IX Item "C_INCLUDE_PATH"
22312 .IP "\fB\s-1CPLUS_INCLUDE_PATH\s0\fR" 4
22313 .IX Item "CPLUS_INCLUDE_PATH"
22314 .IP "\fB\s-1OBJC_INCLUDE_PATH\s0\fR" 4
22315 .IX Item "OBJC_INCLUDE_PATH"
22316 .PD
22317 Each variable's value is a list of directories separated by a special
22318 character, much like \fB\s-1PATH\s0\fR, in which to look for header files.
22319 The special character, \f(CW\*(C`PATH_SEPARATOR\*(C'\fR, is target-dependent and
22320 determined at \s-1GCC\s0 build time.  For Microsoft Windows-based targets it is a
22321 semicolon, and for almost all other targets it is a colon.
22322 .Sp
22323 \&\fB\s-1CPATH\s0\fR specifies a list of directories to be searched as if
22324 specified with \fB\-I\fR, but after any paths given with \fB\-I\fR
22325 options on the command line.  This environment variable is used
22326 regardless of which language is being preprocessed.
22327 .Sp
22328 The remaining environment variables apply only when preprocessing the
22329 particular language indicated.  Each specifies a list of directories
22330 to be searched as if specified with \fB\-isystem\fR, but after any
22331 paths given with \fB\-isystem\fR options on the command line.
22332 .Sp
22333 In all these variables, an empty element instructs the compiler to
22334 search its current working directory.  Empty elements can appear at the
22335 beginning or end of a path.  For instance, if the value of
22336 \&\fB\s-1CPATH\s0\fR is \f(CW\*(C`:/special/include\*(C'\fR, that has the same
22337 effect as \fB\-I.\ \-I/special/include\fR.
22338 .IP "\fB\s-1DEPENDENCIES_OUTPUT\s0\fR" 4
22339 .IX Item "DEPENDENCIES_OUTPUT"
22340 If this variable is set, its value specifies how to output
22341 dependencies for Make based on the non-system header files processed
22342 by the compiler.  System header files are ignored in the dependency
22343 output.
22344 .Sp
22345 The value of \fB\s-1DEPENDENCIES_OUTPUT\s0\fR can be just a file name, in
22346 which case the Make rules are written to that file, guessing the target
22347 name from the source file name.  Or the value can have the form
22348 \&\fIfile\fR\fB \fR\fItarget\fR, in which case the rules are written to
22349 file \fIfile\fR using \fItarget\fR as the target name.
22350 .Sp
22351 In other words, this environment variable is equivalent to combining
22352 the options \fB\-MM\fR and \fB\-MF\fR,
22353 with an optional \fB\-MT\fR switch too.
22354 .IP "\fB\s-1SUNPRO_DEPENDENCIES\s0\fR" 4
22355 .IX Item "SUNPRO_DEPENDENCIES"
22356 This variable is the same as \fB\s-1DEPENDENCIES_OUTPUT\s0\fR (see above),
22357 except that system header files are not ignored, so it implies
22358 \&\fB\-M\fR rather than \fB\-MM\fR.  However, the dependence on the
22359 main input file is omitted.
22360 .SH "BUGS"
22361 .IX Header "BUGS"
22362 For instructions on reporting bugs, see
22363 <\fBhttp://gcc.gnu.org/bugs.html\fR>.
22364 .SH "FOOTNOTES"
22365 .IX Header "FOOTNOTES"
22366 .IP "1." 4
22367 On some systems, \fBgcc \-shared\fR
22368 needs to build supplementary stub code for constructors to work.  On
22369 multi-libbed systems, \fBgcc \-shared\fR must select the correct support
22370 libraries to link against.  Failing to supply the correct flags may lead
22371 to subtle defects.  Supplying them in cases where they are not necessary
22372 is innocuous.
22373 .SH "SEE ALSO"
22374 .IX Header "SEE ALSO"
22375 \&\fIgpl\fR\|(7), \fIgfdl\fR\|(7), \fIfsf\-funding\fR\|(7),
22376 \&\fIcpp\fR\|(1), \fIgcov\fR\|(1), \fIas\fR\|(1), \fIld\fR\|(1), \fIgdb\fR\|(1), \fIadb\fR\|(1), \fIdbx\fR\|(1), \fIsdb\fR\|(1)
22377 and the Info entries for \fIgcc\fR, \fIcpp\fR, \fIas\fR,
22378 \&\fIld\fR, \fIbinutils\fR and \fIgdb\fR.
22379 .SH "AUTHOR"
22380 .IX Header "AUTHOR"
22381 See the Info entry for \fBgcc\fR, or
22382 <\fBhttp://gcc.gnu.org/onlinedocs/gcc/Contributors.html\fR>,
22383 for contributors to \s-1GCC\s0.
22384 .SH "COPYRIGHT"
22385 .IX Header "COPYRIGHT"
22386 Copyright (c) 1988\-2015 Free Software Foundation, Inc.
22387 .PP
22388 Permission is granted to copy, distribute and/or modify this document
22389 under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or
22390 any later version published by the Free Software Foundation; with the
22391 Invariant Sections being \*(L"\s-1GNU\s0 General Public License\*(R" and \*(L"Funding
22392 Free Software\*(R", the Front-Cover texts being (a) (see below), and with
22393 the Back-Cover Texts being (b) (see below).  A copy of the license is
22394 included in the \fIgfdl\fR\|(7) man page.
22395 .PP
22396 (a) The \s-1FSF\s0's Front-Cover Text is:
22397 .PP
22398 .Vb 1
22399 \&     A GNU Manual
22400 .Ve
22401 .PP
22402 (b) The \s-1FSF\s0's Back-Cover Text is:
22403 .PP
22404 .Vb 3
22405 \&     You have freedom to copy and modify this GNU Manual, like GNU
22406 \&     software.  Copies published by the Free Software Foundation raise
22407 \&     funds for GNU development.
22408 .Ve