Merge branch 'vendor/TCSH'
[dragonfly.git] / gnu / usr.bin / cc50 / drivers / cc / gcc.1
1 .\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05)
2 .\"
3 .\" Standard preamble:
4 .\" ========================================================================
5 .de Sh \" Subsection heading
6 .br
7 .if t .Sp
8 .ne 5
9 .PP
10 \fB\\$1\fR
11 .PP
12 ..
13 .de Sp \" Vertical space (when we can't use .PP)
14 .if t .sp .5v
15 .if n .sp
16 ..
17 .de Vb \" Begin verbatim text
18 .ft CW
19 .nf
20 .ne \\$1
21 ..
22 .de Ve \" End verbatim text
23 .ft R
24 .fi
25 ..
26 .\" Set up some character translations and predefined strings.  \*(-- will
27 .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
28 .\" double quote, and \*(R" will give a right double quote.  \*(C+ will
29 .\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
30 .\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
31 .\" nothing in troff, for use with C<>.
32 .tr \(*W-
33 .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
34 .ie n \{\
35 .    ds -- \(*W-
36 .    ds PI pi
37 .    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
38 .    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
39 .    ds L" ""
40 .    ds R" ""
41 .    ds C` ""
42 .    ds C' ""
43 'br\}
44 .el\{\
45 .    ds -- \|\(em\|
46 .    ds PI \(*p
47 .    ds L" ``
48 .    ds R" ''
49 'br\}
50 .\"
51 .\" Escape single quotes in literal strings from groff's Unicode transform.
52 .ie \n(.g .ds Aq \(aq
53 .el       .ds Aq '
54 .\"
55 .\" If the F register is turned on, we'll generate index entries on stderr for
56 .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
57 .\" entries marked with X<> in POD.  Of course, you'll have to process the
58 .\" output yourself in some meaningful fashion.
59 .ie \nF \{\
60 .    de IX
61 .    tm Index:\\$1\t\\n%\t"\\$2"
62 ..
63 .    nr % 0
64 .    rr F
65 .\}
66 .el \{\
67 .    de IX
68 ..
69 .\}
70 .\"
71 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
72 .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
73 .    \" fudge factors for nroff and troff
74 .if n \{\
75 .    ds #H 0
76 .    ds #V .8m
77 .    ds #F .3m
78 .    ds #[ \f1
79 .    ds #] \fP
80 .\}
81 .if t \{\
82 .    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
83 .    ds #V .6m
84 .    ds #F 0
85 .    ds #[ \&
86 .    ds #] \&
87 .\}
88 .    \" simple accents for nroff and troff
89 .if n \{\
90 .    ds ' \&
91 .    ds ` \&
92 .    ds ^ \&
93 .    ds , \&
94 .    ds ~ ~
95 .    ds /
96 .\}
97 .if t \{\
98 .    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
99 .    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
100 .    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
101 .    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
102 .    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
103 .    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
104 .\}
105 .    \" troff and (daisy-wheel) nroff accents
106 .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
107 .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
108 .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
109 .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
110 .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
111 .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
112 .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
113 .ds ae a\h'-(\w'a'u*4/10)'e
114 .ds Ae A\h'-(\w'A'u*4/10)'E
115 .    \" corrections for vroff
116 .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
117 .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
118 .    \" for low resolution devices (crt and lpr)
119 .if \n(.H>23 .if \n(.V>19 \
120 \{\
121 .    ds : e
122 .    ds 8 ss
123 .    ds o a
124 .    ds d- d\h'-1'\(ga
125 .    ds D- D\h'-1'\(hy
126 .    ds th \o'bp'
127 .    ds Th \o'LP'
128 .    ds ae ae
129 .    ds Ae AE
130 .\}
131 .rm #[ #] #H #V #F C
132 .\" ========================================================================
133 .\"
134 .IX Title "GCC 1"
135 .TH GCC 1 "2016-06-03" "gcc-5.4.0" "GNU"
136 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
137 .\" way too many mistakes in technical documents.
138 .if n .ad l
139 .nh
140 .SH "NAME"
141 gcc \- GNU project C and C++ compiler
142 .SH "SYNOPSIS"
143 .IX Header "SYNOPSIS"
144 gcc [\fB\-c\fR|\fB\-S\fR|\fB\-E\fR] [\fB\-std=\fR\fIstandard\fR]
145     [\fB\-g\fR] [\fB\-pg\fR] [\fB\-O\fR\fIlevel\fR]
146     [\fB\-W\fR\fIwarn\fR...] [\fB\-Wpedantic\fR]
147     [\fB\-I\fR\fIdir\fR...] [\fB\-L\fR\fIdir\fR...]
148     [\fB\-D\fR\fImacro\fR[=\fIdefn\fR]...] [\fB\-U\fR\fImacro\fR]
149     [\fB\-f\fR\fIoption\fR...] [\fB\-m\fR\fImachine-option\fR...]
150     [\fB\-o\fR \fIoutfile\fR] [@\fIfile\fR] \fIinfile\fR...
151 .PP
152 Only the most useful options are listed here; see below for the
153 remainder.  \fBg++\fR accepts mostly the same options as \fBgcc\fR.
154 .SH "DESCRIPTION"
155 .IX Header "DESCRIPTION"
156 When you invoke \s-1GCC\s0, it normally does preprocessing, compilation,
157 assembly and linking.  The \*(L"overall options\*(R" allow you to stop this
158 process at an intermediate stage.  For example, the \fB\-c\fR option
159 says not to run the linker.  Then the output consists of object files
160 output by the assembler.
161 .PP
162 Other options are passed on to one stage of processing.  Some options
163 control the preprocessor and others the compiler itself.  Yet other
164 options control the assembler and linker; most of these are not
165 documented here, since you rarely need to use any of them.
166 .PP
167 Most of the command-line options that you can use with \s-1GCC\s0 are useful
168 for C programs; when an option is only useful with another language
169 (usually \*(C+), the explanation says so explicitly.  If the description
170 for a particular option does not mention a source language, you can use
171 that option with all supported languages.
172 .PP
173 The \fBgcc\fR program accepts options and file names as operands.  Many
174 options have multi-letter names; therefore multiple single-letter options
175 may \fInot\fR be grouped: \fB\-dv\fR is very different from \fB\-d\ \-v\fR.
176 .PP
177 You can mix options and other arguments.  For the most part, the order
178 you use doesn't matter.  Order does matter when you use several
179 options of the same kind; for example, if you specify \fB\-L\fR more
180 than once, the directories are searched in the order specified.  Also,
181 the placement of the \fB\-l\fR option is significant.
182 .PP
183 Many options have long names starting with \fB\-f\fR or with
184 \&\fB\-W\fR\-\-\-for example,
185 \&\fB\-fmove\-loop\-invariants\fR, \fB\-Wformat\fR and so on.  Most of
186 these have both positive and negative forms; the negative form of
187 \&\fB\-ffoo\fR is \fB\-fno\-foo\fR.  This manual documents
188 only one of these two forms, whichever one is not the default.
189 .SH "OPTIONS"
190 .IX Header "OPTIONS"
191 .Sh "Option Summary"
192 .IX Subsection "Option Summary"
193 Here is a summary of all the options, grouped by type.  Explanations are
194 in the following sections.
195 .IP "\fIOverall Options\fR" 4
196 .IX Item "Overall Options"
197 \&\fB\-c  \-S  \-E  \-o\fR \fIfile\fR  \fB\-no\-canonical\-prefixes  
198 \&\-pipe  \-pass\-exit\-codes  
199 \&\-x\fR \fIlanguage\fR  \fB\-v  \-###  \-\-help\fR[\fB=\fR\fIclass\fR[\fB,...\fR]]  \fB\-\-target\-help  
200 \&\-\-version \-wrapper @\fR\fIfile\fR \fB\-fplugin=\fR\fIfile\fR \fB\-fplugin\-arg\-\fR\fIname\fR\fB=\fR\fIarg\fR  
201 \&\fB\-fdump\-ada\-spec\fR[\fB\-slim\fR] \fB\-fada\-spec\-parent=\fR\fIunit\fR \fB\-fdump\-go\-spec=\fR\fIfile\fR
202 .IP "\fIC Language Options\fR" 4
203 .IX Item "C Language Options"
204 \&\fB\-ansi  \-std=\fR\fIstandard\fR  \fB\-fgnu89\-inline 
205 \&\-aux\-info\fR \fIfilename\fR \fB\-fallow\-parameterless\-variadic\-functions 
206 \&\-fno\-asm  \-fno\-builtin  \-fno\-builtin\-\fR\fIfunction\fR 
207 \&\fB\-fhosted  \-ffreestanding \-fopenacc \-fopenmp \-fopenmp\-simd 
208 \&\-fms\-extensions \-fplan9\-extensions \-trigraphs \-traditional \-traditional\-cpp 
209 \&\-fallow\-single\-precision  \-fcond\-mismatch \-flax\-vector\-conversions 
210 \&\-fsigned\-bitfields  \-fsigned\-char 
211 \&\-funsigned\-bitfields  \-funsigned\-char\fR
212 .IP "\fI\*(C+ Language Options\fR" 4
213 .IX Item " Language Options"
214 \&\fB\-fabi\-version=\fR\fIn\fR  \fB\-fno\-access\-control  \-fcheck\-new 
215 \&\-fconstexpr\-depth=\fR\fIn\fR  \fB\-ffriend\-injection 
216 \&\-fno\-elide\-constructors 
217 \&\-fno\-enforce\-eh\-specs 
218 \&\-ffor\-scope  \-fno\-for\-scope  \-fno\-gnu\-keywords 
219 \&\-fno\-implicit\-templates 
220 \&\-fno\-implicit\-inline\-templates 
221 \&\-fno\-implement\-inlines  \-fms\-extensions 
222 \&\-fno\-nonansi\-builtins  \-fnothrow\-opt  \-fno\-operator\-names 
223 \&\-fno\-optional\-diags  \-fpermissive 
224 \&\-fno\-pretty\-templates 
225 \&\-frepo  \-fno\-rtti \-fsized\-deallocation 
226 \&\-fstats  \-ftemplate\-backtrace\-limit=\fR\fIn\fR 
227 \&\fB\-ftemplate\-depth=\fR\fIn\fR 
228 \&\fB\-fno\-threadsafe\-statics  \-fuse\-cxa\-atexit 
229 \&\-fno\-weak  \-nostdinc++ 
230 \&\-fvisibility\-inlines\-hidden 
231 \&\-fvtable\-verify=\fR[\fBstd\fR|\fBpreinit\fR|\fBnone\fR] 
232 \&\fB\-fvtv\-counts \-fvtv\-debug 
233 \&\-fvisibility\-ms\-compat 
234 \&\-fext\-numeric\-literals 
235 \&\-Wabi=\fR\fIn\fR  \fB\-Wabi\-tag  \-Wconversion\-null  \-Wctor\-dtor\-privacy 
236 \&\-Wdelete\-non\-virtual\-dtor \-Wliteral\-suffix \-Wnarrowing 
237 \&\-Wnoexcept \-Wnon\-virtual\-dtor  \-Wreorder 
238 \&\-Weffc++  \-Wstrict\-null\-sentinel 
239 \&\-Wno\-non\-template\-friend  \-Wold\-style\-cast 
240 \&\-Woverloaded\-virtual  \-Wno\-pmf\-conversions 
241 \&\-Wsign\-promo\fR
242 .IP "\fIObjective-C and Objective\-\*(C+ Language Options\fR" 4
243 .IX Item "Objective-C and Objective- Language Options"
244 \&\fB\-fconstant\-string\-class=\fR\fIclass-name\fR 
245 \&\fB\-fgnu\-runtime  \-fnext\-runtime 
246 \&\-fno\-nil\-receivers 
247 \&\-fobjc\-abi\-version=\fR\fIn\fR 
248 \&\fB\-fobjc\-call\-cxx\-cdtors 
249 \&\-fobjc\-direct\-dispatch 
250 \&\-fobjc\-exceptions 
251 \&\-fobjc\-gc 
252 \&\-fobjc\-nilcheck 
253 \&\-fobjc\-std=objc1 
254 \&\-fno\-local\-ivars 
255 \&\-fivar\-visibility=\fR[\fBpublic\fR|\fBprotected\fR|\fBprivate\fR|\fBpackage\fR] 
256 \&\fB\-freplace\-objc\-classes 
257 \&\-fzero\-link 
258 \&\-gen\-decls 
259 \&\-Wassign\-intercept 
260 \&\-Wno\-protocol  \-Wselector 
261 \&\-Wstrict\-selector\-match 
262 \&\-Wundeclared\-selector\fR
263 .IP "\fILanguage Independent Options\fR" 4
264 .IX Item "Language Independent Options"
265 \&\fB\-fmessage\-length=\fR\fIn\fR  
266 \&\fB\-fdiagnostics\-show\-location=\fR[\fBonce\fR|\fBevery-line\fR]  
267 \&\fB\-fdiagnostics\-color=\fR[\fBauto\fR|\fBnever\fR|\fBalways\fR]  
268 \&\fB\-fno\-diagnostics\-show\-option \-fno\-diagnostics\-show\-caret\fR
269 .IP "\fIWarning Options\fR" 4
270 .IX Item "Warning Options"
271 \&\fB\-fsyntax\-only  \-fmax\-errors=\fR\fIn\fR  \fB\-Wpedantic 
272 \&\-pedantic\-errors 
273 \&\-w  \-Wextra  \-Wall  \-Waddress  \-Waggregate\-return  
274 \&\-Waggressive\-loop\-optimizations \-Warray\-bounds \-Warray\-bounds=\fR\fIn\fR 
275 \&\fB\-Wbool\-compare 
276 \&\-Wno\-attributes \-Wno\-builtin\-macro\-redefined 
277 \&\-Wc90\-c99\-compat \-Wc99\-c11\-compat 
278 \&\-Wc++\-compat \-Wc++11\-compat \-Wc++14\-compat \-Wcast\-align  \-Wcast\-qual  
279 \&\-Wchar\-subscripts \-Wclobbered  \-Wcomment \-Wconditionally\-supported  
280 \&\-Wconversion \-Wcoverage\-mismatch \-Wdate\-time \-Wdelete\-incomplete \-Wno\-cpp  
281 \&\-Wno\-deprecated \-Wno\-deprecated\-declarations \-Wno\-designated\-init 
282 \&\-Wdisabled\-optimization 
283 \&\-Wno\-discarded\-qualifiers \-Wno\-discarded\-array\-qualifiers 
284 \&\-Wno\-div\-by\-zero \-Wdouble\-promotion \-Wempty\-body  \-Wenum\-compare 
285 \&\-Wno\-endif\-labels \-Werror  \-Werror=* 
286 \&\-Wfatal\-errors  \-Wfloat\-equal  \-Wformat  \-Wformat=2 
287 \&\-Wno\-format\-contains\-nul \-Wno\-format\-extra\-args \-Wformat\-nonliteral 
288 \&\-Wformat\-security  \-Wformat\-signedness  \-Wformat\-y2k 
289 \&\-Wframe\-larger\-than=\fR\fIlen\fR \fB\-Wno\-free\-nonheap\-object \-Wjump\-misses\-init 
290 \&\-Wignored\-qualifiers  \-Wincompatible\-pointer\-types 
291 \&\-Wimplicit  \-Wimplicit\-function\-declaration  \-Wimplicit\-int 
292 \&\-Winit\-self  \-Winline  \-Wno\-int\-conversion 
293 \&\-Wno\-int\-to\-pointer\-cast \-Wno\-invalid\-offsetof 
294 \&\-Winvalid\-pch \-Wlarger\-than=\fR\fIlen\fR  \fB\-Wunsafe\-loop\-optimizations 
295 \&\-Wlogical\-op \-Wlogical\-not\-parentheses \-Wlong\-long 
296 \&\-Wmain \-Wmaybe\-uninitialized \-Wmemset\-transposed\-args \-Wmissing\-braces 
297 \&\-Wmissing\-field\-initializers \-Wmissing\-include\-dirs 
298 \&\-Wno\-multichar  \-Wnonnull  \-Wnormalized=\fR[\fBnone\fR|\fBid\fR|\fBnfc\fR|\fBnfkc\fR] 
299  \fB\-Wodr  \-Wno\-overflow  \-Wopenmp\-simd 
300 \&\-Woverlength\-strings  \-Wpacked  \-Wpacked\-bitfield\-compat  \-Wpadded 
301 \&\-Wparentheses  \-Wpedantic\-ms\-format \-Wno\-pedantic\-ms\-format 
302 \&\-Wpointer\-arith  \-Wno\-pointer\-to\-int\-cast 
303 \&\-Wredundant\-decls  \-Wno\-return\-local\-addr 
304 \&\-Wreturn\-type  \-Wsequence\-point  \-Wshadow  \-Wno\-shadow\-ivar 
305 \&\-Wshift\-count\-negative \-Wshift\-count\-overflow 
306 \&\-Wsign\-compare  \-Wsign\-conversion \-Wfloat\-conversion 
307 \&\-Wsizeof\-pointer\-memaccess  \-Wsizeof\-array\-argument 
308 \&\-Wstack\-protector \-Wstack\-usage=\fR\fIlen\fR \fB\-Wstrict\-aliasing 
309 \&\-Wstrict\-aliasing=n  \-Wstrict\-overflow \-Wstrict\-overflow=\fR\fIn\fR 
310 \&\fB\-Wsuggest\-attribute=\fR[\fBpure\fR|\fBconst\fR|\fBnoreturn\fR|\fBformat\fR] 
311 \&\fB\-Wsuggest\-final\-types  \-Wsuggest\-final\-methods  \-Wsuggest\-override 
312 \&\-Wmissing\-format\-attribute 
313 \&\-Wswitch  \-Wswitch\-default  \-Wswitch\-enum \-Wswitch\-bool \-Wsync\-nand 
314 \&\-Wsystem\-headers  \-Wtrampolines  \-Wtrigraphs  \-Wtype\-limits  \-Wundef 
315 \&\-Wuninitialized  \-Wunknown\-pragmas  \-Wno\-pragmas 
316 \&\-Wunsuffixed\-float\-constants  \-Wunused  \-Wunused\-function 
317 \&\-Wunused\-label  \-Wunused\-local\-typedefs \-Wunused\-parameter 
318 \&\-Wno\-unused\-result \-Wunused\-value  \-Wunused\-variable 
319 \&\-Wunused\-but\-set\-parameter \-Wunused\-but\-set\-variable 
320 \&\-Wuseless\-cast \-Wvariadic\-macros \-Wvector\-operation\-performance 
321 \&\-Wvla \-Wvolatile\-register\-var  \-Wwrite\-strings 
322 \&\-Wzero\-as\-null\-pointer\-constant\fR
323 .IP "\fIC and Objective-C-only Warning Options\fR" 4
324 .IX Item "C and Objective-C-only Warning Options"
325 \&\fB\-Wbad\-function\-cast  \-Wmissing\-declarations 
326 \&\-Wmissing\-parameter\-type  \-Wmissing\-prototypes  \-Wnested\-externs 
327 \&\-Wold\-style\-declaration  \-Wold\-style\-definition 
328 \&\-Wstrict\-prototypes  \-Wtraditional  \-Wtraditional\-conversion 
329 \&\-Wdeclaration\-after\-statement \-Wpointer\-sign\fR
330 .IP "\fIDebugging Options\fR" 4
331 .IX Item "Debugging Options"
332 \&\fB\-d\fR\fIletters\fR  \fB\-dumpspecs  \-dumpmachine  \-dumpversion 
333 \&\-fsanitize=\fR\fIstyle\fR \fB\-fsanitize\-recover \-fsanitize\-recover=\fR\fIstyle\fR 
334 \&\fB\-fasan\-shadow\-offset=\fR\fInumber\fR \fB\-fsanitize\-undefined\-trap\-on\-error 
335 \&\-fcheck\-pointer\-bounds \-fchkp\-check\-incomplete\-type 
336 \&\-fchkp\-first\-field\-has\-own\-bounds \-fchkp\-narrow\-bounds 
337 \&\-fchkp\-narrow\-to\-innermost\-array \-fchkp\-optimize 
338 \&\-fchkp\-use\-fast\-string\-functions \-fchkp\-use\-nochk\-string\-functions 
339 \&\-fchkp\-use\-static\-bounds \-fchkp\-use\-static\-const\-bounds 
340 \&\-fchkp\-treat\-zero\-dynamic\-size\-as\-infinite \-fchkp\-check\-read 
341 \&\-fchkp\-check\-read \-fchkp\-check\-write \-fchkp\-store\-bounds 
342 \&\-fchkp\-instrument\-calls \-fchkp\-instrument\-marked\-only 
343 \&\-fchkp\-use\-wrappers 
344 \&\-fdbg\-cnt\-list \-fdbg\-cnt=\fR\fIcounter-value-list\fR 
345 \&\fB\-fdisable\-ipa\-\fR\fIpass_name\fR 
346 \&\fB\-fdisable\-rtl\-\fR\fIpass_name\fR 
347 \&\fB\-fdisable\-rtl\-\fR\fIpass-name\fR\fB=\fR\fIrange-list\fR 
348 \&\fB\-fdisable\-tree\-\fR\fIpass_name\fR 
349 \&\fB\-fdisable\-tree\-\fR\fIpass-name\fR\fB=\fR\fIrange-list\fR 
350 \&\fB\-fdump\-noaddr \-fdump\-unnumbered \-fdump\-unnumbered\-links 
351 \&\-fdump\-translation\-unit\fR[\fB\-\fR\fIn\fR] 
352 \&\fB\-fdump\-class\-hierarchy\fR[\fB\-\fR\fIn\fR] 
353 \&\fB\-fdump\-ipa\-all \-fdump\-ipa\-cgraph \-fdump\-ipa\-inline 
354 \&\-fdump\-passes 
355 \&\-fdump\-statistics 
356 \&\-fdump\-tree\-all 
357 \&\-fdump\-tree\-original\fR[\fB\-\fR\fIn\fR]  
358 \&\fB\-fdump\-tree\-optimized\fR[\fB\-\fR\fIn\fR] 
359 \&\fB\-fdump\-tree\-cfg \-fdump\-tree\-alias 
360 \&\-fdump\-tree\-ch 
361 \&\-fdump\-tree\-ssa\fR[\fB\-\fR\fIn\fR] \fB\-fdump\-tree\-pre\fR[\fB\-\fR\fIn\fR] 
362 \&\fB\-fdump\-tree\-ccp\fR[\fB\-\fR\fIn\fR] \fB\-fdump\-tree\-dce\fR[\fB\-\fR\fIn\fR] 
363 \&\fB\-fdump\-tree\-gimple\fR[\fB\-raw\fR] 
364 \&\fB\-fdump\-tree\-dom\fR[\fB\-\fR\fIn\fR] 
365 \&\fB\-fdump\-tree\-dse\fR[\fB\-\fR\fIn\fR] 
366 \&\fB\-fdump\-tree\-phiprop\fR[\fB\-\fR\fIn\fR] 
367 \&\fB\-fdump\-tree\-phiopt\fR[\fB\-\fR\fIn\fR] 
368 \&\fB\-fdump\-tree\-forwprop\fR[\fB\-\fR\fIn\fR] 
369 \&\fB\-fdump\-tree\-copyrename\fR[\fB\-\fR\fIn\fR] 
370 \&\fB\-fdump\-tree\-nrv \-fdump\-tree\-vect 
371 \&\-fdump\-tree\-sink 
372 \&\-fdump\-tree\-sra\fR[\fB\-\fR\fIn\fR] 
373 \&\fB\-fdump\-tree\-forwprop\fR[\fB\-\fR\fIn\fR] 
374 \&\fB\-fdump\-tree\-fre\fR[\fB\-\fR\fIn\fR] 
375 \&\fB\-fdump\-tree\-vtable\-verify 
376 \&\-fdump\-tree\-vrp\fR[\fB\-\fR\fIn\fR] 
377 \&\fB\-fdump\-tree\-storeccp\fR[\fB\-\fR\fIn\fR] 
378 \&\fB\-fdump\-final\-insns=\fR\fIfile\fR 
379 \&\fB\-fcompare\-debug\fR[\fB=\fR\fIopts\fR]  \fB\-fcompare\-debug\-second 
380 \&\-feliminate\-dwarf2\-dups \-fno\-eliminate\-unused\-debug\-types 
381 \&\-feliminate\-unused\-debug\-symbols \-femit\-class\-debug\-always 
382 \&\-fenable\-\fR\fIkind\fR\fB\-\fR\fIpass\fR 
383 \&\fB\-fenable\-\fR\fIkind\fR\fB\-\fR\fIpass\fR\fB=\fR\fIrange-list\fR 
384 \&\fB\-fdebug\-types\-section \-fmem\-report\-wpa 
385 \&\-fmem\-report \-fpre\-ipa\-mem\-report \-fpost\-ipa\-mem\-report \-fprofile\-arcs 
386 \&\-fopt\-info 
387 \&\-fopt\-info\-\fR\fIoptions\fR[\fB=\fR\fIfile\fR] 
388 \&\fB\-frandom\-seed=\fR\fIstring\fR \fB\-fsched\-verbose=\fR\fIn\fR 
389 \&\fB\-fsel\-sched\-verbose \-fsel\-sched\-dump\-cfg \-fsel\-sched\-pipelining\-verbose 
390 \&\-fstack\-usage  \-ftest\-coverage  \-ftime\-report \-fvar\-tracking 
391 \&\-fvar\-tracking\-assignments  \-fvar\-tracking\-assignments\-toggle 
392 \&\-g  \-g\fR\fIlevel\fR  \fB\-gtoggle  \-gcoff  \-gdwarf\-\fR\fIversion\fR 
393 \&\fB\-ggdb  \-grecord\-gcc\-switches  \-gno\-record\-gcc\-switches 
394 \&\-gstabs  \-gstabs+  \-gstrict\-dwarf  \-gno\-strict\-dwarf 
395 \&\-gvms  \-gxcoff  \-gxcoff+ \-gz\fR[\fB=\fR\fItype\fR] 
396 \&\fB\-fno\-merge\-debug\-strings \-fno\-dwarf2\-cfi\-asm 
397 \&\-fdebug\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR 
398 \&\fB\-femit\-struct\-debug\-baseonly \-femit\-struct\-debug\-reduced 
399 \&\-femit\-struct\-debug\-detailed\fR[\fB=\fR\fIspec-list\fR] 
400 \&\fB\-p  \-pg  \-print\-file\-name=\fR\fIlibrary\fR  \fB\-print\-libgcc\-file\-name 
401 \&\-print\-multi\-directory  \-print\-multi\-lib  \-print\-multi\-os\-directory 
402 \&\-print\-prog\-name=\fR\fIprogram\fR  \fB\-print\-search\-dirs  \-Q 
403 \&\-print\-sysroot \-print\-sysroot\-headers\-suffix 
404 \&\-save\-temps \-save\-temps=cwd \-save\-temps=obj \-time\fR[\fB=\fR\fIfile\fR]
405 .IP "\fIOptimization Options\fR" 4
406 .IX Item "Optimization Options"
407 \&\fB\-faggressive\-loop\-optimizations \-falign\-functions[=\fR\fIn\fR\fB] 
408 \&\-falign\-jumps[=\fR\fIn\fR\fB] 
409 \&\-falign\-labels[=\fR\fIn\fR\fB] \-falign\-loops[=\fR\fIn\fR\fB] 
410 \&\-fassociative\-math \-fauto\-profile \-fauto\-profile[=\fR\fIpath\fR\fB] 
411 \&\-fauto\-inc\-dec \-fbranch\-probabilities 
412 \&\-fbranch\-target\-load\-optimize \-fbranch\-target\-load\-optimize2 
413 \&\-fbtr\-bb\-exclusive \-fcaller\-saves 
414 \&\-fcheck\-data\-deps \-fcombine\-stack\-adjustments \-fconserve\-stack 
415 \&\-fcompare\-elim \-fcprop\-registers \-fcrossjumping 
416 \&\-fcse\-follow\-jumps \-fcse\-skip\-blocks \-fcx\-fortran\-rules 
417 \&\-fcx\-limited\-range 
418 \&\-fdata\-sections \-fdce \-fdelayed\-branch 
419 \&\-fdelete\-null\-pointer\-checks \-fdevirtualize \-fdevirtualize\-speculatively 
420 \&\-fdevirtualize\-at\-ltrans \-fdse 
421 \&\-fearly\-inlining \-fipa\-sra \-fexpensive\-optimizations \-ffat\-lto\-objects 
422 \&\-ffast\-math \-ffinite\-math\-only \-ffloat\-store \-fexcess\-precision=\fR\fIstyle\fR 
423 \&\fB\-fforward\-propagate \-ffp\-contract=\fR\fIstyle\fR \fB\-ffunction\-sections 
424 \&\-fgcse \-fgcse\-after\-reload \-fgcse\-las \-fgcse\-lm \-fgraphite\-identity 
425 \&\-fgcse\-sm \-fhoist\-adjacent\-loads \-fif\-conversion 
426 \&\-fif\-conversion2 \-findirect\-inlining 
427 \&\-finline\-functions \-finline\-functions\-called\-once \-finline\-limit=\fR\fIn\fR 
428 \&\fB\-finline\-small\-functions \-fipa\-cp \-fipa\-cp\-clone \-fipa\-cp\-alignment 
429 \&\-fipa\-pta \-fipa\-profile \-fipa\-pure\-const \-fipa\-reference \-fipa\-icf 
430 \&\-fira\-algorithm=\fR\fIalgorithm\fR 
431 \&\fB\-fira\-region=\fR\fIregion\fR \fB\-fira\-hoist\-pressure 
432 \&\-fira\-loop\-pressure \-fno\-ira\-share\-save\-slots 
433 \&\-fno\-ira\-share\-spill\-slots \-fira\-verbose=\fR\fIn\fR 
434 \&\fB\-fisolate\-erroneous\-paths\-dereference \-fisolate\-erroneous\-paths\-attribute 
435 \&\-fivopts \-fkeep\-inline\-functions \-fkeep\-static\-consts 
436 \&\-flive\-range\-shrinkage 
437 \&\-floop\-block \-floop\-interchange \-floop\-strip\-mine   
438 \&\-floop\-unroll\-and\-jam \-floop\-nest\-optimize 
439 \&\-floop\-parallelize\-all \-flra\-remat \-flto \-flto\-compression\-level 
440 \&\-flto\-partition=\fR\fIalg\fR \fB\-flto\-report \-flto\-report\-wpa \-fmerge\-all\-constants 
441 \&\-fmerge\-constants \-fmodulo\-sched \-fmodulo\-sched\-allow\-regmoves 
442 \&\-fmove\-loop\-invariants \-fno\-branch\-count\-reg 
443 \&\-fno\-defer\-pop \-fno\-function\-cse \-fno\-guess\-branch\-probability 
444 \&\-fno\-inline \-fno\-math\-errno \-fno\-peephole \-fno\-peephole2 
445 \&\-fno\-sched\-interblock \-fno\-sched\-spec \-fno\-signed\-zeros 
446 \&\-fno\-toplevel\-reorder \-fno\-trapping\-math \-fno\-zero\-initialized\-in\-bss 
447 \&\-fomit\-frame\-pointer \-foptimize\-sibling\-calls 
448 \&\-fpartial\-inlining \-fpeel\-loops \-fpredictive\-commoning 
449 \&\-fprefetch\-loop\-arrays \-fprofile\-report 
450 \&\-fprofile\-correction \-fprofile\-dir=\fR\fIpath\fR \fB\-fprofile\-generate 
451 \&\-fprofile\-generate=\fR\fIpath\fR 
452 \&\fB\-fprofile\-use \-fprofile\-use=\fR\fIpath\fR \fB\-fprofile\-values 
453 \&\-fprofile\-reorder\-functions 
454 \&\-freciprocal\-math \-free \-frename\-registers \-freorder\-blocks 
455 \&\-freorder\-blocks\-and\-partition \-freorder\-functions 
456 \&\-frerun\-cse\-after\-loop \-freschedule\-modulo\-scheduled\-loops 
457 \&\-frounding\-math \-fsched2\-use\-superblocks \-fsched\-pressure 
458 \&\-fsched\-spec\-load \-fsched\-spec\-load\-dangerous 
459 \&\-fsched\-stalled\-insns\-dep[=\fR\fIn\fR\fB] \-fsched\-stalled\-insns[=\fR\fIn\fR\fB] 
460 \&\-fsched\-group\-heuristic \-fsched\-critical\-path\-heuristic 
461 \&\-fsched\-spec\-insn\-heuristic \-fsched\-rank\-heuristic 
462 \&\-fsched\-last\-insn\-heuristic \-fsched\-dep\-count\-heuristic 
463 \&\-fschedule\-fusion 
464 \&\-fschedule\-insns \-fschedule\-insns2 \-fsection\-anchors 
465 \&\-fselective\-scheduling \-fselective\-scheduling2 
466 \&\-fsel\-sched\-pipelining \-fsel\-sched\-pipelining\-outer\-loops 
467 \&\-fsemantic\-interposition 
468 \&\-fshrink\-wrap \-fsignaling\-nans \-fsingle\-precision\-constant 
469 \&\-fsplit\-ivs\-in\-unroller \-fsplit\-wide\-types \-fssa\-phiopt 
470 \&\-fstack\-protector \-fstack\-protector\-all \-fstack\-protector\-strong 
471 \&\-fstack\-protector\-explicit \-fstdarg\-opt \-fstrict\-aliasing 
472 \&\-fstrict\-overflow \-fthread\-jumps \-ftracer \-ftree\-bit\-ccp 
473 \&\-ftree\-builtin\-call\-dce \-ftree\-ccp \-ftree\-ch 
474 \&\-ftree\-coalesce\-inline\-vars \-ftree\-coalesce\-vars \-ftree\-copy\-prop 
475 \&\-ftree\-copyrename \-ftree\-dce \-ftree\-dominator\-opts \-ftree\-dse 
476 \&\-ftree\-forwprop \-ftree\-fre \-ftree\-loop\-if\-convert 
477 \&\-ftree\-loop\-if\-convert\-stores \-ftree\-loop\-im 
478 \&\-ftree\-phiprop \-ftree\-loop\-distribution \-ftree\-loop\-distribute\-patterns 
479 \&\-ftree\-loop\-ivcanon \-ftree\-loop\-linear \-ftree\-loop\-optimize 
480 \&\-ftree\-loop\-vectorize 
481 \&\-ftree\-parallelize\-loops=\fR\fIn\fR \fB\-ftree\-pre \-ftree\-partial\-pre \-ftree\-pta 
482 \&\-ftree\-reassoc \-ftree\-sink \-ftree\-slsr \-ftree\-sra 
483 \&\-ftree\-switch\-conversion \-ftree\-tail\-merge \-ftree\-ter 
484 \&\-ftree\-vectorize \-ftree\-vrp 
485 \&\-funit\-at\-a\-time \-funroll\-all\-loops \-funroll\-loops 
486 \&\-funsafe\-loop\-optimizations \-funsafe\-math\-optimizations \-funswitch\-loops 
487 \&\-fipa\-ra \-fvariable\-expansion\-in\-unroller \-fvect\-cost\-model \-fvpt 
488 \&\-fweb \-fwhole\-program \-fwpa \-fuse\-linker\-plugin 
489 \&\-\-param\fR \fIname\fR\fB=\fR\fIvalue\fR
490 \&\fB\-O  \-O0  \-O1  \-O2  \-O3  \-Os \-Ofast \-Og\fR
491 .IP "\fIPreprocessor Options\fR" 4
492 .IX Item "Preprocessor Options"
493 \&\fB\-A\fR\fIquestion\fR\fB=\fR\fIanswer\fR 
494 \&\fB\-A\-\fR\fIquestion\fR[\fB=\fR\fIanswer\fR] 
495 \&\fB\-C  \-dD  \-dI  \-dM  \-dN 
496 \&\-D\fR\fImacro\fR[\fB=\fR\fIdefn\fR]  \fB\-E  \-H 
497 \&\-idirafter\fR \fIdir\fR 
498 \&\fB\-include\fR \fIfile\fR  \fB\-imacros\fR \fIfile\fR 
499 \&\fB\-iprefix\fR \fIfile\fR  \fB\-iwithprefix\fR \fIdir\fR 
500 \&\fB\-iwithprefixbefore\fR \fIdir\fR  \fB\-isystem\fR \fIdir\fR 
501 \&\fB\-imultilib\fR \fIdir\fR \fB\-isysroot\fR \fIdir\fR 
502 \&\fB\-M  \-MM  \-MF  \-MG  \-MP  \-MQ  \-MT  \-nostdinc  
503 \&\-P  \-fdebug\-cpp \-ftrack\-macro\-expansion \-fworking\-directory 
504 \&\-remap \-trigraphs  \-undef  \-U\fR\fImacro\fR  
505 \&\fB\-Wp,\fR\fIoption\fR \fB\-Xpreprocessor\fR \fIoption\fR \fB\-no\-integrated\-cpp\fR
506 .IP "\fIAssembler Option\fR" 4
507 .IX Item "Assembler Option"
508 \&\fB\-Wa,\fR\fIoption\fR  \fB\-Xassembler\fR \fIoption\fR
509 .IP "\fILinker Options\fR" 4
510 .IX Item "Linker Options"
511 \&\fIobject-file-name\fR  \fB\-fuse\-ld=\fR\fIlinker\fR \fB\-l\fR\fIlibrary\fR 
512 \&\fB\-nostartfiles  \-nodefaultlibs  \-nostdlib \-pie \-rdynamic 
513 \&\-s  \-static \-static\-libgcc \-static\-libstdc++ 
514 \&\-static\-libasan \-static\-libtsan \-static\-liblsan \-static\-libubsan 
515 \&\-static\-libmpx \-static\-libmpxwrappers 
516 \&\-shared \-shared\-libgcc  \-symbolic 
517 \&\-T\fR \fIscript\fR  \fB\-Wl,\fR\fIoption\fR  \fB\-Xlinker\fR \fIoption\fR 
518 \&\fB\-u\fR \fIsymbol\fR \fB\-z\fR \fIkeyword\fR
519 .IP "\fIDirectory Options\fR" 4
520 .IX Item "Directory Options"
521 \&\fB\-B\fR\fIprefix\fR \fB\-I\fR\fIdir\fR \fB\-iplugindir=\fR\fIdir\fR 
522 \&\fB\-iquote\fR\fIdir\fR \fB\-L\fR\fIdir\fR \fB\-specs=\fR\fIfile\fR \fB\-I\- 
523 \&\-\-sysroot=\fR\fIdir\fR \fB\-\-no\-sysroot\-suffix\fR
524 .IP "\fIMachine Dependent Options\fR" 4
525 .IX Item "Machine Dependent Options"
526 \&\fIAArch64 Options\fR
527 \&\fB\-mabi=\fR\fIname\fR  \fB\-mbig\-endian  \-mlittle\-endian 
528 \&\-mgeneral\-regs\-only 
529 \&\-mcmodel=tiny  \-mcmodel=small  \-mcmodel=large 
530 \&\-mstrict\-align 
531 \&\-momit\-leaf\-frame\-pointer  \-mno\-omit\-leaf\-frame\-pointer 
532 \&\-mtls\-dialect=desc  \-mtls\-dialect=traditional 
533 \&\-mfix\-cortex\-a53\-835769  \-mno\-fix\-cortex\-a53\-835769 
534 \&\-mfix\-cortex\-a53\-843419  \-mno\-fix\-cortex\-a53\-843419 
535 \&\-march=\fR\fIname\fR  \fB\-mcpu=\fR\fIname\fR  \fB\-mtune=\fR\fIname\fR
536 .Sp
537 \&\fIAdapteva Epiphany Options\fR
538 \&\fB\-mhalf\-reg\-file \-mprefer\-short\-insn\-regs 
539 \&\-mbranch\-cost=\fR\fInum\fR \fB\-mcmove \-mnops=\fR\fInum\fR \fB\-msoft\-cmpsf 
540 \&\-msplit\-lohi \-mpost\-inc \-mpost\-modify \-mstack\-offset=\fR\fInum\fR 
541 \&\fB\-mround\-nearest \-mlong\-calls \-mshort\-calls \-msmall16 
542 \&\-mfp\-mode=\fR\fImode\fR \fB\-mvect\-double \-max\-vect\-align=\fR\fInum\fR 
543 \&\fB\-msplit\-vecmove\-early \-m1reg\-\fR\fIreg\fR
544 .Sp
545 \&\fI\s-1ARC\s0 Options\fR
546 \&\fB\-mbarrel\-shifter 
547 \&\-mcpu=\fR\fIcpu\fR \fB\-mA6 \-mARC600 \-mA7 \-mARC700 
548 \&\-mdpfp \-mdpfp\-compact \-mdpfp\-fast \-mno\-dpfp\-lrsr 
549 \&\-mea \-mno\-mpy \-mmul32x16 \-mmul64 
550 \&\-mnorm \-mspfp \-mspfp\-compact \-mspfp\-fast \-msimd \-msoft\-float \-mswap 
551 \&\-mcrc \-mdsp\-packa \-mdvbf \-mlock \-mmac\-d16 \-mmac\-24 \-mrtsc \-mswape 
552 \&\-mtelephony \-mxy \-misize \-mannotate\-align \-marclinux \-marclinux_prof 
553 \&\-mepilogue\-cfi \-mlong\-calls \-mmedium\-calls \-msdata 
554 \&\-mucb\-mcount \-mvolatile\-cache 
555 \&\-malign\-call \-mauto\-modify\-reg \-mbbit\-peephole \-mno\-brcc 
556 \&\-mcase\-vector\-pcrel \-mcompact\-casesi \-mno\-cond\-exec \-mearly\-cbranchsi 
557 \&\-mexpand\-adddi \-mindexed\-loads \-mlra \-mlra\-priority\-none 
558 \&\-mlra\-priority\-compact mlra-priority-noncompact \-mno\-millicode 
559 \&\-mmixed\-code \-mq\-class \-mRcq \-mRcw \-msize\-level=\fR\fIlevel\fR 
560 \&\fB\-mtune=\fR\fIcpu\fR \fB\-mmultcost=\fR\fInum\fR \fB\-munalign\-prob\-threshold=\fR\fIprobability\fR
561 .Sp
562 \&\fI\s-1ARM\s0 Options\fR
563 \&\fB\-mapcs\-frame  \-mno\-apcs\-frame 
564 \&\-mabi=\fR\fIname\fR 
565 \&\fB\-mapcs\-stack\-check  \-mno\-apcs\-stack\-check 
566 \&\-mapcs\-float  \-mno\-apcs\-float 
567 \&\-mapcs\-reentrant  \-mno\-apcs\-reentrant 
568 \&\-msched\-prolog  \-mno\-sched\-prolog 
569 \&\-mlittle\-endian  \-mbig\-endian 
570 \&\-mfloat\-abi=\fR\fIname\fR 
571 \&\fB\-mfp16\-format=\fR\fIname\fR
572 \&\fB\-mthumb\-interwork  \-mno\-thumb\-interwork 
573 \&\-mcpu=\fR\fIname\fR  \fB\-march=\fR\fIname\fR  \fB\-mfpu=\fR\fIname\fR  
574 \&\fB\-mtune=\fR\fIname\fR \fB\-mprint\-tune\-info 
575 \&\-mstructure\-size\-boundary=\fR\fIn\fR 
576 \&\fB\-mabort\-on\-noreturn 
577 \&\-mlong\-calls  \-mno\-long\-calls 
578 \&\-msingle\-pic\-base  \-mno\-single\-pic\-base 
579 \&\-mpic\-register=\fR\fIreg\fR 
580 \&\fB\-mnop\-fun\-dllimport 
581 \&\-mpoke\-function\-name 
582 \&\-mthumb  \-marm 
583 \&\-mtpcs\-frame  \-mtpcs\-leaf\-frame 
584 \&\-mcaller\-super\-interworking  \-mcallee\-super\-interworking 
585 \&\-mtp=\fR\fIname\fR \fB\-mtls\-dialect=\fR\fIdialect\fR 
586 \&\fB\-mword\-relocations 
587 \&\-mfix\-cortex\-m3\-ldrd 
588 \&\-munaligned\-access 
589 \&\-mneon\-for\-64bits 
590 \&\-mslow\-flash\-data 
591 \&\-masm\-syntax\-unified 
592 \&\-mrestrict\-it\fR
593 .Sp
594 \&\fI\s-1AVR\s0 Options\fR
595 \&\fB\-mmcu=\fR\fImcu\fR \fB\-maccumulate\-args \-mbranch\-cost=\fR\fIcost\fR 
596 \&\fB\-mcall\-prologues \-mint8 \-mn_flash=\fR\fIsize\fR \fB\-mno\-interrupts 
597 \&\-mrelax \-mrmw \-mstrict\-X \-mtiny\-stack \-nodevicelib \-Waddr\-space\-convert\fR
598 .Sp
599 \&\fIBlackfin Options\fR
600 \&\fB\-mcpu=\fR\fIcpu\fR[\fB\-\fR\fIsirevision\fR] 
601 \&\fB\-msim \-momit\-leaf\-frame\-pointer  \-mno\-omit\-leaf\-frame\-pointer 
602 \&\-mspecld\-anomaly  \-mno\-specld\-anomaly  \-mcsync\-anomaly  \-mno\-csync\-anomaly 
603 \&\-mlow\-64k \-mno\-low64k  \-mstack\-check\-l1  \-mid\-shared\-library 
604 \&\-mno\-id\-shared\-library  \-mshared\-library\-id=\fR\fIn\fR 
605 \&\fB\-mleaf\-id\-shared\-library  \-mno\-leaf\-id\-shared\-library 
606 \&\-msep\-data  \-mno\-sep\-data  \-mlong\-calls  \-mno\-long\-calls 
607 \&\-mfast\-fp \-minline\-plt \-mmulticore  \-mcorea  \-mcoreb  \-msdram 
608 \&\-micplb\fR
609 .Sp
610 \&\fIC6X Options\fR
611 \&\fB\-mbig\-endian  \-mlittle\-endian \-march=\fR\fIcpu\fR 
612 \&\fB\-msim \-msdata=\fR\fIsdata-type\fR
613 .Sp
614 \&\fI\s-1CRIS\s0 Options\fR
615 \&\fB\-mcpu=\fR\fIcpu\fR  \fB\-march=\fR\fIcpu\fR  \fB\-mtune=\fR\fIcpu\fR 
616 \&\fB\-mmax\-stack\-frame=\fR\fIn\fR  \fB\-melinux\-stacksize=\fR\fIn\fR 
617 \&\fB\-metrax4  \-metrax100  \-mpdebug  \-mcc\-init  \-mno\-side\-effects 
618 \&\-mstack\-align  \-mdata\-align  \-mconst\-align 
619 \&\-m32\-bit  \-m16\-bit  \-m8\-bit  \-mno\-prologue\-epilogue  \-mno\-gotplt 
620 \&\-melf  \-maout  \-melinux  \-mlinux  \-sim  \-sim2 
621 \&\-mmul\-bug\-workaround  \-mno\-mul\-bug\-workaround\fR
622 .Sp
623 \&\fI\s-1CR16\s0 Options\fR
624 \&\fB\-mmac 
625 \&\-mcr16cplus \-mcr16c 
626 \&\-msim \-mint32 \-mbit\-ops
627 \&\-mdata\-model=\fR\fImodel\fR
628 .Sp
629 \&\fIDarwin Options\fR
630 \&\fB\-all_load  \-allowable_client  \-arch  \-arch_errors_fatal 
631 \&\-arch_only  \-bind_at_load  \-bundle  \-bundle_loader 
632 \&\-client_name  \-compatibility_version  \-current_version 
633 \&\-dead_strip 
634 \&\-dependency\-file  \-dylib_file  \-dylinker_install_name 
635 \&\-dynamic  \-dynamiclib  \-exported_symbols_list 
636 \&\-filelist  \-flat_namespace  \-force_cpusubtype_ALL 
637 \&\-force_flat_namespace  \-headerpad_max_install_names 
638 \&\-iframework 
639 \&\-image_base  \-init  \-install_name  \-keep_private_externs 
640 \&\-multi_module  \-multiply_defined  \-multiply_defined_unused 
641 \&\-noall_load   \-no_dead_strip_inits_and_terms 
642 \&\-nofixprebinding \-nomultidefs  \-noprebind  \-noseglinkedit 
643 \&\-pagezero_size  \-prebind  \-prebind_all_twolevel_modules 
644 \&\-private_bundle  \-read_only_relocs  \-sectalign 
645 \&\-sectobjectsymbols  \-whyload  \-seg1addr 
646 \&\-sectcreate  \-sectobjectsymbols  \-sectorder 
647 \&\-segaddr \-segs_read_only_addr \-segs_read_write_addr 
648 \&\-seg_addr_table  \-seg_addr_table_filename  \-seglinkedit 
649 \&\-segprot  \-segs_read_only_addr  \-segs_read_write_addr 
650 \&\-single_module  \-static  \-sub_library  \-sub_umbrella 
651 \&\-twolevel_namespace  \-umbrella  \-undefined 
652 \&\-unexported_symbols_list  \-weak_reference_mismatches 
653 \&\-whatsloaded \-F \-gused \-gfull \-mmacosx\-version\-min=\fR\fIversion\fR 
654 \&\fB\-mkernel \-mone\-byte\-bool\fR
655 .Sp
656 \&\fI\s-1DEC\s0 Alpha Options\fR
657 \&\fB\-mno\-fp\-regs  \-msoft\-float 
658 \&\-mieee  \-mieee\-with\-inexact  \-mieee\-conformant 
659 \&\-mfp\-trap\-mode=\fR\fImode\fR  \fB\-mfp\-rounding\-mode=\fR\fImode\fR 
660 \&\fB\-mtrap\-precision=\fR\fImode\fR  \fB\-mbuild\-constants 
661 \&\-mcpu=\fR\fIcpu-type\fR  \fB\-mtune=\fR\fIcpu-type\fR 
662 \&\fB\-mbwx  \-mmax  \-mfix  \-mcix 
663 \&\-mfloat\-vax  \-mfloat\-ieee 
664 \&\-mexplicit\-relocs  \-msmall\-data  \-mlarge\-data 
665 \&\-msmall\-text  \-mlarge\-text 
666 \&\-mmemory\-latency=\fR\fItime\fR
667 .Sp
668 \&\fI\s-1FR30\s0 Options\fR
669 \&\fB\-msmall\-model \-mno\-lsim\fR
670 .Sp
671 \&\fI\s-1FRV\s0 Options\fR
672 \&\fB\-mgpr\-32  \-mgpr\-64  \-mfpr\-32  \-mfpr\-64 
673 \&\-mhard\-float  \-msoft\-float 
674 \&\-malloc\-cc  \-mfixed\-cc  \-mdword  \-mno\-dword 
675 \&\-mdouble  \-mno\-double 
676 \&\-mmedia  \-mno\-media  \-mmuladd  \-mno\-muladd 
677 \&\-mfdpic  \-minline\-plt \-mgprel\-ro  \-multilib\-library\-pic 
678 \&\-mlinked\-fp  \-mlong\-calls  \-malign\-labels 
679 \&\-mlibrary\-pic  \-macc\-4  \-macc\-8 
680 \&\-mpack  \-mno\-pack  \-mno\-eflags  \-mcond\-move  \-mno\-cond\-move 
681 \&\-moptimize\-membar \-mno\-optimize\-membar 
682 \&\-mscc  \-mno\-scc  \-mcond\-exec  \-mno\-cond\-exec 
683 \&\-mvliw\-branch  \-mno\-vliw\-branch 
684 \&\-mmulti\-cond\-exec  \-mno\-multi\-cond\-exec  \-mnested\-cond\-exec 
685 \&\-mno\-nested\-cond\-exec  \-mtomcat\-stats 
686 \&\-mTLS \-mtls 
687 \&\-mcpu=\fR\fIcpu\fR
688 .Sp
689 \&\fIGNU/Linux Options\fR
690 \&\fB\-mglibc \-muclibc \-mbionic \-mandroid 
691 \&\-tno\-android\-cc \-tno\-android\-ld\fR
692 .Sp
693 \&\fIH8/300 Options\fR
694 \&\fB\-mrelax  \-mh  \-ms  \-mn  \-mexr \-mno\-exr  \-mint32  \-malign\-300\fR
695 .Sp
696 \&\fI\s-1HPPA\s0 Options\fR
697 \&\fB\-march=\fR\fIarchitecture-type\fR 
698 \&\fB\-mdisable\-fpregs  \-mdisable\-indexing 
699 \&\-mfast\-indirect\-calls  \-mgas  \-mgnu\-ld   \-mhp\-ld 
700 \&\-mfixed\-range=\fR\fIregister-range\fR 
701 \&\fB\-mjump\-in\-delay \-mlinker\-opt \-mlong\-calls 
702 \&\-mlong\-load\-store  \-mno\-disable\-fpregs 
703 \&\-mno\-disable\-indexing  \-mno\-fast\-indirect\-calls  \-mno\-gas 
704 \&\-mno\-jump\-in\-delay  \-mno\-long\-load\-store 
705 \&\-mno\-portable\-runtime  \-mno\-soft\-float 
706 \&\-mno\-space\-regs  \-msoft\-float  \-mpa\-risc\-1\-0 
707 \&\-mpa\-risc\-1\-1  \-mpa\-risc\-2\-0  \-mportable\-runtime 
708 \&\-mschedule=\fR\fIcpu-type\fR  \fB\-mspace\-regs  \-msio  \-mwsio 
709 \&\-munix=\fR\fIunix-std\fR  \fB\-nolibdld  \-static  \-threads\fR
710 .Sp
711 \&\fI\s-1IA\-64\s0 Options\fR
712 \&\fB\-mbig\-endian  \-mlittle\-endian  \-mgnu\-as  \-mgnu\-ld  \-mno\-pic 
713 \&\-mvolatile\-asm\-stop  \-mregister\-names  \-msdata \-mno\-sdata 
714 \&\-mconstant\-gp  \-mauto\-pic  \-mfused\-madd 
715 \&\-minline\-float\-divide\-min\-latency 
716 \&\-minline\-float\-divide\-max\-throughput 
717 \&\-mno\-inline\-float\-divide 
718 \&\-minline\-int\-divide\-min\-latency 
719 \&\-minline\-int\-divide\-max\-throughput  
720 \&\-mno\-inline\-int\-divide 
721 \&\-minline\-sqrt\-min\-latency \-minline\-sqrt\-max\-throughput 
722 \&\-mno\-inline\-sqrt 
723 \&\-mdwarf2\-asm \-mearly\-stop\-bits 
724 \&\-mfixed\-range=\fR\fIregister-range\fR \fB\-mtls\-size=\fR\fItls-size\fR 
725 \&\fB\-mtune=\fR\fIcpu-type\fR \fB\-milp32 \-mlp64 
726 \&\-msched\-br\-data\-spec \-msched\-ar\-data\-spec \-msched\-control\-spec 
727 \&\-msched\-br\-in\-data\-spec \-msched\-ar\-in\-data\-spec \-msched\-in\-control\-spec 
728 \&\-msched\-spec\-ldc \-msched\-spec\-control\-ldc 
729 \&\-msched\-prefer\-non\-data\-spec\-insns \-msched\-prefer\-non\-control\-spec\-insns 
730 \&\-msched\-stop\-bits\-after\-every\-cycle \-msched\-count\-spec\-in\-critical\-path 
731 \&\-msel\-sched\-dont\-check\-control\-spec \-msched\-fp\-mem\-deps\-zero\-cost 
732 \&\-msched\-max\-memory\-insns\-hard\-limit \-msched\-max\-memory\-insns=\fR\fImax-insns\fR
733 .Sp
734 \&\fI\s-1LM32\s0 Options\fR
735 \&\fB\-mbarrel\-shift\-enabled \-mdivide\-enabled \-mmultiply\-enabled 
736 \&\-msign\-extend\-enabled \-muser\-enabled\fR
737 .Sp
738 \&\fIM32R/D Options\fR
739 \&\fB\-m32r2 \-m32rx \-m32r 
740 \&\-mdebug 
741 \&\-malign\-loops \-mno\-align\-loops 
742 \&\-missue\-rate=\fR\fInumber\fR 
743 \&\fB\-mbranch\-cost=\fR\fInumber\fR 
744 \&\fB\-mmodel=\fR\fIcode-size-model-type\fR 
745 \&\fB\-msdata=\fR\fIsdata-type\fR 
746 \&\fB\-mno\-flush\-func \-mflush\-func=\fR\fIname\fR 
747 \&\fB\-mno\-flush\-trap \-mflush\-trap=\fR\fInumber\fR 
748 \&\fB\-G\fR \fInum\fR
749 .Sp
750 \&\fIM32C Options\fR
751 \&\fB\-mcpu=\fR\fIcpu\fR \fB\-msim \-memregs=\fR\fInumber\fR
752 .Sp
753 \&\fIM680x0 Options\fR
754 \&\fB\-march=\fR\fIarch\fR  \fB\-mcpu=\fR\fIcpu\fR  \fB\-mtune=\fR\fItune\fR 
755 \&\fB\-m68000  \-m68020  \-m68020\-40  \-m68020\-60  \-m68030  \-m68040 
756 \&\-m68060  \-mcpu32  \-m5200  \-m5206e  \-m528x  \-m5307  \-m5407 
757 \&\-mcfv4e  \-mbitfield  \-mno\-bitfield  \-mc68000  \-mc68020 
758 \&\-mnobitfield  \-mrtd  \-mno\-rtd  \-mdiv  \-mno\-div  \-mshort 
759 \&\-mno\-short  \-mhard\-float  \-m68881  \-msoft\-float  \-mpcrel 
760 \&\-malign\-int  \-mstrict\-align  \-msep\-data  \-mno\-sep\-data 
761 \&\-mshared\-library\-id=n  \-mid\-shared\-library  \-mno\-id\-shared\-library 
762 \&\-mxgot \-mno\-xgot\fR
763 .Sp
764 \&\fIMCore Options\fR
765 \&\fB\-mhardlit  \-mno\-hardlit  \-mdiv  \-mno\-div  \-mrelax\-immediates 
766 \&\-mno\-relax\-immediates  \-mwide\-bitfields  \-mno\-wide\-bitfields 
767 \&\-m4byte\-functions  \-mno\-4byte\-functions  \-mcallgraph\-data 
768 \&\-mno\-callgraph\-data  \-mslow\-bytes  \-mno\-slow\-bytes  \-mno\-lsim 
769 \&\-mlittle\-endian  \-mbig\-endian  \-m210  \-m340  \-mstack\-increment\fR
770 .Sp
771 \&\fIMeP Options\fR
772 \&\fB\-mabsdiff \-mall\-opts \-maverage \-mbased=\fR\fIn\fR \fB\-mbitops 
773 \&\-mc=\fR\fIn\fR \fB\-mclip \-mconfig=\fR\fIname\fR \fB\-mcop \-mcop32 \-mcop64 \-mivc2 
774 \&\-mdc \-mdiv \-meb \-mel \-mio\-volatile \-ml \-mleadz \-mm \-mminmax 
775 \&\-mmult \-mno\-opts \-mrepeat \-ms \-msatur \-msdram \-msim \-msimnovec \-mtf 
776 \&\-mtiny=\fR\fIn\fR
777 .Sp
778 \&\fIMicroBlaze Options\fR
779 \&\fB\-msoft\-float \-mhard\-float \-msmall\-divides \-mcpu=\fR\fIcpu\fR 
780 \&\fB\-mmemcpy \-mxl\-soft\-mul \-mxl\-soft\-div \-mxl\-barrel\-shift 
781 \&\-mxl\-pattern\-compare \-mxl\-stack\-check \-mxl\-gp\-opt \-mno\-clearbss 
782 \&\-mxl\-multiply\-high \-mxl\-float\-convert \-mxl\-float\-sqrt 
783 \&\-mbig\-endian \-mlittle\-endian \-mxl\-reorder \-mxl\-mode\-\fR\fIapp-model\fR
784 .Sp
785 \&\fI\s-1MIPS\s0 Options\fR
786 \&\fB\-EL  \-EB  \-march=\fR\fIarch\fR  \fB\-mtune=\fR\fIarch\fR 
787 \&\fB\-mips1  \-mips2  \-mips3  \-mips4  \-mips32  \-mips32r2  \-mips32r3  \-mips32r5 
788 \&\-mips32r6  \-mips64  \-mips64r2  \-mips64r3  \-mips64r5  \-mips64r6 
789 \&\-mips16  \-mno\-mips16  \-mflip\-mips16 
790 \&\-minterlink\-compressed \-mno\-interlink\-compressed 
791 \&\-minterlink\-mips16  \-mno\-interlink\-mips16 
792 \&\-mabi=\fR\fIabi\fR  \fB\-mabicalls  \-mno\-abicalls 
793 \&\-mshared  \-mno\-shared  \-mplt  \-mno\-plt  \-mxgot  \-mno\-xgot 
794 \&\-mgp32  \-mgp64  \-mfp32  \-mfpxx  \-mfp64  \-mhard\-float  \-msoft\-float 
795 \&\-mno\-float  \-msingle\-float  \-mdouble\-float 
796 \&\-modd\-spreg \-mno\-odd\-spreg 
797 \&\-mabs=\fR\fImode\fR  \fB\-mnan=\fR\fIencoding\fR 
798 \&\fB\-mdsp  \-mno\-dsp  \-mdspr2  \-mno\-dspr2 
799 \&\-mmcu \-mmno\-mcu 
800 \&\-meva \-mno\-eva 
801 \&\-mvirt \-mno\-virt 
802 \&\-mxpa \-mno\-xpa 
803 \&\-mmicromips \-mno\-micromips 
804 \&\-mfpu=\fR\fIfpu-type\fR 
805 \&\fB\-msmartmips  \-mno\-smartmips 
806 \&\-mpaired\-single  \-mno\-paired\-single  \-mdmx  \-mno\-mdmx 
807 \&\-mips3d  \-mno\-mips3d  \-mmt  \-mno\-mt  \-mllsc  \-mno\-llsc 
808 \&\-mlong64  \-mlong32  \-msym32  \-mno\-sym32 
809 \&\-G\fR\fInum\fR  \fB\-mlocal\-sdata  \-mno\-local\-sdata 
810 \&\-mextern\-sdata  \-mno\-extern\-sdata  \-mgpopt  \-mno\-gopt 
811 \&\-membedded\-data  \-mno\-embedded\-data 
812 \&\-muninit\-const\-in\-rodata  \-mno\-uninit\-const\-in\-rodata 
813 \&\-mcode\-readable=\fR\fIsetting\fR 
814 \&\fB\-msplit\-addresses  \-mno\-split\-addresses 
815 \&\-mexplicit\-relocs  \-mno\-explicit\-relocs 
816 \&\-mcheck\-zero\-division  \-mno\-check\-zero\-division 
817 \&\-mdivide\-traps  \-mdivide\-breaks 
818 \&\-mmemcpy  \-mno\-memcpy  \-mlong\-calls  \-mno\-long\-calls 
819 \&\-mmad \-mno\-mad \-mimadd \-mno\-imadd \-mfused\-madd  \-mno\-fused\-madd  \-nocpp 
820 \&\-mfix\-24k \-mno\-fix\-24k 
821 \&\-mfix\-r4000  \-mno\-fix\-r4000  \-mfix\-r4400  \-mno\-fix\-r4400 
822 \&\-mfix\-r10000 \-mno\-fix\-r10000  \-mfix\-rm7000 \-mno\-fix\-rm7000 
823 \&\-mfix\-vr4120  \-mno\-fix\-vr4120 
824 \&\-mfix\-vr4130  \-mno\-fix\-vr4130  \-mfix\-sb1  \-mno\-fix\-sb1 
825 \&\-mflush\-func=\fR\fIfunc\fR  \fB\-mno\-flush\-func 
826 \&\-mbranch\-cost=\fR\fInum\fR  \fB\-mbranch\-likely  \-mno\-branch\-likely 
827 \&\-mfp\-exceptions \-mno\-fp\-exceptions 
828 \&\-mvr4130\-align \-mno\-vr4130\-align \-msynci \-mno\-synci 
829 \&\-mrelax\-pic\-calls \-mno\-relax\-pic\-calls \-mmcount\-ra\-address\fR
830 .Sp
831 \&\fI\s-1MMIX\s0 Options\fR
832 \&\fB\-mlibfuncs  \-mno\-libfuncs  \-mepsilon  \-mno\-epsilon  \-mabi=gnu 
833 \&\-mabi=mmixware  \-mzero\-extend  \-mknuthdiv  \-mtoplevel\-symbols 
834 \&\-melf  \-mbranch\-predict  \-mno\-branch\-predict  \-mbase\-addresses 
835 \&\-mno\-base\-addresses  \-msingle\-exit  \-mno\-single\-exit\fR
836 .Sp
837 \&\fI\s-1MN10300\s0 Options\fR
838 \&\fB\-mmult\-bug  \-mno\-mult\-bug 
839 \&\-mno\-am33 \-mam33 \-mam33\-2 \-mam34 
840 \&\-mtune=\fR\fIcpu-type\fR 
841 \&\fB\-mreturn\-pointer\-on\-d0 
842 \&\-mno\-crt0  \-mrelax \-mliw \-msetlb\fR
843 .Sp
844 \&\fIMoxie Options\fR
845 \&\fB\-meb \-mel \-mmul.x \-mno\-crt0\fR
846 .Sp
847 \&\fI\s-1MSP430\s0 Options\fR
848 \&\fB\-msim \-masm\-hex \-mmcu= \-mcpu= \-mlarge \-msmall \-mrelax 
849 \&\-mhwmult= \-minrt\fR
850 .Sp
851 \&\fI\s-1NDS32\s0 Options\fR
852 \&\fB\-mbig\-endian \-mlittle\-endian 
853 \&\-mreduced\-regs \-mfull\-regs 
854 \&\-mcmov \-mno\-cmov 
855 \&\-mperf\-ext \-mno\-perf\-ext 
856 \&\-mv3push \-mno\-v3push 
857 \&\-m16bit \-mno\-16bit 
858 \&\-misr\-vector\-size=\fR\fInum\fR 
859 \&\fB\-mcache\-block\-size=\fR\fInum\fR 
860 \&\fB\-march=\fR\fIarch\fR 
861 \&\fB\-mcmodel=\fR\fIcode-model\fR 
862 \&\fB\-mctor\-dtor \-mrelax\fR
863 .Sp
864 \&\fINios \s-1II\s0 Options\fR
865 \&\fB\-G\fR \fInum\fR \fB\-mgpopt=\fR\fIoption\fR \fB\-mgpopt \-mno\-gpopt 
866 \&\-mel \-meb 
867 \&\-mno\-bypass\-cache \-mbypass\-cache 
868 \&\-mno\-cache\-volatile \-mcache\-volatile 
869 \&\-mno\-fast\-sw\-div \-mfast\-sw\-div 
870 \&\-mhw\-mul \-mno\-hw\-mul \-mhw\-mulx \-mno\-hw\-mulx \-mno\-hw\-div \-mhw\-div 
871 \&\-mcustom\-\fR\fIinsn\fR\fB=\fR\fIN\fR \fB\-mno\-custom\-\fR\fIinsn\fR 
872 \&\fB\-mcustom\-fpu\-cfg=\fR\fIname\fR 
873 \&\fB\-mhal \-msmallc \-msys\-crt0=\fR\fIname\fR \fB\-msys\-lib=\fR\fIname\fR
874 .Sp
875 \&\fINvidia \s-1PTX\s0 Options\fR
876 \&\fB\-m32 \-m64 \-mmainkernel\fR
877 .Sp
878 \&\fI\s-1PDP\-11\s0 Options\fR
879 \&\fB\-mfpu  \-msoft\-float  \-mac0  \-mno\-ac0  \-m40  \-m45  \-m10 
880 \&\-mbcopy  \-mbcopy\-builtin  \-mint32  \-mno\-int16 
881 \&\-mint16  \-mno\-int32  \-mfloat32  \-mno\-float64 
882 \&\-mfloat64  \-mno\-float32  \-mabshi  \-mno\-abshi 
883 \&\-mbranch\-expensive  \-mbranch\-cheap 
884 \&\-munix\-asm  \-mdec\-asm\fR
885 .Sp
886 \&\fIpicoChip Options\fR
887 \&\fB\-mae=\fR\fIae_type\fR \fB\-mvliw\-lookahead=\fR\fIN\fR 
888 \&\fB\-msymbol\-as\-address \-mno\-inefficient\-warnings\fR
889 .Sp
890 \&\fIPowerPC Options\fR
891 See \s-1RS/6000\s0 and PowerPC Options.
892 .Sp
893 \&\fI\s-1RL78\s0 Options\fR
894 \&\fB\-msim \-mmul=none \-mmul=g13 \-mmul=rl78 
895 \&\-m64bit\-doubles \-m32bit\-doubles\fR
896 .Sp
897 \&\fI\s-1RS/6000\s0 and PowerPC Options\fR
898 \&\fB\-mcpu=\fR\fIcpu-type\fR 
899 \&\fB\-mtune=\fR\fIcpu-type\fR 
900 \&\fB\-mcmodel=\fR\fIcode-model\fR 
901 \&\fB\-mpowerpc64 
902 \&\-maltivec  \-mno\-altivec 
903 \&\-mpowerpc\-gpopt  \-mno\-powerpc\-gpopt 
904 \&\-mpowerpc\-gfxopt  \-mno\-powerpc\-gfxopt 
905 \&\-mmfcrf  \-mno\-mfcrf  \-mpopcntb  \-mno\-popcntb \-mpopcntd \-mno\-popcntd 
906 \&\-mfprnd  \-mno\-fprnd 
907 \&\-mcmpb \-mno\-cmpb \-mmfpgpr \-mno\-mfpgpr \-mhard\-dfp \-mno\-hard\-dfp 
908 \&\-mfull\-toc   \-mminimal\-toc  \-mno\-fp\-in\-toc  \-mno\-sum\-in\-toc 
909 \&\-m64  \-m32  \-mxl\-compat  \-mno\-xl\-compat  \-mpe 
910 \&\-malign\-power  \-malign\-natural 
911 \&\-msoft\-float  \-mhard\-float  \-mmultiple  \-mno\-multiple 
912 \&\-msingle\-float \-mdouble\-float \-msimple\-fpu 
913 \&\-mstring  \-mno\-string  \-mupdate  \-mno\-update 
914 \&\-mavoid\-indexed\-addresses  \-mno\-avoid\-indexed\-addresses 
915 \&\-mfused\-madd  \-mno\-fused\-madd  \-mbit\-align  \-mno\-bit\-align 
916 \&\-mstrict\-align  \-mno\-strict\-align  \-mrelocatable 
917 \&\-mno\-relocatable  \-mrelocatable\-lib  \-mno\-relocatable\-lib 
918 \&\-mtoc  \-mno\-toc  \-mlittle  \-mlittle\-endian  \-mbig  \-mbig\-endian 
919 \&\-mdynamic\-no\-pic  \-maltivec \-mswdiv  \-msingle\-pic\-base 
920 \&\-mprioritize\-restricted\-insns=\fR\fIpriority\fR 
921 \&\fB\-msched\-costly\-dep=\fR\fIdependence_type\fR 
922 \&\fB\-minsert\-sched\-nops=\fR\fIscheme\fR 
923 \&\fB\-mcall\-sysv  \-mcall\-netbsd 
924 \&\-maix\-struct\-return  \-msvr4\-struct\-return 
925 \&\-mabi=\fR\fIabi-type\fR \fB\-msecure\-plt \-mbss\-plt 
926 \&\-mblock\-move\-inline\-limit=\fR\fInum\fR 
927 \&\fB\-misel \-mno\-isel 
928 \&\-misel=yes  \-misel=no 
929 \&\-mspe \-mno\-spe 
930 \&\-mspe=yes  \-mspe=no 
931 \&\-mpaired 
932 \&\-mgen\-cell\-microcode \-mwarn\-cell\-microcode 
933 \&\-mvrsave \-mno\-vrsave 
934 \&\-mmulhw \-mno\-mulhw 
935 \&\-mdlmzb \-mno\-dlmzb 
936 \&\-mfloat\-gprs=yes  \-mfloat\-gprs=no \-mfloat\-gprs=single \-mfloat\-gprs=double 
937 \&\-mprototype  \-mno\-prototype 
938 \&\-msim  \-mmvme  \-mads  \-myellowknife  \-memb  \-msdata 
939 \&\-msdata=\fR\fIopt\fR  \fB\-mvxworks  \-G\fR \fInum\fR  \fB\-pthread 
940 \&\-mrecip \-mrecip=\fR\fIopt\fR \fB\-mno\-recip \-mrecip\-precision 
941 \&\-mno\-recip\-precision 
942 \&\-mveclibabi=\fR\fItype\fR \fB\-mfriz \-mno\-friz 
943 \&\-mpointers\-to\-nested\-functions \-mno\-pointers\-to\-nested\-functions 
944 \&\-msave\-toc\-indirect \-mno\-save\-toc\-indirect 
945 \&\-mpower8\-fusion \-mno\-mpower8\-fusion \-mpower8\-vector \-mno\-power8\-vector 
946 \&\-mcrypto \-mno\-crypto \-mdirect\-move \-mno\-direct\-move 
947 \&\-mquad\-memory \-mno\-quad\-memory 
948 \&\-mquad\-memory\-atomic \-mno\-quad\-memory\-atomic 
949 \&\-mcompat\-align\-parm \-mno\-compat\-align\-parm 
950 \&\-mupper\-regs\-df \-mno\-upper\-regs\-df \-mupper\-regs\-sf \-mno\-upper\-regs\-sf 
951 \&\-mupper\-regs \-mno\-upper\-regs\fR
952 .Sp
953 \&\fI\s-1RX\s0 Options\fR
954 \&\fB\-m64bit\-doubles  \-m32bit\-doubles  \-fpu  \-nofpu
955 \&\-mcpu=
956 \&\-mbig\-endian\-data \-mlittle\-endian\-data 
957 \&\-msmall\-data 
958 \&\-msim  \-mno\-sim
959 \&\-mas100\-syntax \-mno\-as100\-syntax
960 \&\-mrelax
961 \&\-mmax\-constant\-size=
962 \&\-mint\-register=
963 \&\-mpid
964 \&\-mno\-warn\-multiple\-fast\-interrupts
965 \&\-msave\-acc\-in\-interrupts\fR
966 .Sp
967 \&\fIS/390 and zSeries Options\fR
968 \&\fB\-mtune=\fR\fIcpu-type\fR  \fB\-march=\fR\fIcpu-type\fR 
969 \&\fB\-mhard\-float  \-msoft\-float  \-mhard\-dfp \-mno\-hard\-dfp 
970 \&\-mlong\-double\-64 \-mlong\-double\-128 
971 \&\-mbackchain  \-mno\-backchain \-mpacked\-stack  \-mno\-packed\-stack 
972 \&\-msmall\-exec  \-mno\-small\-exec  \-mmvcle \-mno\-mvcle 
973 \&\-m64  \-m31  \-mdebug  \-mno\-debug  \-mesa  \-mzarch 
974 \&\-mtpf\-trace \-mno\-tpf\-trace  \-mfused\-madd  \-mno\-fused\-madd 
975 \&\-mwarn\-framesize  \-mwarn\-dynamicstack  \-mstack\-size \-mstack\-guard 
976 \&\-mhotpatch=\fR\fIhalfwords\fR\fB,\fR\fIhalfwords\fR
977 .Sp
978 \&\fIScore Options\fR
979 \&\fB\-meb \-mel 
980 \&\-mnhwloop 
981 \&\-muls 
982 \&\-mmac 
983 \&\-mscore5 \-mscore5u \-mscore7 \-mscore7d\fR
984 .Sp
985 \&\fI\s-1SH\s0 Options\fR
986 \&\fB\-m1  \-m2  \-m2e 
987 \&\-m2a\-nofpu \-m2a\-single\-only \-m2a\-single \-m2a 
988 \&\-m3  \-m3e 
989 \&\-m4\-nofpu  \-m4\-single\-only  \-m4\-single  \-m4 
990 \&\-m4a\-nofpu \-m4a\-single\-only \-m4a\-single \-m4a \-m4al 
991 \&\-m5\-64media  \-m5\-64media\-nofpu 
992 \&\-m5\-32media  \-m5\-32media\-nofpu 
993 \&\-m5\-compact  \-m5\-compact\-nofpu 
994 \&\-mb  \-ml  \-mdalign  \-mrelax 
995 \&\-mbigtable \-mfmovd \-mhitachi \-mrenesas \-mno\-renesas \-mnomacsave 
996 \&\-mieee \-mno\-ieee \-mbitops  \-misize  \-minline\-ic_invalidate \-mpadstruct 
997 \&\-mspace \-mprefergot  \-musermode \-multcost=\fR\fInumber\fR \fB\-mdiv=\fR\fIstrategy\fR 
998 \&\fB\-mdivsi3_libfunc=\fR\fIname\fR \fB\-mfixed\-range=\fR\fIregister-range\fR 
999 \&\fB\-mindexed\-addressing \-mgettrcost=\fR\fInumber\fR \fB\-mpt\-fixed 
1000 \&\-maccumulate\-outgoing\-args \-minvalid\-symbols 
1001 \&\-matomic\-model=\fR\fIatomic-model\fR 
1002 \&\fB\-mbranch\-cost=\fR\fInum\fR \fB\-mzdcbranch \-mno\-zdcbranch 
1003 \&\-mcbranch\-force\-delay\-slot 
1004 \&\-mfused\-madd \-mno\-fused\-madd \-mfsca \-mno\-fsca \-mfsrra \-mno\-fsrra 
1005 \&\-mpretend\-cmove \-mtas\fR
1006 .Sp
1007 \&\fISolaris 2 Options\fR
1008 \&\fB\-mclear\-hwcap \-mno\-clear\-hwcap \-mimpure\-text  \-mno\-impure\-text 
1009 \&\-pthreads \-pthread\fR
1010 .Sp
1011 \&\fI\s-1SPARC\s0 Options\fR
1012 \&\fB\-mcpu=\fR\fIcpu-type\fR 
1013 \&\fB\-mtune=\fR\fIcpu-type\fR 
1014 \&\fB\-mcmodel=\fR\fIcode-model\fR 
1015 \&\fB\-mmemory\-model=\fR\fImem-model\fR 
1016 \&\fB\-m32  \-m64  \-mapp\-regs  \-mno\-app\-regs 
1017 \&\-mfaster\-structs  \-mno\-faster\-structs  \-mflat  \-mno\-flat 
1018 \&\-mfpu  \-mno\-fpu  \-mhard\-float  \-msoft\-float 
1019 \&\-mhard\-quad\-float  \-msoft\-quad\-float 
1020 \&\-mstack\-bias  \-mno\-stack\-bias 
1021 \&\-munaligned\-doubles  \-mno\-unaligned\-doubles 
1022 \&\-muser\-mode  \-mno\-user\-mode 
1023 \&\-mv8plus  \-mno\-v8plus  \-mvis  \-mno\-vis 
1024 \&\-mvis2  \-mno\-vis2  \-mvis3  \-mno\-vis3 
1025 \&\-mcbcond \-mno\-cbcond 
1026 \&\-mfmaf  \-mno\-fmaf  \-mpopc  \-mno\-popc 
1027 \&\-mfix\-at697f \-mfix\-ut699\fR
1028 .Sp
1029 \&\fI\s-1SPU\s0 Options\fR
1030 \&\fB\-mwarn\-reloc \-merror\-reloc 
1031 \&\-msafe\-dma \-munsafe\-dma 
1032 \&\-mbranch\-hints 
1033 \&\-msmall\-mem \-mlarge\-mem \-mstdmain 
1034 \&\-mfixed\-range=\fR\fIregister-range\fR 
1035 \&\fB\-mea32 \-mea64 
1036 \&\-maddress\-space\-conversion \-mno\-address\-space\-conversion 
1037 \&\-mcache\-size=\fR\fIcache-size\fR 
1038 \&\fB\-matomic\-updates \-mno\-atomic\-updates\fR
1039 .Sp
1040 \&\fISystem V Options\fR
1041 \&\fB\-Qy  \-Qn  \-YP,\fR\fIpaths\fR  \fB\-Ym,\fR\fIdir\fR
1042 .Sp
1043 \&\fITILE-Gx Options\fR
1044 \&\fB\-mcpu=CPU \-m32 \-m64 \-mbig\-endian \-mlittle\-endian 
1045 \&\-mcmodel=\fR\fIcode-model\fR
1046 .Sp
1047 \&\fITILEPro Options\fR
1048 \&\fB\-mcpu=\fR\fIcpu\fR \fB\-m32\fR
1049 .Sp
1050 \&\fIV850 Options\fR
1051 \&\fB\-mlong\-calls  \-mno\-long\-calls  \-mep  \-mno\-ep 
1052 \&\-mprolog\-function  \-mno\-prolog\-function  \-mspace 
1053 \&\-mtda=\fR\fIn\fR  \fB\-msda=\fR\fIn\fR  \fB\-mzda=\fR\fIn\fR 
1054 \&\fB\-mapp\-regs  \-mno\-app\-regs 
1055 \&\-mdisable\-callt  \-mno\-disable\-callt 
1056 \&\-mv850e2v3 \-mv850e2 \-mv850e1 \-mv850es 
1057 \&\-mv850e \-mv850 \-mv850e3v5 
1058 \&\-mloop 
1059 \&\-mrelax 
1060 \&\-mlong\-jumps 
1061 \&\-msoft\-float 
1062 \&\-mhard\-float 
1063 \&\-mgcc\-abi 
1064 \&\-mrh850\-abi 
1065 \&\-mbig\-switch\fR
1066 .Sp
1067 \&\fI\s-1VAX\s0 Options\fR
1068 \&\fB\-mg  \-mgnu  \-munix\fR
1069 .Sp
1070 \&\fIVisium Options\fR
1071 \&\fB\-mdebug \-msim \-mfpu \-mno\-fpu \-mhard\-float \-msoft\-float 
1072 \&\-mcpu=\fR\fIcpu-type\fR \fB\-mtune=\fR\fIcpu-type\fR \fB\-msv\-mode \-muser\-mode\fR
1073 .Sp
1074 \&\fI\s-1VMS\s0 Options\fR
1075 \&\fB\-mvms\-return\-codes \-mdebug\-main=\fR\fIprefix\fR \fB\-mmalloc64 
1076 \&\-mpointer\-size=\fR\fIsize\fR
1077 .Sp
1078 \&\fIVxWorks Options\fR
1079 \&\fB\-mrtp  \-non\-static  \-Bstatic  \-Bdynamic 
1080 \&\-Xbind\-lazy  \-Xbind\-now\fR
1081 .Sp
1082 \&\fIx86 Options\fR
1083 \&\fB\-mtune=\fR\fIcpu-type\fR  \fB\-march=\fR\fIcpu-type\fR 
1084 \&\fB\-mtune\-ctrl=\fR\fIfeature-list\fR \fB\-mdump\-tune\-features \-mno\-default 
1085 \&\-mfpmath=\fR\fIunit\fR 
1086 \&\fB\-masm=\fR\fIdialect\fR  \fB\-mno\-fancy\-math\-387 
1087 \&\-mno\-fp\-ret\-in\-387  \-msoft\-float 
1088 \&\-mno\-wide\-multiply  \-mrtd  \-malign\-double 
1089 \&\-mpreferred\-stack\-boundary=\fR\fInum\fR 
1090 \&\fB\-mincoming\-stack\-boundary=\fR\fInum\fR 
1091 \&\fB\-mcld \-mcx16 \-msahf \-mmovbe \-mcrc32 
1092 \&\-mrecip \-mrecip=\fR\fIopt\fR 
1093 \&\fB\-mvzeroupper \-mprefer\-avx128 
1094 \&\-mmmx  \-msse  \-msse2 \-msse3 \-mssse3 \-msse4.1 \-msse4.2 \-msse4 \-mavx 
1095 \&\-mavx2 \-mavx512f \-mavx512pf \-mavx512er \-mavx512cd \-msha 
1096 \&\-maes \-mpclmul \-mfsgsbase \-mrdrnd \-mf16c \-mfma \-mprefetchwt1 
1097 \&\-mclflushopt \-mxsavec \-mxsaves 
1098 \&\-msse4a \-m3dnow \-mpopcnt \-mabm \-mbmi \-mtbm \-mfma4 \-mxop \-mlzcnt 
1099 \&\-mbmi2 \-mfxsr \-mxsave \-mxsaveopt \-mrtm \-mlwp \-mmpx \-mmwaitx \-mthreads 
1100 \&\-mno\-align\-stringops  \-minline\-all\-stringops 
1101 \&\-minline\-stringops\-dynamically \-mstringop\-strategy=\fR\fIalg\fR 
1102 \&\fB\-mmemcpy\-strategy=\fR\fIstrategy\fR \fB\-mmemset\-strategy=\fR\fIstrategy\fR 
1103 \&\fB\-mpush\-args  \-maccumulate\-outgoing\-args  \-m128bit\-long\-double 
1104 \&\-m96bit\-long\-double \-mlong\-double\-64 \-mlong\-double\-80 \-mlong\-double\-128 
1105 \&\-mregparm=\fR\fInum\fR  \fB\-msseregparm 
1106 \&\-mveclibabi=\fR\fItype\fR \fB\-mvect8\-ret\-in\-mem 
1107 \&\-mpc32 \-mpc64 \-mpc80 \-mstackrealign 
1108 \&\-momit\-leaf\-frame\-pointer  \-mno\-red\-zone \-mno\-tls\-direct\-seg\-refs 
1109 \&\-mcmodel=\fR\fIcode-model\fR \fB\-mabi=\fR\fIname\fR \fB\-maddress\-mode=\fR\fImode\fR 
1110 \&\fB\-m32 \-m64 \-mx32 \-m16 \-mlarge\-data\-threshold=\fR\fInum\fR 
1111 \&\fB\-msse2avx \-mfentry \-mrecord\-mcount \-mnop\-mcount \-m8bit\-idiv 
1112 \&\-mavx256\-split\-unaligned\-load \-mavx256\-split\-unaligned\-store 
1113 \&\-malign\-data=\fR\fItype\fR \fB\-mstack\-protector\-guard=\fR\fIguard\fR
1114 .Sp
1115 \&\fIx86 Windows Options\fR
1116 \&\fB\-mconsole \-mcygwin \-mno\-cygwin \-mdll 
1117 \&\-mnop\-fun\-dllimport \-mthread 
1118 \&\-municode \-mwin32 \-mwindows \-fno\-set\-stack\-executable\fR
1119 .Sp
1120 \&\fIXstormy16 Options\fR
1121 \&\fB\-msim\fR
1122 .Sp
1123 \&\fIXtensa Options\fR
1124 \&\fB\-mconst16 \-mno\-const16 
1125 \&\-mfused\-madd  \-mno\-fused\-madd 
1126 \&\-mforce\-no\-pic 
1127 \&\-mserialize\-volatile  \-mno\-serialize\-volatile 
1128 \&\-mtext\-section\-literals  \-mno\-text\-section\-literals 
1129 \&\-mtarget\-align  \-mno\-target\-align 
1130 \&\-mlongcalls  \-mno\-longcalls\fR
1131 .Sp
1132 \&\fIzSeries Options\fR
1133 See S/390 and zSeries Options.
1134 .IP "\fICode Generation Options\fR" 4
1135 .IX Item "Code Generation Options"
1136 \&\fB\-fcall\-saved\-\fR\fIreg\fR  \fB\-fcall\-used\-\fR\fIreg\fR 
1137 \&\fB\-ffixed\-\fR\fIreg\fR  \fB\-fexceptions 
1138 \&\-fnon\-call\-exceptions  \-fdelete\-dead\-exceptions  \-funwind\-tables 
1139 \&\-fasynchronous\-unwind\-tables 
1140 \&\-fno\-gnu\-unique 
1141 \&\-finhibit\-size\-directive  \-finstrument\-functions 
1142 \&\-finstrument\-functions\-exclude\-function\-list=\fR\fIsym\fR\fB,\fR\fIsym\fR\fB,... 
1143 \&\-finstrument\-functions\-exclude\-file\-list=\fR\fIfile\fR\fB,\fR\fIfile\fR\fB,... 
1144 \&\-fno\-common  \-fno\-ident 
1145 \&\-fpcc\-struct\-return  \-fpic  \-fPIC \-fpie \-fPIE 
1146 \&\-fno\-jump\-tables 
1147 \&\-frecord\-gcc\-switches 
1148 \&\-freg\-struct\-return  \-fshort\-enums 
1149 \&\-fshort\-double  \-fshort\-wchar 
1150 \&\-fverbose\-asm  \-fpack\-struct[=\fR\fIn\fR\fB]  \-fstack\-check 
1151 \&\-fstack\-limit\-register=\fR\fIreg\fR  \fB\-fstack\-limit\-symbol=\fR\fIsym\fR 
1152 \&\fB\-fno\-stack\-limit \-fsplit\-stack 
1153 \&\-fleading\-underscore  \-ftls\-model=\fR\fImodel\fR 
1154 \&\fB\-fstack\-reuse=\fR\fIreuse_level\fR 
1155 \&\fB\-ftrapv  \-fwrapv  \-fbounds\-check 
1156 \&\-fvisibility=\fR[\fBdefault\fR|\fBinternal\fR|\fBhidden\fR|\fBprotected\fR] 
1157 \&\fB\-fstrict\-volatile\-bitfields \-fsync\-libcalls\fR
1158 .Sh "Options Controlling the Kind of Output"
1159 .IX Subsection "Options Controlling the Kind of Output"
1160 Compilation can involve up to four stages: preprocessing, compilation
1161 proper, assembly and linking, always in that order.  \s-1GCC\s0 is capable of
1162 preprocessing and compiling several files either into several
1163 assembler input files, or into one assembler input file; then each
1164 assembler input file produces an object file, and linking combines all
1165 the object files (those newly compiled, and those specified as input)
1166 into an executable file.
1167 .PP
1168 For any given input file, the file name suffix determines what kind of
1169 compilation is done:
1170 .IP "\fIfile\fR\fB.c\fR" 4
1171 .IX Item "file.c"
1172 C source code that must be preprocessed.
1173 .IP "\fIfile\fR\fB.i\fR" 4
1174 .IX Item "file.i"
1175 C source code that should not be preprocessed.
1176 .IP "\fIfile\fR\fB.ii\fR" 4
1177 .IX Item "file.ii"
1178 \&\*(C+ source code that should not be preprocessed.
1179 .IP "\fIfile\fR\fB.m\fR" 4
1180 .IX Item "file.m"
1181 Objective-C source code.  Note that you must link with the \fIlibobjc\fR
1182 library to make an Objective-C program work.
1183 .IP "\fIfile\fR\fB.mi\fR" 4
1184 .IX Item "file.mi"
1185 Objective-C source code that should not be preprocessed.
1186 .IP "\fIfile\fR\fB.mm\fR" 4
1187 .IX Item "file.mm"
1188 .PD 0
1189 .IP "\fIfile\fR\fB.M\fR" 4
1190 .IX Item "file.M"
1191 .PD
1192 Objective\-\*(C+ source code.  Note that you must link with the \fIlibobjc\fR
1193 library to make an Objective\-\*(C+ program work.  Note that \fB.M\fR refers
1194 to a literal capital M.
1195 .IP "\fIfile\fR\fB.mii\fR" 4
1196 .IX Item "file.mii"
1197 Objective\-\*(C+ source code that should not be preprocessed.
1198 .IP "\fIfile\fR\fB.h\fR" 4
1199 .IX Item "file.h"
1200 C, \*(C+, Objective-C or Objective\-\*(C+ header file to be turned into a
1201 precompiled header (default), or C, \*(C+ header file to be turned into an
1202 Ada spec (via the \fB\-fdump\-ada\-spec\fR switch).
1203 .IP "\fIfile\fR\fB.cc\fR" 4
1204 .IX Item "file.cc"
1205 .PD 0
1206 .IP "\fIfile\fR\fB.cp\fR" 4
1207 .IX Item "file.cp"
1208 .IP "\fIfile\fR\fB.cxx\fR" 4
1209 .IX Item "file.cxx"
1210 .IP "\fIfile\fR\fB.cpp\fR" 4
1211 .IX Item "file.cpp"
1212 .IP "\fIfile\fR\fB.CPP\fR" 4
1213 .IX Item "file.CPP"
1214 .IP "\fIfile\fR\fB.c++\fR" 4
1215 .IX Item "file.c++"
1216 .IP "\fIfile\fR\fB.C\fR" 4
1217 .IX Item "file.C"
1218 .PD
1219 \&\*(C+ source code that must be preprocessed.  Note that in \fB.cxx\fR,
1220 the last two letters must both be literally \fBx\fR.  Likewise,
1221 \&\fB.C\fR refers to a literal capital C.
1222 .IP "\fIfile\fR\fB.mm\fR" 4
1223 .IX Item "file.mm"
1224 .PD 0
1225 .IP "\fIfile\fR\fB.M\fR" 4
1226 .IX Item "file.M"
1227 .PD
1228 Objective\-\*(C+ source code that must be preprocessed.
1229 .IP "\fIfile\fR\fB.mii\fR" 4
1230 .IX Item "file.mii"
1231 Objective\-\*(C+ source code that should not be preprocessed.
1232 .IP "\fIfile\fR\fB.hh\fR" 4
1233 .IX Item "file.hh"
1234 .PD 0
1235 .IP "\fIfile\fR\fB.H\fR" 4
1236 .IX Item "file.H"
1237 .IP "\fIfile\fR\fB.hp\fR" 4
1238 .IX Item "file.hp"
1239 .IP "\fIfile\fR\fB.hxx\fR" 4
1240 .IX Item "file.hxx"
1241 .IP "\fIfile\fR\fB.hpp\fR" 4
1242 .IX Item "file.hpp"
1243 .IP "\fIfile\fR\fB.HPP\fR" 4
1244 .IX Item "file.HPP"
1245 .IP "\fIfile\fR\fB.h++\fR" 4
1246 .IX Item "file.h++"
1247 .IP "\fIfile\fR\fB.tcc\fR" 4
1248 .IX Item "file.tcc"
1249 .PD
1250 \&\*(C+ header file to be turned into a precompiled header or Ada spec.
1251 .IP "\fIfile\fR\fB.f\fR" 4
1252 .IX Item "file.f"
1253 .PD 0
1254 .IP "\fIfile\fR\fB.for\fR" 4
1255 .IX Item "file.for"
1256 .IP "\fIfile\fR\fB.ftn\fR" 4
1257 .IX Item "file.ftn"
1258 .PD
1259 Fixed form Fortran source code that should not be preprocessed.
1260 .IP "\fIfile\fR\fB.F\fR" 4
1261 .IX Item "file.F"
1262 .PD 0
1263 .IP "\fIfile\fR\fB.FOR\fR" 4
1264 .IX Item "file.FOR"
1265 .IP "\fIfile\fR\fB.fpp\fR" 4
1266 .IX Item "file.fpp"
1267 .IP "\fIfile\fR\fB.FPP\fR" 4
1268 .IX Item "file.FPP"
1269 .IP "\fIfile\fR\fB.FTN\fR" 4
1270 .IX Item "file.FTN"
1271 .PD
1272 Fixed form Fortran source code that must be preprocessed (with the traditional
1273 preprocessor).
1274 .IP "\fIfile\fR\fB.f90\fR" 4
1275 .IX Item "file.f90"
1276 .PD 0
1277 .IP "\fIfile\fR\fB.f95\fR" 4
1278 .IX Item "file.f95"
1279 .IP "\fIfile\fR\fB.f03\fR" 4
1280 .IX Item "file.f03"
1281 .IP "\fIfile\fR\fB.f08\fR" 4
1282 .IX Item "file.f08"
1283 .PD
1284 Free form Fortran source code that should not be preprocessed.
1285 .IP "\fIfile\fR\fB.F90\fR" 4
1286 .IX Item "file.F90"
1287 .PD 0
1288 .IP "\fIfile\fR\fB.F95\fR" 4
1289 .IX Item "file.F95"
1290 .IP "\fIfile\fR\fB.F03\fR" 4
1291 .IX Item "file.F03"
1292 .IP "\fIfile\fR\fB.F08\fR" 4
1293 .IX Item "file.F08"
1294 .PD
1295 Free form Fortran source code that must be preprocessed (with the
1296 traditional preprocessor).
1297 .IP "\fIfile\fR\fB.go\fR" 4
1298 .IX Item "file.go"
1299 Go source code.
1300 .IP "\fIfile\fR\fB.ads\fR" 4
1301 .IX Item "file.ads"
1302 Ada source code file that contains a library unit declaration (a
1303 declaration of a package, subprogram, or generic, or a generic
1304 instantiation), or a library unit renaming declaration (a package,
1305 generic, or subprogram renaming declaration).  Such files are also
1306 called \fIspecs\fR.
1307 .IP "\fIfile\fR\fB.adb\fR" 4
1308 .IX Item "file.adb"
1309 Ada source code file containing a library unit body (a subprogram or
1310 package body).  Such files are also called \fIbodies\fR.
1311 .IP "\fIfile\fR\fB.s\fR" 4
1312 .IX Item "file.s"
1313 Assembler code.
1314 .IP "\fIfile\fR\fB.S\fR" 4
1315 .IX Item "file.S"
1316 .PD 0
1317 .IP "\fIfile\fR\fB.sx\fR" 4
1318 .IX Item "file.sx"
1319 .PD
1320 Assembler code that must be preprocessed.
1321 .IP "\fIother\fR" 4
1322 .IX Item "other"
1323 An object file to be fed straight into linking.
1324 Any file name with no recognized suffix is treated this way.
1325 .PP
1326 You can specify the input language explicitly with the \fB\-x\fR option:
1327 .IP "\fB\-x\fR \fIlanguage\fR" 4
1328 .IX Item "-x language"
1329 Specify explicitly the \fIlanguage\fR for the following input files
1330 (rather than letting the compiler choose a default based on the file
1331 name suffix).  This option applies to all following input files until
1332 the next \fB\-x\fR option.  Possible values for \fIlanguage\fR are:
1333 .Sp
1334 .Vb 9
1335 \&        c  c\-header  cpp\-output
1336 \&        c++  c++\-header  c++\-cpp\-output
1337 \&        objective\-c  objective\-c\-header  objective\-c\-cpp\-output
1338 \&        objective\-c++ objective\-c++\-header objective\-c++\-cpp\-output
1339 \&        assembler  assembler\-with\-cpp
1340 \&        ada
1341 \&        f77  f77\-cpp\-input f95  f95\-cpp\-input
1342 \&        go
1343 \&        java
1344 .Ve
1345 .IP "\fB\-x none\fR" 4
1346 .IX Item "-x none"
1347 Turn off any specification of a language, so that subsequent files are
1348 handled according to their file name suffixes (as they are if \fB\-x\fR
1349 has not been used at all).
1350 .IP "\fB\-pass\-exit\-codes\fR" 4
1351 .IX Item "-pass-exit-codes"
1352 Normally the \fBgcc\fR program exits with the code of 1 if any
1353 phase of the compiler returns a non-success return code.  If you specify
1354 \&\fB\-pass\-exit\-codes\fR, the \fBgcc\fR program instead returns with
1355 the numerically highest error produced by any phase returning an error
1356 indication.  The C, \*(C+, and Fortran front ends return 4 if an internal
1357 compiler error is encountered.
1358 .PP
1359 If you only want some of the stages of compilation, you can use
1360 \&\fB\-x\fR (or filename suffixes) to tell \fBgcc\fR where to start, and
1361 one of the options \fB\-c\fR, \fB\-S\fR, or \fB\-E\fR to say where
1362 \&\fBgcc\fR is to stop.  Note that some combinations (for example,
1363 \&\fB\-x cpp-output \-E\fR) instruct \fBgcc\fR to do nothing at all.
1364 .IP "\fB\-c\fR" 4
1365 .IX Item "-c"
1366 Compile or assemble the source files, but do not link.  The linking
1367 stage simply is not done.  The ultimate output is in the form of an
1368 object file for each source file.
1369 .Sp
1370 By default, the object file name for a source file is made by replacing
1371 the suffix \fB.c\fR, \fB.i\fR, \fB.s\fR, etc., with \fB.o\fR.
1372 .Sp
1373 Unrecognized input files, not requiring compilation or assembly, are
1374 ignored.
1375 .IP "\fB\-S\fR" 4
1376 .IX Item "-S"
1377 Stop after the stage of compilation proper; do not assemble.  The output
1378 is in the form of an assembler code file for each non-assembler input
1379 file specified.
1380 .Sp
1381 By default, the assembler file name for a source file is made by
1382 replacing the suffix \fB.c\fR, \fB.i\fR, etc., with \fB.s\fR.
1383 .Sp
1384 Input files that don't require compilation are ignored.
1385 .IP "\fB\-E\fR" 4
1386 .IX Item "-E"
1387 Stop after the preprocessing stage; do not run the compiler proper.  The
1388 output is in the form of preprocessed source code, which is sent to the
1389 standard output.
1390 .Sp
1391 Input files that don't require preprocessing are ignored.
1392 .IP "\fB\-o\fR \fIfile\fR" 4
1393 .IX Item "-o file"
1394 Place output in file \fIfile\fR.  This applies to whatever
1395 sort of output is being produced, whether it be an executable file,
1396 an object file, an assembler file or preprocessed C code.
1397 .Sp
1398 If \fB\-o\fR is not specified, the default is to put an executable
1399 file in \fIa.out\fR, the object file for
1400 \&\fI\fIsource\fI.\fIsuffix\fI\fR in \fI\fIsource\fI.o\fR, its
1401 assembler file in \fI\fIsource\fI.s\fR, a precompiled header file in
1402 \&\fI\fIsource\fI.\fIsuffix\fI.gch\fR, and all preprocessed C source on
1403 standard output.
1404 .IP "\fB\-v\fR" 4
1405 .IX Item "-v"
1406 Print (on standard error output) the commands executed to run the stages
1407 of compilation.  Also print the version number of the compiler driver
1408 program and of the preprocessor and the compiler proper.
1409 .IP "\fB\-###\fR" 4
1410 .IX Item "-###"
1411 Like \fB\-v\fR except the commands are not executed and arguments
1412 are quoted unless they contain only alphanumeric characters or \f(CW\*(C`./\-_\*(C'\fR.
1413 This is useful for shell scripts to capture the driver-generated command lines.
1414 .IP "\fB\-pipe\fR" 4
1415 .IX Item "-pipe"
1416 Use pipes rather than temporary files for communication between the
1417 various stages of compilation.  This fails to work on some systems where
1418 the assembler is unable to read from a pipe; but the \s-1GNU\s0 assembler has
1419 no trouble.
1420 .IP "\fB\-\-help\fR" 4
1421 .IX Item "--help"
1422 Print (on the standard output) a description of the command-line options
1423 understood by \fBgcc\fR.  If the \fB\-v\fR option is also specified
1424 then \fB\-\-help\fR is also passed on to the various processes
1425 invoked by \fBgcc\fR, so that they can display the command-line options
1426 they accept.  If the \fB\-Wextra\fR option has also been specified
1427 (prior to the \fB\-\-help\fR option), then command-line options that
1428 have no documentation associated with them are also displayed.
1429 .IP "\fB\-\-target\-help\fR" 4
1430 .IX Item "--target-help"
1431 Print (on the standard output) a description of target-specific command-line
1432 options for each tool.  For some targets extra target-specific
1433 information may also be printed.
1434 .IP "\fB\-\-help={\fR\fIclass\fR|[\fB^\fR]\fIqualifier\fR\fB}\fR[\fB,...\fR]" 4
1435 .IX Item "--help={class|[^]qualifier}[,...]"
1436 Print (on the standard output) a description of the command-line
1437 options understood by the compiler that fit into all specified classes
1438 and qualifiers.  These are the supported classes:
1439 .RS 4
1440 .IP "\fBoptimizers\fR" 4
1441 .IX Item "optimizers"
1442 Display all of the optimization options supported by the
1443 compiler.
1444 .IP "\fBwarnings\fR" 4
1445 .IX Item "warnings"
1446 Display all of the options controlling warning messages
1447 produced by the compiler.
1448 .IP "\fBtarget\fR" 4
1449 .IX Item "target"
1450 Display target-specific options.  Unlike the
1451 \&\fB\-\-target\-help\fR option however, target-specific options of the
1452 linker and assembler are not displayed.  This is because those
1453 tools do not currently support the extended \fB\-\-help=\fR syntax.
1454 .IP "\fBparams\fR" 4
1455 .IX Item "params"
1456 Display the values recognized by the \fB\-\-param\fR
1457 option.
1458 .IP "\fIlanguage\fR" 4
1459 .IX Item "language"
1460 Display the options supported for \fIlanguage\fR, where
1461 \&\fIlanguage\fR is the name of one of the languages supported in this
1462 version of \s-1GCC\s0.
1463 .IP "\fBcommon\fR" 4
1464 .IX Item "common"
1465 Display the options that are common to all languages.
1466 .RE
1467 .RS 4
1468 .Sp
1469 These are the supported qualifiers:
1470 .IP "\fBundocumented\fR" 4
1471 .IX Item "undocumented"
1472 Display only those options that are undocumented.
1473 .IP "\fBjoined\fR" 4
1474 .IX Item "joined"
1475 Display options taking an argument that appears after an equal
1476 sign in the same continuous piece of text, such as:
1477 \&\fB\-\-help=target\fR.
1478 .IP "\fBseparate\fR" 4
1479 .IX Item "separate"
1480 Display options taking an argument that appears as a separate word
1481 following the original option, such as: \fB\-o output-file\fR.
1482 .RE
1483 .RS 4
1484 .Sp
1485 Thus for example to display all the undocumented target-specific
1486 switches supported by the compiler, use:
1487 .Sp
1488 .Vb 1
1489 \&        \-\-help=target,undocumented
1490 .Ve
1491 .Sp
1492 The sense of a qualifier can be inverted by prefixing it with the
1493 \&\fB^\fR character, so for example to display all binary warning
1494 options (i.e., ones that are either on or off and that do not take an
1495 argument) that have a description, use:
1496 .Sp
1497 .Vb 1
1498 \&        \-\-help=warnings,^joined,^undocumented
1499 .Ve
1500 .Sp
1501 The argument to \fB\-\-help=\fR should not consist solely of inverted
1502 qualifiers.
1503 .Sp
1504 Combining several classes is possible, although this usually
1505 restricts the output so much that there is nothing to display.  One
1506 case where it does work, however, is when one of the classes is
1507 \&\fItarget\fR.  For example, to display all the target-specific
1508 optimization options, use:
1509 .Sp
1510 .Vb 1
1511 \&        \-\-help=target,optimizers
1512 .Ve
1513 .Sp
1514 The \fB\-\-help=\fR option can be repeated on the command line.  Each
1515 successive use displays its requested class of options, skipping
1516 those that have already been displayed.
1517 .Sp
1518 If the \fB\-Q\fR option appears on the command line before the
1519 \&\fB\-\-help=\fR option, then the descriptive text displayed by
1520 \&\fB\-\-help=\fR is changed.  Instead of describing the displayed
1521 options, an indication is given as to whether the option is enabled,
1522 disabled or set to a specific value (assuming that the compiler
1523 knows this at the point where the \fB\-\-help=\fR option is used).
1524 .Sp
1525 Here is a truncated example from the \s-1ARM\s0 port of \fBgcc\fR:
1526 .Sp
1527 .Vb 5
1528 \&          % gcc \-Q \-mabi=2 \-\-help=target \-c
1529 \&          The following options are target specific:
1530 \&          \-mabi=                                2
1531 \&          \-mabort\-on\-noreturn                   [disabled]
1532 \&          \-mapcs                                [disabled]
1533 .Ve
1534 .Sp
1535 The output is sensitive to the effects of previous command-line
1536 options, so for example it is possible to find out which optimizations
1537 are enabled at \fB\-O2\fR by using:
1538 .Sp
1539 .Vb 1
1540 \&        \-Q \-O2 \-\-help=optimizers
1541 .Ve
1542 .Sp
1543 Alternatively you can discover which binary optimizations are enabled
1544 by \fB\-O3\fR by using:
1545 .Sp
1546 .Vb 3
1547 \&        gcc \-c \-Q \-O3 \-\-help=optimizers > /tmp/O3\-opts
1548 \&        gcc \-c \-Q \-O2 \-\-help=optimizers > /tmp/O2\-opts
1549 \&        diff /tmp/O2\-opts /tmp/O3\-opts | grep enabled
1550 .Ve
1551 .RE
1552 .IP "\fB\-no\-canonical\-prefixes\fR" 4
1553 .IX Item "-no-canonical-prefixes"
1554 Do not expand any symbolic links, resolve references to \fB/../\fR
1555 or \fB/./\fR, or make the path absolute when generating a relative
1556 prefix.
1557 .IP "\fB\-\-version\fR" 4
1558 .IX Item "--version"
1559 Display the version number and copyrights of the invoked \s-1GCC\s0.
1560 .IP "\fB\-wrapper\fR" 4
1561 .IX Item "-wrapper"
1562 Invoke all subcommands under a wrapper program.  The name of the
1563 wrapper program and its parameters are passed as a comma separated
1564 list.
1565 .Sp
1566 .Vb 1
1567 \&        gcc \-c t.c \-wrapper gdb,\-\-args
1568 .Ve
1569 .Sp
1570 This invokes all subprograms of \fBgcc\fR under
1571 \&\fBgdb \-\-args\fR, thus the invocation of \fBcc1\fR is
1572 \&\fBgdb \-\-args cc1 ...\fR.
1573 .IP "\fB\-fplugin=\fR\fIname\fR\fB.so\fR" 4
1574 .IX Item "-fplugin=name.so"
1575 Load the plugin code in file \fIname\fR.so, assumed to be a
1576 shared object to be dlopen'd by the compiler.  The base name of
1577 the shared object file is used to identify the plugin for the
1578 purposes of argument parsing (See
1579 \&\fB\-fplugin\-arg\-\fR\fIname\fR\fB\-\fR\fIkey\fR\fB=\fR\fIvalue\fR below).
1580 Each plugin should define the callback functions specified in the
1581 Plugins \s-1API\s0.
1582 .IP "\fB\-fplugin\-arg\-\fR\fIname\fR\fB\-\fR\fIkey\fR\fB=\fR\fIvalue\fR" 4
1583 .IX Item "-fplugin-arg-name-key=value"
1584 Define an argument called \fIkey\fR with a value of \fIvalue\fR
1585 for the plugin called \fIname\fR.
1586 .IP "\fB\-fdump\-ada\-spec\fR[\fB\-slim\fR]" 4
1587 .IX Item "-fdump-ada-spec[-slim]"
1588 For C and \*(C+ source and include files, generate corresponding Ada specs.
1589 .IP "\fB\-fada\-spec\-parent=\fR\fIunit\fR" 4
1590 .IX Item "-fada-spec-parent=unit"
1591 In conjunction with \fB\-fdump\-ada\-spec\fR[\fB\-slim\fR] above, generate
1592 Ada specs as child units of parent \fIunit\fR.
1593 .IP "\fB\-fdump\-go\-spec=\fR\fIfile\fR" 4
1594 .IX Item "-fdump-go-spec=file"
1595 For input files in any language, generate corresponding Go
1596 declarations in \fIfile\fR.  This generates Go \f(CW\*(C`const\*(C'\fR,
1597 \&\f(CW\*(C`type\*(C'\fR, \f(CW\*(C`var\*(C'\fR, and \f(CW\*(C`func\*(C'\fR declarations which may be a
1598 useful way to start writing a Go interface to code written in some
1599 other language.
1600 .IP "\fB@\fR\fIfile\fR" 4
1601 .IX Item "@file"
1602 Read command-line options from \fIfile\fR.  The options read are
1603 inserted in place of the original @\fIfile\fR option.  If \fIfile\fR
1604 does not exist, or cannot be read, then the option will be treated
1605 literally, and not removed.
1606 .Sp
1607 Options in \fIfile\fR are separated by whitespace.  A whitespace
1608 character may be included in an option by surrounding the entire
1609 option in either single or double quotes.  Any character (including a
1610 backslash) may be included by prefixing the character to be included
1611 with a backslash.  The \fIfile\fR may itself contain additional
1612 @\fIfile\fR options; any such options will be processed recursively.
1613 .Sh "Compiling \*(C+ Programs"
1614 .IX Subsection "Compiling  Programs"
1615 \&\*(C+ source files conventionally use one of the suffixes \fB.C\fR,
1616 \&\fB.cc\fR, \fB.cpp\fR, \fB.CPP\fR, \fB.c++\fR, \fB.cp\fR, or
1617 \&\fB.cxx\fR; \*(C+ header files often use \fB.hh\fR, \fB.hpp\fR,
1618 \&\fB.H\fR, or (for shared template code) \fB.tcc\fR; and
1619 preprocessed \*(C+ files use the suffix \fB.ii\fR.  \s-1GCC\s0 recognizes
1620 files with these names and compiles them as \*(C+ programs even if you
1621 call the compiler the same way as for compiling C programs (usually
1622 with the name \fBgcc\fR).
1623 .PP
1624 However, the use of \fBgcc\fR does not add the \*(C+ library.
1625 \&\fBg++\fR is a program that calls \s-1GCC\s0 and automatically specifies linking
1626 against the \*(C+ library.  It treats \fB.c\fR,
1627 \&\fB.h\fR and \fB.i\fR files as \*(C+ source files instead of C source
1628 files unless \fB\-x\fR is used.  This program is also useful when
1629 precompiling a C header file with a \fB.h\fR extension for use in \*(C+
1630 compilations.  On many systems, \fBg++\fR is also installed with
1631 the name \fBc++\fR.
1632 .PP
1633 When you compile \*(C+ programs, you may specify many of the same
1634 command-line options that you use for compiling programs in any
1635 language; or command-line options meaningful for C and related
1636 languages; or options that are meaningful only for \*(C+ programs.
1637 .Sh "Options Controlling C Dialect"
1638 .IX Subsection "Options Controlling C Dialect"
1639 The following options control the dialect of C (or languages derived
1640 from C, such as \*(C+, Objective-C and Objective\-\*(C+) that the compiler
1641 accepts:
1642 .IP "\fB\-ansi\fR" 4
1643 .IX Item "-ansi"
1644 In C mode, this is equivalent to \fB\-std=c90\fR. In \*(C+ mode, it is
1645 equivalent to \fB\-std=c++98\fR.
1646 .Sp
1647 This turns off certain features of \s-1GCC\s0 that are incompatible with \s-1ISO\s0
1648 C90 (when compiling C code), or of standard \*(C+ (when compiling \*(C+ code),
1649 such as the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR keywords, and
1650 predefined macros such as \f(CW\*(C`unix\*(C'\fR and \f(CW\*(C`vax\*(C'\fR that identify the
1651 type of system you are using.  It also enables the undesirable and
1652 rarely used \s-1ISO\s0 trigraph feature.  For the C compiler,
1653 it disables recognition of \*(C+ style \fB//\fR comments as well as
1654 the \f(CW\*(C`inline\*(C'\fR keyword.
1655 .Sp
1656 The alternate keywords \f(CW\*(C`_\|_asm_\|_\*(C'\fR, \f(CW\*(C`_\|_extension_\|_\*(C'\fR,
1657 \&\f(CW\*(C`_\|_inline_\|_\*(C'\fR and \f(CW\*(C`_\|_typeof_\|_\*(C'\fR continue to work despite
1658 \&\fB\-ansi\fR.  You would not want to use them in an \s-1ISO\s0 C program, of
1659 course, but it is useful to put them in header files that might be included
1660 in compilations done with \fB\-ansi\fR.  Alternate predefined macros
1661 such as \f(CW\*(C`_\|_unix_\|_\*(C'\fR and \f(CW\*(C`_\|_vax_\|_\*(C'\fR are also available, with or
1662 without \fB\-ansi\fR.
1663 .Sp
1664 The \fB\-ansi\fR option does not cause non-ISO programs to be
1665 rejected gratuitously.  For that, \fB\-Wpedantic\fR is required in
1666 addition to \fB\-ansi\fR.
1667 .Sp
1668 The macro \f(CW\*(C`_\|_STRICT_ANSI_\|_\*(C'\fR is predefined when the \fB\-ansi\fR
1669 option is used.  Some header files may notice this macro and refrain
1670 from declaring certain functions or defining certain macros that the
1671 \&\s-1ISO\s0 standard doesn't call for; this is to avoid interfering with any
1672 programs that might use these names for other things.
1673 .Sp
1674 Functions that are normally built in but do not have semantics
1675 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
1676 functions when \fB\-ansi\fR is used.
1677 .IP "\fB\-std=\fR" 4
1678 .IX Item "-std="
1679 Determine the language standard.   This option
1680 is currently only supported when compiling C or \*(C+.
1681 .Sp
1682 The compiler can accept several base standards, such as \fBc90\fR or
1683 \&\fBc++98\fR, and \s-1GNU\s0 dialects of those standards, such as
1684 \&\fBgnu90\fR or \fBgnu++98\fR.  When a base standard is specified, the
1685 compiler accepts all programs following that standard plus those
1686 using \s-1GNU\s0 extensions that do not contradict it.  For example,
1687 \&\fB\-std=c90\fR turns off certain features of \s-1GCC\s0 that are
1688 incompatible with \s-1ISO\s0 C90, such as the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR
1689 keywords, but not other \s-1GNU\s0 extensions that do not have a meaning in
1690 \&\s-1ISO\s0 C90, such as omitting the middle term of a \f(CW\*(C`?:\*(C'\fR
1691 expression. On the other hand, when a \s-1GNU\s0 dialect of a standard is
1692 specified, all features supported by the compiler are enabled, even when
1693 those features change the meaning of the base standard.  As a result, some
1694 strict-conforming programs may be rejected.  The particular standard
1695 is used by \fB\-Wpedantic\fR to identify which features are \s-1GNU\s0
1696 extensions given that version of the standard. For example
1697 \&\fB\-std=gnu90 \-Wpedantic\fR warns about \*(C+ style \fB//\fR
1698 comments, while \fB\-std=gnu99 \-Wpedantic\fR does not.
1699 .Sp
1700 A value for this option must be provided; possible values are
1701 .RS 4
1702 .IP "\fBc90\fR" 4
1703 .IX Item "c90"
1704 .PD 0
1705 .IP "\fBc89\fR" 4
1706 .IX Item "c89"
1707 .IP "\fBiso9899:1990\fR" 4
1708 .IX Item "iso9899:1990"
1709 .PD
1710 Support all \s-1ISO\s0 C90 programs (certain \s-1GNU\s0 extensions that conflict
1711 with \s-1ISO\s0 C90 are disabled). Same as \fB\-ansi\fR for C code.
1712 .IP "\fBiso9899:199409\fR" 4
1713 .IX Item "iso9899:199409"
1714 \&\s-1ISO\s0 C90 as modified in amendment 1.
1715 .IP "\fBc99\fR" 4
1716 .IX Item "c99"
1717 .PD 0
1718 .IP "\fBc9x\fR" 4
1719 .IX Item "c9x"
1720 .IP "\fBiso9899:1999\fR" 4
1721 .IX Item "iso9899:1999"
1722 .IP "\fBiso9899:199x\fR" 4
1723 .IX Item "iso9899:199x"
1724 .PD
1725 \&\s-1ISO\s0 C99.  This standard is substantially completely supported, modulo
1726 bugs and floating-point issues
1727 (mainly but not entirely relating to optional C99 features from
1728 Annexes F and G).  See
1729 <\fBhttp://gcc.gnu.org/c99status.html\fR> for more information.  The
1730 names \fBc9x\fR and \fBiso9899:199x\fR are deprecated.
1731 .IP "\fBc11\fR" 4
1732 .IX Item "c11"
1733 .PD 0
1734 .IP "\fBc1x\fR" 4
1735 .IX Item "c1x"
1736 .IP "\fBiso9899:2011\fR" 4
1737 .IX Item "iso9899:2011"
1738 .PD
1739 \&\s-1ISO\s0 C11, the 2011 revision of the \s-1ISO\s0 C standard.  This standard is
1740 substantially completely supported, modulo bugs, floating-point issues
1741 (mainly but not entirely relating to optional C11 features from
1742 Annexes F and G) and the optional Annexes K (Bounds-checking
1743 interfaces) and L (Analyzability).  The name \fBc1x\fR is deprecated.
1744 .IP "\fBgnu90\fR" 4
1745 .IX Item "gnu90"
1746 .PD 0
1747 .IP "\fBgnu89\fR" 4
1748 .IX Item "gnu89"
1749 .PD
1750 \&\s-1GNU\s0 dialect of \s-1ISO\s0 C90 (including some C99 features).
1751 .IP "\fBgnu99\fR" 4
1752 .IX Item "gnu99"
1753 .PD 0
1754 .IP "\fBgnu9x\fR" 4
1755 .IX Item "gnu9x"
1756 .PD
1757 \&\s-1GNU\s0 dialect of \s-1ISO\s0 C99.  The name \fBgnu9x\fR is deprecated.
1758 .IP "\fBgnu11\fR" 4
1759 .IX Item "gnu11"
1760 .PD 0
1761 .IP "\fBgnu1x\fR" 4
1762 .IX Item "gnu1x"
1763 .PD
1764 \&\s-1GNU\s0 dialect of \s-1ISO\s0 C11.  This is the default for C code.
1765 The name \fBgnu1x\fR is deprecated.
1766 .IP "\fBc++98\fR" 4
1767 .IX Item "c++98"
1768 .PD 0
1769 .IP "\fBc++03\fR" 4
1770 .IX Item "c++03"
1771 .PD
1772 The 1998 \s-1ISO\s0 \*(C+ standard plus the 2003 technical corrigendum and some
1773 additional defect reports. Same as \fB\-ansi\fR for \*(C+ code.
1774 .IP "\fBgnu++98\fR" 4
1775 .IX Item "gnu++98"
1776 .PD 0
1777 .IP "\fBgnu++03\fR" 4
1778 .IX Item "gnu++03"
1779 .PD
1780 \&\s-1GNU\s0 dialect of \fB\-std=c++98\fR.  This is the default for
1781 \&\*(C+ code.
1782 .IP "\fBc++11\fR" 4
1783 .IX Item "c++11"
1784 .PD 0
1785 .IP "\fBc++0x\fR" 4
1786 .IX Item "c++0x"
1787 .PD
1788 The 2011 \s-1ISO\s0 \*(C+ standard plus amendments.
1789 The name \fBc++0x\fR is deprecated.
1790 .IP "\fBgnu++11\fR" 4
1791 .IX Item "gnu++11"
1792 .PD 0
1793 .IP "\fBgnu++0x\fR" 4
1794 .IX Item "gnu++0x"
1795 .PD
1796 \&\s-1GNU\s0 dialect of \fB\-std=c++11\fR.
1797 The name \fBgnu++0x\fR is deprecated.
1798 .IP "\fBc++14\fR" 4
1799 .IX Item "c++14"
1800 .PD 0
1801 .IP "\fBc++1y\fR" 4
1802 .IX Item "c++1y"
1803 .PD
1804 The 2014 \s-1ISO\s0 \*(C+ standard plus amendments.
1805 The name \fBc++1y\fR is deprecated.
1806 .IP "\fBgnu++14\fR" 4
1807 .IX Item "gnu++14"
1808 .PD 0
1809 .IP "\fBgnu++1y\fR" 4
1810 .IX Item "gnu++1y"
1811 .PD
1812 \&\s-1GNU\s0 dialect of \fB\-std=c++14\fR.
1813 The name \fBgnu++1y\fR is deprecated.
1814 .IP "\fBc++1z\fR" 4
1815 .IX Item "c++1z"
1816 The next revision of the \s-1ISO\s0 \*(C+ standard, tentatively planned for
1817 2017.  Support is highly experimental, and will almost certainly
1818 change in incompatible ways in future releases.
1819 .IP "\fBgnu++1z\fR" 4
1820 .IX Item "gnu++1z"
1821 \&\s-1GNU\s0 dialect of \fB\-std=c++1z\fR.  Support is highly experimental,
1822 and will almost certainly change in incompatible ways in future
1823 releases.
1824 .RE
1825 .RS 4
1826 .RE
1827 .IP "\fB\-fgnu89\-inline\fR" 4
1828 .IX Item "-fgnu89-inline"
1829 The option \fB\-fgnu89\-inline\fR tells \s-1GCC\s0 to use the traditional
1830 \&\s-1GNU\s0 semantics for \f(CW\*(C`inline\*(C'\fR functions when in C99 mode.
1831 .Sp
1832 Using this option is roughly equivalent to adding the
1833 \&\f(CW\*(C`gnu_inline\*(C'\fR function attribute to all inline functions.
1834 .Sp
1835 The option \fB\-fno\-gnu89\-inline\fR explicitly tells \s-1GCC\s0 to use the
1836 C99 semantics for \f(CW\*(C`inline\*(C'\fR when in C99 or gnu99 mode (i.e., it
1837 specifies the default behavior).  
1838 This option is not supported in \fB\-std=c90\fR or
1839 \&\fB\-std=gnu90\fR mode.
1840 .Sp
1841 The preprocessor macros \f(CW\*(C`_\|_GNUC_GNU_INLINE_\|_\*(C'\fR and
1842 \&\f(CW\*(C`_\|_GNUC_STDC_INLINE_\|_\*(C'\fR may be used to check which semantics are
1843 in effect for \f(CW\*(C`inline\*(C'\fR functions.
1844 .IP "\fB\-aux\-info\fR \fIfilename\fR" 4
1845 .IX Item "-aux-info filename"
1846 Output to the given filename prototyped declarations for all functions
1847 declared and/or defined in a translation unit, including those in header
1848 files.  This option is silently ignored in any language other than C.
1849 .Sp
1850 Besides declarations, the file indicates, in comments, the origin of
1851 each declaration (source file and line), whether the declaration was
1852 implicit, prototyped or unprototyped (\fBI\fR, \fBN\fR for new or
1853 \&\fBO\fR for old, respectively, in the first character after the line
1854 number and the colon), and whether it came from a declaration or a
1855 definition (\fBC\fR or \fBF\fR, respectively, in the following
1856 character).  In the case of function definitions, a K&R\-style list of
1857 arguments followed by their declarations is also provided, inside
1858 comments, after the declaration.
1859 .IP "\fB\-fallow\-parameterless\-variadic\-functions\fR" 4
1860 .IX Item "-fallow-parameterless-variadic-functions"
1861 Accept variadic functions without named parameters.
1862 .Sp
1863 Although it is possible to define such a function, this is not very
1864 useful as it is not possible to read the arguments.  This is only
1865 supported for C as this construct is allowed by \*(C+.
1866 .IP "\fB\-fno\-asm\fR" 4
1867 .IX Item "-fno-asm"
1868 Do not recognize \f(CW\*(C`asm\*(C'\fR, \f(CW\*(C`inline\*(C'\fR or \f(CW\*(C`typeof\*(C'\fR as a
1869 keyword, so that code can use these words as identifiers.  You can use
1870 the keywords \f(CW\*(C`_\|_asm_\|_\*(C'\fR, \f(CW\*(C`_\|_inline_\|_\*(C'\fR and \f(CW\*(C`_\|_typeof_\|_\*(C'\fR
1871 instead.  \fB\-ansi\fR implies \fB\-fno\-asm\fR.
1872 .Sp
1873 In \*(C+, this switch only affects the \f(CW\*(C`typeof\*(C'\fR keyword, since
1874 \&\f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`inline\*(C'\fR are standard keywords.  You may want to
1875 use the \fB\-fno\-gnu\-keywords\fR flag instead, which has the same
1876 effect.  In C99 mode (\fB\-std=c99\fR or \fB\-std=gnu99\fR), this
1877 switch only affects the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR keywords, since
1878 \&\f(CW\*(C`inline\*(C'\fR is a standard keyword in \s-1ISO\s0 C99.
1879 .IP "\fB\-fno\-builtin\fR" 4
1880 .IX Item "-fno-builtin"
1881 .PD 0
1882 .IP "\fB\-fno\-builtin\-\fR\fIfunction\fR" 4
1883 .IX Item "-fno-builtin-function"
1884 .PD
1885 Don't recognize built-in functions that do not begin with
1886 \&\fB_\|_builtin_\fR as prefix.
1887 .Sp
1888 \&\s-1GCC\s0 normally generates special code to handle certain built-in functions
1889 more efficiently; for instance, calls to \f(CW\*(C`alloca\*(C'\fR may become single
1890 instructions which adjust the stack directly, and calls to \f(CW\*(C`memcpy\*(C'\fR
1891 may become inline copy loops.  The resulting code is often both smaller
1892 and faster, but since the function calls no longer appear as such, you
1893 cannot set a breakpoint on those calls, nor can you change the behavior
1894 of the functions by linking with a different library.  In addition,
1895 when a function is recognized as a built-in function, \s-1GCC\s0 may use
1896 information about that function to warn about problems with calls to
1897 that function, or to generate more efficient code, even if the
1898 resulting code still contains calls to that function.  For example,
1899 warnings are given with \fB\-Wformat\fR for bad calls to
1900 \&\f(CW\*(C`printf\*(C'\fR when \f(CW\*(C`printf\*(C'\fR is built in and \f(CW\*(C`strlen\*(C'\fR is
1901 known not to modify global memory.
1902 .Sp
1903 With the \fB\-fno\-builtin\-\fR\fIfunction\fR option
1904 only the built-in function \fIfunction\fR is
1905 disabled.  \fIfunction\fR must not begin with \fB_\|_builtin_\fR.  If a
1906 function is named that is not built-in in this version of \s-1GCC\s0, this
1907 option is ignored.  There is no corresponding
1908 \&\fB\-fbuiltin\-\fR\fIfunction\fR option; if you wish to enable
1909 built-in functions selectively when using \fB\-fno\-builtin\fR or
1910 \&\fB\-ffreestanding\fR, you may define macros such as:
1911 .Sp
1912 .Vb 2
1913 \&        #define abs(n)          _\|_builtin_abs ((n))
1914 \&        #define strcpy(d, s)    _\|_builtin_strcpy ((d), (s))
1915 .Ve
1916 .IP "\fB\-fhosted\fR" 4
1917 .IX Item "-fhosted"
1918 Assert that compilation targets a hosted environment.  This implies
1919 \&\fB\-fbuiltin\fR.  A hosted environment is one in which the
1920 entire standard library is available, and in which \f(CW\*(C`main\*(C'\fR has a return
1921 type of \f(CW\*(C`int\*(C'\fR.  Examples are nearly everything except a kernel.
1922 This is equivalent to \fB\-fno\-freestanding\fR.
1923 .IP "\fB\-ffreestanding\fR" 4
1924 .IX Item "-ffreestanding"
1925 Assert that compilation targets a freestanding environment.  This
1926 implies \fB\-fno\-builtin\fR.  A freestanding environment
1927 is one in which the standard library may not exist, and program startup may
1928 not necessarily be at \f(CW\*(C`main\*(C'\fR.  The most obvious example is an \s-1OS\s0 kernel.
1929 This is equivalent to \fB\-fno\-hosted\fR.
1930 .IP "\fB\-fopenacc\fR" 4
1931 .IX Item "-fopenacc"
1932 Enable handling of OpenACC directives \f(CW\*(C`#pragma acc\*(C'\fR in C/\*(C+ and
1933 \&\f(CW\*(C`!$acc\*(C'\fR in Fortran.  When \fB\-fopenacc\fR is specified, the
1934 compiler generates accelerated code according to the OpenACC Application
1935 Programming Interface v2.0 <\fBhttp://www.openacc.org/\fR>.  This option
1936 implies \fB\-pthread\fR, and thus is only supported on targets that
1937 have support for \fB\-pthread\fR.
1938 .Sp
1939 Note that this is an experimental feature, incomplete, and subject to
1940 change in future versions of \s-1GCC\s0.  See
1941 <\fBhttps://gcc.gnu.org/wiki/OpenACC\fR> for more information.
1942 .IP "\fB\-fopenmp\fR" 4
1943 .IX Item "-fopenmp"
1944 Enable handling of OpenMP directives \f(CW\*(C`#pragma omp\*(C'\fR in C/\*(C+ and
1945 \&\f(CW\*(C`!$omp\*(C'\fR in Fortran.  When \fB\-fopenmp\fR is specified, the
1946 compiler generates parallel code according to the OpenMP Application
1947 Program Interface v4.0 <\fBhttp://www.openmp.org/\fR>.  This option
1948 implies \fB\-pthread\fR, and thus is only supported on targets that
1949 have support for \fB\-pthread\fR. \fB\-fopenmp\fR implies
1950 \&\fB\-fopenmp\-simd\fR.
1951 .IP "\fB\-fopenmp\-simd\fR" 4
1952 .IX Item "-fopenmp-simd"
1953 Enable handling of OpenMP's \s-1SIMD\s0 directives with \f(CW\*(C`#pragma omp\*(C'\fR
1954 in C/\*(C+ and \f(CW\*(C`!$omp\*(C'\fR in Fortran. Other OpenMP directives
1955 are ignored.
1956 .IP "\fB\-fcilkplus\fR" 4
1957 .IX Item "-fcilkplus"
1958 Enable the usage of Cilk Plus language extension features for C/\*(C+.
1959 When the option \fB\-fcilkplus\fR is specified, enable the usage of
1960 the Cilk Plus Language extension features for C/\*(C+.  The present
1961 implementation follows \s-1ABI\s0 version 1.2.  This is an experimental
1962 feature that is only partially complete, and whose interface may
1963 change in future versions of \s-1GCC\s0 as the official specification
1964 changes.  Currently, all features but \f(CW\*(C`_Cilk_for\*(C'\fR have been
1965 implemented.
1966 .IP "\fB\-fgnu\-tm\fR" 4
1967 .IX Item "-fgnu-tm"
1968 When the option \fB\-fgnu\-tm\fR is specified, the compiler
1969 generates code for the Linux variant of Intel's current Transactional
1970 Memory \s-1ABI\s0 specification document (Revision 1.1, May 6 2009).  This is
1971 an experimental feature whose interface may change in future versions
1972 of \s-1GCC\s0, as the official specification changes.  Please note that not
1973 all architectures are supported for this feature.
1974 .Sp
1975 For more information on \s-1GCC\s0's support for transactional memory,
1976 .Sp
1977 Note that the transactional memory feature is not supported with
1978 non-call exceptions (\fB\-fnon\-call\-exceptions\fR).
1979 .IP "\fB\-fms\-extensions\fR" 4
1980 .IX Item "-fms-extensions"
1981 Accept some non-standard constructs used in Microsoft header files.
1982 .Sp
1983 In \*(C+ code, this allows member names in structures to be similar
1984 to previous types declarations.
1985 .Sp
1986 .Vb 4
1987 \&        typedef int UOW;
1988 \&        struct ABC {
1989 \&          UOW UOW;
1990 \&        };
1991 .Ve
1992 .Sp
1993 Some cases of unnamed fields in structures and unions are only
1994 accepted with this option.
1995 .Sp
1996 Note that this option is off for all targets but x86 
1997 targets using ms-abi.
1998 .IP "\fB\-fplan9\-extensions\fR" 4
1999 .IX Item "-fplan9-extensions"
2000 Accept some non-standard constructs used in Plan 9 code.
2001 .Sp
2002 This enables \fB\-fms\-extensions\fR, permits passing pointers to
2003 structures with anonymous fields to functions that expect pointers to
2004 elements of the type of the field, and permits referring to anonymous
2005 fields declared using a typedef.    This is only
2006 supported for C, not \*(C+.
2007 .IP "\fB\-trigraphs\fR" 4
2008 .IX Item "-trigraphs"
2009 Support \s-1ISO\s0 C trigraphs.  The \fB\-ansi\fR option (and \fB\-std\fR
2010 options for strict \s-1ISO\s0 C conformance) implies \fB\-trigraphs\fR.
2011 .IP "\fB\-traditional\fR" 4
2012 .IX Item "-traditional"
2013 .PD 0
2014 .IP "\fB\-traditional\-cpp\fR" 4
2015 .IX Item "-traditional-cpp"
2016 .PD
2017 Formerly, these options caused \s-1GCC\s0 to attempt to emulate a pre-standard
2018 C compiler.  They are now only supported with the \fB\-E\fR switch.
2019 The preprocessor continues to support a pre-standard mode.  See the \s-1GNU\s0
2020 \&\s-1CPP\s0 manual for details.
2021 .IP "\fB\-fcond\-mismatch\fR" 4
2022 .IX Item "-fcond-mismatch"
2023 Allow conditional expressions with mismatched types in the second and
2024 third arguments.  The value of such an expression is void.  This option
2025 is not supported for \*(C+.
2026 .IP "\fB\-flax\-vector\-conversions\fR" 4
2027 .IX Item "-flax-vector-conversions"
2028 Allow implicit conversions between vectors with differing numbers of
2029 elements and/or incompatible element types.  This option should not be
2030 used for new code.
2031 .IP "\fB\-funsigned\-char\fR" 4
2032 .IX Item "-funsigned-char"
2033 Let the type \f(CW\*(C`char\*(C'\fR be unsigned, like \f(CW\*(C`unsigned char\*(C'\fR.
2034 .Sp
2035 Each kind of machine has a default for what \f(CW\*(C`char\*(C'\fR should
2036 be.  It is either like \f(CW\*(C`unsigned char\*(C'\fR by default or like
2037 \&\f(CW\*(C`signed char\*(C'\fR by default.
2038 .Sp
2039 Ideally, a portable program should always use \f(CW\*(C`signed char\*(C'\fR or
2040 \&\f(CW\*(C`unsigned char\*(C'\fR when it depends on the signedness of an object.
2041 But many programs have been written to use plain \f(CW\*(C`char\*(C'\fR and
2042 expect it to be signed, or expect it to be unsigned, depending on the
2043 machines they were written for.  This option, and its inverse, let you
2044 make such a program work with the opposite default.
2045 .Sp
2046 The type \f(CW\*(C`char\*(C'\fR is always a distinct type from each of
2047 \&\f(CW\*(C`signed char\*(C'\fR or \f(CW\*(C`unsigned char\*(C'\fR, even though its behavior
2048 is always just like one of those two.
2049 .IP "\fB\-fsigned\-char\fR" 4
2050 .IX Item "-fsigned-char"
2051 Let the type \f(CW\*(C`char\*(C'\fR be signed, like \f(CW\*(C`signed char\*(C'\fR.
2052 .Sp
2053 Note that this is equivalent to \fB\-fno\-unsigned\-char\fR, which is
2054 the negative form of \fB\-funsigned\-char\fR.  Likewise, the option
2055 \&\fB\-fno\-signed\-char\fR is equivalent to \fB\-funsigned\-char\fR.
2056 .IP "\fB\-fsigned\-bitfields\fR" 4
2057 .IX Item "-fsigned-bitfields"
2058 .PD 0
2059 .IP "\fB\-funsigned\-bitfields\fR" 4
2060 .IX Item "-funsigned-bitfields"
2061 .IP "\fB\-fno\-signed\-bitfields\fR" 4
2062 .IX Item "-fno-signed-bitfields"
2063 .IP "\fB\-fno\-unsigned\-bitfields\fR" 4
2064 .IX Item "-fno-unsigned-bitfields"
2065 .PD
2066 These options control whether a bit-field is signed or unsigned, when the
2067 declaration does not use either \f(CW\*(C`signed\*(C'\fR or \f(CW\*(C`unsigned\*(C'\fR.  By
2068 default, such a bit-field is signed, because this is consistent: the
2069 basic integer types such as \f(CW\*(C`int\*(C'\fR are signed types.
2070 .Sh "Options Controlling \*(C+ Dialect"
2071 .IX Subsection "Options Controlling  Dialect"
2072 This section describes the command-line options that are only meaningful
2073 for \*(C+ programs.  You can also use most of the \s-1GNU\s0 compiler options
2074 regardless of what language your program is in.  For example, you
2075 might compile a file \fIfirstClass.C\fR like this:
2076 .PP
2077 .Vb 1
2078 \&        g++ \-g \-frepo \-O \-c firstClass.C
2079 .Ve
2080 .PP
2081 In this example, only \fB\-frepo\fR is an option meant
2082 only for \*(C+ programs; you can use the other options with any
2083 language supported by \s-1GCC\s0.
2084 .PP
2085 Here is a list of options that are \fIonly\fR for compiling \*(C+ programs:
2086 .IP "\fB\-fabi\-version=\fR\fIn\fR" 4
2087 .IX Item "-fabi-version=n"
2088 Use version \fIn\fR of the \*(C+ \s-1ABI\s0.  The default is version 0.
2089 .Sp
2090 Version 0 refers to the version conforming most closely to
2091 the \*(C+ \s-1ABI\s0 specification.  Therefore, the \s-1ABI\s0 obtained using version 0
2092 will change in different versions of G++ as \s-1ABI\s0 bugs are fixed.
2093 .Sp
2094 Version 1 is the version of the \*(C+ \s-1ABI\s0 that first appeared in G++ 3.2.
2095 .Sp
2096 Version 2 is the version of the \*(C+ \s-1ABI\s0 that first appeared in G++
2097 3.4, and was the default through G++ 4.9.
2098 .Sp
2099 Version 3 corrects an error in mangling a constant address as a
2100 template argument.
2101 .Sp
2102 Version 4, which first appeared in G++ 4.5, implements a standard
2103 mangling for vector types.
2104 .Sp
2105 Version 5, which first appeared in G++ 4.6, corrects the mangling of
2106 attribute const/volatile on function pointer types, decltype of a
2107 plain decl, and use of a function parameter in the declaration of
2108 another parameter.
2109 .Sp
2110 Version 6, which first appeared in G++ 4.7, corrects the promotion
2111 behavior of \*(C+11 scoped enums and the mangling of template argument
2112 packs, const/static_cast, prefix ++ and \-\-, and a class scope function
2113 used as a template argument.
2114 .Sp
2115 Version 7, which first appeared in G++ 4.8, that treats nullptr_t as a
2116 builtin type and corrects the mangling of lambdas in default argument
2117 scope.
2118 .Sp
2119 Version 8, which first appeared in G++ 4.9, corrects the substitution
2120 behavior of function types with function-cv-qualifiers.
2121 .Sp
2122 Version 9, which first appeared in G++ 5.2, corrects the alignment of
2123 \&\f(CW\*(C`nullptr_t\*(C'\fR.
2124 .Sp
2125 See also \fB\-Wabi\fR.
2126 .IP "\fB\-fabi\-compat\-version=\fR\fIn\fR" 4
2127 .IX Item "-fabi-compat-version=n"
2128 On targets that support strong aliases, G++
2129 works around mangling changes by creating an alias with the correct
2130 mangled name when defining a symbol with an incorrect mangled name.
2131 This switch specifies which \s-1ABI\s0 version to use for the alias.
2132 .Sp
2133 With \fB\-fabi\-version=0\fR (the default), this defaults to 2.  If
2134 another \s-1ABI\s0 version is explicitly selected, this defaults to 0.
2135 .Sp
2136 The compatibility version is also set by \fB\-Wabi=\fR\fIn\fR.
2137 .IP "\fB\-fno\-access\-control\fR" 4
2138 .IX Item "-fno-access-control"
2139 Turn off all access checking.  This switch is mainly useful for working
2140 around bugs in the access control code.
2141 .IP "\fB\-fcheck\-new\fR" 4
2142 .IX Item "-fcheck-new"
2143 Check that the pointer returned by \f(CW\*(C`operator new\*(C'\fR is non-null
2144 before attempting to modify the storage allocated.  This check is
2145 normally unnecessary because the \*(C+ standard specifies that
2146 \&\f(CW\*(C`operator new\*(C'\fR only returns \f(CW0\fR if it is declared
2147 \&\f(CW\*(C`throw()\*(C'\fR, in which case the compiler always checks the
2148 return value even without this option.  In all other cases, when
2149 \&\f(CW\*(C`operator new\*(C'\fR has a non-empty exception specification, memory
2150 exhaustion is signalled by throwing \f(CW\*(C`std::bad_alloc\*(C'\fR.  See also
2151 \&\fBnew (nothrow)\fR.
2152 .IP "\fB\-fconstexpr\-depth=\fR\fIn\fR" 4
2153 .IX Item "-fconstexpr-depth=n"
2154 Set the maximum nested evaluation depth for \*(C+11 constexpr functions
2155 to \fIn\fR.  A limit is needed to detect endless recursion during
2156 constant expression evaluation.  The minimum specified by the standard
2157 is 512.
2158 .IP "\fB\-fdeduce\-init\-list\fR" 4
2159 .IX Item "-fdeduce-init-list"
2160 Enable deduction of a template type parameter as
2161 \&\f(CW\*(C`std::initializer_list\*(C'\fR from a brace-enclosed initializer list, i.e.
2162 .Sp
2163 .Vb 4
2164 \&        template <class T> auto forward(T t) \-> decltype (realfn (t))
2165 \&        {
2166 \&          return realfn (t);
2167 \&        }
2168 \&        
2169 \&        void f()
2170 \&        {
2171 \&          forward({1,2}); // call forward<std::initializer_list<int>>
2172 \&        }
2173 .Ve
2174 .Sp
2175 This deduction was implemented as a possible extension to the
2176 originally proposed semantics for the \*(C+11 standard, but was not part
2177 of the final standard, so it is disabled by default.  This option is
2178 deprecated, and may be removed in a future version of G++.
2179 .IP "\fB\-ffriend\-injection\fR" 4
2180 .IX Item "-ffriend-injection"
2181 Inject friend functions into the enclosing namespace, so that they are
2182 visible outside the scope of the class in which they are declared.
2183 Friend functions were documented to work this way in the old Annotated
2184 \&\*(C+ Reference Manual.  
2185 However, in \s-1ISO\s0 \*(C+ a friend function that is not declared
2186 in an enclosing scope can only be found using argument dependent
2187 lookup.  \s-1GCC\s0 defaults to the standard behavior.
2188 .Sp
2189 This option is for compatibility, and may be removed in a future
2190 release of G++.
2191 .IP "\fB\-fno\-elide\-constructors\fR" 4
2192 .IX Item "-fno-elide-constructors"
2193 The \*(C+ standard allows an implementation to omit creating a temporary
2194 that is only used to initialize another object of the same type.
2195 Specifying this option disables that optimization, and forces G++ to
2196 call the copy constructor in all cases.
2197 .IP "\fB\-fno\-enforce\-eh\-specs\fR" 4
2198 .IX Item "-fno-enforce-eh-specs"
2199 Don't generate code to check for violation of exception specifications
2200 at run time.  This option violates the \*(C+ standard, but may be useful
2201 for reducing code size in production builds, much like defining
2202 \&\f(CW\*(C`NDEBUG\*(C'\fR.  This does not give user code permission to throw
2203 exceptions in violation of the exception specifications; the compiler
2204 still optimizes based on the specifications, so throwing an
2205 unexpected exception results in undefined behavior at run time.
2206 .IP "\fB\-fextern\-tls\-init\fR" 4
2207 .IX Item "-fextern-tls-init"
2208 .PD 0
2209 .IP "\fB\-fno\-extern\-tls\-init\fR" 4
2210 .IX Item "-fno-extern-tls-init"
2211 .PD
2212 The \*(C+11 and OpenMP standards allow \f(CW\*(C`thread_local\*(C'\fR and
2213 \&\f(CW\*(C`threadprivate\*(C'\fR variables to have dynamic (runtime)
2214 initialization.  To support this, any use of such a variable goes
2215 through a wrapper function that performs any necessary initialization.
2216 When the use and definition of the variable are in the same
2217 translation unit, this overhead can be optimized away, but when the
2218 use is in a different translation unit there is significant overhead
2219 even if the variable doesn't actually need dynamic initialization.  If
2220 the programmer can be sure that no use of the variable in a
2221 non-defining \s-1TU\s0 needs to trigger dynamic initialization (either
2222 because the variable is statically initialized, or a use of the
2223 variable in the defining \s-1TU\s0 will be executed before any uses in
2224 another \s-1TU\s0), they can avoid this overhead with the
2225 \&\fB\-fno\-extern\-tls\-init\fR option.
2226 .Sp
2227 On targets that support symbol aliases, the default is
2228 \&\fB\-fextern\-tls\-init\fR.  On targets that do not support symbol
2229 aliases, the default is \fB\-fno\-extern\-tls\-init\fR.
2230 .IP "\fB\-ffor\-scope\fR" 4
2231 .IX Item "-ffor-scope"
2232 .PD 0
2233 .IP "\fB\-fno\-for\-scope\fR" 4
2234 .IX Item "-fno-for-scope"
2235 .PD
2236 If \fB\-ffor\-scope\fR is specified, the scope of variables declared in
2237 a \fIfor-init-statement\fR is limited to the \f(CW\*(C`for\*(C'\fR loop itself,
2238 as specified by the \*(C+ standard.
2239 If \fB\-fno\-for\-scope\fR is specified, the scope of variables declared in
2240 a \fIfor-init-statement\fR extends to the end of the enclosing scope,
2241 as was the case in old versions of G++, and other (traditional)
2242 implementations of \*(C+.
2243 .Sp
2244 If neither flag is given, the default is to follow the standard,
2245 but to allow and give a warning for old-style code that would
2246 otherwise be invalid, or have different behavior.
2247 .IP "\fB\-fno\-gnu\-keywords\fR" 4
2248 .IX Item "-fno-gnu-keywords"
2249 Do not recognize \f(CW\*(C`typeof\*(C'\fR as a keyword, so that code can use this
2250 word as an identifier.  You can use the keyword \f(CW\*(C`_\|_typeof_\|_\*(C'\fR instead.
2251 \&\fB\-ansi\fR implies \fB\-fno\-gnu\-keywords\fR.
2252 .IP "\fB\-fno\-implicit\-templates\fR" 4
2253 .IX Item "-fno-implicit-templates"
2254 Never emit code for non-inline templates that are instantiated
2255 implicitly (i.e. by use); only emit code for explicit instantiations.
2256 .IP "\fB\-fno\-implicit\-inline\-templates\fR" 4
2257 .IX Item "-fno-implicit-inline-templates"
2258 Don't emit code for implicit instantiations of inline templates, either.
2259 The default is to handle inlines differently so that compiles with and
2260 without optimization need the same set of explicit instantiations.
2261 .IP "\fB\-fno\-implement\-inlines\fR" 4
2262 .IX Item "-fno-implement-inlines"
2263 To save space, do not emit out-of-line copies of inline functions
2264 controlled by \f(CW\*(C`#pragma implementation\*(C'\fR.  This causes linker
2265 errors if these functions are not inlined everywhere they are called.
2266 .IP "\fB\-fms\-extensions\fR" 4
2267 .IX Item "-fms-extensions"
2268 Disable Wpedantic warnings about constructs used in \s-1MFC\s0, such as implicit
2269 int and getting a pointer to member function via non-standard syntax.
2270 .IP "\fB\-fno\-nonansi\-builtins\fR" 4
2271 .IX Item "-fno-nonansi-builtins"
2272 Disable built-in declarations of functions that are not mandated by
2273 \&\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,
2274 \&\f(CW\*(C`index\*(C'\fR, \f(CW\*(C`bzero\*(C'\fR, \f(CW\*(C`conjf\*(C'\fR, and other related functions.
2275 .IP "\fB\-fnothrow\-opt\fR" 4
2276 .IX Item "-fnothrow-opt"
2277 Treat a \f(CW\*(C`throw()\*(C'\fR exception specification as if it were a
2278 \&\f(CW\*(C`noexcept\*(C'\fR specification to reduce or eliminate the text size
2279 overhead relative to a function with no exception specification.  If
2280 the function has local variables of types with non-trivial
2281 destructors, the exception specification actually makes the
2282 function smaller because the \s-1EH\s0 cleanups for those variables can be
2283 optimized away.  The semantic effect is that an exception thrown out of
2284 a function with such an exception specification results in a call
2285 to \f(CW\*(C`terminate\*(C'\fR rather than \f(CW\*(C`unexpected\*(C'\fR.
2286 .IP "\fB\-fno\-operator\-names\fR" 4
2287 .IX Item "-fno-operator-names"
2288 Do not treat the operator name keywords \f(CW\*(C`and\*(C'\fR, \f(CW\*(C`bitand\*(C'\fR,
2289 \&\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
2290 synonyms as keywords.
2291 .IP "\fB\-fno\-optional\-diags\fR" 4
2292 .IX Item "-fno-optional-diags"
2293 Disable diagnostics that the standard says a compiler does not need to
2294 issue.  Currently, the only such diagnostic issued by G++ is the one for
2295 a name having multiple meanings within a class.
2296 .IP "\fB\-fpermissive\fR" 4
2297 .IX Item "-fpermissive"
2298 Downgrade some diagnostics about nonconformant code from errors to
2299 warnings.  Thus, using \fB\-fpermissive\fR allows some
2300 nonconforming code to compile.
2301 .IP "\fB\-fno\-pretty\-templates\fR" 4
2302 .IX Item "-fno-pretty-templates"
2303 When an error message refers to a specialization of a function
2304 template, the compiler normally prints the signature of the
2305 template followed by the template arguments and any typedefs or
2306 typenames in the signature (e.g. \f(CW\*(C`void f(T) [with T = int]\*(C'\fR
2307 rather than \f(CW\*(C`void f(int)\*(C'\fR) so that it's clear which template is
2308 involved.  When an error message refers to a specialization of a class
2309 template, the compiler omits any template arguments that match
2310 the default template arguments for that template.  If either of these
2311 behaviors make it harder to understand the error message rather than
2312 easier, you can use \fB\-fno\-pretty\-templates\fR to disable them.
2313 .IP "\fB\-frepo\fR" 4
2314 .IX Item "-frepo"
2315 Enable automatic template instantiation at link time.  This option also
2316 implies \fB\-fno\-implicit\-templates\fR.
2317 .IP "\fB\-fno\-rtti\fR" 4
2318 .IX Item "-fno-rtti"
2319 Disable generation of information about every class with virtual
2320 functions for use by the \*(C+ run-time type identification features
2321 (\f(CW\*(C`dynamic_cast\*(C'\fR and \f(CW\*(C`typeid\*(C'\fR).  If you don't use those parts
2322 of the language, you can save some space by using this flag.  Note that
2323 exception handling uses the same information, but G++ generates it as
2324 needed. The \f(CW\*(C`dynamic_cast\*(C'\fR operator can still be used for casts that
2325 do not require run-time type information, i.e. casts to \f(CW\*(C`void *\*(C'\fR or to
2326 unambiguous base classes.
2327 .IP "\fB\-fsized\-deallocation\fR" 4
2328 .IX Item "-fsized-deallocation"
2329 Enable the built-in global declarations
2330 .Sp
2331 .Vb 2
2332 \&        void operator delete (void *, std::size_t) noexcept;
2333 \&        void operator delete[] (void *, std::size_t) noexcept;
2334 .Ve
2335 .Sp
2336 as introduced in \*(C+14.  This is useful for user-defined replacement
2337 deallocation functions that, for example, use the size of the object
2338 to make deallocation faster.  Enabled by default under
2339 \&\fB\-std=c++14\fR and above.  The flag \fB\-Wsized\-deallocation\fR
2340 warns about places that might want to add a definition.
2341 .IP "\fB\-fstats\fR" 4
2342 .IX Item "-fstats"
2343 Emit statistics about front-end processing at the end of the compilation.
2344 This information is generally only useful to the G++ development team.
2345 .IP "\fB\-fstrict\-enums\fR" 4
2346 .IX Item "-fstrict-enums"
2347 Allow the compiler to optimize using the assumption that a value of
2348 enumerated type can only be one of the values of the enumeration (as
2349 defined in the \*(C+ standard; basically, a value that can be
2350 represented in the minimum number of bits needed to represent all the
2351 enumerators).  This assumption may not be valid if the program uses a
2352 cast to convert an arbitrary integer value to the enumerated type.
2353 .IP "\fB\-ftemplate\-backtrace\-limit=\fR\fIn\fR" 4
2354 .IX Item "-ftemplate-backtrace-limit=n"
2355 Set the maximum number of template instantiation notes for a single
2356 warning or error to \fIn\fR.  The default value is 10.
2357 .IP "\fB\-ftemplate\-depth=\fR\fIn\fR" 4
2358 .IX Item "-ftemplate-depth=n"
2359 Set the maximum instantiation depth for template classes to \fIn\fR.
2360 A limit on the template instantiation depth is needed to detect
2361 endless recursions during template class instantiation.  \s-1ANSI/ISO\s0 \*(C+
2362 conforming programs must not rely on a maximum depth greater than 17
2363 (changed to 1024 in \*(C+11).  The default value is 900, as the compiler
2364 can run out of stack space before hitting 1024 in some situations.
2365 .IP "\fB\-fno\-threadsafe\-statics\fR" 4
2366 .IX Item "-fno-threadsafe-statics"
2367 Do not emit the extra code to use the routines specified in the \*(C+
2368 \&\s-1ABI\s0 for thread-safe initialization of local statics.  You can use this
2369 option to reduce code size slightly in code that doesn't need to be
2370 thread-safe.
2371 .IP "\fB\-fuse\-cxa\-atexit\fR" 4
2372 .IX Item "-fuse-cxa-atexit"
2373 Register destructors for objects with static storage duration with the
2374 \&\f(CW\*(C`_\|_cxa_atexit\*(C'\fR function rather than the \f(CW\*(C`atexit\*(C'\fR function.
2375 This option is required for fully standards-compliant handling of static
2376 destructors, but only works if your C library supports
2377 \&\f(CW\*(C`_\|_cxa_atexit\*(C'\fR.
2378 .IP "\fB\-fno\-use\-cxa\-get\-exception\-ptr\fR" 4
2379 .IX Item "-fno-use-cxa-get-exception-ptr"
2380 Don't use the \f(CW\*(C`_\|_cxa_get_exception_ptr\*(C'\fR runtime routine.  This
2381 causes \f(CW\*(C`std::uncaught_exception\*(C'\fR to be incorrect, but is necessary
2382 if the runtime routine is not available.
2383 .IP "\fB\-fvisibility\-inlines\-hidden\fR" 4
2384 .IX Item "-fvisibility-inlines-hidden"
2385 This switch declares that the user does not attempt to compare
2386 pointers to inline functions or methods where the addresses of the two functions
2387 are taken in different shared objects.
2388 .Sp
2389 The effect of this is that \s-1GCC\s0 may, effectively, mark inline methods with
2390 \&\f(CW\*(C`_\|_attribute_\|_ ((visibility ("hidden")))\*(C'\fR so that they do not
2391 appear in the export table of a \s-1DSO\s0 and do not require a \s-1PLT\s0 indirection
2392 when used within the \s-1DSO\s0.  Enabling this option can have a dramatic effect
2393 on load and link times of a \s-1DSO\s0 as it massively reduces the size of the
2394 dynamic export table when the library makes heavy use of templates.
2395 .Sp
2396 The behavior of this switch is not quite the same as marking the
2397 methods as hidden directly, because it does not affect static variables
2398 local to the function or cause the compiler to deduce that
2399 the function is defined in only one shared object.
2400 .Sp
2401 You may mark a method as having a visibility explicitly to negate the
2402 effect of the switch for that method.  For example, if you do want to
2403 compare pointers to a particular inline method, you might mark it as
2404 having default visibility.  Marking the enclosing class with explicit
2405 visibility has no effect.
2406 .Sp
2407 Explicitly instantiated inline methods are unaffected by this option
2408 as their linkage might otherwise cross a shared library boundary.
2409 .IP "\fB\-fvisibility\-ms\-compat\fR" 4
2410 .IX Item "-fvisibility-ms-compat"
2411 This flag attempts to use visibility settings to make \s-1GCC\s0's \*(C+
2412 linkage model compatible with that of Microsoft Visual Studio.
2413 .Sp
2414 The flag makes these changes to \s-1GCC\s0's linkage model:
2415 .RS 4
2416 .IP "1." 4
2417 .IX Item "1."
2418 It sets the default visibility to \f(CW\*(C`hidden\*(C'\fR, like
2419 \&\fB\-fvisibility=hidden\fR.
2420 .IP "2." 4
2421 .IX Item "2."
2422 Types, but not their members, are not hidden by default.
2423 .IP "3." 4
2424 .IX Item "3."
2425 The One Definition Rule is relaxed for types without explicit
2426 visibility specifications that are defined in more than one
2427 shared object: those declarations are permitted if they are
2428 permitted when this option is not used.
2429 .RE
2430 .RS 4
2431 .Sp
2432 In new code it is better to use \fB\-fvisibility=hidden\fR and
2433 export those classes that are intended to be externally visible.
2434 Unfortunately it is possible for code to rely, perhaps accidentally,
2435 on the Visual Studio behavior.
2436 .Sp
2437 Among the consequences of these changes are that static data members
2438 of the same type with the same name but defined in different shared
2439 objects are different, so changing one does not change the other;
2440 and that pointers to function members defined in different shared
2441 objects may not compare equal.  When this flag is given, it is a
2442 violation of the \s-1ODR\s0 to define types with the same name differently.
2443 .RE
2444 .IP "\fB\-fvtable\-verify=\fR[\fBstd\fR|\fBpreinit\fR|\fBnone\fR]" 4
2445 .IX Item "-fvtable-verify=[std|preinit|none]"
2446 Turn on (or off, if using \fB\-fvtable\-verify=none\fR) the security
2447 feature that verifies at run time, for every virtual call, that
2448 the vtable pointer through which the call is made is valid for the type of
2449 the object, and has not been corrupted or overwritten.  If an invalid vtable
2450 pointer is detected at run time, an error is reported and execution of the
2451 program is immediately halted.
2452 .Sp
2453 This option causes run-time data structures to be built at program startup,
2454 which are used for verifying the vtable pointers.  
2455 The options \fBstd\fR and \fBpreinit\fR
2456 control the timing of when these data structures are built.  In both cases the
2457 data structures are built before execution reaches \f(CW\*(C`main\*(C'\fR.  Using
2458 \&\fB\-fvtable\-verify=std\fR causes the data structures to be built after
2459 shared libraries have been loaded and initialized.
2460 \&\fB\-fvtable\-verify=preinit\fR causes them to be built before shared
2461 libraries have been loaded and initialized.
2462 .Sp
2463 If this option appears multiple times in the command line with different
2464 values specified, \fBnone\fR takes highest priority over both \fBstd\fR and
2465 \&\fBpreinit\fR; \fBpreinit\fR takes priority over \fBstd\fR.
2466 .IP "\fB\-fvtv\-debug\fR" 4
2467 .IX Item "-fvtv-debug"
2468 When used in conjunction with \fB\-fvtable\-verify=std\fR or 
2469 \&\fB\-fvtable\-verify=preinit\fR, causes debug versions of the 
2470 runtime functions for the vtable verification feature to be called.  
2471 This flag also causes the compiler to log information about which 
2472 vtable pointers it finds for each class.
2473 This information is written to a file named \fIvtv_set_ptr_data.log\fR 
2474 in the directory named by the environment variable \fB\s-1VTV_LOGS_DIR\s0\fR 
2475 if that is defined or the current working directory otherwise.
2476 .Sp
2477 Note:  This feature \fIappends\fR data to the log file. If you want a fresh log
2478 file, be sure to delete any existing one.
2479 .IP "\fB\-fvtv\-counts\fR" 4
2480 .IX Item "-fvtv-counts"
2481 This is a debugging flag.  When used in conjunction with
2482 \&\fB\-fvtable\-verify=std\fR or \fB\-fvtable\-verify=preinit\fR, this
2483 causes the compiler to keep track of the total number of virtual calls
2484 it encounters and the number of verifications it inserts.  It also
2485 counts the number of calls to certain run-time library functions
2486 that it inserts and logs this information for each compilation unit.
2487 The compiler writes this information to a file named
2488 \&\fIvtv_count_data.log\fR in the directory named by the environment
2489 variable \fB\s-1VTV_LOGS_DIR\s0\fR if that is defined or the current working
2490 directory otherwise.  It also counts the size of the vtable pointer sets
2491 for each class, and writes this information to \fIvtv_class_set_sizes.log\fR
2492 in the same directory.
2493 .Sp
2494 Note:  This feature \fIappends\fR data to the log files.  To get fresh log
2495 files, be sure to delete any existing ones.
2496 .IP "\fB\-fno\-weak\fR" 4
2497 .IX Item "-fno-weak"
2498 Do not use weak symbol support, even if it is provided by the linker.
2499 By default, G++ uses weak symbols if they are available.  This
2500 option exists only for testing, and should not be used by end-users;
2501 it results in inferior code and has no benefits.  This option may
2502 be removed in a future release of G++.
2503 .IP "\fB\-nostdinc++\fR" 4
2504 .IX Item "-nostdinc++"
2505 Do not search for header files in the standard directories specific to
2506 \&\*(C+, but do still search the other standard directories.  (This option
2507 is used when building the \*(C+ library.)
2508 .PP
2509 In addition, these optimization, warning, and code generation options
2510 have meanings only for \*(C+ programs:
2511 .IP "\fB\-Wabi\fR (C, Objective-C, \*(C+ and Objective\-\*(C+ only)" 4
2512 .IX Item "-Wabi (C, Objective-C,  and Objective- only)"
2513 When an explicit \fB\-fabi\-version=\fR\fIn\fR option is used, causes
2514 G++ to warn when it generates code that is probably not compatible with the
2515 vendor-neutral \*(C+ \s-1ABI\s0.  Since G++ now defaults to
2516 \&\fB\-fabi\-version=0\fR, \fB\-Wabi\fR has no effect unless either
2517 an older \s-1ABI\s0 version is selected (with \fB\-fabi\-version=\fR\fIn\fR)
2518 or an older compatibility version is selected (with
2519 \&\fB\-Wabi=\fR\fIn\fR or \fB\-fabi\-compat\-version=\fR\fIn\fR).
2520 .Sp
2521 Although an effort has been made to warn about
2522 all such cases, there are probably some cases that are not warned about,
2523 even though G++ is generating incompatible code.  There may also be
2524 cases where warnings are emitted even though the code that is generated
2525 is compatible.
2526 .Sp
2527 You should rewrite your code to avoid these warnings if you are
2528 concerned about the fact that code generated by G++ may not be binary
2529 compatible with code generated by other compilers.
2530 .Sp
2531 \&\fB\-Wabi\fR can also be used with an explicit version number to
2532 warn about compatibility with a particular \fB\-fabi\-version\fR
2533 level, e.g. \fB\-Wabi=2\fR to warn about changes relative to
2534 \&\fB\-fabi\-version=2\fR.  Specifying a version number also sets
2535 \&\fB\-fabi\-compat\-version=\fR\fIn\fR.
2536 .Sp
2537 The known incompatibilities in \fB\-fabi\-version=2\fR (which was the
2538 default from \s-1GCC\s0 3.4 to 4.9) include:
2539 .RS 4
2540 .IP "*" 4
2541 A template with a non-type template parameter of reference type was
2542 mangled incorrectly:
2543 .Sp
2544 .Vb 3
2545 \&        extern int N;
2546 \&        template <int &> struct S {};
2547 \&        void n (S<N>) {2}
2548 .Ve
2549 .Sp
2550 This was fixed in \fB\-fabi\-version=3\fR.
2551 .IP "*" 4
2552 \&\s-1SIMD\s0 vector types declared using \f(CW\*(C`_\|_attribute ((vector_size))\*(C'\fR were
2553 mangled in a non-standard way that does not allow for overloading of
2554 functions taking vectors of different sizes.
2555 .Sp
2556 The mangling was changed in \fB\-fabi\-version=4\fR.
2557 .IP "*" 4
2558 \&\f(CW\*(C`_\|_attribute ((const))\*(C'\fR and \f(CW\*(C`noreturn\*(C'\fR were mangled as type
2559 qualifiers, and \f(CW\*(C`decltype\*(C'\fR of a plain declaration was folded away.
2560 .Sp
2561 These mangling issues were fixed in \fB\-fabi\-version=5\fR.
2562 .IP "*" 4
2563 Scoped enumerators passed as arguments to a variadic function are
2564 promoted like unscoped enumerators, causing \f(CW\*(C`va_arg\*(C'\fR to complain.
2565 On most targets this does not actually affect the parameter passing
2566 \&\s-1ABI\s0, as there is no way to pass an argument smaller than \f(CW\*(C`int\*(C'\fR.
2567 .Sp
2568 Also, the \s-1ABI\s0 changed the mangling of template argument packs,
2569 \&\f(CW\*(C`const_cast\*(C'\fR, \f(CW\*(C`static_cast\*(C'\fR, prefix increment/decrement, and
2570 a class scope function used as a template argument.
2571 .Sp
2572 These issues were corrected in \fB\-fabi\-version=6\fR.
2573 .IP "*" 4
2574 Lambdas in default argument scope were mangled incorrectly, and the
2575 \&\s-1ABI\s0 changed the mangling of \f(CW\*(C`nullptr_t\*(C'\fR.
2576 .Sp
2577 These issues were corrected in \fB\-fabi\-version=7\fR.
2578 .IP "*" 4
2579 When mangling a function type with function-cv-qualifiers, the
2580 un-qualified function type was incorrectly treated as a substitution
2581 candidate.
2582 .Sp
2583 This was fixed in \fB\-fabi\-version=8\fR, the default for \s-1GCC\s0 5.1.
2584 .IP "*" 4
2585 \&\f(CW\*(C`decltype(nullptr)\*(C'\fR incorrectly had an alignment of 1, leading to
2586 unaligned accesses.  Note that this did not affect the \s-1ABI\s0 of a
2587 function with a \f(CW\*(C`nullptr_t\*(C'\fR parameter, as parameters have a
2588 minimum alignment.
2589 .Sp
2590 This was fixed in \fB\-fabi\-version=9\fR, the default for \s-1GCC\s0 5.2.
2591 .RE
2592 .RS 4
2593 .Sp
2594 It also warns about psABI-related changes.  The known psABI changes at this
2595 point include:
2596 .IP "*" 4
2597 For SysV/x86\-64, unions with \f(CW\*(C`long double\*(C'\fR members are 
2598 passed in memory as specified in psABI.  For example:
2599 .Sp
2600 .Vb 4
2601 \&        union U {
2602 \&          long double ld;
2603 \&          int i;
2604 \&        };
2605 .Ve
2606 .Sp
2607 \&\f(CW\*(C`union U\*(C'\fR is always passed in memory.
2608 .RE
2609 .RS 4
2610 .RE
2611 .IP "\fB\-Wabi\-tag\fR (\*(C+ and Objective\-\*(C+ only)" 4
2612 .IX Item "-Wabi-tag ( and Objective- only)"
2613 Warn when a type with an \s-1ABI\s0 tag is used in a context that does not
2614 have that \s-1ABI\s0 tag.  See \fB\*(C+ Attributes\fR for more information
2615 about \s-1ABI\s0 tags.
2616 .IP "\fB\-Wctor\-dtor\-privacy\fR (\*(C+ and Objective\-\*(C+ only)" 4
2617 .IX Item "-Wctor-dtor-privacy ( and Objective- only)"
2618 Warn when a class seems unusable because all the constructors or
2619 destructors in that class are private, and it has neither friends nor
2620 public static member functions.  Also warn if there are no non-private
2621 methods, and there's at least one private member function that isn't
2622 a constructor or destructor.
2623 .IP "\fB\-Wdelete\-non\-virtual\-dtor\fR (\*(C+ and Objective\-\*(C+ only)" 4
2624 .IX Item "-Wdelete-non-virtual-dtor ( and Objective- only)"
2625 Warn when \f(CW\*(C`delete\*(C'\fR is used to destroy an instance of a class that
2626 has virtual functions and non-virtual destructor. It is unsafe to delete
2627 an instance of a derived class through a pointer to a base class if the
2628 base class does not have a virtual destructor.  This warning is enabled
2629 by \fB\-Wall\fR.
2630 .IP "\fB\-Wliteral\-suffix\fR (\*(C+ and Objective\-\*(C+ only)" 4
2631 .IX Item "-Wliteral-suffix ( and Objective- only)"
2632 Warn when a string or character literal is followed by a ud-suffix which does
2633 not begin with an underscore.  As a conforming extension, \s-1GCC\s0 treats such
2634 suffixes as separate preprocessing tokens in order to maintain backwards
2635 compatibility with code that uses formatting macros from \f(CW\*(C`<inttypes.h>\*(C'\fR.
2636 For example:
2637 .Sp
2638 .Vb 3
2639 \&        #define _\|_STDC_FORMAT_MACROS
2640 \&        #include <inttypes.h>
2641 \&        #include <stdio.h>
2642 \&        
2643 \&        int main() {
2644 \&          int64_t i64 = 123;
2645 \&          printf("My int64: %"PRId64"\en", i64);
2646 \&        }
2647 .Ve
2648 .Sp
2649 In this case, \f(CW\*(C`PRId64\*(C'\fR is treated as a separate preprocessing token.
2650 .Sp
2651 This warning is enabled by default.
2652 .IP "\fB\-Wnarrowing\fR (\*(C+ and Objective\-\*(C+ only)" 4
2653 .IX Item "-Wnarrowing ( and Objective- only)"
2654 Warn when a narrowing conversion prohibited by \*(C+11 occurs within
2655 \&\fB{ }\fR, e.g.
2656 .Sp
2657 .Vb 1
2658 \&        int i = { 2.2 }; // error: narrowing from double to int
2659 .Ve
2660 .Sp
2661 This flag is included in \fB\-Wall\fR and \fB\-Wc++11\-compat\fR.
2662 .Sp
2663 With \fB\-std=c++11\fR, \fB\-Wno\-narrowing\fR suppresses the diagnostic
2664 required by the standard.  Note that this does not affect the meaning
2665 of well-formed code; narrowing conversions are still considered
2666 ill-formed in \s-1SFINAE\s0 context.
2667 .IP "\fB\-Wnoexcept\fR (\*(C+ and Objective\-\*(C+ only)" 4
2668 .IX Item "-Wnoexcept ( and Objective- only)"
2669 Warn when a noexcept-expression evaluates to false because of a call
2670 to a function that does not have a non-throwing exception
2671 specification (i.e. \f(CW\*(C`throw()\*(C'\fR or \f(CW\*(C`noexcept\*(C'\fR) but is known by
2672 the compiler to never throw an exception.
2673 .IP "\fB\-Wnon\-virtual\-dtor\fR (\*(C+ and Objective\-\*(C+ only)" 4
2674 .IX Item "-Wnon-virtual-dtor ( and Objective- only)"
2675 Warn when a class has virtual functions and an accessible non-virtual
2676 destructor itself or in an accessible polymorphic base class, in which
2677 case it is possible but unsafe to delete an instance of a derived
2678 class through a pointer to the class itself or base class.  This
2679 warning is automatically enabled if \fB\-Weffc++\fR is specified.
2680 .IP "\fB\-Wreorder\fR (\*(C+ and Objective\-\*(C+ only)" 4
2681 .IX Item "-Wreorder ( and Objective- only)"
2682 Warn when the order of member initializers given in the code does not
2683 match the order in which they must be executed.  For instance:
2684 .Sp
2685 .Vb 5
2686 \&        struct A {
2687 \&          int i;
2688 \&          int j;
2689 \&          A(): j (0), i (1) { }
2690 \&        };
2691 .Ve
2692 .Sp
2693 The compiler rearranges the member initializers for \f(CW\*(C`i\*(C'\fR
2694 and \f(CW\*(C`j\*(C'\fR to match the declaration order of the members, emitting
2695 a warning to that effect.  This warning is enabled by \fB\-Wall\fR.
2696 .IP "\fB\-fext\-numeric\-literals\fR (\*(C+ and Objective\-\*(C+ only)" 4
2697 .IX Item "-fext-numeric-literals ( and Objective- only)"
2698 Accept imaginary, fixed-point, or machine-defined
2699 literal number suffixes as \s-1GNU\s0 extensions.
2700 When this option is turned off these suffixes are treated
2701 as \*(C+11 user-defined literal numeric suffixes.
2702 This is on by default for all pre\-\*(C+11 dialects and all \s-1GNU\s0 dialects:
2703 \&\fB\-std=c++98\fR, \fB\-std=gnu++98\fR, \fB\-std=gnu++11\fR,
2704 \&\fB\-std=gnu++14\fR.
2705 This option is off by default
2706 for \s-1ISO\s0 \*(C+11 onwards (\fB\-std=c++11\fR, ...).
2707 .PP
2708 The following \fB\-W...\fR options are not affected by \fB\-Wall\fR.
2709 .IP "\fB\-Weffc++\fR (\*(C+ and Objective\-\*(C+ only)" 4
2710 .IX Item "-Weffc++ ( and Objective- only)"
2711 Warn about violations of the following style guidelines from Scott Meyers'
2712 \&\fIEffective \*(C+\fR series of books:
2713 .RS 4
2714 .IP "*" 4
2715 Define a copy constructor and an assignment operator for classes
2716 with dynamically-allocated memory.
2717 .IP "*" 4
2718 Prefer initialization to assignment in constructors.
2719 .IP "*" 4
2720 Have \f(CW\*(C`operator=\*(C'\fR return a reference to \f(CW*this\fR.
2721 .IP "*" 4
2722 Don't try to return a reference when you must return an object.
2723 .IP "*" 4
2724 Distinguish between prefix and postfix forms of increment and
2725 decrement operators.
2726 .IP "*" 4
2727 Never overload \f(CW\*(C`&&\*(C'\fR, \f(CW\*(C`||\*(C'\fR, or \f(CW\*(C`,\*(C'\fR.
2728 .RE
2729 .RS 4
2730 .Sp
2731 This option also enables \fB\-Wnon\-virtual\-dtor\fR, which is also
2732 one of the effective \*(C+ recommendations.  However, the check is
2733 extended to warn about the lack of virtual destructor in accessible
2734 non-polymorphic bases classes too.
2735 .Sp
2736 When selecting this option, be aware that the standard library
2737 headers do not obey all of these guidelines; use \fBgrep \-v\fR
2738 to filter out those warnings.
2739 .RE
2740 .IP "\fB\-Wstrict\-null\-sentinel\fR (\*(C+ and Objective\-\*(C+ only)" 4
2741 .IX Item "-Wstrict-null-sentinel ( and Objective- only)"
2742 Warn about the use of an uncasted \f(CW\*(C`NULL\*(C'\fR as sentinel.  When
2743 compiling only with \s-1GCC\s0 this is a valid sentinel, as \f(CW\*(C`NULL\*(C'\fR is defined
2744 to \f(CW\*(C`_\|_null\*(C'\fR.  Although it is a null pointer constant rather than a
2745 null pointer, it is guaranteed to be of the same size as a pointer.
2746 But this use is not portable across different compilers.
2747 .IP "\fB\-Wno\-non\-template\-friend\fR (\*(C+ and Objective\-\*(C+ only)" 4
2748 .IX Item "-Wno-non-template-friend ( and Objective- only)"
2749 Disable warnings when non-templatized friend functions are declared
2750 within a template.  Since the advent of explicit template specification
2751 support in G++, if the name of the friend is an unqualified-id (i.e.,
2752 \&\fBfriend foo(int)\fR), the \*(C+ language specification demands that the
2753 friend declare or define an ordinary, nontemplate function.  (Section
2754 14.5.3).  Before G++ implemented explicit specification, unqualified-ids
2755 could be interpreted as a particular specialization of a templatized
2756 function.  Because this non-conforming behavior is no longer the default
2757 behavior for G++, \fB\-Wnon\-template\-friend\fR allows the compiler to
2758 check existing code for potential trouble spots and is on by default.
2759 This new compiler behavior can be turned off with
2760 \&\fB\-Wno\-non\-template\-friend\fR, which keeps the conformant compiler code
2761 but disables the helpful warning.
2762 .IP "\fB\-Wold\-style\-cast\fR (\*(C+ and Objective\-\*(C+ only)" 4
2763 .IX Item "-Wold-style-cast ( and Objective- only)"
2764 Warn if an old-style (C\-style) cast to a non-void type is used within
2765 a \*(C+ program.  The new-style casts (\f(CW\*(C`dynamic_cast\*(C'\fR,
2766 \&\f(CW\*(C`static_cast\*(C'\fR, \f(CW\*(C`reinterpret_cast\*(C'\fR, and \f(CW\*(C`const_cast\*(C'\fR) are
2767 less vulnerable to unintended effects and much easier to search for.
2768 .IP "\fB\-Woverloaded\-virtual\fR (\*(C+ and Objective\-\*(C+ only)" 4
2769 .IX Item "-Woverloaded-virtual ( and Objective- only)"
2770 Warn when a function declaration hides virtual functions from a
2771 base class.  For example, in:
2772 .Sp
2773 .Vb 3
2774 \&        struct A {
2775 \&          virtual void f();
2776 \&        };
2777 \&        
2778 \&        struct B: public A {
2779 \&          void f(int);
2780 \&        };
2781 .Ve
2782 .Sp
2783 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
2784 like:
2785 .Sp
2786 .Vb 2
2787 \&        B* b;
2788 \&        b\->f();
2789 .Ve
2790 .Sp
2791 fails to compile.
2792 .IP "\fB\-Wno\-pmf\-conversions\fR (\*(C+ and Objective\-\*(C+ only)" 4
2793 .IX Item "-Wno-pmf-conversions ( and Objective- only)"
2794 Disable the diagnostic for converting a bound pointer to member function
2795 to a plain pointer.
2796 .IP "\fB\-Wsign\-promo\fR (\*(C+ and Objective\-\*(C+ only)" 4
2797 .IX Item "-Wsign-promo ( and Objective- only)"
2798 Warn when overload resolution chooses a promotion from unsigned or
2799 enumerated type to a signed type, over a conversion to an unsigned type of
2800 the same size.  Previous versions of G++ tried to preserve
2801 unsignedness, but the standard mandates the current behavior.
2802 .Sh "Options Controlling Objective-C and Objective\-\*(C+ Dialects"
2803 .IX Subsection "Options Controlling Objective-C and Objective- Dialects"
2804 (\s-1NOTE:\s0 This manual does not describe the Objective-C and Objective\-\*(C+
2805 languages themselves.
2806 .PP
2807 This section describes the command-line options that are only meaningful
2808 for Objective-C and Objective\-\*(C+ programs.  You can also use most of
2809 the language-independent \s-1GNU\s0 compiler options.
2810 For example, you might compile a file \fIsome_class.m\fR like this:
2811 .PP
2812 .Vb 1
2813 \&        gcc \-g \-fgnu\-runtime \-O \-c some_class.m
2814 .Ve
2815 .PP
2816 In this example, \fB\-fgnu\-runtime\fR is an option meant only for
2817 Objective-C and Objective\-\*(C+ programs; you can use the other options with
2818 any language supported by \s-1GCC\s0.
2819 .PP
2820 Note that since Objective-C is an extension of the C language, Objective-C
2821 compilations may also use options specific to the C front-end (e.g.,
2822 \&\fB\-Wtraditional\fR).  Similarly, Objective\-\*(C+ compilations may use
2823 \&\*(C+\-specific options (e.g., \fB\-Wabi\fR).
2824 .PP
2825 Here is a list of options that are \fIonly\fR for compiling Objective-C
2826 and Objective\-\*(C+ programs:
2827 .IP "\fB\-fconstant\-string\-class=\fR\fIclass-name\fR" 4
2828 .IX Item "-fconstant-string-class=class-name"
2829 Use \fIclass-name\fR as the name of the class to instantiate for each
2830 literal string specified with the syntax \f(CW\*(C`@"..."\*(C'\fR.  The default
2831 class name is \f(CW\*(C`NXConstantString\*(C'\fR if the \s-1GNU\s0 runtime is being used, and
2832 \&\f(CW\*(C`NSConstantString\*(C'\fR if the NeXT runtime is being used (see below).  The
2833 \&\fB\-fconstant\-cfstrings\fR option, if also present, overrides the
2834 \&\fB\-fconstant\-string\-class\fR setting and cause \f(CW\*(C`@"..."\*(C'\fR literals
2835 to be laid out as constant CoreFoundation strings.
2836 .IP "\fB\-fgnu\-runtime\fR" 4
2837 .IX Item "-fgnu-runtime"
2838 Generate object code compatible with the standard \s-1GNU\s0 Objective-C
2839 runtime.  This is the default for most types of systems.
2840 .IP "\fB\-fnext\-runtime\fR" 4
2841 .IX Item "-fnext-runtime"
2842 Generate output compatible with the NeXT runtime.  This is the default
2843 for NeXT-based systems, including Darwin and Mac \s-1OS\s0 X.  The macro
2844 \&\f(CW\*(C`_\|_NEXT_RUNTIME_\|_\*(C'\fR is predefined if (and only if) this option is
2845 used.
2846 .IP "\fB\-fno\-nil\-receivers\fR" 4
2847 .IX Item "-fno-nil-receivers"
2848 Assume that all Objective-C message dispatches (\f(CW\*(C`[receiver
2849 message:arg]\*(C'\fR) in this translation unit ensure that the receiver is
2850 not \f(CW\*(C`nil\*(C'\fR.  This allows for more efficient entry points in the
2851 runtime to be used.  This option is only available in conjunction with
2852 the NeXT runtime and \s-1ABI\s0 version 0 or 1.
2853 .IP "\fB\-fobjc\-abi\-version=\fR\fIn\fR" 4
2854 .IX Item "-fobjc-abi-version=n"
2855 Use version \fIn\fR of the Objective-C \s-1ABI\s0 for the selected runtime.
2856 This option is currently supported only for the NeXT runtime.  In that
2857 case, Version 0 is the traditional (32\-bit) \s-1ABI\s0 without support for
2858 properties and other Objective-C 2.0 additions.  Version 1 is the
2859 traditional (32\-bit) \s-1ABI\s0 with support for properties and other
2860 Objective-C 2.0 additions.  Version 2 is the modern (64\-bit) \s-1ABI\s0.  If
2861 nothing is specified, the default is Version 0 on 32\-bit target
2862 machines, and Version 2 on 64\-bit target machines.
2863 .IP "\fB\-fobjc\-call\-cxx\-cdtors\fR" 4
2864 .IX Item "-fobjc-call-cxx-cdtors"
2865 For each Objective-C class, check if any of its instance variables is a
2866 \&\*(C+ object with a non-trivial default constructor.  If so, synthesize a
2867 special \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR instance method which runs
2868 non-trivial default constructors on any such instance variables, in order,
2869 and then return \f(CW\*(C`self\*(C'\fR.  Similarly, check if any instance variable
2870 is a \*(C+ object with a non-trivial destructor, and if so, synthesize a
2871 special \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR method which runs
2872 all such default destructors, in reverse order.
2873 .Sp
2874 The \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR and \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR
2875 methods thusly generated only operate on instance variables
2876 declared in the current Objective-C class, and not those inherited
2877 from superclasses.  It is the responsibility of the Objective-C
2878 runtime to invoke all such methods in an object's inheritance
2879 hierarchy.  The \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR methods are invoked
2880 by the runtime immediately after a new object instance is allocated;
2881 the \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR methods are invoked immediately
2882 before the runtime deallocates an object instance.
2883 .Sp
2884 As of this writing, only the NeXT runtime on Mac \s-1OS\s0 X 10.4 and later has
2885 support for invoking the \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR and
2886 \&\f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR methods.
2887 .IP "\fB\-fobjc\-direct\-dispatch\fR" 4
2888 .IX Item "-fobjc-direct-dispatch"
2889 Allow fast jumps to the message dispatcher.  On Darwin this is
2890 accomplished via the comm page.
2891 .IP "\fB\-fobjc\-exceptions\fR" 4
2892 .IX Item "-fobjc-exceptions"
2893 Enable syntactic support for structured exception handling in
2894 Objective-C, similar to what is offered by \*(C+ and Java.  This option
2895 is required to use the Objective-C keywords \f(CW@try\fR,
2896 \&\f(CW@throw\fR, \f(CW@catch\fR, \f(CW@finally\fR and
2897 \&\f(CW@synchronized\fR.  This option is available with both the \s-1GNU\s0
2898 runtime and the NeXT runtime (but not available in conjunction with
2899 the NeXT runtime on Mac \s-1OS\s0 X 10.2 and earlier).
2900 .IP "\fB\-fobjc\-gc\fR" 4
2901 .IX Item "-fobjc-gc"
2902 Enable garbage collection (\s-1GC\s0) in Objective-C and Objective\-\*(C+
2903 programs.  This option is only available with the NeXT runtime; the
2904 \&\s-1GNU\s0 runtime has a different garbage collection implementation that
2905 does not require special compiler flags.
2906 .IP "\fB\-fobjc\-nilcheck\fR" 4
2907 .IX Item "-fobjc-nilcheck"
2908 For the NeXT runtime with version 2 of the \s-1ABI\s0, check for a nil
2909 receiver in method invocations before doing the actual method call.
2910 This is the default and can be disabled using
2911 \&\fB\-fno\-objc\-nilcheck\fR.  Class methods and super calls are never
2912 checked for nil in this way no matter what this flag is set to.
2913 Currently this flag does nothing when the \s-1GNU\s0 runtime, or an older
2914 version of the NeXT runtime \s-1ABI\s0, is used.
2915 .IP "\fB\-fobjc\-std=objc1\fR" 4
2916 .IX Item "-fobjc-std=objc1"
2917 Conform to the language syntax of Objective-C 1.0, the language
2918 recognized by \s-1GCC\s0 4.0.  This only affects the Objective-C additions to
2919 the C/\*(C+ language; it does not affect conformance to C/\*(C+ standards,
2920 which is controlled by the separate C/\*(C+ dialect option flags.  When
2921 this option is used with the Objective-C or Objective\-\*(C+ compiler,
2922 any Objective-C syntax that is not recognized by \s-1GCC\s0 4.0 is rejected.
2923 This is useful if you need to make sure that your Objective-C code can
2924 be compiled with older versions of \s-1GCC\s0.
2925 .IP "\fB\-freplace\-objc\-classes\fR" 4
2926 .IX Item "-freplace-objc-classes"
2927 Emit a special marker instructing \fB\f(BIld\fB\|(1)\fR not to statically link in
2928 the resulting object file, and allow \fB\f(BIdyld\fB\|(1)\fR to load it in at
2929 run time instead.  This is used in conjunction with the Fix-and-Continue
2930 debugging mode, where the object file in question may be recompiled and
2931 dynamically reloaded in the course of program execution, without the need
2932 to restart the program itself.  Currently, Fix-and-Continue functionality
2933 is only available in conjunction with the NeXT runtime on Mac \s-1OS\s0 X 10.3
2934 and later.
2935 .IP "\fB\-fzero\-link\fR" 4
2936 .IX Item "-fzero-link"
2937 When compiling for the NeXT runtime, the compiler ordinarily replaces calls
2938 to \f(CW\*(C`objc_getClass("...")\*(C'\fR (when the name of the class is known at
2939 compile time) with static class references that get initialized at load time,
2940 which improves run-time performance.  Specifying the \fB\-fzero\-link\fR flag
2941 suppresses this behavior and causes calls to \f(CW\*(C`objc_getClass("...")\*(C'\fR
2942 to be retained.  This is useful in Zero-Link debugging mode, since it allows
2943 for individual class implementations to be modified during program execution.
2944 The \s-1GNU\s0 runtime currently always retains calls to \f(CW\*(C`objc_get_class("...")\*(C'\fR
2945 regardless of command-line options.
2946 .IP "\fB\-fno\-local\-ivars\fR" 4
2947 .IX Item "-fno-local-ivars"
2948 By default instance variables in Objective-C can be accessed as if
2949 they were local variables from within the methods of the class they're
2950 declared in.  This can lead to shadowing between instance variables
2951 and other variables declared either locally inside a class method or
2952 globally with the same name.  Specifying the \fB\-fno\-local\-ivars\fR
2953 flag disables this behavior thus avoiding variable shadowing issues.
2954 .IP "\fB\-fivar\-visibility=\fR[\fBpublic\fR|\fBprotected\fR|\fBprivate\fR|\fBpackage\fR]" 4
2955 .IX Item "-fivar-visibility=[public|protected|private|package]"
2956 Set the default instance variable visibility to the specified option
2957 so that instance variables declared outside the scope of any access
2958 modifier directives default to the specified visibility.
2959 .IP "\fB\-gen\-decls\fR" 4
2960 .IX Item "-gen-decls"
2961 Dump interface declarations for all classes seen in the source file to a
2962 file named \fI\fIsourcename\fI.decl\fR.
2963 .IP "\fB\-Wassign\-intercept\fR (Objective-C and Objective\-\*(C+ only)" 4
2964 .IX Item "-Wassign-intercept (Objective-C and Objective- only)"
2965 Warn whenever an Objective-C assignment is being intercepted by the
2966 garbage collector.
2967 .IP "\fB\-Wno\-protocol\fR (Objective-C and Objective\-\*(C+ only)" 4
2968 .IX Item "-Wno-protocol (Objective-C and Objective- only)"
2969 If a class is declared to implement a protocol, a warning is issued for
2970 every method in the protocol that is not implemented by the class.  The
2971 default behavior is to issue a warning for every method not explicitly
2972 implemented in the class, even if a method implementation is inherited
2973 from the superclass.  If you use the \fB\-Wno\-protocol\fR option, then
2974 methods inherited from the superclass are considered to be implemented,
2975 and no warning is issued for them.
2976 .IP "\fB\-Wselector\fR (Objective-C and Objective\-\*(C+ only)" 4
2977 .IX Item "-Wselector (Objective-C and Objective- only)"
2978 Warn if multiple methods of different types for the same selector are
2979 found during compilation.  The check is performed on the list of methods
2980 in the final stage of compilation.  Additionally, a check is performed
2981 for each selector appearing in a \f(CW\*(C`@selector(...)\*(C'\fR
2982 expression, and a corresponding method for that selector has been found
2983 during compilation.  Because these checks scan the method table only at
2984 the end of compilation, these warnings are not produced if the final
2985 stage of compilation is not reached, for example because an error is
2986 found during compilation, or because the \fB\-fsyntax\-only\fR option is
2987 being used.
2988 .IP "\fB\-Wstrict\-selector\-match\fR (Objective-C and Objective\-\*(C+ only)" 4
2989 .IX Item "-Wstrict-selector-match (Objective-C and Objective- only)"
2990 Warn if multiple methods with differing argument and/or return types are
2991 found for a given selector when attempting to send a message using this
2992 selector to a receiver of type \f(CW\*(C`id\*(C'\fR or \f(CW\*(C`Class\*(C'\fR.  When this flag
2993 is off (which is the default behavior), the compiler omits such warnings
2994 if any differences found are confined to types that share the same size
2995 and alignment.
2996 .IP "\fB\-Wundeclared\-selector\fR (Objective-C and Objective\-\*(C+ only)" 4
2997 .IX Item "-Wundeclared-selector (Objective-C and Objective- only)"
2998 Warn if a \f(CW\*(C`@selector(...)\*(C'\fR expression referring to an
2999 undeclared selector is found.  A selector is considered undeclared if no
3000 method with that name has been declared before the
3001 \&\f(CW\*(C`@selector(...)\*(C'\fR expression, either explicitly in an
3002 \&\f(CW@interface\fR or \f(CW@protocol\fR declaration, or implicitly in
3003 an \f(CW@implementation\fR section.  This option always performs its
3004 checks as soon as a \f(CW\*(C`@selector(...)\*(C'\fR expression is found,
3005 while \fB\-Wselector\fR only performs its checks in the final stage of
3006 compilation.  This also enforces the coding style convention
3007 that methods and selectors must be declared before being used.
3008 .IP "\fB\-print\-objc\-runtime\-info\fR" 4
3009 .IX Item "-print-objc-runtime-info"
3010 Generate C header describing the largest structure that is passed by
3011 value, if any.
3012 .Sh "Options to Control Diagnostic Messages Formatting"
3013 .IX Subsection "Options to Control Diagnostic Messages Formatting"
3014 Traditionally, diagnostic messages have been formatted irrespective of
3015 the output device's aspect (e.g. its width, ...).  You can use the
3016 options described below
3017 to control the formatting algorithm for diagnostic messages, 
3018 e.g. how many characters per line, how often source location
3019 information should be reported.  Note that some language front ends may not
3020 honor these options.
3021 .IP "\fB\-fmessage\-length=\fR\fIn\fR" 4
3022 .IX Item "-fmessage-length=n"
3023 Try to format error messages so that they fit on lines of about
3024 \&\fIn\fR characters.  If \fIn\fR is zero, then no line-wrapping is
3025 done; each error message appears on a single line.  This is the
3026 default for all front ends.
3027 .IP "\fB\-fdiagnostics\-show\-location=once\fR" 4
3028 .IX Item "-fdiagnostics-show-location=once"
3029 Only meaningful in line-wrapping mode.  Instructs the diagnostic messages
3030 reporter to emit source location information \fIonce\fR; that is, in
3031 case the message is too long to fit on a single physical line and has to
3032 be wrapped, the source location won't be emitted (as prefix) again,
3033 over and over, in subsequent continuation lines.  This is the default
3034 behavior.
3035 .IP "\fB\-fdiagnostics\-show\-location=every\-line\fR" 4
3036 .IX Item "-fdiagnostics-show-location=every-line"
3037 Only meaningful in line-wrapping mode.  Instructs the diagnostic
3038 messages reporter to emit the same source location information (as
3039 prefix) for physical lines that result from the process of breaking
3040 a message which is too long to fit on a single line.
3041 .IP "\fB\-fdiagnostics\-color[=\fR\fI\s-1WHEN\s0\fR\fB]\fR" 4
3042 .IX Item "-fdiagnostics-color[=WHEN]"
3043 .PD 0
3044 .IP "\fB\-fno\-diagnostics\-color\fR" 4
3045 .IX Item "-fno-diagnostics-color"
3046 .PD
3047 Use color in diagnostics.  \fI\s-1WHEN\s0\fR is \fBnever\fR, \fBalways\fR,
3048 or \fBauto\fR.  The default depends on how the compiler has been configured,
3049 it can be any of the above \fI\s-1WHEN\s0\fR options or also \fBnever\fR
3050 if \fB\s-1GCC_COLORS\s0\fR environment variable isn't present in the environment,
3051 and \fBauto\fR otherwise.
3052 \&\fBauto\fR means to use color only when the standard error is a terminal.
3053 The forms \fB\-fdiagnostics\-color\fR and \fB\-fno\-diagnostics\-color\fR are
3054 aliases for \fB\-fdiagnostics\-color=always\fR and
3055 \&\fB\-fdiagnostics\-color=never\fR, respectively.
3056 .Sp
3057 The colors are defined by the environment variable \fB\s-1GCC_COLORS\s0\fR.
3058 Its value is a colon-separated list of capabilities and Select Graphic
3059 Rendition (\s-1SGR\s0) substrings. \s-1SGR\s0 commands are interpreted by the
3060 terminal or terminal emulator.  (See the section in the documentation
3061 of your text terminal for permitted values and their meanings as
3062 character attributes.)  These substring values are integers in decimal
3063 representation and can be concatenated with semicolons.
3064 Common values to concatenate include
3065 \&\fB1\fR for bold,
3066 \&\fB4\fR for underline,
3067 \&\fB5\fR for blink,
3068 \&\fB7\fR for inverse,
3069 \&\fB39\fR for default foreground color,
3070 \&\fB30\fR to \fB37\fR for foreground colors,
3071 \&\fB90\fR to \fB97\fR for 16\-color mode foreground colors,
3072 \&\fB38;5;0\fR to \fB38;5;255\fR
3073 for 88\-color and 256\-color modes foreground colors,
3074 \&\fB49\fR for default background color,
3075 \&\fB40\fR to \fB47\fR for background colors,
3076 \&\fB100\fR to \fB107\fR for 16\-color mode background colors,
3077 and \fB48;5;0\fR to \fB48;5;255\fR
3078 for 88\-color and 256\-color modes background colors.
3079 .Sp
3080 The default \fB\s-1GCC_COLORS\s0\fR is
3081 .Sp
3082 .Vb 1
3083 \&        error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01
3084 .Ve
3085 .Sp
3086 where \fB01;31\fR is bold red, \fB01;35\fR is bold magenta,
3087 \&\fB01;36\fR is bold cyan, \fB01;32\fR is bold green and
3088 \&\fB01\fR is bold. Setting \fB\s-1GCC_COLORS\s0\fR to the empty
3089 string disables colors.
3090 Supported capabilities are as follows.
3091 .RS 4
3092 .ie n .IP """error=""" 4
3093 .el .IP "\f(CWerror=\fR" 4
3094 .IX Item "error="
3095 \&\s-1SGR\s0 substring for error: markers.
3096 .ie n .IP """warning=""" 4
3097 .el .IP "\f(CWwarning=\fR" 4
3098 .IX Item "warning="
3099 \&\s-1SGR\s0 substring for warning: markers.
3100 .ie n .IP """note=""" 4
3101 .el .IP "\f(CWnote=\fR" 4
3102 .IX Item "note="
3103 \&\s-1SGR\s0 substring for note: markers.
3104 .ie n .IP """caret=""" 4
3105 .el .IP "\f(CWcaret=\fR" 4
3106 .IX Item "caret="
3107 \&\s-1SGR\s0 substring for caret line.
3108 .ie n .IP """locus=""" 4
3109 .el .IP "\f(CWlocus=\fR" 4
3110 .IX Item "locus="
3111 \&\s-1SGR\s0 substring for location information, \fBfile:line\fR or
3112 \&\fBfile:line:column\fR etc.
3113 .ie n .IP """quote=""" 4
3114 .el .IP "\f(CWquote=\fR" 4
3115 .IX Item "quote="
3116 \&\s-1SGR\s0 substring for information printed within quotes.
3117 .RE
3118 .RS 4
3119 .RE
3120 .IP "\fB\-fno\-diagnostics\-show\-option\fR" 4
3121 .IX Item "-fno-diagnostics-show-option"
3122 By default, each diagnostic emitted includes text indicating the
3123 command-line option that directly controls the diagnostic (if such an
3124 option is known to the diagnostic machinery).  Specifying the
3125 \&\fB\-fno\-diagnostics\-show\-option\fR flag suppresses that behavior.
3126 .IP "\fB\-fno\-diagnostics\-show\-caret\fR" 4
3127 .IX Item "-fno-diagnostics-show-caret"
3128 By default, each diagnostic emitted includes the original source line
3129 and a caret '^' indicating the column.  This option suppresses this
3130 information.  The source line is truncated to \fIn\fR characters, if
3131 the \fB\-fmessage\-length=n\fR option is given.  When the output is done
3132 to the terminal, the width is limited to the width given by the
3133 \&\fB\s-1COLUMNS\s0\fR environment variable or, if not set, to the terminal width.
3134 .Sh "Options to Request or Suppress Warnings"
3135 .IX Subsection "Options to Request or Suppress Warnings"
3136 Warnings are diagnostic messages that report constructions that
3137 are not inherently erroneous but that are risky or suggest there
3138 may have been an error.
3139 .PP
3140 The following language-independent options do not enable specific
3141 warnings but control the kinds of diagnostics produced by \s-1GCC\s0.
3142 .IP "\fB\-fsyntax\-only\fR" 4
3143 .IX Item "-fsyntax-only"
3144 Check the code for syntax errors, but don't do anything beyond that.
3145 .IP "\fB\-fmax\-errors=\fR\fIn\fR" 4
3146 .IX Item "-fmax-errors=n"
3147 Limits the maximum number of error messages to \fIn\fR, at which point
3148 \&\s-1GCC\s0 bails out rather than attempting to continue processing the source
3149 code.  If \fIn\fR is 0 (the default), there is no limit on the number
3150 of error messages produced.  If \fB\-Wfatal\-errors\fR is also
3151 specified, then \fB\-Wfatal\-errors\fR takes precedence over this
3152 option.
3153 .IP "\fB\-w\fR" 4
3154 .IX Item "-w"
3155 Inhibit all warning messages.
3156 .IP "\fB\-Werror\fR" 4
3157 .IX Item "-Werror"
3158 Make all warnings into errors.
3159 .IP "\fB\-Werror=\fR" 4
3160 .IX Item "-Werror="
3161 Make the specified warning into an error.  The specifier for a warning
3162 is appended; for example \fB\-Werror=switch\fR turns the warnings
3163 controlled by \fB\-Wswitch\fR into errors.  This switch takes a
3164 negative form, to be used to negate \fB\-Werror\fR for specific
3165 warnings; for example \fB\-Wno\-error=switch\fR makes
3166 \&\fB\-Wswitch\fR warnings not be errors, even when \fB\-Werror\fR
3167 is in effect.
3168 .Sp
3169 The warning message for each controllable warning includes the
3170 option that controls the warning.  That option can then be used with
3171 \&\fB\-Werror=\fR and \fB\-Wno\-error=\fR as described above.
3172 (Printing of the option in the warning message can be disabled using the
3173 \&\fB\-fno\-diagnostics\-show\-option\fR flag.)
3174 .Sp
3175 Note that specifying \fB\-Werror=\fR\fIfoo\fR automatically implies
3176 \&\fB\-W\fR\fIfoo\fR.  However, \fB\-Wno\-error=\fR\fIfoo\fR does not
3177 imply anything.
3178 .IP "\fB\-Wfatal\-errors\fR" 4
3179 .IX Item "-Wfatal-errors"
3180 This option causes the compiler to abort compilation on the first error
3181 occurred rather than trying to keep going and printing further error
3182 messages.
3183 .PP
3184 You can request many specific warnings with options beginning with
3185 \&\fB\-W\fR, for example \fB\-Wimplicit\fR to request warnings on
3186 implicit declarations.  Each of these specific warning options also
3187 has a negative form beginning \fB\-Wno\-\fR to turn off warnings; for
3188 example, \fB\-Wno\-implicit\fR.  This manual lists only one of the
3189 two forms, whichever is not the default.  For further
3190 language-specific options also refer to \fB\*(C+ Dialect Options\fR and
3191 \&\fBObjective-C and Objective\-\*(C+ Dialect Options\fR.
3192 .PP
3193 Some options, such as \fB\-Wall\fR and \fB\-Wextra\fR, turn on other
3194 options, such as \fB\-Wunused\fR, which may turn on further options,
3195 such as \fB\-Wunused\-value\fR. The combined effect of positive and
3196 negative forms is that more specific options have priority over less
3197 specific ones, independently of their position in the command-line. For
3198 options of the same specificity, the last one takes effect. Options
3199 enabled or disabled via pragmas take effect
3200 as if they appeared at the end of the command-line.
3201 .PP
3202 When an unrecognized warning option is requested (e.g.,
3203 \&\fB\-Wunknown\-warning\fR), \s-1GCC\s0 emits a diagnostic stating
3204 that the option is not recognized.  However, if the \fB\-Wno\-\fR form
3205 is used, the behavior is slightly different: no diagnostic is
3206 produced for \fB\-Wno\-unknown\-warning\fR unless other diagnostics
3207 are being produced.  This allows the use of new \fB\-Wno\-\fR options
3208 with old compilers, but if something goes wrong, the compiler
3209 warns that an unrecognized option is present.
3210 .IP "\fB\-Wpedantic\fR" 4
3211 .IX Item "-Wpedantic"
3212 .PD 0
3213 .IP "\fB\-pedantic\fR" 4
3214 .IX Item "-pedantic"
3215 .PD
3216 Issue all the warnings demanded by strict \s-1ISO\s0 C and \s-1ISO\s0 \*(C+;
3217 reject all programs that use forbidden extensions, and some other
3218 programs that do not follow \s-1ISO\s0 C and \s-1ISO\s0 \*(C+.  For \s-1ISO\s0 C, follows the
3219 version of the \s-1ISO\s0 C standard specified by any \fB\-std\fR option used.
3220 .Sp
3221 Valid \s-1ISO\s0 C and \s-1ISO\s0 \*(C+ programs should compile properly with or without
3222 this option (though a rare few require \fB\-ansi\fR or a
3223 \&\fB\-std\fR option specifying the required version of \s-1ISO\s0 C).  However,
3224 without this option, certain \s-1GNU\s0 extensions and traditional C and \*(C+
3225 features are supported as well.  With this option, they are rejected.
3226 .Sp
3227 \&\fB\-Wpedantic\fR does not cause warning messages for use of the
3228 alternate keywords whose names begin and end with \fB_\|_\fR.  Pedantic
3229 warnings are also disabled in the expression that follows
3230 \&\f(CW\*(C`_\|_extension_\|_\*(C'\fR.  However, only system header files should use
3231 these escape routes; application programs should avoid them.
3232 .Sp
3233 Some users try to use \fB\-Wpedantic\fR to check programs for strict \s-1ISO\s0
3234 C conformance.  They soon find that it does not do quite what they want:
3235 it finds some non-ISO practices, but not all\-\-\-only those for which
3236 \&\s-1ISO\s0 C \fIrequires\fR a diagnostic, and some others for which
3237 diagnostics have been added.
3238 .Sp
3239 A feature to report any failure to conform to \s-1ISO\s0 C might be useful in
3240 some instances, but would require considerable additional work and would
3241 be quite different from \fB\-Wpedantic\fR.  We don't have plans to
3242 support such a feature in the near future.
3243 .Sp
3244 Where the standard specified with \fB\-std\fR represents a \s-1GNU\s0
3245 extended dialect of C, such as \fBgnu90\fR or \fBgnu99\fR, there is a
3246 corresponding \fIbase standard\fR, the version of \s-1ISO\s0 C on which the \s-1GNU\s0
3247 extended dialect is based.  Warnings from \fB\-Wpedantic\fR are given
3248 where they are required by the base standard.  (It does not make sense
3249 for such warnings to be given only for features not in the specified \s-1GNU\s0
3250 C dialect, since by definition the \s-1GNU\s0 dialects of C include all
3251 features the compiler supports with the given option, and there would be
3252 nothing to warn about.)
3253 .IP "\fB\-pedantic\-errors\fR" 4
3254 .IX Item "-pedantic-errors"
3255 Give an error whenever the \fIbase standard\fR (see \fB\-Wpedantic\fR)
3256 requires a diagnostic, in some cases where there is undefined behavior
3257 at compile-time and in some other cases that do not prevent compilation
3258 of programs that are valid according to the standard. This is not
3259 equivalent to \fB\-Werror=pedantic\fR, since there are errors enabled
3260 by this option and not enabled by the latter and vice versa.
3261 .IP "\fB\-Wall\fR" 4
3262 .IX Item "-Wall"
3263 This enables all the warnings about constructions that some users
3264 consider questionable, and that are easy to avoid (or modify to
3265 prevent the warning), even in conjunction with macros.  This also
3266 enables some language-specific warnings described in \fB\*(C+ Dialect
3267 Options\fR and \fBObjective-C and Objective\-\*(C+ Dialect Options\fR.
3268 .Sp
3269 \&\fB\-Wall\fR turns on the following warning flags:
3270 .Sp
3271 \&\fB\-Waddress   
3272 \&\-Warray\-bounds=1\fR (only with\fB \fR\fB\-O2\fR)  
3273 \&\fB\-Wc++11\-compat  \-Wc++14\-compat
3274 \&\-Wchar\-subscripts  
3275 \&\-Wenum\-compare\fR (in C/ObjC; this is on by default in \*(C+) 
3276 \&\fB\-Wimplicit\-int\fR (C and Objective-C only) 
3277 \&\fB\-Wimplicit\-function\-declaration\fR (C and Objective-C only) 
3278 \&\fB\-Wcomment  
3279 \&\-Wformat   
3280 \&\-Wmain\fR (only for C/ObjC and unless\fB \fR\fB\-ffreestanding\fR)  
3281 \&\fB\-Wmaybe\-uninitialized 
3282 \&\-Wmissing\-braces\fR (only for C/ObjC) 
3283 \&\fB\-Wnonnull  
3284 \&\-Wopenmp\-simd 
3285 \&\-Wparentheses  
3286 \&\-Wpointer\-sign  
3287 \&\-Wreorder   
3288 \&\-Wreturn\-type  
3289 \&\-Wsequence\-point  
3290 \&\-Wsign\-compare\fR (only in \*(C+)  
3291 \&\fB\-Wstrict\-aliasing  
3292 \&\-Wstrict\-overflow=1  
3293 \&\-Wswitch  
3294 \&\-Wtrigraphs  
3295 \&\-Wuninitialized  
3296 \&\-Wunknown\-pragmas  
3297 \&\-Wunused\-function  
3298 \&\-Wunused\-label     
3299 \&\-Wunused\-value     
3300 \&\-Wunused\-variable  
3301 \&\-Wvolatile\-register\-var\fR
3302 .Sp
3303 Note that some warning flags are not implied by \fB\-Wall\fR.  Some of
3304 them warn about constructions that users generally do not consider
3305 questionable, but which occasionally you might wish to check for;
3306 others warn about constructions that are necessary or hard to avoid in
3307 some cases, and there is no simple way to modify the code to suppress
3308 the warning. Some of them are enabled by \fB\-Wextra\fR but many of
3309 them must be enabled individually.
3310 .IP "\fB\-Wextra\fR" 4
3311 .IX Item "-Wextra"
3312 This enables some extra warning flags that are not enabled by
3313 \&\fB\-Wall\fR. (This option used to be called \fB\-W\fR.  The older
3314 name is still supported, but the newer name is more descriptive.)
3315 .Sp
3316 \&\fB\-Wclobbered  
3317 \&\-Wempty\-body  
3318 \&\-Wignored\-qualifiers 
3319 \&\-Wmissing\-field\-initializers  
3320 \&\-Wmissing\-parameter\-type\fR (C only)  
3321 \&\fB\-Wold\-style\-declaration\fR (C only)  
3322 \&\fB\-Woverride\-init  
3323 \&\-Wsign\-compare  
3324 \&\-Wtype\-limits  
3325 \&\-Wuninitialized  
3326 \&\-Wunused\-parameter\fR (only with\fB \fR\fB\-Wunused\fR\fB \fRor\fB \fR\fB\-Wall\fR) 
3327 \&\fB\-Wunused\-but\-set\-parameter\fR (only with\fB \fR\fB\-Wunused\fR\fB \fRor\fB \fR\fB\-Wall\fR)  \fB \fR
3328 .Sp
3329 The option \fB\-Wextra\fR also prints warning messages for the
3330 following cases:
3331 .RS 4
3332 .IP "*" 4
3333 A pointer is compared against integer zero with \f(CW\*(C`<\*(C'\fR, \f(CW\*(C`<=\*(C'\fR,
3334 \&\f(CW\*(C`>\*(C'\fR, or \f(CW\*(C`>=\*(C'\fR.
3335 .IP "*" 4
3336 (\*(C+ only) An enumerator and a non-enumerator both appear in a
3337 conditional expression.
3338 .IP "*" 4
3339 (\*(C+ only) Ambiguous virtual bases.
3340 .IP "*" 4
3341 (\*(C+ only) Subscripting an array that has been declared \f(CW\*(C`register\*(C'\fR.
3342 .IP "*" 4
3343 (\*(C+ only) Taking the address of a variable that has been declared
3344 \&\f(CW\*(C`register\*(C'\fR.
3345 .IP "*" 4
3346 (\*(C+ only) A base class is not initialized in a derived class's copy
3347 constructor.
3348 .RE
3349 .RS 4
3350 .RE
3351 .IP "\fB\-Wchar\-subscripts\fR" 4
3352 .IX Item "-Wchar-subscripts"
3353 Warn if an array subscript has type \f(CW\*(C`char\*(C'\fR.  This is a common cause
3354 of error, as programmers often forget that this type is signed on some
3355 machines.
3356 This warning is enabled by \fB\-Wall\fR.
3357 .IP "\fB\-Wcomment\fR" 4
3358 .IX Item "-Wcomment"
3359 Warn whenever a comment-start sequence \fB/*\fR appears in a \fB/*\fR
3360 comment, or whenever a Backslash-Newline appears in a \fB//\fR comment.
3361 This warning is enabled by \fB\-Wall\fR.
3362 .IP "\fB\-Wno\-coverage\-mismatch\fR" 4
3363 .IX Item "-Wno-coverage-mismatch"
3364 Warn if feedback profiles do not match when using the
3365 \&\fB\-fprofile\-use\fR option.
3366 If a source file is changed between compiling with \fB\-fprofile\-gen\fR and
3367 with \fB\-fprofile\-use\fR, the files with the profile feedback can fail
3368 to match the source file and \s-1GCC\s0 cannot use the profile feedback
3369 information.  By default, this warning is enabled and is treated as an
3370 error.  \fB\-Wno\-coverage\-mismatch\fR can be used to disable the
3371 warning or \fB\-Wno\-error=coverage\-mismatch\fR can be used to
3372 disable the error.  Disabling the error for this warning can result in
3373 poorly optimized code and is useful only in the
3374 case of very minor changes such as bug fixes to an existing code-base.
3375 Completely disabling the warning is not recommended.
3376 .IP "\fB\-Wno\-cpp\fR" 4
3377 .IX Item "-Wno-cpp"
3378 (C, Objective-C, \*(C+, Objective\-\*(C+ and Fortran only)
3379 .Sp
3380 Suppress warning messages emitted by \f(CW\*(C`#warning\*(C'\fR directives.
3381 .IP "\fB\-Wdouble\-promotion\fR (C, \*(C+, Objective-C and Objective\-\*(C+ only)" 4
3382 .IX Item "-Wdouble-promotion (C, , Objective-C and Objective- only)"
3383 Give a warning when a value of type \f(CW\*(C`float\*(C'\fR is implicitly
3384 promoted to \f(CW\*(C`double\*(C'\fR.  CPUs with a 32\-bit \*(L"single-precision\*(R"
3385 floating-point unit implement \f(CW\*(C`float\*(C'\fR in hardware, but emulate
3386 \&\f(CW\*(C`double\*(C'\fR in software.  On such a machine, doing computations
3387 using \f(CW\*(C`double\*(C'\fR values is much more expensive because of the
3388 overhead required for software emulation.
3389 .Sp
3390 It is easy to accidentally do computations with \f(CW\*(C`double\*(C'\fR because
3391 floating-point literals are implicitly of type \f(CW\*(C`double\*(C'\fR.  For
3392 example, in:
3393 .Sp
3394 .Vb 4
3395 \&        float area(float radius)
3396 \&        {
3397 \&           return 3.14159 * radius * radius;
3398 \&        }
3399 .Ve
3400 .Sp
3401 the compiler performs the entire computation with \f(CW\*(C`double\*(C'\fR
3402 because the floating-point literal is a \f(CW\*(C`double\*(C'\fR.
3403 .IP "\fB\-Wformat\fR" 4
3404 .IX Item "-Wformat"
3405 .PD 0
3406 .IP "\fB\-Wformat=\fR\fIn\fR" 4
3407 .IX Item "-Wformat=n"
3408 .PD
3409 Check calls to \f(CW\*(C`printf\*(C'\fR and \f(CW\*(C`scanf\*(C'\fR, etc., to make sure that
3410 the arguments supplied have types appropriate to the format string
3411 specified, and that the conversions specified in the format string make
3412 sense.  This includes standard functions, and others specified by format
3413 attributes, in the \f(CW\*(C`printf\*(C'\fR,
3414 \&\f(CW\*(C`scanf\*(C'\fR, \f(CW\*(C`strftime\*(C'\fR and \f(CW\*(C`strfmon\*(C'\fR (an X/Open extension,
3415 not in the C standard) families (or other target-specific families).
3416 Which functions are checked without format attributes having been
3417 specified depends on the standard version selected, and such checks of
3418 functions without the attribute specified are disabled by
3419 \&\fB\-ffreestanding\fR or \fB\-fno\-builtin\fR.
3420 .Sp
3421 The formats are checked against the format features supported by \s-1GNU\s0
3422 libc version 2.2.  These include all \s-1ISO\s0 C90 and C99 features, as well
3423 as features from the Single Unix Specification and some \s-1BSD\s0 and \s-1GNU\s0
3424 extensions.  Other library implementations may not support all these
3425 features; \s-1GCC\s0 does not support warning about features that go beyond a
3426 particular library's limitations.  However, if \fB\-Wpedantic\fR is used
3427 with \fB\-Wformat\fR, warnings are given about format features not
3428 in the selected standard version (but not for \f(CW\*(C`strfmon\*(C'\fR formats,
3429 since those are not in any version of the C standard).
3430 .RS 4
3431 .IP "\fB\-Wformat=1\fR" 4
3432 .IX Item "-Wformat=1"
3433 .PD 0
3434 .IP "\fB\-Wformat\fR" 4
3435 .IX Item "-Wformat"
3436 .PD
3437 Option \fB\-Wformat\fR is equivalent to \fB\-Wformat=1\fR, and
3438 \&\fB\-Wno\-format\fR is equivalent to \fB\-Wformat=0\fR.  Since
3439 \&\fB\-Wformat\fR also checks for null format arguments for several
3440 functions, \fB\-Wformat\fR also implies \fB\-Wnonnull\fR.  Some
3441 aspects of this level of format checking can be disabled by the
3442 options: \fB\-Wno\-format\-contains\-nul\fR,
3443 \&\fB\-Wno\-format\-extra\-args\fR, and \fB\-Wno\-format\-zero\-length\fR.
3444 \&\fB\-Wformat\fR is enabled by \fB\-Wall\fR.
3445 .IP "\fB\-Wno\-format\-contains\-nul\fR" 4
3446 .IX Item "-Wno-format-contains-nul"
3447 If \fB\-Wformat\fR is specified, do not warn about format strings that
3448 contain \s-1NUL\s0 bytes.
3449 .IP "\fB\-Wno\-format\-extra\-args\fR" 4
3450 .IX Item "-Wno-format-extra-args"
3451 If \fB\-Wformat\fR is specified, do not warn about excess arguments to a
3452 \&\f(CW\*(C`printf\*(C'\fR or \f(CW\*(C`scanf\*(C'\fR format function.  The C standard specifies
3453 that such arguments are ignored.
3454 .Sp
3455 Where the unused arguments lie between used arguments that are
3456 specified with \fB$\fR operand number specifications, normally
3457 warnings are still given, since the implementation could not know what
3458 type to pass to \f(CW\*(C`va_arg\*(C'\fR to skip the unused arguments.  However,
3459 in the case of \f(CW\*(C`scanf\*(C'\fR formats, this option suppresses the
3460 warning if the unused arguments are all pointers, since the Single
3461 Unix Specification says that such unused arguments are allowed.
3462 .IP "\fB\-Wno\-format\-zero\-length\fR" 4
3463 .IX Item "-Wno-format-zero-length"
3464 If \fB\-Wformat\fR is specified, do not warn about zero-length formats.
3465 The C standard specifies that zero-length formats are allowed.
3466 .IP "\fB\-Wformat=2\fR" 4
3467 .IX Item "-Wformat=2"
3468 Enable \fB\-Wformat\fR plus additional format checks.  Currently
3469 equivalent to \fB\-Wformat \-Wformat\-nonliteral \-Wformat\-security
3470 \&\-Wformat\-y2k\fR.
3471 .IP "\fB\-Wformat\-nonliteral\fR" 4
3472 .IX Item "-Wformat-nonliteral"
3473 If \fB\-Wformat\fR is specified, also warn if the format string is not a
3474 string literal and so cannot be checked, unless the format function
3475 takes its format arguments as a \f(CW\*(C`va_list\*(C'\fR.
3476 .IP "\fB\-Wformat\-security\fR" 4
3477 .IX Item "-Wformat-security"
3478 If \fB\-Wformat\fR is specified, also warn about uses of format
3479 functions that represent possible security problems.  At present, this
3480 warns about calls to \f(CW\*(C`printf\*(C'\fR and \f(CW\*(C`scanf\*(C'\fR functions where the
3481 format string is not a string literal and there are no format arguments,
3482 as in \f(CW\*(C`printf (foo);\*(C'\fR.  This may be a security hole if the format
3483 string came from untrusted input and contains \fB\f(CB%n\fB\fR.  (This is
3484 currently a subset of what \fB\-Wformat\-nonliteral\fR warns about, but
3485 in future warnings may be added to \fB\-Wformat\-security\fR that are not
3486 included in \fB\-Wformat\-nonliteral\fR.)
3487 .IP "\fB\-Wformat\-signedness\fR" 4
3488 .IX Item "-Wformat-signedness"
3489 If \fB\-Wformat\fR is specified, also warn if the format string
3490 requires an unsigned argument and the argument is signed and vice versa.
3491 .IP "\fB\-Wformat\-y2k\fR" 4
3492 .IX Item "-Wformat-y2k"
3493 If \fB\-Wformat\fR is specified, also warn about \f(CW\*(C`strftime\*(C'\fR
3494 formats that may yield only a two-digit year.
3495 .RE
3496 .RS 4
3497 .RE
3498 .IP "\fB\-Wnonnull\fR" 4
3499 .IX Item "-Wnonnull"
3500 Warn about passing a null pointer for arguments marked as
3501 requiring a non-null value by the \f(CW\*(C`nonnull\*(C'\fR function attribute.
3502 .Sp
3503 \&\fB\-Wnonnull\fR is included in \fB\-Wall\fR and \fB\-Wformat\fR.  It
3504 can be disabled with the \fB\-Wno\-nonnull\fR option.
3505 .IP "\fB\-Winit\-self\fR (C, \*(C+, Objective-C and Objective\-\*(C+ only)" 4
3506 .IX Item "-Winit-self (C, , Objective-C and Objective- only)"
3507 Warn about uninitialized variables that are initialized with themselves.
3508 Note this option can only be used with the \fB\-Wuninitialized\fR option.
3509 .Sp
3510 For example, \s-1GCC\s0 warns about \f(CW\*(C`i\*(C'\fR being uninitialized in the
3511 following snippet only when \fB\-Winit\-self\fR has been specified:
3512 .Sp
3513 .Vb 5
3514 \&        int f()
3515 \&        {
3516 \&          int i = i;
3517 \&          return i;
3518 \&        }
3519 .Ve
3520 .Sp
3521 This warning is enabled by \fB\-Wall\fR in \*(C+.
3522 .IP "\fB\-Wimplicit\-int\fR (C and Objective-C only)" 4
3523 .IX Item "-Wimplicit-int (C and Objective-C only)"
3524 Warn when a declaration does not specify a type.
3525 This warning is enabled by \fB\-Wall\fR.
3526 .IP "\fB\-Wimplicit\-function\-declaration\fR (C and Objective-C only)" 4
3527 .IX Item "-Wimplicit-function-declaration (C and Objective-C only)"
3528 Give a warning whenever a function is used before being declared. In
3529 C99 mode (\fB\-std=c99\fR or \fB\-std=gnu99\fR), this warning is
3530 enabled by default and it is made into an error by
3531 \&\fB\-pedantic\-errors\fR. This warning is also enabled by
3532 \&\fB\-Wall\fR.
3533 .IP "\fB\-Wimplicit\fR (C and Objective-C only)" 4
3534 .IX Item "-Wimplicit (C and Objective-C only)"
3535 Same as \fB\-Wimplicit\-int\fR and \fB\-Wimplicit\-function\-declaration\fR.
3536 This warning is enabled by \fB\-Wall\fR.
3537 .IP "\fB\-Wignored\-qualifiers\fR (C and \*(C+ only)" 4
3538 .IX Item "-Wignored-qualifiers (C and  only)"
3539 Warn if the return type of a function has a type qualifier
3540 such as \f(CW\*(C`const\*(C'\fR.  For \s-1ISO\s0 C such a type qualifier has no effect,
3541 since the value returned by a function is not an lvalue.
3542 For \*(C+, the warning is only emitted for scalar types or \f(CW\*(C`void\*(C'\fR.
3543 \&\s-1ISO\s0 C prohibits qualified \f(CW\*(C`void\*(C'\fR return types on function
3544 definitions, so such return types always receive a warning
3545 even without this option.
3546 .Sp
3547 This warning is also enabled by \fB\-Wextra\fR.
3548 .IP "\fB\-Wmain\fR" 4
3549 .IX Item "-Wmain"
3550 Warn if the type of \f(CW\*(C`main\*(C'\fR is suspicious.  \f(CW\*(C`main\*(C'\fR should be
3551 a function with external linkage, returning int, taking either zero
3552 arguments, two, or three arguments of appropriate types.  This warning
3553 is enabled by default in \*(C+ and is enabled by either \fB\-Wall\fR
3554 or \fB\-Wpedantic\fR.
3555 .IP "\fB\-Wmissing\-braces\fR" 4
3556 .IX Item "-Wmissing-braces"
3557 Warn if an aggregate or union initializer is not fully bracketed.  In
3558 the following example, the initializer for \f(CW\*(C`a\*(C'\fR is not fully
3559 bracketed, but that for \f(CW\*(C`b\*(C'\fR is fully bracketed.  This warning is
3560 enabled by \fB\-Wall\fR in C.
3561 .Sp
3562 .Vb 2
3563 \&        int a[2][2] = { 0, 1, 2, 3 };
3564 \&        int b[2][2] = { { 0, 1 }, { 2, 3 } };
3565 .Ve
3566 .Sp
3567 This warning is enabled by \fB\-Wall\fR.
3568 .IP "\fB\-Wmissing\-include\-dirs\fR (C, \*(C+, Objective-C and Objective\-\*(C+ only)" 4
3569 .IX Item "-Wmissing-include-dirs (C, , Objective-C and Objective- only)"
3570 Warn if a user-supplied include directory does not exist.
3571 .IP "\fB\-Wparentheses\fR" 4
3572 .IX Item "-Wparentheses"
3573 Warn if parentheses are omitted in certain contexts, such
3574 as when there is an assignment in a context where a truth value
3575 is expected, or when operators are nested whose precedence people
3576 often get confused about.
3577 .Sp
3578 Also warn if a comparison like \f(CW\*(C`x<=y<=z\*(C'\fR appears; this is
3579 equivalent to \f(CW\*(C`(x<=y ? 1 : 0) <= z\*(C'\fR, which is a different
3580 interpretation from that of ordinary mathematical notation.
3581 .Sp
3582 Also warn about constructions where there may be confusion to which
3583 \&\f(CW\*(C`if\*(C'\fR statement an \f(CW\*(C`else\*(C'\fR branch belongs.  Here is an example of
3584 such a case:
3585 .Sp
3586 .Vb 7
3587 \&        {
3588 \&          if (a)
3589 \&            if (b)
3590 \&              foo ();
3591 \&          else
3592 \&            bar ();
3593 \&        }
3594 .Ve
3595 .Sp
3596 In C/\*(C+, every \f(CW\*(C`else\*(C'\fR branch belongs to the innermost possible
3597 \&\f(CW\*(C`if\*(C'\fR statement, which in this example is \f(CW\*(C`if (b)\*(C'\fR.  This is
3598 often not what the programmer expected, as illustrated in the above
3599 example by indentation the programmer chose.  When there is the
3600 potential for this confusion, \s-1GCC\s0 issues a warning when this flag
3601 is specified.  To eliminate the warning, add explicit braces around
3602 the innermost \f(CW\*(C`if\*(C'\fR statement so there is no way the \f(CW\*(C`else\*(C'\fR
3603 can belong to the enclosing \f(CW\*(C`if\*(C'\fR.  The resulting code
3604 looks like this:
3605 .Sp
3606 .Vb 9
3607 \&        {
3608 \&          if (a)
3609 \&            {
3610 \&              if (b)
3611 \&                foo ();
3612 \&              else
3613 \&                bar ();
3614 \&            }
3615 \&        }
3616 .Ve
3617 .Sp
3618 Also warn for dangerous uses of the \s-1GNU\s0 extension to
3619 \&\f(CW\*(C`?:\*(C'\fR with omitted middle operand. When the condition
3620 in the \f(CW\*(C`?\*(C'\fR: operator is a boolean expression, the omitted value is
3621 always 1.  Often programmers expect it to be a value computed
3622 inside the conditional expression instead.
3623 .Sp
3624 This warning is enabled by \fB\-Wall\fR.
3625 .IP "\fB\-Wsequence\-point\fR" 4
3626 .IX Item "-Wsequence-point"
3627 Warn about code that may have undefined semantics because of violations
3628 of sequence point rules in the C and \*(C+ standards.
3629 .Sp
3630 The C and \*(C+ standards define the order in which expressions in a C/\*(C+
3631 program are evaluated in terms of \fIsequence points\fR, which represent
3632 a partial ordering between the execution of parts of the program: those
3633 executed before the sequence point, and those executed after it.  These
3634 occur after the evaluation of a full expression (one which is not part
3635 of a larger expression), after the evaluation of the first operand of a
3636 \&\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
3637 function is called (but after the evaluation of its arguments and the
3638 expression denoting the called function), and in certain other places.
3639 Other than as expressed by the sequence point rules, the order of
3640 evaluation of subexpressions of an expression is not specified.  All
3641 these rules describe only a partial order rather than a total order,
3642 since, for example, if two functions are called within one expression
3643 with no sequence point between them, the order in which the functions
3644 are called is not specified.  However, the standards committee have
3645 ruled that function calls do not overlap.
3646 .Sp
3647 It is not specified when between sequence points modifications to the
3648 values of objects take effect.  Programs whose behavior depends on this
3649 have undefined behavior; the C and \*(C+ standards specify that \*(L"Between
3650 the previous and next sequence point an object shall have its stored
3651 value modified at most once by the evaluation of an expression.
3652 Furthermore, the prior value shall be read only to determine the value
3653 to be stored.\*(R".  If a program breaks these rules, the results on any
3654 particular implementation are entirely unpredictable.
3655 .Sp
3656 Examples of code with undefined behavior are \f(CW\*(C`a = a++;\*(C'\fR, \f(CW\*(C`a[n]
3657 = b[n++]\*(C'\fR and \f(CW\*(C`a[i++] = i;\*(C'\fR.  Some more complicated cases are not
3658 diagnosed by this option, and it may give an occasional false positive
3659 result, but in general it has been found fairly effective at detecting
3660 this sort of problem in programs.
3661 .Sp
3662 The standard is worded confusingly, therefore there is some debate
3663 over the precise meaning of the sequence point rules in subtle cases.
3664 Links to discussions of the problem, including proposed formal
3665 definitions, may be found on the \s-1GCC\s0 readings page, at
3666 <\fBhttp://gcc.gnu.org/readings.html\fR>.
3667 .Sp
3668 This warning is enabled by \fB\-Wall\fR for C and \*(C+.
3669 .IP "\fB\-Wno\-return\-local\-addr\fR" 4
3670 .IX Item "-Wno-return-local-addr"
3671 Do not warn about returning a pointer (or in \*(C+, a reference) to a
3672 variable that goes out of scope after the function returns.
3673 .IP "\fB\-Wreturn\-type\fR" 4
3674 .IX Item "-Wreturn-type"
3675 Warn whenever a function is defined with a return type that defaults
3676 to \f(CW\*(C`int\*(C'\fR.  Also warn about any \f(CW\*(C`return\*(C'\fR statement with no
3677 return value in a function whose return type is not \f(CW\*(C`void\*(C'\fR
3678 (falling off the end of the function body is considered returning
3679 without a value), and about a \f(CW\*(C`return\*(C'\fR statement with an
3680 expression in a function whose return type is \f(CW\*(C`void\*(C'\fR.
3681 .Sp
3682 For \*(C+, a function without return type always produces a diagnostic
3683 message, even when \fB\-Wno\-return\-type\fR is specified.  The only
3684 exceptions are \f(CW\*(C`main\*(C'\fR and functions defined in system headers.
3685 .Sp
3686 This warning is enabled by \fB\-Wall\fR.
3687 .IP "\fB\-Wshift\-count\-negative\fR" 4
3688 .IX Item "-Wshift-count-negative"
3689 Warn if shift count is negative. This warning is enabled by default.
3690 .IP "\fB\-Wshift\-count\-overflow\fR" 4
3691 .IX Item "-Wshift-count-overflow"
3692 Warn if shift count >= width of type. This warning is enabled by default.
3693 .IP "\fB\-Wswitch\fR" 4
3694 .IX Item "-Wswitch"
3695 Warn whenever a \f(CW\*(C`switch\*(C'\fR statement has an index of enumerated type
3696 and lacks a \f(CW\*(C`case\*(C'\fR for one or more of the named codes of that
3697 enumeration.  (The presence of a \f(CW\*(C`default\*(C'\fR label prevents this
3698 warning.)  \f(CW\*(C`case\*(C'\fR labels outside the enumeration range also
3699 provoke warnings when this option is used (even if there is a
3700 \&\f(CW\*(C`default\*(C'\fR label).
3701 This warning is enabled by \fB\-Wall\fR.
3702 .IP "\fB\-Wswitch\-default\fR" 4
3703 .IX Item "-Wswitch-default"
3704 Warn whenever a \f(CW\*(C`switch\*(C'\fR statement does not have a \f(CW\*(C`default\*(C'\fR
3705 case.
3706 .IP "\fB\-Wswitch\-enum\fR" 4
3707 .IX Item "-Wswitch-enum"
3708 Warn whenever a \f(CW\*(C`switch\*(C'\fR statement has an index of enumerated type
3709 and lacks a \f(CW\*(C`case\*(C'\fR for one or more of the named codes of that
3710 enumeration.  \f(CW\*(C`case\*(C'\fR labels outside the enumeration range also
3711 provoke warnings when this option is used.  The only difference
3712 between \fB\-Wswitch\fR and this option is that this option gives a
3713 warning about an omitted enumeration code even if there is a
3714 \&\f(CW\*(C`default\*(C'\fR label.
3715 .IP "\fB\-Wswitch\-bool\fR" 4
3716 .IX Item "-Wswitch-bool"
3717 Warn whenever a \f(CW\*(C`switch\*(C'\fR statement has an index of boolean type.
3718 It is possible to suppress this warning by casting the controlling
3719 expression to a type other than \f(CW\*(C`bool\*(C'\fR.  For example:
3720 .Sp
3721 .Vb 4
3722 \&        switch ((int) (a == 4))
3723 \&          {
3724 \&          ...
3725 \&          }
3726 .Ve
3727 .Sp
3728 This warning is enabled by default for C and \*(C+ programs.
3729 .IP "\fB\-Wsync\-nand\fR (C and \*(C+ only)" 4
3730 .IX Item "-Wsync-nand (C and  only)"
3731 Warn when \f(CW\*(C`_\|_sync_fetch_and_nand\*(C'\fR and \f(CW\*(C`_\|_sync_nand_and_fetch\*(C'\fR
3732 built-in functions are used.  These functions changed semantics in \s-1GCC\s0 4.4.
3733 .IP "\fB\-Wtrigraphs\fR" 4
3734 .IX Item "-Wtrigraphs"
3735 Warn if any trigraphs are encountered that might change the meaning of
3736 the program (trigraphs within comments are not warned about).
3737 This warning is enabled by \fB\-Wall\fR.
3738 .IP "\fB\-Wunused\-but\-set\-parameter\fR" 4
3739 .IX Item "-Wunused-but-set-parameter"
3740 Warn whenever a function parameter is assigned to, but otherwise unused
3741 (aside from its declaration).
3742 .Sp
3743 To suppress this warning use the \f(CW\*(C`unused\*(C'\fR attribute.
3744 .Sp
3745 This warning is also enabled by \fB\-Wunused\fR together with
3746 \&\fB\-Wextra\fR.
3747 .IP "\fB\-Wunused\-but\-set\-variable\fR" 4
3748 .IX Item "-Wunused-but-set-variable"
3749 Warn whenever a local variable is assigned to, but otherwise unused
3750 (aside from its declaration).
3751 This warning is enabled by \fB\-Wall\fR.
3752 .Sp
3753 To suppress this warning use the \f(CW\*(C`unused\*(C'\fR attribute.
3754 .Sp
3755 This warning is also enabled by \fB\-Wunused\fR, which is enabled
3756 by \fB\-Wall\fR.
3757 .IP "\fB\-Wunused\-function\fR" 4
3758 .IX Item "-Wunused-function"
3759 Warn whenever a static function is declared but not defined or a
3760 non-inline static function is unused.
3761 This warning is enabled by \fB\-Wall\fR.
3762 .IP "\fB\-Wunused\-label\fR" 4
3763 .IX Item "-Wunused-label"
3764 Warn whenever a label is declared but not used.
3765 This warning is enabled by \fB\-Wall\fR.
3766 .Sp
3767 To suppress this warning use the \f(CW\*(C`unused\*(C'\fR attribute.
3768 .IP "\fB\-Wunused\-local\-typedefs\fR (C, Objective-C, \*(C+ and Objective\-\*(C+ only)" 4
3769 .IX Item "-Wunused-local-typedefs (C, Objective-C,  and Objective- only)"
3770 Warn when a typedef locally defined in a function is not used.
3771 This warning is enabled by \fB\-Wall\fR.
3772 .IP "\fB\-Wunused\-parameter\fR" 4
3773 .IX Item "-Wunused-parameter"
3774 Warn whenever a function parameter is unused aside from its declaration.
3775 .Sp
3776 To suppress this warning use the \f(CW\*(C`unused\*(C'\fR attribute.
3777 .IP "\fB\-Wno\-unused\-result\fR" 4
3778 .IX Item "-Wno-unused-result"
3779 Do not warn if a caller of a function marked with attribute
3780 \&\f(CW\*(C`warn_unused_result\*(C'\fR does not use
3781 its return value. The default is \fB\-Wunused\-result\fR.
3782 .IP "\fB\-Wunused\-variable\fR" 4
3783 .IX Item "-Wunused-variable"
3784 Warn whenever a local variable or non-constant static variable is unused
3785 aside from its declaration.
3786 This warning is enabled by \fB\-Wall\fR.
3787 .Sp
3788 To suppress this warning use the \f(CW\*(C`unused\*(C'\fR attribute.
3789 .IP "\fB\-Wunused\-value\fR" 4
3790 .IX Item "-Wunused-value"
3791 Warn whenever a statement computes a result that is explicitly not
3792 used. To suppress this warning cast the unused expression to
3793 \&\f(CW\*(C`void\*(C'\fR. This includes an expression-statement or the left-hand
3794 side of a comma expression that contains no side effects. For example,
3795 an expression such as \f(CW\*(C`x[i,j]\*(C'\fR causes a warning, while
3796 \&\f(CW\*(C`x[(void)i,j]\*(C'\fR does not.
3797 .Sp
3798 This warning is enabled by \fB\-Wall\fR.
3799 .IP "\fB\-Wunused\fR" 4
3800 .IX Item "-Wunused"
3801 All the above \fB\-Wunused\fR options combined.
3802 .Sp
3803 In order to get a warning about an unused function parameter, you must
3804 either specify \fB\-Wextra \-Wunused\fR (note that \fB\-Wall\fR implies
3805 \&\fB\-Wunused\fR), or separately specify \fB\-Wunused\-parameter\fR.
3806 .IP "\fB\-Wuninitialized\fR" 4
3807 .IX Item "-Wuninitialized"
3808 Warn if an automatic variable is used without first being initialized
3809 or if a variable may be clobbered by a \f(CW\*(C`setjmp\*(C'\fR call. In \*(C+,
3810 warn if a non-static reference or non-static \f(CW\*(C`const\*(C'\fR member
3811 appears in a class without constructors.
3812 .Sp
3813 If you want to warn about code that uses the uninitialized value of the
3814 variable in its own initializer, use the \fB\-Winit\-self\fR option.
3815 .Sp
3816 These warnings occur for individual uninitialized or clobbered
3817 elements of structure, union or array variables as well as for
3818 variables that are uninitialized or clobbered as a whole.  They do
3819 not occur for variables or elements declared \f(CW\*(C`volatile\*(C'\fR.  Because
3820 these warnings depend on optimization, the exact variables or elements
3821 for which there are warnings depends on the precise optimization
3822 options and version of \s-1GCC\s0 used.
3823 .Sp
3824 Note that there may be no warning about a variable that is used only
3825 to compute a value that itself is never used, because such
3826 computations may be deleted by data flow analysis before the warnings
3827 are printed.
3828 .IP "\fB\-Wmaybe\-uninitialized\fR" 4
3829 .IX Item "-Wmaybe-uninitialized"
3830 For an automatic variable, if there exists a path from the function
3831 entry to a use of the variable that is initialized, but there exist
3832 some other paths for which the variable is not initialized, the compiler
3833 emits a warning if it cannot prove the uninitialized paths are not
3834 executed at run time. These warnings are made optional because \s-1GCC\s0 is
3835 not smart enough to see all the reasons why the code might be correct
3836 in spite of appearing to have an error.  Here is one example of how
3837 this can happen:
3838 .Sp
3839 .Vb 12
3840 \&        {
3841 \&          int x;
3842 \&          switch (y)
3843 \&            {
3844 \&            case 1: x = 1;
3845 \&              break;
3846 \&            case 2: x = 4;
3847 \&              break;
3848 \&            case 3: x = 5;
3849 \&            }
3850 \&          foo (x);
3851 \&        }
3852 .Ve
3853 .Sp
3854 If the value of \f(CW\*(C`y\*(C'\fR is always 1, 2 or 3, then \f(CW\*(C`x\*(C'\fR is
3855 always initialized, but \s-1GCC\s0 doesn't know this. To suppress the
3856 warning, you need to provide a default case with \fIassert\fR\|(0) or
3857 similar code.
3858 .Sp
3859 This option also warns when a non-volatile automatic variable might be
3860 changed by a call to \f(CW\*(C`longjmp\*(C'\fR.  These warnings as well are possible
3861 only in optimizing compilation.
3862 .Sp
3863 The compiler sees only the calls to \f(CW\*(C`setjmp\*(C'\fR.  It cannot know
3864 where \f(CW\*(C`longjmp\*(C'\fR will be called; in fact, a signal handler could
3865 call it at any point in the code.  As a result, you may get a warning
3866 even when there is in fact no problem because \f(CW\*(C`longjmp\*(C'\fR cannot
3867 in fact be called at the place that would cause a problem.
3868 .Sp
3869 Some spurious warnings can be avoided if you declare all the functions
3870 you use that never return as \f(CW\*(C`noreturn\*(C'\fR.
3871 .Sp
3872 This warning is enabled by \fB\-Wall\fR or \fB\-Wextra\fR.
3873 .IP "\fB\-Wunknown\-pragmas\fR" 4
3874 .IX Item "-Wunknown-pragmas"
3875 Warn when a \f(CW\*(C`#pragma\*(C'\fR directive is encountered that is not understood by 
3876 \&\s-1GCC\s0.  If this command-line option is used, warnings are even issued
3877 for unknown pragmas in system header files.  This is not the case if
3878 the warnings are only enabled by the \fB\-Wall\fR command-line option.
3879 .IP "\fB\-Wno\-pragmas\fR" 4
3880 .IX Item "-Wno-pragmas"
3881 Do not warn about misuses of pragmas, such as incorrect parameters,
3882 invalid syntax, or conflicts between pragmas.  See also
3883 \&\fB\-Wunknown\-pragmas\fR.
3884 .IP "\fB\-Wstrict\-aliasing\fR" 4
3885 .IX Item "-Wstrict-aliasing"
3886 This option is only active when \fB\-fstrict\-aliasing\fR is active.
3887 It warns about code that might break the strict aliasing rules that the
3888 compiler is using for optimization.  The warning does not catch all
3889 cases, but does attempt to catch the more common pitfalls.  It is
3890 included in \fB\-Wall\fR.
3891 It is equivalent to \fB\-Wstrict\-aliasing=3\fR
3892 .IP "\fB\-Wstrict\-aliasing=n\fR" 4
3893 .IX Item "-Wstrict-aliasing=n"
3894 This option is only active when \fB\-fstrict\-aliasing\fR is active.
3895 It warns about code that might break the strict aliasing rules that the
3896 compiler is using for optimization.
3897 Higher levels correspond to higher accuracy (fewer false positives).
3898 Higher levels also correspond to more effort, similar to the way \fB\-O\fR 
3899 works.
3900 \&\fB\-Wstrict\-aliasing\fR is equivalent to \fB\-Wstrict\-aliasing=3\fR.
3901 .Sp
3902 Level 1: Most aggressive, quick, least accurate.
3903 Possibly useful when higher levels
3904 do not warn but \fB\-fstrict\-aliasing\fR still breaks the code, as it has very few
3905 false negatives.  However, it has many false positives.
3906 Warns for all pointer conversions between possibly incompatible types,
3907 even if never dereferenced.  Runs in the front end only.
3908 .Sp
3909 Level 2: Aggressive, quick, not too precise.
3910 May still have many false positives (not as many as level 1 though),
3911 and few false negatives (but possibly more than level 1).
3912 Unlike level 1, it only warns when an address is taken.  Warns about
3913 incomplete types.  Runs in the front end only.
3914 .Sp
3915 Level 3 (default for \fB\-Wstrict\-aliasing\fR):
3916 Should have very few false positives and few false
3917 negatives.  Slightly slower than levels 1 or 2 when optimization is enabled.
3918 Takes care of the common pun+dereference pattern in the front end:
3919 \&\f(CW\*(C`*(int*)&some_float\*(C'\fR.
3920 If optimization is enabled, it also runs in the back end, where it deals
3921 with multiple statement cases using flow-sensitive points-to information.
3922 Only warns when the converted pointer is dereferenced.
3923 Does not warn about incomplete types.
3924 .IP "\fB\-Wstrict\-overflow\fR" 4
3925 .IX Item "-Wstrict-overflow"
3926 .PD 0
3927 .IP "\fB\-Wstrict\-overflow=\fR\fIn\fR" 4
3928 .IX Item "-Wstrict-overflow=n"
3929 .PD
3930 This option is only active when \fB\-fstrict\-overflow\fR is active.
3931 It warns about cases where the compiler optimizes based on the
3932 assumption that signed overflow does not occur.  Note that it does not
3933 warn about all cases where the code might overflow: it only warns
3934 about cases where the compiler implements some optimization.  Thus
3935 this warning depends on the optimization level.
3936 .Sp
3937 An optimization that assumes that signed overflow does not occur is
3938 perfectly safe if the values of the variables involved are such that
3939 overflow never does, in fact, occur.  Therefore this warning can
3940 easily give a false positive: a warning about code that is not
3941 actually a problem.  To help focus on important issues, several
3942 warning levels are defined.  No warnings are issued for the use of
3943 undefined signed overflow when estimating how many iterations a loop
3944 requires, in particular when determining whether a loop will be
3945 executed at all.
3946 .RS 4
3947 .IP "\fB\-Wstrict\-overflow=1\fR" 4
3948 .IX Item "-Wstrict-overflow=1"
3949 Warn about cases that are both questionable and easy to avoid.  For
3950 example,  with \fB\-fstrict\-overflow\fR, the compiler simplifies
3951 \&\f(CW\*(C`x + 1 > x\*(C'\fR to \f(CW1\fR.  This level of
3952 \&\fB\-Wstrict\-overflow\fR is enabled by \fB\-Wall\fR; higher levels
3953 are not, and must be explicitly requested.
3954 .IP "\fB\-Wstrict\-overflow=2\fR" 4
3955 .IX Item "-Wstrict-overflow=2"
3956 Also warn about other cases where a comparison is simplified to a
3957 constant.  For example: \f(CW\*(C`abs (x) >= 0\*(C'\fR.  This can only be
3958 simplified when \fB\-fstrict\-overflow\fR is in effect, because
3959 \&\f(CW\*(C`abs (INT_MIN)\*(C'\fR overflows to \f(CW\*(C`INT_MIN\*(C'\fR, which is less than
3960 zero.  \fB\-Wstrict\-overflow\fR (with no level) is the same as
3961 \&\fB\-Wstrict\-overflow=2\fR.
3962 .IP "\fB\-Wstrict\-overflow=3\fR" 4
3963 .IX Item "-Wstrict-overflow=3"
3964 Also warn about other cases where a comparison is simplified.  For
3965 example: \f(CW\*(C`x + 1 > 1\*(C'\fR is simplified to \f(CW\*(C`x > 0\*(C'\fR.
3966 .IP "\fB\-Wstrict\-overflow=4\fR" 4
3967 .IX Item "-Wstrict-overflow=4"
3968 Also warn about other simplifications not covered by the above cases.
3969 For example: \f(CW\*(C`(x * 10) / 5\*(C'\fR is simplified to \f(CW\*(C`x * 2\*(C'\fR.
3970 .IP "\fB\-Wstrict\-overflow=5\fR" 4
3971 .IX Item "-Wstrict-overflow=5"
3972 Also warn about cases where the compiler reduces the magnitude of a
3973 constant involved in a comparison.  For example: \f(CW\*(C`x + 2 > y\*(C'\fR is
3974 simplified to \f(CW\*(C`x + 1 >= y\*(C'\fR.  This is reported only at the
3975 highest warning level because this simplification applies to many
3976 comparisons, so this warning level gives a very large number of
3977 false positives.
3978 .RE
3979 .RS 4
3980 .RE
3981 .IP "\fB\-Wsuggest\-attribute=\fR[\fBpure\fR|\fBconst\fR|\fBnoreturn\fR|\fBformat\fR]" 4
3982 .IX Item "-Wsuggest-attribute=[pure|const|noreturn|format]"
3983 Warn for cases where adding an attribute may be beneficial. The
3984 attributes currently supported are listed below.
3985 .RS 4
3986 .IP "\fB\-Wsuggest\-attribute=pure\fR" 4
3987 .IX Item "-Wsuggest-attribute=pure"
3988 .PD 0
3989 .IP "\fB\-Wsuggest\-attribute=const\fR" 4
3990 .IX Item "-Wsuggest-attribute=const"
3991 .IP "\fB\-Wsuggest\-attribute=noreturn\fR" 4
3992 .IX Item "-Wsuggest-attribute=noreturn"
3993 .PD
3994 Warn about functions that might be candidates for attributes
3995 \&\f(CW\*(C`pure\*(C'\fR, \f(CW\*(C`const\*(C'\fR or \f(CW\*(C`noreturn\*(C'\fR.  The compiler only warns for
3996 functions visible in other compilation units or (in the case of \f(CW\*(C`pure\*(C'\fR and
3997 \&\f(CW\*(C`const\*(C'\fR) if it cannot prove that the function returns normally. A function
3998 returns normally if it doesn't contain an infinite loop or return abnormally
3999 by throwing, calling \f(CW\*(C`abort\*(C'\fR or trapping.  This analysis requires option
4000 \&\fB\-fipa\-pure\-const\fR, which is enabled by default at \fB\-O\fR and
4001 higher.  Higher optimization levels improve the accuracy of the analysis.
4002 .IP "\fB\-Wsuggest\-attribute=format\fR" 4
4003 .IX Item "-Wsuggest-attribute=format"
4004 .PD 0
4005 .IP "\fB\-Wmissing\-format\-attribute\fR" 4
4006 .IX Item "-Wmissing-format-attribute"
4007 .PD
4008 Warn about function pointers that might be candidates for \f(CW\*(C`format\*(C'\fR
4009 attributes.  Note these are only possible candidates, not absolute ones.
4010 \&\s-1GCC\s0 guesses that function pointers with \f(CW\*(C`format\*(C'\fR attributes that
4011 are used in assignment, initialization, parameter passing or return
4012 statements should have a corresponding \f(CW\*(C`format\*(C'\fR attribute in the
4013 resulting type.  I.e. the left-hand side of the assignment or
4014 initialization, the type of the parameter variable, or the return type
4015 of the containing function respectively should also have a \f(CW\*(C`format\*(C'\fR
4016 attribute to avoid the warning.
4017 .Sp
4018 \&\s-1GCC\s0 also warns about function definitions that might be
4019 candidates for \f(CW\*(C`format\*(C'\fR attributes.  Again, these are only
4020 possible candidates.  \s-1GCC\s0 guesses that \f(CW\*(C`format\*(C'\fR attributes
4021 might be appropriate for any function that calls a function like
4022 \&\f(CW\*(C`vprintf\*(C'\fR or \f(CW\*(C`vscanf\*(C'\fR, but this might not always be the
4023 case, and some functions for which \f(CW\*(C`format\*(C'\fR attributes are
4024 appropriate may not be detected.
4025 .RE
4026 .RS 4
4027 .RE
4028 .IP "\fB\-Wsuggest\-final\-types\fR" 4
4029 .IX Item "-Wsuggest-final-types"
4030 Warn about types with virtual methods where code quality would be improved
4031 if the type were declared with the \*(C+11 \f(CW\*(C`final\*(C'\fR specifier, 
4032 or, if possible,
4033 declared in an anonymous namespace. This allows \s-1GCC\s0 to more aggressively
4034 devirtualize the polymorphic calls. This warning is more effective with link
4035 time optimization, where the information about the class hierarchy graph is
4036 more complete.
4037 .IP "\fB\-Wsuggest\-final\-methods\fR" 4
4038 .IX Item "-Wsuggest-final-methods"
4039 Warn about virtual methods where code quality would be improved if the method
4040 were declared with the \*(C+11 \f(CW\*(C`final\*(C'\fR specifier, 
4041 or, if possible, its type were
4042 declared in an anonymous namespace or with the \f(CW\*(C`final\*(C'\fR specifier.
4043 This warning is
4044 more effective with link time optimization, where the information about the
4045 class hierarchy graph is more complete. It is recommended to first consider
4046 suggestions of \fB\-Wsuggest\-final\-types\fR and then rebuild with new
4047 annotations.
4048 .IP "\fB\-Wsuggest\-override\fR" 4
4049 .IX Item "-Wsuggest-override"
4050 Warn about overriding virtual functions that are not marked with the override
4051 keyword.
4052 .IP "\fB\-Warray\-bounds\fR" 4
4053 .IX Item "-Warray-bounds"
4054 .PD 0
4055 .IP "\fB\-Warray\-bounds=\fR\fIn\fR" 4
4056 .IX Item "-Warray-bounds=n"
4057 .PD
4058 This option is only active when \fB\-ftree\-vrp\fR is active
4059 (default for \fB\-O2\fR and above). It warns about subscripts to arrays
4060 that are always out of bounds. This warning is enabled by \fB\-Wall\fR.
4061 .RS 4
4062 .IP "\fB\-Warray\-bounds=1\fR" 4
4063 .IX Item "-Warray-bounds=1"
4064 This is the warning level of \fB\-Warray\-bounds\fR and is enabled
4065 by \fB\-Wall\fR; higher levels are not, and must be explicitly requested.
4066 .IP "\fB\-Warray\-bounds=2\fR" 4
4067 .IX Item "-Warray-bounds=2"
4068 This warning level also warns about out of bounds access for
4069 arrays at the end of a struct and for arrays accessed through
4070 pointers. This warning level may give a larger number of
4071 false positives and is deactivated by default.
4072 .RE
4073 .RS 4
4074 .RE
4075 .IP "\fB\-Wbool\-compare\fR" 4
4076 .IX Item "-Wbool-compare"
4077 Warn about boolean expression compared with an integer value different from
4078 \&\f(CW\*(C`true\*(C'\fR/\f(CW\*(C`false\*(C'\fR.  For instance, the following comparison is
4079 always false:
4080 .Sp
4081 .Vb 3
4082 \&        int n = 5;
4083 \&        ...
4084 \&        if ((n > 1) == 2) { ... }
4085 .Ve
4086 .Sp
4087 This warning is enabled by \fB\-Wall\fR.
4088 .IP "\fB\-Wno\-discarded\-qualifiers\fR (C and Objective-C only)" 4
4089 .IX Item "-Wno-discarded-qualifiers (C and Objective-C only)"
4090 Do not warn if type qualifiers on pointers are being discarded.
4091 Typically, the compiler warns if a \f(CW\*(C`const char *\*(C'\fR variable is
4092 passed to a function that takes a \f(CW\*(C`char *\*(C'\fR parameter.  This option
4093 can be used to suppress such a warning.
4094 .IP "\fB\-Wno\-discarded\-array\-qualifiers\fR (C and Objective-C only)" 4
4095 .IX Item "-Wno-discarded-array-qualifiers (C and Objective-C only)"
4096 Do not warn if type qualifiers on arrays which are pointer targets
4097 are being discarded. Typically, the compiler warns if a
4098 \&\f(CW\*(C`const int (*)[]\*(C'\fR variable is passed to a function that
4099 takes a \f(CW\*(C`int (*)[]\*(C'\fR parameter.  This option can be used to
4100 suppress such a warning.
4101 .IP "\fB\-Wno\-incompatible\-pointer\-types\fR (C and Objective-C only)" 4
4102 .IX Item "-Wno-incompatible-pointer-types (C and Objective-C only)"
4103 Do not warn when there is a conversion between pointers that have incompatible
4104 types.  This warning is for cases not covered by \fB\-Wno\-pointer\-sign\fR,
4105 which warns for pointer argument passing or assignment with different
4106 signedness.
4107 .IP "\fB\-Wno\-int\-conversion\fR (C and Objective-C only)" 4
4108 .IX Item "-Wno-int-conversion (C and Objective-C only)"
4109 Do not warn about incompatible integer to pointer and pointer to integer
4110 conversions.  This warning is about implicit conversions; for explicit
4111 conversions the warnings \fB\-Wno\-int\-to\-pointer\-cast\fR and
4112 \&\fB\-Wno\-pointer\-to\-int\-cast\fR may be used.
4113 .IP "\fB\-Wno\-div\-by\-zero\fR" 4
4114 .IX Item "-Wno-div-by-zero"
4115 Do not warn about compile-time integer division by zero.  Floating-point
4116 division by zero is not warned about, as it can be a legitimate way of
4117 obtaining infinities and NaNs.
4118 .IP "\fB\-Wsystem\-headers\fR" 4
4119 .IX Item "-Wsystem-headers"
4120 Print warning messages for constructs found in system header files.
4121 Warnings from system headers are normally suppressed, on the assumption
4122 that they usually do not indicate real problems and would only make the
4123 compiler output harder to read.  Using this command-line option tells
4124 \&\s-1GCC\s0 to emit warnings from system headers as if they occurred in user
4125 code.  However, note that using \fB\-Wall\fR in conjunction with this
4126 option does \fInot\fR warn about unknown pragmas in system
4127 headers\-\-\-for that, \fB\-Wunknown\-pragmas\fR must also be used.
4128 .IP "\fB\-Wtrampolines\fR" 4
4129 .IX Item "-Wtrampolines"
4130 Warn about trampolines generated for pointers to nested functions.
4131 A trampoline is a small piece of data or code that is created at run
4132 time on the stack when the address of a nested function is taken, and is
4133 used to call the nested function indirectly.  For some targets, it is
4134 made up of data only and thus requires no special treatment.  But, for
4135 most targets, it is made up of code and thus requires the stack to be
4136 made executable in order for the program to work properly.
4137 .IP "\fB\-Wfloat\-equal\fR" 4
4138 .IX Item "-Wfloat-equal"
4139 Warn if floating-point values are used in equality comparisons.
4140 .Sp
4141 The idea behind this is that sometimes it is convenient (for the
4142 programmer) to consider floating-point values as approximations to
4143 infinitely precise real numbers.  If you are doing this, then you need
4144 to compute (by analyzing the code, or in some other way) the maximum or
4145 likely maximum error that the computation introduces, and allow for it
4146 when performing comparisons (and when producing output, but that's a
4147 different problem).  In particular, instead of testing for equality, you
4148 should check to see whether the two values have ranges that overlap; and
4149 this is done with the relational operators, so equality comparisons are
4150 probably mistaken.
4151 .IP "\fB\-Wtraditional\fR (C and Objective-C only)" 4
4152 .IX Item "-Wtraditional (C and Objective-C only)"
4153 Warn about certain constructs that behave differently in traditional and
4154 \&\s-1ISO\s0 C.  Also warn about \s-1ISO\s0 C constructs that have no traditional C
4155 equivalent, and/or problematic constructs that should be avoided.
4156 .RS 4
4157 .IP "*" 4
4158 Macro parameters that appear within string literals in the macro body.
4159 In traditional C macro replacement takes place within string literals,
4160 but in \s-1ISO\s0 C it does not.
4161 .IP "*" 4
4162 In traditional C, some preprocessor directives did not exist.
4163 Traditional preprocessors only considered a line to be a directive
4164 if the \fB#\fR appeared in column 1 on the line.  Therefore
4165 \&\fB\-Wtraditional\fR warns about directives that traditional C
4166 understands but ignores because the \fB#\fR does not appear as the
4167 first character on the line.  It also suggests you hide directives like
4168 \&\f(CW\*(C`#pragma\*(C'\fR not understood by traditional C by indenting them.  Some
4169 traditional implementations do not recognize \f(CW\*(C`#elif\*(C'\fR, so this option
4170 suggests avoiding it altogether.
4171 .IP "*" 4
4172 A function-like macro that appears without arguments.
4173 .IP "*" 4
4174 The unary plus operator.
4175 .IP "*" 4
4176 The \fBU\fR integer constant suffix, or the \fBF\fR or \fBL\fR floating-point
4177 constant suffixes.  (Traditional C does support the \fBL\fR suffix on integer
4178 constants.)  Note, these suffixes appear in macros defined in the system
4179 headers of most modern systems, e.g. the \fB_MIN\fR/\fB_MAX\fR macros in \f(CW\*(C`<limits.h>\*(C'\fR.
4180 Use of these macros in user code might normally lead to spurious
4181 warnings, however \s-1GCC\s0's integrated preprocessor has enough context to
4182 avoid warning in these cases.
4183 .IP "*" 4
4184 A function declared external in one block and then used after the end of
4185 the block.
4186 .IP "*" 4
4187 A \f(CW\*(C`switch\*(C'\fR statement has an operand of type \f(CW\*(C`long\*(C'\fR.
4188 .IP "*" 4
4189 A non\-\f(CW\*(C`static\*(C'\fR function declaration follows a \f(CW\*(C`static\*(C'\fR one.
4190 This construct is not accepted by some traditional C compilers.
4191 .IP "*" 4
4192 The \s-1ISO\s0 type of an integer constant has a different width or
4193 signedness from its traditional type.  This warning is only issued if
4194 the base of the constant is ten.  I.e. hexadecimal or octal values, which
4195 typically represent bit patterns, are not warned about.
4196 .IP "*" 4
4197 Usage of \s-1ISO\s0 string concatenation is detected.
4198 .IP "*" 4
4199 Initialization of automatic aggregates.
4200 .IP "*" 4
4201 Identifier conflicts with labels.  Traditional C lacks a separate
4202 namespace for labels.
4203 .IP "*" 4
4204 Initialization of unions.  If the initializer is zero, the warning is
4205 omitted.  This is done under the assumption that the zero initializer in
4206 user code appears conditioned on e.g. \f(CW\*(C`_\|_STDC_\|_\*(C'\fR to avoid missing
4207 initializer warnings and relies on default initialization to zero in the
4208 traditional C case.
4209 .IP "*" 4
4210 Conversions by prototypes between fixed/floating\-point values and vice
4211 versa.  The absence of these prototypes when compiling with traditional
4212 C causes serious problems.  This is a subset of the possible
4213 conversion warnings; for the full set use \fB\-Wtraditional\-conversion\fR.
4214 .IP "*" 4
4215 Use of \s-1ISO\s0 C style function definitions.  This warning intentionally is
4216 \&\fInot\fR issued for prototype declarations or variadic functions
4217 because these \s-1ISO\s0 C features appear in your code when using
4218 libiberty's traditional C compatibility macros, \f(CW\*(C`PARAMS\*(C'\fR and
4219 \&\f(CW\*(C`VPARAMS\*(C'\fR.  This warning is also bypassed for nested functions
4220 because that feature is already a \s-1GCC\s0 extension and thus not relevant to
4221 traditional C compatibility.
4222 .RE
4223 .RS 4
4224 .RE
4225 .IP "\fB\-Wtraditional\-conversion\fR (C and Objective-C only)" 4
4226 .IX Item "-Wtraditional-conversion (C and Objective-C only)"
4227 Warn if a prototype causes a type conversion that is different from what
4228 would happen to the same argument in the absence of a prototype.  This
4229 includes conversions of fixed point to floating and vice versa, and
4230 conversions changing the width or signedness of a fixed-point argument
4231 except when the same as the default promotion.
4232 .IP "\fB\-Wdeclaration\-after\-statement\fR (C and Objective-C only)" 4
4233 .IX Item "-Wdeclaration-after-statement (C and Objective-C only)"
4234 Warn when a declaration is found after a statement in a block.  This
4235 construct, known from \*(C+, was introduced with \s-1ISO\s0 C99 and is by default
4236 allowed in \s-1GCC\s0.  It is not supported by \s-1ISO\s0 C90.
4237 .IP "\fB\-Wundef\fR" 4
4238 .IX Item "-Wundef"
4239 Warn if an undefined identifier is evaluated in an \f(CW\*(C`#if\*(C'\fR directive.
4240 .IP "\fB\-Wno\-endif\-labels\fR" 4
4241 .IX Item "-Wno-endif-labels"
4242 Do not warn whenever an \f(CW\*(C`#else\*(C'\fR or an \f(CW\*(C`#endif\*(C'\fR are followed by text.
4243 .IP "\fB\-Wshadow\fR" 4
4244 .IX Item "-Wshadow"
4245 Warn whenever a local variable or type declaration shadows another
4246 variable, parameter, type, class member (in \*(C+), or instance variable
4247 (in Objective-C) or whenever a built-in function is shadowed. Note
4248 that in \*(C+, the compiler warns if a local variable shadows an
4249 explicit typedef, but not if it shadows a struct/class/enum.
4250 .IP "\fB\-Wno\-shadow\-ivar\fR (Objective-C only)" 4
4251 .IX Item "-Wno-shadow-ivar (Objective-C only)"
4252 Do not warn whenever a local variable shadows an instance variable in an
4253 Objective-C method.
4254 .IP "\fB\-Wlarger\-than=\fR\fIlen\fR" 4
4255 .IX Item "-Wlarger-than=len"
4256 Warn whenever an object of larger than \fIlen\fR bytes is defined.
4257 .IP "\fB\-Wframe\-larger\-than=\fR\fIlen\fR" 4
4258 .IX Item "-Wframe-larger-than=len"
4259 Warn if the size of a function frame is larger than \fIlen\fR bytes.
4260 The computation done to determine the stack frame size is approximate
4261 and not conservative.
4262 The actual requirements may be somewhat greater than \fIlen\fR
4263 even if you do not get a warning.  In addition, any space allocated
4264 via \f(CW\*(C`alloca\*(C'\fR, variable-length arrays, or related constructs
4265 is not included by the compiler when determining
4266 whether or not to issue a warning.
4267 .IP "\fB\-Wno\-free\-nonheap\-object\fR" 4
4268 .IX Item "-Wno-free-nonheap-object"
4269 Do not warn when attempting to free an object that was not allocated
4270 on the heap.
4271 .IP "\fB\-Wstack\-usage=\fR\fIlen\fR" 4
4272 .IX Item "-Wstack-usage=len"
4273 Warn if the stack usage of a function might be larger than \fIlen\fR bytes.
4274 The computation done to determine the stack usage is conservative.
4275 Any space allocated via \f(CW\*(C`alloca\*(C'\fR, variable-length arrays, or related
4276 constructs is included by the compiler when determining whether or not to
4277 issue a warning.
4278 .Sp
4279 The message is in keeping with the output of \fB\-fstack\-usage\fR.
4280 .RS 4
4281 .IP "*" 4
4282 If the stack usage is fully static but exceeds the specified amount, it's:
4283 .Sp
4284 .Vb 1
4285 \&          warning: stack usage is 1120 bytes
4286 .Ve
4287 .IP "*" 4
4288 If the stack usage is (partly) dynamic but bounded, it's:
4289 .Sp
4290 .Vb 1
4291 \&          warning: stack usage might be 1648 bytes
4292 .Ve
4293 .IP "*" 4
4294 If the stack usage is (partly) dynamic and not bounded, it's:
4295 .Sp
4296 .Vb 1
4297 \&          warning: stack usage might be unbounded
4298 .Ve
4299 .RE
4300 .RS 4
4301 .RE
4302 .IP "\fB\-Wunsafe\-loop\-optimizations\fR" 4
4303 .IX Item "-Wunsafe-loop-optimizations"
4304 Warn if the loop cannot be optimized because the compiler cannot
4305 assume anything on the bounds of the loop indices.  With
4306 \&\fB\-funsafe\-loop\-optimizations\fR warn if the compiler makes
4307 such assumptions.
4308 .IP "\fB\-Wno\-pedantic\-ms\-format\fR (MinGW targets only)" 4
4309 .IX Item "-Wno-pedantic-ms-format (MinGW targets only)"
4310 When used in combination with \fB\-Wformat\fR
4311 and \fB\-pedantic\fR without \s-1GNU\s0 extensions, this option
4312 disables the warnings about non-ISO \f(CW\*(C`printf\*(C'\fR / \f(CW\*(C`scanf\*(C'\fR format
4313 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,
4314 which depend on the \s-1MS\s0 runtime.
4315 .IP "\fB\-Wpointer\-arith\fR" 4
4316 .IX Item "-Wpointer-arith"
4317 Warn about anything that depends on the \*(L"size of\*(R" a function type or
4318 of \f(CW\*(C`void\*(C'\fR.  \s-1GNU\s0 C assigns these types a size of 1, for
4319 convenience in calculations with \f(CW\*(C`void *\*(C'\fR pointers and pointers
4320 to functions.  In \*(C+, warn also when an arithmetic operation involves
4321 \&\f(CW\*(C`NULL\*(C'\fR.  This warning is also enabled by \fB\-Wpedantic\fR.
4322 .IP "\fB\-Wtype\-limits\fR" 4
4323 .IX Item "-Wtype-limits"
4324 Warn if a comparison is always true or always false due to the limited
4325 range of the data type, but do not warn for constant expressions.  For
4326 example, warn if an unsigned variable is compared against zero with
4327 \&\f(CW\*(C`<\*(C'\fR or \f(CW\*(C`>=\*(C'\fR.  This warning is also enabled by
4328 \&\fB\-Wextra\fR.
4329 .IP "\fB\-Wbad\-function\-cast\fR (C and Objective-C only)" 4
4330 .IX Item "-Wbad-function-cast (C and Objective-C only)"
4331 Warn when a function call is cast to a non-matching type.
4332 For example, warn if a call to a function returning an integer type 
4333 is cast to a pointer type.
4334 .IP "\fB\-Wc90\-c99\-compat\fR (C and Objective-C only)" 4
4335 .IX Item "-Wc90-c99-compat (C and Objective-C only)"
4336 Warn about features not present in \s-1ISO\s0 C90, but present in \s-1ISO\s0 C99.
4337 For instance, warn about use of variable length arrays, \f(CW\*(C`long long\*(C'\fR
4338 type, \f(CW\*(C`bool\*(C'\fR type, compound literals, designated initializers, and so
4339 on.  This option is independent of the standards mode.  Warnings are disabled
4340 in the expression that follows \f(CW\*(C`_\|_extension_\|_\*(C'\fR.
4341 .IP "\fB\-Wc99\-c11\-compat\fR (C and Objective-C only)" 4
4342 .IX Item "-Wc99-c11-compat (C and Objective-C only)"
4343 Warn about features not present in \s-1ISO\s0 C99, but present in \s-1ISO\s0 C11.
4344 For instance, warn about use of anonymous structures and unions,
4345 \&\f(CW\*(C`_Atomic\*(C'\fR type qualifier, \f(CW\*(C`_Thread_local\*(C'\fR storage-class specifier,
4346 \&\f(CW\*(C`_Alignas\*(C'\fR specifier, \f(CW\*(C`Alignof\*(C'\fR operator, \f(CW\*(C`_Generic\*(C'\fR keyword,
4347 and so on.  This option is independent of the standards mode.  Warnings are
4348 disabled in the expression that follows \f(CW\*(C`_\|_extension_\|_\*(C'\fR.
4349 .IP "\fB\-Wc++\-compat\fR (C and Objective-C only)" 4
4350 .IX Item "-Wc++-compat (C and Objective-C only)"
4351 Warn about \s-1ISO\s0 C constructs that are outside of the common subset of
4352 \&\s-1ISO\s0 C and \s-1ISO\s0 \*(C+, e.g. request for implicit conversion from
4353 \&\f(CW\*(C`void *\*(C'\fR to a pointer to non\-\f(CW\*(C`void\*(C'\fR type.
4354 .IP "\fB\-Wc++11\-compat\fR (\*(C+ and Objective\-\*(C+ only)" 4
4355 .IX Item "-Wc++11-compat ( and Objective- only)"
4356 Warn about \*(C+ constructs whose meaning differs between \s-1ISO\s0 \*(C+ 1998
4357 and \s-1ISO\s0 \*(C+ 2011, e.g., identifiers in \s-1ISO\s0 \*(C+ 1998 that are keywords
4358 in \s-1ISO\s0 \*(C+ 2011.  This warning turns on \fB\-Wnarrowing\fR and is
4359 enabled by \fB\-Wall\fR.
4360 .IP "\fB\-Wc++14\-compat\fR (\*(C+ and Objective\-\*(C+ only)" 4
4361 .IX Item "-Wc++14-compat ( and Objective- only)"
4362 Warn about \*(C+ constructs whose meaning differs between \s-1ISO\s0 \*(C+ 2011
4363 and \s-1ISO\s0 \*(C+ 2014.  This warning is enabled by \fB\-Wall\fR.
4364 .IP "\fB\-Wcast\-qual\fR" 4
4365 .IX Item "-Wcast-qual"
4366 Warn whenever a pointer is cast so as to remove a type qualifier from
4367 the target type.  For example, warn if a \f(CW\*(C`const char *\*(C'\fR is cast
4368 to an ordinary \f(CW\*(C`char *\*(C'\fR.
4369 .Sp
4370 Also warn when making a cast that introduces a type qualifier in an
4371 unsafe way.  For example, casting \f(CW\*(C`char **\*(C'\fR to \f(CW\*(C`const char **\*(C'\fR
4372 is unsafe, as in this example:
4373 .Sp
4374 .Vb 6
4375 \&          /* p is char ** value.  */
4376 \&          const char **q = (const char **) p;
4377 \&          /* Assignment of readonly string to const char * is OK.  */
4378 \&          *q = "string";
4379 \&          /* Now char** pointer points to read\-only memory.  */
4380 \&          **p = \*(Aqb\*(Aq;
4381 .Ve
4382 .IP "\fB\-Wcast\-align\fR" 4
4383 .IX Item "-Wcast-align"
4384 Warn whenever a pointer is cast such that the required alignment of the
4385 target is increased.  For example, warn if a \f(CW\*(C`char *\*(C'\fR is cast to
4386 an \f(CW\*(C`int *\*(C'\fR on machines where integers can only be accessed at
4387 two\- or four-byte boundaries.
4388 .IP "\fB\-Wwrite\-strings\fR" 4
4389 .IX Item "-Wwrite-strings"
4390 When compiling C, give string constants the type \f(CW\*(C`const
4391 char[\f(CIlength\f(CW]\*(C'\fR so that copying the address of one into a
4392 non\-\f(CW\*(C`const\*(C'\fR \f(CW\*(C`char *\*(C'\fR pointer produces a warning.  These
4393 warnings help you find at compile time code that can try to write
4394 into a string constant, but only if you have been very careful about
4395 using \f(CW\*(C`const\*(C'\fR in declarations and prototypes.  Otherwise, it is
4396 just a nuisance. This is why we did not make \fB\-Wall\fR request
4397 these warnings.
4398 .Sp
4399 When compiling \*(C+, warn about the deprecated conversion from string
4400 literals to \f(CW\*(C`char *\*(C'\fR.  This warning is enabled by default for \*(C+
4401 programs.
4402 .IP "\fB\-Wclobbered\fR" 4
4403 .IX Item "-Wclobbered"
4404 Warn for variables that might be changed by \f(CW\*(C`longjmp\*(C'\fR or
4405 \&\f(CW\*(C`vfork\*(C'\fR.  This warning is also enabled by \fB\-Wextra\fR.
4406 .IP "\fB\-Wconditionally\-supported\fR (\*(C+ and Objective\-\*(C+ only)" 4
4407 .IX Item "-Wconditionally-supported ( and Objective- only)"
4408 Warn for conditionally-supported (\*(C+11 [intro.defs]) constructs.
4409 .IP "\fB\-Wconversion\fR" 4
4410 .IX Item "-Wconversion"
4411 Warn for implicit conversions that may alter a value. This includes
4412 conversions between real and integer, like \f(CW\*(C`abs (x)\*(C'\fR when
4413 \&\f(CW\*(C`x\*(C'\fR is \f(CW\*(C`double\*(C'\fR; conversions between signed and unsigned,
4414 like \f(CW\*(C`unsigned ui = \-1\*(C'\fR; and conversions to smaller types, like
4415 \&\f(CW\*(C`sqrtf (M_PI)\*(C'\fR. Do not warn for explicit casts like \f(CW\*(C`abs
4416 ((int) x)\*(C'\fR and \f(CW\*(C`ui = (unsigned) \-1\*(C'\fR, or if the value is not
4417 changed by the conversion like in \f(CW\*(C`abs (2.0)\*(C'\fR.  Warnings about
4418 conversions between signed and unsigned integers can be disabled by
4419 using \fB\-Wno\-sign\-conversion\fR.
4420 .Sp
4421 For \*(C+, also warn for confusing overload resolution for user-defined
4422 conversions; and conversions that never use a type conversion
4423 operator: conversions to \f(CW\*(C`void\*(C'\fR, the same type, a base class or a
4424 reference to them. Warnings about conversions between signed and
4425 unsigned integers are disabled by default in \*(C+ unless
4426 \&\fB\-Wsign\-conversion\fR is explicitly enabled.
4427 .IP "\fB\-Wno\-conversion\-null\fR (\*(C+ and Objective\-\*(C+ only)" 4
4428 .IX Item "-Wno-conversion-null ( and Objective- only)"
4429 Do not warn for conversions between \f(CW\*(C`NULL\*(C'\fR and non-pointer
4430 types. \fB\-Wconversion\-null\fR is enabled by default.
4431 .IP "\fB\-Wzero\-as\-null\-pointer\-constant\fR (\*(C+ and Objective\-\*(C+ only)" 4
4432 .IX Item "-Wzero-as-null-pointer-constant ( and Objective- only)"
4433 Warn when a literal '0' is used as null pointer constant.  This can
4434 be useful to facilitate the conversion to \f(CW\*(C`nullptr\*(C'\fR in \*(C+11.
4435 .IP "\fB\-Wdate\-time\fR" 4
4436 .IX Item "-Wdate-time"
4437 Warn when macros \f(CW\*(C`_\|_TIME_\|_\*(C'\fR, \f(CW\*(C`_\|_DATE_\|_\*(C'\fR or \f(CW\*(C`_\|_TIMESTAMP_\|_\*(C'\fR
4438 are encountered as they might prevent bit-wise-identical reproducible
4439 compilations.
4440 .IP "\fB\-Wdelete\-incomplete\fR (\*(C+ and Objective\-\*(C+ only)" 4
4441 .IX Item "-Wdelete-incomplete ( and Objective- only)"
4442 Warn when deleting a pointer to incomplete type, which may cause
4443 undefined behavior at runtime.  This warning is enabled by default.
4444 .IP "\fB\-Wuseless\-cast\fR (\*(C+ and Objective\-\*(C+ only)" 4
4445 .IX Item "-Wuseless-cast ( and Objective- only)"
4446 Warn when an expression is casted to its own type.
4447 .IP "\fB\-Wempty\-body\fR" 4
4448 .IX Item "-Wempty-body"
4449 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
4450 while\*(C'\fR statement.  This warning is also enabled by \fB\-Wextra\fR.
4451 .IP "\fB\-Wenum\-compare\fR" 4
4452 .IX Item "-Wenum-compare"
4453 Warn about a comparison between values of different enumerated types.
4454 In \*(C+ enumeral mismatches in conditional expressions are also
4455 diagnosed and the warning is enabled by default.  In C this warning is 
4456 enabled by \fB\-Wall\fR.
4457 .IP "\fB\-Wjump\-misses\-init\fR (C, Objective-C only)" 4
4458 .IX Item "-Wjump-misses-init (C, Objective-C only)"
4459 Warn if a \f(CW\*(C`goto\*(C'\fR statement or a \f(CW\*(C`switch\*(C'\fR statement jumps
4460 forward across the initialization of a variable, or jumps backward to a
4461 label after the variable has been initialized.  This only warns about
4462 variables that are initialized when they are declared.  This warning is
4463 only supported for C and Objective-C; in \*(C+ this sort of branch is an
4464 error in any case.
4465 .Sp
4466 \&\fB\-Wjump\-misses\-init\fR is included in \fB\-Wc++\-compat\fR.  It
4467 can be disabled with the \fB\-Wno\-jump\-misses\-init\fR option.
4468 .IP "\fB\-Wsign\-compare\fR" 4
4469 .IX Item "-Wsign-compare"
4470 Warn when a comparison between signed and unsigned values could produce
4471 an incorrect result when the signed value is converted to unsigned.
4472 This warning is also enabled by \fB\-Wextra\fR; to get the other warnings
4473 of \fB\-Wextra\fR without this warning, use \fB\-Wextra \-Wno\-sign\-compare\fR.
4474 .IP "\fB\-Wsign\-conversion\fR" 4
4475 .IX Item "-Wsign-conversion"
4476 Warn for implicit conversions that may change the sign of an integer
4477 value, like assigning a signed integer expression to an unsigned
4478 integer variable. An explicit cast silences the warning. In C, this
4479 option is enabled also by \fB\-Wconversion\fR.
4480 .IP "\fB\-Wfloat\-conversion\fR" 4
4481 .IX Item "-Wfloat-conversion"
4482 Warn for implicit conversions that reduce the precision of a real value.
4483 This includes conversions from real to integer, and from higher precision
4484 real to lower precision real values.  This option is also enabled by
4485 \&\fB\-Wconversion\fR.
4486 .IP "\fB\-Wsized\-deallocation\fR (\*(C+ and Objective\-\*(C+ only)" 4
4487 .IX Item "-Wsized-deallocation ( and Objective- only)"
4488 Warn about a definition of an unsized deallocation function
4489 .Sp
4490 .Vb 2
4491 \&        void operator delete (void *) noexcept;
4492 \&        void operator delete[] (void *) noexcept;
4493 .Ve
4494 .Sp
4495 without a definition of the corresponding sized deallocation function
4496 .Sp
4497 .Vb 2
4498 \&        void operator delete (void *, std::size_t) noexcept;
4499 \&        void operator delete[] (void *, std::size_t) noexcept;
4500 .Ve
4501 .Sp
4502 or vice versa.  Enabled by \fB\-Wextra\fR along with
4503 \&\fB\-fsized\-deallocation\fR.
4504 .IP "\fB\-Wsizeof\-pointer\-memaccess\fR" 4
4505 .IX Item "-Wsizeof-pointer-memaccess"
4506 Warn for suspicious length parameters to certain string and memory built-in
4507 functions if the argument uses \f(CW\*(C`sizeof\*(C'\fR.  This warning warns e.g.
4508 about \f(CW\*(C`memset (ptr, 0, sizeof (ptr));\*(C'\fR if \f(CW\*(C`ptr\*(C'\fR is not an array,
4509 but a pointer, and suggests a possible fix, or about
4510 \&\f(CW\*(C`memcpy (&foo, ptr, sizeof (&foo));\*(C'\fR.  This warning is enabled by
4511 \&\fB\-Wall\fR.
4512 .IP "\fB\-Wsizeof\-array\-argument\fR" 4
4513 .IX Item "-Wsizeof-array-argument"
4514 Warn when the \f(CW\*(C`sizeof\*(C'\fR operator is applied to a parameter that is
4515 declared as an array in a function definition.  This warning is enabled by
4516 default for C and \*(C+ programs.
4517 .IP "\fB\-Wmemset\-transposed\-args\fR" 4
4518 .IX Item "-Wmemset-transposed-args"
4519 Warn for suspicious calls to the \f(CW\*(C`memset\*(C'\fR built-in function, if the
4520 second argument is not zero and the third argument is zero.  This warns e.g.@
4521 about \f(CW\*(C`memset (buf, sizeof buf, 0)\*(C'\fR where most probably
4522 \&\f(CW\*(C`memset (buf, 0, sizeof buf)\*(C'\fR was meant instead.  The diagnostics
4523 is only emitted if the third argument is literal zero.  If it is some
4524 expression that is folded to zero, a cast of zero to some type, etc., 
4525 it is far less likely that the user has mistakenly exchanged the arguments 
4526 and no warning is emitted.  This warning is enabled by \fB\-Wall\fR.
4527 .IP "\fB\-Waddress\fR" 4
4528 .IX Item "-Waddress"
4529 Warn about suspicious uses of memory addresses. These include using
4530 the address of a function in a conditional expression, such as
4531 \&\f(CW\*(C`void func(void); if (func)\*(C'\fR, and comparisons against the memory
4532 address of a string literal, such as \f(CW\*(C`if (x == "abc")\*(C'\fR.  Such
4533 uses typically indicate a programmer error: the address of a function
4534 always evaluates to true, so their use in a conditional usually
4535 indicate that the programmer forgot the parentheses in a function
4536 call; and comparisons against string literals result in unspecified
4537 behavior and are not portable in C, so they usually indicate that the
4538 programmer intended to use \f(CW\*(C`strcmp\*(C'\fR.  This warning is enabled by
4539 \&\fB\-Wall\fR.
4540 .IP "\fB\-Wlogical\-op\fR" 4
4541 .IX Item "-Wlogical-op"
4542 Warn about suspicious uses of logical operators in expressions.
4543 This includes using logical operators in contexts where a
4544 bit-wise operator is likely to be expected.
4545 .IP "\fB\-Wlogical\-not\-parentheses\fR" 4
4546 .IX Item "-Wlogical-not-parentheses"
4547 Warn about logical not used on the left hand side operand of a comparison.
4548 This option does not warn if the \s-1RHS\s0 operand is of a boolean type.  Its
4549 purpose is to detect suspicious code like the following:
4550 .Sp
4551 .Vb 3
4552 \&        int a;
4553 \&        ...
4554 \&        if (!a > 1) { ... }
4555 .Ve
4556 .Sp
4557 It is possible to suppress the warning by wrapping the \s-1LHS\s0 into
4558 parentheses:
4559 .Sp
4560 .Vb 1
4561 \&        if ((!a) > 1) { ... }
4562 .Ve
4563 .Sp
4564 This warning is enabled by \fB\-Wall\fR.
4565 .IP "\fB\-Waggregate\-return\fR" 4
4566 .IX Item "-Waggregate-return"
4567 Warn if any functions that return structures or unions are defined or
4568 called.  (In languages where you can return an array, this also elicits
4569 a warning.)
4570 .IP "\fB\-Wno\-aggressive\-loop\-optimizations\fR" 4
4571 .IX Item "-Wno-aggressive-loop-optimizations"
4572 Warn if in a loop with constant number of iterations the compiler detects
4573 undefined behavior in some statement during one or more of the iterations.
4574 .IP "\fB\-Wno\-attributes\fR" 4
4575 .IX Item "-Wno-attributes"
4576 Do not warn if an unexpected \f(CW\*(C`_\|_attribute_\|_\*(C'\fR is used, such as
4577 unrecognized attributes, function attributes applied to variables,
4578 etc.  This does not stop errors for incorrect use of supported
4579 attributes.
4580 .IP "\fB\-Wno\-builtin\-macro\-redefined\fR" 4
4581 .IX Item "-Wno-builtin-macro-redefined"
4582 Do not warn if certain built-in macros are redefined.  This suppresses
4583 warnings for redefinition of \f(CW\*(C`_\|_TIMESTAMP_\|_\*(C'\fR, \f(CW\*(C`_\|_TIME_\|_\*(C'\fR,
4584 \&\f(CW\*(C`_\|_DATE_\|_\*(C'\fR, \f(CW\*(C`_\|_FILE_\|_\*(C'\fR, and \f(CW\*(C`_\|_BASE_FILE_\|_\*(C'\fR.
4585 .IP "\fB\-Wstrict\-prototypes\fR (C and Objective-C only)" 4
4586 .IX Item "-Wstrict-prototypes (C and Objective-C only)"
4587 Warn if a function is declared or defined without specifying the
4588 argument types.  (An old-style function definition is permitted without
4589 a warning if preceded by a declaration that specifies the argument
4590 types.)
4591 .IP "\fB\-Wold\-style\-declaration\fR (C and Objective-C only)" 4
4592 .IX Item "-Wold-style-declaration (C and Objective-C only)"
4593 Warn for obsolescent usages, according to the C Standard, in a
4594 declaration. For example, warn if storage-class specifiers like
4595 \&\f(CW\*(C`static\*(C'\fR are not the first things in a declaration.  This warning
4596 is also enabled by \fB\-Wextra\fR.
4597 .IP "\fB\-Wold\-style\-definition\fR (C and Objective-C only)" 4
4598 .IX Item "-Wold-style-definition (C and Objective-C only)"
4599 Warn if an old-style function definition is used.  A warning is given
4600 even if there is a previous prototype.
4601 .IP "\fB\-Wmissing\-parameter\-type\fR (C and Objective-C only)" 4
4602 .IX Item "-Wmissing-parameter-type (C and Objective-C only)"
4603 A function parameter is declared without a type specifier in K&R\-style
4604 functions:
4605 .Sp
4606 .Vb 1
4607 \&        void foo(bar) { }
4608 .Ve
4609 .Sp
4610 This warning is also enabled by \fB\-Wextra\fR.
4611 .IP "\fB\-Wmissing\-prototypes\fR (C and Objective-C only)" 4
4612 .IX Item "-Wmissing-prototypes (C and Objective-C only)"
4613 Warn if a global function is defined without a previous prototype
4614 declaration.  This warning is issued even if the definition itself
4615 provides a prototype.  Use this option to detect global functions
4616 that do not have a matching prototype declaration in a header file.
4617 This option is not valid for \*(C+ because all function declarations
4618 provide prototypes and a non-matching declaration declares an
4619 overload rather than conflict with an earlier declaration.
4620 Use \fB\-Wmissing\-declarations\fR to detect missing declarations in \*(C+.
4621 .IP "\fB\-Wmissing\-declarations\fR" 4
4622 .IX Item "-Wmissing-declarations"
4623 Warn if a global function is defined without a previous declaration.
4624 Do so even if the definition itself provides a prototype.
4625 Use this option to detect global functions that are not declared in
4626 header files.  In C, no warnings are issued for functions with previous
4627 non-prototype declarations; use \fB\-Wmissing\-prototypes\fR to detect
4628 missing prototypes.  In \*(C+, no warnings are issued for function templates,
4629 or for inline functions, or for functions in anonymous namespaces.
4630 .IP "\fB\-Wmissing\-field\-initializers\fR" 4
4631 .IX Item "-Wmissing-field-initializers"
4632 Warn if a structure's initializer has some fields missing.  For
4633 example, the following code causes such a warning, because
4634 \&\f(CW\*(C`x.h\*(C'\fR is implicitly zero:
4635 .Sp
4636 .Vb 2
4637 \&        struct s { int f, g, h; };
4638 \&        struct s x = { 3, 4 };
4639 .Ve
4640 .Sp
4641 This option does not warn about designated initializers, so the following
4642 modification does not trigger a warning:
4643 .Sp
4644 .Vb 2
4645 \&        struct s { int f, g, h; };
4646 \&        struct s x = { .f = 3, .g = 4 };
4647 .Ve
4648 .Sp
4649 In \*(C+ this option does not warn either about the empty { }
4650 initializer, for example:
4651 .Sp
4652 .Vb 2
4653 \&        struct s { int f, g, h; };
4654 \&        s x = { };
4655 .Ve
4656 .Sp
4657 This warning is included in \fB\-Wextra\fR.  To get other \fB\-Wextra\fR
4658 warnings without this one, use \fB\-Wextra \-Wno\-missing\-field\-initializers\fR.
4659 .IP "\fB\-Wno\-multichar\fR" 4
4660 .IX Item "-Wno-multichar"
4661 Do not warn if a multicharacter constant (\fB'\s-1FOOF\s0'\fR) is used.
4662 Usually they indicate a typo in the user's code, as they have
4663 implementation-defined values, and should not be used in portable code.
4664 .IP "\fB\-Wnormalized\fR[\fB=\fR<\fBnone\fR|\fBid\fR|\fBnfc\fR|\fBnfkc\fR>]" 4
4665 .IX Item "-Wnormalized[=<none|id|nfc|nfkc>]"
4666 In \s-1ISO\s0 C and \s-1ISO\s0 \*(C+, two identifiers are different if they are
4667 different sequences of characters.  However, sometimes when characters
4668 outside the basic \s-1ASCII\s0 character set are used, you can have two
4669 different character sequences that look the same.  To avoid confusion,
4670 the \s-1ISO\s0 10646 standard sets out some \fInormalization rules\fR which
4671 when applied ensure that two sequences that look the same are turned into
4672 the same sequence.  \s-1GCC\s0 can warn you if you are using identifiers that
4673 have not been normalized; this option controls that warning.
4674 .Sp
4675 There are four levels of warning supported by \s-1GCC\s0.  The default is
4676 \&\fB\-Wnormalized=nfc\fR, which warns about any identifier that is
4677 not in the \s-1ISO\s0 10646 \*(L"C\*(R" normalized form, \fI\s-1NFC\s0\fR.  \s-1NFC\s0 is the
4678 recommended form for most uses.  It is equivalent to
4679 \&\fB\-Wnormalized\fR.
4680 .Sp
4681 Unfortunately, there are some characters allowed in identifiers by
4682 \&\s-1ISO\s0 C and \s-1ISO\s0 \*(C+ that, when turned into \s-1NFC\s0, are not allowed in 
4683 identifiers.  That is, there's no way to use these symbols in portable
4684 \&\s-1ISO\s0 C or \*(C+ and have all your identifiers in \s-1NFC\s0.
4685 \&\fB\-Wnormalized=id\fR suppresses the warning for these characters.
4686 It is hoped that future versions of the standards involved will correct
4687 this, which is why this option is not the default.
4688 .Sp
4689 You can switch the warning off for all characters by writing
4690 \&\fB\-Wnormalized=none\fR or \fB\-Wno\-normalized\fR.  You should
4691 only do this if you are using some other normalization scheme (like
4692 \&\*(L"D\*(R"), because otherwise you can easily create bugs that are
4693 literally impossible to see.
4694 .Sp
4695 Some characters in \s-1ISO\s0 10646 have distinct meanings but look identical
4696 in some fonts or display methodologies, especially once formatting has
4697 been applied.  For instance \f(CW\*(C`\eu207F\*(C'\fR, \*(L"\s-1SUPERSCRIPT\s0 \s-1LATIN\s0 \s-1SMALL\s0
4698 \&\s-1LETTER\s0 N\*(R", displays just like a regular \f(CW\*(C`n\*(C'\fR that has been
4699 placed in a superscript.  \s-1ISO\s0 10646 defines the \fI\s-1NFKC\s0\fR
4700 normalization scheme to convert all these into a standard form as
4701 well, and \s-1GCC\s0 warns if your code is not in \s-1NFKC\s0 if you use
4702 \&\fB\-Wnormalized=nfkc\fR.  This warning is comparable to warning
4703 about every identifier that contains the letter O because it might be
4704 confused with the digit 0, and so is not the default, but may be
4705 useful as a local coding convention if the programming environment 
4706 cannot be fixed to display these characters distinctly.
4707 .IP "\fB\-Wno\-deprecated\fR" 4
4708 .IX Item "-Wno-deprecated"
4709 Do not warn about usage of deprecated features.
4710 .IP "\fB\-Wno\-deprecated\-declarations\fR" 4
4711 .IX Item "-Wno-deprecated-declarations"
4712 Do not warn about uses of functions,
4713 variables, and types marked as deprecated by using the \f(CW\*(C`deprecated\*(C'\fR
4714 attribute.
4715 .IP "\fB\-Wno\-overflow\fR" 4
4716 .IX Item "-Wno-overflow"
4717 Do not warn about compile-time overflow in constant expressions.
4718 .IP "\fB\-Wno\-odr\fR" 4
4719 .IX Item "-Wno-odr"
4720 Warn about One Definition Rule violations during link-time optimization.
4721 Requires \fB\-flto\-odr\-type\-merging\fR to be enabled.  Enabled by default.
4722 .IP "\fB\-Wopenmp\-simd\fR" 4
4723 .IX Item "-Wopenmp-simd"
4724 Warn if the vectorizer cost model overrides the OpenMP or the Cilk Plus
4725 simd directive set by user.  The \fB\-fsimd\-cost\-model=unlimited\fR
4726 option can be used to relax the cost model.
4727 .IP "\fB\-Woverride\-init\fR (C and Objective-C only)" 4
4728 .IX Item "-Woverride-init (C and Objective-C only)"
4729 Warn if an initialized field without side effects is overridden when
4730 using designated initializers.
4731 .Sp
4732 This warning is included in \fB\-Wextra\fR.  To get other
4733 \&\fB\-Wextra\fR warnings without this one, use \fB\-Wextra
4734 \&\-Wno\-override\-init\fR.
4735 .IP "\fB\-Wpacked\fR" 4
4736 .IX Item "-Wpacked"
4737 Warn if a structure is given the packed attribute, but the packed
4738 attribute has no effect on the layout or size of the structure.
4739 Such structures may be mis-aligned for little benefit.  For
4740 instance, in this code, the variable \f(CW\*(C`f.x\*(C'\fR in \f(CW\*(C`struct bar\*(C'\fR
4741 is misaligned even though \f(CW\*(C`struct bar\*(C'\fR does not itself
4742 have the packed attribute:
4743 .Sp
4744 .Vb 8
4745 \&        struct foo {
4746 \&          int x;
4747 \&          char a, b, c, d;
4748 \&        } _\|_attribute_\|_((packed));
4749 \&        struct bar {
4750 \&          char z;
4751 \&          struct foo f;
4752 \&        };
4753 .Ve
4754 .IP "\fB\-Wpacked\-bitfield\-compat\fR" 4
4755 .IX Item "-Wpacked-bitfield-compat"
4756 The 4.1, 4.2 and 4.3 series of \s-1GCC\s0 ignore the \f(CW\*(C`packed\*(C'\fR attribute
4757 on bit-fields of type \f(CW\*(C`char\*(C'\fR.  This has been fixed in \s-1GCC\s0 4.4 but
4758 the change can lead to differences in the structure layout.  \s-1GCC\s0
4759 informs you when the offset of such a field has changed in \s-1GCC\s0 4.4.
4760 For example there is no longer a 4\-bit padding between field \f(CW\*(C`a\*(C'\fR
4761 and \f(CW\*(C`b\*(C'\fR in this structure:
4762 .Sp
4763 .Vb 5
4764 \&        struct foo
4765 \&        {
4766 \&          char a:4;
4767 \&          char b:8;
4768 \&        } _\|_attribute_\|_ ((packed));
4769 .Ve
4770 .Sp
4771 This warning is enabled by default.  Use
4772 \&\fB\-Wno\-packed\-bitfield\-compat\fR to disable this warning.
4773 .IP "\fB\-Wpadded\fR" 4
4774 .IX Item "-Wpadded"
4775 Warn if padding is included in a structure, either to align an element
4776 of the structure or to align the whole structure.  Sometimes when this
4777 happens it is possible to rearrange the fields of the structure to
4778 reduce the padding and so make the structure smaller.
4779 .IP "\fB\-Wredundant\-decls\fR" 4
4780 .IX Item "-Wredundant-decls"
4781 Warn if anything is declared more than once in the same scope, even in
4782 cases where multiple declaration is valid and changes nothing.
4783 .IP "\fB\-Wnested\-externs\fR (C and Objective-C only)" 4
4784 .IX Item "-Wnested-externs (C and Objective-C only)"
4785 Warn if an \f(CW\*(C`extern\*(C'\fR declaration is encountered within a function.
4786 .IP "\fB\-Wno\-inherited\-variadic\-ctor\fR" 4
4787 .IX Item "-Wno-inherited-variadic-ctor"
4788 Suppress warnings about use of \*(C+11 inheriting constructors when the
4789 base class inherited from has a C variadic constructor; the warning is
4790 on by default because the ellipsis is not inherited.
4791 .IP "\fB\-Winline\fR" 4
4792 .IX Item "-Winline"
4793 Warn if a function that is declared as inline cannot be inlined.
4794 Even with this option, the compiler does not warn about failures to
4795 inline functions declared in system headers.
4796 .Sp
4797 The compiler uses a variety of heuristics to determine whether or not
4798 to inline a function.  For example, the compiler takes into account
4799 the size of the function being inlined and the amount of inlining
4800 that has already been done in the current function.  Therefore,
4801 seemingly insignificant changes in the source program can cause the
4802 warnings produced by \fB\-Winline\fR to appear or disappear.
4803 .IP "\fB\-Wno\-invalid\-offsetof\fR (\*(C+ and Objective\-\*(C+ only)" 4
4804 .IX Item "-Wno-invalid-offsetof ( and Objective- only)"
4805 Suppress warnings from applying the \f(CW\*(C`offsetof\*(C'\fR macro to a non-POD
4806 type.  According to the 2014 \s-1ISO\s0 \*(C+ standard, applying \f(CW\*(C`offsetof\*(C'\fR
4807 to a non-standard-layout type is undefined.  In existing \*(C+ implementations,
4808 however, \f(CW\*(C`offsetof\*(C'\fR typically gives meaningful results.
4809 This flag is for users who are aware that they are
4810 writing nonportable code and who have deliberately chosen to ignore the
4811 warning about it.
4812 .Sp
4813 The restrictions on \f(CW\*(C`offsetof\*(C'\fR may be relaxed in a future version
4814 of the \*(C+ standard.
4815 .IP "\fB\-Wno\-int\-to\-pointer\-cast\fR" 4
4816 .IX Item "-Wno-int-to-pointer-cast"
4817 Suppress warnings from casts to pointer type of an integer of a
4818 different size. In \*(C+, casting to a pointer type of smaller size is
4819 an error. \fBWint-to-pointer-cast\fR is enabled by default.
4820 .IP "\fB\-Wno\-pointer\-to\-int\-cast\fR (C and Objective-C only)" 4
4821 .IX Item "-Wno-pointer-to-int-cast (C and Objective-C only)"
4822 Suppress warnings from casts from a pointer to an integer type of a
4823 different size.
4824 .IP "\fB\-Winvalid\-pch\fR" 4
4825 .IX Item "-Winvalid-pch"
4826 Warn if a precompiled header is found in
4827 the search path but can't be used.
4828 .IP "\fB\-Wlong\-long\fR" 4
4829 .IX Item "-Wlong-long"
4830 Warn if \f(CW\*(C`long long\*(C'\fR type is used.  This is enabled by either
4831 \&\fB\-Wpedantic\fR or \fB\-Wtraditional\fR in \s-1ISO\s0 C90 and \*(C+98
4832 modes.  To inhibit the warning messages, use \fB\-Wno\-long\-long\fR.
4833 .IP "\fB\-Wvariadic\-macros\fR" 4
4834 .IX Item "-Wvariadic-macros"
4835 Warn if variadic macros are used in \s-1ISO\s0 C90 mode, or if the \s-1GNU\s0
4836 alternate syntax is used in \s-1ISO\s0 C99 mode.  This is enabled by either
4837 \&\fB\-Wpedantic\fR or \fB\-Wtraditional\fR.  To inhibit the warning
4838 messages, use \fB\-Wno\-variadic\-macros\fR.
4839 .IP "\fB\-Wvarargs\fR" 4
4840 .IX Item "-Wvarargs"
4841 Warn upon questionable usage of the macros used to handle variable
4842 arguments like \f(CW\*(C`va_start\*(C'\fR.  This is default.  To inhibit the
4843 warning messages, use \fB\-Wno\-varargs\fR.
4844 .IP "\fB\-Wvector\-operation\-performance\fR" 4
4845 .IX Item "-Wvector-operation-performance"
4846 Warn if vector operation is not implemented via \s-1SIMD\s0 capabilities of the
4847 architecture.  Mainly useful for the performance tuning.
4848 Vector operation can be implemented \f(CW\*(C`piecewise\*(C'\fR, which means that the
4849 scalar operation is performed on every vector element; 
4850 \&\f(CW\*(C`in parallel\*(C'\fR, which means that the vector operation is implemented
4851 using scalars of wider type, which normally is more performance efficient;
4852 and \f(CW\*(C`as a single scalar\*(C'\fR, which means that vector fits into a
4853 scalar type.
4854 .IP "\fB\-Wno\-virtual\-move\-assign\fR" 4
4855 .IX Item "-Wno-virtual-move-assign"
4856 Suppress warnings about inheriting from a virtual base with a
4857 non-trivial \*(C+11 move assignment operator.  This is dangerous because
4858 if the virtual base is reachable along more than one path, it is
4859 moved multiple times, which can mean both objects end up in the
4860 moved-from state.  If the move assignment operator is written to avoid
4861 moving from a moved-from object, this warning can be disabled.
4862 .IP "\fB\-Wvla\fR" 4
4863 .IX Item "-Wvla"
4864 Warn if variable length array is used in the code.
4865 \&\fB\-Wno\-vla\fR prevents the \fB\-Wpedantic\fR warning of
4866 the variable length array.
4867 .IP "\fB\-Wvolatile\-register\-var\fR" 4
4868 .IX Item "-Wvolatile-register-var"
4869 Warn if a register variable is declared volatile.  The volatile
4870 modifier does not inhibit all optimizations that may eliminate reads
4871 and/or writes to register variables.  This warning is enabled by
4872 \&\fB\-Wall\fR.
4873 .IP "\fB\-Wdisabled\-optimization\fR" 4
4874 .IX Item "-Wdisabled-optimization"
4875 Warn if a requested optimization pass is disabled.  This warning does
4876 not generally indicate that there is anything wrong with your code; it
4877 merely indicates that \s-1GCC\s0's optimizers are unable to handle the code
4878 effectively.  Often, the problem is that your code is too big or too
4879 complex; \s-1GCC\s0 refuses to optimize programs when the optimization
4880 itself is likely to take inordinate amounts of time.
4881 .IP "\fB\-Wpointer\-sign\fR (C and Objective-C only)" 4
4882 .IX Item "-Wpointer-sign (C and Objective-C only)"
4883 Warn for pointer argument passing or assignment with different signedness.
4884 This option is only supported for C and Objective-C.  It is implied by
4885 \&\fB\-Wall\fR and by \fB\-Wpedantic\fR, which can be disabled with
4886 \&\fB\-Wno\-pointer\-sign\fR.
4887 .IP "\fB\-Wstack\-protector\fR" 4
4888 .IX Item "-Wstack-protector"
4889 This option is only active when \fB\-fstack\-protector\fR is active.  It
4890 warns about functions that are not protected against stack smashing.
4891 .IP "\fB\-Woverlength\-strings\fR" 4
4892 .IX Item "-Woverlength-strings"
4893 Warn about string constants that are longer than the \*(L"minimum
4894 maximum\*(R" length specified in the C standard.  Modern compilers
4895 generally allow string constants that are much longer than the
4896 standard's minimum limit, but very portable programs should avoid
4897 using longer strings.
4898 .Sp
4899 The limit applies \fIafter\fR string constant concatenation, and does
4900 not count the trailing \s-1NUL\s0.  In C90, the limit was 509 characters; in
4901 C99, it was raised to 4095.  \*(C+98 does not specify a normative
4902 minimum maximum, so we do not diagnose overlength strings in \*(C+.
4903 .Sp
4904 This option is implied by \fB\-Wpedantic\fR, and can be disabled with
4905 \&\fB\-Wno\-overlength\-strings\fR.
4906 .IP "\fB\-Wunsuffixed\-float\-constants\fR (C and Objective-C only)" 4
4907 .IX Item "-Wunsuffixed-float-constants (C and Objective-C only)"
4908 Issue a warning for any floating constant that does not have
4909 a suffix.  When used together with \fB\-Wsystem\-headers\fR it
4910 warns about such constants in system header files.  This can be useful
4911 when preparing code to use with the \f(CW\*(C`FLOAT_CONST_DECIMAL64\*(C'\fR pragma
4912 from the decimal floating-point extension to C99.
4913 .IP "\fB\-Wno\-designated\-init\fR (C and Objective-C only)" 4
4914 .IX Item "-Wno-designated-init (C and Objective-C only)"
4915 Suppress warnings when a positional initializer is used to initialize
4916 a structure that has been marked with the \f(CW\*(C`designated_init\*(C'\fR
4917 attribute.
4918 .Sh "Options for Debugging Your Program or \s-1GCC\s0"
4919 .IX Subsection "Options for Debugging Your Program or GCC"
4920 \&\s-1GCC\s0 has various special options that are used for debugging
4921 either your program or \s-1GCC:\s0
4922 .IP "\fB\-g\fR" 4
4923 .IX Item "-g"
4924 Produce debugging information in the operating system's native format
4925 (stabs, \s-1COFF\s0, \s-1XCOFF\s0, or \s-1DWARF\s0 2).  \s-1GDB\s0 can work with this debugging
4926 information.
4927 .Sp
4928 On most systems that use stabs format, \fB\-g\fR enables use of extra
4929 debugging information that only \s-1GDB\s0 can use; this extra information
4930 makes debugging work better in \s-1GDB\s0 but probably makes other debuggers
4931 crash or
4932 refuse to read the program.  If you want to control for certain whether
4933 to generate the extra information, use \fB\-gstabs+\fR, \fB\-gstabs\fR,
4934 \&\fB\-gxcoff+\fR, \fB\-gxcoff\fR, or \fB\-gvms\fR (see below).
4935 .Sp
4936 \&\s-1GCC\s0 allows you to use \fB\-g\fR with
4937 \&\fB\-O\fR.  The shortcuts taken by optimized code may occasionally
4938 produce surprising results: some variables you declared may not exist
4939 at all; flow of control may briefly move where you did not expect it;
4940 some statements may not be executed because they compute constant
4941 results or their values are already at hand; some statements may
4942 execute in different places because they have been moved out of loops.
4943 .Sp
4944 Nevertheless it proves possible to debug optimized output.  This makes
4945 it reasonable to use the optimizer for programs that might have bugs.
4946 .Sp
4947 The following options are useful when \s-1GCC\s0 is generated with the
4948 capability for more than one debugging format.
4949 .IP "\fB\-gsplit\-dwarf\fR" 4
4950 .IX Item "-gsplit-dwarf"
4951 Separate as much dwarf debugging information as possible into a
4952 separate output file with the extension .dwo.  This option allows
4953 the build system to avoid linking files with debug information.  To
4954 be useful, this option requires a debugger capable of reading .dwo
4955 files.
4956 .IP "\fB\-ggdb\fR" 4
4957 .IX Item "-ggdb"
4958 Produce debugging information for use by \s-1GDB\s0.  This means to use the
4959 most expressive format available (\s-1DWARF\s0 2, stabs, or the native format
4960 if neither of those are supported), including \s-1GDB\s0 extensions if at all
4961 possible.
4962 .IP "\fB\-gpubnames\fR" 4
4963 .IX Item "-gpubnames"
4964 Generate dwarf .debug_pubnames and .debug_pubtypes sections.
4965 .IP "\fB\-ggnu\-pubnames\fR" 4
4966 .IX Item "-ggnu-pubnames"
4967 Generate .debug_pubnames and .debug_pubtypes sections in a format
4968 suitable for conversion into a \s-1GDB\s0 index.  This option is only useful
4969 with a linker that can produce \s-1GDB\s0 index version 7.
4970 .IP "\fB\-gstabs\fR" 4
4971 .IX Item "-gstabs"
4972 Produce debugging information in stabs format (if that is supported),
4973 without \s-1GDB\s0 extensions.  This is the format used by \s-1DBX\s0 on most \s-1BSD\s0
4974 systems.  On \s-1MIPS\s0, Alpha and System V Release 4 systems this option
4975 produces stabs debugging output that is not understood by \s-1DBX\s0 or \s-1SDB\s0.
4976 On System V Release 4 systems this option requires the \s-1GNU\s0 assembler.
4977 .IP "\fB\-feliminate\-unused\-debug\-symbols\fR" 4
4978 .IX Item "-feliminate-unused-debug-symbols"
4979 Produce debugging information in stabs format (if that is supported),
4980 for only symbols that are actually used.
4981 .IP "\fB\-femit\-class\-debug\-always\fR" 4
4982 .IX Item "-femit-class-debug-always"
4983 Instead of emitting debugging information for a \*(C+ class in only one
4984 object file, emit it in all object files using the class.  This option
4985 should be used only with debuggers that are unable to handle the way \s-1GCC\s0
4986 normally emits debugging information for classes because using this
4987 option increases the size of debugging information by as much as a
4988 factor of two.
4989 .IP "\fB\-fdebug\-types\-section\fR" 4
4990 .IX Item "-fdebug-types-section"
4991 When using \s-1DWARF\s0 Version 4 or higher, type DIEs can be put into
4992 their own \f(CW\*(C`.debug_types\*(C'\fR section instead of making them part of the
4993 \&\f(CW\*(C`.debug_info\*(C'\fR section.  It is more efficient to put them in a separate
4994 comdat sections since the linker can then remove duplicates.
4995 But not all \s-1DWARF\s0 consumers support \f(CW\*(C`.debug_types\*(C'\fR sections yet
4996 and on some objects \f(CW\*(C`.debug_types\*(C'\fR produces larger instead of smaller
4997 debugging information.
4998 .IP "\fB\-gstabs+\fR" 4
4999 .IX Item "-gstabs+"
5000 Produce debugging information in stabs format (if that is supported),
5001 using \s-1GNU\s0 extensions understood only by the \s-1GNU\s0 debugger (\s-1GDB\s0).  The
5002 use of these extensions is likely to make other debuggers crash or
5003 refuse to read the program.
5004 .IP "\fB\-gcoff\fR" 4
5005 .IX Item "-gcoff"
5006 Produce debugging information in \s-1COFF\s0 format (if that is supported).
5007 This is the format used by \s-1SDB\s0 on most System V systems prior to
5008 System V Release 4.
5009 .IP "\fB\-gxcoff\fR" 4
5010 .IX Item "-gxcoff"
5011 Produce debugging information in \s-1XCOFF\s0 format (if that is supported).
5012 This is the format used by the \s-1DBX\s0 debugger on \s-1IBM\s0 \s-1RS/6000\s0 systems.
5013 .IP "\fB\-gxcoff+\fR" 4
5014 .IX Item "-gxcoff+"
5015 Produce debugging information in \s-1XCOFF\s0 format (if that is supported),
5016 using \s-1GNU\s0 extensions understood only by the \s-1GNU\s0 debugger (\s-1GDB\s0).  The
5017 use of these extensions is likely to make other debuggers crash or
5018 refuse to read the program, and may cause assemblers other than the \s-1GNU\s0
5019 assembler (\s-1GAS\s0) to fail with an error.
5020 .IP "\fB\-gdwarf\-\fR\fIversion\fR" 4
5021 .IX Item "-gdwarf-version"
5022 Produce debugging information in \s-1DWARF\s0 format (if that is supported).
5023 The value of \fIversion\fR may be either 2, 3, 4 or 5; the default version
5024 for most targets is 4.  \s-1DWARF\s0 Version 5 is only experimental.
5025 .Sp
5026 Note that with \s-1DWARF\s0 Version 2, some ports require and always
5027 use some non-conflicting \s-1DWARF\s0 3 extensions in the unwind tables.
5028 .Sp
5029 Version 4 may require \s-1GDB\s0 7.0 and \fB\-fvar\-tracking\-assignments\fR
5030 for maximum benefit.
5031 .IP "\fB\-grecord\-gcc\-switches\fR" 4
5032 .IX Item "-grecord-gcc-switches"
5033 This switch causes the command-line options used to invoke the
5034 compiler that may affect code generation to be appended to the
5035 DW_AT_producer attribute in \s-1DWARF\s0 debugging information.  The options
5036 are concatenated with spaces separating them from each other and from
5037 the compiler version.  See also \fB\-frecord\-gcc\-switches\fR for another
5038 way of storing compiler options into the object file.  This is the default.
5039 .IP "\fB\-gno\-record\-gcc\-switches\fR" 4
5040 .IX Item "-gno-record-gcc-switches"
5041 Disallow appending command-line options to the DW_AT_producer attribute
5042 in \s-1DWARF\s0 debugging information.
5043 .IP "\fB\-gstrict\-dwarf\fR" 4
5044 .IX Item "-gstrict-dwarf"
5045 Disallow using extensions of later \s-1DWARF\s0 standard version than selected
5046 with \fB\-gdwarf\-\fR\fIversion\fR.  On most targets using non-conflicting
5047 \&\s-1DWARF\s0 extensions from later standard versions is allowed.
5048 .IP "\fB\-gno\-strict\-dwarf\fR" 4
5049 .IX Item "-gno-strict-dwarf"
5050 Allow using extensions of later \s-1DWARF\s0 standard version than selected with
5051 \&\fB\-gdwarf\-\fR\fIversion\fR.
5052 .IP "\fB\-gz\fR[\fB=\fR\fItype\fR]" 4
5053 .IX Item "-gz[=type]"
5054 Produce compressed debug sections in \s-1DWARF\s0 format, if that is supported.
5055 If \fItype\fR is not given, the default type depends on the capabilities
5056 of the assembler and linker used.  \fItype\fR may be one of
5057 \&\fBnone\fR (don't compress debug sections), \fBzlib\fR (use zlib
5058 compression in \s-1ELF\s0 gABI format), or \fBzlib-gnu\fR (use zlib
5059 compression in traditional \s-1GNU\s0 format).  If the linker doesn't support
5060 writing compressed debug sections, the option is rejected.  Otherwise,
5061 if the assembler does not support them, \fB\-gz\fR is silently ignored
5062 when producing object files.
5063 .IP "\fB\-gvms\fR" 4
5064 .IX Item "-gvms"
5065 Produce debugging information in Alpha/VMS debug format (if that is
5066 supported).  This is the format used by \s-1DEBUG\s0 on Alpha/VMS systems.
5067 .IP "\fB\-g\fR\fIlevel\fR" 4
5068 .IX Item "-glevel"
5069 .PD 0
5070 .IP "\fB\-ggdb\fR\fIlevel\fR" 4
5071 .IX Item "-ggdblevel"
5072 .IP "\fB\-gstabs\fR\fIlevel\fR" 4
5073 .IX Item "-gstabslevel"
5074 .IP "\fB\-gcoff\fR\fIlevel\fR" 4
5075 .IX Item "-gcofflevel"
5076 .IP "\fB\-gxcoff\fR\fIlevel\fR" 4
5077 .IX Item "-gxcofflevel"
5078 .IP "\fB\-gvms\fR\fIlevel\fR" 4
5079 .IX Item "-gvmslevel"
5080 .PD
5081 Request debugging information and also use \fIlevel\fR to specify how
5082 much information.  The default level is 2.
5083 .Sp
5084 Level 0 produces no debug information at all.  Thus, \fB\-g0\fR negates
5085 \&\fB\-g\fR.
5086 .Sp
5087 Level 1 produces minimal information, enough for making backtraces in
5088 parts of the program that you don't plan to debug.  This includes
5089 descriptions of functions and external variables, and line number
5090 tables, but no information about local variables.
5091 .Sp
5092 Level 3 includes extra information, such as all the macro definitions
5093 present in the program.  Some debuggers support macro expansion when
5094 you use \fB\-g3\fR.
5095 .Sp
5096 \&\fB\-gdwarf\-2\fR does not accept a concatenated debug level, because
5097 \&\s-1GCC\s0 used to support an option \fB\-gdwarf\fR that meant to generate
5098 debug information in version 1 of the \s-1DWARF\s0 format (which is very
5099 different from version 2), and it would have been too confusing.  That
5100 debug format is long obsolete, but the option cannot be changed now.
5101 Instead use an additional \fB\-g\fR\fIlevel\fR option to change the
5102 debug level for \s-1DWARF\s0.
5103 .IP "\fB\-gtoggle\fR" 4
5104 .IX Item "-gtoggle"
5105 Turn off generation of debug info, if leaving out this option
5106 generates it, or turn it on at level 2 otherwise.  The position of this
5107 argument in the command line does not matter; it takes effect after all
5108 other options are processed, and it does so only once, no matter how
5109 many times it is given.  This is mainly intended to be used with
5110 \&\fB\-fcompare\-debug\fR.
5111 .IP "\fB\-fsanitize=address\fR" 4
5112 .IX Item "-fsanitize=address"
5113 Enable AddressSanitizer, a fast memory error detector.
5114 Memory access instructions are instrumented to detect
5115 out-of-bounds and use-after-free bugs.
5116 See <\fBhttps://github.com/google/sanitizers/wiki/AddressSanitizer\fR> for
5117 more details.  The run-time behavior can be influenced using the
5118 \&\fB\s-1ASAN_OPTIONS\s0\fR environment variable.  When set to \f(CW\*(C`help=1\*(C'\fR,
5119 the available options are shown at startup of the instrumended program.  See
5120 <\fBhttps://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run\-time\-flags\fR>
5121 for a list of supported options.
5122 .IP "\fB\-fsanitize=kernel\-address\fR" 4
5123 .IX Item "-fsanitize=kernel-address"
5124 Enable AddressSanitizer for Linux kernel.
5125 See <\fBhttps://github.com/google/kasan/wiki\fR> for more details.
5126 .IP "\fB\-fsanitize=thread\fR" 4
5127 .IX Item "-fsanitize=thread"
5128 Enable ThreadSanitizer, a fast data race detector.
5129 Memory access instructions are instrumented to detect
5130 data race bugs.  See <\fBhttps://github.com/google/sanitizers/wiki#threadsanitizer\fR> for more
5131 details. The run-time behavior can be influenced using the \fB\s-1TSAN_OPTIONS\s0\fR
5132 environment variable; see
5133 <\fBhttps://github.com/google/sanitizers/wiki/ThreadSanitizerFlags\fR> for a list of
5134 supported options.
5135 .IP "\fB\-fsanitize=leak\fR" 4
5136 .IX Item "-fsanitize=leak"
5137 Enable LeakSanitizer, a memory leak detector.
5138 This option only matters for linking of executables and if neither
5139 \&\fB\-fsanitize=address\fR nor \fB\-fsanitize=thread\fR is used.  In that
5140 case the executable is linked against a library that overrides \f(CW\*(C`malloc\*(C'\fR
5141 and other allocator functions.  See
5142 <\fBhttps://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer\fR> for more
5143 details.  The run-time behavior can be influenced using the
5144 \&\fB\s-1LSAN_OPTIONS\s0\fR environment variable.
5145 .IP "\fB\-fsanitize=undefined\fR" 4
5146 .IX Item "-fsanitize=undefined"
5147 Enable UndefinedBehaviorSanitizer, a fast undefined behavior detector.
5148 Various computations are instrumented to detect undefined behavior
5149 at runtime.  Current suboptions are:
5150 .RS 4
5151 .IP "\fB\-fsanitize=shift\fR" 4
5152 .IX Item "-fsanitize=shift"
5153 This option enables checking that the result of a shift operation is
5154 not undefined.  Note that what exactly is considered undefined differs
5155 slightly between C and \*(C+, as well as between \s-1ISO\s0 C90 and C99, etc.
5156 .IP "\fB\-fsanitize=integer\-divide\-by\-zero\fR" 4
5157 .IX Item "-fsanitize=integer-divide-by-zero"
5158 Detect integer division by zero as well as \f(CW\*(C`INT_MIN / \-1\*(C'\fR division.
5159 .IP "\fB\-fsanitize=unreachable\fR" 4
5160 .IX Item "-fsanitize=unreachable"
5161 With this option, the compiler turns the \f(CW\*(C`_\|_builtin_unreachable\*(C'\fR
5162 call into a diagnostics message call instead.  When reaching the
5163 \&\f(CW\*(C`_\|_builtin_unreachable\*(C'\fR call, the behavior is undefined.
5164 .IP "\fB\-fsanitize=vla\-bound\fR" 4
5165 .IX Item "-fsanitize=vla-bound"
5166 This option instructs the compiler to check that the size of a variable
5167 length array is positive.
5168 .IP "\fB\-fsanitize=null\fR" 4
5169 .IX Item "-fsanitize=null"
5170 This option enables pointer checking.  Particularly, the application
5171 built with this option turned on will issue an error message when it
5172 tries to dereference a \s-1NULL\s0 pointer, or if a reference (possibly an
5173 rvalue reference) is bound to a \s-1NULL\s0 pointer, or if a method is invoked
5174 on an object pointed by a \s-1NULL\s0 pointer.
5175 .IP "\fB\-fsanitize=return\fR" 4
5176 .IX Item "-fsanitize=return"
5177 This option enables return statement checking.  Programs
5178 built with this option turned on will issue an error message
5179 when the end of a non-void function is reached without actually
5180 returning a value.  This option works in \*(C+ only.
5181 .IP "\fB\-fsanitize=signed\-integer\-overflow\fR" 4
5182 .IX Item "-fsanitize=signed-integer-overflow"
5183 This option enables signed integer overflow checking.  We check that
5184 the result of \f(CW\*(C`+\*(C'\fR, \f(CW\*(C`*\*(C'\fR, and both unary and binary \f(CW\*(C`\-\*(C'\fR
5185 does not overflow in the signed arithmetics.  Note, integer promotion
5186 rules must be taken into account.  That is, the following is not an
5187 overflow:
5188 .Sp
5189 .Vb 2
5190 \&        signed char a = SCHAR_MAX;
5191 \&        a++;
5192 .Ve
5193 .IP "\fB\-fsanitize=bounds\fR" 4
5194 .IX Item "-fsanitize=bounds"
5195 This option enables instrumentation of array bounds.  Various out of bounds
5196 accesses are detected.  Flexible array members, flexible array member-like
5197 arrays, and initializers of variables with static storage are not instrumented.
5198 .IP "\fB\-fsanitize=alignment\fR" 4
5199 .IX Item "-fsanitize=alignment"
5200 This option enables checking of alignment of pointers when they are
5201 dereferenced, or when a reference is bound to insufficiently aligned target,
5202 or when a method or constructor is invoked on insufficiently aligned object.
5203 .IP "\fB\-fsanitize=object\-size\fR" 4
5204 .IX Item "-fsanitize=object-size"
5205 This option enables instrumentation of memory references using the
5206 \&\f(CW\*(C`_\|_builtin_object_size\*(C'\fR function.  Various out of bounds pointer
5207 accesses are detected.
5208 .IP "\fB\-fsanitize=float\-divide\-by\-zero\fR" 4
5209 .IX Item "-fsanitize=float-divide-by-zero"
5210 Detect floating-point division by zero.  Unlike other similar options,
5211 \&\fB\-fsanitize=float\-divide\-by\-zero\fR is not enabled by
5212 \&\fB\-fsanitize=undefined\fR, since floating-point division by zero can
5213 be a legitimate way of obtaining infinities and NaNs.
5214 .IP "\fB\-fsanitize=float\-cast\-overflow\fR" 4
5215 .IX Item "-fsanitize=float-cast-overflow"
5216 This option enables floating-point type to integer conversion checking.
5217 We check that the result of the conversion does not overflow.
5218 Unlike other similar options, \fB\-fsanitize=float\-cast\-overflow\fR is
5219 not enabled by \fB\-fsanitize=undefined\fR.
5220 This option does not work well with \f(CW\*(C`FE_INVALID\*(C'\fR exceptions enabled.
5221 .IP "\fB\-fsanitize=nonnull\-attribute\fR" 4
5222 .IX Item "-fsanitize=nonnull-attribute"
5223 This option enables instrumentation of calls, checking whether null values
5224 are not passed to arguments marked as requiring a non-null value by the
5225 \&\f(CW\*(C`nonnull\*(C'\fR function attribute.
5226 .IP "\fB\-fsanitize=returns\-nonnull\-attribute\fR" 4
5227 .IX Item "-fsanitize=returns-nonnull-attribute"
5228 This option enables instrumentation of return statements in functions
5229 marked with \f(CW\*(C`returns_nonnull\*(C'\fR function attribute, to detect returning
5230 of null values from such functions.
5231 .IP "\fB\-fsanitize=bool\fR" 4
5232 .IX Item "-fsanitize=bool"
5233 This option enables instrumentation of loads from bool.  If a value other
5234 than 0/1 is loaded, a run-time error is issued.
5235 .IP "\fB\-fsanitize=enum\fR" 4
5236 .IX Item "-fsanitize=enum"
5237 This option enables instrumentation of loads from an enum type.  If
5238 a value outside the range of values for the enum type is loaded,
5239 a run-time error is issued.
5240 .IP "\fB\-fsanitize=vptr\fR" 4
5241 .IX Item "-fsanitize=vptr"
5242 This option enables instrumentation of \*(C+ member function calls, member
5243 accesses and some conversions between pointers to base and derived classes,
5244 to verify the referenced object has the correct dynamic type.
5245 .RE
5246 .RS 4
5247 .Sp
5248 While \fB\-ftrapv\fR causes traps for signed overflows to be emitted,
5249 \&\fB\-fsanitize=undefined\fR gives a diagnostic message.
5250 This currently works only for the C family of languages.
5251 .RE
5252 .IP "\fB\-fno\-sanitize=all\fR" 4
5253 .IX Item "-fno-sanitize=all"
5254 This option disables all previously enabled sanitizers.
5255 \&\fB\-fsanitize=all\fR is not allowed, as some sanitizers cannot be used
5256 together.
5257 .IP "\fB\-fasan\-shadow\-offset=\fR\fInumber\fR" 4
5258 .IX Item "-fasan-shadow-offset=number"
5259 This option forces \s-1GCC\s0 to use custom shadow offset in AddressSanitizer checks.
5260 It is useful for experimenting with different shadow memory layouts in
5261 Kernel AddressSanitizer.
5262 .IP "\fB\-fsanitize\-recover\fR[\fB=\fR\fIopts\fR]" 4
5263 .IX Item "-fsanitize-recover[=opts]"
5264 \&\fB\-fsanitize\-recover=\fR controls error recovery mode for sanitizers
5265 mentioned in comma-separated list of \fIopts\fR.  Enabling this option
5266 for a sanitizer component causes it to attempt to continue
5267 running the program as if no error happened.  This means multiple
5268 runtime errors can be reported in a single program run, and the exit
5269 code of the program may indicate success even when errors
5270 have been reported.  The \fB\-fno\-sanitize\-recover=\fR option
5271 can be used to alter
5272 this behavior: only the first detected error is reported
5273 and program then exits with a non-zero exit code.
5274 .Sp
5275 Currently this feature only works for \fB\-fsanitize=undefined\fR (and its suboptions
5276 except for \fB\-fsanitize=unreachable\fR and \fB\-fsanitize=return\fR),
5277 \&\fB\-fsanitize=float\-cast\-overflow\fR, \fB\-fsanitize=float\-divide\-by\-zero\fR and
5278 \&\fB\-fsanitize=kernel\-address\fR.  For these sanitizers error recovery is turned on by default.
5279 \&\fB\-fsanitize\-recover=all\fR and \fB\-fno\-sanitize\-recover=all\fR is also
5280 accepted, the former enables recovery for all sanitizers that support it,
5281 the latter disables recovery for all sanitizers that support it.
5282 .Sp
5283 Syntax without explicit \fIopts\fR parameter is deprecated.  It is equivalent to
5284 .Sp
5285 .Vb 1
5286 \&        \-fsanitize\-recover=undefined,float\-cast\-overflow,float\-divide\-by\-zero
5287 .Ve
5288 .Sp
5289 Similarly \fB\-fno\-sanitize\-recover\fR is equivalent to
5290 .Sp
5291 .Vb 1
5292 \&        \-fno\-sanitize\-recover=undefined,float\-cast\-overflow,float\-divide\-by\-zero
5293 .Ve
5294 .IP "\fB\-fsanitize\-undefined\-trap\-on\-error\fR" 4
5295 .IX Item "-fsanitize-undefined-trap-on-error"
5296 The \fB\-fsanitize\-undefined\-trap\-on\-error\fR option instructs the compiler to
5297 report undefined behavior using \f(CW\*(C`_\|_builtin_trap\*(C'\fR rather than
5298 a \f(CW\*(C`libubsan\*(C'\fR library routine.  The advantage of this is that the
5299 \&\f(CW\*(C`libubsan\*(C'\fR library is not needed and is not linked in, so this
5300 is usable even in freestanding environments.
5301 .IP "\fB\-fcheck\-pointer\-bounds\fR" 4
5302 .IX Item "-fcheck-pointer-bounds"
5303 Enable Pointer Bounds Checker instrumentation.  Each memory reference
5304 is instrumented with checks of the pointer used for memory access against
5305 bounds associated with that pointer.
5306 .Sp
5307 Currently there
5308 is only an implementation for Intel \s-1MPX\s0 available, thus x86 target
5309 and \fB\-mmpx\fR are required to enable this feature.  
5310 MPX-based instrumentation requires
5311 a runtime library to enable \s-1MPX\s0 in hardware and handle bounds
5312 violation signals.  By default when \fB\-fcheck\-pointer\-bounds\fR
5313 and \fB\-mmpx\fR options are used to link a program, the \s-1GCC\s0 driver
5314 links against the \fIlibmpx\fR runtime library and \fIlibmpxwrappers\fR
5315 library.  It also passes '\-z bndplt' to a linker in case it supports this
5316 option (which is checked on libmpx configuration).  Note that old versions
5317 of linker may ignore option.  Gold linker doesn't support '\-z bndplt'
5318 option.  With no '\-z bndplt' support in linker all calls to dynamic libraries
5319 lose passed bounds reducing overall protection level.  It's highly
5320 recommended to use linker with '\-z bndplt' support.  In case such linker
5321 is not available it is adviced to always use \fB\-static\-libmpxwrappers\fR
5322 for better protection level or use \fB\-static\fR to completely avoid
5323 external calls to dynamic libraries.  MPX-based instrumentation
5324 may be used for debugging and also may be included in production code
5325 to increase program security.  Depending on usage, you may
5326 have different requirements for the runtime library.  The current version
5327 of the \s-1MPX\s0 runtime library is more oriented for use as a debugging
5328 tool.  \s-1MPX\s0 runtime library usage implies \fB\-lpthread\fR.  See
5329 also \fB\-static\-libmpx\fR.  The runtime library  behavior can be
5330 influenced using various \fBCHKP_RT_*\fR environment variables.  See
5331 <\fBhttps://gcc.gnu.org/wiki/Intel%20MPX%20support%20in%20the%20GCC%20compiler\fR>
5332 for more details.
5333 .Sp
5334 Generated instrumentation may be controlled by various
5335 \&\fB\-fchkp\-*\fR options and by the \f(CW\*(C`bnd_variable_size\*(C'\fR
5336 structure field attribute and
5337 \&\f(CW\*(C`bnd_legacy\*(C'\fR, and \f(CW\*(C`bnd_instrument\*(C'\fR function attributes.  \s-1GCC\s0 also provides a number of built-in
5338 functions for controlling the Pointer Bounds Checker.
5339 .IP "\fB\-fchkp\-check\-incomplete\-type\fR" 4
5340 .IX Item "-fchkp-check-incomplete-type"
5341 Generate pointer bounds checks for variables with incomplete type.
5342 Enabled by default.
5343 .IP "\fB\-fchkp\-narrow\-bounds\fR" 4
5344 .IX Item "-fchkp-narrow-bounds"
5345 Controls bounds used by Pointer Bounds Checker for pointers to object
5346 fields.  If narrowing is enabled then field bounds are used.  Otherwise
5347 object bounds are used.  See also \fB\-fchkp\-narrow\-to\-innermost\-array\fR
5348 and \fB\-fchkp\-first\-field\-has\-own\-bounds\fR.  Enabled by default.
5349 .IP "\fB\-fchkp\-first\-field\-has\-own\-bounds\fR" 4
5350 .IX Item "-fchkp-first-field-has-own-bounds"
5351 Forces Pointer Bounds Checker to use narrowed bounds for the address of the
5352 first field in the structure.  By default a pointer to the first field has
5353 the same bounds as a pointer to the whole structure.
5354 .IP "\fB\-fchkp\-narrow\-to\-innermost\-array\fR" 4
5355 .IX Item "-fchkp-narrow-to-innermost-array"
5356 Forces Pointer Bounds Checker to use bounds of the innermost arrays in
5357 case of nested static array access.  By default this option is disabled and
5358 bounds of the outermost array are used.
5359 .IP "\fB\-fchkp\-optimize\fR" 4
5360 .IX Item "-fchkp-optimize"
5361 Enables Pointer Bounds Checker optimizations.  Enabled by default at
5362 optimization levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR.
5363 .IP "\fB\-fchkp\-use\-fast\-string\-functions\fR" 4
5364 .IX Item "-fchkp-use-fast-string-functions"
5365 Enables use of \f(CW*_nobnd\fR versions of string functions (not copying bounds)
5366 by Pointer Bounds Checker.  Disabled by default.
5367 .IP "\fB\-fchkp\-use\-nochk\-string\-functions\fR" 4
5368 .IX Item "-fchkp-use-nochk-string-functions"
5369 Enables use of \f(CW*_nochk\fR versions of string functions (not checking bounds)
5370 by Pointer Bounds Checker.  Disabled by default.
5371 .IP "\fB\-fchkp\-use\-static\-bounds\fR" 4
5372 .IX Item "-fchkp-use-static-bounds"
5373 Allow Pointer Bounds Checker to generate static bounds holding
5374 bounds of static variables.  Enabled by default.
5375 .IP "\fB\-fchkp\-use\-static\-const\-bounds\fR" 4
5376 .IX Item "-fchkp-use-static-const-bounds"
5377 Use statically-initialized bounds for constant bounds instead of
5378 generating them each time they are required.  By default enabled when
5379 \&\fB\-fchkp\-use\-static\-bounds\fR is enabled.
5380 .IP "\fB\-fchkp\-treat\-zero\-dynamic\-size\-as\-infinite\fR" 4
5381 .IX Item "-fchkp-treat-zero-dynamic-size-as-infinite"
5382 With this option, objects with incomplete type whose
5383 dynamically-obtained size is zero are treated as having infinite size
5384 instead by Pointer Bounds
5385 Checker.  This option may be helpful if a program is linked with a library
5386 missing size information for some symbols.  Disabled by default.
5387 .IP "\fB\-fchkp\-check\-read\fR" 4
5388 .IX Item "-fchkp-check-read"
5389 Instructs Pointer Bounds Checker to generate checks for all read
5390 accesses to memory.  Enabled by default.
5391 .IP "\fB\-fchkp\-check\-write\fR" 4
5392 .IX Item "-fchkp-check-write"
5393 Instructs Pointer Bounds Checker to generate checks for all write
5394 accesses to memory.  Enabled by default.
5395 .IP "\fB\-fchkp\-store\-bounds\fR" 4
5396 .IX Item "-fchkp-store-bounds"
5397 Instructs Pointer Bounds Checker to generate bounds stores for
5398 pointer writes.  Enabled by default.
5399 .IP "\fB\-fchkp\-instrument\-calls\fR" 4
5400 .IX Item "-fchkp-instrument-calls"
5401 Instructs Pointer Bounds Checker to pass pointer bounds to calls.
5402 Enabled by default.
5403 .IP "\fB\-fchkp\-instrument\-marked\-only\fR" 4
5404 .IX Item "-fchkp-instrument-marked-only"
5405 Instructs Pointer Bounds Checker to instrument only functions
5406 marked with the \f(CW\*(C`bnd_instrument\*(C'\fR attribute.  Disabled by default.
5407 .IP "\fB\-fchkp\-use\-wrappers\fR" 4
5408 .IX Item "-fchkp-use-wrappers"
5409 Allows Pointer Bounds Checker to replace calls to built-in functions
5410 with calls to wrapper functions.  When \fB\-fchkp\-use\-wrappers\fR
5411 is used to link a program, the \s-1GCC\s0 driver automatically links
5412 against \fIlibmpxwrappers\fR.  See also \fB\-static\-libmpxwrappers\fR.
5413 Enabled by default.
5414 .IP "\fB\-fdump\-final\-insns\fR[\fB=\fR\fIfile\fR]" 4
5415 .IX Item "-fdump-final-insns[=file]"
5416 Dump the final internal representation (\s-1RTL\s0) to \fIfile\fR.  If the
5417 optional argument is omitted (or if \fIfile\fR is \f(CW\*(C`.\*(C'\fR), the name
5418 of the dump file is determined by appending \f(CW\*(C`.gkd\*(C'\fR to the
5419 compilation output file name.
5420 .IP "\fB\-fcompare\-debug\fR[\fB=\fR\fIopts\fR]" 4
5421 .IX Item "-fcompare-debug[=opts]"
5422 If no error occurs during compilation, run the compiler a second time,
5423 adding \fIopts\fR and \fB\-fcompare\-debug\-second\fR to the arguments
5424 passed to the second compilation.  Dump the final internal
5425 representation in both compilations, and print an error if they differ.
5426 .Sp
5427 If the equal sign is omitted, the default \fB\-gtoggle\fR is used.
5428 .Sp
5429 The environment variable \fB\s-1GCC_COMPARE_DEBUG\s0\fR, if defined, non-empty
5430 and nonzero, implicitly enables \fB\-fcompare\-debug\fR.  If
5431 \&\fB\s-1GCC_COMPARE_DEBUG\s0\fR is defined to a string starting with a dash,
5432 then it is used for \fIopts\fR, otherwise the default \fB\-gtoggle\fR
5433 is used.
5434 .Sp
5435 \&\fB\-fcompare\-debug=\fR, with the equal sign but without \fIopts\fR,
5436 is equivalent to \fB\-fno\-compare\-debug\fR, which disables the dumping
5437 of the final representation and the second compilation, preventing even
5438 \&\fB\s-1GCC_COMPARE_DEBUG\s0\fR from taking effect.
5439 .Sp
5440 To verify full coverage during \fB\-fcompare\-debug\fR testing, set
5441 \&\fB\s-1GCC_COMPARE_DEBUG\s0\fR to say \fB\-fcompare\-debug\-not\-overridden\fR,
5442 which \s-1GCC\s0 rejects as an invalid option in any actual compilation
5443 (rather than preprocessing, assembly or linking).  To get just a
5444 warning, setting \fB\s-1GCC_COMPARE_DEBUG\s0\fR to \fB\-w%n\-fcompare\-debug
5445 not overridden\fR will do.
5446 .IP "\fB\-fcompare\-debug\-second\fR" 4
5447 .IX Item "-fcompare-debug-second"
5448 This option is implicitly passed to the compiler for the second
5449 compilation requested by \fB\-fcompare\-debug\fR, along with options to
5450 silence warnings, and omitting other options that would cause
5451 side-effect compiler outputs to files or to the standard output.  Dump
5452 files and preserved temporary files are renamed so as to contain the
5453 \&\f(CW\*(C`.gk\*(C'\fR additional extension during the second compilation, to avoid
5454 overwriting those generated by the first.
5455 .Sp
5456 When this option is passed to the compiler driver, it causes the
5457 \&\fIfirst\fR compilation to be skipped, which makes it useful for little
5458 other than debugging the compiler proper.
5459 .IP "\fB\-feliminate\-dwarf2\-dups\fR" 4
5460 .IX Item "-feliminate-dwarf2-dups"
5461 Compress \s-1DWARF\s0 2 debugging information by eliminating duplicated
5462 information about each symbol.  This option only makes sense when
5463 generating \s-1DWARF\s0 2 debugging information with \fB\-gdwarf\-2\fR.
5464 .IP "\fB\-femit\-struct\-debug\-baseonly\fR" 4
5465 .IX Item "-femit-struct-debug-baseonly"
5466 Emit debug information for struct-like types
5467 only when the base name of the compilation source file
5468 matches the base name of file in which the struct is defined.
5469 .Sp
5470 This option substantially reduces the size of debugging information,
5471 but at significant potential loss in type information to the debugger.
5472 See \fB\-femit\-struct\-debug\-reduced\fR for a less aggressive option.
5473 See \fB\-femit\-struct\-debug\-detailed\fR for more detailed control.
5474 .Sp
5475 This option works only with \s-1DWARF\s0 2.
5476 .IP "\fB\-femit\-struct\-debug\-reduced\fR" 4
5477 .IX Item "-femit-struct-debug-reduced"
5478 Emit debug information for struct-like types
5479 only when the base name of the compilation source file
5480 matches the base name of file in which the type is defined,
5481 unless the struct is a template or defined in a system header.
5482 .Sp
5483 This option significantly reduces the size of debugging information,
5484 with some potential loss in type information to the debugger.
5485 See \fB\-femit\-struct\-debug\-baseonly\fR for a more aggressive option.
5486 See \fB\-femit\-struct\-debug\-detailed\fR for more detailed control.
5487 .Sp
5488 This option works only with \s-1DWARF\s0 2.
5489 .IP "\fB\-femit\-struct\-debug\-detailed\fR[\fB=\fR\fIspec-list\fR]" 4
5490 .IX Item "-femit-struct-debug-detailed[=spec-list]"
5491 Specify the struct-like types
5492 for which the compiler generates debug information.
5493 The intent is to reduce duplicate struct debug information
5494 between different object files within the same program.
5495 .Sp
5496 This option is a detailed version of
5497 \&\fB\-femit\-struct\-debug\-reduced\fR and \fB\-femit\-struct\-debug\-baseonly\fR,
5498 which serves for most needs.
5499 .Sp
5500 A specification has the syntax[\fBdir:\fR|\fBind:\fR][\fBord:\fR|\fBgen:\fR](\fBany\fR|\fBsys\fR|\fBbase\fR|\fBnone\fR)
5501 .Sp
5502 The optional first word limits the specification to
5503 structs that are used directly (\fBdir:\fR) or used indirectly (\fBind:\fR).
5504 A struct type is used directly when it is the type of a variable, member.
5505 Indirect uses arise through pointers to structs.
5506 That is, when use of an incomplete struct is valid, the use is indirect.
5507 An example is
5508 \&\fBstruct one direct; struct two * indirect;\fR.
5509 .Sp
5510 The optional second word limits the specification to
5511 ordinary structs (\fBord:\fR) or generic structs (\fBgen:\fR).
5512 Generic structs are a bit complicated to explain.
5513 For \*(C+, these are non-explicit specializations of template classes,
5514 or non-template classes within the above.
5515 Other programming languages have generics,
5516 but \fB\-femit\-struct\-debug\-detailed\fR does not yet implement them.
5517 .Sp
5518 The third word specifies the source files for those
5519 structs for which the compiler should emit debug information.
5520 The values \fBnone\fR and \fBany\fR have the normal meaning.
5521 The value \fBbase\fR means that
5522 the base of name of the file in which the type declaration appears
5523 must match the base of the name of the main compilation file.
5524 In practice, this means that when compiling \fIfoo.c\fR, debug information
5525 is generated for types declared in that file and \fIfoo.h\fR,
5526 but not other header files.
5527 The value \fBsys\fR means those types satisfying \fBbase\fR
5528 or declared in system or compiler headers.
5529 .Sp
5530 You may need to experiment to determine the best settings for your application.
5531 .Sp
5532 The default is \fB\-femit\-struct\-debug\-detailed=all\fR.
5533 .Sp
5534 This option works only with \s-1DWARF\s0 2.
5535 .IP "\fB\-fno\-merge\-debug\-strings\fR" 4
5536 .IX Item "-fno-merge-debug-strings"
5537 Direct the linker to not merge together strings in the debugging
5538 information that are identical in different object files.  Merging is
5539 not supported by all assemblers or linkers.  Merging decreases the size
5540 of the debug information in the output file at the cost of increasing
5541 link processing time.  Merging is enabled by default.
5542 .IP "\fB\-fdebug\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR" 4
5543 .IX Item "-fdebug-prefix-map=old=new"
5544 When compiling files in directory \fI\fIold\fI\fR, record debugging
5545 information describing them as in \fI\fInew\fI\fR instead.
5546 .IP "\fB\-fno\-dwarf2\-cfi\-asm\fR" 4
5547 .IX Item "-fno-dwarf2-cfi-asm"
5548 Emit \s-1DWARF\s0 2 unwind info as compiler generated \f(CW\*(C`.eh_frame\*(C'\fR section
5549 instead of using \s-1GAS\s0 \f(CW\*(C`.cfi_*\*(C'\fR directives.
5550 .IP "\fB\-p\fR" 4
5551 .IX Item "-p"
5552 Generate extra code to write profile information suitable for the
5553 analysis program \fBprof\fR.  You must use this option when compiling
5554 the source files you want data about, and you must also use it when
5555 linking.
5556 .IP "\fB\-pg\fR" 4
5557 .IX Item "-pg"
5558 Generate extra code to write profile information suitable for the
5559 analysis program \fBgprof\fR.  You must use this option when compiling
5560 the source files you want data about, and you must also use it when
5561 linking.
5562 .IP "\fB\-Q\fR" 4
5563 .IX Item "-Q"
5564 Makes the compiler print out each function name as it is compiled, and
5565 print some statistics about each pass when it finishes.
5566 .IP "\fB\-ftime\-report\fR" 4
5567 .IX Item "-ftime-report"
5568 Makes the compiler print some statistics about the time consumed by each
5569 pass when it finishes.
5570 .IP "\fB\-fmem\-report\fR" 4
5571 .IX Item "-fmem-report"
5572 Makes the compiler print some statistics about permanent memory
5573 allocation when it finishes.
5574 .IP "\fB\-fmem\-report\-wpa\fR" 4
5575 .IX Item "-fmem-report-wpa"
5576 Makes the compiler print some statistics about permanent memory
5577 allocation for the \s-1WPA\s0 phase only.
5578 .IP "\fB\-fpre\-ipa\-mem\-report\fR" 4
5579 .IX Item "-fpre-ipa-mem-report"
5580 .PD 0
5581 .IP "\fB\-fpost\-ipa\-mem\-report\fR" 4
5582 .IX Item "-fpost-ipa-mem-report"
5583 .PD
5584 Makes the compiler print some statistics about permanent memory
5585 allocation before or after interprocedural optimization.
5586 .IP "\fB\-fprofile\-report\fR" 4
5587 .IX Item "-fprofile-report"
5588 Makes the compiler print some statistics about consistency of the
5589 (estimated) profile and effect of individual passes.
5590 .IP "\fB\-fstack\-usage\fR" 4
5591 .IX Item "-fstack-usage"
5592 Makes the compiler output stack usage information for the program, on a
5593 per-function basis.  The filename for the dump is made by appending
5594 \&\fI.su\fR to the \fIauxname\fR.  \fIauxname\fR is generated from the name of
5595 the output file, if explicitly specified and it is not an executable,
5596 otherwise it is the basename of the source file.  An entry is made up
5597 of three fields:
5598 .RS 4
5599 .IP "*" 4
5600 The name of the function.
5601 .IP "*" 4
5602 A number of bytes.
5603 .IP "*" 4
5604 One or more qualifiers: \f(CW\*(C`static\*(C'\fR, \f(CW\*(C`dynamic\*(C'\fR, \f(CW\*(C`bounded\*(C'\fR.
5605 .RE
5606 .RS 4
5607 .Sp
5608 The qualifier \f(CW\*(C`static\*(C'\fR means that the function manipulates the stack
5609 statically: a fixed number of bytes are allocated for the frame on function
5610 entry and released on function exit; no stack adjustments are otherwise made
5611 in the function.  The second field is this fixed number of bytes.
5612 .Sp
5613 The qualifier \f(CW\*(C`dynamic\*(C'\fR means that the function manipulates the stack
5614 dynamically: in addition to the static allocation described above, stack
5615 adjustments are made in the body of the function, for example to push/pop
5616 arguments around function calls.  If the qualifier \f(CW\*(C`bounded\*(C'\fR is also
5617 present, the amount of these adjustments is bounded at compile time and
5618 the second field is an upper bound of the total amount of stack used by
5619 the function.  If it is not present, the amount of these adjustments is
5620 not bounded at compile time and the second field only represents the
5621 bounded part.
5622 .RE
5623 .IP "\fB\-fprofile\-arcs\fR" 4
5624 .IX Item "-fprofile-arcs"
5625 Add code so that program flow \fIarcs\fR are instrumented.  During
5626 execution the program records how many times each branch and call is
5627 executed and how many times it is taken or returns.  When the compiled
5628 program exits it saves this data to a file called
5629 \&\fI\fIauxname\fI.gcda\fR for each source file.  The data may be used for
5630 profile-directed optimizations (\fB\-fbranch\-probabilities\fR), or for
5631 test coverage analysis (\fB\-ftest\-coverage\fR).  Each object file's
5632 \&\fIauxname\fR is generated from the name of the output file, if
5633 explicitly specified and it is not the final executable, otherwise it is
5634 the basename of the source file.  In both cases any suffix is removed
5635 (e.g. \fIfoo.gcda\fR for input file \fIdir/foo.c\fR, or
5636 \&\fIdir/foo.gcda\fR for output file specified as \fB\-o dir/foo.o\fR).
5637 .IP "\fB\-\-coverage\fR" 4
5638 .IX Item "--coverage"
5639 This option is used to compile and link code instrumented for coverage
5640 analysis.  The option is a synonym for \fB\-fprofile\-arcs\fR
5641 \&\fB\-ftest\-coverage\fR (when compiling) and \fB\-lgcov\fR (when
5642 linking).  See the documentation for those options for more details.
5643 .RS 4
5644 .IP "*" 4
5645 Compile the source files with \fB\-fprofile\-arcs\fR plus optimization
5646 and code generation options.  For test coverage analysis, use the
5647 additional \fB\-ftest\-coverage\fR option.  You do not need to profile
5648 every source file in a program.
5649 .IP "*" 4
5650 Link your object files with \fB\-lgcov\fR or \fB\-fprofile\-arcs\fR
5651 (the latter implies the former).
5652 .IP "*" 4
5653 Run the program on a representative workload to generate the arc profile
5654 information.  This may be repeated any number of times.  You can run
5655 concurrent instances of your program, and provided that the file system
5656 supports locking, the data files will be correctly updated.  Also
5657 \&\f(CW\*(C`fork\*(C'\fR calls are detected and correctly handled (double counting
5658 will not happen).
5659 .IP "*" 4
5660 For profile-directed optimizations, compile the source files again with
5661 the same optimization and code generation options plus
5662 \&\fB\-fbranch\-probabilities\fR.
5663 .IP "*" 4
5664 For test coverage analysis, use \fBgcov\fR to produce human readable
5665 information from the \fI.gcno\fR and \fI.gcda\fR files.  Refer to the
5666 \&\fBgcov\fR documentation for further information.
5667 .RE
5668 .RS 4
5669 .Sp
5670 With \fB\-fprofile\-arcs\fR, for each function of your program \s-1GCC\s0
5671 creates a program flow graph, then finds a spanning tree for the graph.
5672 Only arcs that are not on the spanning tree have to be instrumented: the
5673 compiler adds code to count the number of times that these arcs are
5674 executed.  When an arc is the only exit or only entrance to a block, the
5675 instrumentation code can be added to the block; otherwise, a new basic
5676 block must be created to hold the instrumentation code.
5677 .RE
5678 .IP "\fB\-ftest\-coverage\fR" 4
5679 .IX Item "-ftest-coverage"
5680 Produce a notes file that the \fBgcov\fR code-coverage utility can use to
5681 show program coverage.  Each source file's note file is called
5682 \&\fI\fIauxname\fI.gcno\fR.  Refer to the \fB\-fprofile\-arcs\fR option
5683 above for a description of \fIauxname\fR and instructions on how to
5684 generate test coverage data.  Coverage data matches the source files
5685 more closely if you do not optimize.
5686 .IP "\fB\-fdbg\-cnt\-list\fR" 4
5687 .IX Item "-fdbg-cnt-list"
5688 Print the name and the counter upper bound for all debug counters.
5689 .IP "\fB\-fdbg\-cnt=\fR\fIcounter-value-list\fR" 4
5690 .IX Item "-fdbg-cnt=counter-value-list"
5691 Set the internal debug counter upper bound.  \fIcounter-value-list\fR
5692 is a comma-separated list of \fIname\fR:\fIvalue\fR pairs
5693 which sets the upper bound of each debug counter \fIname\fR to \fIvalue\fR.
5694 All debug counters have the initial upper bound of \f(CW\*(C`UINT_MAX\*(C'\fR;
5695 thus \f(CW\*(C`dbg_cnt\*(C'\fR returns true always unless the upper bound
5696 is set by this option.
5697 For example, with \fB\-fdbg\-cnt=dce:10,tail_call:0\fR,
5698 \&\f(CW\*(C`dbg_cnt(dce)\*(C'\fR returns true only for first 10 invocations.
5699 .IP "\fB\-fenable\-\fR\fIkind\fR\fB\-\fR\fIpass\fR" 4
5700 .IX Item "-fenable-kind-pass"
5701 .PD 0
5702 .IP "\fB\-fdisable\-\fR\fIkind\fR\fB\-\fR\fIpass\fR\fB=\fR\fIrange-list\fR" 4
5703 .IX Item "-fdisable-kind-pass=range-list"
5704 .PD
5705 This is a set of options that are used to explicitly disable/enable
5706 optimization passes.  These options are intended for use for debugging \s-1GCC\s0.
5707 Compiler users should use regular options for enabling/disabling
5708 passes instead.
5709 .RS 4
5710 .IP "\fB\-fdisable\-ipa\-\fR\fIpass\fR" 4
5711 .IX Item "-fdisable-ipa-pass"
5712 Disable \s-1IPA\s0 pass \fIpass\fR. \fIpass\fR is the pass name.  If the same pass is
5713 statically invoked in the compiler multiple times, the pass name should be
5714 appended with a sequential number starting from 1.
5715 .IP "\fB\-fdisable\-rtl\-\fR\fIpass\fR" 4
5716 .IX Item "-fdisable-rtl-pass"
5717 .PD 0
5718 .IP "\fB\-fdisable\-rtl\-\fR\fIpass\fR\fB=\fR\fIrange-list\fR" 4
5719 .IX Item "-fdisable-rtl-pass=range-list"
5720 .PD
5721 Disable \s-1RTL\s0 pass \fIpass\fR.  \fIpass\fR is the pass name.  If the same pass is
5722 statically invoked in the compiler multiple times, the pass name should be
5723 appended with a sequential number starting from 1.  \fIrange-list\fR is a 
5724 comma-separated list of function ranges or assembler names.  Each range is a number
5725 pair separated by a colon.  The range is inclusive in both ends.  If the range
5726 is trivial, the number pair can be simplified as a single number.  If the
5727 function's call graph node's \fIuid\fR falls within one of the specified ranges,
5728 the \fIpass\fR is disabled for that function.  The \fIuid\fR is shown in the
5729 function header of a dump file, and the pass names can be dumped by using
5730 option \fB\-fdump\-passes\fR.
5731 .IP "\fB\-fdisable\-tree\-\fR\fIpass\fR" 4
5732 .IX Item "-fdisable-tree-pass"
5733 .PD 0
5734 .IP "\fB\-fdisable\-tree\-\fR\fIpass\fR\fB=\fR\fIrange-list\fR" 4
5735 .IX Item "-fdisable-tree-pass=range-list"
5736 .PD
5737 Disable tree pass \fIpass\fR.  See \fB\-fdisable\-rtl\fR for the description of
5738 option arguments.
5739 .IP "\fB\-fenable\-ipa\-\fR\fIpass\fR" 4
5740 .IX Item "-fenable-ipa-pass"
5741 Enable \s-1IPA\s0 pass \fIpass\fR.  \fIpass\fR is the pass name.  If the same pass is
5742 statically invoked in the compiler multiple times, the pass name should be
5743 appended with a sequential number starting from 1.
5744 .IP "\fB\-fenable\-rtl\-\fR\fIpass\fR" 4
5745 .IX Item "-fenable-rtl-pass"
5746 .PD 0
5747 .IP "\fB\-fenable\-rtl\-\fR\fIpass\fR\fB=\fR\fIrange-list\fR" 4
5748 .IX Item "-fenable-rtl-pass=range-list"
5749 .PD
5750 Enable \s-1RTL\s0 pass \fIpass\fR.  See \fB\-fdisable\-rtl\fR for option argument
5751 description and examples.
5752 .IP "\fB\-fenable\-tree\-\fR\fIpass\fR" 4
5753 .IX Item "-fenable-tree-pass"
5754 .PD 0
5755 .IP "\fB\-fenable\-tree\-\fR\fIpass\fR\fB=\fR\fIrange-list\fR" 4
5756 .IX Item "-fenable-tree-pass=range-list"
5757 .PD
5758 Enable tree pass \fIpass\fR.  See \fB\-fdisable\-rtl\fR for the description
5759 of option arguments.
5760 .RE
5761 .RS 4
5762 .Sp
5763 Here are some examples showing uses of these options.
5764 .Sp
5765 .Vb 10
5766 \&        # disable ccp1 for all functions
5767 \&           \-fdisable\-tree\-ccp1
5768 \&        # disable complete unroll for function whose cgraph node uid is 1
5769 \&           \-fenable\-tree\-cunroll=1
5770 \&        # disable gcse2 for functions at the following ranges [1,1],
5771 \&        # [300,400], and [400,1000]
5772 \&        # disable gcse2 for functions foo and foo2
5773 \&           \-fdisable\-rtl\-gcse2=foo,foo2
5774 \&        # disable early inlining
5775 \&           \-fdisable\-tree\-einline
5776 \&        # disable ipa inlining
5777 \&           \-fdisable\-ipa\-inline
5778 \&        # enable tree full unroll
5779 \&           \-fenable\-tree\-unroll
5780 .Ve
5781 .RE
5782 .IP "\fB\-d\fR\fIletters\fR" 4
5783 .IX Item "-dletters"
5784 .PD 0
5785 .IP "\fB\-fdump\-rtl\-\fR\fIpass\fR" 4
5786 .IX Item "-fdump-rtl-pass"
5787 .IP "\fB\-fdump\-rtl\-\fR\fIpass\fR\fB=\fR\fIfilename\fR" 4
5788 .IX Item "-fdump-rtl-pass=filename"
5789 .PD
5790 Says to make debugging dumps during compilation at times specified by
5791 \&\fIletters\fR.  This is used for debugging the RTL-based passes of the
5792 compiler.  The file names for most of the dumps are made by appending
5793 a pass number and a word to the \fIdumpname\fR, and the files are
5794 created in the directory of the output file. In case of
5795 \&\fB=\fR\fIfilename\fR option, the dump is output on the given file
5796 instead of the pass numbered dump files. Note that the pass number is
5797 computed statically as passes get registered into the pass manager.
5798 Thus the numbering is not related to the dynamic order of execution of
5799 passes.  In particular, a pass installed by a plugin could have a
5800 number over 200 even if it executed quite early.  \fIdumpname\fR is
5801 generated from the name of the output file, if explicitly specified
5802 and it is not an executable, otherwise it is the basename of the
5803 source file. These switches may have different effects when
5804 \&\fB\-E\fR is used for preprocessing.
5805 .Sp
5806 Debug dumps can be enabled with a \fB\-fdump\-rtl\fR switch or some
5807 \&\fB\-d\fR option \fIletters\fR.  Here are the possible
5808 letters for use in \fIpass\fR and \fIletters\fR, and their meanings:
5809 .RS 4
5810 .IP "\fB\-fdump\-rtl\-alignments\fR" 4
5811 .IX Item "-fdump-rtl-alignments"
5812 Dump after branch alignments have been computed.
5813 .IP "\fB\-fdump\-rtl\-asmcons\fR" 4
5814 .IX Item "-fdump-rtl-asmcons"
5815 Dump after fixing rtl statements that have unsatisfied in/out constraints.
5816 .IP "\fB\-fdump\-rtl\-auto_inc_dec\fR" 4
5817 .IX Item "-fdump-rtl-auto_inc_dec"
5818 Dump after auto-inc-dec discovery.  This pass is only run on
5819 architectures that have auto inc or auto dec instructions.
5820 .IP "\fB\-fdump\-rtl\-barriers\fR" 4
5821 .IX Item "-fdump-rtl-barriers"
5822 Dump after cleaning up the barrier instructions.
5823 .IP "\fB\-fdump\-rtl\-bbpart\fR" 4
5824 .IX Item "-fdump-rtl-bbpart"
5825 Dump after partitioning hot and cold basic blocks.
5826 .IP "\fB\-fdump\-rtl\-bbro\fR" 4
5827 .IX Item "-fdump-rtl-bbro"
5828 Dump after block reordering.
5829 .IP "\fB\-fdump\-rtl\-btl1\fR" 4
5830 .IX Item "-fdump-rtl-btl1"
5831 .PD 0
5832 .IP "\fB\-fdump\-rtl\-btl2\fR" 4
5833 .IX Item "-fdump-rtl-btl2"
5834 .PD
5835 \&\fB\-fdump\-rtl\-btl1\fR and \fB\-fdump\-rtl\-btl2\fR enable dumping
5836 after the two branch
5837 target load optimization passes.
5838 .IP "\fB\-fdump\-rtl\-bypass\fR" 4
5839 .IX Item "-fdump-rtl-bypass"
5840 Dump after jump bypassing and control flow optimizations.
5841 .IP "\fB\-fdump\-rtl\-combine\fR" 4
5842 .IX Item "-fdump-rtl-combine"
5843 Dump after the \s-1RTL\s0 instruction combination pass.
5844 .IP "\fB\-fdump\-rtl\-compgotos\fR" 4
5845 .IX Item "-fdump-rtl-compgotos"
5846 Dump after duplicating the computed gotos.
5847 .IP "\fB\-fdump\-rtl\-ce1\fR" 4
5848 .IX Item "-fdump-rtl-ce1"
5849 .PD 0
5850 .IP "\fB\-fdump\-rtl\-ce2\fR" 4
5851 .IX Item "-fdump-rtl-ce2"
5852 .IP "\fB\-fdump\-rtl\-ce3\fR" 4
5853 .IX Item "-fdump-rtl-ce3"
5854 .PD
5855 \&\fB\-fdump\-rtl\-ce1\fR, \fB\-fdump\-rtl\-ce2\fR, and
5856 \&\fB\-fdump\-rtl\-ce3\fR enable dumping after the three
5857 if conversion passes.
5858 .IP "\fB\-fdump\-rtl\-cprop_hardreg\fR" 4
5859 .IX Item "-fdump-rtl-cprop_hardreg"
5860 Dump after hard register copy propagation.
5861 .IP "\fB\-fdump\-rtl\-csa\fR" 4
5862 .IX Item "-fdump-rtl-csa"
5863 Dump after combining stack adjustments.
5864 .IP "\fB\-fdump\-rtl\-cse1\fR" 4
5865 .IX Item "-fdump-rtl-cse1"
5866 .PD 0
5867 .IP "\fB\-fdump\-rtl\-cse2\fR" 4
5868 .IX Item "-fdump-rtl-cse2"
5869 .PD
5870 \&\fB\-fdump\-rtl\-cse1\fR and \fB\-fdump\-rtl\-cse2\fR enable dumping after
5871 the two common subexpression elimination passes.
5872 .IP "\fB\-fdump\-rtl\-dce\fR" 4
5873 .IX Item "-fdump-rtl-dce"
5874 Dump after the standalone dead code elimination passes.
5875 .IP "\fB\-fdump\-rtl\-dbr\fR" 4
5876 .IX Item "-fdump-rtl-dbr"
5877 Dump after delayed branch scheduling.
5878 .IP "\fB\-fdump\-rtl\-dce1\fR" 4
5879 .IX Item "-fdump-rtl-dce1"
5880 .PD 0
5881 .IP "\fB\-fdump\-rtl\-dce2\fR" 4
5882 .IX Item "-fdump-rtl-dce2"
5883 .PD
5884 \&\fB\-fdump\-rtl\-dce1\fR and \fB\-fdump\-rtl\-dce2\fR enable dumping after
5885 the two dead store elimination passes.
5886 .IP "\fB\-fdump\-rtl\-eh\fR" 4
5887 .IX Item "-fdump-rtl-eh"
5888 Dump after finalization of \s-1EH\s0 handling code.
5889 .IP "\fB\-fdump\-rtl\-eh_ranges\fR" 4
5890 .IX Item "-fdump-rtl-eh_ranges"
5891 Dump after conversion of \s-1EH\s0 handling range regions.
5892 .IP "\fB\-fdump\-rtl\-expand\fR" 4
5893 .IX Item "-fdump-rtl-expand"
5894 Dump after \s-1RTL\s0 generation.
5895 .IP "\fB\-fdump\-rtl\-fwprop1\fR" 4
5896 .IX Item "-fdump-rtl-fwprop1"
5897 .PD 0
5898 .IP "\fB\-fdump\-rtl\-fwprop2\fR" 4
5899 .IX Item "-fdump-rtl-fwprop2"
5900 .PD
5901 \&\fB\-fdump\-rtl\-fwprop1\fR and \fB\-fdump\-rtl\-fwprop2\fR enable
5902 dumping after the two forward propagation passes.
5903 .IP "\fB\-fdump\-rtl\-gcse1\fR" 4
5904 .IX Item "-fdump-rtl-gcse1"
5905 .PD 0
5906 .IP "\fB\-fdump\-rtl\-gcse2\fR" 4
5907 .IX Item "-fdump-rtl-gcse2"
5908 .PD
5909 \&\fB\-fdump\-rtl\-gcse1\fR and \fB\-fdump\-rtl\-gcse2\fR enable dumping
5910 after global common subexpression elimination.
5911 .IP "\fB\-fdump\-rtl\-init\-regs\fR" 4
5912 .IX Item "-fdump-rtl-init-regs"
5913 Dump after the initialization of the registers.
5914 .IP "\fB\-fdump\-rtl\-initvals\fR" 4
5915 .IX Item "-fdump-rtl-initvals"
5916 Dump after the computation of the initial value sets.
5917 .IP "\fB\-fdump\-rtl\-into_cfglayout\fR" 4
5918 .IX Item "-fdump-rtl-into_cfglayout"
5919 Dump after converting to cfglayout mode.
5920 .IP "\fB\-fdump\-rtl\-ira\fR" 4
5921 .IX Item "-fdump-rtl-ira"
5922 Dump after iterated register allocation.
5923 .IP "\fB\-fdump\-rtl\-jump\fR" 4
5924 .IX Item "-fdump-rtl-jump"
5925 Dump after the second jump optimization.
5926 .IP "\fB\-fdump\-rtl\-loop2\fR" 4
5927 .IX Item "-fdump-rtl-loop2"
5928 \&\fB\-fdump\-rtl\-loop2\fR enables dumping after the rtl
5929 loop optimization passes.
5930 .IP "\fB\-fdump\-rtl\-mach\fR" 4
5931 .IX Item "-fdump-rtl-mach"
5932 Dump after performing the machine dependent reorganization pass, if that
5933 pass exists.
5934 .IP "\fB\-fdump\-rtl\-mode_sw\fR" 4
5935 .IX Item "-fdump-rtl-mode_sw"
5936 Dump after removing redundant mode switches.
5937 .IP "\fB\-fdump\-rtl\-rnreg\fR" 4
5938 .IX Item "-fdump-rtl-rnreg"
5939 Dump after register renumbering.
5940 .IP "\fB\-fdump\-rtl\-outof_cfglayout\fR" 4
5941 .IX Item "-fdump-rtl-outof_cfglayout"
5942 Dump after converting from cfglayout mode.
5943 .IP "\fB\-fdump\-rtl\-peephole2\fR" 4
5944 .IX Item "-fdump-rtl-peephole2"
5945 Dump after the peephole pass.
5946 .IP "\fB\-fdump\-rtl\-postreload\fR" 4
5947 .IX Item "-fdump-rtl-postreload"
5948 Dump after post-reload optimizations.
5949 .IP "\fB\-fdump\-rtl\-pro_and_epilogue\fR" 4
5950 .IX Item "-fdump-rtl-pro_and_epilogue"
5951 Dump after generating the function prologues and epilogues.
5952 .IP "\fB\-fdump\-rtl\-sched1\fR" 4
5953 .IX Item "-fdump-rtl-sched1"
5954 .PD 0
5955 .IP "\fB\-fdump\-rtl\-sched2\fR" 4
5956 .IX Item "-fdump-rtl-sched2"
5957 .PD
5958 \&\fB\-fdump\-rtl\-sched1\fR and \fB\-fdump\-rtl\-sched2\fR enable dumping
5959 after the basic block scheduling passes.
5960 .IP "\fB\-fdump\-rtl\-ree\fR" 4
5961 .IX Item "-fdump-rtl-ree"
5962 Dump after sign/zero extension elimination.
5963 .IP "\fB\-fdump\-rtl\-seqabstr\fR" 4
5964 .IX Item "-fdump-rtl-seqabstr"
5965 Dump after common sequence discovery.
5966 .IP "\fB\-fdump\-rtl\-shorten\fR" 4
5967 .IX Item "-fdump-rtl-shorten"
5968 Dump after shortening branches.
5969 .IP "\fB\-fdump\-rtl\-sibling\fR" 4
5970 .IX Item "-fdump-rtl-sibling"
5971 Dump after sibling call optimizations.
5972 .IP "\fB\-fdump\-rtl\-split1\fR" 4
5973 .IX Item "-fdump-rtl-split1"
5974 .PD 0
5975 .IP "\fB\-fdump\-rtl\-split2\fR" 4
5976 .IX Item "-fdump-rtl-split2"
5977 .IP "\fB\-fdump\-rtl\-split3\fR" 4
5978 .IX Item "-fdump-rtl-split3"
5979 .IP "\fB\-fdump\-rtl\-split4\fR" 4
5980 .IX Item "-fdump-rtl-split4"
5981 .IP "\fB\-fdump\-rtl\-split5\fR" 4
5982 .IX Item "-fdump-rtl-split5"
5983 .PD
5984 These options enable dumping after five rounds of
5985 instruction splitting.
5986 .IP "\fB\-fdump\-rtl\-sms\fR" 4
5987 .IX Item "-fdump-rtl-sms"
5988 Dump after modulo scheduling.  This pass is only run on some
5989 architectures.
5990 .IP "\fB\-fdump\-rtl\-stack\fR" 4
5991 .IX Item "-fdump-rtl-stack"
5992 Dump after conversion from \s-1GCC\s0's \*(L"flat register file\*(R" registers to the
5993 x87's stack-like registers.  This pass is only run on x86 variants.
5994 .IP "\fB\-fdump\-rtl\-subreg1\fR" 4
5995 .IX Item "-fdump-rtl-subreg1"
5996 .PD 0
5997 .IP "\fB\-fdump\-rtl\-subreg2\fR" 4
5998 .IX Item "-fdump-rtl-subreg2"
5999 .PD
6000 \&\fB\-fdump\-rtl\-subreg1\fR and \fB\-fdump\-rtl\-subreg2\fR enable dumping after
6001 the two subreg expansion passes.
6002 .IP "\fB\-fdump\-rtl\-unshare\fR" 4
6003 .IX Item "-fdump-rtl-unshare"
6004 Dump after all rtl has been unshared.
6005 .IP "\fB\-fdump\-rtl\-vartrack\fR" 4
6006 .IX Item "-fdump-rtl-vartrack"
6007 Dump after variable tracking.
6008 .IP "\fB\-fdump\-rtl\-vregs\fR" 4
6009 .IX Item "-fdump-rtl-vregs"
6010 Dump after converting virtual registers to hard registers.
6011 .IP "\fB\-fdump\-rtl\-web\fR" 4
6012 .IX Item "-fdump-rtl-web"
6013 Dump after live range splitting.
6014 .IP "\fB\-fdump\-rtl\-regclass\fR" 4
6015 .IX Item "-fdump-rtl-regclass"
6016 .PD 0
6017 .IP "\fB\-fdump\-rtl\-subregs_of_mode_init\fR" 4
6018 .IX Item "-fdump-rtl-subregs_of_mode_init"
6019 .IP "\fB\-fdump\-rtl\-subregs_of_mode_finish\fR" 4
6020 .IX Item "-fdump-rtl-subregs_of_mode_finish"
6021 .IP "\fB\-fdump\-rtl\-dfinit\fR" 4
6022 .IX Item "-fdump-rtl-dfinit"
6023 .IP "\fB\-fdump\-rtl\-dfinish\fR" 4
6024 .IX Item "-fdump-rtl-dfinish"
6025 .PD
6026 These dumps are defined but always produce empty files.
6027 .IP "\fB\-da\fR" 4
6028 .IX Item "-da"
6029 .PD 0
6030 .IP "\fB\-fdump\-rtl\-all\fR" 4
6031 .IX Item "-fdump-rtl-all"
6032 .PD
6033 Produce all the dumps listed above.
6034 .IP "\fB\-dA\fR" 4
6035 .IX Item "-dA"
6036 Annotate the assembler output with miscellaneous debugging information.
6037 .IP "\fB\-dD\fR" 4
6038 .IX Item "-dD"
6039 Dump all macro definitions, at the end of preprocessing, in addition to
6040 normal output.
6041 .IP "\fB\-dH\fR" 4
6042 .IX Item "-dH"
6043 Produce a core dump whenever an error occurs.
6044 .IP "\fB\-dp\fR" 4
6045 .IX Item "-dp"
6046 Annotate the assembler output with a comment indicating which
6047 pattern and alternative is used.  The length of each instruction is
6048 also printed.
6049 .IP "\fB\-dP\fR" 4
6050 .IX Item "-dP"
6051 Dump the \s-1RTL\s0 in the assembler output as a comment before each instruction.
6052 Also turns on \fB\-dp\fR annotation.
6053 .IP "\fB\-dx\fR" 4
6054 .IX Item "-dx"
6055 Just generate \s-1RTL\s0 for a function instead of compiling it.  Usually used
6056 with \fB\-fdump\-rtl\-expand\fR.
6057 .RE
6058 .RS 4
6059 .RE
6060 .IP "\fB\-fdump\-noaddr\fR" 4
6061 .IX Item "-fdump-noaddr"
6062 When doing debugging dumps, suppress address output.  This makes it more
6063 feasible to use diff on debugging dumps for compiler invocations with
6064 different compiler binaries and/or different
6065 text / bss / data / heap / stack / dso start locations.
6066 .IP "\fB\-freport\-bug\fR" 4
6067 .IX Item "-freport-bug"
6068 Collect and dump debug information into temporary file if \s-1ICE\s0 in C/\*(C+
6069 compiler occured.
6070 .IP "\fB\-fdump\-unnumbered\fR" 4
6071 .IX Item "-fdump-unnumbered"
6072 When doing debugging dumps, suppress instruction numbers and address output.
6073 This makes it more feasible to use diff on debugging dumps for compiler
6074 invocations with different options, in particular with and without
6075 \&\fB\-g\fR.
6076 .IP "\fB\-fdump\-unnumbered\-links\fR" 4
6077 .IX Item "-fdump-unnumbered-links"
6078 When doing debugging dumps (see \fB\-d\fR option above), suppress
6079 instruction numbers for the links to the previous and next instructions
6080 in a sequence.
6081 .IP "\fB\-fdump\-translation\-unit\fR (\*(C+ only)" 4
6082 .IX Item "-fdump-translation-unit ( only)"
6083 .PD 0
6084 .IP "\fB\-fdump\-translation\-unit\-\fR\fIoptions\fR\fB \fR(\*(C+ only)" 4
6085 .IX Item "-fdump-translation-unit-options ( only)"
6086 .PD
6087 Dump a representation of the tree structure for the entire translation
6088 unit to a file.  The file name is made by appending \fI.tu\fR to the
6089 source file name, and the file is created in the same directory as the
6090 output file.  If the \fB\-\fR\fIoptions\fR form is used, \fIoptions\fR
6091 controls the details of the dump as described for the
6092 \&\fB\-fdump\-tree\fR options.
6093 .IP "\fB\-fdump\-class\-hierarchy\fR (\*(C+ only)" 4
6094 .IX Item "-fdump-class-hierarchy ( only)"
6095 .PD 0
6096 .IP "\fB\-fdump\-class\-hierarchy\-\fR\fIoptions\fR\fB \fR(\*(C+ only)" 4
6097 .IX Item "-fdump-class-hierarchy-options ( only)"
6098 .PD
6099 Dump a representation of each class's hierarchy and virtual function
6100 table layout to a file.  The file name is made by appending
6101 \&\fI.class\fR to the source file name, and the file is created in the
6102 same directory as the output file.  If the \fB\-\fR\fIoptions\fR form
6103 is used, \fIoptions\fR controls the details of the dump as described
6104 for the \fB\-fdump\-tree\fR options.
6105 .IP "\fB\-fdump\-ipa\-\fR\fIswitch\fR" 4
6106 .IX Item "-fdump-ipa-switch"
6107 Control the dumping at various stages of inter-procedural analysis
6108 language tree to a file.  The file name is generated by appending a
6109 switch specific suffix to the source file name, and the file is created
6110 in the same directory as the output file.  The following dumps are
6111 possible:
6112 .RS 4
6113 .IP "\fBall\fR" 4
6114 .IX Item "all"
6115 Enables all inter-procedural analysis dumps.
6116 .IP "\fBcgraph\fR" 4
6117 .IX Item "cgraph"
6118 Dumps information about call-graph optimization, unused function removal,
6119 and inlining decisions.
6120 .IP "\fBinline\fR" 4
6121 .IX Item "inline"
6122 Dump after function inlining.
6123 .RE
6124 .RS 4
6125 .RE
6126 .IP "\fB\-fdump\-passes\fR" 4
6127 .IX Item "-fdump-passes"
6128 Dump the list of optimization passes that are turned on and off by
6129 the current command-line options.
6130 .IP "\fB\-fdump\-statistics\-\fR\fIoption\fR" 4
6131 .IX Item "-fdump-statistics-option"
6132 Enable and control dumping of pass statistics in a separate file.  The
6133 file name is generated by appending a suffix ending in
6134 \&\fB.statistics\fR to the source file name, and the file is created in
6135 the same directory as the output file.  If the \fB\-\fR\fIoption\fR
6136 form is used, \fB\-stats\fR causes counters to be summed over the
6137 whole compilation unit while \fB\-details\fR dumps every event as
6138 the passes generate them.  The default with no option is to sum
6139 counters for each function compiled.
6140 .IP "\fB\-fdump\-tree\-\fR\fIswitch\fR" 4
6141 .IX Item "-fdump-tree-switch"
6142 .PD 0
6143 .IP "\fB\-fdump\-tree\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR" 4
6144 .IX Item "-fdump-tree-switch-options"
6145 .IP "\fB\-fdump\-tree\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR\fB=\fR\fIfilename\fR" 4
6146 .IX Item "-fdump-tree-switch-options=filename"
6147 .PD
6148 Control the dumping at various stages of processing the intermediate
6149 language tree to a file.  The file name is generated by appending a
6150 switch-specific suffix to the source file name, and the file is
6151 created in the same directory as the output file. In case of
6152 \&\fB=\fR\fIfilename\fR option, the dump is output on the given file
6153 instead of the auto named dump files.  If the \fB\-\fR\fIoptions\fR
6154 form is used, \fIoptions\fR is a list of \fB\-\fR separated options
6155 which control the details of the dump.  Not all options are applicable
6156 to all dumps; those that are not meaningful are ignored.  The
6157 following options are available
6158 .RS 4
6159 .IP "\fBaddress\fR" 4
6160 .IX Item "address"
6161 Print the address of each node.  Usually this is not meaningful as it
6162 changes according to the environment and source file.  Its primary use
6163 is for tying up a dump file with a debug environment.
6164 .IP "\fBasmname\fR" 4
6165 .IX Item "asmname"
6166 If \f(CW\*(C`DECL_ASSEMBLER_NAME\*(C'\fR has been set for a given decl, use that
6167 in the dump instead of \f(CW\*(C`DECL_NAME\*(C'\fR.  Its primary use is ease of
6168 use working backward from mangled names in the assembly file.
6169 .IP "\fBslim\fR" 4
6170 .IX Item "slim"
6171 When dumping front-end intermediate representations, inhibit dumping
6172 of members of a scope or body of a function merely because that scope
6173 has been reached.  Only dump such items when they are directly reachable
6174 by some other path.
6175 .Sp
6176 When dumping pretty-printed trees, this option inhibits dumping the
6177 bodies of control structures.
6178 .Sp
6179 When dumping \s-1RTL\s0, print the \s-1RTL\s0 in slim (condensed) form instead of
6180 the default LISP-like representation.
6181 .IP "\fBraw\fR" 4
6182 .IX Item "raw"
6183 Print a raw representation of the tree.  By default, trees are
6184 pretty-printed into a C\-like representation.
6185 .IP "\fBdetails\fR" 4
6186 .IX Item "details"
6187 Enable more detailed dumps (not honored by every dump option). Also
6188 include information from the optimization passes.
6189 .IP "\fBstats\fR" 4
6190 .IX Item "stats"
6191 Enable dumping various statistics about the pass (not honored by every dump
6192 option).
6193 .IP "\fBblocks\fR" 4
6194 .IX Item "blocks"
6195 Enable showing basic block boundaries (disabled in raw dumps).
6196 .IP "\fBgraph\fR" 4
6197 .IX Item "graph"
6198 For each of the other indicated dump files (\fB\-fdump\-rtl\-\fR\fIpass\fR),
6199 dump a representation of the control flow graph suitable for viewing with
6200 GraphViz to \fI\fIfile\fI.\fIpassid\fI.\fIpass\fI.dot\fR.  Each function in
6201 the file is pretty-printed as a subgraph, so that GraphViz can render them
6202 all in a single plot.
6203 .Sp
6204 This option currently only works for \s-1RTL\s0 dumps, and the \s-1RTL\s0 is always
6205 dumped in slim form.
6206 .IP "\fBvops\fR" 4
6207 .IX Item "vops"
6208 Enable showing virtual operands for every statement.
6209 .IP "\fBlineno\fR" 4
6210 .IX Item "lineno"
6211 Enable showing line numbers for statements.
6212 .IP "\fBuid\fR" 4
6213 .IX Item "uid"
6214 Enable showing the unique \s-1ID\s0 (\f(CW\*(C`DECL_UID\*(C'\fR) for each variable.
6215 .IP "\fBverbose\fR" 4
6216 .IX Item "verbose"
6217 Enable showing the tree dump for each statement.
6218 .IP "\fBeh\fR" 4
6219 .IX Item "eh"
6220 Enable showing the \s-1EH\s0 region number holding each statement.
6221 .IP "\fBscev\fR" 4
6222 .IX Item "scev"
6223 Enable showing scalar evolution analysis details.
6224 .IP "\fBoptimized\fR" 4
6225 .IX Item "optimized"
6226 Enable showing optimization information (only available in certain
6227 passes).
6228 .IP "\fBmissed\fR" 4
6229 .IX Item "missed"
6230 Enable showing missed optimization information (only available in certain
6231 passes).
6232 .IP "\fBnote\fR" 4
6233 .IX Item "note"
6234 Enable other detailed optimization information (only available in
6235 certain passes).
6236 .IP "\fB=\fR\fIfilename\fR" 4
6237 .IX Item "=filename"
6238 Instead of an auto named dump file, output into the given file
6239 name. The file names \fIstdout\fR and \fIstderr\fR are treated
6240 specially and are considered already open standard streams. For
6241 example,
6242 .Sp
6243 .Vb 2
6244 \&        gcc \-O2 \-ftree\-vectorize \-fdump\-tree\-vect\-blocks=foo.dump
6245 \&             \-fdump\-tree\-pre=stderr file.c
6246 .Ve
6247 .Sp
6248 outputs vectorizer dump into \fIfoo.dump\fR, while the \s-1PRE\s0 dump is
6249 output on to \fIstderr\fR. If two conflicting dump filenames are
6250 given for the same pass, then the latter option overrides the earlier
6251 one.
6252 .IP "\fBall\fR" 4
6253 .IX Item "all"
6254 Turn on all options, except \fBraw\fR, \fBslim\fR, \fBverbose\fR
6255 and \fBlineno\fR.
6256 .IP "\fBoptall\fR" 4
6257 .IX Item "optall"
6258 Turn on all optimization options, i.e., \fBoptimized\fR,
6259 \&\fBmissed\fR, and \fBnote\fR.
6260 .RE
6261 .RS 4
6262 .Sp
6263 The following tree dumps are possible:
6264 .IP "\fBoriginal\fR" 4
6265 .IX Item "original"
6266 Dump before any tree based optimization, to \fI\fIfile\fI.original\fR.
6267 .IP "\fBoptimized\fR" 4
6268 .IX Item "optimized"
6269 Dump after all tree based optimization, to \fI\fIfile\fI.optimized\fR.
6270 .IP "\fBgimple\fR" 4
6271 .IX Item "gimple"
6272 Dump each function before and after the gimplification pass to a file.  The
6273 file name is made by appending \fI.gimple\fR to the source file name.
6274 .IP "\fBcfg\fR" 4
6275 .IX Item "cfg"
6276 Dump the control flow graph of each function to a file.  The file name is
6277 made by appending \fI.cfg\fR to the source file name.
6278 .IP "\fBch\fR" 4
6279 .IX Item "ch"
6280 Dump each function after copying loop headers.  The file name is made by
6281 appending \fI.ch\fR to the source file name.
6282 .IP "\fBssa\fR" 4
6283 .IX Item "ssa"
6284 Dump \s-1SSA\s0 related information to a file.  The file name is made by appending
6285 \&\fI.ssa\fR to the source file name.
6286 .IP "\fBalias\fR" 4
6287 .IX Item "alias"
6288 Dump aliasing information for each function.  The file name is made by
6289 appending \fI.alias\fR to the source file name.
6290 .IP "\fBccp\fR" 4
6291 .IX Item "ccp"
6292 Dump each function after \s-1CCP\s0.  The file name is made by appending
6293 \&\fI.ccp\fR to the source file name.
6294 .IP "\fBstoreccp\fR" 4
6295 .IX Item "storeccp"
6296 Dump each function after STORE-CCP.  The file name is made by appending
6297 \&\fI.storeccp\fR to the source file name.
6298 .IP "\fBpre\fR" 4
6299 .IX Item "pre"
6300 Dump trees after partial redundancy elimination.  The file name is made
6301 by appending \fI.pre\fR to the source file name.
6302 .IP "\fBfre\fR" 4
6303 .IX Item "fre"
6304 Dump trees after full redundancy elimination.  The file name is made
6305 by appending \fI.fre\fR to the source file name.
6306 .IP "\fBcopyprop\fR" 4
6307 .IX Item "copyprop"
6308 Dump trees after copy propagation.  The file name is made
6309 by appending \fI.copyprop\fR to the source file name.
6310 .IP "\fBstore_copyprop\fR" 4
6311 .IX Item "store_copyprop"
6312 Dump trees after store copy-propagation.  The file name is made
6313 by appending \fI.store_copyprop\fR to the source file name.
6314 .IP "\fBdce\fR" 4
6315 .IX Item "dce"
6316 Dump each function after dead code elimination.  The file name is made by
6317 appending \fI.dce\fR to the source file name.
6318 .IP "\fBsra\fR" 4
6319 .IX Item "sra"
6320 Dump each function after performing scalar replacement of aggregates.  The
6321 file name is made by appending \fI.sra\fR to the source file name.
6322 .IP "\fBsink\fR" 4
6323 .IX Item "sink"
6324 Dump each function after performing code sinking.  The file name is made
6325 by appending \fI.sink\fR to the source file name.
6326 .IP "\fBdom\fR" 4
6327 .IX Item "dom"
6328 Dump each function after applying dominator tree optimizations.  The file
6329 name is made by appending \fI.dom\fR to the source file name.
6330 .IP "\fBdse\fR" 4
6331 .IX Item "dse"
6332 Dump each function after applying dead store elimination.  The file
6333 name is made by appending \fI.dse\fR to the source file name.
6334 .IP "\fBphiopt\fR" 4
6335 .IX Item "phiopt"
6336 Dump each function after optimizing \s-1PHI\s0 nodes into straightline code.  The file
6337 name is made by appending \fI.phiopt\fR to the source file name.
6338 .IP "\fBforwprop\fR" 4
6339 .IX Item "forwprop"
6340 Dump each function after forward propagating single use variables.  The file
6341 name is made by appending \fI.forwprop\fR to the source file name.
6342 .IP "\fBcopyrename\fR" 4
6343 .IX Item "copyrename"
6344 Dump each function after applying the copy rename optimization.  The file
6345 name is made by appending \fI.copyrename\fR to the source file name.
6346 .IP "\fBnrv\fR" 4
6347 .IX Item "nrv"
6348 Dump each function after applying the named return value optimization on
6349 generic trees.  The file name is made by appending \fI.nrv\fR to the source
6350 file name.
6351 .IP "\fBvect\fR" 4
6352 .IX Item "vect"
6353 Dump each function after applying vectorization of loops.  The file name is
6354 made by appending \fI.vect\fR to the source file name.
6355 .IP "\fBslp\fR" 4
6356 .IX Item "slp"
6357 Dump each function after applying vectorization of basic blocks.  The file name
6358 is made by appending \fI.slp\fR to the source file name.
6359 .IP "\fBvrp\fR" 4
6360 .IX Item "vrp"
6361 Dump each function after Value Range Propagation (\s-1VRP\s0).  The file name
6362 is made by appending \fI.vrp\fR to the source file name.
6363 .IP "\fBall\fR" 4
6364 .IX Item "all"
6365 Enable all the available tree dumps with the flags provided in this option.
6366 .RE
6367 .RS 4
6368 .RE
6369 .IP "\fB\-fopt\-info\fR" 4
6370 .IX Item "-fopt-info"
6371 .PD 0
6372 .IP "\fB\-fopt\-info\-\fR\fIoptions\fR" 4
6373 .IX Item "-fopt-info-options"
6374 .IP "\fB\-fopt\-info\-\fR\fIoptions\fR\fB=\fR\fIfilename\fR" 4
6375 .IX Item "-fopt-info-options=filename"
6376 .PD
6377 Controls optimization dumps from various optimization passes. If the
6378 \&\fB\-\fR\fIoptions\fR form is used, \fIoptions\fR is a list of
6379 \&\fB\-\fR separated option keywords to select the dump details and
6380 optimizations.
6381 .Sp
6382 The \fIoptions\fR can be divided into two groups: options describing the
6383 verbosity of the dump, and options describing which optimizations
6384 should be included. The options from both the groups can be freely
6385 mixed as they are non-overlapping. However, in case of any conflicts,
6386 the later options override the earlier options on the command
6387 line.
6388 .Sp
6389 The following options control the dump verbosity:
6390 .RS 4
6391 .IP "\fBoptimized\fR" 4
6392 .IX Item "optimized"
6393 Print information when an optimization is successfully applied. It is
6394 up to a pass to decide which information is relevant. For example, the
6395 vectorizer passes print the source location of loops which are
6396 successfully vectorized.
6397 .IP "\fBmissed\fR" 4
6398 .IX Item "missed"
6399 Print information about missed optimizations. Individual passes
6400 control which information to include in the output.
6401 .IP "\fBnote\fR" 4
6402 .IX Item "note"
6403 Print verbose information about optimizations, such as certain
6404 transformations, more detailed messages about decisions etc.
6405 .IP "\fBall\fR" 4
6406 .IX Item "all"
6407 Print detailed optimization information. This includes
6408 \&\fBoptimized\fR, \fBmissed\fR, and \fBnote\fR.
6409 .RE
6410 .RS 4
6411 .Sp
6412 One or more of the following option keywords can be used to describe a
6413 group of optimizations:
6414 .IP "\fBipa\fR" 4
6415 .IX Item "ipa"
6416 Enable dumps from all interprocedural optimizations.
6417 .IP "\fBloop\fR" 4
6418 .IX Item "loop"
6419 Enable dumps from all loop optimizations.
6420 .IP "\fBinline\fR" 4
6421 .IX Item "inline"
6422 Enable dumps from all inlining optimizations.
6423 .IP "\fBvec\fR" 4
6424 .IX Item "vec"
6425 Enable dumps from all vectorization optimizations.
6426 .IP "\fBoptall\fR" 4
6427 .IX Item "optall"
6428 Enable dumps from all optimizations. This is a superset of
6429 the optimization groups listed above.
6430 .RE
6431 .RS 4
6432 .Sp
6433 If \fIoptions\fR is
6434 omitted, it defaults to \fBoptimized-optall\fR, which means to dump all
6435 info about successful optimizations from all the passes.
6436 .Sp
6437 If the \fIfilename\fR is provided, then the dumps from all the
6438 applicable optimizations are concatenated into the \fIfilename\fR.
6439 Otherwise the dump is output onto \fIstderr\fR. Though multiple
6440 \&\fB\-fopt\-info\fR options are accepted, only one of them can include
6441 a \fIfilename\fR. If other filenames are provided then all but the
6442 first such option are ignored.
6443 .Sp
6444 Note that the output \fIfilename\fR is overwritten
6445 in case of multiple translation units. If a combined output from
6446 multiple translation units is desired, \fIstderr\fR should be used
6447 instead.
6448 .Sp
6449 In the following example, the optimization info is output to
6450 \&\fIstderr\fR:
6451 .Sp
6452 .Vb 1
6453 \&        gcc \-O3 \-fopt\-info
6454 .Ve
6455 .Sp
6456 This example:
6457 .Sp
6458 .Vb 1
6459 \&        gcc \-O3 \-fopt\-info\-missed=missed.all
6460 .Ve
6461 .Sp
6462 outputs missed optimization report from all the passes into
6463 \&\fImissed.all\fR, and this one:
6464 .Sp
6465 .Vb 1
6466 \&        gcc \-O2 \-ftree\-vectorize \-fopt\-info\-vec\-missed
6467 .Ve
6468 .Sp
6469 prints information about missed optimization opportunities from
6470 vectorization passes on \fIstderr\fR.  
6471 Note that \fB\-fopt\-info\-vec\-missed\fR is equivalent to 
6472 \&\fB\-fopt\-info\-missed\-vec\fR.
6473 .Sp
6474 As another example,
6475 .Sp
6476 .Vb 1
6477 \&        gcc \-O3 \-fopt\-info\-inline\-optimized\-missed=inline.txt
6478 .Ve
6479 .Sp
6480 outputs information about missed optimizations as well as
6481 optimized locations from all the inlining passes into
6482 \&\fIinline.txt\fR.
6483 .Sp
6484 Finally, consider:
6485 .Sp
6486 .Vb 1
6487 \&        gcc \-fopt\-info\-vec\-missed=vec.miss \-fopt\-info\-loop\-optimized=loop.opt
6488 .Ve
6489 .Sp
6490 Here the two output filenames \fIvec.miss\fR and \fIloop.opt\fR are
6491 in conflict since only one output file is allowed. In this case, only
6492 the first option takes effect and the subsequent options are
6493 ignored. Thus only \fIvec.miss\fR is produced which contains
6494 dumps from the vectorizer about missed opportunities.
6495 .RE
6496 .IP "\fB\-frandom\-seed=\fR\fIstring\fR" 4
6497 .IX Item "-frandom-seed=string"
6498 This option provides a seed that \s-1GCC\s0 uses in place of
6499 random numbers in generating certain symbol names
6500 that have to be different in every compiled file.  It is also used to
6501 place unique stamps in coverage data files and the object files that
6502 produce them.  You can use the \fB\-frandom\-seed\fR option to produce
6503 reproducibly identical object files.
6504 .Sp
6505 The \fIstring\fR can either be a number (decimal, octal or hex) or an
6506 arbitrary string (in which case it's converted to a number by
6507 computing \s-1CRC32\s0).
6508 .Sp
6509 The \fIstring\fR should be different for every file you compile.
6510 .IP "\fB\-fsched\-verbose=\fR\fIn\fR" 4
6511 .IX Item "-fsched-verbose=n"
6512 On targets that use instruction scheduling, this option controls the
6513 amount of debugging output the scheduler prints.  This information is
6514 written to standard error, unless \fB\-fdump\-rtl\-sched1\fR or
6515 \&\fB\-fdump\-rtl\-sched2\fR is specified, in which case it is output
6516 to the usual dump listing file, \fI.sched1\fR or \fI.sched2\fR
6517 respectively.  However for \fIn\fR greater than nine, the output is
6518 always printed to standard error.
6519 .Sp
6520 For \fIn\fR greater than zero, \fB\-fsched\-verbose\fR outputs the
6521 same information as \fB\-fdump\-rtl\-sched1\fR and \fB\-fdump\-rtl\-sched2\fR.
6522 For \fIn\fR greater than one, it also output basic block probabilities,
6523 detailed ready list information and unit/insn info.  For \fIn\fR greater
6524 than two, it includes \s-1RTL\s0 at abort point, control-flow and regions info.
6525 And for \fIn\fR over four, \fB\-fsched\-verbose\fR also includes
6526 dependence info.
6527 .IP "\fB\-save\-temps\fR" 4
6528 .IX Item "-save-temps"
6529 .PD 0
6530 .IP "\fB\-save\-temps=cwd\fR" 4
6531 .IX Item "-save-temps=cwd"
6532 .PD
6533 Store the usual \*(L"temporary\*(R" intermediate files permanently; place them
6534 in the current directory and name them based on the source file.  Thus,
6535 compiling \fIfoo.c\fR with \fB\-c \-save\-temps\fR produces files
6536 \&\fIfoo.i\fR and \fIfoo.s\fR, as well as \fIfoo.o\fR.  This creates a
6537 preprocessed \fIfoo.i\fR output file even though the compiler now
6538 normally uses an integrated preprocessor.
6539 .Sp
6540 When used in combination with the \fB\-x\fR command-line option,
6541 \&\fB\-save\-temps\fR is sensible enough to avoid over writing an
6542 input source file with the same extension as an intermediate file.
6543 The corresponding intermediate file may be obtained by renaming the
6544 source file before using \fB\-save\-temps\fR.
6545 .Sp
6546 If you invoke \s-1GCC\s0 in parallel, compiling several different source
6547 files that share a common base name in different subdirectories or the
6548 same source file compiled for multiple output destinations, it is
6549 likely that the different parallel compilers will interfere with each
6550 other, and overwrite the temporary files.  For instance:
6551 .Sp
6552 .Vb 2
6553 \&        gcc \-save\-temps \-o outdir1/foo.o indir1/foo.c&
6554 \&        gcc \-save\-temps \-o outdir2/foo.o indir2/foo.c&
6555 .Ve
6556 .Sp
6557 may result in \fIfoo.i\fR and \fIfoo.o\fR being written to
6558 simultaneously by both compilers.
6559 .IP "\fB\-save\-temps=obj\fR" 4
6560 .IX Item "-save-temps=obj"
6561 Store the usual \*(L"temporary\*(R" intermediate files permanently.  If the
6562 \&\fB\-o\fR option is used, the temporary files are based on the
6563 object file.  If the \fB\-o\fR option is not used, the
6564 \&\fB\-save\-temps=obj\fR switch behaves like \fB\-save\-temps\fR.
6565 .Sp
6566 For example:
6567 .Sp
6568 .Vb 3
6569 \&        gcc \-save\-temps=obj \-c foo.c
6570 \&        gcc \-save\-temps=obj \-c bar.c \-o dir/xbar.o
6571 \&        gcc \-save\-temps=obj foobar.c \-o dir2/yfoobar
6572 .Ve
6573 .Sp
6574 creates \fIfoo.i\fR, \fIfoo.s\fR, \fIdir/xbar.i\fR,
6575 \&\fIdir/xbar.s\fR, \fIdir2/yfoobar.i\fR, \fIdir2/yfoobar.s\fR, and
6576 \&\fIdir2/yfoobar.o\fR.
6577 .IP "\fB\-time\fR[\fB=\fR\fIfile\fR]" 4
6578 .IX Item "-time[=file]"
6579 Report the \s-1CPU\s0 time taken by each subprocess in the compilation
6580 sequence.  For C source files, this is the compiler proper and assembler
6581 (plus the linker if linking is done).
6582 .Sp
6583 Without the specification of an output file, the output looks like this:
6584 .Sp
6585 .Vb 2
6586 \&        # cc1 0.12 0.01
6587 \&        # as 0.00 0.01
6588 .Ve
6589 .Sp
6590 The first number on each line is the \*(L"user time\*(R", that is time spent
6591 executing the program itself.  The second number is \*(L"system time\*(R",
6592 time spent executing operating system routines on behalf of the program.
6593 Both numbers are in seconds.
6594 .Sp
6595 With the specification of an output file, the output is appended to the
6596 named file, and it looks like this:
6597 .Sp
6598 .Vb 2
6599 \&        0.12 0.01 cc1 <options>
6600 \&        0.00 0.01 as <options>
6601 .Ve
6602 .Sp
6603 The \*(L"user time\*(R" and the \*(L"system time\*(R" are moved before the program
6604 name, and the options passed to the program are displayed, so that one
6605 can later tell what file was being compiled, and with which options.
6606 .IP "\fB\-fvar\-tracking\fR" 4
6607 .IX Item "-fvar-tracking"
6608 Run variable tracking pass.  It computes where variables are stored at each
6609 position in code.  Better debugging information is then generated
6610 (if the debugging information format supports this information).
6611 .Sp
6612 It is enabled by default when compiling with optimization (\fB\-Os\fR,
6613 \&\fB\-O\fR, \fB\-O2\fR, ...), debugging information (\fB\-g\fR) and
6614 the debug info format supports it.
6615 .IP "\fB\-fvar\-tracking\-assignments\fR" 4
6616 .IX Item "-fvar-tracking-assignments"
6617 Annotate assignments to user variables early in the compilation and
6618 attempt to carry the annotations over throughout the compilation all the
6619 way to the end, in an attempt to improve debug information while
6620 optimizing.  Use of \fB\-gdwarf\-4\fR is recommended along with it.
6621 .Sp
6622 It can be enabled even if var-tracking is disabled, in which case
6623 annotations are created and maintained, but discarded at the end.
6624 By default, this flag is enabled together with \fB\-fvar\-tracking\fR,
6625 except when selective scheduling is enabled.
6626 .IP "\fB\-fvar\-tracking\-assignments\-toggle\fR" 4
6627 .IX Item "-fvar-tracking-assignments-toggle"
6628 Toggle \fB\-fvar\-tracking\-assignments\fR, in the same way that
6629 \&\fB\-gtoggle\fR toggles \fB\-g\fR.
6630 .IP "\fB\-print\-file\-name=\fR\fIlibrary\fR" 4
6631 .IX Item "-print-file-name=library"
6632 Print the full absolute name of the library file \fIlibrary\fR that
6633 would be used when linking\-\-\-and don't do anything else.  With this
6634 option, \s-1GCC\s0 does not compile or link anything; it just prints the
6635 file name.
6636 .IP "\fB\-print\-multi\-directory\fR" 4
6637 .IX Item "-print-multi-directory"
6638 Print the directory name corresponding to the multilib selected by any
6639 other switches present in the command line.  This directory is supposed
6640 to exist in \fB\s-1GCC_EXEC_PREFIX\s0\fR.
6641 .IP "\fB\-print\-multi\-lib\fR" 4
6642 .IX Item "-print-multi-lib"
6643 Print the mapping from multilib directory names to compiler switches
6644 that enable them.  The directory name is separated from the switches by
6645 \&\fB;\fR, and each switch starts with an \fB@\fR instead of the
6646 \&\fB\-\fR, without spaces between multiple switches.  This is supposed to
6647 ease shell processing.
6648 .IP "\fB\-print\-multi\-os\-directory\fR" 4
6649 .IX Item "-print-multi-os-directory"
6650 Print the path to \s-1OS\s0 libraries for the selected
6651 multilib, relative to some \fIlib\fR subdirectory.  If \s-1OS\s0 libraries are
6652 present in the \fIlib\fR subdirectory and no multilibs are used, this is
6653 usually just \fI.\fR, if \s-1OS\s0 libraries are present in \fIlib\fIsuffix\fI\fR
6654 sibling directories this prints e.g. \fI../lib64\fR, \fI../lib\fR or
6655 \&\fI../lib32\fR, or if \s-1OS\s0 libraries are present in \fIlib/\fIsubdir\fI\fR
6656 subdirectories it prints e.g. \fIamd64\fR, \fIsparcv9\fR or \fIev6\fR.
6657 .IP "\fB\-print\-multiarch\fR" 4
6658 .IX Item "-print-multiarch"
6659 Print the path to \s-1OS\s0 libraries for the selected multiarch,
6660 relative to some \fIlib\fR subdirectory.
6661 .IP "\fB\-print\-prog\-name=\fR\fIprogram\fR" 4
6662 .IX Item "-print-prog-name=program"
6663 Like \fB\-print\-file\-name\fR, but searches for a program such as \fBcpp\fR.
6664 .IP "\fB\-print\-libgcc\-file\-name\fR" 4
6665 .IX Item "-print-libgcc-file-name"
6666 Same as \fB\-print\-file\-name=libgcc.a\fR.
6667 .Sp
6668 This is useful when you use \fB\-nostdlib\fR or \fB\-nodefaultlibs\fR
6669 but you do want to link with \fIlibgcc.a\fR.  You can do:
6670 .Sp
6671 .Vb 1
6672 \&        gcc \-nostdlib <files>... \`gcc \-print\-libgcc\-file\-name\`
6673 .Ve
6674 .IP "\fB\-print\-search\-dirs\fR" 4
6675 .IX Item "-print-search-dirs"
6676 Print the name of the configured installation directory and a list of
6677 program and library directories \fBgcc\fR searches\-\-\-and don't do anything else.
6678 .Sp
6679 This is useful when \fBgcc\fR prints the error message
6680 \&\fBinstallation problem, cannot exec cpp0: No such file or directory\fR.
6681 To resolve this you either need to put \fIcpp0\fR and the other compiler
6682 components where \fBgcc\fR expects to find them, or you can set the environment
6683 variable \fB\s-1GCC_EXEC_PREFIX\s0\fR to the directory where you installed them.
6684 Don't forget the trailing \fB/\fR.
6685 .IP "\fB\-print\-sysroot\fR" 4
6686 .IX Item "-print-sysroot"
6687 Print the target sysroot directory that is used during
6688 compilation.  This is the target sysroot specified either at configure
6689 time or using the \fB\-\-sysroot\fR option, possibly with an extra
6690 suffix that depends on compilation options.  If no target sysroot is
6691 specified, the option prints nothing.
6692 .IP "\fB\-print\-sysroot\-headers\-suffix\fR" 4
6693 .IX Item "-print-sysroot-headers-suffix"
6694 Print the suffix added to the target sysroot when searching for
6695 headers, or give an error if the compiler is not configured with such
6696 a suffix\-\-\-and don't do anything else.
6697 .IP "\fB\-dumpmachine\fR" 4
6698 .IX Item "-dumpmachine"
6699 Print the compiler's target machine (for example,
6700 \&\fBi686\-pc\-linux\-gnu\fR)\-\-\-and don't do anything else.
6701 .IP "\fB\-dumpversion\fR" 4
6702 .IX Item "-dumpversion"
6703 Print the compiler version (for example, \f(CW3.0\fR)\-\-\-and don't do
6704 anything else.
6705 .IP "\fB\-dumpspecs\fR" 4
6706 .IX Item "-dumpspecs"
6707 Print the compiler's built-in specs\-\-\-and don't do anything else.  (This
6708 is used when \s-1GCC\s0 itself is being built.)
6709 .IP "\fB\-fno\-eliminate\-unused\-debug\-types\fR" 4
6710 .IX Item "-fno-eliminate-unused-debug-types"
6711 Normally, when producing \s-1DWARF\s0 2 output, \s-1GCC\s0 avoids producing debug symbol 
6712 output for types that are nowhere used in the source file being compiled.
6713 Sometimes it is useful to have \s-1GCC\s0 emit debugging
6714 information for all types declared in a compilation
6715 unit, regardless of whether or not they are actually used
6716 in that compilation unit, for example 
6717 if, in the debugger, you want to cast a value to a type that is
6718 not actually used in your program (but is declared).  More often,
6719 however, this results in a significant amount of wasted space.
6720 .Sh "Options That Control Optimization"
6721 .IX Subsection "Options That Control Optimization"
6722 These options control various sorts of optimizations.
6723 .PP
6724 Without any optimization option, the compiler's goal is to reduce the
6725 cost of compilation and to make debugging produce the expected
6726 results.  Statements are independent: if you stop the program with a
6727 breakpoint between statements, you can then assign a new value to any
6728 variable or change the program counter to any other statement in the
6729 function and get exactly the results you expect from the source
6730 code.
6731 .PP
6732 Turning on optimization flags makes the compiler attempt to improve
6733 the performance and/or code size at the expense of compilation time
6734 and possibly the ability to debug the program.
6735 .PP
6736 The compiler performs optimization based on the knowledge it has of the
6737 program.  Compiling multiple files at once to a single output file mode allows
6738 the compiler to use information gained from all of the files when compiling
6739 each of them.
6740 .PP
6741 Not all optimizations are controlled directly by a flag.  Only
6742 optimizations that have a flag are listed in this section.
6743 .PP
6744 Most optimizations are only enabled if an \fB\-O\fR level is set on
6745 the command line.  Otherwise they are disabled, even if individual
6746 optimization flags are specified.
6747 .PP
6748 Depending on the target and how \s-1GCC\s0 was configured, a slightly different
6749 set of optimizations may be enabled at each \fB\-O\fR level than
6750 those listed here.  You can invoke \s-1GCC\s0 with \fB\-Q \-\-help=optimizers\fR
6751 to find out the exact set of optimizations that are enabled at each level.
6752 .IP "\fB\-O\fR" 4
6753 .IX Item "-O"
6754 .PD 0
6755 .IP "\fB\-O1\fR" 4
6756 .IX Item "-O1"
6757 .PD
6758 Optimize.  Optimizing compilation takes somewhat more time, and a lot
6759 more memory for a large function.
6760 .Sp
6761 With \fB\-O\fR, the compiler tries to reduce code size and execution
6762 time, without performing any optimizations that take a great deal of
6763 compilation time.
6764 .Sp
6765 \&\fB\-O\fR turns on the following optimization flags:
6766 .Sp
6767 \&\fB\-fauto\-inc\-dec 
6768 \&\-fbranch\-count\-reg 
6769 \&\-fcombine\-stack\-adjustments 
6770 \&\-fcompare\-elim 
6771 \&\-fcprop\-registers 
6772 \&\-fdce 
6773 \&\-fdefer\-pop 
6774 \&\-fdelayed\-branch 
6775 \&\-fdse 
6776 \&\-fforward\-propagate 
6777 \&\-fguess\-branch\-probability 
6778 \&\-fif\-conversion2 
6779 \&\-fif\-conversion 
6780 \&\-finline\-functions\-called\-once 
6781 \&\-fipa\-pure\-const 
6782 \&\-fipa\-profile 
6783 \&\-fipa\-reference 
6784 \&\-fmerge\-constants 
6785 \&\-fmove\-loop\-invariants 
6786 \&\-fshrink\-wrap 
6787 \&\-fsplit\-wide\-types 
6788 \&\-ftree\-bit\-ccp 
6789 \&\-ftree\-ccp 
6790 \&\-fssa\-phiopt 
6791 \&\-ftree\-ch 
6792 \&\-ftree\-copy\-prop 
6793 \&\-ftree\-copyrename 
6794 \&\-ftree\-dce 
6795 \&\-ftree\-dominator\-opts 
6796 \&\-ftree\-dse 
6797 \&\-ftree\-forwprop 
6798 \&\-ftree\-fre 
6799 \&\-ftree\-phiprop 
6800 \&\-ftree\-sink 
6801 \&\-ftree\-slsr 
6802 \&\-ftree\-sra 
6803 \&\-ftree\-pta 
6804 \&\-ftree\-ter 
6805 \&\-funit\-at\-a\-time\fR
6806 .Sp
6807 \&\fB\-O\fR also turns on \fB\-fomit\-frame\-pointer\fR on machines
6808 where doing so does not interfere with debugging.
6809 .IP "\fB\-O2\fR" 4
6810 .IX Item "-O2"
6811 Optimize even more.  \s-1GCC\s0 performs nearly all supported optimizations
6812 that do not involve a space-speed tradeoff.
6813 As compared to \fB\-O\fR, this option increases both compilation time
6814 and the performance of the generated code.
6815 .Sp
6816 \&\fB\-O2\fR turns on all optimization flags specified by \fB\-O\fR.  It
6817 also turns on the following optimization flags:
6818 \&\fB\-fthread\-jumps 
6819 \&\-falign\-functions  \-falign\-jumps 
6820 \&\-falign\-loops  \-falign\-labels 
6821 \&\-fcaller\-saves 
6822 \&\-fcrossjumping 
6823 \&\-fcse\-follow\-jumps  \-fcse\-skip\-blocks 
6824 \&\-fdelete\-null\-pointer\-checks 
6825 \&\-fdevirtualize \-fdevirtualize\-speculatively 
6826 \&\-fexpensive\-optimizations 
6827 \&\-fgcse  \-fgcse\-lm  
6828 \&\-fhoist\-adjacent\-loads 
6829 \&\-finline\-small\-functions 
6830 \&\-findirect\-inlining 
6831 \&\-fipa\-cp 
6832 \&\-fipa\-cp\-alignment 
6833 \&\-fipa\-sra 
6834 \&\-fipa\-icf 
6835 \&\-fisolate\-erroneous\-paths\-dereference 
6836 \&\-flra\-remat 
6837 \&\-foptimize\-sibling\-calls 
6838 \&\-foptimize\-strlen 
6839 \&\-fpartial\-inlining 
6840 \&\-fpeephole2 
6841 \&\-freorder\-blocks \-freorder\-blocks\-and\-partition \-freorder\-functions 
6842 \&\-frerun\-cse\-after\-loop  
6843 \&\-fsched\-interblock  \-fsched\-spec 
6844 \&\-fschedule\-insns  \-fschedule\-insns2 
6845 \&\-fstrict\-aliasing \-fstrict\-overflow 
6846 \&\-ftree\-builtin\-call\-dce 
6847 \&\-ftree\-switch\-conversion \-ftree\-tail\-merge 
6848 \&\-ftree\-pre 
6849 \&\-ftree\-vrp 
6850 \&\-fipa\-ra\fR
6851 .Sp
6852 Please note the warning under \fB\-fgcse\fR about
6853 invoking \fB\-O2\fR on programs that use computed gotos.
6854 .IP "\fB\-O3\fR" 4
6855 .IX Item "-O3"
6856 Optimize yet more.  \fB\-O3\fR turns on all optimizations specified
6857 by \fB\-O2\fR and also turns on the \fB\-finline\-functions\fR,
6858 \&\fB\-funswitch\-loops\fR, \fB\-fpredictive\-commoning\fR,
6859 \&\fB\-fgcse\-after\-reload\fR, \fB\-ftree\-loop\-vectorize\fR,
6860 \&\fB\-ftree\-loop\-distribute\-patterns\fR,
6861 \&\fB\-ftree\-slp\-vectorize\fR, \fB\-fvect\-cost\-model\fR,
6862 \&\fB\-ftree\-partial\-pre\fR and \fB\-fipa\-cp\-clone\fR options.
6863 .IP "\fB\-O0\fR" 4
6864 .IX Item "-O0"
6865 Reduce compilation time and make debugging produce the expected
6866 results.  This is the default.
6867 .IP "\fB\-Os\fR" 4
6868 .IX Item "-Os"
6869 Optimize for size.  \fB\-Os\fR enables all \fB\-O2\fR optimizations that
6870 do not typically increase code size.  It also performs further
6871 optimizations designed to reduce code size.
6872 .Sp
6873 \&\fB\-Os\fR disables the following optimization flags:
6874 \&\fB\-falign\-functions  \-falign\-jumps  \-falign\-loops 
6875 \&\-falign\-labels  \-freorder\-blocks  \-freorder\-blocks\-and\-partition 
6876 \&\-fprefetch\-loop\-arrays\fR
6877 .IP "\fB\-Ofast\fR" 4
6878 .IX Item "-Ofast"
6879 Disregard strict standards compliance.  \fB\-Ofast\fR enables all
6880 \&\fB\-O3\fR optimizations.  It also enables optimizations that are not
6881 valid for all standard-compliant programs.
6882 It turns on \fB\-ffast\-math\fR and the Fortran-specific
6883 \&\fB\-fno\-protect\-parens\fR and \fB\-fstack\-arrays\fR.
6884 .IP "\fB\-Og\fR" 4
6885 .IX Item "-Og"
6886 Optimize debugging experience.  \fB\-Og\fR enables optimizations
6887 that do not interfere with debugging. It should be the optimization
6888 level of choice for the standard edit-compile-debug cycle, offering
6889 a reasonable level of optimization while maintaining fast compilation
6890 and a good debugging experience.
6891 .Sp
6892 If you use multiple \fB\-O\fR options, with or without level numbers,
6893 the last such option is the one that is effective.
6894 .PP
6895 Options of the form \fB\-f\fR\fIflag\fR specify machine-independent
6896 flags.  Most flags have both positive and negative forms; the negative
6897 form of \fB\-ffoo\fR is \fB\-fno\-foo\fR.  In the table
6898 below, only one of the forms is listed\-\-\-the one you typically 
6899 use.  You can figure out the other form by either removing \fBno\-\fR
6900 or adding it.
6901 .PP
6902 The following options control specific optimizations.  They are either
6903 activated by \fB\-O\fR options or are related to ones that are.  You
6904 can use the following flags in the rare cases when \*(L"fine-tuning\*(R" of
6905 optimizations to be performed is desired.
6906 .IP "\fB\-fno\-defer\-pop\fR" 4
6907 .IX Item "-fno-defer-pop"
6908 Always pop the arguments to each function call as soon as that function
6909 returns.  For machines that must pop arguments after a function call,
6910 the compiler normally lets arguments accumulate on the stack for several
6911 function calls and pops them all at once.
6912 .Sp
6913 Disabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
6914 .IP "\fB\-fforward\-propagate\fR" 4
6915 .IX Item "-fforward-propagate"
6916 Perform a forward propagation pass on \s-1RTL\s0.  The pass tries to combine two
6917 instructions and checks if the result can be simplified.  If loop unrolling
6918 is active, two passes are performed and the second is scheduled after
6919 loop unrolling.
6920 .Sp
6921 This option is enabled by default at optimization levels \fB\-O\fR,
6922 \&\fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
6923 .IP "\fB\-ffp\-contract=\fR\fIstyle\fR" 4
6924 .IX Item "-ffp-contract=style"
6925 \&\fB\-ffp\-contract=off\fR disables floating-point expression contraction.
6926 \&\fB\-ffp\-contract=fast\fR enables floating-point expression contraction
6927 such as forming of fused multiply-add operations if the target has
6928 native support for them.
6929 \&\fB\-ffp\-contract=on\fR enables floating-point expression contraction
6930 if allowed by the language standard.  This is currently not implemented
6931 and treated equal to \fB\-ffp\-contract=off\fR.
6932 .Sp
6933 The default is \fB\-ffp\-contract=fast\fR.
6934 .IP "\fB\-fomit\-frame\-pointer\fR" 4
6935 .IX Item "-fomit-frame-pointer"
6936 Don't keep the frame pointer in a register for functions that
6937 don't need one.  This avoids the instructions to save, set up and
6938 restore frame pointers; it also makes an extra register available
6939 in many functions.  \fBIt also makes debugging impossible on
6940 some machines.\fR
6941 .Sp
6942 On some machines, such as the \s-1VAX\s0, this flag has no effect, because
6943 the standard calling sequence automatically handles the frame pointer
6944 and nothing is saved by pretending it doesn't exist.  The
6945 machine-description macro \f(CW\*(C`FRAME_POINTER_REQUIRED\*(C'\fR controls
6946 whether a target machine supports this flag.
6947 .Sp
6948 The default setting (when not optimizing for
6949 size) for 32\-bit GNU/Linux x86 and 32\-bit Darwin x86 targets is
6950 \&\fB\-fomit\-frame\-pointer\fR.  You can configure \s-1GCC\s0 with the
6951 \&\fB\-\-enable\-frame\-pointer\fR configure option to change the default.
6952 .Sp
6953 Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
6954 .IP "\fB\-foptimize\-sibling\-calls\fR" 4
6955 .IX Item "-foptimize-sibling-calls"
6956 Optimize sibling and tail recursive calls.
6957 .Sp
6958 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
6959 .IP "\fB\-foptimize\-strlen\fR" 4
6960 .IX Item "-foptimize-strlen"
6961 Optimize various standard C string functions (e.g. \f(CW\*(C`strlen\*(C'\fR,
6962 \&\f(CW\*(C`strchr\*(C'\fR or \f(CW\*(C`strcpy\*(C'\fR) and
6963 their \f(CW\*(C`_FORTIFY_SOURCE\*(C'\fR counterparts into faster alternatives.
6964 .Sp
6965 Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
6966 .IP "\fB\-fno\-inline\fR" 4
6967 .IX Item "-fno-inline"
6968 Do not expand any functions inline apart from those marked with
6969 the \f(CW\*(C`always_inline\*(C'\fR attribute.  This is the default when not
6970 optimizing.
6971 .Sp
6972 Single functions can be exempted from inlining by marking them
6973 with the \f(CW\*(C`noinline\*(C'\fR attribute.
6974 .IP "\fB\-finline\-small\-functions\fR" 4
6975 .IX Item "-finline-small-functions"
6976 Integrate functions into their callers when their body is smaller than expected
6977 function call code (so overall size of program gets smaller).  The compiler
6978 heuristically decides which functions are simple enough to be worth integrating
6979 in this way.  This inlining applies to all functions, even those not declared
6980 inline.
6981 .Sp
6982 Enabled at level \fB\-O2\fR.
6983 .IP "\fB\-findirect\-inlining\fR" 4
6984 .IX Item "-findirect-inlining"
6985 Inline also indirect calls that are discovered to be known at compile
6986 time thanks to previous inlining.  This option has any effect only
6987 when inlining itself is turned on by the \fB\-finline\-functions\fR
6988 or \fB\-finline\-small\-functions\fR options.
6989 .Sp
6990 Enabled at level \fB\-O2\fR.
6991 .IP "\fB\-finline\-functions\fR" 4
6992 .IX Item "-finline-functions"
6993 Consider all functions for inlining, even if they are not declared inline.
6994 The compiler heuristically decides which functions are worth integrating
6995 in this way.
6996 .Sp
6997 If all calls to a given function are integrated, and the function is
6998 declared \f(CW\*(C`static\*(C'\fR, then the function is normally not output as
6999 assembler code in its own right.
7000 .Sp
7001 Enabled at level \fB\-O3\fR.
7002 .IP "\fB\-finline\-functions\-called\-once\fR" 4
7003 .IX Item "-finline-functions-called-once"
7004 Consider all \f(CW\*(C`static\*(C'\fR functions called once for inlining into their
7005 caller even if they are not marked \f(CW\*(C`inline\*(C'\fR.  If a call to a given
7006 function is integrated, then the function is not output as assembler code
7007 in its own right.
7008 .Sp
7009 Enabled at levels \fB\-O1\fR, \fB\-O2\fR, \fB\-O3\fR and \fB\-Os\fR.
7010 .IP "\fB\-fearly\-inlining\fR" 4
7011 .IX Item "-fearly-inlining"
7012 Inline functions marked by \f(CW\*(C`always_inline\*(C'\fR and functions whose body seems
7013 smaller than the function call overhead early before doing
7014 \&\fB\-fprofile\-generate\fR instrumentation and real inlining pass.  Doing so
7015 makes profiling significantly cheaper and usually inlining faster on programs
7016 having large chains of nested wrapper functions.
7017 .Sp
7018 Enabled by default.
7019 .IP "\fB\-fipa\-sra\fR" 4
7020 .IX Item "-fipa-sra"
7021 Perform interprocedural scalar replacement of aggregates, removal of
7022 unused parameters and replacement of parameters passed by reference
7023 by parameters passed by value.
7024 .Sp
7025 Enabled at levels \fB\-O2\fR, \fB\-O3\fR and \fB\-Os\fR.
7026 .IP "\fB\-finline\-limit=\fR\fIn\fR" 4
7027 .IX Item "-finline-limit=n"
7028 By default, \s-1GCC\s0 limits the size of functions that can be inlined.  This flag
7029 allows coarse control of this limit.  \fIn\fR is the size of functions that
7030 can be inlined in number of pseudo instructions.
7031 .Sp
7032 Inlining is actually controlled by a number of parameters, which may be
7033 specified individually by using \fB\-\-param\fR \fIname\fR\fB=\fR\fIvalue\fR.
7034 The \fB\-finline\-limit=\fR\fIn\fR option sets some of these parameters
7035 as follows:
7036 .RS 4
7037 .IP "\fBmax-inline-insns-single\fR" 4
7038 .IX Item "max-inline-insns-single"
7039 is set to \fIn\fR/2.
7040 .IP "\fBmax-inline-insns-auto\fR" 4
7041 .IX Item "max-inline-insns-auto"
7042 is set to \fIn\fR/2.
7043 .RE
7044 .RS 4
7045 .Sp
7046 See below for a documentation of the individual
7047 parameters controlling inlining and for the defaults of these parameters.
7048 .Sp
7049 \&\fINote:\fR there may be no value to \fB\-finline\-limit\fR that results
7050 in default behavior.
7051 .Sp
7052 \&\fINote:\fR pseudo instruction represents, in this particular context, an
7053 abstract measurement of function's size.  In no way does it represent a count
7054 of assembly instructions and as such its exact meaning might change from one
7055 release to an another.
7056 .RE
7057 .IP "\fB\-fno\-keep\-inline\-dllexport\fR" 4
7058 .IX Item "-fno-keep-inline-dllexport"
7059 This is a more fine-grained version of \fB\-fkeep\-inline\-functions\fR,
7060 which applies only to functions that are declared using the \f(CW\*(C`dllexport\*(C'\fR
7061 attribute or declspec
7062 .IP "\fB\-fkeep\-inline\-functions\fR" 4
7063 .IX Item "-fkeep-inline-functions"
7064 In C, emit \f(CW\*(C`static\*(C'\fR functions that are declared \f(CW\*(C`inline\*(C'\fR
7065 into the object file, even if the function has been inlined into all
7066 of its callers.  This switch does not affect functions using the
7067 \&\f(CW\*(C`extern inline\*(C'\fR extension in \s-1GNU\s0 C90.  In \*(C+, emit any and all
7068 inline functions into the object file.
7069 .IP "\fB\-fkeep\-static\-consts\fR" 4
7070 .IX Item "-fkeep-static-consts"
7071 Emit variables declared \f(CW\*(C`static const\*(C'\fR when optimization isn't turned
7072 on, even if the variables aren't referenced.
7073 .Sp
7074 \&\s-1GCC\s0 enables this option by default.  If you want to force the compiler to
7075 check if a variable is referenced, regardless of whether or not
7076 optimization is turned on, use the \fB\-fno\-keep\-static\-consts\fR option.
7077 .IP "\fB\-fmerge\-constants\fR" 4
7078 .IX Item "-fmerge-constants"
7079 Attempt to merge identical constants (string constants and floating-point
7080 constants) across compilation units.
7081 .Sp
7082 This option is the default for optimized compilation if the assembler and
7083 linker support it.  Use \fB\-fno\-merge\-constants\fR to inhibit this
7084 behavior.
7085 .Sp
7086 Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
7087 .IP "\fB\-fmerge\-all\-constants\fR" 4
7088 .IX Item "-fmerge-all-constants"
7089 Attempt to merge identical constants and identical variables.
7090 .Sp
7091 This option implies \fB\-fmerge\-constants\fR.  In addition to
7092 \&\fB\-fmerge\-constants\fR this considers e.g. even constant initialized
7093 arrays or initialized constant variables with integral or floating-point
7094 types.  Languages like C or \*(C+ require each variable, including multiple
7095 instances of the same variable in recursive calls, to have distinct locations,
7096 so using this option results in non-conforming
7097 behavior.
7098 .IP "\fB\-fmodulo\-sched\fR" 4
7099 .IX Item "-fmodulo-sched"
7100 Perform swing modulo scheduling immediately before the first scheduling
7101 pass.  This pass looks at innermost loops and reorders their
7102 instructions by overlapping different iterations.
7103 .IP "\fB\-fmodulo\-sched\-allow\-regmoves\fR" 4
7104 .IX Item "-fmodulo-sched-allow-regmoves"
7105 Perform more aggressive SMS-based modulo scheduling with register moves
7106 allowed.  By setting this flag certain anti-dependences edges are
7107 deleted, which triggers the generation of reg-moves based on the
7108 life-range analysis.  This option is effective only with
7109 \&\fB\-fmodulo\-sched\fR enabled.
7110 .IP "\fB\-fno\-branch\-count\-reg\fR" 4
7111 .IX Item "-fno-branch-count-reg"
7112 Do not use \*(L"decrement and branch\*(R" instructions on a count register,
7113 but instead generate a sequence of instructions that decrement a
7114 register, compare it against zero, then branch based upon the result.
7115 This option is only meaningful on architectures that support such
7116 instructions, which include x86, PowerPC, \s-1IA\-64\s0 and S/390.
7117 .Sp
7118 Enabled by default at \fB\-O1\fR and higher.
7119 .Sp
7120 The default is \fB\-fbranch\-count\-reg\fR.
7121 .IP "\fB\-fno\-function\-cse\fR" 4
7122 .IX Item "-fno-function-cse"
7123 Do not put function addresses in registers; make each instruction that
7124 calls a constant function contain the function's address explicitly.
7125 .Sp
7126 This option results in less efficient code, but some strange hacks
7127 that alter the assembler output may be confused by the optimizations
7128 performed when this option is not used.
7129 .Sp
7130 The default is \fB\-ffunction\-cse\fR
7131 .IP "\fB\-fno\-zero\-initialized\-in\-bss\fR" 4
7132 .IX Item "-fno-zero-initialized-in-bss"
7133 If the target supports a \s-1BSS\s0 section, \s-1GCC\s0 by default puts variables that
7134 are initialized to zero into \s-1BSS\s0.  This can save space in the resulting
7135 code.
7136 .Sp
7137 This option turns off this behavior because some programs explicitly
7138 rely on variables going to the data section\-\-\-e.g., so that the
7139 resulting executable can find the beginning of that section and/or make
7140 assumptions based on that.
7141 .Sp
7142 The default is \fB\-fzero\-initialized\-in\-bss\fR.
7143 .IP "\fB\-fthread\-jumps\fR" 4
7144 .IX Item "-fthread-jumps"
7145 Perform optimizations that check to see if a jump branches to a
7146 location where another comparison subsumed by the first is found.  If
7147 so, the first branch is redirected to either the destination of the
7148 second branch or a point immediately following it, depending on whether
7149 the condition is known to be true or false.
7150 .Sp
7151 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
7152 .IP "\fB\-fsplit\-wide\-types\fR" 4
7153 .IX Item "-fsplit-wide-types"
7154 When using a type that occupies multiple registers, such as \f(CW\*(C`long
7155 long\*(C'\fR on a 32\-bit system, split the registers apart and allocate them
7156 independently.  This normally generates better code for those types,
7157 but may make debugging more difficult.
7158 .Sp
7159 Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR,
7160 \&\fB\-Os\fR.
7161 .IP "\fB\-fcse\-follow\-jumps\fR" 4
7162 .IX Item "-fcse-follow-jumps"
7163 In common subexpression elimination (\s-1CSE\s0), scan through jump instructions
7164 when the target of the jump is not reached by any other path.  For
7165 example, when \s-1CSE\s0 encounters an \f(CW\*(C`if\*(C'\fR statement with an
7166 \&\f(CW\*(C`else\*(C'\fR clause, \s-1CSE\s0 follows the jump when the condition
7167 tested is false.
7168 .Sp
7169 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
7170 .IP "\fB\-fcse\-skip\-blocks\fR" 4
7171 .IX Item "-fcse-skip-blocks"
7172 This is similar to \fB\-fcse\-follow\-jumps\fR, but causes \s-1CSE\s0 to
7173 follow jumps that conditionally skip over blocks.  When \s-1CSE\s0
7174 encounters a simple \f(CW\*(C`if\*(C'\fR statement with no else clause,
7175 \&\fB\-fcse\-skip\-blocks\fR causes \s-1CSE\s0 to follow the jump around the
7176 body of the \f(CW\*(C`if\*(C'\fR.
7177 .Sp
7178 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
7179 .IP "\fB\-frerun\-cse\-after\-loop\fR" 4
7180 .IX Item "-frerun-cse-after-loop"
7181 Re-run common subexpression elimination after loop optimizations are
7182 performed.
7183 .Sp
7184 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
7185 .IP "\fB\-fgcse\fR" 4
7186 .IX Item "-fgcse"
7187 Perform a global common subexpression elimination pass.
7188 This pass also performs global constant and copy propagation.
7189 .Sp
7190 \&\fINote:\fR When compiling a program using computed gotos, a \s-1GCC\s0
7191 extension, you may get better run-time performance if you disable
7192 the global common subexpression elimination pass by adding
7193 \&\fB\-fno\-gcse\fR to the command line.
7194 .Sp
7195 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
7196 .IP "\fB\-fgcse\-lm\fR" 4
7197 .IX Item "-fgcse-lm"
7198 When \fB\-fgcse\-lm\fR is enabled, global common subexpression elimination
7199 attempts to move loads that are only killed by stores into themselves.  This
7200 allows a loop containing a load/store sequence to be changed to a load outside
7201 the loop, and a copy/store within the loop.
7202 .Sp
7203 Enabled by default when \fB\-fgcse\fR is enabled.
7204 .IP "\fB\-fgcse\-sm\fR" 4
7205 .IX Item "-fgcse-sm"
7206 When \fB\-fgcse\-sm\fR is enabled, a store motion pass is run after
7207 global common subexpression elimination.  This pass attempts to move
7208 stores out of loops.  When used in conjunction with \fB\-fgcse\-lm\fR,
7209 loops containing a load/store sequence can be changed to a load before
7210 the loop and a store after the loop.
7211 .Sp
7212 Not enabled at any optimization level.
7213 .IP "\fB\-fgcse\-las\fR" 4
7214 .IX Item "-fgcse-las"
7215 When \fB\-fgcse\-las\fR is enabled, the global common subexpression
7216 elimination pass eliminates redundant loads that come after stores to the
7217 same memory location (both partial and full redundancies).
7218 .Sp
7219 Not enabled at any optimization level.
7220 .IP "\fB\-fgcse\-after\-reload\fR" 4
7221 .IX Item "-fgcse-after-reload"
7222 When \fB\-fgcse\-after\-reload\fR is enabled, a redundant load elimination
7223 pass is performed after reload.  The purpose of this pass is to clean up
7224 redundant spilling.
7225 .IP "\fB\-faggressive\-loop\-optimizations\fR" 4
7226 .IX Item "-faggressive-loop-optimizations"
7227 This option tells the loop optimizer to use language constraints to
7228 derive bounds for the number of iterations of a loop.  This assumes that
7229 loop code does not invoke undefined behavior by for example causing signed
7230 integer overflows or out-of-bound array accesses.  The bounds for the
7231 number of iterations of a loop are used to guide loop unrolling and peeling
7232 and loop exit test optimizations.
7233 This option is enabled by default.
7234 .IP "\fB\-funsafe\-loop\-optimizations\fR" 4
7235 .IX Item "-funsafe-loop-optimizations"
7236 This option tells the loop optimizer to assume that loop indices do not
7237 overflow, and that loops with nontrivial exit condition are not
7238 infinite.  This enables a wider range of loop optimizations even if
7239 the loop optimizer itself cannot prove that these assumptions are valid.
7240 If you use \fB\-Wunsafe\-loop\-optimizations\fR, the compiler warns you
7241 if it finds this kind of loop.
7242 .IP "\fB\-fcrossjumping\fR" 4
7243 .IX Item "-fcrossjumping"
7244 Perform cross-jumping transformation.
7245 This transformation unifies equivalent code and saves code size.  The
7246 resulting code may or may not perform better than without cross-jumping.
7247 .Sp
7248 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
7249 .IP "\fB\-fauto\-inc\-dec\fR" 4
7250 .IX Item "-fauto-inc-dec"
7251 Combine increments or decrements of addresses with memory accesses.
7252 This pass is always skipped on architectures that do not have
7253 instructions to support this.  Enabled by default at \fB\-O\fR and
7254 higher on architectures that support this.
7255 .IP "\fB\-fdce\fR" 4
7256 .IX Item "-fdce"
7257 Perform dead code elimination (\s-1DCE\s0) on \s-1RTL\s0.
7258 Enabled by default at \fB\-O\fR and higher.
7259 .IP "\fB\-fdse\fR" 4
7260 .IX Item "-fdse"
7261 Perform dead store elimination (\s-1DSE\s0) on \s-1RTL\s0.
7262 Enabled by default at \fB\-O\fR and higher.
7263 .IP "\fB\-fif\-conversion\fR" 4
7264 .IX Item "-fif-conversion"
7265 Attempt to transform conditional jumps into branch-less equivalents.  This
7266 includes use of conditional moves, min, max, set flags and abs instructions, and
7267 some tricks doable by standard arithmetics.  The use of conditional execution
7268 on chips where it is available is controlled by \fB\-fif\-conversion2\fR.
7269 .Sp
7270 Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
7271 .IP "\fB\-fif\-conversion2\fR" 4
7272 .IX Item "-fif-conversion2"
7273 Use conditional execution (where available) to transform conditional jumps into
7274 branch-less equivalents.
7275 .Sp
7276 Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
7277 .IP "\fB\-fdeclone\-ctor\-dtor\fR" 4
7278 .IX Item "-fdeclone-ctor-dtor"
7279 The \*(C+ \s-1ABI\s0 requires multiple entry points for constructors and
7280 destructors: one for a base subobject, one for a complete object, and
7281 one for a virtual destructor that calls operator delete afterwards.
7282 For a hierarchy with virtual bases, the base and complete variants are
7283 clones, which means two copies of the function.  With this option, the
7284 base and complete variants are changed to be thunks that call a common
7285 implementation.
7286 .Sp
7287 Enabled by \fB\-Os\fR.
7288 .IP "\fB\-fdelete\-null\-pointer\-checks\fR" 4
7289 .IX Item "-fdelete-null-pointer-checks"
7290 Assume that programs cannot safely dereference null pointers, and that
7291 no code or data element resides there.  This enables simple constant
7292 folding optimizations at all optimization levels.  In addition, other
7293 optimization passes in \s-1GCC\s0 use this flag to control global dataflow
7294 analyses that eliminate useless checks for null pointers; these assume
7295 that if a pointer is checked after it has already been dereferenced,
7296 it cannot be null.
7297 .Sp
7298 Note however that in some environments this assumption is not true.
7299 Use \fB\-fno\-delete\-null\-pointer\-checks\fR to disable this optimization
7300 for programs that depend on that behavior.
7301 .Sp
7302 Some targets, especially embedded ones, disable this option at all levels.
7303 Otherwise it is enabled at all levels: \fB\-O0\fR, \fB\-O1\fR,
7304 \&\fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.  Passes that use the information
7305 are enabled independently at different optimization levels.
7306 .IP "\fB\-fdevirtualize\fR" 4
7307 .IX Item "-fdevirtualize"
7308 Attempt to convert calls to virtual functions to direct calls.  This
7309 is done both within a procedure and interprocedurally as part of
7310 indirect inlining (\fB\-findirect\-inlining\fR) and interprocedural constant
7311 propagation (\fB\-fipa\-cp\fR).
7312 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
7313 .IP "\fB\-fdevirtualize\-speculatively\fR" 4
7314 .IX Item "-fdevirtualize-speculatively"
7315 Attempt to convert calls to virtual functions to speculative direct calls.
7316 Based on the analysis of the type inheritance graph, determine for a given call
7317 the set of likely targets. If the set is small, preferably of size 1, change
7318 the call into a conditional deciding between direct and indirect calls.  The
7319 speculative calls enable more optimizations, such as inlining.  When they seem
7320 useless after further optimization, they are converted back into original form.
7321 .IP "\fB\-fdevirtualize\-at\-ltrans\fR" 4
7322 .IX Item "-fdevirtualize-at-ltrans"
7323 Stream extra information needed for aggressive devirtualization when running
7324 the link-time optimizer in local transformation mode.  
7325 This option enables more devirtualization but
7326 significantly increases the size of streamed data. For this reason it is
7327 disabled by default.
7328 .IP "\fB\-fexpensive\-optimizations\fR" 4
7329 .IX Item "-fexpensive-optimizations"
7330 Perform a number of minor optimizations that are relatively expensive.
7331 .Sp
7332 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
7333 .IP "\fB\-free\fR" 4
7334 .IX Item "-free"
7335 Attempt to remove redundant extension instructions.  This is especially
7336 helpful for the x86\-64 architecture, which implicitly zero-extends in 64\-bit
7337 registers after writing to their lower 32\-bit half.
7338 .Sp
7339 Enabled for Alpha, AArch64 and x86 at levels \fB\-O2\fR,
7340 \&\fB\-O3\fR, \fB\-Os\fR.
7341 .IP "\fB\-fno\-lifetime\-dse\fR" 4
7342 .IX Item "-fno-lifetime-dse"
7343 In \*(C+ the value of an object is only affected by changes within its
7344 lifetime: when the constructor begins, the object has an indeterminate
7345 value, and any changes during the lifetime of the object are dead when
7346 the object is destroyed.  Normally dead store elimination will take
7347 advantage of this; if your code relies on the value of the object
7348 storage persisting beyond the lifetime of the object, you can use this
7349 flag to disable this optimization.
7350 .IP "\fB\-flive\-range\-shrinkage\fR" 4
7351 .IX Item "-flive-range-shrinkage"
7352 Attempt to decrease register pressure through register live range
7353 shrinkage.  This is helpful for fast processors with small or moderate
7354 size register sets.
7355 .IP "\fB\-fira\-algorithm=\fR\fIalgorithm\fR" 4
7356 .IX Item "-fira-algorithm=algorithm"
7357 Use the specified coloring algorithm for the integrated register
7358 allocator.  The \fIalgorithm\fR argument can be \fBpriority\fR, which
7359 specifies Chow's priority coloring, or \fB\s-1CB\s0\fR, which specifies
7360 Chaitin-Briggs coloring.  Chaitin-Briggs coloring is not implemented
7361 for all architectures, but for those targets that do support it, it is
7362 the default because it generates better code.
7363 .IP "\fB\-fira\-region=\fR\fIregion\fR" 4
7364 .IX Item "-fira-region=region"
7365 Use specified regions for the integrated register allocator.  The
7366 \&\fIregion\fR argument should be one of the following:
7367 .RS 4
7368 .IP "\fBall\fR" 4
7369 .IX Item "all"
7370 Use all loops as register allocation regions.
7371 This can give the best results for machines with a small and/or
7372 irregular register set.
7373 .IP "\fBmixed\fR" 4
7374 .IX Item "mixed"
7375 Use all loops except for loops with small register pressure 
7376 as the regions.  This value usually gives
7377 the best results in most cases and for most architectures,
7378 and is enabled by default when compiling with optimization for speed
7379 (\fB\-O\fR, \fB\-O2\fR, ...).
7380 .IP "\fBone\fR" 4
7381 .IX Item "one"
7382 Use all functions as a single region.  
7383 This typically results in the smallest code size, and is enabled by default for
7384 \&\fB\-Os\fR or \fB\-O0\fR.
7385 .RE
7386 .RS 4
7387 .RE
7388 .IP "\fB\-fira\-hoist\-pressure\fR" 4
7389 .IX Item "-fira-hoist-pressure"
7390 Use \s-1IRA\s0 to evaluate register pressure in the code hoisting pass for
7391 decisions to hoist expressions.  This option usually results in smaller
7392 code, but it can slow the compiler down.
7393 .Sp
7394 This option is enabled at level \fB\-Os\fR for all targets.
7395 .IP "\fB\-fira\-loop\-pressure\fR" 4
7396 .IX Item "-fira-loop-pressure"
7397 Use \s-1IRA\s0 to evaluate register pressure in loops for decisions to move
7398 loop invariants.  This option usually results in generation
7399 of faster and smaller code on machines with large register files (>= 32
7400 registers), but it can slow the compiler down.
7401 .Sp
7402 This option is enabled at level \fB\-O3\fR for some targets.
7403 .IP "\fB\-fno\-ira\-share\-save\-slots\fR" 4
7404 .IX Item "-fno-ira-share-save-slots"
7405 Disable sharing of stack slots used for saving call-used hard
7406 registers living through a call.  Each hard register gets a
7407 separate stack slot, and as a result function stack frames are
7408 larger.
7409 .IP "\fB\-fno\-ira\-share\-spill\-slots\fR" 4
7410 .IX Item "-fno-ira-share-spill-slots"
7411 Disable sharing of stack slots allocated for pseudo-registers.  Each
7412 pseudo-register that does not get a hard register gets a separate
7413 stack slot, and as a result function stack frames are larger.
7414 .IP "\fB\-fira\-verbose=\fR\fIn\fR" 4
7415 .IX Item "-fira-verbose=n"
7416 Control the verbosity of the dump file for the integrated register allocator.
7417 The default value is 5.  If the value \fIn\fR is greater or equal to 10,
7418 the dump output is sent to stderr using the same format as \fIn\fR minus 10.
7419 .IP "\fB\-flra\-remat\fR" 4
7420 .IX Item "-flra-remat"
7421 Enable CFG-sensitive rematerialization in \s-1LRA\s0.  Instead of loading
7422 values of spilled pseudos, \s-1LRA\s0 tries to rematerialize (recalculate)
7423 values if it is profitable.
7424 .Sp
7425 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
7426 .IP "\fB\-fdelayed\-branch\fR" 4
7427 .IX Item "-fdelayed-branch"
7428 If supported for the target machine, attempt to reorder instructions
7429 to exploit instruction slots available after delayed branch
7430 instructions.
7431 .Sp
7432 Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
7433 .IP "\fB\-fschedule\-insns\fR" 4
7434 .IX Item "-fschedule-insns"
7435 If supported for the target machine, attempt to reorder instructions to
7436 eliminate execution stalls due to required data being unavailable.  This
7437 helps machines that have slow floating point or memory load instructions
7438 by allowing other instructions to be issued until the result of the load
7439 or floating-point instruction is required.
7440 .Sp
7441 Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
7442 .IP "\fB\-fschedule\-insns2\fR" 4
7443 .IX Item "-fschedule-insns2"
7444 Similar to \fB\-fschedule\-insns\fR, but requests an additional pass of
7445 instruction scheduling after register allocation has been done.  This is
7446 especially useful on machines with a relatively small number of
7447 registers and where memory load instructions take more than one cycle.
7448 .Sp
7449 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
7450 .IP "\fB\-fno\-sched\-interblock\fR" 4
7451 .IX Item "-fno-sched-interblock"
7452 Don't schedule instructions across basic blocks.  This is normally
7453 enabled by default when scheduling before register allocation, i.e.
7454 with \fB\-fschedule\-insns\fR or at \fB\-O2\fR or higher.
7455 .IP "\fB\-fno\-sched\-spec\fR" 4
7456 .IX Item "-fno-sched-spec"
7457 Don't allow speculative motion of non-load instructions.  This is normally
7458 enabled by default when scheduling before register allocation, i.e.
7459 with \fB\-fschedule\-insns\fR or at \fB\-O2\fR or higher.
7460 .IP "\fB\-fsched\-pressure\fR" 4
7461 .IX Item "-fsched-pressure"
7462 Enable register pressure sensitive insn scheduling before register
7463 allocation.  This only makes sense when scheduling before register
7464 allocation is enabled, i.e. with \fB\-fschedule\-insns\fR or at
7465 \&\fB\-O2\fR or higher.  Usage of this option can improve the
7466 generated code and decrease its size by preventing register pressure
7467 increase above the number of available hard registers and subsequent
7468 spills in register allocation.
7469 .IP "\fB\-fsched\-spec\-load\fR" 4
7470 .IX Item "-fsched-spec-load"
7471 Allow speculative motion of some load instructions.  This only makes
7472 sense when scheduling before register allocation, i.e. with
7473 \&\fB\-fschedule\-insns\fR or at \fB\-O2\fR or higher.
7474 .IP "\fB\-fsched\-spec\-load\-dangerous\fR" 4
7475 .IX Item "-fsched-spec-load-dangerous"
7476 Allow speculative motion of more load instructions.  This only makes
7477 sense when scheduling before register allocation, i.e. with
7478 \&\fB\-fschedule\-insns\fR or at \fB\-O2\fR or higher.
7479 .IP "\fB\-fsched\-stalled\-insns\fR" 4
7480 .IX Item "-fsched-stalled-insns"
7481 .PD 0
7482 .IP "\fB\-fsched\-stalled\-insns=\fR\fIn\fR" 4
7483 .IX Item "-fsched-stalled-insns=n"
7484 .PD
7485 Define how many insns (if any) can be moved prematurely from the queue
7486 of stalled insns into the ready list during the second scheduling pass.
7487 \&\fB\-fno\-sched\-stalled\-insns\fR means that no insns are moved
7488 prematurely, \fB\-fsched\-stalled\-insns=0\fR means there is no limit
7489 on how many queued insns can be moved prematurely.
7490 \&\fB\-fsched\-stalled\-insns\fR without a value is equivalent to
7491 \&\fB\-fsched\-stalled\-insns=1\fR.
7492 .IP "\fB\-fsched\-stalled\-insns\-dep\fR" 4
7493 .IX Item "-fsched-stalled-insns-dep"
7494 .PD 0
7495 .IP "\fB\-fsched\-stalled\-insns\-dep=\fR\fIn\fR" 4
7496 .IX Item "-fsched-stalled-insns-dep=n"
7497 .PD
7498 Define how many insn groups (cycles) are examined for a dependency
7499 on a stalled insn that is a candidate for premature removal from the queue
7500 of stalled insns.  This has an effect only during the second scheduling pass,
7501 and only if \fB\-fsched\-stalled\-insns\fR is used.
7502 \&\fB\-fno\-sched\-stalled\-insns\-dep\fR is equivalent to
7503 \&\fB\-fsched\-stalled\-insns\-dep=0\fR.
7504 \&\fB\-fsched\-stalled\-insns\-dep\fR without a value is equivalent to
7505 \&\fB\-fsched\-stalled\-insns\-dep=1\fR.
7506 .IP "\fB\-fsched2\-use\-superblocks\fR" 4
7507 .IX Item "-fsched2-use-superblocks"
7508 When scheduling after register allocation, use superblock scheduling.
7509 This allows motion across basic block boundaries,
7510 resulting in faster schedules.  This option is experimental, as not all machine
7511 descriptions used by \s-1GCC\s0 model the \s-1CPU\s0 closely enough to avoid unreliable
7512 results from the algorithm.
7513 .Sp
7514 This only makes sense when scheduling after register allocation, i.e. with
7515 \&\fB\-fschedule\-insns2\fR or at \fB\-O2\fR or higher.
7516 .IP "\fB\-fsched\-group\-heuristic\fR" 4
7517 .IX Item "-fsched-group-heuristic"
7518 Enable the group heuristic in the scheduler.  This heuristic favors
7519 the instruction that belongs to a schedule group.  This is enabled
7520 by default when scheduling is enabled, i.e. with \fB\-fschedule\-insns\fR
7521 or \fB\-fschedule\-insns2\fR or at \fB\-O2\fR or higher.
7522 .IP "\fB\-fsched\-critical\-path\-heuristic\fR" 4
7523 .IX Item "-fsched-critical-path-heuristic"
7524 Enable the critical-path heuristic in the scheduler.  This heuristic favors
7525 instructions on the critical path.  This is enabled by default when
7526 scheduling is enabled, i.e. with \fB\-fschedule\-insns\fR
7527 or \fB\-fschedule\-insns2\fR or at \fB\-O2\fR or higher.
7528 .IP "\fB\-fsched\-spec\-insn\-heuristic\fR" 4
7529 .IX Item "-fsched-spec-insn-heuristic"
7530 Enable the speculative instruction heuristic in the scheduler.  This
7531 heuristic favors speculative instructions with greater dependency weakness.
7532 This is enabled by default when scheduling is enabled, i.e.
7533 with \fB\-fschedule\-insns\fR or \fB\-fschedule\-insns2\fR
7534 or at \fB\-O2\fR or higher.
7535 .IP "\fB\-fsched\-rank\-heuristic\fR" 4
7536 .IX Item "-fsched-rank-heuristic"
7537 Enable the rank heuristic in the scheduler.  This heuristic favors
7538 the instruction belonging to a basic block with greater size or frequency.
7539 This is enabled by default when scheduling is enabled, i.e.
7540 with \fB\-fschedule\-insns\fR or \fB\-fschedule\-insns2\fR or
7541 at \fB\-O2\fR or higher.
7542 .IP "\fB\-fsched\-last\-insn\-heuristic\fR" 4
7543 .IX Item "-fsched-last-insn-heuristic"
7544 Enable the last-instruction heuristic in the scheduler.  This heuristic
7545 favors the instruction that is less dependent on the last instruction
7546 scheduled.  This is enabled by default when scheduling is enabled,
7547 i.e. with \fB\-fschedule\-insns\fR or \fB\-fschedule\-insns2\fR or
7548 at \fB\-O2\fR or higher.
7549 .IP "\fB\-fsched\-dep\-count\-heuristic\fR" 4
7550 .IX Item "-fsched-dep-count-heuristic"
7551 Enable the dependent-count heuristic in the scheduler.  This heuristic
7552 favors the instruction that has more instructions depending on it.
7553 This is enabled by default when scheduling is enabled, i.e.
7554 with \fB\-fschedule\-insns\fR or \fB\-fschedule\-insns2\fR or
7555 at \fB\-O2\fR or higher.
7556 .IP "\fB\-freschedule\-modulo\-scheduled\-loops\fR" 4
7557 .IX Item "-freschedule-modulo-scheduled-loops"
7558 Modulo scheduling is performed before traditional scheduling.  If a loop
7559 is modulo scheduled, later scheduling passes may change its schedule.  
7560 Use this option to control that behavior.
7561 .IP "\fB\-fselective\-scheduling\fR" 4
7562 .IX Item "-fselective-scheduling"
7563 Schedule instructions using selective scheduling algorithm.  Selective
7564 scheduling runs instead of the first scheduler pass.
7565 .IP "\fB\-fselective\-scheduling2\fR" 4
7566 .IX Item "-fselective-scheduling2"
7567 Schedule instructions using selective scheduling algorithm.  Selective
7568 scheduling runs instead of the second scheduler pass.
7569 .IP "\fB\-fsel\-sched\-pipelining\fR" 4
7570 .IX Item "-fsel-sched-pipelining"
7571 Enable software pipelining of innermost loops during selective scheduling.
7572 This option has no effect unless one of \fB\-fselective\-scheduling\fR or
7573 \&\fB\-fselective\-scheduling2\fR is turned on.
7574 .IP "\fB\-fsel\-sched\-pipelining\-outer\-loops\fR" 4
7575 .IX Item "-fsel-sched-pipelining-outer-loops"
7576 When pipelining loops during selective scheduling, also pipeline outer loops.
7577 This option has no effect unless \fB\-fsel\-sched\-pipelining\fR is turned on.
7578 .IP "\fB\-fsemantic\-interposition\fR" 4
7579 .IX Item "-fsemantic-interposition"
7580 Some object formats, like \s-1ELF\s0, allow interposing of symbols by the 
7581 dynamic linker.
7582 This means that for symbols exported from the \s-1DSO\s0, the compiler cannot perform
7583 interprocedural propagation, inlining and other optimizations in anticipation
7584 that the function or variable in question may change. While this feature is
7585 useful, for example, to rewrite memory allocation functions by a debugging
7586 implementation, it is expensive in the terms of code quality.
7587 With \fB\-fno\-semantic\-interposition\fR the compiler assumes that 
7588 if interposition happens for functions the overwriting function will have 
7589 precisely the same semantics (and side effects). 
7590 Similarly if interposition happens
7591 for variables, the constructor of the variable will be the same. The flag
7592 has no effect for functions explicitly declared inline 
7593 (where it is never allowed for interposition to change semantics) 
7594 and for symbols explicitly declared weak.
7595 .IP "\fB\-fshrink\-wrap\fR" 4
7596 .IX Item "-fshrink-wrap"
7597 Emit function prologues only before parts of the function that need it,
7598 rather than at the top of the function.  This flag is enabled by default at
7599 \&\fB\-O\fR and higher.
7600 .IP "\fB\-fcaller\-saves\fR" 4
7601 .IX Item "-fcaller-saves"
7602 Enable allocation of values to registers that are clobbered by
7603 function calls, by emitting extra instructions to save and restore the
7604 registers around such calls.  Such allocation is done only when it
7605 seems to result in better code.
7606 .Sp
7607 This option is always enabled by default on certain machines, usually
7608 those which have no call-preserved registers to use instead.
7609 .Sp
7610 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
7611 .IP "\fB\-fcombine\-stack\-adjustments\fR" 4
7612 .IX Item "-fcombine-stack-adjustments"
7613 Tracks stack adjustments (pushes and pops) and stack memory references
7614 and then tries to find ways to combine them.
7615 .Sp
7616 Enabled by default at \fB\-O1\fR and higher.
7617 .IP "\fB\-fipa\-ra\fR" 4
7618 .IX Item "-fipa-ra"
7619 Use caller save registers for allocation if those registers are not used by
7620 any called function.  In that case it is not necessary to save and restore
7621 them around calls.  This is only possible if called functions are part of
7622 same compilation unit as current function and they are compiled before it.
7623 .Sp
7624 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
7625 .IP "\fB\-fconserve\-stack\fR" 4
7626 .IX Item "-fconserve-stack"
7627 Attempt to minimize stack usage.  The compiler attempts to use less
7628 stack space, even if that makes the program slower.  This option
7629 implies setting the \fBlarge-stack-frame\fR parameter to 100
7630 and the \fBlarge-stack-frame-growth\fR parameter to 400.
7631 .IP "\fB\-ftree\-reassoc\fR" 4
7632 .IX Item "-ftree-reassoc"
7633 Perform reassociation on trees.  This flag is enabled by default
7634 at \fB\-O\fR and higher.
7635 .IP "\fB\-ftree\-pre\fR" 4
7636 .IX Item "-ftree-pre"
7637 Perform partial redundancy elimination (\s-1PRE\s0) on trees.  This flag is
7638 enabled by default at \fB\-O2\fR and \fB\-O3\fR.
7639 .IP "\fB\-ftree\-partial\-pre\fR" 4
7640 .IX Item "-ftree-partial-pre"
7641 Make partial redundancy elimination (\s-1PRE\s0) more aggressive.  This flag is
7642 enabled by default at \fB\-O3\fR.
7643 .IP "\fB\-ftree\-forwprop\fR" 4
7644 .IX Item "-ftree-forwprop"
7645 Perform forward propagation on trees.  This flag is enabled by default
7646 at \fB\-O\fR and higher.
7647 .IP "\fB\-ftree\-fre\fR" 4
7648 .IX Item "-ftree-fre"
7649 Perform full redundancy elimination (\s-1FRE\s0) on trees.  The difference
7650 between \s-1FRE\s0 and \s-1PRE\s0 is that \s-1FRE\s0 only considers expressions
7651 that are computed on all paths leading to the redundant computation.
7652 This analysis is faster than \s-1PRE\s0, though it exposes fewer redundancies.
7653 This flag is enabled by default at \fB\-O\fR and higher.
7654 .IP "\fB\-ftree\-phiprop\fR" 4
7655 .IX Item "-ftree-phiprop"
7656 Perform hoisting of loads from conditional pointers on trees.  This
7657 pass is enabled by default at \fB\-O\fR and higher.
7658 .IP "\fB\-fhoist\-adjacent\-loads\fR" 4
7659 .IX Item "-fhoist-adjacent-loads"
7660 Speculatively hoist loads from both branches of an if-then-else if the
7661 loads are from adjacent locations in the same structure and the target
7662 architecture has a conditional move instruction.  This flag is enabled
7663 by default at \fB\-O2\fR and higher.
7664 .IP "\fB\-ftree\-copy\-prop\fR" 4
7665 .IX Item "-ftree-copy-prop"
7666 Perform copy propagation on trees.  This pass eliminates unnecessary
7667 copy operations.  This flag is enabled by default at \fB\-O\fR and
7668 higher.
7669 .IP "\fB\-fipa\-pure\-const\fR" 4
7670 .IX Item "-fipa-pure-const"
7671 Discover which functions are pure or constant.
7672 Enabled by default at \fB\-O\fR and higher.
7673 .IP "\fB\-fipa\-reference\fR" 4
7674 .IX Item "-fipa-reference"
7675 Discover which static variables do not escape the
7676 compilation unit.
7677 Enabled by default at \fB\-O\fR and higher.
7678 .IP "\fB\-fipa\-pta\fR" 4
7679 .IX Item "-fipa-pta"
7680 Perform interprocedural pointer analysis and interprocedural modification
7681 and reference analysis.  This option can cause excessive memory and
7682 compile-time usage on large compilation units.  It is not enabled by
7683 default at any optimization level.
7684 .IP "\fB\-fipa\-profile\fR" 4
7685 .IX Item "-fipa-profile"
7686 Perform interprocedural profile propagation.  The functions called only from
7687 cold functions are marked as cold. Also functions executed once (such as
7688 \&\f(CW\*(C`cold\*(C'\fR, \f(CW\*(C`noreturn\*(C'\fR, static constructors or destructors) are identified. Cold
7689 functions and loop less parts of functions executed once are then optimized for
7690 size.
7691 Enabled by default at \fB\-O\fR and higher.
7692 .IP "\fB\-fipa\-cp\fR" 4
7693 .IX Item "-fipa-cp"
7694 Perform interprocedural constant propagation.
7695 This optimization analyzes the program to determine when values passed
7696 to functions are constants and then optimizes accordingly.
7697 This optimization can substantially increase performance
7698 if the application has constants passed to functions.
7699 This flag is enabled by default at \fB\-O2\fR, \fB\-Os\fR and \fB\-O3\fR.
7700 .IP "\fB\-fipa\-cp\-clone\fR" 4
7701 .IX Item "-fipa-cp-clone"
7702 Perform function cloning to make interprocedural constant propagation stronger.
7703 When enabled, interprocedural constant propagation performs function cloning
7704 when externally visible function can be called with constant arguments.
7705 Because this optimization can create multiple copies of functions,
7706 it may significantly increase code size
7707 (see \fB\-\-param ipcp\-unit\-growth=\fR\fIvalue\fR).
7708 This flag is enabled by default at \fB\-O3\fR.
7709 .IP "\fB\-fipa\-cp\-alignment\fR" 4
7710 .IX Item "-fipa-cp-alignment"
7711 When enabled, this optimization propagates alignment of function
7712 parameters to support better vectorization and string operations.
7713 .Sp
7714 This flag is enabled by default at \fB\-O2\fR and \fB\-Os\fR.  It
7715 requires that \fB\-fipa\-cp\fR is enabled.
7716 .IP "\fB\-fipa\-icf\fR" 4
7717 .IX Item "-fipa-icf"
7718 Perform Identical Code Folding for functions and read-only variables.
7719 The optimization reduces code size and may disturb unwind stacks by replacing
7720 a function by equivalent one with a different name. The optimization works
7721 more effectively with link time optimization enabled.
7722 .Sp
7723 Nevertheless the behavior is similar to Gold Linker \s-1ICF\s0 optimization, \s-1GCC\s0 \s-1ICF\s0
7724 works on different levels and thus the optimizations are not same \- there are
7725 equivalences that are found only by \s-1GCC\s0 and equivalences found only by Gold.
7726 .Sp
7727 This flag is enabled by default at \fB\-O2\fR and \fB\-Os\fR.
7728 .IP "\fB\-fisolate\-erroneous\-paths\-dereference\fR" 4
7729 .IX Item "-fisolate-erroneous-paths-dereference"
7730 Detect paths that trigger erroneous or undefined behavior due to
7731 dereferencing a null pointer.  Isolate those paths from the main control
7732 flow and turn the statement with erroneous or undefined behavior into a trap.
7733 This flag is enabled by default at \fB\-O2\fR and higher.
7734 .IP "\fB\-fisolate\-erroneous\-paths\-attribute\fR" 4
7735 .IX Item "-fisolate-erroneous-paths-attribute"
7736 Detect paths that trigger erroneous or undefined behavior due a null value
7737 being used in a way forbidden by a \f(CW\*(C`returns_nonnull\*(C'\fR or \f(CW\*(C`nonnull\*(C'\fR
7738 attribute.  Isolate those paths from the main control flow and turn the
7739 statement with erroneous or undefined behavior into a trap.  This is not
7740 currently enabled, but may be enabled by \fB\-O2\fR in the future.
7741 .IP "\fB\-ftree\-sink\fR" 4
7742 .IX Item "-ftree-sink"
7743 Perform forward store motion  on trees.  This flag is
7744 enabled by default at \fB\-O\fR and higher.
7745 .IP "\fB\-ftree\-bit\-ccp\fR" 4
7746 .IX Item "-ftree-bit-ccp"
7747 Perform sparse conditional bit constant propagation on trees and propagate
7748 pointer alignment information.
7749 This pass only operates on local scalar variables and is enabled by default
7750 at \fB\-O\fR and higher.  It requires that \fB\-ftree\-ccp\fR is enabled.
7751 .IP "\fB\-ftree\-ccp\fR" 4
7752 .IX Item "-ftree-ccp"
7753 Perform sparse conditional constant propagation (\s-1CCP\s0) on trees.  This
7754 pass only operates on local scalar variables and is enabled by default
7755 at \fB\-O\fR and higher.
7756 .IP "\fB\-fssa\-phiopt\fR" 4
7757 .IX Item "-fssa-phiopt"
7758 Perform pattern matching on \s-1SSA\s0 \s-1PHI\s0 nodes to optimize conditional
7759 code.  This pass is enabled by default at \fB\-O\fR and higher.
7760 .IP "\fB\-ftree\-switch\-conversion\fR" 4
7761 .IX Item "-ftree-switch-conversion"
7762 Perform conversion of simple initializations in a switch to
7763 initializations from a scalar array.  This flag is enabled by default
7764 at \fB\-O2\fR and higher.
7765 .IP "\fB\-ftree\-tail\-merge\fR" 4
7766 .IX Item "-ftree-tail-merge"
7767 Look for identical code sequences.  When found, replace one with a jump to the
7768 other.  This optimization is known as tail merging or cross jumping.  This flag
7769 is enabled by default at \fB\-O2\fR and higher.  The compilation time
7770 in this pass can
7771 be limited using \fBmax-tail-merge-comparisons\fR parameter and
7772 \&\fBmax-tail-merge-iterations\fR parameter.
7773 .IP "\fB\-ftree\-dce\fR" 4
7774 .IX Item "-ftree-dce"
7775 Perform dead code elimination (\s-1DCE\s0) on trees.  This flag is enabled by
7776 default at \fB\-O\fR and higher.
7777 .IP "\fB\-ftree\-builtin\-call\-dce\fR" 4
7778 .IX Item "-ftree-builtin-call-dce"
7779 Perform conditional dead code elimination (\s-1DCE\s0) for calls to built-in functions
7780 that may set \f(CW\*(C`errno\*(C'\fR but are otherwise side-effect free.  This flag is
7781 enabled by default at \fB\-O2\fR and higher if \fB\-Os\fR is not also
7782 specified.
7783 .IP "\fB\-ftree\-dominator\-opts\fR" 4
7784 .IX Item "-ftree-dominator-opts"
7785 Perform a variety of simple scalar cleanups (constant/copy
7786 propagation, redundancy elimination, range propagation and expression
7787 simplification) based on a dominator tree traversal.  This also
7788 performs jump threading (to reduce jumps to jumps). This flag is
7789 enabled by default at \fB\-O\fR and higher.
7790 .IP "\fB\-ftree\-dse\fR" 4
7791 .IX Item "-ftree-dse"
7792 Perform dead store elimination (\s-1DSE\s0) on trees.  A dead store is a store into
7793 a memory location that is later overwritten by another store without
7794 any intervening loads.  In this case the earlier store can be deleted.  This
7795 flag is enabled by default at \fB\-O\fR and higher.
7796 .IP "\fB\-ftree\-ch\fR" 4
7797 .IX Item "-ftree-ch"
7798 Perform loop header copying on trees.  This is beneficial since it increases
7799 effectiveness of code motion optimizations.  It also saves one jump.  This flag
7800 is enabled by default at \fB\-O\fR and higher.  It is not enabled
7801 for \fB\-Os\fR, since it usually increases code size.
7802 .IP "\fB\-ftree\-loop\-optimize\fR" 4
7803 .IX Item "-ftree-loop-optimize"
7804 Perform loop optimizations on trees.  This flag is enabled by default
7805 at \fB\-O\fR and higher.
7806 .IP "\fB\-ftree\-loop\-linear\fR" 4
7807 .IX Item "-ftree-loop-linear"
7808 Perform loop interchange transformations on tree.  Same as
7809 \&\fB\-floop\-interchange\fR.  To use this code transformation, \s-1GCC\s0 has
7810 to be configured with \fB\-\-with\-isl\fR to enable the Graphite loop
7811 transformation infrastructure.
7812 .IP "\fB\-floop\-interchange\fR" 4
7813 .IX Item "-floop-interchange"
7814 Perform loop interchange transformations on loops.  Interchanging two
7815 nested loops switches the inner and outer loops.  For example, given a
7816 loop like:
7817 .Sp
7818 .Vb 5
7819 \&        DO J = 1, M
7820 \&          DO I = 1, N
7821 \&            A(J, I) = A(J, I) * C
7822 \&          ENDDO
7823 \&        ENDDO
7824 .Ve
7825 .Sp
7826 loop interchange transforms the loop as if it were written:
7827 .Sp
7828 .Vb 5
7829 \&        DO I = 1, N
7830 \&          DO J = 1, M
7831 \&            A(J, I) = A(J, I) * C
7832 \&          ENDDO
7833 \&        ENDDO
7834 .Ve
7835 .Sp
7836 which can be beneficial when \f(CW\*(C`N\*(C'\fR is larger than the caches,
7837 because in Fortran, the elements of an array are stored in memory
7838 contiguously by column, and the original loop iterates over rows,
7839 potentially creating at each access a cache miss.  This optimization
7840 applies to all the languages supported by \s-1GCC\s0 and is not limited to
7841 Fortran.  To use this code transformation, \s-1GCC\s0 has to be configured
7842 with \fB\-\-with\-isl\fR to enable the Graphite loop transformation
7843 infrastructure.
7844 .IP "\fB\-floop\-strip\-mine\fR" 4
7845 .IX Item "-floop-strip-mine"
7846 Perform loop strip mining transformations on loops.  Strip mining
7847 splits a loop into two nested loops.  The outer loop has strides
7848 equal to the strip size and the inner loop has strides of the
7849 original loop within a strip.  The strip length can be changed
7850 using the \fBloop-block-tile-size\fR parameter.  For example,
7851 given a loop like:
7852 .Sp
7853 .Vb 3
7854 \&        DO I = 1, N
7855 \&          A(I) = A(I) + C
7856 \&        ENDDO
7857 .Ve
7858 .Sp
7859 loop strip mining transforms the loop as if it were written:
7860 .Sp
7861 .Vb 5
7862 \&        DO II = 1, N, 51
7863 \&          DO I = II, min (II + 50, N)
7864 \&            A(I) = A(I) + C
7865 \&          ENDDO
7866 \&        ENDDO
7867 .Ve
7868 .Sp
7869 This optimization applies to all the languages supported by \s-1GCC\s0 and is
7870 not limited to Fortran.  To use this code transformation, \s-1GCC\s0 has to
7871 be configured with \fB\-\-with\-isl\fR to enable the Graphite loop
7872 transformation infrastructure.
7873 .IP "\fB\-floop\-block\fR" 4
7874 .IX Item "-floop-block"
7875 Perform loop blocking transformations on loops.  Blocking strip mines
7876 each loop in the loop nest such that the memory accesses of the
7877 element loops fit inside caches.  The strip length can be changed
7878 using the \fBloop-block-tile-size\fR parameter.  For example, given
7879 a loop like:
7880 .Sp
7881 .Vb 5
7882 \&        DO I = 1, N
7883 \&          DO J = 1, M
7884 \&            A(J, I) = B(I) + C(J)
7885 \&          ENDDO
7886 \&        ENDDO
7887 .Ve
7888 .Sp
7889 loop blocking transforms the loop as if it were written:
7890 .Sp
7891 .Vb 9
7892 \&        DO II = 1, N, 51
7893 \&          DO JJ = 1, M, 51
7894 \&            DO I = II, min (II + 50, N)
7895 \&              DO J = JJ, min (JJ + 50, M)
7896 \&                A(J, I) = B(I) + C(J)
7897 \&              ENDDO
7898 \&            ENDDO
7899 \&          ENDDO
7900 \&        ENDDO
7901 .Ve
7902 .Sp
7903 which can be beneficial when \f(CW\*(C`M\*(C'\fR is larger than the caches,
7904 because the innermost loop iterates over a smaller amount of data
7905 which can be kept in the caches.  This optimization applies to all the
7906 languages supported by \s-1GCC\s0 and is not limited to Fortran.  To use this
7907 code transformation, \s-1GCC\s0 has to be configured with \fB\-\-with\-isl\fR
7908 to enable the Graphite loop transformation infrastructure.
7909 .IP "\fB\-fgraphite\-identity\fR" 4
7910 .IX Item "-fgraphite-identity"
7911 Enable the identity transformation for graphite.  For every SCoP we generate
7912 the polyhedral representation and transform it back to gimple.  Using
7913 \&\fB\-fgraphite\-identity\fR we can check the costs or benefits of the
7914 \&\s-1GIMPLE\s0 \-> \s-1GRAPHITE\s0 \-> \s-1GIMPLE\s0 transformation.  Some minimal optimizations
7915 are also performed by the code generator \s-1ISL\s0, like index splitting and
7916 dead code elimination in loops.
7917 .IP "\fB\-floop\-nest\-optimize\fR" 4
7918 .IX Item "-floop-nest-optimize"
7919 Enable the \s-1ISL\s0 based loop nest optimizer.  This is a generic loop nest
7920 optimizer based on the Pluto optimization algorithms.  It calculates a loop
7921 structure optimized for data-locality and parallelism.  This option
7922 is experimental.
7923 .IP "\fB\-floop\-unroll\-and\-jam\fR" 4
7924 .IX Item "-floop-unroll-and-jam"
7925 Enable unroll and jam for the \s-1ISL\s0 based loop nest optimizer.  The unroll 
7926 factor can be changed using the \fBloop-unroll-jam-size\fR parameter.
7927 The unrolled dimension (counting from the most inner one) can be changed 
7928 using the \fBloop-unroll-jam-depth\fR parameter.                 .
7929 .IP "\fB\-floop\-parallelize\-all\fR" 4
7930 .IX Item "-floop-parallelize-all"
7931 Use the Graphite data dependence analysis to identify loops that can
7932 be parallelized.  Parallelize all the loops that can be analyzed to
7933 not contain loop carried dependences without checking that it is
7934 profitable to parallelize the loops.
7935 .IP "\fB\-fcheck\-data\-deps\fR" 4
7936 .IX Item "-fcheck-data-deps"
7937 Compare the results of several data dependence analyzers.  This option
7938 is used for debugging the data dependence analyzers.
7939 .IP "\fB\-ftree\-loop\-if\-convert\fR" 4
7940 .IX Item "-ftree-loop-if-convert"
7941 Attempt to transform conditional jumps in the innermost loops to
7942 branch-less equivalents.  The intent is to remove control-flow from
7943 the innermost loops in order to improve the ability of the
7944 vectorization pass to handle these loops.  This is enabled by default
7945 if vectorization is enabled.
7946 .IP "\fB\-ftree\-loop\-if\-convert\-stores\fR" 4
7947 .IX Item "-ftree-loop-if-convert-stores"
7948 Attempt to also if-convert conditional jumps containing memory writes.
7949 This transformation can be unsafe for multi-threaded programs as it
7950 transforms conditional memory writes into unconditional memory writes.
7951 For example,
7952 .Sp
7953 .Vb 3
7954 \&        for (i = 0; i < N; i++)
7955 \&          if (cond)
7956 \&            A[i] = expr;
7957 .Ve
7958 .Sp
7959 is transformed to
7960 .Sp
7961 .Vb 2
7962 \&        for (i = 0; i < N; i++)
7963 \&          A[i] = cond ? expr : A[i];
7964 .Ve
7965 .Sp
7966 potentially producing data races.
7967 .IP "\fB\-ftree\-loop\-distribution\fR" 4
7968 .IX Item "-ftree-loop-distribution"
7969 Perform loop distribution.  This flag can improve cache performance on
7970 big loop bodies and allow further loop optimizations, like
7971 parallelization or vectorization, to take place.  For example, the loop
7972 .Sp
7973 .Vb 4
7974 \&        DO I = 1, N
7975 \&          A(I) = B(I) + C
7976 \&          D(I) = E(I) * F
7977 \&        ENDDO
7978 .Ve
7979 .Sp
7980 is transformed to
7981 .Sp
7982 .Vb 6
7983 \&        DO I = 1, N
7984 \&           A(I) = B(I) + C
7985 \&        ENDDO
7986 \&        DO I = 1, N
7987 \&           D(I) = E(I) * F
7988 \&        ENDDO
7989 .Ve
7990 .IP "\fB\-ftree\-loop\-distribute\-patterns\fR" 4
7991 .IX Item "-ftree-loop-distribute-patterns"
7992 Perform loop distribution of patterns that can be code generated with
7993 calls to a library.  This flag is enabled by default at \fB\-O3\fR.
7994 .Sp
7995 This pass distributes the initialization loops and generates a call to
7996 memset zero.  For example, the loop
7997 .Sp
7998 .Vb 4
7999 \&        DO I = 1, N
8000 \&          A(I) = 0
8001 \&          B(I) = A(I) + I
8002 \&        ENDDO
8003 .Ve
8004 .Sp
8005 is transformed to
8006 .Sp
8007 .Vb 6
8008 \&        DO I = 1, N
8009 \&           A(I) = 0
8010 \&        ENDDO
8011 \&        DO I = 1, N
8012 \&           B(I) = A(I) + I
8013 \&        ENDDO
8014 .Ve
8015 .Sp
8016 and the initialization loop is transformed into a call to memset zero.
8017 .IP "\fB\-ftree\-loop\-im\fR" 4
8018 .IX Item "-ftree-loop-im"
8019 Perform loop invariant motion on trees.  This pass moves only invariants that
8020 are hard to handle at \s-1RTL\s0 level (function calls, operations that expand to
8021 nontrivial sequences of insns).  With \fB\-funswitch\-loops\fR it also moves
8022 operands of conditions that are invariant out of the loop, so that we can use
8023 just trivial invariantness analysis in loop unswitching.  The pass also includes
8024 store motion.
8025 .IP "\fB\-ftree\-loop\-ivcanon\fR" 4
8026 .IX Item "-ftree-loop-ivcanon"
8027 Create a canonical counter for number of iterations in loops for which
8028 determining number of iterations requires complicated analysis.  Later
8029 optimizations then may determine the number easily.  Useful especially
8030 in connection with unrolling.
8031 .IP "\fB\-fivopts\fR" 4
8032 .IX Item "-fivopts"
8033 Perform induction variable optimizations (strength reduction, induction
8034 variable merging and induction variable elimination) on trees.
8035 .IP "\fB\-ftree\-parallelize\-loops=n\fR" 4
8036 .IX Item "-ftree-parallelize-loops=n"
8037 Parallelize loops, i.e., split their iteration space to run in n threads.
8038 This is only possible for loops whose iterations are independent
8039 and can be arbitrarily reordered.  The optimization is only
8040 profitable on multiprocessor machines, for loops that are CPU-intensive,
8041 rather than constrained e.g. by memory bandwidth.  This option
8042 implies \fB\-pthread\fR, and thus is only supported on targets
8043 that have support for \fB\-pthread\fR.
8044 .IP "\fB\-ftree\-pta\fR" 4
8045 .IX Item "-ftree-pta"
8046 Perform function-local points-to analysis on trees.  This flag is
8047 enabled by default at \fB\-O\fR and higher.
8048 .IP "\fB\-ftree\-sra\fR" 4
8049 .IX Item "-ftree-sra"
8050 Perform scalar replacement of aggregates.  This pass replaces structure
8051 references with scalars to prevent committing structures to memory too
8052 early.  This flag is enabled by default at \fB\-O\fR and higher.
8053 .IP "\fB\-ftree\-copyrename\fR" 4
8054 .IX Item "-ftree-copyrename"
8055 Perform copy renaming on trees.  This pass attempts to rename compiler
8056 temporaries to other variables at copy locations, usually resulting in
8057 variable names which more closely resemble the original variables.  This flag
8058 is enabled by default at \fB\-O\fR and higher.
8059 .IP "\fB\-ftree\-coalesce\-inlined\-vars\fR" 4
8060 .IX Item "-ftree-coalesce-inlined-vars"
8061 Tell the copyrename pass (see \fB\-ftree\-copyrename\fR) to attempt to
8062 combine small user-defined variables too, but only if they are inlined
8063 from other functions.  It is a more limited form of
8064 \&\fB\-ftree\-coalesce\-vars\fR.  This may harm debug information of such
8065 inlined variables, but it keeps variables of the inlined-into
8066 function apart from each other, such that they are more likely to
8067 contain the expected values in a debugging session.
8068 .IP "\fB\-ftree\-coalesce\-vars\fR" 4
8069 .IX Item "-ftree-coalesce-vars"
8070 Tell the copyrename pass (see \fB\-ftree\-copyrename\fR) to attempt to
8071 combine small user-defined variables too, instead of just compiler
8072 temporaries.  This may severely limit the ability to debug an optimized
8073 program compiled with \fB\-fno\-var\-tracking\-assignments\fR.  In the
8074 negated form, this flag prevents \s-1SSA\s0 coalescing of user variables,
8075 including inlined ones.  This option is enabled by default.
8076 .IP "\fB\-ftree\-ter\fR" 4
8077 .IX Item "-ftree-ter"
8078 Perform temporary expression replacement during the \s-1SSA\-\s0>normal phase.  Single
8079 use/single def temporaries are replaced at their use location with their
8080 defining expression.  This results in non-GIMPLE code, but gives the expanders
8081 much more complex trees to work on resulting in better \s-1RTL\s0 generation.  This is
8082 enabled by default at \fB\-O\fR and higher.
8083 .IP "\fB\-ftree\-slsr\fR" 4
8084 .IX Item "-ftree-slsr"
8085 Perform straight-line strength reduction on trees.  This recognizes related
8086 expressions involving multiplications and replaces them by less expensive
8087 calculations when possible.  This is enabled by default at \fB\-O\fR and
8088 higher.
8089 .IP "\fB\-ftree\-vectorize\fR" 4
8090 .IX Item "-ftree-vectorize"
8091 Perform vectorization on trees. This flag enables \fB\-ftree\-loop\-vectorize\fR
8092 and \fB\-ftree\-slp\-vectorize\fR if not explicitly specified.
8093 .IP "\fB\-ftree\-loop\-vectorize\fR" 4
8094 .IX Item "-ftree-loop-vectorize"
8095 Perform loop vectorization on trees. This flag is enabled by default at
8096 \&\fB\-O3\fR and when \fB\-ftree\-vectorize\fR is enabled.
8097 .IP "\fB\-ftree\-slp\-vectorize\fR" 4
8098 .IX Item "-ftree-slp-vectorize"
8099 Perform basic block vectorization on trees. This flag is enabled by default at
8100 \&\fB\-O3\fR and when \fB\-ftree\-vectorize\fR is enabled.
8101 .IP "\fB\-fvect\-cost\-model=\fR\fImodel\fR" 4
8102 .IX Item "-fvect-cost-model=model"
8103 Alter the cost model used for vectorization.  The \fImodel\fR argument
8104 should be one of \fBunlimited\fR, \fBdynamic\fR or \fBcheap\fR.
8105 With the \fBunlimited\fR model the vectorized code-path is assumed
8106 to be profitable while with the \fBdynamic\fR model a runtime check
8107 guards the vectorized code-path to enable it only for iteration
8108 counts that will likely execute faster than when executing the original
8109 scalar loop.  The \fBcheap\fR model disables vectorization of
8110 loops where doing so would be cost prohibitive for example due to
8111 required runtime checks for data dependence or alignment but otherwise
8112 is equal to the \fBdynamic\fR model.
8113 The default cost model depends on other optimization flags and is
8114 either \fBdynamic\fR or \fBcheap\fR.
8115 .IP "\fB\-fsimd\-cost\-model=\fR\fImodel\fR" 4
8116 .IX Item "-fsimd-cost-model=model"
8117 Alter the cost model used for vectorization of loops marked with the OpenMP
8118 or Cilk Plus simd directive.  The \fImodel\fR argument should be one of
8119 \&\fBunlimited\fR, \fBdynamic\fR, \fBcheap\fR.  All values of \fImodel\fR
8120 have the same meaning as described in \fB\-fvect\-cost\-model\fR and by
8121 default a cost model defined with \fB\-fvect\-cost\-model\fR is used.
8122 .IP "\fB\-ftree\-vrp\fR" 4
8123 .IX Item "-ftree-vrp"
8124 Perform Value Range Propagation on trees.  This is similar to the
8125 constant propagation pass, but instead of values, ranges of values are
8126 propagated.  This allows the optimizers to remove unnecessary range
8127 checks like array bound checks and null pointer checks.  This is
8128 enabled by default at \fB\-O2\fR and higher.  Null pointer check
8129 elimination is only done if \fB\-fdelete\-null\-pointer\-checks\fR is
8130 enabled.
8131 .IP "\fB\-fsplit\-ivs\-in\-unroller\fR" 4
8132 .IX Item "-fsplit-ivs-in-unroller"
8133 Enables expression of values of induction variables in later iterations
8134 of the unrolled loop using the value in the first iteration.  This breaks
8135 long dependency chains, thus improving efficiency of the scheduling passes.
8136 .Sp
8137 A combination of \fB\-fweb\fR and \s-1CSE\s0 is often sufficient to obtain the
8138 same effect.  However, that is not reliable in cases where the loop body
8139 is more complicated than a single basic block.  It also does not work at all
8140 on some architectures due to restrictions in the \s-1CSE\s0 pass.
8141 .Sp
8142 This optimization is enabled by default.
8143 .IP "\fB\-fvariable\-expansion\-in\-unroller\fR" 4
8144 .IX Item "-fvariable-expansion-in-unroller"
8145 With this option, the compiler creates multiple copies of some
8146 local variables when unrolling a loop, which can result in superior code.
8147 .IP "\fB\-fpartial\-inlining\fR" 4
8148 .IX Item "-fpartial-inlining"
8149 Inline parts of functions.  This option has any effect only
8150 when inlining itself is turned on by the \fB\-finline\-functions\fR
8151 or \fB\-finline\-small\-functions\fR options.
8152 .Sp
8153 Enabled at level \fB\-O2\fR.
8154 .IP "\fB\-fpredictive\-commoning\fR" 4
8155 .IX Item "-fpredictive-commoning"
8156 Perform predictive commoning optimization, i.e., reusing computations
8157 (especially memory loads and stores) performed in previous
8158 iterations of loops.
8159 .Sp
8160 This option is enabled at level \fB\-O3\fR.
8161 .IP "\fB\-fprefetch\-loop\-arrays\fR" 4
8162 .IX Item "-fprefetch-loop-arrays"
8163 If supported by the target machine, generate instructions to prefetch
8164 memory to improve the performance of loops that access large arrays.
8165 .Sp
8166 This option may generate better or worse code; results are highly
8167 dependent on the structure of loops within the source code.
8168 .Sp
8169 Disabled at level \fB\-Os\fR.
8170 .IP "\fB\-fno\-peephole\fR" 4
8171 .IX Item "-fno-peephole"
8172 .PD 0
8173 .IP "\fB\-fno\-peephole2\fR" 4
8174 .IX Item "-fno-peephole2"
8175 .PD
8176 Disable any machine-specific peephole optimizations.  The difference
8177 between \fB\-fno\-peephole\fR and \fB\-fno\-peephole2\fR is in how they
8178 are implemented in the compiler; some targets use one, some use the
8179 other, a few use both.
8180 .Sp
8181 \&\fB\-fpeephole\fR is enabled by default.
8182 \&\fB\-fpeephole2\fR enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
8183 .IP "\fB\-fno\-guess\-branch\-probability\fR" 4
8184 .IX Item "-fno-guess-branch-probability"
8185 Do not guess branch probabilities using heuristics.
8186 .Sp
8187 \&\s-1GCC\s0 uses heuristics to guess branch probabilities if they are
8188 not provided by profiling feedback (\fB\-fprofile\-arcs\fR).  These
8189 heuristics are based on the control flow graph.  If some branch probabilities
8190 are specified by \f(CW\*(C`_\|_builtin_expect\*(C'\fR, then the heuristics are
8191 used to guess branch probabilities for the rest of the control flow graph,
8192 taking the \f(CW\*(C`_\|_builtin_expect\*(C'\fR info into account.  The interactions
8193 between the heuristics and \f(CW\*(C`_\|_builtin_expect\*(C'\fR can be complex, and in
8194 some cases, it may be useful to disable the heuristics so that the effects
8195 of \f(CW\*(C`_\|_builtin_expect\*(C'\fR are easier to understand.
8196 .Sp
8197 The default is \fB\-fguess\-branch\-probability\fR at levels
8198 \&\fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
8199 .IP "\fB\-freorder\-blocks\fR" 4
8200 .IX Item "-freorder-blocks"
8201 Reorder basic blocks in the compiled function in order to reduce number of
8202 taken branches and improve code locality.
8203 .Sp
8204 Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
8205 .IP "\fB\-freorder\-blocks\-and\-partition\fR" 4
8206 .IX Item "-freorder-blocks-and-partition"
8207 In addition to reordering basic blocks in the compiled function, in order
8208 to reduce number of taken branches, partitions hot and cold basic blocks
8209 into separate sections of the assembly and .o files, to improve
8210 paging and cache locality performance.
8211 .Sp
8212 This optimization is automatically turned off in the presence of
8213 exception handling, for linkonce sections, for functions with a user-defined
8214 section attribute and on any architecture that does not support named
8215 sections.
8216 .Sp
8217 Enabled for x86 at levels \fB\-O2\fR, \fB\-O3\fR.
8218 .IP "\fB\-freorder\-functions\fR" 4
8219 .IX Item "-freorder-functions"
8220 Reorder functions in the object file in order to
8221 improve code locality.  This is implemented by using special
8222 subsections \f(CW\*(C`.text.hot\*(C'\fR for most frequently executed functions and
8223 \&\f(CW\*(C`.text.unlikely\*(C'\fR for unlikely executed functions.  Reordering is done by
8224 the linker so object file format must support named sections and linker must
8225 place them in a reasonable way.
8226 .Sp
8227 Also profile feedback must be available to make this option effective.  See
8228 \&\fB\-fprofile\-arcs\fR for details.
8229 .Sp
8230 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
8231 .IP "\fB\-fstrict\-aliasing\fR" 4
8232 .IX Item "-fstrict-aliasing"
8233 Allow the compiler to assume the strictest aliasing rules applicable to
8234 the language being compiled.  For C (and \*(C+), this activates
8235 optimizations based on the type of expressions.  In particular, an
8236 object of one type is assumed never to reside at the same address as an
8237 object of a different type, unless the types are almost the same.  For
8238 example, an \f(CW\*(C`unsigned int\*(C'\fR can alias an \f(CW\*(C`int\*(C'\fR, but not a
8239 \&\f(CW\*(C`void*\*(C'\fR or a \f(CW\*(C`double\*(C'\fR.  A character type may alias any other
8240 type.
8241 .Sp
8242 Pay special attention to code like this:
8243 .Sp
8244 .Vb 4
8245 \&        union a_union {
8246 \&          int i;
8247 \&          double d;
8248 \&        };
8249 \&        
8250 \&        int f() {
8251 \&          union a_union t;
8252 \&          t.d = 3.0;
8253 \&          return t.i;
8254 \&        }
8255 .Ve
8256 .Sp
8257 The practice of reading from a different union member than the one most
8258 recently written to (called \*(L"type-punning\*(R") is common.  Even with
8259 \&\fB\-fstrict\-aliasing\fR, type-punning is allowed, provided the memory
8260 is accessed through the union type.  So, the code above works as
8261 expected.    However, this code might not:
8262 .Sp
8263 .Vb 7
8264 \&        int f() {
8265 \&          union a_union t;
8266 \&          int* ip;
8267 \&          t.d = 3.0;
8268 \&          ip = &t.i;
8269 \&          return *ip;
8270 \&        }
8271 .Ve
8272 .Sp
8273 Similarly, access by taking the address, casting the resulting pointer
8274 and dereferencing the result has undefined behavior, even if the cast
8275 uses a union type, e.g.:
8276 .Sp
8277 .Vb 4
8278 \&        int f() {
8279 \&          double d = 3.0;
8280 \&          return ((union a_union *) &d)\->i;
8281 \&        }
8282 .Ve
8283 .Sp
8284 The \fB\-fstrict\-aliasing\fR option is enabled at levels
8285 \&\fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
8286 .IP "\fB\-fstrict\-overflow\fR" 4
8287 .IX Item "-fstrict-overflow"
8288 Allow the compiler to assume strict signed overflow rules, depending
8289 on the language being compiled.  For C (and \*(C+) this means that
8290 overflow when doing arithmetic with signed numbers is undefined, which
8291 means that the compiler may assume that it does not happen.  This
8292 permits various optimizations.  For example, the compiler assumes
8293 that an expression like \f(CW\*(C`i + 10 > i\*(C'\fR is always true for
8294 signed \f(CW\*(C`i\*(C'\fR.  This assumption is only valid if signed overflow is
8295 undefined, as the expression is false if \f(CW\*(C`i + 10\*(C'\fR overflows when
8296 using twos complement arithmetic.  When this option is in effect any
8297 attempt to determine whether an operation on signed numbers 
8298 overflows must be written carefully to not actually involve overflow.
8299 .Sp
8300 This option also allows the compiler to assume strict pointer
8301 semantics: given a pointer to an object, if adding an offset to that
8302 pointer does not produce a pointer to the same object, the addition is
8303 undefined.  This permits the compiler to conclude that \f(CW\*(C`p + u >
8304 p\*(C'\fR is always true for a pointer \f(CW\*(C`p\*(C'\fR and unsigned integer
8305 \&\f(CW\*(C`u\*(C'\fR.  This assumption is only valid because pointer wraparound is
8306 undefined, as the expression is false if \f(CW\*(C`p + u\*(C'\fR overflows using
8307 twos complement arithmetic.
8308 .Sp
8309 See also the \fB\-fwrapv\fR option.  Using \fB\-fwrapv\fR means
8310 that integer signed overflow is fully defined: it wraps.  When
8311 \&\fB\-fwrapv\fR is used, there is no difference between
8312 \&\fB\-fstrict\-overflow\fR and \fB\-fno\-strict\-overflow\fR for
8313 integers.  With \fB\-fwrapv\fR certain types of overflow are
8314 permitted.  For example, if the compiler gets an overflow when doing
8315 arithmetic on constants, the overflowed value can still be used with
8316 \&\fB\-fwrapv\fR, but not otherwise.
8317 .Sp
8318 The \fB\-fstrict\-overflow\fR option is enabled at levels
8319 \&\fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
8320 .IP "\fB\-falign\-functions\fR" 4
8321 .IX Item "-falign-functions"
8322 .PD 0
8323 .IP "\fB\-falign\-functions=\fR\fIn\fR" 4
8324 .IX Item "-falign-functions=n"
8325 .PD
8326 Align the start of functions to the next power-of-two greater than
8327 \&\fIn\fR, skipping up to \fIn\fR bytes.  For instance,
8328 \&\fB\-falign\-functions=32\fR aligns functions to the next 32\-byte
8329 boundary, but \fB\-falign\-functions=24\fR aligns to the next
8330 32\-byte boundary only if this can be done by skipping 23 bytes or less.
8331 .Sp
8332 \&\fB\-fno\-align\-functions\fR and \fB\-falign\-functions=1\fR are
8333 equivalent and mean that functions are not aligned.
8334 .Sp
8335 Some assemblers only support this flag when \fIn\fR is a power of two;
8336 in that case, it is rounded up.
8337 .Sp
8338 If \fIn\fR is not specified or is zero, use a machine-dependent default.
8339 .Sp
8340 Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
8341 .IP "\fB\-falign\-labels\fR" 4
8342 .IX Item "-falign-labels"
8343 .PD 0
8344 .IP "\fB\-falign\-labels=\fR\fIn\fR" 4
8345 .IX Item "-falign-labels=n"
8346 .PD
8347 Align all branch targets to a power-of-two boundary, skipping up to
8348 \&\fIn\fR bytes like \fB\-falign\-functions\fR.  This option can easily
8349 make code slower, because it must insert dummy operations for when the
8350 branch target is reached in the usual flow of the code.
8351 .Sp
8352 \&\fB\-fno\-align\-labels\fR and \fB\-falign\-labels=1\fR are
8353 equivalent and mean that labels are not aligned.
8354 .Sp
8355 If \fB\-falign\-loops\fR or \fB\-falign\-jumps\fR are applicable and
8356 are greater than this value, then their values are used instead.
8357 .Sp
8358 If \fIn\fR is not specified or is zero, use a machine-dependent default
8359 which is very likely to be \fB1\fR, meaning no alignment.
8360 .Sp
8361 Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
8362 .IP "\fB\-falign\-loops\fR" 4
8363 .IX Item "-falign-loops"
8364 .PD 0
8365 .IP "\fB\-falign\-loops=\fR\fIn\fR" 4
8366 .IX Item "-falign-loops=n"
8367 .PD
8368 Align loops to a power-of-two boundary, skipping up to \fIn\fR bytes
8369 like \fB\-falign\-functions\fR.  If the loops are
8370 executed many times, this makes up for any execution of the dummy
8371 operations.
8372 .Sp
8373 \&\fB\-fno\-align\-loops\fR and \fB\-falign\-loops=1\fR are
8374 equivalent and mean that loops are not aligned.
8375 .Sp
8376 If \fIn\fR is not specified or is zero, use a machine-dependent default.
8377 .Sp
8378 Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
8379 .IP "\fB\-falign\-jumps\fR" 4
8380 .IX Item "-falign-jumps"
8381 .PD 0
8382 .IP "\fB\-falign\-jumps=\fR\fIn\fR" 4
8383 .IX Item "-falign-jumps=n"
8384 .PD
8385 Align branch targets to a power-of-two boundary, for branch targets
8386 where the targets can only be reached by jumping, skipping up to \fIn\fR
8387 bytes like \fB\-falign\-functions\fR.  In this case, no dummy operations
8388 need be executed.
8389 .Sp
8390 \&\fB\-fno\-align\-jumps\fR and \fB\-falign\-jumps=1\fR are
8391 equivalent and mean that loops are not aligned.
8392 .Sp
8393 If \fIn\fR is not specified or is zero, use a machine-dependent default.
8394 .Sp
8395 Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
8396 .IP "\fB\-funit\-at\-a\-time\fR" 4
8397 .IX Item "-funit-at-a-time"
8398 This option is left for compatibility reasons. \fB\-funit\-at\-a\-time\fR
8399 has no effect, while \fB\-fno\-unit\-at\-a\-time\fR implies
8400 \&\fB\-fno\-toplevel\-reorder\fR and \fB\-fno\-section\-anchors\fR.
8401 .Sp
8402 Enabled by default.
8403 .IP "\fB\-fno\-toplevel\-reorder\fR" 4
8404 .IX Item "-fno-toplevel-reorder"
8405 Do not reorder top-level functions, variables, and \f(CW\*(C`asm\*(C'\fR
8406 statements.  Output them in the same order that they appear in the
8407 input file.  When this option is used, unreferenced static variables
8408 are not removed.  This option is intended to support existing code
8409 that relies on a particular ordering.  For new code, it is better to
8410 use attributes when possible.
8411 .Sp
8412 Enabled at level \fB\-O0\fR.  When disabled explicitly, it also implies
8413 \&\fB\-fno\-section\-anchors\fR, which is otherwise enabled at \fB\-O0\fR on some
8414 targets.
8415 .IP "\fB\-fweb\fR" 4
8416 .IX Item "-fweb"
8417 Constructs webs as commonly used for register allocation purposes and assign
8418 each web individual pseudo register.  This allows the register allocation pass
8419 to operate on pseudos directly, but also strengthens several other optimization
8420 passes, such as \s-1CSE\s0, loop optimizer and trivial dead code remover.  It can,
8421 however, make debugging impossible, since variables no longer stay in a
8422 \&\*(L"home register\*(R".
8423 .Sp
8424 Enabled by default with \fB\-funroll\-loops\fR.
8425 .IP "\fB\-fwhole\-program\fR" 4
8426 .IX Item "-fwhole-program"
8427 Assume that the current compilation unit represents the whole program being
8428 compiled.  All public functions and variables with the exception of \f(CW\*(C`main\*(C'\fR
8429 and those merged by attribute \f(CW\*(C`externally_visible\*(C'\fR become static functions
8430 and in effect are optimized more aggressively by interprocedural optimizers.
8431 .Sp
8432 This option should not be used in combination with \fB\-flto\fR.
8433 Instead relying on a linker plugin should provide safer and more precise
8434 information.
8435 .IP "\fB\-flto[=\fR\fIn\fR\fB]\fR" 4
8436 .IX Item "-flto[=n]"
8437 This option runs the standard link-time optimizer.  When invoked
8438 with source code, it generates \s-1GIMPLE\s0 (one of \s-1GCC\s0's internal
8439 representations) and writes it to special \s-1ELF\s0 sections in the object
8440 file.  When the object files are linked together, all the function
8441 bodies are read from these \s-1ELF\s0 sections and instantiated as if they
8442 had been part of the same translation unit.
8443 .Sp
8444 To use the link-time optimizer, \fB\-flto\fR and optimization
8445 options should be specified at compile time and during the final link.
8446 For example:
8447 .Sp
8448 .Vb 3
8449 \&        gcc \-c \-O2 \-flto foo.c
8450 \&        gcc \-c \-O2 \-flto bar.c
8451 \&        gcc \-o myprog \-flto \-O2 foo.o bar.o
8452 .Ve
8453 .Sp
8454 The first two invocations to \s-1GCC\s0 save a bytecode representation
8455 of \s-1GIMPLE\s0 into special \s-1ELF\s0 sections inside \fIfoo.o\fR and
8456 \&\fIbar.o\fR.  The final invocation reads the \s-1GIMPLE\s0 bytecode from
8457 \&\fIfoo.o\fR and \fIbar.o\fR, merges the two files into a single
8458 internal image, and compiles the result as usual.  Since both
8459 \&\fIfoo.o\fR and \fIbar.o\fR are merged into a single image, this
8460 causes all the interprocedural analyses and optimizations in \s-1GCC\s0 to
8461 work across the two files as if they were a single one.  This means,
8462 for example, that the inliner is able to inline functions in
8463 \&\fIbar.o\fR into functions in \fIfoo.o\fR and vice-versa.
8464 .Sp
8465 Another (simpler) way to enable link-time optimization is:
8466 .Sp
8467 .Vb 1
8468 \&        gcc \-o myprog \-flto \-O2 foo.c bar.c
8469 .Ve
8470 .Sp
8471 The above generates bytecode for \fIfoo.c\fR and \fIbar.c\fR,
8472 merges them together into a single \s-1GIMPLE\s0 representation and optimizes
8473 them as usual to produce \fImyprog\fR.
8474 .Sp
8475 The only important thing to keep in mind is that to enable link-time
8476 optimizations you need to use the \s-1GCC\s0 driver to perform the link-step.
8477 \&\s-1GCC\s0 then automatically performs link-time optimization if any of the
8478 objects involved were compiled with the \fB\-flto\fR command-line option.  
8479 You generally
8480 should specify the optimization options to be used for link-time
8481 optimization though \s-1GCC\s0 tries to be clever at guessing an
8482 optimization level to use from the options used at compile-time
8483 if you fail to specify one at link-time.  You can always override
8484 the automatic decision to do link-time optimization at link-time
8485 by passing \fB\-fno\-lto\fR to the link command.
8486 .Sp
8487 To make whole program optimization effective, it is necessary to make
8488 certain whole program assumptions.  The compiler needs to know
8489 what functions and variables can be accessed by libraries and runtime
8490 outside of the link-time optimized unit.  When supported by the linker,
8491 the linker plugin (see \fB\-fuse\-linker\-plugin\fR) passes information
8492 to the compiler about used and externally visible symbols.  When
8493 the linker plugin is not available, \fB\-fwhole\-program\fR should be
8494 used to allow the compiler to make these assumptions, which leads
8495 to more aggressive optimization decisions.
8496 .Sp
8497 When \fB\-fuse\-linker\-plugin\fR is not enabled then, when a file is
8498 compiled with \fB\-flto\fR, the generated object file is larger than
8499 a regular object file because it contains \s-1GIMPLE\s0 bytecodes and the usual
8500 final code (see \fB\-ffat\-lto\-objects\fR.  This means that
8501 object files with \s-1LTO\s0 information can be linked as normal object
8502 files; if \fB\-fno\-lto\fR is passed to the linker, no
8503 interprocedural optimizations are applied.  Note that when
8504 \&\fB\-fno\-fat\-lto\-objects\fR is enabled the compile-stage is faster
8505 but you cannot perform a regular, non-LTO link on them.
8506 .Sp
8507 Additionally, the optimization flags used to compile individual files
8508 are not necessarily related to those used at link time.  For instance,
8509 .Sp
8510 .Vb 3
8511 \&        gcc \-c \-O0 \-ffat\-lto\-objects \-flto foo.c
8512 \&        gcc \-c \-O0 \-ffat\-lto\-objects \-flto bar.c
8513 \&        gcc \-o myprog \-O3 foo.o bar.o
8514 .Ve
8515 .Sp
8516 This produces individual object files with unoptimized assembler
8517 code, but the resulting binary \fImyprog\fR is optimized at
8518 \&\fB\-O3\fR.  If, instead, the final binary is generated with
8519 \&\fB\-fno\-lto\fR, then \fImyprog\fR is not optimized.
8520 .Sp
8521 When producing the final binary, \s-1GCC\s0 only
8522 applies link-time optimizations to those files that contain bytecode.
8523 Therefore, you can mix and match object files and libraries with
8524 \&\s-1GIMPLE\s0 bytecodes and final object code.  \s-1GCC\s0 automatically selects
8525 which files to optimize in \s-1LTO\s0 mode and which files to link without
8526 further processing.
8527 .Sp
8528 There are some code generation flags preserved by \s-1GCC\s0 when
8529 generating bytecodes, as they need to be used during the final link
8530 stage.  Generally options specified at link-time override those
8531 specified at compile-time.
8532 .Sp
8533 If you do not specify an optimization level option \fB\-O\fR at
8534 link-time then \s-1GCC\s0 computes one based on the optimization levels
8535 used when compiling the object files.  The highest optimization
8536 level wins here.
8537 .Sp
8538 Currently, the following options and their setting are take from
8539 the first object file that explicitely specified it: 
8540 \&\fB\-fPIC\fR, \fB\-fpic\fR, \fB\-fpie\fR, \fB\-fcommon\fR,
8541 \&\fB\-fexceptions\fR, \fB\-fnon\-call\-exceptions\fR, \fB\-fgnu\-tm\fR
8542 and all the \fB\-m\fR target flags.
8543 .Sp
8544 Certain \s-1ABI\s0 changing flags are required to match in all compilation-units
8545 and trying to override this at link-time with a conflicting value
8546 is ignored.  This includes options such as \fB\-freg\-struct\-return\fR
8547 and \fB\-fpcc\-struct\-return\fR.
8548 .Sp
8549 Other options such as \fB\-ffp\-contract\fR, \fB\-fno\-strict\-overflow\fR,
8550 \&\fB\-fwrapv\fR, \fB\-fno\-trapv\fR or \fB\-fno\-strict\-aliasing\fR
8551 are passed through to the link stage and merged conservatively for
8552 conflicting translation units.  Specifically
8553 \&\fB\-fno\-strict\-overflow\fR, \fB\-fwrapv\fR and \fB\-fno\-trapv\fR take
8554 precedence and for example \fB\-ffp\-contract=off\fR takes precedence
8555 over \fB\-ffp\-contract=fast\fR.  You can override them at linke-time.
8556 .Sp
8557 It is recommended that you compile all the files participating in the
8558 same link with the same options and also specify those options at
8559 link time.
8560 .Sp
8561 If \s-1LTO\s0 encounters objects with C linkage declared with incompatible
8562 types in separate translation units to be linked together (undefined
8563 behavior according to \s-1ISO\s0 C99 6.2.7), a non-fatal diagnostic may be
8564 issued.  The behavior is still undefined at run time.  Similar
8565 diagnostics may be raised for other languages.
8566 .Sp
8567 Another feature of \s-1LTO\s0 is that it is possible to apply interprocedural
8568 optimizations on files written in different languages:
8569 .Sp
8570 .Vb 4
8571 \&        gcc \-c \-flto foo.c
8572 \&        g++ \-c \-flto bar.cc
8573 \&        gfortran \-c \-flto baz.f90
8574 \&        g++ \-o myprog \-flto \-O3 foo.o bar.o baz.o \-lgfortran
8575 .Ve
8576 .Sp
8577 Notice that the final link is done with \fBg++\fR to get the \*(C+
8578 runtime libraries and \fB\-lgfortran\fR is added to get the Fortran
8579 runtime libraries.  In general, when mixing languages in \s-1LTO\s0 mode, you
8580 should use the same link command options as when mixing languages in a
8581 regular (non-LTO) compilation.
8582 .Sp
8583 If object files containing \s-1GIMPLE\s0 bytecode are stored in a library archive, say
8584 \&\fIlibfoo.a\fR, it is possible to extract and use them in an \s-1LTO\s0 link if you
8585 are using a linker with plugin support.  To create static libraries suitable
8586 for \s-1LTO\s0, use \fBgcc-ar\fR and \fBgcc-ranlib\fR instead of \fBar\fR
8587 and \fBranlib\fR; 
8588 to show the symbols of object files with \s-1GIMPLE\s0 bytecode, use
8589 \&\fBgcc-nm\fR.  Those commands require that \fBar\fR, \fBranlib\fR
8590 and \fBnm\fR have been compiled with plugin support.  At link time, use the the
8591 flag \fB\-fuse\-linker\-plugin\fR to ensure that the library participates in
8592 the \s-1LTO\s0 optimization process:
8593 .Sp
8594 .Vb 1
8595 \&        gcc \-o myprog \-O2 \-flto \-fuse\-linker\-plugin a.o b.o \-lfoo
8596 .Ve
8597 .Sp
8598 With the linker plugin enabled, the linker extracts the needed
8599 \&\s-1GIMPLE\s0 files from \fIlibfoo.a\fR and passes them on to the running \s-1GCC\s0
8600 to make them part of the aggregated \s-1GIMPLE\s0 image to be optimized.
8601 .Sp
8602 If you are not using a linker with plugin support and/or do not
8603 enable the linker plugin, then the objects inside \fIlibfoo.a\fR
8604 are extracted and linked as usual, but they do not participate
8605 in the \s-1LTO\s0 optimization process.  In order to make a static library suitable
8606 for both \s-1LTO\s0 optimization and usual linkage, compile its object files with
8607 \&\fB\-flto\fR \fB\-ffat\-lto\-objects\fR.
8608 .Sp
8609 Link-time optimizations do not require the presence of the whole program to
8610 operate.  If the program does not require any symbols to be exported, it is
8611 possible to combine \fB\-flto\fR and \fB\-fwhole\-program\fR to allow
8612 the interprocedural optimizers to use more aggressive assumptions which may
8613 lead to improved optimization opportunities.
8614 Use of \fB\-fwhole\-program\fR is not needed when linker plugin is
8615 active (see \fB\-fuse\-linker\-plugin\fR).
8616 .Sp
8617 The current implementation of \s-1LTO\s0 makes no
8618 attempt to generate bytecode that is portable between different
8619 types of hosts.  The bytecode files are versioned and there is a
8620 strict version check, so bytecode files generated in one version of
8621 \&\s-1GCC\s0 do not work with an older or newer version of \s-1GCC\s0.
8622 .Sp
8623 Link-time optimization does not work well with generation of debugging
8624 information.  Combining \fB\-flto\fR with
8625 \&\fB\-g\fR is currently experimental and expected to produce unexpected
8626 results.
8627 .Sp
8628 If you specify the optional \fIn\fR, the optimization and code
8629 generation done at link time is executed in parallel using \fIn\fR
8630 parallel jobs by utilizing an installed \fBmake\fR program.  The
8631 environment variable \fB\s-1MAKE\s0\fR may be used to override the program
8632 used.  The default value for \fIn\fR is 1.
8633 .Sp
8634 You can also specify \fB\-flto=jobserver\fR to use \s-1GNU\s0 make's
8635 job server mode to determine the number of parallel jobs. This
8636 is useful when the Makefile calling \s-1GCC\s0 is already executing in parallel.
8637 You must prepend a \fB+\fR to the command recipe in the parent Makefile
8638 for this to work.  This option likely only works if \fB\s-1MAKE\s0\fR is
8639 \&\s-1GNU\s0 make.
8640 .IP "\fB\-flto\-partition=\fR\fIalg\fR" 4
8641 .IX Item "-flto-partition=alg"
8642 Specify the partitioning algorithm used by the link-time optimizer.
8643 The value is either \fB1to1\fR to specify a partitioning mirroring
8644 the original source files or \fBbalanced\fR to specify partitioning
8645 into equally sized chunks (whenever possible) or \fBmax\fR to create
8646 new partition for every symbol where possible.  Specifying \fBnone\fR
8647 as an algorithm disables partitioning and streaming completely. 
8648 The default value is \fBbalanced\fR. While \fB1to1\fR can be used
8649 as an workaround for various code ordering issues, the \fBmax\fR
8650 partitioning is intended for internal testing only.
8651 The value \fBone\fR specifies that exactly one partition should be
8652 used while the value \fBnone\fR bypasses partitioning and executes
8653 the link-time optimization step directly from the \s-1WPA\s0 phase.
8654 .IP "\fB\-flto\-odr\-type\-merging\fR" 4
8655 .IX Item "-flto-odr-type-merging"
8656 Enable streaming of mangled types names of \*(C+ types and their unification
8657 at linktime.  This increases size of \s-1LTO\s0 object files, but enable
8658 diagnostics about One Definition Rule violations.
8659 .IP "\fB\-flto\-compression\-level=\fR\fIn\fR" 4
8660 .IX Item "-flto-compression-level=n"
8661 This option specifies the level of compression used for intermediate
8662 language written to \s-1LTO\s0 object files, and is only meaningful in
8663 conjunction with \s-1LTO\s0 mode (\fB\-flto\fR).  Valid
8664 values are 0 (no compression) to 9 (maximum compression).  Values
8665 outside this range are clamped to either 0 or 9.  If the option is not
8666 given, a default balanced compression setting is used.
8667 .IP "\fB\-flto\-report\fR" 4
8668 .IX Item "-flto-report"
8669 Prints a report with internal details on the workings of the link-time
8670 optimizer.  The contents of this report vary from version to version.
8671 It is meant to be useful to \s-1GCC\s0 developers when processing object
8672 files in \s-1LTO\s0 mode (via \fB\-flto\fR).
8673 .Sp
8674 Disabled by default.
8675 .IP "\fB\-flto\-report\-wpa\fR" 4
8676 .IX Item "-flto-report-wpa"
8677 Like \fB\-flto\-report\fR, but only print for the \s-1WPA\s0 phase of Link
8678 Time Optimization.
8679 .IP "\fB\-fuse\-linker\-plugin\fR" 4
8680 .IX Item "-fuse-linker-plugin"
8681 Enables the use of a linker plugin during link-time optimization.  This
8682 option relies on plugin support in the linker, which is available in gold
8683 or in \s-1GNU\s0 ld 2.21 or newer.
8684 .Sp
8685 This option enables the extraction of object files with \s-1GIMPLE\s0 bytecode out
8686 of library archives. This improves the quality of optimization by exposing
8687 more code to the link-time optimizer.  This information specifies what
8688 symbols can be accessed externally (by non-LTO object or during dynamic
8689 linking).  Resulting code quality improvements on binaries (and shared
8690 libraries that use hidden visibility) are similar to \fB\-fwhole\-program\fR.
8691 See \fB\-flto\fR for a description of the effect of this flag and how to
8692 use it.
8693 .Sp
8694 This option is enabled by default when \s-1LTO\s0 support in \s-1GCC\s0 is enabled
8695 and \s-1GCC\s0 was configured for use with
8696 a linker supporting plugins (\s-1GNU\s0 ld 2.21 or newer or gold).
8697 .IP "\fB\-ffat\-lto\-objects\fR" 4
8698 .IX Item "-ffat-lto-objects"
8699 Fat \s-1LTO\s0 objects are object files that contain both the intermediate language
8700 and the object code. This makes them usable for both \s-1LTO\s0 linking and normal
8701 linking. This option is effective only when compiling with \fB\-flto\fR
8702 and is ignored at link time.
8703 .Sp
8704 \&\fB\-fno\-fat\-lto\-objects\fR improves compilation time over plain \s-1LTO\s0, but
8705 requires the complete toolchain to be aware of \s-1LTO\s0. It requires a linker with
8706 linker plugin support for basic functionality.  Additionally,
8707 \&\fBnm\fR, \fBar\fR and \fBranlib\fR
8708 need to support linker plugins to allow a full-featured build environment
8709 (capable of building static libraries etc).  \s-1GCC\s0 provides the \fBgcc-ar\fR,
8710 \&\fBgcc-nm\fR, \fBgcc-ranlib\fR wrappers to pass the right options
8711 to these tools. With non fat \s-1LTO\s0 makefiles need to be modified to use them.
8712 .Sp
8713 The default is \fB\-fno\-fat\-lto\-objects\fR on targets with linker plugin
8714 support.
8715 .IP "\fB\-fcompare\-elim\fR" 4
8716 .IX Item "-fcompare-elim"
8717 After register allocation and post-register allocation instruction splitting,
8718 identify arithmetic instructions that compute processor flags similar to a
8719 comparison operation based on that arithmetic.  If possible, eliminate the
8720 explicit comparison operation.
8721 .Sp
8722 This pass only applies to certain targets that cannot explicitly represent
8723 the comparison operation before register allocation is complete.
8724 .Sp
8725 Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
8726 .IP "\fB\-fcprop\-registers\fR" 4
8727 .IX Item "-fcprop-registers"
8728 After register allocation and post-register allocation instruction splitting,
8729 perform a copy-propagation pass to try to reduce scheduling dependencies
8730 and occasionally eliminate the copy.
8731 .Sp
8732 Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
8733 .IP "\fB\-fprofile\-correction\fR" 4
8734 .IX Item "-fprofile-correction"
8735 Profiles collected using an instrumented binary for multi-threaded programs may
8736 be inconsistent due to missed counter updates. When this option is specified,
8737 \&\s-1GCC\s0 uses heuristics to correct or smooth out such inconsistencies. By
8738 default, \s-1GCC\s0 emits an error message when an inconsistent profile is detected.
8739 .IP "\fB\-fprofile\-dir=\fR\fIpath\fR" 4
8740 .IX Item "-fprofile-dir=path"
8741 Set the directory to search for the profile data files in to \fIpath\fR.
8742 This option affects only the profile data generated by
8743 \&\fB\-fprofile\-generate\fR, \fB\-ftest\-coverage\fR, \fB\-fprofile\-arcs\fR
8744 and used by \fB\-fprofile\-use\fR and \fB\-fbranch\-probabilities\fR
8745 and its related options.  Both absolute and relative paths can be used.
8746 By default, \s-1GCC\s0 uses the current directory as \fIpath\fR, thus the
8747 profile data file appears in the same directory as the object file.
8748 .IP "\fB\-fprofile\-generate\fR" 4
8749 .IX Item "-fprofile-generate"
8750 .PD 0
8751 .IP "\fB\-fprofile\-generate=\fR\fIpath\fR" 4
8752 .IX Item "-fprofile-generate=path"
8753 .PD
8754 Enable options usually used for instrumenting application to produce
8755 profile useful for later recompilation with profile feedback based
8756 optimization.  You must use \fB\-fprofile\-generate\fR both when
8757 compiling and when linking your program.
8758 .Sp
8759 The following options are enabled: \fB\-fprofile\-arcs\fR, \fB\-fprofile\-values\fR, \fB\-fvpt\fR.
8760 .Sp
8761 If \fIpath\fR is specified, \s-1GCC\s0 looks at the \fIpath\fR to find
8762 the profile feedback data files. See \fB\-fprofile\-dir\fR.
8763 .IP "\fB\-fprofile\-use\fR" 4
8764 .IX Item "-fprofile-use"
8765 .PD 0
8766 .IP "\fB\-fprofile\-use=\fR\fIpath\fR" 4
8767 .IX Item "-fprofile-use=path"
8768 .PD
8769 Enable profile feedback-directed optimizations, 
8770 and the following optimizations
8771 which are generally profitable only with profile feedback available:
8772 \&\fB\-fbranch\-probabilities\fR, \fB\-fvpt\fR,
8773 \&\fB\-funroll\-loops\fR, \fB\-fpeel\-loops\fR, \fB\-ftracer\fR, 
8774 \&\fB\-ftree\-vectorize\fR, and \fBftree-loop-distribute-patterns\fR.
8775 .Sp
8776 By default, \s-1GCC\s0 emits an error message if the feedback profiles do not
8777 match the source code.  This error can be turned into a warning by using
8778 \&\fB\-Wcoverage\-mismatch\fR.  Note this may result in poorly optimized
8779 code.
8780 .Sp
8781 If \fIpath\fR is specified, \s-1GCC\s0 looks at the \fIpath\fR to find
8782 the profile feedback data files. See \fB\-fprofile\-dir\fR.
8783 .IP "\fB\-fauto\-profile\fR" 4
8784 .IX Item "-fauto-profile"
8785 .PD 0
8786 .IP "\fB\-fauto\-profile=\fR\fIpath\fR" 4
8787 .IX Item "-fauto-profile=path"
8788 .PD
8789 Enable sampling-based feedback-directed optimizations, 
8790 and the following optimizations
8791 which are generally profitable only with profile feedback available:
8792 \&\fB\-fbranch\-probabilities\fR, \fB\-fvpt\fR,
8793 \&\fB\-funroll\-loops\fR, \fB\-fpeel\-loops\fR, \fB\-ftracer\fR, 
8794 \&\fB\-ftree\-vectorize\fR,
8795 \&\fB\-finline\-functions\fR, \fB\-fipa\-cp\fR, \fB\-fipa\-cp\-clone\fR,
8796 \&\fB\-fpredictive\-commoning\fR, \fB\-funswitch\-loops\fR,
8797 \&\fB\-fgcse\-after\-reload\fR, and \fB\-ftree\-loop\-distribute\-patterns\fR.
8798 .Sp
8799 \&\fIpath\fR is the name of a file containing AutoFDO profile information.
8800 If omitted, it defaults to \fIfbdata.afdo\fR in the current directory.
8801 .Sp
8802 Producing an AutoFDO profile data file requires running your program
8803 with the \fBperf\fR utility on a supported GNU/Linux target system.
8804 For more information, see <\fBhttps://perf.wiki.kernel.org/\fR>.
8805 .Sp
8806 E.g.
8807 .Sp
8808 .Vb 2
8809 \&        perf record \-e br_inst_retired:near_taken \-b \-o perf.data \e
8810 \&            \-\- your_program
8811 .Ve
8812 .Sp
8813 Then use the \fBcreate_gcov\fR tool to convert the raw profile data
8814 to a format that can be used by \s-1GCC\s0.  You must also supply the 
8815 unstripped binary for your program to this tool.  
8816 See <\fBhttps://github.com/google/autofdo\fR>.
8817 .Sp
8818 E.g.
8819 .Sp
8820 .Vb 2
8821 \&        create_gcov \-\-binary=your_program.unstripped \-\-profile=perf.data \e
8822 \&            \-\-gcov=profile.afdo
8823 .Ve
8824 .PP
8825 The following options control compiler behavior regarding floating-point 
8826 arithmetic.  These options trade off between speed and
8827 correctness.  All must be specifically enabled.
8828 .IP "\fB\-ffloat\-store\fR" 4
8829 .IX Item "-ffloat-store"
8830 Do not store floating-point variables in registers, and inhibit other
8831 options that might change whether a floating-point value is taken from a
8832 register or memory.
8833 .Sp
8834 This option prevents undesirable excess precision on machines such as
8835 the 68000 where the floating registers (of the 68881) keep more
8836 precision than a \f(CW\*(C`double\*(C'\fR is supposed to have.  Similarly for the
8837 x86 architecture.  For most programs, the excess precision does only
8838 good, but a few programs rely on the precise definition of \s-1IEEE\s0 floating
8839 point.  Use \fB\-ffloat\-store\fR for such programs, after modifying
8840 them to store all pertinent intermediate computations into variables.
8841 .IP "\fB\-fexcess\-precision=\fR\fIstyle\fR" 4
8842 .IX Item "-fexcess-precision=style"
8843 This option allows further control over excess precision on machines
8844 where floating-point registers have more precision than the \s-1IEEE\s0
8845 \&\f(CW\*(C`float\*(C'\fR and \f(CW\*(C`double\*(C'\fR types and the processor does not
8846 support operations rounding to those types.  By default,
8847 \&\fB\-fexcess\-precision=fast\fR is in effect; this means that
8848 operations are carried out in the precision of the registers and that
8849 it is unpredictable when rounding to the types specified in the source
8850 code takes place.  When compiling C, if
8851 \&\fB\-fexcess\-precision=standard\fR is specified then excess
8852 precision follows the rules specified in \s-1ISO\s0 C99; in particular,
8853 both casts and assignments cause values to be rounded to their
8854 semantic types (whereas \fB\-ffloat\-store\fR only affects
8855 assignments).  This option is enabled by default for C if a strict
8856 conformance option such as \fB\-std=c99\fR is used.
8857 .Sp
8858 \&\fB\-fexcess\-precision=standard\fR is not implemented for languages
8859 other than C, and has no effect if
8860 \&\fB\-funsafe\-math\-optimizations\fR or \fB\-ffast\-math\fR is
8861 specified.  On the x86, it also has no effect if \fB\-mfpmath=sse\fR
8862 or \fB\-mfpmath=sse+387\fR is specified; in the former case, \s-1IEEE\s0
8863 semantics apply without excess precision, and in the latter, rounding
8864 is unpredictable.
8865 .IP "\fB\-ffast\-math\fR" 4
8866 .IX Item "-ffast-math"
8867 Sets the options \fB\-fno\-math\-errno\fR, \fB\-funsafe\-math\-optimizations\fR,
8868 \&\fB\-ffinite\-math\-only\fR, \fB\-fno\-rounding\-math\fR,
8869 \&\fB\-fno\-signaling\-nans\fR and \fB\-fcx\-limited\-range\fR.
8870 .Sp
8871 This option causes the preprocessor macro \f(CW\*(C`_\|_FAST_MATH_\|_\*(C'\fR to be defined.
8872 .Sp
8873 This option is not turned on by any \fB\-O\fR option besides
8874 \&\fB\-Ofast\fR since it can result in incorrect output for programs
8875 that depend on an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications
8876 for math functions. It may, however, yield faster code for programs
8877 that do not require the guarantees of these specifications.
8878 .IP "\fB\-fno\-math\-errno\fR" 4
8879 .IX Item "-fno-math-errno"
8880 Do not set \f(CW\*(C`errno\*(C'\fR after calling math functions that are executed
8881 with a single instruction, e.g., \f(CW\*(C`sqrt\*(C'\fR.  A program that relies on
8882 \&\s-1IEEE\s0 exceptions for math error handling may want to use this flag
8883 for speed while maintaining \s-1IEEE\s0 arithmetic compatibility.
8884 .Sp
8885 This option is not turned on by any \fB\-O\fR option since
8886 it can result in incorrect output for programs that depend on
8887 an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
8888 math functions. It may, however, yield faster code for programs
8889 that do not require the guarantees of these specifications.
8890 .Sp
8891 The default is \fB\-fmath\-errno\fR.
8892 .Sp
8893 On Darwin systems, the math library never sets \f(CW\*(C`errno\*(C'\fR.  There is
8894 therefore no reason for the compiler to consider the possibility that
8895 it might, and \fB\-fno\-math\-errno\fR is the default.
8896 .IP "\fB\-funsafe\-math\-optimizations\fR" 4
8897 .IX Item "-funsafe-math-optimizations"
8898 Allow optimizations for floating-point arithmetic that (a) assume
8899 that arguments and results are valid and (b) may violate \s-1IEEE\s0 or
8900 \&\s-1ANSI\s0 standards.  When used at link-time, it may include libraries
8901 or startup files that change the default \s-1FPU\s0 control word or other
8902 similar optimizations.
8903 .Sp
8904 This option is not turned on by any \fB\-O\fR option since
8905 it can result in incorrect output for programs that depend on
8906 an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
8907 math functions. It may, however, yield faster code for programs
8908 that do not require the guarantees of these specifications.
8909 Enables \fB\-fno\-signed\-zeros\fR, \fB\-fno\-trapping\-math\fR,
8910 \&\fB\-fassociative\-math\fR and \fB\-freciprocal\-math\fR.
8911 .Sp
8912 The default is \fB\-fno\-unsafe\-math\-optimizations\fR.
8913 .IP "\fB\-fassociative\-math\fR" 4
8914 .IX Item "-fassociative-math"
8915 Allow re-association of operands in series of floating-point operations.
8916 This violates the \s-1ISO\s0 C and \*(C+ language standard by possibly changing
8917 computation result.  \s-1NOTE:\s0 re-ordering may change the sign of zero as
8918 well as ignore NaNs and inhibit or create underflow or overflow (and
8919 thus cannot be used on code that relies on rounding behavior like
8920 \&\f(CW\*(C`(x + 2**52) \- 2**52\*(C'\fR.  May also reorder floating-point comparisons
8921 and thus may not be used when ordered comparisons are required.
8922 This option requires that both \fB\-fno\-signed\-zeros\fR and
8923 \&\fB\-fno\-trapping\-math\fR be in effect.  Moreover, it doesn't make
8924 much sense with \fB\-frounding\-math\fR. For Fortran the option
8925 is automatically enabled when both \fB\-fno\-signed\-zeros\fR and
8926 \&\fB\-fno\-trapping\-math\fR are in effect.
8927 .Sp
8928 The default is \fB\-fno\-associative\-math\fR.
8929 .IP "\fB\-freciprocal\-math\fR" 4
8930 .IX Item "-freciprocal-math"
8931 Allow the reciprocal of a value to be used instead of dividing by
8932 the value if this enables optimizations.  For example \f(CW\*(C`x / y\*(C'\fR
8933 can be replaced with \f(CW\*(C`x * (1/y)\*(C'\fR, which is useful if \f(CW\*(C`(1/y)\*(C'\fR
8934 is subject to common subexpression elimination.  Note that this loses
8935 precision and increases the number of flops operating on the value.
8936 .Sp
8937 The default is \fB\-fno\-reciprocal\-math\fR.
8938 .IP "\fB\-ffinite\-math\-only\fR" 4
8939 .IX Item "-ffinite-math-only"
8940 Allow optimizations for floating-point arithmetic that assume
8941 that arguments and results are not NaNs or +\-Infs.
8942 .Sp
8943 This option is not turned on by any \fB\-O\fR option since
8944 it can result in incorrect output for programs that depend on
8945 an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
8946 math functions. It may, however, yield faster code for programs
8947 that do not require the guarantees of these specifications.
8948 .Sp
8949 The default is \fB\-fno\-finite\-math\-only\fR.
8950 .IP "\fB\-fno\-signed\-zeros\fR" 4
8951 .IX Item "-fno-signed-zeros"
8952 Allow optimizations for floating-point arithmetic that ignore the
8953 signedness of zero.  \s-1IEEE\s0 arithmetic specifies the behavior of
8954 distinct +0.0 and \-0.0 values, which then prohibits simplification
8955 of expressions such as x+0.0 or 0.0*x (even with \fB\-ffinite\-math\-only\fR).
8956 This option implies that the sign of a zero result isn't significant.
8957 .Sp
8958 The default is \fB\-fsigned\-zeros\fR.
8959 .IP "\fB\-fno\-trapping\-math\fR" 4
8960 .IX Item "-fno-trapping-math"
8961 Compile code assuming that floating-point operations cannot generate
8962 user-visible traps.  These traps include division by zero, overflow,
8963 underflow, inexact result and invalid operation.  This option requires
8964 that \fB\-fno\-signaling\-nans\fR be in effect.  Setting this option may
8965 allow faster code if one relies on \*(L"non-stop\*(R" \s-1IEEE\s0 arithmetic, for example.
8966 .Sp
8967 This option should never be turned on by any \fB\-O\fR option since
8968 it can result in incorrect output for programs that depend on
8969 an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
8970 math functions.
8971 .Sp
8972 The default is \fB\-ftrapping\-math\fR.
8973 .IP "\fB\-frounding\-math\fR" 4
8974 .IX Item "-frounding-math"
8975 Disable transformations and optimizations that assume default floating-point
8976 rounding behavior.  This is round-to-zero for all floating point
8977 to integer conversions, and round-to-nearest for all other arithmetic
8978 truncations.  This option should be specified for programs that change
8979 the \s-1FP\s0 rounding mode dynamically, or that may be executed with a
8980 non-default rounding mode.  This option disables constant folding of
8981 floating-point expressions at compile time (which may be affected by
8982 rounding mode) and arithmetic transformations that are unsafe in the
8983 presence of sign-dependent rounding modes.
8984 .Sp
8985 The default is \fB\-fno\-rounding\-math\fR.
8986 .Sp
8987 This option is experimental and does not currently guarantee to
8988 disable all \s-1GCC\s0 optimizations that are affected by rounding mode.
8989 Future versions of \s-1GCC\s0 may provide finer control of this setting
8990 using C99's \f(CW\*(C`FENV_ACCESS\*(C'\fR pragma.  This command-line option
8991 will be used to specify the default state for \f(CW\*(C`FENV_ACCESS\*(C'\fR.
8992 .IP "\fB\-fsignaling\-nans\fR" 4
8993 .IX Item "-fsignaling-nans"
8994 Compile code assuming that \s-1IEEE\s0 signaling NaNs may generate user-visible
8995 traps during floating-point operations.  Setting this option disables
8996 optimizations that may change the number of exceptions visible with
8997 signaling NaNs.  This option implies \fB\-ftrapping\-math\fR.
8998 .Sp
8999 This option causes the preprocessor macro \f(CW\*(C`_\|_SUPPORT_SNAN_\|_\*(C'\fR to
9000 be defined.
9001 .Sp
9002 The default is \fB\-fno\-signaling\-nans\fR.
9003 .Sp
9004 This option is experimental and does not currently guarantee to
9005 disable all \s-1GCC\s0 optimizations that affect signaling NaN behavior.
9006 .IP "\fB\-fsingle\-precision\-constant\fR" 4
9007 .IX Item "-fsingle-precision-constant"
9008 Treat floating-point constants as single precision instead of
9009 implicitly converting them to double-precision constants.
9010 .IP "\fB\-fcx\-limited\-range\fR" 4
9011 .IX Item "-fcx-limited-range"
9012 When enabled, this option states that a range reduction step is not
9013 needed when performing complex division.  Also, there is no checking
9014 whether the result of a complex multiplication or division is \f(CW\*(C`NaN
9015 + I*NaN\*(C'\fR, with an attempt to rescue the situation in that case.  The
9016 default is \fB\-fno\-cx\-limited\-range\fR, but is enabled by
9017 \&\fB\-ffast\-math\fR.
9018 .Sp
9019 This option controls the default setting of the \s-1ISO\s0 C99
9020 \&\f(CW\*(C`CX_LIMITED_RANGE\*(C'\fR pragma.  Nevertheless, the option applies to
9021 all languages.
9022 .IP "\fB\-fcx\-fortran\-rules\fR" 4
9023 .IX Item "-fcx-fortran-rules"
9024 Complex multiplication and division follow Fortran rules.  Range
9025 reduction is done as part of complex division, but there is no checking
9026 whether the result of a complex multiplication or division is \f(CW\*(C`NaN
9027 + I*NaN\*(C'\fR, with an attempt to rescue the situation in that case.
9028 .Sp
9029 The default is \fB\-fno\-cx\-fortran\-rules\fR.
9030 .PP
9031 The following options control optimizations that may improve
9032 performance, but are not enabled by any \fB\-O\fR options.  This
9033 section includes experimental options that may produce broken code.
9034 .IP "\fB\-fbranch\-probabilities\fR" 4
9035 .IX Item "-fbranch-probabilities"
9036 After running a program compiled with \fB\-fprofile\-arcs\fR, you can compile it a second time using
9037 \&\fB\-fbranch\-probabilities\fR, to improve optimizations based on
9038 the number of times each branch was taken.  When a program
9039 compiled with \fB\-fprofile\-arcs\fR exits, it saves arc execution
9040 counts to a file called \fI\fIsourcename\fI.gcda\fR for each source
9041 file.  The information in this data file is very dependent on the
9042 structure of the generated code, so you must use the same source code
9043 and the same optimization options for both compilations.
9044 .Sp
9045 With \fB\-fbranch\-probabilities\fR, \s-1GCC\s0 puts a
9046 \&\fB\s-1REG_BR_PROB\s0\fR note on each \fB\s-1JUMP_INSN\s0\fR and \fB\s-1CALL_INSN\s0\fR.
9047 These can be used to improve optimization.  Currently, they are only
9048 used in one place: in \fIreorg.c\fR, instead of guessing which path a
9049 branch is most likely to take, the \fB\s-1REG_BR_PROB\s0\fR values are used to
9050 exactly determine which path is taken more often.
9051 .IP "\fB\-fprofile\-values\fR" 4
9052 .IX Item "-fprofile-values"
9053 If combined with \fB\-fprofile\-arcs\fR, it adds code so that some
9054 data about values of expressions in the program is gathered.
9055 .Sp
9056 With \fB\-fbranch\-probabilities\fR, it reads back the data gathered
9057 from profiling values of expressions for usage in optimizations.
9058 .Sp
9059 Enabled with \fB\-fprofile\-generate\fR and \fB\-fprofile\-use\fR.
9060 .IP "\fB\-fprofile\-reorder\-functions\fR" 4
9061 .IX Item "-fprofile-reorder-functions"
9062 Function reordering based on profile instrumentation collects
9063 first time of execution of a function and orders these functions
9064 in ascending order.
9065 .Sp
9066 Enabled with \fB\-fprofile\-use\fR.
9067 .IP "\fB\-fvpt\fR" 4
9068 .IX Item "-fvpt"
9069 If combined with \fB\-fprofile\-arcs\fR, this option instructs the compiler
9070 to add code to gather information about values of expressions.
9071 .Sp
9072 With \fB\-fbranch\-probabilities\fR, it reads back the data gathered
9073 and actually performs the optimizations based on them.
9074 Currently the optimizations include specialization of division operations
9075 using the knowledge about the value of the denominator.
9076 .IP "\fB\-frename\-registers\fR" 4
9077 .IX Item "-frename-registers"
9078 Attempt to avoid false dependencies in scheduled code by making use
9079 of registers left over after register allocation.  This optimization
9080 most benefits processors with lots of registers.  Depending on the
9081 debug information format adopted by the target, however, it can
9082 make debugging impossible, since variables no longer stay in
9083 a \*(L"home register\*(R".
9084 .Sp
9085 Enabled by default with \fB\-funroll\-loops\fR and \fB\-fpeel\-loops\fR.
9086 .IP "\fB\-fschedule\-fusion\fR" 4
9087 .IX Item "-fschedule-fusion"
9088 Performs a target dependent pass over the instruction stream to schedule
9089 instructions of same type together because target machine can execute them
9090 more efficiently if they are adjacent to each other in the instruction flow.
9091 .Sp
9092 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
9093 .IP "\fB\-ftracer\fR" 4
9094 .IX Item "-ftracer"
9095 Perform tail duplication to enlarge superblock size.  This transformation
9096 simplifies the control flow of the function allowing other optimizations to do
9097 a better job.
9098 .Sp
9099 Enabled with \fB\-fprofile\-use\fR.
9100 .IP "\fB\-funroll\-loops\fR" 4
9101 .IX Item "-funroll-loops"
9102 Unroll loops whose number of iterations can be determined at compile time or
9103 upon entry to the loop.  \fB\-funroll\-loops\fR implies
9104 \&\fB\-frerun\-cse\-after\-loop\fR, \fB\-fweb\fR and \fB\-frename\-registers\fR.
9105 It also turns on complete loop peeling (i.e. complete removal of loops with
9106 a small constant number of iterations).  This option makes code larger, and may
9107 or may not make it run faster.
9108 .Sp
9109 Enabled with \fB\-fprofile\-use\fR.
9110 .IP "\fB\-funroll\-all\-loops\fR" 4
9111 .IX Item "-funroll-all-loops"
9112 Unroll all loops, even if their number of iterations is uncertain when
9113 the loop is entered.  This usually makes programs run more slowly.
9114 \&\fB\-funroll\-all\-loops\fR implies the same options as
9115 \&\fB\-funroll\-loops\fR.
9116 .IP "\fB\-fpeel\-loops\fR" 4
9117 .IX Item "-fpeel-loops"
9118 Peels loops for which there is enough information that they do not
9119 roll much (from profile feedback).  It also turns on complete loop peeling
9120 (i.e. complete removal of loops with small constant number of iterations).
9121 .Sp
9122 Enabled with \fB\-fprofile\-use\fR.
9123 .IP "\fB\-fmove\-loop\-invariants\fR" 4
9124 .IX Item "-fmove-loop-invariants"
9125 Enables the loop invariant motion pass in the \s-1RTL\s0 loop optimizer.  Enabled
9126 at level \fB\-O1\fR
9127 .IP "\fB\-funswitch\-loops\fR" 4
9128 .IX Item "-funswitch-loops"
9129 Move branches with loop invariant conditions out of the loop, with duplicates
9130 of the loop on both branches (modified according to result of the condition).
9131 .IP "\fB\-ffunction\-sections\fR" 4
9132 .IX Item "-ffunction-sections"
9133 .PD 0
9134 .IP "\fB\-fdata\-sections\fR" 4
9135 .IX Item "-fdata-sections"
9136 .PD
9137 Place each function or data item into its own section in the output
9138 file if the target supports arbitrary sections.  The name of the
9139 function or the name of the data item determines the section's name
9140 in the output file.
9141 .Sp
9142 Use these options on systems where the linker can perform optimizations
9143 to improve locality of reference in the instruction space.  Most systems
9144 using the \s-1ELF\s0 object format and \s-1SPARC\s0 processors running Solaris 2 have
9145 linkers with such optimizations.  \s-1AIX\s0 may have these optimizations in
9146 the future.
9147 .Sp
9148 Only use these options when there are significant benefits from doing
9149 so.  When you specify these options, the assembler and linker
9150 create larger object and executable files and are also slower.
9151 You cannot use \fBgprof\fR on all systems if you
9152 specify this option, and you may have problems with debugging if
9153 you specify both this option and \fB\-g\fR.
9154 .IP "\fB\-fbranch\-target\-load\-optimize\fR" 4
9155 .IX Item "-fbranch-target-load-optimize"
9156 Perform branch target register load optimization before prologue / epilogue
9157 threading.
9158 The use of target registers can typically be exposed only during reload,
9159 thus hoisting loads out of loops and doing inter-block scheduling needs
9160 a separate optimization pass.
9161 .IP "\fB\-fbranch\-target\-load\-optimize2\fR" 4
9162 .IX Item "-fbranch-target-load-optimize2"
9163 Perform branch target register load optimization after prologue / epilogue
9164 threading.
9165 .IP "\fB\-fbtr\-bb\-exclusive\fR" 4
9166 .IX Item "-fbtr-bb-exclusive"
9167 When performing branch target register load optimization, don't reuse
9168 branch target registers within any basic block.
9169 .IP "\fB\-fstack\-protector\fR" 4
9170 .IX Item "-fstack-protector"
9171 Emit extra code to check for buffer overflows, such as stack smashing
9172 attacks.  This is done by adding a guard variable to functions with
9173 vulnerable objects.  This includes functions that call \f(CW\*(C`alloca\*(C'\fR, and
9174 functions with buffers larger than 8 bytes.  The guards are initialized
9175 when a function is entered and then checked when the function exits.
9176 If a guard check fails, an error message is printed and the program exits.
9177 .IP "\fB\-fstack\-protector\-all\fR" 4
9178 .IX Item "-fstack-protector-all"
9179 Like \fB\-fstack\-protector\fR except that all functions are protected.
9180 .IP "\fB\-fstack\-protector\-strong\fR" 4
9181 .IX Item "-fstack-protector-strong"
9182 Like \fB\-fstack\-protector\fR but includes additional functions to
9183 be protected \-\-\- those that have local array definitions, or have
9184 references to local frame addresses.
9185 .IP "\fB\-fstack\-protector\-explicit\fR" 4
9186 .IX Item "-fstack-protector-explicit"
9187 Like \fB\-fstack\-protector\fR but only protects those functions which
9188 have the \f(CW\*(C`stack_protect\*(C'\fR attribute
9189 .IP "\fB\-fstdarg\-opt\fR" 4
9190 .IX Item "-fstdarg-opt"
9191 Optimize the prologue of variadic argument functions with respect to usage of
9192 those arguments.
9193 .IP "\fB\-fsection\-anchors\fR" 4
9194 .IX Item "-fsection-anchors"
9195 Try to reduce the number of symbolic address calculations by using
9196 shared \*(L"anchor\*(R" symbols to address nearby objects.  This transformation
9197 can help to reduce the number of \s-1GOT\s0 entries and \s-1GOT\s0 accesses on some
9198 targets.
9199 .Sp
9200 For example, the implementation of the following function \f(CW\*(C`foo\*(C'\fR:
9201 .Sp
9202 .Vb 2
9203 \&        static int a, b, c;
9204 \&        int foo (void) { return a + b + c; }
9205 .Ve
9206 .Sp
9207 usually calculates the addresses of all three variables, but if you
9208 compile it with \fB\-fsection\-anchors\fR, it accesses the variables
9209 from a common anchor point instead.  The effect is similar to the
9210 following pseudocode (which isn't valid C):
9211 .Sp
9212 .Vb 5
9213 \&        int foo (void)
9214 \&        {
9215 \&          register int *xr = &x;
9216 \&          return xr[&a \- &x] + xr[&b \- &x] + xr[&c \- &x];
9217 \&        }
9218 .Ve
9219 .Sp
9220 Not all targets support this option.
9221 .IP "\fB\-\-param\fR \fIname\fR\fB=\fR\fIvalue\fR" 4
9222 .IX Item "--param name=value"
9223 In some places, \s-1GCC\s0 uses various constants to control the amount of
9224 optimization that is done.  For example, \s-1GCC\s0 does not inline functions
9225 that contain more than a certain number of instructions.  You can
9226 control some of these constants on the command line using the
9227 \&\fB\-\-param\fR option.
9228 .Sp
9229 The names of specific parameters, and the meaning of the values, are
9230 tied to the internals of the compiler, and are subject to change
9231 without notice in future releases.
9232 .Sp
9233 In each case, the \fIvalue\fR is an integer.  The allowable choices for
9234 \&\fIname\fR are:
9235 .RS 4
9236 .IP "\fBpredictable-branch-outcome\fR" 4
9237 .IX Item "predictable-branch-outcome"
9238 When branch is predicted to be taken with probability lower than this threshold
9239 (in percent), then it is considered well predictable. The default is 10.
9240 .IP "\fBmax-crossjump-edges\fR" 4
9241 .IX Item "max-crossjump-edges"
9242 The maximum number of incoming edges to consider for cross-jumping.
9243 The algorithm used by \fB\-fcrossjumping\fR is O(N^2) in
9244 the number of edges incoming to each block.  Increasing values mean
9245 more aggressive optimization, making the compilation time increase with
9246 probably small improvement in executable size.
9247 .IP "\fBmin-crossjump-insns\fR" 4
9248 .IX Item "min-crossjump-insns"
9249 The minimum number of instructions that must be matched at the end
9250 of two blocks before cross-jumping is performed on them.  This
9251 value is ignored in the case where all instructions in the block being
9252 cross-jumped from are matched.  The default value is 5.
9253 .IP "\fBmax-grow-copy-bb-insns\fR" 4
9254 .IX Item "max-grow-copy-bb-insns"
9255 The maximum code size expansion factor when copying basic blocks
9256 instead of jumping.  The expansion is relative to a jump instruction.
9257 The default value is 8.
9258 .IP "\fBmax-goto-duplication-insns\fR" 4
9259 .IX Item "max-goto-duplication-insns"
9260 The maximum number of instructions to duplicate to a block that jumps
9261 to a computed goto.  To avoid O(N^2) behavior in a number of
9262 passes, \s-1GCC\s0 factors computed gotos early in the compilation process,
9263 and unfactors them as late as possible.  Only computed jumps at the
9264 end of a basic blocks with no more than max-goto-duplication-insns are
9265 unfactored.  The default value is 8.
9266 .IP "\fBmax-delay-slot-insn-search\fR" 4
9267 .IX Item "max-delay-slot-insn-search"
9268 The maximum number of instructions to consider when looking for an
9269 instruction to fill a delay slot.  If more than this arbitrary number of
9270 instructions are searched, the time savings from filling the delay slot
9271 are minimal, so stop searching.  Increasing values mean more
9272 aggressive optimization, making the compilation time increase with probably
9273 small improvement in execution time.
9274 .IP "\fBmax-delay-slot-live-search\fR" 4
9275 .IX Item "max-delay-slot-live-search"
9276 When trying to fill delay slots, the maximum number of instructions to
9277 consider when searching for a block with valid live register
9278 information.  Increasing this arbitrarily chosen value means more
9279 aggressive optimization, increasing the compilation time.  This parameter
9280 should be removed when the delay slot code is rewritten to maintain the
9281 control-flow graph.
9282 .IP "\fBmax-gcse-memory\fR" 4
9283 .IX Item "max-gcse-memory"
9284 The approximate maximum amount of memory that can be allocated in
9285 order to perform the global common subexpression elimination
9286 optimization.  If more memory than specified is required, the
9287 optimization is not done.
9288 .IP "\fBmax-gcse-insertion-ratio\fR" 4
9289 .IX Item "max-gcse-insertion-ratio"
9290 If the ratio of expression insertions to deletions is larger than this value
9291 for any expression, then \s-1RTL\s0 \s-1PRE\s0 inserts or removes the expression and thus
9292 leaves partially redundant computations in the instruction stream.  The default value is 20.
9293 .IP "\fBmax-pending-list-length\fR" 4
9294 .IX Item "max-pending-list-length"
9295 The maximum number of pending dependencies scheduling allows
9296 before flushing the current state and starting over.  Large functions
9297 with few branches or calls can create excessively large lists which
9298 needlessly consume memory and resources.
9299 .IP "\fBmax-modulo-backtrack-attempts\fR" 4
9300 .IX Item "max-modulo-backtrack-attempts"
9301 The maximum number of backtrack attempts the scheduler should make
9302 when modulo scheduling a loop.  Larger values can exponentially increase
9303 compilation time.
9304 .IP "\fBmax-inline-insns-single\fR" 4
9305 .IX Item "max-inline-insns-single"
9306 Several parameters control the tree inliner used in \s-1GCC\s0.
9307 This number sets the maximum number of instructions (counted in \s-1GCC\s0's
9308 internal representation) in a single function that the tree inliner
9309 considers for inlining.  This only affects functions declared
9310 inline and methods implemented in a class declaration (\*(C+).
9311 The default value is 400.
9312 .IP "\fBmax-inline-insns-auto\fR" 4
9313 .IX Item "max-inline-insns-auto"
9314 When you use \fB\-finline\-functions\fR (included in \fB\-O3\fR),
9315 a lot of functions that would otherwise not be considered for inlining
9316 by the compiler are investigated.  To those functions, a different
9317 (more restrictive) limit compared to functions declared inline can
9318 be applied.
9319 The default value is 40.
9320 .IP "\fBinline-min-speedup\fR" 4
9321 .IX Item "inline-min-speedup"
9322 When estimated performance improvement of caller + callee runtime exceeds this
9323 threshold (in precent), the function can be inlined regardless the limit on
9324 \&\fB\-\-param max-inline-insns-single\fR and \fB\-\-param
9325 max-inline-insns-auto\fR.
9326 .IP "\fBlarge-function-insns\fR" 4
9327 .IX Item "large-function-insns"
9328 The limit specifying really large functions.  For functions larger than this
9329 limit after inlining, inlining is constrained by
9330 \&\fB\-\-param large-function-growth\fR.  This parameter is useful primarily
9331 to avoid extreme compilation time caused by non-linear algorithms used by the
9332 back end.
9333 The default value is 2700.
9334 .IP "\fBlarge-function-growth\fR" 4
9335 .IX Item "large-function-growth"
9336 Specifies maximal growth of large function caused by inlining in percents.
9337 The default value is 100 which limits large function growth to 2.0 times
9338 the original size.
9339 .IP "\fBlarge-unit-insns\fR" 4
9340 .IX Item "large-unit-insns"
9341 The limit specifying large translation unit.  Growth caused by inlining of
9342 units larger than this limit is limited by \fB\-\-param inline-unit-growth\fR.
9343 For small units this might be too tight.
9344 For example, consider a unit consisting of function A
9345 that is inline and B that just calls A three times.  If B is small relative to
9346 A, the growth of unit is 300\e% and yet such inlining is very sane.  For very
9347 large units consisting of small inlineable functions, however, the overall unit
9348 growth limit is needed to avoid exponential explosion of code size.  Thus for
9349 smaller units, the size is increased to \fB\-\-param large-unit-insns\fR
9350 before applying \fB\-\-param inline-unit-growth\fR.  The default is 10000.
9351 .IP "\fBinline-unit-growth\fR" 4
9352 .IX Item "inline-unit-growth"
9353 Specifies maximal overall growth of the compilation unit caused by inlining.
9354 The default value is 20 which limits unit growth to 1.2 times the original
9355 size. Cold functions (either marked cold via an attribute or by profile
9356 feedback) are not accounted into the unit size.
9357 .IP "\fBipcp-unit-growth\fR" 4
9358 .IX Item "ipcp-unit-growth"
9359 Specifies maximal overall growth of the compilation unit caused by
9360 interprocedural constant propagation.  The default value is 10 which limits
9361 unit growth to 1.1 times the original size.
9362 .IP "\fBlarge-stack-frame\fR" 4
9363 .IX Item "large-stack-frame"
9364 The limit specifying large stack frames.  While inlining the algorithm is trying
9365 to not grow past this limit too much.  The default value is 256 bytes.
9366 .IP "\fBlarge-stack-frame-growth\fR" 4
9367 .IX Item "large-stack-frame-growth"
9368 Specifies maximal growth of large stack frames caused by inlining in percents.
9369 The default value is 1000 which limits large stack frame growth to 11 times
9370 the original size.
9371 .IP "\fBmax-inline-insns-recursive\fR" 4
9372 .IX Item "max-inline-insns-recursive"
9373 .PD 0
9374 .IP "\fBmax-inline-insns-recursive-auto\fR" 4
9375 .IX Item "max-inline-insns-recursive-auto"
9376 .PD
9377 Specifies the maximum number of instructions an out-of-line copy of a
9378 self-recursive inline
9379 function can grow into by performing recursive inlining.
9380 .Sp
9381 \&\fB\-\-param max-inline-insns-recursive\fR applies to functions
9382 declared inline.
9383 For functions not declared inline, recursive inlining
9384 happens only when \fB\-finline\-functions\fR (included in \fB\-O3\fR) is
9385 enabled; \fB\-\-param max-inline-insns-recursive-auto\fR applies instead.  The
9386 default value is 450.
9387 .IP "\fBmax-inline-recursive-depth\fR" 4
9388 .IX Item "max-inline-recursive-depth"
9389 .PD 0
9390 .IP "\fBmax-inline-recursive-depth-auto\fR" 4
9391 .IX Item "max-inline-recursive-depth-auto"
9392 .PD
9393 Specifies the maximum recursion depth used for recursive inlining.
9394 .Sp
9395 \&\fB\-\-param max-inline-recursive-depth\fR applies to functions
9396 declared inline.  For functions not declared inline, recursive inlining
9397 happens only when \fB\-finline\-functions\fR (included in \fB\-O3\fR) is
9398 enabled; \fB\-\-param max-inline-recursive-depth-auto\fR applies instead.  The
9399 default value is 8.
9400 .IP "\fBmin-inline-recursive-probability\fR" 4
9401 .IX Item "min-inline-recursive-probability"
9402 Recursive inlining is profitable only for function having deep recursion
9403 in average and can hurt for function having little recursion depth by
9404 increasing the prologue size or complexity of function body to other
9405 optimizers.
9406 .Sp
9407 When profile feedback is available (see \fB\-fprofile\-generate\fR) the actual
9408 recursion depth can be guessed from probability that function recurses via a
9409 given call expression.  This parameter limits inlining only to call expressions
9410 whose probability exceeds the given threshold (in percents).
9411 The default value is 10.
9412 .IP "\fBearly-inlining-insns\fR" 4
9413 .IX Item "early-inlining-insns"
9414 Specify growth that the early inliner can make.  In effect it increases
9415 the amount of inlining for code having a large abstraction penalty.
9416 The default value is 14.
9417 .IP "\fBmax-early-inliner-iterations\fR" 4
9418 .IX Item "max-early-inliner-iterations"
9419 Limit of iterations of the early inliner.  This basically bounds
9420 the number of nested indirect calls the early inliner can resolve.
9421 Deeper chains are still handled by late inlining.
9422 .IP "\fBcomdat-sharing-probability\fR" 4
9423 .IX Item "comdat-sharing-probability"
9424 Probability (in percent) that \*(C+ inline function with comdat visibility
9425 are shared across multiple compilation units.  The default value is 20.
9426 .IP "\fBprofile-func-internal-id\fR" 4
9427 .IX Item "profile-func-internal-id"
9428 A parameter to control whether to use function internal id in profile
9429 database lookup. If the value is 0, the compiler uses an id that
9430 is based on function assembler name and filename, which makes old profile
9431 data more tolerant to source changes such as function reordering etc.
9432 The default value is 0.
9433 .IP "\fBmin-vect-loop-bound\fR" 4
9434 .IX Item "min-vect-loop-bound"
9435 The minimum number of iterations under which loops are not vectorized
9436 when \fB\-ftree\-vectorize\fR is used.  The number of iterations after
9437 vectorization needs to be greater than the value specified by this option
9438 to allow vectorization.  The default value is 0.
9439 .IP "\fBgcse-cost-distance-ratio\fR" 4
9440 .IX Item "gcse-cost-distance-ratio"
9441 Scaling factor in calculation of maximum distance an expression
9442 can be moved by \s-1GCSE\s0 optimizations.  This is currently supported only in the
9443 code hoisting pass.  The bigger the ratio, the more aggressive code hoisting
9444 is with simple expressions, i.e., the expressions that have cost
9445 less than \fBgcse-unrestricted-cost\fR.  Specifying 0 disables
9446 hoisting of simple expressions.  The default value is 10.
9447 .IP "\fBgcse-unrestricted-cost\fR" 4
9448 .IX Item "gcse-unrestricted-cost"
9449 Cost, roughly measured as the cost of a single typical machine
9450 instruction, at which \s-1GCSE\s0 optimizations do not constrain
9451 the distance an expression can travel.  This is currently
9452 supported only in the code hoisting pass.  The lesser the cost,
9453 the more aggressive code hoisting is.  Specifying 0 
9454 allows all expressions to travel unrestricted distances.
9455 The default value is 3.
9456 .IP "\fBmax-hoist-depth\fR" 4
9457 .IX Item "max-hoist-depth"
9458 The depth of search in the dominator tree for expressions to hoist.
9459 This is used to avoid quadratic behavior in hoisting algorithm.
9460 The value of 0 does not limit on the search, but may slow down compilation
9461 of huge functions.  The default value is 30.
9462 .IP "\fBmax-tail-merge-comparisons\fR" 4
9463 .IX Item "max-tail-merge-comparisons"
9464 The maximum amount of similar bbs to compare a bb with.  This is used to
9465 avoid quadratic behavior in tree tail merging.  The default value is 10.
9466 .IP "\fBmax-tail-merge-iterations\fR" 4
9467 .IX Item "max-tail-merge-iterations"
9468 The maximum amount of iterations of the pass over the function.  This is used to
9469 limit compilation time in tree tail merging.  The default value is 2.
9470 .IP "\fBmax-unrolled-insns\fR" 4
9471 .IX Item "max-unrolled-insns"
9472 The maximum number of instructions that a loop may have to be unrolled.
9473 If a loop is unrolled, this parameter also determines how many times
9474 the loop code is unrolled.
9475 .IP "\fBmax-average-unrolled-insns\fR" 4
9476 .IX Item "max-average-unrolled-insns"
9477 The maximum number of instructions biased by probabilities of their execution
9478 that a loop may have to be unrolled.  If a loop is unrolled,
9479 this parameter also determines how many times the loop code is unrolled.
9480 .IP "\fBmax-unroll-times\fR" 4
9481 .IX Item "max-unroll-times"
9482 The maximum number of unrollings of a single loop.
9483 .IP "\fBmax-peeled-insns\fR" 4
9484 .IX Item "max-peeled-insns"
9485 The maximum number of instructions that a loop may have to be peeled.
9486 If a loop is peeled, this parameter also determines how many times
9487 the loop code is peeled.
9488 .IP "\fBmax-peel-times\fR" 4
9489 .IX Item "max-peel-times"
9490 The maximum number of peelings of a single loop.
9491 .IP "\fBmax-peel-branches\fR" 4
9492 .IX Item "max-peel-branches"
9493 The maximum number of branches on the hot path through the peeled sequence.
9494 .IP "\fBmax-completely-peeled-insns\fR" 4
9495 .IX Item "max-completely-peeled-insns"
9496 The maximum number of insns of a completely peeled loop.
9497 .IP "\fBmax-completely-peel-times\fR" 4
9498 .IX Item "max-completely-peel-times"
9499 The maximum number of iterations of a loop to be suitable for complete peeling.
9500 .IP "\fBmax-completely-peel-loop-nest-depth\fR" 4
9501 .IX Item "max-completely-peel-loop-nest-depth"
9502 The maximum depth of a loop nest suitable for complete peeling.
9503 .IP "\fBmax-unswitch-insns\fR" 4
9504 .IX Item "max-unswitch-insns"
9505 The maximum number of insns of an unswitched loop.
9506 .IP "\fBmax-unswitch-level\fR" 4
9507 .IX Item "max-unswitch-level"
9508 The maximum number of branches unswitched in a single loop.
9509 .IP "\fBlim-expensive\fR" 4
9510 .IX Item "lim-expensive"
9511 The minimum cost of an expensive expression in the loop invariant motion.
9512 .IP "\fBiv-consider-all-candidates-bound\fR" 4
9513 .IX Item "iv-consider-all-candidates-bound"
9514 Bound on number of candidates for induction variables, below which
9515 all candidates are considered for each use in induction variable
9516 optimizations.  If there are more candidates than this,
9517 only the most relevant ones are considered to avoid quadratic time complexity.
9518 .IP "\fBiv-max-considered-uses\fR" 4
9519 .IX Item "iv-max-considered-uses"
9520 The induction variable optimizations give up on loops that contain more
9521 induction variable uses.
9522 .IP "\fBiv-always-prune-cand-set-bound\fR" 4
9523 .IX Item "iv-always-prune-cand-set-bound"
9524 If the number of candidates in the set is smaller than this value,
9525 always try to remove unnecessary ivs from the set
9526 when adding a new one.
9527 .IP "\fBscev-max-expr-size\fR" 4
9528 .IX Item "scev-max-expr-size"
9529 Bound on size of expressions used in the scalar evolutions analyzer.
9530 Large expressions slow the analyzer.
9531 .IP "\fBscev-max-expr-complexity\fR" 4
9532 .IX Item "scev-max-expr-complexity"
9533 Bound on the complexity of the expressions in the scalar evolutions analyzer.
9534 Complex expressions slow the analyzer.
9535 .IP "\fBomega-max-vars\fR" 4
9536 .IX Item "omega-max-vars"
9537 The maximum number of variables in an Omega constraint system.
9538 The default value is 128.
9539 .IP "\fBomega-max-geqs\fR" 4
9540 .IX Item "omega-max-geqs"
9541 The maximum number of inequalities in an Omega constraint system.
9542 The default value is 256.
9543 .IP "\fBomega-max-eqs\fR" 4
9544 .IX Item "omega-max-eqs"
9545 The maximum number of equalities in an Omega constraint system.
9546 The default value is 128.
9547 .IP "\fBomega-max-wild-cards\fR" 4
9548 .IX Item "omega-max-wild-cards"
9549 The maximum number of wildcard variables that the Omega solver is
9550 able to insert.  The default value is 18.
9551 .IP "\fBomega-hash-table-size\fR" 4
9552 .IX Item "omega-hash-table-size"
9553 The size of the hash table in the Omega solver.  The default value is
9554 550.
9555 .IP "\fBomega-max-keys\fR" 4
9556 .IX Item "omega-max-keys"
9557 The maximal number of keys used by the Omega solver.  The default
9558 value is 500.
9559 .IP "\fBomega-eliminate-redundant-constraints\fR" 4
9560 .IX Item "omega-eliminate-redundant-constraints"
9561 When set to 1, use expensive methods to eliminate all redundant
9562 constraints.  The default value is 0.
9563 .IP "\fBvect-max-version-for-alignment-checks\fR" 4
9564 .IX Item "vect-max-version-for-alignment-checks"
9565 The maximum number of run-time checks that can be performed when
9566 doing loop versioning for alignment in the vectorizer.
9567 .IP "\fBvect-max-version-for-alias-checks\fR" 4
9568 .IX Item "vect-max-version-for-alias-checks"
9569 The maximum number of run-time checks that can be performed when
9570 doing loop versioning for alias in the vectorizer.
9571 .IP "\fBvect-max-peeling-for-alignment\fR" 4
9572 .IX Item "vect-max-peeling-for-alignment"
9573 The maximum number of loop peels to enhance access alignment
9574 for vectorizer. Value \-1 means 'no limit'.
9575 .IP "\fBmax-iterations-to-track\fR" 4
9576 .IX Item "max-iterations-to-track"
9577 The maximum number of iterations of a loop the brute-force algorithm
9578 for analysis of the number of iterations of the loop tries to evaluate.
9579 .IP "\fBhot-bb-count-ws-permille\fR" 4
9580 .IX Item "hot-bb-count-ws-permille"
9581 A basic block profile count is considered hot if it contributes to 
9582 the given permillage (i.e. 0...1000) of the entire profiled execution.
9583 .IP "\fBhot-bb-frequency-fraction\fR" 4
9584 .IX Item "hot-bb-frequency-fraction"
9585 Select fraction of the entry block frequency of executions of basic block in
9586 function given basic block needs to have to be considered hot.
9587 .IP "\fBmax-predicted-iterations\fR" 4
9588 .IX Item "max-predicted-iterations"
9589 The maximum number of loop iterations we predict statically.  This is useful
9590 in cases where a function contains a single loop with known bound and
9591 another loop with unknown bound.
9592 The known number of iterations is predicted correctly, while
9593 the unknown number of iterations average to roughly 10.  This means that the
9594 loop without bounds appears artificially cold relative to the other one.
9595 .IP "\fBbuiltin-expect-probability\fR" 4
9596 .IX Item "builtin-expect-probability"
9597 Control the probability of the expression having the specified value. This
9598 parameter takes a percentage (i.e. 0 ... 100) as input.
9599 The default probability of 90 is obtained empirically.
9600 .IP "\fBalign-threshold\fR" 4
9601 .IX Item "align-threshold"
9602 Select fraction of the maximal frequency of executions of a basic block in
9603 a function to align the basic block.
9604 .IP "\fBalign-loop-iterations\fR" 4
9605 .IX Item "align-loop-iterations"
9606 A loop expected to iterate at least the selected number of iterations is
9607 aligned.
9608 .IP "\fBtracer-dynamic-coverage\fR" 4
9609 .IX Item "tracer-dynamic-coverage"
9610 .PD 0
9611 .IP "\fBtracer-dynamic-coverage-feedback\fR" 4
9612 .IX Item "tracer-dynamic-coverage-feedback"
9613 .PD
9614 This value is used to limit superblock formation once the given percentage of
9615 executed instructions is covered.  This limits unnecessary code size
9616 expansion.
9617 .Sp
9618 The \fBtracer-dynamic-coverage-feedback\fR parameter
9619 is used only when profile
9620 feedback is available.  The real profiles (as opposed to statically estimated
9621 ones) are much less balanced allowing the threshold to be larger value.
9622 .IP "\fBtracer-max-code-growth\fR" 4
9623 .IX Item "tracer-max-code-growth"
9624 Stop tail duplication once code growth has reached given percentage.  This is
9625 a rather artificial limit, as most of the duplicates are eliminated later in
9626 cross jumping, so it may be set to much higher values than is the desired code
9627 growth.
9628 .IP "\fBtracer-min-branch-ratio\fR" 4
9629 .IX Item "tracer-min-branch-ratio"
9630 Stop reverse growth when the reverse probability of best edge is less than this
9631 threshold (in percent).
9632 .IP "\fBtracer-min-branch-ratio\fR" 4
9633 .IX Item "tracer-min-branch-ratio"
9634 .PD 0
9635 .IP "\fBtracer-min-branch-ratio-feedback\fR" 4
9636 .IX Item "tracer-min-branch-ratio-feedback"
9637 .PD
9638 Stop forward growth if the best edge has probability lower than this
9639 threshold.
9640 .Sp
9641 Similarly to \fBtracer-dynamic-coverage\fR two values are present, one for
9642 compilation for profile feedback and one for compilation without.  The value
9643 for compilation with profile feedback needs to be more conservative (higher) in
9644 order to make tracer effective.
9645 .IP "\fBmax-cse-path-length\fR" 4
9646 .IX Item "max-cse-path-length"
9647 The maximum number of basic blocks on path that \s-1CSE\s0 considers.
9648 The default is 10.
9649 .IP "\fBmax-cse-insns\fR" 4
9650 .IX Item "max-cse-insns"
9651 The maximum number of instructions \s-1CSE\s0 processes before flushing.
9652 The default is 1000.
9653 .IP "\fBggc-min-expand\fR" 4
9654 .IX Item "ggc-min-expand"
9655 \&\s-1GCC\s0 uses a garbage collector to manage its own memory allocation.  This
9656 parameter specifies the minimum percentage by which the garbage
9657 collector's heap should be allowed to expand between collections.
9658 Tuning this may improve compilation speed; it has no effect on code
9659 generation.
9660 .Sp
9661 The default is 30% + 70% * (\s-1RAM/1GB\s0) with an upper bound of 100% when
9662 \&\s-1RAM\s0 >= 1GB.  If \f(CW\*(C`getrlimit\*(C'\fR is available, the notion of \*(L"\s-1RAM\s0\*(R" is
9663 the smallest of actual \s-1RAM\s0 and \f(CW\*(C`RLIMIT_DATA\*(C'\fR or \f(CW\*(C`RLIMIT_AS\*(C'\fR.  If
9664 \&\s-1GCC\s0 is not able to calculate \s-1RAM\s0 on a particular platform, the lower
9665 bound of 30% is used.  Setting this parameter and
9666 \&\fBggc-min-heapsize\fR to zero causes a full collection to occur at
9667 every opportunity.  This is extremely slow, but can be useful for
9668 debugging.
9669 .IP "\fBggc-min-heapsize\fR" 4
9670 .IX Item "ggc-min-heapsize"
9671 Minimum size of the garbage collector's heap before it begins bothering
9672 to collect garbage.  The first collection occurs after the heap expands
9673 by \fBggc-min-expand\fR% beyond \fBggc-min-heapsize\fR.  Again,
9674 tuning this may improve compilation speed, and has no effect on code
9675 generation.
9676 .Sp
9677 The default is the smaller of \s-1RAM/8\s0, \s-1RLIMIT_RSS\s0, or a limit that
9678 tries to ensure that \s-1RLIMIT_DATA\s0 or \s-1RLIMIT_AS\s0 are not exceeded, but
9679 with a lower bound of 4096 (four megabytes) and an upper bound of
9680 131072 (128 megabytes).  If \s-1GCC\s0 is not able to calculate \s-1RAM\s0 on a
9681 particular platform, the lower bound is used.  Setting this parameter
9682 very large effectively disables garbage collection.  Setting this
9683 parameter and \fBggc-min-expand\fR to zero causes a full collection
9684 to occur at every opportunity.
9685 .IP "\fBmax-reload-search-insns\fR" 4
9686 .IX Item "max-reload-search-insns"
9687 The maximum number of instruction reload should look backward for equivalent
9688 register.  Increasing values mean more aggressive optimization, making the
9689 compilation time increase with probably slightly better performance.
9690 The default value is 100.
9691 .IP "\fBmax-cselib-memory-locations\fR" 4
9692 .IX Item "max-cselib-memory-locations"
9693 The maximum number of memory locations cselib should take into account.
9694 Increasing values mean more aggressive optimization, making the compilation time
9695 increase with probably slightly better performance.  The default value is 500.
9696 .IP "\fBreorder-blocks-duplicate\fR" 4
9697 .IX Item "reorder-blocks-duplicate"
9698 .PD 0
9699 .IP "\fBreorder-blocks-duplicate-feedback\fR" 4
9700 .IX Item "reorder-blocks-duplicate-feedback"
9701 .PD
9702 Used by the basic block reordering pass to decide whether to use unconditional
9703 branch or duplicate the code on its destination.  Code is duplicated when its
9704 estimated size is smaller than this value multiplied by the estimated size of
9705 unconditional jump in the hot spots of the program.
9706 .Sp
9707 The \fBreorder-block-duplicate-feedback\fR parameter
9708 is used only when profile
9709 feedback is available.  It may be set to higher values than
9710 \&\fBreorder-block-duplicate\fR since information about the hot spots is more
9711 accurate.
9712 .IP "\fBmax-sched-ready-insns\fR" 4
9713 .IX Item "max-sched-ready-insns"
9714 The maximum number of instructions ready to be issued the scheduler should
9715 consider at any given time during the first scheduling pass.  Increasing
9716 values mean more thorough searches, making the compilation time increase
9717 with probably little benefit.  The default value is 100.
9718 .IP "\fBmax-sched-region-blocks\fR" 4
9719 .IX Item "max-sched-region-blocks"
9720 The maximum number of blocks in a region to be considered for
9721 interblock scheduling.  The default value is 10.
9722 .IP "\fBmax-pipeline-region-blocks\fR" 4
9723 .IX Item "max-pipeline-region-blocks"
9724 The maximum number of blocks in a region to be considered for
9725 pipelining in the selective scheduler.  The default value is 15.
9726 .IP "\fBmax-sched-region-insns\fR" 4
9727 .IX Item "max-sched-region-insns"
9728 The maximum number of insns in a region to be considered for
9729 interblock scheduling.  The default value is 100.
9730 .IP "\fBmax-pipeline-region-insns\fR" 4
9731 .IX Item "max-pipeline-region-insns"
9732 The maximum number of insns in a region to be considered for
9733 pipelining in the selective scheduler.  The default value is 200.
9734 .IP "\fBmin-spec-prob\fR" 4
9735 .IX Item "min-spec-prob"
9736 The minimum probability (in percents) of reaching a source block
9737 for interblock speculative scheduling.  The default value is 40.
9738 .IP "\fBmax-sched-extend-regions-iters\fR" 4
9739 .IX Item "max-sched-extend-regions-iters"
9740 The maximum number of iterations through \s-1CFG\s0 to extend regions.
9741 A value of 0 (the default) disables region extensions.
9742 .IP "\fBmax-sched-insn-conflict-delay\fR" 4
9743 .IX Item "max-sched-insn-conflict-delay"
9744 The maximum conflict delay for an insn to be considered for speculative motion.
9745 The default value is 3.
9746 .IP "\fBsched-spec-prob-cutoff\fR" 4
9747 .IX Item "sched-spec-prob-cutoff"
9748 The minimal probability of speculation success (in percents), so that
9749 speculative insns are scheduled.
9750 The default value is 40.
9751 .IP "\fBsched-spec-state-edge-prob-cutoff\fR" 4
9752 .IX Item "sched-spec-state-edge-prob-cutoff"
9753 The minimum probability an edge must have for the scheduler to save its
9754 state across it.
9755 The default value is 10.
9756 .IP "\fBsched-mem-true-dep-cost\fR" 4
9757 .IX Item "sched-mem-true-dep-cost"
9758 Minimal distance (in \s-1CPU\s0 cycles) between store and load targeting same
9759 memory locations.  The default value is 1.
9760 .IP "\fBselsched-max-lookahead\fR" 4
9761 .IX Item "selsched-max-lookahead"
9762 The maximum size of the lookahead window of selective scheduling.  It is a
9763 depth of search for available instructions.
9764 The default value is 50.
9765 .IP "\fBselsched-max-sched-times\fR" 4
9766 .IX Item "selsched-max-sched-times"
9767 The maximum number of times that an instruction is scheduled during
9768 selective scheduling.  This is the limit on the number of iterations
9769 through which the instruction may be pipelined.  The default value is 2.
9770 .IP "\fBselsched-max-insns-to-rename\fR" 4
9771 .IX Item "selsched-max-insns-to-rename"
9772 The maximum number of best instructions in the ready list that are considered
9773 for renaming in the selective scheduler.  The default value is 2.
9774 .IP "\fBsms-min-sc\fR" 4
9775 .IX Item "sms-min-sc"
9776 The minimum value of stage count that swing modulo scheduler
9777 generates.  The default value is 2.
9778 .IP "\fBmax-last-value-rtl\fR" 4
9779 .IX Item "max-last-value-rtl"
9780 The maximum size measured as number of RTLs that can be recorded in an expression
9781 in combiner for a pseudo register as last known value of that register.  The default
9782 is 10000.
9783 .IP "\fBmax-combine-insns\fR" 4
9784 .IX Item "max-combine-insns"
9785 The maximum number of instructions the \s-1RTL\s0 combiner tries to combine.
9786 The default value is 2 at \fB\-Og\fR and 4 otherwise.
9787 .IP "\fBinteger-share-limit\fR" 4
9788 .IX Item "integer-share-limit"
9789 Small integer constants can use a shared data structure, reducing the
9790 compiler's memory usage and increasing its speed.  This sets the maximum
9791 value of a shared integer constant.  The default value is 256.
9792 .IP "\fBssp-buffer-size\fR" 4
9793 .IX Item "ssp-buffer-size"
9794 The minimum size of buffers (i.e. arrays) that receive stack smashing
9795 protection when \fB\-fstack\-protection\fR is used.
9796 .IP "\fBmin-size-for-stack-sharing\fR" 4
9797 .IX Item "min-size-for-stack-sharing"
9798 The minimum size of variables taking part in stack slot sharing when not
9799 optimizing. The default value is 32.
9800 .IP "\fBmax-jump-thread-duplication-stmts\fR" 4
9801 .IX Item "max-jump-thread-duplication-stmts"
9802 Maximum number of statements allowed in a block that needs to be
9803 duplicated when threading jumps.
9804 .IP "\fBmax-fields-for-field-sensitive\fR" 4
9805 .IX Item "max-fields-for-field-sensitive"
9806 Maximum number of fields in a structure treated in
9807 a field sensitive manner during pointer analysis.  The default is zero
9808 for \fB\-O0\fR and \fB\-O1\fR,
9809 and 100 for \fB\-Os\fR, \fB\-O2\fR, and \fB\-O3\fR.
9810 .IP "\fBprefetch-latency\fR" 4
9811 .IX Item "prefetch-latency"
9812 Estimate on average number of instructions that are executed before
9813 prefetch finishes.  The distance prefetched ahead is proportional
9814 to this constant.  Increasing this number may also lead to less
9815 streams being prefetched (see \fBsimultaneous-prefetches\fR).
9816 .IP "\fBsimultaneous-prefetches\fR" 4
9817 .IX Item "simultaneous-prefetches"
9818 Maximum number of prefetches that can run at the same time.
9819 .IP "\fBl1\-cache\-line\-size\fR" 4
9820 .IX Item "l1-cache-line-size"
9821 The size of cache line in L1 cache, in bytes.
9822 .IP "\fBl1\-cache\-size\fR" 4
9823 .IX Item "l1-cache-size"
9824 The size of L1 cache, in kilobytes.
9825 .IP "\fBl2\-cache\-size\fR" 4
9826 .IX Item "l2-cache-size"
9827 The size of L2 cache, in kilobytes.
9828 .IP "\fBmin-insn-to-prefetch-ratio\fR" 4
9829 .IX Item "min-insn-to-prefetch-ratio"
9830 The minimum ratio between the number of instructions and the
9831 number of prefetches to enable prefetching in a loop.
9832 .IP "\fBprefetch-min-insn-to-mem-ratio\fR" 4
9833 .IX Item "prefetch-min-insn-to-mem-ratio"
9834 The minimum ratio between the number of instructions and the
9835 number of memory references to enable prefetching in a loop.
9836 .IP "\fBuse-canonical-types\fR" 4
9837 .IX Item "use-canonical-types"
9838 Whether the compiler should use the \*(L"canonical\*(R" type system.  By
9839 default, this should always be 1, which uses a more efficient internal
9840 mechanism for comparing types in \*(C+ and Objective\-\*(C+.  However, if
9841 bugs in the canonical type system are causing compilation failures,
9842 set this value to 0 to disable canonical types.
9843 .IP "\fBswitch-conversion-max-branch-ratio\fR" 4
9844 .IX Item "switch-conversion-max-branch-ratio"
9845 Switch initialization conversion refuses to create arrays that are
9846 bigger than \fBswitch-conversion-max-branch-ratio\fR times the number of
9847 branches in the switch.
9848 .IP "\fBmax-partial-antic-length\fR" 4
9849 .IX Item "max-partial-antic-length"
9850 Maximum length of the partial antic set computed during the tree
9851 partial redundancy elimination optimization (\fB\-ftree\-pre\fR) when
9852 optimizing at \fB\-O3\fR and above.  For some sorts of source code
9853 the enhanced partial redundancy elimination optimization can run away,
9854 consuming all of the memory available on the host machine.  This
9855 parameter sets a limit on the length of the sets that are computed,
9856 which prevents the runaway behavior.  Setting a value of 0 for
9857 this parameter allows an unlimited set length.
9858 .IP "\fBsccvn-max-scc-size\fR" 4
9859 .IX Item "sccvn-max-scc-size"
9860 Maximum size of a strongly connected component (\s-1SCC\s0) during \s-1SCCVN\s0
9861 processing.  If this limit is hit, \s-1SCCVN\s0 processing for the whole
9862 function is not done and optimizations depending on it are
9863 disabled.  The default maximum \s-1SCC\s0 size is 10000.
9864 .IP "\fBsccvn-max-alias-queries-per-access\fR" 4
9865 .IX Item "sccvn-max-alias-queries-per-access"
9866 Maximum number of alias-oracle queries we perform when looking for
9867 redundancies for loads and stores.  If this limit is hit the search
9868 is aborted and the load or store is not considered redundant.  The
9869 number of queries is algorithmically limited to the number of
9870 stores on all paths from the load to the function entry.
9871 The default maxmimum number of queries is 1000.
9872 .IP "\fBira-max-loops-num\fR" 4
9873 .IX Item "ira-max-loops-num"
9874 \&\s-1IRA\s0 uses regional register allocation by default.  If a function
9875 contains more loops than the number given by this parameter, only at most
9876 the given number of the most frequently-executed loops form regions
9877 for regional register allocation.  The default value of the
9878 parameter is 100.
9879 .IP "\fBira-max-conflict-table-size\fR" 4
9880 .IX Item "ira-max-conflict-table-size"
9881 Although \s-1IRA\s0 uses a sophisticated algorithm to compress the conflict
9882 table, the table can still require excessive amounts of memory for
9883 huge functions.  If the conflict table for a function could be more
9884 than the size in \s-1MB\s0 given by this parameter, the register allocator
9885 instead uses a faster, simpler, and lower-quality
9886 algorithm that does not require building a pseudo-register conflict table.  
9887 The default value of the parameter is 2000.
9888 .IP "\fBira-loop-reserved-regs\fR" 4
9889 .IX Item "ira-loop-reserved-regs"
9890 \&\s-1IRA\s0 can be used to evaluate more accurate register pressure in loops
9891 for decisions to move loop invariants (see \fB\-O3\fR).  The number
9892 of available registers reserved for some other purposes is given
9893 by this parameter.  The default value of the parameter is 2, which is
9894 the minimal number of registers needed by typical instructions.
9895 This value is the best found from numerous experiments.
9896 .IP "\fBlra-inheritance-ebb-probability-cutoff\fR" 4
9897 .IX Item "lra-inheritance-ebb-probability-cutoff"
9898 \&\s-1LRA\s0 tries to reuse values reloaded in registers in subsequent insns.
9899 This optimization is called inheritance.  \s-1EBB\s0 is used as a region to
9900 do this optimization.  The parameter defines a minimal fall-through
9901 edge probability in percentage used to add \s-1BB\s0 to inheritance \s-1EBB\s0 in
9902 \&\s-1LRA\s0.  The default value of the parameter is 40.  The value was chosen
9903 from numerous runs of \s-1SPEC2000\s0 on x86\-64.
9904 .IP "\fBloop-invariant-max-bbs-in-loop\fR" 4
9905 .IX Item "loop-invariant-max-bbs-in-loop"
9906 Loop invariant motion can be very expensive, both in compilation time and
9907 in amount of needed compile-time memory, with very large loops.  Loops
9908 with more basic blocks than this parameter won't have loop invariant
9909 motion optimization performed on them.  The default value of the
9910 parameter is 1000 for \fB\-O1\fR and 10000 for \fB\-O2\fR and above.
9911 .IP "\fBloop-max-datarefs-for-datadeps\fR" 4
9912 .IX Item "loop-max-datarefs-for-datadeps"
9913 Building data dapendencies is expensive for very large loops.  This
9914 parameter limits the number of data references in loops that are
9915 considered for data dependence analysis.  These large loops are no
9916 handled by the optimizations using loop data dependencies.
9917 The default value is 1000.
9918 .IP "\fBmax-vartrack-size\fR" 4
9919 .IX Item "max-vartrack-size"
9920 Sets a maximum number of hash table slots to use during variable
9921 tracking dataflow analysis of any function.  If this limit is exceeded
9922 with variable tracking at assignments enabled, analysis for that
9923 function is retried without it, after removing all debug insns from
9924 the function.  If the limit is exceeded even without debug insns, var
9925 tracking analysis is completely disabled for the function.  Setting
9926 the parameter to zero makes it unlimited.
9927 .IP "\fBmax-vartrack-expr-depth\fR" 4
9928 .IX Item "max-vartrack-expr-depth"
9929 Sets a maximum number of recursion levels when attempting to map
9930 variable names or debug temporaries to value expressions.  This trades
9931 compilation time for more complete debug information.  If this is set too
9932 low, value expressions that are available and could be represented in
9933 debug information may end up not being used; setting this higher may
9934 enable the compiler to find more complex debug expressions, but compile
9935 time and memory use may grow.  The default is 12.
9936 .IP "\fBmin-nondebug-insn-uid\fR" 4
9937 .IX Item "min-nondebug-insn-uid"
9938 Use uids starting at this parameter for nondebug insns.  The range below
9939 the parameter is reserved exclusively for debug insns created by
9940 \&\fB\-fvar\-tracking\-assignments\fR, but debug insns may get
9941 (non-overlapping) uids above it if the reserved range is exhausted.
9942 .IP "\fBipa-sra-ptr-growth-factor\fR" 4
9943 .IX Item "ipa-sra-ptr-growth-factor"
9944 IPA-SRA replaces a pointer to an aggregate with one or more new
9945 parameters only when their cumulative size is less or equal to
9946 \&\fBipa-sra-ptr-growth-factor\fR times the size of the original
9947 pointer parameter.
9948 .IP "\fBsra-max-scalarization-size-Ospeed\fR" 4
9949 .IX Item "sra-max-scalarization-size-Ospeed"
9950 .PD 0
9951 .IP "\fBsra-max-scalarization-size-Osize\fR" 4
9952 .IX Item "sra-max-scalarization-size-Osize"
9953 .PD
9954 The two Scalar Reduction of Aggregates passes (\s-1SRA\s0 and IPA-SRA) aim to
9955 replace scalar parts of aggregates with uses of independent scalar
9956 variables.  These parameters control the maximum size, in storage units,
9957 of aggregate which is considered for replacement when compiling for
9958 speed
9959 (\fBsra-max-scalarization-size-Ospeed\fR) or size
9960 (\fBsra-max-scalarization-size-Osize\fR) respectively.
9961 .IP "\fBtm-max-aggregate-size\fR" 4
9962 .IX Item "tm-max-aggregate-size"
9963 When making copies of thread-local variables in a transaction, this
9964 parameter specifies the size in bytes after which variables are
9965 saved with the logging functions as opposed to save/restore code
9966 sequence pairs.  This option only applies when using
9967 \&\fB\-fgnu\-tm\fR.
9968 .IP "\fBgraphite-max-nb-scop-params\fR" 4
9969 .IX Item "graphite-max-nb-scop-params"
9970 To avoid exponential effects in the Graphite loop transforms, the
9971 number of parameters in a Static Control Part (SCoP) is bounded.  The
9972 default value is 10 parameters.  A variable whose value is unknown at
9973 compilation time and defined outside a SCoP is a parameter of the SCoP.
9974 .IP "\fBgraphite-max-bbs-per-function\fR" 4
9975 .IX Item "graphite-max-bbs-per-function"
9976 To avoid exponential effects in the detection of SCoPs, the size of
9977 the functions analyzed by Graphite is bounded.  The default value is
9978 100 basic blocks.
9979 .IP "\fBloop-block-tile-size\fR" 4
9980 .IX Item "loop-block-tile-size"
9981 Loop blocking or strip mining transforms, enabled with
9982 \&\fB\-floop\-block\fR or \fB\-floop\-strip\-mine\fR, strip mine each
9983 loop in the loop nest by a given number of iterations.  The strip
9984 length can be changed using the \fBloop-block-tile-size\fR
9985 parameter.  The default value is 51 iterations.
9986 .IP "\fBloop-unroll-jam-size\fR" 4
9987 .IX Item "loop-unroll-jam-size"
9988 Specify the unroll factor for the \fB\-floop\-unroll\-and\-jam\fR option.  The 
9989 default value is 4.
9990 .IP "\fBloop-unroll-jam-depth\fR" 4
9991 .IX Item "loop-unroll-jam-depth"
9992 Specify the dimension to be unrolled (counting from the most inner loop)
9993 for the  \fB\-floop\-unroll\-and\-jam\fR.  The default value is 2.
9994 .IP "\fBipa-cp-value-list-size\fR" 4
9995 .IX Item "ipa-cp-value-list-size"
9996 IPA-CP attempts to track all possible values and types passed to a function's
9997 parameter in order to propagate them and perform devirtualization.
9998 \&\fBipa-cp-value-list-size\fR is the maximum number of values and types it
9999 stores per one formal parameter of a function.
10000 .IP "\fBipa-cp-eval-threshold\fR" 4
10001 .IX Item "ipa-cp-eval-threshold"
10002 IPA-CP calculates its own score of cloning profitability heuristics
10003 and performs those cloning opportunities with scores that exceed
10004 \&\fBipa-cp-eval-threshold\fR.
10005 .IP "\fBipa-cp-recursion-penalty\fR" 4
10006 .IX Item "ipa-cp-recursion-penalty"
10007 Percentage penalty the recursive functions will receive when they
10008 are evaluated for cloning.
10009 .IP "\fBipa-cp-single-call-penalty\fR" 4
10010 .IX Item "ipa-cp-single-call-penalty"
10011 Percentage penalty functions containg a single call to another
10012 function will receive when they are evaluated for cloning.
10013 .IP "\fBipa-max-agg-items\fR" 4
10014 .IX Item "ipa-max-agg-items"
10015 IPA-CP is also capable to propagate a number of scalar values passed
10016 in an aggregate. \fBipa-max-agg-items\fR controls the maximum
10017 number of such values per one parameter.
10018 .IP "\fBipa-cp-loop-hint-bonus\fR" 4
10019 .IX Item "ipa-cp-loop-hint-bonus"
10020 When IPA-CP determines that a cloning candidate would make the number
10021 of iterations of a loop known, it adds a bonus of
10022 \&\fBipa-cp-loop-hint-bonus\fR to the profitability score of
10023 the candidate.
10024 .IP "\fBipa-cp-array-index-hint-bonus\fR" 4
10025 .IX Item "ipa-cp-array-index-hint-bonus"
10026 When IPA-CP determines that a cloning candidate would make the index of
10027 an array access known, it adds a bonus of
10028 \&\fBipa-cp-array-index-hint-bonus\fR to the profitability
10029 score of the candidate.
10030 .IP "\fBipa-max-aa-steps\fR" 4
10031 .IX Item "ipa-max-aa-steps"
10032 During its analysis of function bodies, IPA-CP employs alias analysis
10033 in order to track values pointed to by function parameters.  In order
10034 not spend too much time analyzing huge functions, it gives up and
10035 consider all memory clobbered after examining
10036 \&\fBipa-max-aa-steps\fR statements modifying memory.
10037 .IP "\fBlto-partitions\fR" 4
10038 .IX Item "lto-partitions"
10039 Specify desired number of partitions produced during \s-1WHOPR\s0 compilation.
10040 The number of partitions should exceed the number of CPUs used for compilation.
10041 The default value is 32.
10042 .IP "\fBlto-minpartition\fR" 4
10043 .IX Item "lto-minpartition"
10044 Size of minimal partition for \s-1WHOPR\s0 (in estimated instructions).
10045 This prevents expenses of splitting very small programs into too many
10046 partitions.
10047 .IP "\fBcxx-max-namespaces-for-diagnostic-help\fR" 4
10048 .IX Item "cxx-max-namespaces-for-diagnostic-help"
10049 The maximum number of namespaces to consult for suggestions when \*(C+
10050 name lookup fails for an identifier.  The default is 1000.
10051 .IP "\fBsink-frequency-threshold\fR" 4
10052 .IX Item "sink-frequency-threshold"
10053 The maximum relative execution frequency (in percents) of the target block
10054 relative to a statement's original block to allow statement sinking of a
10055 statement.  Larger numbers result in more aggressive statement sinking.
10056 The default value is 75.  A small positive adjustment is applied for
10057 statements with memory operands as those are even more profitable so sink.
10058 .IP "\fBmax-stores-to-sink\fR" 4
10059 .IX Item "max-stores-to-sink"
10060 The maximum number of conditional stores paires that can be sunk.  Set to 0
10061 if either vectorization (\fB\-ftree\-vectorize\fR) or if-conversion
10062 (\fB\-ftree\-loop\-if\-convert\fR) is disabled.  The default is 2.
10063 .IP "\fBallow-store-data-races\fR" 4
10064 .IX Item "allow-store-data-races"
10065 Allow optimizers to introduce new data races on stores.
10066 Set to 1 to allow, otherwise to 0.  This option is enabled by default
10067 at optimization level \fB\-Ofast\fR.
10068 .IP "\fBcase-values-threshold\fR" 4
10069 .IX Item "case-values-threshold"
10070 The smallest number of different values for which it is best to use a
10071 jump-table instead of a tree of conditional branches.  If the value is
10072 0, use the default for the machine.  The default is 0.
10073 .IP "\fBtree-reassoc-width\fR" 4
10074 .IX Item "tree-reassoc-width"
10075 Set the maximum number of instructions executed in parallel in
10076 reassociated tree. This parameter overrides target dependent
10077 heuristics used by default if has non zero value.
10078 .IP "\fBsched-pressure-algorithm\fR" 4
10079 .IX Item "sched-pressure-algorithm"
10080 Choose between the two available implementations of
10081 \&\fB\-fsched\-pressure\fR.  Algorithm 1 is the original implementation
10082 and is the more likely to prevent instructions from being reordered.
10083 Algorithm 2 was designed to be a compromise between the relatively
10084 conservative approach taken by algorithm 1 and the rather aggressive
10085 approach taken by the default scheduler.  It relies more heavily on
10086 having a regular register file and accurate register pressure classes.
10087 See \fIhaifa\-sched.c\fR in the \s-1GCC\s0 sources for more details.
10088 .Sp
10089 The default choice depends on the target.
10090 .IP "\fBmax-slsr-cand-scan\fR" 4
10091 .IX Item "max-slsr-cand-scan"
10092 Set the maximum number of existing candidates that are considered when
10093 seeking a basis for a new straight-line strength reduction candidate.
10094 .IP "\fBasan-globals\fR" 4
10095 .IX Item "asan-globals"
10096 Enable buffer overflow detection for global objects.  This kind
10097 of protection is enabled by default if you are using
10098 \&\fB\-fsanitize=address\fR option.
10099 To disable global objects protection use \fB\-\-param asan\-globals=0\fR.
10100 .IP "\fBasan-stack\fR" 4
10101 .IX Item "asan-stack"
10102 Enable buffer overflow detection for stack objects.  This kind of
10103 protection is enabled by default when using\fB\-fsanitize=address\fR.
10104 To disable stack protection use \fB\-\-param asan\-stack=0\fR option.
10105 .IP "\fBasan-instrument-reads\fR" 4
10106 .IX Item "asan-instrument-reads"
10107 Enable buffer overflow detection for memory reads.  This kind of
10108 protection is enabled by default when using \fB\-fsanitize=address\fR.
10109 To disable memory reads protection use
10110 \&\fB\-\-param asan\-instrument\-reads=0\fR.
10111 .IP "\fBasan-instrument-writes\fR" 4
10112 .IX Item "asan-instrument-writes"
10113 Enable buffer overflow detection for memory writes.  This kind of
10114 protection is enabled by default when using \fB\-fsanitize=address\fR.
10115 To disable memory writes protection use
10116 \&\fB\-\-param asan\-instrument\-writes=0\fR option.
10117 .IP "\fBasan-memintrin\fR" 4
10118 .IX Item "asan-memintrin"
10119 Enable detection for built-in functions.  This kind of protection
10120 is enabled by default when using \fB\-fsanitize=address\fR.
10121 To disable built-in functions protection use
10122 \&\fB\-\-param asan\-memintrin=0\fR.
10123 .IP "\fBasan-use-after-return\fR" 4
10124 .IX Item "asan-use-after-return"
10125 Enable detection of use-after-return.  This kind of protection
10126 is enabled by default when using \fB\-fsanitize=address\fR option.
10127 To disable use-after-return detection use 
10128 \&\fB\-\-param asan\-use\-after\-return=0\fR.
10129 .IP "\fBasan-instrumentation-with-call-threshold\fR" 4
10130 .IX Item "asan-instrumentation-with-call-threshold"
10131 If number of memory accesses in function being instrumented
10132 is greater or equal to this number, use callbacks instead of inline checks.
10133 E.g. to disable inline code use
10134 \&\fB\-\-param asan\-instrumentation\-with\-call\-threshold=0\fR.
10135 .IP "\fBchkp-max-ctor-size\fR" 4
10136 .IX Item "chkp-max-ctor-size"
10137 Static constructors generated by Pointer Bounds Checker may become very
10138 large and significantly increase compile time at optimization level
10139 \&\fB\-O1\fR and higher.  This parameter is a maximum nubmer of statements
10140 in a single generated constructor.  Default value is 5000.
10141 .IP "\fBmax-fsm-thread-path-insns\fR" 4
10142 .IX Item "max-fsm-thread-path-insns"
10143 Maximum number of instructions to copy when duplicating blocks on a
10144 finite state automaton jump thread path.  The default is 100.
10145 .IP "\fBmax-fsm-thread-length\fR" 4
10146 .IX Item "max-fsm-thread-length"
10147 Maximum number of basic blocks on a finite state automaton jump thread
10148 path.  The default is 10.
10149 .IP "\fBmax-fsm-thread-paths\fR" 4
10150 .IX Item "max-fsm-thread-paths"
10151 Maximum number of new jump thread paths to create for a finite state
10152 automaton.  The default is 50.
10153 .RE
10154 .RS 4
10155 .RE
10156 .Sh "Options Controlling the Preprocessor"
10157 .IX Subsection "Options Controlling the Preprocessor"
10158 These options control the C preprocessor, which is run on each C source
10159 file before actual compilation.
10160 .PP
10161 If you use the \fB\-E\fR option, nothing is done except preprocessing.
10162 Some of these options make sense only together with \fB\-E\fR because
10163 they cause the preprocessor output to be unsuitable for actual
10164 compilation.
10165 .IP "\fB\-Wp,\fR\fIoption\fR" 4
10166 .IX Item "-Wp,option"
10167 You can use \fB\-Wp,\fR\fIoption\fR to bypass the compiler driver
10168 and pass \fIoption\fR directly through to the preprocessor.  If
10169 \&\fIoption\fR contains commas, it is split into multiple options at the
10170 commas.  However, many options are modified, translated or interpreted
10171 by the compiler driver before being passed to the preprocessor, and
10172 \&\fB\-Wp\fR forcibly bypasses this phase.  The preprocessor's direct
10173 interface is undocumented and subject to change, so whenever possible
10174 you should avoid using \fB\-Wp\fR and let the driver handle the
10175 options instead.
10176 .IP "\fB\-Xpreprocessor\fR \fIoption\fR" 4
10177 .IX Item "-Xpreprocessor option"
10178 Pass \fIoption\fR as an option to the preprocessor.  You can use this to
10179 supply system-specific preprocessor options that \s-1GCC\s0 does not 
10180 recognize.
10181 .Sp
10182 If you want to pass an option that takes an argument, you must use
10183 \&\fB\-Xpreprocessor\fR twice, once for the option and once for the argument.
10184 .IP "\fB\-no\-integrated\-cpp\fR" 4
10185 .IX Item "-no-integrated-cpp"
10186 Perform preprocessing as a separate pass before compilation.
10187 By default, \s-1GCC\s0 performs preprocessing as an integrated part of
10188 input tokenization and parsing.
10189 If this option is provided, the appropriate language front end
10190 (\fBcc1\fR, \fBcc1plus\fR, or \fBcc1obj\fR for C, \*(C+,
10191 and Objective-C, respectively) is instead invoked twice,
10192 once for preprocessing only and once for actual compilation
10193 of the preprocessed input.
10194 This option may be useful in conjunction with the \fB\-B\fR or
10195 \&\fB\-wrapper\fR options to specify an alternate preprocessor or
10196 perform additional processing of the program source between
10197 normal preprocessing and compilation.
10198 .IP "\fB\-D\fR \fIname\fR" 4
10199 .IX Item "-D name"
10200 Predefine \fIname\fR as a macro, with definition \f(CW1\fR.
10201 .IP "\fB\-D\fR \fIname\fR\fB=\fR\fIdefinition\fR" 4
10202 .IX Item "-D name=definition"
10203 The contents of \fIdefinition\fR are tokenized and processed as if
10204 they appeared during translation phase three in a \fB#define\fR
10205 directive.  In particular, the definition will be truncated by
10206 embedded newline characters.
10207 .Sp
10208 If you are invoking the preprocessor from a shell or shell-like
10209 program you may need to use the shell's quoting syntax to protect
10210 characters such as spaces that have a meaning in the shell syntax.
10211 .Sp
10212 If you wish to define a function-like macro on the command line, write
10213 its argument list with surrounding parentheses before the equals sign
10214 (if any).  Parentheses are meaningful to most shells, so you will need
10215 to quote the option.  With \fBsh\fR and \fBcsh\fR,
10216 \&\fB\-D'\fR\fIname\fR\fB(\fR\fIargs...\fR\fB)=\fR\fIdefinition\fR\fB'\fR works.
10217 .Sp
10218 \&\fB\-D\fR and \fB\-U\fR options are processed in the order they
10219 are given on the command line.  All \fB\-imacros\fR \fIfile\fR and
10220 \&\fB\-include\fR \fIfile\fR options are processed after all
10221 \&\fB\-D\fR and \fB\-U\fR options.
10222 .IP "\fB\-U\fR \fIname\fR" 4
10223 .IX Item "-U name"
10224 Cancel any previous definition of \fIname\fR, either built in or
10225 provided with a \fB\-D\fR option.
10226 .IP "\fB\-undef\fR" 4
10227 .IX Item "-undef"
10228 Do not predefine any system-specific or GCC-specific macros.  The
10229 standard predefined macros remain defined.
10230 .IP "\fB\-I\fR \fIdir\fR" 4
10231 .IX Item "-I dir"
10232 Add the directory \fIdir\fR to the list of directories to be searched
10233 for header files.
10234 Directories named by \fB\-I\fR are searched before the standard
10235 system include directories.  If the directory \fIdir\fR is a standard
10236 system include directory, the option is ignored to ensure that the
10237 default search order for system directories and the special treatment
10238 of system headers are not defeated
10239 \&.
10240 If \fIdir\fR begins with \f(CW\*(C`=\*(C'\fR, then the \f(CW\*(C`=\*(C'\fR will be replaced
10241 by the sysroot prefix; see \fB\-\-sysroot\fR and \fB\-isysroot\fR.
10242 .IP "\fB\-o\fR \fIfile\fR" 4
10243 .IX Item "-o file"
10244 Write output to \fIfile\fR.  This is the same as specifying \fIfile\fR
10245 as the second non-option argument to \fBcpp\fR.  \fBgcc\fR has a
10246 different interpretation of a second non-option argument, so you must
10247 use \fB\-o\fR to specify the output file.
10248 .IP "\fB\-Wall\fR" 4
10249 .IX Item "-Wall"
10250 Turns on all optional warnings which are desirable for normal code.
10251 At present this is \fB\-Wcomment\fR, \fB\-Wtrigraphs\fR,
10252 \&\fB\-Wmultichar\fR and a warning about integer promotion causing a
10253 change of sign in \f(CW\*(C`#if\*(C'\fR expressions.  Note that many of the
10254 preprocessor's warnings are on by default and have no options to
10255 control them.
10256 .IP "\fB\-Wcomment\fR" 4
10257 .IX Item "-Wcomment"
10258 .PD 0
10259 .IP "\fB\-Wcomments\fR" 4
10260 .IX Item "-Wcomments"
10261 .PD
10262 Warn whenever a comment-start sequence \fB/*\fR appears in a \fB/*\fR
10263 comment, or whenever a backslash-newline appears in a \fB//\fR comment.
10264 (Both forms have the same effect.)
10265 .IP "\fB\-Wtrigraphs\fR" 4
10266 .IX Item "-Wtrigraphs"
10267 Most trigraphs in comments cannot affect the meaning of the program.
10268 However, a trigraph that would form an escaped newline (\fB??/\fR at
10269 the end of a line) can, by changing where the comment begins or ends.
10270 Therefore, only trigraphs that would form escaped newlines produce
10271 warnings inside a comment.
10272 .Sp
10273 This option is implied by \fB\-Wall\fR.  If \fB\-Wall\fR is not
10274 given, this option is still enabled unless trigraphs are enabled.  To
10275 get trigraph conversion without warnings, but get the other
10276 \&\fB\-Wall\fR warnings, use \fB\-trigraphs \-Wall \-Wno\-trigraphs\fR.
10277 .IP "\fB\-Wtraditional\fR" 4
10278 .IX Item "-Wtraditional"
10279 Warn about certain constructs that behave differently in traditional and
10280 \&\s-1ISO\s0 C.  Also warn about \s-1ISO\s0 C constructs that have no traditional C
10281 equivalent, and problematic constructs which should be avoided.
10282 .IP "\fB\-Wundef\fR" 4
10283 .IX Item "-Wundef"
10284 Warn whenever an identifier which is not a macro is encountered in an
10285 \&\fB#if\fR directive, outside of \fBdefined\fR.  Such identifiers are
10286 replaced with zero.
10287 .IP "\fB\-Wunused\-macros\fR" 4
10288 .IX Item "-Wunused-macros"
10289 Warn about macros defined in the main file that are unused.  A macro
10290 is \fIused\fR if it is expanded or tested for existence at least once.
10291 The preprocessor will also warn if the macro has not been used at the
10292 time it is redefined or undefined.
10293 .Sp
10294 Built-in macros, macros defined on the command line, and macros
10295 defined in include files are not warned about.
10296 .Sp
10297 \&\fINote:\fR If a macro is actually used, but only used in skipped
10298 conditional blocks, then \s-1CPP\s0 will report it as unused.  To avoid the
10299 warning in such a case, you might improve the scope of the macro's
10300 definition by, for example, moving it into the first skipped block.
10301 Alternatively, you could provide a dummy use with something like:
10302 .Sp
10303 .Vb 2
10304 \&        #if defined the_macro_causing_the_warning
10305 \&        #endif
10306 .Ve
10307 .IP "\fB\-Wendif\-labels\fR" 4
10308 .IX Item "-Wendif-labels"
10309 Warn whenever an \fB#else\fR or an \fB#endif\fR are followed by text.
10310 This usually happens in code of the form
10311 .Sp
10312 .Vb 5
10313 \&        #if FOO
10314 \&        ...
10315 \&        #else FOO
10316 \&        ...
10317 \&        #endif FOO
10318 .Ve
10319 .Sp
10320 The second and third \f(CW\*(C`FOO\*(C'\fR should be in comments, but often are not
10321 in older programs.  This warning is on by default.
10322 .IP "\fB\-Werror\fR" 4
10323 .IX Item "-Werror"
10324 Make all warnings into hard errors.  Source code which triggers warnings
10325 will be rejected.
10326 .IP "\fB\-Wsystem\-headers\fR" 4
10327 .IX Item "-Wsystem-headers"
10328 Issue warnings for code in system headers.  These are normally unhelpful
10329 in finding bugs in your own code, therefore suppressed.  If you are
10330 responsible for the system library, you may want to see them.
10331 .IP "\fB\-w\fR" 4
10332 .IX Item "-w"
10333 Suppress all warnings, including those which \s-1GNU\s0 \s-1CPP\s0 issues by default.
10334 .IP "\fB\-pedantic\fR" 4
10335 .IX Item "-pedantic"
10336 Issue all the mandatory diagnostics listed in the C standard.  Some of
10337 them are left out by default, since they trigger frequently on harmless
10338 code.
10339 .IP "\fB\-pedantic\-errors\fR" 4
10340 .IX Item "-pedantic-errors"
10341 Issue all the mandatory diagnostics, and make all mandatory diagnostics
10342 into errors.  This includes mandatory diagnostics that \s-1GCC\s0 issues
10343 without \fB\-pedantic\fR but treats as warnings.
10344 .IP "\fB\-M\fR" 4
10345 .IX Item "-M"
10346 Instead of outputting the result of preprocessing, output a rule
10347 suitable for \fBmake\fR describing the dependencies of the main
10348 source file.  The preprocessor outputs one \fBmake\fR rule containing
10349 the object file name for that source file, a colon, and the names of all
10350 the included files, including those coming from \fB\-include\fR or
10351 \&\fB\-imacros\fR command-line options.
10352 .Sp
10353 Unless specified explicitly (with \fB\-MT\fR or \fB\-MQ\fR), the
10354 object file name consists of the name of the source file with any
10355 suffix replaced with object file suffix and with any leading directory
10356 parts removed.  If there are many included files then the rule is
10357 split into several lines using \fB\e\fR\-newline.  The rule has no
10358 commands.
10359 .Sp
10360 This option does not suppress the preprocessor's debug output, such as
10361 \&\fB\-dM\fR.  To avoid mixing such debug output with the dependency
10362 rules you should explicitly specify the dependency output file with
10363 \&\fB\-MF\fR, or use an environment variable like
10364 \&\fB\s-1DEPENDENCIES_OUTPUT\s0\fR.  Debug output
10365 will still be sent to the regular output stream as normal.
10366 .Sp
10367 Passing \fB\-M\fR to the driver implies \fB\-E\fR, and suppresses
10368 warnings with an implicit \fB\-w\fR.
10369 .IP "\fB\-MM\fR" 4
10370 .IX Item "-MM"
10371 Like \fB\-M\fR but do not mention header files that are found in
10372 system header directories, nor header files that are included,
10373 directly or indirectly, from such a header.
10374 .Sp
10375 This implies that the choice of angle brackets or double quotes in an
10376 \&\fB#include\fR directive does not in itself determine whether that
10377 header will appear in \fB\-MM\fR dependency output.  This is a
10378 slight change in semantics from \s-1GCC\s0 versions 3.0 and earlier.
10379 .IP "\fB\-MF\fR \fIfile\fR" 4
10380 .IX Item "-MF file"
10381 When used with \fB\-M\fR or \fB\-MM\fR, specifies a
10382 file to write the dependencies to.  If no \fB\-MF\fR switch is given
10383 the preprocessor sends the rules to the same place it would have sent
10384 preprocessed output.
10385 .Sp
10386 When used with the driver options \fB\-MD\fR or \fB\-MMD\fR,
10387 \&\fB\-MF\fR overrides the default dependency output file.
10388 .IP "\fB\-MG\fR" 4
10389 .IX Item "-MG"
10390 In conjunction with an option such as \fB\-M\fR requesting
10391 dependency generation, \fB\-MG\fR assumes missing header files are
10392 generated files and adds them to the dependency list without raising
10393 an error.  The dependency filename is taken directly from the
10394 \&\f(CW\*(C`#include\*(C'\fR directive without prepending any path.  \fB\-MG\fR
10395 also suppresses preprocessed output, as a missing header file renders
10396 this useless.
10397 .Sp
10398 This feature is used in automatic updating of makefiles.
10399 .IP "\fB\-MP\fR" 4
10400 .IX Item "-MP"
10401 This option instructs \s-1CPP\s0 to add a phony target for each dependency
10402 other than the main file, causing each to depend on nothing.  These
10403 dummy rules work around errors \fBmake\fR gives if you remove header
10404 files without updating the \fIMakefile\fR to match.
10405 .Sp
10406 This is typical output:
10407 .Sp
10408 .Vb 1
10409 \&        test.o: test.c test.h
10410 \&        
10411 \&        test.h:
10412 .Ve
10413 .IP "\fB\-MT\fR \fItarget\fR" 4
10414 .IX Item "-MT target"
10415 Change the target of the rule emitted by dependency generation.  By
10416 default \s-1CPP\s0 takes the name of the main input file, deletes any
10417 directory components and any file suffix such as \fB.c\fR, and
10418 appends the platform's usual object suffix.  The result is the target.
10419 .Sp
10420 An \fB\-MT\fR option will set the target to be exactly the string you
10421 specify.  If you want multiple targets, you can specify them as a single
10422 argument to \fB\-MT\fR, or use multiple \fB\-MT\fR options.
10423 .Sp
10424 For example, \fB\-MT\ '$(objpfx)foo.o'\fR might give
10425 .Sp
10426 .Vb 1
10427 \&        $(objpfx)foo.o: foo.c
10428 .Ve
10429 .IP "\fB\-MQ\fR \fItarget\fR" 4
10430 .IX Item "-MQ target"
10431 Same as \fB\-MT\fR, but it quotes any characters which are special to
10432 Make.  \fB\-MQ\ '$(objpfx)foo.o'\fR gives
10433 .Sp
10434 .Vb 1
10435 \&        $$(objpfx)foo.o: foo.c
10436 .Ve
10437 .Sp
10438 The default target is automatically quoted, as if it were given with
10439 \&\fB\-MQ\fR.
10440 .IP "\fB\-MD\fR" 4
10441 .IX Item "-MD"
10442 \&\fB\-MD\fR is equivalent to \fB\-M \-MF\fR \fIfile\fR, except that
10443 \&\fB\-E\fR is not implied.  The driver determines \fIfile\fR based on
10444 whether an \fB\-o\fR option is given.  If it is, the driver uses its
10445 argument but with a suffix of \fI.d\fR, otherwise it takes the name
10446 of the input file, removes any directory components and suffix, and
10447 applies a \fI.d\fR suffix.
10448 .Sp
10449 If \fB\-MD\fR is used in conjunction with \fB\-E\fR, any
10450 \&\fB\-o\fR switch is understood to specify the dependency output file, but if used without \fB\-E\fR, each \fB\-o\fR
10451 is understood to specify a target object file.
10452 .Sp
10453 Since \fB\-E\fR is not implied, \fB\-MD\fR can be used to generate
10454 a dependency output file as a side-effect of the compilation process.
10455 .IP "\fB\-MMD\fR" 4
10456 .IX Item "-MMD"
10457 Like \fB\-MD\fR except mention only user header files, not system
10458 header files.
10459 .IP "\fB\-fpch\-deps\fR" 4
10460 .IX Item "-fpch-deps"
10461 When using precompiled headers, this flag
10462 will cause the dependency-output flags to also list the files from the
10463 precompiled header's dependencies.  If not specified only the
10464 precompiled header would be listed and not the files that were used to
10465 create it because those files are not consulted when a precompiled
10466 header is used.
10467 .IP "\fB\-fpch\-preprocess\fR" 4
10468 .IX Item "-fpch-preprocess"
10469 This option allows use of a precompiled header together with \fB\-E\fR.  It inserts a special \f(CW\*(C`#pragma\*(C'\fR,
10470 \&\f(CW\*(C`#pragma GCC pch_preprocess "\f(CIfilename\f(CW"\*(C'\fR in the output to mark
10471 the place where the precompiled header was found, and its \fIfilename\fR.
10472 When \fB\-fpreprocessed\fR is in use, \s-1GCC\s0 recognizes this \f(CW\*(C`#pragma\*(C'\fR
10473 and loads the \s-1PCH\s0.
10474 .Sp
10475 This option is off by default, because the resulting preprocessed output
10476 is only really suitable as input to \s-1GCC\s0.  It is switched on by
10477 \&\fB\-save\-temps\fR.
10478 .Sp
10479 You should not write this \f(CW\*(C`#pragma\*(C'\fR in your own code, but it is
10480 safe to edit the filename if the \s-1PCH\s0 file is available in a different
10481 location.  The filename may be absolute or it may be relative to \s-1GCC\s0's
10482 current directory.
10483 .IP "\fB\-x c\fR" 4
10484 .IX Item "-x c"
10485 .PD 0
10486 .IP "\fB\-x c++\fR" 4
10487 .IX Item "-x c++"
10488 .IP "\fB\-x objective-c\fR" 4
10489 .IX Item "-x objective-c"
10490 .IP "\fB\-x assembler-with-cpp\fR" 4
10491 .IX Item "-x assembler-with-cpp"
10492 .PD
10493 Specify the source language: C, \*(C+, Objective-C, or assembly.  This has
10494 nothing to do with standards conformance or extensions; it merely
10495 selects which base syntax to expect.  If you give none of these options,
10496 cpp will deduce the language from the extension of the source file:
10497 \&\fB.c\fR, \fB.cc\fR, \fB.m\fR, or \fB.S\fR.  Some other common
10498 extensions for \*(C+ and assembly are also recognized.  If cpp does not
10499 recognize the extension, it will treat the file as C; this is the most
10500 generic mode.
10501 .Sp
10502 \&\fINote:\fR Previous versions of cpp accepted a \fB\-lang\fR option
10503 which selected both the language and the standards conformance level.
10504 This option has been removed, because it conflicts with the \fB\-l\fR
10505 option.
10506 .IP "\fB\-std=\fR\fIstandard\fR" 4
10507 .IX Item "-std=standard"
10508 .PD 0
10509 .IP "\fB\-ansi\fR" 4
10510 .IX Item "-ansi"
10511 .PD
10512 Specify the standard to which the code should conform.  Currently \s-1CPP\s0
10513 knows about C and \*(C+ standards; others may be added in the future.
10514 .Sp
10515 \&\fIstandard\fR
10516 may be one of:
10517 .RS 4
10518 .ie n .IP """c90""" 4
10519 .el .IP "\f(CWc90\fR" 4
10520 .IX Item "c90"
10521 .PD 0
10522 .ie n .IP """c89""" 4
10523 .el .IP "\f(CWc89\fR" 4
10524 .IX Item "c89"
10525 .ie n .IP """iso9899:1990""" 4
10526 .el .IP "\f(CWiso9899:1990\fR" 4
10527 .IX Item "iso9899:1990"
10528 .PD
10529 The \s-1ISO\s0 C standard from 1990.  \fBc90\fR is the customary shorthand for
10530 this version of the standard.
10531 .Sp
10532 The \fB\-ansi\fR option is equivalent to \fB\-std=c90\fR.
10533 .ie n .IP """iso9899:199409""" 4
10534 .el .IP "\f(CWiso9899:199409\fR" 4
10535 .IX Item "iso9899:199409"
10536 The 1990 C standard, as amended in 1994.
10537 .ie n .IP """iso9899:1999""" 4
10538 .el .IP "\f(CWiso9899:1999\fR" 4
10539 .IX Item "iso9899:1999"
10540 .PD 0
10541 .ie n .IP """c99""" 4
10542 .el .IP "\f(CWc99\fR" 4
10543 .IX Item "c99"
10544 .ie n .IP """iso9899:199x""" 4
10545 .el .IP "\f(CWiso9899:199x\fR" 4
10546 .IX Item "iso9899:199x"
10547 .ie n .IP """c9x""" 4
10548 .el .IP "\f(CWc9x\fR" 4
10549 .IX Item "c9x"
10550 .PD
10551 The revised \s-1ISO\s0 C standard, published in December 1999.  Before
10552 publication, this was known as C9X.
10553 .ie n .IP """iso9899:2011""" 4
10554 .el .IP "\f(CWiso9899:2011\fR" 4
10555 .IX Item "iso9899:2011"
10556 .PD 0
10557 .ie n .IP """c11""" 4
10558 .el .IP "\f(CWc11\fR" 4
10559 .IX Item "c11"
10560 .ie n .IP """c1x""" 4
10561 .el .IP "\f(CWc1x\fR" 4
10562 .IX Item "c1x"
10563 .PD
10564 The revised \s-1ISO\s0 C standard, published in December 2011.  Before
10565 publication, this was known as C1X.
10566 .ie n .IP """gnu90""" 4
10567 .el .IP "\f(CWgnu90\fR" 4
10568 .IX Item "gnu90"
10569 .PD 0
10570 .ie n .IP """gnu89""" 4
10571 .el .IP "\f(CWgnu89\fR" 4
10572 .IX Item "gnu89"
10573 .PD
10574 The 1990 C standard plus \s-1GNU\s0 extensions.  This is the default.
10575 .ie n .IP """gnu99""" 4
10576 .el .IP "\f(CWgnu99\fR" 4
10577 .IX Item "gnu99"
10578 .PD 0
10579 .ie n .IP """gnu9x""" 4
10580 .el .IP "\f(CWgnu9x\fR" 4
10581 .IX Item "gnu9x"
10582 .PD
10583 The 1999 C standard plus \s-1GNU\s0 extensions.
10584 .ie n .IP """gnu11""" 4
10585 .el .IP "\f(CWgnu11\fR" 4
10586 .IX Item "gnu11"
10587 .PD 0
10588 .ie n .IP """gnu1x""" 4
10589 .el .IP "\f(CWgnu1x\fR" 4
10590 .IX Item "gnu1x"
10591 .PD
10592 The 2011 C standard plus \s-1GNU\s0 extensions.
10593 .ie n .IP """c++98""" 4
10594 .el .IP "\f(CWc++98\fR" 4
10595 .IX Item "c++98"
10596 The 1998 \s-1ISO\s0 \*(C+ standard plus amendments.
10597 .ie n .IP """gnu++98""" 4
10598 .el .IP "\f(CWgnu++98\fR" 4
10599 .IX Item "gnu++98"
10600 The same as \fB\-std=c++98\fR plus \s-1GNU\s0 extensions.  This is the
10601 default for \*(C+ code.
10602 .RE
10603 .RS 4
10604 .RE
10605 .IP "\fB\-I\-\fR" 4
10606 .IX Item "-I-"
10607 Split the include path.  Any directories specified with \fB\-I\fR
10608 options before \fB\-I\-\fR are searched only for headers requested with
10609 \&\f(CW\*(C`#include\ "\f(CIfile\f(CW"\*(C'\fR; they are not searched for
10610 \&\f(CW\*(C`#include\ <\f(CIfile\f(CW>\*(C'\fR.  If additional directories are
10611 specified with \fB\-I\fR options after the \fB\-I\-\fR, those
10612 directories are searched for all \fB#include\fR directives.
10613 .Sp
10614 In addition, \fB\-I\-\fR inhibits the use of the directory of the current
10615 file directory as the first search directory for \f(CW\*(C`#include\ "\f(CIfile\f(CW"\*(C'\fR.
10616 This option has been deprecated.
10617 .IP "\fB\-nostdinc\fR" 4
10618 .IX Item "-nostdinc"
10619 Do not search the standard system directories for header files.
10620 Only the directories you have specified with \fB\-I\fR options
10621 (and the directory of the current file, if appropriate) are searched.
10622 .IP "\fB\-nostdinc++\fR" 4
10623 .IX Item "-nostdinc++"
10624 Do not search for header files in the \*(C+\-specific standard directories,
10625 but do still search the other standard directories.  (This option is
10626 used when building the \*(C+ library.)
10627 .IP "\fB\-include\fR \fIfile\fR" 4
10628 .IX Item "-include file"
10629 Process \fIfile\fR as if \f(CW\*(C`#include "file"\*(C'\fR appeared as the first
10630 line of the primary source file.  However, the first directory searched
10631 for \fIfile\fR is the preprocessor's working directory \fIinstead of\fR
10632 the directory containing the main source file.  If not found there, it
10633 is searched for in the remainder of the \f(CW\*(C`#include "..."\*(C'\fR search
10634 chain as normal.
10635 .Sp
10636 If multiple \fB\-include\fR options are given, the files are included
10637 in the order they appear on the command line.
10638 .IP "\fB\-imacros\fR \fIfile\fR" 4
10639 .IX Item "-imacros file"
10640 Exactly like \fB\-include\fR, except that any output produced by
10641 scanning \fIfile\fR is thrown away.  Macros it defines remain defined.
10642 This allows you to acquire all the macros from a header without also
10643 processing its declarations.
10644 .Sp
10645 All files specified by \fB\-imacros\fR are processed before all files
10646 specified by \fB\-include\fR.
10647 .IP "\fB\-idirafter\fR \fIdir\fR" 4
10648 .IX Item "-idirafter dir"
10649 Search \fIdir\fR for header files, but do it \fIafter\fR all
10650 directories specified with \fB\-I\fR and the standard system directories
10651 have been exhausted.  \fIdir\fR is treated as a system include directory.
10652 If \fIdir\fR begins with \f(CW\*(C`=\*(C'\fR, then the \f(CW\*(C`=\*(C'\fR will be replaced
10653 by the sysroot prefix; see \fB\-\-sysroot\fR and \fB\-isysroot\fR.
10654 .IP "\fB\-iprefix\fR \fIprefix\fR" 4
10655 .IX Item "-iprefix prefix"
10656 Specify \fIprefix\fR as the prefix for subsequent \fB\-iwithprefix\fR
10657 options.  If the prefix represents a directory, you should include the
10658 final \fB/\fR.
10659 .IP "\fB\-iwithprefix\fR \fIdir\fR" 4
10660 .IX Item "-iwithprefix dir"
10661 .PD 0
10662 .IP "\fB\-iwithprefixbefore\fR \fIdir\fR" 4
10663 .IX Item "-iwithprefixbefore dir"
10664 .PD
10665 Append \fIdir\fR to the prefix specified previously with
10666 \&\fB\-iprefix\fR, and add the resulting directory to the include search
10667 path.  \fB\-iwithprefixbefore\fR puts it in the same place \fB\-I\fR
10668 would; \fB\-iwithprefix\fR puts it where \fB\-idirafter\fR would.
10669 .IP "\fB\-isysroot\fR \fIdir\fR" 4
10670 .IX Item "-isysroot dir"
10671 This option is like the \fB\-\-sysroot\fR option, but applies only to
10672 header files (except for Darwin targets, where it applies to both header
10673 files and libraries).  See the \fB\-\-sysroot\fR option for more
10674 information.
10675 .IP "\fB\-imultilib\fR \fIdir\fR" 4
10676 .IX Item "-imultilib dir"
10677 Use \fIdir\fR as a subdirectory of the directory containing
10678 target-specific \*(C+ headers.
10679 .IP "\fB\-isystem\fR \fIdir\fR" 4
10680 .IX Item "-isystem dir"
10681 Search \fIdir\fR for header files, after all directories specified by
10682 \&\fB\-I\fR but before the standard system directories.  Mark it
10683 as a system directory, so that it gets the same special treatment as
10684 is applied to the standard system directories.
10685 If \fIdir\fR begins with \f(CW\*(C`=\*(C'\fR, then the \f(CW\*(C`=\*(C'\fR will be replaced
10686 by the sysroot prefix; see \fB\-\-sysroot\fR and \fB\-isysroot\fR.
10687 .IP "\fB\-iquote\fR \fIdir\fR" 4
10688 .IX Item "-iquote dir"
10689 Search \fIdir\fR only for header files requested with
10690 \&\f(CW\*(C`#include\ "\f(CIfile\f(CW"\*(C'\fR; they are not searched for
10691 \&\f(CW\*(C`#include\ <\f(CIfile\f(CW>\*(C'\fR, before all directories specified by
10692 \&\fB\-I\fR and before the standard system directories.
10693 If \fIdir\fR begins with \f(CW\*(C`=\*(C'\fR, then the \f(CW\*(C`=\*(C'\fR will be replaced
10694 by the sysroot prefix; see \fB\-\-sysroot\fR and \fB\-isysroot\fR.
10695 .IP "\fB\-fdirectives\-only\fR" 4
10696 .IX Item "-fdirectives-only"
10697 When preprocessing, handle directives, but do not expand macros.
10698 .Sp
10699 The option's behavior depends on the \fB\-E\fR and \fB\-fpreprocessed\fR
10700 options.
10701 .Sp
10702 With \fB\-E\fR, preprocessing is limited to the handling of directives
10703 such as \f(CW\*(C`#define\*(C'\fR, \f(CW\*(C`#ifdef\*(C'\fR, and \f(CW\*(C`#error\*(C'\fR.  Other
10704 preprocessor operations, such as macro expansion and trigraph
10705 conversion are not performed.  In addition, the \fB\-dD\fR option is
10706 implicitly enabled.
10707 .Sp
10708 With \fB\-fpreprocessed\fR, predefinition of command line and most
10709 builtin macros is disabled.  Macros such as \f(CW\*(C`_\|_LINE_\|_\*(C'\fR, which are
10710 contextually dependent, are handled normally.  This enables compilation of
10711 files previously preprocessed with \f(CW\*(C`\-E \-fdirectives\-only\*(C'\fR.
10712 .Sp
10713 With both \fB\-E\fR and \fB\-fpreprocessed\fR, the rules for
10714 \&\fB\-fpreprocessed\fR take precedence.  This enables full preprocessing of
10715 files previously preprocessed with \f(CW\*(C`\-E \-fdirectives\-only\*(C'\fR.
10716 .IP "\fB\-fdollars\-in\-identifiers\fR" 4
10717 .IX Item "-fdollars-in-identifiers"
10718 Accept \fB$\fR in identifiers.
10719 .IP "\fB\-fextended\-identifiers\fR" 4
10720 .IX Item "-fextended-identifiers"
10721 Accept universal character names in identifiers.  This option is
10722 enabled by default for C99 (and later C standard versions) and \*(C+.
10723 .IP "\fB\-fno\-canonical\-system\-headers\fR" 4
10724 .IX Item "-fno-canonical-system-headers"
10725 When preprocessing, do not shorten system header paths with canonicalization.
10726 .IP "\fB\-fpreprocessed\fR" 4
10727 .IX Item "-fpreprocessed"
10728 Indicate to the preprocessor that the input file has already been
10729 preprocessed.  This suppresses things like macro expansion, trigraph
10730 conversion, escaped newline splicing, and processing of most directives.
10731 The preprocessor still recognizes and removes comments, so that you can
10732 pass a file preprocessed with \fB\-C\fR to the compiler without
10733 problems.  In this mode the integrated preprocessor is little more than
10734 a tokenizer for the front ends.
10735 .Sp
10736 \&\fB\-fpreprocessed\fR is implicit if the input file has one of the
10737 extensions \fB.i\fR, \fB.ii\fR or \fB.mi\fR.  These are the
10738 extensions that \s-1GCC\s0 uses for preprocessed files created by
10739 \&\fB\-save\-temps\fR.
10740 .IP "\fB\-ftabstop=\fR\fIwidth\fR" 4
10741 .IX Item "-ftabstop=width"
10742 Set the distance between tab stops.  This helps the preprocessor report
10743 correct column numbers in warnings or errors, even if tabs appear on the
10744 line.  If the value is less than 1 or greater than 100, the option is
10745 ignored.  The default is 8.
10746 .IP "\fB\-fdebug\-cpp\fR" 4
10747 .IX Item "-fdebug-cpp"
10748 This option is only useful for debugging \s-1GCC\s0.  When used with
10749 \&\fB\-E\fR, dumps debugging information about location maps.  Every
10750 token in the output is preceded by the dump of the map its location
10751 belongs to.  The dump of the map holding the location of a token would
10752 be:
10753 .Sp
10754 .Vb 1
10755 \&        {"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>}
10756 .Ve
10757 .Sp
10758 When used without \fB\-E\fR, this option has no effect.
10759 .IP "\fB\-ftrack\-macro\-expansion\fR[\fB=\fR\fIlevel\fR]" 4
10760 .IX Item "-ftrack-macro-expansion[=level]"
10761 Track locations of tokens across macro expansions. This allows the
10762 compiler to emit diagnostic about the current macro expansion stack
10763 when a compilation error occurs in a macro expansion. Using this
10764 option makes the preprocessor and the compiler consume more
10765 memory. The \fIlevel\fR parameter can be used to choose the level of
10766 precision of token location tracking thus decreasing the memory
10767 consumption if necessary. Value \fB0\fR of \fIlevel\fR de-activates
10768 this option just as if no \fB\-ftrack\-macro\-expansion\fR was present
10769 on the command line. Value \fB1\fR tracks tokens locations in a
10770 degraded mode for the sake of minimal memory overhead. In this mode
10771 all tokens resulting from the expansion of an argument of a
10772 function-like macro have the same location. Value \fB2\fR tracks
10773 tokens locations completely. This value is the most memory hungry.
10774 When this option is given no argument, the default parameter value is
10775 \&\fB2\fR.
10776 .Sp
10777 Note that \f(CW\*(C`\-ftrack\-macro\-expansion=2\*(C'\fR is activated by default.
10778 .IP "\fB\-fexec\-charset=\fR\fIcharset\fR" 4
10779 .IX Item "-fexec-charset=charset"
10780 Set the execution character set, used for string and character
10781 constants.  The default is \s-1UTF\-8\s0.  \fIcharset\fR can be any encoding
10782 supported by the system's \f(CW\*(C`iconv\*(C'\fR library routine.
10783 .IP "\fB\-fwide\-exec\-charset=\fR\fIcharset\fR" 4
10784 .IX Item "-fwide-exec-charset=charset"
10785 Set the wide execution character set, used for wide string and
10786 character constants.  The default is \s-1UTF\-32\s0 or \s-1UTF\-16\s0, whichever
10787 corresponds to the width of \f(CW\*(C`wchar_t\*(C'\fR.  As with
10788 \&\fB\-fexec\-charset\fR, \fIcharset\fR can be any encoding supported
10789 by the system's \f(CW\*(C`iconv\*(C'\fR library routine; however, you will have
10790 problems with encodings that do not fit exactly in \f(CW\*(C`wchar_t\*(C'\fR.
10791 .IP "\fB\-finput\-charset=\fR\fIcharset\fR" 4
10792 .IX Item "-finput-charset=charset"
10793 Set the input character set, used for translation from the character
10794 set of the input file to the source character set used by \s-1GCC\s0.  If the
10795 locale does not specify, or \s-1GCC\s0 cannot get this information from the
10796 locale, the default is \s-1UTF\-8\s0.  This can be overridden by either the locale
10797 or this command-line option.  Currently the command-line option takes
10798 precedence if there's a conflict.  \fIcharset\fR can be any encoding
10799 supported by the system's \f(CW\*(C`iconv\*(C'\fR library routine.
10800 .IP "\fB\-fworking\-directory\fR" 4
10801 .IX Item "-fworking-directory"
10802 Enable generation of linemarkers in the preprocessor output that will
10803 let the compiler know the current working directory at the time of
10804 preprocessing.  When this option is enabled, the preprocessor will
10805 emit, after the initial linemarker, a second linemarker with the
10806 current working directory followed by two slashes.  \s-1GCC\s0 will use this
10807 directory, when it's present in the preprocessed input, as the
10808 directory emitted as the current working directory in some debugging
10809 information formats.  This option is implicitly enabled if debugging
10810 information is enabled, but this can be inhibited with the negated
10811 form \fB\-fno\-working\-directory\fR.  If the \fB\-P\fR flag is
10812 present in the command line, this option has no effect, since no
10813 \&\f(CW\*(C`#line\*(C'\fR directives are emitted whatsoever.
10814 .IP "\fB\-fno\-show\-column\fR" 4
10815 .IX Item "-fno-show-column"
10816 Do not print column numbers in diagnostics.  This may be necessary if
10817 diagnostics are being scanned by a program that does not understand the
10818 column numbers, such as \fBdejagnu\fR.
10819 .IP "\fB\-A\fR \fIpredicate\fR\fB=\fR\fIanswer\fR" 4
10820 .IX Item "-A predicate=answer"
10821 Make an assertion with the predicate \fIpredicate\fR and answer
10822 \&\fIanswer\fR.  This form is preferred to the older form \fB\-A\fR
10823 \&\fIpredicate\fR\fB(\fR\fIanswer\fR\fB)\fR, which is still supported, because
10824 it does not use shell special characters.
10825 .IP "\fB\-A \-\fR\fIpredicate\fR\fB=\fR\fIanswer\fR" 4
10826 .IX Item "-A -predicate=answer"
10827 Cancel an assertion with the predicate \fIpredicate\fR and answer
10828 \&\fIanswer\fR.
10829 .IP "\fB\-dCHARS\fR" 4
10830 .IX Item "-dCHARS"
10831 \&\fI\s-1CHARS\s0\fR is a sequence of one or more of the following characters,
10832 and must not be preceded by a space.  Other characters are interpreted
10833 by the compiler proper, or reserved for future versions of \s-1GCC\s0, and so
10834 are silently ignored.  If you specify characters whose behavior
10835 conflicts, the result is undefined.
10836 .RS 4
10837 .IP "\fBM\fR" 4
10838 .IX Item "M"
10839 Instead of the normal output, generate a list of \fB#define\fR
10840 directives for all the macros defined during the execution of the
10841 preprocessor, including predefined macros.  This gives you a way of
10842 finding out what is predefined in your version of the preprocessor.
10843 Assuming you have no file \fIfoo.h\fR, the command
10844 .Sp
10845 .Vb 1
10846 \&        touch foo.h; cpp \-dM foo.h
10847 .Ve
10848 .Sp
10849 will show all the predefined macros.
10850 .Sp
10851 If you use \fB\-dM\fR without the \fB\-E\fR option, \fB\-dM\fR is
10852 interpreted as a synonym for \fB\-fdump\-rtl\-mach\fR.
10853 .IP "\fBD\fR" 4
10854 .IX Item "D"
10855 Like \fBM\fR except in two respects: it does \fInot\fR include the
10856 predefined macros, and it outputs \fIboth\fR the \fB#define\fR
10857 directives and the result of preprocessing.  Both kinds of output go to
10858 the standard output file.
10859 .IP "\fBN\fR" 4
10860 .IX Item "N"
10861 Like \fBD\fR, but emit only the macro names, not their expansions.
10862 .IP "\fBI\fR" 4
10863 .IX Item "I"
10864 Output \fB#include\fR directives in addition to the result of
10865 preprocessing.
10866 .IP "\fBU\fR" 4
10867 .IX Item "U"
10868 Like \fBD\fR except that only macros that are expanded, or whose
10869 definedness is tested in preprocessor directives, are output; the
10870 output is delayed until the use or test of the macro; and
10871 \&\fB#undef\fR directives are also output for macros tested but
10872 undefined at the time.
10873 .RE
10874 .RS 4
10875 .RE
10876 .IP "\fB\-P\fR" 4
10877 .IX Item "-P"
10878 Inhibit generation of linemarkers in the output from the preprocessor.
10879 This might be useful when running the preprocessor on something that is
10880 not C code, and will be sent to a program which might be confused by the
10881 linemarkers.
10882 .IP "\fB\-C\fR" 4
10883 .IX Item "-C"
10884 Do not discard comments.  All comments are passed through to the output
10885 file, except for comments in processed directives, which are deleted
10886 along with the directive.
10887 .Sp
10888 You should be prepared for side effects when using \fB\-C\fR; it
10889 causes the preprocessor to treat comments as tokens in their own right.
10890 For example, comments appearing at the start of what would be a
10891 directive line have the effect of turning that line into an ordinary
10892 source line, since the first token on the line is no longer a \fB#\fR.
10893 .IP "\fB\-CC\fR" 4
10894 .IX Item "-CC"
10895 Do not discard comments, including during macro expansion.  This is
10896 like \fB\-C\fR, except that comments contained within macros are
10897 also passed through to the output file where the macro is expanded.
10898 .Sp
10899 In addition to the side-effects of the \fB\-C\fR option, the
10900 \&\fB\-CC\fR option causes all \*(C+\-style comments inside a macro
10901 to be converted to C\-style comments.  This is to prevent later use
10902 of that macro from inadvertently commenting out the remainder of
10903 the source line.
10904 .Sp
10905 The \fB\-CC\fR option is generally used to support lint comments.
10906 .IP "\fB\-traditional\-cpp\fR" 4
10907 .IX Item "-traditional-cpp"
10908 Try to imitate the behavior of old-fashioned C preprocessors, as
10909 opposed to \s-1ISO\s0 C preprocessors.
10910 .IP "\fB\-trigraphs\fR" 4
10911 .IX Item "-trigraphs"
10912 Process trigraph sequences.
10913 These are three-character sequences, all starting with \fB??\fR, that
10914 are defined by \s-1ISO\s0 C to stand for single characters.  For example,
10915 \&\fB??/\fR stands for \fB\e\fR, so \fB'??/n'\fR is a character
10916 constant for a newline.  By default, \s-1GCC\s0 ignores trigraphs, but in
10917 standard-conforming modes it converts them.  See the \fB\-std\fR and
10918 \&\fB\-ansi\fR options.
10919 .Sp
10920 The nine trigraphs and their replacements are
10921 .Sp
10922 .Vb 2
10923 \&        Trigraph:       ??(  ??)  ??<  ??>  ??=  ??/  ??\*(Aq  ??!  ??\-
10924 \&        Replacement:      [    ]    {    }    #    \e    ^    |    ~
10925 .Ve
10926 .IP "\fB\-remap\fR" 4
10927 .IX Item "-remap"
10928 Enable special code to work around file systems which only permit very
10929 short file names, such as MS-DOS.
10930 .IP "\fB\-\-help\fR" 4
10931 .IX Item "--help"
10932 .PD 0
10933 .IP "\fB\-\-target\-help\fR" 4
10934 .IX Item "--target-help"
10935 .PD
10936 Print text describing all the command-line options instead of
10937 preprocessing anything.
10938 .IP "\fB\-v\fR" 4
10939 .IX Item "-v"
10940 Verbose mode.  Print out \s-1GNU\s0 \s-1CPP\s0's version number at the beginning of
10941 execution, and report the final form of the include path.
10942 .IP "\fB\-H\fR" 4
10943 .IX Item "-H"
10944 Print the name of each header file used, in addition to other normal
10945 activities.  Each name is indented to show how deep in the
10946 \&\fB#include\fR stack it is.  Precompiled header files are also
10947 printed, even if they are found to be invalid; an invalid precompiled
10948 header file is printed with \fB...x\fR and a valid one with \fB...!\fR .
10949 .IP "\fB\-version\fR" 4
10950 .IX Item "-version"
10951 .PD 0
10952 .IP "\fB\-\-version\fR" 4
10953 .IX Item "--version"
10954 .PD
10955 Print out \s-1GNU\s0 \s-1CPP\s0's version number.  With one dash, proceed to
10956 preprocess as normal.  With two dashes, exit immediately.
10957 .Sh "Passing Options to the Assembler"
10958 .IX Subsection "Passing Options to the Assembler"
10959 You can pass options to the assembler.
10960 .IP "\fB\-Wa,\fR\fIoption\fR" 4
10961 .IX Item "-Wa,option"
10962 Pass \fIoption\fR as an option to the assembler.  If \fIoption\fR
10963 contains commas, it is split into multiple options at the commas.
10964 .IP "\fB\-Xassembler\fR \fIoption\fR" 4
10965 .IX Item "-Xassembler option"
10966 Pass \fIoption\fR as an option to the assembler.  You can use this to
10967 supply system-specific assembler options that \s-1GCC\s0 does not
10968 recognize.
10969 .Sp
10970 If you want to pass an option that takes an argument, you must use
10971 \&\fB\-Xassembler\fR twice, once for the option and once for the argument.
10972 .Sh "Options for Linking"
10973 .IX Subsection "Options for Linking"
10974 These options come into play when the compiler links object files into
10975 an executable output file.  They are meaningless if the compiler is
10976 not doing a link step.
10977 .IP "\fIobject-file-name\fR" 4
10978 .IX Item "object-file-name"
10979 A file name that does not end in a special recognized suffix is
10980 considered to name an object file or library.  (Object files are
10981 distinguished from libraries by the linker according to the file
10982 contents.)  If linking is done, these object files are used as input
10983 to the linker.
10984 .IP "\fB\-c\fR" 4
10985 .IX Item "-c"
10986 .PD 0
10987 .IP "\fB\-S\fR" 4
10988 .IX Item "-S"
10989 .IP "\fB\-E\fR" 4
10990 .IX Item "-E"
10991 .PD
10992 If any of these options is used, then the linker is not run, and
10993 object file names should not be used as arguments.
10994 .IP "\fB\-fuse\-ld=bfd\fR" 4
10995 .IX Item "-fuse-ld=bfd"
10996 Use the \fBbfd\fR linker instead of the default linker.
10997 .IP "\fB\-fuse\-ld=gold\fR" 4
10998 .IX Item "-fuse-ld=gold"
10999 Use the \fBgold\fR linker instead of the default linker.
11000 .IP "\fB\-l\fR\fIlibrary\fR" 4
11001 .IX Item "-llibrary"
11002 .PD 0
11003 .IP "\fB\-l\fR \fIlibrary\fR" 4
11004 .IX Item "-l library"
11005 .PD
11006 Search the library named \fIlibrary\fR when linking.  (The second
11007 alternative with the library as a separate argument is only for
11008 \&\s-1POSIX\s0 compliance and is not recommended.)
11009 .Sp
11010 It makes a difference where in the command you write this option; the
11011 linker searches and processes libraries and object files in the order they
11012 are specified.  Thus, \fBfoo.o \-lz bar.o\fR searches library \fBz\fR
11013 after file \fIfoo.o\fR but before \fIbar.o\fR.  If \fIbar.o\fR refers
11014 to functions in \fBz\fR, those functions may not be loaded.
11015 .Sp
11016 The linker searches a standard list of directories for the library,
11017 which is actually a file named \fIlib\fIlibrary\fI.a\fR.  The linker
11018 then uses this file as if it had been specified precisely by name.
11019 .Sp
11020 The directories searched include several standard system directories
11021 plus any that you specify with \fB\-L\fR.
11022 .Sp
11023 Normally the files found this way are library files\-\-\-archive files
11024 whose members are object files.  The linker handles an archive file by
11025 scanning through it for members which define symbols that have so far
11026 been referenced but not defined.  But if the file that is found is an
11027 ordinary object file, it is linked in the usual fashion.  The only
11028 difference between using an \fB\-l\fR option and specifying a file name
11029 is that \fB\-l\fR surrounds \fIlibrary\fR with \fBlib\fR and \fB.a\fR
11030 and searches several directories.
11031 .IP "\fB\-lobjc\fR" 4
11032 .IX Item "-lobjc"
11033 You need this special case of the \fB\-l\fR option in order to
11034 link an Objective-C or Objective\-\*(C+ program.
11035 .IP "\fB\-nostartfiles\fR" 4
11036 .IX Item "-nostartfiles"
11037 Do not use the standard system startup files when linking.
11038 The standard system libraries are used normally, unless \fB\-nostdlib\fR
11039 or \fB\-nodefaultlibs\fR is used.
11040 .IP "\fB\-nodefaultlibs\fR" 4
11041 .IX Item "-nodefaultlibs"
11042 Do not use the standard system libraries when linking.
11043 Only the libraries you specify are passed to the linker, and options
11044 specifying linkage of the system libraries, such as \fB\-static\-libgcc\fR
11045 or \fB\-shared\-libgcc\fR, are ignored.  
11046 The standard startup files are used normally, unless \fB\-nostartfiles\fR
11047 is used.
11048 .Sp
11049 The compiler may generate calls to \f(CW\*(C`memcmp\*(C'\fR,
11050 \&\f(CW\*(C`memset\*(C'\fR, \f(CW\*(C`memcpy\*(C'\fR and \f(CW\*(C`memmove\*(C'\fR.
11051 These entries are usually resolved by entries in
11052 libc.  These entry points should be supplied through some other
11053 mechanism when this option is specified.
11054 .IP "\fB\-nostdlib\fR" 4
11055 .IX Item "-nostdlib"
11056 Do not use the standard system startup files or libraries when linking.
11057 No startup files and only the libraries you specify are passed to
11058 the linker, and options specifying linkage of the system libraries, such as
11059 \&\fB\-static\-libgcc\fR or \fB\-shared\-libgcc\fR, are ignored.
11060 .Sp
11061 The compiler may generate calls to \f(CW\*(C`memcmp\*(C'\fR, \f(CW\*(C`memset\*(C'\fR,
11062 \&\f(CW\*(C`memcpy\*(C'\fR and \f(CW\*(C`memmove\*(C'\fR.
11063 These entries are usually resolved by entries in
11064 libc.  These entry points should be supplied through some other
11065 mechanism when this option is specified.
11066 .Sp
11067 One of the standard libraries bypassed by \fB\-nostdlib\fR and
11068 \&\fB\-nodefaultlibs\fR is \fIlibgcc.a\fR, a library of internal subroutines
11069 which \s-1GCC\s0 uses to overcome shortcomings of particular machines, or special
11070 needs for some languages.
11071 .Sp
11072 In most cases, you need \fIlibgcc.a\fR even when you want to avoid
11073 other standard libraries.  In other words, when you specify \fB\-nostdlib\fR
11074 or \fB\-nodefaultlibs\fR you should usually specify \fB\-lgcc\fR as well.
11075 This ensures that you have no unresolved references to internal \s-1GCC\s0
11076 library subroutines.
11077 (An example of such an internal subroutine is \f(CW\*(C`_\|_main\*(C'\fR, used to ensure \*(C+
11078 constructors are called.)
11079 .IP "\fB\-pie\fR" 4
11080 .IX Item "-pie"
11081 Produce a position independent executable on targets that support it.
11082 For predictable results, you must also specify the same set of options
11083 used for compilation (\fB\-fpie\fR, \fB\-fPIE\fR,
11084 or model suboptions) when you specify this linker option.
11085 .IP "\fB\-rdynamic\fR" 4
11086 .IX Item "-rdynamic"
11087 Pass the flag \fB\-export\-dynamic\fR to the \s-1ELF\s0 linker, on targets
11088 that support it. This instructs the linker to add all symbols, not
11089 only used ones, to the dynamic symbol table. This option is needed
11090 for some uses of \f(CW\*(C`dlopen\*(C'\fR or to allow obtaining backtraces
11091 from within a program.
11092 .IP "\fB\-s\fR" 4
11093 .IX Item "-s"
11094 Remove all symbol table and relocation information from the executable.
11095 .IP "\fB\-static\fR" 4
11096 .IX Item "-static"
11097 On systems that support dynamic linking, this prevents linking with the shared
11098 libraries.  On other systems, this option has no effect.
11099 .IP "\fB\-shared\fR" 4
11100 .IX Item "-shared"
11101 Produce a shared object which can then be linked with other objects to
11102 form an executable.  Not all systems support this option.  For predictable
11103 results, you must also specify the same set of options used for compilation
11104 (\fB\-fpic\fR, \fB\-fPIC\fR, or model suboptions) when
11105 you specify this linker option.[1]
11106 .IP "\fB\-shared\-libgcc\fR" 4
11107 .IX Item "-shared-libgcc"
11108 .PD 0
11109 .IP "\fB\-static\-libgcc\fR" 4
11110 .IX Item "-static-libgcc"
11111 .PD
11112 On systems that provide \fIlibgcc\fR as a shared library, these options
11113 force the use of either the shared or static version, respectively.
11114 If no shared version of \fIlibgcc\fR was built when the compiler was
11115 configured, these options have no effect.
11116 .Sp
11117 There are several situations in which an application should use the
11118 shared \fIlibgcc\fR instead of the static version.  The most common
11119 of these is when the application wishes to throw and catch exceptions
11120 across different shared libraries.  In that case, each of the libraries
11121 as well as the application itself should use the shared \fIlibgcc\fR.
11122 .Sp
11123 Therefore, the G++ and \s-1GCJ\s0 drivers automatically add
11124 \&\fB\-shared\-libgcc\fR whenever you build a shared library or a main
11125 executable, because \*(C+ and Java programs typically use exceptions, so
11126 this is the right thing to do.
11127 .Sp
11128 If, instead, you use the \s-1GCC\s0 driver to create shared libraries, you may
11129 find that they are not always linked with the shared \fIlibgcc\fR.
11130 If \s-1GCC\s0 finds, at its configuration time, that you have a non-GNU linker
11131 or a \s-1GNU\s0 linker that does not support option \fB\-\-eh\-frame\-hdr\fR,
11132 it links the shared version of \fIlibgcc\fR into shared libraries
11133 by default.  Otherwise, it takes advantage of the linker and optimizes
11134 away the linking with the shared version of \fIlibgcc\fR, linking with
11135 the static version of libgcc by default.  This allows exceptions to
11136 propagate through such shared libraries, without incurring relocation
11137 costs at library load time.
11138 .Sp
11139 However, if a library or main executable is supposed to throw or catch
11140 exceptions, you must link it using the G++ or \s-1GCJ\s0 driver, as appropriate
11141 for the languages used in the program, or using the option
11142 \&\fB\-shared\-libgcc\fR, such that it is linked with the shared
11143 \&\fIlibgcc\fR.
11144 .IP "\fB\-static\-libasan\fR" 4
11145 .IX Item "-static-libasan"
11146 When the \fB\-fsanitize=address\fR option is used to link a program,
11147 the \s-1GCC\s0 driver automatically links against \fBlibasan\fR.  If
11148 \&\fIlibasan\fR is available as a shared library, and the \fB\-static\fR
11149 option is not used, then this links against the shared version of
11150 \&\fIlibasan\fR.  The \fB\-static\-libasan\fR option directs the \s-1GCC\s0
11151 driver to link \fIlibasan\fR statically, without necessarily linking
11152 other libraries statically.
11153 .IP "\fB\-static\-libtsan\fR" 4
11154 .IX Item "-static-libtsan"
11155 When the \fB\-fsanitize=thread\fR option is used to link a program,
11156 the \s-1GCC\s0 driver automatically links against \fBlibtsan\fR.  If
11157 \&\fIlibtsan\fR is available as a shared library, and the \fB\-static\fR
11158 option is not used, then this links against the shared version of
11159 \&\fIlibtsan\fR.  The \fB\-static\-libtsan\fR option directs the \s-1GCC\s0
11160 driver to link \fIlibtsan\fR statically, without necessarily linking
11161 other libraries statically.
11162 .IP "\fB\-static\-liblsan\fR" 4
11163 .IX Item "-static-liblsan"
11164 When the \fB\-fsanitize=leak\fR option is used to link a program,
11165 the \s-1GCC\s0 driver automatically links against \fBliblsan\fR.  If
11166 \&\fIliblsan\fR is available as a shared library, and the \fB\-static\fR
11167 option is not used, then this links against the shared version of
11168 \&\fIliblsan\fR.  The \fB\-static\-liblsan\fR option directs the \s-1GCC\s0
11169 driver to link \fIliblsan\fR statically, without necessarily linking
11170 other libraries statically.
11171 .IP "\fB\-static\-libubsan\fR" 4
11172 .IX Item "-static-libubsan"
11173 When the \fB\-fsanitize=undefined\fR option is used to link a program,
11174 the \s-1GCC\s0 driver automatically links against \fBlibubsan\fR.  If
11175 \&\fIlibubsan\fR is available as a shared library, and the \fB\-static\fR
11176 option is not used, then this links against the shared version of
11177 \&\fIlibubsan\fR.  The \fB\-static\-libubsan\fR option directs the \s-1GCC\s0
11178 driver to link \fIlibubsan\fR statically, without necessarily linking
11179 other libraries statically.
11180 .IP "\fB\-static\-libmpx\fR" 4
11181 .IX Item "-static-libmpx"
11182 When the \fB\-fcheck\-pointer bounds\fR and \fB\-mmpx\fR options are
11183 used to link a program, the \s-1GCC\s0 driver automatically links against
11184 \&\fIlibmpx\fR.  If \fIlibmpx\fR is available as a shared library,
11185 and the \fB\-static\fR option is not used, then this links against
11186 the shared version of \fIlibmpx\fR.  The \fB\-static\-libmpx\fR
11187 option directs the \s-1GCC\s0 driver to link \fIlibmpx\fR statically,
11188 without necessarily linking other libraries statically.
11189 .IP "\fB\-static\-libmpxwrappers\fR" 4
11190 .IX Item "-static-libmpxwrappers"
11191 When the \fB\-fcheck\-pointer bounds\fR and \fB\-mmpx\fR options are used
11192 to link a program without also using \fB\-fno\-chkp\-use\-wrappers\fR, the
11193 \&\s-1GCC\s0 driver automatically links against \fIlibmpxwrappers\fR.  If
11194 \&\fIlibmpxwrappers\fR is available as a shared library, and the
11195 \&\fB\-static\fR option is not used, then this links against the shared
11196 version of \fIlibmpxwrappers\fR.  The \fB\-static\-libmpxwrappers\fR
11197 option directs the \s-1GCC\s0 driver to link \fIlibmpxwrappers\fR statically,
11198 without necessarily linking other libraries statically.
11199 .IP "\fB\-static\-libstdc++\fR" 4
11200 .IX Item "-static-libstdc++"
11201 When the \fBg++\fR program is used to link a \*(C+ program, it
11202 normally automatically links against \fBlibstdc++\fR.  If
11203 \&\fIlibstdc++\fR is available as a shared library, and the
11204 \&\fB\-static\fR option is not used, then this links against the
11205 shared version of \fIlibstdc++\fR.  That is normally fine.  However, it
11206 is sometimes useful to freeze the version of \fIlibstdc++\fR used by
11207 the program without going all the way to a fully static link.  The
11208 \&\fB\-static\-libstdc++\fR option directs the \fBg++\fR driver to
11209 link \fIlibstdc++\fR statically, without necessarily linking other
11210 libraries statically.
11211 .IP "\fB\-symbolic\fR" 4
11212 .IX Item "-symbolic"
11213 Bind references to global symbols when building a shared object.  Warn
11214 about any unresolved references (unless overridden by the link editor
11215 option \fB\-Xlinker \-z \-Xlinker defs\fR).  Only a few systems support
11216 this option.
11217 .IP "\fB\-T\fR \fIscript\fR" 4
11218 .IX Item "-T script"
11219 Use \fIscript\fR as the linker script.  This option is supported by most
11220 systems using the \s-1GNU\s0 linker.  On some targets, such as bare-board
11221 targets without an operating system, the \fB\-T\fR option may be required
11222 when linking to avoid references to undefined symbols.
11223 .IP "\fB\-Xlinker\fR \fIoption\fR" 4
11224 .IX Item "-Xlinker option"
11225 Pass \fIoption\fR as an option to the linker.  You can use this to
11226 supply system-specific linker options that \s-1GCC\s0 does not recognize.
11227 .Sp
11228 If you want to pass an option that takes a separate argument, you must use
11229 \&\fB\-Xlinker\fR twice, once for the option and once for the argument.
11230 For example, to pass \fB\-assert definitions\fR, you must write
11231 \&\fB\-Xlinker \-assert \-Xlinker definitions\fR.  It does not work to write
11232 \&\fB\-Xlinker \*(L"\-assert definitions\*(R"\fR, because this passes the entire
11233 string as a single argument, which is not what the linker expects.
11234 .Sp
11235 When using the \s-1GNU\s0 linker, it is usually more convenient to pass
11236 arguments to linker options using the \fIoption\fR\fB=\fR\fIvalue\fR
11237 syntax than as separate arguments.  For example, you can specify
11238 \&\fB\-Xlinker \-Map=output.map\fR rather than
11239 \&\fB\-Xlinker \-Map \-Xlinker output.map\fR.  Other linkers may not support
11240 this syntax for command-line options.
11241 .IP "\fB\-Wl,\fR\fIoption\fR" 4
11242 .IX Item "-Wl,option"
11243 Pass \fIoption\fR as an option to the linker.  If \fIoption\fR contains
11244 commas, it is split into multiple options at the commas.  You can use this
11245 syntax to pass an argument to the option.
11246 For example, \fB\-Wl,\-Map,output.map\fR passes \fB\-Map output.map\fR to the
11247 linker.  When using the \s-1GNU\s0 linker, you can also get the same effect with
11248 \&\fB\-Wl,\-Map=output.map\fR.
11249 .IP "\fB\-u\fR \fIsymbol\fR" 4
11250 .IX Item "-u symbol"
11251 Pretend the symbol \fIsymbol\fR is undefined, to force linking of
11252 library modules to define it.  You can use \fB\-u\fR multiple times with
11253 different symbols to force loading of additional library modules.
11254 .IP "\fB\-z\fR \fIkeyword\fR" 4
11255 .IX Item "-z keyword"
11256 \&\fB\-z\fR is passed directly on to the linker along with the keyword
11257 \&\fIkeyword\fR. See the section in the documentation of your linker for
11258 permitted values and their meanings.
11259 .Sh "Options for Directory Search"
11260 .IX Subsection "Options for Directory Search"
11261 These options specify directories to search for header files, for
11262 libraries and for parts of the compiler:
11263 .IP "\fB\-I\fR\fIdir\fR" 4
11264 .IX Item "-Idir"
11265 Add the directory \fIdir\fR to the head of the list of directories to be
11266 searched for header files.  This can be used to override a system header
11267 file, substituting your own version, since these directories are
11268 searched before the system header file directories.  However, you should
11269 not use this option to add directories that contain vendor-supplied
11270 system header files (use \fB\-isystem\fR for that).  If you use more than
11271 one \fB\-I\fR option, the directories are scanned in left-to-right
11272 order; the standard system directories come after.
11273 .Sp
11274 If a standard system include directory, or a directory specified with
11275 \&\fB\-isystem\fR, is also specified with \fB\-I\fR, the \fB\-I\fR
11276 option is ignored.  The directory is still searched but as a
11277 system directory at its normal position in the system include chain.
11278 This is to ensure that \s-1GCC\s0's procedure to fix buggy system headers and
11279 the ordering for the \f(CW\*(C`include_next\*(C'\fR directive are not inadvertently changed.
11280 If you really need to change the search order for system directories,
11281 use the \fB\-nostdinc\fR and/or \fB\-isystem\fR options.
11282 .IP "\fB\-iplugindir=\fR\fIdir\fR" 4
11283 .IX Item "-iplugindir=dir"
11284 Set the directory to search for plugins that are passed
11285 by \fB\-fplugin=\fR\fIname\fR instead of
11286 \&\fB\-fplugin=\fR\fIpath\fR\fB/\fR\fIname\fR\fB.so\fR.  This option is not meant
11287 to be used by the user, but only passed by the driver.
11288 .IP "\fB\-iquote\fR\fIdir\fR" 4
11289 .IX Item "-iquotedir"
11290 Add the directory \fIdir\fR to the head of the list of directories to
11291 be searched for header files only for the case of \f(CW\*(C`#include
11292 "\f(CIfile\f(CW"\*(C'\fR; they are not searched for \f(CW\*(C`#include <\f(CIfile\f(CW>\*(C'\fR,
11293 otherwise just like \fB\-I\fR.
11294 .IP "\fB\-L\fR\fIdir\fR" 4
11295 .IX Item "-Ldir"
11296 Add directory \fIdir\fR to the list of directories to be searched
11297 for \fB\-l\fR.
11298 .IP "\fB\-B\fR\fIprefix\fR" 4
11299 .IX Item "-Bprefix"
11300 This option specifies where to find the executables, libraries,
11301 include files, and data files of the compiler itself.
11302 .Sp
11303 The compiler driver program runs one or more of the subprograms
11304 \&\fBcpp\fR, \fBcc1\fR, \fBas\fR and \fBld\fR.  It tries
11305 \&\fIprefix\fR as a prefix for each program it tries to run, both with and
11306 without \fImachine\fR\fB/\fR\fIversion\fR\fB/\fR.
11307 .Sp
11308 For each subprogram to be run, the compiler driver first tries the
11309 \&\fB\-B\fR prefix, if any.  If that name is not found, or if \fB\-B\fR
11310 is not specified, the driver tries two standard prefixes, 
11311 \&\fI/usr/lib/gcc/\fR and \fI/usr/local/lib/gcc/\fR.  If neither of
11312 those results in a file name that is found, the unmodified program
11313 name is searched for using the directories specified in your
11314 \&\fB\s-1PATH\s0\fR environment variable.
11315 .Sp
11316 The compiler checks to see if the path provided by \fB\-B\fR
11317 refers to a directory, and if necessary it adds a directory
11318 separator character at the end of the path.
11319 .Sp
11320 \&\fB\-B\fR prefixes that effectively specify directory names also apply
11321 to libraries in the linker, because the compiler translates these
11322 options into \fB\-L\fR options for the linker.  They also apply to
11323 include files in the preprocessor, because the compiler translates these
11324 options into \fB\-isystem\fR options for the preprocessor.  In this case,
11325 the compiler appends \fBinclude\fR to the prefix.
11326 .Sp
11327 The runtime support file \fIlibgcc.a\fR can also be searched for using
11328 the \fB\-B\fR prefix, if needed.  If it is not found there, the two
11329 standard prefixes above are tried, and that is all.  The file is left
11330 out of the link if it is not found by those means.
11331 .Sp
11332 Another way to specify a prefix much like the \fB\-B\fR prefix is to use
11333 the environment variable \fB\s-1GCC_EXEC_PREFIX\s0\fR.
11334 .Sp
11335 As a special kludge, if the path provided by \fB\-B\fR is
11336 \&\fI[dir/]stage\fIN\fI/\fR, where \fIN\fR is a number in the range 0 to
11337 9, then it is replaced by \fI[dir/]include\fR.  This is to help
11338 with boot-strapping the compiler.
11339 .IP "\fB\-specs=\fR\fIfile\fR" 4
11340 .IX Item "-specs=file"
11341 Process \fIfile\fR after the compiler reads in the standard \fIspecs\fR
11342 file, in order to override the defaults which the \fBgcc\fR driver
11343 program uses when determining what switches to pass to \fBcc1\fR,
11344 \&\fBcc1plus\fR, \fBas\fR, \fBld\fR, etc.  More than one
11345 \&\fB\-specs=\fR\fIfile\fR can be specified on the command line, and they
11346 are processed in order, from left to right.
11347 .IP "\fB\-\-sysroot=\fR\fIdir\fR" 4
11348 .IX Item "--sysroot=dir"
11349 Use \fIdir\fR as the logical root directory for headers and libraries.
11350 For example, if the compiler normally searches for headers in
11351 \&\fI/usr/include\fR and libraries in \fI/usr/lib\fR, it instead
11352 searches \fI\fIdir\fI/usr/include\fR and \fI\fIdir\fI/usr/lib\fR.
11353 .Sp
11354 If you use both this option and the \fB\-isysroot\fR option, then
11355 the \fB\-\-sysroot\fR option applies to libraries, but the
11356 \&\fB\-isysroot\fR option applies to header files.
11357 .Sp
11358 The \s-1GNU\s0 linker (beginning with version 2.16) has the necessary support
11359 for this option.  If your linker does not support this option, the
11360 header file aspect of \fB\-\-sysroot\fR still works, but the
11361 library aspect does not.
11362 .IP "\fB\-\-no\-sysroot\-suffix\fR" 4
11363 .IX Item "--no-sysroot-suffix"
11364 For some targets, a suffix is added to the root directory specified
11365 with \fB\-\-sysroot\fR, depending on the other options used, so that
11366 headers may for example be found in
11367 \&\fI\fIdir\fI/\fIsuffix\fI/usr/include\fR instead of
11368 \&\fI\fIdir\fI/usr/include\fR.  This option disables the addition of
11369 such a suffix.
11370 .IP "\fB\-I\-\fR" 4
11371 .IX Item "-I-"
11372 This option has been deprecated.  Please use \fB\-iquote\fR instead for
11373 \&\fB\-I\fR directories before the \fB\-I\-\fR and remove the \fB\-I\-\fR
11374 option.
11375 Any directories you specify with \fB\-I\fR options before the \fB\-I\-\fR
11376 option are searched only for the case of \f(CW\*(C`#include "\f(CIfile\f(CW"\*(C'\fR;
11377 they are not searched for \f(CW\*(C`#include <\f(CIfile\f(CW>\*(C'\fR.
11378 .Sp
11379 If additional directories are specified with \fB\-I\fR options after
11380 the \fB\-I\-\fR option, these directories are searched for all \f(CW\*(C`#include\*(C'\fR
11381 directives.  (Ordinarily \fIall\fR \fB\-I\fR directories are used
11382 this way.)
11383 .Sp
11384 In addition, the \fB\-I\-\fR option inhibits the use of the current
11385 directory (where the current input file came from) as the first search
11386 directory for \f(CW\*(C`#include "\f(CIfile\f(CW"\*(C'\fR.  There is no way to
11387 override this effect of \fB\-I\-\fR.  With \fB\-I.\fR you can specify
11388 searching the directory that is current when the compiler is
11389 invoked.  That is not exactly the same as what the preprocessor does
11390 by default, but it is often satisfactory.
11391 .Sp
11392 \&\fB\-I\-\fR does not inhibit the use of the standard system directories
11393 for header files.  Thus, \fB\-I\-\fR and \fB\-nostdinc\fR are
11394 independent.
11395 .Sh "Specifying Target Machine and Compiler Version"
11396 .IX Subsection "Specifying Target Machine and Compiler Version"
11397 The usual way to run \s-1GCC\s0 is to run the executable called \fBgcc\fR, or
11398 \&\fImachine\fR\fB\-gcc\fR when cross-compiling, or
11399 \&\fImachine\fR\fB\-gcc\-\fR\fIversion\fR to run a version other than the
11400 one that was installed last.
11401 .Sh "Hardware Models and Configurations"
11402 .IX Subsection "Hardware Models and Configurations"
11403 Each target machine types can have its own
11404 special options, starting with \fB\-m\fR, to choose among various
11405 hardware models or configurations\-\-\-for example, 68010 vs 68020,
11406 floating coprocessor or none.  A single installed version of the
11407 compiler can compile for any model or configuration, according to the
11408 options specified.
11409 .PP
11410 Some configurations of the compiler also support additional special
11411 options, usually for compatibility with other compilers on the same
11412 platform.
11413 .PP
11414 \fIAArch64 Options\fR
11415 .IX Subsection "AArch64 Options"
11416 .PP
11417 These options are defined for AArch64 implementations:
11418 .IP "\fB\-mabi=\fR\fIname\fR" 4
11419 .IX Item "-mabi=name"
11420 Generate code for the specified data model.  Permissible values
11421 are \fBilp32\fR for SysV-like data model where int, long int and pointer
11422 are 32\-bit, and \fBlp64\fR for SysV-like data model where int is 32\-bit,
11423 but long int and pointer are 64\-bit.
11424 .Sp
11425 The default depends on the specific target configuration.  Note that
11426 the \s-1LP64\s0 and \s-1ILP32\s0 ABIs are not link-compatible; you must compile your
11427 entire program with the same \s-1ABI\s0, and link with a compatible set of libraries.
11428 .IP "\fB\-mbig\-endian\fR" 4
11429 .IX Item "-mbig-endian"
11430 Generate big-endian code.  This is the default when \s-1GCC\s0 is configured for an
11431 \&\fBaarch64_be\-*\-*\fR target.
11432 .IP "\fB\-mgeneral\-regs\-only\fR" 4
11433 .IX Item "-mgeneral-regs-only"
11434 Generate code which uses only the general registers.
11435 .IP "\fB\-mlittle\-endian\fR" 4
11436 .IX Item "-mlittle-endian"
11437 Generate little-endian code.  This is the default when \s-1GCC\s0 is configured for an
11438 \&\fBaarch64\-*\-*\fR but not an \fBaarch64_be\-*\-*\fR target.
11439 .IP "\fB\-mcmodel=tiny\fR" 4
11440 .IX Item "-mcmodel=tiny"
11441 Generate code for the tiny code model.  The program and its statically defined
11442 symbols must be within 1GB of each other.  Pointers are 64 bits.  Programs can
11443 be statically or dynamically linked.  This model is not fully implemented and
11444 mostly treated as \fBsmall\fR.
11445 .IP "\fB\-mcmodel=small\fR" 4
11446 .IX Item "-mcmodel=small"
11447 Generate code for the small code model.  The program and its statically defined
11448 symbols must be within 4GB of each other.  Pointers are 64 bits.  Programs can
11449 be statically or dynamically linked.  This is the default code model.
11450 .IP "\fB\-mcmodel=large\fR" 4
11451 .IX Item "-mcmodel=large"
11452 Generate code for the large code model.  This makes no assumptions about
11453 addresses and sizes of sections.  Pointers are 64 bits.  Programs can be
11454 statically linked only.
11455 .IP "\fB\-mstrict\-align\fR" 4
11456 .IX Item "-mstrict-align"
11457 Do not assume that unaligned memory references are handled by the system.
11458 .IP "\fB\-momit\-leaf\-frame\-pointer\fR" 4
11459 .IX Item "-momit-leaf-frame-pointer"
11460 .PD 0
11461 .IP "\fB\-mno\-omit\-leaf\-frame\-pointer\fR" 4
11462 .IX Item "-mno-omit-leaf-frame-pointer"
11463 .PD
11464 Omit or keep the frame pointer in leaf functions.  The former behaviour is the
11465 default.
11466 .IP "\fB\-mtls\-dialect=desc\fR" 4
11467 .IX Item "-mtls-dialect=desc"
11468 Use \s-1TLS\s0 descriptors as the thread-local storage mechanism for dynamic accesses
11469 of \s-1TLS\s0 variables.  This is the default.
11470 .IP "\fB\-mtls\-dialect=traditional\fR" 4
11471 .IX Item "-mtls-dialect=traditional"
11472 Use traditional \s-1TLS\s0 as the thread-local storage mechanism for dynamic accesses
11473 of \s-1TLS\s0 variables.
11474 .IP "\fB\-mfix\-cortex\-a53\-835769\fR" 4
11475 .IX Item "-mfix-cortex-a53-835769"
11476 .PD 0
11477 .IP "\fB\-mno\-fix\-cortex\-a53\-835769\fR" 4
11478 .IX Item "-mno-fix-cortex-a53-835769"
11479 .PD
11480 Enable or disable the workaround for the \s-1ARM\s0 Cortex\-A53 erratum number 835769.
11481 This involves inserting a \s-1NOP\s0 instruction between memory instructions and
11482 64\-bit integer multiply-accumulate instructions.
11483 .IP "\fB\-mfix\-cortex\-a53\-843419\fR" 4
11484 .IX Item "-mfix-cortex-a53-843419"
11485 .PD 0
11486 .IP "\fB\-mno\-fix\-cortex\-a53\-843419\fR" 4
11487 .IX Item "-mno-fix-cortex-a53-843419"
11488 .PD
11489 Enable or disable the workaround for the \s-1ARM\s0 Cortex\-A53 erratum number 843419.
11490 This erratum workaround is made at link time and this will only pass the
11491 corresponding flag to the linker.
11492 .IP "\fB\-march=\fR\fIname\fR" 4
11493 .IX Item "-march=name"
11494 Specify the name of the target architecture, optionally suffixed by one or
11495 more feature modifiers.  This option has the form
11496 \&\fB\-march=\fR\fIarch\fR{\fB+\fR[\fBno\fR]\fIfeature\fR}*, where the
11497 only permissible value for \fIarch\fR is \fBarmv8\-a\fR.  The permissible
11498 values for \fIfeature\fR are documented in the sub-section below.
11499 .Sp
11500 Where conflicting feature modifiers are specified, the right-most feature is
11501 used.
11502 .Sp
11503 \&\s-1GCC\s0 uses this name to determine what kind of instructions it can emit when
11504 generating assembly code.
11505 .Sp
11506 Where \fB\-march\fR is specified without either of \fB\-mtune\fR
11507 or \fB\-mcpu\fR also being specified, the code is tuned to perform
11508 well across a range of target processors implementing the target
11509 architecture.
11510 .IP "\fB\-mtune=\fR\fIname\fR" 4
11511 .IX Item "-mtune=name"
11512 Specify the name of the target processor for which \s-1GCC\s0 should tune the
11513 performance of the code.  Permissible values for this option are:
11514 \&\fBgeneric\fR, \fBcortex\-a53\fR, \fBcortex\-a57\fR, \fBcortex\-a72\fR,
11515 \&\fBexynos\-m1\fR, \fBthunderx\fR, \fBxgene1\fR.
11516 .Sp
11517 Additionally, this option can specify that \s-1GCC\s0 should tune the performance
11518 of the code for a big.LITTLE system.  Permissible values for this
11519 option are: \fBcortex\-a57.cortex\-a53\fR, \fBcortex\-a72.cortex\-a53\fR.
11520 .Sp
11521 Where none of \fB\-mtune=\fR, \fB\-mcpu=\fR or \fB\-march=\fR
11522 are specified, the code is tuned to perform well across a range
11523 of target processors.
11524 .Sp
11525 This option cannot be suffixed by feature modifiers.
11526 .IP "\fB\-mcpu=\fR\fIname\fR" 4
11527 .IX Item "-mcpu=name"
11528 Specify the name of the target processor, optionally suffixed by one or more
11529 feature modifiers.  This option has the form
11530 \&\fB\-mcpu=\fR\fIcpu\fR{\fB+\fR[\fBno\fR]\fIfeature\fR}*, where the
11531 permissible values for \fIcpu\fR are the same as those available for
11532 \&\fB\-mtune\fR.
11533 .Sp
11534 The permissible values for \fIfeature\fR are documented in the sub-section
11535 below.
11536 .Sp
11537 Where conflicting feature modifiers are specified, the right-most feature is
11538 used.
11539 .Sp
11540 \&\s-1GCC\s0 uses this name to determine what kind of instructions it can emit when
11541 generating assembly code (as if by \fB\-march\fR) and to determine
11542 the target processor for which to tune for performance (as if
11543 by \fB\-mtune\fR).  Where this option is used in conjunction
11544 with \fB\-march\fR or \fB\-mtune\fR, those options take precedence
11545 over the appropriate part of this option.
11546 .PP
11547 \fB\-march\fR and \fB\-mcpu\fR Feature Modifiers
11548 .IX Subsection "-march and -mcpu Feature Modifiers"
11549 .PP
11550 Feature modifiers used with \fB\-march\fR and \fB\-mcpu\fR can be one
11551 the following:
11552 .IP "\fBcrc\fR" 4
11553 .IX Item "crc"
11554 Enable \s-1CRC\s0 extension.
11555 .IP "\fBcrypto\fR" 4
11556 .IX Item "crypto"
11557 Enable Crypto extension.  This implies Advanced \s-1SIMD\s0 is enabled.
11558 .IP "\fBfp\fR" 4
11559 .IX Item "fp"
11560 Enable floating-point instructions.
11561 .IP "\fBsimd\fR" 4
11562 .IX Item "simd"
11563 Enable Advanced \s-1SIMD\s0 instructions.  This implies floating-point instructions
11564 are enabled.  This is the default for all current possible values for options
11565 \&\fB\-march\fR and \fB\-mcpu=\fR.
11566 .PP
11567 \fIAdapteva Epiphany Options\fR
11568 .IX Subsection "Adapteva Epiphany Options"
11569 .PP
11570 These \fB\-m\fR options are defined for Adapteva Epiphany:
11571 .IP "\fB\-mhalf\-reg\-file\fR" 4
11572 .IX Item "-mhalf-reg-file"
11573 Don't allocate any register in the range \f(CW\*(C`r32\*(C'\fR...\f(CW\*(C`r63\*(C'\fR.
11574 That allows code to run on hardware variants that lack these registers.
11575 .IP "\fB\-mprefer\-short\-insn\-regs\fR" 4
11576 .IX Item "-mprefer-short-insn-regs"
11577 Preferrentially allocate registers that allow short instruction generation.
11578 This can result in increased instruction count, so this may either reduce or
11579 increase overall code size.
11580 .IP "\fB\-mbranch\-cost=\fR\fInum\fR" 4
11581 .IX Item "-mbranch-cost=num"
11582 Set the cost of branches to roughly \fInum\fR \*(L"simple\*(R" instructions.
11583 This cost is only a heuristic and is not guaranteed to produce
11584 consistent results across releases.
11585 .IP "\fB\-mcmove\fR" 4
11586 .IX Item "-mcmove"
11587 Enable the generation of conditional moves.
11588 .IP "\fB\-mnops=\fR\fInum\fR" 4
11589 .IX Item "-mnops=num"
11590 Emit \fInum\fR NOPs before every other generated instruction.
11591 .IP "\fB\-mno\-soft\-cmpsf\fR" 4
11592 .IX Item "-mno-soft-cmpsf"
11593 For single-precision floating-point comparisons, emit an \f(CW\*(C`fsub\*(C'\fR instruction
11594 and test the flags.  This is faster than a software comparison, but can
11595 get incorrect results in the presence of NaNs, or when two different small
11596 numbers are compared such that their difference is calculated as zero.
11597 The default is \fB\-msoft\-cmpsf\fR, which uses slower, but IEEE-compliant,
11598 software comparisons.
11599 .IP "\fB\-mstack\-offset=\fR\fInum\fR" 4
11600 .IX Item "-mstack-offset=num"
11601 Set the offset between the top of the stack and the stack pointer.
11602 E.g., a value of 8 means that the eight bytes in the range \f(CW\*(C`sp+0...sp+7\*(C'\fR
11603 can be used by leaf functions without stack allocation.
11604 Values other than \fB8\fR or \fB16\fR are untested and unlikely to work.
11605 Note also that this option changes the \s-1ABI\s0; compiling a program with a
11606 different stack offset than the libraries have been compiled with
11607 generally does not work.
11608 This option can be useful if you want to evaluate if a different stack
11609 offset would give you better code, but to actually use a different stack
11610 offset to build working programs, it is recommended to configure the
11611 toolchain with the appropriate \fB\-\-with\-stack\-offset=\fR\fInum\fR option.
11612 .IP "\fB\-mno\-round\-nearest\fR" 4
11613 .IX Item "-mno-round-nearest"
11614 Make the scheduler assume that the rounding mode has been set to
11615 truncating.  The default is \fB\-mround\-nearest\fR.
11616 .IP "\fB\-mlong\-calls\fR" 4
11617 .IX Item "-mlong-calls"
11618 If not otherwise specified by an attribute, assume all calls might be beyond
11619 the offset range of the \f(CW\*(C`b\*(C'\fR / \f(CW\*(C`bl\*(C'\fR instructions, and therefore load the
11620 function address into a register before performing a (otherwise direct) call.
11621 This is the default.
11622 .IP "\fB\-mshort\-calls\fR" 4
11623 .IX Item "-mshort-calls"
11624 If not otherwise specified by an attribute, assume all direct calls are
11625 in the range of the \f(CW\*(C`b\*(C'\fR / \f(CW\*(C`bl\*(C'\fR instructions, so use these instructions
11626 for direct calls.  The default is \fB\-mlong\-calls\fR.
11627 .IP "\fB\-msmall16\fR" 4
11628 .IX Item "-msmall16"
11629 Assume addresses can be loaded as 16\-bit unsigned values.  This does not
11630 apply to function addresses for which \fB\-mlong\-calls\fR semantics
11631 are in effect.
11632 .IP "\fB\-mfp\-mode=\fR\fImode\fR" 4
11633 .IX Item "-mfp-mode=mode"
11634 Set the prevailing mode of the floating-point unit.
11635 This determines the floating-point mode that is provided and expected
11636 at function call and return time.  Making this mode match the mode you
11637 predominantly need at function start can make your programs smaller and
11638 faster by avoiding unnecessary mode switches.
11639 .Sp
11640 \&\fImode\fR can be set to one the following values:
11641 .RS 4
11642 .IP "\fBcaller\fR" 4
11643 .IX Item "caller"
11644 Any mode at function entry is valid, and retained or restored when
11645 the function returns, and when it calls other functions.
11646 This mode is useful for compiling libraries or other compilation units
11647 you might want to incorporate into different programs with different
11648 prevailing \s-1FPU\s0 modes, and the convenience of being able to use a single
11649 object file outweighs the size and speed overhead for any extra
11650 mode switching that might be needed, compared with what would be needed
11651 with a more specific choice of prevailing \s-1FPU\s0 mode.
11652 .IP "\fBtruncate\fR" 4
11653 .IX Item "truncate"
11654 This is the mode used for floating-point calculations with
11655 truncating (i.e. round towards zero) rounding mode.  That includes
11656 conversion from floating point to integer.
11657 .IP "\fBround-nearest\fR" 4
11658 .IX Item "round-nearest"
11659 This is the mode used for floating-point calculations with
11660 round-to-nearest-or-even rounding mode.
11661 .IP "\fBint\fR" 4
11662 .IX Item "int"
11663 This is the mode used to perform integer calculations in the \s-1FPU\s0, e.g.
11664 integer multiply, or integer multiply-and-accumulate.
11665 .RE
11666 .RS 4
11667 .Sp
11668 The default is \fB\-mfp\-mode=caller\fR
11669 .RE
11670 .IP "\fB\-mnosplit\-lohi\fR" 4
11671 .IX Item "-mnosplit-lohi"
11672 .PD 0
11673 .IP "\fB\-mno\-postinc\fR" 4
11674 .IX Item "-mno-postinc"
11675 .IP "\fB\-mno\-postmodify\fR" 4
11676 .IX Item "-mno-postmodify"
11677 .PD
11678 Code generation tweaks that disable, respectively, splitting of 32\-bit
11679 loads, generation of post-increment addresses, and generation of
11680 post-modify addresses.  The defaults are \fBmsplit-lohi\fR,
11681 \&\fB\-mpost\-inc\fR, and \fB\-mpost\-modify\fR.
11682 .IP "\fB\-mnovect\-double\fR" 4
11683 .IX Item "-mnovect-double"
11684 Change the preferred \s-1SIMD\s0 mode to SImode.  The default is
11685 \&\fB\-mvect\-double\fR, which uses DImode as preferred \s-1SIMD\s0 mode.
11686 .IP "\fB\-max\-vect\-align=\fR\fInum\fR" 4
11687 .IX Item "-max-vect-align=num"
11688 The maximum alignment for \s-1SIMD\s0 vector mode types.
11689 \&\fInum\fR may be 4 or 8.  The default is 8.
11690 Note that this is an \s-1ABI\s0 change, even though many library function
11691 interfaces are unaffected if they don't use \s-1SIMD\s0 vector modes
11692 in places that affect size and/or alignment of relevant types.
11693 .IP "\fB\-msplit\-vecmove\-early\fR" 4
11694 .IX Item "-msplit-vecmove-early"
11695 Split vector moves into single word moves before reload.  In theory this
11696 can give better register allocation, but so far the reverse seems to be
11697 generally the case.
11698 .IP "\fB\-m1reg\-\fR\fIreg\fR" 4
11699 .IX Item "-m1reg-reg"
11700 Specify a register to hold the constant \-1, which makes loading small negative
11701 constants and certain bitmasks faster.
11702 Allowable values for \fIreg\fR are \fBr43\fR and \fBr63\fR,
11703 which specify use of that register as a fixed register,
11704 and \fBnone\fR, which means that no register is used for this
11705 purpose.  The default is \fB\-m1reg\-none\fR.
11706 .PP
11707 \fI\s-1ARC\s0 Options\fR
11708 .IX Subsection "ARC Options"
11709 .PP
11710 The following options control the architecture variant for which code
11711 is being compiled:
11712 .IP "\fB\-mbarrel\-shifter\fR" 4
11713 .IX Item "-mbarrel-shifter"
11714 Generate instructions supported by barrel shifter.  This is the default
11715 unless \fB\-mcpu=ARC601\fR is in effect.
11716 .IP "\fB\-mcpu=\fR\fIcpu\fR" 4
11717 .IX Item "-mcpu=cpu"
11718 Set architecture type, register usage, and instruction scheduling
11719 parameters for \fIcpu\fR.  There are also shortcut alias options
11720 available for backward compatibility and convenience.  Supported
11721 values for \fIcpu\fR are
11722 .RS 4
11723 .IP "\fB\s-1ARC600\s0\fR" 4
11724 .IX Item "ARC600"
11725 Compile for \s-1ARC600\s0.  Aliases: \fB\-mA6\fR, \fB\-mARC600\fR.
11726 .IP "\fB\s-1ARC601\s0\fR" 4
11727 .IX Item "ARC601"
11728 Compile for \s-1ARC601\s0.  Alias: \fB\-mARC601\fR.
11729 .IP "\fB\s-1ARC700\s0\fR" 4
11730 .IX Item "ARC700"
11731 Compile for \s-1ARC700\s0.  Aliases: \fB\-mA7\fR, \fB\-mARC700\fR.
11732 This is the default when configured with \fB\-\-with\-cpu=arc700\fR.
11733 .RE
11734 .RS 4
11735 .RE
11736 .IP "\fB\-mdpfp\fR" 4
11737 .IX Item "-mdpfp"
11738 .PD 0
11739 .IP "\fB\-mdpfp\-compact\fR" 4
11740 .IX Item "-mdpfp-compact"
11741 .PD
11742 \&\s-1FPX:\s0 Generate Double Precision \s-1FPX\s0 instructions, tuned for the compact
11743 implementation.
11744 .IP "\fB\-mdpfp\-fast\fR" 4
11745 .IX Item "-mdpfp-fast"
11746 \&\s-1FPX:\s0 Generate Double Precision \s-1FPX\s0 instructions, tuned for the fast
11747 implementation.
11748 .IP "\fB\-mno\-dpfp\-lrsr\fR" 4
11749 .IX Item "-mno-dpfp-lrsr"
11750 Disable \s-1LR\s0 and \s-1SR\s0 instructions from using \s-1FPX\s0 extension aux registers.
11751 .IP "\fB\-mea\fR" 4
11752 .IX Item "-mea"
11753 Generate Extended arithmetic instructions.  Currently only
11754 \&\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
11755 supported.  This is always enabled for \fB\-mcpu=ARC700\fR.
11756 .IP "\fB\-mno\-mpy\fR" 4
11757 .IX Item "-mno-mpy"
11758 Do not generate mpy instructions for \s-1ARC700\s0.
11759 .IP "\fB\-mmul32x16\fR" 4
11760 .IX Item "-mmul32x16"
11761 Generate 32x16 bit multiply and mac instructions.
11762 .IP "\fB\-mmul64\fR" 4
11763 .IX Item "-mmul64"
11764 Generate mul64 and mulu64 instructions.  Only valid for \fB\-mcpu=ARC600\fR.
11765 .IP "\fB\-mnorm\fR" 4
11766 .IX Item "-mnorm"
11767 Generate norm instruction.  This is the default if \fB\-mcpu=ARC700\fR
11768 is in effect.
11769 .IP "\fB\-mspfp\fR" 4
11770 .IX Item "-mspfp"
11771 .PD 0
11772 .IP "\fB\-mspfp\-compact\fR" 4
11773 .IX Item "-mspfp-compact"
11774 .PD
11775 \&\s-1FPX:\s0 Generate Single Precision \s-1FPX\s0 instructions, tuned for the compact
11776 implementation.
11777 .IP "\fB\-mspfp\-fast\fR" 4
11778 .IX Item "-mspfp-fast"
11779 \&\s-1FPX:\s0 Generate Single Precision \s-1FPX\s0 instructions, tuned for the fast
11780 implementation.
11781 .IP "\fB\-msimd\fR" 4
11782 .IX Item "-msimd"
11783 Enable generation of \s-1ARC\s0 \s-1SIMD\s0 instructions via target-specific
11784 builtins.  Only valid for \fB\-mcpu=ARC700\fR.
11785 .IP "\fB\-msoft\-float\fR" 4
11786 .IX Item "-msoft-float"
11787 This option ignored; it is provided for compatibility purposes only.
11788 Software floating point code is emitted by default, and this default
11789 can overridden by \s-1FPX\s0 options; \fBmspfp\fR, \fBmspfp-compact\fR, or
11790 \&\fBmspfp-fast\fR for single precision, and \fBmdpfp\fR,
11791 \&\fBmdpfp-compact\fR, or \fBmdpfp-fast\fR for double precision.
11792 .IP "\fB\-mswap\fR" 4
11793 .IX Item "-mswap"
11794 Generate swap instructions.
11795 .PP
11796 The following options are passed through to the assembler, and also
11797 define preprocessor macro symbols.
11798 .IP "\fB\-mdsp\-packa\fR" 4
11799 .IX Item "-mdsp-packa"
11800 Passed down to the assembler to enable the \s-1DSP\s0 Pack A extensions.
11801 Also sets the preprocessor symbol \f(CW\*(C`_\|_Xdsp_packa\*(C'\fR.
11802 .IP "\fB\-mdvbf\fR" 4
11803 .IX Item "-mdvbf"
11804 Passed down to the assembler to enable the dual viterbi butterfly
11805 extension.  Also sets the preprocessor symbol \f(CW\*(C`_\|_Xdvbf\*(C'\fR.
11806 .IP "\fB\-mlock\fR" 4
11807 .IX Item "-mlock"
11808 Passed down to the assembler to enable the Locked Load/Store
11809 Conditional extension.  Also sets the preprocessor symbol
11810 \&\f(CW\*(C`_\|_Xlock\*(C'\fR.
11811 .IP "\fB\-mmac\-d16\fR" 4
11812 .IX Item "-mmac-d16"
11813 Passed down to the assembler.  Also sets the preprocessor symbol
11814 \&\f(CW\*(C`_\|_Xxmac_d16\*(C'\fR.
11815 .IP "\fB\-mmac\-24\fR" 4
11816 .IX Item "-mmac-24"
11817 Passed down to the assembler.  Also sets the preprocessor symbol
11818 \&\f(CW\*(C`_\|_Xxmac_24\*(C'\fR.
11819 .IP "\fB\-mrtsc\fR" 4
11820 .IX Item "-mrtsc"
11821 Passed down to the assembler to enable the 64\-bit Time-Stamp Counter
11822 extension instruction.  Also sets the preprocessor symbol
11823 \&\f(CW\*(C`_\|_Xrtsc\*(C'\fR.
11824 .IP "\fB\-mswape\fR" 4
11825 .IX Item "-mswape"
11826 Passed down to the assembler to enable the swap byte ordering
11827 extension instruction.  Also sets the preprocessor symbol
11828 \&\f(CW\*(C`_\|_Xswape\*(C'\fR.
11829 .IP "\fB\-mtelephony\fR" 4
11830 .IX Item "-mtelephony"
11831 Passed down to the assembler to enable dual and single operand
11832 instructions for telephony.  Also sets the preprocessor symbol
11833 \&\f(CW\*(C`_\|_Xtelephony\*(C'\fR.
11834 .IP "\fB\-mxy\fR" 4
11835 .IX Item "-mxy"
11836 Passed down to the assembler to enable the \s-1XY\s0 Memory extension.  Also
11837 sets the preprocessor symbol \f(CW\*(C`_\|_Xxy\*(C'\fR.
11838 .PP
11839 The following options control how the assembly code is annotated:
11840 .IP "\fB\-misize\fR" 4
11841 .IX Item "-misize"
11842 Annotate assembler instructions with estimated addresses.
11843 .IP "\fB\-mannotate\-align\fR" 4
11844 .IX Item "-mannotate-align"
11845 Explain what alignment considerations lead to the decision to make an
11846 instruction short or long.
11847 .PP
11848 The following options are passed through to the linker:
11849 .IP "\fB\-marclinux\fR" 4
11850 .IX Item "-marclinux"
11851 Passed through to the linker, to specify use of the \f(CW\*(C`arclinux\*(C'\fR emulation.
11852 This option is enabled by default in tool chains built for
11853 \&\f(CW\*(C`arc\-linux\-uclibc\*(C'\fR and \f(CW\*(C`arceb\-linux\-uclibc\*(C'\fR targets
11854 when profiling is not requested.
11855 .IP "\fB\-marclinux_prof\fR" 4
11856 .IX Item "-marclinux_prof"
11857 Passed through to the linker, to specify use of the
11858 \&\f(CW\*(C`arclinux_prof\*(C'\fR emulation.  This option is enabled by default in
11859 tool chains built for \f(CW\*(C`arc\-linux\-uclibc\*(C'\fR and
11860 \&\f(CW\*(C`arceb\-linux\-uclibc\*(C'\fR targets when profiling is requested.
11861 .PP
11862 The following options control the semantics of generated code:
11863 .IP "\fB\-mepilogue\-cfi\fR" 4
11864 .IX Item "-mepilogue-cfi"
11865 Enable generation of call frame information for epilogues.
11866 .IP "\fB\-mno\-epilogue\-cfi\fR" 4
11867 .IX Item "-mno-epilogue-cfi"
11868 Disable generation of call frame information for epilogues.
11869 .IP "\fB\-mlong\-calls\fR" 4
11870 .IX Item "-mlong-calls"
11871 Generate call insns as register indirect calls, thus providing access
11872 to the full 32\-bit address range.
11873 .IP "\fB\-mmedium\-calls\fR" 4
11874 .IX Item "-mmedium-calls"
11875 Don't use less than 25 bit addressing range for calls, which is the
11876 offset available for an unconditional branch-and-link
11877 instruction.  Conditional execution of function calls is suppressed, to
11878 allow use of the 25\-bit range, rather than the 21\-bit range with
11879 conditional branch-and-link.  This is the default for tool chains built
11880 for \f(CW\*(C`arc\-linux\-uclibc\*(C'\fR and \f(CW\*(C`arceb\-linux\-uclibc\*(C'\fR targets.
11881 .IP "\fB\-mno\-sdata\fR" 4
11882 .IX Item "-mno-sdata"
11883 Do not generate sdata references.  This is the default for tool chains
11884 built for \f(CW\*(C`arc\-linux\-uclibc\*(C'\fR and \f(CW\*(C`arceb\-linux\-uclibc\*(C'\fR
11885 targets.
11886 .IP "\fB\-mucb\-mcount\fR" 4
11887 .IX Item "-mucb-mcount"
11888 Instrument with mcount calls as used in \s-1UCB\s0 code.  I.e. do the
11889 counting in the callee, not the caller.  By default \s-1ARC\s0 instrumentation
11890 counts in the caller.
11891 .IP "\fB\-mvolatile\-cache\fR" 4
11892 .IX Item "-mvolatile-cache"
11893 Use ordinarily cached memory accesses for volatile references.  This is the
11894 default.
11895 .IP "\fB\-mno\-volatile\-cache\fR" 4
11896 .IX Item "-mno-volatile-cache"
11897 Enable cache bypass for volatile references.
11898 .PP
11899 The following options fine tune code generation:
11900 .IP "\fB\-malign\-call\fR" 4
11901 .IX Item "-malign-call"
11902 Do alignment optimizations for call instructions.
11903 .IP "\fB\-mauto\-modify\-reg\fR" 4
11904 .IX Item "-mauto-modify-reg"
11905 Enable the use of pre/post modify with register displacement.
11906 .IP "\fB\-mbbit\-peephole\fR" 4
11907 .IX Item "-mbbit-peephole"
11908 Enable bbit peephole2.
11909 .IP "\fB\-mno\-brcc\fR" 4
11910 .IX Item "-mno-brcc"
11911 This option disables a target-specific pass in \fIarc_reorg\fR to
11912 generate \f(CW\*(C`BRcc\*(C'\fR instructions.  It has no effect on \f(CW\*(C`BRcc\*(C'\fR
11913 generation driven by the combiner pass.
11914 .IP "\fB\-mcase\-vector\-pcrel\fR" 4
11915 .IX Item "-mcase-vector-pcrel"
11916 Use pc-relative switch case tables \- this enables case table shortening.
11917 This is the default for \fB\-Os\fR.
11918 .IP "\fB\-mcompact\-casesi\fR" 4
11919 .IX Item "-mcompact-casesi"
11920 Enable compact casesi pattern.
11921 This is the default for \fB\-Os\fR.
11922 .IP "\fB\-mno\-cond\-exec\fR" 4
11923 .IX Item "-mno-cond-exec"
11924 Disable ARCompact specific pass to generate conditional execution instructions.
11925 Due to delay slot scheduling and interactions between operand numbers,
11926 literal sizes, instruction lengths, and the support for conditional execution,
11927 the target-independent pass to generate conditional execution is often lacking,
11928 so the \s-1ARC\s0 port has kept a special pass around that tries to find more
11929 conditional execution generating opportunities after register allocation,
11930 branch shortening, and delay slot scheduling have been done.  This pass
11931 generally, but not always, improves performance and code size, at the cost of
11932 extra compilation time, which is why there is an option to switch it off.
11933 If you have a problem with call instructions exceeding their allowable
11934 offset range because they are conditionalized, you should consider using
11935 \&\fB\-mmedium\-calls\fR instead.
11936 .IP "\fB\-mearly\-cbranchsi\fR" 4
11937 .IX Item "-mearly-cbranchsi"
11938 Enable pre-reload use of the cbranchsi pattern.
11939 .IP "\fB\-mexpand\-adddi\fR" 4
11940 .IX Item "-mexpand-adddi"
11941 Expand \f(CW\*(C`adddi3\*(C'\fR and \f(CW\*(C`subdi3\*(C'\fR at rtl generation time into
11942 \&\f(CW\*(C`add.f\*(C'\fR, \f(CW\*(C`adc\*(C'\fR etc.
11943 .IP "\fB\-mindexed\-loads\fR" 4
11944 .IX Item "-mindexed-loads"
11945 Enable the use of indexed loads.  This can be problematic because some
11946 optimizers then assume that indexed stores exist, which is not
11947 the case.
11948 .IP "\fB\-mlra\fR" 4
11949 .IX Item "-mlra"
11950 Enable Local Register Allocation.  This is still experimental for \s-1ARC\s0,
11951 so by default the compiler uses standard reload
11952 (i.e. \fB\-mno\-lra\fR).
11953 .IP "\fB\-mlra\-priority\-none\fR" 4
11954 .IX Item "-mlra-priority-none"
11955 Don't indicate any priority for target registers.
11956 .IP "\fB\-mlra\-priority\-compact\fR" 4
11957 .IX Item "-mlra-priority-compact"
11958 Indicate target register priority for r0..r3 / r12..r15.
11959 .IP "\fB\-mlra\-priority\-noncompact\fR" 4
11960 .IX Item "-mlra-priority-noncompact"
11961 Reduce target regsiter priority for r0..r3 / r12..r15.
11962 .IP "\fB\-mno\-millicode\fR" 4
11963 .IX Item "-mno-millicode"
11964 When optimizing for size (using \fB\-Os\fR), prologues and epilogues
11965 that have to save or restore a large number of registers are often
11966 shortened by using call to a special function in libgcc; this is
11967 referred to as a \fImillicode\fR call.  As these calls can pose
11968 performance issues, and/or cause linking issues when linking in a
11969 nonstandard way, this option is provided to turn off millicode call
11970 generation.
11971 .IP "\fB\-mmixed\-code\fR" 4
11972 .IX Item "-mmixed-code"
11973 Tweak register allocation to help 16\-bit instruction generation.
11974 This generally has the effect of decreasing the average instruction size
11975 while increasing the instruction count.
11976 .IP "\fB\-mq\-class\fR" 4
11977 .IX Item "-mq-class"
11978 Enable 'q' instruction alternatives.
11979 This is the default for \fB\-Os\fR.
11980 .IP "\fB\-mRcq\fR" 4
11981 .IX Item "-mRcq"
11982 Enable Rcq constraint handling \- most short code generation depends on this.
11983 This is the default.
11984 .IP "\fB\-mRcw\fR" 4
11985 .IX Item "-mRcw"
11986 Enable Rcw constraint handling \- ccfsm condexec mostly depends on this.
11987 This is the default.
11988 .IP "\fB\-msize\-level=\fR\fIlevel\fR" 4
11989 .IX Item "-msize-level=level"
11990 Fine-tune size optimization with regards to instruction lengths and alignment.
11991 The recognized values for \fIlevel\fR are:
11992 .RS 4
11993 .IP "\fB0\fR" 4
11994 .IX Item "0"
11995 No size optimization.  This level is deprecated and treated like \fB1\fR.
11996 .IP "\fB1\fR" 4
11997 .IX Item "1"
11998 Short instructions are used opportunistically.
11999 .IP "\fB2\fR" 4
12000 .IX Item "2"
12001 In addition, alignment of loops and of code after barriers are dropped.
12002 .IP "\fB3\fR" 4
12003 .IX Item "3"
12004 In addition, optional data alignment is dropped, and the option \fBOs\fR is enabled.
12005 .RE
12006 .RS 4
12007 .Sp
12008 This defaults to \fB3\fR when \fB\-Os\fR is in effect.  Otherwise,
12009 the behavior when this is not set is equivalent to level \fB1\fR.
12010 .RE
12011 .IP "\fB\-mtune=\fR\fIcpu\fR" 4
12012 .IX Item "-mtune=cpu"
12013 Set instruction scheduling parameters for \fIcpu\fR, overriding any implied
12014 by \fB\-mcpu=\fR.
12015 .Sp
12016 Supported values for \fIcpu\fR are
12017 .RS 4
12018 .IP "\fB\s-1ARC600\s0\fR" 4
12019 .IX Item "ARC600"
12020 Tune for \s-1ARC600\s0 cpu.
12021 .IP "\fB\s-1ARC601\s0\fR" 4
12022 .IX Item "ARC601"
12023 Tune for \s-1ARC601\s0 cpu.
12024 .IP "\fB\s-1ARC700\s0\fR" 4
12025 .IX Item "ARC700"
12026 Tune for \s-1ARC700\s0 cpu with standard multiplier block.
12027 .IP "\fBARC700\-xmac\fR" 4
12028 .IX Item "ARC700-xmac"
12029 Tune for \s-1ARC700\s0 cpu with \s-1XMAC\s0 block.
12030 .IP "\fB\s-1ARC725D\s0\fR" 4
12031 .IX Item "ARC725D"
12032 Tune for \s-1ARC725D\s0 cpu.
12033 .IP "\fB\s-1ARC750D\s0\fR" 4
12034 .IX Item "ARC750D"
12035 Tune for \s-1ARC750D\s0 cpu.
12036 .RE
12037 .RS 4
12038 .RE
12039 .IP "\fB\-mmultcost=\fR\fInum\fR" 4
12040 .IX Item "-mmultcost=num"
12041 Cost to assume for a multiply instruction, with \fB4\fR being equal to a
12042 normal instruction.
12043 .IP "\fB\-munalign\-prob\-threshold=\fR\fIprobability\fR" 4
12044 .IX Item "-munalign-prob-threshold=probability"
12045 Set probability threshold for unaligning branches.
12046 When tuning for \fB\s-1ARC700\s0\fR and optimizing for speed, branches without
12047 filled delay slot are preferably emitted unaligned and long, unless
12048 profiling indicates that the probability for the branch to be taken
12049 is below \fIprobability\fR.  
12050 The default is (\s-1REG_BR_PROB_BASE/2\s0), i.e. 5000.
12051 .PP
12052 The following options are maintained for backward compatibility, but
12053 are now deprecated and will be removed in a future release:
12054 .IP "\fB\-margonaut\fR" 4
12055 .IX Item "-margonaut"
12056 Obsolete \s-1FPX\s0.
12057 .IP "\fB\-mbig\-endian\fR" 4
12058 .IX Item "-mbig-endian"
12059 .PD 0
12060 .IP "\fB\-EB\fR" 4
12061 .IX Item "-EB"
12062 .PD
12063 Compile code for big endian targets.  Use of these options is now
12064 deprecated.  Users wanting big-endian code, should use the
12065 \&\f(CW\*(C`arceb\-elf32\*(C'\fR and \f(CW\*(C`arceb\-linux\-uclibc\*(C'\fR targets when
12066 building the tool chain, for which big-endian is the default.
12067 .IP "\fB\-mlittle\-endian\fR" 4
12068 .IX Item "-mlittle-endian"
12069 .PD 0
12070 .IP "\fB\-EL\fR" 4
12071 .IX Item "-EL"
12072 .PD
12073 Compile code for little endian targets.  Use of these options is now
12074 deprecated.  Users wanting little-endian code should use the
12075 \&\f(CW\*(C`arc\-elf32\*(C'\fR and \f(CW\*(C`arc\-linux\-uclibc\*(C'\fR targets when
12076 building the tool chain, for which little-endian is the default.
12077 .IP "\fB\-mbarrel_shifter\fR" 4
12078 .IX Item "-mbarrel_shifter"
12079 Replaced by \fB\-mbarrel\-shifter\fR.
12080 .IP "\fB\-mdpfp_compact\fR" 4
12081 .IX Item "-mdpfp_compact"
12082 Replaced by \fB\-mdpfp\-compact\fR.
12083 .IP "\fB\-mdpfp_fast\fR" 4
12084 .IX Item "-mdpfp_fast"
12085 Replaced by \fB\-mdpfp\-fast\fR.
12086 .IP "\fB\-mdsp_packa\fR" 4
12087 .IX Item "-mdsp_packa"
12088 Replaced by \fB\-mdsp\-packa\fR.
12089 .IP "\fB\-mEA\fR" 4
12090 .IX Item "-mEA"
12091 Replaced by \fB\-mea\fR.
12092 .IP "\fB\-mmac_24\fR" 4
12093 .IX Item "-mmac_24"
12094 Replaced by \fB\-mmac\-24\fR.
12095 .IP "\fB\-mmac_d16\fR" 4
12096 .IX Item "-mmac_d16"
12097 Replaced by \fB\-mmac\-d16\fR.
12098 .IP "\fB\-mspfp_compact\fR" 4
12099 .IX Item "-mspfp_compact"
12100 Replaced by \fB\-mspfp\-compact\fR.
12101 .IP "\fB\-mspfp_fast\fR" 4
12102 .IX Item "-mspfp_fast"
12103 Replaced by \fB\-mspfp\-fast\fR.
12104 .IP "\fB\-mtune=\fR\fIcpu\fR" 4
12105 .IX Item "-mtune=cpu"
12106 Values \fBarc600\fR, \fBarc601\fR, \fBarc700\fR and
12107 \&\fBarc700\-xmac\fR for \fIcpu\fR are replaced by \fB\s-1ARC600\s0\fR,
12108 \&\fB\s-1ARC601\s0\fR, \fB\s-1ARC700\s0\fR and \fBARC700\-xmac\fR respectively
12109 .IP "\fB\-multcost=\fR\fInum\fR" 4
12110 .IX Item "-multcost=num"
12111 Replaced by \fB\-mmultcost\fR.
12112 .PP
12113 \fI\s-1ARM\s0 Options\fR
12114 .IX Subsection "ARM Options"
12115 .PP
12116 These \fB\-m\fR options are defined for the \s-1ARM\s0 port:
12117 .IP "\fB\-mabi=\fR\fIname\fR" 4
12118 .IX Item "-mabi=name"
12119 Generate code for the specified \s-1ABI\s0.  Permissible values are: \fBapcs-gnu\fR,
12120 \&\fBatpcs\fR, \fBaapcs\fR, \fBaapcs-linux\fR and \fBiwmmxt\fR.
12121 .IP "\fB\-mapcs\-frame\fR" 4
12122 .IX Item "-mapcs-frame"
12123 Generate a stack frame that is compliant with the \s-1ARM\s0 Procedure Call
12124 Standard for all functions, even if this is not strictly necessary for
12125 correct execution of the code.  Specifying \fB\-fomit\-frame\-pointer\fR
12126 with this option causes the stack frames not to be generated for
12127 leaf functions.  The default is \fB\-mno\-apcs\-frame\fR.
12128 This option is deprecated.
12129 .IP "\fB\-mapcs\fR" 4
12130 .IX Item "-mapcs"
12131 This is a synonym for \fB\-mapcs\-frame\fR and is deprecated.
12132 .IP "\fB\-mthumb\-interwork\fR" 4
12133 .IX Item "-mthumb-interwork"
12134 Generate code that supports calling between the \s-1ARM\s0 and Thumb
12135 instruction sets.  Without this option, on pre\-v5 architectures, the
12136 two instruction sets cannot be reliably used inside one program.  The
12137 default is \fB\-mno\-thumb\-interwork\fR, since slightly larger code
12138 is generated when \fB\-mthumb\-interwork\fR is specified.  In \s-1AAPCS\s0
12139 configurations this option is meaningless.
12140 .IP "\fB\-mno\-sched\-prolog\fR" 4
12141 .IX Item "-mno-sched-prolog"
12142 Prevent the reordering of instructions in the function prologue, or the
12143 merging of those instruction with the instructions in the function's
12144 body.  This means that all functions start with a recognizable set
12145 of instructions (or in fact one of a choice from a small set of
12146 different function prologues), and this information can be used to
12147 locate the start of functions inside an executable piece of code.  The
12148 default is \fB\-msched\-prolog\fR.
12149 .IP "\fB\-mfloat\-abi=\fR\fIname\fR" 4
12150 .IX Item "-mfloat-abi=name"
12151 Specifies which floating-point \s-1ABI\s0 to use.  Permissible values
12152 are: \fBsoft\fR, \fBsoftfp\fR and \fBhard\fR.
12153 .Sp
12154 Specifying \fBsoft\fR causes \s-1GCC\s0 to generate output containing
12155 library calls for floating-point operations.
12156 \&\fBsoftfp\fR allows the generation of code using hardware floating-point
12157 instructions, but still uses the soft-float calling conventions.
12158 \&\fBhard\fR allows generation of floating-point instructions
12159 and uses FPU-specific calling conventions.
12160 .Sp
12161 The default depends on the specific target configuration.  Note that
12162 the hard-float and soft-float ABIs are not link-compatible; you must
12163 compile your entire program with the same \s-1ABI\s0, and link with a
12164 compatible set of libraries.
12165 .IP "\fB\-mlittle\-endian\fR" 4
12166 .IX Item "-mlittle-endian"
12167 Generate code for a processor running in little-endian mode.  This is
12168 the default for all standard configurations.
12169 .IP "\fB\-mbig\-endian\fR" 4
12170 .IX Item "-mbig-endian"
12171 Generate code for a processor running in big-endian mode; the default is
12172 to compile code for a little-endian processor.
12173 .IP "\fB\-march=\fR\fIname\fR" 4
12174 .IX Item "-march=name"
12175 This specifies the name of the target \s-1ARM\s0 architecture.  \s-1GCC\s0 uses this
12176 name to determine what kind of instructions it can emit when generating
12177 assembly code.  This option can be used in conjunction with or instead
12178 of the \fB\-mcpu=\fR option.  Permissible names are: \fBarmv2\fR,
12179 \&\fBarmv2a\fR, \fBarmv3\fR, \fBarmv3m\fR, \fBarmv4\fR, \fBarmv4t\fR,
12180 \&\fBarmv5\fR, \fBarmv5t\fR, \fBarmv5e\fR, \fBarmv5te\fR,
12181 \&\fBarmv6\fR, \fBarmv6j\fR,
12182 \&\fBarmv6t2\fR, \fBarmv6z\fR, \fBarmv6zk\fR, \fBarmv6\-m\fR,
12183 \&\fBarmv7\fR, \fBarmv7\-a\fR, \fBarmv7\-r\fR, \fBarmv7\-m\fR, \fBarmv7e\-m\fR,
12184 \&\fBarmv7ve\fR, \fBarmv8\-a\fR, \fBarmv8\-a+crc\fR,
12185 \&\fBiwmmxt\fR, \fBiwmmxt2\fR, \fBep9312\fR.
12186 .Sp
12187 \&\fB\-march=armv7ve\fR is the armv7\-a architecture with virtualization
12188 extensions.
12189 .Sp
12190 \&\fB\-march=armv8\-a+crc\fR enables code generation for the ARMv8\-A
12191 architecture together with the optional \s-1CRC32\s0 extensions.
12192 .Sp
12193 \&\fB\-march=native\fR causes the compiler to auto-detect the architecture
12194 of the build computer.  At present, this feature is only supported on
12195 GNU/Linux, and not all architectures are recognized.  If the auto-detect
12196 is unsuccessful the option has no effect.
12197 .IP "\fB\-mtune=\fR\fIname\fR" 4
12198 .IX Item "-mtune=name"
12199 This option specifies the name of the target \s-1ARM\s0 processor for
12200 which \s-1GCC\s0 should tune the performance of the code.
12201 For some \s-1ARM\s0 implementations better performance can be obtained by using
12202 this option.
12203 Permissible names are: \fBarm2\fR, \fBarm250\fR,
12204 \&\fBarm3\fR, \fBarm6\fR, \fBarm60\fR, \fBarm600\fR, \fBarm610\fR,
12205 \&\fBarm620\fR, \fBarm7\fR, \fBarm7m\fR, \fBarm7d\fR, \fBarm7dm\fR,
12206 \&\fBarm7di\fR, \fBarm7dmi\fR, \fBarm70\fR, \fBarm700\fR,
12207 \&\fBarm700i\fR, \fBarm710\fR, \fBarm710c\fR, \fBarm7100\fR,
12208 \&\fBarm720\fR,
12209 \&\fBarm7500\fR, \fBarm7500fe\fR, \fBarm7tdmi\fR, \fBarm7tdmi\-s\fR,
12210 \&\fBarm710t\fR, \fBarm720t\fR, \fBarm740t\fR,
12211 \&\fBstrongarm\fR, \fBstrongarm110\fR, \fBstrongarm1100\fR,
12212 \&\fBstrongarm1110\fR,
12213 \&\fBarm8\fR, \fBarm810\fR, \fBarm9\fR, \fBarm9e\fR, \fBarm920\fR,
12214 \&\fBarm920t\fR, \fBarm922t\fR, \fBarm946e\-s\fR, \fBarm966e\-s\fR,
12215 \&\fBarm968e\-s\fR, \fBarm926ej\-s\fR, \fBarm940t\fR, \fBarm9tdmi\fR,
12216 \&\fBarm10tdmi\fR, \fBarm1020t\fR, \fBarm1026ej\-s\fR,
12217 \&\fBarm10e\fR, \fBarm1020e\fR, \fBarm1022e\fR,
12218 \&\fBarm1136j\-s\fR, \fBarm1136jf\-s\fR, \fBmpcore\fR, \fBmpcorenovfp\fR,
12219 \&\fBarm1156t2\-s\fR, \fBarm1156t2f\-s\fR, \fBarm1176jz\-s\fR, \fBarm1176jzf\-s\fR,
12220 \&\fBcortex\-a5\fR, \fBcortex\-a7\fR, \fBcortex\-a8\fR, \fBcortex\-a9\fR,
12221 \&\fBcortex\-a12\fR, \fBcortex\-a15\fR, \fBcortex\-a53\fR,
12222 \&\fBcortex\-a57\fR, \fBcortex\-a72\fR,
12223 \&\fBcortex\-r4\fR,
12224 \&\fBcortex\-r4f\fR, \fBcortex\-r5\fR, \fBcortex\-r7\fR, \fBcortex\-m7\fR,
12225 \&\fBcortex\-m4\fR,
12226 \&\fBcortex\-m3\fR,
12227 \&\fBcortex\-m1\fR,
12228 \&\fBcortex\-m0\fR,
12229 \&\fBcortex\-m0plus\fR,
12230 \&\fBcortex\-m1.small\-multiply\fR,
12231 \&\fBcortex\-m0.small\-multiply\fR,
12232 \&\fBcortex\-m0plus.small\-multiply\fR,
12233 \&\fBexynos\-m1\fR,
12234 \&\fBmarvell\-pj4\fR,
12235 \&\fBxscale\fR, \fBiwmmxt\fR, \fBiwmmxt2\fR, \fBep9312\fR,
12236 \&\fBfa526\fR, \fBfa626\fR,
12237 \&\fBfa606te\fR, \fBfa626te\fR, \fBfmp626\fR, \fBfa726te\fR,
12238 \&\fBxgene1\fR.
12239 .Sp
12240 Additionally, this option can specify that \s-1GCC\s0 should tune the performance
12241 of the code for a big.LITTLE system.  Permissible names are:
12242 \&\fBcortex\-a15.cortex\-a7\fR, \fBcortex\-a57.cortex\-a53\fR,
12243 \&\fBcortex\-a72.cortex\-a53\fR.
12244 .Sp
12245 \&\fB\-mtune=generic\-\fR\fIarch\fR specifies that \s-1GCC\s0 should tune the
12246 performance for a blend of processors within architecture \fIarch\fR.
12247 The aim is to generate code that run well on the current most popular
12248 processors, balancing between optimizations that benefit some CPUs in the
12249 range, and avoiding performance pitfalls of other CPUs.  The effects of
12250 this option may change in future \s-1GCC\s0 versions as \s-1CPU\s0 models come and go.
12251 .Sp
12252 \&\fB\-mtune=native\fR causes the compiler to auto-detect the \s-1CPU\s0
12253 of the build computer.  At present, this feature is only supported on
12254 GNU/Linux, and not all architectures are recognized.  If the auto-detect is
12255 unsuccessful the option has no effect.
12256 .IP "\fB\-mcpu=\fR\fIname\fR" 4
12257 .IX Item "-mcpu=name"
12258 This specifies the name of the target \s-1ARM\s0 processor.  \s-1GCC\s0 uses this name
12259 to derive the name of the target \s-1ARM\s0 architecture (as if specified
12260 by \fB\-march\fR) and the \s-1ARM\s0 processor type for which to tune for
12261 performance (as if specified by \fB\-mtune\fR).  Where this option
12262 is used in conjunction with \fB\-march\fR or \fB\-mtune\fR,
12263 those options take precedence over the appropriate part of this option.
12264 .Sp
12265 Permissible names for this option are the same as those for
12266 \&\fB\-mtune\fR.
12267 .Sp
12268 \&\fB\-mcpu=generic\-\fR\fIarch\fR is also permissible, and is
12269 equivalent to \fB\-march=\fR\fIarch\fR \fB\-mtune=generic\-\fR\fIarch\fR.
12270 See \fB\-mtune\fR for more information.
12271 .Sp
12272 \&\fB\-mcpu=native\fR causes the compiler to auto-detect the \s-1CPU\s0
12273 of the build computer.  At present, this feature is only supported on
12274 GNU/Linux, and not all architectures are recognized.  If the auto-detect
12275 is unsuccessful the option has no effect.
12276 .IP "\fB\-mfpu=\fR\fIname\fR" 4
12277 .IX Item "-mfpu=name"
12278 This specifies what floating-point hardware (or hardware emulation) is
12279 available on the target.  Permissible names are: \fBvfp\fR, \fBvfpv3\fR,
12280 \&\fBvfpv3\-fp16\fR, \fBvfpv3\-d16\fR, \fBvfpv3\-d16\-fp16\fR, \fBvfpv3xd\fR,
12281 \&\fBvfpv3xd\-fp16\fR, \fBneon\fR, \fBneon\-fp16\fR, \fBvfpv4\fR,
12282 \&\fBvfpv4\-d16\fR, \fBfpv4\-sp\-d16\fR, \fBneon\-vfpv4\fR,
12283 \&\fBfpv5\-d16\fR, \fBfpv5\-sp\-d16\fR,
12284 \&\fBfp\-armv8\fR, \fBneon\-fp\-armv8\fR, and \fBcrypto\-neon\-fp\-armv8\fR.
12285 .Sp
12286 If \fB\-msoft\-float\fR is specified this specifies the format of
12287 floating-point values.
12288 .Sp
12289 If the selected floating-point hardware includes the \s-1NEON\s0 extension
12290 (e.g. \fB\-mfpu\fR=\fBneon\fR), note that floating-point
12291 operations are not generated by \s-1GCC\s0's auto-vectorization pass unless
12292 \&\fB\-funsafe\-math\-optimizations\fR is also specified.  This is
12293 because \s-1NEON\s0 hardware does not fully implement the \s-1IEEE\s0 754 standard for
12294 floating-point arithmetic (in particular denormal values are treated as
12295 zero), so the use of \s-1NEON\s0 instructions may lead to a loss of precision.
12296 .IP "\fB\-mfp16\-format=\fR\fIname\fR" 4
12297 .IX Item "-mfp16-format=name"
12298 Specify the format of the \f(CW\*(C`_\|_fp16\*(C'\fR half-precision floating-point type.
12299 Permissible names are \fBnone\fR, \fBieee\fR, and \fBalternative\fR;
12300 the default is \fBnone\fR, in which case the \f(CW\*(C`_\|_fp16\*(C'\fR type is not
12301 defined.
12302 .IP "\fB\-mstructure\-size\-boundary=\fR\fIn\fR" 4
12303 .IX Item "-mstructure-size-boundary=n"
12304 The sizes of all structures and unions are rounded up to a multiple
12305 of the number of bits set by this option.  Permissible values are 8, 32
12306 and 64.  The default value varies for different toolchains.  For the \s-1COFF\s0
12307 targeted toolchain the default value is 8.  A value of 64 is only allowed
12308 if the underlying \s-1ABI\s0 supports it.
12309 .Sp
12310 Specifying a larger number can produce faster, more efficient code, but
12311 can also increase the size of the program.  Different values are potentially
12312 incompatible.  Code compiled with one value cannot necessarily expect to
12313 work with code or libraries compiled with another value, if they exchange
12314 information using structures or unions.
12315 .IP "\fB\-mabort\-on\-noreturn\fR" 4
12316 .IX Item "-mabort-on-noreturn"
12317 Generate a call to the function \f(CW\*(C`abort\*(C'\fR at the end of a
12318 \&\f(CW\*(C`noreturn\*(C'\fR function.  It is executed if the function tries to
12319 return.
12320 .IP "\fB\-mlong\-calls\fR" 4
12321 .IX Item "-mlong-calls"
12322 .PD 0
12323 .IP "\fB\-mno\-long\-calls\fR" 4
12324 .IX Item "-mno-long-calls"
12325 .PD
12326 Tells the compiler to perform function calls by first loading the
12327 address of the function into a register and then performing a subroutine
12328 call on this register.  This switch is needed if the target function
12329 lies outside of the 64\-megabyte addressing range of the offset-based
12330 version of subroutine call instruction.
12331 .Sp
12332 Even if this switch is enabled, not all function calls are turned
12333 into long calls.  The heuristic is that static functions, functions
12334 that have the \f(CW\*(C`short_call\*(C'\fR attribute, functions that are inside
12335 the scope of a \f(CW\*(C`#pragma no_long_calls\*(C'\fR directive, and functions whose
12336 definitions have already been compiled within the current compilation
12337 unit are not turned into long calls.  The exceptions to this rule are
12338 that weak function definitions, functions with the \f(CW\*(C`long_call\*(C'\fR
12339 attribute or the \f(CW\*(C`section\*(C'\fR attribute, and functions that are within
12340 the scope of a \f(CW\*(C`#pragma long_calls\*(C'\fR directive are always
12341 turned into long calls.
12342 .Sp
12343 This feature is not enabled by default.  Specifying
12344 \&\fB\-mno\-long\-calls\fR restores the default behavior, as does
12345 placing the function calls within the scope of a \f(CW\*(C`#pragma
12346 long_calls_off\*(C'\fR directive.  Note these switches have no effect on how
12347 the compiler generates code to handle function calls via function
12348 pointers.
12349 .IP "\fB\-msingle\-pic\-base\fR" 4
12350 .IX Item "-msingle-pic-base"
12351 Treat the register used for \s-1PIC\s0 addressing as read-only, rather than
12352 loading it in the prologue for each function.  The runtime system is
12353 responsible for initializing this register with an appropriate value
12354 before execution begins.
12355 .IP "\fB\-mpic\-register=\fR\fIreg\fR" 4
12356 .IX Item "-mpic-register=reg"
12357 Specify the register to be used for \s-1PIC\s0 addressing.
12358 For standard \s-1PIC\s0 base case, the default is any suitable register
12359 determined by compiler.  For single \s-1PIC\s0 base case, the default is
12360 \&\fBR9\fR if target is \s-1EABI\s0 based or stack-checking is enabled,
12361 otherwise the default is \fBR10\fR.
12362 .IP "\fB\-mpic\-data\-is\-text\-relative\fR" 4
12363 .IX Item "-mpic-data-is-text-relative"
12364 Assume that each data segments are relative to text segment at load time.
12365 Therefore, it permits addressing data using PC-relative operations.
12366 This option is on by default for targets other than VxWorks \s-1RTP\s0.
12367 .IP "\fB\-mpoke\-function\-name\fR" 4
12368 .IX Item "-mpoke-function-name"
12369 Write the name of each function into the text section, directly
12370 preceding the function prologue.  The generated code is similar to this:
12371 .Sp
12372 .Vb 9
12373 \&             t0
12374 \&                 .ascii "arm_poke_function_name", 0
12375 \&                 .align
12376 \&             t1
12377 \&                 .word 0xff000000 + (t1 \- t0)
12378 \&             arm_poke_function_name
12379 \&                 mov     ip, sp
12380 \&                 stmfd   sp!, {fp, ip, lr, pc}
12381 \&                 sub     fp, ip, #4
12382 .Ve
12383 .Sp
12384 When performing a stack backtrace, code can inspect the value of
12385 \&\f(CW\*(C`pc\*(C'\fR stored at \f(CW\*(C`fp + 0\*(C'\fR.  If the trace function then looks at
12386 location \f(CW\*(C`pc \- 12\*(C'\fR and the top 8 bits are set, then we know that
12387 there is a function name embedded immediately preceding this location
12388 and has length \f(CW\*(C`((pc[\-3]) & 0xff000000)\*(C'\fR.
12389 .IP "\fB\-mthumb\fR" 4
12390 .IX Item "-mthumb"
12391 .PD 0
12392 .IP "\fB\-marm\fR" 4
12393 .IX Item "-marm"
12394 .PD
12395 Select between generating code that executes in \s-1ARM\s0 and Thumb
12396 states.  The default for most configurations is to generate code
12397 that executes in \s-1ARM\s0 state, but the default can be changed by
12398 configuring \s-1GCC\s0 with the \fB\-\-with\-mode=\fR\fIstate\fR
12399 configure option.
12400 .IP "\fB\-mtpcs\-frame\fR" 4
12401 .IX Item "-mtpcs-frame"
12402 Generate a stack frame that is compliant with the Thumb Procedure Call
12403 Standard for all non-leaf functions.  (A leaf function is one that does
12404 not call any other functions.)  The default is \fB\-mno\-tpcs\-frame\fR.
12405 .IP "\fB\-mtpcs\-leaf\-frame\fR" 4
12406 .IX Item "-mtpcs-leaf-frame"
12407 Generate a stack frame that is compliant with the Thumb Procedure Call
12408 Standard for all leaf functions.  (A leaf function is one that does
12409 not call any other functions.)  The default is \fB\-mno\-apcs\-leaf\-frame\fR.
12410 .IP "\fB\-mcallee\-super\-interworking\fR" 4
12411 .IX Item "-mcallee-super-interworking"
12412 Gives all externally visible functions in the file being compiled an \s-1ARM\s0
12413 instruction set header which switches to Thumb mode before executing the
12414 rest of the function.  This allows these functions to be called from
12415 non-interworking code.  This option is not valid in \s-1AAPCS\s0 configurations
12416 because interworking is enabled by default.
12417 .IP "\fB\-mcaller\-super\-interworking\fR" 4
12418 .IX Item "-mcaller-super-interworking"
12419 Allows calls via function pointers (including virtual functions) to
12420 execute correctly regardless of whether the target code has been
12421 compiled for interworking or not.  There is a small overhead in the cost
12422 of executing a function pointer if this option is enabled.  This option
12423 is not valid in \s-1AAPCS\s0 configurations because interworking is enabled
12424 by default.
12425 .IP "\fB\-mtp=\fR\fIname\fR" 4
12426 .IX Item "-mtp=name"
12427 Specify the access model for the thread local storage pointer.  The valid
12428 models are \fBsoft\fR, which generates calls to \f(CW\*(C`_\|_aeabi_read_tp\*(C'\fR,
12429 \&\fBcp15\fR, which fetches the thread pointer from \f(CW\*(C`cp15\*(C'\fR directly
12430 (supported in the arm6k architecture), and \fBauto\fR, which uses the
12431 best available method for the selected processor.  The default setting is
12432 \&\fBauto\fR.
12433 .IP "\fB\-mtls\-dialect=\fR\fIdialect\fR" 4
12434 .IX Item "-mtls-dialect=dialect"
12435 Specify the dialect to use for accessing thread local storage.  Two
12436 \&\fIdialect\fRs are supported\-\-\-\fBgnu\fR and \fBgnu2\fR.  The
12437 \&\fBgnu\fR dialect selects the original \s-1GNU\s0 scheme for supporting
12438 local and global dynamic \s-1TLS\s0 models.  The \fBgnu2\fR dialect
12439 selects the \s-1GNU\s0 descriptor scheme, which provides better performance
12440 for shared libraries.  The \s-1GNU\s0 descriptor scheme is compatible with
12441 the original scheme, but does require new assembler, linker and
12442 library support.  Initial and local exec \s-1TLS\s0 models are unaffected by
12443 this option and always use the original scheme.
12444 .IP "\fB\-mword\-relocations\fR" 4
12445 .IX Item "-mword-relocations"
12446 Only generate absolute relocations on word-sized values (i.e. R_ARM_ABS32).
12447 This is enabled by default on targets (uClinux, SymbianOS) where the runtime
12448 loader imposes this restriction, and when \fB\-fpic\fR or \fB\-fPIC\fR
12449 is specified.
12450 .IP "\fB\-mfix\-cortex\-m3\-ldrd\fR" 4
12451 .IX Item "-mfix-cortex-m3-ldrd"
12452 Some Cortex\-M3 cores can cause data corruption when \f(CW\*(C`ldrd\*(C'\fR instructions
12453 with overlapping destination and base registers are used.  This option avoids
12454 generating these instructions.  This option is enabled by default when
12455 \&\fB\-mcpu=cortex\-m3\fR is specified.
12456 .IP "\fB\-munaligned\-access\fR" 4
12457 .IX Item "-munaligned-access"
12458 .PD 0
12459 .IP "\fB\-mno\-unaligned\-access\fR" 4
12460 .IX Item "-mno-unaligned-access"
12461 .PD
12462 Enables (or disables) reading and writing of 16\- and 32\- bit values
12463 from addresses that are not 16\- or 32\- bit aligned.  By default
12464 unaligned access is disabled for all pre\-ARMv6 and all ARMv6\-M
12465 architectures, and enabled for all other architectures.  If unaligned
12466 access is not enabled then words in packed data structures are
12467 accessed a byte at a time.
12468 .Sp
12469 The \s-1ARM\s0 attribute \f(CW\*(C`Tag_CPU_unaligned_access\*(C'\fR is set in the
12470 generated object file to either true or false, depending upon the
12471 setting of this option.  If unaligned access is enabled then the
12472 preprocessor symbol \f(CW\*(C`_\|_ARM_FEATURE_UNALIGNED\*(C'\fR is also
12473 defined.
12474 .IP "\fB\-mneon\-for\-64bits\fR" 4
12475 .IX Item "-mneon-for-64bits"
12476 Enables using Neon to handle scalar 64\-bits operations. This is
12477 disabled by default since the cost of moving data from core registers
12478 to Neon is high.
12479 .IP "\fB\-mslow\-flash\-data\fR" 4
12480 .IX Item "-mslow-flash-data"
12481 Assume loading data from flash is slower than fetching instruction.
12482 Therefore literal load is minimized for better performance.
12483 This option is only supported when compiling for ARMv7 M\-profile and
12484 off by default.
12485 .IP "\fB\-masm\-syntax\-unified\fR" 4
12486 .IX Item "-masm-syntax-unified"
12487 Assume inline assembler is using unified asm syntax.  The default is
12488 currently off which implies divided syntax.  Currently this option is
12489 available only for Thumb1 and has no effect on \s-1ARM\s0 state and Thumb2.
12490 However, this may change in future releases of \s-1GCC\s0.  Divided syntax
12491 should be considered deprecated.
12492 .IP "\fB\-mrestrict\-it\fR" 4
12493 .IX Item "-mrestrict-it"
12494 Restricts generation of \s-1IT\s0 blocks to conform to the rules of ARMv8.
12495 \&\s-1IT\s0 blocks can only contain a single 16\-bit instruction from a select
12496 set of instructions. This option is on by default for ARMv8 Thumb mode.
12497 .IP "\fB\-mprint\-tune\-info\fR" 4
12498 .IX Item "-mprint-tune-info"
12499 Print \s-1CPU\s0 tuning information as comment in assembler file.  This is
12500 an option used only for regression testing of the compiler and not
12501 intended for ordinary use in compiling code.  This option is disabled
12502 by default.
12503 .PP
12504 \fI\s-1AVR\s0 Options\fR
12505 .IX Subsection "AVR Options"
12506 .PP
12507 These options are defined for \s-1AVR\s0 implementations:
12508 .IP "\fB\-mmcu=\fR\fImcu\fR" 4
12509 .IX Item "-mmcu=mcu"
12510 Specify Atmel \s-1AVR\s0 instruction set architectures (\s-1ISA\s0) or \s-1MCU\s0 type.
12511 .Sp
12512 The default for this option is@tie{}\fBavr2\fR.
12513 .Sp
12514 \&\s-1GCC\s0 supports the following \s-1AVR\s0 devices and ISAs:
12515 .RS 4
12516 .ie n .IP """avr2""" 4
12517 .el .IP "\f(CWavr2\fR" 4
12518 .IX Item "avr2"
12519 \&\*(L"Classic\*(R" devices with up to 8@tie{}KiB of program memory.
12520 \&\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.
12521 .ie n .IP """avr25""" 4
12522 .el .IP "\f(CWavr25\fR" 4
12523 .IX Item "avr25"
12524 \&\*(L"Classic\*(R" devices with up to 8@tie{}KiB of program memory and with the \f(CW\*(C`MOVW\*(C'\fR instruction.
12525 \&\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.
12526 .ie n .IP """avr3""" 4
12527 .el .IP "\f(CWavr3\fR" 4
12528 .IX Item "avr3"
12529 \&\*(L"Classic\*(R" devices with 16@tie{}KiB up to 64@tie{}KiB of  program memory.
12530 \&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`at43usb355\*(C'\fR, \f(CW\*(C`at76c711\*(C'\fR.
12531 .ie n .IP """avr31""" 4
12532 .el .IP "\f(CWavr31\fR" 4
12533 .IX Item "avr31"
12534 \&\*(L"Classic\*(R" devices with 128@tie{}KiB of program memory.
12535 \&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`atmega103\*(C'\fR, \f(CW\*(C`at43usb320\*(C'\fR.
12536 .ie n .IP """avr35""" 4
12537 .el .IP "\f(CWavr35\fR" 4
12538 .IX Item "avr35"
12539 \&\*(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.
12540 \&\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.
12541 .ie n .IP """avr4""" 4
12542 .el .IP "\f(CWavr4\fR" 4
12543 .IX Item "avr4"
12544 \&\*(L"Enhanced\*(R" devices with up to 8@tie{}KiB of program memory.
12545 \&\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.
12546 .ie n .IP """avr5""" 4
12547 .el .IP "\f(CWavr5\fR" 4
12548 .IX Item "avr5"
12549 \&\*(L"Enhanced\*(R" devices with 16@tie{}KiB up to 64@tie{}KiB of program memory.
12550 \&\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.
12551 .ie n .IP """avr51""" 4
12552 .el .IP "\f(CWavr51\fR" 4
12553 .IX Item "avr51"
12554 \&\*(L"Enhanced\*(R" devices with 128@tie{}KiB of program memory.
12555 \&\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.
12556 .ie n .IP """avr6""" 4
12557 .el .IP "\f(CWavr6\fR" 4
12558 .IX Item "avr6"
12559 \&\*(L"Enhanced\*(R" devices with 3\-byte \s-1PC\s0, i.e. with more than 128@tie{}KiB of program memory.
12560 \&\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.
12561 .ie n .IP """avrxmega2""" 4
12562 .el .IP "\f(CWavrxmega2\fR" 4
12563 .IX Item "avrxmega2"
12564 \&\*(L"\s-1XMEGA\s0\*(R" devices with more than 8@tie{}KiB and up to 64@tie{}KiB of program memory.
12565 \&\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.
12566 .ie n .IP """avrxmega4""" 4
12567 .el .IP "\f(CWavrxmega4\fR" 4
12568 .IX Item "avrxmega4"
12569 \&\*(L"\s-1XMEGA\s0\*(R" devices with more than 64@tie{}KiB and up to 128@tie{}KiB of program memory.
12570 \&\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.
12571 .ie n .IP """avrxmega5""" 4
12572 .el .IP "\f(CWavrxmega5\fR" 4
12573 .IX Item "avrxmega5"
12574 \&\*(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.
12575 \&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`atxmega64a1\*(C'\fR, \f(CW\*(C`atxmega64a1u\*(C'\fR.
12576 .ie n .IP """avrxmega6""" 4
12577 .el .IP "\f(CWavrxmega6\fR" 4
12578 .IX Item "avrxmega6"
12579 \&\*(L"\s-1XMEGA\s0\*(R" devices with more than 128@tie{}KiB of program memory.
12580 \&\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.
12581 .ie n .IP """avrxmega7""" 4
12582 .el .IP "\f(CWavrxmega7\fR" 4
12583 .IX Item "avrxmega7"
12584 \&\*(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.
12585 \&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`atxmega128a1\*(C'\fR, \f(CW\*(C`atxmega128a1u\*(C'\fR, \f(CW\*(C`atxmega128a4u\*(C'\fR.
12586 .ie n .IP """avrtiny""" 4
12587 .el .IP "\f(CWavrtiny\fR" 4
12588 .IX Item "avrtiny"
12589 \&\*(L"\s-1TINY\s0\*(R" Tiny core devices with 512@tie{}B up to 4@tie{}KiB of program memory.
12590 \&\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.
12591 .ie n .IP """avr1""" 4
12592 .el .IP "\f(CWavr1\fR" 4
12593 .IX Item "avr1"
12594 This \s-1ISA\s0 is implemented by the minimal \s-1AVR\s0 core and supported for assembler only.
12595 \&\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.
12596 .RE
12597 .RS 4
12598 .RE
12599 .IP "\fB\-maccumulate\-args\fR" 4
12600 .IX Item "-maccumulate-args"
12601 Accumulate outgoing function arguments and acquire/release the needed
12602 stack space for outgoing function arguments once in function
12603 prologue/epilogue.  Without this option, outgoing arguments are pushed
12604 before calling a function and popped afterwards.
12605 .Sp
12606 Popping the arguments after the function call can be expensive on
12607 \&\s-1AVR\s0 so that accumulating the stack space might lead to smaller
12608 executables because arguments need not to be removed from the
12609 stack after such a function call.
12610 .Sp
12611 This option can lead to reduced code size for functions that perform
12612 several calls to functions that get their arguments on the stack like
12613 calls to printf-like functions.
12614 .IP "\fB\-mbranch\-cost=\fR\fIcost\fR" 4
12615 .IX Item "-mbranch-cost=cost"
12616 Set the branch costs for conditional branch instructions to
12617 \&\fIcost\fR.  Reasonable values for \fIcost\fR are small, non-negative
12618 integers. The default branch cost is 0.
12619 .IP "\fB\-mcall\-prologues\fR" 4
12620 .IX Item "-mcall-prologues"
12621 Functions prologues/epilogues are expanded as calls to appropriate
12622 subroutines.  Code size is smaller.
12623 .IP "\fB\-mint8\fR" 4
12624 .IX Item "-mint8"
12625 Assume \f(CW\*(C`int\*(C'\fR to be 8\-bit integer.  This affects the sizes of all types: a
12626 \&\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,
12627 and \f(CW\*(C`long long\*(C'\fR is 4 bytes.  Please note that this option does not
12628 conform to the C standards, but it results in smaller code
12629 size.
12630 .IP "\fB\-mn\-flash=\fR\fInum\fR" 4
12631 .IX Item "-mn-flash=num"
12632 Assume that the flash memory has a size of 
12633 \&\fInum\fR times 64@tie{}KiB.
12634 .IP "\fB\-mno\-interrupts\fR" 4
12635 .IX Item "-mno-interrupts"
12636 Generated code is not compatible with hardware interrupts.
12637 Code size is smaller.
12638 .IP "\fB\-mrelax\fR" 4
12639 .IX Item "-mrelax"
12640 Try to replace \f(CW\*(C`CALL\*(C'\fR resp. \f(CW\*(C`JMP\*(C'\fR instruction by the shorter
12641 \&\f(CW\*(C`RCALL\*(C'\fR resp. \f(CW\*(C`RJMP\*(C'\fR instruction if applicable.
12642 Setting \fB\-mrelax\fR just adds the \fB\-\-mlink\-relax\fR option to
12643 the assembler's command line and the \fB\-\-relax\fR option to the
12644 linker's command line.
12645 .Sp
12646 Jump relaxing is performed by the linker because jump offsets are not
12647 known before code is located. Therefore, the assembler code generated by the
12648 compiler is the same, but the instructions in the executable may
12649 differ from instructions in the assembler code.
12650 .Sp
12651 Relaxing must be turned on if linker stubs are needed, see the
12652 section on \f(CW\*(C`EIND\*(C'\fR and linker stubs below.
12653 .IP "\fB\-mrmw\fR" 4
12654 .IX Item "-mrmw"
12655 Assume that the device supports the Read-Modify-Write
12656 instructions \f(CW\*(C`XCH\*(C'\fR, \f(CW\*(C`LAC\*(C'\fR, \f(CW\*(C`LAS\*(C'\fR and \f(CW\*(C`LAT\*(C'\fR.
12657 .IP "\fB\-msp8\fR" 4
12658 .IX Item "-msp8"
12659 Treat the stack pointer register as an 8\-bit register,
12660 i.e. assume the high byte of the stack pointer is zero.
12661 In general, you don't need to set this option by hand.
12662 .Sp
12663 This option is used internally by the compiler to select and
12664 build multilibs for architectures \f(CW\*(C`avr2\*(C'\fR and \f(CW\*(C`avr25\*(C'\fR.
12665 These architectures mix devices with and without \f(CW\*(C`SPH\*(C'\fR.
12666 For any setting other than \fB\-mmcu=avr2\fR or \fB\-mmcu=avr25\fR
12667 the compiler driver adds or removes this option from the compiler
12668 proper's command line, because the compiler then knows if the device
12669 or architecture has an 8\-bit stack pointer and thus no \f(CW\*(C`SPH\*(C'\fR
12670 register or not.
12671 .IP "\fB\-mstrict\-X\fR" 4
12672 .IX Item "-mstrict-X"
12673 Use address register \f(CW\*(C`X\*(C'\fR in a way proposed by the hardware.  This means
12674 that \f(CW\*(C`X\*(C'\fR is only used in indirect, post-increment or
12675 pre-decrement addressing.
12676 .Sp
12677 Without this option, the \f(CW\*(C`X\*(C'\fR register may be used in the same way
12678 as \f(CW\*(C`Y\*(C'\fR or \f(CW\*(C`Z\*(C'\fR which then is emulated by additional
12679 instructions.  
12680 For example, loading a value with \f(CW\*(C`X+const\*(C'\fR addressing with a
12681 small non-negative \f(CW\*(C`const < 64\*(C'\fR to a register \fIRn\fR is
12682 performed as
12683 .Sp
12684 .Vb 3
12685 \&        adiw r26, const   ; X += const
12686 \&        ld   <Rn>, X        ; <Rn> = *X
12687 \&        sbiw r26, const   ; X \-= const
12688 .Ve
12689 .IP "\fB\-mtiny\-stack\fR" 4
12690 .IX Item "-mtiny-stack"
12691 Only change the lower 8@tie{}bits of the stack pointer.
12692 .IP "\fB\-nodevicelib\fR" 4
12693 .IX Item "-nodevicelib"
12694 Don't link against AVR-LibC's device specific library \f(CW\*(C`libdev.a\*(C'\fR.
12695 .IP "\fB\-Waddr\-space\-convert\fR" 4
12696 .IX Item "-Waddr-space-convert"
12697 Warn about conversions between address spaces in the case where the
12698 resulting address space is not contained in the incoming address space.
12699 .PP
12700 \f(CW\*(C`EIND\*(C'\fR and Devices with More Than 128 Ki Bytes of Flash
12701 .IX Subsection "EIND and Devices with More Than 128 Ki Bytes of Flash"
12702 .PP
12703 Pointers in the implementation are 16@tie{}bits wide.
12704 The address of a function or label is represented as word address so
12705 that indirect jumps and calls can target any code address in the
12706 range of 64@tie{}Ki words.
12707 .PP
12708 In order to facilitate indirect jump on devices with more than 128@tie{}Ki
12709 bytes of program memory space, there is a special function register called
12710 \&\f(CW\*(C`EIND\*(C'\fR that serves as most significant part of the target address
12711 when \f(CW\*(C`EICALL\*(C'\fR or \f(CW\*(C`EIJMP\*(C'\fR instructions are used.
12712 .PP
12713 Indirect jumps and calls on these devices are handled as follows by
12714 the compiler and are subject to some limitations:
12715 .IP "*" 4
12716 The compiler never sets \f(CW\*(C`EIND\*(C'\fR.
12717 .IP "*" 4
12718 The compiler uses \f(CW\*(C`EIND\*(C'\fR implicitely in \f(CW\*(C`EICALL\*(C'\fR/\f(CW\*(C`EIJMP\*(C'\fR
12719 instructions or might read \f(CW\*(C`EIND\*(C'\fR directly in order to emulate an
12720 indirect call/jump by means of a \f(CW\*(C`RET\*(C'\fR instruction.
12721 .IP "*" 4
12722 The compiler assumes that \f(CW\*(C`EIND\*(C'\fR never changes during the startup
12723 code or during the application. In particular, \f(CW\*(C`EIND\*(C'\fR is not
12724 saved/restored in function or interrupt service routine
12725 prologue/epilogue.
12726 .IP "*" 4
12727 For indirect calls to functions and computed goto, the linker
12728 generates \fIstubs\fR. Stubs are jump pads sometimes also called
12729 \&\fItrampolines\fR. Thus, the indirect call/jump jumps to such a stub.
12730 The stub contains a direct jump to the desired address.
12731 .IP "*" 4
12732 Linker relaxation must be turned on so that the linker generates
12733 the stubs correctly in all situations. See the compiler option
12734 \&\fB\-mrelax\fR and the linker option \fB\-\-relax\fR.
12735 There are corner cases where the linker is supposed to generate stubs
12736 but aborts without relaxation and without a helpful error message.
12737 .IP "*" 4
12738 The default linker script is arranged for code with \f(CW\*(C`EIND = 0\*(C'\fR.
12739 If code is supposed to work for a setup with \f(CW\*(C`EIND != 0\*(C'\fR, a custom
12740 linker script has to be used in order to place the sections whose
12741 name start with \f(CW\*(C`.trampolines\*(C'\fR into the segment where \f(CW\*(C`EIND\*(C'\fR
12742 points to.
12743 .IP "*" 4
12744 The startup code from libgcc never sets \f(CW\*(C`EIND\*(C'\fR.
12745 Notice that startup code is a blend of code from libgcc and AVR-LibC.
12746 For the impact of AVR-LibC on \f(CW\*(C`EIND\*(C'\fR, see the
12747 AVR-LibC\ user\ manual (\f(CW\*(C`http://nongnu.org/avr\-libc/user\-manual/\*(C'\fR).
12748 .IP "*" 4
12749 It is legitimate for user-specific startup code to set up \f(CW\*(C`EIND\*(C'\fR
12750 early, for example by means of initialization code located in
12751 section \f(CW\*(C`.init3\*(C'\fR. Such code runs prior to general startup code
12752 that initializes \s-1RAM\s0 and calls constructors, but after the bit
12753 of startup code from AVR-LibC that sets \f(CW\*(C`EIND\*(C'\fR to the segment
12754 where the vector table is located.
12755 .Sp
12756 .Vb 1
12757 \&        #include <avr/io.h>
12758 \&        
12759 \&        static void
12760 \&        _\|_attribute_\|_((section(".init3"),naked,used,no_instrument_function))
12761 \&        init3_set_eind (void)
12762 \&        {
12763 \&          _\|_asm volatile ("ldi r24,pm_hh8(_\|_trampolines_start)\en\et"
12764 \&                          "out %i0,r24" :: "n" (&EIND) : "r24","memory");
12765 \&        }
12766 .Ve
12767 .Sp
12768 The \f(CW\*(C`_\|_trampolines_start\*(C'\fR symbol is defined in the linker script.
12769 .IP "*" 4
12770 Stubs are generated automatically by the linker if
12771 the following two conditions are met:
12772 .RS 4
12773 .ie n .IP "\-<The address of a label is taken by means of the ""gs"" modifier>" 4
12774 .el .IP "\-<The address of a label is taken by means of the \f(CWgs\fR modifier>" 4
12775 .IX Item "-<The address of a label is taken by means of the gs modifier>"
12776 (short for \fIgenerate stubs\fR) like so:
12777 .Sp
12778 .Vb 2
12779 \&        LDI r24, lo8(gs(<func>))
12780 \&        LDI r25, hi8(gs(<func>))
12781 .Ve
12782 .IP "\-<The final location of that label is in a code segment>" 4
12783 .IX Item "-<The final location of that label is in a code segment>"
12784 \&\fIoutside\fR the segment where the stubs are located.
12785 .RE
12786 .RS 4
12787 .RE
12788 .IP "*" 4
12789 The compiler emits such \f(CW\*(C`gs\*(C'\fR modifiers for code labels in the
12790 following situations:
12791 .RS 4
12792 .IP "\-<Taking address of a function or code label.>" 4
12793 .IX Item "-<Taking address of a function or code label.>"
12794 .PD 0
12795 .IP "\-<Computed goto.>" 4
12796 .IX Item "-<Computed goto.>"
12797 .IP "\-<If prologue-save function is used, see \fB\-mcall\-prologues\fR>" 4
12798 .IX Item "-<If prologue-save function is used, see -mcall-prologues>"
12799 .PD
12800 command-line option.
12801 .IP "\-<Switch/case dispatch tables. If you do not want such dispatch>" 4
12802 .IX Item "-<Switch/case dispatch tables. If you do not want such dispatch>"
12803 tables you can specify the \fB\-fno\-jump\-tables\fR command-line option.
12804 .IP "\-<C and \*(C+ constructors/destructors called during startup/shutdown.>" 4
12805 .IX Item "-<C and  constructors/destructors called during startup/shutdown.>"
12806 .PD 0
12807 .ie n .IP "\-<If the tools hit a ""gs()"" modifier explained above.>" 4
12808 .el .IP "\-<If the tools hit a \f(CWgs()\fR modifier explained above.>" 4
12809 .IX Item "-<If the tools hit a gs() modifier explained above.>"
12810 .RE
12811 .RS 4
12812 .RE
12813 .IP "*" 4
12814 .PD
12815 Jumping to non-symbolic addresses like so is \fInot\fR supported:
12816 .Sp
12817 .Vb 5
12818 \&        int main (void)
12819 \&        {
12820 \&            /* Call function at word address 0x2 */
12821 \&            return ((int(*)(void)) 0x2)();
12822 \&        }
12823 .Ve
12824 .Sp
12825 Instead, a stub has to be set up, i.e. the function has to be called
12826 through a symbol (\f(CW\*(C`func_4\*(C'\fR in the example):
12827 .Sp
12828 .Vb 3
12829 \&        int main (void)
12830 \&        {
12831 \&            extern int func_4 (void);
12832 \&        
12833 \&            /* Call function at byte address 0x4 */
12834 \&            return func_4();
12835 \&        }
12836 .Ve
12837 .Sp
12838 and the application be linked with \fB\-Wl,\-\-defsym,func_4=0x4\fR.
12839 Alternatively, \f(CW\*(C`func_4\*(C'\fR can be defined in the linker script.
12840 .PP
12841 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
12842 .IX Subsection "Handling of the RAMPD, RAMPX, RAMPY and RAMPZ Special Function Registers"
12843 .PP
12844 Some \s-1AVR\s0 devices support memories larger than the 64@tie{}KiB range
12845 that can be accessed with 16\-bit pointers.  To access memory locations
12846 outside this 64@tie{}KiB range, the contentent of a \f(CW\*(C`RAMP\*(C'\fR
12847 register is used as high part of the address:
12848 The \f(CW\*(C`X\*(C'\fR, \f(CW\*(C`Y\*(C'\fR, \f(CW\*(C`Z\*(C'\fR address register is concatenated
12849 with the \f(CW\*(C`RAMPX\*(C'\fR, \f(CW\*(C`RAMPY\*(C'\fR, \f(CW\*(C`RAMPZ\*(C'\fR special function
12850 register, respectively, to get a wide address. Similarly,
12851 \&\f(CW\*(C`RAMPD\*(C'\fR is used together with direct addressing.
12852 .IP "*" 4
12853 The startup code initializes the \f(CW\*(C`RAMP\*(C'\fR special function
12854 registers with zero.
12855 .IP "*" 4
12856 If a \fB\s-1AVR\s0 Named Address Spaces,named address space\fR other than
12857 generic or \f(CW\*(C`_\|_flash\*(C'\fR is used, then \f(CW\*(C`RAMPZ\*(C'\fR is set
12858 as needed before the operation.
12859 .IP "*" 4
12860 If the device supports \s-1RAM\s0 larger than 64@tie{}KiB and the compiler
12861 needs to change \f(CW\*(C`RAMPZ\*(C'\fR to accomplish an operation, \f(CW\*(C`RAMPZ\*(C'\fR
12862 is reset to zero after the operation.
12863 .IP "*" 4
12864 If the device comes with a specific \f(CW\*(C`RAMP\*(C'\fR register, the \s-1ISR\s0
12865 prologue/epilogue saves/restores that \s-1SFR\s0 and initializes it with
12866 zero in case the \s-1ISR\s0 code might (implicitly) use it.
12867 .IP "*" 4
12868 \&\s-1RAM\s0 larger than 64@tie{}KiB is not supported by \s-1GCC\s0 for \s-1AVR\s0 targets.
12869 If you use inline assembler to read from locations outside the
12870 16\-bit address range and change one of the \f(CW\*(C`RAMP\*(C'\fR registers,
12871 you must reset it to zero after the access.
12872 .PP
12873 \s-1AVR\s0 Built-in Macros
12874 .IX Subsection "AVR Built-in Macros"
12875 .PP
12876 \&\s-1GCC\s0 defines several built-in macros so that the user code can test
12877 for the presence or absence of features.  Almost any of the following
12878 built-in macros are deduced from device capabilities and thus
12879 triggered by the \fB\-mmcu=\fR command-line option.
12880 .PP
12881 For even more AVR-specific built-in macros see
12882 \&\fB\s-1AVR\s0 Named Address Spaces\fR and \fB\s-1AVR\s0 Built-in Functions\fR.
12883 .ie n .IP """_\|_AVR_ARCH_\|_""" 4
12884 .el .IP "\f(CW_\|_AVR_ARCH_\|_\fR" 4
12885 .IX Item "__AVR_ARCH__"
12886 Build-in macro that resolves to a decimal number that identifies the
12887 architecture and depends on the \fB\-mmcu=\fR\fImcu\fR option.
12888 Possible values are:
12889 .Sp
12890 \&\f(CW2\fR, \f(CW25\fR, \f(CW3\fR, \f(CW31\fR, \f(CW35\fR,
12891 \&\f(CW4\fR, \f(CW5\fR, \f(CW51\fR, \f(CW6\fR
12892 .Sp
12893 for \fImcu\fR=\f(CW\*(C`avr2\*(C'\fR, \f(CW\*(C`avr25\*(C'\fR, \f(CW\*(C`avr3\*(C'\fR, \f(CW\*(C`avr31\*(C'\fR,
12894 \&\f(CW\*(C`avr35\*(C'\fR, \f(CW\*(C`avr4\*(C'\fR, \f(CW\*(C`avr5\*(C'\fR, \f(CW\*(C`avr51\*(C'\fR, \f(CW\*(C`avr6\*(C'\fR,
12895 .Sp
12896 respectively and
12897 .Sp
12898 \&\f(CW100\fR, \f(CW102\fR, \f(CW104\fR,
12899 \&\f(CW105\fR, \f(CW106\fR, \f(CW107\fR
12900 .Sp
12901 for \fImcu\fR=\f(CW\*(C`avrtiny\*(C'\fR, \f(CW\*(C`avrxmega2\*(C'\fR, \f(CW\*(C`avrxmega4\*(C'\fR,
12902 \&\f(CW\*(C`avrxmega5\*(C'\fR, \f(CW\*(C`avrxmega6\*(C'\fR, \f(CW\*(C`avrxmega7\*(C'\fR, respectively.
12903 If \fImcu\fR specifies a device, this built-in macro is set
12904 accordingly. For example, with \fB\-mmcu=atmega8\fR the macro is
12905 defined to \f(CW4\fR.
12906 .ie n .IP """_\|_AVR_\f(CIDevice\f(CW_\|_""" 4
12907 .el .IP "\f(CW_\|_AVR_\f(CIDevice\f(CW_\|_\fR" 4
12908 .IX Item "__AVR_Device__"
12909 Setting \fB\-mmcu=\fR\fIdevice\fR defines this built-in macro which reflects
12910 the device's name. For example, \fB\-mmcu=atmega8\fR defines the
12911 built-in macro \f(CW\*(C`_\|_AVR_ATmega8_\|_\*(C'\fR, \fB\-mmcu=attiny261a\fR defines
12912 \&\f(CW\*(C`_\|_AVR_ATtiny261A_\|_\*(C'\fR, etc.
12913 .Sp
12914 The built-in macros' names follow
12915 the scheme \f(CW\*(C`_\|_AVR_\f(CIDevice\f(CW_\|_\*(C'\fR where \fIDevice\fR is
12916 the device name as from the \s-1AVR\s0 user manual. The difference between
12917 \&\fIDevice\fR in the built-in macro and \fIdevice\fR in
12918 \&\fB\-mmcu=\fR\fIdevice\fR is that the latter is always lowercase.
12919 .Sp
12920 If \fIdevice\fR is not a device but only a core architecture like
12921 \&\fBavr51\fR, this macro is not defined.
12922 .ie n .IP """_\|_AVR_DEVICE_NAME_\|_""" 4
12923 .el .IP "\f(CW_\|_AVR_DEVICE_NAME_\|_\fR" 4
12924 .IX Item "__AVR_DEVICE_NAME__"
12925 Setting \fB\-mmcu=\fR\fIdevice\fR defines this built-in macro to
12926 the device's name. For example, with \fB\-mmcu=atmega8\fR the macro
12927 is defined to \f(CW\*(C`atmega8\*(C'\fR.
12928 .Sp
12929 If \fIdevice\fR is not a device but only a core architecture like
12930 \&\fBavr51\fR, this macro is not defined.
12931 .ie n .IP """_\|_AVR_XMEGA_\|_""" 4
12932 .el .IP "\f(CW_\|_AVR_XMEGA_\|_\fR" 4
12933 .IX Item "__AVR_XMEGA__"
12934 The device / architecture belongs to the \s-1XMEGA\s0 family of devices.
12935 .ie n .IP """_\|_AVR_HAVE_ELPM_\|_""" 4
12936 .el .IP "\f(CW_\|_AVR_HAVE_ELPM_\|_\fR" 4
12937 .IX Item "__AVR_HAVE_ELPM__"
12938 The device has the the \f(CW\*(C`ELPM\*(C'\fR instruction.
12939 .ie n .IP """_\|_AVR_HAVE_ELPMX_\|_""" 4
12940 .el .IP "\f(CW_\|_AVR_HAVE_ELPMX_\|_\fR" 4
12941 .IX Item "__AVR_HAVE_ELPMX__"
12942 The device has the \f(CW\*(C`ELPM R\f(CIn\f(CW,Z\*(C'\fR and \f(CW\*(C`ELPM
12943 R\f(CIn\f(CW,Z+\*(C'\fR instructions.
12944 .ie n .IP """_\|_AVR_HAVE_MOVW_\|_""" 4
12945 .el .IP "\f(CW_\|_AVR_HAVE_MOVW_\|_\fR" 4
12946 .IX Item "__AVR_HAVE_MOVW__"
12947 The device has the \f(CW\*(C`MOVW\*(C'\fR instruction to perform 16\-bit
12948 register-register moves.
12949 .ie n .IP """_\|_AVR_HAVE_LPMX_\|_""" 4
12950 .el .IP "\f(CW_\|_AVR_HAVE_LPMX_\|_\fR" 4
12951 .IX Item "__AVR_HAVE_LPMX__"
12952 The device has the \f(CW\*(C`LPM R\f(CIn\f(CW,Z\*(C'\fR and
12953 \&\f(CW\*(C`LPM R\f(CIn\f(CW,Z+\*(C'\fR instructions.
12954 .ie n .IP """_\|_AVR_HAVE_MUL_\|_""" 4
12955 .el .IP "\f(CW_\|_AVR_HAVE_MUL_\|_\fR" 4
12956 .IX Item "__AVR_HAVE_MUL__"
12957 The device has a hardware multiplier.
12958 .ie n .IP """_\|_AVR_HAVE_JMP_CALL_\|_""" 4
12959 .el .IP "\f(CW_\|_AVR_HAVE_JMP_CALL_\|_\fR" 4
12960 .IX Item "__AVR_HAVE_JMP_CALL__"
12961 The device has the \f(CW\*(C`JMP\*(C'\fR and \f(CW\*(C`CALL\*(C'\fR instructions.
12962 This is the case for devices with at least 16@tie{}KiB of program
12963 memory.
12964 .ie n .IP """_\|_AVR_HAVE_EIJMP_EICALL_\|_""" 4
12965 .el .IP "\f(CW_\|_AVR_HAVE_EIJMP_EICALL_\|_\fR" 4
12966 .IX Item "__AVR_HAVE_EIJMP_EICALL__"
12967 .PD 0
12968 .ie n .IP """_\|_AVR_3_BYTE_PC_\|_""" 4
12969 .el .IP "\f(CW_\|_AVR_3_BYTE_PC_\|_\fR" 4
12970 .IX Item "__AVR_3_BYTE_PC__"
12971 .PD
12972 The device has the \f(CW\*(C`EIJMP\*(C'\fR and \f(CW\*(C`EICALL\*(C'\fR instructions.
12973 This is the case for devices with more than 128@tie{}KiB of program memory.
12974 This also means that the program counter
12975 (\s-1PC\s0) is 3@tie{}bytes wide.
12976 .ie n .IP """_\|_AVR_2_BYTE_PC_\|_""" 4
12977 .el .IP "\f(CW_\|_AVR_2_BYTE_PC_\|_\fR" 4
12978 .IX Item "__AVR_2_BYTE_PC__"
12979 The program counter (\s-1PC\s0) is 2@tie{}bytes wide. This is the case for devices
12980 with up to 128@tie{}KiB of program memory.
12981 .ie n .IP """_\|_AVR_HAVE_8BIT_SP_\|_""" 4
12982 .el .IP "\f(CW_\|_AVR_HAVE_8BIT_SP_\|_\fR" 4
12983 .IX Item "__AVR_HAVE_8BIT_SP__"
12984 .PD 0
12985 .ie n .IP """_\|_AVR_HAVE_16BIT_SP_\|_""" 4
12986 .el .IP "\f(CW_\|_AVR_HAVE_16BIT_SP_\|_\fR" 4
12987 .IX Item "__AVR_HAVE_16BIT_SP__"
12988 .PD
12989 The stack pointer (\s-1SP\s0) register is treated as 8\-bit respectively
12990 16\-bit register by the compiler.
12991 The definition of these macros is affected by \fB\-mtiny\-stack\fR.
12992 .ie n .IP """_\|_AVR_HAVE_SPH_\|_""" 4
12993 .el .IP "\f(CW_\|_AVR_HAVE_SPH_\|_\fR" 4
12994 .IX Item "__AVR_HAVE_SPH__"
12995 .PD 0
12996 .ie n .IP """_\|_AVR_SP8_\|_""" 4
12997 .el .IP "\f(CW_\|_AVR_SP8_\|_\fR" 4
12998 .IX Item "__AVR_SP8__"
12999 .PD
13000 The device has the \s-1SPH\s0 (high part of stack pointer) special function
13001 register or has an 8\-bit stack pointer, respectively.
13002 The definition of these macros is affected by \fB\-mmcu=\fR and
13003 in the cases of \fB\-mmcu=avr2\fR and \fB\-mmcu=avr25\fR also
13004 by \fB\-msp8\fR.
13005 .ie n .IP """_\|_AVR_HAVE_RAMPD_\|_""" 4
13006 .el .IP "\f(CW_\|_AVR_HAVE_RAMPD_\|_\fR" 4
13007 .IX Item "__AVR_HAVE_RAMPD__"
13008 .PD 0
13009 .ie n .IP """_\|_AVR_HAVE_RAMPX_\|_""" 4
13010 .el .IP "\f(CW_\|_AVR_HAVE_RAMPX_\|_\fR" 4
13011 .IX Item "__AVR_HAVE_RAMPX__"
13012 .ie n .IP """_\|_AVR_HAVE_RAMPY_\|_""" 4
13013 .el .IP "\f(CW_\|_AVR_HAVE_RAMPY_\|_\fR" 4
13014 .IX Item "__AVR_HAVE_RAMPY__"
13015 .ie n .IP """_\|_AVR_HAVE_RAMPZ_\|_""" 4
13016 .el .IP "\f(CW_\|_AVR_HAVE_RAMPZ_\|_\fR" 4
13017 .IX Item "__AVR_HAVE_RAMPZ__"
13018 .PD
13019 The device has the \f(CW\*(C`RAMPD\*(C'\fR, \f(CW\*(C`RAMPX\*(C'\fR, \f(CW\*(C`RAMPY\*(C'\fR,
13020 \&\f(CW\*(C`RAMPZ\*(C'\fR special function register, respectively.
13021 .ie n .IP """_\|_NO_INTERRUPTS_\|_""" 4
13022 .el .IP "\f(CW_\|_NO_INTERRUPTS_\|_\fR" 4
13023 .IX Item "__NO_INTERRUPTS__"
13024 This macro reflects the \fB\-mno\-interrupts\fR command-line option.
13025 .ie n .IP """_\|_AVR_ERRATA_SKIP_\|_""" 4
13026 .el .IP "\f(CW_\|_AVR_ERRATA_SKIP_\|_\fR" 4
13027 .IX Item "__AVR_ERRATA_SKIP__"
13028 .PD 0
13029 .ie n .IP """_\|_AVR_ERRATA_SKIP_JMP_CALL_\|_""" 4
13030 .el .IP "\f(CW_\|_AVR_ERRATA_SKIP_JMP_CALL_\|_\fR" 4
13031 .IX Item "__AVR_ERRATA_SKIP_JMP_CALL__"
13032 .PD
13033 Some \s-1AVR\s0 devices (\s-1AT90S8515\s0, ATmega103) must not skip 32\-bit
13034 instructions because of a hardware erratum.  Skip instructions are
13035 \&\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.
13036 The second macro is only defined if \f(CW\*(C`_\|_AVR_HAVE_JMP_CALL_\|_\*(C'\fR is also
13037 set.
13038 .ie n .IP """_\|_AVR_ISA_RMW_\|_""" 4
13039 .el .IP "\f(CW_\|_AVR_ISA_RMW_\|_\fR" 4
13040 .IX Item "__AVR_ISA_RMW__"
13041 The device has Read-Modify-Write instructions (\s-1XCH\s0, \s-1LAC\s0, \s-1LAS\s0 and \s-1LAT\s0).
13042 .ie n .IP """_\|_AVR_SFR_OFFSET_\|_=\f(CIoffset\f(CW""" 4
13043 .el .IP "\f(CW_\|_AVR_SFR_OFFSET_\|_=\f(CIoffset\f(CW\fR" 4
13044 .IX Item "__AVR_SFR_OFFSET__=offset"
13045 Instructions that can address I/O special function registers directly
13046 like \f(CW\*(C`IN\*(C'\fR, \f(CW\*(C`OUT\*(C'\fR, \f(CW\*(C`SBI\*(C'\fR, etc. may use a different
13047 address as if addressed by an instruction to access \s-1RAM\s0 like \f(CW\*(C`LD\*(C'\fR
13048 or \f(CW\*(C`STS\*(C'\fR. This offset depends on the device architecture and has
13049 to be subtracted from the \s-1RAM\s0 address in order to get the
13050 respective I/O@tie{}address.
13051 .ie n .IP """_\|_WITH_AVRLIBC_\|_""" 4
13052 .el .IP "\f(CW_\|_WITH_AVRLIBC_\|_\fR" 4
13053 .IX Item "__WITH_AVRLIBC__"
13054 The compiler is configured to be used together with AVR-Libc.
13055 See the \fB\-\-with\-avrlibc\fR configure option.
13056 .PP
13057 \fIBlackfin Options\fR
13058 .IX Subsection "Blackfin Options"
13059 .IP "\fB\-mcpu=\fR\fIcpu\fR[\fB\-\fR\fIsirevision\fR]" 4
13060 .IX Item "-mcpu=cpu[-sirevision]"
13061 Specifies the name of the target Blackfin processor.  Currently, \fIcpu\fR
13062 can be one of \fBbf512\fR, \fBbf514\fR, \fBbf516\fR, \fBbf518\fR,
13063 \&\fBbf522\fR, \fBbf523\fR, \fBbf524\fR, \fBbf525\fR, \fBbf526\fR,
13064 \&\fBbf527\fR, \fBbf531\fR, \fBbf532\fR, \fBbf533\fR,
13065 \&\fBbf534\fR, \fBbf536\fR, \fBbf537\fR, \fBbf538\fR, \fBbf539\fR,
13066 \&\fBbf542\fR, \fBbf544\fR, \fBbf547\fR, \fBbf548\fR, \fBbf549\fR,
13067 \&\fBbf542m\fR, \fBbf544m\fR, \fBbf547m\fR, \fBbf548m\fR, \fBbf549m\fR,
13068 \&\fBbf561\fR, \fBbf592\fR.
13069 .Sp
13070 The optional \fIsirevision\fR specifies the silicon revision of the target
13071 Blackfin processor.  Any workarounds available for the targeted silicon revision
13072 are enabled.  If \fIsirevision\fR is \fBnone\fR, no workarounds are enabled.
13073 If \fIsirevision\fR is \fBany\fR, all workarounds for the targeted processor
13074 are enabled.  The \f(CW\*(C`_\|_SILICON_REVISION_\|_\*(C'\fR macro is defined to two
13075 hexadecimal digits representing the major and minor numbers in the silicon
13076 revision.  If \fIsirevision\fR is \fBnone\fR, the \f(CW\*(C`_\|_SILICON_REVISION_\|_\*(C'\fR
13077 is not defined.  If \fIsirevision\fR is \fBany\fR, the
13078 \&\f(CW\*(C`_\|_SILICON_REVISION_\|_\*(C'\fR is defined to be \f(CW0xffff\fR.
13079 If this optional \fIsirevision\fR is not used, \s-1GCC\s0 assumes the latest known
13080 silicon revision of the targeted Blackfin processor.
13081 .Sp
13082 \&\s-1GCC\s0 defines a preprocessor macro for the specified \fIcpu\fR.
13083 For the \fBbfin-elf\fR toolchain, this option causes the hardware \s-1BSP\s0
13084 provided by libgloss to be linked in if \fB\-msim\fR is not given.
13085 .Sp
13086 Without this option, \fBbf532\fR is used as the processor by default.
13087 .Sp
13088 Note that support for \fBbf561\fR is incomplete.  For \fBbf561\fR,
13089 only the preprocessor macro is defined.
13090 .IP "\fB\-msim\fR" 4
13091 .IX Item "-msim"
13092 Specifies that the program will be run on the simulator.  This causes
13093 the simulator \s-1BSP\s0 provided by libgloss to be linked in.  This option
13094 has effect only for \fBbfin-elf\fR toolchain.
13095 Certain other options, such as \fB\-mid\-shared\-library\fR and
13096 \&\fB\-mfdpic\fR, imply \fB\-msim\fR.
13097 .IP "\fB\-momit\-leaf\-frame\-pointer\fR" 4
13098 .IX Item "-momit-leaf-frame-pointer"
13099 Don't keep the frame pointer in a register for leaf functions.  This
13100 avoids the instructions to save, set up and restore frame pointers and
13101 makes an extra register available in leaf functions.  The option
13102 \&\fB\-fomit\-frame\-pointer\fR removes the frame pointer for all functions,
13103 which might make debugging harder.
13104 .IP "\fB\-mspecld\-anomaly\fR" 4
13105 .IX Item "-mspecld-anomaly"
13106 When enabled, the compiler ensures that the generated code does not
13107 contain speculative loads after jump instructions. If this option is used,
13108 \&\f(CW\*(C`_\|_WORKAROUND_SPECULATIVE_LOADS\*(C'\fR is defined.
13109 .IP "\fB\-mno\-specld\-anomaly\fR" 4
13110 .IX Item "-mno-specld-anomaly"
13111 Don't generate extra code to prevent speculative loads from occurring.
13112 .IP "\fB\-mcsync\-anomaly\fR" 4
13113 .IX Item "-mcsync-anomaly"
13114 When enabled, the compiler ensures that the generated code does not
13115 contain \s-1CSYNC\s0 or \s-1SSYNC\s0 instructions too soon after conditional branches.
13116 If this option is used, \f(CW\*(C`_\|_WORKAROUND_SPECULATIVE_SYNCS\*(C'\fR is defined.
13117 .IP "\fB\-mno\-csync\-anomaly\fR" 4
13118 .IX Item "-mno-csync-anomaly"
13119 Don't generate extra code to prevent \s-1CSYNC\s0 or \s-1SSYNC\s0 instructions from
13120 occurring too soon after a conditional branch.
13121 .IP "\fB\-mlow\-64k\fR" 4
13122 .IX Item "-mlow-64k"
13123 When enabled, the compiler is free to take advantage of the knowledge that
13124 the entire program fits into the low 64k of memory.
13125 .IP "\fB\-mno\-low\-64k\fR" 4
13126 .IX Item "-mno-low-64k"
13127 Assume that the program is arbitrarily large.  This is the default.
13128 .IP "\fB\-mstack\-check\-l1\fR" 4
13129 .IX Item "-mstack-check-l1"
13130 Do stack checking using information placed into L1 scratchpad memory by the
13131 uClinux kernel.
13132 .IP "\fB\-mid\-shared\-library\fR" 4
13133 .IX Item "-mid-shared-library"
13134 Generate code that supports shared libraries via the library \s-1ID\s0 method.
13135 This allows for execute in place and shared libraries in an environment
13136 without virtual memory management.  This option implies \fB\-fPIC\fR.
13137 With a \fBbfin-elf\fR target, this option implies \fB\-msim\fR.
13138 .IP "\fB\-mno\-id\-shared\-library\fR" 4
13139 .IX Item "-mno-id-shared-library"
13140 Generate code that doesn't assume ID-based shared libraries are being used.
13141 This is the default.
13142 .IP "\fB\-mleaf\-id\-shared\-library\fR" 4
13143 .IX Item "-mleaf-id-shared-library"
13144 Generate code that supports shared libraries via the library \s-1ID\s0 method,
13145 but assumes that this library or executable won't link against any other
13146 \&\s-1ID\s0 shared libraries.  That allows the compiler to use faster code for jumps
13147 and calls.
13148 .IP "\fB\-mno\-leaf\-id\-shared\-library\fR" 4
13149 .IX Item "-mno-leaf-id-shared-library"
13150 Do not assume that the code being compiled won't link against any \s-1ID\s0 shared
13151 libraries.  Slower code is generated for jump and call insns.
13152 .IP "\fB\-mshared\-library\-id=n\fR" 4
13153 .IX Item "-mshared-library-id=n"
13154 Specifies the identification number of the ID-based shared library being
13155 compiled.  Specifying a value of 0 generates more compact code; specifying
13156 other values forces the allocation of that number to the current
13157 library but is no more space\- or time-efficient than omitting this option.
13158 .IP "\fB\-msep\-data\fR" 4
13159 .IX Item "-msep-data"
13160 Generate code that allows the data segment to be located in a different
13161 area of memory from the text segment.  This allows for execute in place in
13162 an environment without virtual memory management by eliminating relocations
13163 against the text section.
13164 .IP "\fB\-mno\-sep\-data\fR" 4
13165 .IX Item "-mno-sep-data"
13166 Generate code that assumes that the data segment follows the text segment.
13167 This is the default.
13168 .IP "\fB\-mlong\-calls\fR" 4
13169 .IX Item "-mlong-calls"
13170 .PD 0
13171 .IP "\fB\-mno\-long\-calls\fR" 4
13172 .IX Item "-mno-long-calls"
13173 .PD
13174 Tells the compiler to perform function calls by first loading the
13175 address of the function into a register and then performing a subroutine
13176 call on this register.  This switch is needed if the target function
13177 lies outside of the 24\-bit addressing range of the offset-based
13178 version of subroutine call instruction.
13179 .Sp
13180 This feature is not enabled by default.  Specifying
13181 \&\fB\-mno\-long\-calls\fR restores the default behavior.  Note these
13182 switches have no effect on how the compiler generates code to handle
13183 function calls via function pointers.
13184 .IP "\fB\-mfast\-fp\fR" 4
13185 .IX Item "-mfast-fp"
13186 Link with the fast floating-point library. This library relaxes some of
13187 the \s-1IEEE\s0 floating-point standard's rules for checking inputs against
13188 Not-a-Number (\s-1NAN\s0), in the interest of performance.
13189 .IP "\fB\-minline\-plt\fR" 4
13190 .IX Item "-minline-plt"
13191 Enable inlining of \s-1PLT\s0 entries in function calls to functions that are
13192 not known to bind locally.  It has no effect without \fB\-mfdpic\fR.
13193 .IP "\fB\-mmulticore\fR" 4
13194 .IX Item "-mmulticore"
13195 Build a standalone application for multicore Blackfin processors. 
13196 This option causes proper start files and link scripts supporting 
13197 multicore to be used, and defines the macro \f(CW\*(C`_\|_BFIN_MULTICORE\*(C'\fR. 
13198 It can only be used with \fB\-mcpu=bf561\fR[\fB\-\fR\fIsirevision\fR].
13199 .Sp
13200 This option can be used with \fB\-mcorea\fR or \fB\-mcoreb\fR, which
13201 selects the one-application-per-core programming model.  Without
13202 \&\fB\-mcorea\fR or \fB\-mcoreb\fR, the single\-application/dual\-core
13203 programming model is used. In this model, the main function of Core B
13204 should be named as \f(CW\*(C`coreb_main\*(C'\fR.
13205 .Sp
13206 If this option is not used, the single-core application programming
13207 model is used.
13208 .IP "\fB\-mcorea\fR" 4
13209 .IX Item "-mcorea"
13210 Build a standalone application for Core A of \s-1BF561\s0 when using
13211 the one-application-per-core programming model. Proper start files
13212 and link scripts are used to support Core A, and the macro
13213 \&\f(CW\*(C`_\|_BFIN_COREA\*(C'\fR is defined.
13214 This option can only be used in conjunction with \fB\-mmulticore\fR.
13215 .IP "\fB\-mcoreb\fR" 4
13216 .IX Item "-mcoreb"
13217 Build a standalone application for Core B of \s-1BF561\s0 when using
13218 the one-application-per-core programming model. Proper start files
13219 and link scripts are used to support Core B, and the macro
13220 \&\f(CW\*(C`_\|_BFIN_COREB\*(C'\fR is defined. When this option is used, \f(CW\*(C`coreb_main\*(C'\fR
13221 should be used instead of \f(CW\*(C`main\*(C'\fR. 
13222 This option can only be used in conjunction with \fB\-mmulticore\fR.
13223 .IP "\fB\-msdram\fR" 4
13224 .IX Item "-msdram"
13225 Build a standalone application for \s-1SDRAM\s0. Proper start files and
13226 link scripts are used to put the application into \s-1SDRAM\s0, and the macro
13227 \&\f(CW\*(C`_\|_BFIN_SDRAM\*(C'\fR is defined.
13228 The loader should initialize \s-1SDRAM\s0 before loading the application.
13229 .IP "\fB\-micplb\fR" 4
13230 .IX Item "-micplb"
13231 Assume that ICPLBs are enabled at run time.  This has an effect on certain
13232 anomaly workarounds.  For Linux targets, the default is to assume ICPLBs
13233 are enabled; for standalone applications the default is off.
13234 .PP
13235 \fIC6X Options\fR
13236 .IX Subsection "C6X Options"
13237 .IP "\fB\-march=\fR\fIname\fR" 4
13238 .IX Item "-march=name"
13239 This specifies the name of the target architecture.  \s-1GCC\s0 uses this
13240 name to determine what kind of instructions it can emit when generating
13241 assembly code.  Permissible names are: \fBc62x\fR,
13242 \&\fBc64x\fR, \fBc64x+\fR, \fBc67x\fR, \fBc67x+\fR, \fBc674x\fR.
13243 .IP "\fB\-mbig\-endian\fR" 4
13244 .IX Item "-mbig-endian"
13245 Generate code for a big-endian target.
13246 .IP "\fB\-mlittle\-endian\fR" 4
13247 .IX Item "-mlittle-endian"
13248 Generate code for a little-endian target.  This is the default.
13249 .IP "\fB\-msim\fR" 4
13250 .IX Item "-msim"
13251 Choose startup files and linker script suitable for the simulator.
13252 .IP "\fB\-msdata=default\fR" 4
13253 .IX Item "-msdata=default"
13254 Put small global and static data in the \f(CW\*(C`.neardata\*(C'\fR section,
13255 which is pointed to by register \f(CW\*(C`B14\*(C'\fR.  Put small uninitialized
13256 global and static data in the \f(CW\*(C`.bss\*(C'\fR section, which is adjacent
13257 to the \f(CW\*(C`.neardata\*(C'\fR section.  Put small read-only data into the
13258 \&\f(CW\*(C`.rodata\*(C'\fR section.  The corresponding sections used for large
13259 pieces of data are \f(CW\*(C`.fardata\*(C'\fR, \f(CW\*(C`.far\*(C'\fR and \f(CW\*(C`.const\*(C'\fR.
13260 .IP "\fB\-msdata=all\fR" 4
13261 .IX Item "-msdata=all"
13262 Put all data, not just small objects, into the sections reserved for
13263 small data, and use addressing relative to the \f(CW\*(C`B14\*(C'\fR register to
13264 access them.
13265 .IP "\fB\-msdata=none\fR" 4
13266 .IX Item "-msdata=none"
13267 Make no use of the sections reserved for small data, and use absolute
13268 addresses to access all data.  Put all initialized global and static
13269 data in the \f(CW\*(C`.fardata\*(C'\fR section, and all uninitialized data in the
13270 \&\f(CW\*(C`.far\*(C'\fR section.  Put all constant data into the \f(CW\*(C`.const\*(C'\fR
13271 section.
13272 .PP
13273 \fI\s-1CRIS\s0 Options\fR
13274 .IX Subsection "CRIS Options"
13275 .PP
13276 These options are defined specifically for the \s-1CRIS\s0 ports.
13277 .IP "\fB\-march=\fR\fIarchitecture-type\fR" 4
13278 .IX Item "-march=architecture-type"
13279 .PD 0
13280 .IP "\fB\-mcpu=\fR\fIarchitecture-type\fR" 4
13281 .IX Item "-mcpu=architecture-type"
13282 .PD
13283 Generate code for the specified architecture.  The choices for
13284 \&\fIarchitecture-type\fR are \fBv3\fR, \fBv8\fR and \fBv10\fR for
13285 respectively \s-1ETRAX\s0\ 4, \s-1ETRAX\s0\ 100, and \s-1ETRAX\s0\ 100\ \s-1LX\s0.
13286 Default is \fBv0\fR except for cris-axis-linux-gnu, where the default is
13287 \&\fBv10\fR.
13288 .IP "\fB\-mtune=\fR\fIarchitecture-type\fR" 4
13289 .IX Item "-mtune=architecture-type"
13290 Tune to \fIarchitecture-type\fR everything applicable about the generated
13291 code, except for the \s-1ABI\s0 and the set of available instructions.  The
13292 choices for \fIarchitecture-type\fR are the same as for
13293 \&\fB\-march=\fR\fIarchitecture-type\fR.
13294 .IP "\fB\-mmax\-stack\-frame=\fR\fIn\fR" 4
13295 .IX Item "-mmax-stack-frame=n"
13296 Warn when the stack frame of a function exceeds \fIn\fR bytes.
13297 .IP "\fB\-metrax4\fR" 4
13298 .IX Item "-metrax4"
13299 .PD 0
13300 .IP "\fB\-metrax100\fR" 4
13301 .IX Item "-metrax100"
13302 .PD
13303 The options \fB\-metrax4\fR and \fB\-metrax100\fR are synonyms for
13304 \&\fB\-march=v3\fR and \fB\-march=v8\fR respectively.
13305 .IP "\fB\-mmul\-bug\-workaround\fR" 4
13306 .IX Item "-mmul-bug-workaround"
13307 .PD 0
13308 .IP "\fB\-mno\-mul\-bug\-workaround\fR" 4
13309 .IX Item "-mno-mul-bug-workaround"
13310 .PD
13311 Work around a bug in the \f(CW\*(C`muls\*(C'\fR and \f(CW\*(C`mulu\*(C'\fR instructions for \s-1CPU\s0
13312 models where it applies.  This option is active by default.
13313 .IP "\fB\-mpdebug\fR" 4
13314 .IX Item "-mpdebug"
13315 Enable CRIS-specific verbose debug-related information in the assembly
13316 code.  This option also has the effect of turning off the \fB#NO_APP\fR
13317 formatted-code indicator to the assembler at the beginning of the
13318 assembly file.
13319 .IP "\fB\-mcc\-init\fR" 4
13320 .IX Item "-mcc-init"
13321 Do not use condition-code results from previous instruction; always emit
13322 compare and test instructions before use of condition codes.
13323 .IP "\fB\-mno\-side\-effects\fR" 4
13324 .IX Item "-mno-side-effects"
13325 Do not emit instructions with side effects in addressing modes other than
13326 post-increment.
13327 .IP "\fB\-mstack\-align\fR" 4
13328 .IX Item "-mstack-align"
13329 .PD 0
13330 .IP "\fB\-mno\-stack\-align\fR" 4
13331 .IX Item "-mno-stack-align"
13332 .IP "\fB\-mdata\-align\fR" 4
13333 .IX Item "-mdata-align"
13334 .IP "\fB\-mno\-data\-align\fR" 4
13335 .IX Item "-mno-data-align"
13336 .IP "\fB\-mconst\-align\fR" 4
13337 .IX Item "-mconst-align"
13338 .IP "\fB\-mno\-const\-align\fR" 4
13339 .IX Item "-mno-const-align"
13340 .PD
13341 These options (\fBno\-\fR options) arrange (eliminate arrangements) for the
13342 stack frame, individual data and constants to be aligned for the maximum
13343 single data access size for the chosen \s-1CPU\s0 model.  The default is to
13344 arrange for 32\-bit alignment.  \s-1ABI\s0 details such as structure layout are
13345 not affected by these options.
13346 .IP "\fB\-m32\-bit\fR" 4
13347 .IX Item "-m32-bit"
13348 .PD 0
13349 .IP "\fB\-m16\-bit\fR" 4
13350 .IX Item "-m16-bit"
13351 .IP "\fB\-m8\-bit\fR" 4
13352 .IX Item "-m8-bit"
13353 .PD
13354 Similar to the stack\- data\- and const-align options above, these options
13355 arrange for stack frame, writable data and constants to all be 32\-bit,
13356 16\-bit or 8\-bit aligned.  The default is 32\-bit alignment.
13357 .IP "\fB\-mno\-prologue\-epilogue\fR" 4
13358 .IX Item "-mno-prologue-epilogue"
13359 .PD 0
13360 .IP "\fB\-mprologue\-epilogue\fR" 4
13361 .IX Item "-mprologue-epilogue"
13362 .PD
13363 With \fB\-mno\-prologue\-epilogue\fR, the normal function prologue and
13364 epilogue which set up the stack frame are omitted and no return
13365 instructions or return sequences are generated in the code.  Use this
13366 option only together with visual inspection of the compiled code: no
13367 warnings or errors are generated when call-saved registers must be saved,
13368 or storage for local variables needs to be allocated.
13369 .IP "\fB\-mno\-gotplt\fR" 4
13370 .IX Item "-mno-gotplt"
13371 .PD 0
13372 .IP "\fB\-mgotplt\fR" 4
13373 .IX Item "-mgotplt"
13374 .PD
13375 With \fB\-fpic\fR and \fB\-fPIC\fR, don't generate (do generate)
13376 instruction sequences that load addresses for functions from the \s-1PLT\s0 part
13377 of the \s-1GOT\s0 rather than (traditional on other architectures) calls to the
13378 \&\s-1PLT\s0.  The default is \fB\-mgotplt\fR.
13379 .IP "\fB\-melf\fR" 4
13380 .IX Item "-melf"
13381 Legacy no-op option only recognized with the cris-axis-elf and
13382 cris-axis-linux-gnu targets.
13383 .IP "\fB\-mlinux\fR" 4
13384 .IX Item "-mlinux"
13385 Legacy no-op option only recognized with the cris-axis-linux-gnu target.
13386 .IP "\fB\-sim\fR" 4
13387 .IX Item "-sim"
13388 This option, recognized for the cris-axis-elf, arranges
13389 to link with input-output functions from a simulator library.  Code,
13390 initialized data and zero-initialized data are allocated consecutively.
13391 .IP "\fB\-sim2\fR" 4
13392 .IX Item "-sim2"
13393 Like \fB\-sim\fR, but pass linker options to locate initialized data at
13394 0x40000000 and zero-initialized data at 0x80000000.
13395 .PP
13396 \fI\s-1CR16\s0 Options\fR
13397 .IX Subsection "CR16 Options"
13398 .PP
13399 These options are defined specifically for the \s-1CR16\s0 ports.
13400 .IP "\fB\-mmac\fR" 4
13401 .IX Item "-mmac"
13402 Enable the use of multiply-accumulate instructions. Disabled by default.
13403 .IP "\fB\-mcr16cplus\fR" 4
13404 .IX Item "-mcr16cplus"
13405 .PD 0
13406 .IP "\fB\-mcr16c\fR" 4
13407 .IX Item "-mcr16c"
13408 .PD
13409 Generate code for \s-1CR16C\s0 or \s-1CR16C+\s0 architecture. \s-1CR16C+\s0 architecture 
13410 is default.
13411 .IP "\fB\-msim\fR" 4
13412 .IX Item "-msim"
13413 Links the library libsim.a which is in compatible with simulator. Applicable
13414 to \s-1ELF\s0 compiler only.
13415 .IP "\fB\-mint32\fR" 4
13416 .IX Item "-mint32"
13417 Choose integer type as 32\-bit wide.
13418 .IP "\fB\-mbit\-ops\fR" 4
13419 .IX Item "-mbit-ops"
13420 Generates \f(CW\*(C`sbit\*(C'\fR/\f(CW\*(C`cbit\*(C'\fR instructions for bit manipulations.
13421 .IP "\fB\-mdata\-model=\fR\fImodel\fR" 4
13422 .IX Item "-mdata-model=model"
13423 Choose a data model. The choices for \fImodel\fR are \fBnear\fR,
13424 \&\fBfar\fR or \fBmedium\fR. \fBmedium\fR is default.
13425 However, \fBfar\fR is not valid with \fB\-mcr16c\fR, as the
13426 \&\s-1CR16C\s0 architecture does not support the far data model.
13427 .PP
13428 \fIDarwin Options\fR
13429 .IX Subsection "Darwin Options"
13430 .PP
13431 These options are defined for all architectures running the Darwin operating
13432 system.
13433 .PP
13434 \&\s-1FSF\s0 \s-1GCC\s0 on Darwin does not create \*(L"fat\*(R" object files; it creates
13435 an object file for the single architecture that \s-1GCC\s0 was built to
13436 target.  Apple's \s-1GCC\s0 on Darwin does create \*(L"fat\*(R" files if multiple
13437 \&\fB\-arch\fR options are used; it does so by running the compiler or
13438 linker multiple times and joining the results together with
13439 \&\fIlipo\fR.
13440 .PP
13441 The subtype of the file created (like \fBppc7400\fR or \fBppc970\fR or
13442 \&\fBi686\fR) is determined by the flags that specify the \s-1ISA\s0
13443 that \s-1GCC\s0 is targeting, like \fB\-mcpu\fR or \fB\-march\fR.  The
13444 \&\fB\-force_cpusubtype_ALL\fR option can be used to override this.
13445 .PP
13446 The Darwin tools vary in their behavior when presented with an \s-1ISA\s0
13447 mismatch.  The assembler, \fIas\fR, only permits instructions to
13448 be used that are valid for the subtype of the file it is generating,
13449 so you cannot put 64\-bit instructions in a \fBppc750\fR object file.
13450 The linker for shared libraries, \fI/usr/bin/libtool\fR, fails
13451 and prints an error if asked to create a shared library with a less
13452 restrictive subtype than its input files (for instance, trying to put
13453 a \fBppc970\fR object file in a \fBppc7400\fR library).  The linker
13454 for executables, \fBld\fR, quietly gives the executable the most
13455 restrictive subtype of any of its input files.
13456 .IP "\fB\-F\fR\fIdir\fR" 4
13457 .IX Item "-Fdir"
13458 Add the framework directory \fIdir\fR to the head of the list of
13459 directories to be searched for header files.  These directories are
13460 interleaved with those specified by \fB\-I\fR options and are
13461 scanned in a left-to-right order.
13462 .Sp
13463 A framework directory is a directory with frameworks in it.  A
13464 framework is a directory with a \fIHeaders\fR and/or
13465 \&\fIPrivateHeaders\fR directory contained directly in it that ends
13466 in \fI.framework\fR.  The name of a framework is the name of this
13467 directory excluding the \fI.framework\fR.  Headers associated with
13468 the framework are found in one of those two directories, with
13469 \&\fIHeaders\fR being searched first.  A subframework is a framework
13470 directory that is in a framework's \fIFrameworks\fR directory.
13471 Includes of subframework headers can only appear in a header of a
13472 framework that contains the subframework, or in a sibling subframework
13473 header.  Two subframeworks are siblings if they occur in the same
13474 framework.  A subframework should not have the same name as a
13475 framework; a warning is issued if this is violated.  Currently a
13476 subframework cannot have subframeworks; in the future, the mechanism
13477 may be extended to support this.  The standard frameworks can be found
13478 in \fI/System/Library/Frameworks\fR and
13479 \&\fI/Library/Frameworks\fR.  An example include looks like
13480 \&\f(CW\*(C`#include <Framework/header.h>\*(C'\fR, where \fIFramework\fR denotes
13481 the name of the framework and \fIheader.h\fR is found in the
13482 \&\fIPrivateHeaders\fR or \fIHeaders\fR directory.
13483 .IP "\fB\-iframework\fR\fIdir\fR" 4
13484 .IX Item "-iframeworkdir"
13485 Like \fB\-F\fR except the directory is a treated as a system
13486 directory.  The main difference between this \fB\-iframework\fR and
13487 \&\fB\-F\fR is that with \fB\-iframework\fR the compiler does not
13488 warn about constructs contained within header files found via
13489 \&\fIdir\fR.  This option is valid only for the C family of languages.
13490 .IP "\fB\-gused\fR" 4
13491 .IX Item "-gused"
13492 Emit debugging information for symbols that are used.  For stabs
13493 debugging format, this enables \fB\-feliminate\-unused\-debug\-symbols\fR.
13494 This is by default \s-1ON\s0.
13495 .IP "\fB\-gfull\fR" 4
13496 .IX Item "-gfull"
13497 Emit debugging information for all symbols and types.
13498 .IP "\fB\-mmacosx\-version\-min=\fR\fIversion\fR" 4
13499 .IX Item "-mmacosx-version-min=version"
13500 The earliest version of MacOS X that this executable will run on
13501 is \fIversion\fR.  Typical values of \fIversion\fR include \f(CW10.1\fR,
13502 \&\f(CW10.2\fR, and \f(CW10.3.9\fR.
13503 .Sp
13504 If the compiler was built to use the system's headers by default,
13505 then the default for this option is the system version on which the
13506 compiler is running, otherwise the default is to make choices that
13507 are compatible with as many systems and code bases as possible.
13508 .IP "\fB\-mkernel\fR" 4
13509 .IX Item "-mkernel"
13510 Enable kernel development mode.  The \fB\-mkernel\fR option sets
13511 \&\fB\-static\fR, \fB\-fno\-common\fR, \fB\-fno\-use\-cxa\-atexit\fR,
13512 \&\fB\-fno\-exceptions\fR, \fB\-fno\-non\-call\-exceptions\fR,
13513 \&\fB\-fapple\-kext\fR, \fB\-fno\-weak\fR and \fB\-fno\-rtti\fR where
13514 applicable.  This mode also sets \fB\-mno\-altivec\fR,
13515 \&\fB\-msoft\-float\fR, \fB\-fno\-builtin\fR and
13516 \&\fB\-mlong\-branch\fR for PowerPC targets.
13517 .IP "\fB\-mone\-byte\-bool\fR" 4
13518 .IX Item "-mone-byte-bool"
13519 Override the defaults for \f(CW\*(C`bool\*(C'\fR so that \f(CW\*(C`sizeof(bool)==1\*(C'\fR.
13520 By default \f(CW\*(C`sizeof(bool)\*(C'\fR is \f(CW4\fR when compiling for
13521 Darwin/PowerPC and \f(CW1\fR when compiling for Darwin/x86, so this
13522 option has no effect on x86.
13523 .Sp
13524 \&\fBWarning:\fR The \fB\-mone\-byte\-bool\fR switch causes \s-1GCC\s0
13525 to generate code that is not binary compatible with code generated
13526 without that switch.  Using this switch may require recompiling all
13527 other modules in a program, including system libraries.  Use this
13528 switch to conform to a non-default data model.
13529 .IP "\fB\-mfix\-and\-continue\fR" 4
13530 .IX Item "-mfix-and-continue"
13531 .PD 0
13532 .IP "\fB\-ffix\-and\-continue\fR" 4
13533 .IX Item "-ffix-and-continue"
13534 .IP "\fB\-findirect\-data\fR" 4
13535 .IX Item "-findirect-data"
13536 .PD
13537 Generate code suitable for fast turnaround development, such as to
13538 allow \s-1GDB\s0 to dynamically load \fI.o\fR files into already-running
13539 programs.  \fB\-findirect\-data\fR and \fB\-ffix\-and\-continue\fR
13540 are provided for backwards compatibility.
13541 .IP "\fB\-all_load\fR" 4
13542 .IX Item "-all_load"
13543 Loads all members of static archive libraries.
13544 See man \fIld\fR\|(1) for more information.
13545 .IP "\fB\-arch_errors_fatal\fR" 4
13546 .IX Item "-arch_errors_fatal"
13547 Cause the errors having to do with files that have the wrong architecture
13548 to be fatal.
13549 .IP "\fB\-bind_at_load\fR" 4
13550 .IX Item "-bind_at_load"
13551 Causes the output file to be marked such that the dynamic linker will
13552 bind all undefined references when the file is loaded or launched.
13553 .IP "\fB\-bundle\fR" 4
13554 .IX Item "-bundle"
13555 Produce a Mach-o bundle format file.
13556 See man \fIld\fR\|(1) for more information.
13557 .IP "\fB\-bundle_loader\fR \fIexecutable\fR" 4
13558 .IX Item "-bundle_loader executable"
13559 This option specifies the \fIexecutable\fR that will load the build
13560 output file being linked.  See man \fIld\fR\|(1) for more information.
13561 .IP "\fB\-dynamiclib\fR" 4
13562 .IX Item "-dynamiclib"
13563 When passed this option, \s-1GCC\s0 produces a dynamic library instead of
13564 an executable when linking, using the Darwin \fIlibtool\fR command.
13565 .IP "\fB\-force_cpusubtype_ALL\fR" 4
13566 .IX Item "-force_cpusubtype_ALL"
13567 This causes \s-1GCC\s0's output file to have the \fB\s-1ALL\s0\fR subtype, instead of
13568 one controlled by the \fB\-mcpu\fR or \fB\-march\fR option.
13569 .IP "\fB\-allowable_client\fR  \fIclient_name\fR" 4
13570 .IX Item "-allowable_client  client_name"
13571 .PD 0
13572 .IP "\fB\-client_name\fR" 4
13573 .IX Item "-client_name"
13574 .IP "\fB\-compatibility_version\fR" 4
13575 .IX Item "-compatibility_version"
13576 .IP "\fB\-current_version\fR" 4
13577 .IX Item "-current_version"
13578 .IP "\fB\-dead_strip\fR" 4
13579 .IX Item "-dead_strip"
13580 .IP "\fB\-dependency\-file\fR" 4
13581 .IX Item "-dependency-file"
13582 .IP "\fB\-dylib_file\fR" 4
13583 .IX Item "-dylib_file"
13584 .IP "\fB\-dylinker_install_name\fR" 4
13585 .IX Item "-dylinker_install_name"
13586 .IP "\fB\-dynamic\fR" 4
13587 .IX Item "-dynamic"
13588 .IP "\fB\-exported_symbols_list\fR" 4
13589 .IX Item "-exported_symbols_list"
13590 .IP "\fB\-filelist\fR" 4
13591 .IX Item "-filelist"
13592 .IP "\fB\-flat_namespace\fR" 4
13593 .IX Item "-flat_namespace"
13594 .IP "\fB\-force_flat_namespace\fR" 4
13595 .IX Item "-force_flat_namespace"
13596 .IP "\fB\-headerpad_max_install_names\fR" 4
13597 .IX Item "-headerpad_max_install_names"
13598 .IP "\fB\-image_base\fR" 4
13599 .IX Item "-image_base"
13600 .IP "\fB\-init\fR" 4
13601 .IX Item "-init"
13602 .IP "\fB\-install_name\fR" 4
13603 .IX Item "-install_name"
13604 .IP "\fB\-keep_private_externs\fR" 4
13605 .IX Item "-keep_private_externs"
13606 .IP "\fB\-multi_module\fR" 4
13607 .IX Item "-multi_module"
13608 .IP "\fB\-multiply_defined\fR" 4
13609 .IX Item "-multiply_defined"
13610 .IP "\fB\-multiply_defined_unused\fR" 4
13611 .IX Item "-multiply_defined_unused"
13612 .IP "\fB\-noall_load\fR" 4
13613 .IX Item "-noall_load"
13614 .IP "\fB\-no_dead_strip_inits_and_terms\fR" 4
13615 .IX Item "-no_dead_strip_inits_and_terms"
13616 .IP "\fB\-nofixprebinding\fR" 4
13617 .IX Item "-nofixprebinding"
13618 .IP "\fB\-nomultidefs\fR" 4
13619 .IX Item "-nomultidefs"
13620 .IP "\fB\-noprebind\fR" 4
13621 .IX Item "-noprebind"
13622 .IP "\fB\-noseglinkedit\fR" 4
13623 .IX Item "-noseglinkedit"
13624 .IP "\fB\-pagezero_size\fR" 4
13625 .IX Item "-pagezero_size"
13626 .IP "\fB\-prebind\fR" 4
13627 .IX Item "-prebind"
13628 .IP "\fB\-prebind_all_twolevel_modules\fR" 4
13629 .IX Item "-prebind_all_twolevel_modules"
13630 .IP "\fB\-private_bundle\fR" 4
13631 .IX Item "-private_bundle"
13632 .IP "\fB\-read_only_relocs\fR" 4
13633 .IX Item "-read_only_relocs"
13634 .IP "\fB\-sectalign\fR" 4
13635 .IX Item "-sectalign"
13636 .IP "\fB\-sectobjectsymbols\fR" 4
13637 .IX Item "-sectobjectsymbols"
13638 .IP "\fB\-whyload\fR" 4
13639 .IX Item "-whyload"
13640 .IP "\fB\-seg1addr\fR" 4
13641 .IX Item "-seg1addr"
13642 .IP "\fB\-sectcreate\fR" 4
13643 .IX Item "-sectcreate"
13644 .IP "\fB\-sectobjectsymbols\fR" 4
13645 .IX Item "-sectobjectsymbols"
13646 .IP "\fB\-sectorder\fR" 4
13647 .IX Item "-sectorder"
13648 .IP "\fB\-segaddr\fR" 4
13649 .IX Item "-segaddr"
13650 .IP "\fB\-segs_read_only_addr\fR" 4
13651 .IX Item "-segs_read_only_addr"
13652 .IP "\fB\-segs_read_write_addr\fR" 4
13653 .IX Item "-segs_read_write_addr"
13654 .IP "\fB\-seg_addr_table\fR" 4
13655 .IX Item "-seg_addr_table"
13656 .IP "\fB\-seg_addr_table_filename\fR" 4
13657 .IX Item "-seg_addr_table_filename"
13658 .IP "\fB\-seglinkedit\fR" 4
13659 .IX Item "-seglinkedit"
13660 .IP "\fB\-segprot\fR" 4
13661 .IX Item "-segprot"
13662 .IP "\fB\-segs_read_only_addr\fR" 4
13663 .IX Item "-segs_read_only_addr"
13664 .IP "\fB\-segs_read_write_addr\fR" 4
13665 .IX Item "-segs_read_write_addr"
13666 .IP "\fB\-single_module\fR" 4
13667 .IX Item "-single_module"
13668 .IP "\fB\-static\fR" 4
13669 .IX Item "-static"
13670 .IP "\fB\-sub_library\fR" 4
13671 .IX Item "-sub_library"
13672 .IP "\fB\-sub_umbrella\fR" 4
13673 .IX Item "-sub_umbrella"
13674 .IP "\fB\-twolevel_namespace\fR" 4
13675 .IX Item "-twolevel_namespace"
13676 .IP "\fB\-umbrella\fR" 4
13677 .IX Item "-umbrella"
13678 .IP "\fB\-undefined\fR" 4
13679 .IX Item "-undefined"
13680 .IP "\fB\-unexported_symbols_list\fR" 4
13681 .IX Item "-unexported_symbols_list"
13682 .IP "\fB\-weak_reference_mismatches\fR" 4
13683 .IX Item "-weak_reference_mismatches"
13684 .IP "\fB\-whatsloaded\fR" 4
13685 .IX Item "-whatsloaded"
13686 .PD
13687 These options are passed to the Darwin linker.  The Darwin linker man page
13688 describes them in detail.
13689 .PP
13690 \fI\s-1DEC\s0 Alpha Options\fR
13691 .IX Subsection "DEC Alpha Options"
13692 .PP
13693 These \fB\-m\fR options are defined for the \s-1DEC\s0 Alpha implementations:
13694 .IP "\fB\-mno\-soft\-float\fR" 4
13695 .IX Item "-mno-soft-float"
13696 .PD 0
13697 .IP "\fB\-msoft\-float\fR" 4
13698 .IX Item "-msoft-float"
13699 .PD
13700 Use (do not use) the hardware floating-point instructions for
13701 floating-point operations.  When \fB\-msoft\-float\fR is specified,
13702 functions in \fIlibgcc.a\fR are used to perform floating-point
13703 operations.  Unless they are replaced by routines that emulate the
13704 floating-point operations, or compiled in such a way as to call such
13705 emulations routines, these routines issue floating-point
13706 operations.   If you are compiling for an Alpha without floating-point
13707 operations, you must ensure that the library is built so as not to call
13708 them.
13709 .Sp
13710 Note that Alpha implementations without floating-point operations are
13711 required to have floating-point registers.
13712 .IP "\fB\-mfp\-reg\fR" 4
13713 .IX Item "-mfp-reg"
13714 .PD 0
13715 .IP "\fB\-mno\-fp\-regs\fR" 4
13716 .IX Item "-mno-fp-regs"
13717 .PD
13718 Generate code that uses (does not use) the floating-point register set.
13719 \&\fB\-mno\-fp\-regs\fR implies \fB\-msoft\-float\fR.  If the floating-point
13720 register set is not used, floating-point operands are passed in integer
13721 registers as if they were integers and floating-point results are passed
13722 in \f(CW$0\fR instead of \f(CW$f0\fR.  This is a non-standard calling sequence,
13723 so any function with a floating-point argument or return value called by code
13724 compiled with \fB\-mno\-fp\-regs\fR must also be compiled with that
13725 option.
13726 .Sp
13727 A typical use of this option is building a kernel that does not use,
13728 and hence need not save and restore, any floating-point registers.
13729 .IP "\fB\-mieee\fR" 4
13730 .IX Item "-mieee"
13731 The Alpha architecture implements floating-point hardware optimized for
13732 maximum performance.  It is mostly compliant with the \s-1IEEE\s0 floating-point
13733 standard.  However, for full compliance, software assistance is
13734 required.  This option generates code fully IEEE-compliant code
13735 \&\fIexcept\fR that the \fIinexact-flag\fR is not maintained (see below).
13736 If this option is turned on, the preprocessor macro \f(CW\*(C`_IEEE_FP\*(C'\fR is
13737 defined during compilation.  The resulting code is less efficient but is
13738 able to correctly support denormalized numbers and exceptional \s-1IEEE\s0
13739 values such as not-a-number and plus/minus infinity.  Other Alpha
13740 compilers call this option \fB\-ieee_with_no_inexact\fR.
13741 .IP "\fB\-mieee\-with\-inexact\fR" 4
13742 .IX Item "-mieee-with-inexact"
13743 This is like \fB\-mieee\fR except the generated code also maintains
13744 the \s-1IEEE\s0 \fIinexact-flag\fR.  Turning on this option causes the
13745 generated code to implement fully-compliant \s-1IEEE\s0 math.  In addition to
13746 \&\f(CW\*(C`_IEEE_FP\*(C'\fR, \f(CW\*(C`_IEEE_FP_EXACT\*(C'\fR is defined as a preprocessor
13747 macro.  On some Alpha implementations the resulting code may execute
13748 significantly slower than the code generated by default.  Since there is
13749 very little code that depends on the \fIinexact-flag\fR, you should
13750 normally not specify this option.  Other Alpha compilers call this
13751 option \fB\-ieee_with_inexact\fR.
13752 .IP "\fB\-mfp\-trap\-mode=\fR\fItrap-mode\fR" 4
13753 .IX Item "-mfp-trap-mode=trap-mode"
13754 This option controls what floating-point related traps are enabled.
13755 Other Alpha compilers call this option \fB\-fptm\fR \fItrap-mode\fR.
13756 The trap mode can be set to one of four values:
13757 .RS 4
13758 .IP "\fBn\fR" 4
13759 .IX Item "n"
13760 This is the default (normal) setting.  The only traps that are enabled
13761 are the ones that cannot be disabled in software (e.g., division by zero
13762 trap).
13763 .IP "\fBu\fR" 4
13764 .IX Item "u"
13765 In addition to the traps enabled by \fBn\fR, underflow traps are enabled
13766 as well.
13767 .IP "\fBsu\fR" 4
13768 .IX Item "su"
13769 Like \fBu\fR, but the instructions are marked to be safe for software
13770 completion (see Alpha architecture manual for details).
13771 .IP "\fBsui\fR" 4
13772 .IX Item "sui"
13773 Like \fBsu\fR, but inexact traps are enabled as well.
13774 .RE
13775 .RS 4
13776 .RE
13777 .IP "\fB\-mfp\-rounding\-mode=\fR\fIrounding-mode\fR" 4
13778 .IX Item "-mfp-rounding-mode=rounding-mode"
13779 Selects the \s-1IEEE\s0 rounding mode.  Other Alpha compilers call this option
13780 \&\fB\-fprm\fR \fIrounding-mode\fR.  The \fIrounding-mode\fR can be one
13781 of:
13782 .RS 4
13783 .IP "\fBn\fR" 4
13784 .IX Item "n"
13785 Normal \s-1IEEE\s0 rounding mode.  Floating-point numbers are rounded towards
13786 the nearest machine number or towards the even machine number in case
13787 of a tie.
13788 .IP "\fBm\fR" 4
13789 .IX Item "m"
13790 Round towards minus infinity.
13791 .IP "\fBc\fR" 4
13792 .IX Item "c"
13793 Chopped rounding mode.  Floating-point numbers are rounded towards zero.
13794 .IP "\fBd\fR" 4
13795 .IX Item "d"
13796 Dynamic rounding mode.  A field in the floating-point control register
13797 (\fIfpcr\fR, see Alpha architecture reference manual) controls the
13798 rounding mode in effect.  The C library initializes this register for
13799 rounding towards plus infinity.  Thus, unless your program modifies the
13800 \&\fIfpcr\fR, \fBd\fR corresponds to round towards plus infinity.
13801 .RE
13802 .RS 4
13803 .RE
13804 .IP "\fB\-mtrap\-precision=\fR\fItrap-precision\fR" 4
13805 .IX Item "-mtrap-precision=trap-precision"
13806 In the Alpha architecture, floating-point traps are imprecise.  This
13807 means without software assistance it is impossible to recover from a
13808 floating trap and program execution normally needs to be terminated.
13809 \&\s-1GCC\s0 can generate code that can assist operating system trap handlers
13810 in determining the exact location that caused a floating-point trap.
13811 Depending on the requirements of an application, different levels of
13812 precisions can be selected:
13813 .RS 4
13814 .IP "\fBp\fR" 4
13815 .IX Item "p"
13816 Program precision.  This option is the default and means a trap handler
13817 can only identify which program caused a floating-point exception.
13818 .IP "\fBf\fR" 4
13819 .IX Item "f"
13820 Function precision.  The trap handler can determine the function that
13821 caused a floating-point exception.
13822 .IP "\fBi\fR" 4
13823 .IX Item "i"
13824 Instruction precision.  The trap handler can determine the exact
13825 instruction that caused a floating-point exception.
13826 .RE
13827 .RS 4
13828 .Sp
13829 Other Alpha compilers provide the equivalent options called
13830 \&\fB\-scope_safe\fR and \fB\-resumption_safe\fR.
13831 .RE
13832 .IP "\fB\-mieee\-conformant\fR" 4
13833 .IX Item "-mieee-conformant"
13834 This option marks the generated code as \s-1IEEE\s0 conformant.  You must not
13835 use this option unless you also specify \fB\-mtrap\-precision=i\fR and either
13836 \&\fB\-mfp\-trap\-mode=su\fR or \fB\-mfp\-trap\-mode=sui\fR.  Its only effect
13837 is to emit the line \fB.eflag 48\fR in the function prologue of the
13838 generated assembly file.
13839 .IP "\fB\-mbuild\-constants\fR" 4
13840 .IX Item "-mbuild-constants"
13841 Normally \s-1GCC\s0 examines a 32\- or 64\-bit integer constant to
13842 see if it can construct it from smaller constants in two or three
13843 instructions.  If it cannot, it outputs the constant as a literal and
13844 generates code to load it from the data segment at run time.
13845 .Sp
13846 Use this option to require \s-1GCC\s0 to construct \fIall\fR integer constants
13847 using code, even if it takes more instructions (the maximum is six).
13848 .Sp
13849 You typically use this option to build a shared library dynamic
13850 loader.  Itself a shared library, it must relocate itself in memory
13851 before it can find the variables and constants in its own data segment.
13852 .IP "\fB\-mbwx\fR" 4
13853 .IX Item "-mbwx"
13854 .PD 0
13855 .IP "\fB\-mno\-bwx\fR" 4
13856 .IX Item "-mno-bwx"
13857 .IP "\fB\-mcix\fR" 4
13858 .IX Item "-mcix"
13859 .IP "\fB\-mno\-cix\fR" 4
13860 .IX Item "-mno-cix"
13861 .IP "\fB\-mfix\fR" 4
13862 .IX Item "-mfix"
13863 .IP "\fB\-mno\-fix\fR" 4
13864 .IX Item "-mno-fix"
13865 .IP "\fB\-mmax\fR" 4
13866 .IX Item "-mmax"
13867 .IP "\fB\-mno\-max\fR" 4
13868 .IX Item "-mno-max"
13869 .PD
13870 Indicate whether \s-1GCC\s0 should generate code to use the optional \s-1BWX\s0,
13871 \&\s-1CIX\s0, \s-1FIX\s0 and \s-1MAX\s0 instruction sets.  The default is to use the instruction
13872 sets supported by the \s-1CPU\s0 type specified via \fB\-mcpu=\fR option or that
13873 of the \s-1CPU\s0 on which \s-1GCC\s0 was built if none is specified.
13874 .IP "\fB\-mfloat\-vax\fR" 4
13875 .IX Item "-mfloat-vax"
13876 .PD 0
13877 .IP "\fB\-mfloat\-ieee\fR" 4
13878 .IX Item "-mfloat-ieee"
13879 .PD
13880 Generate code that uses (does not use) \s-1VAX\s0 F and G floating-point
13881 arithmetic instead of \s-1IEEE\s0 single and double precision.
13882 .IP "\fB\-mexplicit\-relocs\fR" 4
13883 .IX Item "-mexplicit-relocs"
13884 .PD 0
13885 .IP "\fB\-mno\-explicit\-relocs\fR" 4
13886 .IX Item "-mno-explicit-relocs"
13887 .PD
13888 Older Alpha assemblers provided no way to generate symbol relocations
13889 except via assembler macros.  Use of these macros does not allow
13890 optimal instruction scheduling.  \s-1GNU\s0 binutils as of version 2.12
13891 supports a new syntax that allows the compiler to explicitly mark
13892 which relocations should apply to which instructions.  This option
13893 is mostly useful for debugging, as \s-1GCC\s0 detects the capabilities of
13894 the assembler when it is built and sets the default accordingly.
13895 .IP "\fB\-msmall\-data\fR" 4
13896 .IX Item "-msmall-data"
13897 .PD 0
13898 .IP "\fB\-mlarge\-data\fR" 4
13899 .IX Item "-mlarge-data"
13900 .PD
13901 When \fB\-mexplicit\-relocs\fR is in effect, static data is
13902 accessed via \fIgp-relative\fR relocations.  When \fB\-msmall\-data\fR
13903 is used, objects 8 bytes long or smaller are placed in a \fIsmall data area\fR
13904 (the \f(CW\*(C`.sdata\*(C'\fR and \f(CW\*(C`.sbss\*(C'\fR sections) and are accessed via
13905 16\-bit relocations off of the \f(CW$gp\fR register.  This limits the
13906 size of the small data area to 64KB, but allows the variables to be
13907 directly accessed via a single instruction.
13908 .Sp
13909 The default is \fB\-mlarge\-data\fR.  With this option the data area
13910 is limited to just below 2GB.  Programs that require more than 2GB of
13911 data must use \f(CW\*(C`malloc\*(C'\fR or \f(CW\*(C`mmap\*(C'\fR to allocate the data in the
13912 heap instead of in the program's data segment.
13913 .Sp
13914 When generating code for shared libraries, \fB\-fpic\fR implies
13915 \&\fB\-msmall\-data\fR and \fB\-fPIC\fR implies \fB\-mlarge\-data\fR.
13916 .IP "\fB\-msmall\-text\fR" 4
13917 .IX Item "-msmall-text"
13918 .PD 0
13919 .IP "\fB\-mlarge\-text\fR" 4
13920 .IX Item "-mlarge-text"
13921 .PD
13922 When \fB\-msmall\-text\fR is used, the compiler assumes that the
13923 code of the entire program (or shared library) fits in 4MB, and is
13924 thus reachable with a branch instruction.  When \fB\-msmall\-data\fR
13925 is used, the compiler can assume that all local symbols share the
13926 same \f(CW$gp\fR value, and thus reduce the number of instructions
13927 required for a function call from 4 to 1.
13928 .Sp
13929 The default is \fB\-mlarge\-text\fR.
13930 .IP "\fB\-mcpu=\fR\fIcpu_type\fR" 4
13931 .IX Item "-mcpu=cpu_type"
13932 Set the instruction set and instruction scheduling parameters for
13933 machine type \fIcpu_type\fR.  You can specify either the \fB\s-1EV\s0\fR
13934 style name or the corresponding chip number.  \s-1GCC\s0 supports scheduling
13935 parameters for the \s-1EV4\s0, \s-1EV5\s0 and \s-1EV6\s0 family of processors and
13936 chooses the default values for the instruction set from the processor
13937 you specify.  If you do not specify a processor type, \s-1GCC\s0 defaults
13938 to the processor on which the compiler was built.
13939 .Sp
13940 Supported values for \fIcpu_type\fR are
13941 .RS 4
13942 .IP "\fBev4\fR" 4
13943 .IX Item "ev4"
13944 .PD 0
13945 .IP "\fBev45\fR" 4
13946 .IX Item "ev45"
13947 .IP "\fB21064\fR" 4
13948 .IX Item "21064"
13949 .PD
13950 Schedules as an \s-1EV4\s0 and has no instruction set extensions.
13951 .IP "\fBev5\fR" 4
13952 .IX Item "ev5"
13953 .PD 0
13954 .IP "\fB21164\fR" 4
13955 .IX Item "21164"
13956 .PD
13957 Schedules as an \s-1EV5\s0 and has no instruction set extensions.
13958 .IP "\fBev56\fR" 4
13959 .IX Item "ev56"
13960 .PD 0
13961 .IP "\fB21164a\fR" 4
13962 .IX Item "21164a"
13963 .PD
13964 Schedules as an \s-1EV5\s0 and supports the \s-1BWX\s0 extension.
13965 .IP "\fBpca56\fR" 4
13966 .IX Item "pca56"
13967 .PD 0
13968 .IP "\fB21164pc\fR" 4
13969 .IX Item "21164pc"
13970 .IP "\fB21164PC\fR" 4
13971 .IX Item "21164PC"
13972 .PD
13973 Schedules as an \s-1EV5\s0 and supports the \s-1BWX\s0 and \s-1MAX\s0 extensions.
13974 .IP "\fBev6\fR" 4
13975 .IX Item "ev6"
13976 .PD 0
13977 .IP "\fB21264\fR" 4
13978 .IX Item "21264"
13979 .PD
13980 Schedules as an \s-1EV6\s0 and supports the \s-1BWX\s0, \s-1FIX\s0, and \s-1MAX\s0 extensions.
13981 .IP "\fBev67\fR" 4
13982 .IX Item "ev67"
13983 .PD 0
13984 .IP "\fB21264a\fR" 4
13985 .IX Item "21264a"
13986 .PD
13987 Schedules as an \s-1EV6\s0 and supports the \s-1BWX\s0, \s-1CIX\s0, \s-1FIX\s0, and \s-1MAX\s0 extensions.
13988 .RE
13989 .RS 4
13990 .Sp
13991 Native toolchains also support the value \fBnative\fR,
13992 which selects the best architecture option for the host processor.
13993 \&\fB\-mcpu=native\fR has no effect if \s-1GCC\s0 does not recognize
13994 the processor.
13995 .RE
13996 .IP "\fB\-mtune=\fR\fIcpu_type\fR" 4
13997 .IX Item "-mtune=cpu_type"
13998 Set only the instruction scheduling parameters for machine type
13999 \&\fIcpu_type\fR.  The instruction set is not changed.
14000 .Sp
14001 Native toolchains also support the value \fBnative\fR,
14002 which selects the best architecture option for the host processor.
14003 \&\fB\-mtune=native\fR has no effect if \s-1GCC\s0 does not recognize
14004 the processor.
14005 .IP "\fB\-mmemory\-latency=\fR\fItime\fR" 4
14006 .IX Item "-mmemory-latency=time"
14007 Sets the latency the scheduler should assume for typical memory
14008 references as seen by the application.  This number is highly
14009 dependent on the memory access patterns used by the application
14010 and the size of the external cache on the machine.
14011 .Sp
14012 Valid options for \fItime\fR are
14013 .RS 4
14014 .IP "\fInumber\fR" 4
14015 .IX Item "number"
14016 A decimal number representing clock cycles.
14017 .IP "\fBL1\fR" 4
14018 .IX Item "L1"
14019 .PD 0
14020 .IP "\fBL2\fR" 4
14021 .IX Item "L2"
14022 .IP "\fBL3\fR" 4
14023 .IX Item "L3"
14024 .IP "\fBmain\fR" 4
14025 .IX Item "main"
14026 .PD
14027 The compiler contains estimates of the number of clock cycles for
14028 \&\*(L"typical\*(R" \s-1EV4\s0 & \s-1EV5\s0 hardware for the Level 1, 2 & 3 caches
14029 (also called Dcache, Scache, and Bcache), as well as to main memory.
14030 Note that L3 is only valid for \s-1EV5\s0.
14031 .RE
14032 .RS 4
14033 .RE
14034 .PP
14035 \fI\s-1FR30\s0 Options\fR
14036 .IX Subsection "FR30 Options"
14037 .PP
14038 These options are defined specifically for the \s-1FR30\s0 port.
14039 .IP "\fB\-msmall\-model\fR" 4
14040 .IX Item "-msmall-model"
14041 Use the small address space model.  This can produce smaller code, but
14042 it does assume that all symbolic values and addresses fit into a
14043 20\-bit range.
14044 .IP "\fB\-mno\-lsim\fR" 4
14045 .IX Item "-mno-lsim"
14046 Assume that runtime support has been provided and so there is no need
14047 to include the simulator library (\fIlibsim.a\fR) on the linker
14048 command line.
14049 .PP
14050 \fI\s-1FRV\s0 Options\fR
14051 .IX Subsection "FRV Options"
14052 .IP "\fB\-mgpr\-32\fR" 4
14053 .IX Item "-mgpr-32"
14054 Only use the first 32 general-purpose registers.
14055 .IP "\fB\-mgpr\-64\fR" 4
14056 .IX Item "-mgpr-64"
14057 Use all 64 general-purpose registers.
14058 .IP "\fB\-mfpr\-32\fR" 4
14059 .IX Item "-mfpr-32"
14060 Use only the first 32 floating-point registers.
14061 .IP "\fB\-mfpr\-64\fR" 4
14062 .IX Item "-mfpr-64"
14063 Use all 64 floating-point registers.
14064 .IP "\fB\-mhard\-float\fR" 4
14065 .IX Item "-mhard-float"
14066 Use hardware instructions for floating-point operations.
14067 .IP "\fB\-msoft\-float\fR" 4
14068 .IX Item "-msoft-float"
14069 Use library routines for floating-point operations.
14070 .IP "\fB\-malloc\-cc\fR" 4
14071 .IX Item "-malloc-cc"
14072 Dynamically allocate condition code registers.
14073 .IP "\fB\-mfixed\-cc\fR" 4
14074 .IX Item "-mfixed-cc"
14075 Do not try to dynamically allocate condition code registers, only
14076 use \f(CW\*(C`icc0\*(C'\fR and \f(CW\*(C`fcc0\*(C'\fR.
14077 .IP "\fB\-mdword\fR" 4
14078 .IX Item "-mdword"
14079 Change \s-1ABI\s0 to use double word insns.
14080 .IP "\fB\-mno\-dword\fR" 4
14081 .IX Item "-mno-dword"
14082 Do not use double word instructions.
14083 .IP "\fB\-mdouble\fR" 4
14084 .IX Item "-mdouble"
14085 Use floating-point double instructions.
14086 .IP "\fB\-mno\-double\fR" 4
14087 .IX Item "-mno-double"
14088 Do not use floating-point double instructions.
14089 .IP "\fB\-mmedia\fR" 4
14090 .IX Item "-mmedia"
14091 Use media instructions.
14092 .IP "\fB\-mno\-media\fR" 4
14093 .IX Item "-mno-media"
14094 Do not use media instructions.
14095 .IP "\fB\-mmuladd\fR" 4
14096 .IX Item "-mmuladd"
14097 Use multiply and add/subtract instructions.
14098 .IP "\fB\-mno\-muladd\fR" 4
14099 .IX Item "-mno-muladd"
14100 Do not use multiply and add/subtract instructions.
14101 .IP "\fB\-mfdpic\fR" 4
14102 .IX Item "-mfdpic"
14103 Select the \s-1FDPIC\s0 \s-1ABI\s0, which uses function descriptors to represent
14104 pointers to functions.  Without any PIC/PIE\-related options, it
14105 implies \fB\-fPIE\fR.  With \fB\-fpic\fR or \fB\-fpie\fR, it
14106 assumes \s-1GOT\s0 entries and small data are within a 12\-bit range from the
14107 \&\s-1GOT\s0 base address; with \fB\-fPIC\fR or \fB\-fPIE\fR, \s-1GOT\s0 offsets
14108 are computed with 32 bits.
14109 With a \fBbfin-elf\fR target, this option implies \fB\-msim\fR.
14110 .IP "\fB\-minline\-plt\fR" 4
14111 .IX Item "-minline-plt"
14112 Enable inlining of \s-1PLT\s0 entries in function calls to functions that are
14113 not known to bind locally.  It has no effect without \fB\-mfdpic\fR.
14114 It's enabled by default if optimizing for speed and compiling for
14115 shared libraries (i.e., \fB\-fPIC\fR or \fB\-fpic\fR), or when an
14116 optimization option such as \fB\-O3\fR or above is present in the
14117 command line.
14118 .IP "\fB\-mTLS\fR" 4
14119 .IX Item "-mTLS"
14120 Assume a large \s-1TLS\s0 segment when generating thread-local code.
14121 .IP "\fB\-mtls\fR" 4
14122 .IX Item "-mtls"
14123 Do not assume a large \s-1TLS\s0 segment when generating thread-local code.
14124 .IP "\fB\-mgprel\-ro\fR" 4
14125 .IX Item "-mgprel-ro"
14126 Enable the use of \f(CW\*(C`GPREL\*(C'\fR relocations in the \s-1FDPIC\s0 \s-1ABI\s0 for data
14127 that is known to be in read-only sections.  It's enabled by default,
14128 except for \fB\-fpic\fR or \fB\-fpie\fR: even though it may help
14129 make the global offset table smaller, it trades 1 instruction for 4.
14130 With \fB\-fPIC\fR or \fB\-fPIE\fR, it trades 3 instructions for 4,
14131 one of which may be shared by multiple symbols, and it avoids the need
14132 for a \s-1GOT\s0 entry for the referenced symbol, so it's more likely to be a
14133 win.  If it is not, \fB\-mno\-gprel\-ro\fR can be used to disable it.
14134 .IP "\fB\-multilib\-library\-pic\fR" 4
14135 .IX Item "-multilib-library-pic"
14136 Link with the (library, not \s-1FD\s0) pic libraries.  It's implied by
14137 \&\fB\-mlibrary\-pic\fR, as well as by \fB\-fPIC\fR and
14138 \&\fB\-fpic\fR without \fB\-mfdpic\fR.  You should never have to use
14139 it explicitly.
14140 .IP "\fB\-mlinked\-fp\fR" 4
14141 .IX Item "-mlinked-fp"
14142 Follow the \s-1EABI\s0 requirement of always creating a frame pointer whenever
14143 a stack frame is allocated.  This option is enabled by default and can
14144 be disabled with \fB\-mno\-linked\-fp\fR.
14145 .IP "\fB\-mlong\-calls\fR" 4
14146 .IX Item "-mlong-calls"
14147 Use indirect addressing to call functions outside the current
14148 compilation unit.  This allows the functions to be placed anywhere
14149 within the 32\-bit address space.
14150 .IP "\fB\-malign\-labels\fR" 4
14151 .IX Item "-malign-labels"
14152 Try to align labels to an 8\-byte boundary by inserting NOPs into the
14153 previous packet.  This option only has an effect when \s-1VLIW\s0 packing
14154 is enabled.  It doesn't create new packets; it merely adds NOPs to
14155 existing ones.
14156 .IP "\fB\-mlibrary\-pic\fR" 4
14157 .IX Item "-mlibrary-pic"
14158 Generate position-independent \s-1EABI\s0 code.
14159 .IP "\fB\-macc\-4\fR" 4
14160 .IX Item "-macc-4"
14161 Use only the first four media accumulator registers.
14162 .IP "\fB\-macc\-8\fR" 4
14163 .IX Item "-macc-8"
14164 Use all eight media accumulator registers.
14165 .IP "\fB\-mpack\fR" 4
14166 .IX Item "-mpack"
14167 Pack \s-1VLIW\s0 instructions.
14168 .IP "\fB\-mno\-pack\fR" 4
14169 .IX Item "-mno-pack"
14170 Do not pack \s-1VLIW\s0 instructions.
14171 .IP "\fB\-mno\-eflags\fR" 4
14172 .IX Item "-mno-eflags"
14173 Do not mark \s-1ABI\s0 switches in e_flags.
14174 .IP "\fB\-mcond\-move\fR" 4
14175 .IX Item "-mcond-move"
14176 Enable the use of conditional-move instructions (default).
14177 .Sp
14178 This switch is mainly for debugging the compiler and will likely be removed
14179 in a future version.
14180 .IP "\fB\-mno\-cond\-move\fR" 4
14181 .IX Item "-mno-cond-move"
14182 Disable the use of conditional-move instructions.
14183 .Sp
14184 This switch is mainly for debugging the compiler and will likely be removed
14185 in a future version.
14186 .IP "\fB\-mscc\fR" 4
14187 .IX Item "-mscc"
14188 Enable the use of conditional set instructions (default).
14189 .Sp
14190 This switch is mainly for debugging the compiler and will likely be removed
14191 in a future version.
14192 .IP "\fB\-mno\-scc\fR" 4
14193 .IX Item "-mno-scc"
14194 Disable the use of conditional set instructions.
14195 .Sp
14196 This switch is mainly for debugging the compiler and will likely be removed
14197 in a future version.
14198 .IP "\fB\-mcond\-exec\fR" 4
14199 .IX Item "-mcond-exec"
14200 Enable the use of conditional execution (default).
14201 .Sp
14202 This switch is mainly for debugging the compiler and will likely be removed
14203 in a future version.
14204 .IP "\fB\-mno\-cond\-exec\fR" 4
14205 .IX Item "-mno-cond-exec"
14206 Disable the use of conditional execution.
14207 .Sp
14208 This switch is mainly for debugging the compiler and will likely be removed
14209 in a future version.
14210 .IP "\fB\-mvliw\-branch\fR" 4
14211 .IX Item "-mvliw-branch"
14212 Run a pass to pack branches into \s-1VLIW\s0 instructions (default).
14213 .Sp
14214 This switch is mainly for debugging the compiler and will likely be removed
14215 in a future version.
14216 .IP "\fB\-mno\-vliw\-branch\fR" 4
14217 .IX Item "-mno-vliw-branch"
14218 Do not run a pass to pack branches into \s-1VLIW\s0 instructions.
14219 .Sp
14220 This switch is mainly for debugging the compiler and will likely be removed
14221 in a future version.
14222 .IP "\fB\-mmulti\-cond\-exec\fR" 4
14223 .IX Item "-mmulti-cond-exec"
14224 Enable optimization of \f(CW\*(C`&&\*(C'\fR and \f(CW\*(C`||\*(C'\fR in conditional execution
14225 (default).
14226 .Sp
14227 This switch is mainly for debugging the compiler and will likely be removed
14228 in a future version.
14229 .IP "\fB\-mno\-multi\-cond\-exec\fR" 4
14230 .IX Item "-mno-multi-cond-exec"
14231 Disable optimization of \f(CW\*(C`&&\*(C'\fR and \f(CW\*(C`||\*(C'\fR in conditional execution.
14232 .Sp
14233 This switch is mainly for debugging the compiler and will likely be removed
14234 in a future version.
14235 .IP "\fB\-mnested\-cond\-exec\fR" 4
14236 .IX Item "-mnested-cond-exec"
14237 Enable nested conditional execution optimizations (default).
14238 .Sp
14239 This switch is mainly for debugging the compiler and will likely be removed
14240 in a future version.
14241 .IP "\fB\-mno\-nested\-cond\-exec\fR" 4
14242 .IX Item "-mno-nested-cond-exec"
14243 Disable nested conditional execution optimizations.
14244 .Sp
14245 This switch is mainly for debugging the compiler and will likely be removed
14246 in a future version.
14247 .IP "\fB\-moptimize\-membar\fR" 4
14248 .IX Item "-moptimize-membar"
14249 This switch removes redundant \f(CW\*(C`membar\*(C'\fR instructions from the
14250 compiler-generated code.  It is enabled by default.
14251 .IP "\fB\-mno\-optimize\-membar\fR" 4
14252 .IX Item "-mno-optimize-membar"
14253 This switch disables the automatic removal of redundant \f(CW\*(C`membar\*(C'\fR
14254 instructions from the generated code.
14255 .IP "\fB\-mtomcat\-stats\fR" 4
14256 .IX Item "-mtomcat-stats"
14257 Cause gas to print out tomcat statistics.
14258 .IP "\fB\-mcpu=\fR\fIcpu\fR" 4
14259 .IX Item "-mcpu=cpu"
14260 Select the processor type for which to generate code.  Possible values are
14261 \&\fBfrv\fR, \fBfr550\fR, \fBtomcat\fR, \fBfr500\fR, \fBfr450\fR,
14262 \&\fBfr405\fR, \fBfr400\fR, \fBfr300\fR and \fBsimple\fR.
14263 .PP
14264 \fIGNU/Linux Options\fR
14265 .IX Subsection "GNU/Linux Options"
14266 .PP
14267 These \fB\-m\fR options are defined for GNU/Linux targets:
14268 .IP "\fB\-mglibc\fR" 4
14269 .IX Item "-mglibc"
14270 Use the \s-1GNU\s0 C library.  This is the default except
14271 on \fB*\-*\-linux\-*uclibc*\fR and \fB*\-*\-linux\-*android*\fR targets.
14272 .IP "\fB\-muclibc\fR" 4
14273 .IX Item "-muclibc"
14274 Use uClibc C library.  This is the default on
14275 \&\fB*\-*\-linux\-*uclibc*\fR targets.
14276 .IP "\fB\-mbionic\fR" 4
14277 .IX Item "-mbionic"
14278 Use Bionic C library.  This is the default on
14279 \&\fB*\-*\-linux\-*android*\fR targets.
14280 .IP "\fB\-mandroid\fR" 4
14281 .IX Item "-mandroid"
14282 Compile code compatible with Android platform.  This is the default on
14283 \&\fB*\-*\-linux\-*android*\fR targets.
14284 .Sp
14285 When compiling, this option enables \fB\-mbionic\fR, \fB\-fPIC\fR,
14286 \&\fB\-fno\-exceptions\fR and \fB\-fno\-rtti\fR by default.  When linking,
14287 this option makes the \s-1GCC\s0 driver pass Android-specific options to the linker.
14288 Finally, this option causes the preprocessor macro \f(CW\*(C`_\|_ANDROID_\|_\*(C'\fR
14289 to be defined.
14290 .IP "\fB\-tno\-android\-cc\fR" 4
14291 .IX Item "-tno-android-cc"
14292 Disable compilation effects of \fB\-mandroid\fR, i.e., do not enable
14293 \&\fB\-mbionic\fR, \fB\-fPIC\fR, \fB\-fno\-exceptions\fR and
14294 \&\fB\-fno\-rtti\fR by default.
14295 .IP "\fB\-tno\-android\-ld\fR" 4
14296 .IX Item "-tno-android-ld"
14297 Disable linking effects of \fB\-mandroid\fR, i.e., pass standard Linux
14298 linking options to the linker.
14299 .PP
14300 \fIH8/300 Options\fR
14301 .IX Subsection "H8/300 Options"
14302 .PP
14303 These \fB\-m\fR options are defined for the H8/300 implementations:
14304 .IP "\fB\-mrelax\fR" 4
14305 .IX Item "-mrelax"
14306 Shorten some address references at link time, when possible; uses the
14307 linker option \fB\-relax\fR.
14308 .IP "\fB\-mh\fR" 4
14309 .IX Item "-mh"
14310 Generate code for the H8/300H.
14311 .IP "\fB\-ms\fR" 4
14312 .IX Item "-ms"
14313 Generate code for the H8S.
14314 .IP "\fB\-mn\fR" 4
14315 .IX Item "-mn"
14316 Generate code for the H8S and H8/300H in the normal mode.  This switch
14317 must be used either with \fB\-mh\fR or \fB\-ms\fR.
14318 .IP "\fB\-ms2600\fR" 4
14319 .IX Item "-ms2600"
14320 Generate code for the H8S/2600.  This switch must be used with \fB\-ms\fR.
14321 .IP "\fB\-mexr\fR" 4
14322 .IX Item "-mexr"
14323 Extended registers are stored on stack before execution of function
14324 with monitor attribute. Default option is \fB\-mexr\fR.
14325 This option is valid only for H8S targets.
14326 .IP "\fB\-mno\-exr\fR" 4
14327 .IX Item "-mno-exr"
14328 Extended registers are not stored on stack before execution of function 
14329 with monitor attribute. Default option is \fB\-mno\-exr\fR. 
14330 This option is valid only for H8S targets.
14331 .IP "\fB\-mint32\fR" 4
14332 .IX Item "-mint32"
14333 Make \f(CW\*(C`int\*(C'\fR data 32 bits by default.
14334 .IP "\fB\-malign\-300\fR" 4
14335 .IX Item "-malign-300"
14336 On the H8/300H and H8S, use the same alignment rules as for the H8/300.
14337 The default for the H8/300H and H8S is to align longs and floats on
14338 4\-byte boundaries.
14339 \&\fB\-malign\-300\fR causes them to be aligned on 2\-byte boundaries.
14340 This option has no effect on the H8/300.
14341 .PP
14342 \fI\s-1HPPA\s0 Options\fR
14343 .IX Subsection "HPPA Options"
14344 .PP
14345 These \fB\-m\fR options are defined for the \s-1HPPA\s0 family of computers:
14346 .IP "\fB\-march=\fR\fIarchitecture-type\fR" 4
14347 .IX Item "-march=architecture-type"
14348 Generate code for the specified architecture.  The choices for
14349 \&\fIarchitecture-type\fR are \fB1.0\fR for \s-1PA\s0 1.0, \fB1.1\fR for \s-1PA\s0
14350 1.1, and \fB2.0\fR for \s-1PA\s0 2.0 processors.  Refer to
14351 \&\fI/usr/lib/sched.models\fR on an HP-UX system to determine the proper
14352 architecture option for your machine.  Code compiled for lower numbered
14353 architectures runs on higher numbered architectures, but not the
14354 other way around.
14355 .IP "\fB\-mpa\-risc\-1\-0\fR" 4
14356 .IX Item "-mpa-risc-1-0"
14357 .PD 0
14358 .IP "\fB\-mpa\-risc\-1\-1\fR" 4
14359 .IX Item "-mpa-risc-1-1"
14360 .IP "\fB\-mpa\-risc\-2\-0\fR" 4
14361 .IX Item "-mpa-risc-2-0"
14362 .PD
14363 Synonyms for \fB\-march=1.0\fR, \fB\-march=1.1\fR, and \fB\-march=2.0\fR respectively.
14364 .IP "\fB\-mjump\-in\-delay\fR" 4
14365 .IX Item "-mjump-in-delay"
14366 This option is ignored and provided for compatibility purposes only.
14367 .IP "\fB\-mdisable\-fpregs\fR" 4
14368 .IX Item "-mdisable-fpregs"
14369 Prevent floating-point registers from being used in any manner.  This is
14370 necessary for compiling kernels that perform lazy context switching of
14371 floating-point registers.  If you use this option and attempt to perform
14372 floating-point operations, the compiler aborts.
14373 .IP "\fB\-mdisable\-indexing\fR" 4
14374 .IX Item "-mdisable-indexing"
14375 Prevent the compiler from using indexing address modes.  This avoids some
14376 rather obscure problems when compiling \s-1MIG\s0 generated code under \s-1MACH\s0.
14377 .IP "\fB\-mno\-space\-regs\fR" 4
14378 .IX Item "-mno-space-regs"
14379 Generate code that assumes the target has no space registers.  This allows
14380 \&\s-1GCC\s0 to generate faster indirect calls and use unscaled index address modes.
14381 .Sp
14382 Such code is suitable for level 0 \s-1PA\s0 systems and kernels.
14383 .IP "\fB\-mfast\-indirect\-calls\fR" 4
14384 .IX Item "-mfast-indirect-calls"
14385 Generate code that assumes calls never cross space boundaries.  This
14386 allows \s-1GCC\s0 to emit code that performs faster indirect calls.
14387 .Sp
14388 This option does not work in the presence of shared libraries or nested
14389 functions.
14390 .IP "\fB\-mfixed\-range=\fR\fIregister-range\fR" 4
14391 .IX Item "-mfixed-range=register-range"
14392 Generate code treating the given register range as fixed registers.
14393 A fixed register is one that the register allocator cannot use.  This is
14394 useful when compiling kernel code.  A register range is specified as
14395 two registers separated by a dash.  Multiple register ranges can be
14396 specified separated by a comma.
14397 .IP "\fB\-mlong\-load\-store\fR" 4
14398 .IX Item "-mlong-load-store"
14399 Generate 3\-instruction load and store sequences as sometimes required by
14400 the HP-UX 10 linker.  This is equivalent to the \fB+k\fR option to
14401 the \s-1HP\s0 compilers.
14402 .IP "\fB\-mportable\-runtime\fR" 4
14403 .IX Item "-mportable-runtime"
14404 Use the portable calling conventions proposed by \s-1HP\s0 for \s-1ELF\s0 systems.
14405 .IP "\fB\-mgas\fR" 4
14406 .IX Item "-mgas"
14407 Enable the use of assembler directives only \s-1GAS\s0 understands.
14408 .IP "\fB\-mschedule=\fR\fIcpu-type\fR" 4
14409 .IX Item "-mschedule=cpu-type"
14410 Schedule code according to the constraints for the machine type
14411 \&\fIcpu-type\fR.  The choices for \fIcpu-type\fR are \fB700\fR
14412 \&\fB7100\fR, \fB7100LC\fR, \fB7200\fR, \fB7300\fR and \fB8000\fR.  Refer
14413 to \fI/usr/lib/sched.models\fR on an HP-UX system to determine the
14414 proper scheduling option for your machine.  The default scheduling is
14415 \&\fB8000\fR.
14416 .IP "\fB\-mlinker\-opt\fR" 4
14417 .IX Item "-mlinker-opt"
14418 Enable the optimization pass in the HP-UX linker.  Note this makes symbolic
14419 debugging impossible.  It also triggers a bug in the HP-UX 8 and HP-UX 9
14420 linkers in which they give bogus error messages when linking some programs.
14421 .IP "\fB\-msoft\-float\fR" 4
14422 .IX Item "-msoft-float"
14423 Generate output containing library calls for floating point.
14424 \&\fBWarning:\fR the requisite libraries are not available for all \s-1HPPA\s0
14425 targets.  Normally the facilities of the machine's usual C compiler are
14426 used, but this cannot be done directly in cross-compilation.  You must make
14427 your own arrangements to provide suitable library functions for
14428 cross-compilation.
14429 .Sp
14430 \&\fB\-msoft\-float\fR changes the calling convention in the output file;
14431 therefore, it is only useful if you compile \fIall\fR of a program with
14432 this option.  In particular, you need to compile \fIlibgcc.a\fR, the
14433 library that comes with \s-1GCC\s0, with \fB\-msoft\-float\fR in order for
14434 this to work.
14435 .IP "\fB\-msio\fR" 4
14436 .IX Item "-msio"
14437 Generate the predefine, \f(CW\*(C`_SIO\*(C'\fR, for server \s-1IO\s0.  The default is
14438 \&\fB\-mwsio\fR.  This generates the predefines, \f(CW\*(C`_\|_hp9000s700\*(C'\fR,
14439 \&\f(CW\*(C`_\|_hp9000s700_\|_\*(C'\fR and \f(CW\*(C`_WSIO\*(C'\fR, for workstation \s-1IO\s0.  These
14440 options are available under HP-UX and HI-UX.
14441 .IP "\fB\-mgnu\-ld\fR" 4
14442 .IX Item "-mgnu-ld"
14443 Use options specific to \s-1GNU\s0 \fBld\fR.
14444 This passes \fB\-shared\fR to \fBld\fR when
14445 building a shared library.  It is the default when \s-1GCC\s0 is configured,
14446 explicitly or implicitly, with the \s-1GNU\s0 linker.  This option does not
14447 affect which \fBld\fR is called; it only changes what parameters
14448 are passed to that \fBld\fR.
14449 The \fBld\fR that is called is determined by the
14450 \&\fB\-\-with\-ld\fR configure option, \s-1GCC\s0's program search path, and
14451 finally by the user's \fB\s-1PATH\s0\fR.  The linker used by \s-1GCC\s0 can be printed
14452 using \fBwhich `gcc \-print\-prog\-name=ld`\fR.  This option is only available
14453 on the 64\-bit HP-UX \s-1GCC\s0, i.e. configured with \fBhppa*64*\-*\-hpux*\fR.
14454 .IP "\fB\-mhp\-ld\fR" 4
14455 .IX Item "-mhp-ld"
14456 Use options specific to \s-1HP\s0 \fBld\fR.
14457 This passes \fB\-b\fR to \fBld\fR when building
14458 a shared library and passes \fB+Accept TypeMismatch\fR to \fBld\fR on all
14459 links.  It is the default when \s-1GCC\s0 is configured, explicitly or
14460 implicitly, with the \s-1HP\s0 linker.  This option does not affect
14461 which \fBld\fR is called; it only changes what parameters are passed to that
14462 \&\fBld\fR.
14463 The \fBld\fR that is called is determined by the \fB\-\-with\-ld\fR
14464 configure option, \s-1GCC\s0's program search path, and finally by the user's
14465 \&\fB\s-1PATH\s0\fR.  The linker used by \s-1GCC\s0 can be printed using \fBwhich
14466 `gcc \-print\-prog\-name=ld`\fR.  This option is only available on the 64\-bit
14467 HP-UX \s-1GCC\s0, i.e. configured with \fBhppa*64*\-*\-hpux*\fR.
14468 .IP "\fB\-mlong\-calls\fR" 4
14469 .IX Item "-mlong-calls"
14470 Generate code that uses long call sequences.  This ensures that a call
14471 is always able to reach linker generated stubs.  The default is to generate
14472 long calls only when the distance from the call site to the beginning
14473 of the function or translation unit, as the case may be, exceeds a
14474 predefined limit set by the branch type being used.  The limits for
14475 normal calls are 7,600,000 and 240,000 bytes, respectively for the
14476 \&\s-1PA\s0 2.0 and \s-1PA\s0 1.X architectures.  Sibcalls are always limited at
14477 240,000 bytes.
14478 .Sp
14479 Distances are measured from the beginning of functions when using the
14480 \&\fB\-ffunction\-sections\fR option, or when using the \fB\-mgas\fR
14481 and \fB\-mno\-portable\-runtime\fR options together under HP-UX with
14482 the \s-1SOM\s0 linker.
14483 .Sp
14484 It is normally not desirable to use this option as it degrades
14485 performance.  However, it may be useful in large applications,
14486 particularly when partial linking is used to build the application.
14487 .Sp
14488 The types of long calls used depends on the capabilities of the
14489 assembler and linker, and the type of code being generated.  The
14490 impact on systems that support long absolute calls, and long pic
14491 symbol-difference or pc-relative calls should be relatively small.
14492 However, an indirect call is used on 32\-bit \s-1ELF\s0 systems in pic code
14493 and it is quite long.
14494 .IP "\fB\-munix=\fR\fIunix-std\fR" 4
14495 .IX Item "-munix=unix-std"
14496 Generate compiler predefines and select a startfile for the specified
14497 \&\s-1UNIX\s0 standard.  The choices for \fIunix-std\fR are \fB93\fR, \fB95\fR
14498 and \fB98\fR.  \fB93\fR is supported on all HP-UX versions.  \fB95\fR
14499 is available on HP-UX 10.10 and later.  \fB98\fR is available on HP-UX
14500 11.11 and later.  The default values are \fB93\fR for HP-UX 10.00,
14501 \&\fB95\fR for HP-UX 10.10 though to 11.00, and \fB98\fR for HP-UX 11.11
14502 and later.
14503 .Sp
14504 \&\fB\-munix=93\fR provides the same predefines as \s-1GCC\s0 3.3 and 3.4.
14505 \&\fB\-munix=95\fR provides additional predefines for \f(CW\*(C`XOPEN_UNIX\*(C'\fR
14506 and \f(CW\*(C`_XOPEN_SOURCE_EXTENDED\*(C'\fR, and the startfile \fIunix95.o\fR.
14507 \&\fB\-munix=98\fR provides additional predefines for \f(CW\*(C`_XOPEN_UNIX\*(C'\fR,
14508 \&\f(CW\*(C`_XOPEN_SOURCE_EXTENDED\*(C'\fR, \f(CW\*(C`_INCLUDE_\|_STDC_A1_SOURCE\*(C'\fR and
14509 \&\f(CW\*(C`_INCLUDE_XOPEN_SOURCE_500\*(C'\fR, and the startfile \fIunix98.o\fR.
14510 .Sp
14511 It is \fIimportant\fR to note that this option changes the interfaces
14512 for various library routines.  It also affects the operational behavior
14513 of the C library.  Thus, \fIextreme\fR care is needed in using this
14514 option.
14515 .Sp
14516 Library code that is intended to operate with more than one \s-1UNIX\s0
14517 standard must test, set and restore the variable \f(CW\*(C`_\|_xpg4_extended_mask\*(C'\fR
14518 as appropriate.  Most \s-1GNU\s0 software doesn't provide this capability.
14519 .IP "\fB\-nolibdld\fR" 4
14520 .IX Item "-nolibdld"
14521 Suppress the generation of link options to search libdld.sl when the
14522 \&\fB\-static\fR option is specified on HP-UX 10 and later.
14523 .IP "\fB\-static\fR" 4
14524 .IX Item "-static"
14525 The HP-UX implementation of setlocale in libc has a dependency on
14526 libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
14527 when the \fB\-static\fR option is specified, special link options
14528 are needed to resolve this dependency.
14529 .Sp
14530 On HP-UX 10 and later, the \s-1GCC\s0 driver adds the necessary options to
14531 link with libdld.sl when the \fB\-static\fR option is specified.
14532 This causes the resulting binary to be dynamic.  On the 64\-bit port,
14533 the linkers generate dynamic binaries by default in any case.  The
14534 \&\fB\-nolibdld\fR option can be used to prevent the \s-1GCC\s0 driver from
14535 adding these link options.
14536 .IP "\fB\-threads\fR" 4
14537 .IX Item "-threads"
14538 Add support for multithreading with the \fIdce thread\fR library
14539 under HP-UX.  This option sets flags for both the preprocessor and
14540 linker.
14541 .PP
14542 \fI\s-1IA\-64\s0 Options\fR
14543 .IX Subsection "IA-64 Options"
14544 .PP
14545 These are the \fB\-m\fR options defined for the Intel \s-1IA\-64\s0 architecture.
14546 .IP "\fB\-mbig\-endian\fR" 4
14547 .IX Item "-mbig-endian"
14548 Generate code for a big-endian target.  This is the default for HP-UX.
14549 .IP "\fB\-mlittle\-endian\fR" 4
14550 .IX Item "-mlittle-endian"
14551 Generate code for a little-endian target.  This is the default for \s-1AIX5\s0
14552 and GNU/Linux.
14553 .IP "\fB\-mgnu\-as\fR" 4
14554 .IX Item "-mgnu-as"
14555 .PD 0
14556 .IP "\fB\-mno\-gnu\-as\fR" 4
14557 .IX Item "-mno-gnu-as"
14558 .PD
14559 Generate (or don't) code for the \s-1GNU\s0 assembler.  This is the default.
14560 .IP "\fB\-mgnu\-ld\fR" 4
14561 .IX Item "-mgnu-ld"
14562 .PD 0
14563 .IP "\fB\-mno\-gnu\-ld\fR" 4
14564 .IX Item "-mno-gnu-ld"
14565 .PD
14566 Generate (or don't) code for the \s-1GNU\s0 linker.  This is the default.
14567 .IP "\fB\-mno\-pic\fR" 4
14568 .IX Item "-mno-pic"
14569 Generate code that does not use a global pointer register.  The result
14570 is not position independent code, and violates the \s-1IA\-64\s0 \s-1ABI\s0.
14571 .IP "\fB\-mvolatile\-asm\-stop\fR" 4
14572 .IX Item "-mvolatile-asm-stop"
14573 .PD 0
14574 .IP "\fB\-mno\-volatile\-asm\-stop\fR" 4
14575 .IX Item "-mno-volatile-asm-stop"
14576 .PD
14577 Generate (or don't) a stop bit immediately before and after volatile asm
14578 statements.
14579 .IP "\fB\-mregister\-names\fR" 4
14580 .IX Item "-mregister-names"
14581 .PD 0
14582 .IP "\fB\-mno\-register\-names\fR" 4
14583 .IX Item "-mno-register-names"
14584 .PD
14585 Generate (or don't) \fBin\fR, \fBloc\fR, and \fBout\fR register names for
14586 the stacked registers.  This may make assembler output more readable.
14587 .IP "\fB\-mno\-sdata\fR" 4
14588 .IX Item "-mno-sdata"
14589 .PD 0
14590 .IP "\fB\-msdata\fR" 4
14591 .IX Item "-msdata"
14592 .PD
14593 Disable (or enable) optimizations that use the small data section.  This may
14594 be useful for working around optimizer bugs.
14595 .IP "\fB\-mconstant\-gp\fR" 4
14596 .IX Item "-mconstant-gp"
14597 Generate code that uses a single constant global pointer value.  This is
14598 useful when compiling kernel code.
14599 .IP "\fB\-mauto\-pic\fR" 4
14600 .IX Item "-mauto-pic"
14601 Generate code that is self-relocatable.  This implies \fB\-mconstant\-gp\fR.
14602 This is useful when compiling firmware code.
14603 .IP "\fB\-minline\-float\-divide\-min\-latency\fR" 4
14604 .IX Item "-minline-float-divide-min-latency"
14605 Generate code for inline divides of floating-point values
14606 using the minimum latency algorithm.
14607 .IP "\fB\-minline\-float\-divide\-max\-throughput\fR" 4
14608 .IX Item "-minline-float-divide-max-throughput"
14609 Generate code for inline divides of floating-point values
14610 using the maximum throughput algorithm.
14611 .IP "\fB\-mno\-inline\-float\-divide\fR" 4
14612 .IX Item "-mno-inline-float-divide"
14613 Do not generate inline code for divides of floating-point values.
14614 .IP "\fB\-minline\-int\-divide\-min\-latency\fR" 4
14615 .IX Item "-minline-int-divide-min-latency"
14616 Generate code for inline divides of integer values
14617 using the minimum latency algorithm.
14618 .IP "\fB\-minline\-int\-divide\-max\-throughput\fR" 4
14619 .IX Item "-minline-int-divide-max-throughput"
14620 Generate code for inline divides of integer values
14621 using the maximum throughput algorithm.
14622 .IP "\fB\-mno\-inline\-int\-divide\fR" 4
14623 .IX Item "-mno-inline-int-divide"
14624 Do not generate inline code for divides of integer values.
14625 .IP "\fB\-minline\-sqrt\-min\-latency\fR" 4
14626 .IX Item "-minline-sqrt-min-latency"
14627 Generate code for inline square roots
14628 using the minimum latency algorithm.
14629 .IP "\fB\-minline\-sqrt\-max\-throughput\fR" 4
14630 .IX Item "-minline-sqrt-max-throughput"
14631 Generate code for inline square roots
14632 using the maximum throughput algorithm.
14633 .IP "\fB\-mno\-inline\-sqrt\fR" 4
14634 .IX Item "-mno-inline-sqrt"
14635 Do not generate inline code for \f(CW\*(C`sqrt\*(C'\fR.
14636 .IP "\fB\-mfused\-madd\fR" 4
14637 .IX Item "-mfused-madd"
14638 .PD 0
14639 .IP "\fB\-mno\-fused\-madd\fR" 4
14640 .IX Item "-mno-fused-madd"
14641 .PD
14642 Do (don't) generate code that uses the fused multiply/add or multiply/subtract
14643 instructions.  The default is to use these instructions.
14644 .IP "\fB\-mno\-dwarf2\-asm\fR" 4
14645 .IX Item "-mno-dwarf2-asm"
14646 .PD 0
14647 .IP "\fB\-mdwarf2\-asm\fR" 4
14648 .IX Item "-mdwarf2-asm"
14649 .PD
14650 Don't (or do) generate assembler code for the \s-1DWARF\s0 2 line number debugging
14651 info.  This may be useful when not using the \s-1GNU\s0 assembler.
14652 .IP "\fB\-mearly\-stop\-bits\fR" 4
14653 .IX Item "-mearly-stop-bits"
14654 .PD 0
14655 .IP "\fB\-mno\-early\-stop\-bits\fR" 4
14656 .IX Item "-mno-early-stop-bits"
14657 .PD
14658 Allow stop bits to be placed earlier than immediately preceding the
14659 instruction that triggered the stop bit.  This can improve instruction
14660 scheduling, but does not always do so.
14661 .IP "\fB\-mfixed\-range=\fR\fIregister-range\fR" 4
14662 .IX Item "-mfixed-range=register-range"
14663 Generate code treating the given register range as fixed registers.
14664 A fixed register is one that the register allocator cannot use.  This is
14665 useful when compiling kernel code.  A register range is specified as
14666 two registers separated by a dash.  Multiple register ranges can be
14667 specified separated by a comma.
14668 .IP "\fB\-mtls\-size=\fR\fItls-size\fR" 4
14669 .IX Item "-mtls-size=tls-size"
14670 Specify bit size of immediate \s-1TLS\s0 offsets.  Valid values are 14, 22, and
14671 64.
14672 .IP "\fB\-mtune=\fR\fIcpu-type\fR" 4
14673 .IX Item "-mtune=cpu-type"
14674 Tune the instruction scheduling for a particular \s-1CPU\s0, Valid values are
14675 \&\fBitanium\fR, \fBitanium1\fR, \fBmerced\fR, \fBitanium2\fR,
14676 and \fBmckinley\fR.
14677 .IP "\fB\-milp32\fR" 4
14678 .IX Item "-milp32"
14679 .PD 0
14680 .IP "\fB\-mlp64\fR" 4
14681 .IX Item "-mlp64"
14682 .PD
14683 Generate code for a 32\-bit or 64\-bit environment.
14684 The 32\-bit environment sets int, long and pointer to 32 bits.
14685 The 64\-bit environment sets int to 32 bits and long and pointer
14686 to 64 bits.  These are HP-UX specific flags.
14687 .IP "\fB\-mno\-sched\-br\-data\-spec\fR" 4
14688 .IX Item "-mno-sched-br-data-spec"
14689 .PD 0
14690 .IP "\fB\-msched\-br\-data\-spec\fR" 4
14691 .IX Item "-msched-br-data-spec"
14692 .PD
14693 (Dis/En)able data speculative scheduling before reload.
14694 This results in generation of \f(CW\*(C`ld.a\*(C'\fR instructions and
14695 the corresponding check instructions (\f(CW\*(C`ld.c\*(C'\fR / \f(CW\*(C`chk.a\*(C'\fR).
14696 The default is 'disable'.
14697 .IP "\fB\-msched\-ar\-data\-spec\fR" 4
14698 .IX Item "-msched-ar-data-spec"
14699 .PD 0
14700 .IP "\fB\-mno\-sched\-ar\-data\-spec\fR" 4
14701 .IX Item "-mno-sched-ar-data-spec"
14702 .PD
14703 (En/Dis)able data speculative scheduling after reload.
14704 This results in generation of \f(CW\*(C`ld.a\*(C'\fR instructions and
14705 the corresponding check instructions (\f(CW\*(C`ld.c\*(C'\fR / \f(CW\*(C`chk.a\*(C'\fR).
14706 The default is 'enable'.
14707 .IP "\fB\-mno\-sched\-control\-spec\fR" 4
14708 .IX Item "-mno-sched-control-spec"
14709 .PD 0
14710 .IP "\fB\-msched\-control\-spec\fR" 4
14711 .IX Item "-msched-control-spec"
14712 .PD
14713 (Dis/En)able control speculative scheduling.  This feature is
14714 available only during region scheduling (i.e. before reload).
14715 This results in generation of the \f(CW\*(C`ld.s\*(C'\fR instructions and
14716 the corresponding check instructions \f(CW\*(C`chk.s\*(C'\fR.
14717 The default is 'disable'.
14718 .IP "\fB\-msched\-br\-in\-data\-spec\fR" 4
14719 .IX Item "-msched-br-in-data-spec"
14720 .PD 0
14721 .IP "\fB\-mno\-sched\-br\-in\-data\-spec\fR" 4
14722 .IX Item "-mno-sched-br-in-data-spec"
14723 .PD
14724 (En/Dis)able speculative scheduling of the instructions that
14725 are dependent on the data speculative loads before reload.
14726 This is effective only with \fB\-msched\-br\-data\-spec\fR enabled.
14727 The default is 'enable'.
14728 .IP "\fB\-msched\-ar\-in\-data\-spec\fR" 4
14729 .IX Item "-msched-ar-in-data-spec"
14730 .PD 0
14731 .IP "\fB\-mno\-sched\-ar\-in\-data\-spec\fR" 4
14732 .IX Item "-mno-sched-ar-in-data-spec"
14733 .PD
14734 (En/Dis)able speculative scheduling of the instructions that
14735 are dependent on the data speculative loads after reload.
14736 This is effective only with \fB\-msched\-ar\-data\-spec\fR enabled.
14737 The default is 'enable'.
14738 .IP "\fB\-msched\-in\-control\-spec\fR" 4
14739 .IX Item "-msched-in-control-spec"
14740 .PD 0
14741 .IP "\fB\-mno\-sched\-in\-control\-spec\fR" 4
14742 .IX Item "-mno-sched-in-control-spec"
14743 .PD
14744 (En/Dis)able speculative scheduling of the instructions that
14745 are dependent on the control speculative loads.
14746 This is effective only with \fB\-msched\-control\-spec\fR enabled.
14747 The default is 'enable'.
14748 .IP "\fB\-mno\-sched\-prefer\-non\-data\-spec\-insns\fR" 4
14749 .IX Item "-mno-sched-prefer-non-data-spec-insns"
14750 .PD 0
14751 .IP "\fB\-msched\-prefer\-non\-data\-spec\-insns\fR" 4
14752 .IX Item "-msched-prefer-non-data-spec-insns"
14753 .PD
14754 If enabled, data-speculative instructions are chosen for schedule
14755 only if there are no other choices at the moment.  This makes
14756 the use of the data speculation much more conservative.
14757 The default is 'disable'.
14758 .IP "\fB\-mno\-sched\-prefer\-non\-control\-spec\-insns\fR" 4
14759 .IX Item "-mno-sched-prefer-non-control-spec-insns"
14760 .PD 0
14761 .IP "\fB\-msched\-prefer\-non\-control\-spec\-insns\fR" 4
14762 .IX Item "-msched-prefer-non-control-spec-insns"
14763 .PD
14764 If enabled, control-speculative instructions are chosen for schedule
14765 only if there are no other choices at the moment.  This makes
14766 the use of the control speculation much more conservative.
14767 The default is 'disable'.
14768 .IP "\fB\-mno\-sched\-count\-spec\-in\-critical\-path\fR" 4
14769 .IX Item "-mno-sched-count-spec-in-critical-path"
14770 .PD 0
14771 .IP "\fB\-msched\-count\-spec\-in\-critical\-path\fR" 4
14772 .IX Item "-msched-count-spec-in-critical-path"
14773 .PD
14774 If enabled, speculative dependencies are considered during
14775 computation of the instructions priorities.  This makes the use of the
14776 speculation a bit more conservative.
14777 The default is 'disable'.
14778 .IP "\fB\-msched\-spec\-ldc\fR" 4
14779 .IX Item "-msched-spec-ldc"
14780 Use a simple data speculation check.  This option is on by default.
14781 .IP "\fB\-msched\-control\-spec\-ldc\fR" 4
14782 .IX Item "-msched-control-spec-ldc"
14783 Use a simple check for control speculation.  This option is on by default.
14784 .IP "\fB\-msched\-stop\-bits\-after\-every\-cycle\fR" 4
14785 .IX Item "-msched-stop-bits-after-every-cycle"
14786 Place a stop bit after every cycle when scheduling.  This option is on
14787 by default.
14788 .IP "\fB\-msched\-fp\-mem\-deps\-zero\-cost\fR" 4
14789 .IX Item "-msched-fp-mem-deps-zero-cost"
14790 Assume that floating-point stores and loads are not likely to cause a conflict
14791 when placed into the same instruction group.  This option is disabled by
14792 default.
14793 .IP "\fB\-msel\-sched\-dont\-check\-control\-spec\fR" 4
14794 .IX Item "-msel-sched-dont-check-control-spec"
14795 Generate checks for control speculation in selective scheduling.
14796 This flag is disabled by default.
14797 .IP "\fB\-msched\-max\-memory\-insns=\fR\fImax-insns\fR" 4
14798 .IX Item "-msched-max-memory-insns=max-insns"
14799 Limit on the number of memory insns per instruction group, giving lower
14800 priority to subsequent memory insns attempting to schedule in the same
14801 instruction group. Frequently useful to prevent cache bank conflicts.
14802 The default value is 1.
14803 .IP "\fB\-msched\-max\-memory\-insns\-hard\-limit\fR" 4
14804 .IX Item "-msched-max-memory-insns-hard-limit"
14805 Makes the limit specified by \fBmsched-max-memory-insns\fR a hard limit,
14806 disallowing more than that number in an instruction group.
14807 Otherwise, the limit is \*(L"soft\*(R", meaning that non-memory operations
14808 are preferred when the limit is reached, but memory operations may still
14809 be scheduled.
14810 .PP
14811 \fI\s-1LM32\s0 Options\fR
14812 .IX Subsection "LM32 Options"
14813 .PP
14814 These \fB\-m\fR options are defined for the LatticeMico32 architecture:
14815 .IP "\fB\-mbarrel\-shift\-enabled\fR" 4
14816 .IX Item "-mbarrel-shift-enabled"
14817 Enable barrel-shift instructions.
14818 .IP "\fB\-mdivide\-enabled\fR" 4
14819 .IX Item "-mdivide-enabled"
14820 Enable divide and modulus instructions.
14821 .IP "\fB\-mmultiply\-enabled\fR" 4
14822 .IX Item "-mmultiply-enabled"
14823 Enable multiply instructions.
14824 .IP "\fB\-msign\-extend\-enabled\fR" 4
14825 .IX Item "-msign-extend-enabled"
14826 Enable sign extend instructions.
14827 .IP "\fB\-muser\-enabled\fR" 4
14828 .IX Item "-muser-enabled"
14829 Enable user-defined instructions.
14830 .PP
14831 \fIM32C Options\fR
14832 .IX Subsection "M32C Options"
14833 .IP "\fB\-mcpu=\fR\fIname\fR" 4
14834 .IX Item "-mcpu=name"
14835 Select the \s-1CPU\s0 for which code is generated.  \fIname\fR may be one of
14836 \&\fBr8c\fR for the R8C/Tiny series, \fBm16c\fR for the M16C (up to
14837 /60) series, \fBm32cm\fR for the M16C/80 series, or \fBm32c\fR for
14838 the M32C/80 series.
14839 .IP "\fB\-msim\fR" 4
14840 .IX Item "-msim"
14841 Specifies that the program will be run on the simulator.  This causes
14842 an alternate runtime library to be linked in which supports, for
14843 example, file I/O.  You must not use this option when generating
14844 programs that will run on real hardware; you must provide your own
14845 runtime library for whatever I/O functions are needed.
14846 .IP "\fB\-memregs=\fR\fInumber\fR" 4
14847 .IX Item "-memregs=number"
14848 Specifies the number of memory-based pseudo-registers \s-1GCC\s0 uses
14849 during code generation.  These pseudo-registers are used like real
14850 registers, so there is a tradeoff between \s-1GCC\s0's ability to fit the
14851 code into available registers, and the performance penalty of using
14852 memory instead of registers.  Note that all modules in a program must
14853 be compiled with the same value for this option.  Because of that, you
14854 must not use this option with \s-1GCC\s0's default runtime libraries.
14855 .PP
14856 \fIM32R/D Options\fR
14857 .IX Subsection "M32R/D Options"
14858 .PP
14859 These \fB\-m\fR options are defined for Renesas M32R/D architectures:
14860 .IP "\fB\-m32r2\fR" 4
14861 .IX Item "-m32r2"
14862 Generate code for the M32R/2.
14863 .IP "\fB\-m32rx\fR" 4
14864 .IX Item "-m32rx"
14865 Generate code for the M32R/X.
14866 .IP "\fB\-m32r\fR" 4
14867 .IX Item "-m32r"
14868 Generate code for the M32R.  This is the default.
14869 .IP "\fB\-mmodel=small\fR" 4
14870 .IX Item "-mmodel=small"
14871 Assume all objects live in the lower 16MB of memory (so that their addresses
14872 can be loaded with the \f(CW\*(C`ld24\*(C'\fR instruction), and assume all subroutines
14873 are reachable with the \f(CW\*(C`bl\*(C'\fR instruction.
14874 This is the default.
14875 .Sp
14876 The addressability of a particular object can be set with the
14877 \&\f(CW\*(C`model\*(C'\fR attribute.
14878 .IP "\fB\-mmodel=medium\fR" 4
14879 .IX Item "-mmodel=medium"
14880 Assume objects may be anywhere in the 32\-bit address space (the compiler
14881 generates \f(CW\*(C`seth/add3\*(C'\fR instructions to load their addresses), and
14882 assume all subroutines are reachable with the \f(CW\*(C`bl\*(C'\fR instruction.
14883 .IP "\fB\-mmodel=large\fR" 4
14884 .IX Item "-mmodel=large"
14885 Assume objects may be anywhere in the 32\-bit address space (the compiler
14886 generates \f(CW\*(C`seth/add3\*(C'\fR instructions to load their addresses), and
14887 assume subroutines may not be reachable with the \f(CW\*(C`bl\*(C'\fR instruction
14888 (the compiler generates the much slower \f(CW\*(C`seth/add3/jl\*(C'\fR
14889 instruction sequence).
14890 .IP "\fB\-msdata=none\fR" 4
14891 .IX Item "-msdata=none"
14892 Disable use of the small data area.  Variables are put into
14893 one of \f(CW\*(C`.data\*(C'\fR, \f(CW\*(C`.bss\*(C'\fR, or \f(CW\*(C`.rodata\*(C'\fR (unless the
14894 \&\f(CW\*(C`section\*(C'\fR attribute has been specified).
14895 This is the default.
14896 .Sp
14897 The small data area consists of sections \f(CW\*(C`.sdata\*(C'\fR and \f(CW\*(C`.sbss\*(C'\fR.
14898 Objects may be explicitly put in the small data area with the
14899 \&\f(CW\*(C`section\*(C'\fR attribute using one of these sections.
14900 .IP "\fB\-msdata=sdata\fR" 4
14901 .IX Item "-msdata=sdata"
14902 Put small global and static data in the small data area, but do not
14903 generate special code to reference them.
14904 .IP "\fB\-msdata=use\fR" 4
14905 .IX Item "-msdata=use"
14906 Put small global and static data in the small data area, and generate
14907 special instructions to reference them.
14908 .IP "\fB\-G\fR \fInum\fR" 4
14909 .IX Item "-G num"
14910 Put global and static objects less than or equal to \fInum\fR bytes
14911 into the small data or \s-1BSS\s0 sections instead of the normal data or \s-1BSS\s0
14912 sections.  The default value of \fInum\fR is 8.
14913 The \fB\-msdata\fR option must be set to one of \fBsdata\fR or \fBuse\fR
14914 for this option to have any effect.
14915 .Sp
14916 All modules should be compiled with the same \fB\-G\fR \fInum\fR value.
14917 Compiling with different values of \fInum\fR may or may not work; if it
14918 doesn't the linker gives an error message\-\-\-incorrect code is not
14919 generated.
14920 .IP "\fB\-mdebug\fR" 4
14921 .IX Item "-mdebug"
14922 Makes the M32R\-specific code in the compiler display some statistics
14923 that might help in debugging programs.
14924 .IP "\fB\-malign\-loops\fR" 4
14925 .IX Item "-malign-loops"
14926 Align all loops to a 32\-byte boundary.
14927 .IP "\fB\-mno\-align\-loops\fR" 4
14928 .IX Item "-mno-align-loops"
14929 Do not enforce a 32\-byte alignment for loops.  This is the default.
14930 .IP "\fB\-missue\-rate=\fR\fInumber\fR" 4
14931 .IX Item "-missue-rate=number"
14932 Issue \fInumber\fR instructions per cycle.  \fInumber\fR can only be 1
14933 or 2.
14934 .IP "\fB\-mbranch\-cost=\fR\fInumber\fR" 4
14935 .IX Item "-mbranch-cost=number"
14936 \&\fInumber\fR can only be 1 or 2.  If it is 1 then branches are
14937 preferred over conditional code, if it is 2, then the opposite applies.
14938 .IP "\fB\-mflush\-trap=\fR\fInumber\fR" 4
14939 .IX Item "-mflush-trap=number"
14940 Specifies the trap number to use to flush the cache.  The default is
14941 12.  Valid numbers are between 0 and 15 inclusive.
14942 .IP "\fB\-mno\-flush\-trap\fR" 4
14943 .IX Item "-mno-flush-trap"
14944 Specifies that the cache cannot be flushed by using a trap.
14945 .IP "\fB\-mflush\-func=\fR\fIname\fR" 4
14946 .IX Item "-mflush-func=name"
14947 Specifies the name of the operating system function to call to flush
14948 the cache.  The default is \fB_flush_cache\fR, but a function call
14949 is only used if a trap is not available.
14950 .IP "\fB\-mno\-flush\-func\fR" 4
14951 .IX Item "-mno-flush-func"
14952 Indicates that there is no \s-1OS\s0 function for flushing the cache.
14953 .PP
14954 \fIM680x0 Options\fR
14955 .IX Subsection "M680x0 Options"
14956 .PP
14957 These are the \fB\-m\fR options defined for M680x0 and ColdFire processors.
14958 The default settings depend on which architecture was selected when
14959 the compiler was configured; the defaults for the most common choices
14960 are given below.
14961 .IP "\fB\-march=\fR\fIarch\fR" 4
14962 .IX Item "-march=arch"
14963 Generate code for a specific M680x0 or ColdFire instruction set
14964 architecture.  Permissible values of \fIarch\fR for M680x0
14965 architectures are: \fB68000\fR, \fB68010\fR, \fB68020\fR,
14966 \&\fB68030\fR, \fB68040\fR, \fB68060\fR and \fBcpu32\fR.  ColdFire
14967 architectures are selected according to Freescale's \s-1ISA\s0 classification
14968 and the permissible values are: \fBisaa\fR, \fBisaaplus\fR,
14969 \&\fBisab\fR and \fBisac\fR.
14970 .Sp
14971 \&\s-1GCC\s0 defines a macro \f(CW\*(C`_\|_mcf\f(CIarch\f(CW_\|_\*(C'\fR whenever it is generating
14972 code for a ColdFire target.  The \fIarch\fR in this macro is one of the
14973 \&\fB\-march\fR arguments given above.
14974 .Sp
14975 When used together, \fB\-march\fR and \fB\-mtune\fR select code
14976 that runs on a family of similar processors but that is optimized
14977 for a particular microarchitecture.
14978 .IP "\fB\-mcpu=\fR\fIcpu\fR" 4
14979 .IX Item "-mcpu=cpu"
14980 Generate code for a specific M680x0 or ColdFire processor.
14981 The M680x0 \fIcpu\fRs are: \fB68000\fR, \fB68010\fR, \fB68020\fR,
14982 \&\fB68030\fR, \fB68040\fR, \fB68060\fR, \fB68302\fR, \fB68332\fR
14983 and \fBcpu32\fR.  The ColdFire \fIcpu\fRs are given by the table
14984 below, which also classifies the CPUs into families:
14985 .RS 4
14986 .IP "Family : \fB\-mcpu\fR arguments" 4
14987 .IX Item "Family : -mcpu arguments"
14988 .PD 0
14989 .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
14990 .IX Item "51 : 51 51ac 51ag 51cn 51em 51je 51jf 51jg 51jm 51mm 51qe 51qm"
14991 .IP "\fB5206\fR : \fB5202\fR \fB5204\fR \fB5206\fR" 4
14992 .IX Item "5206 : 5202 5204 5206"
14993 .IP "\fB5206e\fR : \fB5206e\fR" 4
14994 .IX Item "5206e : 5206e"
14995 .IP "\fB5208\fR : \fB5207\fR \fB5208\fR" 4
14996 .IX Item "5208 : 5207 5208"
14997 .IP "\fB5211a\fR : \fB5210a\fR \fB5211a\fR" 4
14998 .IX Item "5211a : 5210a 5211a"
14999 .IP "\fB5213\fR : \fB5211\fR \fB5212\fR \fB5213\fR" 4
15000 .IX Item "5213 : 5211 5212 5213"
15001 .IP "\fB5216\fR : \fB5214\fR \fB5216\fR" 4
15002 .IX Item "5216 : 5214 5216"
15003 .IP "\fB52235\fR : \fB52230\fR \fB52231\fR \fB52232\fR \fB52233\fR \fB52234\fR \fB52235\fR" 4
15004 .IX Item "52235 : 52230 52231 52232 52233 52234 52235"
15005 .IP "\fB5225\fR : \fB5224\fR \fB5225\fR" 4
15006 .IX Item "5225 : 5224 5225"
15007 .IP "\fB52259\fR : \fB52252\fR \fB52254\fR \fB52255\fR \fB52256\fR \fB52258\fR \fB52259\fR" 4
15008 .IX Item "52259 : 52252 52254 52255 52256 52258 52259"
15009 .IP "\fB5235\fR : \fB5232\fR \fB5233\fR \fB5234\fR \fB5235\fR \fB523x\fR" 4
15010 .IX Item "5235 : 5232 5233 5234 5235 523x"
15011 .IP "\fB5249\fR : \fB5249\fR" 4
15012 .IX Item "5249 : 5249"
15013 .IP "\fB5250\fR : \fB5250\fR" 4
15014 .IX Item "5250 : 5250"
15015 .IP "\fB5271\fR : \fB5270\fR \fB5271\fR" 4
15016 .IX Item "5271 : 5270 5271"
15017 .IP "\fB5272\fR : \fB5272\fR" 4
15018 .IX Item "5272 : 5272"
15019 .IP "\fB5275\fR : \fB5274\fR \fB5275\fR" 4
15020 .IX Item "5275 : 5274 5275"
15021 .IP "\fB5282\fR : \fB5280\fR \fB5281\fR \fB5282\fR \fB528x\fR" 4
15022 .IX Item "5282 : 5280 5281 5282 528x"
15023 .IP "\fB53017\fR : \fB53011\fR \fB53012\fR \fB53013\fR \fB53014\fR \fB53015\fR \fB53016\fR \fB53017\fR" 4
15024 .IX Item "53017 : 53011 53012 53013 53014 53015 53016 53017"
15025 .IP "\fB5307\fR : \fB5307\fR" 4
15026 .IX Item "5307 : 5307"
15027 .IP "\fB5329\fR : \fB5327\fR \fB5328\fR \fB5329\fR \fB532x\fR" 4
15028 .IX Item "5329 : 5327 5328 5329 532x"
15029 .IP "\fB5373\fR : \fB5372\fR \fB5373\fR \fB537x\fR" 4
15030 .IX Item "5373 : 5372 5373 537x"
15031 .IP "\fB5407\fR : \fB5407\fR" 4
15032 .IX Item "5407 : 5407"
15033 .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
15034 .IX Item "5475 : 5470 5471 5472 5473 5474 5475 547x 5480 5481 5482 5483 5484 5485"
15035 .RE
15036 .RS 4
15037 .PD
15038 .Sp
15039 \&\fB\-mcpu=\fR\fIcpu\fR overrides \fB\-march=\fR\fIarch\fR if
15040 \&\fIarch\fR is compatible with \fIcpu\fR.  Other combinations of
15041 \&\fB\-mcpu\fR and \fB\-march\fR are rejected.
15042 .Sp
15043 \&\s-1GCC\s0 defines the macro \f(CW\*(C`_\|_mcf_cpu_\f(CIcpu\f(CW\*(C'\fR when ColdFire target
15044 \&\fIcpu\fR is selected.  It also defines \f(CW\*(C`_\|_mcf_family_\f(CIfamily\f(CW\*(C'\fR,
15045 where the value of \fIfamily\fR is given by the table above.
15046 .RE
15047 .IP "\fB\-mtune=\fR\fItune\fR" 4
15048 .IX Item "-mtune=tune"
15049 Tune the code for a particular microarchitecture within the
15050 constraints set by \fB\-march\fR and \fB\-mcpu\fR.
15051 The M680x0 microarchitectures are: \fB68000\fR, \fB68010\fR,
15052 \&\fB68020\fR, \fB68030\fR, \fB68040\fR, \fB68060\fR
15053 and \fBcpu32\fR.  The ColdFire microarchitectures
15054 are: \fBcfv1\fR, \fBcfv2\fR, \fBcfv3\fR, \fBcfv4\fR and \fBcfv4e\fR.
15055 .Sp
15056 You can also use \fB\-mtune=68020\-40\fR for code that needs
15057 to run relatively well on 68020, 68030 and 68040 targets.
15058 \&\fB\-mtune=68020\-60\fR is similar but includes 68060 targets
15059 as well.  These two options select the same tuning decisions as
15060 \&\fB\-m68020\-40\fR and \fB\-m68020\-60\fR respectively.
15061 .Sp
15062 \&\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
15063 when tuning for 680x0 architecture \fIarch\fR.  It also defines
15064 \&\f(CW\*(C`mc\f(CIarch\f(CW\*(C'\fR unless either \fB\-ansi\fR or a non-GNU \fB\-std\fR
15065 option is used.  If \s-1GCC\s0 is tuning for a range of architectures,
15066 as selected by \fB\-mtune=68020\-40\fR or \fB\-mtune=68020\-60\fR,
15067 it defines the macros for every architecture in the range.
15068 .Sp
15069 \&\s-1GCC\s0 also defines the macro \f(CW\*(C`_\|_m\f(CIuarch\f(CW_\|_\*(C'\fR when tuning for
15070 ColdFire microarchitecture \fIuarch\fR, where \fIuarch\fR is one
15071 of the arguments given above.
15072 .IP "\fB\-m68000\fR" 4
15073 .IX Item "-m68000"
15074 .PD 0
15075 .IP "\fB\-mc68000\fR" 4
15076 .IX Item "-mc68000"
15077 .PD
15078 Generate output for a 68000.  This is the default
15079 when the compiler is configured for 68000\-based systems.
15080 It is equivalent to \fB\-march=68000\fR.
15081 .Sp
15082 Use this option for microcontrollers with a 68000 or \s-1EC000\s0 core,
15083 including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
15084 .IP "\fB\-m68010\fR" 4
15085 .IX Item "-m68010"
15086 Generate output for a 68010.  This is the default
15087 when the compiler is configured for 68010\-based systems.
15088 It is equivalent to \fB\-march=68010\fR.
15089 .IP "\fB\-m68020\fR" 4
15090 .IX Item "-m68020"
15091 .PD 0
15092 .IP "\fB\-mc68020\fR" 4
15093 .IX Item "-mc68020"
15094 .PD
15095 Generate output for a 68020.  This is the default
15096 when the compiler is configured for 68020\-based systems.
15097 It is equivalent to \fB\-march=68020\fR.
15098 .IP "\fB\-m68030\fR" 4
15099 .IX Item "-m68030"
15100 Generate output for a 68030.  This is the default when the compiler is
15101 configured for 68030\-based systems.  It is equivalent to
15102 \&\fB\-march=68030\fR.
15103 .IP "\fB\-m68040\fR" 4
15104 .IX Item "-m68040"
15105 Generate output for a 68040.  This is the default when the compiler is
15106 configured for 68040\-based systems.  It is equivalent to
15107 \&\fB\-march=68040\fR.
15108 .Sp
15109 This option inhibits the use of 68881/68882 instructions that have to be
15110 emulated by software on the 68040.  Use this option if your 68040 does not
15111 have code to emulate those instructions.
15112 .IP "\fB\-m68060\fR" 4
15113 .IX Item "-m68060"
15114 Generate output for a 68060.  This is the default when the compiler is
15115 configured for 68060\-based systems.  It is equivalent to
15116 \&\fB\-march=68060\fR.
15117 .Sp
15118 This option inhibits the use of 68020 and 68881/68882 instructions that
15119 have to be emulated by software on the 68060.  Use this option if your 68060
15120 does not have code to emulate those instructions.
15121 .IP "\fB\-mcpu32\fR" 4
15122 .IX Item "-mcpu32"
15123 Generate output for a \s-1CPU32\s0.  This is the default
15124 when the compiler is configured for CPU32\-based systems.
15125 It is equivalent to \fB\-march=cpu32\fR.
15126 .Sp
15127 Use this option for microcontrollers with a
15128 \&\s-1CPU32\s0 or \s-1CPU32+\s0 core, including the 68330, 68331, 68332, 68333, 68334,
15129 68336, 68340, 68341, 68349 and 68360.
15130 .IP "\fB\-m5200\fR" 4
15131 .IX Item "-m5200"
15132 Generate output for a 520X ColdFire \s-1CPU\s0.  This is the default
15133 when the compiler is configured for 520X\-based systems.
15134 It is equivalent to \fB\-mcpu=5206\fR, and is now deprecated
15135 in favor of that option.
15136 .Sp
15137 Use this option for microcontroller with a 5200 core, including
15138 the \s-1MCF5202\s0, \s-1MCF5203\s0, \s-1MCF5204\s0 and \s-1MCF5206\s0.
15139 .IP "\fB\-m5206e\fR" 4
15140 .IX Item "-m5206e"
15141 Generate output for a 5206e ColdFire \s-1CPU\s0.  The option is now
15142 deprecated in favor of the equivalent \fB\-mcpu=5206e\fR.
15143 .IP "\fB\-m528x\fR" 4
15144 .IX Item "-m528x"
15145 Generate output for a member of the ColdFire 528X family.
15146 The option is now deprecated in favor of the equivalent
15147 \&\fB\-mcpu=528x\fR.
15148 .IP "\fB\-m5307\fR" 4
15149 .IX Item "-m5307"
15150 Generate output for a ColdFire 5307 \s-1CPU\s0.  The option is now deprecated
15151 in favor of the equivalent \fB\-mcpu=5307\fR.
15152 .IP "\fB\-m5407\fR" 4
15153 .IX Item "-m5407"
15154 Generate output for a ColdFire 5407 \s-1CPU\s0.  The option is now deprecated
15155 in favor of the equivalent \fB\-mcpu=5407\fR.
15156 .IP "\fB\-mcfv4e\fR" 4
15157 .IX Item "-mcfv4e"
15158 Generate output for a ColdFire V4e family \s-1CPU\s0 (e.g. 547x/548x).
15159 This includes use of hardware floating-point instructions.
15160 The option is equivalent to \fB\-mcpu=547x\fR, and is now
15161 deprecated in favor of that option.
15162 .IP "\fB\-m68020\-40\fR" 4
15163 .IX Item "-m68020-40"
15164 Generate output for a 68040, without using any of the new instructions.
15165 This results in code that can run relatively efficiently on either a
15166 68020/68881 or a 68030 or a 68040.  The generated code does use the
15167 68881 instructions that are emulated on the 68040.
15168 .Sp
15169 The option is equivalent to \fB\-march=68020\fR \fB\-mtune=68020\-40\fR.
15170 .IP "\fB\-m68020\-60\fR" 4
15171 .IX Item "-m68020-60"
15172 Generate output for a 68060, without using any of the new instructions.
15173 This results in code that can run relatively efficiently on either a
15174 68020/68881 or a 68030 or a 68040.  The generated code does use the
15175 68881 instructions that are emulated on the 68060.
15176 .Sp
15177 The option is equivalent to \fB\-march=68020\fR \fB\-mtune=68020\-60\fR.
15178 .IP "\fB\-mhard\-float\fR" 4
15179 .IX Item "-mhard-float"
15180 .PD 0
15181 .IP "\fB\-m68881\fR" 4
15182 .IX Item "-m68881"
15183 .PD
15184 Generate floating-point instructions.  This is the default for 68020
15185 and above, and for ColdFire devices that have an \s-1FPU\s0.  It defines the
15186 macro \f(CW\*(C`_\|_HAVE_68881_\|_\*(C'\fR on M680x0 targets and \f(CW\*(C`_\|_mcffpu_\|_\*(C'\fR
15187 on ColdFire targets.
15188 .IP "\fB\-msoft\-float\fR" 4
15189 .IX Item "-msoft-float"
15190 Do not generate floating-point instructions; use library calls instead.
15191 This is the default for 68000, 68010, and 68832 targets.  It is also
15192 the default for ColdFire devices that have no \s-1FPU\s0.
15193 .IP "\fB\-mdiv\fR" 4
15194 .IX Item "-mdiv"
15195 .PD 0
15196 .IP "\fB\-mno\-div\fR" 4
15197 .IX Item "-mno-div"
15198 .PD
15199 Generate (do not generate) ColdFire hardware divide and remainder
15200 instructions.  If \fB\-march\fR is used without \fB\-mcpu\fR,
15201 the default is \*(L"on\*(R" for ColdFire architectures and \*(L"off\*(R" for M680x0
15202 architectures.  Otherwise, the default is taken from the target \s-1CPU\s0
15203 (either the default \s-1CPU\s0, or the one specified by \fB\-mcpu\fR).  For
15204 example, the default is \*(L"off\*(R" for \fB\-mcpu=5206\fR and \*(L"on\*(R" for
15205 \&\fB\-mcpu=5206e\fR.
15206 .Sp
15207 \&\s-1GCC\s0 defines the macro \f(CW\*(C`_\|_mcfhwdiv_\|_\*(C'\fR when this option is enabled.
15208 .IP "\fB\-mshort\fR" 4
15209 .IX Item "-mshort"
15210 Consider type \f(CW\*(C`int\*(C'\fR to be 16 bits wide, like \f(CW\*(C`short int\*(C'\fR.
15211 Additionally, parameters passed on the stack are also aligned to a
15212 16\-bit boundary even on targets whose \s-1API\s0 mandates promotion to 32\-bit.
15213 .IP "\fB\-mno\-short\fR" 4
15214 .IX Item "-mno-short"
15215 Do not consider type \f(CW\*(C`int\*(C'\fR to be 16 bits wide.  This is the default.
15216 .IP "\fB\-mnobitfield\fR" 4
15217 .IX Item "-mnobitfield"
15218 .PD 0
15219 .IP "\fB\-mno\-bitfield\fR" 4
15220 .IX Item "-mno-bitfield"
15221 .PD
15222 Do not use the bit-field instructions.  The \fB\-m68000\fR, \fB\-mcpu32\fR
15223 and \fB\-m5200\fR options imply \fB\-mnobitfield\fR.
15224 .IP "\fB\-mbitfield\fR" 4
15225 .IX Item "-mbitfield"
15226 Do use the bit-field instructions.  The \fB\-m68020\fR option implies
15227 \&\fB\-mbitfield\fR.  This is the default if you use a configuration
15228 designed for a 68020.
15229 .IP "\fB\-mrtd\fR" 4
15230 .IX Item "-mrtd"
15231 Use a different function-calling convention, in which functions
15232 that take a fixed number of arguments return with the \f(CW\*(C`rtd\*(C'\fR
15233 instruction, which pops their arguments while returning.  This
15234 saves one instruction in the caller since there is no need to pop
15235 the arguments there.
15236 .Sp
15237 This calling convention is incompatible with the one normally
15238 used on Unix, so you cannot use it if you need to call libraries
15239 compiled with the Unix compiler.
15240 .Sp
15241 Also, you must provide function prototypes for all functions that
15242 take variable numbers of arguments (including \f(CW\*(C`printf\*(C'\fR);
15243 otherwise incorrect code is generated for calls to those
15244 functions.
15245 .Sp
15246 In addition, seriously incorrect code results if you call a
15247 function with too many arguments.  (Normally, extra arguments are
15248 harmlessly ignored.)
15249 .Sp
15250 The \f(CW\*(C`rtd\*(C'\fR instruction is supported by the 68010, 68020, 68030,
15251 68040, 68060 and \s-1CPU32\s0 processors, but not by the 68000 or 5200.
15252 .IP "\fB\-mno\-rtd\fR" 4
15253 .IX Item "-mno-rtd"
15254 Do not use the calling conventions selected by \fB\-mrtd\fR.
15255 This is the default.
15256 .IP "\fB\-malign\-int\fR" 4
15257 .IX Item "-malign-int"
15258 .PD 0
15259 .IP "\fB\-mno\-align\-int\fR" 4
15260 .IX Item "-mno-align-int"
15261 .PD
15262 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,
15263 \&\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
15264 boundary (\fB\-malign\-int\fR) or a 16\-bit boundary (\fB\-mno\-align\-int\fR).
15265 Aligning variables on 32\-bit boundaries produces code that runs somewhat
15266 faster on processors with 32\-bit busses at the expense of more memory.
15267 .Sp
15268 \&\fBWarning:\fR if you use the \fB\-malign\-int\fR switch, \s-1GCC\s0
15269 aligns structures containing the above types differently than
15270 most published application binary interface specifications for the m68k.
15271 .IP "\fB\-mpcrel\fR" 4
15272 .IX Item "-mpcrel"
15273 Use the pc-relative addressing mode of the 68000 directly, instead of
15274 using a global offset table.  At present, this option implies \fB\-fpic\fR,
15275 allowing at most a 16\-bit offset for pc-relative addressing.  \fB\-fPIC\fR is
15276 not presently supported with \fB\-mpcrel\fR, though this could be supported for
15277 68020 and higher processors.
15278 .IP "\fB\-mno\-strict\-align\fR" 4
15279 .IX Item "-mno-strict-align"
15280 .PD 0
15281 .IP "\fB\-mstrict\-align\fR" 4
15282 .IX Item "-mstrict-align"
15283 .PD
15284 Do not (do) assume that unaligned memory references are handled by
15285 the system.
15286 .IP "\fB\-msep\-data\fR" 4
15287 .IX Item "-msep-data"
15288 Generate code that allows the data segment to be located in a different
15289 area of memory from the text segment.  This allows for execute-in-place in
15290 an environment without virtual memory management.  This option implies
15291 \&\fB\-fPIC\fR.
15292 .IP "\fB\-mno\-sep\-data\fR" 4
15293 .IX Item "-mno-sep-data"
15294 Generate code that assumes that the data segment follows the text segment.
15295 This is the default.
15296 .IP "\fB\-mid\-shared\-library\fR" 4
15297 .IX Item "-mid-shared-library"
15298 Generate code that supports shared libraries via the library \s-1ID\s0 method.
15299 This allows for execute-in-place and shared libraries in an environment
15300 without virtual memory management.  This option implies \fB\-fPIC\fR.
15301 .IP "\fB\-mno\-id\-shared\-library\fR" 4
15302 .IX Item "-mno-id-shared-library"
15303 Generate code that doesn't assume ID-based shared libraries are being used.
15304 This is the default.
15305 .IP "\fB\-mshared\-library\-id=n\fR" 4
15306 .IX Item "-mshared-library-id=n"
15307 Specifies the identification number of the ID-based shared library being
15308 compiled.  Specifying a value of 0 generates more compact code; specifying
15309 other values forces the allocation of that number to the current
15310 library, but is no more space\- or time-efficient than omitting this option.
15311 .IP "\fB\-mxgot\fR" 4
15312 .IX Item "-mxgot"
15313 .PD 0
15314 .IP "\fB\-mno\-xgot\fR" 4
15315 .IX Item "-mno-xgot"
15316 .PD
15317 When generating position-independent code for ColdFire, generate code
15318 that works if the \s-1GOT\s0 has more than 8192 entries.  This code is
15319 larger and slower than code generated without this option.  On M680x0
15320 processors, this option is not needed; \fB\-fPIC\fR suffices.
15321 .Sp
15322 \&\s-1GCC\s0 normally uses a single instruction to load values from the \s-1GOT\s0.
15323 While this is relatively efficient, it only works if the \s-1GOT\s0
15324 is smaller than about 64k.  Anything larger causes the linker
15325 to report an error such as:
15326 .Sp
15327 .Vb 1
15328 \&        relocation truncated to fit: R_68K_GOT16O foobar
15329 .Ve
15330 .Sp
15331 If this happens, you should recompile your code with \fB\-mxgot\fR.
15332 It should then work with very large GOTs.  However, code generated with
15333 \&\fB\-mxgot\fR is less efficient, since it takes 4 instructions to fetch
15334 the value of a global symbol.
15335 .Sp
15336 Note that some linkers, including newer versions of the \s-1GNU\s0 linker,
15337 can create multiple GOTs and sort \s-1GOT\s0 entries.  If you have such a linker,
15338 you should only need to use \fB\-mxgot\fR when compiling a single
15339 object file that accesses more than 8192 \s-1GOT\s0 entries.  Very few do.
15340 .Sp
15341 These options have no effect unless \s-1GCC\s0 is generating
15342 position-independent code.
15343 .PP
15344 \fIMCore Options\fR
15345 .IX Subsection "MCore Options"
15346 .PP
15347 These are the \fB\-m\fR options defined for the Motorola M*Core
15348 processors.
15349 .IP "\fB\-mhardlit\fR" 4
15350 .IX Item "-mhardlit"
15351 .PD 0
15352 .IP "\fB\-mno\-hardlit\fR" 4
15353 .IX Item "-mno-hardlit"
15354 .PD
15355 Inline constants into the code stream if it can be done in two
15356 instructions or less.
15357 .IP "\fB\-mdiv\fR" 4
15358 .IX Item "-mdiv"
15359 .PD 0
15360 .IP "\fB\-mno\-div\fR" 4
15361 .IX Item "-mno-div"
15362 .PD
15363 Use the divide instruction.  (Enabled by default).
15364 .IP "\fB\-mrelax\-immediate\fR" 4
15365 .IX Item "-mrelax-immediate"
15366 .PD 0
15367 .IP "\fB\-mno\-relax\-immediate\fR" 4
15368 .IX Item "-mno-relax-immediate"
15369 .PD
15370 Allow arbitrary-sized immediates in bit operations.
15371 .IP "\fB\-mwide\-bitfields\fR" 4
15372 .IX Item "-mwide-bitfields"
15373 .PD 0
15374 .IP "\fB\-mno\-wide\-bitfields\fR" 4
15375 .IX Item "-mno-wide-bitfields"
15376 .PD
15377 Always treat bit-fields as \f(CW\*(C`int\*(C'\fR\-sized.
15378 .IP "\fB\-m4byte\-functions\fR" 4
15379 .IX Item "-m4byte-functions"
15380 .PD 0
15381 .IP "\fB\-mno\-4byte\-functions\fR" 4
15382 .IX Item "-mno-4byte-functions"
15383 .PD
15384 Force all functions to be aligned to a 4\-byte boundary.
15385 .IP "\fB\-mcallgraph\-data\fR" 4
15386 .IX Item "-mcallgraph-data"
15387 .PD 0
15388 .IP "\fB\-mno\-callgraph\-data\fR" 4
15389 .IX Item "-mno-callgraph-data"
15390 .PD
15391 Emit callgraph information.
15392 .IP "\fB\-mslow\-bytes\fR" 4
15393 .IX Item "-mslow-bytes"
15394 .PD 0
15395 .IP "\fB\-mno\-slow\-bytes\fR" 4
15396 .IX Item "-mno-slow-bytes"
15397 .PD
15398 Prefer word access when reading byte quantities.
15399 .IP "\fB\-mlittle\-endian\fR" 4
15400 .IX Item "-mlittle-endian"
15401 .PD 0
15402 .IP "\fB\-mbig\-endian\fR" 4
15403 .IX Item "-mbig-endian"
15404 .PD
15405 Generate code for a little-endian target.
15406 .IP "\fB\-m210\fR" 4
15407 .IX Item "-m210"
15408 .PD 0
15409 .IP "\fB\-m340\fR" 4
15410 .IX Item "-m340"
15411 .PD
15412 Generate code for the 210 processor.
15413 .IP "\fB\-mno\-lsim\fR" 4
15414 .IX Item "-mno-lsim"
15415 Assume that runtime support has been provided and so omit the
15416 simulator library (\fIlibsim.a)\fR from the linker command line.
15417 .IP "\fB\-mstack\-increment=\fR\fIsize\fR" 4
15418 .IX Item "-mstack-increment=size"
15419 Set the maximum amount for a single stack increment operation.  Large
15420 values can increase the speed of programs that contain functions
15421 that need a large amount of stack space, but they can also trigger a
15422 segmentation fault if the stack is extended too much.  The default
15423 value is 0x1000.
15424 .PP
15425 \fIMeP Options\fR
15426 .IX Subsection "MeP Options"
15427 .IP "\fB\-mabsdiff\fR" 4
15428 .IX Item "-mabsdiff"
15429 Enables the \f(CW\*(C`abs\*(C'\fR instruction, which is the absolute difference
15430 between two registers.
15431 .IP "\fB\-mall\-opts\fR" 4
15432 .IX Item "-mall-opts"
15433 Enables all the optional instructions\-\-\-average, multiply, divide, bit
15434 operations, leading zero, absolute difference, min/max, clip, and
15435 saturation.
15436 .IP "\fB\-maverage\fR" 4
15437 .IX Item "-maverage"
15438 Enables the \f(CW\*(C`ave\*(C'\fR instruction, which computes the average of two
15439 registers.
15440 .IP "\fB\-mbased=\fR\fIn\fR" 4
15441 .IX Item "-mbased=n"
15442 Variables of size \fIn\fR bytes or smaller are placed in the
15443 \&\f(CW\*(C`.based\*(C'\fR section by default.  Based variables use the \f(CW$tp\fR
15444 register as a base register, and there is a 128\-byte limit to the
15445 \&\f(CW\*(C`.based\*(C'\fR section.
15446 .IP "\fB\-mbitops\fR" 4
15447 .IX Item "-mbitops"
15448 Enables the bit operation instructions\-\-\-bit test (\f(CW\*(C`btstm\*(C'\fR), set
15449 (\f(CW\*(C`bsetm\*(C'\fR), clear (\f(CW\*(C`bclrm\*(C'\fR), invert (\f(CW\*(C`bnotm\*(C'\fR), and
15450 test-and-set (\f(CW\*(C`tas\*(C'\fR).
15451 .IP "\fB\-mc=\fR\fIname\fR" 4
15452 .IX Item "-mc=name"
15453 Selects which section constant data is placed in.  \fIname\fR may
15454 be \fBtiny\fR, \fBnear\fR, or \fBfar\fR.
15455 .IP "\fB\-mclip\fR" 4
15456 .IX Item "-mclip"
15457 Enables the \f(CW\*(C`clip\*(C'\fR instruction.  Note that \fB\-mclip\fR is not
15458 useful unless you also provide \fB\-mminmax\fR.
15459 .IP "\fB\-mconfig=\fR\fIname\fR" 4
15460 .IX Item "-mconfig=name"
15461 Selects one of the built-in core configurations.  Each MeP chip has
15462 one or more modules in it; each module has a core \s-1CPU\s0 and a variety of
15463 coprocessors, optional instructions, and peripherals.  The
15464 \&\f(CW\*(C`MeP\-Integrator\*(C'\fR tool, not part of \s-1GCC\s0, provides these
15465 configurations through this option; using this option is the same as
15466 using all the corresponding command-line options.  The default
15467 configuration is \fBdefault\fR.
15468 .IP "\fB\-mcop\fR" 4
15469 .IX Item "-mcop"
15470 Enables the coprocessor instructions.  By default, this is a 32\-bit
15471 coprocessor.  Note that the coprocessor is normally enabled via the
15472 \&\fB\-mconfig=\fR option.
15473 .IP "\fB\-mcop32\fR" 4
15474 .IX Item "-mcop32"
15475 Enables the 32\-bit coprocessor's instructions.
15476 .IP "\fB\-mcop64\fR" 4
15477 .IX Item "-mcop64"
15478 Enables the 64\-bit coprocessor's instructions.
15479 .IP "\fB\-mivc2\fR" 4
15480 .IX Item "-mivc2"
15481 Enables \s-1IVC2\s0 scheduling.  \s-1IVC2\s0 is a 64\-bit \s-1VLIW\s0 coprocessor.
15482 .IP "\fB\-mdc\fR" 4
15483 .IX Item "-mdc"
15484 Causes constant variables to be placed in the \f(CW\*(C`.near\*(C'\fR section.
15485 .IP "\fB\-mdiv\fR" 4
15486 .IX Item "-mdiv"
15487 Enables the \f(CW\*(C`div\*(C'\fR and \f(CW\*(C`divu\*(C'\fR instructions.
15488 .IP "\fB\-meb\fR" 4
15489 .IX Item "-meb"
15490 Generate big-endian code.
15491 .IP "\fB\-mel\fR" 4
15492 .IX Item "-mel"
15493 Generate little-endian code.
15494 .IP "\fB\-mio\-volatile\fR" 4
15495 .IX Item "-mio-volatile"
15496 Tells the compiler that any variable marked with the \f(CW\*(C`io\*(C'\fR
15497 attribute is to be considered volatile.
15498 .IP "\fB\-ml\fR" 4
15499 .IX Item "-ml"
15500 Causes variables to be assigned to the \f(CW\*(C`.far\*(C'\fR section by default.
15501 .IP "\fB\-mleadz\fR" 4
15502 .IX Item "-mleadz"
15503 Enables the \f(CW\*(C`leadz\*(C'\fR (leading zero) instruction.
15504 .IP "\fB\-mm\fR" 4
15505 .IX Item "-mm"
15506 Causes variables to be assigned to the \f(CW\*(C`.near\*(C'\fR section by default.
15507 .IP "\fB\-mminmax\fR" 4
15508 .IX Item "-mminmax"
15509 Enables the \f(CW\*(C`min\*(C'\fR and \f(CW\*(C`max\*(C'\fR instructions.
15510 .IP "\fB\-mmult\fR" 4
15511 .IX Item "-mmult"
15512 Enables the multiplication and multiply-accumulate instructions.
15513 .IP "\fB\-mno\-opts\fR" 4
15514 .IX Item "-mno-opts"
15515 Disables all the optional instructions enabled by \fB\-mall\-opts\fR.
15516 .IP "\fB\-mrepeat\fR" 4
15517 .IX Item "-mrepeat"
15518 Enables the \f(CW\*(C`repeat\*(C'\fR and \f(CW\*(C`erepeat\*(C'\fR instructions, used for
15519 low-overhead looping.
15520 .IP "\fB\-ms\fR" 4
15521 .IX Item "-ms"
15522 Causes all variables to default to the \f(CW\*(C`.tiny\*(C'\fR section.  Note
15523 that there is a 65536\-byte limit to this section.  Accesses to these
15524 variables use the \f(CW%gp\fR base register.
15525 .IP "\fB\-msatur\fR" 4
15526 .IX Item "-msatur"
15527 Enables the saturation instructions.  Note that the compiler does not
15528 currently generate these itself, but this option is included for
15529 compatibility with other tools, like \f(CW\*(C`as\*(C'\fR.
15530 .IP "\fB\-msdram\fR" 4
15531 .IX Item "-msdram"
15532 Link the SDRAM-based runtime instead of the default ROM-based runtime.
15533 .IP "\fB\-msim\fR" 4
15534 .IX Item "-msim"
15535 Link the simulator run-time libraries.
15536 .IP "\fB\-msimnovec\fR" 4
15537 .IX Item "-msimnovec"
15538 Link the simulator runtime libraries, excluding built-in support
15539 for reset and exception vectors and tables.
15540 .IP "\fB\-mtf\fR" 4
15541 .IX Item "-mtf"
15542 Causes all functions to default to the \f(CW\*(C`.far\*(C'\fR section.  Without
15543 this option, functions default to the \f(CW\*(C`.near\*(C'\fR section.
15544 .IP "\fB\-mtiny=\fR\fIn\fR" 4
15545 .IX Item "-mtiny=n"
15546 Variables that are \fIn\fR bytes or smaller are allocated to the
15547 \&\f(CW\*(C`.tiny\*(C'\fR section.  These variables use the \f(CW$gp\fR base
15548 register.  The default for this option is 4, but note that there's a
15549 65536\-byte limit to the \f(CW\*(C`.tiny\*(C'\fR section.
15550 .PP
15551 \fIMicroBlaze Options\fR
15552 .IX Subsection "MicroBlaze Options"
15553 .IP "\fB\-msoft\-float\fR" 4
15554 .IX Item "-msoft-float"
15555 Use software emulation for floating point (default).
15556 .IP "\fB\-mhard\-float\fR" 4
15557 .IX Item "-mhard-float"
15558 Use hardware floating-point instructions.
15559 .IP "\fB\-mmemcpy\fR" 4
15560 .IX Item "-mmemcpy"
15561 Do not optimize block moves, use \f(CW\*(C`memcpy\*(C'\fR.
15562 .IP "\fB\-mno\-clearbss\fR" 4
15563 .IX Item "-mno-clearbss"
15564 This option is deprecated.  Use \fB\-fno\-zero\-initialized\-in\-bss\fR instead.
15565 .IP "\fB\-mcpu=\fR\fIcpu-type\fR" 4
15566 .IX Item "-mcpu=cpu-type"
15567 Use features of, and schedule code for, the given \s-1CPU\s0.
15568 Supported values are in the format \fBv\fR\fIX\fR\fB.\fR\fI\s-1YY\s0\fR\fB.\fR\fIZ\fR,
15569 where \fIX\fR is a major version, \fI\s-1YY\s0\fR is the minor version, and
15570 \&\fIZ\fR is compatibility code.  Example values are \fBv3.00.a\fR,
15571 \&\fBv4.00.b\fR, \fBv5.00.a\fR, \fBv5.00.b\fR, \fBv5.00.b\fR, \fBv6.00.a\fR.
15572 .IP "\fB\-mxl\-soft\-mul\fR" 4
15573 .IX Item "-mxl-soft-mul"
15574 Use software multiply emulation (default).
15575 .IP "\fB\-mxl\-soft\-div\fR" 4
15576 .IX Item "-mxl-soft-div"
15577 Use software emulation for divides (default).
15578 .IP "\fB\-mxl\-barrel\-shift\fR" 4
15579 .IX Item "-mxl-barrel-shift"
15580 Use the hardware barrel shifter.
15581 .IP "\fB\-mxl\-pattern\-compare\fR" 4
15582 .IX Item "-mxl-pattern-compare"
15583 Use pattern compare instructions.
15584 .IP "\fB\-msmall\-divides\fR" 4
15585 .IX Item "-msmall-divides"
15586 Use table lookup optimization for small signed integer divisions.
15587 .IP "\fB\-mxl\-stack\-check\fR" 4
15588 .IX Item "-mxl-stack-check"
15589 This option is deprecated.  Use \fB\-fstack\-check\fR instead.
15590 .IP "\fB\-mxl\-gp\-opt\fR" 4
15591 .IX Item "-mxl-gp-opt"
15592 Use GP-relative \f(CW\*(C`.sdata\*(C'\fR/\f(CW\*(C`.sbss\*(C'\fR sections.
15593 .IP "\fB\-mxl\-multiply\-high\fR" 4
15594 .IX Item "-mxl-multiply-high"
15595 Use multiply high instructions for high part of 32x32 multiply.
15596 .IP "\fB\-mxl\-float\-convert\fR" 4
15597 .IX Item "-mxl-float-convert"
15598 Use hardware floating-point conversion instructions.
15599 .IP "\fB\-mxl\-float\-sqrt\fR" 4
15600 .IX Item "-mxl-float-sqrt"
15601 Use hardware floating-point square root instruction.
15602 .IP "\fB\-mbig\-endian\fR" 4
15603 .IX Item "-mbig-endian"
15604 Generate code for a big-endian target.
15605 .IP "\fB\-mlittle\-endian\fR" 4
15606 .IX Item "-mlittle-endian"
15607 Generate code for a little-endian target.
15608 .IP "\fB\-mxl\-reorder\fR" 4
15609 .IX Item "-mxl-reorder"
15610 Use reorder instructions (swap and byte reversed load/store).
15611 .IP "\fB\-mxl\-mode\-\fR\fIapp-model\fR" 4
15612 .IX Item "-mxl-mode-app-model"
15613 Select application model \fIapp-model\fR.  Valid models are
15614 .RS 4
15615 .IP "\fBexecutable\fR" 4
15616 .IX Item "executable"
15617 normal executable (default), uses startup code \fIcrt0.o\fR.
15618 .IP "\fBxmdstub\fR" 4
15619 .IX Item "xmdstub"
15620 for use with Xilinx Microprocessor Debugger (\s-1XMD\s0) based
15621 software intrusive debug agent called xmdstub. This uses startup file
15622 \&\fIcrt1.o\fR and sets the start address of the program to 0x800.
15623 .IP "\fBbootstrap\fR" 4
15624 .IX Item "bootstrap"
15625 for applications that are loaded using a bootloader.
15626 This model uses startup file \fIcrt2.o\fR which does not contain a processor
15627 reset vector handler. This is suitable for transferring control on a
15628 processor reset to the bootloader rather than the application.
15629 .IP "\fBnovectors\fR" 4
15630 .IX Item "novectors"
15631 for applications that do not require any of the
15632 MicroBlaze vectors. This option may be useful for applications running
15633 within a monitoring application. This model uses \fIcrt3.o\fR as a startup file.
15634 .RE
15635 .RS 4
15636 .Sp
15637 Option \fB\-xl\-mode\-\fR\fIapp-model\fR is a deprecated alias for
15638 \&\fB\-mxl\-mode\-\fR\fIapp-model\fR.
15639 .RE
15640 .PP
15641 \fI\s-1MIPS\s0 Options\fR
15642 .IX Subsection "MIPS Options"
15643 .IP "\fB\-EB\fR" 4
15644 .IX Item "-EB"
15645 Generate big-endian code.
15646 .IP "\fB\-EL\fR" 4
15647 .IX Item "-EL"
15648 Generate little-endian code.  This is the default for \fBmips*el\-*\-*\fR
15649 configurations.
15650 .IP "\fB\-march=\fR\fIarch\fR" 4
15651 .IX Item "-march=arch"
15652 Generate code that runs on \fIarch\fR, which can be the name of a
15653 generic \s-1MIPS\s0 \s-1ISA\s0, or the name of a particular processor.
15654 The \s-1ISA\s0 names are:
15655 \&\fBmips1\fR, \fBmips2\fR, \fBmips3\fR, \fBmips4\fR,
15656 \&\fBmips32\fR, \fBmips32r2\fR, \fBmips32r3\fR, \fBmips32r5\fR,
15657 \&\fBmips32r6\fR, \fBmips64\fR, \fBmips64r2\fR, \fBmips64r3\fR,
15658 \&\fBmips64r5\fR and \fBmips64r6\fR.
15659 The processor names are:
15660 \&\fB4kc\fR, \fB4km\fR, \fB4kp\fR, \fB4ksc\fR,
15661 \&\fB4kec\fR, \fB4kem\fR, \fB4kep\fR, \fB4ksd\fR,
15662 \&\fB5kc\fR, \fB5kf\fR,
15663 \&\fB20kc\fR,
15664 \&\fB24kc\fR, \fB24kf2_1\fR, \fB24kf1_1\fR,
15665 \&\fB24kec\fR, \fB24kef2_1\fR, \fB24kef1_1\fR,
15666 \&\fB34kc\fR, \fB34kf2_1\fR, \fB34kf1_1\fR, \fB34kn\fR,
15667 \&\fB74kc\fR, \fB74kf2_1\fR, \fB74kf1_1\fR, \fB74kf3_2\fR,
15668 \&\fB1004kc\fR, \fB1004kf2_1\fR, \fB1004kf1_1\fR,
15669 \&\fBloongson2e\fR, \fBloongson2f\fR, \fBloongson3a\fR,
15670 \&\fBm4k\fR,
15671 \&\fBm14k\fR, \fBm14kc\fR, \fBm14ke\fR, \fBm14kec\fR,
15672 \&\fBocteon\fR, \fBocteon+\fR, \fBocteon2\fR, \fBocteon3\fR,
15673 \&\fBorion\fR,
15674 \&\fBp5600\fR,
15675 \&\fBr2000\fR, \fBr3000\fR, \fBr3900\fR, \fBr4000\fR, \fBr4400\fR,
15676 \&\fBr4600\fR, \fBr4650\fR, \fBr4700\fR, \fBr6000\fR, \fBr8000\fR,
15677 \&\fBrm7000\fR, \fBrm9000\fR,
15678 \&\fBr10000\fR, \fBr12000\fR, \fBr14000\fR, \fBr16000\fR,
15679 \&\fBsb1\fR,
15680 \&\fBsr71000\fR,
15681 \&\fBvr4100\fR, \fBvr4111\fR, \fBvr4120\fR, \fBvr4130\fR, \fBvr4300\fR,
15682 \&\fBvr5000\fR, \fBvr5400\fR, \fBvr5500\fR,
15683 \&\fBxlr\fR and \fBxlp\fR.
15684 The special value \fBfrom-abi\fR selects the
15685 most compatible architecture for the selected \s-1ABI\s0 (that is,
15686 \&\fBmips1\fR for 32\-bit ABIs and \fBmips3\fR for 64\-bit ABIs).
15687 .Sp
15688 The native Linux/GNU toolchain also supports the value \fBnative\fR,
15689 which selects the best architecture option for the host processor.
15690 \&\fB\-march=native\fR has no effect if \s-1GCC\s0 does not recognize
15691 the processor.
15692 .Sp
15693 In processor names, a final \fB000\fR can be abbreviated as \fBk\fR
15694 (for example, \fB\-march=r2k\fR).  Prefixes are optional, and
15695 \&\fBvr\fR may be written \fBr\fR.
15696 .Sp
15697 Names of the form \fIn\fR\fBf2_1\fR refer to processors with
15698 FPUs clocked at half the rate of the core, names of the form
15699 \&\fIn\fR\fBf1_1\fR refer to processors with FPUs clocked at the same
15700 rate as the core, and names of the form \fIn\fR\fBf3_2\fR refer to
15701 processors with FPUs clocked a ratio of 3:2 with respect to the core.
15702 For compatibility reasons, \fIn\fR\fBf\fR is accepted as a synonym
15703 for \fIn\fR\fBf2_1\fR while \fIn\fR\fBx\fR and \fIb\fR\fBfx\fR are
15704 accepted as synonyms for \fIn\fR\fBf1_1\fR.
15705 .Sp
15706 \&\s-1GCC\s0 defines two macros based on the value of this option.  The first
15707 is \f(CW\*(C`_MIPS_ARCH\*(C'\fR, which gives the name of target architecture, as
15708 a string.  The second has the form \f(CW\*(C`_MIPS_ARCH_\f(CIfoo\f(CW\*(C'\fR,
15709 where \fIfoo\fR is the capitalized value of \f(CW\*(C`_MIPS_ARCH\*(C'\fR.
15710 For example, \fB\-march=r2000\fR sets \f(CW\*(C`_MIPS_ARCH\*(C'\fR
15711 to \f(CW"r2000"\fR and defines the macro \f(CW\*(C`_MIPS_ARCH_R2000\*(C'\fR.
15712 .Sp
15713 Note that the \f(CW\*(C`_MIPS_ARCH\*(C'\fR macro uses the processor names given
15714 above.  In other words, it has the full prefix and does not
15715 abbreviate \fB000\fR as \fBk\fR.  In the case of \fBfrom-abi\fR,
15716 the macro names the resolved architecture (either \f(CW"mips1"\fR or
15717 \&\f(CW"mips3"\fR).  It names the default architecture when no
15718 \&\fB\-march\fR option is given.
15719 .IP "\fB\-mtune=\fR\fIarch\fR" 4
15720 .IX Item "-mtune=arch"
15721 Optimize for \fIarch\fR.  Among other things, this option controls
15722 the way instructions are scheduled, and the perceived cost of arithmetic
15723 operations.  The list of \fIarch\fR values is the same as for
15724 \&\fB\-march\fR.
15725 .Sp
15726 When this option is not used, \s-1GCC\s0 optimizes for the processor
15727 specified by \fB\-march\fR.  By using \fB\-march\fR and
15728 \&\fB\-mtune\fR together, it is possible to generate code that
15729 runs on a family of processors, but optimize the code for one
15730 particular member of that family.
15731 .Sp
15732 \&\fB\-mtune\fR defines the macros \f(CW\*(C`_MIPS_TUNE\*(C'\fR and
15733 \&\f(CW\*(C`_MIPS_TUNE_\f(CIfoo\f(CW\*(C'\fR, which work in the same way as the
15734 \&\fB\-march\fR ones described above.
15735 .IP "\fB\-mips1\fR" 4
15736 .IX Item "-mips1"
15737 Equivalent to \fB\-march=mips1\fR.
15738 .IP "\fB\-mips2\fR" 4
15739 .IX Item "-mips2"
15740 Equivalent to \fB\-march=mips2\fR.
15741 .IP "\fB\-mips3\fR" 4
15742 .IX Item "-mips3"
15743 Equivalent to \fB\-march=mips3\fR.
15744 .IP "\fB\-mips4\fR" 4
15745 .IX Item "-mips4"
15746 Equivalent to \fB\-march=mips4\fR.
15747 .IP "\fB\-mips32\fR" 4
15748 .IX Item "-mips32"
15749 Equivalent to \fB\-march=mips32\fR.
15750 .IP "\fB\-mips32r3\fR" 4
15751 .IX Item "-mips32r3"
15752 Equivalent to \fB\-march=mips32r3\fR.
15753 .IP "\fB\-mips32r5\fR" 4
15754 .IX Item "-mips32r5"
15755 Equivalent to \fB\-march=mips32r5\fR.
15756 .IP "\fB\-mips32r6\fR" 4
15757 .IX Item "-mips32r6"
15758 Equivalent to \fB\-march=mips32r6\fR.
15759 .IP "\fB\-mips64\fR" 4
15760 .IX Item "-mips64"
15761 Equivalent to \fB\-march=mips64\fR.
15762 .IP "\fB\-mips64r2\fR" 4
15763 .IX Item "-mips64r2"
15764 Equivalent to \fB\-march=mips64r2\fR.
15765 .IP "\fB\-mips64r3\fR" 4
15766 .IX Item "-mips64r3"
15767 Equivalent to \fB\-march=mips64r3\fR.
15768 .IP "\fB\-mips64r5\fR" 4
15769 .IX Item "-mips64r5"
15770 Equivalent to \fB\-march=mips64r5\fR.
15771 .IP "\fB\-mips64r6\fR" 4
15772 .IX Item "-mips64r6"
15773 Equivalent to \fB\-march=mips64r6\fR.
15774 .IP "\fB\-mips16\fR" 4
15775 .IX Item "-mips16"
15776 .PD 0
15777 .IP "\fB\-mno\-mips16\fR" 4
15778 .IX Item "-mno-mips16"
15779 .PD
15780 Generate (do not generate) \s-1MIPS16\s0 code.  If \s-1GCC\s0 is targeting a
15781 \&\s-1MIPS32\s0 or \s-1MIPS64\s0 architecture, it makes use of the MIPS16e \s-1ASE\s0.
15782 .Sp
15783 \&\s-1MIPS16\s0 code generation can also be controlled on a per-function basis
15784 by means of \f(CW\*(C`mips16\*(C'\fR and \f(CW\*(C`nomips16\*(C'\fR attributes.
15785 .IP "\fB\-mflip\-mips16\fR" 4
15786 .IX Item "-mflip-mips16"
15787 Generate \s-1MIPS16\s0 code on alternating functions.  This option is provided
15788 for regression testing of mixed MIPS16/non\-MIPS16 code generation, and is
15789 not intended for ordinary use in compiling user code.
15790 .IP "\fB\-minterlink\-compressed\fR" 4
15791 .IX Item "-minterlink-compressed"
15792 .PD 0
15793 .IP "\fB\-mno\-interlink\-compressed\fR" 4
15794 .IX Item "-mno-interlink-compressed"
15795 .PD
15796 Require (do not require) that code using the standard (uncompressed) \s-1MIPS\s0 \s-1ISA\s0
15797 be link-compatible with \s-1MIPS16\s0 and microMIPS code, and vice versa.
15798 .Sp
15799 For example, code using the standard \s-1ISA\s0 encoding cannot jump directly
15800 to \s-1MIPS16\s0 or microMIPS code; it must either use a call or an indirect jump.
15801 \&\fB\-minterlink\-compressed\fR therefore disables direct jumps unless \s-1GCC\s0
15802 knows that the target of the jump is not compressed.
15803 .IP "\fB\-minterlink\-mips16\fR" 4
15804 .IX Item "-minterlink-mips16"
15805 .PD 0
15806 .IP "\fB\-mno\-interlink\-mips16\fR" 4
15807 .IX Item "-mno-interlink-mips16"
15808 .PD
15809 Aliases of \fB\-minterlink\-compressed\fR and
15810 \&\fB\-mno\-interlink\-compressed\fR.  These options predate the microMIPS \s-1ASE\s0
15811 and are retained for backwards compatibility.
15812 .IP "\fB\-mabi=32\fR" 4
15813 .IX Item "-mabi=32"
15814 .PD 0
15815 .IP "\fB\-mabi=o64\fR" 4
15816 .IX Item "-mabi=o64"
15817 .IP "\fB\-mabi=n32\fR" 4
15818 .IX Item "-mabi=n32"
15819 .IP "\fB\-mabi=64\fR" 4
15820 .IX Item "-mabi=64"
15821 .IP "\fB\-mabi=eabi\fR" 4
15822 .IX Item "-mabi=eabi"
15823 .PD
15824 Generate code for the given \s-1ABI\s0.
15825 .Sp
15826 Note that the \s-1EABI\s0 has a 32\-bit and a 64\-bit variant.  \s-1GCC\s0 normally
15827 generates 64\-bit code when you select a 64\-bit architecture, but you
15828 can use \fB\-mgp32\fR to get 32\-bit code instead.
15829 .Sp
15830 For information about the O64 \s-1ABI\s0, see
15831 <\fBhttp://gcc.gnu.org/projects/mipso64\-abi.html\fR>.
15832 .Sp
15833 \&\s-1GCC\s0 supports a variant of the o32 \s-1ABI\s0 in which floating-point registers
15834 are 64 rather than 32 bits wide.  You can select this combination with
15835 \&\fB\-mabi=32\fR \fB\-mfp64\fR.  This \s-1ABI\s0 relies on the \f(CW\*(C`mthc1\*(C'\fR
15836 and \f(CW\*(C`mfhc1\*(C'\fR instructions and is therefore only supported for
15837 \&\s-1MIPS32R2\s0, \s-1MIPS32R3\s0 and \s-1MIPS32R5\s0 processors.
15838 .Sp
15839 The register assignments for arguments and return values remain the
15840 same, but each scalar value is passed in a single 64\-bit register
15841 rather than a pair of 32\-bit registers.  For example, scalar
15842 floating-point values are returned in \fB\f(CB$f0\fB\fR only, not a
15843 \&\fB\f(CB$f0\fB\fR/\fB\f(CB$f1\fB\fR pair.  The set of call-saved registers also
15844 remains the same in that the even-numbered double-precision registers
15845 are saved.
15846 .Sp
15847 Two additional variants of the o32 \s-1ABI\s0 are supported to enable
15848 a transition from 32\-bit to 64\-bit registers.  These are \s-1FPXX\s0
15849 (\fB\-mfpxx\fR) and \s-1FP64A\s0 (\fB\-mfp64\fR \fB\-mno\-odd\-spreg\fR).
15850 The \s-1FPXX\s0 extension mandates that all code must execute correctly
15851 when run using 32\-bit or 64\-bit registers.  The code can be interlinked
15852 with either \s-1FP32\s0 or \s-1FP64\s0, but not both.
15853 The \s-1FP64A\s0 extension is similar to the \s-1FP64\s0 extension but forbids the
15854 use of odd-numbered single-precision registers.  This can be used
15855 in conjunction with the \f(CW\*(C`FRE\*(C'\fR mode of FPUs in \s-1MIPS32R5\s0
15856 processors and allows both \s-1FP32\s0 and \s-1FP64A\s0 code to interlink and
15857 run in the same process without changing \s-1FPU\s0 modes.
15858 .IP "\fB\-mabicalls\fR" 4
15859 .IX Item "-mabicalls"
15860 .PD 0
15861 .IP "\fB\-mno\-abicalls\fR" 4
15862 .IX Item "-mno-abicalls"
15863 .PD
15864 Generate (do not generate) code that is suitable for SVR4\-style
15865 dynamic objects.  \fB\-mabicalls\fR is the default for SVR4\-based
15866 systems.
15867 .IP "\fB\-mshared\fR" 4
15868 .IX Item "-mshared"
15869 .PD 0
15870 .IP "\fB\-mno\-shared\fR" 4
15871 .IX Item "-mno-shared"
15872 .PD
15873 Generate (do not generate) code that is fully position-independent,
15874 and that can therefore be linked into shared libraries.  This option
15875 only affects \fB\-mabicalls\fR.
15876 .Sp
15877 All \fB\-mabicalls\fR code has traditionally been position-independent,
15878 regardless of options like \fB\-fPIC\fR and \fB\-fpic\fR.  However,
15879 as an extension, the \s-1GNU\s0 toolchain allows executables to use absolute
15880 accesses for locally-binding symbols.  It can also use shorter \s-1GP\s0
15881 initialization sequences and generate direct calls to locally-defined
15882 functions.  This mode is selected by \fB\-mno\-shared\fR.
15883 .Sp
15884 \&\fB\-mno\-shared\fR depends on binutils 2.16 or higher and generates
15885 objects that can only be linked by the \s-1GNU\s0 linker.  However, the option
15886 does not affect the \s-1ABI\s0 of the final executable; it only affects the \s-1ABI\s0
15887 of relocatable objects.  Using \fB\-mno\-shared\fR generally makes
15888 executables both smaller and quicker.
15889 .Sp
15890 \&\fB\-mshared\fR is the default.
15891 .IP "\fB\-mplt\fR" 4
15892 .IX Item "-mplt"
15893 .PD 0
15894 .IP "\fB\-mno\-plt\fR" 4
15895 .IX Item "-mno-plt"
15896 .PD
15897 Assume (do not assume) that the static and dynamic linkers
15898 support PLTs and copy relocations.  This option only affects
15899 \&\fB\-mno\-shared \-mabicalls\fR.  For the n64 \s-1ABI\s0, this option
15900 has no effect without \fB\-msym32\fR.
15901 .Sp
15902 You can make \fB\-mplt\fR the default by configuring
15903 \&\s-1GCC\s0 with \fB\-\-with\-mips\-plt\fR.  The default is
15904 \&\fB\-mno\-plt\fR otherwise.
15905 .IP "\fB\-mxgot\fR" 4
15906 .IX Item "-mxgot"
15907 .PD 0
15908 .IP "\fB\-mno\-xgot\fR" 4
15909 .IX Item "-mno-xgot"
15910 .PD
15911 Lift (do not lift) the usual restrictions on the size of the global
15912 offset table.
15913 .Sp
15914 \&\s-1GCC\s0 normally uses a single instruction to load values from the \s-1GOT\s0.
15915 While this is relatively efficient, it only works if the \s-1GOT\s0
15916 is smaller than about 64k.  Anything larger causes the linker
15917 to report an error such as:
15918 .Sp
15919 .Vb 1
15920 \&        relocation truncated to fit: R_MIPS_GOT16 foobar
15921 .Ve
15922 .Sp
15923 If this happens, you should recompile your code with \fB\-mxgot\fR.
15924 This works with very large GOTs, although the code is also
15925 less efficient, since it takes three instructions to fetch the
15926 value of a global symbol.
15927 .Sp
15928 Note that some linkers can create multiple GOTs.  If you have such a
15929 linker, you should only need to use \fB\-mxgot\fR when a single object
15930 file accesses more than 64k's worth of \s-1GOT\s0 entries.  Very few do.
15931 .Sp
15932 These options have no effect unless \s-1GCC\s0 is generating position
15933 independent code.
15934 .IP "\fB\-mgp32\fR" 4
15935 .IX Item "-mgp32"
15936 Assume that general-purpose registers are 32 bits wide.
15937 .IP "\fB\-mgp64\fR" 4
15938 .IX Item "-mgp64"
15939 Assume that general-purpose registers are 64 bits wide.
15940 .IP "\fB\-mfp32\fR" 4
15941 .IX Item "-mfp32"
15942 Assume that floating-point registers are 32 bits wide.
15943 .IP "\fB\-mfp64\fR" 4
15944 .IX Item "-mfp64"
15945 Assume that floating-point registers are 64 bits wide.
15946 .IP "\fB\-mfpxx\fR" 4
15947 .IX Item "-mfpxx"
15948 Do not assume the width of floating-point registers.
15949 .IP "\fB\-mhard\-float\fR" 4
15950 .IX Item "-mhard-float"
15951 Use floating-point coprocessor instructions.
15952 .IP "\fB\-msoft\-float\fR" 4
15953 .IX Item "-msoft-float"
15954 Do not use floating-point coprocessor instructions.  Implement
15955 floating-point calculations using library calls instead.
15956 .IP "\fB\-mno\-float\fR" 4
15957 .IX Item "-mno-float"
15958 Equivalent to \fB\-msoft\-float\fR, but additionally asserts that the
15959 program being compiled does not perform any floating-point operations.
15960 This option is presently supported only by some bare-metal \s-1MIPS\s0
15961 configurations, where it may select a special set of libraries
15962 that lack all floating-point support (including, for example, the
15963 floating-point \f(CW\*(C`printf\*(C'\fR formats).  
15964 If code compiled with \fB\-mno\-float\fR accidentally contains
15965 floating-point operations, it is likely to suffer a link-time
15966 or run-time failure.
15967 .IP "\fB\-msingle\-float\fR" 4
15968 .IX Item "-msingle-float"
15969 Assume that the floating-point coprocessor only supports single-precision
15970 operations.
15971 .IP "\fB\-mdouble\-float\fR" 4
15972 .IX Item "-mdouble-float"
15973 Assume that the floating-point coprocessor supports double-precision
15974 operations.  This is the default.
15975 .IP "\fB\-modd\-spreg\fR" 4
15976 .IX Item "-modd-spreg"
15977 .PD 0
15978 .IP "\fB\-mno\-odd\-spreg\fR" 4
15979 .IX Item "-mno-odd-spreg"
15980 .PD
15981 Enable the use of odd-numbered single-precision floating-point registers
15982 for the o32 \s-1ABI\s0.  This is the default for processors that are known to
15983 support these registers.  When using the o32 \s-1FPXX\s0 \s-1ABI\s0, \fB\-mno\-odd\-spreg\fR
15984 is set by default.
15985 .IP "\fB\-mabs=2008\fR" 4
15986 .IX Item "-mabs=2008"
15987 .PD 0
15988 .IP "\fB\-mabs=legacy\fR" 4
15989 .IX Item "-mabs=legacy"
15990 .PD
15991 These options control the treatment of the special not-a-number (NaN)
15992 \&\s-1IEEE\s0 754 floating-point data with the \f(CW\*(C`abs.\f(CIfmt\f(CW\*(C'\fR and
15993 \&\f(CW\*(C`neg.\f(CIfmt\f(CW\*(C'\fR machine instructions.
15994 .Sp
15995 By default or when \fB\-mabs=legacy\fR is used the legacy
15996 treatment is selected.  In this case these instructions are considered
15997 arithmetic and avoided where correct operation is required and the
15998 input operand might be a NaN.  A longer sequence of instructions that
15999 manipulate the sign bit of floating-point datum manually is used
16000 instead unless the \fB\-ffinite\-math\-only\fR option has also been
16001 specified.
16002 .Sp
16003 The \fB\-mabs=2008\fR option selects the \s-1IEEE\s0 754\-2008 treatment.  In
16004 this case these instructions are considered non-arithmetic and therefore
16005 operating correctly in all cases, including in particular where the
16006 input operand is a NaN.  These instructions are therefore always used
16007 for the respective operations.
16008 .IP "\fB\-mnan=2008\fR" 4
16009 .IX Item "-mnan=2008"
16010 .PD 0
16011 .IP "\fB\-mnan=legacy\fR" 4
16012 .IX Item "-mnan=legacy"
16013 .PD
16014 These options control the encoding of the special not-a-number (NaN)
16015 \&\s-1IEEE\s0 754 floating-point data.
16016 .Sp
16017 The \fB\-mnan=legacy\fR option selects the legacy encoding.  In this
16018 case quiet NaNs (qNaNs) are denoted by the first bit of their trailing
16019 significand field being 0, whereas signalling NaNs (sNaNs) are denoted
16020 by the first bit of their trailing significand field being 1.
16021 .Sp
16022 The \fB\-mnan=2008\fR option selects the \s-1IEEE\s0 754\-2008 encoding.  In
16023 this case qNaNs are denoted by the first bit of their trailing
16024 significand field being 1, whereas sNaNs are denoted by the first bit of
16025 their trailing significand field being 0.
16026 .Sp
16027 The default is \fB\-mnan=legacy\fR unless \s-1GCC\s0 has been configured with
16028 \&\fB\-\-with\-nan=2008\fR.
16029 .IP "\fB\-mllsc\fR" 4
16030 .IX Item "-mllsc"
16031 .PD 0
16032 .IP "\fB\-mno\-llsc\fR" 4
16033 .IX Item "-mno-llsc"
16034 .PD
16035 Use (do not use) \fBll\fR, \fBsc\fR, and \fBsync\fR instructions to
16036 implement atomic memory built-in functions.  When neither option is
16037 specified, \s-1GCC\s0 uses the instructions if the target architecture
16038 supports them.
16039 .Sp
16040 \&\fB\-mllsc\fR is useful if the runtime environment can emulate the
16041 instructions and \fB\-mno\-llsc\fR can be useful when compiling for
16042 nonstandard ISAs.  You can make either option the default by
16043 configuring \s-1GCC\s0 with \fB\-\-with\-llsc\fR and \fB\-\-without\-llsc\fR
16044 respectively.  \fB\-\-with\-llsc\fR is the default for some
16045 configurations; see the installation documentation for details.
16046 .IP "\fB\-mdsp\fR" 4
16047 .IX Item "-mdsp"
16048 .PD 0
16049 .IP "\fB\-mno\-dsp\fR" 4
16050 .IX Item "-mno-dsp"
16051 .PD
16052 Use (do not use) revision 1 of the \s-1MIPS\s0 \s-1DSP\s0 \s-1ASE\s0.
16053   This option defines the
16054 preprocessor macro \f(CW\*(C`_\|_mips_dsp\*(C'\fR.  It also defines
16055 \&\f(CW\*(C`_\|_mips_dsp_rev\*(C'\fR to 1.
16056 .IP "\fB\-mdspr2\fR" 4
16057 .IX Item "-mdspr2"
16058 .PD 0
16059 .IP "\fB\-mno\-dspr2\fR" 4
16060 .IX Item "-mno-dspr2"
16061 .PD
16062 Use (do not use) revision 2 of the \s-1MIPS\s0 \s-1DSP\s0 \s-1ASE\s0.
16063   This option defines the
16064 preprocessor macros \f(CW\*(C`_\|_mips_dsp\*(C'\fR and \f(CW\*(C`_\|_mips_dspr2\*(C'\fR.
16065 It also defines \f(CW\*(C`_\|_mips_dsp_rev\*(C'\fR to 2.
16066 .IP "\fB\-msmartmips\fR" 4
16067 .IX Item "-msmartmips"
16068 .PD 0
16069 .IP "\fB\-mno\-smartmips\fR" 4
16070 .IX Item "-mno-smartmips"
16071 .PD
16072 Use (do not use) the \s-1MIPS\s0 SmartMIPS \s-1ASE\s0.
16073 .IP "\fB\-mpaired\-single\fR" 4
16074 .IX Item "-mpaired-single"
16075 .PD 0
16076 .IP "\fB\-mno\-paired\-single\fR" 4
16077 .IX Item "-mno-paired-single"
16078 .PD
16079 Use (do not use) paired-single floating-point instructions.
16080   This option requires
16081 hardware floating-point support to be enabled.
16082 .IP "\fB\-mdmx\fR" 4
16083 .IX Item "-mdmx"
16084 .PD 0
16085 .IP "\fB\-mno\-mdmx\fR" 4
16086 .IX Item "-mno-mdmx"
16087 .PD
16088 Use (do not use) \s-1MIPS\s0 Digital Media Extension instructions.
16089 This option can only be used when generating 64\-bit code and requires
16090 hardware floating-point support to be enabled.
16091 .IP "\fB\-mips3d\fR" 4
16092 .IX Item "-mips3d"
16093 .PD 0
16094 .IP "\fB\-mno\-mips3d\fR" 4
16095 .IX Item "-mno-mips3d"
16096 .PD
16097 Use (do not use) the \s-1MIPS\-3D\s0 \s-1ASE\s0.  
16098 The option \fB\-mips3d\fR implies \fB\-mpaired\-single\fR.
16099 .IP "\fB\-mmicromips\fR" 4
16100 .IX Item "-mmicromips"
16101 .PD 0
16102 .IP "\fB\-mno\-micromips\fR" 4
16103 .IX Item "-mno-micromips"
16104 .PD
16105 Generate (do not generate) microMIPS code.
16106 .Sp
16107 MicroMIPS code generation can also be controlled on a per-function basis
16108 by means of \f(CW\*(C`micromips\*(C'\fR and \f(CW\*(C`nomicromips\*(C'\fR attributes.
16109 .IP "\fB\-mmt\fR" 4
16110 .IX Item "-mmt"
16111 .PD 0
16112 .IP "\fB\-mno\-mt\fR" 4
16113 .IX Item "-mno-mt"
16114 .PD
16115 Use (do not use) \s-1MT\s0 Multithreading instructions.
16116 .IP "\fB\-mmcu\fR" 4
16117 .IX Item "-mmcu"
16118 .PD 0
16119 .IP "\fB\-mno\-mcu\fR" 4
16120 .IX Item "-mno-mcu"
16121 .PD
16122 Use (do not use) the \s-1MIPS\s0 \s-1MCU\s0 \s-1ASE\s0 instructions.
16123 .IP "\fB\-meva\fR" 4
16124 .IX Item "-meva"
16125 .PD 0
16126 .IP "\fB\-mno\-eva\fR" 4
16127 .IX Item "-mno-eva"
16128 .PD
16129 Use (do not use) the \s-1MIPS\s0 Enhanced Virtual Addressing instructions.
16130 .IP "\fB\-mvirt\fR" 4
16131 .IX Item "-mvirt"
16132 .PD 0
16133 .IP "\fB\-mno\-virt\fR" 4
16134 .IX Item "-mno-virt"
16135 .PD
16136 Use (do not use) the \s-1MIPS\s0 Virtualization Application Specific instructions.
16137 .IP "\fB\-mxpa\fR" 4
16138 .IX Item "-mxpa"
16139 .PD 0
16140 .IP "\fB\-mno\-xpa\fR" 4
16141 .IX Item "-mno-xpa"
16142 .PD
16143 Use (do not use) the \s-1MIPS\s0 eXtended Physical Address (\s-1XPA\s0) instructions.
16144 .IP "\fB\-mlong64\fR" 4
16145 .IX Item "-mlong64"
16146 Force \f(CW\*(C`long\*(C'\fR types to be 64 bits wide.  See \fB\-mlong32\fR for
16147 an explanation of the default and the way that the pointer size is
16148 determined.
16149 .IP "\fB\-mlong32\fR" 4
16150 .IX Item "-mlong32"
16151 Force \f(CW\*(C`long\*(C'\fR, \f(CW\*(C`int\*(C'\fR, and pointer types to be 32 bits wide.
16152 .Sp
16153 The default size of \f(CW\*(C`int\*(C'\fRs, \f(CW\*(C`long\*(C'\fRs and pointers depends on
16154 the \s-1ABI\s0.  All the supported ABIs use 32\-bit \f(CW\*(C`int\*(C'\fRs.  The n64 \s-1ABI\s0
16155 uses 64\-bit \f(CW\*(C`long\*(C'\fRs, as does the 64\-bit \s-1EABI\s0; the others use
16156 32\-bit \f(CW\*(C`long\*(C'\fRs.  Pointers are the same size as \f(CW\*(C`long\*(C'\fRs,
16157 or the same size as integer registers, whichever is smaller.
16158 .IP "\fB\-msym32\fR" 4
16159 .IX Item "-msym32"
16160 .PD 0
16161 .IP "\fB\-mno\-sym32\fR" 4
16162 .IX Item "-mno-sym32"
16163 .PD
16164 Assume (do not assume) that all symbols have 32\-bit values, regardless
16165 of the selected \s-1ABI\s0.  This option is useful in combination with
16166 \&\fB\-mabi=64\fR and \fB\-mno\-abicalls\fR because it allows \s-1GCC\s0
16167 to generate shorter and faster references to symbolic addresses.
16168 .IP "\fB\-G\fR \fInum\fR" 4
16169 .IX Item "-G num"
16170 Put definitions of externally-visible data in a small data section
16171 if that data is no bigger than \fInum\fR bytes.  \s-1GCC\s0 can then generate
16172 more efficient accesses to the data; see \fB\-mgpopt\fR for details.
16173 .Sp
16174 The default \fB\-G\fR option depends on the configuration.
16175 .IP "\fB\-mlocal\-sdata\fR" 4
16176 .IX Item "-mlocal-sdata"
16177 .PD 0
16178 .IP "\fB\-mno\-local\-sdata\fR" 4
16179 .IX Item "-mno-local-sdata"
16180 .PD
16181 Extend (do not extend) the \fB\-G\fR behavior to local data too,
16182 such as to static variables in C.  \fB\-mlocal\-sdata\fR is the
16183 default for all configurations.
16184 .Sp
16185 If the linker complains that an application is using too much small data,
16186 you might want to try rebuilding the less performance-critical parts with
16187 \&\fB\-mno\-local\-sdata\fR.  You might also want to build large
16188 libraries with \fB\-mno\-local\-sdata\fR, so that the libraries leave
16189 more room for the main program.
16190 .IP "\fB\-mextern\-sdata\fR" 4
16191 .IX Item "-mextern-sdata"
16192 .PD 0
16193 .IP "\fB\-mno\-extern\-sdata\fR" 4
16194 .IX Item "-mno-extern-sdata"
16195 .PD
16196 Assume (do not assume) that externally-defined data is in
16197 a small data section if the size of that data is within the \fB\-G\fR limit.
16198 \&\fB\-mextern\-sdata\fR is the default for all configurations.
16199 .Sp
16200 If you compile a module \fIMod\fR with \fB\-mextern\-sdata\fR \fB\-G\fR
16201 \&\fInum\fR \fB\-mgpopt\fR, and \fIMod\fR references a variable \fIVar\fR
16202 that is no bigger than \fInum\fR bytes, you must make sure that \fIVar\fR
16203 is placed in a small data section.  If \fIVar\fR is defined by another
16204 module, you must either compile that module with a high-enough
16205 \&\fB\-G\fR setting or attach a \f(CW\*(C`section\*(C'\fR attribute to \fIVar\fR's
16206 definition.  If \fIVar\fR is common, you must link the application
16207 with a high-enough \fB\-G\fR setting.
16208 .Sp
16209 The easiest way of satisfying these restrictions is to compile
16210 and link every module with the same \fB\-G\fR option.  However,
16211 you may wish to build a library that supports several different
16212 small data limits.  You can do this by compiling the library with
16213 the highest supported \fB\-G\fR setting and additionally using
16214 \&\fB\-mno\-extern\-sdata\fR to stop the library from making assumptions
16215 about externally-defined data.
16216 .IP "\fB\-mgpopt\fR" 4
16217 .IX Item "-mgpopt"
16218 .PD 0
16219 .IP "\fB\-mno\-gpopt\fR" 4
16220 .IX Item "-mno-gpopt"
16221 .PD
16222 Use (do not use) GP-relative accesses for symbols that are known to be
16223 in a small data section; see \fB\-G\fR, \fB\-mlocal\-sdata\fR and
16224 \&\fB\-mextern\-sdata\fR.  \fB\-mgpopt\fR is the default for all
16225 configurations.
16226 .Sp
16227 \&\fB\-mno\-gpopt\fR is useful for cases where the \f(CW$gp\fR register
16228 might not hold the value of \f(CW\*(C`_gp\*(C'\fR.  For example, if the code is
16229 part of a library that might be used in a boot monitor, programs that
16230 call boot monitor routines pass an unknown value in \f(CW$gp\fR.
16231 (In such situations, the boot monitor itself is usually compiled
16232 with \fB\-G0\fR.)
16233 .Sp
16234 \&\fB\-mno\-gpopt\fR implies \fB\-mno\-local\-sdata\fR and
16235 \&\fB\-mno\-extern\-sdata\fR.
16236 .IP "\fB\-membedded\-data\fR" 4
16237 .IX Item "-membedded-data"
16238 .PD 0
16239 .IP "\fB\-mno\-embedded\-data\fR" 4
16240 .IX Item "-mno-embedded-data"
16241 .PD
16242 Allocate variables to the read-only data section first if possible, then
16243 next in the small data section if possible, otherwise in data.  This gives
16244 slightly slower code than the default, but reduces the amount of \s-1RAM\s0 required
16245 when executing, and thus may be preferred for some embedded systems.
16246 .IP "\fB\-muninit\-const\-in\-rodata\fR" 4
16247 .IX Item "-muninit-const-in-rodata"
16248 .PD 0
16249 .IP "\fB\-mno\-uninit\-const\-in\-rodata\fR" 4
16250 .IX Item "-mno-uninit-const-in-rodata"
16251 .PD
16252 Put uninitialized \f(CW\*(C`const\*(C'\fR variables in the read-only data section.
16253 This option is only meaningful in conjunction with \fB\-membedded\-data\fR.
16254 .IP "\fB\-mcode\-readable=\fR\fIsetting\fR" 4
16255 .IX Item "-mcode-readable=setting"
16256 Specify whether \s-1GCC\s0 may generate code that reads from executable sections.
16257 There are three possible settings:
16258 .RS 4
16259 .IP "\fB\-mcode\-readable=yes\fR" 4
16260 .IX Item "-mcode-readable=yes"
16261 Instructions may freely access executable sections.  This is the
16262 default setting.
16263 .IP "\fB\-mcode\-readable=pcrel\fR" 4
16264 .IX Item "-mcode-readable=pcrel"
16265 \&\s-1MIPS16\s0 PC-relative load instructions can access executable sections,
16266 but other instructions must not do so.  This option is useful on 4KSc
16267 and 4KSd processors when the code TLBs have the Read Inhibit bit set.
16268 It is also useful on processors that can be configured to have a dual
16269 instruction/data \s-1SRAM\s0 interface and that, like the M4K, automatically
16270 redirect PC-relative loads to the instruction \s-1RAM\s0.
16271 .IP "\fB\-mcode\-readable=no\fR" 4
16272 .IX Item "-mcode-readable=no"
16273 Instructions must not access executable sections.  This option can be
16274 useful on targets that are configured to have a dual instruction/data
16275 \&\s-1SRAM\s0 interface but that (unlike the M4K) do not automatically redirect
16276 PC-relative loads to the instruction \s-1RAM\s0.
16277 .RE
16278 .RS 4
16279 .RE
16280 .IP "\fB\-msplit\-addresses\fR" 4
16281 .IX Item "-msplit-addresses"
16282 .PD 0
16283 .IP "\fB\-mno\-split\-addresses\fR" 4
16284 .IX Item "-mno-split-addresses"
16285 .PD
16286 Enable (disable) use of the \f(CW\*(C`%hi()\*(C'\fR and \f(CW\*(C`%lo()\*(C'\fR assembler
16287 relocation operators.  This option has been superseded by
16288 \&\fB\-mexplicit\-relocs\fR but is retained for backwards compatibility.
16289 .IP "\fB\-mexplicit\-relocs\fR" 4
16290 .IX Item "-mexplicit-relocs"
16291 .PD 0
16292 .IP "\fB\-mno\-explicit\-relocs\fR" 4
16293 .IX Item "-mno-explicit-relocs"
16294 .PD
16295 Use (do not use) assembler relocation operators when dealing with symbolic
16296 addresses.  The alternative, selected by \fB\-mno\-explicit\-relocs\fR,
16297 is to use assembler macros instead.
16298 .Sp
16299 \&\fB\-mexplicit\-relocs\fR is the default if \s-1GCC\s0 was configured
16300 to use an assembler that supports relocation operators.
16301 .IP "\fB\-mcheck\-zero\-division\fR" 4
16302 .IX Item "-mcheck-zero-division"
16303 .PD 0
16304 .IP "\fB\-mno\-check\-zero\-division\fR" 4
16305 .IX Item "-mno-check-zero-division"
16306 .PD
16307 Trap (do not trap) on integer division by zero.
16308 .Sp
16309 The default is \fB\-mcheck\-zero\-division\fR.
16310 .IP "\fB\-mdivide\-traps\fR" 4
16311 .IX Item "-mdivide-traps"
16312 .PD 0
16313 .IP "\fB\-mdivide\-breaks\fR" 4
16314 .IX Item "-mdivide-breaks"
16315 .PD
16316 \&\s-1MIPS\s0 systems check for division by zero by generating either a
16317 conditional trap or a break instruction.  Using traps results in
16318 smaller code, but is only supported on \s-1MIPS\s0 \s-1II\s0 and later.  Also, some
16319 versions of the Linux kernel have a bug that prevents trap from
16320 generating the proper signal (\f(CW\*(C`SIGFPE\*(C'\fR).  Use \fB\-mdivide\-traps\fR to
16321 allow conditional traps on architectures that support them and
16322 \&\fB\-mdivide\-breaks\fR to force the use of breaks.
16323 .Sp
16324 The default is usually \fB\-mdivide\-traps\fR, but this can be
16325 overridden at configure time using \fB\-\-with\-divide=breaks\fR.
16326 Divide-by-zero checks can be completely disabled using
16327 \&\fB\-mno\-check\-zero\-division\fR.
16328 .IP "\fB\-mmemcpy\fR" 4
16329 .IX Item "-mmemcpy"
16330 .PD 0
16331 .IP "\fB\-mno\-memcpy\fR" 4
16332 .IX Item "-mno-memcpy"
16333 .PD
16334 Force (do not force) the use of \f(CW\*(C`memcpy\*(C'\fR for non-trivial block
16335 moves.  The default is \fB\-mno\-memcpy\fR, which allows \s-1GCC\s0 to inline
16336 most constant-sized copies.
16337 .IP "\fB\-mlong\-calls\fR" 4
16338 .IX Item "-mlong-calls"
16339 .PD 0
16340 .IP "\fB\-mno\-long\-calls\fR" 4
16341 .IX Item "-mno-long-calls"
16342 .PD
16343 Disable (do not disable) use of the \f(CW\*(C`jal\*(C'\fR instruction.  Calling
16344 functions using \f(CW\*(C`jal\*(C'\fR is more efficient but requires the caller
16345 and callee to be in the same 256 megabyte segment.
16346 .Sp
16347 This option has no effect on abicalls code.  The default is
16348 \&\fB\-mno\-long\-calls\fR.
16349 .IP "\fB\-mmad\fR" 4
16350 .IX Item "-mmad"
16351 .PD 0
16352 .IP "\fB\-mno\-mad\fR" 4
16353 .IX Item "-mno-mad"
16354 .PD
16355 Enable (disable) use of the \f(CW\*(C`mad\*(C'\fR, \f(CW\*(C`madu\*(C'\fR and \f(CW\*(C`mul\*(C'\fR
16356 instructions, as provided by the R4650 \s-1ISA\s0.
16357 .IP "\fB\-mimadd\fR" 4
16358 .IX Item "-mimadd"
16359 .PD 0
16360 .IP "\fB\-mno\-imadd\fR" 4
16361 .IX Item "-mno-imadd"
16362 .PD
16363 Enable (disable) use of the \f(CW\*(C`madd\*(C'\fR and \f(CW\*(C`msub\*(C'\fR integer
16364 instructions.  The default is \fB\-mimadd\fR on architectures
16365 that support \f(CW\*(C`madd\*(C'\fR and \f(CW\*(C`msub\*(C'\fR except for the 74k 
16366 architecture where it was found to generate slower code.
16367 .IP "\fB\-mfused\-madd\fR" 4
16368 .IX Item "-mfused-madd"
16369 .PD 0
16370 .IP "\fB\-mno\-fused\-madd\fR" 4
16371 .IX Item "-mno-fused-madd"
16372 .PD
16373 Enable (disable) use of the floating-point multiply-accumulate
16374 instructions, when they are available.  The default is
16375 \&\fB\-mfused\-madd\fR.
16376 .Sp
16377 On the R8000 \s-1CPU\s0 when multiply-accumulate instructions are used,
16378 the intermediate product is calculated to infinite precision
16379 and is not subject to the \s-1FCSR\s0 Flush to Zero bit.  This may be
16380 undesirable in some circumstances.  On other processors the result
16381 is numerically identical to the equivalent computation using
16382 separate multiply, add, subtract and negate instructions.
16383 .IP "\fB\-nocpp\fR" 4
16384 .IX Item "-nocpp"
16385 Tell the \s-1MIPS\s0 assembler to not run its preprocessor over user
16386 assembler files (with a \fB.s\fR suffix) when assembling them.
16387 .IP "\fB\-mfix\-24k\fR" 4
16388 .IX Item "-mfix-24k"
16389 .PD 0
16390 .IP "\fB\-mno\-fix\-24k\fR" 4
16391 .IX Item "-mno-fix-24k"
16392 .PD
16393 Work around the 24K E48 (lost data on stores during refill) errata.
16394 The workarounds are implemented by the assembler rather than by \s-1GCC\s0.
16395 .IP "\fB\-mfix\-r4000\fR" 4
16396 .IX Item "-mfix-r4000"
16397 .PD 0
16398 .IP "\fB\-mno\-fix\-r4000\fR" 4
16399 .IX Item "-mno-fix-r4000"
16400 .PD
16401 Work around certain R4000 \s-1CPU\s0 errata:
16402 .RS 4
16403 .IP "\-" 4
16404 A double-word or a variable shift may give an incorrect result if executed
16405 immediately after starting an integer division.
16406 .IP "\-" 4
16407 A double-word or a variable shift may give an incorrect result if executed
16408 while an integer multiplication is in progress.
16409 .IP "\-" 4
16410 An integer division may give an incorrect result if started in a delay slot
16411 of a taken branch or a jump.
16412 .RE
16413 .RS 4
16414 .RE
16415 .IP "\fB\-mfix\-r4400\fR" 4
16416 .IX Item "-mfix-r4400"
16417 .PD 0
16418 .IP "\fB\-mno\-fix\-r4400\fR" 4
16419 .IX Item "-mno-fix-r4400"
16420 .PD
16421 Work around certain R4400 \s-1CPU\s0 errata:
16422 .RS 4
16423 .IP "\-" 4
16424 A double-word or a variable shift may give an incorrect result if executed
16425 immediately after starting an integer division.
16426 .RE
16427 .RS 4
16428 .RE
16429 .IP "\fB\-mfix\-r10000\fR" 4
16430 .IX Item "-mfix-r10000"
16431 .PD 0
16432 .IP "\fB\-mno\-fix\-r10000\fR" 4
16433 .IX Item "-mno-fix-r10000"
16434 .PD
16435 Work around certain R10000 errata:
16436 .RS 4
16437 .IP "\-" 4
16438 \&\f(CW\*(C`ll\*(C'\fR/\f(CW\*(C`sc\*(C'\fR sequences may not behave atomically on revisions
16439 prior to 3.0.  They may deadlock on revisions 2.6 and earlier.
16440 .RE
16441 .RS 4
16442 .Sp
16443 This option can only be used if the target architecture supports
16444 branch-likely instructions.  \fB\-mfix\-r10000\fR is the default when
16445 \&\fB\-march=r10000\fR is used; \fB\-mno\-fix\-r10000\fR is the default
16446 otherwise.
16447 .RE
16448 .IP "\fB\-mfix\-rm7000\fR" 4
16449 .IX Item "-mfix-rm7000"
16450 .PD 0
16451 .IP "\fB\-mno\-fix\-rm7000\fR" 4
16452 .IX Item "-mno-fix-rm7000"
16453 .PD
16454 Work around the \s-1RM7000\s0 \f(CW\*(C`dmult\*(C'\fR/\f(CW\*(C`dmultu\*(C'\fR errata.  The
16455 workarounds are implemented by the assembler rather than by \s-1GCC\s0.
16456 .IP "\fB\-mfix\-vr4120\fR" 4
16457 .IX Item "-mfix-vr4120"
16458 .PD 0
16459 .IP "\fB\-mno\-fix\-vr4120\fR" 4
16460 .IX Item "-mno-fix-vr4120"
16461 .PD
16462 Work around certain \s-1VR4120\s0 errata:
16463 .RS 4
16464 .IP "\-" 4
16465 \&\f(CW\*(C`dmultu\*(C'\fR does not always produce the correct result.
16466 .IP "\-" 4
16467 \&\f(CW\*(C`div\*(C'\fR and \f(CW\*(C`ddiv\*(C'\fR do not always produce the correct result if one
16468 of the operands is negative.
16469 .RE
16470 .RS 4
16471 .Sp
16472 The workarounds for the division errata rely on special functions in
16473 \&\fIlibgcc.a\fR.  At present, these functions are only provided by
16474 the \f(CW\*(C`mips64vr*\-elf\*(C'\fR configurations.
16475 .Sp
16476 Other \s-1VR4120\s0 errata require a \s-1NOP\s0 to be inserted between certain pairs of
16477 instructions.  These errata are handled by the assembler, not by \s-1GCC\s0 itself.
16478 .RE
16479 .IP "\fB\-mfix\-vr4130\fR" 4
16480 .IX Item "-mfix-vr4130"
16481 Work around the \s-1VR4130\s0 \f(CW\*(C`mflo\*(C'\fR/\f(CW\*(C`mfhi\*(C'\fR errata.  The
16482 workarounds are implemented by the assembler rather than by \s-1GCC\s0,
16483 although \s-1GCC\s0 avoids using \f(CW\*(C`mflo\*(C'\fR and \f(CW\*(C`mfhi\*(C'\fR if the
16484 \&\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
16485 instructions are available instead.
16486 .IP "\fB\-mfix\-sb1\fR" 4
16487 .IX Item "-mfix-sb1"
16488 .PD 0
16489 .IP "\fB\-mno\-fix\-sb1\fR" 4
16490 .IX Item "-mno-fix-sb1"
16491 .PD
16492 Work around certain \s-1SB\-1\s0 \s-1CPU\s0 core errata.
16493 (This flag currently works around the \s-1SB\-1\s0 revision 2
16494 \&\*(L"F1\*(R" and \*(L"F2\*(R" floating-point errata.)
16495 .IP "\fB\-mr10k\-cache\-barrier=\fR\fIsetting\fR" 4
16496 .IX Item "-mr10k-cache-barrier=setting"
16497 Specify whether \s-1GCC\s0 should insert cache barriers to avoid the
16498 side-effects of speculation on R10K processors.
16499 .Sp
16500 In common with many processors, the R10K tries to predict the outcome
16501 of a conditional branch and speculatively executes instructions from
16502 the \*(L"taken\*(R" branch.  It later aborts these instructions if the
16503 predicted outcome is wrong.  However, on the R10K, even aborted
16504 instructions can have side effects.
16505 .Sp
16506 This problem only affects kernel stores and, depending on the system,
16507 kernel loads.  As an example, a speculatively-executed store may load
16508 the target memory into cache and mark the cache line as dirty, even if
16509 the store itself is later aborted.  If a \s-1DMA\s0 operation writes to the
16510 same area of memory before the \*(L"dirty\*(R" line is flushed, the cached
16511 data overwrites the DMA-ed data.  See the R10K processor manual
16512 for a full description, including other potential problems.
16513 .Sp
16514 One workaround is to insert cache barrier instructions before every memory
16515 access that might be speculatively executed and that might have side
16516 effects even if aborted.  \fB\-mr10k\-cache\-barrier=\fR\fIsetting\fR
16517 controls \s-1GCC\s0's implementation of this workaround.  It assumes that
16518 aborted accesses to any byte in the following regions does not have
16519 side effects:
16520 .RS 4
16521 .IP "1." 4
16522 .IX Item "1."
16523 the memory occupied by the current function's stack frame;
16524 .IP "2." 4
16525 .IX Item "2."
16526 the memory occupied by an incoming stack argument;
16527 .IP "3." 4
16528 .IX Item "3."
16529 the memory occupied by an object with a link-time-constant address.
16530 .RE
16531 .RS 4
16532 .Sp
16533 It is the kernel's responsibility to ensure that speculative
16534 accesses to these regions are indeed safe.
16535 .Sp
16536 If the input program contains a function declaration such as:
16537 .Sp
16538 .Vb 1
16539 \&        void foo (void);
16540 .Ve
16541 .Sp
16542 then the implementation of \f(CW\*(C`foo\*(C'\fR must allow \f(CW\*(C`j foo\*(C'\fR and
16543 \&\f(CW\*(C`jal foo\*(C'\fR to be executed speculatively.  \s-1GCC\s0 honors this
16544 restriction for functions it compiles itself.  It expects non-GCC
16545 functions (such as hand-written assembly code) to do the same.
16546 .Sp
16547 The option has three forms:
16548 .IP "\fB\-mr10k\-cache\-barrier=load\-store\fR" 4
16549 .IX Item "-mr10k-cache-barrier=load-store"
16550 Insert a cache barrier before a load or store that might be
16551 speculatively executed and that might have side effects even
16552 if aborted.
16553 .IP "\fB\-mr10k\-cache\-barrier=store\fR" 4
16554 .IX Item "-mr10k-cache-barrier=store"
16555 Insert a cache barrier before a store that might be speculatively
16556 executed and that might have side effects even if aborted.
16557 .IP "\fB\-mr10k\-cache\-barrier=none\fR" 4
16558 .IX Item "-mr10k-cache-barrier=none"
16559 Disable the insertion of cache barriers.  This is the default setting.
16560 .RE
16561 .RS 4
16562 .RE
16563 .IP "\fB\-mflush\-func=\fR\fIfunc\fR" 4
16564 .IX Item "-mflush-func=func"
16565 .PD 0
16566 .IP "\fB\-mno\-flush\-func\fR" 4
16567 .IX Item "-mno-flush-func"
16568 .PD
16569 Specifies the function to call to flush the I and D caches, or to not
16570 call any such function.  If called, the function must take the same
16571 arguments as the common \f(CW\*(C`_flush_func\*(C'\fR, that is, the address of the
16572 memory range for which the cache is being flushed, the size of the
16573 memory range, and the number 3 (to flush both caches).  The default
16574 depends on the target \s-1GCC\s0 was configured for, but commonly is either
16575 \&\f(CW\*(C`_flush_func\*(C'\fR or \f(CW\*(C`_\|_cpu_flush\*(C'\fR.
16576 .IP "\fBmbranch\-cost=\fR\fInum\fR" 4
16577 .IX Item "mbranch-cost=num"
16578 Set the cost of branches to roughly \fInum\fR \*(L"simple\*(R" instructions.
16579 This cost is only a heuristic and is not guaranteed to produce
16580 consistent results across releases.  A zero cost redundantly selects
16581 the default, which is based on the \fB\-mtune\fR setting.
16582 .IP "\fB\-mbranch\-likely\fR" 4
16583 .IX Item "-mbranch-likely"
16584 .PD 0
16585 .IP "\fB\-mno\-branch\-likely\fR" 4
16586 .IX Item "-mno-branch-likely"
16587 .PD
16588 Enable or disable use of Branch Likely instructions, regardless of the
16589 default for the selected architecture.  By default, Branch Likely
16590 instructions may be generated if they are supported by the selected
16591 architecture.  An exception is for the \s-1MIPS32\s0 and \s-1MIPS64\s0 architectures
16592 and processors that implement those architectures; for those, Branch
16593 Likely instructions are not be generated by default because the \s-1MIPS32\s0
16594 and \s-1MIPS64\s0 architectures specifically deprecate their use.
16595 .IP "\fB\-mfp\-exceptions\fR" 4
16596 .IX Item "-mfp-exceptions"
16597 .PD 0
16598 .IP "\fB\-mno\-fp\-exceptions\fR" 4
16599 .IX Item "-mno-fp-exceptions"
16600 .PD
16601 Specifies whether \s-1FP\s0 exceptions are enabled.  This affects how
16602 \&\s-1FP\s0 instructions are scheduled for some processors.
16603 The default is that \s-1FP\s0 exceptions are
16604 enabled.
16605 .Sp
16606 For instance, on the \s-1SB\-1\s0, if \s-1FP\s0 exceptions are disabled, and we are emitting
16607 64\-bit code, then we can use both \s-1FP\s0 pipes.  Otherwise, we can only use one
16608 \&\s-1FP\s0 pipe.
16609 .IP "\fB\-mvr4130\-align\fR" 4
16610 .IX Item "-mvr4130-align"
16611 .PD 0
16612 .IP "\fB\-mno\-vr4130\-align\fR" 4
16613 .IX Item "-mno-vr4130-align"
16614 .PD
16615 The \s-1VR4130\s0 pipeline is two-way superscalar, but can only issue two
16616 instructions together if the first one is 8\-byte aligned.  When this
16617 option is enabled, \s-1GCC\s0 aligns pairs of instructions that it
16618 thinks should execute in parallel.
16619 .Sp
16620 This option only has an effect when optimizing for the \s-1VR4130\s0.
16621 It normally makes code faster, but at the expense of making it bigger.
16622 It is enabled by default at optimization level \fB\-O3\fR.
16623 .IP "\fB\-msynci\fR" 4
16624 .IX Item "-msynci"
16625 .PD 0
16626 .IP "\fB\-mno\-synci\fR" 4
16627 .IX Item "-mno-synci"
16628 .PD
16629 Enable (disable) generation of \f(CW\*(C`synci\*(C'\fR instructions on
16630 architectures that support it.  The \f(CW\*(C`synci\*(C'\fR instructions (if
16631 enabled) are generated when \f(CW\*(C`_\|_builtin_\|_\|_clear_cache\*(C'\fR is
16632 compiled.
16633 .Sp
16634 This option defaults to \fB\-mno\-synci\fR, but the default can be
16635 overridden by configuring \s-1GCC\s0 with \fB\-\-with\-synci\fR.
16636 .Sp
16637 When compiling code for single processor systems, it is generally safe
16638 to use \f(CW\*(C`synci\*(C'\fR.  However, on many multi-core (\s-1SMP\s0) systems, it
16639 does not invalidate the instruction caches on all cores and may lead
16640 to undefined behavior.
16641 .IP "\fB\-mrelax\-pic\-calls\fR" 4
16642 .IX Item "-mrelax-pic-calls"
16643 .PD 0
16644 .IP "\fB\-mno\-relax\-pic\-calls\fR" 4
16645 .IX Item "-mno-relax-pic-calls"
16646 .PD
16647 Try to turn \s-1PIC\s0 calls that are normally dispatched via register
16648 \&\f(CW$25\fR into direct calls.  This is only possible if the linker can
16649 resolve the destination at link-time and if the destination is within
16650 range for a direct call.
16651 .Sp
16652 \&\fB\-mrelax\-pic\-calls\fR is the default if \s-1GCC\s0 was configured to use
16653 an assembler and a linker that support the \f(CW\*(C`.reloc\*(C'\fR assembly
16654 directive and \fB\-mexplicit\-relocs\fR is in effect.  With
16655 \&\fB\-mno\-explicit\-relocs\fR, this optimization can be performed by the
16656 assembler and the linker alone without help from the compiler.
16657 .IP "\fB\-mmcount\-ra\-address\fR" 4
16658 .IX Item "-mmcount-ra-address"
16659 .PD 0
16660 .IP "\fB\-mno\-mcount\-ra\-address\fR" 4
16661 .IX Item "-mno-mcount-ra-address"
16662 .PD
16663 Emit (do not emit) code that allows \f(CW\*(C`_mcount\*(C'\fR to modify the
16664 calling function's return address.  When enabled, this option extends
16665 the usual \f(CW\*(C`_mcount\*(C'\fR interface with a new \fIra-address\fR
16666 parameter, which has type \f(CW\*(C`intptr_t *\*(C'\fR and is passed in register
16667 \&\f(CW$12\fR.  \f(CW\*(C`_mcount\*(C'\fR can then modify the return address by
16668 doing both of the following:
16669 .RS 4
16670 .IP "*" 4
16671 Returning the new address in register \f(CW$31\fR.
16672 .IP "*" 4
16673 Storing the new address in \f(CW\*(C`*\f(CIra\-address\f(CW\*(C'\fR,
16674 if \fIra-address\fR is nonnull.
16675 .RE
16676 .RS 4
16677 .Sp
16678 The default is \fB\-mno\-mcount\-ra\-address\fR.
16679 .RE
16680 .PP
16681 \fI\s-1MMIX\s0 Options\fR
16682 .IX Subsection "MMIX Options"
16683 .PP
16684 These options are defined for the \s-1MMIX:\s0
16685 .IP "\fB\-mlibfuncs\fR" 4
16686 .IX Item "-mlibfuncs"
16687 .PD 0
16688 .IP "\fB\-mno\-libfuncs\fR" 4
16689 .IX Item "-mno-libfuncs"
16690 .PD
16691 Specify that intrinsic library functions are being compiled, passing all
16692 values in registers, no matter the size.
16693 .IP "\fB\-mepsilon\fR" 4
16694 .IX Item "-mepsilon"
16695 .PD 0
16696 .IP "\fB\-mno\-epsilon\fR" 4
16697 .IX Item "-mno-epsilon"
16698 .PD
16699 Generate floating-point comparison instructions that compare with respect
16700 to the \f(CW\*(C`rE\*(C'\fR epsilon register.
16701 .IP "\fB\-mabi=mmixware\fR" 4
16702 .IX Item "-mabi=mmixware"
16703 .PD 0
16704 .IP "\fB\-mabi=gnu\fR" 4
16705 .IX Item "-mabi=gnu"
16706 .PD
16707 Generate code that passes function parameters and return values that (in
16708 the called function) are seen as registers \f(CW$0\fR and up, as opposed to
16709 the \s-1GNU\s0 \s-1ABI\s0 which uses global registers \f(CW$231\fR and up.
16710 .IP "\fB\-mzero\-extend\fR" 4
16711 .IX Item "-mzero-extend"
16712 .PD 0
16713 .IP "\fB\-mno\-zero\-extend\fR" 4
16714 .IX Item "-mno-zero-extend"
16715 .PD
16716 When reading data from memory in sizes shorter than 64 bits, use (do not
16717 use) zero-extending load instructions by default, rather than
16718 sign-extending ones.
16719 .IP "\fB\-mknuthdiv\fR" 4
16720 .IX Item "-mknuthdiv"
16721 .PD 0
16722 .IP "\fB\-mno\-knuthdiv\fR" 4
16723 .IX Item "-mno-knuthdiv"
16724 .PD
16725 Make the result of a division yielding a remainder have the same sign as
16726 the divisor.  With the default, \fB\-mno\-knuthdiv\fR, the sign of the
16727 remainder follows the sign of the dividend.  Both methods are
16728 arithmetically valid, the latter being almost exclusively used.
16729 .IP "\fB\-mtoplevel\-symbols\fR" 4
16730 .IX Item "-mtoplevel-symbols"
16731 .PD 0
16732 .IP "\fB\-mno\-toplevel\-symbols\fR" 4
16733 .IX Item "-mno-toplevel-symbols"
16734 .PD
16735 Prepend (do not prepend) a \fB:\fR to all global symbols, so the assembly
16736 code can be used with the \f(CW\*(C`PREFIX\*(C'\fR assembly directive.
16737 .IP "\fB\-melf\fR" 4
16738 .IX Item "-melf"
16739 Generate an executable in the \s-1ELF\s0 format, rather than the default
16740 \&\fBmmo\fR format used by the \fBmmix\fR simulator.
16741 .IP "\fB\-mbranch\-predict\fR" 4
16742 .IX Item "-mbranch-predict"
16743 .PD 0
16744 .IP "\fB\-mno\-branch\-predict\fR" 4
16745 .IX Item "-mno-branch-predict"
16746 .PD
16747 Use (do not use) the probable-branch instructions, when static branch
16748 prediction indicates a probable branch.
16749 .IP "\fB\-mbase\-addresses\fR" 4
16750 .IX Item "-mbase-addresses"
16751 .PD 0
16752 .IP "\fB\-mno\-base\-addresses\fR" 4
16753 .IX Item "-mno-base-addresses"
16754 .PD
16755 Generate (do not generate) code that uses \fIbase addresses\fR.  Using a
16756 base address automatically generates a request (handled by the assembler
16757 and the linker) for a constant to be set up in a global register.  The
16758 register is used for one or more base address requests within the range 0
16759 to 255 from the value held in the register.  The generally leads to short
16760 and fast code, but the number of different data items that can be
16761 addressed is limited.  This means that a program that uses lots of static
16762 data may require \fB\-mno\-base\-addresses\fR.
16763 .IP "\fB\-msingle\-exit\fR" 4
16764 .IX Item "-msingle-exit"
16765 .PD 0
16766 .IP "\fB\-mno\-single\-exit\fR" 4
16767 .IX Item "-mno-single-exit"
16768 .PD
16769 Force (do not force) generated code to have a single exit point in each
16770 function.
16771 .PP
16772 \fI\s-1MN10300\s0 Options\fR
16773 .IX Subsection "MN10300 Options"
16774 .PP
16775 These \fB\-m\fR options are defined for Matsushita \s-1MN10300\s0 architectures:
16776 .IP "\fB\-mmult\-bug\fR" 4
16777 .IX Item "-mmult-bug"
16778 Generate code to avoid bugs in the multiply instructions for the \s-1MN10300\s0
16779 processors.  This is the default.
16780 .IP "\fB\-mno\-mult\-bug\fR" 4
16781 .IX Item "-mno-mult-bug"
16782 Do not generate code to avoid bugs in the multiply instructions for the
16783 \&\s-1MN10300\s0 processors.
16784 .IP "\fB\-mam33\fR" 4
16785 .IX Item "-mam33"
16786 Generate code using features specific to the \s-1AM33\s0 processor.
16787 .IP "\fB\-mno\-am33\fR" 4
16788 .IX Item "-mno-am33"
16789 Do not generate code using features specific to the \s-1AM33\s0 processor.  This
16790 is the default.
16791 .IP "\fB\-mam33\-2\fR" 4
16792 .IX Item "-mam33-2"
16793 Generate code using features specific to the \s-1AM33/2\s0.0 processor.
16794 .IP "\fB\-mam34\fR" 4
16795 .IX Item "-mam34"
16796 Generate code using features specific to the \s-1AM34\s0 processor.
16797 .IP "\fB\-mtune=\fR\fIcpu-type\fR" 4
16798 .IX Item "-mtune=cpu-type"
16799 Use the timing characteristics of the indicated \s-1CPU\s0 type when
16800 scheduling instructions.  This does not change the targeted processor
16801 type.  The \s-1CPU\s0 type must be one of \fBmn10300\fR, \fBam33\fR,
16802 \&\fBam33\-2\fR or \fBam34\fR.
16803 .IP "\fB\-mreturn\-pointer\-on\-d0\fR" 4
16804 .IX Item "-mreturn-pointer-on-d0"
16805 When generating a function that returns a pointer, return the pointer
16806 in both \f(CW\*(C`a0\*(C'\fR and \f(CW\*(C`d0\*(C'\fR.  Otherwise, the pointer is returned
16807 only in \f(CW\*(C`a0\*(C'\fR, and attempts to call such functions without a prototype
16808 result in errors.  Note that this option is on by default; use
16809 \&\fB\-mno\-return\-pointer\-on\-d0\fR to disable it.
16810 .IP "\fB\-mno\-crt0\fR" 4
16811 .IX Item "-mno-crt0"
16812 Do not link in the C run-time initialization object file.
16813 .IP "\fB\-mrelax\fR" 4
16814 .IX Item "-mrelax"
16815 Indicate to the linker that it should perform a relaxation optimization pass
16816 to shorten branches, calls and absolute memory addresses.  This option only
16817 has an effect when used on the command line for the final link step.
16818 .Sp
16819 This option makes symbolic debugging impossible.
16820 .IP "\fB\-mliw\fR" 4
16821 .IX Item "-mliw"
16822 Allow the compiler to generate \fILong Instruction Word\fR
16823 instructions if the target is the \fB\s-1AM33\s0\fR or later.  This is the
16824 default.  This option defines the preprocessor macro \f(CW\*(C`_\|_LIW_\|_\*(C'\fR.
16825 .IP "\fB\-mnoliw\fR" 4
16826 .IX Item "-mnoliw"
16827 Do not allow the compiler to generate \fILong Instruction Word\fR
16828 instructions.  This option defines the preprocessor macro
16829 \&\f(CW\*(C`_\|_NO_LIW_\|_\*(C'\fR.
16830 .IP "\fB\-msetlb\fR" 4
16831 .IX Item "-msetlb"
16832 Allow the compiler to generate the \fI\s-1SETLB\s0\fR and \fILcc\fR
16833 instructions if the target is the \fB\s-1AM33\s0\fR or later.  This is the
16834 default.  This option defines the preprocessor macro \f(CW\*(C`_\|_SETLB_\|_\*(C'\fR.
16835 .IP "\fB\-mnosetlb\fR" 4
16836 .IX Item "-mnosetlb"
16837 Do not allow the compiler to generate \fI\s-1SETLB\s0\fR or \fILcc\fR
16838 instructions.  This option defines the preprocessor macro
16839 \&\f(CW\*(C`_\|_NO_SETLB_\|_\*(C'\fR.
16840 .PP
16841 \fIMoxie Options\fR
16842 .IX Subsection "Moxie Options"
16843 .IP "\fB\-meb\fR" 4
16844 .IX Item "-meb"
16845 Generate big-endian code.  This is the default for \fBmoxie\-*\-*\fR
16846 configurations.
16847 .IP "\fB\-mel\fR" 4
16848 .IX Item "-mel"
16849 Generate little-endian code.
16850 .IP "\fB\-mmul.x\fR" 4
16851 .IX Item "-mmul.x"
16852 Generate mul.x and umul.x instructions.  This is the default for
16853 \&\fBmoxiebox\-*\-*\fR configurations.
16854 .IP "\fB\-mno\-crt0\fR" 4
16855 .IX Item "-mno-crt0"
16856 Do not link in the C run-time initialization object file.
16857 .PP
16858 \fI\s-1MSP430\s0 Options\fR
16859 .IX Subsection "MSP430 Options"
16860 .PP
16861 These options are defined for the \s-1MSP430:\s0
16862 .IP "\fB\-masm\-hex\fR" 4
16863 .IX Item "-masm-hex"
16864 Force assembly output to always use hex constants.  Normally such
16865 constants are signed decimals, but this option is available for
16866 testsuite and/or aesthetic purposes.
16867 .IP "\fB\-mmcu=\fR" 4
16868 .IX Item "-mmcu="
16869 Select the \s-1MCU\s0 to target.  This is used to create a C preprocessor
16870 symbol based upon the \s-1MCU\s0 name, converted to upper case and pre\- and
16871 post-fixed with \fB_\|_\fR.  This in turn is used by the
16872 \&\fImsp430.h\fR header file to select an MCU-specific supplementary
16873 header file.
16874 .Sp
16875 The option also sets the \s-1ISA\s0 to use.  If the \s-1MCU\s0 name is one that is
16876 known to only support the 430 \s-1ISA\s0 then that is selected, otherwise the
16877 430X \s-1ISA\s0 is selected.  A generic \s-1MCU\s0 name of \fBmsp430\fR can also be
16878 used to select the 430 \s-1ISA\s0.  Similarly the generic \fBmsp430x\fR \s-1MCU\s0
16879 name selects the 430X \s-1ISA\s0.
16880 .Sp
16881 In addition an MCU-specific linker script is added to the linker
16882 command line.  The script's name is the name of the \s-1MCU\s0 with
16883 \&\fI.ld\fR appended.  Thus specifying \fB\-mmcu=xxx\fR on the \fBgcc\fR
16884 command line defines the C preprocessor symbol \f(CW\*(C`_\|_XXX_\|_\*(C'\fR and
16885 cause the linker to search for a script called \fIxxx.ld\fR.
16886 .Sp
16887 This option is also passed on to the assembler.
16888 .IP "\fB\-mcpu=\fR" 4
16889 .IX Item "-mcpu="
16890 Specifies the \s-1ISA\s0 to use.  Accepted values are \fBmsp430\fR,
16891 \&\fBmsp430x\fR and \fBmsp430xv2\fR.  This option is deprecated.  The
16892 \&\fB\-mmcu=\fR option should be used to select the \s-1ISA\s0.
16893 .IP "\fB\-msim\fR" 4
16894 .IX Item "-msim"
16895 Link to the simulator runtime libraries and linker script.  Overrides
16896 any scripts that would be selected by the \fB\-mmcu=\fR option.
16897 .IP "\fB\-mlarge\fR" 4
16898 .IX Item "-mlarge"
16899 Use large-model addressing (20\-bit pointers, 32\-bit \f(CW\*(C`size_t\*(C'\fR).
16900 .IP "\fB\-msmall\fR" 4
16901 .IX Item "-msmall"
16902 Use small-model addressing (16\-bit pointers, 16\-bit \f(CW\*(C`size_t\*(C'\fR).
16903 .IP "\fB\-mrelax\fR" 4
16904 .IX Item "-mrelax"
16905 This option is passed to the assembler and linker, and allows the
16906 linker to perform certain optimizations that cannot be done until
16907 the final link.
16908 .IP "\fBmhwmult=\fR" 4
16909 .IX Item "mhwmult="
16910 Describes the type of hardware multiply supported by the target.
16911 Accepted values are \fBnone\fR for no hardware multiply, \fB16bit\fR
16912 for the original 16\-bit\-only multiply supported by early MCUs.
16913 \&\fB32bit\fR for the 16/32\-bit multiply supported by later MCUs and
16914 \&\fBf5series\fR for the 16/32\-bit multiply supported by F5\-series MCUs.
16915 A value of \fBauto\fR can also be given.  This tells \s-1GCC\s0 to deduce
16916 the hardware multiply support based upon the \s-1MCU\s0 name provided by the
16917 \&\fB\-mmcu\fR option.  If no \fB\-mmcu\fR option is specified then
16918 \&\fB32bit\fR hardware multiply support is assumed.  \fBauto\fR is the
16919 default setting.
16920 .Sp
16921 Hardware multiplies are normally performed by calling a library
16922 routine.  This saves space in the generated code.  When compiling at
16923 \&\fB\-O3\fR or higher however the hardware multiplier is invoked
16924 inline.  This makes for bigger, but faster code.
16925 .Sp
16926 The hardware multiply routines disable interrupts whilst running and
16927 restore the previous interrupt state when they finish.  This makes
16928 them safe to use inside interrupt handlers as well as in normal code.
16929 .IP "\fB\-minrt\fR" 4
16930 .IX Item "-minrt"
16931 Enable the use of a minimum runtime environment \- no static
16932 initializers or constructors.  This is intended for memory-constrained
16933 devices.  The compiler includes special symbols in some objects
16934 that tell the linker and runtime which code fragments are required.
16935 .PP
16936 \fI\s-1NDS32\s0 Options\fR
16937 .IX Subsection "NDS32 Options"
16938 .PP
16939 These options are defined for \s-1NDS32\s0 implementations:
16940 .IP "\fB\-mbig\-endian\fR" 4
16941 .IX Item "-mbig-endian"
16942 Generate code in big-endian mode.
16943 .IP "\fB\-mlittle\-endian\fR" 4
16944 .IX Item "-mlittle-endian"
16945 Generate code in little-endian mode.
16946 .IP "\fB\-mreduced\-regs\fR" 4
16947 .IX Item "-mreduced-regs"
16948 Use reduced-set registers for register allocation.
16949 .IP "\fB\-mfull\-regs\fR" 4
16950 .IX Item "-mfull-regs"
16951 Use full-set registers for register allocation.
16952 .IP "\fB\-mcmov\fR" 4
16953 .IX Item "-mcmov"
16954 Generate conditional move instructions.
16955 .IP "\fB\-mno\-cmov\fR" 4
16956 .IX Item "-mno-cmov"
16957 Do not generate conditional move instructions.
16958 .IP "\fB\-mperf\-ext\fR" 4
16959 .IX Item "-mperf-ext"
16960 Generate performance extension instructions.
16961 .IP "\fB\-mno\-perf\-ext\fR" 4
16962 .IX Item "-mno-perf-ext"
16963 Do not generate performance extension instructions.
16964 .IP "\fB\-mv3push\fR" 4
16965 .IX Item "-mv3push"
16966 Generate v3 push25/pop25 instructions.
16967 .IP "\fB\-mno\-v3push\fR" 4
16968 .IX Item "-mno-v3push"
16969 Do not generate v3 push25/pop25 instructions.
16970 .IP "\fB\-m16\-bit\fR" 4
16971 .IX Item "-m16-bit"
16972 Generate 16\-bit instructions.
16973 .IP "\fB\-mno\-16\-bit\fR" 4
16974 .IX Item "-mno-16-bit"
16975 Do not generate 16\-bit instructions.
16976 .IP "\fB\-misr\-vector\-size=\fR\fInum\fR" 4
16977 .IX Item "-misr-vector-size=num"
16978 Specify the size of each interrupt vector, which must be 4 or 16.
16979 .IP "\fB\-mcache\-block\-size=\fR\fInum\fR" 4
16980 .IX Item "-mcache-block-size=num"
16981 Specify the size of each cache block,
16982 which must be a power of 2 between 4 and 512.
16983 .IP "\fB\-march=\fR\fIarch\fR" 4
16984 .IX Item "-march=arch"
16985 Specify the name of the target architecture.
16986 .IP "\fB\-mcmodel=\fR\fIcode-model\fR" 4
16987 .IX Item "-mcmodel=code-model"
16988 Set the code model to one of
16989 .RS 4
16990 .IP "\fBsmall\fR" 4
16991 .IX Item "small"
16992 All the data and read-only data segments must be within 512KB addressing space.
16993 The text segment must be within 16MB addressing space.
16994 .IP "\fBmedium\fR" 4
16995 .IX Item "medium"
16996 The data segment must be within 512KB while the read-only data segment can be
16997 within 4GB addressing space.  The text segment should be still within 16MB
16998 addressing space.
16999 .IP "\fBlarge\fR" 4
17000 .IX Item "large"
17001 All the text and data segments can be within 4GB addressing space.
17002 .RE
17003 .RS 4
17004 .RE
17005 .IP "\fB\-mctor\-dtor\fR" 4
17006 .IX Item "-mctor-dtor"
17007 Enable constructor/destructor feature.
17008 .IP "\fB\-mrelax\fR" 4
17009 .IX Item "-mrelax"
17010 Guide linker to relax instructions.
17011 .PP
17012 \fINios \s-1II\s0 Options\fR
17013 .IX Subsection "Nios II Options"
17014 .PP
17015 These are the options defined for the Altera Nios \s-1II\s0 processor.
17016 .IP "\fB\-G\fR \fInum\fR" 4
17017 .IX Item "-G num"
17018 Put global and static objects less than or equal to \fInum\fR bytes
17019 into the small data or \s-1BSS\s0 sections instead of the normal data or \s-1BSS\s0
17020 sections.  The default value of \fInum\fR is 8.
17021 .IP "\fB\-mgpopt=\fR\fIoption\fR" 4
17022 .IX Item "-mgpopt=option"
17023 .PD 0
17024 .IP "\fB\-mgpopt\fR" 4
17025 .IX Item "-mgpopt"
17026 .IP "\fB\-mno\-gpopt\fR" 4
17027 .IX Item "-mno-gpopt"
17028 .PD
17029 Generate (do not generate) GP-relative accesses.  The following 
17030 \&\fIoption\fR names are recognized:
17031 .RS 4
17032 .IP "\fBnone\fR" 4
17033 .IX Item "none"
17034 Do not generate GP-relative accesses.
17035 .IP "\fBlocal\fR" 4
17036 .IX Item "local"
17037 Generate GP-relative accesses for small data objects that are not 
17038 external or weak.  Also use GP-relative addressing for objects that
17039 have been explicitly placed in a small data section via a \f(CW\*(C`section\*(C'\fR
17040 attribute.
17041 .IP "\fBglobal\fR" 4
17042 .IX Item "global"
17043 As for \fBlocal\fR, but also generate GP-relative accesses for
17044 small data objects that are external or weak.  If you use this option,
17045 you must ensure that all parts of your program (including libraries) are
17046 compiled with the same \fB\-G\fR setting.
17047 .IP "\fBdata\fR" 4
17048 .IX Item "data"
17049 Generate GP-relative accesses for all data objects in the program.  If you
17050 use this option, the entire data and \s-1BSS\s0 segments
17051 of your program must fit in 64K of memory and you must use an appropriate
17052 linker script to allocate them within the addressible range of the
17053 global pointer.
17054 .IP "\fBall\fR" 4
17055 .IX Item "all"
17056 Generate GP-relative addresses for function pointers as well as data
17057 pointers.  If you use this option, the entire text, data, and \s-1BSS\s0 segments
17058 of your program must fit in 64K of memory and you must use an appropriate
17059 linker script to allocate them within the addressible range of the
17060 global pointer.
17061 .RE
17062 .RS 4
17063 .Sp
17064 \&\fB\-mgpopt\fR is equivalent to \fB\-mgpopt=local\fR, and
17065 \&\fB\-mno\-gpopt\fR is equivalent to \fB\-mgpopt=none\fR.
17066 .Sp
17067 The default is \fB\-mgpopt\fR except when \fB\-fpic\fR or
17068 \&\fB\-fPIC\fR is specified to generate position-independent code.
17069 Note that the Nios \s-1II\s0 \s-1ABI\s0 does not permit GP-relative accesses from
17070 shared libraries.
17071 .Sp
17072 You may need to specify \fB\-mno\-gpopt\fR explicitly when building
17073 programs that include large amounts of small data, including large
17074 \&\s-1GOT\s0 data sections.  In this case, the 16\-bit offset for GP-relative
17075 addressing may not be large enough to allow access to the entire 
17076 small data section.
17077 .RE
17078 .IP "\fB\-mel\fR" 4
17079 .IX Item "-mel"
17080 .PD 0
17081 .IP "\fB\-meb\fR" 4
17082 .IX Item "-meb"
17083 .PD
17084 Generate little-endian (default) or big-endian (experimental) code,
17085 respectively.
17086 .IP "\fB\-mbypass\-cache\fR" 4
17087 .IX Item "-mbypass-cache"
17088 .PD 0
17089 .IP "\fB\-mno\-bypass\-cache\fR" 4
17090 .IX Item "-mno-bypass-cache"
17091 .PD
17092 Force all load and store instructions to always bypass cache by 
17093 using I/O variants of the instructions. The default is not to
17094 bypass the cache.
17095 .IP "\fB\-mno\-cache\-volatile\fR" 4
17096 .IX Item "-mno-cache-volatile"
17097 .PD 0
17098 .IP "\fB\-mcache\-volatile\fR" 4
17099 .IX Item "-mcache-volatile"
17100 .PD
17101 Volatile memory access bypass the cache using the I/O variants of 
17102 the load and store instructions. The default is not to bypass the cache.
17103 .IP "\fB\-mno\-fast\-sw\-div\fR" 4
17104 .IX Item "-mno-fast-sw-div"
17105 .PD 0
17106 .IP "\fB\-mfast\-sw\-div\fR" 4
17107 .IX Item "-mfast-sw-div"
17108 .PD
17109 Do not use table-based fast divide for small numbers. The default 
17110 is to use the fast divide at \fB\-O3\fR and above.
17111 .IP "\fB\-mno\-hw\-mul\fR" 4
17112 .IX Item "-mno-hw-mul"
17113 .PD 0
17114 .IP "\fB\-mhw\-mul\fR" 4
17115 .IX Item "-mhw-mul"
17116 .IP "\fB\-mno\-hw\-mulx\fR" 4
17117 .IX Item "-mno-hw-mulx"
17118 .IP "\fB\-mhw\-mulx\fR" 4
17119 .IX Item "-mhw-mulx"
17120 .IP "\fB\-mno\-hw\-div\fR" 4
17121 .IX Item "-mno-hw-div"
17122 .IP "\fB\-mhw\-div\fR" 4
17123 .IX Item "-mhw-div"
17124 .PD
17125 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 
17126 instructions by the compiler. The default is to emit \f(CW\*(C`mul\*(C'\fR
17127 and not emit \f(CW\*(C`div\*(C'\fR and \f(CW\*(C`mulx\*(C'\fR.
17128 .IP "\fB\-mcustom\-\fR\fIinsn\fR\fB=\fR\fIN\fR" 4
17129 .IX Item "-mcustom-insn=N"
17130 .PD 0
17131 .IP "\fB\-mno\-custom\-\fR\fIinsn\fR" 4
17132 .IX Item "-mno-custom-insn"
17133 .PD
17134 Each \fB\-mcustom\-\fR\fIinsn\fR\fB=\fR\fIN\fR option enables use of a
17135 custom instruction with encoding \fIN\fR when generating code that uses 
17136 \&\fIinsn\fR.  For example, \fB\-mcustom\-fadds=253\fR generates custom
17137 instruction 253 for single-precision floating-point add operations instead
17138 of the default behavior of using a library call.
17139 .Sp
17140 The following values of \fIinsn\fR are supported.  Except as otherwise
17141 noted, floating-point operations are expected to be implemented with
17142 normal \s-1IEEE\s0 754 semantics and correspond directly to the C operators or the
17143 equivalent \s-1GCC\s0 built-in functions.
17144 .Sp
17145 Single-precision floating point:
17146 .RS 4
17147 .IP "\fBfadds\fR, \fBfsubs\fR, \fBfdivs\fR, \fBfmuls\fR" 4
17148 .IX Item "fadds, fsubs, fdivs, fmuls"
17149 Binary arithmetic operations.
17150 .IP "\fBfnegs\fR" 4
17151 .IX Item "fnegs"
17152 Unary negation.
17153 .IP "\fBfabss\fR" 4
17154 .IX Item "fabss"
17155 Unary absolute value.
17156 .IP "\fBfcmpeqs\fR, \fBfcmpges\fR, \fBfcmpgts\fR, \fBfcmples\fR, \fBfcmplts\fR, \fBfcmpnes\fR" 4
17157 .IX Item "fcmpeqs, fcmpges, fcmpgts, fcmples, fcmplts, fcmpnes"
17158 Comparison operations.
17159 .IP "\fBfmins\fR, \fBfmaxs\fR" 4
17160 .IX Item "fmins, fmaxs"
17161 Floating-point minimum and maximum.  These instructions are only
17162 generated if \fB\-ffinite\-math\-only\fR is specified.
17163 .IP "\fBfsqrts\fR" 4
17164 .IX Item "fsqrts"
17165 Unary square root operation.
17166 .IP "\fBfcoss\fR, \fBfsins\fR, \fBftans\fR, \fBfatans\fR, \fBfexps\fR, \fBflogs\fR" 4
17167 .IX Item "fcoss, fsins, ftans, fatans, fexps, flogs"
17168 Floating-point trigonometric and exponential functions.  These instructions
17169 are only generated if \fB\-funsafe\-math\-optimizations\fR is also specified.
17170 .RE
17171 .RS 4
17172 .Sp
17173 Double-precision floating point:
17174 .IP "\fBfaddd\fR, \fBfsubd\fR, \fBfdivd\fR, \fBfmuld\fR" 4
17175 .IX Item "faddd, fsubd, fdivd, fmuld"
17176 Binary arithmetic operations.
17177 .IP "\fBfnegd\fR" 4
17178 .IX Item "fnegd"
17179 Unary negation.
17180 .IP "\fBfabsd\fR" 4
17181 .IX Item "fabsd"
17182 Unary absolute value.
17183 .IP "\fBfcmpeqd\fR, \fBfcmpged\fR, \fBfcmpgtd\fR, \fBfcmpled\fR, \fBfcmpltd\fR, \fBfcmpned\fR" 4
17184 .IX Item "fcmpeqd, fcmpged, fcmpgtd, fcmpled, fcmpltd, fcmpned"
17185 Comparison operations.
17186 .IP "\fBfmind\fR, \fBfmaxd\fR" 4
17187 .IX Item "fmind, fmaxd"
17188 Double-precision minimum and maximum.  These instructions are only
17189 generated if \fB\-ffinite\-math\-only\fR is specified.
17190 .IP "\fBfsqrtd\fR" 4
17191 .IX Item "fsqrtd"
17192 Unary square root operation.
17193 .IP "\fBfcosd\fR, \fBfsind\fR, \fBftand\fR, \fBfatand\fR, \fBfexpd\fR, \fBflogd\fR" 4
17194 .IX Item "fcosd, fsind, ftand, fatand, fexpd, flogd"
17195 Double-precision trigonometric and exponential functions.  These instructions
17196 are only generated if \fB\-funsafe\-math\-optimizations\fR is also specified.
17197 .RE
17198 .RS 4
17199 .Sp
17200 Conversions:
17201 .IP "\fBfextsd\fR" 4
17202 .IX Item "fextsd"
17203 Conversion from single precision to double precision.
17204 .IP "\fBftruncds\fR" 4
17205 .IX Item "ftruncds"
17206 Conversion from double precision to single precision.
17207 .IP "\fBfixsi\fR, \fBfixsu\fR, \fBfixdi\fR, \fBfixdu\fR" 4
17208 .IX Item "fixsi, fixsu, fixdi, fixdu"
17209 Conversion from floating point to signed or unsigned integer types, with
17210 truncation towards zero.
17211 .IP "\fBround\fR" 4
17212 .IX Item "round"
17213 Conversion from single-precision floating point to signed integer,
17214 rounding to the nearest integer and ties away from zero.
17215 This corresponds to the \f(CW\*(C`_\|_builtin_lroundf\*(C'\fR function when
17216 \&\fB\-fno\-math\-errno\fR is used.
17217 .IP "\fBfloatis\fR, \fBfloatus\fR, \fBfloatid\fR, \fBfloatud\fR" 4
17218 .IX Item "floatis, floatus, floatid, floatud"
17219 Conversion from signed or unsigned integer types to floating-point types.
17220 .RE
17221 .RS 4
17222 .Sp
17223 In addition, all of the following transfer instructions for internal
17224 registers X and Y must be provided to use any of the double-precision
17225 floating-point instructions.  Custom instructions taking two
17226 double-precision source operands expect the first operand in the
17227 64\-bit register X.  The other operand (or only operand of a unary
17228 operation) is given to the custom arithmetic instruction with the
17229 least significant half in source register \fIsrc1\fR and the most
17230 significant half in \fIsrc2\fR.  A custom instruction that returns a
17231 double-precision result returns the most significant 32 bits in the
17232 destination register and the other half in 32\-bit register Y.  
17233 \&\s-1GCC\s0 automatically generates the necessary code sequences to write
17234 register X and/or read register Y when double-precision floating-point
17235 instructions are used.
17236 .IP "\fBfwrx\fR" 4
17237 .IX Item "fwrx"
17238 Write \fIsrc1\fR into the least significant half of X and \fIsrc2\fR into
17239 the most significant half of X.
17240 .IP "\fBfwry\fR" 4
17241 .IX Item "fwry"
17242 Write \fIsrc1\fR into Y.
17243 .IP "\fBfrdxhi\fR, \fBfrdxlo\fR" 4
17244 .IX Item "frdxhi, frdxlo"
17245 Read the most or least (respectively) significant half of X and store it in
17246 \&\fIdest\fR.
17247 .IP "\fBfrdy\fR" 4
17248 .IX Item "frdy"
17249 Read the value of Y and store it into \fIdest\fR.
17250 .RE
17251 .RS 4
17252 .Sp
17253 Note that you can gain more local control over generation of Nios \s-1II\s0 custom
17254 instructions by using the \f(CW\*(C`target("custom\-\f(CIinsn\f(CW=\f(CIN\f(CW")\*(C'\fR
17255 and \f(CW\*(C`target("no\-custom\-\f(CIinsn\f(CW")\*(C'\fR function attributes
17256 or pragmas.
17257 .RE
17258 .IP "\fB\-mcustom\-fpu\-cfg=\fR\fIname\fR" 4
17259 .IX Item "-mcustom-fpu-cfg=name"
17260 This option enables a predefined, named set of custom instruction encodings
17261 (see \fB\-mcustom\-\fR\fIinsn\fR above).  
17262 Currently, the following sets are defined:
17263 .Sp
17264 \&\fB\-mcustom\-fpu\-cfg=60\-1\fR is equivalent to:
17265 \&\fB\-mcustom\-fmuls=252 
17266 \&\-mcustom\-fadds=253 
17267 \&\-mcustom\-fsubs=254 
17268 \&\-fsingle\-precision\-constant\fR
17269 .Sp
17270 \&\fB\-mcustom\-fpu\-cfg=60\-2\fR is equivalent to:
17271 \&\fB\-mcustom\-fmuls=252 
17272 \&\-mcustom\-fadds=253 
17273 \&\-mcustom\-fsubs=254 
17274 \&\-mcustom\-fdivs=255 
17275 \&\-fsingle\-precision\-constant\fR
17276 .Sp
17277 \&\fB\-mcustom\-fpu\-cfg=72\-3\fR is equivalent to:
17278 \&\fB\-mcustom\-floatus=243 
17279 \&\-mcustom\-fixsi=244 
17280 \&\-mcustom\-floatis=245 
17281 \&\-mcustom\-fcmpgts=246 
17282 \&\-mcustom\-fcmples=249 
17283 \&\-mcustom\-fcmpeqs=250 
17284 \&\-mcustom\-fcmpnes=251 
17285 \&\-mcustom\-fmuls=252 
17286 \&\-mcustom\-fadds=253 
17287 \&\-mcustom\-fsubs=254 
17288 \&\-mcustom\-fdivs=255 
17289 \&\-fsingle\-precision\-constant\fR
17290 .Sp
17291 Custom instruction assignments given by individual
17292 \&\fB\-mcustom\-\fR\fIinsn\fR\fB=\fR options override those given by
17293 \&\fB\-mcustom\-fpu\-cfg=\fR, regardless of the
17294 order of the options on the command line.
17295 .Sp
17296 Note that you can gain more local control over selection of a \s-1FPU\s0
17297 configuration by using the \f(CW\*(C`target("custom\-fpu\-cfg=\f(CIname\f(CW")\*(C'\fR
17298 function attribute
17299 or pragma.
17300 .PP
17301 These additional \fB\-m\fR options are available for the Altera Nios \s-1II\s0
17302 \&\s-1ELF\s0 (bare-metal) target:
17303 .IP "\fB\-mhal\fR" 4
17304 .IX Item "-mhal"
17305 Link with \s-1HAL\s0 \s-1BSP\s0.  This suppresses linking with the GCC-provided C runtime
17306 startup and termination code, and is typically used in conjunction with
17307 \&\fB\-msys\-crt0=\fR to specify the location of the alternate startup code
17308 provided by the \s-1HAL\s0 \s-1BSP\s0.
17309 .IP "\fB\-msmallc\fR" 4
17310 .IX Item "-msmallc"
17311 Link with a limited version of the C library, \fB\-lsmallc\fR, rather than
17312 Newlib.
17313 .IP "\fB\-msys\-crt0=\fR\fIstartfile\fR" 4
17314 .IX Item "-msys-crt0=startfile"
17315 \&\fIstartfile\fR is the file name of the startfile (crt0) to use 
17316 when linking.  This option is only useful in conjunction with \fB\-mhal\fR.
17317 .IP "\fB\-msys\-lib=\fR\fIsystemlib\fR" 4
17318 .IX Item "-msys-lib=systemlib"
17319 \&\fIsystemlib\fR is the library name of the library that provides
17320 low-level system calls required by the C library,
17321 e.g. \f(CW\*(C`read\*(C'\fR and \f(CW\*(C`write\*(C'\fR.
17322 This option is typically used to link with a library provided by a \s-1HAL\s0 \s-1BSP\s0.
17323 .PP
17324 \fINvidia \s-1PTX\s0 Options\fR
17325 .IX Subsection "Nvidia PTX Options"
17326 .PP
17327 These options are defined for Nvidia \s-1PTX:\s0
17328 .IP "\fB\-m32\fR" 4
17329 .IX Item "-m32"
17330 .PD 0
17331 .IP "\fB\-m64\fR" 4
17332 .IX Item "-m64"
17333 .PD
17334 Generate code for 32\-bit or 64\-bit \s-1ABI\s0.
17335 .IP "\fB\-mmainkernel\fR" 4
17336 .IX Item "-mmainkernel"
17337 Link in code for a _\|_main kernel.  This is for stand-alone instead of
17338 offloading execution.
17339 .PP
17340 \fI\s-1PDP\-11\s0 Options\fR
17341 .IX Subsection "PDP-11 Options"
17342 .PP
17343 These options are defined for the \s-1PDP\-11:\s0
17344 .IP "\fB\-mfpu\fR" 4
17345 .IX Item "-mfpu"
17346 Use hardware \s-1FPP\s0 floating point.  This is the default.  (\s-1FIS\s0 floating
17347 point on the \s-1PDP\-11/40\s0 is not supported.)
17348 .IP "\fB\-msoft\-float\fR" 4
17349 .IX Item "-msoft-float"
17350 Do not use hardware floating point.
17351 .IP "\fB\-mac0\fR" 4
17352 .IX Item "-mac0"
17353 Return floating-point results in ac0 (fr0 in Unix assembler syntax).
17354 .IP "\fB\-mno\-ac0\fR" 4
17355 .IX Item "-mno-ac0"
17356 Return floating-point results in memory.  This is the default.
17357 .IP "\fB\-m40\fR" 4
17358 .IX Item "-m40"
17359 Generate code for a \s-1PDP\-11/40\s0.
17360 .IP "\fB\-m45\fR" 4
17361 .IX Item "-m45"
17362 Generate code for a \s-1PDP\-11/45\s0.  This is the default.
17363 .IP "\fB\-m10\fR" 4
17364 .IX Item "-m10"
17365 Generate code for a \s-1PDP\-11/10\s0.
17366 .IP "\fB\-mbcopy\-builtin\fR" 4
17367 .IX Item "-mbcopy-builtin"
17368 Use inline \f(CW\*(C`movmemhi\*(C'\fR patterns for copying memory.  This is the
17369 default.
17370 .IP "\fB\-mbcopy\fR" 4
17371 .IX Item "-mbcopy"
17372 Do not use inline \f(CW\*(C`movmemhi\*(C'\fR patterns for copying memory.
17373 .IP "\fB\-mint16\fR" 4
17374 .IX Item "-mint16"
17375 .PD 0
17376 .IP "\fB\-mno\-int32\fR" 4
17377 .IX Item "-mno-int32"
17378 .PD
17379 Use 16\-bit \f(CW\*(C`int\*(C'\fR.  This is the default.
17380 .IP "\fB\-mint32\fR" 4
17381 .IX Item "-mint32"
17382 .PD 0
17383 .IP "\fB\-mno\-int16\fR" 4
17384 .IX Item "-mno-int16"
17385 .PD
17386 Use 32\-bit \f(CW\*(C`int\*(C'\fR.
17387 .IP "\fB\-mfloat64\fR" 4
17388 .IX Item "-mfloat64"
17389 .PD 0
17390 .IP "\fB\-mno\-float32\fR" 4
17391 .IX Item "-mno-float32"
17392 .PD
17393 Use 64\-bit \f(CW\*(C`float\*(C'\fR.  This is the default.
17394 .IP "\fB\-mfloat32\fR" 4
17395 .IX Item "-mfloat32"
17396 .PD 0
17397 .IP "\fB\-mno\-float64\fR" 4
17398 .IX Item "-mno-float64"
17399 .PD
17400 Use 32\-bit \f(CW\*(C`float\*(C'\fR.
17401 .IP "\fB\-mabshi\fR" 4
17402 .IX Item "-mabshi"
17403 Use \f(CW\*(C`abshi2\*(C'\fR pattern.  This is the default.
17404 .IP "\fB\-mno\-abshi\fR" 4
17405 .IX Item "-mno-abshi"
17406 Do not use \f(CW\*(C`abshi2\*(C'\fR pattern.
17407 .IP "\fB\-mbranch\-expensive\fR" 4
17408 .IX Item "-mbranch-expensive"
17409 Pretend that branches are expensive.  This is for experimenting with
17410 code generation only.
17411 .IP "\fB\-mbranch\-cheap\fR" 4
17412 .IX Item "-mbranch-cheap"
17413 Do not pretend that branches are expensive.  This is the default.
17414 .IP "\fB\-munix\-asm\fR" 4
17415 .IX Item "-munix-asm"
17416 Use Unix assembler syntax.  This is the default when configured for
17417 \&\fBpdp11\-*\-bsd\fR.
17418 .IP "\fB\-mdec\-asm\fR" 4
17419 .IX Item "-mdec-asm"
17420 Use \s-1DEC\s0 assembler syntax.  This is the default when configured for any
17421 \&\s-1PDP\-11\s0 target other than \fBpdp11\-*\-bsd\fR.
17422 .PP
17423 \fIpicoChip Options\fR
17424 .IX Subsection "picoChip Options"
17425 .PP
17426 These \fB\-m\fR options are defined for picoChip implementations:
17427 .IP "\fB\-mae=\fR\fIae_type\fR" 4
17428 .IX Item "-mae=ae_type"
17429 Set the instruction set, register set, and instruction scheduling
17430 parameters for array element type \fIae_type\fR.  Supported values
17431 for \fIae_type\fR are \fB\s-1ANY\s0\fR, \fB\s-1MUL\s0\fR, and \fB\s-1MAC\s0\fR.
17432 .Sp
17433 \&\fB\-mae=ANY\fR selects a completely generic \s-1AE\s0 type.  Code
17434 generated with this option runs on any of the other \s-1AE\s0 types.  The
17435 code is not as efficient as it would be if compiled for a specific
17436 \&\s-1AE\s0 type, and some types of operation (e.g., multiplication) do not
17437 work properly on all types of \s-1AE\s0.
17438 .Sp
17439 \&\fB\-mae=MUL\fR selects a \s-1MUL\s0 \s-1AE\s0 type.  This is the most useful \s-1AE\s0 type
17440 for compiled code, and is the default.
17441 .Sp
17442 \&\fB\-mae=MAC\fR selects a DSP-style \s-1MAC\s0 \s-1AE\s0.  Code compiled with this
17443 option may suffer from poor performance of byte (char) manipulation,
17444 since the \s-1DSP\s0 \s-1AE\s0 does not provide hardware support for byte load/stores.
17445 .IP "\fB\-msymbol\-as\-address\fR" 4
17446 .IX Item "-msymbol-as-address"
17447 Enable the compiler to directly use a symbol name as an address in a
17448 load/store instruction, without first loading it into a
17449 register.  Typically, the use of this option generates larger
17450 programs, which run faster than when the option isn't used.  However, the
17451 results vary from program to program, so it is left as a user option,
17452 rather than being permanently enabled.
17453 .IP "\fB\-mno\-inefficient\-warnings\fR" 4
17454 .IX Item "-mno-inefficient-warnings"
17455 Disables warnings about the generation of inefficient code.  These
17456 warnings can be generated, for example, when compiling code that
17457 performs byte-level memory operations on the \s-1MAC\s0 \s-1AE\s0 type.  The \s-1MAC\s0 \s-1AE\s0 has
17458 no hardware support for byte-level memory operations, so all byte
17459 load/stores must be synthesized from word load/store operations.  This is
17460 inefficient and a warning is generated to indicate
17461 that you should rewrite the code to avoid byte operations, or to target
17462 an \s-1AE\s0 type that has the necessary hardware support.  This option disables
17463 these warnings.
17464 .PP
17465 \fIPowerPC Options\fR
17466 .IX Subsection "PowerPC Options"
17467 .PP
17468 These are listed under
17469 .PP
17470 \fI\s-1RL78\s0 Options\fR
17471 .IX Subsection "RL78 Options"
17472 .IP "\fB\-msim\fR" 4
17473 .IX Item "-msim"
17474 Links in additional target libraries to support operation within a
17475 simulator.
17476 .IP "\fB\-mmul=none\fR" 4
17477 .IX Item "-mmul=none"
17478 .PD 0
17479 .IP "\fB\-mmul=g13\fR" 4
17480 .IX Item "-mmul=g13"
17481 .IP "\fB\-mmul=rl78\fR" 4
17482 .IX Item "-mmul=rl78"
17483 .PD
17484 Specifies the type of hardware multiplication support to be used.  The
17485 default is \fBnone\fR, which uses software multiplication functions.
17486 The \fBg13\fR option is for the hardware multiply/divide peripheral
17487 only on the \s-1RL78/G13\s0 targets.  The \fBrl78\fR option is for the
17488 standard hardware multiplication defined in the \s-1RL78\s0 software manual.
17489 .IP "\fB\-m64bit\-doubles\fR" 4
17490 .IX Item "-m64bit-doubles"
17491 .PD 0
17492 .IP "\fB\-m32bit\-doubles\fR" 4
17493 .IX Item "-m32bit-doubles"
17494 .PD
17495 Make the \f(CW\*(C`double\*(C'\fR data type be 64 bits (\fB\-m64bit\-doubles\fR)
17496 or 32 bits (\fB\-m32bit\-doubles\fR) in size.  The default is
17497 \&\fB\-m32bit\-doubles\fR.
17498 .PP
17499 \fI\s-1IBM\s0 \s-1RS/6000\s0 and PowerPC Options\fR
17500 .IX Subsection "IBM RS/6000 and PowerPC Options"
17501 .PP
17502 These \fB\-m\fR options are defined for the \s-1IBM\s0 \s-1RS/6000\s0 and PowerPC:
17503 .IP "\fB\-mpowerpc\-gpopt\fR" 4
17504 .IX Item "-mpowerpc-gpopt"
17505 .PD 0
17506 .IP "\fB\-mno\-powerpc\-gpopt\fR" 4
17507 .IX Item "-mno-powerpc-gpopt"
17508 .IP "\fB\-mpowerpc\-gfxopt\fR" 4
17509 .IX Item "-mpowerpc-gfxopt"
17510 .IP "\fB\-mno\-powerpc\-gfxopt\fR" 4
17511 .IX Item "-mno-powerpc-gfxopt"
17512 .IP "\fB\-mpowerpc64\fR" 4
17513 .IX Item "-mpowerpc64"
17514 .IP "\fB\-mno\-powerpc64\fR" 4
17515 .IX Item "-mno-powerpc64"
17516 .IP "\fB\-mmfcrf\fR" 4
17517 .IX Item "-mmfcrf"
17518 .IP "\fB\-mno\-mfcrf\fR" 4
17519 .IX Item "-mno-mfcrf"
17520 .IP "\fB\-mpopcntb\fR" 4
17521 .IX Item "-mpopcntb"
17522 .IP "\fB\-mno\-popcntb\fR" 4
17523 .IX Item "-mno-popcntb"
17524 .IP "\fB\-mpopcntd\fR" 4
17525 .IX Item "-mpopcntd"
17526 .IP "\fB\-mno\-popcntd\fR" 4
17527 .IX Item "-mno-popcntd"
17528 .IP "\fB\-mfprnd\fR" 4
17529 .IX Item "-mfprnd"
17530 .IP "\fB\-mno\-fprnd\fR" 4
17531 .IX Item "-mno-fprnd"
17532 .IP "\fB\-mcmpb\fR" 4
17533 .IX Item "-mcmpb"
17534 .IP "\fB\-mno\-cmpb\fR" 4
17535 .IX Item "-mno-cmpb"
17536 .IP "\fB\-mmfpgpr\fR" 4
17537 .IX Item "-mmfpgpr"
17538 .IP "\fB\-mno\-mfpgpr\fR" 4
17539 .IX Item "-mno-mfpgpr"
17540 .IP "\fB\-mhard\-dfp\fR" 4
17541 .IX Item "-mhard-dfp"
17542 .IP "\fB\-mno\-hard\-dfp\fR" 4
17543 .IX Item "-mno-hard-dfp"
17544 .PD
17545 You use these options to specify which instructions are available on the
17546 processor you are using.  The default value of these options is
17547 determined when configuring \s-1GCC\s0.  Specifying the
17548 \&\fB\-mcpu=\fR\fIcpu_type\fR overrides the specification of these
17549 options.  We recommend you use the \fB\-mcpu=\fR\fIcpu_type\fR option
17550 rather than the options listed above.
17551 .Sp
17552 Specifying \fB\-mpowerpc\-gpopt\fR allows
17553 \&\s-1GCC\s0 to use the optional PowerPC architecture instructions in the
17554 General Purpose group, including floating-point square root.  Specifying
17555 \&\fB\-mpowerpc\-gfxopt\fR allows \s-1GCC\s0 to
17556 use the optional PowerPC architecture instructions in the Graphics
17557 group, including floating-point select.
17558 .Sp
17559 The \fB\-mmfcrf\fR option allows \s-1GCC\s0 to generate the move from
17560 condition register field instruction implemented on the \s-1POWER4\s0
17561 processor and other processors that support the PowerPC V2.01
17562 architecture.
17563 The \fB\-mpopcntb\fR option allows \s-1GCC\s0 to generate the popcount and
17564 double-precision \s-1FP\s0 reciprocal estimate instruction implemented on the
17565 \&\s-1POWER5\s0 processor and other processors that support the PowerPC V2.02
17566 architecture.
17567 The \fB\-mpopcntd\fR option allows \s-1GCC\s0 to generate the popcount
17568 instruction implemented on the \s-1POWER7\s0 processor and other processors
17569 that support the PowerPC V2.06 architecture.
17570 The \fB\-mfprnd\fR option allows \s-1GCC\s0 to generate the \s-1FP\s0 round to
17571 integer instructions implemented on the \s-1POWER5+\s0 processor and other
17572 processors that support the PowerPC V2.03 architecture.
17573 The \fB\-mcmpb\fR option allows \s-1GCC\s0 to generate the compare bytes
17574 instruction implemented on the \s-1POWER6\s0 processor and other processors
17575 that support the PowerPC V2.05 architecture.
17576 The \fB\-mmfpgpr\fR option allows \s-1GCC\s0 to generate the \s-1FP\s0 move to/from
17577 general-purpose register instructions implemented on the \s-1POWER6X\s0
17578 processor and other processors that support the extended PowerPC V2.05
17579 architecture.
17580 The \fB\-mhard\-dfp\fR option allows \s-1GCC\s0 to generate the decimal
17581 floating-point instructions implemented on some \s-1POWER\s0 processors.
17582 .Sp
17583 The \fB\-mpowerpc64\fR option allows \s-1GCC\s0 to generate the additional
17584 64\-bit instructions that are found in the full PowerPC64 architecture
17585 and to treat GPRs as 64\-bit, doubleword quantities.  \s-1GCC\s0 defaults to
17586 \&\fB\-mno\-powerpc64\fR.
17587 .IP "\fB\-mcpu=\fR\fIcpu_type\fR" 4
17588 .IX Item "-mcpu=cpu_type"
17589 Set architecture type, register usage, and
17590 instruction scheduling parameters for machine type \fIcpu_type\fR.
17591 Supported values for \fIcpu_type\fR are \fB401\fR, \fB403\fR,
17592 \&\fB405\fR, \fB405fp\fR, \fB440\fR, \fB440fp\fR, \fB464\fR, \fB464fp\fR,
17593 \&\fB476\fR, \fB476fp\fR, \fB505\fR, \fB601\fR, \fB602\fR, \fB603\fR,
17594 \&\fB603e\fR, \fB604\fR, \fB604e\fR, \fB620\fR, \fB630\fR, \fB740\fR,
17595 \&\fB7400\fR, \fB7450\fR, \fB750\fR, \fB801\fR, \fB821\fR, \fB823\fR,
17596 \&\fB860\fR, \fB970\fR, \fB8540\fR, \fBa2\fR, \fBe300c2\fR,
17597 \&\fBe300c3\fR, \fBe500mc\fR, \fBe500mc64\fR, \fBe5500\fR,
17598 \&\fBe6500\fR, \fBec603e\fR, \fBG3\fR, \fBG4\fR, \fBG5\fR,
17599 \&\fBtitan\fR, \fBpower3\fR, \fBpower4\fR, \fBpower5\fR, \fBpower5+\fR,
17600 \&\fBpower6\fR, \fBpower6x\fR, \fBpower7\fR, \fBpower8\fR, \fBpowerpc\fR,
17601 \&\fBpowerpc64\fR, \fBpowerpc64le\fR, and \fBrs64\fR.
17602 .Sp
17603 \&\fB\-mcpu=powerpc\fR, \fB\-mcpu=powerpc64\fR, and
17604 \&\fB\-mcpu=powerpc64le\fR specify pure 32\-bit PowerPC (either
17605 endian), 64\-bit big endian PowerPC and 64\-bit little endian PowerPC
17606 architecture machine types, with an appropriate, generic processor
17607 model assumed for scheduling purposes.
17608 .Sp
17609 The other options specify a specific processor.  Code generated under
17610 those options runs best on that processor, and may not run at all on
17611 others.
17612 .Sp
17613 The \fB\-mcpu\fR options automatically enable or disable the
17614 following options:
17615 .Sp
17616 \&\fB\-maltivec  \-mfprnd  \-mhard\-float  \-mmfcrf  \-mmultiple 
17617 \&\-mpopcntb \-mpopcntd  \-mpowerpc64 
17618 \&\-mpowerpc\-gpopt  \-mpowerpc\-gfxopt  \-msingle\-float \-mdouble\-float 
17619 \&\-msimple\-fpu \-mstring  \-mmulhw  \-mdlmzb  \-mmfpgpr \-mvsx 
17620 \&\-mcrypto \-mdirect\-move \-mpower8\-fusion \-mpower8\-vector 
17621 \&\-mquad\-memory \-mquad\-memory\-atomic\fR
17622 .Sp
17623 The particular options set for any particular \s-1CPU\s0 varies between
17624 compiler versions, depending on what setting seems to produce optimal
17625 code for that \s-1CPU\s0; it doesn't necessarily reflect the actual hardware's
17626 capabilities.  If you wish to set an individual option to a particular
17627 value, you may specify it after the \fB\-mcpu\fR option, like
17628 \&\fB\-mcpu=970 \-mno\-altivec\fR.
17629 .Sp
17630 On \s-1AIX\s0, the \fB\-maltivec\fR and \fB\-mpowerpc64\fR options are
17631 not enabled or disabled by the \fB\-mcpu\fR option at present because
17632 \&\s-1AIX\s0 does not have full support for these options.  You may still
17633 enable or disable them individually if you're sure it'll work in your
17634 environment.
17635 .IP "\fB\-mtune=\fR\fIcpu_type\fR" 4
17636 .IX Item "-mtune=cpu_type"
17637 Set the instruction scheduling parameters for machine type
17638 \&\fIcpu_type\fR, but do not set the architecture type or register usage,
17639 as \fB\-mcpu=\fR\fIcpu_type\fR does.  The same
17640 values for \fIcpu_type\fR are used for \fB\-mtune\fR as for
17641 \&\fB\-mcpu\fR.  If both are specified, the code generated uses the
17642 architecture and registers set by \fB\-mcpu\fR, but the
17643 scheduling parameters set by \fB\-mtune\fR.
17644 .IP "\fB\-mcmodel=small\fR" 4
17645 .IX Item "-mcmodel=small"
17646 Generate PowerPC64 code for the small model: The \s-1TOC\s0 is limited to
17647 64k.
17648 .IP "\fB\-mcmodel=medium\fR" 4
17649 .IX Item "-mcmodel=medium"
17650 Generate PowerPC64 code for the medium model: The \s-1TOC\s0 and other static
17651 data may be up to a total of 4G in size.
17652 .IP "\fB\-mcmodel=large\fR" 4
17653 .IX Item "-mcmodel=large"
17654 Generate PowerPC64 code for the large model: The \s-1TOC\s0 may be up to 4G
17655 in size.  Other data and code is only limited by the 64\-bit address
17656 space.
17657 .IP "\fB\-maltivec\fR" 4
17658 .IX Item "-maltivec"
17659 .PD 0
17660 .IP "\fB\-mno\-altivec\fR" 4
17661 .IX Item "-mno-altivec"
17662 .PD
17663 Generate code that uses (does not use) AltiVec instructions, and also
17664 enable the use of built-in functions that allow more direct access to
17665 the AltiVec instruction set.  You may also need to set
17666 \&\fB\-mabi=altivec\fR to adjust the current \s-1ABI\s0 with AltiVec \s-1ABI\s0
17667 enhancements.
17668 .Sp
17669 When \fB\-maltivec\fR is used, rather than \fB\-maltivec=le\fR or
17670 \&\fB\-maltivec=be\fR, the element order for Altivec intrinsics such
17671 as \f(CW\*(C`vec_splat\*(C'\fR, \f(CW\*(C`vec_extract\*(C'\fR, and \f(CW\*(C`vec_insert\*(C'\fR 
17672 match array element order corresponding to the endianness of the
17673 target.  That is, element zero identifies the leftmost element in a
17674 vector register when targeting a big-endian platform, and identifies
17675 the rightmost element in a vector register when targeting a
17676 little-endian platform.
17677 .IP "\fB\-maltivec=be\fR" 4
17678 .IX Item "-maltivec=be"
17679 Generate Altivec instructions using big-endian element order,
17680 regardless of whether the target is big\- or little-endian.  This is
17681 the default when targeting a big-endian platform.
17682 .Sp
17683 The element order is used to interpret element numbers in Altivec
17684 intrinsics such as \f(CW\*(C`vec_splat\*(C'\fR, \f(CW\*(C`vec_extract\*(C'\fR, and
17685 \&\f(CW\*(C`vec_insert\*(C'\fR.  By default, these match array element order
17686 corresponding to the endianness for the target.
17687 .IP "\fB\-maltivec=le\fR" 4
17688 .IX Item "-maltivec=le"
17689 Generate Altivec instructions using little-endian element order,
17690 regardless of whether the target is big\- or little-endian.  This is
17691 the default when targeting a little-endian platform.  This option is
17692 currently ignored when targeting a big-endian platform.
17693 .Sp
17694 The element order is used to interpret element numbers in Altivec
17695 intrinsics such as \f(CW\*(C`vec_splat\*(C'\fR, \f(CW\*(C`vec_extract\*(C'\fR, and
17696 \&\f(CW\*(C`vec_insert\*(C'\fR.  By default, these match array element order
17697 corresponding to the endianness for the target.
17698 .IP "\fB\-mvrsave\fR" 4
17699 .IX Item "-mvrsave"
17700 .PD 0
17701 .IP "\fB\-mno\-vrsave\fR" 4
17702 .IX Item "-mno-vrsave"
17703 .PD
17704 Generate \s-1VRSAVE\s0 instructions when generating AltiVec code.
17705 .IP "\fB\-mgen\-cell\-microcode\fR" 4
17706 .IX Item "-mgen-cell-microcode"
17707 Generate Cell microcode instructions.
17708 .IP "\fB\-mwarn\-cell\-microcode\fR" 4
17709 .IX Item "-mwarn-cell-microcode"
17710 Warn when a Cell microcode instruction is emitted.  An example
17711 of a Cell microcode instruction is a variable shift.
17712 .IP "\fB\-msecure\-plt\fR" 4
17713 .IX Item "-msecure-plt"
17714 Generate code that allows \fBld\fR and \fBld.so\fR
17715 to build executables and shared
17716 libraries with non-executable \f(CW\*(C`.plt\*(C'\fR and \f(CW\*(C`.got\*(C'\fR sections.
17717 This is a PowerPC
17718 32\-bit \s-1SYSV\s0 \s-1ABI\s0 option.
17719 .IP "\fB\-mbss\-plt\fR" 4
17720 .IX Item "-mbss-plt"
17721 Generate code that uses a \s-1BSS\s0 \f(CW\*(C`.plt\*(C'\fR section that \fBld.so\fR
17722 fills in, and
17723 requires \f(CW\*(C`.plt\*(C'\fR and \f(CW\*(C`.got\*(C'\fR
17724 sections that are both writable and executable.
17725 This is a PowerPC 32\-bit \s-1SYSV\s0 \s-1ABI\s0 option.
17726 .IP "\fB\-misel\fR" 4
17727 .IX Item "-misel"
17728 .PD 0
17729 .IP "\fB\-mno\-isel\fR" 4
17730 .IX Item "-mno-isel"
17731 .PD
17732 This switch enables or disables the generation of \s-1ISEL\s0 instructions.
17733 .IP "\fB\-misel=\fR\fIyes/no\fR" 4
17734 .IX Item "-misel=yes/no"
17735 This switch has been deprecated.  Use \fB\-misel\fR and
17736 \&\fB\-mno\-isel\fR instead.
17737 .IP "\fB\-mspe\fR" 4
17738 .IX Item "-mspe"
17739 .PD 0
17740 .IP "\fB\-mno\-spe\fR" 4
17741 .IX Item "-mno-spe"
17742 .PD
17743 This switch enables or disables the generation of \s-1SPE\s0 simd
17744 instructions.
17745 .IP "\fB\-mpaired\fR" 4
17746 .IX Item "-mpaired"
17747 .PD 0
17748 .IP "\fB\-mno\-paired\fR" 4
17749 .IX Item "-mno-paired"
17750 .PD
17751 This switch enables or disables the generation of \s-1PAIRED\s0 simd
17752 instructions.
17753 .IP "\fB\-mspe=\fR\fIyes/no\fR" 4
17754 .IX Item "-mspe=yes/no"
17755 This option has been deprecated.  Use \fB\-mspe\fR and
17756 \&\fB\-mno\-spe\fR instead.
17757 .IP "\fB\-mvsx\fR" 4
17758 .IX Item "-mvsx"
17759 .PD 0
17760 .IP "\fB\-mno\-vsx\fR" 4
17761 .IX Item "-mno-vsx"
17762 .PD
17763 Generate code that uses (does not use) vector/scalar (\s-1VSX\s0)
17764 instructions, and also enable the use of built-in functions that allow
17765 more direct access to the \s-1VSX\s0 instruction set.
17766 .IP "\fB\-mcrypto\fR" 4
17767 .IX Item "-mcrypto"
17768 .PD 0
17769 .IP "\fB\-mno\-crypto\fR" 4
17770 .IX Item "-mno-crypto"
17771 .PD
17772 Enable the use (disable) of the built-in functions that allow direct
17773 access to the cryptographic instructions that were added in version
17774 2.07 of the PowerPC \s-1ISA\s0.
17775 .IP "\fB\-mdirect\-move\fR" 4
17776 .IX Item "-mdirect-move"
17777 .PD 0
17778 .IP "\fB\-mno\-direct\-move\fR" 4
17779 .IX Item "-mno-direct-move"
17780 .PD
17781 Generate code that uses (does not use) the instructions to move data
17782 between the general purpose registers and the vector/scalar (\s-1VSX\s0)
17783 registers that were added in version 2.07 of the PowerPC \s-1ISA\s0.
17784 .IP "\fB\-mpower8\-fusion\fR" 4
17785 .IX Item "-mpower8-fusion"
17786 .PD 0
17787 .IP "\fB\-mno\-power8\-fusion\fR" 4
17788 .IX Item "-mno-power8-fusion"
17789 .PD
17790 Generate code that keeps (does not keeps) some integer operations
17791 adjacent so that the instructions can be fused together on power8 and
17792 later processors.
17793 .IP "\fB\-mpower8\-vector\fR" 4
17794 .IX Item "-mpower8-vector"
17795 .PD 0
17796 .IP "\fB\-mno\-power8\-vector\fR" 4
17797 .IX Item "-mno-power8-vector"
17798 .PD
17799 Generate code that uses (does not use) the vector and scalar
17800 instructions that were added in version 2.07 of the PowerPC \s-1ISA\s0.  Also
17801 enable the use of built-in functions that allow more direct access to
17802 the vector instructions.
17803 .IP "\fB\-mquad\-memory\fR" 4
17804 .IX Item "-mquad-memory"
17805 .PD 0
17806 .IP "\fB\-mno\-quad\-memory\fR" 4
17807 .IX Item "-mno-quad-memory"
17808 .PD
17809 Generate code that uses (does not use) the non-atomic quad word memory
17810 instructions.  The \fB\-mquad\-memory\fR option requires use of
17811 64\-bit mode.
17812 .IP "\fB\-mquad\-memory\-atomic\fR" 4
17813 .IX Item "-mquad-memory-atomic"
17814 .PD 0
17815 .IP "\fB\-mno\-quad\-memory\-atomic\fR" 4
17816 .IX Item "-mno-quad-memory-atomic"
17817 .PD
17818 Generate code that uses (does not use) the atomic quad word memory
17819 instructions.  The \fB\-mquad\-memory\-atomic\fR option requires use of
17820 64\-bit mode.
17821 .IP "\fB\-mupper\-regs\-df\fR" 4
17822 .IX Item "-mupper-regs-df"
17823 .PD 0
17824 .IP "\fB\-mno\-upper\-regs\-df\fR" 4
17825 .IX Item "-mno-upper-regs-df"
17826 .PD
17827 Generate code that uses (does not use) the scalar double precision
17828 instructions that target all 64 registers in the vector/scalar
17829 floating point register set that were added in version 2.06 of the
17830 PowerPC \s-1ISA\s0.  \fB\-mupper\-regs\-df\fR is turned on by default if you
17831 use any of the \fB\-mcpu=power7\fR, \fB\-mcpu=power8\fR, or
17832 \&\fB\-mvsx\fR options.
17833 .IP "\fB\-mupper\-regs\-sf\fR" 4
17834 .IX Item "-mupper-regs-sf"
17835 .PD 0
17836 .IP "\fB\-mno\-upper\-regs\-sf\fR" 4
17837 .IX Item "-mno-upper-regs-sf"
17838 .PD
17839 Generate code that uses (does not use) the scalar single precision
17840 instructions that target all 64 registers in the vector/scalar
17841 floating point register set that were added in version 2.07 of the
17842 PowerPC \s-1ISA\s0.  \fB\-mupper\-regs\-sf\fR is turned on by default if you
17843 use either of the \fB\-mcpu=power8\fR or \fB\-mpower8\-vector\fR
17844 options.
17845 .IP "\fB\-mupper\-regs\fR" 4
17846 .IX Item "-mupper-regs"
17847 .PD 0
17848 .IP "\fB\-mno\-upper\-regs\fR" 4
17849 .IX Item "-mno-upper-regs"
17850 .PD
17851 Generate code that uses (does not use) the scalar
17852 instructions that target all 64 registers in the vector/scalar
17853 floating point register set, depending on the model of the machine.
17854 .Sp
17855 If the \fB\-mno\-upper\-regs\fR option is used, it turns off both
17856 \&\fB\-mupper\-regs\-sf\fR and \fB\-mupper\-regs\-df\fR options.
17857 .IP "\fB\-mfloat\-gprs=\fR\fIyes/single/double/no\fR" 4
17858 .IX Item "-mfloat-gprs=yes/single/double/no"
17859 .PD 0
17860 .IP "\fB\-mfloat\-gprs\fR" 4
17861 .IX Item "-mfloat-gprs"
17862 .PD
17863 This switch enables or disables the generation of floating-point
17864 operations on the general-purpose registers for architectures that
17865 support it.
17866 .Sp
17867 The argument \fByes\fR or \fBsingle\fR enables the use of
17868 single-precision floating-point operations.
17869 .Sp
17870 The argument \fBdouble\fR enables the use of single and
17871 double-precision floating-point operations.
17872 .Sp
17873 The argument \fBno\fR disables floating-point operations on the
17874 general-purpose registers.
17875 .Sp
17876 This option is currently only available on the MPC854x.
17877 .IP "\fB\-m32\fR" 4
17878 .IX Item "-m32"
17879 .PD 0
17880 .IP "\fB\-m64\fR" 4
17881 .IX Item "-m64"
17882 .PD
17883 Generate code for 32\-bit or 64\-bit environments of Darwin and \s-1SVR4\s0
17884 targets (including GNU/Linux).  The 32\-bit environment sets int, long
17885 and pointer to 32 bits and generates code that runs on any PowerPC
17886 variant.  The 64\-bit environment sets int to 32 bits and long and
17887 pointer to 64 bits, and generates code for PowerPC64, as for
17888 \&\fB\-mpowerpc64\fR.
17889 .IP "\fB\-mfull\-toc\fR" 4
17890 .IX Item "-mfull-toc"
17891 .PD 0
17892 .IP "\fB\-mno\-fp\-in\-toc\fR" 4
17893 .IX Item "-mno-fp-in-toc"
17894 .IP "\fB\-mno\-sum\-in\-toc\fR" 4
17895 .IX Item "-mno-sum-in-toc"
17896 .IP "\fB\-mminimal\-toc\fR" 4
17897 .IX Item "-mminimal-toc"
17898 .PD
17899 Modify generation of the \s-1TOC\s0 (Table Of Contents), which is created for
17900 every executable file.  The \fB\-mfull\-toc\fR option is selected by
17901 default.  In that case, \s-1GCC\s0 allocates at least one \s-1TOC\s0 entry for
17902 each unique non-automatic variable reference in your program.  \s-1GCC\s0
17903 also places floating-point constants in the \s-1TOC\s0.  However, only
17904 16,384 entries are available in the \s-1TOC\s0.
17905 .Sp
17906 If you receive a linker error message that saying you have overflowed
17907 the available \s-1TOC\s0 space, you can reduce the amount of \s-1TOC\s0 space used
17908 with the \fB\-mno\-fp\-in\-toc\fR and \fB\-mno\-sum\-in\-toc\fR options.
17909 \&\fB\-mno\-fp\-in\-toc\fR prevents \s-1GCC\s0 from putting floating-point
17910 constants in the \s-1TOC\s0 and \fB\-mno\-sum\-in\-toc\fR forces \s-1GCC\s0 to
17911 generate code to calculate the sum of an address and a constant at
17912 run time instead of putting that sum into the \s-1TOC\s0.  You may specify one
17913 or both of these options.  Each causes \s-1GCC\s0 to produce very slightly
17914 slower and larger code at the expense of conserving \s-1TOC\s0 space.
17915 .Sp
17916 If you still run out of space in the \s-1TOC\s0 even when you specify both of
17917 these options, specify \fB\-mminimal\-toc\fR instead.  This option causes
17918 \&\s-1GCC\s0 to make only one \s-1TOC\s0 entry for every file.  When you specify this
17919 option, \s-1GCC\s0 produces code that is slower and larger but which
17920 uses extremely little \s-1TOC\s0 space.  You may wish to use this option
17921 only on files that contain less frequently-executed code.
17922 .IP "\fB\-maix64\fR" 4
17923 .IX Item "-maix64"
17924 .PD 0
17925 .IP "\fB\-maix32\fR" 4
17926 .IX Item "-maix32"
17927 .PD
17928 Enable 64\-bit \s-1AIX\s0 \s-1ABI\s0 and calling convention: 64\-bit pointers, 64\-bit
17929 \&\f(CW\*(C`long\*(C'\fR type, and the infrastructure needed to support them.
17930 Specifying \fB\-maix64\fR implies \fB\-mpowerpc64\fR,
17931 while \fB\-maix32\fR disables the 64\-bit \s-1ABI\s0 and
17932 implies \fB\-mno\-powerpc64\fR.  \s-1GCC\s0 defaults to \fB\-maix32\fR.
17933 .IP "\fB\-mxl\-compat\fR" 4
17934 .IX Item "-mxl-compat"
17935 .PD 0
17936 .IP "\fB\-mno\-xl\-compat\fR" 4
17937 .IX Item "-mno-xl-compat"
17938 .PD
17939 Produce code that conforms more closely to \s-1IBM\s0 \s-1XL\s0 compiler semantics
17940 when using AIX-compatible \s-1ABI\s0.  Pass floating-point arguments to
17941 prototyped functions beyond the register save area (\s-1RSA\s0) on the stack
17942 in addition to argument FPRs.  Do not assume that most significant
17943 double in 128\-bit long double value is properly rounded when comparing
17944 values and converting to double.  Use \s-1XL\s0 symbol names for long double
17945 support routines.
17946 .Sp
17947 The \s-1AIX\s0 calling convention was extended but not initially documented to
17948 handle an obscure K&R C case of calling a function that takes the
17949 address of its arguments with fewer arguments than declared.  \s-1IBM\s0 \s-1XL\s0
17950 compilers access floating-point arguments that do not fit in the
17951 \&\s-1RSA\s0 from the stack when a subroutine is compiled without
17952 optimization.  Because always storing floating-point arguments on the
17953 stack is inefficient and rarely needed, this option is not enabled by
17954 default and only is necessary when calling subroutines compiled by \s-1IBM\s0
17955 \&\s-1XL\s0 compilers without optimization.
17956 .IP "\fB\-mpe\fR" 4
17957 .IX Item "-mpe"
17958 Support \fI\s-1IBM\s0 \s-1RS/6000\s0 \s-1SP\s0\fR \fIParallel Environment\fR (\s-1PE\s0).  Link an
17959 application written to use message passing with special startup code to
17960 enable the application to run.  The system must have \s-1PE\s0 installed in the
17961 standard location (\fI/usr/lpp/ppe.poe/\fR), or the \fIspecs\fR file
17962 must be overridden with the \fB\-specs=\fR option to specify the
17963 appropriate directory location.  The Parallel Environment does not
17964 support threads, so the \fB\-mpe\fR option and the \fB\-pthread\fR
17965 option are incompatible.
17966 .IP "\fB\-malign\-natural\fR" 4
17967 .IX Item "-malign-natural"
17968 .PD 0
17969 .IP "\fB\-malign\-power\fR" 4
17970 .IX Item "-malign-power"
17971 .PD
17972 On \s-1AIX\s0, 32\-bit Darwin, and 64\-bit PowerPC GNU/Linux, the option
17973 \&\fB\-malign\-natural\fR overrides the ABI-defined alignment of larger
17974 types, such as floating-point doubles, on their natural size-based boundary.
17975 The option \fB\-malign\-power\fR instructs \s-1GCC\s0 to follow the ABI-specified
17976 alignment rules.  \s-1GCC\s0 defaults to the standard alignment defined in the \s-1ABI\s0.
17977 .Sp
17978 On 64\-bit Darwin, natural alignment is the default, and \fB\-malign\-power\fR
17979 is not supported.
17980 .IP "\fB\-msoft\-float\fR" 4
17981 .IX Item "-msoft-float"
17982 .PD 0
17983 .IP "\fB\-mhard\-float\fR" 4
17984 .IX Item "-mhard-float"
17985 .PD
17986 Generate code that does not use (uses) the floating-point register set.
17987 Software floating-point emulation is provided if you use the
17988 \&\fB\-msoft\-float\fR option, and pass the option to \s-1GCC\s0 when linking.
17989 .IP "\fB\-msingle\-float\fR" 4
17990 .IX Item "-msingle-float"
17991 .PD 0
17992 .IP "\fB\-mdouble\-float\fR" 4
17993 .IX Item "-mdouble-float"
17994 .PD
17995 Generate code for single\- or double-precision floating-point operations.
17996 \&\fB\-mdouble\-float\fR implies \fB\-msingle\-float\fR.
17997 .IP "\fB\-msimple\-fpu\fR" 4
17998 .IX Item "-msimple-fpu"
17999 Do not generate \f(CW\*(C`sqrt\*(C'\fR and \f(CW\*(C`div\*(C'\fR instructions for hardware
18000 floating-point unit.
18001 .IP "\fB\-mfpu=\fR\fIname\fR" 4
18002 .IX Item "-mfpu=name"
18003 Specify type of floating-point unit.  Valid values for \fIname\fR are
18004 \&\fBsp_lite\fR (equivalent to \fB\-msingle\-float \-msimple\-fpu\fR),
18005 \&\fBdp_lite\fR (equivalent to \fB\-mdouble\-float \-msimple\-fpu\fR),
18006 \&\fBsp_full\fR (equivalent to \fB\-msingle\-float\fR),
18007 and \fBdp_full\fR (equivalent to \fB\-mdouble\-float\fR).
18008 .IP "\fB\-mxilinx\-fpu\fR" 4
18009 .IX Item "-mxilinx-fpu"
18010 Perform optimizations for the floating-point unit on Xilinx \s-1PPC\s0 405/440.
18011 .IP "\fB\-mmultiple\fR" 4
18012 .IX Item "-mmultiple"
18013 .PD 0
18014 .IP "\fB\-mno\-multiple\fR" 4
18015 .IX Item "-mno-multiple"
18016 .PD
18017 Generate code that uses (does not use) the load multiple word
18018 instructions and the store multiple word instructions.  These
18019 instructions are generated by default on \s-1POWER\s0 systems, and not
18020 generated on PowerPC systems.  Do not use \fB\-mmultiple\fR on little-endian
18021 PowerPC systems, since those instructions do not work when the
18022 processor is in little-endian mode.  The exceptions are \s-1PPC740\s0 and
18023 \&\s-1PPC750\s0 which permit these instructions in little-endian mode.
18024 .IP "\fB\-mstring\fR" 4
18025 .IX Item "-mstring"
18026 .PD 0
18027 .IP "\fB\-mno\-string\fR" 4
18028 .IX Item "-mno-string"
18029 .PD
18030 Generate code that uses (does not use) the load string instructions
18031 and the store string word instructions to save multiple registers and
18032 do small block moves.  These instructions are generated by default on
18033 \&\s-1POWER\s0 systems, and not generated on PowerPC systems.  Do not use
18034 \&\fB\-mstring\fR on little-endian PowerPC systems, since those
18035 instructions do not work when the processor is in little-endian mode.
18036 The exceptions are \s-1PPC740\s0 and \s-1PPC750\s0 which permit these instructions
18037 in little-endian mode.
18038 .IP "\fB\-mupdate\fR" 4
18039 .IX Item "-mupdate"
18040 .PD 0
18041 .IP "\fB\-mno\-update\fR" 4
18042 .IX Item "-mno-update"
18043 .PD
18044 Generate code that uses (does not use) the load or store instructions
18045 that update the base register to the address of the calculated memory
18046 location.  These instructions are generated by default.  If you use
18047 \&\fB\-mno\-update\fR, there is a small window between the time that the
18048 stack pointer is updated and the address of the previous frame is
18049 stored, which means code that walks the stack frame across interrupts or
18050 signals may get corrupted data.
18051 .IP "\fB\-mavoid\-indexed\-addresses\fR" 4
18052 .IX Item "-mavoid-indexed-addresses"
18053 .PD 0
18054 .IP "\fB\-mno\-avoid\-indexed\-addresses\fR" 4
18055 .IX Item "-mno-avoid-indexed-addresses"
18056 .PD
18057 Generate code that tries to avoid (not avoid) the use of indexed load
18058 or store instructions. These instructions can incur a performance
18059 penalty on Power6 processors in certain situations, such as when
18060 stepping through large arrays that cross a 16M boundary.  This option
18061 is enabled by default when targeting Power6 and disabled otherwise.
18062 .IP "\fB\-mfused\-madd\fR" 4
18063 .IX Item "-mfused-madd"
18064 .PD 0
18065 .IP "\fB\-mno\-fused\-madd\fR" 4
18066 .IX Item "-mno-fused-madd"
18067 .PD
18068 Generate code that uses (does not use) the floating-point multiply and
18069 accumulate instructions.  These instructions are generated by default
18070 if hardware floating point is used.  The machine-dependent
18071 \&\fB\-mfused\-madd\fR option is now mapped to the machine-independent
18072 \&\fB\-ffp\-contract=fast\fR option, and \fB\-mno\-fused\-madd\fR is
18073 mapped to \fB\-ffp\-contract=off\fR.
18074 .IP "\fB\-mmulhw\fR" 4
18075 .IX Item "-mmulhw"
18076 .PD 0
18077 .IP "\fB\-mno\-mulhw\fR" 4
18078 .IX Item "-mno-mulhw"
18079 .PD
18080 Generate code that uses (does not use) the half-word multiply and
18081 multiply-accumulate instructions on the \s-1IBM\s0 405, 440, 464 and 476 processors.
18082 These instructions are generated by default when targeting those
18083 processors.
18084 .IP "\fB\-mdlmzb\fR" 4
18085 .IX Item "-mdlmzb"
18086 .PD 0
18087 .IP "\fB\-mno\-dlmzb\fR" 4
18088 .IX Item "-mno-dlmzb"
18089 .PD
18090 Generate code that uses (does not use) the string-search \fBdlmzb\fR
18091 instruction on the \s-1IBM\s0 405, 440, 464 and 476 processors.  This instruction is
18092 generated by default when targeting those processors.
18093 .IP "\fB\-mno\-bit\-align\fR" 4
18094 .IX Item "-mno-bit-align"
18095 .PD 0
18096 .IP "\fB\-mbit\-align\fR" 4
18097 .IX Item "-mbit-align"
18098 .PD
18099 On System V.4 and embedded PowerPC systems do not (do) force structures
18100 and unions that contain bit-fields to be aligned to the base type of the
18101 bit-field.
18102 .Sp
18103 For example, by default a structure containing nothing but 8
18104 \&\f(CW\*(C`unsigned\*(C'\fR bit-fields of length 1 is aligned to a 4\-byte
18105 boundary and has a size of 4 bytes.  By using \fB\-mno\-bit\-align\fR,
18106 the structure is aligned to a 1\-byte boundary and is 1 byte in
18107 size.
18108 .IP "\fB\-mno\-strict\-align\fR" 4
18109 .IX Item "-mno-strict-align"
18110 .PD 0
18111 .IP "\fB\-mstrict\-align\fR" 4
18112 .IX Item "-mstrict-align"
18113 .PD
18114 On System V.4 and embedded PowerPC systems do not (do) assume that
18115 unaligned memory references are handled by the system.
18116 .IP "\fB\-mrelocatable\fR" 4
18117 .IX Item "-mrelocatable"
18118 .PD 0
18119 .IP "\fB\-mno\-relocatable\fR" 4
18120 .IX Item "-mno-relocatable"
18121 .PD
18122 Generate code that allows (does not allow) a static executable to be
18123 relocated to a different address at run time.  A simple embedded
18124 PowerPC system loader should relocate the entire contents of
18125 \&\f(CW\*(C`.got2\*(C'\fR and 4\-byte locations listed in the \f(CW\*(C`.fixup\*(C'\fR section,
18126 a table of 32\-bit addresses generated by this option.  For this to
18127 work, all objects linked together must be compiled with
18128 \&\fB\-mrelocatable\fR or \fB\-mrelocatable\-lib\fR.
18129 \&\fB\-mrelocatable\fR code aligns the stack to an 8\-byte boundary.
18130 .IP "\fB\-mrelocatable\-lib\fR" 4
18131 .IX Item "-mrelocatable-lib"
18132 .PD 0
18133 .IP "\fB\-mno\-relocatable\-lib\fR" 4
18134 .IX Item "-mno-relocatable-lib"
18135 .PD
18136 Like \fB\-mrelocatable\fR, \fB\-mrelocatable\-lib\fR generates a
18137 \&\f(CW\*(C`.fixup\*(C'\fR section to allow static executables to be relocated at
18138 run time, but \fB\-mrelocatable\-lib\fR does not use the smaller stack
18139 alignment of \fB\-mrelocatable\fR.  Objects compiled with
18140 \&\fB\-mrelocatable\-lib\fR may be linked with objects compiled with
18141 any combination of the \fB\-mrelocatable\fR options.
18142 .IP "\fB\-mno\-toc\fR" 4
18143 .IX Item "-mno-toc"
18144 .PD 0
18145 .IP "\fB\-mtoc\fR" 4
18146 .IX Item "-mtoc"
18147 .PD
18148 On System V.4 and embedded PowerPC systems do not (do) assume that
18149 register 2 contains a pointer to a global area pointing to the addresses
18150 used in the program.
18151 .IP "\fB\-mlittle\fR" 4
18152 .IX Item "-mlittle"
18153 .PD 0
18154 .IP "\fB\-mlittle\-endian\fR" 4
18155 .IX Item "-mlittle-endian"
18156 .PD
18157 On System V.4 and embedded PowerPC systems compile code for the
18158 processor in little-endian mode.  The \fB\-mlittle\-endian\fR option is
18159 the same as \fB\-mlittle\fR.
18160 .IP "\fB\-mbig\fR" 4
18161 .IX Item "-mbig"
18162 .PD 0
18163 .IP "\fB\-mbig\-endian\fR" 4
18164 .IX Item "-mbig-endian"
18165 .PD
18166 On System V.4 and embedded PowerPC systems compile code for the
18167 processor in big-endian mode.  The \fB\-mbig\-endian\fR option is
18168 the same as \fB\-mbig\fR.
18169 .IP "\fB\-mdynamic\-no\-pic\fR" 4
18170 .IX Item "-mdynamic-no-pic"
18171 On Darwin and Mac \s-1OS\s0 X systems, compile code so that it is not
18172 relocatable, but that its external references are relocatable.  The
18173 resulting code is suitable for applications, but not shared
18174 libraries.
18175 .IP "\fB\-msingle\-pic\-base\fR" 4
18176 .IX Item "-msingle-pic-base"
18177 Treat the register used for \s-1PIC\s0 addressing as read-only, rather than
18178 loading it in the prologue for each function.  The runtime system is
18179 responsible for initializing this register with an appropriate value
18180 before execution begins.
18181 .IP "\fB\-mprioritize\-restricted\-insns=\fR\fIpriority\fR" 4
18182 .IX Item "-mprioritize-restricted-insns=priority"
18183 This option controls the priority that is assigned to
18184 dispatch-slot restricted instructions during the second scheduling
18185 pass.  The argument \fIpriority\fR takes the value \fB0\fR, \fB1\fR,
18186 or \fB2\fR to assign no, highest, or second-highest (respectively) 
18187 priority to dispatch-slot restricted
18188 instructions.
18189 .IP "\fB\-msched\-costly\-dep=\fR\fIdependence_type\fR" 4
18190 .IX Item "-msched-costly-dep=dependence_type"
18191 This option controls which dependences are considered costly
18192 by the target during instruction scheduling.  The argument
18193 \&\fIdependence_type\fR takes one of the following values:
18194 .RS 4
18195 .IP "\fBno\fR" 4
18196 .IX Item "no"
18197 No dependence is costly.
18198 .IP "\fBall\fR" 4
18199 .IX Item "all"
18200 All dependences are costly.
18201 .IP "\fBtrue_store_to_load\fR" 4
18202 .IX Item "true_store_to_load"
18203 A true dependence from store to load is costly.
18204 .IP "\fBstore_to_load\fR" 4
18205 .IX Item "store_to_load"
18206 Any dependence from store to load is costly.
18207 .IP "\fInumber\fR" 4
18208 .IX Item "number"
18209 Any dependence for which the latency is greater than or equal to 
18210 \&\fInumber\fR is costly.
18211 .RE
18212 .RS 4
18213 .RE
18214 .IP "\fB\-minsert\-sched\-nops=\fR\fIscheme\fR" 4
18215 .IX Item "-minsert-sched-nops=scheme"
18216 This option controls which \s-1NOP\s0 insertion scheme is used during
18217 the second scheduling pass.  The argument \fIscheme\fR takes one of the
18218 following values:
18219 .RS 4
18220 .IP "\fBno\fR" 4
18221 .IX Item "no"
18222 Don't insert NOPs.
18223 .IP "\fBpad\fR" 4
18224 .IX Item "pad"
18225 Pad with NOPs any dispatch group that has vacant issue slots,
18226 according to the scheduler's grouping.
18227 .IP "\fBregroup_exact\fR" 4
18228 .IX Item "regroup_exact"
18229 Insert NOPs to force costly dependent insns into
18230 separate groups.  Insert exactly as many NOPs as needed to force an insn
18231 to a new group, according to the estimated processor grouping.
18232 .IP "\fInumber\fR" 4
18233 .IX Item "number"
18234 Insert NOPs to force costly dependent insns into
18235 separate groups.  Insert \fInumber\fR NOPs to force an insn to a new group.
18236 .RE
18237 .RS 4
18238 .RE
18239 .IP "\fB\-mcall\-sysv\fR" 4
18240 .IX Item "-mcall-sysv"
18241 On System V.4 and embedded PowerPC systems compile code using calling
18242 conventions that adhere to the March 1995 draft of the System V
18243 Application Binary Interface, PowerPC processor supplement.  This is the
18244 default unless you configured \s-1GCC\s0 using \fBpowerpc\-*\-eabiaix\fR.
18245 .IP "\fB\-mcall\-sysv\-eabi\fR" 4
18246 .IX Item "-mcall-sysv-eabi"
18247 .PD 0
18248 .IP "\fB\-mcall\-eabi\fR" 4
18249 .IX Item "-mcall-eabi"
18250 .PD
18251 Specify both \fB\-mcall\-sysv\fR and \fB\-meabi\fR options.
18252 .IP "\fB\-mcall\-sysv\-noeabi\fR" 4
18253 .IX Item "-mcall-sysv-noeabi"
18254 Specify both \fB\-mcall\-sysv\fR and \fB\-mno\-eabi\fR options.
18255 .IP "\fB\-mcall\-aixdesc\fR" 4
18256 .IX Item "-mcall-aixdesc"
18257 On System V.4 and embedded PowerPC systems compile code for the \s-1AIX\s0
18258 operating system.
18259 .IP "\fB\-mcall\-linux\fR" 4
18260 .IX Item "-mcall-linux"
18261 On System V.4 and embedded PowerPC systems compile code for the
18262 Linux-based \s-1GNU\s0 system.
18263 .IP "\fB\-mcall\-freebsd\fR" 4
18264 .IX Item "-mcall-freebsd"
18265 On System V.4 and embedded PowerPC systems compile code for the
18266 FreeBSD operating system.
18267 .IP "\fB\-mcall\-netbsd\fR" 4
18268 .IX Item "-mcall-netbsd"
18269 On System V.4 and embedded PowerPC systems compile code for the
18270 NetBSD operating system.
18271 .IP "\fB\-mcall\-openbsd\fR" 4
18272 .IX Item "-mcall-openbsd"
18273 On System V.4 and embedded PowerPC systems compile code for the
18274 OpenBSD operating system.
18275 .IP "\fB\-maix\-struct\-return\fR" 4
18276 .IX Item "-maix-struct-return"
18277 Return all structures in memory (as specified by the \s-1AIX\s0 \s-1ABI\s0).
18278 .IP "\fB\-msvr4\-struct\-return\fR" 4
18279 .IX Item "-msvr4-struct-return"
18280 Return structures smaller than 8 bytes in registers (as specified by the
18281 \&\s-1SVR4\s0 \s-1ABI\s0).
18282 .IP "\fB\-mabi=\fR\fIabi-type\fR" 4
18283 .IX Item "-mabi=abi-type"
18284 Extend the current \s-1ABI\s0 with a particular extension, or remove such extension.
18285 Valid values are \fBaltivec\fR, \fBno-altivec\fR, \fBspe\fR,
18286 \&\fBno-spe\fR, \fBibmlongdouble\fR, \fBieeelongdouble\fR,
18287 \&\fBelfv1\fR, \fBelfv2\fR.
18288 .IP "\fB\-mabi=spe\fR" 4
18289 .IX Item "-mabi=spe"
18290 Extend the current \s-1ABI\s0 with \s-1SPE\s0 \s-1ABI\s0 extensions.  This does not change
18291 the default \s-1ABI\s0, instead it adds the \s-1SPE\s0 \s-1ABI\s0 extensions to the current
18292 \&\s-1ABI\s0.
18293 .IP "\fB\-mabi=no\-spe\fR" 4
18294 .IX Item "-mabi=no-spe"
18295 Disable Book-E \s-1SPE\s0 \s-1ABI\s0 extensions for the current \s-1ABI\s0.
18296 .IP "\fB\-mabi=ibmlongdouble\fR" 4
18297 .IX Item "-mabi=ibmlongdouble"
18298 Change the current \s-1ABI\s0 to use \s-1IBM\s0 extended-precision long double.
18299 This is a PowerPC 32\-bit \s-1SYSV\s0 \s-1ABI\s0 option.
18300 .IP "\fB\-mabi=ieeelongdouble\fR" 4
18301 .IX Item "-mabi=ieeelongdouble"
18302 Change the current \s-1ABI\s0 to use \s-1IEEE\s0 extended-precision long double.
18303 This is a PowerPC 32\-bit Linux \s-1ABI\s0 option.
18304 .IP "\fB\-mabi=elfv1\fR" 4
18305 .IX Item "-mabi=elfv1"
18306 Change the current \s-1ABI\s0 to use the ELFv1 \s-1ABI\s0.
18307 This is the default \s-1ABI\s0 for big-endian PowerPC 64\-bit Linux.
18308 Overriding the default \s-1ABI\s0 requires special system support and is
18309 likely to fail in spectacular ways.
18310 .IP "\fB\-mabi=elfv2\fR" 4
18311 .IX Item "-mabi=elfv2"
18312 Change the current \s-1ABI\s0 to use the ELFv2 \s-1ABI\s0.
18313 This is the default \s-1ABI\s0 for little-endian PowerPC 64\-bit Linux.
18314 Overriding the default \s-1ABI\s0 requires special system support and is
18315 likely to fail in spectacular ways.
18316 .IP "\fB\-mprototype\fR" 4
18317 .IX Item "-mprototype"
18318 .PD 0
18319 .IP "\fB\-mno\-prototype\fR" 4
18320 .IX Item "-mno-prototype"
18321 .PD
18322 On System V.4 and embedded PowerPC systems assume that all calls to
18323 variable argument functions are properly prototyped.  Otherwise, the
18324 compiler must insert an instruction before every non-prototyped call to
18325 set or clear bit 6 of the condition code register (\f(CW\*(C`CR\*(C'\fR) to
18326 indicate whether floating-point values are passed in the floating-point
18327 registers in case the function takes variable arguments.  With
18328 \&\fB\-mprototype\fR, only calls to prototyped variable argument functions
18329 set or clear the bit.
18330 .IP "\fB\-msim\fR" 4
18331 .IX Item "-msim"
18332 On embedded PowerPC systems, assume that the startup module is called
18333 \&\fIsim\-crt0.o\fR and that the standard C libraries are \fIlibsim.a\fR and
18334 \&\fIlibc.a\fR.  This is the default for \fBpowerpc\-*\-eabisim\fR
18335 configurations.
18336 .IP "\fB\-mmvme\fR" 4
18337 .IX Item "-mmvme"
18338 On embedded PowerPC systems, assume that the startup module is called
18339 \&\fIcrt0.o\fR and the standard C libraries are \fIlibmvme.a\fR and
18340 \&\fIlibc.a\fR.
18341 .IP "\fB\-mads\fR" 4
18342 .IX Item "-mads"
18343 On embedded PowerPC systems, assume that the startup module is called
18344 \&\fIcrt0.o\fR and the standard C libraries are \fIlibads.a\fR and
18345 \&\fIlibc.a\fR.
18346 .IP "\fB\-myellowknife\fR" 4
18347 .IX Item "-myellowknife"
18348 On embedded PowerPC systems, assume that the startup module is called
18349 \&\fIcrt0.o\fR and the standard C libraries are \fIlibyk.a\fR and
18350 \&\fIlibc.a\fR.
18351 .IP "\fB\-mvxworks\fR" 4
18352 .IX Item "-mvxworks"
18353 On System V.4 and embedded PowerPC systems, specify that you are
18354 compiling for a VxWorks system.
18355 .IP "\fB\-memb\fR" 4
18356 .IX Item "-memb"
18357 On embedded PowerPC systems, set the \f(CW\*(C`PPC_EMB\*(C'\fR bit in the \s-1ELF\s0 flags
18358 header to indicate that \fBeabi\fR extended relocations are used.
18359 .IP "\fB\-meabi\fR" 4
18360 .IX Item "-meabi"
18361 .PD 0
18362 .IP "\fB\-mno\-eabi\fR" 4
18363 .IX Item "-mno-eabi"
18364 .PD
18365 On System V.4 and embedded PowerPC systems do (do not) adhere to the
18366 Embedded Applications Binary Interface (\s-1EABI\s0), which is a set of
18367 modifications to the System V.4 specifications.  Selecting \fB\-meabi\fR
18368 means that the stack is aligned to an 8\-byte boundary, a function
18369 \&\f(CW\*(C`_\|_eabi\*(C'\fR is called from \f(CW\*(C`main\*(C'\fR to set up the \s-1EABI\s0
18370 environment, and the \fB\-msdata\fR option can use both \f(CW\*(C`r2\*(C'\fR and
18371 \&\f(CW\*(C`r13\*(C'\fR to point to two separate small data areas.  Selecting
18372 \&\fB\-mno\-eabi\fR means that the stack is aligned to a 16\-byte boundary,
18373 no \s-1EABI\s0 initialization function is called from \f(CW\*(C`main\*(C'\fR, and the
18374 \&\fB\-msdata\fR option only uses \f(CW\*(C`r13\*(C'\fR to point to a single
18375 small data area.  The \fB\-meabi\fR option is on by default if you
18376 configured \s-1GCC\s0 using one of the \fBpowerpc*\-*\-eabi*\fR options.
18377 .IP "\fB\-msdata=eabi\fR" 4
18378 .IX Item "-msdata=eabi"
18379 On System V.4 and embedded PowerPC systems, put small initialized
18380 \&\f(CW\*(C`const\*(C'\fR global and static data in the \f(CW\*(C`.sdata2\*(C'\fR section, which
18381 is pointed to by register \f(CW\*(C`r2\*(C'\fR.  Put small initialized
18382 non\-\f(CW\*(C`const\*(C'\fR global and static data in the \f(CW\*(C`.sdata\*(C'\fR section,
18383 which is pointed to by register \f(CW\*(C`r13\*(C'\fR.  Put small uninitialized
18384 global and static data in the \f(CW\*(C`.sbss\*(C'\fR section, which is adjacent to
18385 the \f(CW\*(C`.sdata\*(C'\fR section.  The \fB\-msdata=eabi\fR option is
18386 incompatible with the \fB\-mrelocatable\fR option.  The
18387 \&\fB\-msdata=eabi\fR option also sets the \fB\-memb\fR option.
18388 .IP "\fB\-msdata=sysv\fR" 4
18389 .IX Item "-msdata=sysv"
18390 On System V.4 and embedded PowerPC systems, put small global and static
18391 data in the \f(CW\*(C`.sdata\*(C'\fR section, which is pointed to by register
18392 \&\f(CW\*(C`r13\*(C'\fR.  Put small uninitialized global and static data in the
18393 \&\f(CW\*(C`.sbss\*(C'\fR section, which is adjacent to the \f(CW\*(C`.sdata\*(C'\fR section.
18394 The \fB\-msdata=sysv\fR option is incompatible with the
18395 \&\fB\-mrelocatable\fR option.
18396 .IP "\fB\-msdata=default\fR" 4
18397 .IX Item "-msdata=default"
18398 .PD 0
18399 .IP "\fB\-msdata\fR" 4
18400 .IX Item "-msdata"
18401 .PD
18402 On System V.4 and embedded PowerPC systems, if \fB\-meabi\fR is used,
18403 compile code the same as \fB\-msdata=eabi\fR, otherwise compile code the
18404 same as \fB\-msdata=sysv\fR.
18405 .IP "\fB\-msdata=data\fR" 4
18406 .IX Item "-msdata=data"
18407 On System V.4 and embedded PowerPC systems, put small global
18408 data in the \f(CW\*(C`.sdata\*(C'\fR section.  Put small uninitialized global
18409 data in the \f(CW\*(C`.sbss\*(C'\fR section.  Do not use register \f(CW\*(C`r13\*(C'\fR
18410 to address small data however.  This is the default behavior unless
18411 other \fB\-msdata\fR options are used.
18412 .IP "\fB\-msdata=none\fR" 4
18413 .IX Item "-msdata=none"
18414 .PD 0
18415 .IP "\fB\-mno\-sdata\fR" 4
18416 .IX Item "-mno-sdata"
18417 .PD
18418 On embedded PowerPC systems, put all initialized global and static data
18419 in the \f(CW\*(C`.data\*(C'\fR section, and all uninitialized data in the
18420 \&\f(CW\*(C`.bss\*(C'\fR section.
18421 .IP "\fB\-mblock\-move\-inline\-limit=\fR\fInum\fR" 4
18422 .IX Item "-mblock-move-inline-limit=num"
18423 Inline all block moves (such as calls to \f(CW\*(C`memcpy\*(C'\fR or structure
18424 copies) less than or equal to \fInum\fR bytes.  The minimum value for
18425 \&\fInum\fR is 32 bytes on 32\-bit targets and 64 bytes on 64\-bit
18426 targets.  The default value is target-specific.
18427 .IP "\fB\-G\fR \fInum\fR" 4
18428 .IX Item "-G num"
18429 On embedded PowerPC systems, put global and static items less than or
18430 equal to \fInum\fR bytes into the small data or \s-1BSS\s0 sections instead of
18431 the normal data or \s-1BSS\s0 section.  By default, \fInum\fR is 8.  The
18432 \&\fB\-G\fR \fInum\fR switch is also passed to the linker.
18433 All modules should be compiled with the same \fB\-G\fR \fInum\fR value.
18434 .IP "\fB\-mregnames\fR" 4
18435 .IX Item "-mregnames"
18436 .PD 0
18437 .IP "\fB\-mno\-regnames\fR" 4
18438 .IX Item "-mno-regnames"
18439 .PD
18440 On System V.4 and embedded PowerPC systems do (do not) emit register
18441 names in the assembly language output using symbolic forms.
18442 .IP "\fB\-mlongcall\fR" 4
18443 .IX Item "-mlongcall"
18444 .PD 0
18445 .IP "\fB\-mno\-longcall\fR" 4
18446 .IX Item "-mno-longcall"
18447 .PD
18448 By default assume that all calls are far away so that a longer and more
18449 expensive calling sequence is required.  This is required for calls
18450 farther than 32 megabytes (33,554,432 bytes) from the current location.
18451 A short call is generated if the compiler knows
18452 the call cannot be that far away.  This setting can be overridden by
18453 the \f(CW\*(C`shortcall\*(C'\fR function attribute, or by \f(CW\*(C`#pragma
18454 longcall(0)\*(C'\fR.
18455 .Sp
18456 Some linkers are capable of detecting out-of-range calls and generating
18457 glue code on the fly.  On these systems, long calls are unnecessary and
18458 generate slower code.  As of this writing, the \s-1AIX\s0 linker can do this,
18459 as can the \s-1GNU\s0 linker for PowerPC/64.  It is planned to add this feature
18460 to the \s-1GNU\s0 linker for 32\-bit PowerPC systems as well.
18461 .Sp
18462 On Darwin/PPC systems, \f(CW\*(C`#pragma longcall\*(C'\fR generates \f(CW\*(C`jbsr
18463 callee, L42\*(C'\fR, plus a \fIbranch island\fR (glue code).  The two target
18464 addresses represent the callee and the branch island.  The
18465 Darwin/PPC linker prefers the first address and generates a \f(CW\*(C`bl
18466 callee\*(C'\fR if the \s-1PPC\s0 \f(CW\*(C`bl\*(C'\fR instruction reaches the callee directly;
18467 otherwise, the linker generates \f(CW\*(C`bl L42\*(C'\fR to call the branch
18468 island.  The branch island is appended to the body of the
18469 calling function; it computes the full 32\-bit address of the callee
18470 and jumps to it.
18471 .Sp
18472 On Mach-O (Darwin) systems, this option directs the compiler emit to
18473 the glue for every direct call, and the Darwin linker decides whether
18474 to use or discard it.
18475 .Sp
18476 In the future, \s-1GCC\s0 may ignore all longcall specifications
18477 when the linker is known to generate glue.
18478 .IP "\fB\-mtls\-markers\fR" 4
18479 .IX Item "-mtls-markers"
18480 .PD 0
18481 .IP "\fB\-mno\-tls\-markers\fR" 4
18482 .IX Item "-mno-tls-markers"
18483 .PD
18484 Mark (do not mark) calls to \f(CW\*(C`_\|_tls_get_addr\*(C'\fR with a relocation
18485 specifying the function argument.  The relocation allows the linker to
18486 reliably associate function call with argument setup instructions for
18487 \&\s-1TLS\s0 optimization, which in turn allows \s-1GCC\s0 to better schedule the
18488 sequence.
18489 .IP "\fB\-pthread\fR" 4
18490 .IX Item "-pthread"
18491 Adds support for multithreading with the \fIpthreads\fR library.
18492 This option sets flags for both the preprocessor and linker.
18493 .IP "\fB\-mrecip\fR" 4
18494 .IX Item "-mrecip"
18495 .PD 0
18496 .IP "\fB\-mno\-recip\fR" 4
18497 .IX Item "-mno-recip"
18498 .PD
18499 This option enables use of the reciprocal estimate and
18500 reciprocal square root estimate instructions with additional
18501 Newton-Raphson steps to increase precision instead of doing a divide or
18502 square root and divide for floating-point arguments.  You should use
18503 the \fB\-ffast\-math\fR option when using \fB\-mrecip\fR (or at
18504 least \fB\-funsafe\-math\-optimizations\fR,
18505 \&\fB\-finite\-math\-only\fR, \fB\-freciprocal\-math\fR and
18506 \&\fB\-fno\-trapping\-math\fR).  Note that while the throughput of the
18507 sequence is generally higher than the throughput of the non-reciprocal
18508 instruction, the precision of the sequence can be decreased by up to 2
18509 ulp (i.e. the inverse of 1.0 equals 0.99999994) for reciprocal square
18510 roots.
18511 .IP "\fB\-mrecip=\fR\fIopt\fR" 4
18512 .IX Item "-mrecip=opt"
18513 This option controls which reciprocal estimate instructions
18514 may be used.  \fIopt\fR is a comma-separated list of options, which may
18515 be preceded by a \f(CW\*(C`!\*(C'\fR to invert the option:
18516 .RS 4
18517 .IP "\fBall\fR" 4
18518 .IX Item "all"
18519 Enable all estimate instructions.
18520 .IP "\fBdefault\fR" 4
18521 .IX Item "default"
18522 Enable the default instructions, equivalent to \fB\-mrecip\fR.
18523 .IP "\fBnone\fR" 4
18524 .IX Item "none"
18525 Disable all estimate instructions, equivalent to \fB\-mno\-recip\fR.
18526 .IP "\fBdiv\fR" 4
18527 .IX Item "div"
18528 Enable the reciprocal approximation instructions for both 
18529 single and double precision.
18530 .IP "\fBdivf\fR" 4
18531 .IX Item "divf"
18532 Enable the single-precision reciprocal approximation instructions.
18533 .IP "\fBdivd\fR" 4
18534 .IX Item "divd"
18535 Enable the double-precision reciprocal approximation instructions.
18536 .IP "\fBrsqrt\fR" 4
18537 .IX Item "rsqrt"
18538 Enable the reciprocal square root approximation instructions for both
18539 single and double precision.
18540 .IP "\fBrsqrtf\fR" 4
18541 .IX Item "rsqrtf"
18542 Enable the single-precision reciprocal square root approximation instructions.
18543 .IP "\fBrsqrtd\fR" 4
18544 .IX Item "rsqrtd"
18545 Enable the double-precision reciprocal square root approximation instructions.
18546 .RE
18547 .RS 4
18548 .Sp
18549 So, for example, \fB\-mrecip=all,!rsqrtd\fR enables
18550 all of the reciprocal estimate instructions, except for the
18551 \&\f(CW\*(C`FRSQRTE\*(C'\fR, \f(CW\*(C`XSRSQRTEDP\*(C'\fR, and \f(CW\*(C`XVRSQRTEDP\*(C'\fR instructions
18552 which handle the double-precision reciprocal square root calculations.
18553 .RE
18554 .IP "\fB\-mrecip\-precision\fR" 4
18555 .IX Item "-mrecip-precision"
18556 .PD 0
18557 .IP "\fB\-mno\-recip\-precision\fR" 4
18558 .IX Item "-mno-recip-precision"
18559 .PD
18560 Assume (do not assume) that the reciprocal estimate instructions
18561 provide higher-precision estimates than is mandated by the PowerPC
18562 \&\s-1ABI\s0.  Selecting \fB\-mcpu=power6\fR, \fB\-mcpu=power7\fR or
18563 \&\fB\-mcpu=power8\fR automatically selects \fB\-mrecip\-precision\fR.
18564 The double-precision square root estimate instructions are not generated by
18565 default on low-precision machines, since they do not provide an
18566 estimate that converges after three steps.
18567 .IP "\fB\-mveclibabi=\fR\fItype\fR" 4
18568 .IX Item "-mveclibabi=type"
18569 Specifies the \s-1ABI\s0 type to use for vectorizing intrinsics using an
18570 external library.  The only type supported at present is \fBmass\fR,
18571 which specifies to use \s-1IBM\s0's Mathematical Acceleration Subsystem
18572 (\s-1MASS\s0) libraries for vectorizing intrinsics using external libraries.
18573 \&\s-1GCC\s0 currently emits calls to \f(CW\*(C`acosd2\*(C'\fR, \f(CW\*(C`acosf4\*(C'\fR,
18574 \&\f(CW\*(C`acoshd2\*(C'\fR, \f(CW\*(C`acoshf4\*(C'\fR, \f(CW\*(C`asind2\*(C'\fR, \f(CW\*(C`asinf4\*(C'\fR,
18575 \&\f(CW\*(C`asinhd2\*(C'\fR, \f(CW\*(C`asinhf4\*(C'\fR, \f(CW\*(C`atan2d2\*(C'\fR, \f(CW\*(C`atan2f4\*(C'\fR,
18576 \&\f(CW\*(C`atand2\*(C'\fR, \f(CW\*(C`atanf4\*(C'\fR, \f(CW\*(C`atanhd2\*(C'\fR, \f(CW\*(C`atanhf4\*(C'\fR,
18577 \&\f(CW\*(C`cbrtd2\*(C'\fR, \f(CW\*(C`cbrtf4\*(C'\fR, \f(CW\*(C`cosd2\*(C'\fR, \f(CW\*(C`cosf4\*(C'\fR,
18578 \&\f(CW\*(C`coshd2\*(C'\fR, \f(CW\*(C`coshf4\*(C'\fR, \f(CW\*(C`erfcd2\*(C'\fR, \f(CW\*(C`erfcf4\*(C'\fR,
18579 \&\f(CW\*(C`erfd2\*(C'\fR, \f(CW\*(C`erff4\*(C'\fR, \f(CW\*(C`exp2d2\*(C'\fR, \f(CW\*(C`exp2f4\*(C'\fR,
18580 \&\f(CW\*(C`expd2\*(C'\fR, \f(CW\*(C`expf4\*(C'\fR, \f(CW\*(C`expm1d2\*(C'\fR, \f(CW\*(C`expm1f4\*(C'\fR,
18581 \&\f(CW\*(C`hypotd2\*(C'\fR, \f(CW\*(C`hypotf4\*(C'\fR, \f(CW\*(C`lgammad2\*(C'\fR, \f(CW\*(C`lgammaf4\*(C'\fR,
18582 \&\f(CW\*(C`log10d2\*(C'\fR, \f(CW\*(C`log10f4\*(C'\fR, \f(CW\*(C`log1pd2\*(C'\fR, \f(CW\*(C`log1pf4\*(C'\fR,
18583 \&\f(CW\*(C`log2d2\*(C'\fR, \f(CW\*(C`log2f4\*(C'\fR, \f(CW\*(C`logd2\*(C'\fR, \f(CW\*(C`logf4\*(C'\fR,
18584 \&\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,
18585 \&\f(CW\*(C`sinhf4\*(C'\fR, \f(CW\*(C`sqrtd2\*(C'\fR, \f(CW\*(C`sqrtf4\*(C'\fR, \f(CW\*(C`tand2\*(C'\fR,
18586 \&\f(CW\*(C`tanf4\*(C'\fR, \f(CW\*(C`tanhd2\*(C'\fR, and \f(CW\*(C`tanhf4\*(C'\fR when generating code
18587 for power7.  Both \fB\-ftree\-vectorize\fR and
18588 \&\fB\-funsafe\-math\-optimizations\fR must also be enabled.  The \s-1MASS\s0
18589 libraries must be specified at link time.
18590 .IP "\fB\-mfriz\fR" 4
18591 .IX Item "-mfriz"
18592 .PD 0
18593 .IP "\fB\-mno\-friz\fR" 4
18594 .IX Item "-mno-friz"
18595 .PD
18596 Generate (do not generate) the \f(CW\*(C`friz\*(C'\fR instruction when the
18597 \&\fB\-funsafe\-math\-optimizations\fR option is used to optimize
18598 rounding of floating-point values to 64\-bit integer and back to floating
18599 point.  The \f(CW\*(C`friz\*(C'\fR instruction does not return the same value if
18600 the floating-point number is too large to fit in an integer.
18601 .IP "\fB\-mpointers\-to\-nested\-functions\fR" 4
18602 .IX Item "-mpointers-to-nested-functions"
18603 .PD 0
18604 .IP "\fB\-mno\-pointers\-to\-nested\-functions\fR" 4
18605 .IX Item "-mno-pointers-to-nested-functions"
18606 .PD
18607 Generate (do not generate) code to load up the static chain register
18608 (\f(CW\*(C`r11\*(C'\fR) when calling through a pointer on \s-1AIX\s0 and 64\-bit Linux
18609 systems where a function pointer points to a 3\-word descriptor giving
18610 the function address, \s-1TOC\s0 value to be loaded in register \f(CW\*(C`r2\*(C'\fR, and
18611 static chain value to be loaded in register \f(CW\*(C`r11\*(C'\fR.  The
18612 \&\fB\-mpointers\-to\-nested\-functions\fR is on by default.  You cannot
18613 call through pointers to nested functions or pointers
18614 to functions compiled in other languages that use the static chain if
18615 you use \fB\-mno\-pointers\-to\-nested\-functions\fR.
18616 .IP "\fB\-msave\-toc\-indirect\fR" 4
18617 .IX Item "-msave-toc-indirect"
18618 .PD 0
18619 .IP "\fB\-mno\-save\-toc\-indirect\fR" 4
18620 .IX Item "-mno-save-toc-indirect"
18621 .PD
18622 Generate (do not generate) code to save the \s-1TOC\s0 value in the reserved
18623 stack location in the function prologue if the function calls through
18624 a pointer on \s-1AIX\s0 and 64\-bit Linux systems.  If the \s-1TOC\s0 value is not
18625 saved in the prologue, it is saved just before the call through the
18626 pointer.  The \fB\-mno\-save\-toc\-indirect\fR option is the default.
18627 .IP "\fB\-mcompat\-align\-parm\fR" 4
18628 .IX Item "-mcompat-align-parm"
18629 .PD 0
18630 .IP "\fB\-mno\-compat\-align\-parm\fR" 4
18631 .IX Item "-mno-compat-align-parm"
18632 .PD
18633 Generate (do not generate) code to pass structure parameters with a
18634 maximum alignment of 64 bits, for compatibility with older versions
18635 of \s-1GCC\s0.
18636 .Sp
18637 Older versions of \s-1GCC\s0 (prior to 4.9.0) incorrectly did not align a
18638 structure parameter on a 128\-bit boundary when that structure contained
18639 a member requiring 128\-bit alignment.  This is corrected in more
18640 recent versions of \s-1GCC\s0.  This option may be used to generate code
18641 that is compatible with functions compiled with older versions of
18642 \&\s-1GCC\s0.
18643 .Sp
18644 The \fB\-mno\-compat\-align\-parm\fR option is the default.
18645 .PP
18646 \fI\s-1RX\s0 Options\fR
18647 .IX Subsection "RX Options"
18648 .PP
18649 These command-line options are defined for \s-1RX\s0 targets:
18650 .IP "\fB\-m64bit\-doubles\fR" 4
18651 .IX Item "-m64bit-doubles"
18652 .PD 0
18653 .IP "\fB\-m32bit\-doubles\fR" 4
18654 .IX Item "-m32bit-doubles"
18655 .PD
18656 Make the \f(CW\*(C`double\*(C'\fR data type be 64 bits (\fB\-m64bit\-doubles\fR)
18657 or 32 bits (\fB\-m32bit\-doubles\fR) in size.  The default is
18658 \&\fB\-m32bit\-doubles\fR.  \fINote\fR \s-1RX\s0 floating-point hardware only
18659 works on 32\-bit values, which is why the default is
18660 \&\fB\-m32bit\-doubles\fR.
18661 .IP "\fB\-fpu\fR" 4
18662 .IX Item "-fpu"
18663 .PD 0
18664 .IP "\fB\-nofpu\fR" 4
18665 .IX Item "-nofpu"
18666 .PD
18667 Enables (\fB\-fpu\fR) or disables (\fB\-nofpu\fR) the use of \s-1RX\s0
18668 floating-point hardware.  The default is enabled for the \s-1RX600\s0
18669 series and disabled for the \s-1RX200\s0 series.
18670 .Sp
18671 Floating-point instructions are only generated for 32\-bit floating-point 
18672 values, however, so the \s-1FPU\s0 hardware is not used for doubles if the
18673 \&\fB\-m64bit\-doubles\fR option is used.
18674 .Sp
18675 \&\fINote\fR If the \fB\-fpu\fR option is enabled then
18676 \&\fB\-funsafe\-math\-optimizations\fR is also enabled automatically.
18677 This is because the \s-1RX\s0 \s-1FPU\s0 instructions are themselves unsafe.
18678 .IP "\fB\-mcpu=\fR\fIname\fR" 4
18679 .IX Item "-mcpu=name"
18680 Selects the type of \s-1RX\s0 \s-1CPU\s0 to be targeted.  Currently three types are
18681 supported, the generic \fB\s-1RX600\s0\fR and \fB\s-1RX200\s0\fR series hardware and
18682 the specific \fB\s-1RX610\s0\fR \s-1CPU\s0.  The default is \fB\s-1RX600\s0\fR.
18683 .Sp
18684 The only difference between \fB\s-1RX600\s0\fR and \fB\s-1RX610\s0\fR is that the
18685 \&\fB\s-1RX610\s0\fR does not support the \f(CW\*(C`MVTIPL\*(C'\fR instruction.
18686 .Sp
18687 The \fB\s-1RX200\s0\fR series does not have a hardware floating-point unit
18688 and so \fB\-nofpu\fR is enabled by default when this type is
18689 selected.
18690 .IP "\fB\-mbig\-endian\-data\fR" 4
18691 .IX Item "-mbig-endian-data"
18692 .PD 0
18693 .IP "\fB\-mlittle\-endian\-data\fR" 4
18694 .IX Item "-mlittle-endian-data"
18695 .PD
18696 Store data (but not code) in the big-endian format.  The default is
18697 \&\fB\-mlittle\-endian\-data\fR, i.e. to store data in the little-endian
18698 format.
18699 .IP "\fB\-msmall\-data\-limit=\fR\fIN\fR" 4
18700 .IX Item "-msmall-data-limit=N"
18701 Specifies the maximum size in bytes of global and static variables
18702 which can be placed into the small data area.  Using the small data
18703 area can lead to smaller and faster code, but the size of area is
18704 limited and it is up to the programmer to ensure that the area does
18705 not overflow.  Also when the small data area is used one of the \s-1RX\s0's
18706 registers (usually \f(CW\*(C`r13\*(C'\fR) is reserved for use pointing to this
18707 area, so it is no longer available for use by the compiler.  This
18708 could result in slower and/or larger code if variables are pushed onto
18709 the stack instead of being held in this register.
18710 .Sp
18711 Note, common variables (variables that have not been initialized) and
18712 constants are not placed into the small data area as they are assigned
18713 to other sections in the output executable.
18714 .Sp
18715 The default value is zero, which disables this feature.  Note, this
18716 feature is not enabled by default with higher optimization levels
18717 (\fB\-O2\fR etc) because of the potentially detrimental effects of
18718 reserving a register.  It is up to the programmer to experiment and
18719 discover whether this feature is of benefit to their program.  See the
18720 description of the \fB\-mpid\fR option for a description of how the
18721 actual register to hold the small data area pointer is chosen.
18722 .IP "\fB\-msim\fR" 4
18723 .IX Item "-msim"
18724 .PD 0
18725 .IP "\fB\-mno\-sim\fR" 4
18726 .IX Item "-mno-sim"
18727 .PD
18728 Use the simulator runtime.  The default is to use the libgloss
18729 board-specific runtime.
18730 .IP "\fB\-mas100\-syntax\fR" 4
18731 .IX Item "-mas100-syntax"
18732 .PD 0
18733 .IP "\fB\-mno\-as100\-syntax\fR" 4
18734 .IX Item "-mno-as100-syntax"
18735 .PD
18736 When generating assembler output use a syntax that is compatible with
18737 Renesas's \s-1AS100\s0 assembler.  This syntax can also be handled by the \s-1GAS\s0
18738 assembler, but it has some restrictions so it is not generated by default.
18739 .IP "\fB\-mmax\-constant\-size=\fR\fIN\fR" 4
18740 .IX Item "-mmax-constant-size=N"
18741 Specifies the maximum size, in bytes, of a constant that can be used as
18742 an operand in a \s-1RX\s0 instruction.  Although the \s-1RX\s0 instruction set does
18743 allow constants of up to 4 bytes in length to be used in instructions,
18744 a longer value equates to a longer instruction.  Thus in some
18745 circumstances it can be beneficial to restrict the size of constants
18746 that are used in instructions.  Constants that are too big are instead
18747 placed into a constant pool and referenced via register indirection.
18748 .Sp
18749 The value \fIN\fR can be between 0 and 4.  A value of 0 (the default)
18750 or 4 means that constants of any size are allowed.
18751 .IP "\fB\-mrelax\fR" 4
18752 .IX Item "-mrelax"
18753 Enable linker relaxation.  Linker relaxation is a process whereby the
18754 linker attempts to reduce the size of a program by finding shorter
18755 versions of various instructions.  Disabled by default.
18756 .IP "\fB\-mint\-register=\fR\fIN\fR" 4
18757 .IX Item "-mint-register=N"
18758 Specify the number of registers to reserve for fast interrupt handler
18759 functions.  The value \fIN\fR can be between 0 and 4.  A value of 1
18760 means that register \f(CW\*(C`r13\*(C'\fR is reserved for the exclusive use
18761 of fast interrupt handlers.  A value of 2 reserves \f(CW\*(C`r13\*(C'\fR and
18762 \&\f(CW\*(C`r12\*(C'\fR.  A value of 3 reserves \f(CW\*(C`r13\*(C'\fR, \f(CW\*(C`r12\*(C'\fR and
18763 \&\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.
18764 A value of 0, the default, does not reserve any registers.
18765 .IP "\fB\-msave\-acc\-in\-interrupts\fR" 4
18766 .IX Item "-msave-acc-in-interrupts"
18767 Specifies that interrupt handler functions should preserve the
18768 accumulator register.  This is only necessary if normal code might use
18769 the accumulator register, for example because it performs 64\-bit
18770 multiplications.  The default is to ignore the accumulator as this
18771 makes the interrupt handlers faster.
18772 .IP "\fB\-mpid\fR" 4
18773 .IX Item "-mpid"
18774 .PD 0
18775 .IP "\fB\-mno\-pid\fR" 4
18776 .IX Item "-mno-pid"
18777 .PD
18778 Enables the generation of position independent data.  When enabled any
18779 access to constant data is done via an offset from a base address
18780 held in a register.  This allows the location of constant data to be
18781 determined at run time without requiring the executable to be
18782 relocated, which is a benefit to embedded applications with tight
18783 memory constraints.  Data that can be modified is not affected by this
18784 option.
18785 .Sp
18786 Note, using this feature reserves a register, usually \f(CW\*(C`r13\*(C'\fR, for
18787 the constant data base address.  This can result in slower and/or
18788 larger code, especially in complicated functions.
18789 .Sp
18790 The actual register chosen to hold the constant data base address
18791 depends upon whether the \fB\-msmall\-data\-limit\fR and/or the
18792 \&\fB\-mint\-register\fR command-line options are enabled.  Starting
18793 with register \f(CW\*(C`r13\*(C'\fR and proceeding downwards, registers are
18794 allocated first to satisfy the requirements of \fB\-mint\-register\fR,
18795 then \fB\-mpid\fR and finally \fB\-msmall\-data\-limit\fR.  Thus it
18796 is possible for the small data area register to be \f(CW\*(C`r8\*(C'\fR if both
18797 \&\fB\-mint\-register=4\fR and \fB\-mpid\fR are specified on the
18798 command line.
18799 .Sp
18800 By default this feature is not enabled.  The default can be restored
18801 via the \fB\-mno\-pid\fR command-line option.
18802 .IP "\fB\-mno\-warn\-multiple\-fast\-interrupts\fR" 4
18803 .IX Item "-mno-warn-multiple-fast-interrupts"
18804 .PD 0
18805 .IP "\fB\-mwarn\-multiple\-fast\-interrupts\fR" 4
18806 .IX Item "-mwarn-multiple-fast-interrupts"
18807 .PD
18808 Prevents \s-1GCC\s0 from issuing a warning message if it finds more than one
18809 fast interrupt handler when it is compiling a file.  The default is to
18810 issue a warning for each extra fast interrupt handler found, as the \s-1RX\s0
18811 only supports one such interrupt.
18812 .PP
18813 \&\fINote:\fR The generic \s-1GCC\s0 command-line option \fB\-ffixed\-\fR\fIreg\fR
18814 has special significance to the \s-1RX\s0 port when used with the
18815 \&\f(CW\*(C`interrupt\*(C'\fR function attribute.  This attribute indicates a
18816 function intended to process fast interrupts.  \s-1GCC\s0 ensures
18817 that it only uses the registers \f(CW\*(C`r10\*(C'\fR, \f(CW\*(C`r11\*(C'\fR, \f(CW\*(C`r12\*(C'\fR
18818 and/or \f(CW\*(C`r13\*(C'\fR and only provided that the normal use of the
18819 corresponding registers have been restricted via the
18820 \&\fB\-ffixed\-\fR\fIreg\fR or \fB\-mint\-register\fR command-line
18821 options.
18822 .PP
18823 \fIS/390 and zSeries Options\fR
18824 .IX Subsection "S/390 and zSeries Options"
18825 .PP
18826 These are the \fB\-m\fR options defined for the S/390 and zSeries architecture.
18827 .IP "\fB\-mhard\-float\fR" 4
18828 .IX Item "-mhard-float"
18829 .PD 0
18830 .IP "\fB\-msoft\-float\fR" 4
18831 .IX Item "-msoft-float"
18832 .PD
18833 Use (do not use) the hardware floating-point instructions and registers
18834 for floating-point operations.  When \fB\-msoft\-float\fR is specified,
18835 functions in \fIlibgcc.a\fR are used to perform floating-point
18836 operations.  When \fB\-mhard\-float\fR is specified, the compiler
18837 generates \s-1IEEE\s0 floating-point instructions.  This is the default.
18838 .IP "\fB\-mhard\-dfp\fR" 4
18839 .IX Item "-mhard-dfp"
18840 .PD 0
18841 .IP "\fB\-mno\-hard\-dfp\fR" 4
18842 .IX Item "-mno-hard-dfp"
18843 .PD
18844 Use (do not use) the hardware decimal-floating-point instructions for
18845 decimal-floating-point operations.  When \fB\-mno\-hard\-dfp\fR is
18846 specified, functions in \fIlibgcc.a\fR are used to perform
18847 decimal-floating-point operations.  When \fB\-mhard\-dfp\fR is
18848 specified, the compiler generates decimal-floating-point hardware
18849 instructions.  This is the default for \fB\-march=z9\-ec\fR or higher.
18850 .IP "\fB\-mlong\-double\-64\fR" 4
18851 .IX Item "-mlong-double-64"
18852 .PD 0
18853 .IP "\fB\-mlong\-double\-128\fR" 4
18854 .IX Item "-mlong-double-128"
18855 .PD
18856 These switches control the size of \f(CW\*(C`long double\*(C'\fR type. A size
18857 of 64 bits makes the \f(CW\*(C`long double\*(C'\fR type equivalent to the \f(CW\*(C`double\*(C'\fR
18858 type. This is the default.
18859 .IP "\fB\-mbackchain\fR" 4
18860 .IX Item "-mbackchain"
18861 .PD 0
18862 .IP "\fB\-mno\-backchain\fR" 4
18863 .IX Item "-mno-backchain"
18864 .PD
18865 Store (do not store) the address of the caller's frame as backchain pointer
18866 into the callee's stack frame.
18867 A backchain may be needed to allow debugging using tools that do not understand
18868 \&\s-1DWARF\s0 2 call frame information.
18869 When \fB\-mno\-packed\-stack\fR is in effect, the backchain pointer is stored
18870 at the bottom of the stack frame; when \fB\-mpacked\-stack\fR is in effect,
18871 the backchain is placed into the topmost word of the 96/160 byte register
18872 save area.
18873 .Sp
18874 In general, code compiled with \fB\-mbackchain\fR is call-compatible with
18875 code compiled with \fB\-mmo\-backchain\fR; however, use of the backchain
18876 for debugging purposes usually requires that the whole binary is built with
18877 \&\fB\-mbackchain\fR.  Note that the combination of \fB\-mbackchain\fR,
18878 \&\fB\-mpacked\-stack\fR and \fB\-mhard\-float\fR is not supported.  In order
18879 to build a linux kernel use \fB\-msoft\-float\fR.
18880 .Sp
18881 The default is to not maintain the backchain.
18882 .IP "\fB\-mpacked\-stack\fR" 4
18883 .IX Item "-mpacked-stack"
18884 .PD 0
18885 .IP "\fB\-mno\-packed\-stack\fR" 4
18886 .IX Item "-mno-packed-stack"
18887 .PD
18888 Use (do not use) the packed stack layout.  When \fB\-mno\-packed\-stack\fR is
18889 specified, the compiler uses the all fields of the 96/160 byte register save
18890 area only for their default purpose; unused fields still take up stack space.
18891 When \fB\-mpacked\-stack\fR is specified, register save slots are densely
18892 packed at the top of the register save area; unused space is reused for other
18893 purposes, allowing for more efficient use of the available stack space.
18894 However, when \fB\-mbackchain\fR is also in effect, the topmost word of
18895 the save area is always used to store the backchain, and the return address
18896 register is always saved two words below the backchain.
18897 .Sp
18898 As long as the stack frame backchain is not used, code generated with
18899 \&\fB\-mpacked\-stack\fR is call-compatible with code generated with
18900 \&\fB\-mno\-packed\-stack\fR.  Note that some non-FSF releases of \s-1GCC\s0 2.95 for
18901 S/390 or zSeries generated code that uses the stack frame backchain at run
18902 time, not just for debugging purposes.  Such code is not call-compatible
18903 with code compiled with \fB\-mpacked\-stack\fR.  Also, note that the
18904 combination of \fB\-mbackchain\fR,
18905 \&\fB\-mpacked\-stack\fR and \fB\-mhard\-float\fR is not supported.  In order
18906 to build a linux kernel use \fB\-msoft\-float\fR.
18907 .Sp
18908 The default is to not use the packed stack layout.
18909 .IP "\fB\-msmall\-exec\fR" 4
18910 .IX Item "-msmall-exec"
18911 .PD 0
18912 .IP "\fB\-mno\-small\-exec\fR" 4
18913 .IX Item "-mno-small-exec"
18914 .PD
18915 Generate (or do not generate) code using the \f(CW\*(C`bras\*(C'\fR instruction
18916 to do subroutine calls.
18917 This only works reliably if the total executable size does not
18918 exceed 64k.  The default is to use the \f(CW\*(C`basr\*(C'\fR instruction instead,
18919 which does not have this limitation.
18920 .IP "\fB\-m64\fR" 4
18921 .IX Item "-m64"
18922 .PD 0
18923 .IP "\fB\-m31\fR" 4
18924 .IX Item "-m31"
18925 .PD
18926 When \fB\-m31\fR is specified, generate code compliant to the
18927 GNU/Linux for S/390 \s-1ABI\s0.  When \fB\-m64\fR is specified, generate
18928 code compliant to the GNU/Linux for zSeries \s-1ABI\s0.  This allows \s-1GCC\s0 in
18929 particular to generate 64\-bit instructions.  For the \fBs390\fR
18930 targets, the default is \fB\-m31\fR, while the \fBs390x\fR
18931 targets default to \fB\-m64\fR.
18932 .IP "\fB\-mzarch\fR" 4
18933 .IX Item "-mzarch"
18934 .PD 0
18935 .IP "\fB\-mesa\fR" 4
18936 .IX Item "-mesa"
18937 .PD
18938 When \fB\-mzarch\fR is specified, generate code using the
18939 instructions available on z/Architecture.
18940 When \fB\-mesa\fR is specified, generate code using the
18941 instructions available on \s-1ESA/390\s0.  Note that \fB\-mesa\fR is
18942 not possible with \fB\-m64\fR.
18943 When generating code compliant to the GNU/Linux for S/390 \s-1ABI\s0,
18944 the default is \fB\-mesa\fR.  When generating code compliant
18945 to the GNU/Linux for zSeries \s-1ABI\s0, the default is \fB\-mzarch\fR.
18946 .IP "\fB\-mmvcle\fR" 4
18947 .IX Item "-mmvcle"
18948 .PD 0
18949 .IP "\fB\-mno\-mvcle\fR" 4
18950 .IX Item "-mno-mvcle"
18951 .PD
18952 Generate (or do not generate) code using the \f(CW\*(C`mvcle\*(C'\fR instruction
18953 to perform block moves.  When \fB\-mno\-mvcle\fR is specified,
18954 use a \f(CW\*(C`mvc\*(C'\fR loop instead.  This is the default unless optimizing for
18955 size.
18956 .IP "\fB\-mdebug\fR" 4
18957 .IX Item "-mdebug"
18958 .PD 0
18959 .IP "\fB\-mno\-debug\fR" 4
18960 .IX Item "-mno-debug"
18961 .PD
18962 Print (or do not print) additional debug information when compiling.
18963 The default is to not print debug information.
18964 .IP "\fB\-march=\fR\fIcpu-type\fR" 4
18965 .IX Item "-march=cpu-type"
18966 Generate code that runs on \fIcpu-type\fR, which is the name of a system
18967 representing a certain processor type.  Possible values for
18968 \&\fIcpu-type\fR are \fBg5\fR, \fBg6\fR, \fBz900\fR, \fBz990\fR,
18969 \&\fBz9\-109\fR, \fBz9\-ec\fR, \fBz10\fR,  \fBz196\fR, \fBzEC12\fR,
18970 and \fBz13\fR.
18971 When generating code using the instructions available on z/Architecture,
18972 the default is \fB\-march=z900\fR.  Otherwise, the default is
18973 \&\fB\-march=g5\fR.
18974 .IP "\fB\-mtune=\fR\fIcpu-type\fR" 4
18975 .IX Item "-mtune=cpu-type"
18976 Tune to \fIcpu-type\fR everything applicable about the generated code,
18977 except for the \s-1ABI\s0 and the set of available instructions.
18978 The list of \fIcpu-type\fR values is the same as for \fB\-march\fR.
18979 The default is the value used for \fB\-march\fR.
18980 .IP "\fB\-mtpf\-trace\fR" 4
18981 .IX Item "-mtpf-trace"
18982 .PD 0
18983 .IP "\fB\-mno\-tpf\-trace\fR" 4
18984 .IX Item "-mno-tpf-trace"
18985 .PD
18986 Generate code that adds (does not add) in \s-1TPF\s0 \s-1OS\s0 specific branches to trace
18987 routines in the operating system.  This option is off by default, even
18988 when compiling for the \s-1TPF\s0 \s-1OS\s0.
18989 .IP "\fB\-mfused\-madd\fR" 4
18990 .IX Item "-mfused-madd"
18991 .PD 0
18992 .IP "\fB\-mno\-fused\-madd\fR" 4
18993 .IX Item "-mno-fused-madd"
18994 .PD
18995 Generate code that uses (does not use) the floating-point multiply and
18996 accumulate instructions.  These instructions are generated by default if
18997 hardware floating point is used.
18998 .IP "\fB\-mwarn\-framesize=\fR\fIframesize\fR" 4
18999 .IX Item "-mwarn-framesize=framesize"
19000 Emit a warning if the current function exceeds the given frame size.  Because
19001 this is a compile-time check it doesn't need to be a real problem when the program
19002 runs.  It is intended to identify functions that most probably cause
19003 a stack overflow.  It is useful to be used in an environment with limited stack
19004 size e.g. the linux kernel.
19005 .IP "\fB\-mwarn\-dynamicstack\fR" 4
19006 .IX Item "-mwarn-dynamicstack"
19007 Emit a warning if the function calls \f(CW\*(C`alloca\*(C'\fR or uses dynamically-sized
19008 arrays.  This is generally a bad idea with a limited stack size.
19009 .IP "\fB\-mstack\-guard=\fR\fIstack-guard\fR" 4
19010 .IX Item "-mstack-guard=stack-guard"
19011 .PD 0
19012 .IP "\fB\-mstack\-size=\fR\fIstack-size\fR" 4
19013 .IX Item "-mstack-size=stack-size"
19014 .PD
19015 If these options are provided the S/390 back end emits additional instructions in
19016 the function prologue that trigger a trap if the stack size is \fIstack-guard\fR
19017 bytes above the \fIstack-size\fR (remember that the stack on S/390 grows downward).
19018 If the \fIstack-guard\fR option is omitted the smallest power of 2 larger than
19019 the frame size of the compiled function is chosen.
19020 These options are intended to be used to help debugging stack overflow problems.
19021 The additionally emitted code causes only little overhead and hence can also be
19022 used in production-like systems without greater performance degradation.  The given
19023 values have to be exact powers of 2 and \fIstack-size\fR has to be greater than
19024 \&\fIstack-guard\fR without exceeding 64k.
19025 In order to be efficient the extra code makes the assumption that the stack starts
19026 at an address aligned to the value given by \fIstack-size\fR.
19027 The \fIstack-guard\fR option can only be used in conjunction with \fIstack-size\fR.
19028 .IP "\fB\-mhotpatch=\fR\fIpre-halfwords\fR\fB,\fR\fIpost-halfwords\fR" 4
19029 .IX Item "-mhotpatch=pre-halfwords,post-halfwords"
19030 If the hotpatch option is enabled, a \*(L"hot-patching\*(R" function
19031 prologue is generated for all functions in the compilation unit.
19032 The funtion label is prepended with the given number of two-byte
19033 \&\s-1NOP\s0 instructions (\fIpre-halfwords\fR, maximum 1000000).  After
19034 the label, 2 * \fIpost-halfwords\fR bytes are appended, using the
19035 largest \s-1NOP\s0 like instructions the architecture allows (maximum
19036 1000000).
19037 .Sp
19038 If both arguments are zero, hotpatching is disabled.
19039 .Sp
19040 This option can be overridden for individual functions with the
19041 \&\f(CW\*(C`hotpatch\*(C'\fR attribute.
19042 .PP
19043 \fIScore Options\fR
19044 .IX Subsection "Score Options"
19045 .PP
19046 These options are defined for Score implementations:
19047 .IP "\fB\-meb\fR" 4
19048 .IX Item "-meb"
19049 Compile code for big-endian mode.  This is the default.
19050 .IP "\fB\-mel\fR" 4
19051 .IX Item "-mel"
19052 Compile code for little-endian mode.
19053 .IP "\fB\-mnhwloop\fR" 4
19054 .IX Item "-mnhwloop"
19055 Disable generation of \f(CW\*(C`bcnz\*(C'\fR instructions.
19056 .IP "\fB\-muls\fR" 4
19057 .IX Item "-muls"
19058 Enable generation of unaligned load and store instructions.
19059 .IP "\fB\-mmac\fR" 4
19060 .IX Item "-mmac"
19061 Enable the use of multiply-accumulate instructions. Disabled by default.
19062 .IP "\fB\-mscore5\fR" 4
19063 .IX Item "-mscore5"
19064 Specify the \s-1SCORE5\s0 as the target architecture.
19065 .IP "\fB\-mscore5u\fR" 4
19066 .IX Item "-mscore5u"
19067 Specify the \s-1SCORE5U\s0 of the target architecture.
19068 .IP "\fB\-mscore7\fR" 4
19069 .IX Item "-mscore7"
19070 Specify the \s-1SCORE7\s0 as the target architecture. This is the default.
19071 .IP "\fB\-mscore7d\fR" 4
19072 .IX Item "-mscore7d"
19073 Specify the \s-1SCORE7D\s0 as the target architecture.
19074 .PP
19075 \fI\s-1SH\s0 Options\fR
19076 .IX Subsection "SH Options"
19077 .PP
19078 These \fB\-m\fR options are defined for the \s-1SH\s0 implementations:
19079 .IP "\fB\-m1\fR" 4
19080 .IX Item "-m1"
19081 Generate code for the \s-1SH1\s0.
19082 .IP "\fB\-m2\fR" 4
19083 .IX Item "-m2"
19084 Generate code for the \s-1SH2\s0.
19085 .IP "\fB\-m2e\fR" 4
19086 .IX Item "-m2e"
19087 Generate code for the SH2e.
19088 .IP "\fB\-m2a\-nofpu\fR" 4
19089 .IX Item "-m2a-nofpu"
19090 Generate code for the SH2a without \s-1FPU\s0, or for a SH2a\-FPU in such a way
19091 that the floating-point unit is not used.
19092 .IP "\fB\-m2a\-single\-only\fR" 4
19093 .IX Item "-m2a-single-only"
19094 Generate code for the SH2a\-FPU, in such a way that no double-precision
19095 floating-point operations are used.
19096 .IP "\fB\-m2a\-single\fR" 4
19097 .IX Item "-m2a-single"
19098 Generate code for the SH2a\-FPU assuming the floating-point unit is in
19099 single-precision mode by default.
19100 .IP "\fB\-m2a\fR" 4
19101 .IX Item "-m2a"
19102 Generate code for the SH2a\-FPU assuming the floating-point unit is in
19103 double-precision mode by default.
19104 .IP "\fB\-m3\fR" 4
19105 .IX Item "-m3"
19106 Generate code for the \s-1SH3\s0.
19107 .IP "\fB\-m3e\fR" 4
19108 .IX Item "-m3e"
19109 Generate code for the SH3e.
19110 .IP "\fB\-m4\-nofpu\fR" 4
19111 .IX Item "-m4-nofpu"
19112 Generate code for the \s-1SH4\s0 without a floating-point unit.
19113 .IP "\fB\-m4\-single\-only\fR" 4
19114 .IX Item "-m4-single-only"
19115 Generate code for the \s-1SH4\s0 with a floating-point unit that only
19116 supports single-precision arithmetic.
19117 .IP "\fB\-m4\-single\fR" 4
19118 .IX Item "-m4-single"
19119 Generate code for the \s-1SH4\s0 assuming the floating-point unit is in
19120 single-precision mode by default.
19121 .IP "\fB\-m4\fR" 4
19122 .IX Item "-m4"
19123 Generate code for the \s-1SH4\s0.
19124 .IP "\fB\-m4\-100\fR" 4
19125 .IX Item "-m4-100"
19126 Generate code for \s-1SH4\-100\s0.
19127 .IP "\fB\-m4\-100\-nofpu\fR" 4
19128 .IX Item "-m4-100-nofpu"
19129 Generate code for \s-1SH4\-100\s0 in such a way that the
19130 floating-point unit is not used.
19131 .IP "\fB\-m4\-100\-single\fR" 4
19132 .IX Item "-m4-100-single"
19133 Generate code for \s-1SH4\-100\s0 assuming the floating-point unit is in
19134 single-precision mode by default.
19135 .IP "\fB\-m4\-100\-single\-only\fR" 4
19136 .IX Item "-m4-100-single-only"
19137 Generate code for \s-1SH4\-100\s0 in such a way that no double-precision
19138 floating-point operations are used.
19139 .IP "\fB\-m4\-200\fR" 4
19140 .IX Item "-m4-200"
19141 Generate code for \s-1SH4\-200\s0.
19142 .IP "\fB\-m4\-200\-nofpu\fR" 4
19143 .IX Item "-m4-200-nofpu"
19144 Generate code for \s-1SH4\-200\s0 without in such a way that the
19145 floating-point unit is not used.
19146 .IP "\fB\-m4\-200\-single\fR" 4
19147 .IX Item "-m4-200-single"
19148 Generate code for \s-1SH4\-200\s0 assuming the floating-point unit is in
19149 single-precision mode by default.
19150 .IP "\fB\-m4\-200\-single\-only\fR" 4
19151 .IX Item "-m4-200-single-only"
19152 Generate code for \s-1SH4\-200\s0 in such a way that no double-precision
19153 floating-point operations are used.
19154 .IP "\fB\-m4\-300\fR" 4
19155 .IX Item "-m4-300"
19156 Generate code for \s-1SH4\-300\s0.
19157 .IP "\fB\-m4\-300\-nofpu\fR" 4
19158 .IX Item "-m4-300-nofpu"
19159 Generate code for \s-1SH4\-300\s0 without in such a way that the
19160 floating-point unit is not used.
19161 .IP "\fB\-m4\-300\-single\fR" 4
19162 .IX Item "-m4-300-single"
19163 Generate code for \s-1SH4\-300\s0 in such a way that no double-precision
19164 floating-point operations are used.
19165 .IP "\fB\-m4\-300\-single\-only\fR" 4
19166 .IX Item "-m4-300-single-only"
19167 Generate code for \s-1SH4\-300\s0 in such a way that no double-precision
19168 floating-point operations are used.
19169 .IP "\fB\-m4\-340\fR" 4
19170 .IX Item "-m4-340"
19171 Generate code for \s-1SH4\-340\s0 (no \s-1MMU\s0, no \s-1FPU\s0).
19172 .IP "\fB\-m4\-500\fR" 4
19173 .IX Item "-m4-500"
19174 Generate code for \s-1SH4\-500\s0 (no \s-1FPU\s0).  Passes \fB\-isa=sh4\-nofpu\fR to the
19175 assembler.
19176 .IP "\fB\-m4a\-nofpu\fR" 4
19177 .IX Item "-m4a-nofpu"
19178 Generate code for the SH4al\-dsp, or for a SH4a in such a way that the
19179 floating-point unit is not used.
19180 .IP "\fB\-m4a\-single\-only\fR" 4
19181 .IX Item "-m4a-single-only"
19182 Generate code for the SH4a, in such a way that no double-precision
19183 floating-point operations are used.
19184 .IP "\fB\-m4a\-single\fR" 4
19185 .IX Item "-m4a-single"
19186 Generate code for the SH4a assuming the floating-point unit is in
19187 single-precision mode by default.
19188 .IP "\fB\-m4a\fR" 4
19189 .IX Item "-m4a"
19190 Generate code for the SH4a.
19191 .IP "\fB\-m4al\fR" 4
19192 .IX Item "-m4al"
19193 Same as \fB\-m4a\-nofpu\fR, except that it implicitly passes
19194 \&\fB\-dsp\fR to the assembler.  \s-1GCC\s0 doesn't generate any \s-1DSP\s0
19195 instructions at the moment.
19196 .IP "\fB\-m5\-32media\fR" 4
19197 .IX Item "-m5-32media"
19198 Generate 32\-bit code for SHmedia.
19199 .IP "\fB\-m5\-32media\-nofpu\fR" 4
19200 .IX Item "-m5-32media-nofpu"
19201 Generate 32\-bit code for SHmedia in such a way that the
19202 floating-point unit is not used.
19203 .IP "\fB\-m5\-64media\fR" 4
19204 .IX Item "-m5-64media"
19205 Generate 64\-bit code for SHmedia.
19206 .IP "\fB\-m5\-64media\-nofpu\fR" 4
19207 .IX Item "-m5-64media-nofpu"
19208 Generate 64\-bit code for SHmedia in such a way that the
19209 floating-point unit is not used.
19210 .IP "\fB\-m5\-compact\fR" 4
19211 .IX Item "-m5-compact"
19212 Generate code for SHcompact.
19213 .IP "\fB\-m5\-compact\-nofpu\fR" 4
19214 .IX Item "-m5-compact-nofpu"
19215 Generate code for SHcompact in such a way that the
19216 floating-point unit is not used.
19217 .IP "\fB\-mb\fR" 4
19218 .IX Item "-mb"
19219 Compile code for the processor in big-endian mode.
19220 .IP "\fB\-ml\fR" 4
19221 .IX Item "-ml"
19222 Compile code for the processor in little-endian mode.
19223 .IP "\fB\-mdalign\fR" 4
19224 .IX Item "-mdalign"
19225 Align doubles at 64\-bit boundaries.  Note that this changes the calling
19226 conventions, and thus some functions from the standard C library do
19227 not work unless you recompile it first with \fB\-mdalign\fR.
19228 .IP "\fB\-mrelax\fR" 4
19229 .IX Item "-mrelax"
19230 Shorten some address references at link time, when possible; uses the
19231 linker option \fB\-relax\fR.
19232 .IP "\fB\-mbigtable\fR" 4
19233 .IX Item "-mbigtable"
19234 Use 32\-bit offsets in \f(CW\*(C`switch\*(C'\fR tables.  The default is to use
19235 16\-bit offsets.
19236 .IP "\fB\-mbitops\fR" 4
19237 .IX Item "-mbitops"
19238 Enable the use of bit manipulation instructions on \s-1SH2A\s0.
19239 .IP "\fB\-mfmovd\fR" 4
19240 .IX Item "-mfmovd"
19241 Enable the use of the instruction \f(CW\*(C`fmovd\*(C'\fR.  Check \fB\-mdalign\fR for
19242 alignment constraints.
19243 .IP "\fB\-mrenesas\fR" 4
19244 .IX Item "-mrenesas"
19245 Comply with the calling conventions defined by Renesas.
19246 .IP "\fB\-mno\-renesas\fR" 4
19247 .IX Item "-mno-renesas"
19248 Comply with the calling conventions defined for \s-1GCC\s0 before the Renesas
19249 conventions were available.  This option is the default for all
19250 targets of the \s-1SH\s0 toolchain.
19251 .IP "\fB\-mnomacsave\fR" 4
19252 .IX Item "-mnomacsave"
19253 Mark the \f(CW\*(C`MAC\*(C'\fR register as call-clobbered, even if
19254 \&\fB\-mrenesas\fR is given.
19255 .IP "\fB\-mieee\fR" 4
19256 .IX Item "-mieee"
19257 .PD 0
19258 .IP "\fB\-mno\-ieee\fR" 4
19259 .IX Item "-mno-ieee"
19260 .PD
19261 Control the \s-1IEEE\s0 compliance of floating-point comparisons, which affects the
19262 handling of cases where the result of a comparison is unordered.  By default
19263 \&\fB\-mieee\fR is implicitly enabled.  If \fB\-ffinite\-math\-only\fR is
19264 enabled \fB\-mno\-ieee\fR is implicitly set, which results in faster
19265 floating-point greater-equal and less-equal comparisons.  The implcit settings
19266 can be overridden by specifying either \fB\-mieee\fR or \fB\-mno\-ieee\fR.
19267 .IP "\fB\-minline\-ic_invalidate\fR" 4
19268 .IX Item "-minline-ic_invalidate"
19269 Inline code to invalidate instruction cache entries after setting up
19270 nested function trampolines.
19271 This option has no effect if \fB\-musermode\fR is in effect and the selected
19272 code generation option (e.g. \fB\-m4\fR) does not allow the use of the \f(CW\*(C`icbi\*(C'\fR
19273 instruction.
19274 If the selected code generation option does not allow the use of the \f(CW\*(C`icbi\*(C'\fR
19275 instruction, and \fB\-musermode\fR is not in effect, the inlined code
19276 manipulates the instruction cache address array directly with an associative
19277 write.  This not only requires privileged mode at run time, but it also
19278 fails if the cache line had been mapped via the \s-1TLB\s0 and has become unmapped.
19279 .IP "\fB\-misize\fR" 4
19280 .IX Item "-misize"
19281 Dump instruction size and location in the assembly code.
19282 .IP "\fB\-mpadstruct\fR" 4
19283 .IX Item "-mpadstruct"
19284 This option is deprecated.  It pads structures to multiple of 4 bytes,
19285 which is incompatible with the \s-1SH\s0 \s-1ABI\s0.
19286 .IP "\fB\-matomic\-model=\fR\fImodel\fR" 4
19287 .IX Item "-matomic-model=model"
19288 Sets the model of atomic operations and additional parameters as a comma
19289 separated list.  For details on the atomic built-in functions see
19290 \&\fB_\|_atomic Builtins\fR.  The following models and parameters are supported:
19291 .RS 4
19292 .IP "\fBnone\fR" 4
19293 .IX Item "none"
19294 Disable compiler generated atomic sequences and emit library calls for atomic
19295 operations.  This is the default if the target is not \f(CW\*(C`sh*\-*\-linux*\*(C'\fR.
19296 .IP "\fBsoft-gusa\fR" 4
19297 .IX Item "soft-gusa"
19298 Generate GNU/Linux compatible gUSA software atomic sequences for the atomic
19299 built-in functions.  The generated atomic sequences require additional support
19300 from the interrupt/exception handling code of the system and are only suitable
19301 for SH3* and SH4* single-core systems.  This option is enabled by default when
19302 the target is \f(CW\*(C`sh*\-*\-linux*\*(C'\fR and SH3* or SH4*.  When the target is \s-1SH4A\s0,
19303 this option also partially utilizes the hardware atomic instructions
19304 \&\f(CW\*(C`movli.l\*(C'\fR and \f(CW\*(C`movco.l\*(C'\fR to create more efficient code, unless
19305 \&\fBstrict\fR is specified.
19306 .IP "\fBsoft-tcb\fR" 4
19307 .IX Item "soft-tcb"
19308 Generate software atomic sequences that use a variable in the thread control
19309 block.  This is a variation of the gUSA sequences which can also be used on
19310 SH1* and SH2* targets.  The generated atomic sequences require additional
19311 support from the interrupt/exception handling code of the system and are only
19312 suitable for single-core systems.  When using this model, the \fBgbr\-offset=\fR
19313 parameter has to be specified as well.
19314 .IP "\fBsoft-imask\fR" 4
19315 .IX Item "soft-imask"
19316 Generate software atomic sequences that temporarily disable interrupts by
19317 setting \f(CW\*(C`SR.IMASK = 1111\*(C'\fR.  This model works only when the program runs
19318 in privileged mode and is only suitable for single-core systems.  Additional
19319 support from the interrupt/exception handling code of the system is not
19320 required.  This model is enabled by default when the target is
19321 \&\f(CW\*(C`sh*\-*\-linux*\*(C'\fR and SH1* or SH2*.
19322 .IP "\fBhard-llcs\fR" 4
19323 .IX Item "hard-llcs"
19324 Generate hardware atomic sequences using the \f(CW\*(C`movli.l\*(C'\fR and \f(CW\*(C`movco.l\*(C'\fR
19325 instructions only.  This is only available on \s-1SH4A\s0 and is suitable for
19326 multi-core systems.  Since the hardware instructions support only 32 bit atomic
19327 variables access to 8 or 16 bit variables is emulated with 32 bit accesses.
19328 Code compiled with this option is also compatible with other software
19329 atomic model interrupt/exception handling systems if executed on an \s-1SH4A\s0
19330 system.  Additional support from the interrupt/exception handling code of the
19331 system is not required for this model.
19332 .IP "\fBgbr\-offset=\fR" 4
19333 .IX Item "gbr-offset="
19334 This parameter specifies the offset in bytes of the variable in the thread
19335 control block structure that should be used by the generated atomic sequences
19336 when the \fBsoft-tcb\fR model has been selected.  For other models this
19337 parameter is ignored.  The specified value must be an integer multiple of four
19338 and in the range 0\-1020.
19339 .IP "\fBstrict\fR" 4
19340 .IX Item "strict"
19341 This parameter prevents mixed usage of multiple atomic models, even if they
19342 are compatible, and makes the compiler generate atomic sequences of the
19343 specified model only.
19344 .RE
19345 .RS 4
19346 .RE
19347 .IP "\fB\-mtas\fR" 4
19348 .IX Item "-mtas"
19349 Generate the \f(CW\*(C`tas.b\*(C'\fR opcode for \f(CW\*(C`_\|_atomic_test_and_set\*(C'\fR.
19350 Notice that depending on the particular hardware and software configuration
19351 this can degrade overall performance due to the operand cache line flushes
19352 that are implied by the \f(CW\*(C`tas.b\*(C'\fR instruction.  On multi-core \s-1SH4A\s0
19353 processors the \f(CW\*(C`tas.b\*(C'\fR instruction must be used with caution since it
19354 can result in data corruption for certain cache configurations.
19355 .IP "\fB\-mprefergot\fR" 4
19356 .IX Item "-mprefergot"
19357 When generating position-independent code, emit function calls using
19358 the Global Offset Table instead of the Procedure Linkage Table.
19359 .IP "\fB\-musermode\fR" 4
19360 .IX Item "-musermode"
19361 .PD 0
19362 .IP "\fB\-mno\-usermode\fR" 4
19363 .IX Item "-mno-usermode"
19364 .PD
19365 Don't allow (allow) the compiler generating privileged mode code.  Specifying
19366 \&\fB\-musermode\fR also implies \fB\-mno\-inline\-ic_invalidate\fR if the
19367 inlined code would not work in user mode.  \fB\-musermode\fR is the default
19368 when the target is \f(CW\*(C`sh*\-*\-linux*\*(C'\fR.  If the target is SH1* or SH2*
19369 \&\fB\-musermode\fR has no effect, since there is no user mode.
19370 .IP "\fB\-multcost=\fR\fInumber\fR" 4
19371 .IX Item "-multcost=number"
19372 Set the cost to assume for a multiply insn.
19373 .IP "\fB\-mdiv=\fR\fIstrategy\fR" 4
19374 .IX Item "-mdiv=strategy"
19375 Set the division strategy to be used for integer division operations.
19376 For SHmedia \fIstrategy\fR can be one of:
19377 .RS 4
19378 .IP "\fBfp\fR" 4
19379 .IX Item "fp"
19380 Performs the operation in floating point.  This has a very high latency,
19381 but needs only a few instructions, so it might be a good choice if
19382 your code has enough easily-exploitable \s-1ILP\s0 to allow the compiler to
19383 schedule the floating-point instructions together with other instructions.
19384 Division by zero causes a floating-point exception.
19385 .IP "\fBinv\fR" 4
19386 .IX Item "inv"
19387 Uses integer operations to calculate the inverse of the divisor,
19388 and then multiplies the dividend with the inverse.  This strategy allows
19389 \&\s-1CSE\s0 and hoisting of the inverse calculation.  Division by zero calculates
19390 an unspecified result, but does not trap.
19391 .IP "\fBinv:minlat\fR" 4
19392 .IX Item "inv:minlat"
19393 A variant of \fBinv\fR where, if no \s-1CSE\s0 or hoisting opportunities
19394 have been found, or if the entire operation has been hoisted to the same
19395 place, the last stages of the inverse calculation are intertwined with the
19396 final multiply to reduce the overall latency, at the expense of using a few
19397 more instructions, and thus offering fewer scheduling opportunities with
19398 other code.
19399 .IP "\fBcall\fR" 4
19400 .IX Item "call"
19401 Calls a library function that usually implements the \fBinv:minlat\fR
19402 strategy.
19403 This gives high code density for \f(CW\*(C`m5\-*media\-nofpu\*(C'\fR compilations.
19404 .IP "\fBcall2\fR" 4
19405 .IX Item "call2"
19406 Uses a different entry point of the same library function, where it
19407 assumes that a pointer to a lookup table has already been set up, which
19408 exposes the pointer load to \s-1CSE\s0 and code hoisting optimizations.
19409 .IP "\fBinv:call\fR" 4
19410 .IX Item "inv:call"
19411 .PD 0
19412 .IP "\fBinv:call2\fR" 4
19413 .IX Item "inv:call2"
19414 .IP "\fBinv:fp\fR" 4
19415 .IX Item "inv:fp"
19416 .PD
19417 Use the \fBinv\fR algorithm for initial
19418 code generation, but if the code stays unoptimized, revert to the \fBcall\fR,
19419 \&\fBcall2\fR, or \fBfp\fR strategies, respectively.  Note that the
19420 potentially-trapping side effect of division by zero is carried by a
19421 separate instruction, so it is possible that all the integer instructions
19422 are hoisted out, but the marker for the side effect stays where it is.
19423 A recombination to floating-point operations or a call is not possible
19424 in that case.
19425 .IP "\fBinv20u\fR" 4
19426 .IX Item "inv20u"
19427 .PD 0
19428 .IP "\fBinv20l\fR" 4
19429 .IX Item "inv20l"
19430 .PD
19431 Variants of the \fBinv:minlat\fR strategy.  In the case
19432 that the inverse calculation is not separated from the multiply, they speed
19433 up division where the dividend fits into 20 bits (plus sign where applicable)
19434 by inserting a test to skip a number of operations in this case; this test
19435 slows down the case of larger dividends.  \fBinv20u\fR assumes the case of a such
19436 a small dividend to be unlikely, and \fBinv20l\fR assumes it to be likely.
19437 .RE
19438 .RS 4
19439 .Sp
19440 For targets other than SHmedia \fIstrategy\fR can be one of:
19441 .IP "\fBcall\-div1\fR" 4
19442 .IX Item "call-div1"
19443 Calls a library function that uses the single-step division instruction
19444 \&\f(CW\*(C`div1\*(C'\fR to perform the operation.  Division by zero calculates an
19445 unspecified result and does not trap.  This is the default except for \s-1SH4\s0,
19446 \&\s-1SH2A\s0 and SHcompact.
19447 .IP "\fBcall-fp\fR" 4
19448 .IX Item "call-fp"
19449 Calls a library function that performs the operation in double precision
19450 floating point.  Division by zero causes a floating-point exception.  This is
19451 the default for SHcompact with \s-1FPU\s0.  Specifying this for targets that do not
19452 have a double precision \s-1FPU\s0 defaults to \f(CW\*(C`call\-div1\*(C'\fR.
19453 .IP "\fBcall-table\fR" 4
19454 .IX Item "call-table"
19455 Calls a library function that uses a lookup table for small divisors and
19456 the \f(CW\*(C`div1\*(C'\fR instruction with case distinction for larger divisors.  Division
19457 by zero calculates an unspecified result and does not trap.  This is the default
19458 for \s-1SH4\s0.  Specifying this for targets that do not have dynamic shift
19459 instructions defaults to \f(CW\*(C`call\-div1\*(C'\fR.
19460 .RE
19461 .RS 4
19462 .Sp
19463 When a division strategy has not been specified the default strategy is
19464 selected based on the current target.  For \s-1SH2A\s0 the default strategy is to
19465 use the \f(CW\*(C`divs\*(C'\fR and \f(CW\*(C`divu\*(C'\fR instructions instead of library function
19466 calls.
19467 .RE
19468 .IP "\fB\-maccumulate\-outgoing\-args\fR" 4
19469 .IX Item "-maccumulate-outgoing-args"
19470 Reserve space once for outgoing arguments in the function prologue rather
19471 than around each call.  Generally beneficial for performance and size.  Also
19472 needed for unwinding to avoid changing the stack frame around conditional code.
19473 .IP "\fB\-mdivsi3_libfunc=\fR\fIname\fR" 4
19474 .IX Item "-mdivsi3_libfunc=name"
19475 Set the name of the library function used for 32\-bit signed division to
19476 \&\fIname\fR.
19477 This only affects the name used in the \fBcall\fR and \fBinv:call\fR
19478 division strategies, and the compiler still expects the same
19479 sets of input/output/clobbered registers as if this option were not present.
19480 .IP "\fB\-mfixed\-range=\fR\fIregister-range\fR" 4
19481 .IX Item "-mfixed-range=register-range"
19482 Generate code treating the given register range as fixed registers.
19483 A fixed register is one that the register allocator can not use.  This is
19484 useful when compiling kernel code.  A register range is specified as
19485 two registers separated by a dash.  Multiple register ranges can be
19486 specified separated by a comma.
19487 .IP "\fB\-mindexed\-addressing\fR" 4
19488 .IX Item "-mindexed-addressing"
19489 Enable the use of the indexed addressing mode for SHmedia32/SHcompact.
19490 This is only safe if the hardware and/or \s-1OS\s0 implement 32\-bit wrap-around
19491 semantics for the indexed addressing mode.  The architecture allows the
19492 implementation of processors with 64\-bit \s-1MMU\s0, which the \s-1OS\s0 could use to
19493 get 32\-bit addressing, but since no current hardware implementation supports
19494 this or any other way to make the indexed addressing mode safe to use in
19495 the 32\-bit \s-1ABI\s0, the default is \fB\-mno\-indexed\-addressing\fR.
19496 .IP "\fB\-mgettrcost=\fR\fInumber\fR" 4
19497 .IX Item "-mgettrcost=number"
19498 Set the cost assumed for the \f(CW\*(C`gettr\*(C'\fR instruction to \fInumber\fR.
19499 The default is 2 if \fB\-mpt\-fixed\fR is in effect, 100 otherwise.
19500 .IP "\fB\-mpt\-fixed\fR" 4
19501 .IX Item "-mpt-fixed"
19502 Assume \f(CW\*(C`pt*\*(C'\fR instructions won't trap.  This generally generates
19503 better-scheduled code, but is unsafe on current hardware.
19504 The current architecture
19505 definition says that \f(CW\*(C`ptabs\*(C'\fR and \f(CW\*(C`ptrel\*(C'\fR trap when the target 
19506 anded with 3 is 3.
19507 This has the unintentional effect of making it unsafe to schedule these
19508 instructions before a branch, or hoist them out of a loop.  For example,
19509 \&\f(CW\*(C`_\|_do_global_ctors\*(C'\fR, a part of \fIlibgcc\fR
19510 that runs constructors at program
19511 startup, calls functions in a list which is delimited by \-1.  With the
19512 \&\fB\-mpt\-fixed\fR option, the \f(CW\*(C`ptabs\*(C'\fR is done before testing against \-1.
19513 That means that all the constructors run a bit more quickly, but when
19514 the loop comes to the end of the list, the program crashes because \f(CW\*(C`ptabs\*(C'\fR
19515 loads \-1 into a target register.
19516 .Sp
19517 Since this option is unsafe for any
19518 hardware implementing the current architecture specification, the default
19519 is \fB\-mno\-pt\-fixed\fR.  Unless specified explicitly with 
19520 \&\fB\-mgettrcost\fR, \fB\-mno\-pt\-fixed\fR also implies \fB\-mgettrcost=100\fR;
19521 this deters register allocation from using target registers for storing
19522 ordinary integers.
19523 .IP "\fB\-minvalid\-symbols\fR" 4
19524 .IX Item "-minvalid-symbols"
19525 Assume symbols might be invalid.  Ordinary function symbols generated by
19526 the compiler are always valid to load with
19527 \&\f(CW\*(C`movi\*(C'\fR/\f(CW\*(C`shori\*(C'\fR/\f(CW\*(C`ptabs\*(C'\fR or
19528 \&\f(CW\*(C`movi\*(C'\fR/\f(CW\*(C`shori\*(C'\fR/\f(CW\*(C`ptrel\*(C'\fR,
19529 but with assembler and/or linker tricks it is possible
19530 to generate symbols that cause \f(CW\*(C`ptabs\*(C'\fR or \f(CW\*(C`ptrel\*(C'\fR to trap.
19531 This option is only meaningful when \fB\-mno\-pt\-fixed\fR is in effect.
19532 It prevents cross-basic-block \s-1CSE\s0, hoisting and most scheduling
19533 of symbol loads.  The default is \fB\-mno\-invalid\-symbols\fR.
19534 .IP "\fB\-mbranch\-cost=\fR\fInum\fR" 4
19535 .IX Item "-mbranch-cost=num"
19536 Assume \fInum\fR to be the cost for a branch instruction.  Higher numbers
19537 make the compiler try to generate more branch-free code if possible.  
19538 If not specified the value is selected depending on the processor type that
19539 is being compiled for.
19540 .IP "\fB\-mzdcbranch\fR" 4
19541 .IX Item "-mzdcbranch"
19542 .PD 0
19543 .IP "\fB\-mno\-zdcbranch\fR" 4
19544 .IX Item "-mno-zdcbranch"
19545 .PD
19546 Assume (do not assume) that zero displacement conditional branch instructions
19547 \&\f(CW\*(C`bt\*(C'\fR and \f(CW\*(C`bf\*(C'\fR are fast.  If \fB\-mzdcbranch\fR is specified, the
19548 compiler prefers zero displacement branch code sequences.  This is
19549 enabled by default when generating code for \s-1SH4\s0 and \s-1SH4A\s0.  It can be explicitly
19550 disabled by specifying \fB\-mno\-zdcbranch\fR.
19551 .IP "\fB\-mcbranch\-force\-delay\-slot\fR" 4
19552 .IX Item "-mcbranch-force-delay-slot"
19553 Force the usage of delay slots for conditional branches, which stuffs the delay
19554 slot with a \f(CW\*(C`nop\*(C'\fR if a suitable instruction can't be found.  By default
19555 this option is disabled.  It can be enabled to work around hardware bugs as
19556 found in the original \s-1SH7055\s0.
19557 .IP "\fB\-mfused\-madd\fR" 4
19558 .IX Item "-mfused-madd"
19559 .PD 0
19560 .IP "\fB\-mno\-fused\-madd\fR" 4
19561 .IX Item "-mno-fused-madd"
19562 .PD
19563 Generate code that uses (does not use) the floating-point multiply and
19564 accumulate instructions.  These instructions are generated by default
19565 if hardware floating point is used.  The machine-dependent
19566 \&\fB\-mfused\-madd\fR option is now mapped to the machine-independent
19567 \&\fB\-ffp\-contract=fast\fR option, and \fB\-mno\-fused\-madd\fR is
19568 mapped to \fB\-ffp\-contract=off\fR.
19569 .IP "\fB\-mfsca\fR" 4
19570 .IX Item "-mfsca"
19571 .PD 0
19572 .IP "\fB\-mno\-fsca\fR" 4
19573 .IX Item "-mno-fsca"
19574 .PD
19575 Allow or disallow the compiler to emit the \f(CW\*(C`fsca\*(C'\fR instruction for sine
19576 and cosine approximations.  The option \fB\-mfsca\fR must be used in
19577 combination with \fB\-funsafe\-math\-optimizations\fR.  It is enabled by default
19578 when generating code for \s-1SH4A\s0.  Using \fB\-mno\-fsca\fR disables sine and cosine
19579 approximations even if \fB\-funsafe\-math\-optimizations\fR is in effect.
19580 .IP "\fB\-mfsrra\fR" 4
19581 .IX Item "-mfsrra"
19582 .PD 0
19583 .IP "\fB\-mno\-fsrra\fR" 4
19584 .IX Item "-mno-fsrra"
19585 .PD
19586 Allow or disallow the compiler to emit the \f(CW\*(C`fsrra\*(C'\fR instruction for
19587 reciprocal square root approximations.  The option \fB\-mfsrra\fR must be used
19588 in combination with \fB\-funsafe\-math\-optimizations\fR and
19589 \&\fB\-ffinite\-math\-only\fR.  It is enabled by default when generating code for
19590 \&\s-1SH4A\s0.  Using \fB\-mno\-fsrra\fR disables reciprocal square root approximations
19591 even if \fB\-funsafe\-math\-optimizations\fR and \fB\-ffinite\-math\-only\fR are
19592 in effect.
19593 .IP "\fB\-mpretend\-cmove\fR" 4
19594 .IX Item "-mpretend-cmove"
19595 Prefer zero-displacement conditional branches for conditional move instruction
19596 patterns.  This can result in faster code on the \s-1SH4\s0 processor.
19597 .PP
19598 \fISolaris 2 Options\fR
19599 .IX Subsection "Solaris 2 Options"
19600 .PP
19601 These \fB\-m\fR options are supported on Solaris 2:
19602 .IP "\fB\-mclear\-hwcap\fR" 4
19603 .IX Item "-mclear-hwcap"
19604 \&\fB\-mclear\-hwcap\fR tells the compiler to remove the hardware
19605 capabilities generated by the Solaris assembler.  This is only necessary
19606 when object files use \s-1ISA\s0 extensions not supported by the current
19607 machine, but check at runtime whether or not to use them.
19608 .IP "\fB\-mimpure\-text\fR" 4
19609 .IX Item "-mimpure-text"
19610 \&\fB\-mimpure\-text\fR, used in addition to \fB\-shared\fR, tells
19611 the compiler to not pass \fB\-z text\fR to the linker when linking a
19612 shared object.  Using this option, you can link position-dependent
19613 code into a shared object.
19614 .Sp
19615 \&\fB\-mimpure\-text\fR suppresses the \*(L"relocations remain against
19616 allocatable but non-writable sections\*(R" linker error message.
19617 However, the necessary relocations trigger copy-on-write, and the
19618 shared object is not actually shared across processes.  Instead of
19619 using \fB\-mimpure\-text\fR, you should compile all source code with
19620 \&\fB\-fpic\fR or \fB\-fPIC\fR.
19621 .PP
19622 These switches are supported in addition to the above on Solaris 2:
19623 .IP "\fB\-pthreads\fR" 4
19624 .IX Item "-pthreads"
19625 Add support for multithreading using the \s-1POSIX\s0 threads library.  This
19626 option sets flags for both the preprocessor and linker.  This option does
19627 not affect the thread safety of object code produced  by the compiler or
19628 that of libraries supplied with it.
19629 .IP "\fB\-pthread\fR" 4
19630 .IX Item "-pthread"
19631 This is a synonym for \fB\-pthreads\fR.
19632 .PP
19633 \fI\s-1SPARC\s0 Options\fR
19634 .IX Subsection "SPARC Options"
19635 .PP
19636 These \fB\-m\fR options are supported on the \s-1SPARC:\s0
19637 .IP "\fB\-mno\-app\-regs\fR" 4
19638 .IX Item "-mno-app-regs"
19639 .PD 0
19640 .IP "\fB\-mapp\-regs\fR" 4
19641 .IX Item "-mapp-regs"
19642 .PD
19643 Specify \fB\-mapp\-regs\fR to generate output using the global registers
19644 2 through 4, which the \s-1SPARC\s0 \s-1SVR4\s0 \s-1ABI\s0 reserves for applications.  Like the
19645 global register 1, each global register 2 through 4 is then treated as an
19646 allocable register that is clobbered by function calls.  This is the default.
19647 .Sp
19648 To be fully \s-1SVR4\s0 ABI-compliant at the cost of some performance loss,
19649 specify \fB\-mno\-app\-regs\fR.  You should compile libraries and system
19650 software with this option.
19651 .IP "\fB\-mflat\fR" 4
19652 .IX Item "-mflat"
19653 .PD 0
19654 .IP "\fB\-mno\-flat\fR" 4
19655 .IX Item "-mno-flat"
19656 .PD
19657 With \fB\-mflat\fR, the compiler does not generate save/restore instructions
19658 and uses a \*(L"flat\*(R" or single register window model.  This model is compatible
19659 with the regular register window model.  The local registers and the input
19660 registers (0\-\-5) are still treated as \*(L"call-saved\*(R" registers and are
19661 saved on the stack as needed.
19662 .Sp
19663 With \fB\-mno\-flat\fR (the default), the compiler generates save/restore
19664 instructions (except for leaf functions).  This is the normal operating mode.
19665 .IP "\fB\-mfpu\fR" 4
19666 .IX Item "-mfpu"
19667 .PD 0
19668 .IP "\fB\-mhard\-float\fR" 4
19669 .IX Item "-mhard-float"
19670 .PD
19671 Generate output containing floating-point instructions.  This is the
19672 default.
19673 .IP "\fB\-mno\-fpu\fR" 4
19674 .IX Item "-mno-fpu"
19675 .PD 0
19676 .IP "\fB\-msoft\-float\fR" 4
19677 .IX Item "-msoft-float"
19678 .PD
19679 Generate output containing library calls for floating point.
19680 \&\fBWarning:\fR the requisite libraries are not available for all \s-1SPARC\s0
19681 targets.  Normally the facilities of the machine's usual C compiler are
19682 used, but this cannot be done directly in cross-compilation.  You must make
19683 your own arrangements to provide suitable library functions for
19684 cross-compilation.  The embedded targets \fBsparc\-*\-aout\fR and
19685 \&\fBsparclite\-*\-*\fR do provide software floating-point support.
19686 .Sp
19687 \&\fB\-msoft\-float\fR changes the calling convention in the output file;
19688 therefore, it is only useful if you compile \fIall\fR of a program with
19689 this option.  In particular, you need to compile \fIlibgcc.a\fR, the
19690 library that comes with \s-1GCC\s0, with \fB\-msoft\-float\fR in order for
19691 this to work.
19692 .IP "\fB\-mhard\-quad\-float\fR" 4
19693 .IX Item "-mhard-quad-float"
19694 Generate output containing quad-word (long double) floating-point
19695 instructions.
19696 .IP "\fB\-msoft\-quad\-float\fR" 4
19697 .IX Item "-msoft-quad-float"
19698 Generate output containing library calls for quad-word (long double)
19699 floating-point instructions.  The functions called are those specified
19700 in the \s-1SPARC\s0 \s-1ABI\s0.  This is the default.
19701 .Sp
19702 As of this writing, there are no \s-1SPARC\s0 implementations that have hardware
19703 support for the quad-word floating-point instructions.  They all invoke
19704 a trap handler for one of these instructions, and then the trap handler
19705 emulates the effect of the instruction.  Because of the trap handler overhead,
19706 this is much slower than calling the \s-1ABI\s0 library routines.  Thus the
19707 \&\fB\-msoft\-quad\-float\fR option is the default.
19708 .IP "\fB\-mno\-unaligned\-doubles\fR" 4
19709 .IX Item "-mno-unaligned-doubles"
19710 .PD 0
19711 .IP "\fB\-munaligned\-doubles\fR" 4
19712 .IX Item "-munaligned-doubles"
19713 .PD
19714 Assume that doubles have 8\-byte alignment.  This is the default.
19715 .Sp
19716 With \fB\-munaligned\-doubles\fR, \s-1GCC\s0 assumes that doubles have 8\-byte
19717 alignment only if they are contained in another type, or if they have an
19718 absolute address.  Otherwise, it assumes they have 4\-byte alignment.
19719 Specifying this option avoids some rare compatibility problems with code
19720 generated by other compilers.  It is not the default because it results
19721 in a performance loss, especially for floating-point code.
19722 .IP "\fB\-muser\-mode\fR" 4
19723 .IX Item "-muser-mode"
19724 .PD 0
19725 .IP "\fB\-mno\-user\-mode\fR" 4
19726 .IX Item "-mno-user-mode"
19727 .PD
19728 Do not generate code that can only run in supervisor mode.  This is relevant
19729 only for the \f(CW\*(C`casa\*(C'\fR instruction emitted for the \s-1LEON3\s0 processor.  This
19730 is the default.
19731 .IP "\fB\-mno\-faster\-structs\fR" 4
19732 .IX Item "-mno-faster-structs"
19733 .PD 0
19734 .IP "\fB\-mfaster\-structs\fR" 4
19735 .IX Item "-mfaster-structs"
19736 .PD
19737 With \fB\-mfaster\-structs\fR, the compiler assumes that structures
19738 should have 8\-byte alignment.  This enables the use of pairs of
19739 \&\f(CW\*(C`ldd\*(C'\fR and \f(CW\*(C`std\*(C'\fR instructions for copies in structure
19740 assignment, in place of twice as many \f(CW\*(C`ld\*(C'\fR and \f(CW\*(C`st\*(C'\fR pairs.
19741 However, the use of this changed alignment directly violates the \s-1SPARC\s0
19742 \&\s-1ABI\s0.  Thus, it's intended only for use on targets where the developer
19743 acknowledges that their resulting code is not directly in line with
19744 the rules of the \s-1ABI\s0.
19745 .IP "\fB\-mcpu=\fR\fIcpu_type\fR" 4
19746 .IX Item "-mcpu=cpu_type"
19747 Set the instruction set, register set, and instruction scheduling parameters
19748 for machine type \fIcpu_type\fR.  Supported values for \fIcpu_type\fR are
19749 \&\fBv7\fR, \fBcypress\fR, \fBv8\fR, \fBsupersparc\fR, \fBhypersparc\fR,
19750 \&\fBleon\fR, \fBleon3\fR, \fBleon3v7\fR, \fBsparclite\fR, \fBf930\fR,
19751 \&\fBf934\fR, \fBsparclite86x\fR, \fBsparclet\fR, \fBtsc701\fR, \fBv9\fR,
19752 \&\fBultrasparc\fR, \fBultrasparc3\fR, \fBniagara\fR, \fBniagara2\fR,
19753 \&\fBniagara3\fR and \fBniagara4\fR.
19754 .Sp
19755 Native Solaris and GNU/Linux toolchains also support the value \fBnative\fR,
19756 which selects the best architecture option for the host processor.
19757 \&\fB\-mcpu=native\fR has no effect if \s-1GCC\s0 does not recognize
19758 the processor.
19759 .Sp
19760 Default instruction scheduling parameters are used for values that select
19761 an architecture and not an implementation.  These are \fBv7\fR, \fBv8\fR,
19762 \&\fBsparclite\fR, \fBsparclet\fR, \fBv9\fR.
19763 .Sp
19764 Here is a list of each supported architecture and their supported
19765 implementations.
19766 .RS 4
19767 .IP "v7" 4
19768 .IX Item "v7"
19769 cypress, leon3v7
19770 .IP "v8" 4
19771 .IX Item "v8"
19772 supersparc, hypersparc, leon, leon3
19773 .IP "sparclite" 4
19774 .IX Item "sparclite"
19775 f930, f934, sparclite86x
19776 .IP "sparclet" 4
19777 .IX Item "sparclet"
19778 tsc701
19779 .IP "v9" 4
19780 .IX Item "v9"
19781 ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4
19782 .RE
19783 .RS 4
19784 .Sp
19785 By default (unless configured otherwise), \s-1GCC\s0 generates code for the V7
19786 variant of the \s-1SPARC\s0 architecture.  With \fB\-mcpu=cypress\fR, the compiler
19787 additionally optimizes it for the Cypress \s-1CY7C602\s0 chip, as used in the
19788 SPARCStation/SPARCServer 3xx series.  This is also appropriate for the older
19789 SPARCStation 1, 2, \s-1IPX\s0 etc.
19790 .Sp
19791 With \fB\-mcpu=v8\fR, \s-1GCC\s0 generates code for the V8 variant of the \s-1SPARC\s0
19792 architecture.  The only difference from V7 code is that the compiler emits
19793 the integer multiply and integer divide instructions which exist in \s-1SPARC\-V8\s0
19794 but not in \s-1SPARC\-V7\s0.  With \fB\-mcpu=supersparc\fR, the compiler additionally
19795 optimizes it for the SuperSPARC chip, as used in the SPARCStation 10, 1000 and
19796 2000 series.
19797 .Sp
19798 With \fB\-mcpu=sparclite\fR, \s-1GCC\s0 generates code for the SPARClite variant of
19799 the \s-1SPARC\s0 architecture.  This adds the integer multiply, integer divide step
19800 and scan (\f(CW\*(C`ffs\*(C'\fR) instructions which exist in SPARClite but not in \s-1SPARC\-V7\s0.
19801 With \fB\-mcpu=f930\fR, the compiler additionally optimizes it for the
19802 Fujitsu \s-1MB86930\s0 chip, which is the original SPARClite, with no \s-1FPU\s0.  With
19803 \&\fB\-mcpu=f934\fR, the compiler additionally optimizes it for the Fujitsu
19804 \&\s-1MB86934\s0 chip, which is the more recent SPARClite with \s-1FPU\s0.
19805 .Sp
19806 With \fB\-mcpu=sparclet\fR, \s-1GCC\s0 generates code for the SPARClet variant of
19807 the \s-1SPARC\s0 architecture.  This adds the integer multiply, multiply/accumulate,
19808 integer divide step and scan (\f(CW\*(C`ffs\*(C'\fR) instructions which exist in SPARClet
19809 but not in \s-1SPARC\-V7\s0.  With \fB\-mcpu=tsc701\fR, the compiler additionally
19810 optimizes it for the \s-1TEMIC\s0 SPARClet chip.
19811 .Sp
19812 With \fB\-mcpu=v9\fR, \s-1GCC\s0 generates code for the V9 variant of the \s-1SPARC\s0
19813 architecture.  This adds 64\-bit integer and floating-point move instructions,
19814 3 additional floating-point condition code registers and conditional move
19815 instructions.  With \fB\-mcpu=ultrasparc\fR, the compiler additionally
19816 optimizes it for the Sun UltraSPARC I/II/IIi chips.  With
19817 \&\fB\-mcpu=ultrasparc3\fR, the compiler additionally optimizes it for the
19818 Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+ chips.  With
19819 \&\fB\-mcpu=niagara\fR, the compiler additionally optimizes it for
19820 Sun UltraSPARC T1 chips.  With \fB\-mcpu=niagara2\fR, the compiler
19821 additionally optimizes it for Sun UltraSPARC T2 chips. With
19822 \&\fB\-mcpu=niagara3\fR, the compiler additionally optimizes it for Sun
19823 UltraSPARC T3 chips.  With \fB\-mcpu=niagara4\fR, the compiler
19824 additionally optimizes it for Sun UltraSPARC T4 chips.
19825 .RE
19826 .IP "\fB\-mtune=\fR\fIcpu_type\fR" 4
19827 .IX Item "-mtune=cpu_type"
19828 Set the instruction scheduling parameters for machine type
19829 \&\fIcpu_type\fR, but do not set the instruction set or register set that the
19830 option \fB\-mcpu=\fR\fIcpu_type\fR does.
19831 .Sp
19832 The same values for \fB\-mcpu=\fR\fIcpu_type\fR can be used for
19833 \&\fB\-mtune=\fR\fIcpu_type\fR, but the only useful values are those
19834 that select a particular \s-1CPU\s0 implementation.  Those are \fBcypress\fR,
19835 \&\fBsupersparc\fR, \fBhypersparc\fR, \fBleon\fR, \fBleon3\fR,
19836 \&\fBleon3v7\fR, \fBf930\fR, \fBf934\fR, \fBsparclite86x\fR, \fBtsc701\fR,
19837 \&\fBultrasparc\fR, \fBultrasparc3\fR, \fBniagara\fR, \fBniagara2\fR,
19838 \&\fBniagara3\fR and \fBniagara4\fR.  With native Solaris and GNU/Linux
19839 toolchains, \fBnative\fR can also be used.
19840 .IP "\fB\-mv8plus\fR" 4
19841 .IX Item "-mv8plus"
19842 .PD 0
19843 .IP "\fB\-mno\-v8plus\fR" 4
19844 .IX Item "-mno-v8plus"
19845 .PD
19846 With \fB\-mv8plus\fR, \s-1GCC\s0 generates code for the \s-1SPARC\-V8+\s0 \s-1ABI\s0.  The
19847 difference from the V8 \s-1ABI\s0 is that the global and out registers are
19848 considered 64 bits wide.  This is enabled by default on Solaris in 32\-bit
19849 mode for all \s-1SPARC\-V9\s0 processors.
19850 .IP "\fB\-mvis\fR" 4
19851 .IX Item "-mvis"
19852 .PD 0
19853 .IP "\fB\-mno\-vis\fR" 4
19854 .IX Item "-mno-vis"
19855 .PD
19856 With \fB\-mvis\fR, \s-1GCC\s0 generates code that takes advantage of the UltraSPARC
19857 Visual Instruction Set extensions.  The default is \fB\-mno\-vis\fR.
19858 .IP "\fB\-mvis2\fR" 4
19859 .IX Item "-mvis2"
19860 .PD 0
19861 .IP "\fB\-mno\-vis2\fR" 4
19862 .IX Item "-mno-vis2"
19863 .PD
19864 With \fB\-mvis2\fR, \s-1GCC\s0 generates code that takes advantage of
19865 version 2.0 of the UltraSPARC Visual Instruction Set extensions.  The
19866 default is \fB\-mvis2\fR when targeting a cpu that supports such
19867 instructions, such as UltraSPARC-III and later.  Setting \fB\-mvis2\fR
19868 also sets \fB\-mvis\fR.
19869 .IP "\fB\-mvis3\fR" 4
19870 .IX Item "-mvis3"
19871 .PD 0
19872 .IP "\fB\-mno\-vis3\fR" 4
19873 .IX Item "-mno-vis3"
19874 .PD
19875 With \fB\-mvis3\fR, \s-1GCC\s0 generates code that takes advantage of
19876 version 3.0 of the UltraSPARC Visual Instruction Set extensions.  The
19877 default is \fB\-mvis3\fR when targeting a cpu that supports such
19878 instructions, such as niagara\-3 and later.  Setting \fB\-mvis3\fR
19879 also sets \fB\-mvis2\fR and \fB\-mvis\fR.
19880 .IP "\fB\-mcbcond\fR" 4
19881 .IX Item "-mcbcond"
19882 .PD 0
19883 .IP "\fB\-mno\-cbcond\fR" 4
19884 .IX Item "-mno-cbcond"
19885 .PD
19886 With \fB\-mcbcond\fR, \s-1GCC\s0 generates code that takes advantage of
19887 compare-and-branch instructions, as defined in the Sparc Architecture 2011.
19888 The default is \fB\-mcbcond\fR when targeting a cpu that supports such
19889 instructions, such as niagara\-4 and later.
19890 .IP "\fB\-mpopc\fR" 4
19891 .IX Item "-mpopc"
19892 .PD 0
19893 .IP "\fB\-mno\-popc\fR" 4
19894 .IX Item "-mno-popc"
19895 .PD
19896 With \fB\-mpopc\fR, \s-1GCC\s0 generates code that takes advantage of the UltraSPARC
19897 population count instruction.  The default is \fB\-mpopc\fR
19898 when targeting a cpu that supports such instructions, such as Niagara\-2 and
19899 later.
19900 .IP "\fB\-mfmaf\fR" 4
19901 .IX Item "-mfmaf"
19902 .PD 0
19903 .IP "\fB\-mno\-fmaf\fR" 4
19904 .IX Item "-mno-fmaf"
19905 .PD
19906 With \fB\-mfmaf\fR, \s-1GCC\s0 generates code that takes advantage of the UltraSPARC
19907 Fused Multiply-Add Floating-point extensions.  The default is \fB\-mfmaf\fR
19908 when targeting a cpu that supports such instructions, such as Niagara\-3 and
19909 later.
19910 .IP "\fB\-mfix\-at697f\fR" 4
19911 .IX Item "-mfix-at697f"
19912 Enable the documented workaround for the single erratum of the Atmel \s-1AT697F\s0
19913 processor (which corresponds to erratum #13 of the \s-1AT697E\s0 processor).
19914 .IP "\fB\-mfix\-ut699\fR" 4
19915 .IX Item "-mfix-ut699"
19916 Enable the documented workarounds for the floating-point errata and the data
19917 cache nullify errata of the \s-1UT699\s0 processor.
19918 .PP
19919 These \fB\-m\fR options are supported in addition to the above
19920 on \s-1SPARC\-V9\s0 processors in 64\-bit environments:
19921 .IP "\fB\-m32\fR" 4
19922 .IX Item "-m32"
19923 .PD 0
19924 .IP "\fB\-m64\fR" 4
19925 .IX Item "-m64"
19926 .PD
19927 Generate code for a 32\-bit or 64\-bit environment.
19928 The 32\-bit environment sets int, long and pointer to 32 bits.
19929 The 64\-bit environment sets int to 32 bits and long and pointer
19930 to 64 bits.
19931 .IP "\fB\-mcmodel=\fR\fIwhich\fR" 4
19932 .IX Item "-mcmodel=which"
19933 Set the code model to one of
19934 .RS 4
19935 .IP "\fBmedlow\fR" 4
19936 .IX Item "medlow"
19937 The Medium/Low code model: 64\-bit addresses, programs
19938 must be linked in the low 32 bits of memory.  Programs can be statically
19939 or dynamically linked.
19940 .IP "\fBmedmid\fR" 4
19941 .IX Item "medmid"
19942 The Medium/Middle code model: 64\-bit addresses, programs
19943 must be linked in the low 44 bits of memory, the text and data segments must
19944 be less than 2GB in size and the data segment must be located within 2GB of
19945 the text segment.
19946 .IP "\fBmedany\fR" 4
19947 .IX Item "medany"
19948 The Medium/Anywhere code model: 64\-bit addresses, programs
19949 may be linked anywhere in memory, the text and data segments must be less
19950 than 2GB in size and the data segment must be located within 2GB of the
19951 text segment.
19952 .IP "\fBembmedany\fR" 4
19953 .IX Item "embmedany"
19954 The Medium/Anywhere code model for embedded systems:
19955 64\-bit addresses, the text and data segments must be less than 2GB in
19956 size, both starting anywhere in memory (determined at link time).  The
19957 global register \f(CW%g4\fR points to the base of the data segment.  Programs
19958 are statically linked and \s-1PIC\s0 is not supported.
19959 .RE
19960 .RS 4
19961 .RE
19962 .IP "\fB\-mmemory\-model=\fR\fImem-model\fR" 4
19963 .IX Item "-mmemory-model=mem-model"
19964 Set the memory model in force on the processor to one of
19965 .RS 4
19966 .IP "\fBdefault\fR" 4
19967 .IX Item "default"
19968 The default memory model for the processor and operating system.
19969 .IP "\fBrmo\fR" 4
19970 .IX Item "rmo"
19971 Relaxed Memory Order
19972 .IP "\fBpso\fR" 4
19973 .IX Item "pso"
19974 Partial Store Order
19975 .IP "\fBtso\fR" 4
19976 .IX Item "tso"
19977 Total Store Order
19978 .IP "\fBsc\fR" 4
19979 .IX Item "sc"
19980 Sequential Consistency
19981 .RE
19982 .RS 4
19983 .Sp
19984 These memory models are formally defined in Appendix D of the Sparc V9
19985 architecture manual, as set in the processor's \f(CW\*(C`PSTATE.MM\*(C'\fR field.
19986 .RE
19987 .IP "\fB\-mstack\-bias\fR" 4
19988 .IX Item "-mstack-bias"
19989 .PD 0
19990 .IP "\fB\-mno\-stack\-bias\fR" 4
19991 .IX Item "-mno-stack-bias"
19992 .PD
19993 With \fB\-mstack\-bias\fR, \s-1GCC\s0 assumes that the stack pointer, and
19994 frame pointer if present, are offset by \-2047 which must be added back
19995 when making stack frame references.  This is the default in 64\-bit mode.
19996 Otherwise, assume no such offset is present.
19997 .PP
19998 \fI\s-1SPU\s0 Options\fR
19999 .IX Subsection "SPU Options"
20000 .PP
20001 These \fB\-m\fR options are supported on the \s-1SPU:\s0
20002 .IP "\fB\-mwarn\-reloc\fR" 4
20003 .IX Item "-mwarn-reloc"
20004 .PD 0
20005 .IP "\fB\-merror\-reloc\fR" 4
20006 .IX Item "-merror-reloc"
20007 .PD
20008 The loader for \s-1SPU\s0 does not handle dynamic relocations.  By default, \s-1GCC\s0
20009 gives an error when it generates code that requires a dynamic
20010 relocation.  \fB\-mno\-error\-reloc\fR disables the error,
20011 \&\fB\-mwarn\-reloc\fR generates a warning instead.
20012 .IP "\fB\-msafe\-dma\fR" 4
20013 .IX Item "-msafe-dma"
20014 .PD 0
20015 .IP "\fB\-munsafe\-dma\fR" 4
20016 .IX Item "-munsafe-dma"
20017 .PD
20018 Instructions that initiate or test completion of \s-1DMA\s0 must not be
20019 reordered with respect to loads and stores of the memory that is being
20020 accessed.
20021 With \fB\-munsafe\-dma\fR you must use the \f(CW\*(C`volatile\*(C'\fR keyword to protect
20022 memory accesses, but that can lead to inefficient code in places where the
20023 memory is known to not change.  Rather than mark the memory as volatile,
20024 you can use \fB\-msafe\-dma\fR to tell the compiler to treat
20025 the \s-1DMA\s0 instructions as potentially affecting all memory.
20026 .IP "\fB\-mbranch\-hints\fR" 4
20027 .IX Item "-mbranch-hints"
20028 By default, \s-1GCC\s0 generates a branch hint instruction to avoid
20029 pipeline stalls for always-taken or probably-taken branches.  A hint
20030 is not generated closer than 8 instructions away from its branch.
20031 There is little reason to disable them, except for debugging purposes,
20032 or to make an object a little bit smaller.
20033 .IP "\fB\-msmall\-mem\fR" 4
20034 .IX Item "-msmall-mem"
20035 .PD 0
20036 .IP "\fB\-mlarge\-mem\fR" 4
20037 .IX Item "-mlarge-mem"
20038 .PD
20039 By default, \s-1GCC\s0 generates code assuming that addresses are never larger
20040 than 18 bits.  With \fB\-mlarge\-mem\fR code is generated that assumes
20041 a full 32\-bit address.
20042 .IP "\fB\-mstdmain\fR" 4
20043 .IX Item "-mstdmain"
20044 By default, \s-1GCC\s0 links against startup code that assumes the SPU-style
20045 main function interface (which has an unconventional parameter list).
20046 With \fB\-mstdmain\fR, \s-1GCC\s0 links your program against startup
20047 code that assumes a C99\-style interface to \f(CW\*(C`main\*(C'\fR, including a
20048 local copy of \f(CW\*(C`argv\*(C'\fR strings.
20049 .IP "\fB\-mfixed\-range=\fR\fIregister-range\fR" 4
20050 .IX Item "-mfixed-range=register-range"
20051 Generate code treating the given register range as fixed registers.
20052 A fixed register is one that the register allocator cannot use.  This is
20053 useful when compiling kernel code.  A register range is specified as
20054 two registers separated by a dash.  Multiple register ranges can be
20055 specified separated by a comma.
20056 .IP "\fB\-mea32\fR" 4
20057 .IX Item "-mea32"
20058 .PD 0
20059 .IP "\fB\-mea64\fR" 4
20060 .IX Item "-mea64"
20061 .PD
20062 Compile code assuming that pointers to the \s-1PPU\s0 address space accessed
20063 via the \f(CW\*(C`_\|_ea\*(C'\fR named address space qualifier are either 32 or 64
20064 bits wide.  The default is 32 bits.  As this is an ABI-changing option,
20065 all object code in an executable must be compiled with the same setting.
20066 .IP "\fB\-maddress\-space\-conversion\fR" 4
20067 .IX Item "-maddress-space-conversion"
20068 .PD 0
20069 .IP "\fB\-mno\-address\-space\-conversion\fR" 4
20070 .IX Item "-mno-address-space-conversion"
20071 .PD
20072 Allow/disallow treating the \f(CW\*(C`_\|_ea\*(C'\fR address space as superset
20073 of the generic address space.  This enables explicit type casts
20074 between \f(CW\*(C`_\|_ea\*(C'\fR and generic pointer as well as implicit
20075 conversions of generic pointers to \f(CW\*(C`_\|_ea\*(C'\fR pointers.  The
20076 default is to allow address space pointer conversions.
20077 .IP "\fB\-mcache\-size=\fR\fIcache-size\fR" 4
20078 .IX Item "-mcache-size=cache-size"
20079 This option controls the version of libgcc that the compiler links to an
20080 executable and selects a software-managed cache for accessing variables
20081 in the \f(CW\*(C`_\|_ea\*(C'\fR address space with a particular cache size.  Possible
20082 options for \fIcache-size\fR are \fB8\fR, \fB16\fR, \fB32\fR, \fB64\fR
20083 and \fB128\fR.  The default cache size is 64KB.
20084 .IP "\fB\-matomic\-updates\fR" 4
20085 .IX Item "-matomic-updates"
20086 .PD 0
20087 .IP "\fB\-mno\-atomic\-updates\fR" 4
20088 .IX Item "-mno-atomic-updates"
20089 .PD
20090 This option controls the version of libgcc that the compiler links to an
20091 executable and selects whether atomic updates to the software-managed
20092 cache of PPU-side variables are used.  If you use atomic updates, changes
20093 to a \s-1PPU\s0 variable from \s-1SPU\s0 code using the \f(CW\*(C`_\|_ea\*(C'\fR named address space
20094 qualifier do not interfere with changes to other \s-1PPU\s0 variables residing
20095 in the same cache line from \s-1PPU\s0 code.  If you do not use atomic updates,
20096 such interference may occur; however, writing back cache lines is
20097 more efficient.  The default behavior is to use atomic updates.
20098 .IP "\fB\-mdual\-nops\fR" 4
20099 .IX Item "-mdual-nops"
20100 .PD 0
20101 .IP "\fB\-mdual\-nops=\fR\fIn\fR" 4
20102 .IX Item "-mdual-nops=n"
20103 .PD
20104 By default, \s-1GCC\s0 inserts nops to increase dual issue when it expects
20105 it to increase performance.  \fIn\fR can be a value from 0 to 10.  A
20106 smaller \fIn\fR inserts fewer nops.  10 is the default, 0 is the
20107 same as \fB\-mno\-dual\-nops\fR.  Disabled with \fB\-Os\fR.
20108 .IP "\fB\-mhint\-max\-nops=\fR\fIn\fR" 4
20109 .IX Item "-mhint-max-nops=n"
20110 Maximum number of nops to insert for a branch hint.  A branch hint must
20111 be at least 8 instructions away from the branch it is affecting.  \s-1GCC\s0
20112 inserts up to \fIn\fR nops to enforce this, otherwise it does not
20113 generate the branch hint.
20114 .IP "\fB\-mhint\-max\-distance=\fR\fIn\fR" 4
20115 .IX Item "-mhint-max-distance=n"
20116 The encoding of the branch hint instruction limits the hint to be within
20117 256 instructions of the branch it is affecting.  By default, \s-1GCC\s0 makes
20118 sure it is within 125.
20119 .IP "\fB\-msafe\-hints\fR" 4
20120 .IX Item "-msafe-hints"
20121 Work around a hardware bug that causes the \s-1SPU\s0 to stall indefinitely.
20122 By default, \s-1GCC\s0 inserts the \f(CW\*(C`hbrp\*(C'\fR instruction to make sure
20123 this stall won't happen.
20124 .PP
20125 \fIOptions for System V\fR
20126 .IX Subsection "Options for System V"
20127 .PP
20128 These additional options are available on System V Release 4 for
20129 compatibility with other compilers on those systems:
20130 .IP "\fB\-G\fR" 4
20131 .IX Item "-G"
20132 Create a shared object.
20133 It is recommended that \fB\-symbolic\fR or \fB\-shared\fR be used instead.
20134 .IP "\fB\-Qy\fR" 4
20135 .IX Item "-Qy"
20136 Identify the versions of each tool used by the compiler, in a
20137 \&\f(CW\*(C`.ident\*(C'\fR assembler directive in the output.
20138 .IP "\fB\-Qn\fR" 4
20139 .IX Item "-Qn"
20140 Refrain from adding \f(CW\*(C`.ident\*(C'\fR directives to the output file (this is
20141 the default).
20142 .IP "\fB\-YP,\fR\fIdirs\fR" 4
20143 .IX Item "-YP,dirs"
20144 Search the directories \fIdirs\fR, and no others, for libraries
20145 specified with \fB\-l\fR.
20146 .IP "\fB\-Ym,\fR\fIdir\fR" 4
20147 .IX Item "-Ym,dir"
20148 Look in the directory \fIdir\fR to find the M4 preprocessor.
20149 The assembler uses this option.
20150 .PP
20151 \fITILE-Gx Options\fR
20152 .IX Subsection "TILE-Gx Options"
20153 .PP
20154 These \fB\-m\fR options are supported on the TILE-Gx:
20155 .IP "\fB\-mcmodel=small\fR" 4
20156 .IX Item "-mcmodel=small"
20157 Generate code for the small model.  The distance for direct calls is
20158 limited to 500M in either direction.  PC-relative addresses are 32
20159 bits.  Absolute addresses support the full address range.
20160 .IP "\fB\-mcmodel=large\fR" 4
20161 .IX Item "-mcmodel=large"
20162 Generate code for the large model.  There is no limitation on call
20163 distance, pc-relative addresses, or absolute addresses.
20164 .IP "\fB\-mcpu=\fR\fIname\fR" 4
20165 .IX Item "-mcpu=name"
20166 Selects the type of \s-1CPU\s0 to be targeted.  Currently the only supported
20167 type is \fBtilegx\fR.
20168 .IP "\fB\-m32\fR" 4
20169 .IX Item "-m32"
20170 .PD 0
20171 .IP "\fB\-m64\fR" 4
20172 .IX Item "-m64"
20173 .PD
20174 Generate code for a 32\-bit or 64\-bit environment.  The 32\-bit
20175 environment sets int, long, and pointer to 32 bits.  The 64\-bit
20176 environment sets int to 32 bits and long and pointer to 64 bits.
20177 .IP "\fB\-mbig\-endian\fR" 4
20178 .IX Item "-mbig-endian"
20179 .PD 0
20180 .IP "\fB\-mlittle\-endian\fR" 4
20181 .IX Item "-mlittle-endian"
20182 .PD
20183 Generate code in big/little endian mode, respectively.
20184 .PP
20185 \fITILEPro Options\fR
20186 .IX Subsection "TILEPro Options"
20187 .PP
20188 These \fB\-m\fR options are supported on the TILEPro:
20189 .IP "\fB\-mcpu=\fR\fIname\fR" 4
20190 .IX Item "-mcpu=name"
20191 Selects the type of \s-1CPU\s0 to be targeted.  Currently the only supported
20192 type is \fBtilepro\fR.
20193 .IP "\fB\-m32\fR" 4
20194 .IX Item "-m32"
20195 Generate code for a 32\-bit environment, which sets int, long, and
20196 pointer to 32 bits.  This is the only supported behavior so the flag
20197 is essentially ignored.
20198 .PP
20199 \fIV850 Options\fR
20200 .IX Subsection "V850 Options"
20201 .PP
20202 These \fB\-m\fR options are defined for V850 implementations:
20203 .IP "\fB\-mlong\-calls\fR" 4
20204 .IX Item "-mlong-calls"
20205 .PD 0
20206 .IP "\fB\-mno\-long\-calls\fR" 4
20207 .IX Item "-mno-long-calls"
20208 .PD
20209 Treat all calls as being far away (near).  If calls are assumed to be
20210 far away, the compiler always loads the function's address into a
20211 register, and calls indirect through the pointer.
20212 .IP "\fB\-mno\-ep\fR" 4
20213 .IX Item "-mno-ep"
20214 .PD 0
20215 .IP "\fB\-mep\fR" 4
20216 .IX Item "-mep"
20217 .PD
20218 Do not optimize (do optimize) basic blocks that use the same index
20219 pointer 4 or more times to copy pointer into the \f(CW\*(C`ep\*(C'\fR register, and
20220 use the shorter \f(CW\*(C`sld\*(C'\fR and \f(CW\*(C`sst\*(C'\fR instructions.  The \fB\-mep\fR
20221 option is on by default if you optimize.
20222 .IP "\fB\-mno\-prolog\-function\fR" 4
20223 .IX Item "-mno-prolog-function"
20224 .PD 0
20225 .IP "\fB\-mprolog\-function\fR" 4
20226 .IX Item "-mprolog-function"
20227 .PD
20228 Do not use (do use) external functions to save and restore registers
20229 at the prologue and epilogue of a function.  The external functions
20230 are slower, but use less code space if more than one function saves
20231 the same number of registers.  The \fB\-mprolog\-function\fR option
20232 is on by default if you optimize.
20233 .IP "\fB\-mspace\fR" 4
20234 .IX Item "-mspace"
20235 Try to make the code as small as possible.  At present, this just turns
20236 on the \fB\-mep\fR and \fB\-mprolog\-function\fR options.
20237 .IP "\fB\-mtda=\fR\fIn\fR" 4
20238 .IX Item "-mtda=n"
20239 Put static or global variables whose size is \fIn\fR bytes or less into
20240 the tiny data area that register \f(CW\*(C`ep\*(C'\fR points to.  The tiny data
20241 area can hold up to 256 bytes in total (128 bytes for byte references).
20242 .IP "\fB\-msda=\fR\fIn\fR" 4
20243 .IX Item "-msda=n"
20244 Put static or global variables whose size is \fIn\fR bytes or less into
20245 the small data area that register \f(CW\*(C`gp\*(C'\fR points to.  The small data
20246 area can hold up to 64 kilobytes.
20247 .IP "\fB\-mzda=\fR\fIn\fR" 4
20248 .IX Item "-mzda=n"
20249 Put static or global variables whose size is \fIn\fR bytes or less into
20250 the first 32 kilobytes of memory.
20251 .IP "\fB\-mv850\fR" 4
20252 .IX Item "-mv850"
20253 Specify that the target processor is the V850.
20254 .IP "\fB\-mv850e3v5\fR" 4
20255 .IX Item "-mv850e3v5"
20256 Specify that the target processor is the V850E3V5.  The preprocessor
20257 constant \f(CW\*(C`_\|_v850e3v5_\|_\*(C'\fR is defined if this option is used.
20258 .IP "\fB\-mv850e2v4\fR" 4
20259 .IX Item "-mv850e2v4"
20260 Specify that the target processor is the V850E3V5.  This is an alias for
20261 the \fB\-mv850e3v5\fR option.
20262 .IP "\fB\-mv850e2v3\fR" 4
20263 .IX Item "-mv850e2v3"
20264 Specify that the target processor is the V850E2V3.  The preprocessor
20265 constant \f(CW\*(C`_\|_v850e2v3_\|_\*(C'\fR is defined if this option is used.
20266 .IP "\fB\-mv850e2\fR" 4
20267 .IX Item "-mv850e2"
20268 Specify that the target processor is the V850E2.  The preprocessor
20269 constant \f(CW\*(C`_\|_v850e2_\|_\*(C'\fR is defined if this option is used.
20270 .IP "\fB\-mv850e1\fR" 4
20271 .IX Item "-mv850e1"
20272 Specify that the target processor is the V850E1.  The preprocessor
20273 constants \f(CW\*(C`_\|_v850e1_\|_\*(C'\fR and \f(CW\*(C`_\|_v850e_\|_\*(C'\fR are defined if
20274 this option is used.
20275 .IP "\fB\-mv850es\fR" 4
20276 .IX Item "-mv850es"
20277 Specify that the target processor is the V850ES.  This is an alias for
20278 the \fB\-mv850e1\fR option.
20279 .IP "\fB\-mv850e\fR" 4
20280 .IX Item "-mv850e"
20281 Specify that the target processor is the V850E.  The preprocessor
20282 constant \f(CW\*(C`_\|_v850e_\|_\*(C'\fR is defined if this option is used.
20283 .Sp
20284 If neither \fB\-mv850\fR nor \fB\-mv850e\fR nor \fB\-mv850e1\fR
20285 nor \fB\-mv850e2\fR nor \fB\-mv850e2v3\fR nor \fB\-mv850e3v5\fR
20286 are defined then a default target processor is chosen and the
20287 relevant \fB_\|_v850*_\|_\fR preprocessor constant is defined.
20288 .Sp
20289 The preprocessor constants \f(CW\*(C`_\|_v850\*(C'\fR and \f(CW\*(C`_\|_v851_\|_\*(C'\fR are always
20290 defined, regardless of which processor variant is the target.
20291 .IP "\fB\-mdisable\-callt\fR" 4
20292 .IX Item "-mdisable-callt"
20293 .PD 0
20294 .IP "\fB\-mno\-disable\-callt\fR" 4
20295 .IX Item "-mno-disable-callt"
20296 .PD
20297 This option suppresses generation of the \f(CW\*(C`CALLT\*(C'\fR instruction for the
20298 v850e, v850e1, v850e2, v850e2v3 and v850e3v5 flavors of the v850
20299 architecture.
20300 .Sp
20301 This option is enabled by default when the \s-1RH850\s0 \s-1ABI\s0 is
20302 in use (see \fB\-mrh850\-abi\fR), and disabled by default when the
20303 \&\s-1GCC\s0 \s-1ABI\s0 is in use.  If \f(CW\*(C`CALLT\*(C'\fR instructions are being generated
20304 then the C preprocessor symbol \f(CW\*(C`_\|_V850_CALLT_\|_\*(C'\fR is defined.
20305 .IP "\fB\-mrelax\fR" 4
20306 .IX Item "-mrelax"
20307 .PD 0
20308 .IP "\fB\-mno\-relax\fR" 4
20309 .IX Item "-mno-relax"
20310 .PD
20311 Pass on (or do not pass on) the \fB\-mrelax\fR command-line option
20312 to the assembler.
20313 .IP "\fB\-mlong\-jumps\fR" 4
20314 .IX Item "-mlong-jumps"
20315 .PD 0
20316 .IP "\fB\-mno\-long\-jumps\fR" 4
20317 .IX Item "-mno-long-jumps"
20318 .PD
20319 Disable (or re-enable) the generation of PC-relative jump instructions.
20320 .IP "\fB\-msoft\-float\fR" 4
20321 .IX Item "-msoft-float"
20322 .PD 0
20323 .IP "\fB\-mhard\-float\fR" 4
20324 .IX Item "-mhard-float"
20325 .PD
20326 Disable (or re-enable) the generation of hardware floating point
20327 instructions.  This option is only significant when the target
20328 architecture is \fBV850E2V3\fR or higher.  If hardware floating point
20329 instructions are being generated then the C preprocessor symbol
20330 \&\f(CW\*(C`_\|_FPU_OK_\|_\*(C'\fR is defined, otherwise the symbol
20331 \&\f(CW\*(C`_\|_NO_FPU_\|_\*(C'\fR is defined.
20332 .IP "\fB\-mloop\fR" 4
20333 .IX Item "-mloop"
20334 Enables the use of the e3v5 \s-1LOOP\s0 instruction.  The use of this
20335 instruction is not enabled by default when the e3v5 architecture is
20336 selected because its use is still experimental.
20337 .IP "\fB\-mrh850\-abi\fR" 4
20338 .IX Item "-mrh850-abi"
20339 .PD 0
20340 .IP "\fB\-mghs\fR" 4
20341 .IX Item "-mghs"
20342 .PD
20343 Enables support for the \s-1RH850\s0 version of the V850 \s-1ABI\s0.  This is the
20344 default.  With this version of the \s-1ABI\s0 the following rules apply:
20345 .RS 4
20346 .IP "*" 4
20347 Integer sized structures and unions are returned via a memory pointer
20348 rather than a register.
20349 .IP "*" 4
20350 Large structures and unions (more than 8 bytes in size) are passed by
20351 value.
20352 .IP "*" 4
20353 Functions are aligned to 16\-bit boundaries.
20354 .IP "*" 4
20355 The \fB\-m8byte\-align\fR command-line option is supported.
20356 .IP "*" 4
20357 The \fB\-mdisable\-callt\fR command-line option is enabled by
20358 default.  The \fB\-mno\-disable\-callt\fR command-line option is not
20359 supported.
20360 .RE
20361 .RS 4
20362 .Sp
20363 When this version of the \s-1ABI\s0 is enabled the C preprocessor symbol
20364 \&\f(CW\*(C`_\|_V850_RH850_ABI_\|_\*(C'\fR is defined.
20365 .RE
20366 .IP "\fB\-mgcc\-abi\fR" 4
20367 .IX Item "-mgcc-abi"
20368 Enables support for the old \s-1GCC\s0 version of the V850 \s-1ABI\s0.  With this
20369 version of the \s-1ABI\s0 the following rules apply:
20370 .RS 4
20371 .IP "*" 4
20372 Integer sized structures and unions are returned in register \f(CW\*(C`r10\*(C'\fR.
20373 .IP "*" 4
20374 Large structures and unions (more than 8 bytes in size) are passed by
20375 reference.
20376 .IP "*" 4
20377 Functions are aligned to 32\-bit boundaries, unless optimizing for
20378 size.
20379 .IP "*" 4
20380 The \fB\-m8byte\-align\fR command-line option is not supported.
20381 .IP "*" 4
20382 The \fB\-mdisable\-callt\fR command-line option is supported but not
20383 enabled by default.
20384 .RE
20385 .RS 4
20386 .Sp
20387 When this version of the \s-1ABI\s0 is enabled the C preprocessor symbol
20388 \&\f(CW\*(C`_\|_V850_GCC_ABI_\|_\*(C'\fR is defined.
20389 .RE
20390 .IP "\fB\-m8byte\-align\fR" 4
20391 .IX Item "-m8byte-align"
20392 .PD 0
20393 .IP "\fB\-mno\-8byte\-align\fR" 4
20394 .IX Item "-mno-8byte-align"
20395 .PD
20396 Enables support for \f(CW\*(C`double\*(C'\fR and \f(CW\*(C`long long\*(C'\fR types to be
20397 aligned on 8\-byte boundaries.  The default is to restrict the
20398 alignment of all objects to at most 4\-bytes.  When
20399 \&\fB\-m8byte\-align\fR is in effect the C preprocessor symbol
20400 \&\f(CW\*(C`_\|_V850_8BYTE_ALIGN_\|_\*(C'\fR is defined.
20401 .IP "\fB\-mbig\-switch\fR" 4
20402 .IX Item "-mbig-switch"
20403 Generate code suitable for big switch tables.  Use this option only if
20404 the assembler/linker complain about out of range branches within a switch
20405 table.
20406 .IP "\fB\-mapp\-regs\fR" 4
20407 .IX Item "-mapp-regs"
20408 This option causes r2 and r5 to be used in the code generated by
20409 the compiler.  This setting is the default.
20410 .IP "\fB\-mno\-app\-regs\fR" 4
20411 .IX Item "-mno-app-regs"
20412 This option causes r2 and r5 to be treated as fixed registers.
20413 .PP
20414 \fI\s-1VAX\s0 Options\fR
20415 .IX Subsection "VAX Options"
20416 .PP
20417 These \fB\-m\fR options are defined for the \s-1VAX:\s0
20418 .IP "\fB\-munix\fR" 4
20419 .IX Item "-munix"
20420 Do not output certain jump instructions (\f(CW\*(C`aobleq\*(C'\fR and so on)
20421 that the Unix assembler for the \s-1VAX\s0 cannot handle across long
20422 ranges.
20423 .IP "\fB\-mgnu\fR" 4
20424 .IX Item "-mgnu"
20425 Do output those jump instructions, on the assumption that the
20426 \&\s-1GNU\s0 assembler is being used.
20427 .IP "\fB\-mg\fR" 4
20428 .IX Item "-mg"
20429 Output code for G\-format floating-point numbers instead of D\-format.
20430 .PP
20431 \fIVisium Options\fR
20432 .IX Subsection "Visium Options"
20433 .IP "\fB\-mdebug\fR" 4
20434 .IX Item "-mdebug"
20435 A program which performs file I/O and is destined to run on an \s-1MCM\s0 target
20436 should be linked with this option.  It causes the libraries libc.a and
20437 libdebug.a to be linked.  The program should be run on the target under
20438 the control of the \s-1GDB\s0 remote debugging stub.
20439 .IP "\fB\-msim\fR" 4
20440 .IX Item "-msim"
20441 A program which performs file I/O and is destined to run on the simulator
20442 should be linked with option.  This causes libraries libc.a and libsim.a to
20443 be linked.
20444 .IP "\fB\-mfpu\fR" 4
20445 .IX Item "-mfpu"
20446 .PD 0
20447 .IP "\fB\-mhard\-float\fR" 4
20448 .IX Item "-mhard-float"
20449 .PD
20450 Generate code containing floating-point instructions.  This is the
20451 default.
20452 .IP "\fB\-mno\-fpu\fR" 4
20453 .IX Item "-mno-fpu"
20454 .PD 0
20455 .IP "\fB\-msoft\-float\fR" 4
20456 .IX Item "-msoft-float"
20457 .PD
20458 Generate code containing library calls for floating-point.
20459 .Sp
20460 \&\fB\-msoft\-float\fR changes the calling convention in the output file;
20461 therefore, it is only useful if you compile \fIall\fR of a program with
20462 this option.  In particular, you need to compile \fIlibgcc.a\fR, the
20463 library that comes with \s-1GCC\s0, with \fB\-msoft\-float\fR in order for
20464 this to work.
20465 .IP "\fB\-mcpu=\fR\fIcpu_type\fR" 4
20466 .IX Item "-mcpu=cpu_type"
20467 Set the instruction set, register set, and instruction scheduling parameters
20468 for machine type \fIcpu_type\fR.  Supported values for \fIcpu_type\fR are
20469 \&\fBmcm\fR, \fBgr5\fR and \fBgr6\fR.
20470 .Sp
20471 \&\fBmcm\fR is a synonym of \fBgr5\fR present for backward compatibility.
20472 .Sp
20473 By default (unless configured otherwise), \s-1GCC\s0 generates code for the \s-1GR5\s0
20474 variant of the Visium architecture.
20475 .Sp
20476 With \fB\-mcpu=gr6\fR, \s-1GCC\s0 generates code for the \s-1GR6\s0 variant of the Visium
20477 architecture.  The only difference from \s-1GR5\s0 code is that the compiler will
20478 generate block move instructions.
20479 .IP "\fB\-mtune=\fR\fIcpu_type\fR" 4
20480 .IX Item "-mtune=cpu_type"
20481 Set the instruction scheduling parameters for machine type \fIcpu_type\fR,
20482 but do not set the instruction set or register set that the option
20483 \&\fB\-mcpu=\fR\fIcpu_type\fR would.
20484 .IP "\fB\-msv\-mode\fR" 4
20485 .IX Item "-msv-mode"
20486 Generate code for the supervisor mode, where there are no restrictions on
20487 the access to general registers.  This is the default.
20488 .IP "\fB\-muser\-mode\fR" 4
20489 .IX Item "-muser-mode"
20490 Generate code for the user mode, where the access to some general registers
20491 is forbidden: on the \s-1GR5\s0, registers r24 to r31 cannot be accessed in this
20492 mode; on the \s-1GR6\s0, only registers r29 to r31 are affected.
20493 .PP
20494 \fI\s-1VMS\s0 Options\fR
20495 .IX Subsection "VMS Options"
20496 .PP
20497 These \fB\-m\fR options are defined for the \s-1VMS\s0 implementations:
20498 .IP "\fB\-mvms\-return\-codes\fR" 4
20499 .IX Item "-mvms-return-codes"
20500 Return \s-1VMS\s0 condition codes from \f(CW\*(C`main\*(C'\fR. The default is to return POSIX-style
20501 condition (e.g. error) codes.
20502 .IP "\fB\-mdebug\-main=\fR\fIprefix\fR" 4
20503 .IX Item "-mdebug-main=prefix"
20504 Flag the first routine whose name starts with \fIprefix\fR as the main
20505 routine for the debugger.
20506 .IP "\fB\-mmalloc64\fR" 4
20507 .IX Item "-mmalloc64"
20508 Default to 64\-bit memory allocation routines.
20509 .IP "\fB\-mpointer\-size=\fR\fIsize\fR" 4
20510 .IX Item "-mpointer-size=size"
20511 Set the default size of pointers. Possible options for \fIsize\fR are
20512 \&\fB32\fR or \fBshort\fR for 32 bit pointers, \fB64\fR or \fBlong\fR
20513 for 64 bit pointers, and \fBno\fR for supporting only 32 bit pointers.
20514 The later option disables \f(CW\*(C`pragma pointer_size\*(C'\fR.
20515 .PP
20516 \fIVxWorks Options\fR
20517 .IX Subsection "VxWorks Options"
20518 .PP
20519 The options in this section are defined for all VxWorks targets.
20520 Options specific to the target hardware are listed with the other
20521 options for that target.
20522 .IP "\fB\-mrtp\fR" 4
20523 .IX Item "-mrtp"
20524 \&\s-1GCC\s0 can generate code for both VxWorks kernels and real time processes
20525 (RTPs).  This option switches from the former to the latter.  It also
20526 defines the preprocessor macro \f(CW\*(C`_\|_RTP_\|_\*(C'\fR.
20527 .IP "\fB\-non\-static\fR" 4
20528 .IX Item "-non-static"
20529 Link an \s-1RTP\s0 executable against shared libraries rather than static
20530 libraries.  The options \fB\-static\fR and \fB\-shared\fR can
20531 also be used for RTPs; \fB\-static\fR
20532 is the default.
20533 .IP "\fB\-Bstatic\fR" 4
20534 .IX Item "-Bstatic"
20535 .PD 0
20536 .IP "\fB\-Bdynamic\fR" 4
20537 .IX Item "-Bdynamic"
20538 .PD
20539 These options are passed down to the linker.  They are defined for
20540 compatibility with Diab.
20541 .IP "\fB\-Xbind\-lazy\fR" 4
20542 .IX Item "-Xbind-lazy"
20543 Enable lazy binding of function calls.  This option is equivalent to
20544 \&\fB\-Wl,\-z,now\fR and is defined for compatibility with Diab.
20545 .IP "\fB\-Xbind\-now\fR" 4
20546 .IX Item "-Xbind-now"
20547 Disable lazy binding of function calls.  This option is the default and
20548 is defined for compatibility with Diab.
20549 .PP
20550 \fIx86 Options\fR
20551 .IX Subsection "x86 Options"
20552 .PP
20553 These \fB\-m\fR options are defined for the x86 family of computers.
20554 .IP "\fB\-march=\fR\fIcpu-type\fR" 4
20555 .IX Item "-march=cpu-type"
20556 Generate instructions for the machine type \fIcpu-type\fR.  In contrast to
20557 \&\fB\-mtune=\fR\fIcpu-type\fR, which merely tunes the generated code 
20558 for the specified \fIcpu-type\fR, \fB\-march=\fR\fIcpu-type\fR allows \s-1GCC\s0
20559 to generate code that may not run at all on processors other than the one
20560 indicated.  Specifying \fB\-march=\fR\fIcpu-type\fR implies 
20561 \&\fB\-mtune=\fR\fIcpu-type\fR.
20562 .Sp
20563 The choices for \fIcpu-type\fR are:
20564 .RS 4
20565 .IP "\fBnative\fR" 4
20566 .IX Item "native"
20567 This selects the \s-1CPU\s0 to generate code for at compilation time by determining
20568 the processor type of the compiling machine.  Using \fB\-march=native\fR
20569 enables all instruction subsets supported by the local machine (hence
20570 the result might not run on different machines).  Using \fB\-mtune=native\fR
20571 produces code optimized for the local machine under the constraints
20572 of the selected instruction set.
20573 .IP "\fBi386\fR" 4
20574 .IX Item "i386"
20575 Original Intel i386 \s-1CPU\s0.
20576 .IP "\fBi486\fR" 4
20577 .IX Item "i486"
20578 Intel i486 \s-1CPU\s0.  (No scheduling is implemented for this chip.)
20579 .IP "\fBi586\fR" 4
20580 .IX Item "i586"
20581 .PD 0
20582 .IP "\fBpentium\fR" 4
20583 .IX Item "pentium"
20584 .PD
20585 Intel Pentium \s-1CPU\s0 with no \s-1MMX\s0 support.
20586 .IP "\fBpentium-mmx\fR" 4
20587 .IX Item "pentium-mmx"
20588 Intel Pentium \s-1MMX\s0 \s-1CPU\s0, based on Pentium core with \s-1MMX\s0 instruction set support.
20589 .IP "\fBpentiumpro\fR" 4
20590 .IX Item "pentiumpro"
20591 Intel Pentium Pro \s-1CPU\s0.
20592 .IP "\fBi686\fR" 4
20593 .IX Item "i686"
20594 When used with \fB\-march\fR, the Pentium Pro
20595 instruction set is used, so the code runs on all i686 family chips.
20596 When used with \fB\-mtune\fR, it has the same meaning as \fBgeneric\fR.
20597 .IP "\fBpentium2\fR" 4
20598 .IX Item "pentium2"
20599 Intel Pentium \s-1II\s0 \s-1CPU\s0, based on Pentium Pro core with \s-1MMX\s0 instruction set
20600 support.
20601 .IP "\fBpentium3\fR" 4
20602 .IX Item "pentium3"
20603 .PD 0
20604 .IP "\fBpentium3m\fR" 4
20605 .IX Item "pentium3m"
20606 .PD
20607 Intel Pentium \s-1III\s0 \s-1CPU\s0, based on Pentium Pro core with \s-1MMX\s0 and \s-1SSE\s0 instruction
20608 set support.
20609 .IP "\fBpentium-m\fR" 4
20610 .IX Item "pentium-m"
20611 Intel Pentium M; low-power version of Intel Pentium \s-1III\s0 \s-1CPU\s0
20612 with \s-1MMX\s0, \s-1SSE\s0 and \s-1SSE2\s0 instruction set support.  Used by Centrino notebooks.
20613 .IP "\fBpentium4\fR" 4
20614 .IX Item "pentium4"
20615 .PD 0
20616 .IP "\fBpentium4m\fR" 4
20617 .IX Item "pentium4m"
20618 .PD
20619 Intel Pentium 4 \s-1CPU\s0 with \s-1MMX\s0, \s-1SSE\s0 and \s-1SSE2\s0 instruction set support.
20620 .IP "\fBprescott\fR" 4
20621 .IX Item "prescott"
20622 Improved version of Intel Pentium 4 \s-1CPU\s0 with \s-1MMX\s0, \s-1SSE\s0, \s-1SSE2\s0 and \s-1SSE3\s0 instruction
20623 set support.
20624 .IP "\fBnocona\fR" 4
20625 .IX Item "nocona"
20626 Improved version of Intel Pentium 4 \s-1CPU\s0 with 64\-bit extensions, \s-1MMX\s0, \s-1SSE\s0,
20627 \&\s-1SSE2\s0 and \s-1SSE3\s0 instruction set support.
20628 .IP "\fBcore2\fR" 4
20629 .IX Item "core2"
20630 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
20631 instruction set support.
20632 .IP "\fBnehalem\fR" 4
20633 .IX Item "nehalem"
20634 Intel Nehalem \s-1CPU\s0 with 64\-bit extensions, \s-1MMX\s0, \s-1SSE\s0, \s-1SSE2\s0, \s-1SSE3\s0, \s-1SSSE3\s0,
20635 \&\s-1SSE4\s0.1, \s-1SSE4\s0.2 and \s-1POPCNT\s0 instruction set support.
20636 .IP "\fBwestmere\fR" 4
20637 .IX Item "westmere"
20638 Intel Westmere \s-1CPU\s0 with 64\-bit extensions, \s-1MMX\s0, \s-1SSE\s0, \s-1SSE2\s0, \s-1SSE3\s0, \s-1SSSE3\s0,
20639 \&\s-1SSE4\s0.1, \s-1SSE4\s0.2, \s-1POPCNT\s0, \s-1AES\s0 and \s-1PCLMUL\s0 instruction set support.
20640 .IP "\fBsandybridge\fR" 4
20641 .IX Item "sandybridge"
20642 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,
20643 \&\s-1SSE4\s0.1, \s-1SSE4\s0.2, \s-1POPCNT\s0, \s-1AVX\s0, \s-1AES\s0 and \s-1PCLMUL\s0 instruction set support.
20644 .IP "\fBivybridge\fR" 4
20645 .IX Item "ivybridge"
20646 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,
20647 \&\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
20648 instruction set support.
20649 .IP "\fBhaswell\fR" 4
20650 .IX Item "haswell"
20651 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,
20652 \&\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,
20653 \&\s-1BMI\s0, \s-1BMI2\s0 and F16C instruction set support.
20654 .IP "\fBbroadwell\fR" 4
20655 .IX Item "broadwell"
20656 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,
20657 \&\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,
20658 \&\s-1BMI\s0, \s-1BMI2\s0, F16C, \s-1RDSEED\s0, \s-1ADCX\s0 and \s-1PREFETCHW\s0 instruction set support.
20659 .IP "\fBbonnell\fR" 4
20660 .IX Item "bonnell"
20661 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
20662 instruction set support.
20663 .IP "\fBsilvermont\fR" 4
20664 .IX Item "silvermont"
20665 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,
20666 \&\s-1SSE4\s0.1, \s-1SSE4\s0.2, \s-1POPCNT\s0, \s-1AES\s0, \s-1PCLMUL\s0 and \s-1RDRND\s0 instruction set support.
20667 .IP "\fBknl\fR" 4
20668 .IX Item "knl"
20669 Intel Knight's Landing \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE\s0, \s-1MMX\s0, \s-1SSE\s0, \s-1SSE2\s0, \s-1SSE3\s0,
20670 \&\s-1SSSE3\s0, \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,
20671 \&\s-1BMI\s0, \s-1BMI2\s0, F16C, \s-1RDSEED\s0, \s-1ADCX\s0, \s-1PREFETCHW\s0, \s-1AVX512F\s0, \s-1AVX512PF\s0, \s-1AVX512ER\s0 and
20672 \&\s-1AVX512CD\s0 instruction set support.
20673 .IP "\fBk6\fR" 4
20674 .IX Item "k6"
20675 \&\s-1AMD\s0 K6 \s-1CPU\s0 with \s-1MMX\s0 instruction set support.
20676 .IP "\fBk6\-2\fR" 4
20677 .IX Item "k6-2"
20678 .PD 0
20679 .IP "\fBk6\-3\fR" 4
20680 .IX Item "k6-3"
20681 .PD
20682 Improved versions of \s-1AMD\s0 K6 \s-1CPU\s0 with \s-1MMX\s0 and 3DNow! instruction set support.
20683 .IP "\fBathlon\fR" 4
20684 .IX Item "athlon"
20685 .PD 0
20686 .IP "\fBathlon-tbird\fR" 4
20687 .IX Item "athlon-tbird"
20688 .PD
20689 \&\s-1AMD\s0 Athlon \s-1CPU\s0 with \s-1MMX\s0, 3dNOW!, enhanced 3DNow! and \s-1SSE\s0 prefetch instructions
20690 support.
20691 .IP "\fBathlon\-4\fR" 4
20692 .IX Item "athlon-4"
20693 .PD 0
20694 .IP "\fBathlon-xp\fR" 4
20695 .IX Item "athlon-xp"
20696 .IP "\fBathlon-mp\fR" 4
20697 .IX Item "athlon-mp"
20698 .PD
20699 Improved \s-1AMD\s0 Athlon \s-1CPU\s0 with \s-1MMX\s0, 3DNow!, enhanced 3DNow! and full \s-1SSE\s0
20700 instruction set support.
20701 .IP "\fBk8\fR" 4
20702 .IX Item "k8"
20703 .PD 0
20704 .IP "\fBopteron\fR" 4
20705 .IX Item "opteron"
20706 .IP "\fBathlon64\fR" 4
20707 .IX Item "athlon64"
20708 .IP "\fBathlon-fx\fR" 4
20709 .IX Item "athlon-fx"
20710 .PD
20711 Processors based on the \s-1AMD\s0 K8 core with x86\-64 instruction set support,
20712 including the \s-1AMD\s0 Opteron, Athlon 64, and Athlon 64 \s-1FX\s0 processors.
20713 (This supersets \s-1MMX\s0, \s-1SSE\s0, \s-1SSE2\s0, 3DNow!, enhanced 3DNow! and 64\-bit
20714 instruction set extensions.)
20715 .IP "\fBk8\-sse3\fR" 4
20716 .IX Item "k8-sse3"
20717 .PD 0
20718 .IP "\fBopteron\-sse3\fR" 4
20719 .IX Item "opteron-sse3"
20720 .IP "\fBathlon64\-sse3\fR" 4
20721 .IX Item "athlon64-sse3"
20722 .PD
20723 Improved versions of \s-1AMD\s0 K8 cores with \s-1SSE3\s0 instruction set support.
20724 .IP "\fBamdfam10\fR" 4
20725 .IX Item "amdfam10"
20726 .PD 0
20727 .IP "\fBbarcelona\fR" 4
20728 .IX Item "barcelona"
20729 .PD
20730 CPUs based on \s-1AMD\s0 Family 10h cores with x86\-64 instruction set support.  (This
20731 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
20732 instruction set extensions.)
20733 .IP "\fBbdver1\fR" 4
20734 .IX Item "bdver1"
20735 CPUs based on \s-1AMD\s0 Family 15h cores with x86\-64 instruction set support.  (This
20736 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,
20737 \&\s-1SSSE3\s0, \s-1SSE4\s0.1, \s-1SSE4\s0.2, \s-1ABM\s0 and 64\-bit instruction set extensions.)
20738 .IP "\fBbdver2\fR" 4
20739 .IX Item "bdver2"
20740 \&\s-1AMD\s0 Family 15h core based CPUs with x86\-64 instruction set support.  (This
20741 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,
20742 \&\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 
20743 extensions.)
20744 .IP "\fBbdver3\fR" 4
20745 .IX Item "bdver3"
20746 \&\s-1AMD\s0 Family 15h core based CPUs with x86\-64 instruction set support.  (This
20747 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, 
20748 \&\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 
20749 64\-bit instruction set extensions.
20750 .IP "\fBbdver4\fR" 4
20751 .IX Item "bdver4"
20752 \&\s-1AMD\s0 Family 15h core based CPUs with x86\-64 instruction set support.  (This
20753 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, 
20754 \&\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, 
20755 \&\s-1SSE4\s0.2, \s-1ABM\s0 and 64\-bit instruction set extensions.
20756 .IP "\fBbtver1\fR" 4
20757 .IX Item "btver1"
20758 CPUs based on \s-1AMD\s0 Family 14h cores with x86\-64 instruction set support.  (This
20759 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
20760 instruction set extensions.)
20761 .IP "\fBbtver2\fR" 4
20762 .IX Item "btver2"
20763 CPUs based on \s-1AMD\s0 Family 16h cores with x86\-64 instruction set support. This
20764 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,
20765 \&\s-1SSE4A\s0, \s-1SSSE3\s0, \s-1SSE3\s0, \s-1SSE2\s0, \s-1SSE\s0, \s-1MMX\s0 and 64\-bit instruction set extensions.
20766 .IP "\fBwinchip\-c6\fR" 4
20767 .IX Item "winchip-c6"
20768 \&\s-1IDT\s0 WinChip C6 \s-1CPU\s0, dealt in same way as i486 with additional \s-1MMX\s0 instruction
20769 set support.
20770 .IP "\fBwinchip2\fR" 4
20771 .IX Item "winchip2"
20772 \&\s-1IDT\s0 WinChip 2 \s-1CPU\s0, dealt in same way as i486 with additional \s-1MMX\s0 and 3DNow!
20773 instruction set support.
20774 .IP "\fBc3\fR" 4
20775 .IX Item "c3"
20776 \&\s-1VIA\s0 C3 \s-1CPU\s0 with \s-1MMX\s0 and 3DNow! instruction set support.  (No scheduling is
20777 implemented for this chip.)
20778 .IP "\fBc3\-2\fR" 4
20779 .IX Item "c3-2"
20780 \&\s-1VIA\s0 C3\-2 (Nehemiah/C5XL) \s-1CPU\s0 with \s-1MMX\s0 and \s-1SSE\s0 instruction set support.
20781 (No scheduling is
20782 implemented for this chip.)
20783 .IP "\fBgeode\fR" 4
20784 .IX Item "geode"
20785 \&\s-1AMD\s0 Geode embedded processor with \s-1MMX\s0 and 3DNow! instruction set support.
20786 .RE
20787 .RS 4
20788 .RE
20789 .IP "\fB\-mtune=\fR\fIcpu-type\fR" 4
20790 .IX Item "-mtune=cpu-type"
20791 Tune to \fIcpu-type\fR everything applicable about the generated code, except
20792 for the \s-1ABI\s0 and the set of available instructions.  
20793 While picking a specific \fIcpu-type\fR schedules things appropriately
20794 for that particular chip, the compiler does not generate any code that
20795 cannot run on the default machine type unless you use a
20796 \&\fB\-march=\fR\fIcpu-type\fR option.
20797 For example, if \s-1GCC\s0 is configured for i686\-pc\-linux\-gnu
20798 then \fB\-mtune=pentium4\fR generates code that is tuned for Pentium 4
20799 but still runs on i686 machines.
20800 .Sp
20801 The choices for \fIcpu-type\fR are the same as for \fB\-march\fR.
20802 In addition, \fB\-mtune\fR supports 2 extra choices for \fIcpu-type\fR:
20803 .RS 4
20804 .IP "\fBgeneric\fR" 4
20805 .IX Item "generic"
20806 Produce code optimized for the most common \s-1IA32/AMD64/EM64T\s0 processors.
20807 If you know the \s-1CPU\s0 on which your code will run, then you should use
20808 the corresponding \fB\-mtune\fR or \fB\-march\fR option instead of
20809 \&\fB\-mtune=generic\fR.  But, if you do not know exactly what \s-1CPU\s0 users
20810 of your application will have, then you should use this option.
20811 .Sp
20812 As new processors are deployed in the marketplace, the behavior of this
20813 option will change.  Therefore, if you upgrade to a newer version of
20814 \&\s-1GCC\s0, code generation controlled by this option will change to reflect
20815 the processors
20816 that are most common at the time that version of \s-1GCC\s0 is released.
20817 .Sp
20818 There is no \fB\-march=generic\fR option because \fB\-march\fR
20819 indicates the instruction set the compiler can use, and there is no
20820 generic instruction set applicable to all processors.  In contrast,
20821 \&\fB\-mtune\fR indicates the processor (or, in this case, collection of
20822 processors) for which the code is optimized.
20823 .IP "\fBintel\fR" 4
20824 .IX Item "intel"
20825 Produce code optimized for the most current Intel processors, which are
20826 Haswell and Silvermont for this version of \s-1GCC\s0.  If you know the \s-1CPU\s0
20827 on which your code will run, then you should use the corresponding
20828 \&\fB\-mtune\fR or \fB\-march\fR option instead of \fB\-mtune=intel\fR.
20829 But, if you want your application performs better on both Haswell and
20830 Silvermont, then you should use this option.
20831 .Sp
20832 As new Intel processors are deployed in the marketplace, the behavior of
20833 this option will change.  Therefore, if you upgrade to a newer version of
20834 \&\s-1GCC\s0, code generation controlled by this option will change to reflect
20835 the most current Intel processors at the time that version of \s-1GCC\s0 is
20836 released.
20837 .Sp
20838 There is no \fB\-march=intel\fR option because \fB\-march\fR indicates
20839 the instruction set the compiler can use, and there is no common
20840 instruction set applicable to all processors.  In contrast,
20841 \&\fB\-mtune\fR indicates the processor (or, in this case, collection of
20842 processors) for which the code is optimized.
20843 .RE
20844 .RS 4
20845 .RE
20846 .IP "\fB\-mcpu=\fR\fIcpu-type\fR" 4
20847 .IX Item "-mcpu=cpu-type"
20848 A deprecated synonym for \fB\-mtune\fR.
20849 .IP "\fB\-mfpmath=\fR\fIunit\fR" 4
20850 .IX Item "-mfpmath=unit"
20851 Generate floating-point arithmetic for selected unit \fIunit\fR.  The choices
20852 for \fIunit\fR are:
20853 .RS 4
20854 .IP "\fB387\fR" 4
20855 .IX Item "387"
20856 Use the standard 387 floating-point coprocessor present on the majority of chips and
20857 emulated otherwise.  Code compiled with this option runs almost everywhere.
20858 The temporary results are computed in 80\-bit precision instead of the precision
20859 specified by the type, resulting in slightly different results compared to most
20860 of other chips.  See \fB\-ffloat\-store\fR for more detailed description.
20861 .Sp
20862 This is the default choice for x86\-32 targets.
20863 .IP "\fBsse\fR" 4
20864 .IX Item "sse"
20865 Use scalar floating-point instructions present in the \s-1SSE\s0 instruction set.
20866 This instruction set is supported by Pentium \s-1III\s0 and newer chips,
20867 and in the \s-1AMD\s0 line
20868 by Athlon\-4, Athlon \s-1XP\s0 and Athlon \s-1MP\s0 chips.  The earlier version of the \s-1SSE\s0
20869 instruction set supports only single-precision arithmetic, thus the double and
20870 extended-precision arithmetic are still done using 387.  A later version, present
20871 only in Pentium 4 and \s-1AMD\s0 x86\-64 chips, supports double-precision
20872 arithmetic too.
20873 .Sp
20874 For the x86\-32 compiler, you must use \fB\-march=\fR\fIcpu-type\fR, \fB\-msse\fR
20875 or \fB\-msse2\fR switches to enable \s-1SSE\s0 extensions and make this option
20876 effective.  For the x86\-64 compiler, these extensions are enabled by default.
20877 .Sp
20878 The resulting code should be considerably faster in the majority of cases and avoid
20879 the numerical instability problems of 387 code, but may break some existing
20880 code that expects temporaries to be 80 bits.
20881 .Sp
20882 This is the default choice for the x86\-64 compiler.
20883 .IP "\fBsse,387\fR" 4
20884 .IX Item "sse,387"
20885 .PD 0
20886 .IP "\fBsse+387\fR" 4
20887 .IX Item "sse+387"
20888 .IP "\fBboth\fR" 4
20889 .IX Item "both"
20890 .PD
20891 Attempt to utilize both instruction sets at once.  This effectively doubles the
20892 amount of available registers, and on chips with separate execution units for
20893 387 and \s-1SSE\s0 the execution resources too.  Use this option with care, as it is
20894 still experimental, because the \s-1GCC\s0 register allocator does not model separate
20895 functional units well, resulting in unstable performance.
20896 .RE
20897 .RS 4
20898 .RE
20899 .IP "\fB\-masm=\fR\fIdialect\fR" 4
20900 .IX Item "-masm=dialect"
20901 Output assembly instructions using selected \fIdialect\fR.  Also affects
20902 which dialect is used for basic \f(CW\*(C`asm\*(C'\fR and
20903 extended \f(CW\*(C`asm\*(C'\fR. Supported choices (in dialect
20904 order) are \fBatt\fR or \fBintel\fR. The default is \fBatt\fR. Darwin does
20905 not support \fBintel\fR.
20906 .IP "\fB\-mieee\-fp\fR" 4
20907 .IX Item "-mieee-fp"
20908 .PD 0
20909 .IP "\fB\-mno\-ieee\-fp\fR" 4
20910 .IX Item "-mno-ieee-fp"
20911 .PD
20912 Control whether or not the compiler uses \s-1IEEE\s0 floating-point
20913 comparisons.  These correctly handle the case where the result of a
20914 comparison is unordered.
20915 .IP "\fB\-msoft\-float\fR" 4
20916 .IX Item "-msoft-float"
20917 Generate output containing library calls for floating point.
20918 .Sp
20919 \&\fBWarning:\fR the requisite libraries are not part of \s-1GCC\s0.
20920 Normally the facilities of the machine's usual C compiler are used, but
20921 this can't be done directly in cross-compilation.  You must make your
20922 own arrangements to provide suitable library functions for
20923 cross-compilation.
20924 .Sp
20925 On machines where a function returns floating-point results in the 80387
20926 register stack, some floating-point opcodes may be emitted even if
20927 \&\fB\-msoft\-float\fR is used.
20928 .IP "\fB\-mno\-fp\-ret\-in\-387\fR" 4
20929 .IX Item "-mno-fp-ret-in-387"
20930 Do not use the \s-1FPU\s0 registers for return values of functions.
20931 .Sp
20932 The usual calling convention has functions return values of types
20933 \&\f(CW\*(C`float\*(C'\fR and \f(CW\*(C`double\*(C'\fR in an \s-1FPU\s0 register, even if there
20934 is no \s-1FPU\s0.  The idea is that the operating system should emulate
20935 an \s-1FPU\s0.
20936 .Sp
20937 The option \fB\-mno\-fp\-ret\-in\-387\fR causes such values to be returned
20938 in ordinary \s-1CPU\s0 registers instead.
20939 .IP "\fB\-mno\-fancy\-math\-387\fR" 4
20940 .IX Item "-mno-fancy-math-387"
20941 Some 387 emulators do not support the \f(CW\*(C`sin\*(C'\fR, \f(CW\*(C`cos\*(C'\fR and
20942 \&\f(CW\*(C`sqrt\*(C'\fR instructions for the 387.  Specify this option to avoid
20943 generating those instructions.  This option is the default on
20944 OpenBSD and NetBSD.  This option is overridden when \fB\-march\fR
20945 indicates that the target \s-1CPU\s0 always has an \s-1FPU\s0 and so the
20946 instruction does not need emulation.  These
20947 instructions are not generated unless you also use the
20948 \&\fB\-funsafe\-math\-optimizations\fR switch.
20949 .IP "\fB\-malign\-double\fR" 4
20950 .IX Item "-malign-double"
20951 .PD 0
20952 .IP "\fB\-mno\-align\-double\fR" 4
20953 .IX Item "-mno-align-double"
20954 .PD
20955 Control whether \s-1GCC\s0 aligns \f(CW\*(C`double\*(C'\fR, \f(CW\*(C`long double\*(C'\fR, and
20956 \&\f(CW\*(C`long long\*(C'\fR variables on a two-word boundary or a one-word
20957 boundary.  Aligning \f(CW\*(C`double\*(C'\fR variables on a two-word boundary
20958 produces code that runs somewhat faster on a Pentium at the
20959 expense of more memory.
20960 .Sp
20961 On x86\-64, \fB\-malign\-double\fR is enabled by default.
20962 .Sp
20963 \&\fBWarning:\fR if you use the \fB\-malign\-double\fR switch,
20964 structures containing the above types are aligned differently than
20965 the published application binary interface specifications for the x86\-32
20966 and are not binary compatible with structures in code compiled
20967 without that switch.
20968 .IP "\fB\-m96bit\-long\-double\fR" 4
20969 .IX Item "-m96bit-long-double"
20970 .PD 0
20971 .IP "\fB\-m128bit\-long\-double\fR" 4
20972 .IX Item "-m128bit-long-double"
20973 .PD
20974 These switches control the size of \f(CW\*(C`long double\*(C'\fR type.  The x86\-32
20975 application binary interface specifies the size to be 96 bits,
20976 so \fB\-m96bit\-long\-double\fR is the default in 32\-bit mode.
20977 .Sp
20978 Modern architectures (Pentium and newer) prefer \f(CW\*(C`long double\*(C'\fR
20979 to be aligned to an 8\- or 16\-byte boundary.  In arrays or structures
20980 conforming to the \s-1ABI\s0, this is not possible.  So specifying
20981 \&\fB\-m128bit\-long\-double\fR aligns \f(CW\*(C`long double\*(C'\fR
20982 to a 16\-byte boundary by padding the \f(CW\*(C`long double\*(C'\fR with an additional
20983 32\-bit zero.
20984 .Sp
20985 In the x86\-64 compiler, \fB\-m128bit\-long\-double\fR is the default choice as
20986 its \s-1ABI\s0 specifies that \f(CW\*(C`long double\*(C'\fR is aligned on 16\-byte boundary.
20987 .Sp
20988 Notice that neither of these options enable any extra precision over the x87
20989 standard of 80 bits for a \f(CW\*(C`long double\*(C'\fR.
20990 .Sp
20991 \&\fBWarning:\fR if you override the default value for your target \s-1ABI\s0, this
20992 changes the size of 
20993 structures and arrays containing \f(CW\*(C`long double\*(C'\fR variables,
20994 as well as modifying the function calling convention for functions taking
20995 \&\f(CW\*(C`long double\*(C'\fR.  Hence they are not binary-compatible
20996 with code compiled without that switch.
20997 .IP "\fB\-mlong\-double\-64\fR" 4
20998 .IX Item "-mlong-double-64"
20999 .PD 0
21000 .IP "\fB\-mlong\-double\-80\fR" 4
21001 .IX Item "-mlong-double-80"
21002 .IP "\fB\-mlong\-double\-128\fR" 4
21003 .IX Item "-mlong-double-128"
21004 .PD
21005 These switches control the size of \f(CW\*(C`long double\*(C'\fR type. A size
21006 of 64 bits makes the \f(CW\*(C`long double\*(C'\fR type equivalent to the \f(CW\*(C`double\*(C'\fR
21007 type. This is the default for 32\-bit Bionic C library.  A size
21008 of 128 bits makes the \f(CW\*(C`long double\*(C'\fR type equivalent to the
21009 \&\f(CW\*(C`_\|_float128\*(C'\fR type. This is the default for 64\-bit Bionic C library.
21010 .Sp
21011 \&\fBWarning:\fR if you override the default value for your target \s-1ABI\s0, this
21012 changes the size of
21013 structures and arrays containing \f(CW\*(C`long double\*(C'\fR variables,
21014 as well as modifying the function calling convention for functions taking
21015 \&\f(CW\*(C`long double\*(C'\fR.  Hence they are not binary-compatible
21016 with code compiled without that switch.
21017 .IP "\fB\-malign\-data=\fR\fItype\fR" 4
21018 .IX Item "-malign-data=type"
21019 Control how \s-1GCC\s0 aligns variables.  Supported values for \fItype\fR are
21020 \&\fBcompat\fR uses increased alignment value compatible uses \s-1GCC\s0 4.8
21021 and earlier, \fBabi\fR uses alignment value as specified by the
21022 psABI, and \fBcacheline\fR uses increased alignment value to match
21023 the cache line size.  \fBcompat\fR is the default.
21024 .IP "\fB\-mlarge\-data\-threshold=\fR\fIthreshold\fR" 4
21025 .IX Item "-mlarge-data-threshold=threshold"
21026 When \fB\-mcmodel=medium\fR is specified, data objects larger than
21027 \&\fIthreshold\fR are placed in the large data section.  This value must be the
21028 same across all objects linked into the binary, and defaults to 65535.
21029 .IP "\fB\-mrtd\fR" 4
21030 .IX Item "-mrtd"
21031 Use a different function-calling convention, in which functions that
21032 take a fixed number of arguments return with the \f(CW\*(C`ret \f(CInum\f(CW\*(C'\fR
21033 instruction, which pops their arguments while returning.  This saves one
21034 instruction in the caller since there is no need to pop the arguments
21035 there.
21036 .Sp
21037 You can specify that an individual function is called with this calling
21038 sequence with the function attribute \f(CW\*(C`stdcall\*(C'\fR.  You can also
21039 override the \fB\-mrtd\fR option by using the function attribute
21040 \&\f(CW\*(C`cdecl\*(C'\fR.
21041 .Sp
21042 \&\fBWarning:\fR this calling convention is incompatible with the one
21043 normally used on Unix, so you cannot use it if you need to call
21044 libraries compiled with the Unix compiler.
21045 .Sp
21046 Also, you must provide function prototypes for all functions that
21047 take variable numbers of arguments (including \f(CW\*(C`printf\*(C'\fR);
21048 otherwise incorrect code is generated for calls to those
21049 functions.
21050 .Sp
21051 In addition, seriously incorrect code results if you call a
21052 function with too many arguments.  (Normally, extra arguments are
21053 harmlessly ignored.)
21054 .IP "\fB\-mregparm=\fR\fInum\fR" 4
21055 .IX Item "-mregparm=num"
21056 Control how many registers are used to pass integer arguments.  By
21057 default, no registers are used to pass arguments, and at most 3
21058 registers can be used.  You can control this behavior for a specific
21059 function by using the function attribute \f(CW\*(C`regparm\*(C'\fR.
21060 .Sp
21061 \&\fBWarning:\fR if you use this switch, and
21062 \&\fInum\fR is nonzero, then you must build all modules with the same
21063 value, including any libraries.  This includes the system libraries and
21064 startup modules.
21065 .IP "\fB\-msseregparm\fR" 4
21066 .IX Item "-msseregparm"
21067 Use \s-1SSE\s0 register passing conventions for float and double arguments
21068 and return values.  You can control this behavior for a specific
21069 function by using the function attribute \f(CW\*(C`sseregparm\*(C'\fR.
21070 .Sp
21071 \&\fBWarning:\fR if you use this switch then you must build all
21072 modules with the same value, including any libraries.  This includes
21073 the system libraries and startup modules.
21074 .IP "\fB\-mvect8\-ret\-in\-mem\fR" 4
21075 .IX Item "-mvect8-ret-in-mem"
21076 Return 8\-byte vectors in memory instead of \s-1MMX\s0 registers.  This is the
21077 default on Solaris@tie{}8 and 9 and VxWorks to match the \s-1ABI\s0 of the Sun
21078 Studio compilers until version 12.  Later compiler versions (starting
21079 with Studio 12 Update@tie{}1) follow the \s-1ABI\s0 used by other x86 targets, which
21080 is the default on Solaris@tie{}10 and later.  \fIOnly\fR use this option if
21081 you need to remain compatible with existing code produced by those
21082 previous compiler versions or older versions of \s-1GCC\s0.
21083 .IP "\fB\-mpc32\fR" 4
21084 .IX Item "-mpc32"
21085 .PD 0
21086 .IP "\fB\-mpc64\fR" 4
21087 .IX Item "-mpc64"
21088 .IP "\fB\-mpc80\fR" 4
21089 .IX Item "-mpc80"
21090 .PD
21091 Set 80387 floating-point precision to 32, 64 or 80 bits.  When \fB\-mpc32\fR
21092 is specified, the significands of results of floating-point operations are
21093 rounded to 24 bits (single precision); \fB\-mpc64\fR rounds the
21094 significands of results of floating-point operations to 53 bits (double
21095 precision) and \fB\-mpc80\fR rounds the significands of results of
21096 floating-point operations to 64 bits (extended double precision), which is
21097 the default.  When this option is used, floating-point operations in higher
21098 precisions are not available to the programmer without setting the \s-1FPU\s0
21099 control word explicitly.
21100 .Sp
21101 Setting the rounding of floating-point operations to less than the default
21102 80 bits can speed some programs by 2% or more.  Note that some mathematical
21103 libraries assume that extended-precision (80\-bit) floating-point operations
21104 are enabled by default; routines in such libraries could suffer significant
21105 loss of accuracy, typically through so-called \*(L"catastrophic cancellation\*(R",
21106 when this option is used to set the precision to less than extended precision.
21107 .IP "\fB\-mstackrealign\fR" 4
21108 .IX Item "-mstackrealign"
21109 Realign the stack at entry.  On the x86, the \fB\-mstackrealign\fR
21110 option generates an alternate prologue and epilogue that realigns the
21111 run-time stack if necessary.  This supports mixing legacy codes that keep
21112 4\-byte stack alignment with modern codes that keep 16\-byte stack alignment for
21113 \&\s-1SSE\s0 compatibility.  See also the attribute \f(CW\*(C`force_align_arg_pointer\*(C'\fR,
21114 applicable to individual functions.
21115 .IP "\fB\-mpreferred\-stack\-boundary=\fR\fInum\fR" 4
21116 .IX Item "-mpreferred-stack-boundary=num"
21117 Attempt to keep the stack boundary aligned to a 2 raised to \fInum\fR
21118 byte boundary.  If \fB\-mpreferred\-stack\-boundary\fR is not specified,
21119 the default is 4 (16 bytes or 128 bits).
21120 .Sp
21121 \&\fBWarning:\fR When generating code for the x86\-64 architecture with
21122 \&\s-1SSE\s0 extensions disabled, \fB\-mpreferred\-stack\-boundary=3\fR can be
21123 used to keep the stack boundary aligned to 8 byte boundary.  Since
21124 x86\-64 \s-1ABI\s0 require 16 byte stack alignment, this is \s-1ABI\s0 incompatible and
21125 intended to be used in controlled environment where stack space is
21126 important limitation.  This option leads to wrong code when functions
21127 compiled with 16 byte stack alignment (such as functions from a standard
21128 library) are called with misaligned stack.  In this case, \s-1SSE\s0
21129 instructions may lead to misaligned memory access traps.  In addition,
21130 variable arguments are handled incorrectly for 16 byte aligned
21131 objects (including x87 long double and _\|_int128), leading to wrong
21132 results.  You must build all modules with
21133 \&\fB\-mpreferred\-stack\-boundary=3\fR, including any libraries.  This
21134 includes the system libraries and startup modules.
21135 .IP "\fB\-mincoming\-stack\-boundary=\fR\fInum\fR" 4
21136 .IX Item "-mincoming-stack-boundary=num"
21137 Assume the incoming stack is aligned to a 2 raised to \fInum\fR byte
21138 boundary.  If \fB\-mincoming\-stack\-boundary\fR is not specified,
21139 the one specified by \fB\-mpreferred\-stack\-boundary\fR is used.
21140 .Sp
21141 On Pentium and Pentium Pro, \f(CW\*(C`double\*(C'\fR and \f(CW\*(C`long double\*(C'\fR values
21142 should be aligned to an 8\-byte boundary (see \fB\-malign\-double\fR) or
21143 suffer significant run time performance penalties.  On Pentium \s-1III\s0, the
21144 Streaming \s-1SIMD\s0 Extension (\s-1SSE\s0) data type \f(CW\*(C`_\|_m128\*(C'\fR may not work
21145 properly if it is not 16\-byte aligned.
21146 .Sp
21147 To ensure proper alignment of this values on the stack, the stack boundary
21148 must be as aligned as that required by any value stored on the stack.
21149 Further, every function must be generated such that it keeps the stack
21150 aligned.  Thus calling a function compiled with a higher preferred
21151 stack boundary from a function compiled with a lower preferred stack
21152 boundary most likely misaligns the stack.  It is recommended that
21153 libraries that use callbacks always use the default setting.
21154 .Sp
21155 This extra alignment does consume extra stack space, and generally
21156 increases code size.  Code that is sensitive to stack space usage, such
21157 as embedded systems and operating system kernels, may want to reduce the
21158 preferred alignment to \fB\-mpreferred\-stack\-boundary=2\fR.
21159 .IP "\fB\-mmmx\fR" 4
21160 .IX Item "-mmmx"
21161 .PD 0
21162 .IP "\fB\-msse\fR" 4
21163 .IX Item "-msse"
21164 .IP "\fB\-msse2\fR" 4
21165 .IX Item "-msse2"
21166 .IP "\fB\-msse3\fR" 4
21167 .IX Item "-msse3"
21168 .IP "\fB\-mssse3\fR" 4
21169 .IX Item "-mssse3"
21170 .IP "\fB\-msse4\fR" 4
21171 .IX Item "-msse4"
21172 .IP "\fB\-msse4a\fR" 4
21173 .IX Item "-msse4a"
21174 .IP "\fB\-msse4.1\fR" 4
21175 .IX Item "-msse4.1"
21176 .IP "\fB\-msse4.2\fR" 4
21177 .IX Item "-msse4.2"
21178 .IP "\fB\-mavx\fR" 4
21179 .IX Item "-mavx"
21180 .IP "\fB\-mavx2\fR" 4
21181 .IX Item "-mavx2"
21182 .IP "\fB\-mavx512f\fR" 4
21183 .IX Item "-mavx512f"
21184 .IP "\fB\-mavx512pf\fR" 4
21185 .IX Item "-mavx512pf"
21186 .IP "\fB\-mavx512er\fR" 4
21187 .IX Item "-mavx512er"
21188 .IP "\fB\-mavx512cd\fR" 4
21189 .IX Item "-mavx512cd"
21190 .IP "\fB\-msha\fR" 4
21191 .IX Item "-msha"
21192 .IP "\fB\-maes\fR" 4
21193 .IX Item "-maes"
21194 .IP "\fB\-mpclmul\fR" 4
21195 .IX Item "-mpclmul"
21196 .IP "\fB\-mclfushopt\fR" 4
21197 .IX Item "-mclfushopt"
21198 .IP "\fB\-mfsgsbase\fR" 4
21199 .IX Item "-mfsgsbase"
21200 .IP "\fB\-mrdrnd\fR" 4
21201 .IX Item "-mrdrnd"
21202 .IP "\fB\-mf16c\fR" 4
21203 .IX Item "-mf16c"
21204 .IP "\fB\-mfma\fR" 4
21205 .IX Item "-mfma"
21206 .IP "\fB\-mfma4\fR" 4
21207 .IX Item "-mfma4"
21208 .IP "\fB\-mno\-fma4\fR" 4
21209 .IX Item "-mno-fma4"
21210 .IP "\fB\-mprefetchwt1\fR" 4
21211 .IX Item "-mprefetchwt1"
21212 .IP "\fB\-mxop\fR" 4
21213 .IX Item "-mxop"
21214 .IP "\fB\-mlwp\fR" 4
21215 .IX Item "-mlwp"
21216 .IP "\fB\-m3dnow\fR" 4
21217 .IX Item "-m3dnow"
21218 .IP "\fB\-mpopcnt\fR" 4
21219 .IX Item "-mpopcnt"
21220 .IP "\fB\-mabm\fR" 4
21221 .IX Item "-mabm"
21222 .IP "\fB\-mbmi\fR" 4
21223 .IX Item "-mbmi"
21224 .IP "\fB\-mbmi2\fR" 4
21225 .IX Item "-mbmi2"
21226 .IP "\fB\-mlzcnt\fR" 4
21227 .IX Item "-mlzcnt"
21228 .IP "\fB\-mfxsr\fR" 4
21229 .IX Item "-mfxsr"
21230 .IP "\fB\-mxsave\fR" 4
21231 .IX Item "-mxsave"
21232 .IP "\fB\-mxsaveopt\fR" 4
21233 .IX Item "-mxsaveopt"
21234 .IP "\fB\-mxsavec\fR" 4
21235 .IX Item "-mxsavec"
21236 .IP "\fB\-mxsaves\fR" 4
21237 .IX Item "-mxsaves"
21238 .IP "\fB\-mrtm\fR" 4
21239 .IX Item "-mrtm"
21240 .IP "\fB\-mtbm\fR" 4
21241 .IX Item "-mtbm"
21242 .IP "\fB\-mmpx\fR" 4
21243 .IX Item "-mmpx"
21244 .IP "\fB\-mmwaitx\fR" 4
21245 .IX Item "-mmwaitx"
21246 .PD
21247 These switches enable the use of instructions in the \s-1MMX\s0, \s-1SSE\s0,
21248 \&\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,
21249 \&\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,
21250 \&\s-1BMI\s0, \s-1BMI2\s0, \s-1FXSR\s0, \s-1XSAVE\s0, \s-1XSAVEOPT\s0, \s-1LZCNT\s0, \s-1RTM\s0, \s-1MPX\s0, \s-1MWAITX\s0 or 3DNow!
21251 extended instruction sets.  Each has a corresponding \fB\-mno\-\fR option
21252 to disable use of these instructions.
21253 .Sp
21254 These extensions are also available as built-in functions: see
21255 \&\fBx86 Built-in Functions\fR, for details of the functions enabled and
21256 disabled by these switches.
21257 .Sp
21258 To generate \s-1SSE/SSE2\s0 instructions automatically from floating-point
21259 code (as opposed to 387 instructions), see \fB\-mfpmath=sse\fR.
21260 .Sp
21261 \&\s-1GCC\s0 depresses SSEx instructions when \fB\-mavx\fR is used. Instead, it
21262 generates new \s-1AVX\s0 instructions or \s-1AVX\s0 equivalence for all SSEx instructions
21263 when needed.
21264 .Sp
21265 These options enable \s-1GCC\s0 to use these extended instructions in
21266 generated code, even without \fB\-mfpmath=sse\fR.  Applications that
21267 perform run-time \s-1CPU\s0 detection must compile separate files for each
21268 supported architecture, using the appropriate flags.  In particular,
21269 the file containing the \s-1CPU\s0 detection code should be compiled without
21270 these options.
21271 .IP "\fB\-mdump\-tune\-features\fR" 4
21272 .IX Item "-mdump-tune-features"
21273 This option instructs \s-1GCC\s0 to dump the names of the x86 performance 
21274 tuning features and default settings. The names can be used in 
21275 \&\fB\-mtune\-ctrl=\fR\fIfeature-list\fR.
21276 .IP "\fB\-mtune\-ctrl=\fR\fIfeature-list\fR" 4
21277 .IX Item "-mtune-ctrl=feature-list"
21278 This option is used to do fine grain control of x86 code generation features.
21279 \&\fIfeature-list\fR is a comma separated list of \fIfeature\fR names. See also
21280 \&\fB\-mdump\-tune\-features\fR. When specified, the \fIfeature\fR is turned
21281 on if it is not preceded with \fB^\fR, otherwise, it is turned off. 
21282 \&\fB\-mtune\-ctrl=\fR\fIfeature-list\fR is intended to be used by \s-1GCC\s0
21283 developers. Using it may lead to code paths not covered by testing and can
21284 potentially result in compiler ICEs or runtime errors.
21285 .IP "\fB\-mno\-default\fR" 4
21286 .IX Item "-mno-default"
21287 This option instructs \s-1GCC\s0 to turn off all tunable features. See also 
21288 \&\fB\-mtune\-ctrl=\fR\fIfeature-list\fR and \fB\-mdump\-tune\-features\fR.
21289 .IP "\fB\-mcld\fR" 4
21290 .IX Item "-mcld"
21291 This option instructs \s-1GCC\s0 to emit a \f(CW\*(C`cld\*(C'\fR instruction in the prologue
21292 of functions that use string instructions.  String instructions depend on
21293 the \s-1DF\s0 flag to select between autoincrement or autodecrement mode.  While the
21294 \&\s-1ABI\s0 specifies the \s-1DF\s0 flag to be cleared on function entry, some operating
21295 systems violate this specification by not clearing the \s-1DF\s0 flag in their
21296 exception dispatchers.  The exception handler can be invoked with the \s-1DF\s0 flag
21297 set, which leads to wrong direction mode when string instructions are used.
21298 This option can be enabled by default on 32\-bit x86 targets by configuring
21299 \&\s-1GCC\s0 with the \fB\-\-enable\-cld\fR configure option.  Generation of \f(CW\*(C`cld\*(C'\fR
21300 instructions can be suppressed with the \fB\-mno\-cld\fR compiler option
21301 in this case.
21302 .IP "\fB\-mvzeroupper\fR" 4
21303 .IX Item "-mvzeroupper"
21304 This option instructs \s-1GCC\s0 to emit a \f(CW\*(C`vzeroupper\*(C'\fR instruction
21305 before a transfer of control flow out of the function to minimize
21306 the \s-1AVX\s0 to \s-1SSE\s0 transition penalty as well as remove unnecessary \f(CW\*(C`zeroupper\*(C'\fR
21307 intrinsics.
21308 .IP "\fB\-mprefer\-avx128\fR" 4
21309 .IX Item "-mprefer-avx128"
21310 This option instructs \s-1GCC\s0 to use 128\-bit \s-1AVX\s0 instructions instead of
21311 256\-bit \s-1AVX\s0 instructions in the auto-vectorizer.
21312 .IP "\fB\-mcx16\fR" 4
21313 .IX Item "-mcx16"
21314 This option enables \s-1GCC\s0 to generate \f(CW\*(C`CMPXCHG16B\*(C'\fR instructions.
21315 \&\f(CW\*(C`CMPXCHG16B\*(C'\fR allows for atomic operations on 128\-bit double quadword
21316 (or oword) data types.  
21317 This is useful for high-resolution counters that can be updated
21318 by multiple processors (or cores).  This instruction is generated as part of
21319 atomic built-in functions: see \fB_\|_sync Builtins\fR or
21320 \&\fB_\|_atomic Builtins\fR for details.
21321 .IP "\fB\-msahf\fR" 4
21322 .IX Item "-msahf"
21323 This option enables generation of \f(CW\*(C`SAHF\*(C'\fR instructions in 64\-bit code.
21324 Early Intel Pentium 4 CPUs with Intel 64 support,
21325 prior to the introduction of Pentium 4 G1 step in December 2005,
21326 lacked the \f(CW\*(C`LAHF\*(C'\fR and \f(CW\*(C`SAHF\*(C'\fR instructions
21327 which are supported by \s-1AMD64\s0.
21328 These are load and store instructions, respectively, for certain status flags.
21329 In 64\-bit mode, the \f(CW\*(C`SAHF\*(C'\fR instruction is used to optimize \f(CW\*(C`fmod\*(C'\fR,
21330 \&\f(CW\*(C`drem\*(C'\fR, and \f(CW\*(C`remainder\*(C'\fR built-in functions;
21331 see \fBOther Builtins\fR for details.
21332 .IP "\fB\-mmovbe\fR" 4
21333 .IX Item "-mmovbe"
21334 This option enables use of the \f(CW\*(C`movbe\*(C'\fR instruction to implement
21335 \&\f(CW\*(C`_\|_builtin_bswap32\*(C'\fR and \f(CW\*(C`_\|_builtin_bswap64\*(C'\fR.
21336 .IP "\fB\-mcrc32\fR" 4
21337 .IX Item "-mcrc32"
21338 This option enables built-in functions \f(CW\*(C`_\|_builtin_ia32_crc32qi\*(C'\fR,
21339 \&\f(CW\*(C`_\|_builtin_ia32_crc32hi\*(C'\fR, \f(CW\*(C`_\|_builtin_ia32_crc32si\*(C'\fR and
21340 \&\f(CW\*(C`_\|_builtin_ia32_crc32di\*(C'\fR to generate the \f(CW\*(C`crc32\*(C'\fR machine instruction.
21341 .IP "\fB\-mrecip\fR" 4
21342 .IX Item "-mrecip"
21343 This option enables use of \f(CW\*(C`RCPSS\*(C'\fR and \f(CW\*(C`RSQRTSS\*(C'\fR instructions
21344 (and their vectorized variants \f(CW\*(C`RCPPS\*(C'\fR and \f(CW\*(C`RSQRTPS\*(C'\fR)
21345 with an additional Newton-Raphson step
21346 to increase precision instead of \f(CW\*(C`DIVSS\*(C'\fR and \f(CW\*(C`SQRTSS\*(C'\fR
21347 (and their vectorized
21348 variants) for single-precision floating-point arguments.  These instructions
21349 are generated only when \fB\-funsafe\-math\-optimizations\fR is enabled
21350 together with \fB\-finite\-math\-only\fR and \fB\-fno\-trapping\-math\fR.
21351 Note that while the throughput of the sequence is higher than the throughput
21352 of the non-reciprocal instruction, the precision of the sequence can be
21353 decreased by up to 2 ulp (i.e. the inverse of 1.0 equals 0.99999994).
21354 .Sp
21355 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
21356 (or \f(CW\*(C`RSQRTPS\*(C'\fR) already with \fB\-ffast\-math\fR (or the above option
21357 combination), and doesn't need \fB\-mrecip\fR.
21358 .Sp
21359 Also note that \s-1GCC\s0 emits the above sequence with additional Newton-Raphson step
21360 for vectorized single-float division and vectorized \f(CW\*(C`sqrtf(\f(CIx\f(CW)\*(C'\fR
21361 already with \fB\-ffast\-math\fR (or the above option combination), and
21362 doesn't need \fB\-mrecip\fR.
21363 .IP "\fB\-mrecip=\fR\fIopt\fR" 4
21364 .IX Item "-mrecip=opt"
21365 This option controls which reciprocal estimate instructions
21366 may be used.  \fIopt\fR is a comma-separated list of options, which may
21367 be preceded by a \fB!\fR to invert the option:
21368 .RS 4
21369 .IP "\fBall\fR" 4
21370 .IX Item "all"
21371 Enable all estimate instructions.
21372 .IP "\fBdefault\fR" 4
21373 .IX Item "default"
21374 Enable the default instructions, equivalent to \fB\-mrecip\fR.
21375 .IP "\fBnone\fR" 4
21376 .IX Item "none"
21377 Disable all estimate instructions, equivalent to \fB\-mno\-recip\fR.
21378 .IP "\fBdiv\fR" 4
21379 .IX Item "div"
21380 Enable the approximation for scalar division.
21381 .IP "\fBvec-div\fR" 4
21382 .IX Item "vec-div"
21383 Enable the approximation for vectorized division.
21384 .IP "\fBsqrt\fR" 4
21385 .IX Item "sqrt"
21386 Enable the approximation for scalar square root.
21387 .IP "\fBvec-sqrt\fR" 4
21388 .IX Item "vec-sqrt"
21389 Enable the approximation for vectorized square root.
21390 .RE
21391 .RS 4
21392 .Sp
21393 So, for example, \fB\-mrecip=all,!sqrt\fR enables
21394 all of the reciprocal approximations, except for square root.
21395 .RE
21396 .IP "\fB\-mveclibabi=\fR\fItype\fR" 4
21397 .IX Item "-mveclibabi=type"
21398 Specifies the \s-1ABI\s0 type to use for vectorizing intrinsics using an
21399 external library.  Supported values for \fItype\fR are \fBsvml\fR 
21400 for the Intel short
21401 vector math library and \fBacml\fR for the \s-1AMD\s0 math core library.
21402 To use this option, both \fB\-ftree\-vectorize\fR and
21403 \&\fB\-funsafe\-math\-optimizations\fR have to be enabled, and an \s-1SVML\s0 or \s-1ACML\s0 
21404 ABI-compatible library must be specified at link time.
21405 .Sp
21406 \&\s-1GCC\s0 currently emits calls to \f(CW\*(C`vmldExp2\*(C'\fR,
21407 \&\f(CW\*(C`vmldLn2\*(C'\fR, \f(CW\*(C`vmldLog102\*(C'\fR, \f(CW\*(C`vmldLog102\*(C'\fR, \f(CW\*(C`vmldPow2\*(C'\fR,
21408 \&\f(CW\*(C`vmldTanh2\*(C'\fR, \f(CW\*(C`vmldTan2\*(C'\fR, \f(CW\*(C`vmldAtan2\*(C'\fR, \f(CW\*(C`vmldAtanh2\*(C'\fR,
21409 \&\f(CW\*(C`vmldCbrt2\*(C'\fR, \f(CW\*(C`vmldSinh2\*(C'\fR, \f(CW\*(C`vmldSin2\*(C'\fR, \f(CW\*(C`vmldAsinh2\*(C'\fR,
21410 \&\f(CW\*(C`vmldAsin2\*(C'\fR, \f(CW\*(C`vmldCosh2\*(C'\fR, \f(CW\*(C`vmldCos2\*(C'\fR, \f(CW\*(C`vmldAcosh2\*(C'\fR,
21411 \&\f(CW\*(C`vmldAcos2\*(C'\fR, \f(CW\*(C`vmlsExp4\*(C'\fR, \f(CW\*(C`vmlsLn4\*(C'\fR, \f(CW\*(C`vmlsLog104\*(C'\fR,
21412 \&\f(CW\*(C`vmlsLog104\*(C'\fR, \f(CW\*(C`vmlsPow4\*(C'\fR, \f(CW\*(C`vmlsTanh4\*(C'\fR, \f(CW\*(C`vmlsTan4\*(C'\fR,
21413 \&\f(CW\*(C`vmlsAtan4\*(C'\fR, \f(CW\*(C`vmlsAtanh4\*(C'\fR, \f(CW\*(C`vmlsCbrt4\*(C'\fR, \f(CW\*(C`vmlsSinh4\*(C'\fR,
21414 \&\f(CW\*(C`vmlsSin4\*(C'\fR, \f(CW\*(C`vmlsAsinh4\*(C'\fR, \f(CW\*(C`vmlsAsin4\*(C'\fR, \f(CW\*(C`vmlsCosh4\*(C'\fR,
21415 \&\f(CW\*(C`vmlsCos4\*(C'\fR, \f(CW\*(C`vmlsAcosh4\*(C'\fR and \f(CW\*(C`vmlsAcos4\*(C'\fR for corresponding
21416 function type when \fB\-mveclibabi=svml\fR is used, and \f(CW\*(C`_\|_vrd2_sin\*(C'\fR,
21417 \&\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,
21418 \&\f(CW\*(C`_\|_vrd2_log10\*(C'\fR, \f(CW\*(C`_\|_vrs4_sinf\*(C'\fR, \f(CW\*(C`_\|_vrs4_cosf\*(C'\fR,
21419 \&\f(CW\*(C`_\|_vrs4_expf\*(C'\fR, \f(CW\*(C`_\|_vrs4_logf\*(C'\fR, \f(CW\*(C`_\|_vrs4_log2f\*(C'\fR,
21420 \&\f(CW\*(C`_\|_vrs4_log10f\*(C'\fR and \f(CW\*(C`_\|_vrs4_powf\*(C'\fR for the corresponding function type
21421 when \fB\-mveclibabi=acml\fR is used.
21422 .IP "\fB\-mabi=\fR\fIname\fR" 4
21423 .IX Item "-mabi=name"
21424 Generate code for the specified calling convention.  Permissible values
21425 are \fBsysv\fR for the \s-1ABI\s0 used on GNU/Linux and other systems, and
21426 \&\fBms\fR for the Microsoft \s-1ABI\s0.  The default is to use the Microsoft
21427 \&\s-1ABI\s0 when targeting Microsoft Windows and the SysV \s-1ABI\s0 on all other systems.
21428 You can control this behavior for specific functions by
21429 using the function attributes \f(CW\*(C`ms_abi\*(C'\fR and \f(CW\*(C`sysv_abi\*(C'\fR.
21430 .IP "\fB\-mtls\-dialect=\fR\fItype\fR" 4
21431 .IX Item "-mtls-dialect=type"
21432 Generate code to access thread-local storage using the \fBgnu\fR or
21433 \&\fBgnu2\fR conventions.  \fBgnu\fR is the conservative default;
21434 \&\fBgnu2\fR is more efficient, but it may add compile\- and run-time
21435 requirements that cannot be satisfied on all systems.
21436 .IP "\fB\-mpush\-args\fR" 4
21437 .IX Item "-mpush-args"
21438 .PD 0
21439 .IP "\fB\-mno\-push\-args\fR" 4
21440 .IX Item "-mno-push-args"
21441 .PD
21442 Use \s-1PUSH\s0 operations to store outgoing parameters.  This method is shorter
21443 and usually equally fast as method using \s-1SUB/MOV\s0 operations and is enabled
21444 by default.  In some cases disabling it may improve performance because of
21445 improved scheduling and reduced dependencies.
21446 .IP "\fB\-maccumulate\-outgoing\-args\fR" 4
21447 .IX Item "-maccumulate-outgoing-args"
21448 If enabled, the maximum amount of space required for outgoing arguments is
21449 computed in the function prologue.  This is faster on most modern CPUs
21450 because of reduced dependencies, improved scheduling and reduced stack usage
21451 when the preferred stack boundary is not equal to 2.  The drawback is a notable
21452 increase in code size.  This switch implies \fB\-mno\-push\-args\fR.
21453 .IP "\fB\-mthreads\fR" 4
21454 .IX Item "-mthreads"
21455 Support thread-safe exception handling on MinGW.  Programs that rely
21456 on thread-safe exception handling must compile and link all code with the
21457 \&\fB\-mthreads\fR option.  When compiling, \fB\-mthreads\fR defines
21458 \&\fB\-D_MT\fR; when linking, it links in a special thread helper library
21459 \&\fB\-lmingwthrd\fR which cleans up per-thread exception-handling data.
21460 .IP "\fB\-mno\-align\-stringops\fR" 4
21461 .IX Item "-mno-align-stringops"
21462 Do not align the destination of inlined string operations.  This switch reduces
21463 code size and improves performance in case the destination is already aligned,
21464 but \s-1GCC\s0 doesn't know about it.
21465 .IP "\fB\-minline\-all\-stringops\fR" 4
21466 .IX Item "-minline-all-stringops"
21467 By default \s-1GCC\s0 inlines string operations only when the destination is 
21468 known to be aligned to least a 4\-byte boundary.  
21469 This enables more inlining and increases code
21470 size, but may improve performance of code that depends on fast
21471 \&\f(CW\*(C`memcpy\*(C'\fR, \f(CW\*(C`strlen\*(C'\fR,
21472 and \f(CW\*(C`memset\*(C'\fR for short lengths.
21473 .IP "\fB\-minline\-stringops\-dynamically\fR" 4
21474 .IX Item "-minline-stringops-dynamically"
21475 For string operations of unknown size, use run-time checks with
21476 inline code for small blocks and a library call for large blocks.
21477 .IP "\fB\-mstringop\-strategy=\fR\fIalg\fR" 4
21478 .IX Item "-mstringop-strategy=alg"
21479 Override the internal decision heuristic for the particular algorithm to use
21480 for inlining string operations.  The allowed values for \fIalg\fR are:
21481 .RS 4
21482 .IP "\fBrep_byte\fR" 4
21483 .IX Item "rep_byte"
21484 .PD 0
21485 .IP "\fBrep_4byte\fR" 4
21486 .IX Item "rep_4byte"
21487 .IP "\fBrep_8byte\fR" 4
21488 .IX Item "rep_8byte"
21489 .PD
21490 Expand using i386 \f(CW\*(C`rep\*(C'\fR prefix of the specified size.
21491 .IP "\fBbyte_loop\fR" 4
21492 .IX Item "byte_loop"
21493 .PD 0
21494 .IP "\fBloop\fR" 4
21495 .IX Item "loop"
21496 .IP "\fBunrolled_loop\fR" 4
21497 .IX Item "unrolled_loop"
21498 .PD
21499 Expand into an inline loop.
21500 .IP "\fBlibcall\fR" 4
21501 .IX Item "libcall"
21502 Always use a library call.
21503 .RE
21504 .RS 4
21505 .RE
21506 .IP "\fB\-mmemcpy\-strategy=\fR\fIstrategy\fR" 4
21507 .IX Item "-mmemcpy-strategy=strategy"
21508 Override the internal decision heuristic to decide if \f(CW\*(C`_\|_builtin_memcpy\*(C'\fR
21509 should be inlined and what inline algorithm to use when the expected size
21510 of the copy operation is known. \fIstrategy\fR 
21511 is a comma-separated list of \fIalg\fR:\fImax_size\fR:\fIdest_align\fR triplets. 
21512 \&\fIalg\fR is specified in \fB\-mstringop\-strategy\fR, \fImax_size\fR specifies
21513 the max byte size with which inline algorithm \fIalg\fR is allowed.  For the last
21514 triplet, the \fImax_size\fR must be \f(CW\*(C`\-1\*(C'\fR. The \fImax_size\fR of the triplets
21515 in the list must be specified in increasing order.  The minimal byte size for 
21516 \&\fIalg\fR is \f(CW0\fR for the first triplet and \f(CW\*(C`\f(CImax_size\f(CW + 1\*(C'\fR of the 
21517 preceding range.
21518 .IP "\fB\-mmemset\-strategy=\fR\fIstrategy\fR" 4
21519 .IX Item "-mmemset-strategy=strategy"
21520 The option is similar to \fB\-mmemcpy\-strategy=\fR except that it is to control
21521 \&\f(CW\*(C`_\|_builtin_memset\*(C'\fR expansion.
21522 .IP "\fB\-momit\-leaf\-frame\-pointer\fR" 4
21523 .IX Item "-momit-leaf-frame-pointer"
21524 Don't keep the frame pointer in a register for leaf functions.  This
21525 avoids the instructions to save, set up, and restore frame pointers and
21526 makes an extra register available in leaf functions.  The option
21527 \&\fB\-fomit\-leaf\-frame\-pointer\fR removes the frame pointer for leaf functions,
21528 which might make debugging harder.
21529 .IP "\fB\-mtls\-direct\-seg\-refs\fR" 4
21530 .IX Item "-mtls-direct-seg-refs"
21531 .PD 0
21532 .IP "\fB\-mno\-tls\-direct\-seg\-refs\fR" 4
21533 .IX Item "-mno-tls-direct-seg-refs"
21534 .PD
21535 Controls whether \s-1TLS\s0 variables may be accessed with offsets from the
21536 \&\s-1TLS\s0 segment register (\f(CW%gs\fR for 32\-bit, \f(CW%fs\fR for 64\-bit),
21537 or whether the thread base pointer must be added.  Whether or not this
21538 is valid depends on the operating system, and whether it maps the
21539 segment to cover the entire \s-1TLS\s0 area.
21540 .Sp
21541 For systems that use the \s-1GNU\s0 C Library, the default is on.
21542 .IP "\fB\-msse2avx\fR" 4
21543 .IX Item "-msse2avx"
21544 .PD 0
21545 .IP "\fB\-mno\-sse2avx\fR" 4
21546 .IX Item "-mno-sse2avx"
21547 .PD
21548 Specify that the assembler should encode \s-1SSE\s0 instructions with \s-1VEX\s0
21549 prefix.  The option \fB\-mavx\fR turns this on by default.
21550 .IP "\fB\-mfentry\fR" 4
21551 .IX Item "-mfentry"
21552 .PD 0
21553 .IP "\fB\-mno\-fentry\fR" 4
21554 .IX Item "-mno-fentry"
21555 .PD
21556 If profiling is active (\fB\-pg\fR), put the profiling
21557 counter call before the prologue.
21558 Note: On x86 architectures the attribute \f(CW\*(C`ms_hook_prologue\*(C'\fR
21559 isn't possible at the moment for \fB\-mfentry\fR and \fB\-pg\fR.
21560 .IP "\fB\-mrecord\-mcount\fR" 4
21561 .IX Item "-mrecord-mcount"
21562 .PD 0
21563 .IP "\fB\-mno\-record\-mcount\fR" 4
21564 .IX Item "-mno-record-mcount"
21565 .PD
21566 If profiling is active (\fB\-pg\fR), generate a _\|_mcount_loc section
21567 that contains pointers to each profiling call. This is useful for
21568 automatically patching and out calls.
21569 .IP "\fB\-mnop\-mcount\fR" 4
21570 .IX Item "-mnop-mcount"
21571 .PD 0
21572 .IP "\fB\-mno\-nop\-mcount\fR" 4
21573 .IX Item "-mno-nop-mcount"
21574 .PD
21575 If profiling is active (\fB\-pg\fR), generate the calls to
21576 the profiling functions as nops. This is useful when they
21577 should be patched in later dynamically. This is likely only
21578 useful together with \fB\-mrecord\-mcount\fR.
21579 .IP "\fB\-mskip\-rax\-setup\fR" 4
21580 .IX Item "-mskip-rax-setup"
21581 .PD 0
21582 .IP "\fB\-mno\-skip\-rax\-setup\fR" 4
21583 .IX Item "-mno-skip-rax-setup"
21584 .PD
21585 When generating code for the x86\-64 architecture with \s-1SSE\s0 extensions
21586 disabled, \fB\-mskip\-rax\-setup\fR can be used to skip setting up \s-1RAX\s0
21587 register when there are no variable arguments passed in vector registers.
21588 .Sp
21589 \&\fBWarning:\fR Since \s-1RAX\s0 register is used to avoid unnecessarily
21590 saving vector registers on stack when passing variable arguments, the
21591 impacts of this option are callees may waste some stack space,
21592 misbehave or jump to a random location.  \s-1GCC\s0 4.4 or newer don't have
21593 those issues, regardless the \s-1RAX\s0 register value.
21594 .IP "\fB\-m8bit\-idiv\fR" 4
21595 .IX Item "-m8bit-idiv"
21596 .PD 0
21597 .IP "\fB\-mno\-8bit\-idiv\fR" 4
21598 .IX Item "-mno-8bit-idiv"
21599 .PD
21600 On some processors, like Intel Atom, 8\-bit unsigned integer divide is
21601 much faster than 32\-bit/64\-bit integer divide.  This option generates a
21602 run-time check.  If both dividend and divisor are within range of 0
21603 to 255, 8\-bit unsigned integer divide is used instead of
21604 32\-bit/64\-bit integer divide.
21605 .IP "\fB\-mavx256\-split\-unaligned\-load\fR" 4
21606 .IX Item "-mavx256-split-unaligned-load"
21607 .PD 0
21608 .IP "\fB\-mavx256\-split\-unaligned\-store\fR" 4
21609 .IX Item "-mavx256-split-unaligned-store"
21610 .PD
21611 Split 32\-byte \s-1AVX\s0 unaligned load and store.
21612 .IP "\fB\-mstack\-protector\-guard=\fR\fIguard\fR" 4
21613 .IX Item "-mstack-protector-guard=guard"
21614 Generate stack protection code using canary at \fIguard\fR.  Supported
21615 locations are \fBglobal\fR for global canary or \fBtls\fR for per-thread
21616 canary in the \s-1TLS\s0 block (the default).  This option has effect only when
21617 \&\fB\-fstack\-protector\fR or \fB\-fstack\-protector\-all\fR is specified.
21618 .PP
21619 These \fB\-m\fR switches are supported in addition to the above
21620 on x86\-64 processors in 64\-bit environments.
21621 .IP "\fB\-m32\fR" 4
21622 .IX Item "-m32"
21623 .PD 0
21624 .IP "\fB\-m64\fR" 4
21625 .IX Item "-m64"
21626 .IP "\fB\-mx32\fR" 4
21627 .IX Item "-mx32"
21628 .IP "\fB\-m16\fR" 4
21629 .IX Item "-m16"
21630 .PD
21631 Generate code for a 16\-bit, 32\-bit or 64\-bit environment.
21632 The \fB\-m32\fR option sets \f(CW\*(C`int\*(C'\fR, \f(CW\*(C`long\*(C'\fR, and pointer types
21633 to 32 bits, and
21634 generates code that runs on any i386 system.
21635 .Sp
21636 The \fB\-m64\fR option sets \f(CW\*(C`int\*(C'\fR to 32 bits and \f(CW\*(C`long\*(C'\fR and pointer
21637 types to 64 bits, and generates code for the x86\-64 architecture.
21638 For Darwin only the \fB\-m64\fR option also turns off the \fB\-fno\-pic\fR
21639 and \fB\-mdynamic\-no\-pic\fR options.
21640 .Sp
21641 The \fB\-mx32\fR option sets \f(CW\*(C`int\*(C'\fR, \f(CW\*(C`long\*(C'\fR, and pointer types
21642 to 32 bits, and
21643 generates code for the x86\-64 architecture.
21644 .Sp
21645 The \fB\-m16\fR option is the same as \fB\-m32\fR, except for that
21646 it outputs the \f(CW\*(C`.code16gcc\*(C'\fR assembly directive at the beginning of
21647 the assembly output so that the binary can run in 16\-bit mode.
21648 .IP "\fB\-mno\-red\-zone\fR" 4
21649 .IX Item "-mno-red-zone"
21650 Do not use a so-called \*(L"red zone\*(R" for x86\-64 code.  The red zone is mandated
21651 by the x86\-64 \s-1ABI\s0; it is a 128\-byte area beyond the location of the
21652 stack pointer that is not modified by signal or interrupt handlers
21653 and therefore can be used for temporary data without adjusting the stack
21654 pointer.  The flag \fB\-mno\-red\-zone\fR disables this red zone.
21655 .IP "\fB\-mcmodel=small\fR" 4
21656 .IX Item "-mcmodel=small"
21657 Generate code for the small code model: the program and its symbols must
21658 be linked in the lower 2 \s-1GB\s0 of the address space.  Pointers are 64 bits.
21659 Programs can be statically or dynamically linked.  This is the default
21660 code model.
21661 .IP "\fB\-mcmodel=kernel\fR" 4
21662 .IX Item "-mcmodel=kernel"
21663 Generate code for the kernel code model.  The kernel runs in the
21664 negative 2 \s-1GB\s0 of the address space.
21665 This model has to be used for Linux kernel code.
21666 .IP "\fB\-mcmodel=medium\fR" 4
21667 .IX Item "-mcmodel=medium"
21668 Generate code for the medium model: the program is linked in the lower 2
21669 \&\s-1GB\s0 of the address space.  Small symbols are also placed there.  Symbols
21670 with sizes larger than \fB\-mlarge\-data\-threshold\fR are put into
21671 large data or \s-1BSS\s0 sections and can be located above 2GB.  Programs can
21672 be statically or dynamically linked.
21673 .IP "\fB\-mcmodel=large\fR" 4
21674 .IX Item "-mcmodel=large"
21675 Generate code for the large model.  This model makes no assumptions
21676 about addresses and sizes of sections.
21677 .IP "\fB\-maddress\-mode=long\fR" 4
21678 .IX Item "-maddress-mode=long"
21679 Generate code for long address mode.  This is only supported for 64\-bit
21680 and x32 environments.  It is the default address mode for 64\-bit
21681 environments.
21682 .IP "\fB\-maddress\-mode=short\fR" 4
21683 .IX Item "-maddress-mode=short"
21684 Generate code for short address mode.  This is only supported for 32\-bit
21685 and x32 environments.  It is the default address mode for 32\-bit and
21686 x32 environments.
21687 .PP
21688 \fIx86 Windows Options\fR
21689 .IX Subsection "x86 Windows Options"
21690 .PP
21691 These additional options are available for Microsoft Windows targets:
21692 .IP "\fB\-mconsole\fR" 4
21693 .IX Item "-mconsole"
21694 This option
21695 specifies that a console application is to be generated, by
21696 instructing the linker to set the \s-1PE\s0 header subsystem type
21697 required for console applications.
21698 This option is available for Cygwin and MinGW targets and is
21699 enabled by default on those targets.
21700 .IP "\fB\-mdll\fR" 4
21701 .IX Item "-mdll"
21702 This option is available for Cygwin and MinGW targets.  It
21703 specifies that a DLL\-\-\-a dynamic link library\-\-\-is to be
21704 generated, enabling the selection of the required runtime
21705 startup object and entry point.
21706 .IP "\fB\-mnop\-fun\-dllimport\fR" 4
21707 .IX Item "-mnop-fun-dllimport"
21708 This option is available for Cygwin and MinGW targets.  It
21709 specifies that the \f(CW\*(C`dllimport\*(C'\fR attribute should be ignored.
21710 .IP "\fB\-mthread\fR" 4
21711 .IX Item "-mthread"
21712 This option is available for MinGW targets. It specifies
21713 that MinGW-specific thread support is to be used.
21714 .IP "\fB\-municode\fR" 4
21715 .IX Item "-municode"
21716 This option is available for MinGW\-w64 targets.  It causes
21717 the \f(CW\*(C`UNICODE\*(C'\fR preprocessor macro to be predefined, and
21718 chooses Unicode-capable runtime startup code.
21719 .IP "\fB\-mwin32\fR" 4
21720 .IX Item "-mwin32"
21721 This option is available for Cygwin and MinGW targets.  It
21722 specifies that the typical Microsoft Windows predefined macros are to
21723 be set in the pre-processor, but does not influence the choice
21724 of runtime library/startup code.
21725 .IP "\fB\-mwindows\fR" 4
21726 .IX Item "-mwindows"
21727 This option is available for Cygwin and MinGW targets.  It
21728 specifies that a \s-1GUI\s0 application is to be generated by
21729 instructing the linker to set the \s-1PE\s0 header subsystem type
21730 appropriately.
21731 .IP "\fB\-fno\-set\-stack\-executable\fR" 4
21732 .IX Item "-fno-set-stack-executable"
21733 This option is available for MinGW targets. It specifies that
21734 the executable flag for the stack used by nested functions isn't
21735 set. This is necessary for binaries running in kernel mode of
21736 Microsoft Windows, as there the User32 \s-1API\s0, which is used to set executable
21737 privileges, isn't available.
21738 .IP "\fB\-fwritable\-relocated\-rdata\fR" 4
21739 .IX Item "-fwritable-relocated-rdata"
21740 This option is available for MinGW and Cygwin targets.  It specifies
21741 that relocated-data in read-only section is put into .data
21742 section.  This is a necessary for older runtimes not supporting
21743 modification of .rdata sections for pseudo-relocation.
21744 .IP "\fB\-mpe\-aligned\-commons\fR" 4
21745 .IX Item "-mpe-aligned-commons"
21746 This option is available for Cygwin and MinGW targets.  It
21747 specifies that the \s-1GNU\s0 extension to the \s-1PE\s0 file format that
21748 permits the correct alignment of \s-1COMMON\s0 variables should be
21749 used when generating code.  It is enabled by default if
21750 \&\s-1GCC\s0 detects that the target assembler found during configuration
21751 supports the feature.
21752 .PP
21753 See also under \fBx86 Options\fR for standard options.
21754 .PP
21755 \fIXstormy16 Options\fR
21756 .IX Subsection "Xstormy16 Options"
21757 .PP
21758 These options are defined for Xstormy16:
21759 .IP "\fB\-msim\fR" 4
21760 .IX Item "-msim"
21761 Choose startup files and linker script suitable for the simulator.
21762 .PP
21763 \fIXtensa Options\fR
21764 .IX Subsection "Xtensa Options"
21765 .PP
21766 These options are supported for Xtensa targets:
21767 .IP "\fB\-mconst16\fR" 4
21768 .IX Item "-mconst16"
21769 .PD 0
21770 .IP "\fB\-mno\-const16\fR" 4
21771 .IX Item "-mno-const16"
21772 .PD
21773 Enable or disable use of \f(CW\*(C`CONST16\*(C'\fR instructions for loading
21774 constant values.  The \f(CW\*(C`CONST16\*(C'\fR instruction is currently not a
21775 standard option from Tensilica.  When enabled, \f(CW\*(C`CONST16\*(C'\fR
21776 instructions are always used in place of the standard \f(CW\*(C`L32R\*(C'\fR
21777 instructions.  The use of \f(CW\*(C`CONST16\*(C'\fR is enabled by default only if
21778 the \f(CW\*(C`L32R\*(C'\fR instruction is not available.
21779 .IP "\fB\-mfused\-madd\fR" 4
21780 .IX Item "-mfused-madd"
21781 .PD 0
21782 .IP "\fB\-mno\-fused\-madd\fR" 4
21783 .IX Item "-mno-fused-madd"
21784 .PD
21785 Enable or disable use of fused multiply/add and multiply/subtract
21786 instructions in the floating-point option.  This has no effect if the
21787 floating-point option is not also enabled.  Disabling fused multiply/add
21788 and multiply/subtract instructions forces the compiler to use separate
21789 instructions for the multiply and add/subtract operations.  This may be
21790 desirable in some cases where strict \s-1IEEE\s0 754\-compliant results are
21791 required: the fused multiply add/subtract instructions do not round the
21792 intermediate result, thereby producing results with \fImore\fR bits of
21793 precision than specified by the \s-1IEEE\s0 standard.  Disabling fused multiply
21794 add/subtract instructions also ensures that the program output is not
21795 sensitive to the compiler's ability to combine multiply and add/subtract
21796 operations.
21797 .IP "\fB\-mserialize\-volatile\fR" 4
21798 .IX Item "-mserialize-volatile"
21799 .PD 0
21800 .IP "\fB\-mno\-serialize\-volatile\fR" 4
21801 .IX Item "-mno-serialize-volatile"
21802 .PD
21803 When this option is enabled, \s-1GCC\s0 inserts \f(CW\*(C`MEMW\*(C'\fR instructions before
21804 \&\f(CW\*(C`volatile\*(C'\fR memory references to guarantee sequential consistency.
21805 The default is \fB\-mserialize\-volatile\fR.  Use
21806 \&\fB\-mno\-serialize\-volatile\fR to omit the \f(CW\*(C`MEMW\*(C'\fR instructions.
21807 .IP "\fB\-mforce\-no\-pic\fR" 4
21808 .IX Item "-mforce-no-pic"
21809 For targets, like GNU/Linux, where all user-mode Xtensa code must be
21810 position-independent code (\s-1PIC\s0), this option disables \s-1PIC\s0 for compiling
21811 kernel code.
21812 .IP "\fB\-mtext\-section\-literals\fR" 4
21813 .IX Item "-mtext-section-literals"
21814 .PD 0
21815 .IP "\fB\-mno\-text\-section\-literals\fR" 4
21816 .IX Item "-mno-text-section-literals"
21817 .PD
21818 These options control the treatment of literal pools.  The default is
21819 \&\fB\-mno\-text\-section\-literals\fR, which places literals in a separate
21820 section in the output file.  This allows the literal pool to be placed
21821 in a data \s-1RAM/ROM\s0, and it also allows the linker to combine literal
21822 pools from separate object files to remove redundant literals and
21823 improve code size.  With \fB\-mtext\-section\-literals\fR, the literals
21824 are interspersed in the text section in order to keep them as close as
21825 possible to their references.  This may be necessary for large assembly
21826 files.
21827 .IP "\fB\-mtarget\-align\fR" 4
21828 .IX Item "-mtarget-align"
21829 .PD 0
21830 .IP "\fB\-mno\-target\-align\fR" 4
21831 .IX Item "-mno-target-align"
21832 .PD
21833 When this option is enabled, \s-1GCC\s0 instructs the assembler to
21834 automatically align instructions to reduce branch penalties at the
21835 expense of some code density.  The assembler attempts to widen density
21836 instructions to align branch targets and the instructions following call
21837 instructions.  If there are not enough preceding safe density
21838 instructions to align a target, no widening is performed.  The
21839 default is \fB\-mtarget\-align\fR.  These options do not affect the
21840 treatment of auto-aligned instructions like \f(CW\*(C`LOOP\*(C'\fR, which the
21841 assembler always aligns, either by widening density instructions or
21842 by inserting \s-1NOP\s0 instructions.
21843 .IP "\fB\-mlongcalls\fR" 4
21844 .IX Item "-mlongcalls"
21845 .PD 0
21846 .IP "\fB\-mno\-longcalls\fR" 4
21847 .IX Item "-mno-longcalls"
21848 .PD
21849 When this option is enabled, \s-1GCC\s0 instructs the assembler to translate
21850 direct calls to indirect calls unless it can determine that the target
21851 of a direct call is in the range allowed by the call instruction.  This
21852 translation typically occurs for calls to functions in other source
21853 files.  Specifically, the assembler translates a direct \f(CW\*(C`CALL\*(C'\fR
21854 instruction into an \f(CW\*(C`L32R\*(C'\fR followed by a \f(CW\*(C`CALLX\*(C'\fR instruction.
21855 The default is \fB\-mno\-longcalls\fR.  This option should be used in
21856 programs where the call target can potentially be out of range.  This
21857 option is implemented in the assembler, not the compiler, so the
21858 assembly code generated by \s-1GCC\s0 still shows direct call
21859 instructions\-\-\-look at the disassembled object code to see the actual
21860 instructions.  Note that the assembler uses an indirect call for
21861 every cross-file call, not just those that really are out of range.
21862 .PP
21863 \fIzSeries Options\fR
21864 .IX Subsection "zSeries Options"
21865 .PP
21866 These are listed under
21867 .Sh "Options for Code Generation Conventions"
21868 .IX Subsection "Options for Code Generation Conventions"
21869 These machine-independent options control the interface conventions
21870 used in code generation.
21871 .PP
21872 Most of them have both positive and negative forms; the negative form
21873 of \fB\-ffoo\fR is \fB\-fno\-foo\fR.  In the table below, only
21874 one of the forms is listed\-\-\-the one that is not the default.  You
21875 can figure out the other form by either removing \fBno\-\fR or adding
21876 it.
21877 .IP "\fB\-fbounds\-check\fR" 4
21878 .IX Item "-fbounds-check"
21879 For front ends that support it, generate additional code to check that
21880 indices used to access arrays are within the declared range.  This is
21881 currently only supported by the Java and Fortran front ends, where
21882 this option defaults to true and false respectively.
21883 .IP "\fB\-fstack\-reuse=\fR\fIreuse-level\fR" 4
21884 .IX Item "-fstack-reuse=reuse-level"
21885 This option controls stack space reuse for user declared local/auto variables
21886 and compiler generated temporaries.  \fIreuse_level\fR can be \fBall\fR,
21887 \&\fBnamed_vars\fR, or \fBnone\fR. \fBall\fR enables stack reuse for all
21888 local variables and temporaries, \fBnamed_vars\fR enables the reuse only for
21889 user defined local variables with names, and \fBnone\fR disables stack reuse
21890 completely. The default value is \fBall\fR. The option is needed when the
21891 program extends the lifetime of a scoped local variable or a compiler generated
21892 temporary beyond the end point defined by the language.  When a lifetime of
21893 a variable ends, and if the variable lives in memory, the optimizing compiler
21894 has the freedom to reuse its stack space with other temporaries or scoped
21895 local variables whose live range does not overlap with it. Legacy code extending
21896 local lifetime is likely to break with the stack reuse optimization.
21897 .Sp
21898 For example,
21899 .Sp
21900 .Vb 3
21901 \&           int *p;
21902 \&           {
21903 \&             int local1;
21904 \&        
21905 \&             p = &local1;
21906 \&             local1 = 10;
21907 \&             ....
21908 \&           }
21909 \&           {
21910 \&              int local2;
21911 \&              local2 = 20;
21912 \&              ...
21913 \&           }
21914 \&        
21915 \&           if (*p == 10)  // out of scope use of local1
21916 \&             {
21917 \&        
21918 \&             }
21919 .Ve
21920 .Sp
21921 Another example:
21922 .Sp
21923 .Vb 6
21924 \&           struct A
21925 \&           {
21926 \&               A(int k) : i(k), j(k) { }
21927 \&               int i;
21928 \&               int j;
21929 \&           };
21930 \&        
21931 \&           A *ap;
21932 \&        
21933 \&           void foo(const A& ar)
21934 \&           {
21935 \&              ap = &ar;
21936 \&           }
21937 \&        
21938 \&           void bar()
21939 \&           {
21940 \&              foo(A(10)); // temp object\*(Aqs lifetime ends when foo returns
21941 \&        
21942 \&              {
21943 \&                A a(20);
21944 \&                ....
21945 \&              }
21946 \&              ap\->i+= 10;  // ap references out of scope temp whose space
21947 \&                           // is reused with a. What is the value of ap\->i?
21948 \&           }
21949 .Ve
21950 .Sp
21951 The lifetime of a compiler generated temporary is well defined by the \*(C+
21952 standard. When a lifetime of a temporary ends, and if the temporary lives
21953 in memory, the optimizing compiler has the freedom to reuse its stack
21954 space with other temporaries or scoped local variables whose live range
21955 does not overlap with it. However some of the legacy code relies on
21956 the behavior of older compilers in which temporaries' stack space is
21957 not reused, the aggressive stack reuse can lead to runtime errors. This
21958 option is used to control the temporary stack reuse optimization.
21959 .IP "\fB\-ftrapv\fR" 4
21960 .IX Item "-ftrapv"
21961 This option generates traps for signed overflow on addition, subtraction,
21962 multiplication operations.
21963 .IP "\fB\-fwrapv\fR" 4
21964 .IX Item "-fwrapv"
21965 This option instructs the compiler to assume that signed arithmetic
21966 overflow of addition, subtraction and multiplication wraps around
21967 using twos-complement representation.  This flag enables some optimizations
21968 and disables others.  This option is enabled by default for the Java
21969 front end, as required by the Java language specification.
21970 .IP "\fB\-fexceptions\fR" 4
21971 .IX Item "-fexceptions"
21972 Enable exception handling.  Generates extra code needed to propagate
21973 exceptions.  For some targets, this implies \s-1GCC\s0 generates frame
21974 unwind information for all functions, which can produce significant data
21975 size overhead, although it does not affect execution.  If you do not
21976 specify this option, \s-1GCC\s0 enables it by default for languages like
21977 \&\*(C+ that normally require exception handling, and disables it for
21978 languages like C that do not normally require it.  However, you may need
21979 to enable this option when compiling C code that needs to interoperate
21980 properly with exception handlers written in \*(C+.  You may also wish to
21981 disable this option if you are compiling older \*(C+ programs that don't
21982 use exception handling.
21983 .IP "\fB\-fnon\-call\-exceptions\fR" 4
21984 .IX Item "-fnon-call-exceptions"
21985 Generate code that allows trapping instructions to throw exceptions.
21986 Note that this requires platform-specific runtime support that does
21987 not exist everywhere.  Moreover, it only allows \fItrapping\fR
21988 instructions to throw exceptions, i.e. memory references or floating-point
21989 instructions.  It does not allow exceptions to be thrown from
21990 arbitrary signal handlers such as \f(CW\*(C`SIGALRM\*(C'\fR.
21991 .IP "\fB\-fdelete\-dead\-exceptions\fR" 4
21992 .IX Item "-fdelete-dead-exceptions"
21993 Consider that instructions that may throw exceptions but don't otherwise
21994 contribute to the execution of the program can be optimized away.
21995 This option is enabled by default for the Ada front end, as permitted by
21996 the Ada language specification.
21997 Optimization passes that cause dead exceptions to be removed are enabled independently at different optimization levels.
21998 .IP "\fB\-funwind\-tables\fR" 4
21999 .IX Item "-funwind-tables"
22000 Similar to \fB\-fexceptions\fR, except that it just generates any needed
22001 static data, but does not affect the generated code in any other way.
22002 You normally do not need to enable this option; instead, a language processor
22003 that needs this handling enables it on your behalf.
22004 .IP "\fB\-fasynchronous\-unwind\-tables\fR" 4
22005 .IX Item "-fasynchronous-unwind-tables"
22006 Generate unwind table in \s-1DWARF\s0 2 format, if supported by target machine.  The
22007 table is exact at each instruction boundary, so it can be used for stack
22008 unwinding from asynchronous events (such as debugger or garbage collector).
22009 .IP "\fB\-fno\-gnu\-unique\fR" 4
22010 .IX Item "-fno-gnu-unique"
22011 On systems with recent \s-1GNU\s0 assembler and C library, the \*(C+ compiler
22012 uses the \f(CW\*(C`STB_GNU_UNIQUE\*(C'\fR binding to make sure that definitions
22013 of template static data members and static local variables in inline
22014 functions are unique even in the presence of \f(CW\*(C`RTLD_LOCAL\*(C'\fR; this
22015 is necessary to avoid problems with a library used by two different
22016 \&\f(CW\*(C`RTLD_LOCAL\*(C'\fR plugins depending on a definition in one of them and
22017 therefore disagreeing with the other one about the binding of the
22018 symbol.  But this causes \f(CW\*(C`dlclose\*(C'\fR to be ignored for affected
22019 DSOs; if your program relies on reinitialization of a \s-1DSO\s0 via
22020 \&\f(CW\*(C`dlclose\*(C'\fR and \f(CW\*(C`dlopen\*(C'\fR, you can use
22021 \&\fB\-fno\-gnu\-unique\fR.
22022 .IP "\fB\-fpcc\-struct\-return\fR" 4
22023 .IX Item "-fpcc-struct-return"
22024 Return \*(L"short\*(R" \f(CW\*(C`struct\*(C'\fR and \f(CW\*(C`union\*(C'\fR values in memory like
22025 longer ones, rather than in registers.  This convention is less
22026 efficient, but it has the advantage of allowing intercallability between
22027 GCC-compiled files and files compiled with other compilers, particularly
22028 the Portable C Compiler (pcc).
22029 .Sp
22030 The precise convention for returning structures in memory depends
22031 on the target configuration macros.
22032 .Sp
22033 Short structures and unions are those whose size and alignment match
22034 that of some integer type.
22035 .Sp
22036 \&\fBWarning:\fR code compiled with the \fB\-fpcc\-struct\-return\fR
22037 switch is not binary compatible with code compiled with the
22038 \&\fB\-freg\-struct\-return\fR switch.
22039 Use it to conform to a non-default application binary interface.
22040 .IP "\fB\-freg\-struct\-return\fR" 4
22041 .IX Item "-freg-struct-return"
22042 Return \f(CW\*(C`struct\*(C'\fR and \f(CW\*(C`union\*(C'\fR values in registers when possible.
22043 This is more efficient for small structures than
22044 \&\fB\-fpcc\-struct\-return\fR.
22045 .Sp
22046 If you specify neither \fB\-fpcc\-struct\-return\fR nor
22047 \&\fB\-freg\-struct\-return\fR, \s-1GCC\s0 defaults to whichever convention is
22048 standard for the target.  If there is no standard convention, \s-1GCC\s0
22049 defaults to \fB\-fpcc\-struct\-return\fR, except on targets where \s-1GCC\s0 is
22050 the principal compiler.  In those cases, we can choose the standard, and
22051 we chose the more efficient register return alternative.
22052 .Sp
22053 \&\fBWarning:\fR code compiled with the \fB\-freg\-struct\-return\fR
22054 switch is not binary compatible with code compiled with the
22055 \&\fB\-fpcc\-struct\-return\fR switch.
22056 Use it to conform to a non-default application binary interface.
22057 .IP "\fB\-fshort\-enums\fR" 4
22058 .IX Item "-fshort-enums"
22059 Allocate to an \f(CW\*(C`enum\*(C'\fR type only as many bytes as it needs for the
22060 declared range of possible values.  Specifically, the \f(CW\*(C`enum\*(C'\fR type
22061 is equivalent to the smallest integer type that has enough room.
22062 .Sp
22063 \&\fBWarning:\fR the \fB\-fshort\-enums\fR switch causes \s-1GCC\s0 to generate
22064 code that is not binary compatible with code generated without that switch.
22065 Use it to conform to a non-default application binary interface.
22066 .IP "\fB\-fshort\-double\fR" 4
22067 .IX Item "-fshort-double"
22068 Use the same size for \f(CW\*(C`double\*(C'\fR as for \f(CW\*(C`float\*(C'\fR.
22069 .Sp
22070 \&\fBWarning:\fR the \fB\-fshort\-double\fR switch causes \s-1GCC\s0 to generate
22071 code that is not binary compatible with code generated without that switch.
22072 Use it to conform to a non-default application binary interface.
22073 .IP "\fB\-fshort\-wchar\fR" 4
22074 .IX Item "-fshort-wchar"
22075 Override the underlying type for \f(CW\*(C`wchar_t\*(C'\fR to be \f(CW\*(C`short
22076 unsigned int\*(C'\fR instead of the default for the target.  This option is
22077 useful for building programs to run under \s-1WINE\s0.
22078 .Sp
22079 \&\fBWarning:\fR the \fB\-fshort\-wchar\fR switch causes \s-1GCC\s0 to generate
22080 code that is not binary compatible with code generated without that switch.
22081 Use it to conform to a non-default application binary interface.
22082 .IP "\fB\-fno\-common\fR" 4
22083 .IX Item "-fno-common"
22084 In C code, controls the placement of uninitialized global variables.
22085 Unix C compilers have traditionally permitted multiple definitions of
22086 such variables in different compilation units by placing the variables
22087 in a common block.
22088 This is the behavior specified by \fB\-fcommon\fR, and is the default
22089 for \s-1GCC\s0 on most targets.
22090 On the other hand, this behavior is not required by \s-1ISO\s0 C, and on some
22091 targets may carry a speed or code size penalty on variable references.
22092 The \fB\-fno\-common\fR option specifies that the compiler should place
22093 uninitialized global variables in the data section of the object file,
22094 rather than generating them as common blocks.
22095 This has the effect that if the same variable is declared
22096 (without \f(CW\*(C`extern\*(C'\fR) in two different compilations,
22097 you get a multiple-definition error when you link them.
22098 In this case, you must compile with \fB\-fcommon\fR instead.
22099 Compiling with \fB\-fno\-common\fR is useful on targets for which
22100 it provides better performance, or if you wish to verify that the
22101 program will work on other systems that always treat uninitialized
22102 variable declarations this way.
22103 .IP "\fB\-fno\-ident\fR" 4
22104 .IX Item "-fno-ident"
22105 Ignore the \f(CW\*(C`#ident\*(C'\fR directive.
22106 .IP "\fB\-finhibit\-size\-directive\fR" 4
22107 .IX Item "-finhibit-size-directive"
22108 Don't output a \f(CW\*(C`.size\*(C'\fR assembler directive, or anything else that
22109 would cause trouble if the function is split in the middle, and the
22110 two halves are placed at locations far apart in memory.  This option is
22111 used when compiling \fIcrtstuff.c\fR; you should not need to use it
22112 for anything else.
22113 .IP "\fB\-fverbose\-asm\fR" 4
22114 .IX Item "-fverbose-asm"
22115 Put extra commentary information in the generated assembly code to
22116 make it more readable.  This option is generally only of use to those
22117 who actually need to read the generated assembly code (perhaps while
22118 debugging the compiler itself).
22119 .Sp
22120 \&\fB\-fno\-verbose\-asm\fR, the default, causes the
22121 extra information to be omitted and is useful when comparing two assembler
22122 files.
22123 .IP "\fB\-frecord\-gcc\-switches\fR" 4
22124 .IX Item "-frecord-gcc-switches"
22125 This switch causes the command line used to invoke the
22126 compiler to be recorded into the object file that is being created.
22127 This switch is only implemented on some targets and the exact format
22128 of the recording is target and binary file format dependent, but it
22129 usually takes the form of a section containing \s-1ASCII\s0 text.  This
22130 switch is related to the \fB\-fverbose\-asm\fR switch, but that
22131 switch only records information in the assembler output file as
22132 comments, so it never reaches the object file.
22133 See also \fB\-grecord\-gcc\-switches\fR for another
22134 way of storing compiler options into the object file.
22135 .IP "\fB\-fpic\fR" 4
22136 .IX Item "-fpic"
22137 Generate position-independent code (\s-1PIC\s0) suitable for use in a shared
22138 library, if supported for the target machine.  Such code accesses all
22139 constant addresses through a global offset table (\s-1GOT\s0).  The dynamic
22140 loader resolves the \s-1GOT\s0 entries when the program starts (the dynamic
22141 loader is not part of \s-1GCC\s0; it is part of the operating system).  If
22142 the \s-1GOT\s0 size for the linked executable exceeds a machine-specific
22143 maximum size, you get an error message from the linker indicating that
22144 \&\fB\-fpic\fR does not work; in that case, recompile with \fB\-fPIC\fR
22145 instead.  (These maximums are 8k on the \s-1SPARC\s0 and 32k
22146 on the m68k and \s-1RS/6000\s0.  The x86 has no such limit.)
22147 .Sp
22148 Position-independent code requires special support, and therefore works
22149 only on certain machines.  For the x86, \s-1GCC\s0 supports \s-1PIC\s0 for System V
22150 but not for the Sun 386i.  Code generated for the \s-1IBM\s0 \s-1RS/6000\s0 is always
22151 position-independent.
22152 .Sp
22153 When this flag is set, the macros \f(CW\*(C`_\|_pic_\|_\*(C'\fR and \f(CW\*(C`_\|_PIC_\|_\*(C'\fR
22154 are defined to 1.
22155 .IP "\fB\-fPIC\fR" 4
22156 .IX Item "-fPIC"
22157 If supported for the target machine, emit position-independent code,
22158 suitable for dynamic linking and avoiding any limit on the size of the
22159 global offset table.  This option makes a difference on the m68k,
22160 PowerPC and \s-1SPARC\s0.
22161 .Sp
22162 Position-independent code requires special support, and therefore works
22163 only on certain machines.
22164 .Sp
22165 When this flag is set, the macros \f(CW\*(C`_\|_pic_\|_\*(C'\fR and \f(CW\*(C`_\|_PIC_\|_\*(C'\fR
22166 are defined to 2.
22167 .IP "\fB\-fpie\fR" 4
22168 .IX Item "-fpie"
22169 .PD 0
22170 .IP "\fB\-fPIE\fR" 4
22171 .IX Item "-fPIE"
22172 .PD
22173 These options are similar to \fB\-fpic\fR and \fB\-fPIC\fR, but
22174 generated position independent code can be only linked into executables.
22175 Usually these options are used when \fB\-pie\fR \s-1GCC\s0 option is
22176 used during linking.
22177 .Sp
22178 \&\fB\-fpie\fR and \fB\-fPIE\fR both define the macros
22179 \&\f(CW\*(C`_\|_pie_\|_\*(C'\fR and \f(CW\*(C`_\|_PIE_\|_\*(C'\fR.  The macros have the value 1
22180 for \fB\-fpie\fR and 2 for \fB\-fPIE\fR.
22181 .IP "\fB\-fno\-jump\-tables\fR" 4
22182 .IX Item "-fno-jump-tables"
22183 Do not use jump tables for switch statements even where it would be
22184 more efficient than other code generation strategies.  This option is
22185 of use in conjunction with \fB\-fpic\fR or \fB\-fPIC\fR for
22186 building code that forms part of a dynamic linker and cannot
22187 reference the address of a jump table.  On some targets, jump tables
22188 do not require a \s-1GOT\s0 and this option is not needed.
22189 .IP "\fB\-ffixed\-\fR\fIreg\fR" 4
22190 .IX Item "-ffixed-reg"
22191 Treat the register named \fIreg\fR as a fixed register; generated code
22192 should never refer to it (except perhaps as a stack pointer, frame
22193 pointer or in some other fixed role).
22194 .Sp
22195 \&\fIreg\fR must be the name of a register.  The register names accepted
22196 are machine-specific and are defined in the \f(CW\*(C`REGISTER_NAMES\*(C'\fR
22197 macro in the machine description macro file.
22198 .Sp
22199 This flag does not have a negative form, because it specifies a
22200 three-way choice.
22201 .IP "\fB\-fcall\-used\-\fR\fIreg\fR" 4
22202 .IX Item "-fcall-used-reg"
22203 Treat the register named \fIreg\fR as an allocable register that is
22204 clobbered by function calls.  It may be allocated for temporaries or
22205 variables that do not live across a call.  Functions compiled this way
22206 do not save and restore the register \fIreg\fR.
22207 .Sp
22208 It is an error to use this flag with the frame pointer or stack pointer.
22209 Use of this flag for other registers that have fixed pervasive roles in
22210 the machine's execution model produces disastrous results.
22211 .Sp
22212 This flag does not have a negative form, because it specifies a
22213 three-way choice.
22214 .IP "\fB\-fcall\-saved\-\fR\fIreg\fR" 4
22215 .IX Item "-fcall-saved-reg"
22216 Treat the register named \fIreg\fR as an allocable register saved by
22217 functions.  It may be allocated even for temporaries or variables that
22218 live across a call.  Functions compiled this way save and restore
22219 the register \fIreg\fR if they use it.
22220 .Sp
22221 It is an error to use this flag with the frame pointer or stack pointer.
22222 Use of this flag for other registers that have fixed pervasive roles in
22223 the machine's execution model produces disastrous results.
22224 .Sp
22225 A different sort of disaster results from the use of this flag for
22226 a register in which function values may be returned.
22227 .Sp
22228 This flag does not have a negative form, because it specifies a
22229 three-way choice.
22230 .IP "\fB\-fpack\-struct[=\fR\fIn\fR\fB]\fR" 4
22231 .IX Item "-fpack-struct[=n]"
22232 Without a value specified, pack all structure members together without
22233 holes.  When a value is specified (which must be a small power of two), pack
22234 structure members according to this value, representing the maximum
22235 alignment (that is, objects with default alignment requirements larger than
22236 this are output potentially unaligned at the next fitting location.
22237 .Sp
22238 \&\fBWarning:\fR the \fB\-fpack\-struct\fR switch causes \s-1GCC\s0 to generate
22239 code that is not binary compatible with code generated without that switch.
22240 Additionally, it makes the code suboptimal.
22241 Use it to conform to a non-default application binary interface.
22242 .IP "\fB\-finstrument\-functions\fR" 4
22243 .IX Item "-finstrument-functions"
22244 Generate instrumentation calls for entry and exit to functions.  Just
22245 after function entry and just before function exit, the following
22246 profiling functions are called with the address of the current
22247 function and its call site.  (On some platforms,
22248 \&\f(CW\*(C`_\|_builtin_return_address\*(C'\fR does not work beyond the current
22249 function, so the call site information may not be available to the
22250 profiling functions otherwise.)
22251 .Sp
22252 .Vb 4
22253 \&        void _\|_cyg_profile_func_enter (void *this_fn,
22254 \&                                       void *call_site);
22255 \&        void _\|_cyg_profile_func_exit  (void *this_fn,
22256 \&                                       void *call_site);
22257 .Ve
22258 .Sp
22259 The first argument is the address of the start of the current function,
22260 which may be looked up exactly in the symbol table.
22261 .Sp
22262 This instrumentation is also done for functions expanded inline in other
22263 functions.  The profiling calls indicate where, conceptually, the
22264 inline function is entered and exited.  This means that addressable
22265 versions of such functions must be available.  If all your uses of a
22266 function are expanded inline, this may mean an additional expansion of
22267 code size.  If you use \f(CW\*(C`extern inline\*(C'\fR in your C code, an
22268 addressable version of such functions must be provided.  (This is
22269 normally the case anyway, but if you get lucky and the optimizer always
22270 expands the functions inline, you might have gotten away without
22271 providing static copies.)
22272 .Sp
22273 A function may be given the attribute \f(CW\*(C`no_instrument_function\*(C'\fR, in
22274 which case this instrumentation is not done.  This can be used, for
22275 example, for the profiling functions listed above, high-priority
22276 interrupt routines, and any functions from which the profiling functions
22277 cannot safely be called (perhaps signal handlers, if the profiling
22278 routines generate output or allocate memory).
22279 .IP "\fB\-finstrument\-functions\-exclude\-file\-list=\fR\fIfile\fR\fB,\fR\fIfile\fR\fB,...\fR" 4
22280 .IX Item "-finstrument-functions-exclude-file-list=file,file,..."
22281 Set the list of functions that are excluded from instrumentation (see
22282 the description of \fB\-finstrument\-functions\fR).  If the file that
22283 contains a function definition matches with one of \fIfile\fR, then
22284 that function is not instrumented.  The match is done on substrings:
22285 if the \fIfile\fR parameter is a substring of the file name, it is
22286 considered to be a match.
22287 .Sp
22288 For example:
22289 .Sp
22290 .Vb 1
22291 \&        \-finstrument\-functions\-exclude\-file\-list=/bits/stl,include/sys
22292 .Ve
22293 .Sp
22294 excludes any inline function defined in files whose pathnames
22295 contain \fI/bits/stl\fR or \fIinclude/sys\fR.
22296 .Sp
22297 If, for some reason, you want to include letter \fB,\fR in one of
22298 \&\fIsym\fR, write \fB,\fR. For example,
22299 \&\fB\-finstrument\-functions\-exclude\-file\-list=',,tmp'\fR
22300 (note the single quote surrounding the option).
22301 .IP "\fB\-finstrument\-functions\-exclude\-function\-list=\fR\fIsym\fR\fB,\fR\fIsym\fR\fB,...\fR" 4
22302 .IX Item "-finstrument-functions-exclude-function-list=sym,sym,..."
22303 This is similar to \fB\-finstrument\-functions\-exclude\-file\-list\fR,
22304 but this option sets the list of function names to be excluded from
22305 instrumentation.  The function name to be matched is its user-visible
22306 name, such as \f(CW\*(C`vector<int> blah(const vector<int> &)\*(C'\fR, not the
22307 internal mangled name (e.g., \f(CW\*(C`_Z4blahRSt6vectorIiSaIiEE\*(C'\fR).  The
22308 match is done on substrings: if the \fIsym\fR parameter is a substring
22309 of the function name, it is considered to be a match.  For C99 and \*(C+
22310 extended identifiers, the function name must be given in \s-1UTF\-8\s0, not
22311 using universal character names.
22312 .IP "\fB\-fstack\-check\fR" 4
22313 .IX Item "-fstack-check"
22314 Generate code to verify that you do not go beyond the boundary of the
22315 stack.  You should specify this flag if you are running in an
22316 environment with multiple threads, but you only rarely need to specify it in
22317 a single-threaded environment since stack overflow is automatically
22318 detected on nearly all systems if there is only one stack.
22319 .Sp
22320 Note that this switch does not actually cause checking to be done; the
22321 operating system or the language runtime must do that.  The switch causes
22322 generation of code to ensure that they see the stack being extended.
22323 .Sp
22324 You can additionally specify a string parameter: \fBno\fR means no
22325 checking, \fBgeneric\fR means force the use of old-style checking,
22326 \&\fBspecific\fR means use the best checking method and is equivalent
22327 to bare \fB\-fstack\-check\fR.
22328 .Sp
22329 Old-style checking is a generic mechanism that requires no specific
22330 target support in the compiler but comes with the following drawbacks:
22331 .RS 4
22332 .IP "1." 4
22333 .IX Item "1."
22334 Modified allocation strategy for large objects: they are always
22335 allocated dynamically if their size exceeds a fixed threshold.
22336 .IP "2." 4
22337 .IX Item "2."
22338 Fixed limit on the size of the static frame of functions: when it is
22339 topped by a particular function, stack checking is not reliable and
22340 a warning is issued by the compiler.
22341 .IP "3." 4
22342 .IX Item "3."
22343 Inefficiency: because of both the modified allocation strategy and the
22344 generic implementation, code performance is hampered.
22345 .RE
22346 .RS 4
22347 .Sp
22348 Note that old-style stack checking is also the fallback method for
22349 \&\fBspecific\fR if no target support has been added in the compiler.
22350 .RE
22351 .IP "\fB\-fstack\-limit\-register=\fR\fIreg\fR" 4
22352 .IX Item "-fstack-limit-register=reg"
22353 .PD 0
22354 .IP "\fB\-fstack\-limit\-symbol=\fR\fIsym\fR" 4
22355 .IX Item "-fstack-limit-symbol=sym"
22356 .IP "\fB\-fno\-stack\-limit\fR" 4
22357 .IX Item "-fno-stack-limit"
22358 .PD
22359 Generate code to ensure that the stack does not grow beyond a certain value,
22360 either the value of a register or the address of a symbol.  If a larger
22361 stack is required, a signal is raised at run time.  For most targets,
22362 the signal is raised before the stack overruns the boundary, so
22363 it is possible to catch the signal without taking special precautions.
22364 .Sp
22365 For instance, if the stack starts at absolute address \fB0x80000000\fR
22366 and grows downwards, you can use the flags
22367 \&\fB\-fstack\-limit\-symbol=_\|_stack_limit\fR and
22368 \&\fB\-Wl,\-\-defsym,_\|_stack_limit=0x7ffe0000\fR to enforce a stack limit
22369 of 128KB.  Note that this may only work with the \s-1GNU\s0 linker.
22370 .IP "\fB\-fsplit\-stack\fR" 4
22371 .IX Item "-fsplit-stack"
22372 Generate code to automatically split the stack before it overflows.
22373 The resulting program has a discontiguous stack which can only
22374 overflow if the program is unable to allocate any more memory.  This
22375 is most useful when running threaded programs, as it is no longer
22376 necessary to calculate a good stack size to use for each thread.  This
22377 is currently only implemented for the x86 targets running
22378 GNU/Linux.
22379 .Sp
22380 When code compiled with \fB\-fsplit\-stack\fR calls code compiled
22381 without \fB\-fsplit\-stack\fR, there may not be much stack space
22382 available for the latter code to run.  If compiling all code,
22383 including library code, with \fB\-fsplit\-stack\fR is not an option,
22384 then the linker can fix up these calls so that the code compiled
22385 without \fB\-fsplit\-stack\fR always has a large stack.  Support for
22386 this is implemented in the gold linker in \s-1GNU\s0 binutils release 2.21
22387 and later.
22388 .IP "\fB\-fleading\-underscore\fR" 4
22389 .IX Item "-fleading-underscore"
22390 This option and its counterpart, \fB\-fno\-leading\-underscore\fR, forcibly
22391 change the way C symbols are represented in the object file.  One use
22392 is to help link with legacy assembly code.
22393 .Sp
22394 \&\fBWarning:\fR the \fB\-fleading\-underscore\fR switch causes \s-1GCC\s0 to
22395 generate code that is not binary compatible with code generated without that
22396 switch.  Use it to conform to a non-default application binary interface.
22397 Not all targets provide complete support for this switch.
22398 .IP "\fB\-ftls\-model=\fR\fImodel\fR" 4
22399 .IX Item "-ftls-model=model"
22400 Alter the thread-local storage model to be used.
22401 The \fImodel\fR argument should be one of \fBglobal-dynamic\fR,
22402 \&\fBlocal-dynamic\fR, \fBinitial-exec\fR or \fBlocal-exec\fR.
22403 Note that the choice is subject to optimization: the compiler may use
22404 a more efficient model for symbols not visible outside of the translation
22405 unit, or if \fB\-fpic\fR is not given on the command line.
22406 .Sp
22407 The default without \fB\-fpic\fR is \fBinitial-exec\fR; with
22408 \&\fB\-fpic\fR the default is \fBglobal-dynamic\fR.
22409 .IP "\fB\-fvisibility=\fR[\fBdefault\fR|\fBinternal\fR|\fBhidden\fR|\fBprotected\fR]" 4
22410 .IX Item "-fvisibility=[default|internal|hidden|protected]"
22411 Set the default \s-1ELF\s0 image symbol visibility to the specified option\-\-\-all
22412 symbols are marked with this unless overridden within the code.
22413 Using this feature can very substantially improve linking and
22414 load times of shared object libraries, produce more optimized
22415 code, provide near-perfect \s-1API\s0 export and prevent symbol clashes.
22416 It is \fBstrongly\fR recommended that you use this in any shared objects
22417 you distribute.
22418 .Sp
22419 Despite the nomenclature, \fBdefault\fR always means public; i.e.,
22420 available to be linked against from outside the shared object.
22421 \&\fBprotected\fR and \fBinternal\fR are pretty useless in real-world
22422 usage so the only other commonly used option is \fBhidden\fR.
22423 The default if \fB\-fvisibility\fR isn't specified is
22424 \&\fBdefault\fR, i.e., make every symbol public.
22425 .Sp
22426 A good explanation of the benefits offered by ensuring \s-1ELF\s0
22427 symbols have the correct visibility is given by \*(L"How To Write
22428 Shared Libraries\*(R" by Ulrich Drepper (which can be found at
22429 <\fBhttp://www.akkadia.org/drepper/\fR>)\-\-\-however a superior
22430 solution made possible by this option to marking things hidden when
22431 the default is public is to make the default hidden and mark things
22432 public.  This is the norm with DLLs on Windows and with \fB\-fvisibility=hidden\fR
22433 and \f(CW\*(C`_\|_attribute_\|_ ((visibility("default")))\*(C'\fR instead of
22434 \&\f(CW\*(C`_\|_declspec(dllexport)\*(C'\fR you get almost identical semantics with
22435 identical syntax.  This is a great boon to those working with
22436 cross-platform projects.
22437 .Sp
22438 For those adding visibility support to existing code, you may find
22439 \&\f(CW\*(C`#pragma GCC visibility\*(C'\fR of use.  This works by you enclosing
22440 the declarations you wish to set visibility for with (for example)
22441 \&\f(CW\*(C`#pragma GCC visibility push(hidden)\*(C'\fR and
22442 \&\f(CW\*(C`#pragma GCC visibility pop\*(C'\fR.
22443 Bear in mind that symbol visibility should be viewed \fBas
22444 part of the \s-1API\s0 interface contract\fR and thus all new code should
22445 always specify visibility when it is not the default; i.e., declarations
22446 only for use within the local \s-1DSO\s0 should \fBalways\fR be marked explicitly
22447 as hidden as so to avoid \s-1PLT\s0 indirection overheads\-\-\-making this
22448 abundantly clear also aids readability and self-documentation of the code.
22449 Note that due to \s-1ISO\s0 \*(C+ specification requirements, \f(CW\*(C`operator new\*(C'\fR and
22450 \&\f(CW\*(C`operator delete\*(C'\fR must always be of default visibility.
22451 .Sp
22452 Be aware that headers from outside your project, in particular system
22453 headers and headers from any other library you use, may not be
22454 expecting to be compiled with visibility other than the default.  You
22455 may need to explicitly say \f(CW\*(C`#pragma GCC visibility push(default)\*(C'\fR
22456 before including any such headers.
22457 .Sp
22458 \&\f(CW\*(C`extern\*(C'\fR declarations are not affected by \fB\-fvisibility\fR, so
22459 a lot of code can be recompiled with \fB\-fvisibility=hidden\fR with
22460 no modifications.  However, this means that calls to \f(CW\*(C`extern\*(C'\fR
22461 functions with no explicit visibility use the \s-1PLT\s0, so it is more
22462 effective to use \f(CW\*(C`_\|_attribute ((visibility))\*(C'\fR and/or
22463 \&\f(CW\*(C`#pragma GCC visibility\*(C'\fR to tell the compiler which \f(CW\*(C`extern\*(C'\fR
22464 declarations should be treated as hidden.
22465 .Sp
22466 Note that \fB\-fvisibility\fR does affect \*(C+ vague linkage
22467 entities. This means that, for instance, an exception class that is
22468 be thrown between DSOs must be explicitly marked with default
22469 visibility so that the \fBtype_info\fR nodes are unified between
22470 the DSOs.
22471 .Sp
22472 An overview of these techniques, their benefits and how to use them
22473 is at <\fBhttp://gcc.gnu.org/wiki/Visibility\fR>.
22474 .IP "\fB\-fstrict\-volatile\-bitfields\fR" 4
22475 .IX Item "-fstrict-volatile-bitfields"
22476 This option should be used if accesses to volatile bit-fields (or other
22477 structure fields, although the compiler usually honors those types
22478 anyway) should use a single access of the width of the
22479 field's type, aligned to a natural alignment if possible.  For
22480 example, targets with memory-mapped peripheral registers might require
22481 all such accesses to be 16 bits wide; with this flag you can
22482 declare all peripheral bit-fields as \f(CW\*(C`unsigned short\*(C'\fR (assuming short
22483 is 16 bits on these targets) to force \s-1GCC\s0 to use 16\-bit accesses
22484 instead of, perhaps, a more efficient 32\-bit access.
22485 .Sp
22486 If this option is disabled, the compiler uses the most efficient
22487 instruction.  In the previous example, that might be a 32\-bit load
22488 instruction, even though that accesses bytes that do not contain
22489 any portion of the bit-field, or memory-mapped registers unrelated to
22490 the one being updated.
22491 .Sp
22492 In some cases, such as when the \f(CW\*(C`packed\*(C'\fR attribute is applied to a 
22493 structure field, it may not be possible to access the field with a single
22494 read or write that is correctly aligned for the target machine.  In this
22495 case \s-1GCC\s0 falls back to generating multiple accesses rather than code that 
22496 will fault or truncate the result at run time.
22497 .Sp
22498 Note:  Due to restrictions of the C/\*(C+11 memory model, write accesses are
22499 not allowed to touch non bit-field members.  It is therefore recommended
22500 to define all bits of the field's type as bit-field members.
22501 .Sp
22502 The default value of this option is determined by the application binary
22503 interface for the target processor.
22504 .IP "\fB\-fsync\-libcalls\fR" 4
22505 .IX Item "-fsync-libcalls"
22506 This option controls whether any out-of-line instance of the \f(CW\*(C`_\|_sync\*(C'\fR
22507 family of functions may be used to implement the \*(C+11 \f(CW\*(C`_\|_atomic\*(C'\fR
22508 family of functions.
22509 .Sp
22510 The default value of this option is enabled, thus the only useful form
22511 of the option is \fB\-fno\-sync\-libcalls\fR.  This option is used in
22512 the implementation of the \fIlibatomic\fR runtime library.
22513 .SH "ENVIRONMENT"
22514 .IX Header "ENVIRONMENT"
22515 This section describes several environment variables that affect how \s-1GCC\s0
22516 operates.  Some of them work by specifying directories or prefixes to use
22517 when searching for various kinds of files.  Some are used to specify other
22518 aspects of the compilation environment.
22519 .PP
22520 Note that you can also specify places to search using options such as
22521 \&\fB\-B\fR, \fB\-I\fR and \fB\-L\fR.  These
22522 take precedence over places specified using environment variables, which
22523 in turn take precedence over those specified by the configuration of \s-1GCC\s0.
22524 .IP "\fB\s-1LANG\s0\fR" 4
22525 .IX Item "LANG"
22526 .PD 0
22527 .IP "\fB\s-1LC_CTYPE\s0\fR" 4
22528 .IX Item "LC_CTYPE"
22529 .IP "\fB\s-1LC_MESSAGES\s0\fR" 4
22530 .IX Item "LC_MESSAGES"
22531 .IP "\fB\s-1LC_ALL\s0\fR" 4
22532 .IX Item "LC_ALL"
22533 .PD
22534 These environment variables control the way that \s-1GCC\s0 uses
22535 localization information which allows \s-1GCC\s0 to work with different
22536 national conventions.  \s-1GCC\s0 inspects the locale categories
22537 \&\fB\s-1LC_CTYPE\s0\fR and \fB\s-1LC_MESSAGES\s0\fR if it has been configured to do
22538 so.  These locale categories can be set to any value supported by your
22539 installation.  A typical value is \fBen_GB.UTF\-8\fR for English in the United
22540 Kingdom encoded in \s-1UTF\-8\s0.
22541 .Sp
22542 The \fB\s-1LC_CTYPE\s0\fR environment variable specifies character
22543 classification.  \s-1GCC\s0 uses it to determine the character boundaries in
22544 a string; this is needed for some multibyte encodings that contain quote
22545 and escape characters that are otherwise interpreted as a string
22546 end or escape.
22547 .Sp
22548 The \fB\s-1LC_MESSAGES\s0\fR environment variable specifies the language to
22549 use in diagnostic messages.
22550 .Sp
22551 If the \fB\s-1LC_ALL\s0\fR environment variable is set, it overrides the value
22552 of \fB\s-1LC_CTYPE\s0\fR and \fB\s-1LC_MESSAGES\s0\fR; otherwise, \fB\s-1LC_CTYPE\s0\fR
22553 and \fB\s-1LC_MESSAGES\s0\fR default to the value of the \fB\s-1LANG\s0\fR
22554 environment variable.  If none of these variables are set, \s-1GCC\s0
22555 defaults to traditional C English behavior.
22556 .IP "\fB\s-1TMPDIR\s0\fR" 4
22557 .IX Item "TMPDIR"
22558 If \fB\s-1TMPDIR\s0\fR is set, it specifies the directory to use for temporary
22559 files.  \s-1GCC\s0 uses temporary files to hold the output of one stage of
22560 compilation which is to be used as input to the next stage: for example,
22561 the output of the preprocessor, which is the input to the compiler
22562 proper.
22563 .IP "\fB\s-1GCC_COMPARE_DEBUG\s0\fR" 4
22564 .IX Item "GCC_COMPARE_DEBUG"
22565 Setting \fB\s-1GCC_COMPARE_DEBUG\s0\fR is nearly equivalent to passing
22566 \&\fB\-fcompare\-debug\fR to the compiler driver.  See the documentation
22567 of this option for more details.
22568 .IP "\fB\s-1GCC_EXEC_PREFIX\s0\fR" 4
22569 .IX Item "GCC_EXEC_PREFIX"
22570 If \fB\s-1GCC_EXEC_PREFIX\s0\fR is set, it specifies a prefix to use in the
22571 names of the subprograms executed by the compiler.  No slash is added
22572 when this prefix is combined with the name of a subprogram, but you can
22573 specify a prefix that ends with a slash if you wish.
22574 .Sp
22575 If \fB\s-1GCC_EXEC_PREFIX\s0\fR is not set, \s-1GCC\s0 attempts to figure out
22576 an appropriate prefix to use based on the pathname it is invoked with.
22577 .Sp
22578 If \s-1GCC\s0 cannot find the subprogram using the specified prefix, it
22579 tries looking in the usual places for the subprogram.
22580 .Sp
22581 The default value of \fB\s-1GCC_EXEC_PREFIX\s0\fR is
22582 \&\fI\fIprefix\fI/lib/gcc/\fR where \fIprefix\fR is the prefix to
22583 the installed compiler. In many cases \fIprefix\fR is the value
22584 of \f(CW\*(C`prefix\*(C'\fR when you ran the \fIconfigure\fR script.
22585 .Sp
22586 Other prefixes specified with \fB\-B\fR take precedence over this prefix.
22587 .Sp
22588 This prefix is also used for finding files such as \fIcrt0.o\fR that are
22589 used for linking.
22590 .Sp
22591 In addition, the prefix is used in an unusual way in finding the
22592 directories to search for header files.  For each of the standard
22593 directories whose name normally begins with \fB/usr/local/lib/gcc\fR
22594 (more precisely, with the value of \fB\s-1GCC_INCLUDE_DIR\s0\fR), \s-1GCC\s0 tries
22595 replacing that beginning with the specified prefix to produce an
22596 alternate directory name.  Thus, with \fB\-Bfoo/\fR, \s-1GCC\s0 searches
22597 \&\fIfoo/bar\fR just before it searches the standard directory 
22598 \&\fI/usr/local/lib/bar\fR.
22599 If a standard directory begins with the configured
22600 \&\fIprefix\fR then the value of \fIprefix\fR is replaced by
22601 \&\fB\s-1GCC_EXEC_PREFIX\s0\fR when looking for header files.
22602 .IP "\fB\s-1COMPILER_PATH\s0\fR" 4
22603 .IX Item "COMPILER_PATH"
22604 The value of \fB\s-1COMPILER_PATH\s0\fR is a colon-separated list of
22605 directories, much like \fB\s-1PATH\s0\fR.  \s-1GCC\s0 tries the directories thus
22606 specified when searching for subprograms, if it can't find the
22607 subprograms using \fB\s-1GCC_EXEC_PREFIX\s0\fR.
22608 .IP "\fB\s-1LIBRARY_PATH\s0\fR" 4
22609 .IX Item "LIBRARY_PATH"
22610 The value of \fB\s-1LIBRARY_PATH\s0\fR is a colon-separated list of
22611 directories, much like \fB\s-1PATH\s0\fR.  When configured as a native compiler,
22612 \&\s-1GCC\s0 tries the directories thus specified when searching for special
22613 linker files, if it can't find them using \fB\s-1GCC_EXEC_PREFIX\s0\fR.  Linking
22614 using \s-1GCC\s0 also uses these directories when searching for ordinary
22615 libraries for the \fB\-l\fR option (but directories specified with
22616 \&\fB\-L\fR come first).
22617 .IP "\fB\s-1LANG\s0\fR" 4
22618 .IX Item "LANG"
22619 This variable is used to pass locale information to the compiler.  One way in
22620 which this information is used is to determine the character set to be used
22621 when character literals, string literals and comments are parsed in C and \*(C+.
22622 When the compiler is configured to allow multibyte characters,
22623 the following values for \fB\s-1LANG\s0\fR are recognized:
22624 .RS 4
22625 .IP "\fBC\-JIS\fR" 4
22626 .IX Item "C-JIS"
22627 Recognize \s-1JIS\s0 characters.
22628 .IP "\fBC\-SJIS\fR" 4
22629 .IX Item "C-SJIS"
22630 Recognize \s-1SJIS\s0 characters.
22631 .IP "\fBC\-EUCJP\fR" 4
22632 .IX Item "C-EUCJP"
22633 Recognize \s-1EUCJP\s0 characters.
22634 .RE
22635 .RS 4
22636 .Sp
22637 If \fB\s-1LANG\s0\fR is not defined, or if it has some other value, then the
22638 compiler uses \f(CW\*(C`mblen\*(C'\fR and \f(CW\*(C`mbtowc\*(C'\fR as defined by the default locale to
22639 recognize and translate multibyte characters.
22640 .RE
22641 .PP
22642 Some additional environment variables affect the behavior of the
22643 preprocessor.
22644 .IP "\fB\s-1CPATH\s0\fR" 4
22645 .IX Item "CPATH"
22646 .PD 0
22647 .IP "\fBC_INCLUDE_PATH\fR" 4
22648 .IX Item "C_INCLUDE_PATH"
22649 .IP "\fB\s-1CPLUS_INCLUDE_PATH\s0\fR" 4
22650 .IX Item "CPLUS_INCLUDE_PATH"
22651 .IP "\fB\s-1OBJC_INCLUDE_PATH\s0\fR" 4
22652 .IX Item "OBJC_INCLUDE_PATH"
22653 .PD
22654 Each variable's value is a list of directories separated by a special
22655 character, much like \fB\s-1PATH\s0\fR, in which to look for header files.
22656 The special character, \f(CW\*(C`PATH_SEPARATOR\*(C'\fR, is target-dependent and
22657 determined at \s-1GCC\s0 build time.  For Microsoft Windows-based targets it is a
22658 semicolon, and for almost all other targets it is a colon.
22659 .Sp
22660 \&\fB\s-1CPATH\s0\fR specifies a list of directories to be searched as if
22661 specified with \fB\-I\fR, but after any paths given with \fB\-I\fR
22662 options on the command line.  This environment variable is used
22663 regardless of which language is being preprocessed.
22664 .Sp
22665 The remaining environment variables apply only when preprocessing the
22666 particular language indicated.  Each specifies a list of directories
22667 to be searched as if specified with \fB\-isystem\fR, but after any
22668 paths given with \fB\-isystem\fR options on the command line.
22669 .Sp
22670 In all these variables, an empty element instructs the compiler to
22671 search its current working directory.  Empty elements can appear at the
22672 beginning or end of a path.  For instance, if the value of
22673 \&\fB\s-1CPATH\s0\fR is \f(CW\*(C`:/special/include\*(C'\fR, that has the same
22674 effect as \fB\-I.\ \-I/special/include\fR.
22675 .IP "\fB\s-1DEPENDENCIES_OUTPUT\s0\fR" 4
22676 .IX Item "DEPENDENCIES_OUTPUT"
22677 If this variable is set, its value specifies how to output
22678 dependencies for Make based on the non-system header files processed
22679 by the compiler.  System header files are ignored in the dependency
22680 output.
22681 .Sp
22682 The value of \fB\s-1DEPENDENCIES_OUTPUT\s0\fR can be just a file name, in
22683 which case the Make rules are written to that file, guessing the target
22684 name from the source file name.  Or the value can have the form
22685 \&\fIfile\fR\fB \fR\fItarget\fR, in which case the rules are written to
22686 file \fIfile\fR using \fItarget\fR as the target name.
22687 .Sp
22688 In other words, this environment variable is equivalent to combining
22689 the options \fB\-MM\fR and \fB\-MF\fR,
22690 with an optional \fB\-MT\fR switch too.
22691 .IP "\fB\s-1SUNPRO_DEPENDENCIES\s0\fR" 4
22692 .IX Item "SUNPRO_DEPENDENCIES"
22693 This variable is the same as \fB\s-1DEPENDENCIES_OUTPUT\s0\fR (see above),
22694 except that system header files are not ignored, so it implies
22695 \&\fB\-M\fR rather than \fB\-MM\fR.  However, the dependence on the
22696 main input file is omitted.
22697 .SH "BUGS"
22698 .IX Header "BUGS"
22699 For instructions on reporting bugs, see
22700 <\fBhttp://gcc.gnu.org/bugs.html\fR>.
22701 .SH "FOOTNOTES"
22702 .IX Header "FOOTNOTES"
22703 .IP "1." 4
22704 On some systems, \fBgcc \-shared\fR
22705 needs to build supplementary stub code for constructors to work.  On
22706 multi-libbed systems, \fBgcc \-shared\fR must select the correct support
22707 libraries to link against.  Failing to supply the correct flags may lead
22708 to subtle defects.  Supplying them in cases where they are not necessary
22709 is innocuous.
22710 .SH "SEE ALSO"
22711 .IX Header "SEE ALSO"
22712 \&\fIgpl\fR\|(7), \fIgfdl\fR\|(7), \fIfsf\-funding\fR\|(7),
22713 \&\fIcpp\fR\|(1), \fIgcov\fR\|(1), \fIas\fR\|(1), \fIld\fR\|(1), \fIgdb\fR\|(1), \fIadb\fR\|(1), \fIdbx\fR\|(1), \fIsdb\fR\|(1)
22714 and the Info entries for \fIgcc\fR, \fIcpp\fR, \fIas\fR,
22715 \&\fIld\fR, \fIbinutils\fR and \fIgdb\fR.
22716 .SH "AUTHOR"
22717 .IX Header "AUTHOR"
22718 See the Info entry for \fBgcc\fR, or
22719 <\fBhttp://gcc.gnu.org/onlinedocs/gcc/Contributors.html\fR>,
22720 for contributors to \s-1GCC\s0.
22721 .SH "COPYRIGHT"
22722 .IX Header "COPYRIGHT"
22723 Copyright (c) 1988\-2015 Free Software Foundation, Inc.
22724 .PP
22725 Permission is granted to copy, distribute and/or modify this document
22726 under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or
22727 any later version published by the Free Software Foundation; with the
22728 Invariant Sections being \*(L"\s-1GNU\s0 General Public License\*(R" and \*(L"Funding
22729 Free Software\*(R", the Front-Cover texts being (a) (see below), and with
22730 the Back-Cover Texts being (b) (see below).  A copy of the license is
22731 included in the \fIgfdl\fR\|(7) man page.
22732 .PP
22733 (a) The \s-1FSF\s0's Front-Cover Text is:
22734 .PP
22735 .Vb 1
22736 \&     A GNU Manual
22737 .Ve
22738 .PP
22739 (b) The \s-1FSF\s0's Back-Cover Text is:
22740 .PP
22741 .Vb 3
22742 \&     You have freedom to copy and modify this GNU Manual, like GNU
22743 \&     software.  Copies published by the Free Software Foundation raise
22744 \&     funds for GNU development.
22745 .Ve