Upgrade GCC from 4.7.2 to 4.7.3 on the vendor branch
[dragonfly.git] / contrib / gcc-4.7 / gcc / doc / g++.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 "2013-04-11" "gcc-4.7.3" "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\-pedantic\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 would be \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\-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 \-fopenmp \-fms\-extensions \-fplan9\-extensions 
208 \&\-trigraphs  \-no\-integrated\-cpp  \-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 \&\-fconserve\-space  \-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  \-fstats  \-ftemplate\-depth=\fR\fIn\fR 
226 \&\fB\-fno\-threadsafe\-statics \-fuse\-cxa\-atexit  \-fno\-weak  \-nostdinc++ 
227 \&\-fno\-default\-inline  \-fvisibility\-inlines\-hidden 
228 \&\-fvisibility\-ms\-compat 
229 \&\-Wabi  \-Wconversion\-null  \-Wctor\-dtor\-privacy 
230 \&\-Wdelete\-non\-virtual\-dtor \-Wnarrowing \-Wnoexcept 
231 \&\-Wnon\-virtual\-dtor  \-Wreorder 
232 \&\-Weffc++  \-Wstrict\-null\-sentinel 
233 \&\-Wno\-non\-template\-friend  \-Wold\-style\-cast 
234 \&\-Woverloaded\-virtual  \-Wno\-pmf\-conversions 
235 \&\-Wsign\-promo\fR
236 .IP "\fIObjective-C and Objective\-\*(C+ Language Options\fR" 4
237 .IX Item "Objective-C and Objective- Language Options"
238 \&\fB\-fconstant\-string\-class=\fR\fIclass-name\fR 
239 \&\fB\-fgnu\-runtime  \-fnext\-runtime 
240 \&\-fno\-nil\-receivers 
241 \&\-fobjc\-abi\-version=\fR\fIn\fR 
242 \&\fB\-fobjc\-call\-cxx\-cdtors 
243 \&\-fobjc\-direct\-dispatch 
244 \&\-fobjc\-exceptions 
245 \&\-fobjc\-gc 
246 \&\-fobjc\-nilcheck 
247 \&\-fobjc\-std=objc1 
248 \&\-freplace\-objc\-classes 
249 \&\-fzero\-link 
250 \&\-gen\-decls 
251 \&\-Wassign\-intercept 
252 \&\-Wno\-protocol  \-Wselector 
253 \&\-Wstrict\-selector\-match 
254 \&\-Wundeclared\-selector\fR
255 .IP "\fILanguage Independent Options\fR" 4
256 .IX Item "Language Independent Options"
257 \&\fB\-fmessage\-length=\fR\fIn\fR  
258 \&\fB\-fdiagnostics\-show\-location=\fR[\fBonce\fR|\fBevery-line\fR]  
259 \&\fB\-fno\-diagnostics\-show\-option\fR
260 .IP "\fIWarning Options\fR" 4
261 .IX Item "Warning Options"
262 \&\fB\-fsyntax\-only  \-fmax\-errors=\fR\fIn\fR  \fB\-pedantic 
263 \&\-pedantic\-errors 
264 \&\-w  \-Wextra  \-Wall  \-Waddress  \-Waggregate\-return  \-Warray\-bounds 
265 \&\-Wno\-attributes \-Wno\-builtin\-macro\-redefined 
266 \&\-Wc++\-compat \-Wc++11\-compat \-Wcast\-align  \-Wcast\-qual  
267 \&\-Wchar\-subscripts \-Wclobbered  \-Wcomment 
268 \&\-Wconversion  \-Wcoverage\-mismatch  \-Wno\-cpp  \-Wno\-deprecated  
269 \&\-Wno\-deprecated\-declarations \-Wdisabled\-optimization  
270 \&\-Wno\-div\-by\-zero \-Wdouble\-promotion \-Wempty\-body  \-Wenum\-compare 
271 \&\-Wno\-endif\-labels \-Werror  \-Werror=* 
272 \&\-Wfatal\-errors  \-Wfloat\-equal  \-Wformat  \-Wformat=2 
273 \&\-Wno\-format\-contains\-nul \-Wno\-format\-extra\-args \-Wformat\-nonliteral 
274 \&\-Wformat\-security  \-Wformat\-y2k 
275 \&\-Wframe\-larger\-than=\fR\fIlen\fR \fB\-Wno\-free\-nonheap\-object \-Wjump\-misses\-init 
276 \&\-Wignored\-qualifiers 
277 \&\-Wimplicit  \-Wimplicit\-function\-declaration  \-Wimplicit\-int 
278 \&\-Winit\-self  \-Winline \-Wmaybe\-uninitialized 
279 \&\-Wno\-int\-to\-pointer\-cast \-Wno\-invalid\-offsetof 
280 \&\-Winvalid\-pch \-Wlarger\-than=\fR\fIlen\fR  \fB\-Wunsafe\-loop\-optimizations 
281 \&\-Wlogical\-op \-Wlong\-long 
282 \&\-Wmain \-Wmaybe\-uninitialized \-Wmissing\-braces  \-Wmissing\-field\-initializers 
283 \&\-Wmissing\-format\-attribute  \-Wmissing\-include\-dirs 
284 \&\-Wno\-mudflap 
285 \&\-Wno\-multichar  \-Wnonnull  \-Wno\-overflow 
286 \&\-Woverlength\-strings  \-Wpacked  \-Wpacked\-bitfield\-compat  \-Wpadded 
287 \&\-Wparentheses  \-Wpedantic\-ms\-format \-Wno\-pedantic\-ms\-format 
288 \&\-Wpointer\-arith  \-Wno\-pointer\-to\-int\-cast 
289 \&\-Wredundant\-decls 
290 \&\-Wreturn\-type  \-Wsequence\-point  \-Wshadow 
291 \&\-Wsign\-compare  \-Wsign\-conversion  \-Wstack\-protector 
292 \&\-Wstack\-usage=\fR\fIlen\fR \fB\-Wstrict\-aliasing \-Wstrict\-aliasing=n 
293 \&\-Wstrict\-overflow \-Wstrict\-overflow=\fR\fIn\fR 
294 \&\fB\-Wsuggest\-attribute=\fR[\fBpure\fR|\fBconst\fR|\fBnoreturn\fR] 
295 \&\fB\-Wswitch  \-Wswitch\-default  \-Wswitch\-enum \-Wsync\-nand 
296 \&\-Wsystem\-headers  \-Wtrampolines  \-Wtrigraphs  \-Wtype\-limits  \-Wundef 
297 \&\-Wuninitialized  \-Wunknown\-pragmas  \-Wno\-pragmas 
298 \&\-Wunsuffixed\-float\-constants  \-Wunused  \-Wunused\-function 
299 \&\-Wunused\-label  \-Wunused\-local\-typedefs \-Wunused\-parameter 
300 \&\-Wno\-unused\-result \-Wunused\-value  \-Wunused\-variable 
301 \&\-Wunused\-but\-set\-parameter \-Wunused\-but\-set\-variable 
302 \&\-Wvariadic\-macros \-Wvector\-operation\-performance \-Wvla 
303 \&\-Wvolatile\-register\-var  \-Wwrite\-strings \-Wzero\-as\-null\-pointer\-constant\fR
304 .IP "\fIC and Objective-C-only Warning Options\fR" 4
305 .IX Item "C and Objective-C-only Warning Options"
306 \&\fB\-Wbad\-function\-cast  \-Wmissing\-declarations 
307 \&\-Wmissing\-parameter\-type  \-Wmissing\-prototypes  \-Wnested\-externs 
308 \&\-Wold\-style\-declaration  \-Wold\-style\-definition 
309 \&\-Wstrict\-prototypes  \-Wtraditional  \-Wtraditional\-conversion 
310 \&\-Wdeclaration\-after\-statement \-Wpointer\-sign\fR
311 .IP "\fIDebugging Options\fR" 4
312 .IX Item "Debugging Options"
313 \&\fB\-d\fR\fIletters\fR  \fB\-dumpspecs  \-dumpmachine  \-dumpversion 
314 \&\-fdbg\-cnt\-list \-fdbg\-cnt=\fR\fIcounter-value-list\fR 
315 \&\fB\-fdisable\-ipa\-\fR\fIpass_name\fR 
316 \&\fB\-fdisable\-rtl\-\fR\fIpass_name\fR 
317 \&\fB\-fdisable\-rtl\-\fR\fIpass-name\fR\fB=\fR\fIrange-list\fR 
318 \&\fB\-fdisable\-tree\-\fR\fIpass_name\fR 
319 \&\fB\-fdisable\-tree\-\fR\fIpass-name\fR\fB=\fR\fIrange-list\fR 
320 \&\fB\-fdump\-noaddr \-fdump\-unnumbered \-fdump\-unnumbered\-links 
321 \&\-fdump\-translation\-unit\fR[\fB\-\fR\fIn\fR] 
322 \&\fB\-fdump\-class\-hierarchy\fR[\fB\-\fR\fIn\fR] 
323 \&\fB\-fdump\-ipa\-all \-fdump\-ipa\-cgraph \-fdump\-ipa\-inline 
324 \&\-fdump\-passes 
325 \&\-fdump\-statistics 
326 \&\-fdump\-tree\-all 
327 \&\-fdump\-tree\-original\fR[\fB\-\fR\fIn\fR]  
328 \&\fB\-fdump\-tree\-optimized\fR[\fB\-\fR\fIn\fR] 
329 \&\fB\-fdump\-tree\-cfg \-fdump\-tree\-vcg \-fdump\-tree\-alias 
330 \&\-fdump\-tree\-ch 
331 \&\-fdump\-tree\-ssa\fR[\fB\-\fR\fIn\fR] \fB\-fdump\-tree\-pre\fR[\fB\-\fR\fIn\fR] 
332 \&\fB\-fdump\-tree\-ccp\fR[\fB\-\fR\fIn\fR] \fB\-fdump\-tree\-dce\fR[\fB\-\fR\fIn\fR] 
333 \&\fB\-fdump\-tree\-gimple\fR[\fB\-raw\fR] \fB\-fdump\-tree\-mudflap\fR[\fB\-\fR\fIn\fR] 
334 \&\fB\-fdump\-tree\-dom\fR[\fB\-\fR\fIn\fR] 
335 \&\fB\-fdump\-tree\-dse\fR[\fB\-\fR\fIn\fR] 
336 \&\fB\-fdump\-tree\-phiprop\fR[\fB\-\fR\fIn\fR] 
337 \&\fB\-fdump\-tree\-phiopt\fR[\fB\-\fR\fIn\fR] 
338 \&\fB\-fdump\-tree\-forwprop\fR[\fB\-\fR\fIn\fR] 
339 \&\fB\-fdump\-tree\-copyrename\fR[\fB\-\fR\fIn\fR] 
340 \&\fB\-fdump\-tree\-nrv \-fdump\-tree\-vect 
341 \&\-fdump\-tree\-sink 
342 \&\-fdump\-tree\-sra\fR[\fB\-\fR\fIn\fR] 
343 \&\fB\-fdump\-tree\-forwprop\fR[\fB\-\fR\fIn\fR] 
344 \&\fB\-fdump\-tree\-fre\fR[\fB\-\fR\fIn\fR] 
345 \&\fB\-fdump\-tree\-vrp\fR[\fB\-\fR\fIn\fR] 
346 \&\fB\-ftree\-vectorizer\-verbose=\fR\fIn\fR 
347 \&\fB\-fdump\-tree\-storeccp\fR[\fB\-\fR\fIn\fR] 
348 \&\fB\-fdump\-final\-insns=\fR\fIfile\fR 
349 \&\fB\-fcompare\-debug\fR[\fB=\fR\fIopts\fR]  \fB\-fcompare\-debug\-second 
350 \&\-feliminate\-dwarf2\-dups \-feliminate\-unused\-debug\-types 
351 \&\-feliminate\-unused\-debug\-symbols \-femit\-class\-debug\-always 
352 \&\-fenable\-\fR\fIkind\fR\fB\-\fR\fIpass\fR 
353 \&\fB\-fenable\-\fR\fIkind\fR\fB\-\fR\fIpass\fR\fB=\fR\fIrange-list\fR 
354 \&\fB\-fdebug\-types\-section 
355 \&\-fmem\-report \-fpre\-ipa\-mem\-report \-fpost\-ipa\-mem\-report \-fprofile\-arcs 
356 \&\-frandom\-seed=\fR\fIstring\fR \fB\-fsched\-verbose=\fR\fIn\fR 
357 \&\fB\-fsel\-sched\-verbose \-fsel\-sched\-dump\-cfg \-fsel\-sched\-pipelining\-verbose 
358 \&\-fstack\-usage  \-ftest\-coverage  \-ftime\-report \-fvar\-tracking 
359 \&\-fvar\-tracking\-assignments  \-fvar\-tracking\-assignments\-toggle 
360 \&\-g  \-g\fR\fIlevel\fR  \fB\-gtoggle  \-gcoff  \-gdwarf\-\fR\fIversion\fR 
361 \&\fB\-ggdb  \-grecord\-gcc\-switches  \-gno\-record\-gcc\-switches 
362 \&\-gstabs  \-gstabs+  \-gstrict\-dwarf  \-gno\-strict\-dwarf 
363 \&\-gvms  \-gxcoff  \-gxcoff+ 
364 \&\-fno\-merge\-debug\-strings \-fno\-dwarf2\-cfi\-asm 
365 \&\-fdebug\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR 
366 \&\fB\-femit\-struct\-debug\-baseonly \-femit\-struct\-debug\-reduced 
367 \&\-femit\-struct\-debug\-detailed\fR[\fB=\fR\fIspec-list\fR] 
368 \&\fB\-p  \-pg  \-print\-file\-name=\fR\fIlibrary\fR  \fB\-print\-libgcc\-file\-name 
369 \&\-print\-multi\-directory  \-print\-multi\-lib  \-print\-multi\-os\-directory 
370 \&\-print\-prog\-name=\fR\fIprogram\fR  \fB\-print\-search\-dirs  \-Q 
371 \&\-print\-sysroot \-print\-sysroot\-headers\-suffix 
372 \&\-save\-temps \-save\-temps=cwd \-save\-temps=obj \-time\fR[\fB=\fR\fIfile\fR]
373 .IP "\fIOptimization Options\fR" 4
374 .IX Item "Optimization Options"
375 \&\fB\-falign\-functions[=\fR\fIn\fR\fB] \-falign\-jumps[=\fR\fIn\fR\fB] 
376 \&\-falign\-labels[=\fR\fIn\fR\fB] \-falign\-loops[=\fR\fIn\fR\fB] \-fassociative\-math 
377 \&\-fauto\-inc\-dec \-fbranch\-probabilities \-fbranch\-target\-load\-optimize 
378 \&\-fbranch\-target\-load\-optimize2 \-fbtr\-bb\-exclusive \-fcaller\-saves 
379 \&\-fcheck\-data\-deps \-fcombine\-stack\-adjustments \-fconserve\-stack 
380 \&\-fcompare\-elim \-fcprop\-registers \-fcrossjumping 
381 \&\-fcse\-follow\-jumps \-fcse\-skip\-blocks \-fcx\-fortran\-rules 
382 \&\-fcx\-limited\-range 
383 \&\-fdata\-sections \-fdce \-fdelayed\-branch 
384 \&\-fdelete\-null\-pointer\-checks \-fdevirtualize \-fdse 
385 \&\-fearly\-inlining \-fipa\-sra \-fexpensive\-optimizations \-ffat\-lto\-objects 
386 \&\-ffast\-math \-ffinite\-math\-only \-ffloat\-store \-fexcess\-precision=\fR\fIstyle\fR 
387 \&\fB\-fforward\-propagate \-ffp\-contract=\fR\fIstyle\fR \fB\-ffunction\-sections 
388 \&\-fgcse \-fgcse\-after\-reload \-fgcse\-las \-fgcse\-lm \-fgraphite\-identity 
389 \&\-fgcse\-sm \-fif\-conversion \-fif\-conversion2 \-findirect\-inlining 
390 \&\-finline\-functions \-finline\-functions\-called\-once \-finline\-limit=\fR\fIn\fR 
391 \&\fB\-finline\-small\-functions \-fipa\-cp \-fipa\-cp\-clone \-fipa\-matrix\-reorg 
392 \&\-fipa\-pta \-fipa\-profile \-fipa\-pure\-const \-fipa\-reference 
393 \&\-fira\-algorithm=\fR\fIalgorithm\fR 
394 \&\fB\-fira\-region=\fR\fIregion\fR 
395 \&\fB\-fira\-loop\-pressure \-fno\-ira\-share\-save\-slots 
396 \&\-fno\-ira\-share\-spill\-slots \-fira\-verbose=\fR\fIn\fR 
397 \&\fB\-fivopts \-fkeep\-inline\-functions \-fkeep\-static\-consts 
398 \&\-floop\-block \-floop\-flatten \-floop\-interchange \-floop\-strip\-mine 
399 \&\-floop\-parallelize\-all \-flto \-flto\-compression\-level 
400 \&\-flto\-partition=\fR\fIalg\fR \fB\-flto\-report \-fmerge\-all\-constants 
401 \&\-fmerge\-constants \-fmodulo\-sched \-fmodulo\-sched\-allow\-regmoves 
402 \&\-fmove\-loop\-invariants fmudflap \-fmudflapir \-fmudflapth \-fno\-branch\-count\-reg 
403 \&\-fno\-default\-inline 
404 \&\-fno\-defer\-pop \-fno\-function\-cse \-fno\-guess\-branch\-probability 
405 \&\-fno\-inline \-fno\-math\-errno \-fno\-peephole \-fno\-peephole2 
406 \&\-fno\-sched\-interblock \-fno\-sched\-spec \-fno\-signed\-zeros 
407 \&\-fno\-toplevel\-reorder \-fno\-trapping\-math \-fno\-zero\-initialized\-in\-bss 
408 \&\-fomit\-frame\-pointer \-foptimize\-register\-move \-foptimize\-sibling\-calls 
409 \&\-fpartial\-inlining \-fpeel\-loops \-fpredictive\-commoning 
410 \&\-fprefetch\-loop\-arrays 
411 \&\-fprofile\-correction \-fprofile\-dir=\fR\fIpath\fR \fB\-fprofile\-generate 
412 \&\-fprofile\-generate=\fR\fIpath\fR 
413 \&\fB\-fprofile\-use \-fprofile\-use=\fR\fIpath\fR \fB\-fprofile\-values 
414 \&\-freciprocal\-math \-free \-fregmove \-frename\-registers \-freorder\-blocks 
415 \&\-freorder\-blocks\-and\-partition \-freorder\-functions 
416 \&\-frerun\-cse\-after\-loop \-freschedule\-modulo\-scheduled\-loops 
417 \&\-frounding\-math \-fsched2\-use\-superblocks \-fsched\-pressure 
418 \&\-fsched\-spec\-load \-fsched\-spec\-load\-dangerous 
419 \&\-fsched\-stalled\-insns\-dep[=\fR\fIn\fR\fB] \-fsched\-stalled\-insns[=\fR\fIn\fR\fB] 
420 \&\-fsched\-group\-heuristic \-fsched\-critical\-path\-heuristic 
421 \&\-fsched\-spec\-insn\-heuristic \-fsched\-rank\-heuristic 
422 \&\-fsched\-last\-insn\-heuristic \-fsched\-dep\-count\-heuristic 
423 \&\-fschedule\-insns \-fschedule\-insns2 \-fsection\-anchors 
424 \&\-fselective\-scheduling \-fselective\-scheduling2 
425 \&\-fsel\-sched\-pipelining \-fsel\-sched\-pipelining\-outer\-loops 
426 \&\-fshrink\-wrap \-fsignaling\-nans \-fsingle\-precision\-constant 
427 \&\-fsplit\-ivs\-in\-unroller \-fsplit\-wide\-types \-fstack\-protector 
428 \&\-fstack\-protector\-all \-fstrict\-aliasing \-fstrict\-overflow 
429 \&\-fthread\-jumps \-ftracer \-ftree\-bit\-ccp 
430 \&\-ftree\-builtin\-call\-dce \-ftree\-ccp \-ftree\-ch \-ftree\-copy\-prop 
431 \&\-ftree\-copyrename \-ftree\-dce \-ftree\-dominator\-opts \-ftree\-dse 
432 \&\-ftree\-forwprop \-ftree\-fre \-ftree\-loop\-if\-convert 
433 \&\-ftree\-loop\-if\-convert\-stores \-ftree\-loop\-im 
434 \&\-ftree\-phiprop \-ftree\-loop\-distribution \-ftree\-loop\-distribute\-patterns 
435 \&\-ftree\-loop\-ivcanon \-ftree\-loop\-linear \-ftree\-loop\-optimize 
436 \&\-ftree\-parallelize\-loops=\fR\fIn\fR \fB\-ftree\-pre \-ftree\-pta \-ftree\-reassoc 
437 \&\-ftree\-sink \-ftree\-sra \-ftree\-switch\-conversion \-ftree\-tail\-merge 
438 \&\-ftree\-ter \-ftree\-vect\-loop\-version \-ftree\-vectorize \-ftree\-vrp 
439 \&\-funit\-at\-a\-time \-funroll\-all\-loops \-funroll\-loops 
440 \&\-funsafe\-loop\-optimizations \-funsafe\-math\-optimizations \-funswitch\-loops 
441 \&\-fvariable\-expansion\-in\-unroller \-fvect\-cost\-model \-fvpt \-fweb 
442 \&\-fwhole\-program \-fwpa \-fuse\-linker\-plugin 
443 \&\-\-param\fR \fIname\fR\fB=\fR\fIvalue\fR
444 \&\fB\-O  \-O0  \-O1  \-O2  \-O3  \-Os \-Ofast\fR
445 .IP "\fIPreprocessor Options\fR" 4
446 .IX Item "Preprocessor Options"
447 \&\fB\-A\fR\fIquestion\fR\fB=\fR\fIanswer\fR 
448 \&\fB\-A\-\fR\fIquestion\fR[\fB=\fR\fIanswer\fR] 
449 \&\fB\-C  \-dD  \-dI  \-dM  \-dN 
450 \&\-D\fR\fImacro\fR[\fB=\fR\fIdefn\fR]  \fB\-E  \-H 
451 \&\-idirafter\fR \fIdir\fR 
452 \&\fB\-include\fR \fIfile\fR  \fB\-imacros\fR \fIfile\fR 
453 \&\fB\-iprefix\fR \fIfile\fR  \fB\-iwithprefix\fR \fIdir\fR 
454 \&\fB\-iwithprefixbefore\fR \fIdir\fR  \fB\-isystem\fR \fIdir\fR 
455 \&\fB\-imultilib\fR \fIdir\fR \fB\-isysroot\fR \fIdir\fR 
456 \&\fB\-M  \-MM  \-MF  \-MG  \-MP  \-MQ  \-MT  \-nostdinc  
457 \&\-P  \-fdebug\-cpp \-ftrack\-macro\-expansion \-fworking\-directory 
458 \&\-remap \-trigraphs  \-undef  \-U\fR\fImacro\fR  
459 \&\fB\-Wp,\fR\fIoption\fR \fB\-Xpreprocessor\fR \fIoption\fR
460 .IP "\fIAssembler Option\fR" 4
461 .IX Item "Assembler Option"
462 \&\fB\-Wa,\fR\fIoption\fR  \fB\-Xassembler\fR \fIoption\fR
463 .IP "\fILinker Options\fR" 4
464 .IX Item "Linker Options"
465 \&\fIobject-file-name\fR  \fB\-l\fR\fIlibrary\fR 
466 \&\fB\-nostartfiles  \-nodefaultlibs  \-nostdlib \-pie \-rdynamic 
467 \&\-s  \-static  \-static\-libgcc  \-static\-libstdc++ \-shared  
468 \&\-shared\-libgcc  \-symbolic 
469 \&\-T\fR \fIscript\fR  \fB\-Wl,\fR\fIoption\fR  \fB\-Xlinker\fR \fIoption\fR 
470 \&\fB\-u\fR \fIsymbol\fR
471 .IP "\fIDirectory Options\fR" 4
472 .IX Item "Directory Options"
473 \&\fB\-B\fR\fIprefix\fR \fB\-I\fR\fIdir\fR \fB\-iplugindir=\fR\fIdir\fR 
474 \&\fB\-iquote\fR\fIdir\fR \fB\-L\fR\fIdir\fR \fB\-specs=\fR\fIfile\fR \fB\-I\- 
475 \&\-\-sysroot=\fR\fIdir\fR
476 .IP "\fIMachine Dependent Options\fR" 4
477 .IX Item "Machine Dependent Options"
478 \&\fIAdapteva Epiphany Options\fR
479 \&\fB\-mhalf\-reg\-file \-mprefer\-short\-insn\-regs 
480 \&\-mbranch\-cost=\fR\fInum\fR \fB\-mcmove \-mnops=\fR\fInum\fR \fB\-msoft\-cmpsf 
481 \&\-msplit\-lohi \-mpost\-inc \-mpost\-modify \-mstack\-offset=\fR\fInum\fR 
482 \&\fB\-mround\-nearest \-mlong\-calls \-mshort\-calls \-msmall16 
483 \&\-mfp\-mode=\fR\fImode\fR \fB\-mvect\-double \-max\-vect\-align=\fR\fInum\fR 
484 \&\fB\-msplit\-vecmove\-early \-m1reg\-\fR\fIreg\fR
485 .Sp
486 \&\fI\s-1ARM\s0 Options\fR
487 \&\fB\-mapcs\-frame  \-mno\-apcs\-frame 
488 \&\-mabi=\fR\fIname\fR 
489 \&\fB\-mapcs\-stack\-check  \-mno\-apcs\-stack\-check 
490 \&\-mapcs\-float  \-mno\-apcs\-float 
491 \&\-mapcs\-reentrant  \-mno\-apcs\-reentrant 
492 \&\-msched\-prolog  \-mno\-sched\-prolog 
493 \&\-mlittle\-endian  \-mbig\-endian  \-mwords\-little\-endian 
494 \&\-mfloat\-abi=\fR\fIname\fR  \fB\-mfpe 
495 \&\-mfp16\-format=\fR\fIname\fR
496 \&\fB\-mthumb\-interwork  \-mno\-thumb\-interwork 
497 \&\-mcpu=\fR\fIname\fR  \fB\-march=\fR\fIname\fR  \fB\-mfpu=\fR\fIname\fR  
498 \&\fB\-mstructure\-size\-boundary=\fR\fIn\fR 
499 \&\fB\-mabort\-on\-noreturn 
500 \&\-mlong\-calls  \-mno\-long\-calls 
501 \&\-msingle\-pic\-base  \-mno\-single\-pic\-base 
502 \&\-mpic\-register=\fR\fIreg\fR 
503 \&\fB\-mnop\-fun\-dllimport 
504 \&\-mcirrus\-fix\-invalid\-insns \-mno\-cirrus\-fix\-invalid\-insns 
505 \&\-mpoke\-function\-name 
506 \&\-mthumb  \-marm 
507 \&\-mtpcs\-frame  \-mtpcs\-leaf\-frame 
508 \&\-mcaller\-super\-interworking  \-mcallee\-super\-interworking 
509 \&\-mtp=\fR\fIname\fR \fB\-mtls\-dialect=\fR\fIdialect\fR 
510 \&\fB\-mword\-relocations 
511 \&\-mfix\-cortex\-m3\-ldrd 
512 \&\-munaligned\-access\fR
513 .Sp
514 \&\fI\s-1AVR\s0 Options\fR
515 \&\fB\-mmcu=\fR\fImcu\fR \fB\-maccumulate\-args \-mbranch\-cost=\fR\fIcost\fR 
516 \&\fB\-mcall\-prologues \-mint8 \-mno\-interrupts \-mrelax \-mshort\-calls 
517 \&\-mstrict\-X \-mtiny\-stack\fR
518 .Sp
519 \&\fIBlackfin Options\fR
520 \&\fB\-mcpu=\fR\fIcpu\fR[\fB\-\fR\fIsirevision\fR] 
521 \&\fB\-msim \-momit\-leaf\-frame\-pointer  \-mno\-omit\-leaf\-frame\-pointer 
522 \&\-mspecld\-anomaly  \-mno\-specld\-anomaly  \-mcsync\-anomaly  \-mno\-csync\-anomaly 
523 \&\-mlow\-64k \-mno\-low64k  \-mstack\-check\-l1  \-mid\-shared\-library 
524 \&\-mno\-id\-shared\-library  \-mshared\-library\-id=\fR\fIn\fR 
525 \&\fB\-mleaf\-id\-shared\-library  \-mno\-leaf\-id\-shared\-library 
526 \&\-msep\-data  \-mno\-sep\-data  \-mlong\-calls  \-mno\-long\-calls 
527 \&\-mfast\-fp \-minline\-plt \-mmulticore  \-mcorea  \-mcoreb  \-msdram 
528 \&\-micplb\fR
529 .Sp
530 \&\fIC6X Options\fR
531 \&\fB\-mbig\-endian  \-mlittle\-endian \-march=\fR\fIcpu\fR 
532 \&\fB\-msim \-msdata=\fR\fIsdata-type\fR
533 .Sp
534 \&\fI\s-1CRIS\s0 Options\fR
535 \&\fB\-mcpu=\fR\fIcpu\fR  \fB\-march=\fR\fIcpu\fR  \fB\-mtune=\fR\fIcpu\fR 
536 \&\fB\-mmax\-stack\-frame=\fR\fIn\fR  \fB\-melinux\-stacksize=\fR\fIn\fR 
537 \&\fB\-metrax4  \-metrax100  \-mpdebug  \-mcc\-init  \-mno\-side\-effects 
538 \&\-mstack\-align  \-mdata\-align  \-mconst\-align 
539 \&\-m32\-bit  \-m16\-bit  \-m8\-bit  \-mno\-prologue\-epilogue  \-mno\-gotplt 
540 \&\-melf  \-maout  \-melinux  \-mlinux  \-sim  \-sim2 
541 \&\-mmul\-bug\-workaround  \-mno\-mul\-bug\-workaround\fR
542 .Sp
543 \&\fI\s-1CR16\s0 Options\fR
544 \&\fB\-mmac 
545 \&\-mcr16cplus \-mcr16c 
546 \&\-msim \-mint32 \-mbit\-ops
547 \&\-mdata\-model=\fR\fImodel\fR
548 .Sp
549 \&\fIDarwin Options\fR
550 \&\fB\-all_load  \-allowable_client  \-arch  \-arch_errors_fatal 
551 \&\-arch_only  \-bind_at_load  \-bundle  \-bundle_loader 
552 \&\-client_name  \-compatibility_version  \-current_version 
553 \&\-dead_strip 
554 \&\-dependency\-file  \-dylib_file  \-dylinker_install_name 
555 \&\-dynamic  \-dynamiclib  \-exported_symbols_list 
556 \&\-filelist  \-flat_namespace  \-force_cpusubtype_ALL 
557 \&\-force_flat_namespace  \-headerpad_max_install_names 
558 \&\-iframework 
559 \&\-image_base  \-init  \-install_name  \-keep_private_externs 
560 \&\-multi_module  \-multiply_defined  \-multiply_defined_unused 
561 \&\-noall_load   \-no_dead_strip_inits_and_terms 
562 \&\-nofixprebinding \-nomultidefs  \-noprebind  \-noseglinkedit 
563 \&\-pagezero_size  \-prebind  \-prebind_all_twolevel_modules 
564 \&\-private_bundle  \-read_only_relocs  \-sectalign 
565 \&\-sectobjectsymbols  \-whyload  \-seg1addr 
566 \&\-sectcreate  \-sectobjectsymbols  \-sectorder 
567 \&\-segaddr \-segs_read_only_addr \-segs_read_write_addr 
568 \&\-seg_addr_table  \-seg_addr_table_filename  \-seglinkedit 
569 \&\-segprot  \-segs_read_only_addr  \-segs_read_write_addr 
570 \&\-single_module  \-static  \-sub_library  \-sub_umbrella 
571 \&\-twolevel_namespace  \-umbrella  \-undefined 
572 \&\-unexported_symbols_list  \-weak_reference_mismatches 
573 \&\-whatsloaded \-F \-gused \-gfull \-mmacosx\-version\-min=\fR\fIversion\fR 
574 \&\fB\-mkernel \-mone\-byte\-bool\fR
575 .Sp
576 \&\fI\s-1DEC\s0 Alpha Options\fR
577 \&\fB\-mno\-fp\-regs  \-msoft\-float  \-malpha\-as  \-mgas 
578 \&\-mieee  \-mieee\-with\-inexact  \-mieee\-conformant 
579 \&\-mfp\-trap\-mode=\fR\fImode\fR  \fB\-mfp\-rounding\-mode=\fR\fImode\fR 
580 \&\fB\-mtrap\-precision=\fR\fImode\fR  \fB\-mbuild\-constants 
581 \&\-mcpu=\fR\fIcpu-type\fR  \fB\-mtune=\fR\fIcpu-type\fR 
582 \&\fB\-mbwx  \-mmax  \-mfix  \-mcix 
583 \&\-mfloat\-vax  \-mfloat\-ieee 
584 \&\-mexplicit\-relocs  \-msmall\-data  \-mlarge\-data 
585 \&\-msmall\-text  \-mlarge\-text 
586 \&\-mmemory\-latency=\fR\fItime\fR
587 .Sp
588 \&\fI\s-1DEC\s0 Alpha/VMS Options\fR
589 \&\fB\-mvms\-return\-codes \-mdebug\-main=\fR\fIprefix\fR \fB\-mmalloc64\fR
590 .Sp
591 \&\fI\s-1FR30\s0 Options\fR
592 \&\fB\-msmall\-model \-mno\-lsim\fR
593 .Sp
594 \&\fI\s-1FRV\s0 Options\fR
595 \&\fB\-mgpr\-32  \-mgpr\-64  \-mfpr\-32  \-mfpr\-64 
596 \&\-mhard\-float  \-msoft\-float 
597 \&\-malloc\-cc  \-mfixed\-cc  \-mdword  \-mno\-dword 
598 \&\-mdouble  \-mno\-double 
599 \&\-mmedia  \-mno\-media  \-mmuladd  \-mno\-muladd 
600 \&\-mfdpic  \-minline\-plt \-mgprel\-ro  \-multilib\-library\-pic 
601 \&\-mlinked\-fp  \-mlong\-calls  \-malign\-labels 
602 \&\-mlibrary\-pic  \-macc\-4  \-macc\-8 
603 \&\-mpack  \-mno\-pack  \-mno\-eflags  \-mcond\-move  \-mno\-cond\-move 
604 \&\-moptimize\-membar \-mno\-optimize\-membar 
605 \&\-mscc  \-mno\-scc  \-mcond\-exec  \-mno\-cond\-exec 
606 \&\-mvliw\-branch  \-mno\-vliw\-branch 
607 \&\-mmulti\-cond\-exec  \-mno\-multi\-cond\-exec  \-mnested\-cond\-exec 
608 \&\-mno\-nested\-cond\-exec  \-mtomcat\-stats 
609 \&\-mTLS \-mtls 
610 \&\-mcpu=\fR\fIcpu\fR
611 .Sp
612 \&\fIGNU/Linux Options\fR
613 \&\fB\-mglibc \-muclibc \-mbionic \-mandroid 
614 \&\-tno\-android\-cc \-tno\-android\-ld\fR
615 .Sp
616 \&\fIH8/300 Options\fR
617 \&\fB\-mrelax  \-mh  \-ms  \-mn  \-mint32  \-malign\-300\fR
618 .Sp
619 \&\fI\s-1HPPA\s0 Options\fR
620 \&\fB\-march=\fR\fIarchitecture-type\fR 
621 \&\fB\-mbig\-switch  \-mdisable\-fpregs  \-mdisable\-indexing 
622 \&\-mfast\-indirect\-calls  \-mgas  \-mgnu\-ld   \-mhp\-ld 
623 \&\-mfixed\-range=\fR\fIregister-range\fR 
624 \&\fB\-mjump\-in\-delay \-mlinker\-opt \-mlong\-calls 
625 \&\-mlong\-load\-store  \-mno\-big\-switch  \-mno\-disable\-fpregs 
626 \&\-mno\-disable\-indexing  \-mno\-fast\-indirect\-calls  \-mno\-gas 
627 \&\-mno\-jump\-in\-delay  \-mno\-long\-load\-store 
628 \&\-mno\-portable\-runtime  \-mno\-soft\-float 
629 \&\-mno\-space\-regs  \-msoft\-float  \-mpa\-risc\-1\-0 
630 \&\-mpa\-risc\-1\-1  \-mpa\-risc\-2\-0  \-mportable\-runtime 
631 \&\-mschedule=\fR\fIcpu-type\fR  \fB\-mspace\-regs  \-msio  \-mwsio 
632 \&\-munix=\fR\fIunix-std\fR  \fB\-nolibdld  \-static  \-threads\fR
633 .Sp
634 \&\fIi386 and x86\-64 Options\fR
635 \&\fB\-mtune=\fR\fIcpu-type\fR  \fB\-march=\fR\fIcpu-type\fR 
636 \&\fB\-mfpmath=\fR\fIunit\fR 
637 \&\fB\-masm=\fR\fIdialect\fR  \fB\-mno\-fancy\-math\-387 
638 \&\-mno\-fp\-ret\-in\-387  \-msoft\-float 
639 \&\-mno\-wide\-multiply  \-mrtd  \-malign\-double 
640 \&\-mpreferred\-stack\-boundary=\fR\fInum\fR 
641 \&\fB\-mincoming\-stack\-boundary=\fR\fInum\fR 
642 \&\fB\-mcld \-mcx16 \-msahf \-mmovbe \-mcrc32 
643 \&\-mrecip \-mrecip=\fR\fIopt\fR 
644 \&\fB\-mvzeroupper \-mprefer\-avx128 
645 \&\-mmmx  \-msse  \-msse2 \-msse3 \-mssse3 \-msse4.1 \-msse4.2 \-msse4 \-mavx 
646 \&\-mavx2 \-maes \-mpclmul \-mfsgsbase \-mrdrnd \-mf16c \-mfma 
647 \&\-msse4a \-m3dnow \-mpopcnt \-mabm \-mbmi \-mtbm \-mfma4 \-mxop \-mlzcnt 
648 \&\-mbmi2 \-mlwp \-mthreads  \-mno\-align\-stringops  \-minline\-all\-stringops 
649 \&\-minline\-stringops\-dynamically \-mstringop\-strategy=\fR\fIalg\fR 
650 \&\fB\-mpush\-args  \-maccumulate\-outgoing\-args  \-m128bit\-long\-double 
651 \&\-m96bit\-long\-double  \-mregparm=\fR\fInum\fR  \fB\-msseregparm 
652 \&\-mveclibabi=\fR\fItype\fR \fB\-mvect8\-ret\-in\-mem 
653 \&\-mpc32 \-mpc64 \-mpc80 \-mstackrealign 
654 \&\-momit\-leaf\-frame\-pointer  \-mno\-red\-zone \-mno\-tls\-direct\-seg\-refs 
655 \&\-mcmodel=\fR\fIcode-model\fR \fB\-mabi=\fR\fIname\fR 
656 \&\fB\-m32 \-m64 \-mx32 \-mlarge\-data\-threshold=\fR\fInum\fR 
657 \&\fB\-msse2avx \-mfentry \-m8bit\-idiv 
658 \&\-mavx256\-split\-unaligned\-load \-mavx256\-split\-unaligned\-store\fR
659 .Sp
660 \&\fIi386 and x86\-64 Windows Options\fR
661 \&\fB\-mconsole \-mcygwin \-mno\-cygwin \-mdll 
662 \&\-mnop\-fun\-dllimport \-mthread 
663 \&\-municode \-mwin32 \-mwindows \-fno\-set\-stack\-executable\fR
664 .Sp
665 \&\fI\s-1IA\-64\s0 Options\fR
666 \&\fB\-mbig\-endian  \-mlittle\-endian  \-mgnu\-as  \-mgnu\-ld  \-mno\-pic 
667 \&\-mvolatile\-asm\-stop  \-mregister\-names  \-msdata \-mno\-sdata 
668 \&\-mconstant\-gp  \-mauto\-pic  \-mfused\-madd 
669 \&\-minline\-float\-divide\-min\-latency 
670 \&\-minline\-float\-divide\-max\-throughput 
671 \&\-mno\-inline\-float\-divide 
672 \&\-minline\-int\-divide\-min\-latency 
673 \&\-minline\-int\-divide\-max\-throughput  
674 \&\-mno\-inline\-int\-divide 
675 \&\-minline\-sqrt\-min\-latency \-minline\-sqrt\-max\-throughput 
676 \&\-mno\-inline\-sqrt 
677 \&\-mdwarf2\-asm \-mearly\-stop\-bits 
678 \&\-mfixed\-range=\fR\fIregister-range\fR \fB\-mtls\-size=\fR\fItls-size\fR 
679 \&\fB\-mtune=\fR\fIcpu-type\fR \fB\-milp32 \-mlp64 
680 \&\-msched\-br\-data\-spec \-msched\-ar\-data\-spec \-msched\-control\-spec 
681 \&\-msched\-br\-in\-data\-spec \-msched\-ar\-in\-data\-spec \-msched\-in\-control\-spec 
682 \&\-msched\-spec\-ldc \-msched\-spec\-control\-ldc 
683 \&\-msched\-prefer\-non\-data\-spec\-insns \-msched\-prefer\-non\-control\-spec\-insns 
684 \&\-msched\-stop\-bits\-after\-every\-cycle \-msched\-count\-spec\-in\-critical\-path 
685 \&\-msel\-sched\-dont\-check\-control\-spec \-msched\-fp\-mem\-deps\-zero\-cost 
686 \&\-msched\-max\-memory\-insns\-hard\-limit \-msched\-max\-memory\-insns=\fR\fImax-insns\fR
687 .Sp
688 \&\fI\s-1IA\-64/VMS\s0 Options\fR
689 \&\fB\-mvms\-return\-codes \-mdebug\-main=\fR\fIprefix\fR \fB\-mmalloc64\fR
690 .Sp
691 \&\fI\s-1LM32\s0 Options\fR
692 \&\fB\-mbarrel\-shift\-enabled \-mdivide\-enabled \-mmultiply\-enabled 
693 \&\-msign\-extend\-enabled \-muser\-enabled\fR
694 .Sp
695 \&\fIM32R/D Options\fR
696 \&\fB\-m32r2 \-m32rx \-m32r 
697 \&\-mdebug 
698 \&\-malign\-loops \-mno\-align\-loops 
699 \&\-missue\-rate=\fR\fInumber\fR 
700 \&\fB\-mbranch\-cost=\fR\fInumber\fR 
701 \&\fB\-mmodel=\fR\fIcode-size-model-type\fR 
702 \&\fB\-msdata=\fR\fIsdata-type\fR 
703 \&\fB\-mno\-flush\-func \-mflush\-func=\fR\fIname\fR 
704 \&\fB\-mno\-flush\-trap \-mflush\-trap=\fR\fInumber\fR 
705 \&\fB\-G\fR \fInum\fR
706 .Sp
707 \&\fIM32C Options\fR
708 \&\fB\-mcpu=\fR\fIcpu\fR \fB\-msim \-memregs=\fR\fInumber\fR
709 .Sp
710 \&\fIM680x0 Options\fR
711 \&\fB\-march=\fR\fIarch\fR  \fB\-mcpu=\fR\fIcpu\fR  \fB\-mtune=\fR\fItune\fR
712 \&\fB\-m68000  \-m68020  \-m68020\-40  \-m68020\-60  \-m68030  \-m68040 
713 \&\-m68060  \-mcpu32  \-m5200  \-m5206e  \-m528x  \-m5307  \-m5407 
714 \&\-mcfv4e  \-mbitfield  \-mno\-bitfield  \-mc68000  \-mc68020 
715 \&\-mnobitfield  \-mrtd  \-mno\-rtd  \-mdiv  \-mno\-div  \-mshort 
716 \&\-mno\-short  \-mhard\-float  \-m68881  \-msoft\-float  \-mpcrel 
717 \&\-malign\-int  \-mstrict\-align  \-msep\-data  \-mno\-sep\-data 
718 \&\-mshared\-library\-id=n  \-mid\-shared\-library  \-mno\-id\-shared\-library 
719 \&\-mxgot \-mno\-xgot\fR
720 .Sp
721 \&\fIMCore Options\fR
722 \&\fB\-mhardlit  \-mno\-hardlit  \-mdiv  \-mno\-div  \-mrelax\-immediates 
723 \&\-mno\-relax\-immediates  \-mwide\-bitfields  \-mno\-wide\-bitfields 
724 \&\-m4byte\-functions  \-mno\-4byte\-functions  \-mcallgraph\-data 
725 \&\-mno\-callgraph\-data  \-mslow\-bytes  \-mno\-slow\-bytes  \-mno\-lsim 
726 \&\-mlittle\-endian  \-mbig\-endian  \-m210  \-m340  \-mstack\-increment\fR
727 .Sp
728 \&\fIMeP Options\fR
729 \&\fB\-mabsdiff \-mall\-opts \-maverage \-mbased=\fR\fIn\fR \fB\-mbitops 
730 \&\-mc=\fR\fIn\fR \fB\-mclip \-mconfig=\fR\fIname\fR \fB\-mcop \-mcop32 \-mcop64 \-mivc2 
731 \&\-mdc \-mdiv \-meb \-mel \-mio\-volatile \-ml \-mleadz \-mm \-mminmax 
732 \&\-mmult \-mno\-opts \-mrepeat \-ms \-msatur \-msdram \-msim \-msimnovec \-mtf 
733 \&\-mtiny=\fR\fIn\fR
734 .Sp
735 \&\fIMicroBlaze Options\fR
736 \&\fB\-msoft\-float \-mhard\-float \-msmall\-divides \-mcpu=\fR\fIcpu\fR 
737 \&\fB\-mmemcpy \-mxl\-soft\-mul \-mxl\-soft\-div \-mxl\-barrel\-shift 
738 \&\-mxl\-pattern\-compare \-mxl\-stack\-check \-mxl\-gp\-opt \-mno\-clearbss 
739 \&\-mxl\-multiply\-high \-mxl\-float\-convert \-mxl\-float\-sqrt 
740 \&\-mxl\-mode\-\fR\fIapp-model\fR
741 .Sp
742 \&\fI\s-1MIPS\s0 Options\fR
743 \&\fB\-EL  \-EB  \-march=\fR\fIarch\fR  \fB\-mtune=\fR\fIarch\fR 
744 \&\fB\-mips1  \-mips2  \-mips3  \-mips4  \-mips32  \-mips32r2 
745 \&\-mips64  \-mips64r2 
746 \&\-mips16  \-mno\-mips16  \-mflip\-mips16 
747 \&\-minterlink\-mips16  \-mno\-interlink\-mips16 
748 \&\-mabi=\fR\fIabi\fR  \fB\-mabicalls  \-mno\-abicalls 
749 \&\-mshared  \-mno\-shared  \-mplt  \-mno\-plt  \-mxgot  \-mno\-xgot 
750 \&\-mgp32  \-mgp64  \-mfp32  \-mfp64  \-mhard\-float  \-msoft\-float 
751 \&\-msingle\-float  \-mdouble\-float  \-mdsp  \-mno\-dsp  \-mdspr2  \-mno\-dspr2 
752 \&\-mfpu=\fR\fIfpu-type\fR 
753 \&\fB\-msmartmips  \-mno\-smartmips 
754 \&\-mpaired\-single  \-mno\-paired\-single  \-mdmx  \-mno\-mdmx 
755 \&\-mips3d  \-mno\-mips3d  \-mmt  \-mno\-mt  \-mllsc  \-mno\-llsc 
756 \&\-mlong64  \-mlong32  \-msym32  \-mno\-sym32 
757 \&\-G\fR\fInum\fR  \fB\-mlocal\-sdata  \-mno\-local\-sdata 
758 \&\-mextern\-sdata  \-mno\-extern\-sdata  \-mgpopt  \-mno\-gopt 
759 \&\-membedded\-data  \-mno\-embedded\-data 
760 \&\-muninit\-const\-in\-rodata  \-mno\-uninit\-const\-in\-rodata 
761 \&\-mcode\-readable=\fR\fIsetting\fR 
762 \&\fB\-msplit\-addresses  \-mno\-split\-addresses 
763 \&\-mexplicit\-relocs  \-mno\-explicit\-relocs 
764 \&\-mcheck\-zero\-division  \-mno\-check\-zero\-division 
765 \&\-mdivide\-traps  \-mdivide\-breaks 
766 \&\-mmemcpy  \-mno\-memcpy  \-mlong\-calls  \-mno\-long\-calls 
767 \&\-mmad  \-mno\-mad  \-mfused\-madd  \-mno\-fused\-madd  \-nocpp 
768 \&\-mfix\-24k \-mno\-fix\-24k 
769 \&\-mfix\-r4000  \-mno\-fix\-r4000  \-mfix\-r4400  \-mno\-fix\-r4400 
770 \&\-mfix\-r10000 \-mno\-fix\-r10000  \-mfix\-vr4120  \-mno\-fix\-vr4120 
771 \&\-mfix\-vr4130  \-mno\-fix\-vr4130  \-mfix\-sb1  \-mno\-fix\-sb1 
772 \&\-mflush\-func=\fR\fIfunc\fR  \fB\-mno\-flush\-func 
773 \&\-mbranch\-cost=\fR\fInum\fR  \fB\-mbranch\-likely  \-mno\-branch\-likely 
774 \&\-mfp\-exceptions \-mno\-fp\-exceptions 
775 \&\-mvr4130\-align \-mno\-vr4130\-align \-msynci \-mno\-synci 
776 \&\-mrelax\-pic\-calls \-mno\-relax\-pic\-calls \-mmcount\-ra\-address\fR
777 .Sp
778 \&\fI\s-1MMIX\s0 Options\fR
779 \&\fB\-mlibfuncs  \-mno\-libfuncs  \-mepsilon  \-mno\-epsilon  \-mabi=gnu 
780 \&\-mabi=mmixware  \-mzero\-extend  \-mknuthdiv  \-mtoplevel\-symbols 
781 \&\-melf  \-mbranch\-predict  \-mno\-branch\-predict  \-mbase\-addresses 
782 \&\-mno\-base\-addresses  \-msingle\-exit  \-mno\-single\-exit\fR
783 .Sp
784 \&\fI\s-1MN10300\s0 Options\fR
785 \&\fB\-mmult\-bug  \-mno\-mult\-bug 
786 \&\-mno\-am33 \-mam33 \-mam33\-2 \-mam34 
787 \&\-mtune=\fR\fIcpu-type\fR 
788 \&\fB\-mreturn\-pointer\-on\-d0 
789 \&\-mno\-crt0  \-mrelax \-mliw \-msetlb\fR
790 .Sp
791 \&\fI\s-1PDP\-11\s0 Options\fR
792 \&\fB\-mfpu  \-msoft\-float  \-mac0  \-mno\-ac0  \-m40  \-m45  \-m10 
793 \&\-mbcopy  \-mbcopy\-builtin  \-mint32  \-mno\-int16 
794 \&\-mint16  \-mno\-int32  \-mfloat32  \-mno\-float64 
795 \&\-mfloat64  \-mno\-float32  \-mabshi  \-mno\-abshi 
796 \&\-mbranch\-expensive  \-mbranch\-cheap 
797 \&\-munix\-asm  \-mdec\-asm\fR
798 .Sp
799 \&\fIpicoChip Options\fR
800 \&\fB\-mae=\fR\fIae_type\fR \fB\-mvliw\-lookahead=\fR\fIN\fR 
801 \&\fB\-msymbol\-as\-address \-mno\-inefficient\-warnings\fR
802 .Sp
803 \&\fIPowerPC Options\fR
804 See \s-1RS/6000\s0 and PowerPC Options.
805 .Sp
806 \&\fI\s-1RL78\s0 Options\fR
807 \&\fB\-msim \-mmul=none \-mmul=g13 \-mmul=rl78\fR
808 .Sp
809 \&\fI\s-1RS/6000\s0 and PowerPC Options\fR
810 \&\fB\-mcpu=\fR\fIcpu-type\fR 
811 \&\fB\-mtune=\fR\fIcpu-type\fR 
812 \&\fB\-mcmodel=\fR\fIcode-model\fR 
813 \&\fB\-mpower  \-mno\-power  \-mpower2  \-mno\-power2 
814 \&\-mpowerpc  \-mpowerpc64  \-mno\-powerpc 
815 \&\-maltivec  \-mno\-altivec 
816 \&\-mpowerpc\-gpopt  \-mno\-powerpc\-gpopt 
817 \&\-mpowerpc\-gfxopt  \-mno\-powerpc\-gfxopt 
818 \&\-mmfcrf  \-mno\-mfcrf  \-mpopcntb  \-mno\-popcntb \-mpopcntd \-mno\-popcntd 
819 \&\-mfprnd  \-mno\-fprnd 
820 \&\-mcmpb \-mno\-cmpb \-mmfpgpr \-mno\-mfpgpr \-mhard\-dfp \-mno\-hard\-dfp 
821 \&\-mnew\-mnemonics  \-mold\-mnemonics 
822 \&\-mfull\-toc   \-mminimal\-toc  \-mno\-fp\-in\-toc  \-mno\-sum\-in\-toc 
823 \&\-m64  \-m32  \-mxl\-compat  \-mno\-xl\-compat  \-mpe 
824 \&\-malign\-power  \-malign\-natural 
825 \&\-msoft\-float  \-mhard\-float  \-mmultiple  \-mno\-multiple 
826 \&\-msingle\-float \-mdouble\-float \-msimple\-fpu 
827 \&\-mstring  \-mno\-string  \-mupdate  \-mno\-update 
828 \&\-mavoid\-indexed\-addresses  \-mno\-avoid\-indexed\-addresses 
829 \&\-mfused\-madd  \-mno\-fused\-madd  \-mbit\-align  \-mno\-bit\-align 
830 \&\-mstrict\-align  \-mno\-strict\-align  \-mrelocatable 
831 \&\-mno\-relocatable  \-mrelocatable\-lib  \-mno\-relocatable\-lib 
832 \&\-mtoc  \-mno\-toc  \-mlittle  \-mlittle\-endian  \-mbig  \-mbig\-endian 
833 \&\-mdynamic\-no\-pic  \-maltivec \-mswdiv  \-msingle\-pic\-base 
834 \&\-mprioritize\-restricted\-insns=\fR\fIpriority\fR 
835 \&\fB\-msched\-costly\-dep=\fR\fIdependence_type\fR 
836 \&\fB\-minsert\-sched\-nops=\fR\fIscheme\fR 
837 \&\fB\-mcall\-sysv  \-mcall\-netbsd 
838 \&\-maix\-struct\-return  \-msvr4\-struct\-return 
839 \&\-mabi=\fR\fIabi-type\fR \fB\-msecure\-plt \-mbss\-plt 
840 \&\-mblock\-move\-inline\-limit=\fR\fInum\fR 
841 \&\fB\-misel \-mno\-isel 
842 \&\-misel=yes  \-misel=no 
843 \&\-mspe \-mno\-spe 
844 \&\-mspe=yes  \-mspe=no 
845 \&\-mpaired 
846 \&\-mgen\-cell\-microcode \-mwarn\-cell\-microcode 
847 \&\-mvrsave \-mno\-vrsave 
848 \&\-mmulhw \-mno\-mulhw 
849 \&\-mdlmzb \-mno\-dlmzb 
850 \&\-mfloat\-gprs=yes  \-mfloat\-gprs=no \-mfloat\-gprs=single \-mfloat\-gprs=double 
851 \&\-mprototype  \-mno\-prototype 
852 \&\-msim  \-mmvme  \-mads  \-myellowknife  \-memb  \-msdata 
853 \&\-msdata=\fR\fIopt\fR  \fB\-mvxworks  \-G\fR \fInum\fR  \fB\-pthread 
854 \&\-mrecip \-mrecip=\fR\fIopt\fR \fB\-mno\-recip \-mrecip\-precision 
855 \&\-mno\-recip\-precision 
856 \&\-mveclibabi=\fR\fItype\fR \fB\-mfriz \-mno\-friz 
857 \&\-mpointers\-to\-nested\-functions \-mno\-pointers\-to\-nested\-functions 
858 \&\-msave\-toc\-indirect \-mno\-save\-toc\-indirect\fR
859 .Sp
860 \&\fI\s-1RX\s0 Options\fR
861 \&\fB\-m64bit\-doubles  \-m32bit\-doubles  \-fpu  \-nofpu
862 \&\-mcpu=
863 \&\-mbig\-endian\-data \-mlittle\-endian\-data 
864 \&\-msmall\-data 
865 \&\-msim  \-mno\-sim
866 \&\-mas100\-syntax \-mno\-as100\-syntax
867 \&\-mrelax
868 \&\-mmax\-constant\-size=
869 \&\-mint\-register=
870 \&\-mpid
871 \&\-msave\-acc\-in\-interrupts\fR
872 .Sp
873 \&\fIS/390 and zSeries Options\fR
874 \&\fB\-mtune=\fR\fIcpu-type\fR  \fB\-march=\fR\fIcpu-type\fR 
875 \&\fB\-mhard\-float  \-msoft\-float  \-mhard\-dfp \-mno\-hard\-dfp 
876 \&\-mlong\-double\-64 \-mlong\-double\-128 
877 \&\-mbackchain  \-mno\-backchain \-mpacked\-stack  \-mno\-packed\-stack 
878 \&\-msmall\-exec  \-mno\-small\-exec  \-mmvcle \-mno\-mvcle 
879 \&\-m64  \-m31  \-mdebug  \-mno\-debug  \-mesa  \-mzarch 
880 \&\-mtpf\-trace \-mno\-tpf\-trace  \-mfused\-madd  \-mno\-fused\-madd 
881 \&\-mwarn\-framesize  \-mwarn\-dynamicstack  \-mstack\-size \-mstack\-guard\fR
882 .Sp
883 \&\fIScore Options\fR
884 \&\fB\-meb \-mel 
885 \&\-mnhwloop 
886 \&\-muls 
887 \&\-mmac 
888 \&\-mscore5 \-mscore5u \-mscore7 \-mscore7d\fR
889 .Sp
890 \&\fI\s-1SH\s0 Options\fR
891 \&\fB\-m1  \-m2  \-m2e 
892 \&\-m2a\-nofpu \-m2a\-single\-only \-m2a\-single \-m2a 
893 \&\-m3  \-m3e 
894 \&\-m4\-nofpu  \-m4\-single\-only  \-m4\-single  \-m4 
895 \&\-m4a\-nofpu \-m4a\-single\-only \-m4a\-single \-m4a \-m4al 
896 \&\-m5\-64media  \-m5\-64media\-nofpu 
897 \&\-m5\-32media  \-m5\-32media\-nofpu 
898 \&\-m5\-compact  \-m5\-compact\-nofpu 
899 \&\-mb  \-ml  \-mdalign  \-mrelax 
900 \&\-mbigtable \-mfmovd \-mhitachi \-mrenesas \-mno\-renesas \-mnomacsave 
901 \&\-mieee \-mno\-ieee \-mbitops  \-misize  \-minline\-ic_invalidate \-mpadstruct 
902 \&\-mspace \-mprefergot  \-musermode \-multcost=\fR\fInumber\fR \fB\-mdiv=\fR\fIstrategy\fR 
903 \&\fB\-mdivsi3_libfunc=\fR\fIname\fR \fB\-mfixed\-range=\fR\fIregister-range\fR 
904 \&\fB\-madjust\-unroll \-mindexed\-addressing \-mgettrcost=\fR\fInumber\fR \fB\-mpt\-fixed 
905 \&\-maccumulate\-outgoing\-args \-minvalid\-symbols \-msoft\-atomic 
906 \&\-mbranch\-cost=\fR\fInum\fR \fB\-mcbranchdi \-mcmpeqdi \-mfused\-madd \-mpretend\-cmove\fR
907 .Sp
908 \&\fISolaris 2 Options\fR
909 \&\fB\-mimpure\-text  \-mno\-impure\-text 
910 \&\-pthreads \-pthread\fR
911 .Sp
912 \&\fI\s-1SPARC\s0 Options\fR
913 \&\fB\-mcpu=\fR\fIcpu-type\fR 
914 \&\fB\-mtune=\fR\fIcpu-type\fR 
915 \&\fB\-mcmodel=\fR\fIcode-model\fR 
916 \&\fB\-mmemory\-model=\fR\fImem-model\fR 
917 \&\fB\-m32  \-m64  \-mapp\-regs  \-mno\-app\-regs 
918 \&\-mfaster\-structs  \-mno\-faster\-structs  \-mflat  \-mno\-flat 
919 \&\-mfpu  \-mno\-fpu  \-mhard\-float  \-msoft\-float 
920 \&\-mhard\-quad\-float  \-msoft\-quad\-float 
921 \&\-mstack\-bias  \-mno\-stack\-bias 
922 \&\-munaligned\-doubles  \-mno\-unaligned\-doubles 
923 \&\-mv8plus  \-mno\-v8plus  \-mvis  \-mno\-vis 
924 \&\-mvis2  \-mno\-vis2  \-mvis3  \-mno\-vis3 
925 \&\-mfmaf  \-mno\-fmaf  \-mpopc  \-mno\-popc 
926 \&\-mfix\-at697f\fR
927 .Sp
928 \&\fI\s-1SPU\s0 Options\fR
929 \&\fB\-mwarn\-reloc \-merror\-reloc 
930 \&\-msafe\-dma \-munsafe\-dma 
931 \&\-mbranch\-hints 
932 \&\-msmall\-mem \-mlarge\-mem \-mstdmain 
933 \&\-mfixed\-range=\fR\fIregister-range\fR 
934 \&\fB\-mea32 \-mea64 
935 \&\-maddress\-space\-conversion \-mno\-address\-space\-conversion 
936 \&\-mcache\-size=\fR\fIcache-size\fR 
937 \&\fB\-matomic\-updates \-mno\-atomic\-updates\fR
938 .Sp
939 \&\fISystem V Options\fR
940 \&\fB\-Qy  \-Qn  \-YP,\fR\fIpaths\fR  \fB\-Ym,\fR\fIdir\fR
941 .Sp
942 \&\fITILE-Gx Options\fR
943 \&\fB\-mcpu=\fR\fIcpu\fR \fB\-m32 \-m64\fR
944 .Sp
945 \&\fITILEPro Options\fR
946 \&\fB\-mcpu=\fR\fIcpu\fR \fB\-m32\fR
947 .Sp
948 \&\fIV850 Options\fR
949 \&\fB\-mlong\-calls  \-mno\-long\-calls  \-mep  \-mno\-ep 
950 \&\-mprolog\-function  \-mno\-prolog\-function  \-mspace 
951 \&\-mtda=\fR\fIn\fR  \fB\-msda=\fR\fIn\fR  \fB\-mzda=\fR\fIn\fR 
952 \&\fB\-mapp\-regs  \-mno\-app\-regs 
953 \&\-mdisable\-callt  \-mno\-disable\-callt 
954 \&\-mv850e2v3 
955 \&\-mv850e2 
956 \&\-mv850e1 \-mv850es 
957 \&\-mv850e 
958 \&\-mv850  \-mbig\-switch\fR
959 .Sp
960 \&\fI\s-1VAX\s0 Options\fR
961 \&\fB\-mg  \-mgnu  \-munix\fR
962 .Sp
963 \&\fIVxWorks Options\fR
964 \&\fB\-mrtp  \-non\-static  \-Bstatic  \-Bdynamic 
965 \&\-Xbind\-lazy  \-Xbind\-now\fR
966 .Sp
967 \&\fIx86\-64 Options\fR
968 See i386 and x86\-64 Options.
969 .Sp
970 \&\fIXstormy16 Options\fR
971 \&\fB\-msim\fR
972 .Sp
973 \&\fIXtensa Options\fR
974 \&\fB\-mconst16 \-mno\-const16 
975 \&\-mfused\-madd  \-mno\-fused\-madd 
976 \&\-mforce\-no\-pic 
977 \&\-mserialize\-volatile  \-mno\-serialize\-volatile 
978 \&\-mtext\-section\-literals  \-mno\-text\-section\-literals 
979 \&\-mtarget\-align  \-mno\-target\-align 
980 \&\-mlongcalls  \-mno\-longcalls\fR
981 .Sp
982 \&\fIzSeries Options\fR
983 See S/390 and zSeries Options.
984 .IP "\fICode Generation Options\fR" 4
985 .IX Item "Code Generation Options"
986 \&\fB\-fcall\-saved\-\fR\fIreg\fR  \fB\-fcall\-used\-\fR\fIreg\fR 
987 \&\fB\-ffixed\-\fR\fIreg\fR  \fB\-fexceptions 
988 \&\-fnon\-call\-exceptions  \-funwind\-tables 
989 \&\-fasynchronous\-unwind\-tables 
990 \&\-finhibit\-size\-directive  \-finstrument\-functions 
991 \&\-finstrument\-functions\-exclude\-function\-list=\fR\fIsym\fR\fB,\fR\fIsym\fR\fB,... 
992 \&\-finstrument\-functions\-exclude\-file\-list=\fR\fIfile\fR\fB,\fR\fIfile\fR\fB,... 
993 \&\-fno\-common  \-fno\-ident 
994 \&\-fpcc\-struct\-return  \-fpic  \-fPIC \-fpie \-fPIE 
995 \&\-fno\-jump\-tables 
996 \&\-frecord\-gcc\-switches 
997 \&\-freg\-struct\-return  \-fshort\-enums 
998 \&\-fshort\-double  \-fshort\-wchar 
999 \&\-fverbose\-asm  \-fpack\-struct[=\fR\fIn\fR\fB]  \-fstack\-check 
1000 \&\-fstack\-limit\-register=\fR\fIreg\fR  \fB\-fstack\-limit\-symbol=\fR\fIsym\fR 
1001 \&\fB\-fno\-stack\-limit \-fsplit\-stack 
1002 \&\-fleading\-underscore  \-ftls\-model=\fR\fImodel\fR 
1003 \&\fB\-ftrapv  \-fwrapv  \-fbounds\-check 
1004 \&\-fvisibility \-fstrict\-volatile\-bitfields\fR
1005 .Sh "Options Controlling the Kind of Output"
1006 .IX Subsection "Options Controlling the Kind of Output"
1007 Compilation can involve up to four stages: preprocessing, compilation
1008 proper, assembly and linking, always in that order.  \s-1GCC\s0 is capable of
1009 preprocessing and compiling several files either into several
1010 assembler input files, or into one assembler input file; then each
1011 assembler input file produces an object file, and linking combines all
1012 the object files (those newly compiled, and those specified as input)
1013 into an executable file.
1014 .PP
1015 For any given input file, the file name suffix determines what kind of
1016 compilation is done:
1017 .IP "\fIfile\fR\fB.c\fR" 4
1018 .IX Item "file.c"
1019 C source code that must be preprocessed.
1020 .IP "\fIfile\fR\fB.i\fR" 4
1021 .IX Item "file.i"
1022 C source code that should not be preprocessed.
1023 .IP "\fIfile\fR\fB.ii\fR" 4
1024 .IX Item "file.ii"
1025 \&\*(C+ source code that should not be preprocessed.
1026 .IP "\fIfile\fR\fB.m\fR" 4
1027 .IX Item "file.m"
1028 Objective-C source code.  Note that you must link with the \fIlibobjc\fR
1029 library to make an Objective-C program work.
1030 .IP "\fIfile\fR\fB.mi\fR" 4
1031 .IX Item "file.mi"
1032 Objective-C source code that should not be preprocessed.
1033 .IP "\fIfile\fR\fB.mm\fR" 4
1034 .IX Item "file.mm"
1035 .PD 0
1036 .IP "\fIfile\fR\fB.M\fR" 4
1037 .IX Item "file.M"
1038 .PD
1039 Objective\-\*(C+ source code.  Note that you must link with the \fIlibobjc\fR
1040 library to make an Objective\-\*(C+ program work.  Note that \fB.M\fR refers
1041 to a literal capital M.
1042 .IP "\fIfile\fR\fB.mii\fR" 4
1043 .IX Item "file.mii"
1044 Objective\-\*(C+ source code that should not be preprocessed.
1045 .IP "\fIfile\fR\fB.h\fR" 4
1046 .IX Item "file.h"
1047 C, \*(C+, Objective-C or Objective\-\*(C+ header file to be turned into a
1048 precompiled header (default), or C, \*(C+ header file to be turned into an
1049 Ada spec (via the \fB\-fdump\-ada\-spec\fR switch).
1050 .IP "\fIfile\fR\fB.cc\fR" 4
1051 .IX Item "file.cc"
1052 .PD 0
1053 .IP "\fIfile\fR\fB.cp\fR" 4
1054 .IX Item "file.cp"
1055 .IP "\fIfile\fR\fB.cxx\fR" 4
1056 .IX Item "file.cxx"
1057 .IP "\fIfile\fR\fB.cpp\fR" 4
1058 .IX Item "file.cpp"
1059 .IP "\fIfile\fR\fB.CPP\fR" 4
1060 .IX Item "file.CPP"
1061 .IP "\fIfile\fR\fB.c++\fR" 4
1062 .IX Item "file.c++"
1063 .IP "\fIfile\fR\fB.C\fR" 4
1064 .IX Item "file.C"
1065 .PD
1066 \&\*(C+ source code that must be preprocessed.  Note that in \fB.cxx\fR,
1067 the last two letters must both be literally \fBx\fR.  Likewise,
1068 \&\fB.C\fR refers to a literal capital C.
1069 .IP "\fIfile\fR\fB.mm\fR" 4
1070 .IX Item "file.mm"
1071 .PD 0
1072 .IP "\fIfile\fR\fB.M\fR" 4
1073 .IX Item "file.M"
1074 .PD
1075 Objective\-\*(C+ source code that must be preprocessed.
1076 .IP "\fIfile\fR\fB.mii\fR" 4
1077 .IX Item "file.mii"
1078 Objective\-\*(C+ source code that should not be preprocessed.
1079 .IP "\fIfile\fR\fB.hh\fR" 4
1080 .IX Item "file.hh"
1081 .PD 0
1082 .IP "\fIfile\fR\fB.H\fR" 4
1083 .IX Item "file.H"
1084 .IP "\fIfile\fR\fB.hp\fR" 4
1085 .IX Item "file.hp"
1086 .IP "\fIfile\fR\fB.hxx\fR" 4
1087 .IX Item "file.hxx"
1088 .IP "\fIfile\fR\fB.hpp\fR" 4
1089 .IX Item "file.hpp"
1090 .IP "\fIfile\fR\fB.HPP\fR" 4
1091 .IX Item "file.HPP"
1092 .IP "\fIfile\fR\fB.h++\fR" 4
1093 .IX Item "file.h++"
1094 .IP "\fIfile\fR\fB.tcc\fR" 4
1095 .IX Item "file.tcc"
1096 .PD
1097 \&\*(C+ header file to be turned into a precompiled header or Ada spec.
1098 .IP "\fIfile\fR\fB.f\fR" 4
1099 .IX Item "file.f"
1100 .PD 0
1101 .IP "\fIfile\fR\fB.for\fR" 4
1102 .IX Item "file.for"
1103 .IP "\fIfile\fR\fB.ftn\fR" 4
1104 .IX Item "file.ftn"
1105 .PD
1106 Fixed form Fortran source code that should not be preprocessed.
1107 .IP "\fIfile\fR\fB.F\fR" 4
1108 .IX Item "file.F"
1109 .PD 0
1110 .IP "\fIfile\fR\fB.FOR\fR" 4
1111 .IX Item "file.FOR"
1112 .IP "\fIfile\fR\fB.fpp\fR" 4
1113 .IX Item "file.fpp"
1114 .IP "\fIfile\fR\fB.FPP\fR" 4
1115 .IX Item "file.FPP"
1116 .IP "\fIfile\fR\fB.FTN\fR" 4
1117 .IX Item "file.FTN"
1118 .PD
1119 Fixed form Fortran source code that must be preprocessed (with the traditional
1120 preprocessor).
1121 .IP "\fIfile\fR\fB.f90\fR" 4
1122 .IX Item "file.f90"
1123 .PD 0
1124 .IP "\fIfile\fR\fB.f95\fR" 4
1125 .IX Item "file.f95"
1126 .IP "\fIfile\fR\fB.f03\fR" 4
1127 .IX Item "file.f03"
1128 .IP "\fIfile\fR\fB.f08\fR" 4
1129 .IX Item "file.f08"
1130 .PD
1131 Free form Fortran source code that should not be preprocessed.
1132 .IP "\fIfile\fR\fB.F90\fR" 4
1133 .IX Item "file.F90"
1134 .PD 0
1135 .IP "\fIfile\fR\fB.F95\fR" 4
1136 .IX Item "file.F95"
1137 .IP "\fIfile\fR\fB.F03\fR" 4
1138 .IX Item "file.F03"
1139 .IP "\fIfile\fR\fB.F08\fR" 4
1140 .IX Item "file.F08"
1141 .PD
1142 Free form Fortran source code that must be preprocessed (with the
1143 traditional preprocessor).
1144 .IP "\fIfile\fR\fB.go\fR" 4
1145 .IX Item "file.go"
1146 Go source code.
1147 .IP "\fIfile\fR\fB.ads\fR" 4
1148 .IX Item "file.ads"
1149 Ada source code file that contains a library unit declaration (a
1150 declaration of a package, subprogram, or generic, or a generic
1151 instantiation), or a library unit renaming declaration (a package,
1152 generic, or subprogram renaming declaration).  Such files are also
1153 called \fIspecs\fR.
1154 .IP "\fIfile\fR\fB.adb\fR" 4
1155 .IX Item "file.adb"
1156 Ada source code file containing a library unit body (a subprogram or
1157 package body).  Such files are also called \fIbodies\fR.
1158 .IP "\fIfile\fR\fB.s\fR" 4
1159 .IX Item "file.s"
1160 Assembler code.
1161 .IP "\fIfile\fR\fB.S\fR" 4
1162 .IX Item "file.S"
1163 .PD 0
1164 .IP "\fIfile\fR\fB.sx\fR" 4
1165 .IX Item "file.sx"
1166 .PD
1167 Assembler code that must be preprocessed.
1168 .IP "\fIother\fR" 4
1169 .IX Item "other"
1170 An object file to be fed straight into linking.
1171 Any file name with no recognized suffix is treated this way.
1172 .PP
1173 You can specify the input language explicitly with the \fB\-x\fR option:
1174 .IP "\fB\-x\fR \fIlanguage\fR" 4
1175 .IX Item "-x language"
1176 Specify explicitly the \fIlanguage\fR for the following input files
1177 (rather than letting the compiler choose a default based on the file
1178 name suffix).  This option applies to all following input files until
1179 the next \fB\-x\fR option.  Possible values for \fIlanguage\fR are:
1180 .Sp
1181 .Vb 9
1182 \&        c  c\-header  cpp\-output
1183 \&        c++  c++\-header  c++\-cpp\-output
1184 \&        objective\-c  objective\-c\-header  objective\-c\-cpp\-output
1185 \&        objective\-c++ objective\-c++\-header objective\-c++\-cpp\-output
1186 \&        assembler  assembler\-with\-cpp
1187 \&        ada
1188 \&        f77  f77\-cpp\-input f95  f95\-cpp\-input
1189 \&        go
1190 \&        java
1191 .Ve
1192 .IP "\fB\-x none\fR" 4
1193 .IX Item "-x none"
1194 Turn off any specification of a language, so that subsequent files are
1195 handled according to their file name suffixes (as they are if \fB\-x\fR
1196 has not been used at all).
1197 .IP "\fB\-pass\-exit\-codes\fR" 4
1198 .IX Item "-pass-exit-codes"
1199 Normally the \fBgcc\fR program will exit with the code of 1 if any
1200 phase of the compiler returns a non-success return code.  If you specify
1201 \&\fB\-pass\-exit\-codes\fR, the \fBgcc\fR program will instead return with
1202 numerically highest error produced by any phase that returned an error
1203 indication.  The C, \*(C+, and Fortran frontends return 4, if an internal
1204 compiler error is encountered.
1205 .PP
1206 If you only want some of the stages of compilation, you can use
1207 \&\fB\-x\fR (or filename suffixes) to tell \fBgcc\fR where to start, and
1208 one of the options \fB\-c\fR, \fB\-S\fR, or \fB\-E\fR to say where
1209 \&\fBgcc\fR is to stop.  Note that some combinations (for example,
1210 \&\fB\-x cpp-output \-E\fR) instruct \fBgcc\fR to do nothing at all.
1211 .IP "\fB\-c\fR" 4
1212 .IX Item "-c"
1213 Compile or assemble the source files, but do not link.  The linking
1214 stage simply is not done.  The ultimate output is in the form of an
1215 object file for each source file.
1216 .Sp
1217 By default, the object file name for a source file is made by replacing
1218 the suffix \fB.c\fR, \fB.i\fR, \fB.s\fR, etc., with \fB.o\fR.
1219 .Sp
1220 Unrecognized input files, not requiring compilation or assembly, are
1221 ignored.
1222 .IP "\fB\-S\fR" 4
1223 .IX Item "-S"
1224 Stop after the stage of compilation proper; do not assemble.  The output
1225 is in the form of an assembler code file for each non-assembler input
1226 file specified.
1227 .Sp
1228 By default, the assembler file name for a source file is made by
1229 replacing the suffix \fB.c\fR, \fB.i\fR, etc., with \fB.s\fR.
1230 .Sp
1231 Input files that don't require compilation are ignored.
1232 .IP "\fB\-E\fR" 4
1233 .IX Item "-E"
1234 Stop after the preprocessing stage; do not run the compiler proper.  The
1235 output is in the form of preprocessed source code, which is sent to the
1236 standard output.
1237 .Sp
1238 Input files that don't require preprocessing are ignored.
1239 .IP "\fB\-o\fR \fIfile\fR" 4
1240 .IX Item "-o file"
1241 Place output in file \fIfile\fR.  This applies regardless to whatever
1242 sort of output is being produced, whether it be an executable file,
1243 an object file, an assembler file or preprocessed C code.
1244 .Sp
1245 If \fB\-o\fR is not specified, the default is to put an executable
1246 file in \fIa.out\fR, the object file for
1247 \&\fI\fIsource\fI.\fIsuffix\fI\fR in \fI\fIsource\fI.o\fR, its
1248 assembler file in \fI\fIsource\fI.s\fR, a precompiled header file in
1249 \&\fI\fIsource\fI.\fIsuffix\fI.gch\fR, and all preprocessed C source on
1250 standard output.
1251 .IP "\fB\-v\fR" 4
1252 .IX Item "-v"
1253 Print (on standard error output) the commands executed to run the stages
1254 of compilation.  Also print the version number of the compiler driver
1255 program and of the preprocessor and the compiler proper.
1256 .IP "\fB\-###\fR" 4
1257 .IX Item "-###"
1258 Like \fB\-v\fR except the commands are not executed and arguments
1259 are quoted unless they contain only alphanumeric characters or \f(CW\*(C`./\-_\*(C'\fR.
1260 This is useful for shell scripts to capture the driver-generated command lines.
1261 .IP "\fB\-pipe\fR" 4
1262 .IX Item "-pipe"
1263 Use pipes rather than temporary files for communication between the
1264 various stages of compilation.  This fails to work on some systems where
1265 the assembler is unable to read from a pipe; but the \s-1GNU\s0 assembler has
1266 no trouble.
1267 .IP "\fB\-\-help\fR" 4
1268 .IX Item "--help"
1269 Print (on the standard output) a description of the command-line options
1270 understood by \fBgcc\fR.  If the \fB\-v\fR option is also specified
1271 then \fB\-\-help\fR will also be passed on to the various processes
1272 invoked by \fBgcc\fR, so that they can display the command-line options
1273 they accept.  If the \fB\-Wextra\fR option has also been specified
1274 (prior to the \fB\-\-help\fR option), then command-line options that
1275 have no documentation associated with them will also be displayed.
1276 .IP "\fB\-\-target\-help\fR" 4
1277 .IX Item "--target-help"
1278 Print (on the standard output) a description of target-specific command-line
1279 options for each tool.  For some targets extra target-specific
1280 information may also be printed.
1281 .IP "\fB\-\-help={\fR\fIclass\fR|[\fB^\fR]\fIqualifier\fR\fB}\fR[\fB,...\fR]" 4
1282 .IX Item "--help={class|[^]qualifier}[,...]"
1283 Print (on the standard output) a description of the command-line
1284 options understood by the compiler that fit into all specified classes
1285 and qualifiers.  These are the supported classes:
1286 .RS 4
1287 .IP "\fBoptimizers\fR" 4
1288 .IX Item "optimizers"
1289 This will display all of the optimization options supported by the
1290 compiler.
1291 .IP "\fBwarnings\fR" 4
1292 .IX Item "warnings"
1293 This will display all of the options controlling warning messages
1294 produced by the compiler.
1295 .IP "\fBtarget\fR" 4
1296 .IX Item "target"
1297 This will display target-specific options.  Unlike the
1298 \&\fB\-\-target\-help\fR option however, target-specific options of the
1299 linker and assembler will not be displayed.  This is because those
1300 tools do not currently support the extended \fB\-\-help=\fR syntax.
1301 .IP "\fBparams\fR" 4
1302 .IX Item "params"
1303 This will display the values recognized by the \fB\-\-param\fR
1304 option.
1305 .IP "\fIlanguage\fR" 4
1306 .IX Item "language"
1307 This will display the options supported for \fIlanguage\fR, where
1308 \&\fIlanguage\fR is the name of one of the languages supported in this
1309 version of \s-1GCC\s0.
1310 .IP "\fBcommon\fR" 4
1311 .IX Item "common"
1312 This will display the options that are common to all languages.
1313 .RE
1314 .RS 4
1315 .Sp
1316 These are the supported qualifiers:
1317 .IP "\fBundocumented\fR" 4
1318 .IX Item "undocumented"
1319 Display only those options that are undocumented.
1320 .IP "\fBjoined\fR" 4
1321 .IX Item "joined"
1322 Display options taking an argument that appears after an equal
1323 sign in the same continuous piece of text, such as:
1324 \&\fB\-\-help=target\fR.
1325 .IP "\fBseparate\fR" 4
1326 .IX Item "separate"
1327 Display options taking an argument that appears as a separate word
1328 following the original option, such as: \fB\-o output-file\fR.
1329 .RE
1330 .RS 4
1331 .Sp
1332 Thus for example to display all the undocumented target-specific
1333 switches supported by the compiler the following can be used:
1334 .Sp
1335 .Vb 1
1336 \&        \-\-help=target,undocumented
1337 .Ve
1338 .Sp
1339 The sense of a qualifier can be inverted by prefixing it with the
1340 \&\fB^\fR character, so for example to display all binary warning
1341 options (i.e., ones that are either on or off and that do not take an
1342 argument) that have a description, use:
1343 .Sp
1344 .Vb 1
1345 \&        \-\-help=warnings,^joined,^undocumented
1346 .Ve
1347 .Sp
1348 The argument to \fB\-\-help=\fR should not consist solely of inverted
1349 qualifiers.
1350 .Sp
1351 Combining several classes is possible, although this usually
1352 restricts the output by so much that there is nothing to display.  One
1353 case where it does work however is when one of the classes is
1354 \&\fItarget\fR.  So for example to display all the target-specific
1355 optimization options the following can be used:
1356 .Sp
1357 .Vb 1
1358 \&        \-\-help=target,optimizers
1359 .Ve
1360 .Sp
1361 The \fB\-\-help=\fR option can be repeated on the command line.  Each
1362 successive use will display its requested class of options, skipping
1363 those that have already been displayed.
1364 .Sp
1365 If the \fB\-Q\fR option appears on the command line before the
1366 \&\fB\-\-help=\fR option, then the descriptive text displayed by
1367 \&\fB\-\-help=\fR is changed.  Instead of describing the displayed
1368 options, an indication is given as to whether the option is enabled,
1369 disabled or set to a specific value (assuming that the compiler
1370 knows this at the point where the \fB\-\-help=\fR option is used).
1371 .Sp
1372 Here is a truncated example from the \s-1ARM\s0 port of \fBgcc\fR:
1373 .Sp
1374 .Vb 5
1375 \&          % gcc \-Q \-mabi=2 \-\-help=target \-c
1376 \&          The following options are target specific:
1377 \&          \-mabi=                                2
1378 \&          \-mabort\-on\-noreturn                   [disabled]
1379 \&          \-mapcs                                [disabled]
1380 .Ve
1381 .Sp
1382 The output is sensitive to the effects of previous command-line
1383 options, so for example it is possible to find out which optimizations
1384 are enabled at \fB\-O2\fR by using:
1385 .Sp
1386 .Vb 1
1387 \&        \-Q \-O2 \-\-help=optimizers
1388 .Ve
1389 .Sp
1390 Alternatively you can discover which binary optimizations are enabled
1391 by \fB\-O3\fR by using:
1392 .Sp
1393 .Vb 3
1394 \&        gcc \-c \-Q \-O3 \-\-help=optimizers > /tmp/O3\-opts
1395 \&        gcc \-c \-Q \-O2 \-\-help=optimizers > /tmp/O2\-opts
1396 \&        diff /tmp/O2\-opts /tmp/O3\-opts | grep enabled
1397 .Ve
1398 .RE
1399 .IP "\fB\-no\-canonical\-prefixes\fR" 4
1400 .IX Item "-no-canonical-prefixes"
1401 Do not expand any symbolic links, resolve references to \fB/../\fR
1402 or \fB/./\fR, or make the path absolute when generating a relative
1403 prefix.
1404 .IP "\fB\-\-version\fR" 4
1405 .IX Item "--version"
1406 Display the version number and copyrights of the invoked \s-1GCC\s0.
1407 .IP "\fB\-wrapper\fR" 4
1408 .IX Item "-wrapper"
1409 Invoke all subcommands under a wrapper program.  The name of the
1410 wrapper program and its parameters are passed as a comma separated
1411 list.
1412 .Sp
1413 .Vb 1
1414 \&        gcc \-c t.c \-wrapper gdb,\-\-args
1415 .Ve
1416 .Sp
1417 This will invoke all subprograms of \fBgcc\fR under
1418 \&\fBgdb \-\-args\fR, thus the invocation of \fBcc1\fR will be
1419 \&\fBgdb \-\-args cc1 ...\fR.
1420 .IP "\fB\-fplugin=\fR\fIname\fR\fB.so\fR" 4
1421 .IX Item "-fplugin=name.so"
1422 Load the plugin code in file \fIname\fR.so, assumed to be a
1423 shared object to be dlopen'd by the compiler.  The base name of
1424 the shared object file is used to identify the plugin for the
1425 purposes of argument parsing (See
1426 \&\fB\-fplugin\-arg\-\fR\fIname\fR\fB\-\fR\fIkey\fR\fB=\fR\fIvalue\fR below).
1427 Each plugin should define the callback functions specified in the
1428 Plugins \s-1API\s0.
1429 .IP "\fB\-fplugin\-arg\-\fR\fIname\fR\fB\-\fR\fIkey\fR\fB=\fR\fIvalue\fR" 4
1430 .IX Item "-fplugin-arg-name-key=value"
1431 Define an argument called \fIkey\fR with a value of \fIvalue\fR
1432 for the plugin called \fIname\fR.
1433 .IP "\fB\-fdump\-ada\-spec\fR[\fB\-slim\fR]" 4
1434 .IX Item "-fdump-ada-spec[-slim]"
1435 For C and \*(C+ source and include files, generate corresponding Ada
1436 specs.
1437 .IP "\fB\-fdump\-go\-spec=\fR\fIfile\fR" 4
1438 .IX Item "-fdump-go-spec=file"
1439 For input files in any language, generate corresponding Go
1440 declarations in \fIfile\fR.  This generates Go \f(CW\*(C`const\*(C'\fR,
1441 \&\f(CW\*(C`type\*(C'\fR, \f(CW\*(C`var\*(C'\fR, and \f(CW\*(C`func\*(C'\fR declarations which may be a
1442 useful way to start writing a Go interface to code written in some
1443 other language.
1444 .IP "\fB@\fR\fIfile\fR" 4
1445 .IX Item "@file"
1446 Read command-line options from \fIfile\fR.  The options read are
1447 inserted in place of the original @\fIfile\fR option.  If \fIfile\fR
1448 does not exist, or cannot be read, then the option will be treated
1449 literally, and not removed.
1450 .Sp
1451 Options in \fIfile\fR are separated by whitespace.  A whitespace
1452 character may be included in an option by surrounding the entire
1453 option in either single or double quotes.  Any character (including a
1454 backslash) may be included by prefixing the character to be included
1455 with a backslash.  The \fIfile\fR may itself contain additional
1456 @\fIfile\fR options; any such options will be processed recursively.
1457 .Sh "Compiling \*(C+ Programs"
1458 .IX Subsection "Compiling  Programs"
1459 \&\*(C+ source files conventionally use one of the suffixes \fB.C\fR,
1460 \&\fB.cc\fR, \fB.cpp\fR, \fB.CPP\fR, \fB.c++\fR, \fB.cp\fR, or
1461 \&\fB.cxx\fR; \*(C+ header files often use \fB.hh\fR, \fB.hpp\fR,
1462 \&\fB.H\fR, or (for shared template code) \fB.tcc\fR; and
1463 preprocessed \*(C+ files use the suffix \fB.ii\fR.  \s-1GCC\s0 recognizes
1464 files with these names and compiles them as \*(C+ programs even if you
1465 call the compiler the same way as for compiling C programs (usually
1466 with the name \fBgcc\fR).
1467 .PP
1468 However, the use of \fBgcc\fR does not add the \*(C+ library.
1469 \&\fBg++\fR is a program that calls \s-1GCC\s0 and treats \fB.c\fR,
1470 \&\fB.h\fR and \fB.i\fR files as \*(C+ source files instead of C source
1471 files unless \fB\-x\fR is used, and automatically specifies linking
1472 against the \*(C+ library.  This program is also useful when
1473 precompiling a C header file with a \fB.h\fR extension for use in \*(C+
1474 compilations.  On many systems, \fBg++\fR is also installed with
1475 the name \fBc++\fR.
1476 .PP
1477 When you compile \*(C+ programs, you may specify many of the same
1478 command-line options that you use for compiling programs in any
1479 language; or command-line options meaningful for C and related
1480 languages; or options that are meaningful only for \*(C+ programs.
1481 .Sh "Options Controlling C Dialect"
1482 .IX Subsection "Options Controlling C Dialect"
1483 The following options control the dialect of C (or languages derived
1484 from C, such as \*(C+, Objective-C and Objective\-\*(C+) that the compiler
1485 accepts:
1486 .IP "\fB\-ansi\fR" 4
1487 .IX Item "-ansi"
1488 In C mode, this is equivalent to \fB\-std=c90\fR. In \*(C+ mode, it is
1489 equivalent to \fB\-std=c++98\fR.
1490 .Sp
1491 This turns off certain features of \s-1GCC\s0 that are incompatible with \s-1ISO\s0
1492 C90 (when compiling C code), or of standard \*(C+ (when compiling \*(C+ code),
1493 such as the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR keywords, and
1494 predefined macros such as \f(CW\*(C`unix\*(C'\fR and \f(CW\*(C`vax\*(C'\fR that identify the
1495 type of system you are using.  It also enables the undesirable and
1496 rarely used \s-1ISO\s0 trigraph feature.  For the C compiler,
1497 it disables recognition of \*(C+ style \fB//\fR comments as well as
1498 the \f(CW\*(C`inline\*(C'\fR keyword.
1499 .Sp
1500 The alternate keywords \f(CW\*(C`_\|_asm_\|_\*(C'\fR, \f(CW\*(C`_\|_extension_\|_\*(C'\fR,
1501 \&\f(CW\*(C`_\|_inline_\|_\*(C'\fR and \f(CW\*(C`_\|_typeof_\|_\*(C'\fR continue to work despite
1502 \&\fB\-ansi\fR.  You would not want to use them in an \s-1ISO\s0 C program, of
1503 course, but it is useful to put them in header files that might be included
1504 in compilations done with \fB\-ansi\fR.  Alternate predefined macros
1505 such as \f(CW\*(C`_\|_unix_\|_\*(C'\fR and \f(CW\*(C`_\|_vax_\|_\*(C'\fR are also available, with or
1506 without \fB\-ansi\fR.
1507 .Sp
1508 The \fB\-ansi\fR option does not cause non-ISO programs to be
1509 rejected gratuitously.  For that, \fB\-pedantic\fR is required in
1510 addition to \fB\-ansi\fR.
1511 .Sp
1512 The macro \f(CW\*(C`_\|_STRICT_ANSI_\|_\*(C'\fR is predefined when the \fB\-ansi\fR
1513 option is used.  Some header files may notice this macro and refrain
1514 from declaring certain functions or defining certain macros that the
1515 \&\s-1ISO\s0 standard doesn't call for; this is to avoid interfering with any
1516 programs that might use these names for other things.
1517 .Sp
1518 Functions that would normally be built in but do not have semantics
1519 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
1520 functions when \fB\-ansi\fR is used.
1521 .IP "\fB\-std=\fR" 4
1522 .IX Item "-std="
1523 Determine the language standard.   This option
1524 is currently only supported when compiling C or \*(C+.
1525 .Sp
1526 The compiler can accept several base standards, such as \fBc90\fR or
1527 \&\fBc++98\fR, and \s-1GNU\s0 dialects of those standards, such as
1528 \&\fBgnu90\fR or \fBgnu++98\fR.  By specifying a base standard, the
1529 compiler will accept all programs following that standard and those
1530 using \s-1GNU\s0 extensions that do not contradict it.  For example,
1531 \&\fB\-std=c90\fR turns off certain features of \s-1GCC\s0 that are
1532 incompatible with \s-1ISO\s0 C90, such as the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR
1533 keywords, but not other \s-1GNU\s0 extensions that do not have a meaning in
1534 \&\s-1ISO\s0 C90, such as omitting the middle term of a \f(CW\*(C`?:\*(C'\fR
1535 expression. On the other hand, by specifying a \s-1GNU\s0 dialect of a
1536 standard, all features the compiler support are enabled, even when
1537 those features change the meaning of the base standard and some
1538 strict-conforming programs may be rejected.  The particular standard
1539 is used by \fB\-pedantic\fR to identify which features are \s-1GNU\s0
1540 extensions given that version of the standard. For example
1541 \&\fB\-std=gnu90 \-pedantic\fR would warn about \*(C+ style \fB//\fR
1542 comments, while \fB\-std=gnu99 \-pedantic\fR would not.
1543 .Sp
1544 A value for this option must be provided; possible values are
1545 .RS 4
1546 .IP "\fBc90\fR" 4
1547 .IX Item "c90"
1548 .PD 0
1549 .IP "\fBc89\fR" 4
1550 .IX Item "c89"
1551 .IP "\fBiso9899:1990\fR" 4
1552 .IX Item "iso9899:1990"
1553 .PD
1554 Support all \s-1ISO\s0 C90 programs (certain \s-1GNU\s0 extensions that conflict
1555 with \s-1ISO\s0 C90 are disabled). Same as \fB\-ansi\fR for C code.
1556 .IP "\fBiso9899:199409\fR" 4
1557 .IX Item "iso9899:199409"
1558 \&\s-1ISO\s0 C90 as modified in amendment 1.
1559 .IP "\fBc99\fR" 4
1560 .IX Item "c99"
1561 .PD 0
1562 .IP "\fBc9x\fR" 4
1563 .IX Item "c9x"
1564 .IP "\fBiso9899:1999\fR" 4
1565 .IX Item "iso9899:1999"
1566 .IP "\fBiso9899:199x\fR" 4
1567 .IX Item "iso9899:199x"
1568 .PD
1569 \&\s-1ISO\s0 C99.  Note that this standard is not yet fully supported; see
1570 <\fBhttp://gcc.gnu.org/gcc\-4.7/c99status.html\fR> for more information.  The
1571 names \fBc9x\fR and \fBiso9899:199x\fR are deprecated.
1572 .IP "\fBc11\fR" 4
1573 .IX Item "c11"
1574 .PD 0
1575 .IP "\fBc1x\fR" 4
1576 .IX Item "c1x"
1577 .IP "\fBiso9899:2011\fR" 4
1578 .IX Item "iso9899:2011"
1579 .PD
1580 \&\s-1ISO\s0 C11, the 2011 revision of the \s-1ISO\s0 C standard.
1581 Support is incomplete and experimental.  The name \fBc1x\fR is
1582 deprecated.
1583 .IP "\fBgnu90\fR" 4
1584 .IX Item "gnu90"
1585 .PD 0
1586 .IP "\fBgnu89\fR" 4
1587 .IX Item "gnu89"
1588 .PD
1589 \&\s-1GNU\s0 dialect of \s-1ISO\s0 C90 (including some C99 features). This
1590 is the default for C code.
1591 .IP "\fBgnu99\fR" 4
1592 .IX Item "gnu99"
1593 .PD 0
1594 .IP "\fBgnu9x\fR" 4
1595 .IX Item "gnu9x"
1596 .PD
1597 \&\s-1GNU\s0 dialect of \s-1ISO\s0 C99.  When \s-1ISO\s0 C99 is fully implemented in \s-1GCC\s0,
1598 this will become the default.  The name \fBgnu9x\fR is deprecated.
1599 .IP "\fBgnu11\fR" 4
1600 .IX Item "gnu11"
1601 .PD 0
1602 .IP "\fBgnu1x\fR" 4
1603 .IX Item "gnu1x"
1604 .PD
1605 \&\s-1GNU\s0 dialect of \s-1ISO\s0 C11.  Support is incomplete and experimental.  The
1606 name \fBgnu1x\fR is deprecated.
1607 .IP "\fBc++98\fR" 4
1608 .IX Item "c++98"
1609 The 1998 \s-1ISO\s0 \*(C+ standard plus amendments. Same as \fB\-ansi\fR for
1610 \&\*(C+ code.
1611 .IP "\fBgnu++98\fR" 4
1612 .IX Item "gnu++98"
1613 \&\s-1GNU\s0 dialect of \fB\-std=c++98\fR.  This is the default for
1614 \&\*(C+ code.
1615 .IP "\fBc++11\fR" 4
1616 .IX Item "c++11"
1617 The 2011 \s-1ISO\s0 \*(C+ standard plus amendments.  Support for \*(C+11 is still
1618 experimental, and may change in incompatible ways in future releases.
1619 .IP "\fBgnu++11\fR" 4
1620 .IX Item "gnu++11"
1621 \&\s-1GNU\s0 dialect of \fB\-std=c++11\fR. Support for \*(C+11 is still
1622 experimental, and may change in incompatible ways in future releases.
1623 .RE
1624 .RS 4
1625 .RE
1626 .IP "\fB\-fgnu89\-inline\fR" 4
1627 .IX Item "-fgnu89-inline"
1628 The option \fB\-fgnu89\-inline\fR tells \s-1GCC\s0 to use the traditional
1629 \&\s-1GNU\s0 semantics for \f(CW\*(C`inline\*(C'\fR functions when in C99 mode.
1630   This option
1631 is accepted and ignored by \s-1GCC\s0 versions 4.1.3 up to but not including
1632 4.3.  In \s-1GCC\s0 versions 4.3 and later it changes the behavior of \s-1GCC\s0 in
1633 C99 mode.  Using this option is roughly equivalent to adding the
1634 \&\f(CW\*(C`gnu_inline\*(C'\fR function attribute to all inline functions.
1635 .Sp
1636 The option \fB\-fno\-gnu89\-inline\fR explicitly tells \s-1GCC\s0 to use the
1637 C99 semantics for \f(CW\*(C`inline\*(C'\fR when in C99 or gnu99 mode (i.e., it
1638 specifies the default behavior).  This option was first supported in
1639 \&\s-1GCC\s0 4.3.  This option is not supported in \fB\-std=c90\fR or
1640 \&\fB\-std=gnu90\fR mode.
1641 .Sp
1642 The preprocessor macros \f(CW\*(C`_\|_GNUC_GNU_INLINE_\|_\*(C'\fR and
1643 \&\f(CW\*(C`_\|_GNUC_STDC_INLINE_\|_\*(C'\fR may be used to check which semantics are
1644 in effect for \f(CW\*(C`inline\*(C'\fR functions.
1645 .IP "\fB\-aux\-info\fR \fIfilename\fR" 4
1646 .IX Item "-aux-info filename"
1647 Output to the given filename prototyped declarations for all functions
1648 declared and/or defined in a translation unit, including those in header
1649 files.  This option is silently ignored in any language other than C.
1650 .Sp
1651 Besides declarations, the file indicates, in comments, the origin of
1652 each declaration (source file and line), whether the declaration was
1653 implicit, prototyped or unprototyped (\fBI\fR, \fBN\fR for new or
1654 \&\fBO\fR for old, respectively, in the first character after the line
1655 number and the colon), and whether it came from a declaration or a
1656 definition (\fBC\fR or \fBF\fR, respectively, in the following
1657 character).  In the case of function definitions, a K&R\-style list of
1658 arguments followed by their declarations is also provided, inside
1659 comments, after the declaration.
1660 .IP "\fB\-fallow\-parameterless\-variadic\-functions\fR" 4
1661 .IX Item "-fallow-parameterless-variadic-functions"
1662 Accept variadic functions without named parameters.
1663 .Sp
1664 Although it is possible to define such a function, this is not very
1665 useful as it is not possible to read the arguments.  This is only
1666 supported for C as this construct is allowed by \*(C+.
1667 .IP "\fB\-fno\-asm\fR" 4
1668 .IX Item "-fno-asm"
1669 Do not recognize \f(CW\*(C`asm\*(C'\fR, \f(CW\*(C`inline\*(C'\fR or \f(CW\*(C`typeof\*(C'\fR as a
1670 keyword, so that code can use these words as identifiers.  You can use
1671 the keywords \f(CW\*(C`_\|_asm_\|_\*(C'\fR, \f(CW\*(C`_\|_inline_\|_\*(C'\fR and \f(CW\*(C`_\|_typeof_\|_\*(C'\fR
1672 instead.  \fB\-ansi\fR implies \fB\-fno\-asm\fR.
1673 .Sp
1674 In \*(C+, this switch only affects the \f(CW\*(C`typeof\*(C'\fR keyword, since
1675 \&\f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`inline\*(C'\fR are standard keywords.  You may want to
1676 use the \fB\-fno\-gnu\-keywords\fR flag instead, which has the same
1677 effect.  In C99 mode (\fB\-std=c99\fR or \fB\-std=gnu99\fR), this
1678 switch only affects the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR keywords, since
1679 \&\f(CW\*(C`inline\*(C'\fR is a standard keyword in \s-1ISO\s0 C99.
1680 .IP "\fB\-fno\-builtin\fR" 4
1681 .IX Item "-fno-builtin"
1682 .PD 0
1683 .IP "\fB\-fno\-builtin\-\fR\fIfunction\fR" 4
1684 .IX Item "-fno-builtin-function"
1685 .PD
1686 Don't recognize built-in functions that do not begin with
1687 \&\fB_\|_builtin_\fR as prefix.
1688 .Sp
1689 \&\s-1GCC\s0 normally generates special code to handle certain built-in functions
1690 more efficiently; for instance, calls to \f(CW\*(C`alloca\*(C'\fR may become single
1691 instructions which adjust the stack directly, and calls to \f(CW\*(C`memcpy\*(C'\fR
1692 may become inline copy loops.  The resulting code is often both smaller
1693 and faster, but since the function calls no longer appear as such, you
1694 cannot set a breakpoint on those calls, nor can you change the behavior
1695 of the functions by linking with a different library.  In addition,
1696 when a function is recognized as a built-in function, \s-1GCC\s0 may use
1697 information about that function to warn about problems with calls to
1698 that function, or to generate more efficient code, even if the
1699 resulting code still contains calls to that function.  For example,
1700 warnings are given with \fB\-Wformat\fR for bad calls to
1701 \&\f(CW\*(C`printf\*(C'\fR, when \f(CW\*(C`printf\*(C'\fR is built in, and \f(CW\*(C`strlen\*(C'\fR is
1702 known not to modify global memory.
1703 .Sp
1704 With the \fB\-fno\-builtin\-\fR\fIfunction\fR option
1705 only the built-in function \fIfunction\fR is
1706 disabled.  \fIfunction\fR must not begin with \fB_\|_builtin_\fR.  If a
1707 function is named that is not built-in in this version of \s-1GCC\s0, this
1708 option is ignored.  There is no corresponding
1709 \&\fB\-fbuiltin\-\fR\fIfunction\fR option; if you wish to enable
1710 built-in functions selectively when using \fB\-fno\-builtin\fR or
1711 \&\fB\-ffreestanding\fR, you may define macros such as:
1712 .Sp
1713 .Vb 2
1714 \&        #define abs(n)          _\|_builtin_abs ((n))
1715 \&        #define strcpy(d, s)    _\|_builtin_strcpy ((d), (s))
1716 .Ve
1717 .IP "\fB\-fhosted\fR" 4
1718 .IX Item "-fhosted"
1719 Assert that compilation takes place in a hosted environment.  This implies
1720 \&\fB\-fbuiltin\fR.  A hosted environment is one in which the
1721 entire standard library is available, and in which \f(CW\*(C`main\*(C'\fR has a return
1722 type of \f(CW\*(C`int\*(C'\fR.  Examples are nearly everything except a kernel.
1723 This is equivalent to \fB\-fno\-freestanding\fR.
1724 .IP "\fB\-ffreestanding\fR" 4
1725 .IX Item "-ffreestanding"
1726 Assert that compilation takes place in a freestanding environment.  This
1727 implies \fB\-fno\-builtin\fR.  A freestanding environment
1728 is one in which the standard library may not exist, and program startup may
1729 not necessarily be at \f(CW\*(C`main\*(C'\fR.  The most obvious example is an \s-1OS\s0 kernel.
1730 This is equivalent to \fB\-fno\-hosted\fR.
1731 .IP "\fB\-fopenmp\fR" 4
1732 .IX Item "-fopenmp"
1733 Enable handling of OpenMP directives \f(CW\*(C`#pragma omp\*(C'\fR in C/\*(C+ and
1734 \&\f(CW\*(C`!$omp\*(C'\fR in Fortran.  When \fB\-fopenmp\fR is specified, the
1735 compiler generates parallel code according to the OpenMP Application
1736 Program Interface v3.0 <\fBhttp://www.openmp.org/\fR>.  This option
1737 implies \fB\-pthread\fR, and thus is only supported on targets that
1738 have support for \fB\-pthread\fR.
1739 .IP "\fB\-fgnu\-tm\fR" 4
1740 .IX Item "-fgnu-tm"
1741 When the option \fB\-fgnu\-tm\fR is specified, the compiler will
1742 generate code for the Linux variant of Intel's current Transactional
1743 Memory \s-1ABI\s0 specification document (Revision 1.1, May 6 2009).  This is
1744 an experimental feature whose interface may change in future versions
1745 of \s-1GCC\s0, as the official specification changes.  Please note that not
1746 all architectures are supported for this feature.
1747 .Sp
1748 For more information on \s-1GCC\s0's support for transactional memory,
1749 .Sp
1750 Note that the transactional memory feature is not supported with
1751 non-call exceptions (\fB\-fnon\-call\-exceptions\fR).
1752 .IP "\fB\-fms\-extensions\fR" 4
1753 .IX Item "-fms-extensions"
1754 Accept some non-standard constructs used in Microsoft header files.
1755 .Sp
1756 In \*(C+ code, this allows member names in structures to be similar
1757 to previous types declarations.
1758 .Sp
1759 .Vb 4
1760 \&        typedef int UOW;
1761 \&        struct ABC {
1762 \&          UOW UOW;
1763 \&        };
1764 .Ve
1765 .Sp
1766 Some cases of unnamed fields in structures and unions are only
1767 accepted with this option.
1768 .IP "\fB\-fplan9\-extensions\fR" 4
1769 .IX Item "-fplan9-extensions"
1770 Accept some non-standard constructs used in Plan 9 code.
1771 .Sp
1772 This enables \fB\-fms\-extensions\fR, permits passing pointers to
1773 structures with anonymous fields to functions that expect pointers to
1774 elements of the type of the field, and permits referring to anonymous
1775 fields declared using a typedef.    This is only
1776 supported for C, not \*(C+.
1777 .IP "\fB\-trigraphs\fR" 4
1778 .IX Item "-trigraphs"
1779 Support \s-1ISO\s0 C trigraphs.  The \fB\-ansi\fR option (and \fB\-std\fR
1780 options for strict \s-1ISO\s0 C conformance) implies \fB\-trigraphs\fR.
1781 .IP "\fB\-no\-integrated\-cpp\fR" 4
1782 .IX Item "-no-integrated-cpp"
1783 Performs a compilation in two passes: preprocessing and compiling.  This
1784 option allows a user supplied \*(L"cc1\*(R", \*(L"cc1plus\*(R", or \*(L"cc1obj\*(R" via the
1785 \&\fB\-B\fR option.  The user supplied compilation step can then add in
1786 an additional preprocessing step after normal preprocessing but before
1787 compiling.  The default is to use the integrated cpp (internal cpp)
1788 .Sp
1789 The semantics of this option will change if \*(L"cc1\*(R", \*(L"cc1plus\*(R", and
1790 \&\*(L"cc1obj\*(R" are merged.
1791 .IP "\fB\-traditional\fR" 4
1792 .IX Item "-traditional"
1793 .PD 0
1794 .IP "\fB\-traditional\-cpp\fR" 4
1795 .IX Item "-traditional-cpp"
1796 .PD
1797 Formerly, these options caused \s-1GCC\s0 to attempt to emulate a pre-standard
1798 C compiler.  They are now only supported with the \fB\-E\fR switch.
1799 The preprocessor continues to support a pre-standard mode.  See the \s-1GNU\s0
1800 \&\s-1CPP\s0 manual for details.
1801 .IP "\fB\-fcond\-mismatch\fR" 4
1802 .IX Item "-fcond-mismatch"
1803 Allow conditional expressions with mismatched types in the second and
1804 third arguments.  The value of such an expression is void.  This option
1805 is not supported for \*(C+.
1806 .IP "\fB\-flax\-vector\-conversions\fR" 4
1807 .IX Item "-flax-vector-conversions"
1808 Allow implicit conversions between vectors with differing numbers of
1809 elements and/or incompatible element types.  This option should not be
1810 used for new code.
1811 .IP "\fB\-funsigned\-char\fR" 4
1812 .IX Item "-funsigned-char"
1813 Let the type \f(CW\*(C`char\*(C'\fR be unsigned, like \f(CW\*(C`unsigned char\*(C'\fR.
1814 .Sp
1815 Each kind of machine has a default for what \f(CW\*(C`char\*(C'\fR should
1816 be.  It is either like \f(CW\*(C`unsigned char\*(C'\fR by default or like
1817 \&\f(CW\*(C`signed char\*(C'\fR by default.
1818 .Sp
1819 Ideally, a portable program should always use \f(CW\*(C`signed char\*(C'\fR or
1820 \&\f(CW\*(C`unsigned char\*(C'\fR when it depends on the signedness of an object.
1821 But many programs have been written to use plain \f(CW\*(C`char\*(C'\fR and
1822 expect it to be signed, or expect it to be unsigned, depending on the
1823 machines they were written for.  This option, and its inverse, let you
1824 make such a program work with the opposite default.
1825 .Sp
1826 The type \f(CW\*(C`char\*(C'\fR is always a distinct type from each of
1827 \&\f(CW\*(C`signed char\*(C'\fR or \f(CW\*(C`unsigned char\*(C'\fR, even though its behavior
1828 is always just like one of those two.
1829 .IP "\fB\-fsigned\-char\fR" 4
1830 .IX Item "-fsigned-char"
1831 Let the type \f(CW\*(C`char\*(C'\fR be signed, like \f(CW\*(C`signed char\*(C'\fR.
1832 .Sp
1833 Note that this is equivalent to \fB\-fno\-unsigned\-char\fR, which is
1834 the negative form of \fB\-funsigned\-char\fR.  Likewise, the option
1835 \&\fB\-fno\-signed\-char\fR is equivalent to \fB\-funsigned\-char\fR.
1836 .IP "\fB\-fsigned\-bitfields\fR" 4
1837 .IX Item "-fsigned-bitfields"
1838 .PD 0
1839 .IP "\fB\-funsigned\-bitfields\fR" 4
1840 .IX Item "-funsigned-bitfields"
1841 .IP "\fB\-fno\-signed\-bitfields\fR" 4
1842 .IX Item "-fno-signed-bitfields"
1843 .IP "\fB\-fno\-unsigned\-bitfields\fR" 4
1844 .IX Item "-fno-unsigned-bitfields"
1845 .PD
1846 These options control whether a bit-field is signed or unsigned, when the
1847 declaration does not use either \f(CW\*(C`signed\*(C'\fR or \f(CW\*(C`unsigned\*(C'\fR.  By
1848 default, such a bit-field is signed, because this is consistent: the
1849 basic integer types such as \f(CW\*(C`int\*(C'\fR are signed types.
1850 .Sh "Options Controlling \*(C+ Dialect"
1851 .IX Subsection "Options Controlling  Dialect"
1852 This section describes the command-line options that are only meaningful
1853 for \*(C+ programs; but you can also use most of the \s-1GNU\s0 compiler options
1854 regardless of what language your program is in.  For example, you
1855 might compile a file \f(CW\*(C`firstClass.C\*(C'\fR like this:
1856 .PP
1857 .Vb 1
1858 \&        g++ \-g \-frepo \-O \-c firstClass.C
1859 .Ve
1860 .PP
1861 In this example, only \fB\-frepo\fR is an option meant
1862 only for \*(C+ programs; you can use the other options with any
1863 language supported by \s-1GCC\s0.
1864 .PP
1865 Here is a list of options that are \fIonly\fR for compiling \*(C+ programs:
1866 .IP "\fB\-fabi\-version=\fR\fIn\fR" 4
1867 .IX Item "-fabi-version=n"
1868 Use version \fIn\fR of the \*(C+ \s-1ABI\s0.  Version 2 is the version of the
1869 \&\*(C+ \s-1ABI\s0 that first appeared in G++ 3.4.  Version 1 is the version of
1870 the \*(C+ \s-1ABI\s0 that first appeared in G++ 3.2.  Version 0 will always be
1871 the version that conforms most closely to the \*(C+ \s-1ABI\s0 specification.
1872 Therefore, the \s-1ABI\s0 obtained using version 0 will change as \s-1ABI\s0 bugs
1873 are fixed.
1874 .Sp
1875 The default is version 2.
1876 .Sp
1877 Version 3 corrects an error in mangling a constant address as a
1878 template argument.
1879 .Sp
1880 Version 4, which first appeared in G++ 4.5, implements a standard
1881 mangling for vector types.
1882 .Sp
1883 Version 5, which first appeared in G++ 4.6, corrects the mangling of
1884 attribute const/volatile on function pointer types, decltype of a
1885 plain decl, and use of a function parameter in the declaration of
1886 another parameter.
1887 .Sp
1888 Version 6, which first appeared in G++ 4.7, corrects the promotion
1889 behavior of \*(C+11 scoped enums and the mangling of template argument
1890 packs, const/static_cast, prefix ++ and \-\-, and a class scope function
1891 used as a template argument.
1892 .Sp
1893 See also \fB\-Wabi\fR.
1894 .IP "\fB\-fno\-access\-control\fR" 4
1895 .IX Item "-fno-access-control"
1896 Turn off all access checking.  This switch is mainly useful for working
1897 around bugs in the access control code.
1898 .IP "\fB\-fcheck\-new\fR" 4
1899 .IX Item "-fcheck-new"
1900 Check that the pointer returned by \f(CW\*(C`operator new\*(C'\fR is non-null
1901 before attempting to modify the storage allocated.  This check is
1902 normally unnecessary because the \*(C+ standard specifies that
1903 \&\f(CW\*(C`operator new\*(C'\fR will only return \f(CW0\fR if it is declared
1904 \&\fB\f(BIthrow()\fB\fR, in which case the compiler will always check the
1905 return value even without this option.  In all other cases, when
1906 \&\f(CW\*(C`operator new\*(C'\fR has a non-empty exception specification, memory
1907 exhaustion is signalled by throwing \f(CW\*(C`std::bad_alloc\*(C'\fR.  See also
1908 \&\fBnew (nothrow)\fR.
1909 .IP "\fB\-fconserve\-space\fR" 4
1910 .IX Item "-fconserve-space"
1911 Put uninitialized or run-time-initialized global variables into the
1912 common segment, as C does.  This saves space in the executable at the
1913 cost of not diagnosing duplicate definitions.  If you compile with this
1914 flag and your program mysteriously crashes after \f(CW\*(C`main()\*(C'\fR has
1915 completed, you may have an object that is being destroyed twice because
1916 two definitions were merged.
1917 .Sp
1918 This option is no longer useful on most targets, now that support has
1919 been added for putting variables into \s-1BSS\s0 without making them common.
1920 .IP "\fB\-fconstexpr\-depth=\fR\fIn\fR" 4
1921 .IX Item "-fconstexpr-depth=n"
1922 Set the maximum nested evaluation depth for \*(C+11 constexpr functions
1923 to \fIn\fR.  A limit is needed to detect endless recursion during
1924 constant expression evaluation.  The minimum specified by the standard
1925 is 512.
1926 .IP "\fB\-fdeduce\-init\-list\fR" 4
1927 .IX Item "-fdeduce-init-list"
1928 Enable deduction of a template type parameter as
1929 std::initializer_list from a brace-enclosed initializer list, i.e.
1930 .Sp
1931 .Vb 4
1932 \&        template <class T> auto forward(T t) \-> decltype (realfn (t))
1933 \&        {
1934 \&          return realfn (t);
1935 \&        }
1936 \&        
1937 \&        void f()
1938 \&        {
1939 \&          forward({1,2}); // call forward<std::initializer_list<int>>
1940 \&        }
1941 .Ve
1942 .Sp
1943 This deduction was implemented as a possible extension to the
1944 originally proposed semantics for the \*(C+11 standard, but was not part
1945 of the final standard, so it is disabled by default.  This option is
1946 deprecated, and may be removed in a future version of G++.
1947 .IP "\fB\-ffriend\-injection\fR" 4
1948 .IX Item "-ffriend-injection"
1949 Inject friend functions into the enclosing namespace, so that they are
1950 visible outside the scope of the class in which they are declared.
1951 Friend functions were documented to work this way in the old Annotated
1952 \&\*(C+ Reference Manual, and versions of G++ before 4.1 always worked
1953 that way.  However, in \s-1ISO\s0 \*(C+ a friend function that is not declared
1954 in an enclosing scope can only be found using argument dependent
1955 lookup.  This option causes friends to be injected as they were in
1956 earlier releases.
1957 .Sp
1958 This option is for compatibility, and may be removed in a future
1959 release of G++.
1960 .IP "\fB\-fno\-elide\-constructors\fR" 4
1961 .IX Item "-fno-elide-constructors"
1962 The \*(C+ standard allows an implementation to omit creating a temporary
1963 that is only used to initialize another object of the same type.
1964 Specifying this option disables that optimization, and forces G++ to
1965 call the copy constructor in all cases.
1966 .IP "\fB\-fno\-enforce\-eh\-specs\fR" 4
1967 .IX Item "-fno-enforce-eh-specs"
1968 Don't generate code to check for violation of exception specifications
1969 at run time.  This option violates the \*(C+ standard, but may be useful
1970 for reducing code size in production builds, much like defining
1971 \&\fB\s-1NDEBUG\s0\fR.  This does not give user code permission to throw
1972 exceptions in violation of the exception specifications; the compiler
1973 will still optimize based on the specifications, so throwing an
1974 unexpected exception will result in undefined behavior.
1975 .IP "\fB\-ffor\-scope\fR" 4
1976 .IX Item "-ffor-scope"
1977 .PD 0
1978 .IP "\fB\-fno\-for\-scope\fR" 4
1979 .IX Item "-fno-for-scope"
1980 .PD
1981 If \fB\-ffor\-scope\fR is specified, the scope of variables declared in
1982 a \fIfor-init-statement\fR is limited to the \fBfor\fR loop itself,
1983 as specified by the \*(C+ standard.
1984 If \fB\-fno\-for\-scope\fR is specified, the scope of variables declared in
1985 a \fIfor-init-statement\fR extends to the end of the enclosing scope,
1986 as was the case in old versions of G++, and other (traditional)
1987 implementations of \*(C+.
1988 .Sp
1989 The default if neither flag is given to follow the standard,
1990 but to allow and give a warning for old-style code that would
1991 otherwise be invalid, or have different behavior.
1992 .IP "\fB\-fno\-gnu\-keywords\fR" 4
1993 .IX Item "-fno-gnu-keywords"
1994 Do not recognize \f(CW\*(C`typeof\*(C'\fR as a keyword, so that code can use this
1995 word as an identifier.  You can use the keyword \f(CW\*(C`_\|_typeof_\|_\*(C'\fR instead.
1996 \&\fB\-ansi\fR implies \fB\-fno\-gnu\-keywords\fR.
1997 .IP "\fB\-fno\-implicit\-templates\fR" 4
1998 .IX Item "-fno-implicit-templates"
1999 Never emit code for non-inline templates that are instantiated
2000 implicitly (i.e. by use); only emit code for explicit instantiations.
2001 .IP "\fB\-fno\-implicit\-inline\-templates\fR" 4
2002 .IX Item "-fno-implicit-inline-templates"
2003 Don't emit code for implicit instantiations of inline templates, either.
2004 The default is to handle inlines differently so that compiles with and
2005 without optimization will need the same set of explicit instantiations.
2006 .IP "\fB\-fno\-implement\-inlines\fR" 4
2007 .IX Item "-fno-implement-inlines"
2008 To save space, do not emit out-of-line copies of inline functions
2009 controlled by \fB#pragma implementation\fR.  This will cause linker
2010 errors if these functions are not inlined everywhere they are called.
2011 .IP "\fB\-fms\-extensions\fR" 4
2012 .IX Item "-fms-extensions"
2013 Disable pedantic warnings about constructs used in \s-1MFC\s0, such as implicit
2014 int and getting a pointer to member function via non-standard syntax.
2015 .IP "\fB\-fno\-nonansi\-builtins\fR" 4
2016 .IX Item "-fno-nonansi-builtins"
2017 Disable built-in declarations of functions that are not mandated by
2018 \&\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,
2019 \&\f(CW\*(C`index\*(C'\fR, \f(CW\*(C`bzero\*(C'\fR, \f(CW\*(C`conjf\*(C'\fR, and other related functions.
2020 .IP "\fB\-fnothrow\-opt\fR" 4
2021 .IX Item "-fnothrow-opt"
2022 Treat a \f(CW\*(C`throw()\*(C'\fR exception specification as though it were a
2023 \&\f(CW\*(C`noexcept\*(C'\fR specification to reduce or eliminate the text size
2024 overhead relative to a function with no exception specification.  If
2025 the function has local variables of types with non-trivial
2026 destructors, the exception specification will actually make the
2027 function smaller because the \s-1EH\s0 cleanups for those variables can be
2028 optimized away.  The semantic effect is that an exception thrown out of
2029 a function with such an exception specification will result in a call
2030 to \f(CW\*(C`terminate\*(C'\fR rather than \f(CW\*(C`unexpected\*(C'\fR.
2031 .IP "\fB\-fno\-operator\-names\fR" 4
2032 .IX Item "-fno-operator-names"
2033 Do not treat the operator name keywords \f(CW\*(C`and\*(C'\fR, \f(CW\*(C`bitand\*(C'\fR,
2034 \&\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
2035 synonyms as keywords.
2036 .IP "\fB\-fno\-optional\-diags\fR" 4
2037 .IX Item "-fno-optional-diags"
2038 Disable diagnostics that the standard says a compiler does not need to
2039 issue.  Currently, the only such diagnostic issued by G++ is the one for
2040 a name having multiple meanings within a class.
2041 .IP "\fB\-fpermissive\fR" 4
2042 .IX Item "-fpermissive"
2043 Downgrade some diagnostics about nonconformant code from errors to
2044 warnings.  Thus, using \fB\-fpermissive\fR will allow some
2045 nonconforming code to compile.
2046 .IP "\fB\-fno\-pretty\-templates\fR" 4
2047 .IX Item "-fno-pretty-templates"
2048 When an error message refers to a specialization of a function
2049 template, the compiler will normally print the signature of the
2050 template followed by the template arguments and any typedefs or
2051 typenames in the signature (e.g. \f(CW\*(C`void f(T) [with T = int]\*(C'\fR
2052 rather than \f(CW\*(C`void f(int)\*(C'\fR) so that it's clear which template is
2053 involved.  When an error message refers to a specialization of a class
2054 template, the compiler will omit any template arguments that match
2055 the default template arguments for that template.  If either of these
2056 behaviors make it harder to understand the error message rather than
2057 easier, using \fB\-fno\-pretty\-templates\fR will disable them.
2058 .IP "\fB\-frepo\fR" 4
2059 .IX Item "-frepo"
2060 Enable automatic template instantiation at link time.  This option also
2061 implies \fB\-fno\-implicit\-templates\fR.
2062 .IP "\fB\-fno\-rtti\fR" 4
2063 .IX Item "-fno-rtti"
2064 Disable generation of information about every class with virtual
2065 functions for use by the \*(C+ run-time type identification features
2066 (\fBdynamic_cast\fR and \fBtypeid\fR).  If you don't use those parts
2067 of the language, you can save some space by using this flag.  Note that
2068 exception handling uses the same information, but it will generate it as
2069 needed. The \fBdynamic_cast\fR operator can still be used for casts that
2070 do not require run-time type information, i.e. casts to \f(CW\*(C`void *\*(C'\fR or to
2071 unambiguous base classes.
2072 .IP "\fB\-fstats\fR" 4
2073 .IX Item "-fstats"
2074 Emit statistics about front-end processing at the end of the compilation.
2075 This information is generally only useful to the G++ development team.
2076 .IP "\fB\-fstrict\-enums\fR" 4
2077 .IX Item "-fstrict-enums"
2078 Allow the compiler to optimize using the assumption that a value of
2079 enumerated type can only be one of the values of the enumeration (as
2080 defined in the \*(C+ standard; basically, a value that can be
2081 represented in the minimum number of bits needed to represent all the
2082 enumerators).  This assumption may not be valid if the program uses a
2083 cast to convert an arbitrary integer value to the enumerated type.
2084 .IP "\fB\-ftemplate\-depth=\fR\fIn\fR" 4
2085 .IX Item "-ftemplate-depth=n"
2086 Set the maximum instantiation depth for template classes to \fIn\fR.
2087 A limit on the template instantiation depth is needed to detect
2088 endless recursions during template class instantiation.  \s-1ANSI/ISO\s0 \*(C+
2089 conforming programs must not rely on a maximum depth greater than 17
2090 (changed to 1024 in \*(C+11).  The default value is 900, as the compiler
2091 can run out of stack space before hitting 1024 in some situations.
2092 .IP "\fB\-fno\-threadsafe\-statics\fR" 4
2093 .IX Item "-fno-threadsafe-statics"
2094 Do not emit the extra code to use the routines specified in the \*(C+
2095 \&\s-1ABI\s0 for thread-safe initialization of local statics.  You can use this
2096 option to reduce code size slightly in code that doesn't need to be
2097 thread-safe.
2098 .IP "\fB\-fuse\-cxa\-atexit\fR" 4
2099 .IX Item "-fuse-cxa-atexit"
2100 Register destructors for objects with static storage duration with the
2101 \&\f(CW\*(C`_\|_cxa_atexit\*(C'\fR function rather than the \f(CW\*(C`atexit\*(C'\fR function.
2102 This option is required for fully standards-compliant handling of static
2103 destructors, but will only work if your C library supports
2104 \&\f(CW\*(C`_\|_cxa_atexit\*(C'\fR.
2105 .IP "\fB\-fno\-use\-cxa\-get\-exception\-ptr\fR" 4
2106 .IX Item "-fno-use-cxa-get-exception-ptr"
2107 Don't use the \f(CW\*(C`_\|_cxa_get_exception_ptr\*(C'\fR runtime routine.  This
2108 will cause \f(CW\*(C`std::uncaught_exception\*(C'\fR to be incorrect, but is necessary
2109 if the runtime routine is not available.
2110 .IP "\fB\-fvisibility\-inlines\-hidden\fR" 4
2111 .IX Item "-fvisibility-inlines-hidden"
2112 This switch declares that the user does not attempt to compare
2113 pointers to inline functions or methods where the addresses of the two functions
2114 were taken in different shared objects.
2115 .Sp
2116 The effect of this is that \s-1GCC\s0 may, effectively, mark inline methods with
2117 \&\f(CW\*(C`_\|_attribute_\|_ ((visibility ("hidden")))\*(C'\fR so that they do not
2118 appear in the export table of a \s-1DSO\s0 and do not require a \s-1PLT\s0 indirection
2119 when used within the \s-1DSO\s0.  Enabling this option can have a dramatic effect
2120 on load and link times of a \s-1DSO\s0 as it massively reduces the size of the
2121 dynamic export table when the library makes heavy use of templates.
2122 .Sp
2123 The behavior of this switch is not quite the same as marking the
2124 methods as hidden directly, because it does not affect static variables
2125 local to the function or cause the compiler to deduce that
2126 the function is defined in only one shared object.
2127 .Sp
2128 You may mark a method as having a visibility explicitly to negate the
2129 effect of the switch for that method.  For example, if you do want to
2130 compare pointers to a particular inline method, you might mark it as
2131 having default visibility.  Marking the enclosing class with explicit
2132 visibility will have no effect.
2133 .Sp
2134 Explicitly instantiated inline methods are unaffected by this option
2135 as their linkage might otherwise cross a shared library boundary.
2136 .IP "\fB\-fvisibility\-ms\-compat\fR" 4
2137 .IX Item "-fvisibility-ms-compat"
2138 This flag attempts to use visibility settings to make \s-1GCC\s0's \*(C+
2139 linkage model compatible with that of Microsoft Visual Studio.
2140 .Sp
2141 The flag makes these changes to \s-1GCC\s0's linkage model:
2142 .RS 4
2143 .IP "1." 4
2144 It sets the default visibility to \f(CW\*(C`hidden\*(C'\fR, like
2145 \&\fB\-fvisibility=hidden\fR.
2146 .IP "2." 4
2147 Types, but not their members, are not hidden by default.
2148 .IP "3." 4
2149 The One Definition Rule is relaxed for types without explicit
2150 visibility specifications that are defined in more than one different
2151 shared object: those declarations are permitted if they would have
2152 been permitted when this option was not used.
2153 .RE
2154 .RS 4
2155 .Sp
2156 In new code it is better to use \fB\-fvisibility=hidden\fR and
2157 export those classes that are intended to be externally visible.
2158 Unfortunately it is possible for code to rely, perhaps accidentally,
2159 on the Visual Studio behavior.
2160 .Sp
2161 Among the consequences of these changes are that static data members
2162 of the same type with the same name but defined in different shared
2163 objects will be different, so changing one will not change the other;
2164 and that pointers to function members defined in different shared
2165 objects may not compare equal.  When this flag is given, it is a
2166 violation of the \s-1ODR\s0 to define types with the same name differently.
2167 .RE
2168 .IP "\fB\-fno\-weak\fR" 4
2169 .IX Item "-fno-weak"
2170 Do not use weak symbol support, even if it is provided by the linker.
2171 By default, G++ will use weak symbols if they are available.  This
2172 option exists only for testing, and should not be used by end-users;
2173 it will result in inferior code and has no benefits.  This option may
2174 be removed in a future release of G++.
2175 .IP "\fB\-nostdinc++\fR" 4
2176 .IX Item "-nostdinc++"
2177 Do not search for header files in the standard directories specific to
2178 \&\*(C+, but do still search the other standard directories.  (This option
2179 is used when building the \*(C+ library.)
2180 .PP
2181 In addition, these optimization, warning, and code generation options
2182 have meanings only for \*(C+ programs:
2183 .IP "\fB\-fno\-default\-inline\fR" 4
2184 .IX Item "-fno-default-inline"
2185 Do not assume \fBinline\fR for functions defined inside a class scope.
2186   Note that these
2187 functions will have linkage like inline functions; they just won't be
2188 inlined by default.
2189 .IP "\fB\-Wabi\fR (C, Objective-C, \*(C+ and Objective\-\*(C+ only)" 4
2190 .IX Item "-Wabi (C, Objective-C,  and Objective- only)"
2191 Warn when G++ generates code that is probably not compatible with the
2192 vendor-neutral \*(C+ \s-1ABI\s0.  Although an effort has been made to warn about
2193 all such cases, there are probably some cases that are not warned about,
2194 even though G++ is generating incompatible code.  There may also be
2195 cases where warnings are emitted even though the code that is generated
2196 will be compatible.
2197 .Sp
2198 You should rewrite your code to avoid these warnings if you are
2199 concerned about the fact that code generated by G++ may not be binary
2200 compatible with code generated by other compilers.
2201 .Sp
2202 The known incompatibilities in \fB\-fabi\-version=2\fR (the default) include:
2203 .RS 4
2204 .IP "\(bu" 4
2205 A template with a non-type template parameter of reference type is
2206 mangled incorrectly:
2207 .Sp
2208 .Vb 3
2209 \&        extern int N;
2210 \&        template <int &> struct S {};
2211 \&        void n (S<N>) {2}
2212 .Ve
2213 .Sp
2214 This is fixed in \fB\-fabi\-version=3\fR.
2215 .IP "\(bu" 4
2216 \&\s-1SIMD\s0 vector types declared using \f(CW\*(C`_\|_attribute ((vector_size))\*(C'\fR are
2217 mangled in a non-standard way that does not allow for overloading of
2218 functions taking vectors of different sizes.
2219 .Sp
2220 The mangling is changed in \fB\-fabi\-version=4\fR.
2221 .RE
2222 .RS 4
2223 .Sp
2224 The known incompatibilities in \fB\-fabi\-version=1\fR include:
2225 .IP "\(bu" 4
2226 Incorrect handling of tail-padding for bit-fields.  G++ may attempt to
2227 pack data into the same byte as a base class.  For example:
2228 .Sp
2229 .Vb 2
2230 \&        struct A { virtual void f(); int f1 : 1; };
2231 \&        struct B : public A { int f2 : 1; };
2232 .Ve
2233 .Sp
2234 In this case, G++ will place \f(CW\*(C`B::f2\*(C'\fR into the same byte
2235 as\f(CW\*(C`A::f1\*(C'\fR; other compilers will not.  You can avoid this problem
2236 by explicitly padding \f(CW\*(C`A\*(C'\fR so that its size is a multiple of the
2237 byte size on your platform; that will cause G++ and other compilers to
2238 layout \f(CW\*(C`B\*(C'\fR identically.
2239 .IP "\(bu" 4
2240 Incorrect handling of tail-padding for virtual bases.  G++ does not use
2241 tail padding when laying out virtual bases.  For example:
2242 .Sp
2243 .Vb 3
2244 \&        struct A { virtual void f(); char c1; };
2245 \&        struct B { B(); char c2; };
2246 \&        struct C : public A, public virtual B {};
2247 .Ve
2248 .Sp
2249 In this case, G++ will not place \f(CW\*(C`B\*(C'\fR into the tail-padding for
2250 \&\f(CW\*(C`A\*(C'\fR; other compilers will.  You can avoid this problem by
2251 explicitly padding \f(CW\*(C`A\*(C'\fR so that its size is a multiple of its
2252 alignment (ignoring virtual base classes); that will cause G++ and other
2253 compilers to layout \f(CW\*(C`C\*(C'\fR identically.
2254 .IP "\(bu" 4
2255 Incorrect handling of bit-fields with declared widths greater than that
2256 of their underlying types, when the bit-fields appear in a union.  For
2257 example:
2258 .Sp
2259 .Vb 1
2260 \&        union U { int i : 4096; };
2261 .Ve
2262 .Sp
2263 Assuming that an \f(CW\*(C`int\*(C'\fR does not have 4096 bits, G++ will make the
2264 union too small by the number of bits in an \f(CW\*(C`int\*(C'\fR.
2265 .IP "\(bu" 4
2266 Empty classes can be placed at incorrect offsets.  For example:
2267 .Sp
2268 .Vb 1
2269 \&        struct A {};
2270 \&        
2271 \&        struct B {
2272 \&          A a;
2273 \&          virtual void f ();
2274 \&        };
2275 \&        
2276 \&        struct C : public B, public A {};
2277 .Ve
2278 .Sp
2279 G++ will place the \f(CW\*(C`A\*(C'\fR base class of \f(CW\*(C`C\*(C'\fR at a nonzero offset;
2280 it should be placed at offset zero.  G++ mistakenly believes that the
2281 \&\f(CW\*(C`A\*(C'\fR data member of \f(CW\*(C`B\*(C'\fR is already at offset zero.
2282 .IP "\(bu" 4
2283 Names of template functions whose types involve \f(CW\*(C`typename\*(C'\fR or
2284 template template parameters can be mangled incorrectly.
2285 .Sp
2286 .Vb 2
2287 \&        template <typename Q>
2288 \&        void f(typename Q::X) {}
2289 \&        
2290 \&        template <template <typename> class Q>
2291 \&        void f(typename Q<int>::X) {}
2292 .Ve
2293 .Sp
2294 Instantiations of these templates may be mangled incorrectly.
2295 .RE
2296 .RS 4
2297 .Sp
2298 It also warns psABI related changes.  The known psABI changes at this
2299 point include:
2300 .IP "\(bu" 4
2301 For SYSV/x86\-64, when passing union with long double, it is changed to
2302 pass in memory as specified in psABI.  For example:
2303 .Sp
2304 .Vb 4
2305 \&        union U {
2306 \&          long double ld;
2307 \&          int i;
2308 \&        };
2309 .Ve
2310 .Sp
2311 \&\f(CW\*(C`union U\*(C'\fR will always be passed in memory.
2312 .RE
2313 .RS 4
2314 .RE
2315 .IP "\fB\-Wctor\-dtor\-privacy\fR (\*(C+ and Objective\-\*(C+ only)" 4
2316 .IX Item "-Wctor-dtor-privacy ( and Objective- only)"
2317 Warn when a class seems unusable because all the constructors or
2318 destructors in that class are private, and it has neither friends nor
2319 public static member functions.
2320 .IP "\fB\-Wdelete\-non\-virtual\-dtor\fR (\*(C+ and Objective\-\*(C+ only)" 4
2321 .IX Item "-Wdelete-non-virtual-dtor ( and Objective- only)"
2322 Warn when \fBdelete\fR is used to destroy an instance of a class that
2323 has virtual functions and non-virtual destructor. It is unsafe to delete
2324 an instance of a derived class through a pointer to a base class if the
2325 base class does not have a virtual destructor.  This warning is enabled
2326 by \fB\-Wall\fR.
2327 .IP "\fB\-Wnarrowing\fR (\*(C+ and Objective\-\*(C+ only)" 4
2328 .IX Item "-Wnarrowing ( and Objective- only)"
2329 Warn when a narrowing conversion prohibited by \*(C+11 occurs within
2330 \&\fB{ }\fR, e.g.
2331 .Sp
2332 .Vb 1
2333 \&        int i = { 2.2 }; // error: narrowing from double to int
2334 .Ve
2335 .Sp
2336 This flag is included in \fB\-Wall\fR and \fB\-Wc++11\-compat\fR.
2337 .Sp
2338 With \-std=c++11, \fB\-Wno\-narrowing\fR suppresses the diagnostic
2339 required by the standard.  Note that this does not affect the meaning
2340 of well-formed code; narrowing conversions are still considered
2341 ill-formed in \s-1SFINAE\s0 context.
2342 .IP "\fB\-Wnoexcept\fR (\*(C+ and Objective\-\*(C+ only)" 4
2343 .IX Item "-Wnoexcept ( and Objective- only)"
2344 Warn when a noexcept-expression evaluates to false because of a call
2345 to a function that does not have a non-throwing exception
2346 specification (i.e. \fB\f(BIthrow()\fB\fR or \fBnoexcept\fR) but is known by
2347 the compiler to never throw an exception.
2348 .IP "\fB\-Wnon\-virtual\-dtor\fR (\*(C+ and Objective\-\*(C+ only)" 4
2349 .IX Item "-Wnon-virtual-dtor ( and Objective- only)"
2350 Warn when a class has virtual functions and accessible non-virtual
2351 destructor, in which case it would be possible but unsafe to delete
2352 an instance of a derived class through a pointer to the base class.
2353 This warning is also enabled if \fB\-Weffc++\fR is specified.
2354 .IP "\fB\-Wreorder\fR (\*(C+ and Objective\-\*(C+ only)" 4
2355 .IX Item "-Wreorder ( and Objective- only)"
2356 Warn when the order of member initializers given in the code does not
2357 match the order in which they must be executed.  For instance:
2358 .Sp
2359 .Vb 5
2360 \&        struct A {
2361 \&          int i;
2362 \&          int j;
2363 \&          A(): j (0), i (1) { }
2364 \&        };
2365 .Ve
2366 .Sp
2367 The compiler will rearrange the member initializers for \fBi\fR
2368 and \fBj\fR to match the declaration order of the members, emitting
2369 a warning to that effect.  This warning is enabled by \fB\-Wall\fR.
2370 .PP
2371 The following \fB\-W...\fR options are not affected by \fB\-Wall\fR.
2372 .IP "\fB\-Weffc++\fR (\*(C+ and Objective\-\*(C+ only)" 4
2373 .IX Item "-Weffc++ ( and Objective- only)"
2374 Warn about violations of the following style guidelines from Scott Meyers'
2375 \&\fIEffective \*(C+, Second Edition\fR book:
2376 .RS 4
2377 .IP "\(bu" 4
2378 Item 11:  Define a copy constructor and an assignment operator for classes
2379 with dynamically allocated memory.
2380 .IP "\(bu" 4
2381 Item 12:  Prefer initialization to assignment in constructors.
2382 .IP "\(bu" 4
2383 Item 14:  Make destructors virtual in base classes.
2384 .IP "\(bu" 4
2385 Item 15:  Have \f(CW\*(C`operator=\*(C'\fR return a reference to \f(CW*this\fR.
2386 .IP "\(bu" 4
2387 Item 23:  Don't try to return a reference when you must return an object.
2388 .RE
2389 .RS 4
2390 .Sp
2391 Also warn about violations of the following style guidelines from
2392 Scott Meyers' \fIMore Effective \*(C+\fR book:
2393 .IP "\(bu" 4
2394 Item 6:  Distinguish between prefix and postfix forms of increment and
2395 decrement operators.
2396 .IP "\(bu" 4
2397 Item 7:  Never overload \f(CW\*(C`&&\*(C'\fR, \f(CW\*(C`||\*(C'\fR, or \f(CW\*(C`,\*(C'\fR.
2398 .RE
2399 .RS 4
2400 .Sp
2401 When selecting this option, be aware that the standard library
2402 headers do not obey all of these guidelines; use \fBgrep \-v\fR
2403 to filter out those warnings.
2404 .RE
2405 .IP "\fB\-Wstrict\-null\-sentinel\fR (\*(C+ and Objective\-\*(C+ only)" 4
2406 .IX Item "-Wstrict-null-sentinel ( and Objective- only)"
2407 Warn also about the use of an uncasted \f(CW\*(C`NULL\*(C'\fR as sentinel.  When
2408 compiling only with \s-1GCC\s0 this is a valid sentinel, as \f(CW\*(C`NULL\*(C'\fR is defined
2409 to \f(CW\*(C`_\|_null\*(C'\fR.  Although it is a null pointer constant not a null pointer,
2410 it is guaranteed to be of the same size as a pointer.  But this use is
2411 not portable across different compilers.
2412 .IP "\fB\-Wno\-non\-template\-friend\fR (\*(C+ and Objective\-\*(C+ only)" 4
2413 .IX Item "-Wno-non-template-friend ( and Objective- only)"
2414 Disable warnings when non-templatized friend functions are declared
2415 within a template.  Since the advent of explicit template specification
2416 support in G++, if the name of the friend is an unqualified-id (i.e.,
2417 \&\fBfriend foo(int)\fR), the \*(C+ language specification demands that the
2418 friend declare or define an ordinary, nontemplate function.  (Section
2419 14.5.3).  Before G++ implemented explicit specification, unqualified-ids
2420 could be interpreted as a particular specialization of a templatized
2421 function.  Because this non-conforming behavior is no longer the default
2422 behavior for G++, \fB\-Wnon\-template\-friend\fR allows the compiler to
2423 check existing code for potential trouble spots and is on by default.
2424 This new compiler behavior can be turned off with
2425 \&\fB\-Wno\-non\-template\-friend\fR, which keeps the conformant compiler code
2426 but disables the helpful warning.
2427 .IP "\fB\-Wold\-style\-cast\fR (\*(C+ and Objective\-\*(C+ only)" 4
2428 .IX Item "-Wold-style-cast ( and Objective- only)"
2429 Warn if an old-style (C\-style) cast to a non-void type is used within
2430 a \*(C+ program.  The new-style casts (\fBdynamic_cast\fR,
2431 \&\fBstatic_cast\fR, \fBreinterpret_cast\fR, and \fBconst_cast\fR) are
2432 less vulnerable to unintended effects and much easier to search for.
2433 .IP "\fB\-Woverloaded\-virtual\fR (\*(C+ and Objective\-\*(C+ only)" 4
2434 .IX Item "-Woverloaded-virtual ( and Objective- only)"
2435 Warn when a function declaration hides virtual functions from a
2436 base class.  For example, in:
2437 .Sp
2438 .Vb 3
2439 \&        struct A {
2440 \&          virtual void f();
2441 \&        };
2442 \&        
2443 \&        struct B: public A {
2444 \&          void f(int);
2445 \&        };
2446 .Ve
2447 .Sp
2448 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
2449 like:
2450 .Sp
2451 .Vb 2
2452 \&        B* b;
2453 \&        b\->f();
2454 .Ve
2455 .Sp
2456 will fail to compile.
2457 .IP "\fB\-Wno\-pmf\-conversions\fR (\*(C+ and Objective\-\*(C+ only)" 4
2458 .IX Item "-Wno-pmf-conversions ( and Objective- only)"
2459 Disable the diagnostic for converting a bound pointer to member function
2460 to a plain pointer.
2461 .IP "\fB\-Wsign\-promo\fR (\*(C+ and Objective\-\*(C+ only)" 4
2462 .IX Item "-Wsign-promo ( and Objective- only)"
2463 Warn when overload resolution chooses a promotion from unsigned or
2464 enumerated type to a signed type, over a conversion to an unsigned type of
2465 the same size.  Previous versions of G++ would try to preserve
2466 unsignedness, but the standard mandates the current behavior.
2467 .Sp
2468 .Vb 4
2469 \&        struct A {
2470 \&          operator int ();
2471 \&          A& operator = (int);
2472 \&        };
2473 \&        
2474 \&        main ()
2475 \&        {
2476 \&          A a,b;
2477 \&          a = b;
2478 \&        }
2479 .Ve
2480 .Sp
2481 In this example, G++ will synthesize a default \fBA& operator =
2482 (const A&);\fR, while cfront will use the user-defined \fBoperator =\fR.
2483 .Sh "Options Controlling Objective-C and Objective\-\*(C+ Dialects"
2484 .IX Subsection "Options Controlling Objective-C and Objective- Dialects"
2485 (\s-1NOTE:\s0 This manual does not describe the Objective-C and Objective\-\*(C+
2486 languages themselves.
2487 .PP
2488 This section describes the command-line options that are only meaningful
2489 for Objective-C and Objective\-\*(C+ programs, but you can also use most of
2490 the language-independent \s-1GNU\s0 compiler options.
2491 For example, you might compile a file \f(CW\*(C`some_class.m\*(C'\fR like this:
2492 .PP
2493 .Vb 1
2494 \&        gcc \-g \-fgnu\-runtime \-O \-c some_class.m
2495 .Ve
2496 .PP
2497 In this example, \fB\-fgnu\-runtime\fR is an option meant only for
2498 Objective-C and Objective\-\*(C+ programs; you can use the other options with
2499 any language supported by \s-1GCC\s0.
2500 .PP
2501 Note that since Objective-C is an extension of the C language, Objective-C
2502 compilations may also use options specific to the C front-end (e.g.,
2503 \&\fB\-Wtraditional\fR).  Similarly, Objective\-\*(C+ compilations may use
2504 \&\*(C+\-specific options (e.g., \fB\-Wabi\fR).
2505 .PP
2506 Here is a list of options that are \fIonly\fR for compiling Objective-C
2507 and Objective\-\*(C+ programs:
2508 .IP "\fB\-fconstant\-string\-class=\fR\fIclass-name\fR" 4
2509 .IX Item "-fconstant-string-class=class-name"
2510 Use \fIclass-name\fR as the name of the class to instantiate for each
2511 literal string specified with the syntax \f(CW\*(C`@"..."\*(C'\fR.  The default
2512 class name is \f(CW\*(C`NXConstantString\*(C'\fR if the \s-1GNU\s0 runtime is being used, and
2513 \&\f(CW\*(C`NSConstantString\*(C'\fR if the NeXT runtime is being used (see below).  The
2514 \&\fB\-fconstant\-cfstrings\fR option, if also present, will override the
2515 \&\fB\-fconstant\-string\-class\fR setting and cause \f(CW\*(C`@"..."\*(C'\fR literals
2516 to be laid out as constant CoreFoundation strings.
2517 .IP "\fB\-fgnu\-runtime\fR" 4
2518 .IX Item "-fgnu-runtime"
2519 Generate object code compatible with the standard \s-1GNU\s0 Objective-C
2520 runtime.  This is the default for most types of systems.
2521 .IP "\fB\-fnext\-runtime\fR" 4
2522 .IX Item "-fnext-runtime"
2523 Generate output compatible with the NeXT runtime.  This is the default
2524 for NeXT-based systems, including Darwin and Mac \s-1OS\s0 X.  The macro
2525 \&\f(CW\*(C`_\|_NEXT_RUNTIME_\|_\*(C'\fR is predefined if (and only if) this option is
2526 used.
2527 .IP "\fB\-fno\-nil\-receivers\fR" 4
2528 .IX Item "-fno-nil-receivers"
2529 Assume that all Objective-C message dispatches (\f(CW\*(C`[receiver
2530 message:arg]\*(C'\fR) in this translation unit ensure that the receiver is
2531 not \f(CW\*(C`nil\*(C'\fR.  This allows for more efficient entry points in the
2532 runtime to be used.  This option is only available in conjunction with
2533 the NeXT runtime and \s-1ABI\s0 version 0 or 1.
2534 .IP "\fB\-fobjc\-abi\-version=\fR\fIn\fR" 4
2535 .IX Item "-fobjc-abi-version=n"
2536 Use version \fIn\fR of the Objective-C \s-1ABI\s0 for the selected runtime.
2537 This option is currently supported only for the NeXT runtime.  In that
2538 case, Version 0 is the traditional (32\-bit) \s-1ABI\s0 without support for
2539 properties and other Objective-C 2.0 additions.  Version 1 is the
2540 traditional (32\-bit) \s-1ABI\s0 with support for properties and other
2541 Objective-C 2.0 additions.  Version 2 is the modern (64\-bit) \s-1ABI\s0.  If
2542 nothing is specified, the default is Version 0 on 32\-bit target
2543 machines, and Version 2 on 64\-bit target machines.
2544 .IP "\fB\-fobjc\-call\-cxx\-cdtors\fR" 4
2545 .IX Item "-fobjc-call-cxx-cdtors"
2546 For each Objective-C class, check if any of its instance variables is a
2547 \&\*(C+ object with a non-trivial default constructor.  If so, synthesize a
2548 special \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR instance method which will run
2549 non-trivial default constructors on any such instance variables, in order,
2550 and then return \f(CW\*(C`self\*(C'\fR.  Similarly, check if any instance variable
2551 is a \*(C+ object with a non-trivial destructor, and if so, synthesize a
2552 special \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR method which will run
2553 all such default destructors, in reverse order.
2554 .Sp
2555 The \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR and \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR
2556 methods thusly generated will only operate on instance variables
2557 declared in the current Objective-C class, and not those inherited
2558 from superclasses.  It is the responsibility of the Objective-C
2559 runtime to invoke all such methods in an object's inheritance
2560 hierarchy.  The \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR methods will be invoked
2561 by the runtime immediately after a new object instance is allocated;
2562 the \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR methods will be invoked immediately
2563 before the runtime deallocates an object instance.
2564 .Sp
2565 As of this writing, only the NeXT runtime on Mac \s-1OS\s0 X 10.4 and later has
2566 support for invoking the \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR and
2567 \&\f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR methods.
2568 .IP "\fB\-fobjc\-direct\-dispatch\fR" 4
2569 .IX Item "-fobjc-direct-dispatch"
2570 Allow fast jumps to the message dispatcher.  On Darwin this is
2571 accomplished via the comm page.
2572 .IP "\fB\-fobjc\-exceptions\fR" 4
2573 .IX Item "-fobjc-exceptions"
2574 Enable syntactic support for structured exception handling in
2575 Objective-C, similar to what is offered by \*(C+ and Java.  This option
2576 is required to use the Objective-C keywords \f(CW@try\fR,
2577 \&\f(CW@throw\fR, \f(CW@catch\fR, \f(CW@finally\fR and
2578 \&\f(CW@synchronized\fR.  This option is available with both the \s-1GNU\s0
2579 runtime and the NeXT runtime (but not available in conjunction with
2580 the NeXT runtime on Mac \s-1OS\s0 X 10.2 and earlier).
2581 .IP "\fB\-fobjc\-gc\fR" 4
2582 .IX Item "-fobjc-gc"
2583 Enable garbage collection (\s-1GC\s0) in Objective-C and Objective\-\*(C+
2584 programs.  This option is only available with the NeXT runtime; the
2585 \&\s-1GNU\s0 runtime has a different garbage collection implementation that
2586 does not require special compiler flags.
2587 .IP "\fB\-fobjc\-nilcheck\fR" 4
2588 .IX Item "-fobjc-nilcheck"
2589 For the NeXT runtime with version 2 of the \s-1ABI\s0, check for a nil
2590 receiver in method invocations before doing the actual method call.
2591 This is the default and can be disabled using
2592 \&\fB\-fno\-objc\-nilcheck\fR.  Class methods and super calls are never
2593 checked for nil in this way no matter what this flag is set to.
2594 Currently this flag does nothing when the \s-1GNU\s0 runtime, or an older
2595 version of the NeXT runtime \s-1ABI\s0, is used.
2596 .IP "\fB\-fobjc\-std=objc1\fR" 4
2597 .IX Item "-fobjc-std=objc1"
2598 Conform to the language syntax of Objective-C 1.0, the language
2599 recognized by \s-1GCC\s0 4.0.  This only affects the Objective-C additions to
2600 the C/\*(C+ language; it does not affect conformance to C/\*(C+ standards,
2601 which is controlled by the separate C/\*(C+ dialect option flags.  When
2602 this option is used with the Objective-C or Objective\-\*(C+ compiler,
2603 any Objective-C syntax that is not recognized by \s-1GCC\s0 4.0 is rejected.
2604 This is useful if you need to make sure that your Objective-C code can
2605 be compiled with older versions of \s-1GCC\s0.
2606 .IP "\fB\-freplace\-objc\-classes\fR" 4
2607 .IX Item "-freplace-objc-classes"
2608 Emit a special marker instructing \fB\f(BIld\fB\|(1)\fR not to statically link in
2609 the resulting object file, and allow \fB\f(BIdyld\fB\|(1)\fR to load it in at
2610 run time instead.  This is used in conjunction with the Fix-and-Continue
2611 debugging mode, where the object file in question may be recompiled and
2612 dynamically reloaded in the course of program execution, without the need
2613 to restart the program itself.  Currently, Fix-and-Continue functionality
2614 is only available in conjunction with the NeXT runtime on Mac \s-1OS\s0 X 10.3
2615 and later.
2616 .IP "\fB\-fzero\-link\fR" 4
2617 .IX Item "-fzero-link"
2618 When compiling for the NeXT runtime, the compiler ordinarily replaces calls
2619 to \f(CW\*(C`objc_getClass("...")\*(C'\fR (when the name of the class is known at
2620 compile time) with static class references that get initialized at load time,
2621 which improves run-time performance.  Specifying the \fB\-fzero\-link\fR flag
2622 suppresses this behavior and causes calls to \f(CW\*(C`objc_getClass("...")\*(C'\fR
2623 to be retained.  This is useful in Zero-Link debugging mode, since it allows
2624 for individual class implementations to be modified during program execution.
2625 The \s-1GNU\s0 runtime currently always retains calls to \f(CW\*(C`objc_get_class("...")\*(C'\fR
2626 regardless of command-line options.
2627 .IP "\fB\-gen\-decls\fR" 4
2628 .IX Item "-gen-decls"
2629 Dump interface declarations for all classes seen in the source file to a
2630 file named \fI\fIsourcename\fI.decl\fR.
2631 .IP "\fB\-Wassign\-intercept\fR (Objective-C and Objective\-\*(C+ only)" 4
2632 .IX Item "-Wassign-intercept (Objective-C and Objective- only)"
2633 Warn whenever an Objective-C assignment is being intercepted by the
2634 garbage collector.
2635 .IP "\fB\-Wno\-protocol\fR (Objective-C and Objective\-\*(C+ only)" 4
2636 .IX Item "-Wno-protocol (Objective-C and Objective- only)"
2637 If a class is declared to implement a protocol, a warning is issued for
2638 every method in the protocol that is not implemented by the class.  The
2639 default behavior is to issue a warning for every method not explicitly
2640 implemented in the class, even if a method implementation is inherited
2641 from the superclass.  If you use the \fB\-Wno\-protocol\fR option, then
2642 methods inherited from the superclass are considered to be implemented,
2643 and no warning is issued for them.
2644 .IP "\fB\-Wselector\fR (Objective-C and Objective\-\*(C+ only)" 4
2645 .IX Item "-Wselector (Objective-C and Objective- only)"
2646 Warn if multiple methods of different types for the same selector are
2647 found during compilation.  The check is performed on the list of methods
2648 in the final stage of compilation.  Additionally, a check is performed
2649 for each selector appearing in a \f(CW\*(C`@selector(...)\*(C'\fR
2650 expression, and a corresponding method for that selector has been found
2651 during compilation.  Because these checks scan the method table only at
2652 the end of compilation, these warnings are not produced if the final
2653 stage of compilation is not reached, for example because an error is
2654 found during compilation, or because the \fB\-fsyntax\-only\fR option is
2655 being used.
2656 .IP "\fB\-Wstrict\-selector\-match\fR (Objective-C and Objective\-\*(C+ only)" 4
2657 .IX Item "-Wstrict-selector-match (Objective-C and Objective- only)"
2658 Warn if multiple methods with differing argument and/or return types are
2659 found for a given selector when attempting to send a message using this
2660 selector to a receiver of type \f(CW\*(C`id\*(C'\fR or \f(CW\*(C`Class\*(C'\fR.  When this flag
2661 is off (which is the default behavior), the compiler will omit such warnings
2662 if any differences found are confined to types that share the same size
2663 and alignment.
2664 .IP "\fB\-Wundeclared\-selector\fR (Objective-C and Objective\-\*(C+ only)" 4
2665 .IX Item "-Wundeclared-selector (Objective-C and Objective- only)"
2666 Warn if a \f(CW\*(C`@selector(...)\*(C'\fR expression referring to an
2667 undeclared selector is found.  A selector is considered undeclared if no
2668 method with that name has been declared before the
2669 \&\f(CW\*(C`@selector(...)\*(C'\fR expression, either explicitly in an
2670 \&\f(CW@interface\fR or \f(CW@protocol\fR declaration, or implicitly in
2671 an \f(CW@implementation\fR section.  This option always performs its
2672 checks as soon as a \f(CW\*(C`@selector(...)\*(C'\fR expression is found,
2673 while \fB\-Wselector\fR only performs its checks in the final stage of
2674 compilation.  This also enforces the coding style convention
2675 that methods and selectors must be declared before being used.
2676 .IP "\fB\-print\-objc\-runtime\-info\fR" 4
2677 .IX Item "-print-objc-runtime-info"
2678 Generate C header describing the largest structure that is passed by
2679 value, if any.
2680 .Sh "Options to Control Diagnostic Messages Formatting"
2681 .IX Subsection "Options to Control Diagnostic Messages Formatting"
2682 Traditionally, diagnostic messages have been formatted irrespective of
2683 the output device's aspect (e.g. its width, ...).  The options described
2684 below can be used to control the diagnostic messages formatting
2685 algorithm, e.g. how many characters per line, how often source location
2686 information should be reported.  Right now, only the \*(C+ front end can
2687 honor these options.  However it is expected, in the near future, that
2688 the remaining front ends would be able to digest them correctly.
2689 .IP "\fB\-fmessage\-length=\fR\fIn\fR" 4
2690 .IX Item "-fmessage-length=n"
2691 Try to format error messages so that they fit on lines of about \fIn\fR
2692 characters.  The default is 72 characters for \fBg++\fR and 0 for the rest of
2693 the front ends supported by \s-1GCC\s0.  If \fIn\fR is zero, then no
2694 line-wrapping will be done; each error message will appear on a single
2695 line.
2696 .IP "\fB\-fdiagnostics\-show\-location=once\fR" 4
2697 .IX Item "-fdiagnostics-show-location=once"
2698 Only meaningful in line-wrapping mode.  Instructs the diagnostic messages
2699 reporter to emit \fIonce\fR source location information; that is, in
2700 case the message is too long to fit on a single physical line and has to
2701 be wrapped, the source location won't be emitted (as prefix) again,
2702 over and over, in subsequent continuation lines.  This is the default
2703 behavior.
2704 .IP "\fB\-fdiagnostics\-show\-location=every\-line\fR" 4
2705 .IX Item "-fdiagnostics-show-location=every-line"
2706 Only meaningful in line-wrapping mode.  Instructs the diagnostic
2707 messages reporter to emit the same source location information (as
2708 prefix) for physical lines that result from the process of breaking
2709 a message which is too long to fit on a single line.
2710 .IP "\fB\-fno\-diagnostics\-show\-option\fR" 4
2711 .IX Item "-fno-diagnostics-show-option"
2712 By default, each diagnostic emitted includes text indicating the
2713 command-line option that directly controls the diagnostic (if such an
2714 option is known to the diagnostic machinery).  Specifying the
2715 \&\fB\-fno\-diagnostics\-show\-option\fR flag suppresses that behavior.
2716 .Sh "Options to Request or Suppress Warnings"
2717 .IX Subsection "Options to Request or Suppress Warnings"
2718 Warnings are diagnostic messages that report constructions that
2719 are not inherently erroneous but that are risky or suggest there
2720 may have been an error.
2721 .PP
2722 The following language-independent options do not enable specific
2723 warnings but control the kinds of diagnostics produced by \s-1GCC\s0.
2724 .IP "\fB\-fsyntax\-only\fR" 4
2725 .IX Item "-fsyntax-only"
2726 Check the code for syntax errors, but don't do anything beyond that.
2727 .IP "\fB\-fmax\-errors=\fR\fIn\fR" 4
2728 .IX Item "-fmax-errors=n"
2729 Limits the maximum number of error messages to \fIn\fR, at which point
2730 \&\s-1GCC\s0 bails out rather than attempting to continue processing the source
2731 code.  If \fIn\fR is 0 (the default), there is no limit on the number
2732 of error messages produced.  If \fB\-Wfatal\-errors\fR is also
2733 specified, then \fB\-Wfatal\-errors\fR takes precedence over this
2734 option.
2735 .IP "\fB\-w\fR" 4
2736 .IX Item "-w"
2737 Inhibit all warning messages.
2738 .IP "\fB\-Werror\fR" 4
2739 .IX Item "-Werror"
2740 Make all warnings into errors.
2741 .IP "\fB\-Werror=\fR" 4
2742 .IX Item "-Werror="
2743 Make the specified warning into an error.  The specifier for a warning
2744 is appended, for example \fB\-Werror=switch\fR turns the warnings
2745 controlled by \fB\-Wswitch\fR into errors.  This switch takes a
2746 negative form, to be used to negate \fB\-Werror\fR for specific
2747 warnings, for example \fB\-Wno\-error=switch\fR makes
2748 \&\fB\-Wswitch\fR warnings not be errors, even when \fB\-Werror\fR
2749 is in effect.
2750 .Sp
2751 The warning message for each controllable warning includes the
2752 option that controls the warning.  That option can then be used with
2753 \&\fB\-Werror=\fR and \fB\-Wno\-error=\fR as described above.
2754 (Printing of the option in the warning message can be disabled using the
2755 \&\fB\-fno\-diagnostics\-show\-option\fR flag.)
2756 .Sp
2757 Note that specifying \fB\-Werror=\fR\fIfoo\fR automatically implies
2758 \&\fB\-W\fR\fIfoo\fR.  However, \fB\-Wno\-error=\fR\fIfoo\fR does not
2759 imply anything.
2760 .IP "\fB\-Wfatal\-errors\fR" 4
2761 .IX Item "-Wfatal-errors"
2762 This option causes the compiler to abort compilation on the first error
2763 occurred rather than trying to keep going and printing further error
2764 messages.
2765 .PP
2766 You can request many specific warnings with options beginning
2767 \&\fB\-W\fR, for example \fB\-Wimplicit\fR to request warnings on
2768 implicit declarations.  Each of these specific warning options also
2769 has a negative form beginning \fB\-Wno\-\fR to turn off warnings; for
2770 example, \fB\-Wno\-implicit\fR.  This manual lists only one of the
2771 two forms, whichever is not the default.  For further,
2772 language-specific options also refer to \fB\*(C+ Dialect Options\fR and
2773 \&\fBObjective-C and Objective\-\*(C+ Dialect Options\fR.
2774 .PP
2775 When an unrecognized warning option is requested (e.g.,
2776 \&\fB\-Wunknown\-warning\fR), \s-1GCC\s0 will emit a diagnostic stating
2777 that the option is not recognized.  However, if the \fB\-Wno\-\fR form
2778 is used, the behavior is slightly different: No diagnostic will be
2779 produced for \fB\-Wno\-unknown\-warning\fR unless other diagnostics
2780 are being produced.  This allows the use of new \fB\-Wno\-\fR options
2781 with old compilers, but if something goes wrong, the compiler will
2782 warn that an unrecognized option was used.
2783 .IP "\fB\-pedantic\fR" 4
2784 .IX Item "-pedantic"
2785 Issue all the warnings demanded by strict \s-1ISO\s0 C and \s-1ISO\s0 \*(C+;
2786 reject all programs that use forbidden extensions, and some other
2787 programs that do not follow \s-1ISO\s0 C and \s-1ISO\s0 \*(C+.  For \s-1ISO\s0 C, follows the
2788 version of the \s-1ISO\s0 C standard specified by any \fB\-std\fR option used.
2789 .Sp
2790 Valid \s-1ISO\s0 C and \s-1ISO\s0 \*(C+ programs should compile properly with or without
2791 this option (though a rare few will require \fB\-ansi\fR or a
2792 \&\fB\-std\fR option specifying the required version of \s-1ISO\s0 C).  However,
2793 without this option, certain \s-1GNU\s0 extensions and traditional C and \*(C+
2794 features are supported as well.  With this option, they are rejected.
2795 .Sp
2796 \&\fB\-pedantic\fR does not cause warning messages for use of the
2797 alternate keywords whose names begin and end with \fB_\|_\fR.  Pedantic
2798 warnings are also disabled in the expression that follows
2799 \&\f(CW\*(C`_\|_extension_\|_\*(C'\fR.  However, only system header files should use
2800 these escape routes; application programs should avoid them.
2801 .Sp
2802 Some users try to use \fB\-pedantic\fR to check programs for strict \s-1ISO\s0
2803 C conformance.  They soon find that it does not do quite what they want:
2804 it finds some non-ISO practices, but not all\-\-\-only those for which
2805 \&\s-1ISO\s0 C \fIrequires\fR a diagnostic, and some others for which
2806 diagnostics have been added.
2807 .Sp
2808 A feature to report any failure to conform to \s-1ISO\s0 C might be useful in
2809 some instances, but would require considerable additional work and would
2810 be quite different from \fB\-pedantic\fR.  We don't have plans to
2811 support such a feature in the near future.
2812 .Sp
2813 Where the standard specified with \fB\-std\fR represents a \s-1GNU\s0
2814 extended dialect of C, such as \fBgnu90\fR or \fBgnu99\fR, there is a
2815 corresponding \fIbase standard\fR, the version of \s-1ISO\s0 C on which the \s-1GNU\s0
2816 extended dialect is based.  Warnings from \fB\-pedantic\fR are given
2817 where they are required by the base standard.  (It would not make sense
2818 for such warnings to be given only for features not in the specified \s-1GNU\s0
2819 C dialect, since by definition the \s-1GNU\s0 dialects of C include all
2820 features the compiler supports with the given option, and there would be
2821 nothing to warn about.)
2822 .IP "\fB\-pedantic\-errors\fR" 4
2823 .IX Item "-pedantic-errors"
2824 Like \fB\-pedantic\fR, except that errors are produced rather than
2825 warnings.
2826 .IP "\fB\-Wall\fR" 4
2827 .IX Item "-Wall"
2828 This enables all the warnings about constructions that some users
2829 consider questionable, and that are easy to avoid (or modify to
2830 prevent the warning), even in conjunction with macros.  This also
2831 enables some language-specific warnings described in \fB\*(C+ Dialect
2832 Options\fR and \fBObjective-C and Objective\-\*(C+ Dialect Options\fR.
2833 .Sp
2834 \&\fB\-Wall\fR turns on the following warning flags:
2835 .Sp
2836 \&\fB\-Waddress   
2837 \&\-Warray\-bounds\fR (only with\fB \fR\fB\-O2\fR)  
2838 \&\fB\-Wc++11\-compat  
2839 \&\-Wchar\-subscripts  
2840 \&\-Wenum\-compare\fR (in C/Objc; this is on by default in \*(C+) 
2841 \&\fB\-Wimplicit\-int\fR (C and Objective-C only) 
2842 \&\fB\-Wimplicit\-function\-declaration\fR (C and Objective-C only) 
2843 \&\fB\-Wcomment  
2844 \&\-Wformat   
2845 \&\-Wmain\fR (only for C/ObjC and unless\fB \fR\fB\-ffreestanding\fR)  
2846 \&\fB\-Wmaybe\-uninitialized 
2847 \&\-Wmissing\-braces  
2848 \&\-Wnonnull  
2849 \&\-Wparentheses  
2850 \&\-Wpointer\-sign  
2851 \&\-Wreorder   
2852 \&\-Wreturn\-type  
2853 \&\-Wsequence\-point  
2854 \&\-Wsign\-compare\fR (only in \*(C+)  
2855 \&\fB\-Wstrict\-aliasing  
2856 \&\-Wstrict\-overflow=1  
2857 \&\-Wswitch  
2858 \&\-Wtrigraphs  
2859 \&\-Wuninitialized  
2860 \&\-Wunknown\-pragmas  
2861 \&\-Wunused\-function  
2862 \&\-Wunused\-label     
2863 \&\-Wunused\-value     
2864 \&\-Wunused\-variable  
2865 \&\-Wvolatile\-register\-var\fR
2866 .Sp
2867 Note that some warning flags are not implied by \fB\-Wall\fR.  Some of
2868 them warn about constructions that users generally do not consider
2869 questionable, but which occasionally you might wish to check for;
2870 others warn about constructions that are necessary or hard to avoid in
2871 some cases, and there is no simple way to modify the code to suppress
2872 the warning. Some of them are enabled by \fB\-Wextra\fR but many of
2873 them must be enabled individually.
2874 .IP "\fB\-Wextra\fR" 4
2875 .IX Item "-Wextra"
2876 This enables some extra warning flags that are not enabled by
2877 \&\fB\-Wall\fR. (This option used to be called \fB\-W\fR.  The older
2878 name is still supported, but the newer name is more descriptive.)
2879 .Sp
2880 \&\fB\-Wclobbered  
2881 \&\-Wempty\-body  
2882 \&\-Wignored\-qualifiers 
2883 \&\-Wmissing\-field\-initializers  
2884 \&\-Wmissing\-parameter\-type\fR (C only)  
2885 \&\fB\-Wold\-style\-declaration\fR (C only)  
2886 \&\fB\-Woverride\-init  
2887 \&\-Wsign\-compare  
2888 \&\-Wtype\-limits  
2889 \&\-Wuninitialized  
2890 \&\-Wunused\-parameter\fR (only with\fB \fR\fB\-Wunused\fR\fB \fRor\fB \fR\fB\-Wall\fR) 
2891 \&\fB\-Wunused\-but\-set\-parameter\fR (only with\fB \fR\fB\-Wunused\fR\fB \fRor\fB \fR\fB\-Wall\fR)  \fB \fR
2892 .Sp
2893 The option \fB\-Wextra\fR also prints warning messages for the
2894 following cases:
2895 .RS 4
2896 .IP "\(bu" 4
2897 A pointer is compared against integer zero with \fB<\fR, \fB<=\fR,
2898 \&\fB>\fR, or \fB>=\fR.
2899 .IP "\(bu" 4
2900 (\*(C+ only) An enumerator and a non-enumerator both appear in a
2901 conditional expression.
2902 .IP "\(bu" 4
2903 (\*(C+ only) Ambiguous virtual bases.
2904 .IP "\(bu" 4
2905 (\*(C+ only) Subscripting an array that has been declared \fBregister\fR.
2906 .IP "\(bu" 4
2907 (\*(C+ only) Taking the address of a variable that has been declared
2908 \&\fBregister\fR.
2909 .IP "\(bu" 4
2910 (\*(C+ only) A base class is not initialized in a derived class' copy
2911 constructor.
2912 .RE
2913 .RS 4
2914 .RE
2915 .IP "\fB\-Wchar\-subscripts\fR" 4
2916 .IX Item "-Wchar-subscripts"
2917 Warn if an array subscript has type \f(CW\*(C`char\*(C'\fR.  This is a common cause
2918 of error, as programmers often forget that this type is signed on some
2919 machines.
2920 This warning is enabled by \fB\-Wall\fR.
2921 .IP "\fB\-Wcomment\fR" 4
2922 .IX Item "-Wcomment"
2923 Warn whenever a comment-start sequence \fB/*\fR appears in a \fB/*\fR
2924 comment, or whenever a Backslash-Newline appears in a \fB//\fR comment.
2925 This warning is enabled by \fB\-Wall\fR.
2926 .IP "\fB\-Wno\-coverage\-mismatch\fR" 4
2927 .IX Item "-Wno-coverage-mismatch"
2928 Warn if feedback profiles do not match when using the
2929 \&\fB\-fprofile\-use\fR option.
2930 If a source file was changed between \fB\-fprofile\-gen\fR and
2931 \&\fB\-fprofile\-use\fR, the files with the profile feedback can fail
2932 to match the source file and \s-1GCC\s0 cannot use the profile feedback
2933 information.  By default, this warning is enabled and is treated as an
2934 error.  \fB\-Wno\-coverage\-mismatch\fR can be used to disable the
2935 warning or \fB\-Wno\-error=coverage\-mismatch\fR can be used to
2936 disable the error.  Disabling the error for this warning can result in
2937 poorly optimized code and is useful only in the
2938 case of very minor changes such as bug fixes to an existing code-base.
2939 Completely disabling the warning is not recommended.
2940 .IP "\fB\-Wno\-cpp\fR" 4
2941 .IX Item "-Wno-cpp"
2942 (C, Objective-C, \*(C+, Objective\-\*(C+ and Fortran only)
2943 .Sp
2944 Suppress warning messages emitted by \f(CW\*(C`#warning\*(C'\fR directives.
2945 .IP "\fB\-Wdouble\-promotion\fR (C, \*(C+, Objective-C and Objective\-\*(C+ only)" 4
2946 .IX Item "-Wdouble-promotion (C, , Objective-C and Objective- only)"
2947 Give a warning when a value of type \f(CW\*(C`float\*(C'\fR is implicitly
2948 promoted to \f(CW\*(C`double\*(C'\fR.  CPUs with a 32\-bit \*(L"single-precision\*(R"
2949 floating-point unit implement \f(CW\*(C`float\*(C'\fR in hardware, but emulate
2950 \&\f(CW\*(C`double\*(C'\fR in software.  On such a machine, doing computations
2951 using \f(CW\*(C`double\*(C'\fR values is much more expensive because of the
2952 overhead required for software emulation.
2953 .Sp
2954 It is easy to accidentally do computations with \f(CW\*(C`double\*(C'\fR because
2955 floating-point literals are implicitly of type \f(CW\*(C`double\*(C'\fR.  For
2956 example, in:
2957 .Sp
2958 .Vb 4
2959 \&        float area(float radius)
2960 \&        {
2961 \&           return 3.14159 * radius * radius;
2962 \&        }
2963 .Ve
2964 .Sp
2965 the compiler will perform the entire computation with \f(CW\*(C`double\*(C'\fR
2966 because the floating-point literal is a \f(CW\*(C`double\*(C'\fR.
2967 .IP "\fB\-Wformat\fR" 4
2968 .IX Item "-Wformat"
2969 Check calls to \f(CW\*(C`printf\*(C'\fR and \f(CW\*(C`scanf\*(C'\fR, etc., to make sure that
2970 the arguments supplied have types appropriate to the format string
2971 specified, and that the conversions specified in the format string make
2972 sense.  This includes standard functions, and others specified by format
2973 attributes, in the \f(CW\*(C`printf\*(C'\fR,
2974 \&\f(CW\*(C`scanf\*(C'\fR, \f(CW\*(C`strftime\*(C'\fR and \f(CW\*(C`strfmon\*(C'\fR (an X/Open extension,
2975 not in the C standard) families (or other target-specific families).
2976 Which functions are checked without format attributes having been
2977 specified depends on the standard version selected, and such checks of
2978 functions without the attribute specified are disabled by
2979 \&\fB\-ffreestanding\fR or \fB\-fno\-builtin\fR.
2980 .Sp
2981 The formats are checked against the format features supported by \s-1GNU\s0
2982 libc version 2.2.  These include all \s-1ISO\s0 C90 and C99 features, as well
2983 as features from the Single Unix Specification and some \s-1BSD\s0 and \s-1GNU\s0
2984 extensions.  Other library implementations may not support all these
2985 features; \s-1GCC\s0 does not support warning about features that go beyond a
2986 particular library's limitations.  However, if \fB\-pedantic\fR is used
2987 with \fB\-Wformat\fR, warnings will be given about format features not
2988 in the selected standard version (but not for \f(CW\*(C`strfmon\*(C'\fR formats,
2989 since those are not in any version of the C standard).
2990 .Sp
2991 Since \fB\-Wformat\fR also checks for null format arguments for
2992 several functions, \fB\-Wformat\fR also implies \fB\-Wnonnull\fR.
2993 .Sp
2994 \&\fB\-Wformat\fR is included in \fB\-Wall\fR.  For more control over some
2995 aspects of format checking, the options \fB\-Wformat\-y2k\fR,
2996 \&\fB\-Wno\-format\-extra\-args\fR, \fB\-Wno\-format\-zero\-length\fR,
2997 \&\fB\-Wformat\-nonliteral\fR, \fB\-Wformat\-security\fR, and
2998 \&\fB\-Wformat=2\fR are available, but are not included in \fB\-Wall\fR.
2999 .IP "\fB\-Wformat\-y2k\fR" 4
3000 .IX Item "-Wformat-y2k"
3001 If \fB\-Wformat\fR is specified, also warn about \f(CW\*(C`strftime\*(C'\fR
3002 formats that may yield only a two-digit year.
3003 .IP "\fB\-Wno\-format\-contains\-nul\fR" 4
3004 .IX Item "-Wno-format-contains-nul"
3005 If \fB\-Wformat\fR is specified, do not warn about format strings that
3006 contain \s-1NUL\s0 bytes.
3007 .IP "\fB\-Wno\-format\-extra\-args\fR" 4
3008 .IX Item "-Wno-format-extra-args"
3009 If \fB\-Wformat\fR is specified, do not warn about excess arguments to a
3010 \&\f(CW\*(C`printf\*(C'\fR or \f(CW\*(C`scanf\*(C'\fR format function.  The C standard specifies
3011 that such arguments are ignored.
3012 .Sp
3013 Where the unused arguments lie between used arguments that are
3014 specified with \fB$\fR operand number specifications, normally
3015 warnings are still given, since the implementation could not know what
3016 type to pass to \f(CW\*(C`va_arg\*(C'\fR to skip the unused arguments.  However,
3017 in the case of \f(CW\*(C`scanf\*(C'\fR formats, this option will suppress the
3018 warning if the unused arguments are all pointers, since the Single
3019 Unix Specification says that such unused arguments are allowed.
3020 .IP "\fB\-Wno\-format\-zero\-length\fR" 4
3021 .IX Item "-Wno-format-zero-length"
3022 If \fB\-Wformat\fR is specified, do not warn about zero-length formats.
3023 The C standard specifies that zero-length formats are allowed.
3024 .IP "\fB\-Wformat\-nonliteral\fR" 4
3025 .IX Item "-Wformat-nonliteral"
3026 If \fB\-Wformat\fR is specified, also warn if the format string is not a
3027 string literal and so cannot be checked, unless the format function
3028 takes its format arguments as a \f(CW\*(C`va_list\*(C'\fR.
3029 .IP "\fB\-Wformat\-security\fR" 4
3030 .IX Item "-Wformat-security"
3031 If \fB\-Wformat\fR is specified, also warn about uses of format
3032 functions that represent possible security problems.  At present, this
3033 warns about calls to \f(CW\*(C`printf\*(C'\fR and \f(CW\*(C`scanf\*(C'\fR functions where the
3034 format string is not a string literal and there are no format arguments,
3035 as in \f(CW\*(C`printf (foo);\*(C'\fR.  This may be a security hole if the format
3036 string came from untrusted input and contains \fB\f(CB%n\fB\fR.  (This is
3037 currently a subset of what \fB\-Wformat\-nonliteral\fR warns about, but
3038 in future warnings may be added to \fB\-Wformat\-security\fR that are not
3039 included in \fB\-Wformat\-nonliteral\fR.)
3040 .IP "\fB\-Wformat=2\fR" 4
3041 .IX Item "-Wformat=2"
3042 Enable \fB\-Wformat\fR plus format checks not included in
3043 \&\fB\-Wformat\fR.  Currently equivalent to \fB\-Wformat
3044 \&\-Wformat\-nonliteral \-Wformat\-security \-Wformat\-y2k\fR.
3045 .IP "\fB\-Wnonnull\fR" 4
3046 .IX Item "-Wnonnull"
3047 Warn about passing a null pointer for arguments marked as
3048 requiring a non-null value by the \f(CW\*(C`nonnull\*(C'\fR function attribute.
3049 .Sp
3050 \&\fB\-Wnonnull\fR is included in \fB\-Wall\fR and \fB\-Wformat\fR.  It
3051 can be disabled with the \fB\-Wno\-nonnull\fR option.
3052 .IP "\fB\-Winit\-self\fR (C, \*(C+, Objective-C and Objective\-\*(C+ only)" 4
3053 .IX Item "-Winit-self (C, , Objective-C and Objective- only)"
3054 Warn about uninitialized variables that are initialized with themselves.
3055 Note this option can only be used with the \fB\-Wuninitialized\fR option.
3056 .Sp
3057 For example, \s-1GCC\s0 will warn about \f(CW\*(C`i\*(C'\fR being uninitialized in the
3058 following snippet only when \fB\-Winit\-self\fR has been specified:
3059 .Sp
3060 .Vb 5
3061 \&        int f()
3062 \&        {
3063 \&          int i = i;
3064 \&          return i;
3065 \&        }
3066 .Ve
3067 .IP "\fB\-Wimplicit\-int\fR (C and Objective-C only)" 4
3068 .IX Item "-Wimplicit-int (C and Objective-C only)"
3069 Warn when a declaration does not specify a type.
3070 This warning is enabled by \fB\-Wall\fR.
3071 .IP "\fB\-Wimplicit\-function\-declaration\fR (C and Objective-C only)" 4
3072 .IX Item "-Wimplicit-function-declaration (C and Objective-C only)"
3073 Give a warning whenever a function is used before being declared. In
3074 C99 mode (\fB\-std=c99\fR or \fB\-std=gnu99\fR), this warning is
3075 enabled by default and it is made into an error by
3076 \&\fB\-pedantic\-errors\fR. This warning is also enabled by
3077 \&\fB\-Wall\fR.
3078 .IP "\fB\-Wimplicit\fR (C and Objective-C only)" 4
3079 .IX Item "-Wimplicit (C and Objective-C only)"
3080 Same as \fB\-Wimplicit\-int\fR and \fB\-Wimplicit\-function\-declaration\fR.
3081 This warning is enabled by \fB\-Wall\fR.
3082 .IP "\fB\-Wignored\-qualifiers\fR (C and \*(C+ only)" 4
3083 .IX Item "-Wignored-qualifiers (C and  only)"
3084 Warn if the return type of a function has a type qualifier
3085 such as \f(CW\*(C`const\*(C'\fR.  For \s-1ISO\s0 C such a type qualifier has no effect,
3086 since the value returned by a function is not an lvalue.
3087 For \*(C+, the warning is only emitted for scalar types or \f(CW\*(C`void\*(C'\fR.
3088 \&\s-1ISO\s0 C prohibits qualified \f(CW\*(C`void\*(C'\fR return types on function
3089 definitions, so such return types always receive a warning
3090 even without this option.
3091 .Sp
3092 This warning is also enabled by \fB\-Wextra\fR.
3093 .IP "\fB\-Wmain\fR" 4
3094 .IX Item "-Wmain"
3095 Warn if the type of \fBmain\fR is suspicious.  \fBmain\fR should be
3096 a function with external linkage, returning int, taking either zero
3097 arguments, two, or three arguments of appropriate types.  This warning
3098 is enabled by default in \*(C+ and is enabled by either \fB\-Wall\fR
3099 or \fB\-pedantic\fR.
3100 .IP "\fB\-Wmissing\-braces\fR" 4
3101 .IX Item "-Wmissing-braces"
3102 Warn if an aggregate or union initializer is not fully bracketed.  In
3103 the following example, the initializer for \fBa\fR is not fully
3104 bracketed, but that for \fBb\fR is fully bracketed.
3105 .Sp
3106 .Vb 2
3107 \&        int a[2][2] = { 0, 1, 2, 3 };
3108 \&        int b[2][2] = { { 0, 1 }, { 2, 3 } };
3109 .Ve
3110 .Sp
3111 This warning is enabled by \fB\-Wall\fR.
3112 .IP "\fB\-Wmissing\-include\-dirs\fR (C, \*(C+, Objective-C and Objective\-\*(C+ only)" 4
3113 .IX Item "-Wmissing-include-dirs (C, , Objective-C and Objective- only)"
3114 Warn if a user-supplied include directory does not exist.
3115 .IP "\fB\-Wparentheses\fR" 4
3116 .IX Item "-Wparentheses"
3117 Warn if parentheses are omitted in certain contexts, such
3118 as when there is an assignment in a context where a truth value
3119 is expected, or when operators are nested whose precedence people
3120 often get confused about.
3121 .Sp
3122 Also warn if a comparison like \fBx<=y<=z\fR appears; this is
3123 equivalent to \fB(x<=y ? 1 : 0) <= z\fR, which is a different
3124 interpretation from that of ordinary mathematical notation.
3125 .Sp
3126 Also warn about constructions where there may be confusion to which
3127 \&\f(CW\*(C`if\*(C'\fR statement an \f(CW\*(C`else\*(C'\fR branch belongs.  Here is an example of
3128 such a case:
3129 .Sp
3130 .Vb 7
3131 \&        {
3132 \&          if (a)
3133 \&            if (b)
3134 \&              foo ();
3135 \&          else
3136 \&            bar ();
3137 \&        }
3138 .Ve
3139 .Sp
3140 In C/\*(C+, every \f(CW\*(C`else\*(C'\fR branch belongs to the innermost possible
3141 \&\f(CW\*(C`if\*(C'\fR statement, which in this example is \f(CW\*(C`if (b)\*(C'\fR.  This is
3142 often not what the programmer expected, as illustrated in the above
3143 example by indentation the programmer chose.  When there is the
3144 potential for this confusion, \s-1GCC\s0 will issue a warning when this flag
3145 is specified.  To eliminate the warning, add explicit braces around
3146 the innermost \f(CW\*(C`if\*(C'\fR statement so there is no way the \f(CW\*(C`else\*(C'\fR
3147 could belong to the enclosing \f(CW\*(C`if\*(C'\fR.  The resulting code would
3148 look like this:
3149 .Sp
3150 .Vb 9
3151 \&        {
3152 \&          if (a)
3153 \&            {
3154 \&              if (b)
3155 \&                foo ();
3156 \&              else
3157 \&                bar ();
3158 \&            }
3159 \&        }
3160 .Ve
3161 .Sp
3162 Also warn for dangerous uses of the
3163 ?: with omitted middle operand \s-1GNU\s0 extension. When the condition
3164 in the ?: operator is a boolean expression the omitted value will
3165 be always 1. Often the user expects it to be a value computed
3166 inside the conditional expression instead.
3167 .Sp
3168 This warning is enabled by \fB\-Wall\fR.
3169 .IP "\fB\-Wsequence\-point\fR" 4
3170 .IX Item "-Wsequence-point"
3171 Warn about code that may have undefined semantics because of violations
3172 of sequence point rules in the C and \*(C+ standards.
3173 .Sp
3174 The C and \*(C+ standards defines the order in which expressions in a C/\*(C+
3175 program are evaluated in terms of \fIsequence points\fR, which represent
3176 a partial ordering between the execution of parts of the program: those
3177 executed before the sequence point, and those executed after it.  These
3178 occur after the evaluation of a full expression (one which is not part
3179 of a larger expression), after the evaluation of the first operand of a
3180 \&\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
3181 function is called (but after the evaluation of its arguments and the
3182 expression denoting the called function), and in certain other places.
3183 Other than as expressed by the sequence point rules, the order of
3184 evaluation of subexpressions of an expression is not specified.  All
3185 these rules describe only a partial order rather than a total order,
3186 since, for example, if two functions are called within one expression
3187 with no sequence point between them, the order in which the functions
3188 are called is not specified.  However, the standards committee have
3189 ruled that function calls do not overlap.
3190 .Sp
3191 It is not specified when between sequence points modifications to the
3192 values of objects take effect.  Programs whose behavior depends on this
3193 have undefined behavior; the C and \*(C+ standards specify that \*(L"Between
3194 the previous and next sequence point an object shall have its stored
3195 value modified at most once by the evaluation of an expression.
3196 Furthermore, the prior value shall be read only to determine the value
3197 to be stored.\*(R".  If a program breaks these rules, the results on any
3198 particular implementation are entirely unpredictable.
3199 .Sp
3200 Examples of code with undefined behavior are \f(CW\*(C`a = a++;\*(C'\fR, \f(CW\*(C`a[n]
3201 = b[n++]\*(C'\fR and \f(CW\*(C`a[i++] = i;\*(C'\fR.  Some more complicated cases are not
3202 diagnosed by this option, and it may give an occasional false positive
3203 result, but in general it has been found fairly effective at detecting
3204 this sort of problem in programs.
3205 .Sp
3206 The standard is worded confusingly, therefore there is some debate
3207 over the precise meaning of the sequence point rules in subtle cases.
3208 Links to discussions of the problem, including proposed formal
3209 definitions, may be found on the \s-1GCC\s0 readings page, at
3210 <\fBhttp://gcc.gnu.org/readings.html\fR>.
3211 .Sp
3212 This warning is enabled by \fB\-Wall\fR for C and \*(C+.
3213 .IP "\fB\-Wreturn\-type\fR" 4
3214 .IX Item "-Wreturn-type"
3215 Warn whenever a function is defined with a return-type that defaults
3216 to \f(CW\*(C`int\*(C'\fR.  Also warn about any \f(CW\*(C`return\*(C'\fR statement with no
3217 return-value in a function whose return-type is not \f(CW\*(C`void\*(C'\fR
3218 (falling off the end of the function body is considered returning
3219 without a value), and about a \f(CW\*(C`return\*(C'\fR statement with an
3220 expression in a function whose return-type is \f(CW\*(C`void\*(C'\fR.
3221 .Sp
3222 For \*(C+, a function without return type always produces a diagnostic
3223 message, even when \fB\-Wno\-return\-type\fR is specified.  The only
3224 exceptions are \fBmain\fR and functions defined in system headers.
3225 .Sp
3226 This warning is enabled by \fB\-Wall\fR.
3227 .IP "\fB\-Wswitch\fR" 4
3228 .IX Item "-Wswitch"
3229 Warn whenever a \f(CW\*(C`switch\*(C'\fR statement has an index of enumerated type
3230 and lacks a \f(CW\*(C`case\*(C'\fR for one or more of the named codes of that
3231 enumeration.  (The presence of a \f(CW\*(C`default\*(C'\fR label prevents this
3232 warning.)  \f(CW\*(C`case\*(C'\fR labels outside the enumeration range also
3233 provoke warnings when this option is used (even if there is a
3234 \&\f(CW\*(C`default\*(C'\fR label).
3235 This warning is enabled by \fB\-Wall\fR.
3236 .IP "\fB\-Wswitch\-default\fR" 4
3237 .IX Item "-Wswitch-default"
3238 Warn whenever a \f(CW\*(C`switch\*(C'\fR statement does not have a \f(CW\*(C`default\*(C'\fR
3239 case.
3240 .IP "\fB\-Wswitch\-enum\fR" 4
3241 .IX Item "-Wswitch-enum"
3242 Warn whenever a \f(CW\*(C`switch\*(C'\fR statement has an index of enumerated type
3243 and lacks a \f(CW\*(C`case\*(C'\fR for one or more of the named codes of that
3244 enumeration.  \f(CW\*(C`case\*(C'\fR labels outside the enumeration range also
3245 provoke warnings when this option is used.  The only difference
3246 between \fB\-Wswitch\fR and this option is that this option gives a
3247 warning about an omitted enumeration code even if there is a
3248 \&\f(CW\*(C`default\*(C'\fR label.
3249 .IP "\fB\-Wsync\-nand\fR (C and \*(C+ only)" 4
3250 .IX Item "-Wsync-nand (C and  only)"
3251 Warn when \f(CW\*(C`_\|_sync_fetch_and_nand\*(C'\fR and \f(CW\*(C`_\|_sync_nand_and_fetch\*(C'\fR
3252 built-in functions are used.  These functions changed semantics in \s-1GCC\s0 4.4.
3253 .IP "\fB\-Wtrigraphs\fR" 4
3254 .IX Item "-Wtrigraphs"
3255 Warn if any trigraphs are encountered that might change the meaning of
3256 the program (trigraphs within comments are not warned about).
3257 This warning is enabled by \fB\-Wall\fR.
3258 .IP "\fB\-Wunused\-but\-set\-parameter\fR" 4
3259 .IX Item "-Wunused-but-set-parameter"
3260 Warn whenever a function parameter is assigned to, but otherwise unused
3261 (aside from its declaration).
3262 .Sp
3263 To suppress this warning use the \fBunused\fR attribute.
3264 .Sp
3265 This warning is also enabled by \fB\-Wunused\fR together with
3266 \&\fB\-Wextra\fR.
3267 .IP "\fB\-Wunused\-but\-set\-variable\fR" 4
3268 .IX Item "-Wunused-but-set-variable"
3269 Warn whenever a local variable is assigned to, but otherwise unused
3270 (aside from its declaration).
3271 This warning is enabled by \fB\-Wall\fR.
3272 .Sp
3273 To suppress this warning use the \fBunused\fR attribute.
3274 .Sp
3275 This warning is also enabled by \fB\-Wunused\fR, which is enabled
3276 by \fB\-Wall\fR.
3277 .IP "\fB\-Wunused\-function\fR" 4
3278 .IX Item "-Wunused-function"
3279 Warn whenever a static function is declared but not defined or a
3280 non-inline static function is unused.
3281 This warning is enabled by \fB\-Wall\fR.
3282 .IP "\fB\-Wunused\-label\fR" 4
3283 .IX Item "-Wunused-label"
3284 Warn whenever a label is declared but not used.
3285 This warning is enabled by \fB\-Wall\fR.
3286 .Sp
3287 To suppress this warning use the \fBunused\fR attribute.
3288 .IP "\fB\-Wunused\-local\-typedefs\fR (C, Objective-C, \*(C+ and Objective\-\*(C+ only)" 4
3289 .IX Item "-Wunused-local-typedefs (C, Objective-C,  and Objective- only)"
3290 Warn when a typedef locally defined in a function is not used.
3291 .IP "\fB\-Wunused\-parameter\fR" 4
3292 .IX Item "-Wunused-parameter"
3293 Warn whenever a function parameter is unused aside from its declaration.
3294 .Sp
3295 To suppress this warning use the \fBunused\fR attribute.
3296 .IP "\fB\-Wno\-unused\-result\fR" 4
3297 .IX Item "-Wno-unused-result"
3298 Do not warn if a caller of a function marked with attribute
3299 \&\f(CW\*(C`warn_unused_result\*(C'\fR does not use
3300 its return value. The default is \fB\-Wunused\-result\fR.
3301 .IP "\fB\-Wunused\-variable\fR" 4
3302 .IX Item "-Wunused-variable"
3303 Warn whenever a local variable or non-constant static variable is unused
3304 aside from its declaration.
3305 This warning is enabled by \fB\-Wall\fR.
3306 .Sp
3307 To suppress this warning use the \fBunused\fR attribute.
3308 .IP "\fB\-Wunused\-value\fR" 4
3309 .IX Item "-Wunused-value"
3310 Warn whenever a statement computes a result that is explicitly not
3311 used. To suppress this warning cast the unused expression to
3312 \&\fBvoid\fR. This includes an expression-statement or the left-hand
3313 side of a comma expression that contains no side effects. For example,
3314 an expression such as \fBx[i,j]\fR will cause a warning, while
3315 \&\fBx[(void)i,j]\fR will not.
3316 .Sp
3317 This warning is enabled by \fB\-Wall\fR.
3318 .IP "\fB\-Wunused\fR" 4
3319 .IX Item "-Wunused"
3320 All the above \fB\-Wunused\fR options combined.
3321 .Sp
3322 In order to get a warning about an unused function parameter, you must
3323 either specify \fB\-Wextra \-Wunused\fR (note that \fB\-Wall\fR implies
3324 \&\fB\-Wunused\fR), or separately specify \fB\-Wunused\-parameter\fR.
3325 .IP "\fB\-Wuninitialized\fR" 4
3326 .IX Item "-Wuninitialized"
3327 Warn if an automatic variable is used without first being initialized
3328 or if a variable may be clobbered by a \f(CW\*(C`setjmp\*(C'\fR call. In \*(C+,
3329 warn if a non-static reference or non-static \fBconst\fR member
3330 appears in a class without constructors.
3331 .Sp
3332 If you want to warn about code that uses the uninitialized value of the
3333 variable in its own initializer, use the \fB\-Winit\-self\fR option.
3334 .Sp
3335 These warnings occur for individual uninitialized or clobbered
3336 elements of structure, union or array variables as well as for
3337 variables that are uninitialized or clobbered as a whole.  They do
3338 not occur for variables or elements declared \f(CW\*(C`volatile\*(C'\fR.  Because
3339 these warnings depend on optimization, the exact variables or elements
3340 for which there are warnings will depend on the precise optimization
3341 options and version of \s-1GCC\s0 used.
3342 .Sp
3343 Note that there may be no warning about a variable that is used only
3344 to compute a value that itself is never used, because such
3345 computations may be deleted by data flow analysis before the warnings
3346 are printed.
3347 .IP "\fB\-Wmaybe\-uninitialized\fR" 4
3348 .IX Item "-Wmaybe-uninitialized"
3349 For an automatic variable, if there exists a path from the function
3350 entry to a use of the variable that is initialized, but there exist
3351 some other paths the variable is not initialized, the compiler will
3352 emit a warning if it can not prove the uninitialized paths do not
3353 happen at run time. These warnings are made optional because \s-1GCC\s0 is
3354 not smart enough to see all the reasons why the code might be correct
3355 despite appearing to have an error.  Here is one example of how
3356 this can happen:
3357 .Sp
3358 .Vb 12
3359 \&        {
3360 \&          int x;
3361 \&          switch (y)
3362 \&            {
3363 \&            case 1: x = 1;
3364 \&              break;
3365 \&            case 2: x = 4;
3366 \&              break;
3367 \&            case 3: x = 5;
3368 \&            }
3369 \&          foo (x);
3370 \&        }
3371 .Ve
3372 .Sp
3373 If the value of \f(CW\*(C`y\*(C'\fR is always 1, 2 or 3, then \f(CW\*(C`x\*(C'\fR is
3374 always initialized, but \s-1GCC\s0 doesn't know this. To suppress the
3375 warning, the user needs to provide a default case with \fIassert\fR\|(0) or
3376 similar code.
3377 .Sp
3378 This option also warns when a non-volatile automatic variable might be
3379 changed by a call to \f(CW\*(C`longjmp\*(C'\fR.  These warnings as well are possible
3380 only in optimizing compilation.
3381 .Sp
3382 The compiler sees only the calls to \f(CW\*(C`setjmp\*(C'\fR.  It cannot know
3383 where \f(CW\*(C`longjmp\*(C'\fR will be called; in fact, a signal handler could
3384 call it at any point in the code.  As a result, you may get a warning
3385 even when there is in fact no problem because \f(CW\*(C`longjmp\*(C'\fR cannot
3386 in fact be called at the place that would cause a problem.
3387 .Sp
3388 Some spurious warnings can be avoided if you declare all the functions
3389 you use that never return as \f(CW\*(C`noreturn\*(C'\fR.
3390 .Sp
3391 This warning is enabled by \fB\-Wall\fR or \fB\-Wextra\fR.
3392 .IP "\fB\-Wunknown\-pragmas\fR" 4
3393 .IX Item "-Wunknown-pragmas"
3394 Warn when a \f(CW\*(C`#pragma\*(C'\fR directive is encountered that is not understood by 
3395 \&\s-1GCC\s0.  If this command-line option is used, warnings will even be issued
3396 for unknown pragmas in system header files.  This is not the case if
3397 the warnings were only enabled by the \fB\-Wall\fR command-line option.
3398 .IP "\fB\-Wno\-pragmas\fR" 4
3399 .IX Item "-Wno-pragmas"
3400 Do not warn about misuses of pragmas, such as incorrect parameters,
3401 invalid syntax, or conflicts between pragmas.  See also
3402 \&\fB\-Wunknown\-pragmas\fR.
3403 .IP "\fB\-Wstrict\-aliasing\fR" 4
3404 .IX Item "-Wstrict-aliasing"
3405 This option is only active when \fB\-fstrict\-aliasing\fR is active.
3406 It warns about code that might break the strict aliasing rules that the
3407 compiler is using for optimization.  The warning does not catch all
3408 cases, but does attempt to catch the more common pitfalls.  It is
3409 included in \fB\-Wall\fR.
3410 It is equivalent to \fB\-Wstrict\-aliasing=3\fR
3411 .IP "\fB\-Wstrict\-aliasing=n\fR" 4
3412 .IX Item "-Wstrict-aliasing=n"
3413 This option is only active when \fB\-fstrict\-aliasing\fR is active.
3414 It warns about code that might break the strict aliasing rules that the
3415 compiler is using for optimization.
3416 Higher levels correspond to higher accuracy (fewer false positives).
3417 Higher levels also correspond to more effort, similar to the way \-O works.
3418 \&\fB\-Wstrict\-aliasing\fR is equivalent to \fB\-Wstrict\-aliasing=n\fR,
3419 with n=3.
3420 .Sp
3421 Level 1: Most aggressive, quick, least accurate.
3422 Possibly useful when higher levels
3423 do not warn but \-fstrict\-aliasing still breaks the code, as it has very few
3424 false negatives.  However, it has many false positives.
3425 Warns for all pointer conversions between possibly incompatible types,
3426 even if never dereferenced.  Runs in the front end only.
3427 .Sp
3428 Level 2: Aggressive, quick, not too precise.
3429 May still have many false positives (not as many as level 1 though),
3430 and few false negatives (but possibly more than level 1).
3431 Unlike level 1, it only warns when an address is taken.  Warns about
3432 incomplete types.  Runs in the front end only.
3433 .Sp
3434 Level 3 (default for \fB\-Wstrict\-aliasing\fR):
3435 Should have very few false positives and few false
3436 negatives.  Slightly slower than levels 1 or 2 when optimization is enabled.
3437 Takes care of the common pun+dereference pattern in the front end:
3438 \&\f(CW\*(C`*(int*)&some_float\*(C'\fR.
3439 If optimization is enabled, it also runs in the back end, where it deals
3440 with multiple statement cases using flow-sensitive points-to information.
3441 Only warns when the converted pointer is dereferenced.
3442 Does not warn about incomplete types.
3443 .IP "\fB\-Wstrict\-overflow\fR" 4
3444 .IX Item "-Wstrict-overflow"
3445 .PD 0
3446 .IP "\fB\-Wstrict\-overflow=\fR\fIn\fR" 4
3447 .IX Item "-Wstrict-overflow=n"
3448 .PD
3449 This option is only active when \fB\-fstrict\-overflow\fR is active.
3450 It warns about cases where the compiler optimizes based on the
3451 assumption that signed overflow does not occur.  Note that it does not
3452 warn about all cases where the code might overflow: it only warns
3453 about cases where the compiler implements some optimization.  Thus
3454 this warning depends on the optimization level.
3455 .Sp
3456 An optimization that assumes that signed overflow does not occur is
3457 perfectly safe if the values of the variables involved are such that
3458 overflow never does, in fact, occur.  Therefore this warning can
3459 easily give a false positive: a warning about code that is not
3460 actually a problem.  To help focus on important issues, several
3461 warning levels are defined.  No warnings are issued for the use of
3462 undefined signed overflow when estimating how many iterations a loop
3463 will require, in particular when determining whether a loop will be
3464 executed at all.
3465 .RS 4
3466 .IP "\fB\-Wstrict\-overflow=1\fR" 4
3467 .IX Item "-Wstrict-overflow=1"
3468 Warn about cases that are both questionable and easy to avoid.  For
3469 example: \f(CW\*(C`x + 1 > x\*(C'\fR; with \fB\-fstrict\-overflow\fR, the
3470 compiler will simplify this to \f(CW1\fR.  This level of
3471 \&\fB\-Wstrict\-overflow\fR is enabled by \fB\-Wall\fR; higher levels
3472 are not, and must be explicitly requested.
3473 .IP "\fB\-Wstrict\-overflow=2\fR" 4
3474 .IX Item "-Wstrict-overflow=2"
3475 Also warn about other cases where a comparison is simplified to a
3476 constant.  For example: \f(CW\*(C`abs (x) >= 0\*(C'\fR.  This can only be
3477 simplified when \fB\-fstrict\-overflow\fR is in effect, because
3478 \&\f(CW\*(C`abs (INT_MIN)\*(C'\fR overflows to \f(CW\*(C`INT_MIN\*(C'\fR, which is less than
3479 zero.  \fB\-Wstrict\-overflow\fR (with no level) is the same as
3480 \&\fB\-Wstrict\-overflow=2\fR.
3481 .IP "\fB\-Wstrict\-overflow=3\fR" 4
3482 .IX Item "-Wstrict-overflow=3"
3483 Also warn about other cases where a comparison is simplified.  For
3484 example: \f(CW\*(C`x + 1 > 1\*(C'\fR will be simplified to \f(CW\*(C`x > 0\*(C'\fR.
3485 .IP "\fB\-Wstrict\-overflow=4\fR" 4
3486 .IX Item "-Wstrict-overflow=4"
3487 Also warn about other simplifications not covered by the above cases.
3488 For example: \f(CW\*(C`(x * 10) / 5\*(C'\fR will be simplified to \f(CW\*(C`x * 2\*(C'\fR.
3489 .IP "\fB\-Wstrict\-overflow=5\fR" 4
3490 .IX Item "-Wstrict-overflow=5"
3491 Also warn about cases where the compiler reduces the magnitude of a
3492 constant involved in a comparison.  For example: \f(CW\*(C`x + 2 > y\*(C'\fR will
3493 be simplified to \f(CW\*(C`x + 1 >= y\*(C'\fR.  This is reported only at the
3494 highest warning level because this simplification applies to many
3495 comparisons, so this warning level will give a very large number of
3496 false positives.
3497 .RE
3498 .RS 4
3499 .RE
3500 .IP "\fB\-Wsuggest\-attribute=\fR[\fBpure\fR|\fBconst\fR|\fBnoreturn\fR]" 4
3501 .IX Item "-Wsuggest-attribute=[pure|const|noreturn]"
3502 Warn for cases where adding an attribute may be beneficial. The
3503 attributes currently supported are listed below.
3504 .RS 4
3505 .IP "\fB\-Wsuggest\-attribute=pure\fR" 4
3506 .IX Item "-Wsuggest-attribute=pure"
3507 .PD 0
3508 .IP "\fB\-Wsuggest\-attribute=const\fR" 4
3509 .IX Item "-Wsuggest-attribute=const"
3510 .IP "\fB\-Wsuggest\-attribute=noreturn\fR" 4
3511 .IX Item "-Wsuggest-attribute=noreturn"
3512 .PD
3513 Warn about functions that might be candidates for attributes
3514 \&\f(CW\*(C`pure\*(C'\fR, \f(CW\*(C`const\*(C'\fR or \f(CW\*(C`noreturn\*(C'\fR.  The compiler only warns for
3515 functions visible in other compilation units or (in the case of \f(CW\*(C`pure\*(C'\fR and
3516 \&\f(CW\*(C`const\*(C'\fR) if it cannot prove that the function returns normally. A function
3517 returns normally if it doesn't contain an infinite loop nor returns abnormally
3518 by throwing, calling \f(CW\*(C`abort()\*(C'\fR or trapping.  This analysis requires option
3519 \&\fB\-fipa\-pure\-const\fR, which is enabled by default at \fB\-O\fR and
3520 higher.  Higher optimization levels improve the accuracy of the analysis.
3521 .RE
3522 .RS 4
3523 .RE
3524 .IP "\fB\-Warray\-bounds\fR" 4
3525 .IX Item "-Warray-bounds"
3526 This option is only active when \fB\-ftree\-vrp\fR is active
3527 (default for \fB\-O2\fR and above). It warns about subscripts to arrays
3528 that are always out of bounds. This warning is enabled by \fB\-Wall\fR.
3529 .IP "\fB\-Wno\-div\-by\-zero\fR" 4
3530 .IX Item "-Wno-div-by-zero"
3531 Do not warn about compile-time integer division by zero.  Floating-point
3532 division by zero is not warned about, as it can be a legitimate way of
3533 obtaining infinities and NaNs.
3534 .IP "\fB\-Wsystem\-headers\fR" 4
3535 .IX Item "-Wsystem-headers"
3536 Print warning messages for constructs found in system header files.
3537 Warnings from system headers are normally suppressed, on the assumption
3538 that they usually do not indicate real problems and would only make the
3539 compiler output harder to read.  Using this command-line option tells
3540 \&\s-1GCC\s0 to emit warnings from system headers as if they occurred in user
3541 code.  However, note that using \fB\-Wall\fR in conjunction with this
3542 option will \fInot\fR warn about unknown pragmas in system
3543 headers\-\-\-for that, \fB\-Wunknown\-pragmas\fR must also be used.
3544 .IP "\fB\-Wtrampolines\fR" 4
3545 .IX Item "-Wtrampolines"
3546 .Vb 1
3547 \& Warn about trampolines generated for pointers to nested functions.
3548 \&
3549 \& A trampoline is a small piece of data or code that is created at run
3550 \& time on the stack when the address of a nested function is taken, and
3551 \& is used to call the nested function indirectly.  For some targets, it
3552 \& is made up of data only and thus requires no special treatment.  But,
3553 \& for most targets, it is made up of code and thus requires the stack
3554 \& to be made executable in order for the program to work properly.
3555 .Ve
3556 .IP "\fB\-Wfloat\-equal\fR" 4
3557 .IX Item "-Wfloat-equal"
3558 Warn if floating-point values are used in equality comparisons.
3559 .Sp
3560 The idea behind this is that sometimes it is convenient (for the
3561 programmer) to consider floating-point values as approximations to
3562 infinitely precise real numbers.  If you are doing this, then you need
3563 to compute (by analyzing the code, or in some other way) the maximum or
3564 likely maximum error that the computation introduces, and allow for it
3565 when performing comparisons (and when producing output, but that's a
3566 different problem).  In particular, instead of testing for equality, you
3567 would check to see whether the two values have ranges that overlap; and
3568 this is done with the relational operators, so equality comparisons are
3569 probably mistaken.
3570 .IP "\fB\-Wtraditional\fR (C and Objective-C only)" 4
3571 .IX Item "-Wtraditional (C and Objective-C only)"
3572 Warn about certain constructs that behave differently in traditional and
3573 \&\s-1ISO\s0 C.  Also warn about \s-1ISO\s0 C constructs that have no traditional C
3574 equivalent, and/or problematic constructs that should be avoided.
3575 .RS 4
3576 .IP "\(bu" 4
3577 Macro parameters that appear within string literals in the macro body.
3578 In traditional C macro replacement takes place within string literals,
3579 but does not in \s-1ISO\s0 C.
3580 .IP "\(bu" 4
3581 In traditional C, some preprocessor directives did not exist.
3582 Traditional preprocessors would only consider a line to be a directive
3583 if the \fB#\fR appeared in column 1 on the line.  Therefore
3584 \&\fB\-Wtraditional\fR warns about directives that traditional C
3585 understands but would ignore because the \fB#\fR does not appear as the
3586 first character on the line.  It also suggests you hide directives like
3587 \&\fB#pragma\fR not understood by traditional C by indenting them.  Some
3588 traditional implementations would not recognize \fB#elif\fR, so it
3589 suggests avoiding it altogether.
3590 .IP "\(bu" 4
3591 A function-like macro that appears without arguments.
3592 .IP "\(bu" 4
3593 The unary plus operator.
3594 .IP "\(bu" 4
3595 The \fBU\fR integer constant suffix, or the \fBF\fR or \fBL\fR floating-point
3596 constant suffixes.  (Traditional C does support the \fBL\fR suffix on integer
3597 constants.)  Note, these suffixes appear in macros defined in the system
3598 headers of most modern systems, e.g. the \fB_MIN\fR/\fB_MAX\fR macros in \f(CW\*(C`<limits.h>\*(C'\fR.
3599 Use of these macros in user code might normally lead to spurious
3600 warnings, however \s-1GCC\s0's integrated preprocessor has enough context to
3601 avoid warning in these cases.
3602 .IP "\(bu" 4
3603 A function declared external in one block and then used after the end of
3604 the block.
3605 .IP "\(bu" 4
3606 A \f(CW\*(C`switch\*(C'\fR statement has an operand of type \f(CW\*(C`long\*(C'\fR.
3607 .IP "\(bu" 4
3608 A non\-\f(CW\*(C`static\*(C'\fR function declaration follows a \f(CW\*(C`static\*(C'\fR one.
3609 This construct is not accepted by some traditional C compilers.
3610 .IP "\(bu" 4
3611 The \s-1ISO\s0 type of an integer constant has a different width or
3612 signedness from its traditional type.  This warning is only issued if
3613 the base of the constant is ten.  I.e. hexadecimal or octal values, which
3614 typically represent bit patterns, are not warned about.
3615 .IP "\(bu" 4
3616 Usage of \s-1ISO\s0 string concatenation is detected.
3617 .IP "\(bu" 4
3618 Initialization of automatic aggregates.
3619 .IP "\(bu" 4
3620 Identifier conflicts with labels.  Traditional C lacks a separate
3621 namespace for labels.
3622 .IP "\(bu" 4
3623 Initialization of unions.  If the initializer is zero, the warning is
3624 omitted.  This is done under the assumption that the zero initializer in
3625 user code appears conditioned on e.g. \f(CW\*(C`_\|_STDC_\|_\*(C'\fR to avoid missing
3626 initializer warnings and relies on default initialization to zero in the
3627 traditional C case.
3628 .IP "\(bu" 4
3629 Conversions by prototypes between fixed/floating\-point values and vice
3630 versa.  The absence of these prototypes when compiling with traditional
3631 C would cause serious problems.  This is a subset of the possible
3632 conversion warnings, for the full set use \fB\-Wtraditional\-conversion\fR.
3633 .IP "\(bu" 4
3634 Use of \s-1ISO\s0 C style function definitions.  This warning intentionally is
3635 \&\fInot\fR issued for prototype declarations or variadic functions
3636 because these \s-1ISO\s0 C features will appear in your code when using
3637 libiberty's traditional C compatibility macros, \f(CW\*(C`PARAMS\*(C'\fR and
3638 \&\f(CW\*(C`VPARAMS\*(C'\fR.  This warning is also bypassed for nested functions
3639 because that feature is already a \s-1GCC\s0 extension and thus not relevant to
3640 traditional C compatibility.
3641 .RE
3642 .RS 4
3643 .RE
3644 .IP "\fB\-Wtraditional\-conversion\fR (C and Objective-C only)" 4
3645 .IX Item "-Wtraditional-conversion (C and Objective-C only)"
3646 Warn if a prototype causes a type conversion that is different from what
3647 would happen to the same argument in the absence of a prototype.  This
3648 includes conversions of fixed point to floating and vice versa, and
3649 conversions changing the width or signedness of a fixed-point argument
3650 except when the same as the default promotion.
3651 .IP "\fB\-Wdeclaration\-after\-statement\fR (C and Objective-C only)" 4
3652 .IX Item "-Wdeclaration-after-statement (C and Objective-C only)"
3653 Warn when a declaration is found after a statement in a block.  This
3654 construct, known from \*(C+, was introduced with \s-1ISO\s0 C99 and is by default
3655 allowed in \s-1GCC\s0.  It is not supported by \s-1ISO\s0 C90 and was not supported by
3656 \&\s-1GCC\s0 versions before \s-1GCC\s0 3.0.
3657 .IP "\fB\-Wundef\fR" 4
3658 .IX Item "-Wundef"
3659 Warn if an undefined identifier is evaluated in an \fB#if\fR directive.
3660 .IP "\fB\-Wno\-endif\-labels\fR" 4
3661 .IX Item "-Wno-endif-labels"
3662 Do not warn whenever an \fB#else\fR or an \fB#endif\fR are followed by text.
3663 .IP "\fB\-Wshadow\fR" 4
3664 .IX Item "-Wshadow"
3665 Warn whenever a local variable or type declaration shadows another variable,
3666 parameter, type, or class member (in \*(C+), or whenever a built-in function
3667 is shadowed. Note that in \*(C+, the compiler will not warn if a local variable
3668 shadows a struct/class/enum, but will warn if it shadows an explicit typedef.
3669 .IP "\fB\-Wlarger\-than=\fR\fIlen\fR" 4
3670 .IX Item "-Wlarger-than=len"
3671 Warn whenever an object of larger than \fIlen\fR bytes is defined.
3672 .IP "\fB\-Wframe\-larger\-than=\fR\fIlen\fR" 4
3673 .IX Item "-Wframe-larger-than=len"
3674 Warn if the size of a function frame is larger than \fIlen\fR bytes.
3675 The computation done to determine the stack frame size is approximate
3676 and not conservative.
3677 The actual requirements may be somewhat greater than \fIlen\fR
3678 even if you do not get a warning.  In addition, any space allocated
3679 via \f(CW\*(C`alloca\*(C'\fR, variable-length arrays, or related constructs
3680 is not included by the compiler when determining
3681 whether or not to issue a warning.
3682 .IP "\fB\-Wno\-free\-nonheap\-object\fR" 4
3683 .IX Item "-Wno-free-nonheap-object"
3684 Do not warn when attempting to free an object that was not allocated
3685 on the heap.
3686 .IP "\fB\-Wstack\-usage=\fR\fIlen\fR" 4
3687 .IX Item "-Wstack-usage=len"
3688 Warn if the stack usage of a function might be larger than \fIlen\fR bytes.
3689 The computation done to determine the stack usage is conservative.
3690 Any space allocated via \f(CW\*(C`alloca\*(C'\fR, variable-length arrays, or related
3691 constructs is included by the compiler when determining whether or not to
3692 issue a warning.
3693 .Sp
3694 The message is in keeping with the output of \fB\-fstack\-usage\fR.
3695 .RS 4
3696 .IP "\(bu" 4
3697 If the stack usage is fully static but exceeds the specified amount, it's:
3698 .Sp
3699 .Vb 1
3700 \&          warning: stack usage is 1120 bytes
3701 .Ve
3702 .IP "\(bu" 4
3703 If the stack usage is (partly) dynamic but bounded, it's:
3704 .Sp
3705 .Vb 1
3706 \&          warning: stack usage might be 1648 bytes
3707 .Ve
3708 .IP "\(bu" 4
3709 If the stack usage is (partly) dynamic and not bounded, it's:
3710 .Sp
3711 .Vb 1
3712 \&          warning: stack usage might be unbounded
3713 .Ve
3714 .RE
3715 .RS 4
3716 .RE
3717 .IP "\fB\-Wunsafe\-loop\-optimizations\fR" 4
3718 .IX Item "-Wunsafe-loop-optimizations"
3719 Warn if the loop cannot be optimized because the compiler could not
3720 assume anything on the bounds of the loop indices.  With
3721 \&\fB\-funsafe\-loop\-optimizations\fR warn if the compiler made
3722 such assumptions.
3723 .IP "\fB\-Wno\-pedantic\-ms\-format\fR (MinGW targets only)" 4
3724 .IX Item "-Wno-pedantic-ms-format (MinGW targets only)"
3725 Disables the warnings about non-ISO \f(CW\*(C`printf\*(C'\fR / \f(CW\*(C`scanf\*(C'\fR format
3726 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
3727 depending on the \s-1MS\s0 runtime, when you are using the options \fB\-Wformat\fR
3728 and \fB\-pedantic\fR without gnu-extensions.
3729 .IP "\fB\-Wpointer\-arith\fR" 4
3730 .IX Item "-Wpointer-arith"
3731 Warn about anything that depends on the \*(L"size of\*(R" a function type or
3732 of \f(CW\*(C`void\*(C'\fR.  \s-1GNU\s0 C assigns these types a size of 1, for
3733 convenience in calculations with \f(CW\*(C`void *\*(C'\fR pointers and pointers
3734 to functions.  In \*(C+, warn also when an arithmetic operation involves
3735 \&\f(CW\*(C`NULL\*(C'\fR.  This warning is also enabled by \fB\-pedantic\fR.
3736 .IP "\fB\-Wtype\-limits\fR" 4
3737 .IX Item "-Wtype-limits"
3738 Warn if a comparison is always true or always false due to the limited
3739 range of the data type, but do not warn for constant expressions.  For
3740 example, warn if an unsigned variable is compared against zero with
3741 \&\fB<\fR or \fB>=\fR.  This warning is also enabled by
3742 \&\fB\-Wextra\fR.
3743 .IP "\fB\-Wbad\-function\-cast\fR (C and Objective-C only)" 4
3744 .IX Item "-Wbad-function-cast (C and Objective-C only)"
3745 Warn whenever a function call is cast to a non-matching type.
3746 For example, warn if \f(CW\*(C`int malloc()\*(C'\fR is cast to \f(CW\*(C`anything *\*(C'\fR.
3747 .IP "\fB\-Wc++\-compat\fR (C and Objective-C only)" 4
3748 .IX Item "-Wc++-compat (C and Objective-C only)"
3749 Warn about \s-1ISO\s0 C constructs that are outside of the common subset of
3750 \&\s-1ISO\s0 C and \s-1ISO\s0 \*(C+, e.g. request for implicit conversion from
3751 \&\f(CW\*(C`void *\*(C'\fR to a pointer to non\-\f(CW\*(C`void\*(C'\fR type.
3752 .IP "\fB\-Wc++11\-compat\fR (\*(C+ and Objective\-\*(C+ only)" 4
3753 .IX Item "-Wc++11-compat ( and Objective- only)"
3754 Warn about \*(C+ constructs whose meaning differs between \s-1ISO\s0 \*(C+ 1998
3755 and \s-1ISO\s0 \*(C+ 2011, e.g., identifiers in \s-1ISO\s0 \*(C+ 1998 that are keywords
3756 in \s-1ISO\s0 \*(C+ 2011.  This warning turns on \fB\-Wnarrowing\fR and is
3757 enabled by \fB\-Wall\fR.
3758 .IP "\fB\-Wcast\-qual\fR" 4
3759 .IX Item "-Wcast-qual"
3760 Warn whenever a pointer is cast so as to remove a type qualifier from
3761 the target type.  For example, warn if a \f(CW\*(C`const char *\*(C'\fR is cast
3762 to an ordinary \f(CW\*(C`char *\*(C'\fR.
3763 .Sp
3764 Also warn when making a cast that introduces a type qualifier in an
3765 unsafe way.  For example, casting \f(CW\*(C`char **\*(C'\fR to \f(CW\*(C`const char **\*(C'\fR
3766 is unsafe, as in this example:
3767 .Sp
3768 .Vb 6
3769 \&          /* p is char ** value.  */
3770 \&          const char **q = (const char **) p;
3771 \&          /* Assignment of readonly string to const char * is OK.  */
3772 \&          *q = "string";
3773 \&          /* Now char** pointer points to read\-only memory.  */
3774 \&          **p = \*(Aqb\*(Aq;
3775 .Ve
3776 .IP "\fB\-Wcast\-align\fR" 4
3777 .IX Item "-Wcast-align"
3778 Warn whenever a pointer is cast such that the required alignment of the
3779 target is increased.  For example, warn if a \f(CW\*(C`char *\*(C'\fR is cast to
3780 an \f(CW\*(C`int *\*(C'\fR on machines where integers can only be accessed at
3781 two\- or four-byte boundaries.
3782 .IP "\fB\-Wwrite\-strings\fR" 4
3783 .IX Item "-Wwrite-strings"
3784 When compiling C, give string constants the type \f(CW\*(C`const
3785 char[\f(CIlength\f(CW]\*(C'\fR so that copying the address of one into a
3786 non\-\f(CW\*(C`const\*(C'\fR \f(CW\*(C`char *\*(C'\fR pointer will get a warning.  These
3787 warnings will help you find at compile time code that can try to write
3788 into a string constant, but only if you have been very careful about
3789 using \f(CW\*(C`const\*(C'\fR in declarations and prototypes.  Otherwise, it will
3790 just be a nuisance. This is why we did not make \fB\-Wall\fR request
3791 these warnings.
3792 .Sp
3793 When compiling \*(C+, warn about the deprecated conversion from string
3794 literals to \f(CW\*(C`char *\*(C'\fR.  This warning is enabled by default for \*(C+
3795 programs.
3796 .IP "\fB\-Wclobbered\fR" 4
3797 .IX Item "-Wclobbered"
3798 Warn for variables that might be changed by \fBlongjmp\fR or
3799 \&\fBvfork\fR.  This warning is also enabled by \fB\-Wextra\fR.
3800 .IP "\fB\-Wconversion\fR" 4
3801 .IX Item "-Wconversion"
3802 Warn for implicit conversions that may alter a value. This includes
3803 conversions between real and integer, like \f(CW\*(C`abs (x)\*(C'\fR when
3804 \&\f(CW\*(C`x\*(C'\fR is \f(CW\*(C`double\*(C'\fR; conversions between signed and unsigned,
3805 like \f(CW\*(C`unsigned ui = \-1\*(C'\fR; and conversions to smaller types, like
3806 \&\f(CW\*(C`sqrtf (M_PI)\*(C'\fR. Do not warn for explicit casts like \f(CW\*(C`abs
3807 ((int) x)\*(C'\fR and \f(CW\*(C`ui = (unsigned) \-1\*(C'\fR, or if the value is not
3808 changed by the conversion like in \f(CW\*(C`abs (2.0)\*(C'\fR.  Warnings about
3809 conversions between signed and unsigned integers can be disabled by
3810 using \fB\-Wno\-sign\-conversion\fR.
3811 .Sp
3812 For \*(C+, also warn for confusing overload resolution for user-defined
3813 conversions; and conversions that will never use a type conversion
3814 operator: conversions to \f(CW\*(C`void\*(C'\fR, the same type, a base class or a
3815 reference to them. Warnings about conversions between signed and
3816 unsigned integers are disabled by default in \*(C+ unless
3817 \&\fB\-Wsign\-conversion\fR is explicitly enabled.
3818 .IP "\fB\-Wno\-conversion\-null\fR (\*(C+ and Objective\-\*(C+ only)" 4
3819 .IX Item "-Wno-conversion-null ( and Objective- only)"
3820 Do not warn for conversions between \f(CW\*(C`NULL\*(C'\fR and non-pointer
3821 types. \fB\-Wconversion\-null\fR is enabled by default.
3822 .IP "\fB\-Wzero\-as\-null\-pointer\-constant\fR (\*(C+ and Objective\-\*(C+ only)" 4
3823 .IX Item "-Wzero-as-null-pointer-constant ( and Objective- only)"
3824 Warn when a literal '0' is used as null pointer constant.  This can
3825 be useful to facilitate the conversion to \f(CW\*(C`nullptr\*(C'\fR in \*(C+11.
3826 .IP "\fB\-Wempty\-body\fR" 4
3827 .IX Item "-Wempty-body"
3828 Warn if an empty body occurs in an \fBif\fR, \fBelse\fR or \fBdo
3829 while\fR statement.  This warning is also enabled by \fB\-Wextra\fR.
3830 .IP "\fB\-Wenum\-compare\fR" 4
3831 .IX Item "-Wenum-compare"
3832 Warn about a comparison between values of different enumerated types.
3833 In \*(C+ enumeral mismatches in conditional expressions are also
3834 diagnosed and the warning is enabled by default.  In C this warning is 
3835 enabled by \fB\-Wall\fR.
3836 .IP "\fB\-Wjump\-misses\-init\fR (C, Objective-C only)" 4
3837 .IX Item "-Wjump-misses-init (C, Objective-C only)"
3838 Warn if a \f(CW\*(C`goto\*(C'\fR statement or a \f(CW\*(C`switch\*(C'\fR statement jumps
3839 forward across the initialization of a variable, or jumps backward to a
3840 label after the variable has been initialized.  This only warns about
3841 variables that are initialized when they are declared.  This warning is
3842 only supported for C and Objective-C; in \*(C+ this sort of branch is an
3843 error in any case.
3844 .Sp
3845 \&\fB\-Wjump\-misses\-init\fR is included in \fB\-Wc++\-compat\fR.  It
3846 can be disabled with the \fB\-Wno\-jump\-misses\-init\fR option.
3847 .IP "\fB\-Wsign\-compare\fR" 4
3848 .IX Item "-Wsign-compare"
3849 Warn when a comparison between signed and unsigned values could produce
3850 an incorrect result when the signed value is converted to unsigned.
3851 This warning is also enabled by \fB\-Wextra\fR; to get the other warnings
3852 of \fB\-Wextra\fR without this warning, use \fB\-Wextra \-Wno\-sign\-compare\fR.
3853 .IP "\fB\-Wsign\-conversion\fR" 4
3854 .IX Item "-Wsign-conversion"
3855 Warn for implicit conversions that may change the sign of an integer
3856 value, like assigning a signed integer expression to an unsigned
3857 integer variable. An explicit cast silences the warning. In C, this
3858 option is enabled also by \fB\-Wconversion\fR.
3859 .IP "\fB\-Waddress\fR" 4
3860 .IX Item "-Waddress"
3861 Warn about suspicious uses of memory addresses. These include using
3862 the address of a function in a conditional expression, such as
3863 \&\f(CW\*(C`void func(void); if (func)\*(C'\fR, and comparisons against the memory
3864 address of a string literal, such as \f(CW\*(C`if (x == "abc")\*(C'\fR.  Such
3865 uses typically indicate a programmer error: the address of a function
3866 always evaluates to true, so their use in a conditional usually
3867 indicate that the programmer forgot the parentheses in a function
3868 call; and comparisons against string literals result in unspecified
3869 behavior and are not portable in C, so they usually indicate that the
3870 programmer intended to use \f(CW\*(C`strcmp\*(C'\fR.  This warning is enabled by
3871 \&\fB\-Wall\fR.
3872 .IP "\fB\-Wlogical\-op\fR" 4
3873 .IX Item "-Wlogical-op"
3874 Warn about suspicious uses of logical operators in expressions.
3875 This includes using logical operators in contexts where a
3876 bit-wise operator is likely to be expected.
3877 .IP "\fB\-Waggregate\-return\fR" 4
3878 .IX Item "-Waggregate-return"
3879 Warn if any functions that return structures or unions are defined or
3880 called.  (In languages where you can return an array, this also elicits
3881 a warning.)
3882 .IP "\fB\-Wno\-attributes\fR" 4
3883 .IX Item "-Wno-attributes"
3884 Do not warn if an unexpected \f(CW\*(C`_\|_attribute_\|_\*(C'\fR is used, such as
3885 unrecognized attributes, function attributes applied to variables,
3886 etc.  This will not stop errors for incorrect use of supported
3887 attributes.
3888 .IP "\fB\-Wno\-builtin\-macro\-redefined\fR" 4
3889 .IX Item "-Wno-builtin-macro-redefined"
3890 Do not warn if certain built-in macros are redefined.  This suppresses
3891 warnings for redefinition of \f(CW\*(C`_\|_TIMESTAMP_\|_\*(C'\fR, \f(CW\*(C`_\|_TIME_\|_\*(C'\fR,
3892 \&\f(CW\*(C`_\|_DATE_\|_\*(C'\fR, \f(CW\*(C`_\|_FILE_\|_\*(C'\fR, and \f(CW\*(C`_\|_BASE_FILE_\|_\*(C'\fR.
3893 .IP "\fB\-Wstrict\-prototypes\fR (C and Objective-C only)" 4
3894 .IX Item "-Wstrict-prototypes (C and Objective-C only)"
3895 Warn if a function is declared or defined without specifying the
3896 argument types.  (An old-style function definition is permitted without
3897 a warning if preceded by a declaration that specifies the argument
3898 types.)
3899 .IP "\fB\-Wold\-style\-declaration\fR (C and Objective-C only)" 4
3900 .IX Item "-Wold-style-declaration (C and Objective-C only)"
3901 Warn for obsolescent usages, according to the C Standard, in a
3902 declaration. For example, warn if storage-class specifiers like
3903 \&\f(CW\*(C`static\*(C'\fR are not the first things in a declaration.  This warning
3904 is also enabled by \fB\-Wextra\fR.
3905 .IP "\fB\-Wold\-style\-definition\fR (C and Objective-C only)" 4
3906 .IX Item "-Wold-style-definition (C and Objective-C only)"
3907 Warn if an old-style function definition is used.  A warning is given
3908 even if there is a previous prototype.
3909 .IP "\fB\-Wmissing\-parameter\-type\fR (C and Objective-C only)" 4
3910 .IX Item "-Wmissing-parameter-type (C and Objective-C only)"
3911 A function parameter is declared without a type specifier in K&R\-style
3912 functions:
3913 .Sp
3914 .Vb 1
3915 \&        void foo(bar) { }
3916 .Ve
3917 .Sp
3918 This warning is also enabled by \fB\-Wextra\fR.
3919 .IP "\fB\-Wmissing\-prototypes\fR (C and Objective-C only)" 4
3920 .IX Item "-Wmissing-prototypes (C and Objective-C only)"
3921 Warn if a global function is defined without a previous prototype
3922 declaration.  This warning is issued even if the definition itself
3923 provides a prototype.  The aim is to detect global functions that 
3924 are not declared in header files.
3925 .IP "\fB\-Wmissing\-declarations\fR" 4
3926 .IX Item "-Wmissing-declarations"
3927 Warn if a global function is defined without a previous declaration.
3928 Do so even if the definition itself provides a prototype.
3929 Use this option to detect global functions that are not declared in
3930 header files.  In \*(C+, no warnings are issued for function templates,
3931 or for inline functions, or for functions in anonymous namespaces.
3932 .IP "\fB\-Wmissing\-field\-initializers\fR" 4
3933 .IX Item "-Wmissing-field-initializers"
3934 Warn if a structure's initializer has some fields missing.  For
3935 example, the following code would cause such a warning, because
3936 \&\f(CW\*(C`x.h\*(C'\fR is implicitly zero:
3937 .Sp
3938 .Vb 2
3939 \&        struct s { int f, g, h; };
3940 \&        struct s x = { 3, 4 };
3941 .Ve
3942 .Sp
3943 This option does not warn about designated initializers, so the following
3944 modification would not trigger a warning:
3945 .Sp
3946 .Vb 2
3947 \&        struct s { int f, g, h; };
3948 \&        struct s x = { .f = 3, .g = 4 };
3949 .Ve
3950 .Sp
3951 This warning is included in \fB\-Wextra\fR.  To get other \fB\-Wextra\fR
3952 warnings without this one, use \fB\-Wextra \-Wno\-missing\-field\-initializers\fR.
3953 .IP "\fB\-Wmissing\-format\-attribute\fR" 4
3954 .IX Item "-Wmissing-format-attribute"
3955 Warn about function pointers that might be candidates for \f(CW\*(C`format\*(C'\fR
3956 attributes.  Note these are only possible candidates, not absolute ones.
3957 \&\s-1GCC\s0 will guess that function pointers with \f(CW\*(C`format\*(C'\fR attributes that
3958 are used in assignment, initialization, parameter passing or return
3959 statements should have a corresponding \f(CW\*(C`format\*(C'\fR attribute in the
3960 resulting type.  I.e. the left-hand side of the assignment or
3961 initialization, the type of the parameter variable, or the return type
3962 of the containing function respectively should also have a \f(CW\*(C`format\*(C'\fR
3963 attribute to avoid the warning.
3964 .Sp
3965 \&\s-1GCC\s0 will also warn about function definitions that might be
3966 candidates for \f(CW\*(C`format\*(C'\fR attributes.  Again, these are only
3967 possible candidates.  \s-1GCC\s0 will guess that \f(CW\*(C`format\*(C'\fR attributes
3968 might be appropriate for any function that calls a function like
3969 \&\f(CW\*(C`vprintf\*(C'\fR or \f(CW\*(C`vscanf\*(C'\fR, but this might not always be the
3970 case, and some functions for which \f(CW\*(C`format\*(C'\fR attributes are
3971 appropriate may not be detected.
3972 .IP "\fB\-Wno\-multichar\fR" 4
3973 .IX Item "-Wno-multichar"
3974 Do not warn if a multicharacter constant (\fB'\s-1FOOF\s0'\fR) is used.
3975 Usually they indicate a typo in the user's code, as they have
3976 implementation-defined values, and should not be used in portable code.
3977 .IP "\fB\-Wnormalized=<none|id|nfc|nfkc>\fR" 4
3978 .IX Item "-Wnormalized=<none|id|nfc|nfkc>"
3979 In \s-1ISO\s0 C and \s-1ISO\s0 \*(C+, two identifiers are different if they are
3980 different sequences of characters.  However, sometimes when characters
3981 outside the basic \s-1ASCII\s0 character set are used, you can have two
3982 different character sequences that look the same.  To avoid confusion,
3983 the \s-1ISO\s0 10646 standard sets out some \fInormalization rules\fR which
3984 when applied ensure that two sequences that look the same are turned into
3985 the same sequence.  \s-1GCC\s0 can warn you if you are using identifiers that
3986 have not been normalized; this option controls that warning.
3987 .Sp
3988 There are four levels of warning supported by \s-1GCC\s0.  The default is
3989 \&\fB\-Wnormalized=nfc\fR, which warns about any identifier that is
3990 not in the \s-1ISO\s0 10646 \*(L"C\*(R" normalized form, \fI\s-1NFC\s0\fR.  \s-1NFC\s0 is the
3991 recommended form for most uses.
3992 .Sp
3993 Unfortunately, there are some characters allowed in identifiers by
3994 \&\s-1ISO\s0 C and \s-1ISO\s0 \*(C+ that, when turned into \s-1NFC\s0, are not allowed in 
3995 identifiers.  That is, there's no way to use these symbols in portable
3996 \&\s-1ISO\s0 C or \*(C+ and have all your identifiers in \s-1NFC\s0.
3997 \&\fB\-Wnormalized=id\fR suppresses the warning for these characters.
3998 It is hoped that future versions of the standards involved will correct
3999 this, which is why this option is not the default.
4000 .Sp
4001 You can switch the warning off for all characters by writing
4002 \&\fB\-Wnormalized=none\fR.  You would only want to do this if you
4003 were using some other normalization scheme (like \*(L"D\*(R"), because
4004 otherwise you can easily create bugs that are literally impossible to see.
4005 .Sp
4006 Some characters in \s-1ISO\s0 10646 have distinct meanings but look identical
4007 in some fonts or display methodologies, especially once formatting has
4008 been applied.  For instance \f(CW\*(C`\eu207F\*(C'\fR, \*(L"\s-1SUPERSCRIPT\s0 \s-1LATIN\s0 \s-1SMALL\s0
4009 \&\s-1LETTER\s0 N\*(R", will display just like a regular \f(CW\*(C`n\*(C'\fR that has been
4010 placed in a superscript.  \s-1ISO\s0 10646 defines the \fI\s-1NFKC\s0\fR
4011 normalization scheme to convert all these into a standard form as
4012 well, and \s-1GCC\s0 will warn if your code is not in \s-1NFKC\s0 if you use
4013 \&\fB\-Wnormalized=nfkc\fR.  This warning is comparable to warning
4014 about every identifier that contains the letter O because it might be
4015 confused with the digit 0, and so is not the default, but may be
4016 useful as a local coding convention if the programming environment is
4017 unable to be fixed to display these characters distinctly.
4018 .IP "\fB\-Wno\-deprecated\fR" 4
4019 .IX Item "-Wno-deprecated"
4020 Do not warn about usage of deprecated features.
4021 .IP "\fB\-Wno\-deprecated\-declarations\fR" 4
4022 .IX Item "-Wno-deprecated-declarations"
4023 Do not warn about uses of functions,
4024 variables, and types marked as deprecated by using the \f(CW\*(C`deprecated\*(C'\fR
4025 attribute.
4026 .IP "\fB\-Wno\-overflow\fR" 4
4027 .IX Item "-Wno-overflow"
4028 Do not warn about compile-time overflow in constant expressions.
4029 .IP "\fB\-Woverride\-init\fR (C and Objective-C only)" 4
4030 .IX Item "-Woverride-init (C and Objective-C only)"
4031 Warn if an initialized field without side effects is overridden when
4032 using designated initializers.
4033 .Sp
4034 This warning is included in \fB\-Wextra\fR.  To get other
4035 \&\fB\-Wextra\fR warnings without this one, use \fB\-Wextra
4036 \&\-Wno\-override\-init\fR.
4037 .IP "\fB\-Wpacked\fR" 4
4038 .IX Item "-Wpacked"
4039 Warn if a structure is given the packed attribute, but the packed
4040 attribute has no effect on the layout or size of the structure.
4041 Such structures may be mis-aligned for little benefit.  For
4042 instance, in this code, the variable \f(CW\*(C`f.x\*(C'\fR in \f(CW\*(C`struct bar\*(C'\fR
4043 will be misaligned even though \f(CW\*(C`struct bar\*(C'\fR does not itself
4044 have the packed attribute:
4045 .Sp
4046 .Vb 8
4047 \&        struct foo {
4048 \&          int x;
4049 \&          char a, b, c, d;
4050 \&        } _\|_attribute_\|_((packed));
4051 \&        struct bar {
4052 \&          char z;
4053 \&          struct foo f;
4054 \&        };
4055 .Ve
4056 .IP "\fB\-Wpacked\-bitfield\-compat\fR" 4
4057 .IX Item "-Wpacked-bitfield-compat"
4058 The 4.1, 4.2 and 4.3 series of \s-1GCC\s0 ignore the \f(CW\*(C`packed\*(C'\fR attribute
4059 on bit-fields of type \f(CW\*(C`char\*(C'\fR.  This has been fixed in \s-1GCC\s0 4.4 but
4060 the change can lead to differences in the structure layout.  \s-1GCC\s0
4061 informs you when the offset of such a field has changed in \s-1GCC\s0 4.4.
4062 For example there is no longer a 4\-bit padding between field \f(CW\*(C`a\*(C'\fR
4063 and \f(CW\*(C`b\*(C'\fR in this structure:
4064 .Sp
4065 .Vb 5
4066 \&        struct foo
4067 \&        {
4068 \&          char a:4;
4069 \&          char b:8;
4070 \&        } _\|_attribute_\|_ ((packed));
4071 .Ve
4072 .Sp
4073 This warning is enabled by default.  Use
4074 \&\fB\-Wno\-packed\-bitfield\-compat\fR to disable this warning.
4075 .IP "\fB\-Wpadded\fR" 4
4076 .IX Item "-Wpadded"
4077 Warn if padding is included in a structure, either to align an element
4078 of the structure or to align the whole structure.  Sometimes when this
4079 happens it is possible to rearrange the fields of the structure to
4080 reduce the padding and so make the structure smaller.
4081 .IP "\fB\-Wredundant\-decls\fR" 4
4082 .IX Item "-Wredundant-decls"
4083 Warn if anything is declared more than once in the same scope, even in
4084 cases where multiple declaration is valid and changes nothing.
4085 .IP "\fB\-Wnested\-externs\fR (C and Objective-C only)" 4
4086 .IX Item "-Wnested-externs (C and Objective-C only)"
4087 Warn if an \f(CW\*(C`extern\*(C'\fR declaration is encountered within a function.
4088 .IP "\fB\-Winline\fR" 4
4089 .IX Item "-Winline"
4090 Warn if a function can not be inlined and it was declared as inline.
4091 Even with this option, the compiler will not warn about failures to
4092 inline functions declared in system headers.
4093 .Sp
4094 The compiler uses a variety of heuristics to determine whether or not
4095 to inline a function.  For example, the compiler takes into account
4096 the size of the function being inlined and the amount of inlining
4097 that has already been done in the current function.  Therefore,
4098 seemingly insignificant changes in the source program can cause the
4099 warnings produced by \fB\-Winline\fR to appear or disappear.
4100 .IP "\fB\-Wno\-invalid\-offsetof\fR (\*(C+ and Objective\-\*(C+ only)" 4
4101 .IX Item "-Wno-invalid-offsetof ( and Objective- only)"
4102 Suppress warnings from applying the \fBoffsetof\fR macro to a non-POD
4103 type.  According to the 1998 \s-1ISO\s0 \*(C+ standard, applying \fBoffsetof\fR
4104 to a non-POD type is undefined.  In existing \*(C+ implementations,
4105 however, \fBoffsetof\fR typically gives meaningful results even when
4106 applied to certain kinds of non-POD types. (Such as a simple
4107 \&\fBstruct\fR that fails to be a \s-1POD\s0 type only by virtue of having a
4108 constructor.)  This flag is for users who are aware that they are
4109 writing nonportable code and who have deliberately chosen to ignore the
4110 warning about it.
4111 .Sp
4112 The restrictions on \fBoffsetof\fR may be relaxed in a future version
4113 of the \*(C+ standard.
4114 .IP "\fB\-Wno\-int\-to\-pointer\-cast\fR" 4
4115 .IX Item "-Wno-int-to-pointer-cast"
4116 Suppress warnings from casts to pointer type of an integer of a
4117 different size. In \*(C+, casting to a pointer type of smaller size is
4118 an error. \fBWint-to-pointer-cast\fR is enabled by default.
4119 .IP "\fB\-Wno\-pointer\-to\-int\-cast\fR (C and Objective-C only)" 4
4120 .IX Item "-Wno-pointer-to-int-cast (C and Objective-C only)"
4121 Suppress warnings from casts from a pointer to an integer type of a
4122 different size.
4123 .IP "\fB\-Winvalid\-pch\fR" 4
4124 .IX Item "-Winvalid-pch"
4125 Warn if a precompiled header is found in
4126 the search path but can't be used.
4127 .IP "\fB\-Wlong\-long\fR" 4
4128 .IX Item "-Wlong-long"
4129 Warn if \fBlong long\fR type is used.  This is enabled by either
4130 \&\fB\-pedantic\fR or \fB\-Wtraditional\fR in \s-1ISO\s0 C90 and \*(C+98
4131 modes.  To inhibit the warning messages, use \fB\-Wno\-long\-long\fR.
4132 .IP "\fB\-Wvariadic\-macros\fR" 4
4133 .IX Item "-Wvariadic-macros"
4134 Warn if variadic macros are used in pedantic \s-1ISO\s0 C90 mode, or the \s-1GNU\s0
4135 alternate syntax when in pedantic \s-1ISO\s0 C99 mode.  This is default.
4136 To inhibit the warning messages, use \fB\-Wno\-variadic\-macros\fR.
4137 .IP "\fB\-Wvector\-operation\-performance\fR" 4
4138 .IX Item "-Wvector-operation-performance"
4139 Warn if vector operation is not implemented via \s-1SIMD\s0 capabilities of the
4140 architecture.  Mainly useful for the performance tuning.
4141 Vector operation can be implemented \f(CW\*(C`piecewise\*(C'\fR, which means that the
4142 scalar operation is performed on every vector element; 
4143 \&\f(CW\*(C`in parallel\*(C'\fR, which means that the vector operation is implemented
4144 using scalars of wider type, which normally is more performance efficient;
4145 and \f(CW\*(C`as a single scalar\*(C'\fR, which means that vector fits into a
4146 scalar type.
4147 .IP "\fB\-Wvla\fR" 4
4148 .IX Item "-Wvla"
4149 Warn if variable length array is used in the code.
4150 \&\fB\-Wno\-vla\fR will prevent the \fB\-pedantic\fR warning of
4151 the variable length array.
4152 .IP "\fB\-Wvolatile\-register\-var\fR" 4
4153 .IX Item "-Wvolatile-register-var"
4154 Warn if a register variable is declared volatile.  The volatile
4155 modifier does not inhibit all optimizations that may eliminate reads
4156 and/or writes to register variables.  This warning is enabled by
4157 \&\fB\-Wall\fR.
4158 .IP "\fB\-Wdisabled\-optimization\fR" 4
4159 .IX Item "-Wdisabled-optimization"
4160 Warn if a requested optimization pass is disabled.  This warning does
4161 not generally indicate that there is anything wrong with your code; it
4162 merely indicates that \s-1GCC\s0's optimizers were unable to handle the code
4163 effectively.  Often, the problem is that your code is too big or too
4164 complex; \s-1GCC\s0 will refuse to optimize programs when the optimization
4165 itself is likely to take inordinate amounts of time.
4166 .IP "\fB\-Wpointer\-sign\fR (C and Objective-C only)" 4
4167 .IX Item "-Wpointer-sign (C and Objective-C only)"
4168 Warn for pointer argument passing or assignment with different signedness.
4169 This option is only supported for C and Objective-C.  It is implied by
4170 \&\fB\-Wall\fR and by \fB\-pedantic\fR, which can be disabled with
4171 \&\fB\-Wno\-pointer\-sign\fR.
4172 .IP "\fB\-Wstack\-protector\fR" 4
4173 .IX Item "-Wstack-protector"
4174 This option is only active when \fB\-fstack\-protector\fR is active.  It
4175 warns about functions that will not be protected against stack smashing.
4176 .IP "\fB\-Wno\-mudflap\fR" 4
4177 .IX Item "-Wno-mudflap"
4178 Suppress warnings about constructs that cannot be instrumented by
4179 \&\fB\-fmudflap\fR.
4180 .IP "\fB\-Woverlength\-strings\fR" 4
4181 .IX Item "-Woverlength-strings"
4182 Warn about string constants that are longer than the \*(L"minimum
4183 maximum\*(R" length specified in the C standard.  Modern compilers
4184 generally allow string constants that are much longer than the
4185 standard's minimum limit, but very portable programs should avoid
4186 using longer strings.
4187 .Sp
4188 The limit applies \fIafter\fR string constant concatenation, and does
4189 not count the trailing \s-1NUL\s0.  In C90, the limit was 509 characters; in
4190 C99, it was raised to 4095.  \*(C+98 does not specify a normative
4191 minimum maximum, so we do not diagnose overlength strings in \*(C+.
4192 .Sp
4193 This option is implied by \fB\-pedantic\fR, and can be disabled with
4194 \&\fB\-Wno\-overlength\-strings\fR.
4195 .IP "\fB\-Wunsuffixed\-float\-constants\fR (C and Objective-C only)" 4
4196 .IX Item "-Wunsuffixed-float-constants (C and Objective-C only)"
4197 \&\s-1GCC\s0 will issue a warning for any floating constant that does not have
4198 a suffix.  When used together with \fB\-Wsystem\-headers\fR it will
4199 warn about such constants in system header files.  This can be useful
4200 when preparing code to use with the \f(CW\*(C`FLOAT_CONST_DECIMAL64\*(C'\fR pragma
4201 from the decimal floating-point extension to C99.
4202 .Sh "Options for Debugging Your Program or \s-1GCC\s0"
4203 .IX Subsection "Options for Debugging Your Program or GCC"
4204 \&\s-1GCC\s0 has various special options that are used for debugging
4205 either your program or \s-1GCC:\s0
4206 .IP "\fB\-g\fR" 4
4207 .IX Item "-g"
4208 Produce debugging information in the operating system's native format
4209 (stabs, \s-1COFF\s0, \s-1XCOFF\s0, or \s-1DWARF\s0 2).  \s-1GDB\s0 can work with this debugging
4210 information.
4211 .Sp
4212 On most systems that use stabs format, \fB\-g\fR enables use of extra
4213 debugging information that only \s-1GDB\s0 can use; this extra information
4214 makes debugging work better in \s-1GDB\s0 but will probably make other debuggers
4215 crash or
4216 refuse to read the program.  If you want to control for certain whether
4217 to generate the extra information, use \fB\-gstabs+\fR, \fB\-gstabs\fR,
4218 \&\fB\-gxcoff+\fR, \fB\-gxcoff\fR, or \fB\-gvms\fR (see below).
4219 .Sp
4220 \&\s-1GCC\s0 allows you to use \fB\-g\fR with
4221 \&\fB\-O\fR.  The shortcuts taken by optimized code may occasionally
4222 produce surprising results: some variables you declared may not exist
4223 at all; flow of control may briefly move where you did not expect it;
4224 some statements may not be executed because they compute constant
4225 results or their values were already at hand; some statements may
4226 execute in different places because they were moved out of loops.
4227 .Sp
4228 Nevertheless it proves possible to debug optimized output.  This makes
4229 it reasonable to use the optimizer for programs that might have bugs.
4230 .Sp
4231 The following options are useful when \s-1GCC\s0 is generated with the
4232 capability for more than one debugging format.
4233 .IP "\fB\-ggdb\fR" 4
4234 .IX Item "-ggdb"
4235 Produce debugging information for use by \s-1GDB\s0.  This means to use the
4236 most expressive format available (\s-1DWARF\s0 2, stabs, or the native format
4237 if neither of those are supported), including \s-1GDB\s0 extensions if at all
4238 possible.
4239 .IP "\fB\-gstabs\fR" 4
4240 .IX Item "-gstabs"
4241 Produce debugging information in stabs format (if that is supported),
4242 without \s-1GDB\s0 extensions.  This is the format used by \s-1DBX\s0 on most \s-1BSD\s0
4243 systems.  On \s-1MIPS\s0, Alpha and System V Release 4 systems this option
4244 produces stabs debugging output that is not understood by \s-1DBX\s0 or \s-1SDB\s0.
4245 On System V Release 4 systems this option requires the \s-1GNU\s0 assembler.
4246 .IP "\fB\-feliminate\-unused\-debug\-symbols\fR" 4
4247 .IX Item "-feliminate-unused-debug-symbols"
4248 Produce debugging information in stabs format (if that is supported),
4249 for only symbols that are actually used.
4250 .IP "\fB\-femit\-class\-debug\-always\fR" 4
4251 .IX Item "-femit-class-debug-always"
4252 Instead of emitting debugging information for a \*(C+ class in only one
4253 object file, emit it in all object files using the class.  This option
4254 should be used only with debuggers that are unable to handle the way \s-1GCC\s0
4255 normally emits debugging information for classes because using this
4256 option will increase the size of debugging information by as much as a
4257 factor of two.
4258 .IP "\fB\-fno\-debug\-types\-section\fR" 4
4259 .IX Item "-fno-debug-types-section"
4260 By default when using \s-1DWARF\s0 v4 or higher type DIEs will be put into
4261 their own .debug_types section instead of making them part of the
4262 \&.debug_info section.  It is more efficient to put them in a separate
4263 comdat sections since the linker will then be able to remove duplicates.
4264 But not all \s-1DWARF\s0 consumers support .debug_types sections yet.
4265 .IP "\fB\-gstabs+\fR" 4
4266 .IX Item "-gstabs+"
4267 Produce debugging information in stabs format (if that is supported),
4268 using \s-1GNU\s0 extensions understood only by the \s-1GNU\s0 debugger (\s-1GDB\s0).  The
4269 use of these extensions is likely to make other debuggers crash or
4270 refuse to read the program.
4271 .IP "\fB\-gcoff\fR" 4
4272 .IX Item "-gcoff"
4273 Produce debugging information in \s-1COFF\s0 format (if that is supported).
4274 This is the format used by \s-1SDB\s0 on most System V systems prior to
4275 System V Release 4.
4276 .IP "\fB\-gxcoff\fR" 4
4277 .IX Item "-gxcoff"
4278 Produce debugging information in \s-1XCOFF\s0 format (if that is supported).
4279 This is the format used by the \s-1DBX\s0 debugger on \s-1IBM\s0 \s-1RS/6000\s0 systems.
4280 .IP "\fB\-gxcoff+\fR" 4
4281 .IX Item "-gxcoff+"
4282 Produce debugging information in \s-1XCOFF\s0 format (if that is supported),
4283 using \s-1GNU\s0 extensions understood only by the \s-1GNU\s0 debugger (\s-1GDB\s0).  The
4284 use of these extensions is likely to make other debuggers crash or
4285 refuse to read the program, and may cause assemblers other than the \s-1GNU\s0
4286 assembler (\s-1GAS\s0) to fail with an error.
4287 .IP "\fB\-gdwarf\-\fR\fIversion\fR" 4
4288 .IX Item "-gdwarf-version"
4289 Produce debugging information in \s-1DWARF\s0 format (if that is
4290 supported).  This is the format used by \s-1DBX\s0 on \s-1IRIX\s0 6.  The value
4291 of \fIversion\fR may be either 2, 3 or 4; the default version is 2.
4292 .Sp
4293 Note that with \s-1DWARF\s0 version 2 some ports require, and will always
4294 use, some non-conflicting \s-1DWARF\s0 3 extensions in the unwind tables.
4295 .Sp
4296 Version 4 may require \s-1GDB\s0 7.0 and \fB\-fvar\-tracking\-assignments\fR
4297 for maximum benefit.
4298 .IP "\fB\-grecord\-gcc\-switches\fR" 4
4299 .IX Item "-grecord-gcc-switches"
4300 This switch causes the command-line options used to invoke the
4301 compiler that may affect code generation to be appended to the
4302 DW_AT_producer attribute in \s-1DWARF\s0 debugging information.  The options
4303 are concatenated with spaces separating them from each other and from
4304 the compiler version.  See also \fB\-frecord\-gcc\-switches\fR for another
4305 way of storing compiler options into the object file.
4306 .IP "\fB\-gno\-record\-gcc\-switches\fR" 4
4307 .IX Item "-gno-record-gcc-switches"
4308 Disallow appending command-line options to the DW_AT_producer attribute
4309 in \s-1DWARF\s0 debugging information.  This is the default.
4310 .IP "\fB\-gstrict\-dwarf\fR" 4
4311 .IX Item "-gstrict-dwarf"
4312 Disallow using extensions of later \s-1DWARF\s0 standard version than selected
4313 with \fB\-gdwarf\-\fR\fIversion\fR.  On most targets using non-conflicting
4314 \&\s-1DWARF\s0 extensions from later standard versions is allowed.
4315 .IP "\fB\-gno\-strict\-dwarf\fR" 4
4316 .IX Item "-gno-strict-dwarf"
4317 Allow using extensions of later \s-1DWARF\s0 standard version than selected with
4318 \&\fB\-gdwarf\-\fR\fIversion\fR.
4319 .IP "\fB\-gvms\fR" 4
4320 .IX Item "-gvms"
4321 Produce debugging information in \s-1VMS\s0 debug format (if that is
4322 supported).  This is the format used by \s-1DEBUG\s0 on \s-1VMS\s0 systems.
4323 .IP "\fB\-g\fR\fIlevel\fR" 4
4324 .IX Item "-glevel"
4325 .PD 0
4326 .IP "\fB\-ggdb\fR\fIlevel\fR" 4
4327 .IX Item "-ggdblevel"
4328 .IP "\fB\-gstabs\fR\fIlevel\fR" 4
4329 .IX Item "-gstabslevel"
4330 .IP "\fB\-gcoff\fR\fIlevel\fR" 4
4331 .IX Item "-gcofflevel"
4332 .IP "\fB\-gxcoff\fR\fIlevel\fR" 4
4333 .IX Item "-gxcofflevel"
4334 .IP "\fB\-gvms\fR\fIlevel\fR" 4
4335 .IX Item "-gvmslevel"
4336 .PD
4337 Request debugging information and also use \fIlevel\fR to specify how
4338 much information.  The default level is 2.
4339 .Sp
4340 Level 0 produces no debug information at all.  Thus, \fB\-g0\fR negates
4341 \&\fB\-g\fR.
4342 .Sp
4343 Level 1 produces minimal information, enough for making backtraces in
4344 parts of the program that you don't plan to debug.  This includes
4345 descriptions of functions and external variables, but no information
4346 about local variables and no line numbers.
4347 .Sp
4348 Level 3 includes extra information, such as all the macro definitions
4349 present in the program.  Some debuggers support macro expansion when
4350 you use \fB\-g3\fR.
4351 .Sp
4352 \&\fB\-gdwarf\-2\fR does not accept a concatenated debug level, because
4353 \&\s-1GCC\s0 used to support an option \fB\-gdwarf\fR that meant to generate
4354 debug information in version 1 of the \s-1DWARF\s0 format (which is very
4355 different from version 2), and it would have been too confusing.  That
4356 debug format is long obsolete, but the option cannot be changed now.
4357 Instead use an additional \fB\-g\fR\fIlevel\fR option to change the
4358 debug level for \s-1DWARF\s0.
4359 .IP "\fB\-gtoggle\fR" 4
4360 .IX Item "-gtoggle"
4361 Turn off generation of debug info, if leaving out this option would have
4362 generated it, or turn it on at level 2 otherwise.  The position of this
4363 argument in the command line does not matter, it takes effect after all
4364 other options are processed, and it does so only once, no matter how
4365 many times it is given.  This is mainly intended to be used with
4366 \&\fB\-fcompare\-debug\fR.
4367 .IP "\fB\-fdump\-final\-insns\fR[\fB=\fR\fIfile\fR]" 4
4368 .IX Item "-fdump-final-insns[=file]"
4369 Dump the final internal representation (\s-1RTL\s0) to \fIfile\fR.  If the
4370 optional argument is omitted (or if \fIfile\fR is \f(CW\*(C`.\*(C'\fR), the name
4371 of the dump file will be determined by appending \f(CW\*(C`.gkd\*(C'\fR to the
4372 compilation output file name.
4373 .IP "\fB\-fcompare\-debug\fR[\fB=\fR\fIopts\fR]" 4
4374 .IX Item "-fcompare-debug[=opts]"
4375 If no error occurs during compilation, run the compiler a second time,
4376 adding \fIopts\fR and \fB\-fcompare\-debug\-second\fR to the arguments
4377 passed to the second compilation.  Dump the final internal
4378 representation in both compilations, and print an error if they differ.
4379 .Sp
4380 If the equal sign is omitted, the default \fB\-gtoggle\fR is used.
4381 .Sp
4382 The environment variable \fB\s-1GCC_COMPARE_DEBUG\s0\fR, if defined, non-empty
4383 and nonzero, implicitly enables \fB\-fcompare\-debug\fR.  If
4384 \&\fB\s-1GCC_COMPARE_DEBUG\s0\fR is defined to a string starting with a dash,
4385 then it is used for \fIopts\fR, otherwise the default \fB\-gtoggle\fR
4386 is used.
4387 .Sp
4388 \&\fB\-fcompare\-debug=\fR, with the equal sign but without \fIopts\fR,
4389 is equivalent to \fB\-fno\-compare\-debug\fR, which disables the dumping
4390 of the final representation and the second compilation, preventing even
4391 \&\fB\s-1GCC_COMPARE_DEBUG\s0\fR from taking effect.
4392 .Sp
4393 To verify full coverage during \fB\-fcompare\-debug\fR testing, set
4394 \&\fB\s-1GCC_COMPARE_DEBUG\s0\fR to say \fB\-fcompare\-debug\-not\-overridden\fR,
4395 which \s-1GCC\s0 will reject as an invalid option in any actual compilation
4396 (rather than preprocessing, assembly or linking).  To get just a
4397 warning, setting \fB\s-1GCC_COMPARE_DEBUG\s0\fR to \fB\-w%n\-fcompare\-debug
4398 not overridden\fR will do.
4399 .IP "\fB\-fcompare\-debug\-second\fR" 4
4400 .IX Item "-fcompare-debug-second"
4401 This option is implicitly passed to the compiler for the second
4402 compilation requested by \fB\-fcompare\-debug\fR, along with options to
4403 silence warnings, and omitting other options that would cause
4404 side-effect compiler outputs to files or to the standard output.  Dump
4405 files and preserved temporary files are renamed so as to contain the
4406 \&\f(CW\*(C`.gk\*(C'\fR additional extension during the second compilation, to avoid
4407 overwriting those generated by the first.
4408 .Sp
4409 When this option is passed to the compiler driver, it causes the
4410 \&\fIfirst\fR compilation to be skipped, which makes it useful for little
4411 other than debugging the compiler proper.
4412 .IP "\fB\-feliminate\-dwarf2\-dups\fR" 4
4413 .IX Item "-feliminate-dwarf2-dups"
4414 Compress \s-1DWARF2\s0 debugging information by eliminating duplicated
4415 information about each symbol.  This option only makes sense when
4416 generating \s-1DWARF2\s0 debugging information with \fB\-gdwarf\-2\fR.
4417 .IP "\fB\-femit\-struct\-debug\-baseonly\fR" 4
4418 .IX Item "-femit-struct-debug-baseonly"
4419 Emit debug information for struct-like types
4420 only when the base name of the compilation source file
4421 matches the base name of file in which the struct was defined.
4422 .Sp
4423 This option substantially reduces the size of debugging information,
4424 but at significant potential loss in type information to the debugger.
4425 See \fB\-femit\-struct\-debug\-reduced\fR for a less aggressive option.
4426 See \fB\-femit\-struct\-debug\-detailed\fR for more detailed control.
4427 .Sp
4428 This option works only with \s-1DWARF\s0 2.
4429 .IP "\fB\-femit\-struct\-debug\-reduced\fR" 4
4430 .IX Item "-femit-struct-debug-reduced"
4431 Emit debug information for struct-like types
4432 only when the base name of the compilation source file
4433 matches the base name of file in which the type was defined,
4434 unless the struct is a template or defined in a system header.
4435 .Sp
4436 This option significantly reduces the size of debugging information,
4437 with some potential loss in type information to the debugger.
4438 See \fB\-femit\-struct\-debug\-baseonly\fR for a more aggressive option.
4439 See \fB\-femit\-struct\-debug\-detailed\fR for more detailed control.
4440 .Sp
4441 This option works only with \s-1DWARF\s0 2.
4442 .IP "\fB\-femit\-struct\-debug\-detailed\fR[\fB=\fR\fIspec-list\fR]" 4
4443 .IX Item "-femit-struct-debug-detailed[=spec-list]"
4444 Specify the struct-like types
4445 for which the compiler will generate debug information.
4446 The intent is to reduce duplicate struct debug information
4447 between different object files within the same program.
4448 .Sp
4449 This option is a detailed version of
4450 \&\fB\-femit\-struct\-debug\-reduced\fR and \fB\-femit\-struct\-debug\-baseonly\fR,
4451 which will serve for most needs.
4452 .Sp
4453 A specification has the syntax[\fBdir:\fR|\fBind:\fR][\fBord:\fR|\fBgen:\fR](\fBany\fR|\fBsys\fR|\fBbase\fR|\fBnone\fR)
4454 .Sp
4455 The optional first word limits the specification to
4456 structs that are used directly (\fBdir:\fR) or used indirectly (\fBind:\fR).
4457 A struct type is used directly when it is the type of a variable, member.
4458 Indirect uses arise through pointers to structs.
4459 That is, when use of an incomplete struct would be legal, the use is indirect.
4460 An example is
4461 \&\fBstruct one direct; struct two * indirect;\fR.
4462 .Sp
4463 The optional second word limits the specification to
4464 ordinary structs (\fBord:\fR) or generic structs (\fBgen:\fR).
4465 Generic structs are a bit complicated to explain.
4466 For \*(C+, these are non-explicit specializations of template classes,
4467 or non-template classes within the above.
4468 Other programming languages have generics,
4469 but \fB\-femit\-struct\-debug\-detailed\fR does not yet implement them.
4470 .Sp
4471 The third word specifies the source files for those
4472 structs for which the compiler will emit debug information.
4473 The values \fBnone\fR and \fBany\fR have the normal meaning.
4474 The value \fBbase\fR means that
4475 the base of name of the file in which the type declaration appears
4476 must match the base of the name of the main compilation file.
4477 In practice, this means that
4478 types declared in \fIfoo.c\fR and \fIfoo.h\fR will have debug information,
4479 but types declared in other header will not.
4480 The value \fBsys\fR means those types satisfying \fBbase\fR
4481 or declared in system or compiler headers.
4482 .Sp
4483 You may need to experiment to determine the best settings for your application.
4484 .Sp
4485 The default is \fB\-femit\-struct\-debug\-detailed=all\fR.
4486 .Sp
4487 This option works only with \s-1DWARF\s0 2.
4488 .IP "\fB\-fno\-merge\-debug\-strings\fR" 4
4489 .IX Item "-fno-merge-debug-strings"
4490 Direct the linker to not merge together strings in the debugging
4491 information that are identical in different object files.  Merging is
4492 not supported by all assemblers or linkers.  Merging decreases the size
4493 of the debug information in the output file at the cost of increasing
4494 link processing time.  Merging is enabled by default.
4495 .IP "\fB\-fdebug\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR" 4
4496 .IX Item "-fdebug-prefix-map=old=new"
4497 When compiling files in directory \fI\fIold\fI\fR, record debugging
4498 information describing them as in \fI\fInew\fI\fR instead.
4499 .IP "\fB\-fno\-dwarf2\-cfi\-asm\fR" 4
4500 .IX Item "-fno-dwarf2-cfi-asm"
4501 Emit \s-1DWARF\s0 2 unwind info as compiler generated \f(CW\*(C`.eh_frame\*(C'\fR section
4502 instead of using \s-1GAS\s0 \f(CW\*(C`.cfi_*\*(C'\fR directives.
4503 .IP "\fB\-p\fR" 4
4504 .IX Item "-p"
4505 Generate extra code to write profile information suitable for the
4506 analysis program \fBprof\fR.  You must use this option when compiling
4507 the source files you want data about, and you must also use it when
4508 linking.
4509 .IP "\fB\-pg\fR" 4
4510 .IX Item "-pg"
4511 Generate extra code to write profile information suitable for the
4512 analysis program \fBgprof\fR.  You must use this option when compiling
4513 the source files you want data about, and you must also use it when
4514 linking.
4515 .IP "\fB\-Q\fR" 4
4516 .IX Item "-Q"
4517 Makes the compiler print out each function name as it is compiled, and
4518 print some statistics about each pass when it finishes.
4519 .IP "\fB\-ftime\-report\fR" 4
4520 .IX Item "-ftime-report"
4521 Makes the compiler print some statistics about the time consumed by each
4522 pass when it finishes.
4523 .IP "\fB\-fmem\-report\fR" 4
4524 .IX Item "-fmem-report"
4525 Makes the compiler print some statistics about permanent memory
4526 allocation when it finishes.
4527 .IP "\fB\-fpre\-ipa\-mem\-report\fR" 4
4528 .IX Item "-fpre-ipa-mem-report"
4529 .PD 0
4530 .IP "\fB\-fpost\-ipa\-mem\-report\fR" 4
4531 .IX Item "-fpost-ipa-mem-report"
4532 .PD
4533 Makes the compiler print some statistics about permanent memory
4534 allocation before or after interprocedural optimization.
4535 .IP "\fB\-fstack\-usage\fR" 4
4536 .IX Item "-fstack-usage"
4537 Makes the compiler output stack usage information for the program, on a
4538 per-function basis.  The filename for the dump is made by appending
4539 \&\fI.su\fR to the \fIauxname\fR.  \fIauxname\fR is generated from the name of
4540 the output file, if explicitly specified and it is not an executable,
4541 otherwise it is the basename of the source file.  An entry is made up
4542 of three fields:
4543 .RS 4
4544 .IP "\(bu" 4
4545 The name of the function.
4546 .IP "\(bu" 4
4547 A number of bytes.
4548 .IP "\(bu" 4
4549 One or more qualifiers: \f(CW\*(C`static\*(C'\fR, \f(CW\*(C`dynamic\*(C'\fR, \f(CW\*(C`bounded\*(C'\fR.
4550 .RE
4551 .RS 4
4552 .Sp
4553 The qualifier \f(CW\*(C`static\*(C'\fR means that the function manipulates the stack
4554 statically: a fixed number of bytes are allocated for the frame on function
4555 entry and released on function exit; no stack adjustments are otherwise made
4556 in the function.  The second field is this fixed number of bytes.
4557 .Sp
4558 The qualifier \f(CW\*(C`dynamic\*(C'\fR means that the function manipulates the stack
4559 dynamically: in addition to the static allocation described above, stack
4560 adjustments are made in the body of the function, for example to push/pop
4561 arguments around function calls.  If the qualifier \f(CW\*(C`bounded\*(C'\fR is also
4562 present, the amount of these adjustments is bounded at compile time and
4563 the second field is an upper bound of the total amount of stack used by
4564 the function.  If it is not present, the amount of these adjustments is
4565 not bounded at compile time and the second field only represents the
4566 bounded part.
4567 .RE
4568 .IP "\fB\-fprofile\-arcs\fR" 4
4569 .IX Item "-fprofile-arcs"
4570 Add code so that program flow \fIarcs\fR are instrumented.  During
4571 execution the program records how many times each branch and call is
4572 executed and how many times it is taken or returns.  When the compiled
4573 program exits it saves this data to a file called
4574 \&\fI\fIauxname\fI.gcda\fR for each source file.  The data may be used for
4575 profile-directed optimizations (\fB\-fbranch\-probabilities\fR), or for
4576 test coverage analysis (\fB\-ftest\-coverage\fR).  Each object file's
4577 \&\fIauxname\fR is generated from the name of the output file, if
4578 explicitly specified and it is not the final executable, otherwise it is
4579 the basename of the source file.  In both cases any suffix is removed
4580 (e.g. \fIfoo.gcda\fR for input file \fIdir/foo.c\fR, or
4581 \&\fIdir/foo.gcda\fR for output file specified as \fB\-o dir/foo.o\fR).
4582 .IP "\fB\-\-coverage\fR" 4
4583 .IX Item "--coverage"
4584 This option is used to compile and link code instrumented for coverage
4585 analysis.  The option is a synonym for \fB\-fprofile\-arcs\fR
4586 \&\fB\-ftest\-coverage\fR (when compiling) and \fB\-lgcov\fR (when
4587 linking).  See the documentation for those options for more details.
4588 .RS 4
4589 .IP "\(bu" 4
4590 Compile the source files with \fB\-fprofile\-arcs\fR plus optimization
4591 and code generation options.  For test coverage analysis, use the
4592 additional \fB\-ftest\-coverage\fR option.  You do not need to profile
4593 every source file in a program.
4594 .IP "\(bu" 4
4595 Link your object files with \fB\-lgcov\fR or \fB\-fprofile\-arcs\fR
4596 (the latter implies the former).
4597 .IP "\(bu" 4
4598 Run the program on a representative workload to generate the arc profile
4599 information.  This may be repeated any number of times.  You can run
4600 concurrent instances of your program, and provided that the file system
4601 supports locking, the data files will be correctly updated.  Also
4602 \&\f(CW\*(C`fork\*(C'\fR calls are detected and correctly handled (double counting
4603 will not happen).
4604 .IP "\(bu" 4
4605 For profile-directed optimizations, compile the source files again with
4606 the same optimization and code generation options plus
4607 \&\fB\-fbranch\-probabilities\fR.
4608 .IP "\(bu" 4
4609 For test coverage analysis, use \fBgcov\fR to produce human readable
4610 information from the \fI.gcno\fR and \fI.gcda\fR files.  Refer to the
4611 \&\fBgcov\fR documentation for further information.
4612 .RE
4613 .RS 4
4614 .Sp
4615 With \fB\-fprofile\-arcs\fR, for each function of your program \s-1GCC\s0
4616 creates a program flow graph, then finds a spanning tree for the graph.
4617 Only arcs that are not on the spanning tree have to be instrumented: the
4618 compiler adds code to count the number of times that these arcs are
4619 executed.  When an arc is the only exit or only entrance to a block, the
4620 instrumentation code can be added to the block; otherwise, a new basic
4621 block must be created to hold the instrumentation code.
4622 .RE
4623 .IP "\fB\-ftest\-coverage\fR" 4
4624 .IX Item "-ftest-coverage"
4625 Produce a notes file that the \fBgcov\fR code-coverage utility can use to
4626 show program coverage.  Each source file's note file is called
4627 \&\fI\fIauxname\fI.gcno\fR.  Refer to the \fB\-fprofile\-arcs\fR option
4628 above for a description of \fIauxname\fR and instructions on how to
4629 generate test coverage data.  Coverage data will match the source files
4630 more closely, if you do not optimize.
4631 .IP "\fB\-fdbg\-cnt\-list\fR" 4
4632 .IX Item "-fdbg-cnt-list"
4633 Print the name and the counter upper bound for all debug counters.
4634 .IP "\fB\-fdbg\-cnt=\fR\fIcounter-value-list\fR" 4
4635 .IX Item "-fdbg-cnt=counter-value-list"
4636 Set the internal debug counter upper bound.  \fIcounter-value-list\fR
4637 is a comma-separated list of \fIname\fR:\fIvalue\fR pairs
4638 which sets the upper bound of each debug counter \fIname\fR to \fIvalue\fR.
4639 All debug counters have the initial upper bound of \fI\s-1UINT_MAX\s0\fR,
4640 thus \fIdbg_cnt()\fR returns true always unless the upper bound is set by this option.
4641 e.g. With \-fdbg\-cnt=dce:10,tail_call:0
4642 dbg_cnt(dce) will return true only for first 10 invocations
4643 .IP "\fB\-fenable\-\fR\fIkind\fR\fB\-\fR\fIpass\fR" 4
4644 .IX Item "-fenable-kind-pass"
4645 .PD 0
4646 .IP "\fB\-fdisable\-\fR\fIkind\fR\fB\-\fR\fIpass\fR\fB=\fR\fIrange-list\fR" 4
4647 .IX Item "-fdisable-kind-pass=range-list"
4648 .PD
4649 This is a set of debugging options that are used to explicitly disable/enable
4650 optimization passes. For compiler users, regular options for enabling/disabling
4651 passes should be used instead.
4652 .RS 4
4653 .IP "*<\-fdisable\-ipa\-\fIpass\fR>" 4
4654 .IX Item "*<-fdisable-ipa-pass>"
4655 Disable ipa pass \fIpass\fR. \fIpass\fR is the pass name.  If the same pass is
4656 statically invoked in the compiler multiple times, the pass name should be
4657 appended with a sequential number starting from 1.
4658 .IP "*<\-fdisable\-rtl\-\fIpass\fR>" 4
4659 .IX Item "*<-fdisable-rtl-pass>"
4660 .PD 0
4661 .IP "*<\-fdisable\-rtl\-\fIpass\fR=\fIrange-list\fR>" 4
4662 .IX Item "*<-fdisable-rtl-pass=range-list>"
4663 .PD
4664 Disable rtl pass \fIpass\fR.  \fIpass\fR is the pass name.  If the same pass is
4665 statically invoked in the compiler multiple times, the pass name should be
4666 appended with a sequential number starting from 1.  \fIrange-list\fR is a comma
4667 seperated list of function ranges or assembler names.  Each range is a number
4668 pair seperated by a colon.  The range is inclusive in both ends.  If the range
4669 is trivial, the number pair can be simplified as a single number.  If the
4670 function's cgraph node's \fIuid\fR is falling within one of the specified ranges,
4671 the \fIpass\fR is disabled for that function.  The \fIuid\fR is shown in the
4672 function header of a dump file, and the pass names can be dumped by using
4673 option \fB\-fdump\-passes\fR.
4674 .IP "*<\-fdisable\-tree\-\fIpass\fR>" 4
4675 .IX Item "*<-fdisable-tree-pass>"
4676 .PD 0
4677 .IP "*<\-fdisable\-tree\-\fIpass\fR=\fIrange-list\fR>" 4
4678 .IX Item "*<-fdisable-tree-pass=range-list>"
4679 .PD
4680 Disable tree pass \fIpass\fR.  See \fB\-fdisable\-rtl\fR for the description of
4681 option arguments.
4682 .IP "*<\-fenable\-ipa\-\fIpass\fR>" 4
4683 .IX Item "*<-fenable-ipa-pass>"
4684 Enable ipa pass \fIpass\fR.  \fIpass\fR is the pass name.  If the same pass is
4685 statically invoked in the compiler multiple times, the pass name should be
4686 appended with a sequential number starting from 1.
4687 .IP "*<\-fenable\-rtl\-\fIpass\fR>" 4
4688 .IX Item "*<-fenable-rtl-pass>"
4689 .PD 0
4690 .IP "*<\-fenable\-rtl\-\fIpass\fR=\fIrange-list\fR>" 4
4691 .IX Item "*<-fenable-rtl-pass=range-list>"
4692 .PD
4693 Enable rtl pass \fIpass\fR.  See \fB\-fdisable\-rtl\fR for option argument
4694 description and examples.
4695 .IP "*<\-fenable\-tree\-\fIpass\fR>" 4
4696 .IX Item "*<-fenable-tree-pass>"
4697 .PD 0
4698 .IP "*<\-fenable\-tree\-\fIpass\fR=\fIrange-list\fR>" 4
4699 .IX Item "*<-fenable-tree-pass=range-list>"
4700 .PD
4701 Enable tree pass \fIpass\fR.  See \fB\-fdisable\-rtl\fR for the description
4702 of option arguments.
4703 .Sp
4704 .Vb 10
4705 \&        # disable ccp1 for all functions
4706 \&           \-fdisable\-tree\-ccp1
4707 \&        # disable complete unroll for function whose cgraph node uid is 1
4708 \&           \-fenable\-tree\-cunroll=1
4709 \&        # disable gcse2 for functions at the following ranges [1,1],
4710 \&        # [300,400], and [400,1000]
4711 \&        # disable gcse2 for functions foo and foo2
4712 \&           \-fdisable\-rtl\-gcse2=foo,foo2
4713 \&        # disable early inlining
4714 \&           \-fdisable\-tree\-einline
4715 \&        # disable ipa inlining
4716 \&           \-fdisable\-ipa\-inline
4717 \&        # enable tree full unroll
4718 \&           \-fenable\-tree\-unroll
4719 .Ve
4720 .RE
4721 .RS 4
4722 .RE
4723 .IP "\fB\-d\fR\fIletters\fR" 4
4724 .IX Item "-dletters"
4725 .PD 0
4726 .IP "\fB\-fdump\-rtl\-\fR\fIpass\fR" 4
4727 .IX Item "-fdump-rtl-pass"
4728 .PD
4729 Says to make debugging dumps during compilation at times specified by
4730 \&\fIletters\fR.  This is used for debugging the RTL-based passes of the
4731 compiler.  The file names for most of the dumps are made by appending
4732 a pass number and a word to the \fIdumpname\fR, and the files are
4733 created in the directory of the output file.  Note that the pass
4734 number is computed statically as passes get registered into the pass
4735 manager.  Thus the numbering is not related to the dynamic order of
4736 execution of passes.  In particular, a pass installed by a plugin
4737 could have a number over 200 even if it executed quite early.
4738 \&\fIdumpname\fR is generated from the name of the output file, if
4739 explicitly specified and it is not an executable, otherwise it is the
4740 basename of the source file. These switches may have different effects
4741 when \fB\-E\fR is used for preprocessing.
4742 .Sp
4743 Debug dumps can be enabled with a \fB\-fdump\-rtl\fR switch or some
4744 \&\fB\-d\fR option \fIletters\fR.  Here are the possible
4745 letters for use in \fIpass\fR and \fIletters\fR, and their meanings:
4746 .RS 4
4747 .IP "\fB\-fdump\-rtl\-alignments\fR" 4
4748 .IX Item "-fdump-rtl-alignments"
4749 Dump after branch alignments have been computed.
4750 .IP "\fB\-fdump\-rtl\-asmcons\fR" 4
4751 .IX Item "-fdump-rtl-asmcons"
4752 Dump after fixing rtl statements that have unsatisfied in/out constraints.
4753 .IP "\fB\-fdump\-rtl\-auto_inc_dec\fR" 4
4754 .IX Item "-fdump-rtl-auto_inc_dec"
4755 Dump after auto-inc-dec discovery.  This pass is only run on
4756 architectures that have auto inc or auto dec instructions.
4757 .IP "\fB\-fdump\-rtl\-barriers\fR" 4
4758 .IX Item "-fdump-rtl-barriers"
4759 Dump after cleaning up the barrier instructions.
4760 .IP "\fB\-fdump\-rtl\-bbpart\fR" 4
4761 .IX Item "-fdump-rtl-bbpart"
4762 Dump after partitioning hot and cold basic blocks.
4763 .IP "\fB\-fdump\-rtl\-bbro\fR" 4
4764 .IX Item "-fdump-rtl-bbro"
4765 Dump after block reordering.
4766 .IP "\fB\-fdump\-rtl\-btl1\fR" 4
4767 .IX Item "-fdump-rtl-btl1"
4768 .PD 0
4769 .IP "\fB\-fdump\-rtl\-btl2\fR" 4
4770 .IX Item "-fdump-rtl-btl2"
4771 .PD
4772 \&\fB\-fdump\-rtl\-btl1\fR and \fB\-fdump\-rtl\-btl2\fR enable dumping
4773 after the two branch
4774 target load optimization passes.
4775 .IP "\fB\-fdump\-rtl\-bypass\fR" 4
4776 .IX Item "-fdump-rtl-bypass"
4777 Dump after jump bypassing and control flow optimizations.
4778 .IP "\fB\-fdump\-rtl\-combine\fR" 4
4779 .IX Item "-fdump-rtl-combine"
4780 Dump after the \s-1RTL\s0 instruction combination pass.
4781 .IP "\fB\-fdump\-rtl\-compgotos\fR" 4
4782 .IX Item "-fdump-rtl-compgotos"
4783 Dump after duplicating the computed gotos.
4784 .IP "\fB\-fdump\-rtl\-ce1\fR" 4
4785 .IX Item "-fdump-rtl-ce1"
4786 .PD 0
4787 .IP "\fB\-fdump\-rtl\-ce2\fR" 4
4788 .IX Item "-fdump-rtl-ce2"
4789 .IP "\fB\-fdump\-rtl\-ce3\fR" 4
4790 .IX Item "-fdump-rtl-ce3"
4791 .PD
4792 \&\fB\-fdump\-rtl\-ce1\fR, \fB\-fdump\-rtl\-ce2\fR, and
4793 \&\fB\-fdump\-rtl\-ce3\fR enable dumping after the three
4794 if conversion passes.
4795 .IP "\fB\-fdump\-rtl\-cprop_hardreg\fR" 4
4796 .IX Item "-fdump-rtl-cprop_hardreg"
4797 Dump after hard register copy propagation.
4798 .IP "\fB\-fdump\-rtl\-csa\fR" 4
4799 .IX Item "-fdump-rtl-csa"
4800 Dump after combining stack adjustments.
4801 .IP "\fB\-fdump\-rtl\-cse1\fR" 4
4802 .IX Item "-fdump-rtl-cse1"
4803 .PD 0
4804 .IP "\fB\-fdump\-rtl\-cse2\fR" 4
4805 .IX Item "-fdump-rtl-cse2"
4806 .PD
4807 \&\fB\-fdump\-rtl\-cse1\fR and \fB\-fdump\-rtl\-cse2\fR enable dumping after
4808 the two common sub-expression elimination passes.
4809 .IP "\fB\-fdump\-rtl\-dce\fR" 4
4810 .IX Item "-fdump-rtl-dce"
4811 Dump after the standalone dead code elimination passes.
4812 .IP "\fB\-fdump\-rtl\-dbr\fR" 4
4813 .IX Item "-fdump-rtl-dbr"
4814 Dump after delayed branch scheduling.
4815 .IP "\fB\-fdump\-rtl\-dce1\fR" 4
4816 .IX Item "-fdump-rtl-dce1"
4817 .PD 0
4818 .IP "\fB\-fdump\-rtl\-dce2\fR" 4
4819 .IX Item "-fdump-rtl-dce2"
4820 .PD
4821 \&\fB\-fdump\-rtl\-dce1\fR and \fB\-fdump\-rtl\-dce2\fR enable dumping after
4822 the two dead store elimination passes.
4823 .IP "\fB\-fdump\-rtl\-eh\fR" 4
4824 .IX Item "-fdump-rtl-eh"
4825 Dump after finalization of \s-1EH\s0 handling code.
4826 .IP "\fB\-fdump\-rtl\-eh_ranges\fR" 4
4827 .IX Item "-fdump-rtl-eh_ranges"
4828 Dump after conversion of \s-1EH\s0 handling range regions.
4829 .IP "\fB\-fdump\-rtl\-expand\fR" 4
4830 .IX Item "-fdump-rtl-expand"
4831 Dump after \s-1RTL\s0 generation.
4832 .IP "\fB\-fdump\-rtl\-fwprop1\fR" 4
4833 .IX Item "-fdump-rtl-fwprop1"
4834 .PD 0
4835 .IP "\fB\-fdump\-rtl\-fwprop2\fR" 4
4836 .IX Item "-fdump-rtl-fwprop2"
4837 .PD
4838 \&\fB\-fdump\-rtl\-fwprop1\fR and \fB\-fdump\-rtl\-fwprop2\fR enable
4839 dumping after the two forward propagation passes.
4840 .IP "\fB\-fdump\-rtl\-gcse1\fR" 4
4841 .IX Item "-fdump-rtl-gcse1"
4842 .PD 0
4843 .IP "\fB\-fdump\-rtl\-gcse2\fR" 4
4844 .IX Item "-fdump-rtl-gcse2"
4845 .PD
4846 \&\fB\-fdump\-rtl\-gcse1\fR and \fB\-fdump\-rtl\-gcse2\fR enable dumping
4847 after global common subexpression elimination.
4848 .IP "\fB\-fdump\-rtl\-init\-regs\fR" 4
4849 .IX Item "-fdump-rtl-init-regs"
4850 Dump after the initialization of the registers.
4851 .IP "\fB\-fdump\-rtl\-initvals\fR" 4
4852 .IX Item "-fdump-rtl-initvals"
4853 Dump after the computation of the initial value sets.
4854 .IP "\fB\-fdump\-rtl\-into_cfglayout\fR" 4
4855 .IX Item "-fdump-rtl-into_cfglayout"
4856 Dump after converting to cfglayout mode.
4857 .IP "\fB\-fdump\-rtl\-ira\fR" 4
4858 .IX Item "-fdump-rtl-ira"
4859 Dump after iterated register allocation.
4860 .IP "\fB\-fdump\-rtl\-jump\fR" 4
4861 .IX Item "-fdump-rtl-jump"
4862 Dump after the second jump optimization.
4863 .IP "\fB\-fdump\-rtl\-loop2\fR" 4
4864 .IX Item "-fdump-rtl-loop2"
4865 \&\fB\-fdump\-rtl\-loop2\fR enables dumping after the rtl
4866 loop optimization passes.
4867 .IP "\fB\-fdump\-rtl\-mach\fR" 4
4868 .IX Item "-fdump-rtl-mach"
4869 Dump after performing the machine dependent reorganization pass, if that
4870 pass exists.
4871 .IP "\fB\-fdump\-rtl\-mode_sw\fR" 4
4872 .IX Item "-fdump-rtl-mode_sw"
4873 Dump after removing redundant mode switches.
4874 .IP "\fB\-fdump\-rtl\-rnreg\fR" 4
4875 .IX Item "-fdump-rtl-rnreg"
4876 Dump after register renumbering.
4877 .IP "\fB\-fdump\-rtl\-outof_cfglayout\fR" 4
4878 .IX Item "-fdump-rtl-outof_cfglayout"
4879 Dump after converting from cfglayout mode.
4880 .IP "\fB\-fdump\-rtl\-peephole2\fR" 4
4881 .IX Item "-fdump-rtl-peephole2"
4882 Dump after the peephole pass.
4883 .IP "\fB\-fdump\-rtl\-postreload\fR" 4
4884 .IX Item "-fdump-rtl-postreload"
4885 Dump after post-reload optimizations.
4886 .IP "\fB\-fdump\-rtl\-pro_and_epilogue\fR" 4
4887 .IX Item "-fdump-rtl-pro_and_epilogue"
4888 Dump after generating the function prologues and epilogues.
4889 .IP "\fB\-fdump\-rtl\-regmove\fR" 4
4890 .IX Item "-fdump-rtl-regmove"
4891 Dump after the register move pass.
4892 .IP "\fB\-fdump\-rtl\-sched1\fR" 4
4893 .IX Item "-fdump-rtl-sched1"
4894 .PD 0
4895 .IP "\fB\-fdump\-rtl\-sched2\fR" 4
4896 .IX Item "-fdump-rtl-sched2"
4897 .PD
4898 \&\fB\-fdump\-rtl\-sched1\fR and \fB\-fdump\-rtl\-sched2\fR enable dumping
4899 after the basic block scheduling passes.
4900 .IP "\fB\-fdump\-rtl\-see\fR" 4
4901 .IX Item "-fdump-rtl-see"
4902 Dump after sign extension elimination.
4903 .IP "\fB\-fdump\-rtl\-seqabstr\fR" 4
4904 .IX Item "-fdump-rtl-seqabstr"
4905 Dump after common sequence discovery.
4906 .IP "\fB\-fdump\-rtl\-shorten\fR" 4
4907 .IX Item "-fdump-rtl-shorten"
4908 Dump after shortening branches.
4909 .IP "\fB\-fdump\-rtl\-sibling\fR" 4
4910 .IX Item "-fdump-rtl-sibling"
4911 Dump after sibling call optimizations.
4912 .IP "\fB\-fdump\-rtl\-split1\fR" 4
4913 .IX Item "-fdump-rtl-split1"
4914 .PD 0
4915 .IP "\fB\-fdump\-rtl\-split2\fR" 4
4916 .IX Item "-fdump-rtl-split2"
4917 .IP "\fB\-fdump\-rtl\-split3\fR" 4
4918 .IX Item "-fdump-rtl-split3"
4919 .IP "\fB\-fdump\-rtl\-split4\fR" 4
4920 .IX Item "-fdump-rtl-split4"
4921 .IP "\fB\-fdump\-rtl\-split5\fR" 4
4922 .IX Item "-fdump-rtl-split5"
4923 .PD
4924 \&\fB\-fdump\-rtl\-split1\fR, \fB\-fdump\-rtl\-split2\fR,
4925 \&\fB\-fdump\-rtl\-split3\fR, \fB\-fdump\-rtl\-split4\fR and
4926 \&\fB\-fdump\-rtl\-split5\fR enable dumping after five rounds of
4927 instruction splitting.
4928 .IP "\fB\-fdump\-rtl\-sms\fR" 4
4929 .IX Item "-fdump-rtl-sms"
4930 Dump after modulo scheduling.  This pass is only run on some
4931 architectures.
4932 .IP "\fB\-fdump\-rtl\-stack\fR" 4
4933 .IX Item "-fdump-rtl-stack"
4934 Dump after conversion from \s-1GCC\s0's \*(L"flat register file\*(R" registers to the
4935 x87's stack-like registers.  This pass is only run on x86 variants.
4936 .IP "\fB\-fdump\-rtl\-subreg1\fR" 4
4937 .IX Item "-fdump-rtl-subreg1"
4938 .PD 0
4939 .IP "\fB\-fdump\-rtl\-subreg2\fR" 4
4940 .IX Item "-fdump-rtl-subreg2"
4941 .PD
4942 \&\fB\-fdump\-rtl\-subreg1\fR and \fB\-fdump\-rtl\-subreg2\fR enable dumping after
4943 the two subreg expansion passes.
4944 .IP "\fB\-fdump\-rtl\-unshare\fR" 4
4945 .IX Item "-fdump-rtl-unshare"
4946 Dump after all rtl has been unshared.
4947 .IP "\fB\-fdump\-rtl\-vartrack\fR" 4
4948 .IX Item "-fdump-rtl-vartrack"
4949 Dump after variable tracking.
4950 .IP "\fB\-fdump\-rtl\-vregs\fR" 4
4951 .IX Item "-fdump-rtl-vregs"
4952 Dump after converting virtual registers to hard registers.
4953 .IP "\fB\-fdump\-rtl\-web\fR" 4
4954 .IX Item "-fdump-rtl-web"
4955 Dump after live range splitting.
4956 .IP "\fB\-fdump\-rtl\-regclass\fR" 4
4957 .IX Item "-fdump-rtl-regclass"
4958 .PD 0
4959 .IP "\fB\-fdump\-rtl\-subregs_of_mode_init\fR" 4
4960 .IX Item "-fdump-rtl-subregs_of_mode_init"
4961 .IP "\fB\-fdump\-rtl\-subregs_of_mode_finish\fR" 4
4962 .IX Item "-fdump-rtl-subregs_of_mode_finish"
4963 .IP "\fB\-fdump\-rtl\-dfinit\fR" 4
4964 .IX Item "-fdump-rtl-dfinit"
4965 .IP "\fB\-fdump\-rtl\-dfinish\fR" 4
4966 .IX Item "-fdump-rtl-dfinish"
4967 .PD
4968 These dumps are defined but always produce empty files.
4969 .IP "\fB\-da\fR" 4
4970 .IX Item "-da"
4971 .PD 0
4972 .IP "\fB\-fdump\-rtl\-all\fR" 4
4973 .IX Item "-fdump-rtl-all"
4974 .PD
4975 Produce all the dumps listed above.
4976 .IP "\fB\-dA\fR" 4
4977 .IX Item "-dA"
4978 Annotate the assembler output with miscellaneous debugging information.
4979 .IP "\fB\-dD\fR" 4
4980 .IX Item "-dD"
4981 Dump all macro definitions, at the end of preprocessing, in addition to
4982 normal output.
4983 .IP "\fB\-dH\fR" 4
4984 .IX Item "-dH"
4985 Produce a core dump whenever an error occurs.
4986 .IP "\fB\-dp\fR" 4
4987 .IX Item "-dp"
4988 Annotate the assembler output with a comment indicating which
4989 pattern and alternative was used.  The length of each instruction is
4990 also printed.
4991 .IP "\fB\-dP\fR" 4
4992 .IX Item "-dP"
4993 Dump the \s-1RTL\s0 in the assembler output as a comment before each instruction.
4994 Also turns on \fB\-dp\fR annotation.
4995 .IP "\fB\-dv\fR" 4
4996 .IX Item "-dv"
4997 For each of the other indicated dump files (\fB\-fdump\-rtl\-\fR\fIpass\fR),
4998 dump a representation of the control flow graph suitable for viewing with \s-1VCG\s0
4999 to \fI\fIfile\fI.\fIpass\fI.vcg\fR.
5000 .IP "\fB\-dx\fR" 4
5001 .IX Item "-dx"
5002 Just generate \s-1RTL\s0 for a function instead of compiling it.  Usually used
5003 with \fB\-fdump\-rtl\-expand\fR.
5004 .RE
5005 .RS 4
5006 .RE
5007 .IP "\fB\-fdump\-noaddr\fR" 4
5008 .IX Item "-fdump-noaddr"
5009 When doing debugging dumps, suppress address output.  This makes it more
5010 feasible to use diff on debugging dumps for compiler invocations with
5011 different compiler binaries and/or different
5012 text / bss / data / heap / stack / dso start locations.
5013 .IP "\fB\-fdump\-unnumbered\fR" 4
5014 .IX Item "-fdump-unnumbered"
5015 When doing debugging dumps, suppress instruction numbers and address output.
5016 This makes it more feasible to use diff on debugging dumps for compiler
5017 invocations with different options, in particular with and without
5018 \&\fB\-g\fR.
5019 .IP "\fB\-fdump\-unnumbered\-links\fR" 4
5020 .IX Item "-fdump-unnumbered-links"
5021 When doing debugging dumps (see \fB\-d\fR option above), suppress
5022 instruction numbers for the links to the previous and next instructions
5023 in a sequence.
5024 .IP "\fB\-fdump\-translation\-unit\fR (\*(C+ only)" 4
5025 .IX Item "-fdump-translation-unit ( only)"
5026 .PD 0
5027 .IP "\fB\-fdump\-translation\-unit\-\fR\fIoptions\fR\fB \fR(\*(C+ only)" 4
5028 .IX Item "-fdump-translation-unit-options ( only)"
5029 .PD
5030 Dump a representation of the tree structure for the entire translation
5031 unit to a file.  The file name is made by appending \fI.tu\fR to the
5032 source file name, and the file is created in the same directory as the
5033 output file.  If the \fB\-\fR\fIoptions\fR form is used, \fIoptions\fR
5034 controls the details of the dump as described for the
5035 \&\fB\-fdump\-tree\fR options.
5036 .IP "\fB\-fdump\-class\-hierarchy\fR (\*(C+ only)" 4
5037 .IX Item "-fdump-class-hierarchy ( only)"
5038 .PD 0
5039 .IP "\fB\-fdump\-class\-hierarchy\-\fR\fIoptions\fR\fB \fR(\*(C+ only)" 4
5040 .IX Item "-fdump-class-hierarchy-options ( only)"
5041 .PD
5042 Dump a representation of each class's hierarchy and virtual function
5043 table layout to a file.  The file name is made by appending
5044 \&\fI.class\fR to the source file name, and the file is created in the
5045 same directory as the output file.  If the \fB\-\fR\fIoptions\fR form
5046 is used, \fIoptions\fR controls the details of the dump as described
5047 for the \fB\-fdump\-tree\fR options.
5048 .IP "\fB\-fdump\-ipa\-\fR\fIswitch\fR" 4
5049 .IX Item "-fdump-ipa-switch"
5050 Control the dumping at various stages of inter-procedural analysis
5051 language tree to a file.  The file name is generated by appending a
5052 switch specific suffix to the source file name, and the file is created
5053 in the same directory as the output file.  The following dumps are
5054 possible:
5055 .RS 4
5056 .IP "\fBall\fR" 4
5057 .IX Item "all"
5058 Enables all inter-procedural analysis dumps.
5059 .IP "\fBcgraph\fR" 4
5060 .IX Item "cgraph"
5061 Dumps information about call-graph optimization, unused function removal,
5062 and inlining decisions.
5063 .IP "\fBinline\fR" 4
5064 .IX Item "inline"
5065 Dump after function inlining.
5066 .RE
5067 .RS 4
5068 .RE
5069 .IP "\fB\-fdump\-passes\fR" 4
5070 .IX Item "-fdump-passes"
5071 Dump the list of optimization passes that are turned on and off by
5072 the current command-line options.
5073 .IP "\fB\-fdump\-statistics\-\fR\fIoption\fR" 4
5074 .IX Item "-fdump-statistics-option"
5075 Enable and control dumping of pass statistics in a separate file.  The
5076 file name is generated by appending a suffix ending in
5077 \&\fB.statistics\fR to the source file name, and the file is created in
5078 the same directory as the output file.  If the \fB\-\fR\fIoption\fR
5079 form is used, \fB\-stats\fR will cause counters to be summed over the
5080 whole compilation unit while \fB\-details\fR will dump every event as
5081 the passes generate them.  The default with no option is to sum
5082 counters for each function compiled.
5083 .IP "\fB\-fdump\-tree\-\fR\fIswitch\fR" 4
5084 .IX Item "-fdump-tree-switch"
5085 .PD 0
5086 .IP "\fB\-fdump\-tree\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR" 4
5087 .IX Item "-fdump-tree-switch-options"
5088 .PD
5089 Control the dumping at various stages of processing the intermediate
5090 language tree to a file.  The file name is generated by appending a
5091 switch specific suffix to the source file name, and the file is
5092 created in the same directory as the output file.  If the
5093 \&\fB\-\fR\fIoptions\fR form is used, \fIoptions\fR is a list of
5094 \&\fB\-\fR separated options which control the details of the dump.  Not
5095 all options are applicable to all dumps; those that are not
5096 meaningful will be ignored.  The following options are available
5097 .RS 4
5098 .IP "\fBaddress\fR" 4
5099 .IX Item "address"
5100 Print the address of each node.  Usually this is not meaningful as it
5101 changes according to the environment and source file.  Its primary use
5102 is for tying up a dump file with a debug environment.
5103 .IP "\fBasmname\fR" 4
5104 .IX Item "asmname"
5105 If \f(CW\*(C`DECL_ASSEMBLER_NAME\*(C'\fR has been set for a given decl, use that
5106 in the dump instead of \f(CW\*(C`DECL_NAME\*(C'\fR.  Its primary use is ease of
5107 use working backward from mangled names in the assembly file.
5108 .IP "\fBslim\fR" 4
5109 .IX Item "slim"
5110 Inhibit dumping of members of a scope or body of a function merely
5111 because that scope has been reached.  Only dump such items when they
5112 are directly reachable by some other path.  When dumping pretty-printed
5113 trees, this option inhibits dumping the bodies of control structures.
5114 .IP "\fBraw\fR" 4
5115 .IX Item "raw"
5116 Print a raw representation of the tree.  By default, trees are
5117 pretty-printed into a C\-like representation.
5118 .IP "\fBdetails\fR" 4
5119 .IX Item "details"
5120 Enable more detailed dumps (not honored by every dump option).
5121 .IP "\fBstats\fR" 4
5122 .IX Item "stats"
5123 Enable dumping various statistics about the pass (not honored by every dump
5124 option).
5125 .IP "\fBblocks\fR" 4
5126 .IX Item "blocks"
5127 Enable showing basic block boundaries (disabled in raw dumps).
5128 .IP "\fBvops\fR" 4
5129 .IX Item "vops"
5130 Enable showing virtual operands for every statement.
5131 .IP "\fBlineno\fR" 4
5132 .IX Item "lineno"
5133 Enable showing line numbers for statements.
5134 .IP "\fBuid\fR" 4
5135 .IX Item "uid"
5136 Enable showing the unique \s-1ID\s0 (\f(CW\*(C`DECL_UID\*(C'\fR) for each variable.
5137 .IP "\fBverbose\fR" 4
5138 .IX Item "verbose"
5139 Enable showing the tree dump for each statement.
5140 .IP "\fBeh\fR" 4
5141 .IX Item "eh"
5142 Enable showing the \s-1EH\s0 region number holding each statement.
5143 .IP "\fBscev\fR" 4
5144 .IX Item "scev"
5145 Enable showing scalar evolution analysis details.
5146 .IP "\fBall\fR" 4
5147 .IX Item "all"
5148 Turn on all options, except \fBraw\fR, \fBslim\fR, \fBverbose\fR
5149 and \fBlineno\fR.
5150 .RE
5151 .RS 4
5152 .Sp
5153 The following tree dumps are possible:
5154 .IP "\fBoriginal\fR" 4
5155 .IX Item "original"
5156 Dump before any tree based optimization, to \fI\fIfile\fI.original\fR.
5157 .IP "\fBoptimized\fR" 4
5158 .IX Item "optimized"
5159 Dump after all tree based optimization, to \fI\fIfile\fI.optimized\fR.
5160 .IP "\fBgimple\fR" 4
5161 .IX Item "gimple"
5162 Dump each function before and after the gimplification pass to a file.  The
5163 file name is made by appending \fI.gimple\fR to the source file name.
5164 .IP "\fBcfg\fR" 4
5165 .IX Item "cfg"
5166 Dump the control flow graph of each function to a file.  The file name is
5167 made by appending \fI.cfg\fR to the source file name.
5168 .IP "\fBvcg\fR" 4
5169 .IX Item "vcg"
5170 Dump the control flow graph of each function to a file in \s-1VCG\s0 format.  The
5171 file name is made by appending \fI.vcg\fR to the source file name.  Note
5172 that if the file contains more than one function, the generated file cannot
5173 be used directly by \s-1VCG\s0.  You will need to cut and paste each function's
5174 graph into its own separate file first.
5175 .IP "\fBch\fR" 4
5176 .IX Item "ch"
5177 Dump each function after copying loop headers.  The file name is made by
5178 appending \fI.ch\fR to the source file name.
5179 .IP "\fBssa\fR" 4
5180 .IX Item "ssa"
5181 Dump \s-1SSA\s0 related information to a file.  The file name is made by appending
5182 \&\fI.ssa\fR to the source file name.
5183 .IP "\fBalias\fR" 4
5184 .IX Item "alias"
5185 Dump aliasing information for each function.  The file name is made by
5186 appending \fI.alias\fR to the source file name.
5187 .IP "\fBccp\fR" 4
5188 .IX Item "ccp"
5189 Dump each function after \s-1CCP\s0.  The file name is made by appending
5190 \&\fI.ccp\fR to the source file name.
5191 .IP "\fBstoreccp\fR" 4
5192 .IX Item "storeccp"
5193 Dump each function after STORE-CCP.  The file name is made by appending
5194 \&\fI.storeccp\fR to the source file name.
5195 .IP "\fBpre\fR" 4
5196 .IX Item "pre"
5197 Dump trees after partial redundancy elimination.  The file name is made
5198 by appending \fI.pre\fR to the source file name.
5199 .IP "\fBfre\fR" 4
5200 .IX Item "fre"
5201 Dump trees after full redundancy elimination.  The file name is made
5202 by appending \fI.fre\fR to the source file name.
5203 .IP "\fBcopyprop\fR" 4
5204 .IX Item "copyprop"
5205 Dump trees after copy propagation.  The file name is made
5206 by appending \fI.copyprop\fR to the source file name.
5207 .IP "\fBstore_copyprop\fR" 4
5208 .IX Item "store_copyprop"
5209 Dump trees after store copy-propagation.  The file name is made
5210 by appending \fI.store_copyprop\fR to the source file name.
5211 .IP "\fBdce\fR" 4
5212 .IX Item "dce"
5213 Dump each function after dead code elimination.  The file name is made by
5214 appending \fI.dce\fR to the source file name.
5215 .IP "\fBmudflap\fR" 4
5216 .IX Item "mudflap"
5217 Dump each function after adding mudflap instrumentation.  The file name is
5218 made by appending \fI.mudflap\fR to the source file name.
5219 .IP "\fBsra\fR" 4
5220 .IX Item "sra"
5221 Dump each function after performing scalar replacement of aggregates.  The
5222 file name is made by appending \fI.sra\fR to the source file name.
5223 .IP "\fBsink\fR" 4
5224 .IX Item "sink"
5225 Dump each function after performing code sinking.  The file name is made
5226 by appending \fI.sink\fR to the source file name.
5227 .IP "\fBdom\fR" 4
5228 .IX Item "dom"
5229 Dump each function after applying dominator tree optimizations.  The file
5230 name is made by appending \fI.dom\fR to the source file name.
5231 .IP "\fBdse\fR" 4
5232 .IX Item "dse"
5233 Dump each function after applying dead store elimination.  The file
5234 name is made by appending \fI.dse\fR to the source file name.
5235 .IP "\fBphiopt\fR" 4
5236 .IX Item "phiopt"
5237 Dump each function after optimizing \s-1PHI\s0 nodes into straightline code.  The file
5238 name is made by appending \fI.phiopt\fR to the source file name.
5239 .IP "\fBforwprop\fR" 4
5240 .IX Item "forwprop"
5241 Dump each function after forward propagating single use variables.  The file
5242 name is made by appending \fI.forwprop\fR to the source file name.
5243 .IP "\fBcopyrename\fR" 4
5244 .IX Item "copyrename"
5245 Dump each function after applying the copy rename optimization.  The file
5246 name is made by appending \fI.copyrename\fR to the source file name.
5247 .IP "\fBnrv\fR" 4
5248 .IX Item "nrv"
5249 Dump each function after applying the named return value optimization on
5250 generic trees.  The file name is made by appending \fI.nrv\fR to the source
5251 file name.
5252 .IP "\fBvect\fR" 4
5253 .IX Item "vect"
5254 Dump each function after applying vectorization of loops.  The file name is
5255 made by appending \fI.vect\fR to the source file name.
5256 .IP "\fBslp\fR" 4
5257 .IX Item "slp"
5258 Dump each function after applying vectorization of basic blocks.  The file name
5259 is made by appending \fI.slp\fR to the source file name.
5260 .IP "\fBvrp\fR" 4
5261 .IX Item "vrp"
5262 Dump each function after Value Range Propagation (\s-1VRP\s0).  The file name
5263 is made by appending \fI.vrp\fR to the source file name.
5264 .IP "\fBall\fR" 4
5265 .IX Item "all"
5266 Enable all the available tree dumps with the flags provided in this option.
5267 .RE
5268 .RS 4
5269 .RE
5270 .IP "\fB\-ftree\-vectorizer\-verbose=\fR\fIn\fR" 4
5271 .IX Item "-ftree-vectorizer-verbose=n"
5272 This option controls the amount of debugging output the vectorizer prints.
5273 This information is written to standard error, unless
5274 \&\fB\-fdump\-tree\-all\fR or \fB\-fdump\-tree\-vect\fR is specified,
5275 in which case it is output to the usual dump listing file, \fI.vect\fR.
5276 For \fIn\fR=0 no diagnostic information is reported.
5277 If \fIn\fR=1 the vectorizer reports each loop that got vectorized,
5278 and the total number of loops that got vectorized.
5279 If \fIn\fR=2 the vectorizer also reports non-vectorized loops that passed
5280 the first analysis phase (vect_analyze_loop_form) \- i.e. countable,
5281 inner-most, single-bb, single\-entry/exit loops.  This is the same verbosity
5282 level that \fB\-fdump\-tree\-vect\-stats\fR uses.
5283 Higher verbosity levels mean either more information dumped for each
5284 reported loop, or same amount of information reported for more loops:
5285 if \fIn\fR=3, vectorizer cost model information is reported.
5286 If \fIn\fR=4, alignment related information is added to the reports.
5287 If \fIn\fR=5, data-references related information (e.g. memory dependences,
5288 memory access-patterns) is added to the reports.
5289 If \fIn\fR=6, the vectorizer reports also non-vectorized inner-most loops
5290 that did not pass the first analysis phase (i.e., may not be countable, or
5291 may have complicated control-flow).
5292 If \fIn\fR=7, the vectorizer reports also non-vectorized nested loops.
5293 If \fIn\fR=8, \s-1SLP\s0 related information is added to the reports.
5294 For \fIn\fR=9, all the information the vectorizer generates during its
5295 analysis and transformation is reported.  This is the same verbosity level
5296 that \fB\-fdump\-tree\-vect\-details\fR uses.
5297 .IP "\fB\-frandom\-seed=\fR\fIstring\fR" 4
5298 .IX Item "-frandom-seed=string"
5299 This option provides a seed that \s-1GCC\s0 uses when it would otherwise use
5300 random numbers.  It is used to generate certain symbol names
5301 that have to be different in every compiled file.  It is also used to
5302 place unique stamps in coverage data files and the object files that
5303 produce them.  You can use the \fB\-frandom\-seed\fR option to produce
5304 reproducibly identical object files.
5305 .Sp
5306 The \fIstring\fR should be different for every file you compile.
5307 .IP "\fB\-fsched\-verbose=\fR\fIn\fR" 4
5308 .IX Item "-fsched-verbose=n"
5309 On targets that use instruction scheduling, this option controls the
5310 amount of debugging output the scheduler prints.  This information is
5311 written to standard error, unless \fB\-fdump\-rtl\-sched1\fR or
5312 \&\fB\-fdump\-rtl\-sched2\fR is specified, in which case it is output
5313 to the usual dump listing file, \fI.sched1\fR or \fI.sched2\fR
5314 respectively.  However for \fIn\fR greater than nine, the output is
5315 always printed to standard error.
5316 .Sp
5317 For \fIn\fR greater than zero, \fB\-fsched\-verbose\fR outputs the
5318 same information as \fB\-fdump\-rtl\-sched1\fR and \fB\-fdump\-rtl\-sched2\fR.
5319 For \fIn\fR greater than one, it also output basic block probabilities,
5320 detailed ready list information and unit/insn info.  For \fIn\fR greater
5321 than two, it includes \s-1RTL\s0 at abort point, control-flow and regions info.
5322 And for \fIn\fR over four, \fB\-fsched\-verbose\fR also includes
5323 dependence info.
5324 .IP "\fB\-save\-temps\fR" 4
5325 .IX Item "-save-temps"
5326 .PD 0
5327 .IP "\fB\-save\-temps=cwd\fR" 4
5328 .IX Item "-save-temps=cwd"
5329 .PD
5330 Store the usual \*(L"temporary\*(R" intermediate files permanently; place them
5331 in the current directory and name them based on the source file.  Thus,
5332 compiling \fIfoo.c\fR with \fB\-c \-save\-temps\fR would produce files
5333 \&\fIfoo.i\fR and \fIfoo.s\fR, as well as \fIfoo.o\fR.  This creates a
5334 preprocessed \fIfoo.i\fR output file even though the compiler now
5335 normally uses an integrated preprocessor.
5336 .Sp
5337 When used in combination with the \fB\-x\fR command-line option,
5338 \&\fB\-save\-temps\fR is sensible enough to avoid over writing an
5339 input source file with the same extension as an intermediate file.
5340 The corresponding intermediate file may be obtained by renaming the
5341 source file before using \fB\-save\-temps\fR.
5342 .Sp
5343 If you invoke \s-1GCC\s0 in parallel, compiling several different source
5344 files that share a common base name in different subdirectories or the
5345 same source file compiled for multiple output destinations, it is
5346 likely that the different parallel compilers will interfere with each
5347 other, and overwrite the temporary files.  For instance:
5348 .Sp
5349 .Vb 2
5350 \&        gcc \-save\-temps \-o outdir1/foo.o indir1/foo.c&
5351 \&        gcc \-save\-temps \-o outdir2/foo.o indir2/foo.c&
5352 .Ve
5353 .Sp
5354 may result in \fIfoo.i\fR and \fIfoo.o\fR being written to
5355 simultaneously by both compilers.
5356 .IP "\fB\-save\-temps=obj\fR" 4
5357 .IX Item "-save-temps=obj"
5358 Store the usual \*(L"temporary\*(R" intermediate files permanently.  If the
5359 \&\fB\-o\fR option is used, the temporary files are based on the
5360 object file.  If the \fB\-o\fR option is not used, the
5361 \&\fB\-save\-temps=obj\fR switch behaves like \fB\-save\-temps\fR.
5362 .Sp
5363 For example:
5364 .Sp
5365 .Vb 3
5366 \&        gcc \-save\-temps=obj \-c foo.c
5367 \&        gcc \-save\-temps=obj \-c bar.c \-o dir/xbar.o
5368 \&        gcc \-save\-temps=obj foobar.c \-o dir2/yfoobar
5369 .Ve
5370 .Sp
5371 would create \fIfoo.i\fR, \fIfoo.s\fR, \fIdir/xbar.i\fR,
5372 \&\fIdir/xbar.s\fR, \fIdir2/yfoobar.i\fR, \fIdir2/yfoobar.s\fR, and
5373 \&\fIdir2/yfoobar.o\fR.
5374 .IP "\fB\-time\fR[\fB=\fR\fIfile\fR]" 4
5375 .IX Item "-time[=file]"
5376 Report the \s-1CPU\s0 time taken by each subprocess in the compilation
5377 sequence.  For C source files, this is the compiler proper and assembler
5378 (plus the linker if linking is done).
5379 .Sp
5380 Without the specification of an output file, the output looks like this:
5381 .Sp
5382 .Vb 2
5383 \&        # cc1 0.12 0.01
5384 \&        # as 0.00 0.01
5385 .Ve
5386 .Sp
5387 The first number on each line is the \*(L"user time\*(R", that is time spent
5388 executing the program itself.  The second number is \*(L"system time\*(R",
5389 time spent executing operating system routines on behalf of the program.
5390 Both numbers are in seconds.
5391 .Sp
5392 With the specification of an output file, the output is appended to the
5393 named file, and it looks like this:
5394 .Sp
5395 .Vb 2
5396 \&        0.12 0.01 cc1 <options>
5397 \&        0.00 0.01 as <options>
5398 .Ve
5399 .Sp
5400 The \*(L"user time\*(R" and the \*(L"system time\*(R" are moved before the program
5401 name, and the options passed to the program are displayed, so that one
5402 can later tell what file was being compiled, and with which options.
5403 .IP "\fB\-fvar\-tracking\fR" 4
5404 .IX Item "-fvar-tracking"
5405 Run variable tracking pass.  It computes where variables are stored at each
5406 position in code.  Better debugging information is then generated
5407 (if the debugging information format supports this information).
5408 .Sp
5409 It is enabled by default when compiling with optimization (\fB\-Os\fR,
5410 \&\fB\-O\fR, \fB\-O2\fR, ...), debugging information (\fB\-g\fR) and
5411 the debug info format supports it.
5412 .IP "\fB\-fvar\-tracking\-assignments\fR" 4
5413 .IX Item "-fvar-tracking-assignments"
5414 Annotate assignments to user variables early in the compilation and
5415 attempt to carry the annotations over throughout the compilation all the
5416 way to the end, in an attempt to improve debug information while
5417 optimizing.  Use of \fB\-gdwarf\-4\fR is recommended along with it.
5418 .Sp
5419 It can be enabled even if var-tracking is disabled, in which case
5420 annotations will be created and maintained, but discarded at the end.
5421 .IP "\fB\-fvar\-tracking\-assignments\-toggle\fR" 4
5422 .IX Item "-fvar-tracking-assignments-toggle"
5423 Toggle \fB\-fvar\-tracking\-assignments\fR, in the same way that
5424 \&\fB\-gtoggle\fR toggles \fB\-g\fR.
5425 .IP "\fB\-print\-file\-name=\fR\fIlibrary\fR" 4
5426 .IX Item "-print-file-name=library"
5427 Print the full absolute name of the library file \fIlibrary\fR that
5428 would be used when linking\-\-\-and don't do anything else.  With this
5429 option, \s-1GCC\s0 does not compile or link anything; it just prints the
5430 file name.
5431 .IP "\fB\-print\-multi\-directory\fR" 4
5432 .IX Item "-print-multi-directory"
5433 Print the directory name corresponding to the multilib selected by any
5434 other switches present in the command line.  This directory is supposed
5435 to exist in \fB\s-1GCC_EXEC_PREFIX\s0\fR.
5436 .IP "\fB\-print\-multi\-lib\fR" 4
5437 .IX Item "-print-multi-lib"
5438 Print the mapping from multilib directory names to compiler switches
5439 that enable them.  The directory name is separated from the switches by
5440 \&\fB;\fR, and each switch starts with an \fB@\fR instead of the
5441 \&\fB\-\fR, without spaces between multiple switches.  This is supposed to
5442 ease shell-processing.
5443 .IP "\fB\-print\-multi\-os\-directory\fR" 4
5444 .IX Item "-print-multi-os-directory"
5445 Print the path to \s-1OS\s0 libraries for the selected
5446 multilib, relative to some \fIlib\fR subdirectory.  If \s-1OS\s0 libraries are
5447 present in the \fIlib\fR subdirectory and no multilibs are used, this is
5448 usually just \fI.\fR, if \s-1OS\s0 libraries are present in \fIlib\fIsuffix\fI\fR
5449 sibling directories this prints e.g. \fI../lib64\fR, \fI../lib\fR or
5450 \&\fI../lib32\fR, or if \s-1OS\s0 libraries are present in \fIlib/\fIsubdir\fI\fR
5451 subdirectories it prints e.g. \fIamd64\fR, \fIsparcv9\fR or \fIev6\fR.
5452 .IP "\fB\-print\-multiarch\fR" 4
5453 .IX Item "-print-multiarch"
5454 Print the path to \s-1OS\s0 libraries for the selected multiarch,
5455 relative to some \fIlib\fR subdirectory.
5456 .IP "\fB\-print\-prog\-name=\fR\fIprogram\fR" 4
5457 .IX Item "-print-prog-name=program"
5458 Like \fB\-print\-file\-name\fR, but searches for a program such as \fBcpp\fR.
5459 .IP "\fB\-print\-libgcc\-file\-name\fR" 4
5460 .IX Item "-print-libgcc-file-name"
5461 Same as \fB\-print\-file\-name=libgcc.a\fR.
5462 .Sp
5463 This is useful when you use \fB\-nostdlib\fR or \fB\-nodefaultlibs\fR
5464 but you do want to link with \fIlibgcc.a\fR.  You can do
5465 .Sp
5466 .Vb 1
5467 \&        gcc \-nostdlib <files>... \`gcc \-print\-libgcc\-file\-name\`
5468 .Ve
5469 .IP "\fB\-print\-search\-dirs\fR" 4
5470 .IX Item "-print-search-dirs"
5471 Print the name of the configured installation directory and a list of
5472 program and library directories \fBgcc\fR will search\-\-\-and don't do anything else.
5473 .Sp
5474 This is useful when \fBgcc\fR prints the error message
5475 \&\fBinstallation problem, cannot exec cpp0: No such file or directory\fR.
5476 To resolve this you either need to put \fIcpp0\fR and the other compiler
5477 components where \fBgcc\fR expects to find them, or you can set the environment
5478 variable \fB\s-1GCC_EXEC_PREFIX\s0\fR to the directory where you installed them.
5479 Don't forget the trailing \fB/\fR.
5480 .IP "\fB\-print\-sysroot\fR" 4
5481 .IX Item "-print-sysroot"
5482 Print the target sysroot directory that will be used during
5483 compilation.  This is the target sysroot specified either at configure
5484 time or using the \fB\-\-sysroot\fR option, possibly with an extra
5485 suffix that depends on compilation options.  If no target sysroot is
5486 specified, the option prints nothing.
5487 .IP "\fB\-print\-sysroot\-headers\-suffix\fR" 4
5488 .IX Item "-print-sysroot-headers-suffix"
5489 Print the suffix added to the target sysroot when searching for
5490 headers, or give an error if the compiler is not configured with such
5491 a suffix\-\-\-and don't do anything else.
5492 .IP "\fB\-dumpmachine\fR" 4
5493 .IX Item "-dumpmachine"
5494 Print the compiler's target machine (for example,
5495 \&\fBi686\-pc\-linux\-gnu\fR)\-\-\-and don't do anything else.
5496 .IP "\fB\-dumpversion\fR" 4
5497 .IX Item "-dumpversion"
5498 Print the compiler version (for example, \fB3.0\fR)\-\-\-and don't do
5499 anything else.
5500 .IP "\fB\-dumpspecs\fR" 4
5501 .IX Item "-dumpspecs"
5502 Print the compiler's built-in specs\-\-\-and don't do anything else.  (This
5503 is used when \s-1GCC\s0 itself is being built.)
5504 .IP "\fB\-feliminate\-unused\-debug\-types\fR" 4
5505 .IX Item "-feliminate-unused-debug-types"
5506 Normally, when producing \s-1DWARF2\s0 output, \s-1GCC\s0 will emit debugging
5507 information for all types declared in a compilation
5508 unit, regardless of whether or not they are actually used
5509 in that compilation unit.  Sometimes this is useful, such as
5510 if, in the debugger, you want to cast a value to a type that is
5511 not actually used in your program (but is declared).  More often,
5512 however, this results in a significant amount of wasted space.
5513 With this option, \s-1GCC\s0 will avoid producing debug symbol output
5514 for types that are nowhere used in the source file being compiled.
5515 .Sh "Options That Control Optimization"
5516 .IX Subsection "Options That Control Optimization"
5517 These options control various sorts of optimizations.
5518 .PP
5519 Without any optimization option, the compiler's goal is to reduce the
5520 cost of compilation and to make debugging produce the expected
5521 results.  Statements are independent: if you stop the program with a
5522 breakpoint between statements, you can then assign a new value to any
5523 variable or change the program counter to any other statement in the
5524 function and get exactly the results you would expect from the source
5525 code.
5526 .PP
5527 Turning on optimization flags makes the compiler attempt to improve
5528 the performance and/or code size at the expense of compilation time
5529 and possibly the ability to debug the program.
5530 .PP
5531 The compiler performs optimization based on the knowledge it has of the
5532 program.  Compiling multiple files at once to a single output file mode allows
5533 the compiler to use information gained from all of the files when compiling
5534 each of them.
5535 .PP
5536 Not all optimizations are controlled directly by a flag.  Only
5537 optimizations that have a flag are listed in this section.
5538 .PP
5539 Most optimizations are only enabled if an \fB\-O\fR level is set on
5540 the command line.  Otherwise they are disabled, even if individual
5541 optimization flags are specified.
5542 .PP
5543 Depending on the target and how \s-1GCC\s0 was configured, a slightly different
5544 set of optimizations may be enabled at each \fB\-O\fR level than
5545 those listed here.  You can invoke \s-1GCC\s0 with \fB\-Q \-\-help=optimizers\fR
5546 to find out the exact set of optimizations that are enabled at each level.
5547 .IP "\fB\-O\fR" 4
5548 .IX Item "-O"
5549 .PD 0
5550 .IP "\fB\-O1\fR" 4
5551 .IX Item "-O1"
5552 .PD
5553 Optimize.  Optimizing compilation takes somewhat more time, and a lot
5554 more memory for a large function.
5555 .Sp
5556 With \fB\-O\fR, the compiler tries to reduce code size and execution
5557 time, without performing any optimizations that take a great deal of
5558 compilation time.
5559 .Sp
5560 \&\fB\-O\fR turns on the following optimization flags:
5561 .Sp
5562 \&\fB\-fauto\-inc\-dec 
5563 \&\-fcompare\-elim 
5564 \&\-fcprop\-registers 
5565 \&\-fdce 
5566 \&\-fdefer\-pop 
5567 \&\-fdelayed\-branch 
5568 \&\-fdse 
5569 \&\-fguess\-branch\-probability 
5570 \&\-fif\-conversion2 
5571 \&\-fif\-conversion 
5572 \&\-fipa\-pure\-const 
5573 \&\-fipa\-profile 
5574 \&\-fipa\-reference 
5575 \&\-fmerge\-constants
5576 \&\-fsplit\-wide\-types 
5577 \&\-ftree\-bit\-ccp 
5578 \&\-ftree\-builtin\-call\-dce 
5579 \&\-ftree\-ccp 
5580 \&\-ftree\-ch 
5581 \&\-ftree\-copyrename 
5582 \&\-ftree\-dce 
5583 \&\-ftree\-dominator\-opts 
5584 \&\-ftree\-dse 
5585 \&\-ftree\-forwprop 
5586 \&\-ftree\-fre 
5587 \&\-ftree\-phiprop 
5588 \&\-ftree\-sra 
5589 \&\-ftree\-pta 
5590 \&\-ftree\-ter 
5591 \&\-funit\-at\-a\-time\fR
5592 .Sp
5593 \&\fB\-O\fR also turns on \fB\-fomit\-frame\-pointer\fR on machines
5594 where doing so does not interfere with debugging.
5595 .IP "\fB\-O2\fR" 4
5596 .IX Item "-O2"
5597 Optimize even more.  \s-1GCC\s0 performs nearly all supported optimizations
5598 that do not involve a space-speed tradeoff.
5599 As compared to \fB\-O\fR, this option increases both compilation time
5600 and the performance of the generated code.
5601 .Sp
5602 \&\fB\-O2\fR turns on all optimization flags specified by \fB\-O\fR.  It
5603 also turns on the following optimization flags:
5604 \&\fB\-fthread\-jumps 
5605 \&\-falign\-functions  \-falign\-jumps 
5606 \&\-falign\-loops  \-falign\-labels 
5607 \&\-fcaller\-saves 
5608 \&\-fcrossjumping 
5609 \&\-fcse\-follow\-jumps  \-fcse\-skip\-blocks 
5610 \&\-fdelete\-null\-pointer\-checks 
5611 \&\-fdevirtualize 
5612 \&\-fexpensive\-optimizations 
5613 \&\-fgcse  \-fgcse\-lm  
5614 \&\-finline\-small\-functions 
5615 \&\-findirect\-inlining 
5616 \&\-fipa\-sra 
5617 \&\-foptimize\-sibling\-calls 
5618 \&\-fpartial\-inlining 
5619 \&\-fpeephole2 
5620 \&\-fregmove 
5621 \&\-freorder\-blocks  \-freorder\-functions 
5622 \&\-frerun\-cse\-after\-loop  
5623 \&\-fsched\-interblock  \-fsched\-spec 
5624 \&\-fschedule\-insns  \-fschedule\-insns2 
5625 \&\-fstrict\-aliasing \-fstrict\-overflow 
5626 \&\-ftree\-switch\-conversion \-ftree\-tail\-merge 
5627 \&\-ftree\-pre 
5628 \&\-ftree\-vrp\fR
5629 .Sp
5630 Please note the warning under \fB\-fgcse\fR about
5631 invoking \fB\-O2\fR on programs that use computed gotos.
5632 .IP "\fB\-O3\fR" 4
5633 .IX Item "-O3"
5634 Optimize yet more.  \fB\-O3\fR turns on all optimizations specified
5635 by \fB\-O2\fR and also turns on the \fB\-finline\-functions\fR,
5636 \&\fB\-funswitch\-loops\fR, \fB\-fpredictive\-commoning\fR,
5637 \&\fB\-fgcse\-after\-reload\fR, \fB\-ftree\-vectorize\fR and
5638 \&\fB\-fipa\-cp\-clone\fR options.
5639 .IP "\fB\-O0\fR" 4
5640 .IX Item "-O0"
5641 Reduce compilation time and make debugging produce the expected
5642 results.  This is the default.
5643 .IP "\fB\-Os\fR" 4
5644 .IX Item "-Os"
5645 Optimize for size.  \fB\-Os\fR enables all \fB\-O2\fR optimizations that
5646 do not typically increase code size.  It also performs further
5647 optimizations designed to reduce code size.
5648 .Sp
5649 \&\fB\-Os\fR disables the following optimization flags:
5650 \&\fB\-falign\-functions  \-falign\-jumps  \-falign\-loops 
5651 \&\-falign\-labels  \-freorder\-blocks  \-freorder\-blocks\-and\-partition 
5652 \&\-fprefetch\-loop\-arrays  \-ftree\-vect\-loop\-version\fR
5653 .IP "\fB\-Ofast\fR" 4
5654 .IX Item "-Ofast"
5655 Disregard strict standards compliance.  \fB\-Ofast\fR enables all
5656 \&\fB\-O3\fR optimizations.  It also enables optimizations that are not
5657 valid for all standard compliant programs.
5658 It turns on \fB\-ffast\-math\fR and the Fortran-specific
5659 \&\fB\-fno\-protect\-parens\fR and \fB\-fstack\-arrays\fR.
5660 .Sp
5661 If you use multiple \fB\-O\fR options, with or without level numbers,
5662 the last such option is the one that is effective.
5663 .PP
5664 Options of the form \fB\-f\fR\fIflag\fR specify machine-independent
5665 flags.  Most flags have both positive and negative forms; the negative
5666 form of \fB\-ffoo\fR would be \fB\-fno\-foo\fR.  In the table
5667 below, only one of the forms is listed\-\-\-the one you typically will
5668 use.  You can figure out the other form by either removing \fBno\-\fR
5669 or adding it.
5670 .PP
5671 The following options control specific optimizations.  They are either
5672 activated by \fB\-O\fR options or are related to ones that are.  You
5673 can use the following flags in the rare cases when \*(L"fine-tuning\*(R" of
5674 optimizations to be performed is desired.
5675 .IP "\fB\-fno\-default\-inline\fR" 4
5676 .IX Item "-fno-default-inline"
5677 Do not make member functions inline by default merely because they are
5678 defined inside the class scope (\*(C+ only).  Otherwise, when you specify
5679 \&\fB\-O\fR, member functions defined inside class scope are compiled
5680 inline by default; i.e., you don't need to add \fBinline\fR in front of
5681 the member function name.
5682 .IP "\fB\-fno\-defer\-pop\fR" 4
5683 .IX Item "-fno-defer-pop"
5684 Always pop the arguments to each function call as soon as that function
5685 returns.  For machines that must pop arguments after a function call,
5686 the compiler normally lets arguments accumulate on the stack for several
5687 function calls and pops them all at once.
5688 .Sp
5689 Disabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5690 .IP "\fB\-fforward\-propagate\fR" 4
5691 .IX Item "-fforward-propagate"
5692 Perform a forward propagation pass on \s-1RTL\s0.  The pass tries to combine two
5693 instructions and checks if the result can be simplified.  If loop unrolling
5694 is active, two passes are performed and the second is scheduled after
5695 loop unrolling.
5696 .Sp
5697 This option is enabled by default at optimization levels \fB\-O\fR,
5698 \&\fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5699 .IP "\fB\-ffp\-contract=\fR\fIstyle\fR" 4
5700 .IX Item "-ffp-contract=style"
5701 \&\fB\-ffp\-contract=off\fR disables floating-point expression contraction.
5702 \&\fB\-ffp\-contract=fast\fR enables floating-point expression contraction
5703 such as forming of fused multiply-add operations if the target has
5704 native support for them.
5705 \&\fB\-ffp\-contract=on\fR enables floating-point expression contraction
5706 if allowed by the language standard.  This is currently not implemented
5707 and treated equal to \fB\-ffp\-contract=off\fR.
5708 .Sp
5709 The default is \fB\-ffp\-contract=fast\fR.
5710 .IP "\fB\-fomit\-frame\-pointer\fR" 4
5711 .IX Item "-fomit-frame-pointer"
5712 Don't keep the frame pointer in a register for functions that
5713 don't need one.  This avoids the instructions to save, set up and
5714 restore frame pointers; it also makes an extra register available
5715 in many functions.  \fBIt also makes debugging impossible on
5716 some machines.\fR
5717 .Sp
5718 On some machines, such as the \s-1VAX\s0, this flag has no effect, because
5719 the standard calling sequence automatically handles the frame pointer
5720 and nothing is saved by pretending it doesn't exist.  The
5721 machine-description macro \f(CW\*(C`FRAME_POINTER_REQUIRED\*(C'\fR controls
5722 whether a target machine supports this flag.
5723 .Sp
5724 Starting with \s-1GCC\s0 version 4.6, the default setting (when not optimizing for
5725 size) for 32\-bit Linux x86 and 32\-bit Darwin x86 targets has been changed to
5726 \&\fB\-fomit\-frame\-pointer\fR.  The default can be reverted to
5727 \&\fB\-fno\-omit\-frame\-pointer\fR by configuring \s-1GCC\s0 with the
5728 \&\fB\-\-enable\-frame\-pointer\fR configure option.
5729 .Sp
5730 Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5731 .IP "\fB\-foptimize\-sibling\-calls\fR" 4
5732 .IX Item "-foptimize-sibling-calls"
5733 Optimize sibling and tail recursive calls.
5734 .Sp
5735 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5736 .IP "\fB\-fno\-inline\fR" 4
5737 .IX Item "-fno-inline"
5738 Do not expand any functions inline apart from those marked with
5739 the \f(CW\*(C`always_inline\*(C'\fR attribute.  This is the default when not
5740 optimizing.
5741 .Sp
5742 Single functions can be exempted from inlining by marking them
5743 with the \f(CW\*(C`noinline\*(C'\fR attribute.
5744 .IP "\fB\-finline\-small\-functions\fR" 4
5745 .IX Item "-finline-small-functions"
5746 Integrate functions into their callers when their body is smaller than expected
5747 function call code (so overall size of program gets smaller).  The compiler
5748 heuristically decides which functions are simple enough to be worth integrating
5749 in this way.  This inlining applies to all functions, even those not declared
5750 inline.
5751 .Sp
5752 Enabled at level \fB\-O2\fR.
5753 .IP "\fB\-findirect\-inlining\fR" 4
5754 .IX Item "-findirect-inlining"
5755 Inline also indirect calls that are discovered to be known at compile
5756 time thanks to previous inlining.  This option has any effect only
5757 when inlining itself is turned on by the \fB\-finline\-functions\fR
5758 or \fB\-finline\-small\-functions\fR options.
5759 .Sp
5760 Enabled at level \fB\-O2\fR.
5761 .IP "\fB\-finline\-functions\fR" 4
5762 .IX Item "-finline-functions"
5763 Consider all functions for inlining, even if they are not declared inline.
5764 The compiler heuristically decides which functions are worth integrating
5765 in this way.
5766 .Sp
5767 If all calls to a given function are integrated, and the function is
5768 declared \f(CW\*(C`static\*(C'\fR, then the function is normally not output as
5769 assembler code in its own right.
5770 .Sp
5771 Enabled at level \fB\-O3\fR.
5772 .IP "\fB\-finline\-functions\-called\-once\fR" 4
5773 .IX Item "-finline-functions-called-once"
5774 Consider all \f(CW\*(C`static\*(C'\fR functions called once for inlining into their
5775 caller even if they are not marked \f(CW\*(C`inline\*(C'\fR.  If a call to a given
5776 function is integrated, then the function is not output as assembler code
5777 in its own right.
5778 .Sp
5779 Enabled at levels \fB\-O1\fR, \fB\-O2\fR, \fB\-O3\fR and \fB\-Os\fR.
5780 .IP "\fB\-fearly\-inlining\fR" 4
5781 .IX Item "-fearly-inlining"
5782 Inline functions marked by \f(CW\*(C`always_inline\*(C'\fR and functions whose body seems
5783 smaller than the function call overhead early before doing
5784 \&\fB\-fprofile\-generate\fR instrumentation and real inlining pass.  Doing so
5785 makes profiling significantly cheaper and usually inlining faster on programs
5786 having large chains of nested wrapper functions.
5787 .Sp
5788 Enabled by default.
5789 .IP "\fB\-fipa\-sra\fR" 4
5790 .IX Item "-fipa-sra"
5791 Perform interprocedural scalar replacement of aggregates, removal of
5792 unused parameters and replacement of parameters passed by reference
5793 by parameters passed by value.
5794 .Sp
5795 Enabled at levels \fB\-O2\fR, \fB\-O3\fR and \fB\-Os\fR.
5796 .IP "\fB\-finline\-limit=\fR\fIn\fR" 4
5797 .IX Item "-finline-limit=n"
5798 By default, \s-1GCC\s0 limits the size of functions that can be inlined.  This flag
5799 allows coarse control of this limit.  \fIn\fR is the size of functions that
5800 can be inlined in number of pseudo instructions.
5801 .Sp
5802 Inlining is actually controlled by a number of parameters, which may be
5803 specified individually by using \fB\-\-param\fR \fIname\fR\fB=\fR\fIvalue\fR.
5804 The \fB\-finline\-limit=\fR\fIn\fR option sets some of these parameters
5805 as follows:
5806 .RS 4
5807 .IP "\fBmax-inline-insns-single\fR" 4
5808 .IX Item "max-inline-insns-single"
5809 is set to \fIn\fR/2.
5810 .IP "\fBmax-inline-insns-auto\fR" 4
5811 .IX Item "max-inline-insns-auto"
5812 is set to \fIn\fR/2.
5813 .RE
5814 .RS 4
5815 .Sp
5816 See below for a documentation of the individual
5817 parameters controlling inlining and for the defaults of these parameters.
5818 .Sp
5819 \&\fINote:\fR there may be no value to \fB\-finline\-limit\fR that results
5820 in default behavior.
5821 .Sp
5822 \&\fINote:\fR pseudo instruction represents, in this particular context, an
5823 abstract measurement of function's size.  In no way does it represent a count
5824 of assembly instructions and as such its exact meaning might change from one
5825 release to an another.
5826 .RE
5827 .IP "\fB\-fno\-keep\-inline\-dllexport\fR" 4
5828 .IX Item "-fno-keep-inline-dllexport"
5829 This is a more fine-grained version of \fB\-fkeep\-inline\-functions\fR,
5830 which applies only to functions that are declared using the \f(CW\*(C`dllexport\*(C'\fR
5831 attribute or declspec
5832 .IP "\fB\-fkeep\-inline\-functions\fR" 4
5833 .IX Item "-fkeep-inline-functions"
5834 In C, emit \f(CW\*(C`static\*(C'\fR functions that are declared \f(CW\*(C`inline\*(C'\fR
5835 into the object file, even if the function has been inlined into all
5836 of its callers.  This switch does not affect functions using the
5837 \&\f(CW\*(C`extern inline\*(C'\fR extension in \s-1GNU\s0 C90.  In \*(C+, emit any and all
5838 inline functions into the object file.
5839 .IP "\fB\-fkeep\-static\-consts\fR" 4
5840 .IX Item "-fkeep-static-consts"
5841 Emit variables declared \f(CW\*(C`static const\*(C'\fR when optimization isn't turned
5842 on, even if the variables aren't referenced.
5843 .Sp
5844 \&\s-1GCC\s0 enables this option by default.  If you want to force the compiler to
5845 check if the variable was referenced, regardless of whether or not
5846 optimization is turned on, use the \fB\-fno\-keep\-static\-consts\fR option.
5847 .IP "\fB\-fmerge\-constants\fR" 4
5848 .IX Item "-fmerge-constants"
5849 Attempt to merge identical constants (string constants and floating-point
5850 constants) across compilation units.
5851 .Sp
5852 This option is the default for optimized compilation if the assembler and
5853 linker support it.  Use \fB\-fno\-merge\-constants\fR to inhibit this
5854 behavior.
5855 .Sp
5856 Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5857 .IP "\fB\-fmerge\-all\-constants\fR" 4
5858 .IX Item "-fmerge-all-constants"
5859 Attempt to merge identical constants and identical variables.
5860 .Sp
5861 This option implies \fB\-fmerge\-constants\fR.  In addition to
5862 \&\fB\-fmerge\-constants\fR this considers e.g. even constant initialized
5863 arrays or initialized constant variables with integral or floating-point
5864 types.  Languages like C or \*(C+ require each variable, including multiple
5865 instances of the same variable in recursive calls, to have distinct locations,
5866 so using this option will result in non-conforming
5867 behavior.
5868 .IP "\fB\-fmodulo\-sched\fR" 4
5869 .IX Item "-fmodulo-sched"
5870 Perform swing modulo scheduling immediately before the first scheduling
5871 pass.  This pass looks at innermost loops and reorders their
5872 instructions by overlapping different iterations.
5873 .IP "\fB\-fmodulo\-sched\-allow\-regmoves\fR" 4
5874 .IX Item "-fmodulo-sched-allow-regmoves"
5875 Perform more aggressive \s-1SMS\s0 based modulo scheduling with register moves
5876 allowed.  By setting this flag certain anti-dependences edges will be
5877 deleted which will trigger the generation of reg-moves based on the
5878 life-range analysis.  This option is effective only with
5879 \&\fB\-fmodulo\-sched\fR enabled.
5880 .IP "\fB\-fno\-branch\-count\-reg\fR" 4
5881 .IX Item "-fno-branch-count-reg"
5882 Do not use \*(L"decrement and branch\*(R" instructions on a count register,
5883 but instead generate a sequence of instructions that decrement a
5884 register, compare it against zero, then branch based upon the result.
5885 This option is only meaningful on architectures that support such
5886 instructions, which include x86, PowerPC, \s-1IA\-64\s0 and S/390.
5887 .Sp
5888 The default is \fB\-fbranch\-count\-reg\fR.
5889 .IP "\fB\-fno\-function\-cse\fR" 4
5890 .IX Item "-fno-function-cse"
5891 Do not put function addresses in registers; make each instruction that
5892 calls a constant function contain the function's address explicitly.
5893 .Sp
5894 This option results in less efficient code, but some strange hacks
5895 that alter the assembler output may be confused by the optimizations
5896 performed when this option is not used.
5897 .Sp
5898 The default is \fB\-ffunction\-cse\fR
5899 .IP "\fB\-fno\-zero\-initialized\-in\-bss\fR" 4
5900 .IX Item "-fno-zero-initialized-in-bss"
5901 If the target supports a \s-1BSS\s0 section, \s-1GCC\s0 by default puts variables that
5902 are initialized to zero into \s-1BSS\s0.  This can save space in the resulting
5903 code.
5904 .Sp
5905 This option turns off this behavior because some programs explicitly
5906 rely on variables going to the data section.  E.g., so that the
5907 resulting executable can find the beginning of that section and/or make
5908 assumptions based on that.
5909 .Sp
5910 The default is \fB\-fzero\-initialized\-in\-bss\fR.
5911 .IP "\fB\-fmudflap \-fmudflapth \-fmudflapir\fR" 4
5912 .IX Item "-fmudflap -fmudflapth -fmudflapir"
5913 For front-ends that support it (C and \*(C+), instrument all risky
5914 pointer/array dereferencing operations, some standard library
5915 string/heap functions, and some other associated constructs with
5916 range/validity tests.  Modules so instrumented should be immune to
5917 buffer overflows, invalid heap use, and some other classes of C/\*(C+
5918 programming errors.  The instrumentation relies on a separate runtime
5919 library (\fIlibmudflap\fR), which will be linked into a program if
5920 \&\fB\-fmudflap\fR is given at link time.  Run-time behavior of the
5921 instrumented program is controlled by the \fB\s-1MUDFLAP_OPTIONS\s0\fR
5922 environment variable.  See \f(CW\*(C`env MUDFLAP_OPTIONS=\-help a.out\*(C'\fR
5923 for its options.
5924 .Sp
5925 Use \fB\-fmudflapth\fR instead of \fB\-fmudflap\fR to compile and to
5926 link if your program is multi-threaded.  Use \fB\-fmudflapir\fR, in
5927 addition to \fB\-fmudflap\fR or \fB\-fmudflapth\fR, if
5928 instrumentation should ignore pointer reads.  This produces less
5929 instrumentation (and therefore faster execution) and still provides
5930 some protection against outright memory corrupting writes, but allows
5931 erroneously read data to propagate within a program.
5932 .IP "\fB\-fthread\-jumps\fR" 4
5933 .IX Item "-fthread-jumps"
5934 Perform optimizations where we check to see if a jump branches to a
5935 location where another comparison subsumed by the first is found.  If
5936 so, the first branch is redirected to either the destination of the
5937 second branch or a point immediately following it, depending on whether
5938 the condition is known to be true or false.
5939 .Sp
5940 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5941 .IP "\fB\-fsplit\-wide\-types\fR" 4
5942 .IX Item "-fsplit-wide-types"
5943 When using a type that occupies multiple registers, such as \f(CW\*(C`long
5944 long\*(C'\fR on a 32\-bit system, split the registers apart and allocate them
5945 independently.  This normally generates better code for those types,
5946 but may make debugging more difficult.
5947 .Sp
5948 Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR,
5949 \&\fB\-Os\fR.
5950 .IP "\fB\-fcse\-follow\-jumps\fR" 4
5951 .IX Item "-fcse-follow-jumps"
5952 In common subexpression elimination (\s-1CSE\s0), scan through jump instructions
5953 when the target of the jump is not reached by any other path.  For
5954 example, when \s-1CSE\s0 encounters an \f(CW\*(C`if\*(C'\fR statement with an
5955 \&\f(CW\*(C`else\*(C'\fR clause, \s-1CSE\s0 will follow the jump when the condition
5956 tested is false.
5957 .Sp
5958 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5959 .IP "\fB\-fcse\-skip\-blocks\fR" 4
5960 .IX Item "-fcse-skip-blocks"
5961 This is similar to \fB\-fcse\-follow\-jumps\fR, but causes \s-1CSE\s0 to
5962 follow jumps that conditionally skip over blocks.  When \s-1CSE\s0
5963 encounters a simple \f(CW\*(C`if\*(C'\fR statement with no else clause,
5964 \&\fB\-fcse\-skip\-blocks\fR causes \s-1CSE\s0 to follow the jump around the
5965 body of the \f(CW\*(C`if\*(C'\fR.
5966 .Sp
5967 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5968 .IP "\fB\-frerun\-cse\-after\-loop\fR" 4
5969 .IX Item "-frerun-cse-after-loop"
5970 Re-run common subexpression elimination after loop optimizations has been
5971 performed.
5972 .Sp
5973 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5974 .IP "\fB\-fgcse\fR" 4
5975 .IX Item "-fgcse"
5976 Perform a global common subexpression elimination pass.
5977 This pass also performs global constant and copy propagation.
5978 .Sp
5979 \&\fINote:\fR When compiling a program using computed gotos, a \s-1GCC\s0
5980 extension, you may get better run-time performance if you disable
5981 the global common subexpression elimination pass by adding
5982 \&\fB\-fno\-gcse\fR to the command line.
5983 .Sp
5984 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5985 .IP "\fB\-fgcse\-lm\fR" 4
5986 .IX Item "-fgcse-lm"
5987 When \fB\-fgcse\-lm\fR is enabled, global common subexpression elimination will
5988 attempt to move loads that are only killed by stores into themselves.  This
5989 allows a loop containing a load/store sequence to be changed to a load outside
5990 the loop, and a copy/store within the loop.
5991 .Sp
5992 Enabled by default when gcse is enabled.
5993 .IP "\fB\-fgcse\-sm\fR" 4
5994 .IX Item "-fgcse-sm"
5995 When \fB\-fgcse\-sm\fR is enabled, a store motion pass is run after
5996 global common subexpression elimination.  This pass will attempt to move
5997 stores out of loops.  When used in conjunction with \fB\-fgcse\-lm\fR,
5998 loops containing a load/store sequence can be changed to a load before
5999 the loop and a store after the loop.
6000 .Sp
6001 Not enabled at any optimization level.
6002 .IP "\fB\-fgcse\-las\fR" 4
6003 .IX Item "-fgcse-las"
6004 When \fB\-fgcse\-las\fR is enabled, the global common subexpression
6005 elimination pass eliminates redundant loads that come after stores to the
6006 same memory location (both partial and full redundancies).
6007 .Sp
6008 Not enabled at any optimization level.
6009 .IP "\fB\-fgcse\-after\-reload\fR" 4
6010 .IX Item "-fgcse-after-reload"
6011 When \fB\-fgcse\-after\-reload\fR is enabled, a redundant load elimination
6012 pass is performed after reload.  The purpose of this pass is to cleanup
6013 redundant spilling.
6014 .IP "\fB\-funsafe\-loop\-optimizations\fR" 4
6015 .IX Item "-funsafe-loop-optimizations"
6016 If given, the loop optimizer will assume that loop indices do not
6017 overflow, and that the loops with nontrivial exit condition are not
6018 infinite.  This enables a wider range of loop optimizations even if
6019 the loop optimizer itself cannot prove that these assumptions are valid.
6020 Using \fB\-Wunsafe\-loop\-optimizations\fR, the compiler will warn you
6021 if it finds this kind of loop.
6022 .IP "\fB\-fcrossjumping\fR" 4
6023 .IX Item "-fcrossjumping"
6024 Perform cross-jumping transformation.  This transformation unifies equivalent code and save code size.  The
6025 resulting code may or may not perform better than without cross-jumping.
6026 .Sp
6027 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
6028 .IP "\fB\-fauto\-inc\-dec\fR" 4
6029 .IX Item "-fauto-inc-dec"
6030 Combine increments or decrements of addresses with memory accesses.
6031 This pass is always skipped on architectures that do not have
6032 instructions to support this.  Enabled by default at \fB\-O\fR and
6033 higher on architectures that support this.
6034 .IP "\fB\-fdce\fR" 4
6035 .IX Item "-fdce"
6036 Perform dead code elimination (\s-1DCE\s0) on \s-1RTL\s0.
6037 Enabled by default at \fB\-O\fR and higher.
6038 .IP "\fB\-fdse\fR" 4
6039 .IX Item "-fdse"
6040 Perform dead store elimination (\s-1DSE\s0) on \s-1RTL\s0.
6041 Enabled by default at \fB\-O\fR and higher.
6042 .IP "\fB\-fif\-conversion\fR" 4
6043 .IX Item "-fif-conversion"
6044 Attempt to transform conditional jumps into branch-less equivalents.  This
6045 include use of conditional moves, min, max, set flags and abs instructions, and
6046 some tricks doable by standard arithmetics.  The use of conditional execution
6047 on chips where it is available is controlled by \f(CW\*(C`if\-conversion2\*(C'\fR.
6048 .Sp
6049 Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
6050 .IP "\fB\-fif\-conversion2\fR" 4
6051 .IX Item "-fif-conversion2"
6052 Use conditional execution (where available) to transform conditional jumps into
6053 branch-less equivalents.
6054 .Sp
6055 Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
6056 .IP "\fB\-fdelete\-null\-pointer\-checks\fR" 4
6057 .IX Item "-fdelete-null-pointer-checks"
6058 Assume that programs cannot safely dereference null pointers, and that
6059 no code or data element resides there.  This enables simple constant
6060 folding optimizations at all optimization levels.  In addition, other
6061 optimization passes in \s-1GCC\s0 use this flag to control global dataflow
6062 analyses that eliminate useless checks for null pointers; these assume
6063 that if a pointer is checked after it has already been dereferenced,
6064 it cannot be null.
6065 .Sp
6066 Note however that in some environments this assumption is not true.
6067 Use \fB\-fno\-delete\-null\-pointer\-checks\fR to disable this optimization
6068 for programs that depend on that behavior.
6069 .Sp
6070 Some targets, especially embedded ones, disable this option at all levels.
6071 Otherwise it is enabled at all levels: \fB\-O0\fR, \fB\-O1\fR,
6072 \&\fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.  Passes that use the information
6073 are enabled independently at different optimization levels.
6074 .IP "\fB\-fdevirtualize\fR" 4
6075 .IX Item "-fdevirtualize"
6076 Attempt to convert calls to virtual functions to direct calls.  This
6077 is done both within a procedure and interprocedurally as part of
6078 indirect inlining (\f(CW\*(C`\-findirect\-inlining\*(C'\fR) and interprocedural constant
6079 propagation (\fB\-fipa\-cp\fR).
6080 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
6081 .IP "\fB\-fexpensive\-optimizations\fR" 4
6082 .IX Item "-fexpensive-optimizations"
6083 Perform a number of minor optimizations that are relatively expensive.
6084 .Sp
6085 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
6086 .IP "\fB\-free\fR" 4
6087 .IX Item "-free"
6088 Attempt to remove redundant extension instructions.  This is especially
6089 helpful for the x86\-64 architecture which implicitly zero-extends in 64\-bit
6090 registers after writing to their lower 32\-bit half.
6091 .Sp
6092 Enabled for x86 at levels \fB\-O2\fR, \fB\-O3\fR.
6093 .IP "\fB\-foptimize\-register\-move\fR" 4
6094 .IX Item "-foptimize-register-move"
6095 .PD 0
6096 .IP "\fB\-fregmove\fR" 4
6097 .IX Item "-fregmove"
6098 .PD
6099 Attempt to reassign register numbers in move instructions and as
6100 operands of other simple instructions in order to maximize the amount of
6101 register tying.  This is especially helpful on machines with two-operand
6102 instructions.
6103 .Sp
6104 Note \fB\-fregmove\fR and \fB\-foptimize\-register\-move\fR are the same
6105 optimization.
6106 .Sp
6107 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
6108 .IP "\fB\-fira\-algorithm=\fR\fIalgorithm\fR" 4
6109 .IX Item "-fira-algorithm=algorithm"
6110 Use the specified coloring algorithm for the integrated register
6111 allocator.  The \fIalgorithm\fR argument can be \fBpriority\fR, which
6112 specifies Chow's priority coloring, or \fB\s-1CB\s0\fR, which specifies
6113 Chaitin-Briggs coloring.  Chaitin-Briggs coloring is not implemented
6114 for all architectures, but for those targets that do support it, it is
6115 the default because it generates better code.
6116 .IP "\fB\-fira\-region=\fR\fIregion\fR" 4
6117 .IX Item "-fira-region=region"
6118 Use specified regions for the integrated register allocator.  The
6119 \&\fIregion\fR argument should be one of the following:
6120 .RS 4
6121 .IP "\fBall\fR" 4
6122 .IX Item "all"
6123 Use all loops as register allocation regions.
6124 This can give the best results for machines with a small and/or
6125 irregular register set.
6126 .IP "\fBmixed\fR" 4
6127 .IX Item "mixed"
6128 Use all loops except for loops with small register pressure 
6129 as the regions.  This value usually gives
6130 the best results in most cases and for most architectures,
6131 and is enabled by default when compiling with optimization for speed
6132 (\fB\-O\fR, \fB\-O2\fR, ...).
6133 .IP "\fBone\fR" 4
6134 .IX Item "one"
6135 Use all functions as a single region.  
6136 This typically results in the smallest code size, and is enabled by default for
6137 \&\fB\-Os\fR or \fB\-O0\fR.
6138 .RE
6139 .RS 4
6140 .RE
6141 .IP "\fB\-fira\-loop\-pressure\fR" 4
6142 .IX Item "-fira-loop-pressure"
6143 Use \s-1IRA\s0 to evaluate register pressure in loops for decisions to move
6144 loop invariants.  This option usually results in generation
6145 of faster and smaller code on machines with large register files (>= 32
6146 registers), but it can slow the compiler down.
6147 .Sp
6148 This option is enabled at level \fB\-O3\fR for some targets.
6149 .IP "\fB\-fno\-ira\-share\-save\-slots\fR" 4
6150 .IX Item "-fno-ira-share-save-slots"
6151 Disable sharing of stack slots used for saving call-used hard
6152 registers living through a call.  Each hard register gets a
6153 separate stack slot, and as a result function stack frames are
6154 larger.
6155 .IP "\fB\-fno\-ira\-share\-spill\-slots\fR" 4
6156 .IX Item "-fno-ira-share-spill-slots"
6157 Disable sharing of stack slots allocated for pseudo-registers.  Each
6158 pseudo-register that does not get a hard register gets a separate
6159 stack slot, and as a result function stack frames are larger.
6160 .IP "\fB\-fira\-verbose=\fR\fIn\fR" 4
6161 .IX Item "-fira-verbose=n"
6162 Control the verbosity of the dump file for the integrated register allocator.
6163 The default value is 5.  If the value \fIn\fR is greater or equal to 10,
6164 the dump output is sent to stderr using the same format as \fIn\fR minus 10.
6165 .IP "\fB\-fdelayed\-branch\fR" 4
6166 .IX Item "-fdelayed-branch"
6167 If supported for the target machine, attempt to reorder instructions
6168 to exploit instruction slots available after delayed branch
6169 instructions.
6170 .Sp
6171 Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
6172 .IP "\fB\-fschedule\-insns\fR" 4
6173 .IX Item "-fschedule-insns"
6174 If supported for the target machine, attempt to reorder instructions to
6175 eliminate execution stalls due to required data being unavailable.  This
6176 helps machines that have slow floating point or memory load instructions
6177 by allowing other instructions to be issued until the result of the load
6178 or floating-point instruction is required.
6179 .Sp
6180 Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
6181 .IP "\fB\-fschedule\-insns2\fR" 4
6182 .IX Item "-fschedule-insns2"
6183 Similar to \fB\-fschedule\-insns\fR, but requests an additional pass of
6184 instruction scheduling after register allocation has been done.  This is
6185 especially useful on machines with a relatively small number of
6186 registers and where memory load instructions take more than one cycle.
6187 .Sp
6188 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
6189 .IP "\fB\-fno\-sched\-interblock\fR" 4
6190 .IX Item "-fno-sched-interblock"
6191 Don't schedule instructions across basic blocks.  This is normally
6192 enabled by default when scheduling before register allocation, i.e.
6193 with \fB\-fschedule\-insns\fR or at \fB\-O2\fR or higher.
6194 .IP "\fB\-fno\-sched\-spec\fR" 4
6195 .IX Item "-fno-sched-spec"
6196 Don't allow speculative motion of non-load instructions.  This is normally
6197 enabled by default when scheduling before register allocation, i.e.
6198 with \fB\-fschedule\-insns\fR or at \fB\-O2\fR or higher.
6199 .IP "\fB\-fsched\-pressure\fR" 4
6200 .IX Item "-fsched-pressure"
6201 Enable register pressure sensitive insn scheduling before the register
6202 allocation.  This only makes sense when scheduling before register
6203 allocation is enabled, i.e. with \fB\-fschedule\-insns\fR or at
6204 \&\fB\-O2\fR or higher.  Usage of this option can improve the
6205 generated code and decrease its size by preventing register pressure
6206 increase above the number of available hard registers and as a
6207 consequence register spills in the register allocation.
6208 .IP "\fB\-fsched\-spec\-load\fR" 4
6209 .IX Item "-fsched-spec-load"
6210 Allow speculative motion of some load instructions.  This only makes
6211 sense when scheduling before register allocation, i.e. with
6212 \&\fB\-fschedule\-insns\fR or at \fB\-O2\fR or higher.
6213 .IP "\fB\-fsched\-spec\-load\-dangerous\fR" 4
6214 .IX Item "-fsched-spec-load-dangerous"
6215 Allow speculative motion of more load instructions.  This only makes
6216 sense when scheduling before register allocation, i.e. with
6217 \&\fB\-fschedule\-insns\fR or at \fB\-O2\fR or higher.
6218 .IP "\fB\-fsched\-stalled\-insns\fR" 4
6219 .IX Item "-fsched-stalled-insns"
6220 .PD 0
6221 .IP "\fB\-fsched\-stalled\-insns=\fR\fIn\fR" 4
6222 .IX Item "-fsched-stalled-insns=n"
6223 .PD
6224 Define how many insns (if any) can be moved prematurely from the queue
6225 of stalled insns into the ready list, during the second scheduling pass.
6226 \&\fB\-fno\-sched\-stalled\-insns\fR means that no insns will be moved
6227 prematurely, \fB\-fsched\-stalled\-insns=0\fR means there is no limit
6228 on how many queued insns can be moved prematurely.
6229 \&\fB\-fsched\-stalled\-insns\fR without a value is equivalent to
6230 \&\fB\-fsched\-stalled\-insns=1\fR.
6231 .IP "\fB\-fsched\-stalled\-insns\-dep\fR" 4
6232 .IX Item "-fsched-stalled-insns-dep"
6233 .PD 0
6234 .IP "\fB\-fsched\-stalled\-insns\-dep=\fR\fIn\fR" 4
6235 .IX Item "-fsched-stalled-insns-dep=n"
6236 .PD
6237 Define how many insn groups (cycles) will be examined for a dependency
6238 on a stalled insn that is candidate for premature removal from the queue
6239 of stalled insns.  This has an effect only during the second scheduling pass,
6240 and only if \fB\-fsched\-stalled\-insns\fR is used.
6241 \&\fB\-fno\-sched\-stalled\-insns\-dep\fR is equivalent to
6242 \&\fB\-fsched\-stalled\-insns\-dep=0\fR.
6243 \&\fB\-fsched\-stalled\-insns\-dep\fR without a value is equivalent to
6244 \&\fB\-fsched\-stalled\-insns\-dep=1\fR.
6245 .IP "\fB\-fsched2\-use\-superblocks\fR" 4
6246 .IX Item "-fsched2-use-superblocks"
6247 When scheduling after register allocation, do use superblock scheduling
6248 algorithm.  Superblock scheduling allows motion across basic block boundaries
6249 resulting on faster schedules.  This option is experimental, as not all machine
6250 descriptions used by \s-1GCC\s0 model the \s-1CPU\s0 closely enough to avoid unreliable
6251 results from the algorithm.
6252 .Sp
6253 This only makes sense when scheduling after register allocation, i.e. with
6254 \&\fB\-fschedule\-insns2\fR or at \fB\-O2\fR or higher.
6255 .IP "\fB\-fsched\-group\-heuristic\fR" 4
6256 .IX Item "-fsched-group-heuristic"
6257 Enable the group heuristic in the scheduler.  This heuristic favors
6258 the instruction that belongs to a schedule group.  This is enabled
6259 by default when scheduling is enabled, i.e. with \fB\-fschedule\-insns\fR
6260 or \fB\-fschedule\-insns2\fR or at \fB\-O2\fR or higher.
6261 .IP "\fB\-fsched\-critical\-path\-heuristic\fR" 4
6262 .IX Item "-fsched-critical-path-heuristic"
6263 Enable the critical-path heuristic in the scheduler.  This heuristic favors
6264 instructions on the critical path.  This is enabled by default when
6265 scheduling is enabled, i.e. with \fB\-fschedule\-insns\fR
6266 or \fB\-fschedule\-insns2\fR or at \fB\-O2\fR or higher.
6267 .IP "\fB\-fsched\-spec\-insn\-heuristic\fR" 4
6268 .IX Item "-fsched-spec-insn-heuristic"
6269 Enable the speculative instruction heuristic in the scheduler.  This
6270 heuristic favors speculative instructions with greater dependency weakness.
6271 This is enabled by default when scheduling is enabled, i.e.
6272 with \fB\-fschedule\-insns\fR or \fB\-fschedule\-insns2\fR
6273 or at \fB\-O2\fR or higher.
6274 .IP "\fB\-fsched\-rank\-heuristic\fR" 4
6275 .IX Item "-fsched-rank-heuristic"
6276 Enable the rank heuristic in the scheduler.  This heuristic favors
6277 the instruction belonging to a basic block with greater size or frequency.
6278 This is enabled by default when scheduling is enabled, i.e.
6279 with \fB\-fschedule\-insns\fR or \fB\-fschedule\-insns2\fR or
6280 at \fB\-O2\fR or higher.
6281 .IP "\fB\-fsched\-last\-insn\-heuristic\fR" 4
6282 .IX Item "-fsched-last-insn-heuristic"
6283 Enable the last-instruction heuristic in the scheduler.  This heuristic
6284 favors the instruction that is less dependent on the last instruction
6285 scheduled.  This is enabled by default when scheduling is enabled,
6286 i.e. with \fB\-fschedule\-insns\fR or \fB\-fschedule\-insns2\fR or
6287 at \fB\-O2\fR or higher.
6288 .IP "\fB\-fsched\-dep\-count\-heuristic\fR" 4
6289 .IX Item "-fsched-dep-count-heuristic"
6290 Enable the dependent-count heuristic in the scheduler.  This heuristic
6291 favors the instruction that has more instructions depending on it.
6292 This is enabled by default when scheduling is enabled, i.e.
6293 with \fB\-fschedule\-insns\fR or \fB\-fschedule\-insns2\fR or
6294 at \fB\-O2\fR or higher.
6295 .IP "\fB\-freschedule\-modulo\-scheduled\-loops\fR" 4
6296 .IX Item "-freschedule-modulo-scheduled-loops"
6297 The modulo scheduling comes before the traditional scheduling, if a loop
6298 was modulo scheduled we may want to prevent the later scheduling passes
6299 from changing its schedule, we use this option to control that.
6300 .IP "\fB\-fselective\-scheduling\fR" 4
6301 .IX Item "-fselective-scheduling"
6302 Schedule instructions using selective scheduling algorithm.  Selective
6303 scheduling runs instead of the first scheduler pass.
6304 .IP "\fB\-fselective\-scheduling2\fR" 4
6305 .IX Item "-fselective-scheduling2"
6306 Schedule instructions using selective scheduling algorithm.  Selective
6307 scheduling runs instead of the second scheduler pass.
6308 .IP "\fB\-fsel\-sched\-pipelining\fR" 4
6309 .IX Item "-fsel-sched-pipelining"
6310 Enable software pipelining of innermost loops during selective scheduling.
6311 This option has no effect until one of \fB\-fselective\-scheduling\fR or
6312 \&\fB\-fselective\-scheduling2\fR is turned on.
6313 .IP "\fB\-fsel\-sched\-pipelining\-outer\-loops\fR" 4
6314 .IX Item "-fsel-sched-pipelining-outer-loops"
6315 When pipelining loops during selective scheduling, also pipeline outer loops.
6316 This option has no effect until \fB\-fsel\-sched\-pipelining\fR is turned on.
6317 .IP "\fB\-fshrink\-wrap\fR" 4
6318 .IX Item "-fshrink-wrap"
6319 Emit function prologues only before parts of the function that need it,
6320 rather than at the top of the function.  This flag is enabled by default at
6321 \&\fB\-O\fR and higher.
6322 .IP "\fB\-fcaller\-saves\fR" 4
6323 .IX Item "-fcaller-saves"
6324 Enable values to be allocated in registers that will be clobbered by
6325 function calls, by emitting extra instructions to save and restore the
6326 registers around such calls.  Such allocation is done only when it
6327 seems to result in better code than would otherwise be produced.
6328 .Sp
6329 This option is always enabled by default on certain machines, usually
6330 those which have no call-preserved registers to use instead.
6331 .Sp
6332 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
6333 .IP "\fB\-fcombine\-stack\-adjustments\fR" 4
6334 .IX Item "-fcombine-stack-adjustments"
6335 Tracks stack adjustments (pushes and pops) and stack memory references
6336 and then tries to find ways to combine them.
6337 .Sp
6338 Enabled by default at \fB\-O1\fR and higher.
6339 .IP "\fB\-fconserve\-stack\fR" 4
6340 .IX Item "-fconserve-stack"
6341 Attempt to minimize stack usage.  The compiler will attempt to use less
6342 stack space, even if that makes the program slower.  This option
6343 implies setting the \fBlarge-stack-frame\fR parameter to 100
6344 and the \fBlarge-stack-frame-growth\fR parameter to 400.
6345 .IP "\fB\-ftree\-reassoc\fR" 4
6346 .IX Item "-ftree-reassoc"
6347 Perform reassociation on trees.  This flag is enabled by default
6348 at \fB\-O\fR and higher.
6349 .IP "\fB\-ftree\-pre\fR" 4
6350 .IX Item "-ftree-pre"
6351 Perform partial redundancy elimination (\s-1PRE\s0) on trees.  This flag is
6352 enabled by default at \fB\-O2\fR and \fB\-O3\fR.
6353 .IP "\fB\-ftree\-forwprop\fR" 4
6354 .IX Item "-ftree-forwprop"
6355 Perform forward propagation on trees.  This flag is enabled by default
6356 at \fB\-O\fR and higher.
6357 .IP "\fB\-ftree\-fre\fR" 4
6358 .IX Item "-ftree-fre"
6359 Perform full redundancy elimination (\s-1FRE\s0) on trees.  The difference
6360 between \s-1FRE\s0 and \s-1PRE\s0 is that \s-1FRE\s0 only considers expressions
6361 that are computed on all paths leading to the redundant computation.
6362 This analysis is faster than \s-1PRE\s0, though it exposes fewer redundancies.
6363 This flag is enabled by default at \fB\-O\fR and higher.
6364 .IP "\fB\-ftree\-phiprop\fR" 4
6365 .IX Item "-ftree-phiprop"
6366 Perform hoisting of loads from conditional pointers on trees.  This
6367 pass is enabled by default at \fB\-O\fR and higher.
6368 .IP "\fB\-ftree\-copy\-prop\fR" 4
6369 .IX Item "-ftree-copy-prop"
6370 Perform copy propagation on trees.  This pass eliminates unnecessary
6371 copy operations.  This flag is enabled by default at \fB\-O\fR and
6372 higher.
6373 .IP "\fB\-fipa\-pure\-const\fR" 4
6374 .IX Item "-fipa-pure-const"
6375 Discover which functions are pure or constant.
6376 Enabled by default at \fB\-O\fR and higher.
6377 .IP "\fB\-fipa\-reference\fR" 4
6378 .IX Item "-fipa-reference"
6379 Discover which static variables do not escape cannot escape the
6380 compilation unit.
6381 Enabled by default at \fB\-O\fR and higher.
6382 .IP "\fB\-fipa\-pta\fR" 4
6383 .IX Item "-fipa-pta"
6384 Perform interprocedural pointer analysis and interprocedural modification
6385 and reference analysis.  This option can cause excessive memory and
6386 compile-time usage on large compilation units.  It is not enabled by
6387 default at any optimization level.
6388 .IP "\fB\-fipa\-profile\fR" 4
6389 .IX Item "-fipa-profile"
6390 Perform interprocedural profile propagation.  The functions called only from
6391 cold functions are marked as cold. Also functions executed once (such as
6392 \&\f(CW\*(C`cold\*(C'\fR, \f(CW\*(C`noreturn\*(C'\fR, static constructors or destructors) are identified. Cold
6393 functions and loop less parts of functions executed once are then optimized for
6394 size.
6395 Enabled by default at \fB\-O\fR and higher.
6396 .IP "\fB\-fipa\-cp\fR" 4
6397 .IX Item "-fipa-cp"
6398 Perform interprocedural constant propagation.
6399 This optimization analyzes the program to determine when values passed
6400 to functions are constants and then optimizes accordingly.
6401 This optimization can substantially increase performance
6402 if the application has constants passed to functions.
6403 This flag is enabled by default at \fB\-O2\fR, \fB\-Os\fR and \fB\-O3\fR.
6404 .IP "\fB\-fipa\-cp\-clone\fR" 4
6405 .IX Item "-fipa-cp-clone"
6406 Perform function cloning to make interprocedural constant propagation stronger.
6407 When enabled, interprocedural constant propagation will perform function cloning
6408 when externally visible function can be called with constant arguments.
6409 Because this optimization can create multiple copies of functions,
6410 it may significantly increase code size
6411 (see \fB\-\-param ipcp\-unit\-growth=\fR\fIvalue\fR).
6412 This flag is enabled by default at \fB\-O3\fR.
6413 .IP "\fB\-fipa\-matrix\-reorg\fR" 4
6414 .IX Item "-fipa-matrix-reorg"
6415 Perform matrix flattening and transposing.
6416 Matrix flattening tries to replace an m\-dimensional matrix
6417 with its equivalent n\-dimensional matrix, where n < m.
6418 This reduces the level of indirection needed for accessing the elements
6419 of the matrix. The second optimization is matrix transposing, which
6420 attempts to change the order of the matrix's dimensions in order to
6421 improve cache locality.
6422 Both optimizations need the \fB\-fwhole\-program\fR flag.
6423 Transposing is enabled only if profiling information is available.
6424 .IP "\fB\-ftree\-sink\fR" 4
6425 .IX Item "-ftree-sink"
6426 Perform forward store motion  on trees.  This flag is
6427 enabled by default at \fB\-O\fR and higher.
6428 .IP "\fB\-ftree\-bit\-ccp\fR" 4
6429 .IX Item "-ftree-bit-ccp"
6430 Perform sparse conditional bit constant propagation on trees and propagate
6431 pointer alignment information.
6432 This pass only operates on local scalar variables and is enabled by default
6433 at \fB\-O\fR and higher.  It requires that \fB\-ftree\-ccp\fR is enabled.
6434 .IP "\fB\-ftree\-ccp\fR" 4
6435 .IX Item "-ftree-ccp"
6436 Perform sparse conditional constant propagation (\s-1CCP\s0) on trees.  This
6437 pass only operates on local scalar variables and is enabled by default
6438 at \fB\-O\fR and higher.
6439 .IP "\fB\-ftree\-switch\-conversion\fR" 4
6440 .IX Item "-ftree-switch-conversion"
6441 Perform conversion of simple initializations in a switch to
6442 initializations from a scalar array.  This flag is enabled by default
6443 at \fB\-O2\fR and higher.
6444 .IP "\fB\-ftree\-tail\-merge\fR" 4
6445 .IX Item "-ftree-tail-merge"
6446 Look for identical code sequences.  When found, replace one with a jump to the
6447 other.  This optimization is known as tail merging or cross jumping.  This flag
6448 is enabled by default at \fB\-O2\fR and higher.  The compilation time
6449 in this pass can
6450 be limited using \fBmax-tail-merge-comparisons\fR parameter and
6451 \&\fBmax-tail-merge-iterations\fR parameter.
6452 .IP "\fB\-ftree\-dce\fR" 4
6453 .IX Item "-ftree-dce"
6454 Perform dead code elimination (\s-1DCE\s0) on trees.  This flag is enabled by
6455 default at \fB\-O\fR and higher.
6456 .IP "\fB\-ftree\-builtin\-call\-dce\fR" 4
6457 .IX Item "-ftree-builtin-call-dce"
6458 Perform conditional dead code elimination (\s-1DCE\s0) for calls to builtin functions
6459 that may set \f(CW\*(C`errno\*(C'\fR but are otherwise side-effect free.  This flag is
6460 enabled by default at \fB\-O2\fR and higher if \fB\-Os\fR is not also
6461 specified.
6462 .IP "\fB\-ftree\-dominator\-opts\fR" 4
6463 .IX Item "-ftree-dominator-opts"
6464 Perform a variety of simple scalar cleanups (constant/copy
6465 propagation, redundancy elimination, range propagation and expression
6466 simplification) based on a dominator tree traversal.  This also
6467 performs jump threading (to reduce jumps to jumps). This flag is
6468 enabled by default at \fB\-O\fR and higher.
6469 .IP "\fB\-ftree\-dse\fR" 4
6470 .IX Item "-ftree-dse"
6471 Perform dead store elimination (\s-1DSE\s0) on trees.  A dead store is a store into
6472 a memory location that is later overwritten by another store without
6473 any intervening loads.  In this case the earlier store can be deleted.  This
6474 flag is enabled by default at \fB\-O\fR and higher.
6475 .IP "\fB\-ftree\-ch\fR" 4
6476 .IX Item "-ftree-ch"
6477 Perform loop header copying on trees.  This is beneficial since it increases
6478 effectiveness of code motion optimizations.  It also saves one jump.  This flag
6479 is enabled by default at \fB\-O\fR and higher.  It is not enabled
6480 for \fB\-Os\fR, since it usually increases code size.
6481 .IP "\fB\-ftree\-loop\-optimize\fR" 4
6482 .IX Item "-ftree-loop-optimize"
6483 Perform loop optimizations on trees.  This flag is enabled by default
6484 at \fB\-O\fR and higher.
6485 .IP "\fB\-ftree\-loop\-linear\fR" 4
6486 .IX Item "-ftree-loop-linear"
6487 Perform loop interchange transformations on tree.  Same as
6488 \&\fB\-floop\-interchange\fR.  To use this code transformation, \s-1GCC\s0 has
6489 to be configured with \fB\-\-with\-ppl\fR and \fB\-\-with\-cloog\fR to
6490 enable the Graphite loop transformation infrastructure.
6491 .IP "\fB\-floop\-interchange\fR" 4
6492 .IX Item "-floop-interchange"
6493 Perform loop interchange transformations on loops.  Interchanging two
6494 nested loops switches the inner and outer loops.  For example, given a
6495 loop like:
6496 .Sp
6497 .Vb 5
6498 \&        DO J = 1, M
6499 \&          DO I = 1, N
6500 \&            A(J, I) = A(J, I) * C
6501 \&          ENDDO
6502 \&        ENDDO
6503 .Ve
6504 .Sp
6505 loop interchange will transform the loop as if the user had written:
6506 .Sp
6507 .Vb 5
6508 \&        DO I = 1, N
6509 \&          DO J = 1, M
6510 \&            A(J, I) = A(J, I) * C
6511 \&          ENDDO
6512 \&        ENDDO
6513 .Ve
6514 .Sp
6515 which can be beneficial when \f(CW\*(C`N\*(C'\fR is larger than the caches,
6516 because in Fortran, the elements of an array are stored in memory
6517 contiguously by column, and the original loop iterates over rows,
6518 potentially creating at each access a cache miss.  This optimization
6519 applies to all the languages supported by \s-1GCC\s0 and is not limited to
6520 Fortran.  To use this code transformation, \s-1GCC\s0 has to be configured
6521 with \fB\-\-with\-ppl\fR and \fB\-\-with\-cloog\fR to enable the
6522 Graphite loop transformation infrastructure.
6523 .IP "\fB\-floop\-strip\-mine\fR" 4
6524 .IX Item "-floop-strip-mine"
6525 Perform loop strip mining transformations on loops.  Strip mining
6526 splits a loop into two nested loops.  The outer loop has strides
6527 equal to the strip size and the inner loop has strides of the
6528 original loop within a strip.  The strip length can be changed
6529 using the \fBloop-block-tile-size\fR parameter.  For example,
6530 given a loop like:
6531 .Sp
6532 .Vb 3
6533 \&        DO I = 1, N
6534 \&          A(I) = A(I) + C
6535 \&        ENDDO
6536 .Ve
6537 .Sp
6538 loop strip mining will transform the loop as if the user had written:
6539 .Sp
6540 .Vb 5
6541 \&        DO II = 1, N, 51
6542 \&          DO I = II, min (II + 50, N)
6543 \&            A(I) = A(I) + C
6544 \&          ENDDO
6545 \&        ENDDO
6546 .Ve
6547 .Sp
6548 This optimization applies to all the languages supported by \s-1GCC\s0 and is
6549 not limited to Fortran.  To use this code transformation, \s-1GCC\s0 has to
6550 be configured with \fB\-\-with\-ppl\fR and \fB\-\-with\-cloog\fR to
6551 enable the Graphite loop transformation infrastructure.
6552 .IP "\fB\-floop\-block\fR" 4
6553 .IX Item "-floop-block"
6554 Perform loop blocking transformations on loops.  Blocking strip mines
6555 each loop in the loop nest such that the memory accesses of the
6556 element loops fit inside caches.  The strip length can be changed
6557 using the \fBloop-block-tile-size\fR parameter.  For example, given
6558 a loop like:
6559 .Sp
6560 .Vb 5
6561 \&        DO I = 1, N
6562 \&          DO J = 1, M
6563 \&            A(J, I) = B(I) + C(J)
6564 \&          ENDDO
6565 \&        ENDDO
6566 .Ve
6567 .Sp
6568 loop blocking will transform the loop as if the user had written:
6569 .Sp
6570 .Vb 9
6571 \&        DO II = 1, N, 51
6572 \&          DO JJ = 1, M, 51
6573 \&            DO I = II, min (II + 50, N)
6574 \&              DO J = JJ, min (JJ + 50, M)
6575 \&                A(J, I) = B(I) + C(J)
6576 \&              ENDDO
6577 \&            ENDDO
6578 \&          ENDDO
6579 \&        ENDDO
6580 .Ve
6581 .Sp
6582 which can be beneficial when \f(CW\*(C`M\*(C'\fR is larger than the caches,
6583 because the innermost loop will iterate over a smaller amount of data
6584 which can be kept in the caches.  This optimization applies to all the
6585 languages supported by \s-1GCC\s0 and is not limited to Fortran.  To use this
6586 code transformation, \s-1GCC\s0 has to be configured with \fB\-\-with\-ppl\fR
6587 and \fB\-\-with\-cloog\fR to enable the Graphite loop transformation
6588 infrastructure.
6589 .IP "\fB\-fgraphite\-identity\fR" 4
6590 .IX Item "-fgraphite-identity"
6591 Enable the identity transformation for graphite.  For every SCoP we generate
6592 the polyhedral representation and transform it back to gimple.  Using
6593 \&\fB\-fgraphite\-identity\fR we can check the costs or benefits of the
6594 \&\s-1GIMPLE\s0 \-> \s-1GRAPHITE\s0 \-> \s-1GIMPLE\s0 transformation.  Some minimal optimizations
6595 are also performed by the code generator CLooG, like index splitting and
6596 dead code elimination in loops.
6597 .IP "\fB\-floop\-flatten\fR" 4
6598 .IX Item "-floop-flatten"
6599 Removes the loop nesting structure: transforms the loop nest into a
6600 single loop.  This transformation can be useful as an enablement
6601 transform for vectorization and parallelization.  This feature
6602 is experimental.
6603 To use this code transformation, \s-1GCC\s0 has to be configured
6604 with \fB\-\-with\-ppl\fR and \fB\-\-with\-cloog\fR to enable the
6605 Graphite loop transformation infrastructure.
6606 .IP "\fB\-floop\-parallelize\-all\fR" 4
6607 .IX Item "-floop-parallelize-all"
6608 Use the Graphite data dependence analysis to identify loops that can
6609 be parallelized.  Parallelize all the loops that can be analyzed to
6610 not contain loop carried dependences without checking that it is
6611 profitable to parallelize the loops.
6612 .IP "\fB\-fcheck\-data\-deps\fR" 4
6613 .IX Item "-fcheck-data-deps"
6614 Compare the results of several data dependence analyzers.  This option
6615 is used for debugging the data dependence analyzers.
6616 .IP "\fB\-ftree\-loop\-if\-convert\fR" 4
6617 .IX Item "-ftree-loop-if-convert"
6618 Attempt to transform conditional jumps in the innermost loops to
6619 branch-less equivalents.  The intent is to remove control-flow from
6620 the innermost loops in order to improve the ability of the
6621 vectorization pass to handle these loops.  This is enabled by default
6622 if vectorization is enabled.
6623 .IP "\fB\-ftree\-loop\-if\-convert\-stores\fR" 4
6624 .IX Item "-ftree-loop-if-convert-stores"
6625 Attempt to also if-convert conditional jumps containing memory writes.
6626 This transformation can be unsafe for multi-threaded programs as it
6627 transforms conditional memory writes into unconditional memory writes.
6628 For example,
6629 .Sp
6630 .Vb 3
6631 \&        for (i = 0; i < N; i++)
6632 \&          if (cond)
6633 \&            A[i] = expr;
6634 .Ve
6635 .Sp
6636 would be transformed to
6637 .Sp
6638 .Vb 2
6639 \&        for (i = 0; i < N; i++)
6640 \&          A[i] = cond ? expr : A[i];
6641 .Ve
6642 .Sp
6643 potentially producing data races.
6644 .IP "\fB\-ftree\-loop\-distribution\fR" 4
6645 .IX Item "-ftree-loop-distribution"
6646 Perform loop distribution.  This flag can improve cache performance on
6647 big loop bodies and allow further loop optimizations, like
6648 parallelization or vectorization, to take place.  For example, the loop
6649 .Sp
6650 .Vb 4
6651 \&        DO I = 1, N
6652 \&          A(I) = B(I) + C
6653 \&          D(I) = E(I) * F
6654 \&        ENDDO
6655 .Ve
6656 .Sp
6657 is transformed to
6658 .Sp
6659 .Vb 6
6660 \&        DO I = 1, N
6661 \&           A(I) = B(I) + C
6662 \&        ENDDO
6663 \&        DO I = 1, N
6664 \&           D(I) = E(I) * F
6665 \&        ENDDO
6666 .Ve
6667 .IP "\fB\-ftree\-loop\-distribute\-patterns\fR" 4
6668 .IX Item "-ftree-loop-distribute-patterns"
6669 Perform loop distribution of patterns that can be code generated with
6670 calls to a library.  This flag is enabled by default at \fB\-O3\fR.
6671 .Sp
6672 This pass distributes the initialization loops and generates a call to
6673 memset zero.  For example, the loop
6674 .Sp
6675 .Vb 4
6676 \&        DO I = 1, N
6677 \&          A(I) = 0
6678 \&          B(I) = A(I) + I
6679 \&        ENDDO
6680 .Ve
6681 .Sp
6682 is transformed to
6683 .Sp
6684 .Vb 6
6685 \&        DO I = 1, N
6686 \&           A(I) = 0
6687 \&        ENDDO
6688 \&        DO I = 1, N
6689 \&           B(I) = A(I) + I
6690 \&        ENDDO
6691 .Ve
6692 .Sp
6693 and the initialization loop is transformed into a call to memset zero.
6694 .IP "\fB\-ftree\-loop\-im\fR" 4
6695 .IX Item "-ftree-loop-im"
6696 Perform loop invariant motion on trees.  This pass moves only invariants that
6697 would be hard to handle at \s-1RTL\s0 level (function calls, operations that expand to
6698 nontrivial sequences of insns).  With \fB\-funswitch\-loops\fR it also moves
6699 operands of conditions that are invariant out of the loop, so that we can use
6700 just trivial invariantness analysis in loop unswitching.  The pass also includes
6701 store motion.
6702 .IP "\fB\-ftree\-loop\-ivcanon\fR" 4
6703 .IX Item "-ftree-loop-ivcanon"
6704 Create a canonical counter for number of iterations in loops for which
6705 determining number of iterations requires complicated analysis.  Later
6706 optimizations then may determine the number easily.  Useful especially
6707 in connection with unrolling.
6708 .IP "\fB\-fivopts\fR" 4
6709 .IX Item "-fivopts"
6710 Perform induction variable optimizations (strength reduction, induction
6711 variable merging and induction variable elimination) on trees.
6712 .IP "\fB\-ftree\-parallelize\-loops=n\fR" 4
6713 .IX Item "-ftree-parallelize-loops=n"
6714 Parallelize loops, i.e., split their iteration space to run in n threads.
6715 This is only possible for loops whose iterations are independent
6716 and can be arbitrarily reordered.  The optimization is only
6717 profitable on multiprocessor machines, for loops that are CPU-intensive,
6718 rather than constrained e.g. by memory bandwidth.  This option
6719 implies \fB\-pthread\fR, and thus is only supported on targets
6720 that have support for \fB\-pthread\fR.
6721 .IP "\fB\-ftree\-pta\fR" 4
6722 .IX Item "-ftree-pta"
6723 Perform function-local points-to analysis on trees.  This flag is
6724 enabled by default at \fB\-O\fR and higher.
6725 .IP "\fB\-ftree\-sra\fR" 4
6726 .IX Item "-ftree-sra"
6727 Perform scalar replacement of aggregates.  This pass replaces structure
6728 references with scalars to prevent committing structures to memory too
6729 early.  This flag is enabled by default at \fB\-O\fR and higher.
6730 .IP "\fB\-ftree\-copyrename\fR" 4
6731 .IX Item "-ftree-copyrename"
6732 Perform copy renaming on trees.  This pass attempts to rename compiler
6733 temporaries to other variables at copy locations, usually resulting in
6734 variable names which more closely resemble the original variables.  This flag
6735 is enabled by default at \fB\-O\fR and higher.
6736 .IP "\fB\-ftree\-ter\fR" 4
6737 .IX Item "-ftree-ter"
6738 Perform temporary expression replacement during the \s-1SSA\-\s0>normal phase.  Single
6739 use/single def temporaries are replaced at their use location with their
6740 defining expression.  This results in non-GIMPLE code, but gives the expanders
6741 much more complex trees to work on resulting in better \s-1RTL\s0 generation.  This is
6742 enabled by default at \fB\-O\fR and higher.
6743 .IP "\fB\-ftree\-vectorize\fR" 4
6744 .IX Item "-ftree-vectorize"
6745 Perform loop vectorization on trees. This flag is enabled by default at
6746 \&\fB\-O3\fR.
6747 .IP "\fB\-ftree\-slp\-vectorize\fR" 4
6748 .IX Item "-ftree-slp-vectorize"
6749 Perform basic block vectorization on trees. This flag is enabled by default at
6750 \&\fB\-O3\fR and when \fB\-ftree\-vectorize\fR is enabled.
6751 .IP "\fB\-ftree\-vect\-loop\-version\fR" 4
6752 .IX Item "-ftree-vect-loop-version"
6753 Perform loop versioning when doing loop vectorization on trees.  When a loop
6754 appears to be vectorizable except that data alignment or data dependence cannot
6755 be determined at compile time, then vectorized and non-vectorized versions of
6756 the loop are generated along with run-time checks for alignment or dependence
6757 to control which version is executed.  This option is enabled by default
6758 except at level \fB\-Os\fR where it is disabled.
6759 .IP "\fB\-fvect\-cost\-model\fR" 4
6760 .IX Item "-fvect-cost-model"
6761 Enable cost model for vectorization.
6762 .IP "\fB\-ftree\-vrp\fR" 4
6763 .IX Item "-ftree-vrp"
6764 Perform Value Range Propagation on trees.  This is similar to the
6765 constant propagation pass, but instead of values, ranges of values are
6766 propagated.  This allows the optimizers to remove unnecessary range
6767 checks like array bound checks and null pointer checks.  This is
6768 enabled by default at \fB\-O2\fR and higher.  Null pointer check
6769 elimination is only done if \fB\-fdelete\-null\-pointer\-checks\fR is
6770 enabled.
6771 .IP "\fB\-ftracer\fR" 4
6772 .IX Item "-ftracer"
6773 Perform tail duplication to enlarge superblock size.  This transformation
6774 simplifies the control flow of the function allowing other optimizations to do
6775 better job.
6776 .IP "\fB\-funroll\-loops\fR" 4
6777 .IX Item "-funroll-loops"
6778 Unroll loops whose number of iterations can be determined at compile
6779 time or upon entry to the loop.  \fB\-funroll\-loops\fR implies
6780 \&\fB\-frerun\-cse\-after\-loop\fR.  This option makes code larger,
6781 and may or may not make it run faster.
6782 .IP "\fB\-funroll\-all\-loops\fR" 4
6783 .IX Item "-funroll-all-loops"
6784 Unroll all loops, even if their number of iterations is uncertain when
6785 the loop is entered.  This usually makes programs run more slowly.
6786 \&\fB\-funroll\-all\-loops\fR implies the same options as
6787 \&\fB\-funroll\-loops\fR,
6788 .IP "\fB\-fsplit\-ivs\-in\-unroller\fR" 4
6789 .IX Item "-fsplit-ivs-in-unroller"
6790 Enables expressing of values of induction variables in later iterations
6791 of the unrolled loop using the value in the first iteration.  This breaks
6792 long dependency chains, thus improving efficiency of the scheduling passes.
6793 .Sp
6794 Combination of \fB\-fweb\fR and \s-1CSE\s0 is often sufficient to obtain the
6795 same effect.  However in cases the loop body is more complicated than
6796 a single basic block, this is not reliable.  It also does not work at all
6797 on some of the architectures due to restrictions in the \s-1CSE\s0 pass.
6798 .Sp
6799 This optimization is enabled by default.
6800 .IP "\fB\-fvariable\-expansion\-in\-unroller\fR" 4
6801 .IX Item "-fvariable-expansion-in-unroller"
6802 With this option, the compiler will create multiple copies of some
6803 local variables when unrolling a loop which can result in superior code.
6804 .IP "\fB\-fpartial\-inlining\fR" 4
6805 .IX Item "-fpartial-inlining"
6806 Inline parts of functions.  This option has any effect only
6807 when inlining itself is turned on by the \fB\-finline\-functions\fR
6808 or \fB\-finline\-small\-functions\fR options.
6809 .Sp
6810 Enabled at level \fB\-O2\fR.
6811 .IP "\fB\-fpredictive\-commoning\fR" 4
6812 .IX Item "-fpredictive-commoning"
6813 Perform predictive commoning optimization, i.e., reusing computations
6814 (especially memory loads and stores) performed in previous
6815 iterations of loops.
6816 .Sp
6817 This option is enabled at level \fB\-O3\fR.
6818 .IP "\fB\-fprefetch\-loop\-arrays\fR" 4
6819 .IX Item "-fprefetch-loop-arrays"
6820 If supported by the target machine, generate instructions to prefetch
6821 memory to improve the performance of loops that access large arrays.
6822 .Sp
6823 This option may generate better or worse code; results are highly
6824 dependent on the structure of loops within the source code.
6825 .Sp
6826 Disabled at level \fB\-Os\fR.
6827 .IP "\fB\-fno\-peephole\fR" 4
6828 .IX Item "-fno-peephole"
6829 .PD 0
6830 .IP "\fB\-fno\-peephole2\fR" 4
6831 .IX Item "-fno-peephole2"
6832 .PD
6833 Disable any machine-specific peephole optimizations.  The difference
6834 between \fB\-fno\-peephole\fR and \fB\-fno\-peephole2\fR is in how they
6835 are implemented in the compiler; some targets use one, some use the
6836 other, a few use both.
6837 .Sp
6838 \&\fB\-fpeephole\fR is enabled by default.
6839 \&\fB\-fpeephole2\fR enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
6840 .IP "\fB\-fno\-guess\-branch\-probability\fR" 4
6841 .IX Item "-fno-guess-branch-probability"
6842 Do not guess branch probabilities using heuristics.
6843 .Sp
6844 \&\s-1GCC\s0 will use heuristics to guess branch probabilities if they are
6845 not provided by profiling feedback (\fB\-fprofile\-arcs\fR).  These
6846 heuristics are based on the control flow graph.  If some branch probabilities
6847 are specified by \fB_\|_builtin_expect\fR, then the heuristics will be
6848 used to guess branch probabilities for the rest of the control flow graph,
6849 taking the \fB_\|_builtin_expect\fR info into account.  The interactions
6850 between the heuristics and \fB_\|_builtin_expect\fR can be complex, and in
6851 some cases, it may be useful to disable the heuristics so that the effects
6852 of \fB_\|_builtin_expect\fR are easier to understand.
6853 .Sp
6854 The default is \fB\-fguess\-branch\-probability\fR at levels
6855 \&\fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
6856 .IP "\fB\-freorder\-blocks\fR" 4
6857 .IX Item "-freorder-blocks"
6858 Reorder basic blocks in the compiled function in order to reduce number of
6859 taken branches and improve code locality.
6860 .Sp
6861 Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
6862 .IP "\fB\-freorder\-blocks\-and\-partition\fR" 4
6863 .IX Item "-freorder-blocks-and-partition"
6864 In addition to reordering basic blocks in the compiled function, in order
6865 to reduce number of taken branches, partitions hot and cold basic blocks
6866 into separate sections of the assembly and .o files, to improve
6867 paging and cache locality performance.
6868 .Sp
6869 This optimization is automatically turned off in the presence of
6870 exception handling, for linkonce sections, for functions with a user-defined
6871 section attribute and on any architecture that does not support named
6872 sections.
6873 .IP "\fB\-freorder\-functions\fR" 4
6874 .IX Item "-freorder-functions"
6875 Reorder functions in the object file in order to
6876 improve code locality.  This is implemented by using special
6877 subsections \f(CW\*(C`.text.hot\*(C'\fR for most frequently executed functions and
6878 \&\f(CW\*(C`.text.unlikely\*(C'\fR for unlikely executed functions.  Reordering is done by
6879 the linker so object file format must support named sections and linker must
6880 place them in a reasonable way.
6881 .Sp
6882 Also profile feedback must be available in to make this option effective.  See
6883 \&\fB\-fprofile\-arcs\fR for details.
6884 .Sp
6885 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
6886 .IP "\fB\-fstrict\-aliasing\fR" 4
6887 .IX Item "-fstrict-aliasing"
6888 Allow the compiler to assume the strictest aliasing rules applicable to
6889 the language being compiled.  For C (and \*(C+), this activates
6890 optimizations based on the type of expressions.  In particular, an
6891 object of one type is assumed never to reside at the same address as an
6892 object of a different type, unless the types are almost the same.  For
6893 example, an \f(CW\*(C`unsigned int\*(C'\fR can alias an \f(CW\*(C`int\*(C'\fR, but not a
6894 \&\f(CW\*(C`void*\*(C'\fR or a \f(CW\*(C`double\*(C'\fR.  A character type may alias any other
6895 type.
6896 .Sp
6897 Pay special attention to code like this:
6898 .Sp
6899 .Vb 4
6900 \&        union a_union {
6901 \&          int i;
6902 \&          double d;
6903 \&        };
6904 \&        
6905 \&        int f() {
6906 \&          union a_union t;
6907 \&          t.d = 3.0;
6908 \&          return t.i;
6909 \&        }
6910 .Ve
6911 .Sp
6912 The practice of reading from a different union member than the one most
6913 recently written to (called \*(L"type-punning\*(R") is common.  Even with
6914 \&\fB\-fstrict\-aliasing\fR, type-punning is allowed, provided the memory
6915 is accessed through the union type.  So, the code above will work as
6916 expected.    However, this code might not:
6917 .Sp
6918 .Vb 7
6919 \&        int f() {
6920 \&          union a_union t;
6921 \&          int* ip;
6922 \&          t.d = 3.0;
6923 \&          ip = &t.i;
6924 \&          return *ip;
6925 \&        }
6926 .Ve
6927 .Sp
6928 Similarly, access by taking the address, casting the resulting pointer
6929 and dereferencing the result has undefined behavior, even if the cast
6930 uses a union type, e.g.:
6931 .Sp
6932 .Vb 4
6933 \&        int f() {
6934 \&          double d = 3.0;
6935 \&          return ((union a_union *) &d)\->i;
6936 \&        }
6937 .Ve
6938 .Sp
6939 The \fB\-fstrict\-aliasing\fR option is enabled at levels
6940 \&\fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
6941 .IP "\fB\-fstrict\-overflow\fR" 4
6942 .IX Item "-fstrict-overflow"
6943 Allow the compiler to assume strict signed overflow rules, depending
6944 on the language being compiled.  For C (and \*(C+) this means that
6945 overflow when doing arithmetic with signed numbers is undefined, which
6946 means that the compiler may assume that it will not happen.  This
6947 permits various optimizations.  For example, the compiler will assume
6948 that an expression like \f(CW\*(C`i + 10 > i\*(C'\fR will always be true for
6949 signed \f(CW\*(C`i\*(C'\fR.  This assumption is only valid if signed overflow is
6950 undefined, as the expression is false if \f(CW\*(C`i + 10\*(C'\fR overflows when
6951 using twos complement arithmetic.  When this option is in effect any
6952 attempt to determine whether an operation on signed numbers will
6953 overflow must be written carefully to not actually involve overflow.
6954 .Sp
6955 This option also allows the compiler to assume strict pointer
6956 semantics: given a pointer to an object, if adding an offset to that
6957 pointer does not produce a pointer to the same object, the addition is
6958 undefined.  This permits the compiler to conclude that \f(CW\*(C`p + u >
6959 p\*(C'\fR is always true for a pointer \f(CW\*(C`p\*(C'\fR and unsigned integer
6960 \&\f(CW\*(C`u\*(C'\fR.  This assumption is only valid because pointer wraparound is
6961 undefined, as the expression is false if \f(CW\*(C`p + u\*(C'\fR overflows using
6962 twos complement arithmetic.
6963 .Sp
6964 See also the \fB\-fwrapv\fR option.  Using \fB\-fwrapv\fR means
6965 that integer signed overflow is fully defined: it wraps.  When
6966 \&\fB\-fwrapv\fR is used, there is no difference between
6967 \&\fB\-fstrict\-overflow\fR and \fB\-fno\-strict\-overflow\fR for
6968 integers.  With \fB\-fwrapv\fR certain types of overflow are
6969 permitted.  For example, if the compiler gets an overflow when doing
6970 arithmetic on constants, the overflowed value can still be used with
6971 \&\fB\-fwrapv\fR, but not otherwise.
6972 .Sp
6973 The \fB\-fstrict\-overflow\fR option is enabled at levels
6974 \&\fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
6975 .IP "\fB\-falign\-functions\fR" 4
6976 .IX Item "-falign-functions"
6977 .PD 0
6978 .IP "\fB\-falign\-functions=\fR\fIn\fR" 4
6979 .IX Item "-falign-functions=n"
6980 .PD
6981 Align the start of functions to the next power-of-two greater than
6982 \&\fIn\fR, skipping up to \fIn\fR bytes.  For instance,
6983 \&\fB\-falign\-functions=32\fR aligns functions to the next 32\-byte
6984 boundary, but \fB\-falign\-functions=24\fR would align to the next
6985 32\-byte boundary only if this can be done by skipping 23 bytes or less.
6986 .Sp
6987 \&\fB\-fno\-align\-functions\fR and \fB\-falign\-functions=1\fR are
6988 equivalent and mean that functions will not be aligned.
6989 .Sp
6990 Some assemblers only support this flag when \fIn\fR is a power of two;
6991 in that case, it is rounded up.
6992 .Sp
6993 If \fIn\fR is not specified or is zero, use a machine-dependent default.
6994 .Sp
6995 Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
6996 .IP "\fB\-falign\-labels\fR" 4
6997 .IX Item "-falign-labels"
6998 .PD 0
6999 .IP "\fB\-falign\-labels=\fR\fIn\fR" 4
7000 .IX Item "-falign-labels=n"
7001 .PD
7002 Align all branch targets to a power-of-two boundary, skipping up to
7003 \&\fIn\fR bytes like \fB\-falign\-functions\fR.  This option can easily
7004 make code slower, because it must insert dummy operations for when the
7005 branch target is reached in the usual flow of the code.
7006 .Sp
7007 \&\fB\-fno\-align\-labels\fR and \fB\-falign\-labels=1\fR are
7008 equivalent and mean that labels will not be aligned.
7009 .Sp
7010 If \fB\-falign\-loops\fR or \fB\-falign\-jumps\fR are applicable and
7011 are greater than this value, then their values are used instead.
7012 .Sp
7013 If \fIn\fR is not specified or is zero, use a machine-dependent default
7014 which is very likely to be \fB1\fR, meaning no alignment.
7015 .Sp
7016 Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
7017 .IP "\fB\-falign\-loops\fR" 4
7018 .IX Item "-falign-loops"
7019 .PD 0
7020 .IP "\fB\-falign\-loops=\fR\fIn\fR" 4
7021 .IX Item "-falign-loops=n"
7022 .PD
7023 Align loops to a power-of-two boundary, skipping up to \fIn\fR bytes
7024 like \fB\-falign\-functions\fR.  The hope is that the loop will be
7025 executed many times, which will make up for any execution of the dummy
7026 operations.
7027 .Sp
7028 \&\fB\-fno\-align\-loops\fR and \fB\-falign\-loops=1\fR are
7029 equivalent and mean that loops will not be aligned.
7030 .Sp
7031 If \fIn\fR is not specified or is zero, use a machine-dependent default.
7032 .Sp
7033 Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
7034 .IP "\fB\-falign\-jumps\fR" 4
7035 .IX Item "-falign-jumps"
7036 .PD 0
7037 .IP "\fB\-falign\-jumps=\fR\fIn\fR" 4
7038 .IX Item "-falign-jumps=n"
7039 .PD
7040 Align branch targets to a power-of-two boundary, for branch targets
7041 where the targets can only be reached by jumping, skipping up to \fIn\fR
7042 bytes like \fB\-falign\-functions\fR.  In this case, no dummy operations
7043 need be executed.
7044 .Sp
7045 \&\fB\-fno\-align\-jumps\fR and \fB\-falign\-jumps=1\fR are
7046 equivalent and mean that loops will not be aligned.
7047 .Sp
7048 If \fIn\fR is not specified or is zero, use a machine-dependent default.
7049 .Sp
7050 Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
7051 .IP "\fB\-funit\-at\-a\-time\fR" 4
7052 .IX Item "-funit-at-a-time"
7053 This option is left for compatibility reasons. \fB\-funit\-at\-a\-time\fR
7054 has no effect, while \fB\-fno\-unit\-at\-a\-time\fR implies
7055 \&\fB\-fno\-toplevel\-reorder\fR and \fB\-fno\-section\-anchors\fR.
7056 .Sp
7057 Enabled by default.
7058 .IP "\fB\-fno\-toplevel\-reorder\fR" 4
7059 .IX Item "-fno-toplevel-reorder"
7060 Do not reorder top-level functions, variables, and \f(CW\*(C`asm\*(C'\fR
7061 statements.  Output them in the same order that they appear in the
7062 input file.  When this option is used, unreferenced static variables
7063 will not be removed.  This option is intended to support existing code
7064 that relies on a particular ordering.  For new code, it is better to
7065 use attributes.
7066 .Sp
7067 Enabled at level \fB\-O0\fR.  When disabled explicitly, it also implies
7068 \&\fB\-fno\-section\-anchors\fR, which is otherwise enabled at \fB\-O0\fR on some
7069 targets.
7070 .IP "\fB\-fweb\fR" 4
7071 .IX Item "-fweb"
7072 Constructs webs as commonly used for register allocation purposes and assign
7073 each web individual pseudo register.  This allows the register allocation pass
7074 to operate on pseudos directly, but also strengthens several other optimization
7075 passes, such as \s-1CSE\s0, loop optimizer and trivial dead code remover.  It can,
7076 however, make debugging impossible, since variables will no longer stay in a
7077 \&\*(L"home register\*(R".
7078 .Sp
7079 Enabled by default with \fB\-funroll\-loops\fR.
7080 .IP "\fB\-fwhole\-program\fR" 4
7081 .IX Item "-fwhole-program"
7082 Assume that the current compilation unit represents the whole program being
7083 compiled.  All public functions and variables with the exception of \f(CW\*(C`main\*(C'\fR
7084 and those merged by attribute \f(CW\*(C`externally_visible\*(C'\fR become static functions
7085 and in effect are optimized more aggressively by interprocedural optimizers. If \fBgold\fR is used as the linker plugin, \f(CW\*(C`externally_visible\*(C'\fR attributes are automatically added to functions (not variable yet due to a current \fBgold\fR issue) that are accessed outside of \s-1LTO\s0 objects according to resolution file produced by \fBgold\fR.  For other linkers that cannot generate resolution file, explicit \f(CW\*(C`externally_visible\*(C'\fR attributes are still necessary.
7086 While this option is equivalent to proper use of the \f(CW\*(C`static\*(C'\fR keyword for
7087 programs consisting of a single file, in combination with option
7088 \&\fB\-flto\fR this flag can be used to
7089 compile many smaller scale programs since the functions and variables become
7090 local for the whole combined compilation unit, not for the single source file
7091 itself.
7092 .Sp
7093 This option implies \fB\-fwhole\-file\fR for Fortran programs.
7094 .IP "\fB\-flto[=\fR\fIn\fR\fB]\fR" 4
7095 .IX Item "-flto[=n]"
7096 This option runs the standard link-time optimizer.  When invoked
7097 with source code, it generates \s-1GIMPLE\s0 (one of \s-1GCC\s0's internal
7098 representations) and writes it to special \s-1ELF\s0 sections in the object
7099 file.  When the object files are linked together, all the function
7100 bodies are read from these \s-1ELF\s0 sections and instantiated as if they
7101 had been part of the same translation unit.
7102 .Sp
7103 To use the link-time optimizer, \fB\-flto\fR needs to be specified at
7104 compile time and during the final link.  For example:
7105 .Sp
7106 .Vb 3
7107 \&        gcc \-c \-O2 \-flto foo.c
7108 \&        gcc \-c \-O2 \-flto bar.c
7109 \&        gcc \-o myprog \-flto \-O2 foo.o bar.o
7110 .Ve
7111 .Sp
7112 The first two invocations to \s-1GCC\s0 save a bytecode representation
7113 of \s-1GIMPLE\s0 into special \s-1ELF\s0 sections inside \fIfoo.o\fR and
7114 \&\fIbar.o\fR.  The final invocation reads the \s-1GIMPLE\s0 bytecode from
7115 \&\fIfoo.o\fR and \fIbar.o\fR, merges the two files into a single
7116 internal image, and compiles the result as usual.  Since both
7117 \&\fIfoo.o\fR and \fIbar.o\fR are merged into a single image, this
7118 causes all the interprocedural analyses and optimizations in \s-1GCC\s0 to
7119 work across the two files as if they were a single one.  This means,
7120 for example, that the inliner is able to inline functions in
7121 \&\fIbar.o\fR into functions in \fIfoo.o\fR and vice-versa.
7122 .Sp
7123 Another (simpler) way to enable link-time optimization is:
7124 .Sp
7125 .Vb 1
7126 \&        gcc \-o myprog \-flto \-O2 foo.c bar.c
7127 .Ve
7128 .Sp
7129 The above generates bytecode for \fIfoo.c\fR and \fIbar.c\fR,
7130 merges them together into a single \s-1GIMPLE\s0 representation and optimizes
7131 them as usual to produce \fImyprog\fR.
7132 .Sp
7133 The only important thing to keep in mind is that to enable link-time
7134 optimizations the \fB\-flto\fR flag needs to be passed to both the
7135 compile and the link commands.
7136 .Sp
7137 To make whole program optimization effective, it is necessary to make
7138 certain whole program assumptions.  The compiler needs to know
7139 what functions and variables can be accessed by libraries and runtime
7140 outside of the link-time optimized unit.  When supported by the linker,
7141 the linker plugin (see \fB\-fuse\-linker\-plugin\fR) passes information
7142 to the compiler about used and externally visible symbols.  When
7143 the linker plugin is not available, \fB\-fwhole\-program\fR should be
7144 used to allow the compiler to make these assumptions, which leads
7145 to more aggressive optimization decisions.
7146 .Sp
7147 Note that when a file is compiled with \fB\-flto\fR, the generated
7148 object file is larger than a regular object file because it 
7149 contains \s-1GIMPLE\s0 bytecodes and the usual final code.  This means that
7150 object files with \s-1LTO\s0 information can be linked as normal object
7151 files; if \fB\-flto\fR is not passed to the linker, no
7152 interprocedural optimizations are applied.
7153 .Sp
7154 Additionally, the optimization flags used to compile individual files
7155 are not necessarily related to those used at link time.  For instance,
7156 .Sp
7157 .Vb 3
7158 \&        gcc \-c \-O0 \-flto foo.c
7159 \&        gcc \-c \-O0 \-flto bar.c
7160 \&        gcc \-o myprog \-flto \-O3 foo.o bar.o
7161 .Ve
7162 .Sp
7163 This produces individual object files with unoptimized assembler
7164 code, but the resulting binary \fImyprog\fR is optimized at
7165 \&\fB\-O3\fR.  If, instead, the final binary is generated without
7166 \&\fB\-flto\fR, then \fImyprog\fR is not optimized.
7167 .Sp
7168 When producing the final binary with \fB\-flto\fR, \s-1GCC\s0 only
7169 applies link-time optimizations to those files that contain bytecode.
7170 Therefore, you can mix and match object files and libraries with
7171 \&\s-1GIMPLE\s0 bytecodes and final object code.  \s-1GCC\s0 automatically selects
7172 which files to optimize in \s-1LTO\s0 mode and which files to link without
7173 further processing.
7174 .Sp
7175 There are some code generation flags preserved by \s-1GCC\s0 when
7176 generating bytecodes, as they need to be used during the final link
7177 stage.  Currently, the following options are saved into the \s-1GIMPLE\s0
7178 bytecode files: \fB\-fPIC\fR, \fB\-fcommon\fR and all the
7179 \&\fB\-m\fR target flags.
7180 .Sp
7181 At link time, these options are read in and reapplied.  Note that the
7182 current implementation makes no attempt to recognize conflicting
7183 values for these options.  If different files have conflicting option
7184 values (e.g., one file is compiled with \fB\-fPIC\fR and another
7185 isn't), the compiler simply uses the last value read from the
7186 bytecode files.  It is recommended, then, that you compile all the files
7187 participating in the same link with the same options.
7188 .Sp
7189 If \s-1LTO\s0 encounters objects with C linkage declared with incompatible
7190 types in separate translation units to be linked together (undefined
7191 behavior according to \s-1ISO\s0 C99 6.2.7), a non-fatal diagnostic may be
7192 issued.  The behavior is still undefined at run time.
7193 .Sp
7194 Another feature of \s-1LTO\s0 is that it is possible to apply interprocedural
7195 optimizations on files written in different languages.  This requires
7196 support in the language front end.  Currently, the C, \*(C+ and
7197 Fortran front ends are capable of emitting \s-1GIMPLE\s0 bytecodes, so
7198 something like this should work:
7199 .Sp
7200 .Vb 4
7201 \&        gcc \-c \-flto foo.c
7202 \&        g++ \-c \-flto bar.cc
7203 \&        gfortran \-c \-flto baz.f90
7204 \&        g++ \-o myprog \-flto \-O3 foo.o bar.o baz.o \-lgfortran
7205 .Ve
7206 .Sp
7207 Notice that the final link is done with \fBg++\fR to get the \*(C+
7208 runtime libraries and \fB\-lgfortran\fR is added to get the Fortran
7209 runtime libraries.  In general, when mixing languages in \s-1LTO\s0 mode, you
7210 should use the same link command options as when mixing languages in a
7211 regular (non-LTO) compilation; all you need to add is \fB\-flto\fR to
7212 all the compile and link commands.
7213 .Sp
7214 If object files containing \s-1GIMPLE\s0 bytecode are stored in a library archive, say
7215 \&\fIlibfoo.a\fR, it is possible to extract and use them in an \s-1LTO\s0 link if you
7216 are using a linker with plugin support.  To enable this feature, use
7217 the flag \fB\-fuse\-linker\-plugin\fR at link time:
7218 .Sp
7219 .Vb 1
7220 \&        gcc \-o myprog \-O2 \-flto \-fuse\-linker\-plugin a.o b.o \-lfoo
7221 .Ve
7222 .Sp
7223 With the linker plugin enabled, the linker extracts the needed
7224 \&\s-1GIMPLE\s0 files from \fIlibfoo.a\fR and passes them on to the running \s-1GCC\s0
7225 to make them part of the aggregated \s-1GIMPLE\s0 image to be optimized.
7226 .Sp
7227 If you are not using a linker with plugin support and/or do not
7228 enable the linker plugin, then the objects inside \fIlibfoo.a\fR
7229 are extracted and linked as usual, but they do not participate
7230 in the \s-1LTO\s0 optimization process.
7231 .Sp
7232 Link-time optimizations do not require the presence of the whole program to
7233 operate.  If the program does not require any symbols to be exported, it is
7234 possible to combine \fB\-flto\fR and \fB\-fwhole\-program\fR to allow
7235 the interprocedural optimizers to use more aggressive assumptions which may
7236 lead to improved optimization opportunities.
7237 Use of \fB\-fwhole\-program\fR is not needed when linker plugin is
7238 active (see \fB\-fuse\-linker\-plugin\fR).
7239 .Sp
7240 The current implementation of \s-1LTO\s0 makes no
7241 attempt to generate bytecode that is portable between different
7242 types of hosts.  The bytecode files are versioned and there is a
7243 strict version check, so bytecode files generated in one version of
7244 \&\s-1GCC\s0 will not work with an older/newer version of \s-1GCC\s0.
7245 .Sp
7246 Link-time optimization does not work well with generation of debugging
7247 information.  Combining \fB\-flto\fR with
7248 \&\fB\-g\fR is currently experimental and expected to produce wrong
7249 results.
7250 .Sp
7251 If you specify the optional \fIn\fR, the optimization and code
7252 generation done at link time is executed in parallel using \fIn\fR
7253 parallel jobs by utilizing an installed \fBmake\fR program.  The
7254 environment variable \fB\s-1MAKE\s0\fR may be used to override the program
7255 used.  The default value for \fIn\fR is 1.
7256 .Sp
7257 You can also specify \fB\-flto=jobserver\fR to use \s-1GNU\s0 make's
7258 job server mode to determine the number of parallel jobs. This
7259 is useful when the Makefile calling \s-1GCC\s0 is already executing in parallel.
7260 You must prepend a \fB+\fR to the command recipe in the parent Makefile
7261 for this to work.  This option likely only works if \fB\s-1MAKE\s0\fR is
7262 \&\s-1GNU\s0 make.
7263 .Sp
7264 This option is disabled by default
7265 .IP "\fB\-flto\-partition=\fR\fIalg\fR" 4
7266 .IX Item "-flto-partition=alg"
7267 Specify the partitioning algorithm used by the link-time optimizer.
7268 The value is either \f(CW\*(C`1to1\*(C'\fR to specify a partitioning mirroring
7269 the original source files or \f(CW\*(C`balanced\*(C'\fR to specify partitioning
7270 into equally sized chunks (whenever possible).  Specifying \f(CW\*(C`none\*(C'\fR
7271 as an algorithm disables partitioning and streaming completely. The
7272 default value is \f(CW\*(C`balanced\*(C'\fR.
7273 .IP "\fB\-flto\-compression\-level=\fR\fIn\fR" 4
7274 .IX Item "-flto-compression-level=n"
7275 This option specifies the level of compression used for intermediate
7276 language written to \s-1LTO\s0 object files, and is only meaningful in
7277 conjunction with \s-1LTO\s0 mode (\fB\-flto\fR).  Valid
7278 values are 0 (no compression) to 9 (maximum compression).  Values
7279 outside this range are clamped to either 0 or 9.  If the option is not
7280 given, a default balanced compression setting is used.
7281 .IP "\fB\-flto\-report\fR" 4
7282 .IX Item "-flto-report"
7283 Prints a report with internal details on the workings of the link-time
7284 optimizer.  The contents of this report vary from version to version.
7285 It is meant to be useful to \s-1GCC\s0 developers when processing object
7286 files in \s-1LTO\s0 mode (via \fB\-flto\fR).
7287 .Sp
7288 Disabled by default.
7289 .IP "\fB\-fuse\-linker\-plugin\fR" 4
7290 .IX Item "-fuse-linker-plugin"
7291 Enables the use of a linker plugin during link-time optimization.  This
7292 option relies on plugin support in the linker, which is available in gold
7293 or in \s-1GNU\s0 ld 2.21 or newer.
7294 .Sp
7295 This option enables the extraction of object files with \s-1GIMPLE\s0 bytecode out
7296 of library archives. This improves the quality of optimization by exposing
7297 more code to the link-time optimizer.  This information specifies what
7298 symbols can be accessed externally (by non-LTO object or during dynamic
7299 linking).  Resulting code quality improvements on binaries (and shared
7300 libraries that use hidden visibility) are similar to \f(CW\*(C`\-fwhole\-program\*(C'\fR.
7301 See \fB\-flto\fR for a description of the effect of this flag and how to
7302 use it.
7303 .Sp
7304 This option is enabled by default when \s-1LTO\s0 support in \s-1GCC\s0 is enabled
7305 and \s-1GCC\s0 was configured for use with
7306 a linker supporting plugins (\s-1GNU\s0 ld 2.21 or newer or gold).
7307 .IP "\fB\-ffat\-lto\-objects\fR" 4
7308 .IX Item "-ffat-lto-objects"
7309 Fat \s-1LTO\s0 objects are object files that contain both the intermediate language
7310 and the object code. This makes them usable for both \s-1LTO\s0 linking and normal
7311 linking. This option is effective only when compiling with \fB\-flto\fR
7312 and is ignored at link time.
7313 .Sp
7314 \&\fB\-fno\-fat\-lto\-objects\fR improves compilation time over plain \s-1LTO\s0, but
7315 requires the complete toolchain to be aware of \s-1LTO\s0. It requires a linker with
7316 linker plugin support for basic functionality.  Additionally, nm, ar and ranlib
7317 need to support linker plugins to allow a full-featured build environment
7318 (capable of building static libraries etc).
7319 .Sp
7320 The default is \fB\-ffat\-lto\-objects\fR but this default is intended to
7321 change in future releases when linker plugin enabled environments become more
7322 common.
7323 .IP "\fB\-fcompare\-elim\fR" 4
7324 .IX Item "-fcompare-elim"
7325 After register allocation and post-register allocation instruction splitting,
7326 identify arithmetic instructions that compute processor flags similar to a
7327 comparison operation based on that arithmetic.  If possible, eliminate the
7328 explicit comparison operation.
7329 .Sp
7330 This pass only applies to certain targets that cannot explicitly represent
7331 the comparison operation before register allocation is complete.
7332 .Sp
7333 Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
7334 .IP "\fB\-fcprop\-registers\fR" 4
7335 .IX Item "-fcprop-registers"
7336 After register allocation and post-register allocation instruction splitting,
7337 we perform a copy-propagation pass to try to reduce scheduling dependencies
7338 and occasionally eliminate the copy.
7339 .Sp
7340 Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
7341 .IP "\fB\-fprofile\-correction\fR" 4
7342 .IX Item "-fprofile-correction"
7343 Profiles collected using an instrumented binary for multi-threaded programs may
7344 be inconsistent due to missed counter updates. When this option is specified,
7345 \&\s-1GCC\s0 will use heuristics to correct or smooth out such inconsistencies. By
7346 default, \s-1GCC\s0 will emit an error message when an inconsistent profile is detected.
7347 .IP "\fB\-fprofile\-dir=\fR\fIpath\fR" 4
7348 .IX Item "-fprofile-dir=path"
7349 Set the directory to search for the profile data files in to \fIpath\fR.
7350 This option affects only the profile data generated by
7351 \&\fB\-fprofile\-generate\fR, \fB\-ftest\-coverage\fR, \fB\-fprofile\-arcs\fR
7352 and used by \fB\-fprofile\-use\fR and \fB\-fbranch\-probabilities\fR
7353 and its related options.  Both absolute and relative paths can be used.
7354 By default, \s-1GCC\s0 will use the current directory as \fIpath\fR, thus the
7355 profile data file will appear in the same directory as the object file.
7356 .IP "\fB\-fprofile\-generate\fR" 4
7357 .IX Item "-fprofile-generate"
7358 .PD 0
7359 .IP "\fB\-fprofile\-generate=\fR\fIpath\fR" 4
7360 .IX Item "-fprofile-generate=path"
7361 .PD
7362 Enable options usually used for instrumenting application to produce
7363 profile useful for later recompilation with profile feedback based
7364 optimization.  You must use \fB\-fprofile\-generate\fR both when
7365 compiling and when linking your program.
7366 .Sp
7367 The following options are enabled: \f(CW\*(C`\-fprofile\-arcs\*(C'\fR, \f(CW\*(C`\-fprofile\-values\*(C'\fR, \f(CW\*(C`\-fvpt\*(C'\fR.
7368 .Sp
7369 If \fIpath\fR is specified, \s-1GCC\s0 will look at the \fIpath\fR to find
7370 the profile feedback data files. See \fB\-fprofile\-dir\fR.
7371 .IP "\fB\-fprofile\-use\fR" 4
7372 .IX Item "-fprofile-use"
7373 .PD 0
7374 .IP "\fB\-fprofile\-use=\fR\fIpath\fR" 4
7375 .IX Item "-fprofile-use=path"
7376 .PD
7377 Enable profile feedback directed optimizations, and optimizations
7378 generally profitable only with profile feedback available.
7379 .Sp
7380 The following options are enabled: \f(CW\*(C`\-fbranch\-probabilities\*(C'\fR, \f(CW\*(C`\-fvpt\*(C'\fR,
7381 \&\f(CW\*(C`\-funroll\-loops\*(C'\fR, \f(CW\*(C`\-fpeel\-loops\*(C'\fR, \f(CW\*(C`\-ftracer\*(C'\fR
7382 .Sp
7383 By default, \s-1GCC\s0 emits an error message if the feedback profiles do not
7384 match the source code.  This error can be turned into a warning by using
7385 \&\fB\-Wcoverage\-mismatch\fR.  Note this may result in poorly optimized
7386 code.
7387 .Sp
7388 If \fIpath\fR is specified, \s-1GCC\s0 will look at the \fIpath\fR to find
7389 the profile feedback data files. See \fB\-fprofile\-dir\fR.
7390 .PP
7391 The following options control compiler behavior regarding floating-point 
7392 arithmetic.  These options trade off between speed and
7393 correctness.  All must be specifically enabled.
7394 .IP "\fB\-ffloat\-store\fR" 4
7395 .IX Item "-ffloat-store"
7396 Do not store floating-point variables in registers, and inhibit other
7397 options that might change whether a floating-point value is taken from a
7398 register or memory.
7399 .Sp
7400 This option prevents undesirable excess precision on machines such as
7401 the 68000 where the floating registers (of the 68881) keep more
7402 precision than a \f(CW\*(C`double\*(C'\fR is supposed to have.  Similarly for the
7403 x86 architecture.  For most programs, the excess precision does only
7404 good, but a few programs rely on the precise definition of \s-1IEEE\s0 floating
7405 point.  Use \fB\-ffloat\-store\fR for such programs, after modifying
7406 them to store all pertinent intermediate computations into variables.
7407 .IP "\fB\-fexcess\-precision=\fR\fIstyle\fR" 4
7408 .IX Item "-fexcess-precision=style"
7409 This option allows further control over excess precision on machines
7410 where floating-point registers have more precision than the \s-1IEEE\s0
7411 \&\f(CW\*(C`float\*(C'\fR and \f(CW\*(C`double\*(C'\fR types and the processor does not
7412 support operations rounding to those types.  By default,
7413 \&\fB\-fexcess\-precision=fast\fR is in effect; this means that
7414 operations are carried out in the precision of the registers and that
7415 it is unpredictable when rounding to the types specified in the source
7416 code takes place.  When compiling C, if
7417 \&\fB\-fexcess\-precision=standard\fR is specified then excess
7418 precision will follow the rules specified in \s-1ISO\s0 C99; in particular,
7419 both casts and assignments cause values to be rounded to their
7420 semantic types (whereas \fB\-ffloat\-store\fR only affects
7421 assignments).  This option is enabled by default for C if a strict
7422 conformance option such as \fB\-std=c99\fR is used.
7423 .Sp
7424 \&\fB\-fexcess\-precision=standard\fR is not implemented for languages
7425 other than C, and has no effect if
7426 \&\fB\-funsafe\-math\-optimizations\fR or \fB\-ffast\-math\fR is
7427 specified.  On the x86, it also has no effect if \fB\-mfpmath=sse\fR
7428 or \fB\-mfpmath=sse+387\fR is specified; in the former case, \s-1IEEE\s0
7429 semantics apply without excess precision, and in the latter, rounding
7430 is unpredictable.
7431 .IP "\fB\-ffast\-math\fR" 4
7432 .IX Item "-ffast-math"
7433 Sets \fB\-fno\-math\-errno\fR, \fB\-funsafe\-math\-optimizations\fR,
7434 \&\fB\-ffinite\-math\-only\fR, \fB\-fno\-rounding\-math\fR,
7435 \&\fB\-fno\-signaling\-nans\fR and \fB\-fcx\-limited\-range\fR.
7436 .Sp
7437 This option causes the preprocessor macro \f(CW\*(C`_\|_FAST_MATH_\|_\*(C'\fR to be defined.
7438 .Sp
7439 This option is not turned on by any \fB\-O\fR option besides
7440 \&\fB\-Ofast\fR since it can result in incorrect output for programs
7441 that depend on an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications
7442 for math functions. It may, however, yield faster code for programs
7443 that do not require the guarantees of these specifications.
7444 .IP "\fB\-fno\-math\-errno\fR" 4
7445 .IX Item "-fno-math-errno"
7446 Do not set \s-1ERRNO\s0 after calling math functions that are executed
7447 with a single instruction, e.g., sqrt.  A program that relies on
7448 \&\s-1IEEE\s0 exceptions for math error handling may want to use this flag
7449 for speed while maintaining \s-1IEEE\s0 arithmetic compatibility.
7450 .Sp
7451 This option is not turned on by any \fB\-O\fR option since
7452 it can result in incorrect output for programs that depend on
7453 an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
7454 math functions. It may, however, yield faster code for programs
7455 that do not require the guarantees of these specifications.
7456 .Sp
7457 The default is \fB\-fmath\-errno\fR.
7458 .Sp
7459 On Darwin systems, the math library never sets \f(CW\*(C`errno\*(C'\fR.  There is
7460 therefore no reason for the compiler to consider the possibility that
7461 it might, and \fB\-fno\-math\-errno\fR is the default.
7462 .IP "\fB\-funsafe\-math\-optimizations\fR" 4
7463 .IX Item "-funsafe-math-optimizations"
7464 Allow optimizations for floating-point arithmetic that (a) assume
7465 that arguments and results are valid and (b) may violate \s-1IEEE\s0 or
7466 \&\s-1ANSI\s0 standards.  When used at link-time, it may include libraries
7467 or startup files that change the default \s-1FPU\s0 control word or other
7468 similar optimizations.
7469 .Sp
7470 This option is not turned on by any \fB\-O\fR option since
7471 it can result in incorrect output for programs that depend on
7472 an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
7473 math functions. It may, however, yield faster code for programs
7474 that do not require the guarantees of these specifications.
7475 Enables \fB\-fno\-signed\-zeros\fR, \fB\-fno\-trapping\-math\fR,
7476 \&\fB\-fassociative\-math\fR and \fB\-freciprocal\-math\fR.
7477 .Sp
7478 The default is \fB\-fno\-unsafe\-math\-optimizations\fR.
7479 .IP "\fB\-fassociative\-math\fR" 4
7480 .IX Item "-fassociative-math"
7481 Allow re-association of operands in series of floating-point operations.
7482 This violates the \s-1ISO\s0 C and \*(C+ language standard by possibly changing
7483 computation result.  \s-1NOTE:\s0 re-ordering may change the sign of zero as
7484 well as ignore NaNs and inhibit or create underflow or overflow (and
7485 thus cannot be used on code that relies on rounding behavior like
7486 \&\f(CW\*(C`(x + 2**52) \- 2**52\*(C'\fR.  May also reorder floating-point comparisons
7487 and thus may not be used when ordered comparisons are required.
7488 This option requires that both \fB\-fno\-signed\-zeros\fR and
7489 \&\fB\-fno\-trapping\-math\fR be in effect.  Moreover, it doesn't make
7490 much sense with \fB\-frounding\-math\fR. For Fortran the option
7491 is automatically enabled when both \fB\-fno\-signed\-zeros\fR and
7492 \&\fB\-fno\-trapping\-math\fR are in effect.
7493 .Sp
7494 The default is \fB\-fno\-associative\-math\fR.
7495 .IP "\fB\-freciprocal\-math\fR" 4
7496 .IX Item "-freciprocal-math"
7497 Allow the reciprocal of a value to be used instead of dividing by
7498 the value if this enables optimizations.  For example \f(CW\*(C`x / y\*(C'\fR
7499 can be replaced with \f(CW\*(C`x * (1/y)\*(C'\fR, which is useful if \f(CW\*(C`(1/y)\*(C'\fR
7500 is subject to common subexpression elimination.  Note that this loses
7501 precision and increases the number of flops operating on the value.
7502 .Sp
7503 The default is \fB\-fno\-reciprocal\-math\fR.
7504 .IP "\fB\-ffinite\-math\-only\fR" 4
7505 .IX Item "-ffinite-math-only"
7506 Allow optimizations for floating-point arithmetic that assume
7507 that arguments and results are not NaNs or +\-Infs.
7508 .Sp
7509 This option is not turned on by any \fB\-O\fR option since
7510 it can result in incorrect output for programs that depend on
7511 an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
7512 math functions. It may, however, yield faster code for programs
7513 that do not require the guarantees of these specifications.
7514 .Sp
7515 The default is \fB\-fno\-finite\-math\-only\fR.
7516 .IP "\fB\-fno\-signed\-zeros\fR" 4
7517 .IX Item "-fno-signed-zeros"
7518 Allow optimizations for floating-point arithmetic that ignore the
7519 signedness of zero.  \s-1IEEE\s0 arithmetic specifies the behavior of
7520 distinct +0.0 and \-0.0 values, which then prohibits simplification
7521 of expressions such as x+0.0 or 0.0*x (even with \fB\-ffinite\-math\-only\fR).
7522 This option implies that the sign of a zero result isn't significant.
7523 .Sp
7524 The default is \fB\-fsigned\-zeros\fR.
7525 .IP "\fB\-fno\-trapping\-math\fR" 4
7526 .IX Item "-fno-trapping-math"
7527 Compile code assuming that floating-point operations cannot generate
7528 user-visible traps.  These traps include division by zero, overflow,
7529 underflow, inexact result and invalid operation.  This option requires
7530 that \fB\-fno\-signaling\-nans\fR be in effect.  Setting this option may
7531 allow faster code if one relies on \*(L"non-stop\*(R" \s-1IEEE\s0 arithmetic, for example.
7532 .Sp
7533 This option should never be turned on by any \fB\-O\fR option since
7534 it can result in incorrect output for programs that depend on
7535 an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
7536 math functions.
7537 .Sp
7538 The default is \fB\-ftrapping\-math\fR.
7539 .IP "\fB\-frounding\-math\fR" 4
7540 .IX Item "-frounding-math"
7541 Disable transformations and optimizations that assume default floating-point
7542 rounding behavior.  This is round-to-zero for all floating point
7543 to integer conversions, and round-to-nearest for all other arithmetic
7544 truncations.  This option should be specified for programs that change
7545 the \s-1FP\s0 rounding mode dynamically, or that may be executed with a
7546 non-default rounding mode.  This option disables constant folding of
7547 floating-point expressions at compile time (which may be affected by
7548 rounding mode) and arithmetic transformations that are unsafe in the
7549 presence of sign-dependent rounding modes.
7550 .Sp
7551 The default is \fB\-fno\-rounding\-math\fR.
7552 .Sp
7553 This option is experimental and does not currently guarantee to
7554 disable all \s-1GCC\s0 optimizations that are affected by rounding mode.
7555 Future versions of \s-1GCC\s0 may provide finer control of this setting
7556 using C99's \f(CW\*(C`FENV_ACCESS\*(C'\fR pragma.  This command-line option
7557 will be used to specify the default state for \f(CW\*(C`FENV_ACCESS\*(C'\fR.
7558 .IP "\fB\-fsignaling\-nans\fR" 4
7559 .IX Item "-fsignaling-nans"
7560 Compile code assuming that \s-1IEEE\s0 signaling NaNs may generate user-visible
7561 traps during floating-point operations.  Setting this option disables
7562 optimizations that may change the number of exceptions visible with
7563 signaling NaNs.  This option implies \fB\-ftrapping\-math\fR.
7564 .Sp
7565 This option causes the preprocessor macro \f(CW\*(C`_\|_SUPPORT_SNAN_\|_\*(C'\fR to
7566 be defined.
7567 .Sp
7568 The default is \fB\-fno\-signaling\-nans\fR.
7569 .Sp
7570 This option is experimental and does not currently guarantee to
7571 disable all \s-1GCC\s0 optimizations that affect signaling NaN behavior.
7572 .IP "\fB\-fsingle\-precision\-constant\fR" 4
7573 .IX Item "-fsingle-precision-constant"
7574 Treat floating-point constants as single precision instead of
7575 implicitly converting them to double-precision constants.
7576 .IP "\fB\-fcx\-limited\-range\fR" 4
7577 .IX Item "-fcx-limited-range"
7578 When enabled, this option states that a range reduction step is not
7579 needed when performing complex division.  Also, there is no checking
7580 whether the result of a complex multiplication or division is \f(CW\*(C`NaN
7581 + I*NaN\*(C'\fR, with an attempt to rescue the situation in that case.  The
7582 default is \fB\-fno\-cx\-limited\-range\fR, but is enabled by
7583 \&\fB\-ffast\-math\fR.
7584 .Sp
7585 This option controls the default setting of the \s-1ISO\s0 C99
7586 \&\f(CW\*(C`CX_LIMITED_RANGE\*(C'\fR pragma.  Nevertheless, the option applies to
7587 all languages.
7588 .IP "\fB\-fcx\-fortran\-rules\fR" 4
7589 .IX Item "-fcx-fortran-rules"
7590 Complex multiplication and division follow Fortran rules.  Range
7591 reduction is done as part of complex division, but there is no checking
7592 whether the result of a complex multiplication or division is \f(CW\*(C`NaN
7593 + I*NaN\*(C'\fR, with an attempt to rescue the situation in that case.
7594 .Sp
7595 The default is \fB\-fno\-cx\-fortran\-rules\fR.
7596 .PP
7597 The following options control optimizations that may improve
7598 performance, but are not enabled by any \fB\-O\fR options.  This
7599 section includes experimental options that may produce broken code.
7600 .IP "\fB\-fbranch\-probabilities\fR" 4
7601 .IX Item "-fbranch-probabilities"
7602 After running a program compiled with \fB\-fprofile\-arcs\fR, you can compile it a second time using
7603 \&\fB\-fbranch\-probabilities\fR, to improve optimizations based on
7604 the number of times each branch was taken.  When the program
7605 compiled with \fB\-fprofile\-arcs\fR exits it saves arc execution
7606 counts to a file called \fI\fIsourcename\fI.gcda\fR for each source
7607 file.  The information in this data file is very dependent on the
7608 structure of the generated code, so you must use the same source code
7609 and the same optimization options for both compilations.
7610 .Sp
7611 With \fB\-fbranch\-probabilities\fR, \s-1GCC\s0 puts a
7612 \&\fB\s-1REG_BR_PROB\s0\fR note on each \fB\s-1JUMP_INSN\s0\fR and \fB\s-1CALL_INSN\s0\fR.
7613 These can be used to improve optimization.  Currently, they are only
7614 used in one place: in \fIreorg.c\fR, instead of guessing which path a
7615 branch is most likely to take, the \fB\s-1REG_BR_PROB\s0\fR values are used to
7616 exactly determine which path is taken more often.
7617 .IP "\fB\-fprofile\-values\fR" 4
7618 .IX Item "-fprofile-values"
7619 If combined with \fB\-fprofile\-arcs\fR, it adds code so that some
7620 data about values of expressions in the program is gathered.
7621 .Sp
7622 With \fB\-fbranch\-probabilities\fR, it reads back the data gathered
7623 from profiling values of expressions for usage in optimizations.
7624 .Sp
7625 Enabled with \fB\-fprofile\-generate\fR and \fB\-fprofile\-use\fR.
7626 .IP "\fB\-fvpt\fR" 4
7627 .IX Item "-fvpt"
7628 If combined with \fB\-fprofile\-arcs\fR, it instructs the compiler to add
7629 a code to gather information about values of expressions.
7630 .Sp
7631 With \fB\-fbranch\-probabilities\fR, it reads back the data gathered
7632 and actually performs the optimizations based on them.
7633 Currently the optimizations include specialization of division operation
7634 using the knowledge about the value of the denominator.
7635 .IP "\fB\-frename\-registers\fR" 4
7636 .IX Item "-frename-registers"
7637 Attempt to avoid false dependencies in scheduled code by making use
7638 of registers left over after register allocation.  This optimization
7639 will most benefit processors with lots of registers.  Depending on the
7640 debug information format adopted by the target, however, it can
7641 make debugging impossible, since variables will no longer stay in
7642 a \*(L"home register\*(R".
7643 .Sp
7644 Enabled by default with \fB\-funroll\-loops\fR and \fB\-fpeel\-loops\fR.
7645 .IP "\fB\-ftracer\fR" 4
7646 .IX Item "-ftracer"
7647 Perform tail duplication to enlarge superblock size.  This transformation
7648 simplifies the control flow of the function allowing other optimizations to do
7649 better job.
7650 .Sp
7651 Enabled with \fB\-fprofile\-use\fR.
7652 .IP "\fB\-funroll\-loops\fR" 4
7653 .IX Item "-funroll-loops"
7654 Unroll loops whose number of iterations can be determined at compile time or
7655 upon entry to the loop.  \fB\-funroll\-loops\fR implies
7656 \&\fB\-frerun\-cse\-after\-loop\fR, \fB\-fweb\fR and \fB\-frename\-registers\fR.
7657 It also turns on complete loop peeling (i.e. complete removal of loops with
7658 small constant number of iterations).  This option makes code larger, and may
7659 or may not make it run faster.
7660 .Sp
7661 Enabled with \fB\-fprofile\-use\fR.
7662 .IP "\fB\-funroll\-all\-loops\fR" 4
7663 .IX Item "-funroll-all-loops"
7664 Unroll all loops, even if their number of iterations is uncertain when
7665 the loop is entered.  This usually makes programs run more slowly.
7666 \&\fB\-funroll\-all\-loops\fR implies the same options as
7667 \&\fB\-funroll\-loops\fR.
7668 .IP "\fB\-fpeel\-loops\fR" 4
7669 .IX Item "-fpeel-loops"
7670 Peels loops for which there is enough information that they do not
7671 roll much (from profile feedback).  It also turns on complete loop peeling
7672 (i.e. complete removal of loops with small constant number of iterations).
7673 .Sp
7674 Enabled with \fB\-fprofile\-use\fR.
7675 .IP "\fB\-fmove\-loop\-invariants\fR" 4
7676 .IX Item "-fmove-loop-invariants"
7677 Enables the loop invariant motion pass in the \s-1RTL\s0 loop optimizer.  Enabled
7678 at level \fB\-O1\fR
7679 .IP "\fB\-funswitch\-loops\fR" 4
7680 .IX Item "-funswitch-loops"
7681 Move branches with loop invariant conditions out of the loop, with duplicates
7682 of the loop on both branches (modified according to result of the condition).
7683 .IP "\fB\-ffunction\-sections\fR" 4
7684 .IX Item "-ffunction-sections"
7685 .PD 0
7686 .IP "\fB\-fdata\-sections\fR" 4
7687 .IX Item "-fdata-sections"
7688 .PD
7689 Place each function or data item into its own section in the output
7690 file if the target supports arbitrary sections.  The name of the
7691 function or the name of the data item determines the section's name
7692 in the output file.
7693 .Sp
7694 Use these options on systems where the linker can perform optimizations
7695 to improve locality of reference in the instruction space.  Most systems
7696 using the \s-1ELF\s0 object format and \s-1SPARC\s0 processors running Solaris 2 have
7697 linkers with such optimizations.  \s-1AIX\s0 may have these optimizations in
7698 the future.
7699 .Sp
7700 Only use these options when there are significant benefits from doing
7701 so.  When you specify these options, the assembler and linker will
7702 create larger object and executable files and will also be slower.
7703 You will not be able to use \f(CW\*(C`gprof\*(C'\fR on all systems if you
7704 specify this option and you may have problems with debugging if
7705 you specify both this option and \fB\-g\fR.
7706 .IP "\fB\-fbranch\-target\-load\-optimize\fR" 4
7707 .IX Item "-fbranch-target-load-optimize"
7708 Perform branch target register load optimization before prologue / epilogue
7709 threading.
7710 The use of target registers can typically be exposed only during reload,
7711 thus hoisting loads out of loops and doing inter-block scheduling needs
7712 a separate optimization pass.
7713 .IP "\fB\-fbranch\-target\-load\-optimize2\fR" 4
7714 .IX Item "-fbranch-target-load-optimize2"
7715 Perform branch target register load optimization after prologue / epilogue
7716 threading.
7717 .IP "\fB\-fbtr\-bb\-exclusive\fR" 4
7718 .IX Item "-fbtr-bb-exclusive"
7719 When performing branch target register load optimization, don't reuse
7720 branch target registers in within any basic block.
7721 .IP "\fB\-fstack\-protector\fR" 4
7722 .IX Item "-fstack-protector"
7723 Emit extra code to check for buffer overflows, such as stack smashing
7724 attacks.  This is done by adding a guard variable to functions with
7725 vulnerable objects.  This includes functions that call alloca, and
7726 functions with buffers larger than 8 bytes.  The guards are initialized
7727 when a function is entered and then checked when the function exits.
7728 If a guard check fails, an error message is printed and the program exits.
7729 .IP "\fB\-fstack\-protector\-all\fR" 4
7730 .IX Item "-fstack-protector-all"
7731 Like \fB\-fstack\-protector\fR except that all functions are protected.
7732 .IP "\fB\-fsection\-anchors\fR" 4
7733 .IX Item "-fsection-anchors"
7734 Try to reduce the number of symbolic address calculations by using
7735 shared \*(L"anchor\*(R" symbols to address nearby objects.  This transformation
7736 can help to reduce the number of \s-1GOT\s0 entries and \s-1GOT\s0 accesses on some
7737 targets.
7738 .Sp
7739 For example, the implementation of the following function \f(CW\*(C`foo\*(C'\fR:
7740 .Sp
7741 .Vb 2
7742 \&        static int a, b, c;
7743 \&        int foo (void) { return a + b + c; }
7744 .Ve
7745 .Sp
7746 would usually calculate the addresses of all three variables, but if you
7747 compile it with \fB\-fsection\-anchors\fR, it will access the variables
7748 from a common anchor point instead.  The effect is similar to the
7749 following pseudocode (which isn't valid C):
7750 .Sp
7751 .Vb 5
7752 \&        int foo (void)
7753 \&        {
7754 \&          register int *xr = &x;
7755 \&          return xr[&a \- &x] + xr[&b \- &x] + xr[&c \- &x];
7756 \&        }
7757 .Ve
7758 .Sp
7759 Not all targets support this option.
7760 .IP "\fB\-\-param\fR \fIname\fR\fB=\fR\fIvalue\fR" 4
7761 .IX Item "--param name=value"
7762 In some places, \s-1GCC\s0 uses various constants to control the amount of
7763 optimization that is done.  For example, \s-1GCC\s0 will not inline functions
7764 that contain more than a certain number of instructions.  You can
7765 control some of these constants on the command line using the
7766 \&\fB\-\-param\fR option.
7767 .Sp
7768 The names of specific parameters, and the meaning of the values, are
7769 tied to the internals of the compiler, and are subject to change
7770 without notice in future releases.
7771 .Sp
7772 In each case, the \fIvalue\fR is an integer.  The allowable choices for
7773 \&\fIname\fR are given in the following table:
7774 .RS 4
7775 .IP "\fBpredictable-branch-outcome\fR" 4
7776 .IX Item "predictable-branch-outcome"
7777 When branch is predicted to be taken with probability lower than this threshold
7778 (in percent), then it is considered well predictable. The default is 10.
7779 .IP "\fBmax-crossjump-edges\fR" 4
7780 .IX Item "max-crossjump-edges"
7781 The maximum number of incoming edges to consider for crossjumping.
7782 The algorithm used by \fB\-fcrossjumping\fR is O(N^2) in
7783 the number of edges incoming to each block.  Increasing values mean
7784 more aggressive optimization, making the compilation time increase with
7785 probably small improvement in executable size.
7786 .IP "\fBmin-crossjump-insns\fR" 4
7787 .IX Item "min-crossjump-insns"
7788 The minimum number of instructions that must be matched at the end
7789 of two blocks before crossjumping will be performed on them.  This
7790 value is ignored in the case where all instructions in the block being
7791 crossjumped from are matched.  The default value is 5.
7792 .IP "\fBmax-grow-copy-bb-insns\fR" 4
7793 .IX Item "max-grow-copy-bb-insns"
7794 The maximum code size expansion factor when copying basic blocks
7795 instead of jumping.  The expansion is relative to a jump instruction.
7796 The default value is 8.
7797 .IP "\fBmax-goto-duplication-insns\fR" 4
7798 .IX Item "max-goto-duplication-insns"
7799 The maximum number of instructions to duplicate to a block that jumps
7800 to a computed goto.  To avoid O(N^2) behavior in a number of
7801 passes, \s-1GCC\s0 factors computed gotos early in the compilation process,
7802 and unfactors them as late as possible.  Only computed jumps at the
7803 end of a basic blocks with no more than max-goto-duplication-insns are
7804 unfactored.  The default value is 8.
7805 .IP "\fBmax-delay-slot-insn-search\fR" 4
7806 .IX Item "max-delay-slot-insn-search"
7807 The maximum number of instructions to consider when looking for an
7808 instruction to fill a delay slot.  If more than this arbitrary number of
7809 instructions is searched, the time savings from filling the delay slot
7810 will be minimal so stop searching.  Increasing values mean more
7811 aggressive optimization, making the compilation time increase with probably
7812 small improvement in execution time.
7813 .IP "\fBmax-delay-slot-live-search\fR" 4
7814 .IX Item "max-delay-slot-live-search"
7815 When trying to fill delay slots, the maximum number of instructions to
7816 consider when searching for a block with valid live register
7817 information.  Increasing this arbitrarily chosen value means more
7818 aggressive optimization, increasing the compilation time.  This parameter
7819 should be removed when the delay slot code is rewritten to maintain the
7820 control-flow graph.
7821 .IP "\fBmax-gcse-memory\fR" 4
7822 .IX Item "max-gcse-memory"
7823 The approximate maximum amount of memory that will be allocated in
7824 order to perform the global common subexpression elimination
7825 optimization.  If more memory than specified is required, the
7826 optimization will not be done.
7827 .IP "\fBmax-gcse-insertion-ratio\fR" 4
7828 .IX Item "max-gcse-insertion-ratio"
7829 If the ratio of expression insertions to deletions is larger than this value
7830 for any expression, then \s-1RTL\s0 \s-1PRE\s0 will insert or remove the expression and thus
7831 leave partially redundant computations in the instruction stream.  The default value is 20.
7832 .IP "\fBmax-pending-list-length\fR" 4
7833 .IX Item "max-pending-list-length"
7834 The maximum number of pending dependencies scheduling will allow
7835 before flushing the current state and starting over.  Large functions
7836 with few branches or calls can create excessively large lists which
7837 needlessly consume memory and resources.
7838 .IP "\fBmax-modulo-backtrack-attempts\fR" 4
7839 .IX Item "max-modulo-backtrack-attempts"
7840 The maximum number of backtrack attempts the scheduler should make
7841 when modulo scheduling a loop.  Larger values can exponentially increase
7842 compilation time.
7843 .IP "\fBmax-inline-insns-single\fR" 4
7844 .IX Item "max-inline-insns-single"
7845 Several parameters control the tree inliner used in gcc.
7846 This number sets the maximum number of instructions (counted in \s-1GCC\s0's
7847 internal representation) in a single function that the tree inliner
7848 will consider for inlining.  This only affects functions declared
7849 inline and methods implemented in a class declaration (\*(C+).
7850 The default value is 400.
7851 .IP "\fBmax-inline-insns-auto\fR" 4
7852 .IX Item "max-inline-insns-auto"
7853 When you use \fB\-finline\-functions\fR (included in \fB\-O3\fR),
7854 a lot of functions that would otherwise not be considered for inlining
7855 by the compiler will be investigated.  To those functions, a different
7856 (more restrictive) limit compared to functions declared inline can
7857 be applied.
7858 The default value is 40.
7859 .IP "\fBlarge-function-insns\fR" 4
7860 .IX Item "large-function-insns"
7861 The limit specifying really large functions.  For functions larger than this
7862 limit after inlining, inlining is constrained by
7863 \&\fB\-\-param large-function-growth\fR.  This parameter is useful primarily
7864 to avoid extreme compilation time caused by non-linear algorithms used by the
7865 back end.
7866 The default value is 2700.
7867 .IP "\fBlarge-function-growth\fR" 4
7868 .IX Item "large-function-growth"
7869 Specifies maximal growth of large function caused by inlining in percents.
7870 The default value is 100 which limits large function growth to 2.0 times
7871 the original size.
7872 .IP "\fBlarge-unit-insns\fR" 4
7873 .IX Item "large-unit-insns"
7874 The limit specifying large translation unit.  Growth caused by inlining of
7875 units larger than this limit is limited by \fB\-\-param inline-unit-growth\fR.
7876 For small units this might be too tight (consider unit consisting of function A
7877 that is inline and B that just calls A three time.  If B is small relative to
7878 A, the growth of unit is 300\e% and yet such inlining is very sane.  For very
7879 large units consisting of small inlineable functions however the overall unit
7880 growth limit is needed to avoid exponential explosion of code size.  Thus for
7881 smaller units, the size is increased to \fB\-\-param large-unit-insns\fR
7882 before applying \fB\-\-param inline-unit-growth\fR.  The default is 10000
7883 .IP "\fBinline-unit-growth\fR" 4
7884 .IX Item "inline-unit-growth"
7885 Specifies maximal overall growth of the compilation unit caused by inlining.
7886 The default value is 30 which limits unit growth to 1.3 times the original
7887 size.
7888 .IP "\fBipcp-unit-growth\fR" 4
7889 .IX Item "ipcp-unit-growth"
7890 Specifies maximal overall growth of the compilation unit caused by
7891 interprocedural constant propagation.  The default value is 10 which limits
7892 unit growth to 1.1 times the original size.
7893 .IP "\fBlarge-stack-frame\fR" 4
7894 .IX Item "large-stack-frame"
7895 The limit specifying large stack frames.  While inlining the algorithm is trying
7896 to not grow past this limit too much.  Default value is 256 bytes.
7897 .IP "\fBlarge-stack-frame-growth\fR" 4
7898 .IX Item "large-stack-frame-growth"
7899 Specifies maximal growth of large stack frames caused by inlining in percents.
7900 The default value is 1000 which limits large stack frame growth to 11 times
7901 the original size.
7902 .IP "\fBmax-inline-insns-recursive\fR" 4
7903 .IX Item "max-inline-insns-recursive"
7904 .PD 0
7905 .IP "\fBmax-inline-insns-recursive-auto\fR" 4
7906 .IX Item "max-inline-insns-recursive-auto"
7907 .PD
7908 Specifies maximum number of instructions out-of-line copy of self recursive inline
7909 function can grow into by performing recursive inlining.
7910 .Sp
7911 For functions declared inline \fB\-\-param max-inline-insns-recursive\fR is
7912 taken into account.  For function not declared inline, recursive inlining
7913 happens only when \fB\-finline\-functions\fR (included in \fB\-O3\fR) is
7914 enabled and \fB\-\-param max-inline-insns-recursive-auto\fR is used.  The
7915 default value is 450.
7916 .IP "\fBmax-inline-recursive-depth\fR" 4
7917 .IX Item "max-inline-recursive-depth"
7918 .PD 0
7919 .IP "\fBmax-inline-recursive-depth-auto\fR" 4
7920 .IX Item "max-inline-recursive-depth-auto"
7921 .PD
7922 Specifies maximum recursion depth used by the recursive inlining.
7923 .Sp
7924 For functions declared inline \fB\-\-param max-inline-recursive-depth\fR is
7925 taken into account.  For function not declared inline, recursive inlining
7926 happens only when \fB\-finline\-functions\fR (included in \fB\-O3\fR) is
7927 enabled and \fB\-\-param max-inline-recursive-depth-auto\fR is used.  The
7928 default value is 8.
7929 .IP "\fBmin-inline-recursive-probability\fR" 4
7930 .IX Item "min-inline-recursive-probability"
7931 Recursive inlining is profitable only for function having deep recursion
7932 in average and can hurt for function having little recursion depth by
7933 increasing the prologue size or complexity of function body to other
7934 optimizers.
7935 .Sp
7936 When profile feedback is available (see \fB\-fprofile\-generate\fR) the actual
7937 recursion depth can be guessed from probability that function will recurse via
7938 given call expression.  This parameter limits inlining only to call expression
7939 whose probability exceeds given threshold (in percents).  The default value is
7940 10.
7941 .IP "\fBearly-inlining-insns\fR" 4
7942 .IX Item "early-inlining-insns"
7943 Specify growth that early inliner can make.  In effect it increases amount of
7944 inlining for code having large abstraction penalty.  The default value is 10.
7945 .IP "\fBmax-early-inliner-iterations\fR" 4
7946 .IX Item "max-early-inliner-iterations"
7947 .PD 0
7948 .IP "\fBmax-early-inliner-iterations\fR" 4
7949 .IX Item "max-early-inliner-iterations"
7950 .PD
7951 Limit of iterations of early inliner.  This basically bounds number of nested
7952 indirect calls early inliner can resolve.  Deeper chains are still handled by
7953 late inlining.
7954 .IP "\fBcomdat-sharing-probability\fR" 4
7955 .IX Item "comdat-sharing-probability"
7956 .PD 0
7957 .IP "\fBcomdat-sharing-probability\fR" 4
7958 .IX Item "comdat-sharing-probability"
7959 .PD
7960 Probability (in percent) that \*(C+ inline function with comdat visibility
7961 will be shared across multiple compilation units.  The default value is 20.
7962 .IP "\fBmin-vect-loop-bound\fR" 4
7963 .IX Item "min-vect-loop-bound"
7964 The minimum number of iterations under which a loop will not get vectorized
7965 when \fB\-ftree\-vectorize\fR is used.  The number of iterations after
7966 vectorization needs to be greater than the value specified by this option
7967 to allow vectorization.  The default value is 0.
7968 .IP "\fBgcse-cost-distance-ratio\fR" 4
7969 .IX Item "gcse-cost-distance-ratio"
7970 Scaling factor in calculation of maximum distance an expression
7971 can be moved by \s-1GCSE\s0 optimizations.  This is currently supported only in the
7972 code hoisting pass.  The bigger the ratio, the more aggressive code hoisting
7973 will be with simple expressions, i.e., the expressions that have cost
7974 less than \fBgcse-unrestricted-cost\fR.  Specifying 0 will disable
7975 hoisting of simple expressions.  The default value is 10.
7976 .IP "\fBgcse-unrestricted-cost\fR" 4
7977 .IX Item "gcse-unrestricted-cost"
7978 Cost, roughly measured as the cost of a single typical machine
7979 instruction, at which \s-1GCSE\s0 optimizations will not constrain
7980 the distance an expression can travel.  This is currently
7981 supported only in the code hoisting pass.  The lesser the cost,
7982 the more aggressive code hoisting will be.  Specifying 0 will
7983 allow all expressions to travel unrestricted distances.
7984 The default value is 3.
7985 .IP "\fBmax-hoist-depth\fR" 4
7986 .IX Item "max-hoist-depth"
7987 The depth of search in the dominator tree for expressions to hoist.
7988 This is used to avoid quadratic behavior in hoisting algorithm.
7989 The value of 0 will avoid limiting the search, but may slow down compilation
7990 of huge functions.  The default value is 30.
7991 .IP "\fBmax-tail-merge-comparisons\fR" 4
7992 .IX Item "max-tail-merge-comparisons"
7993 The maximum amount of similar bbs to compare a bb with.  This is used to
7994 avoid quadratic behavior in tree tail merging.  The default value is 10.
7995 .IP "\fBmax-tail-merge-iterations\fR" 4
7996 .IX Item "max-tail-merge-iterations"
7997 The maximum amount of iterations of the pass over the function.  This is used to
7998 limit compilation time in tree tail merging.  The default value is 2.
7999 .IP "\fBmax-unrolled-insns\fR" 4
8000 .IX Item "max-unrolled-insns"
8001 The maximum number of instructions that a loop should have if that loop
8002 is unrolled, and if the loop is unrolled, it determines how many times
8003 the loop code is unrolled.
8004 .IP "\fBmax-average-unrolled-insns\fR" 4
8005 .IX Item "max-average-unrolled-insns"
8006 The maximum number of instructions biased by probabilities of their execution
8007 that a loop should have if that loop is unrolled, and if the loop is unrolled,
8008 it determines how many times the loop code is unrolled.
8009 .IP "\fBmax-unroll-times\fR" 4
8010 .IX Item "max-unroll-times"
8011 The maximum number of unrollings of a single loop.
8012 .IP "\fBmax-peeled-insns\fR" 4
8013 .IX Item "max-peeled-insns"
8014 The maximum number of instructions that a loop should have if that loop
8015 is peeled, and if the loop is peeled, it determines how many times
8016 the loop code is peeled.
8017 .IP "\fBmax-peel-times\fR" 4
8018 .IX Item "max-peel-times"
8019 The maximum number of peelings of a single loop.
8020 .IP "\fBmax-completely-peeled-insns\fR" 4
8021 .IX Item "max-completely-peeled-insns"
8022 The maximum number of insns of a completely peeled loop.
8023 .IP "\fBmax-completely-peel-times\fR" 4
8024 .IX Item "max-completely-peel-times"
8025 The maximum number of iterations of a loop to be suitable for complete peeling.
8026 .IP "\fBmax-completely-peel-loop-nest-depth\fR" 4
8027 .IX Item "max-completely-peel-loop-nest-depth"
8028 The maximum depth of a loop nest suitable for complete peeling.
8029 .IP "\fBmax-unswitch-insns\fR" 4
8030 .IX Item "max-unswitch-insns"
8031 The maximum number of insns of an unswitched loop.
8032 .IP "\fBmax-unswitch-level\fR" 4
8033 .IX Item "max-unswitch-level"
8034 The maximum number of branches unswitched in a single loop.
8035 .IP "\fBlim-expensive\fR" 4
8036 .IX Item "lim-expensive"
8037 The minimum cost of an expensive expression in the loop invariant motion.
8038 .IP "\fBiv-consider-all-candidates-bound\fR" 4
8039 .IX Item "iv-consider-all-candidates-bound"
8040 Bound on number of candidates for induction variables below that
8041 all candidates are considered for each use in induction variable
8042 optimizations.  Only the most relevant candidates are considered
8043 if there are more candidates, to avoid quadratic time complexity.
8044 .IP "\fBiv-max-considered-uses\fR" 4
8045 .IX Item "iv-max-considered-uses"
8046 The induction variable optimizations give up on loops that contain more
8047 induction variable uses.
8048 .IP "\fBiv-always-prune-cand-set-bound\fR" 4
8049 .IX Item "iv-always-prune-cand-set-bound"
8050 If number of candidates in the set is smaller than this value,
8051 we always try to remove unnecessary ivs from the set during its
8052 optimization when a new iv is added to the set.
8053 .IP "\fBscev-max-expr-size\fR" 4
8054 .IX Item "scev-max-expr-size"
8055 Bound on size of expressions used in the scalar evolutions analyzer.
8056 Large expressions slow the analyzer.
8057 .IP "\fBscev-max-expr-complexity\fR" 4
8058 .IX Item "scev-max-expr-complexity"
8059 Bound on the complexity of the expressions in the scalar evolutions analyzer.
8060 Complex expressions slow the analyzer.
8061 .IP "\fBomega-max-vars\fR" 4
8062 .IX Item "omega-max-vars"
8063 The maximum number of variables in an Omega constraint system.
8064 The default value is 128.
8065 .IP "\fBomega-max-geqs\fR" 4
8066 .IX Item "omega-max-geqs"
8067 The maximum number of inequalities in an Omega constraint system.
8068 The default value is 256.
8069 .IP "\fBomega-max-eqs\fR" 4
8070 .IX Item "omega-max-eqs"
8071 The maximum number of equalities in an Omega constraint system.
8072 The default value is 128.
8073 .IP "\fBomega-max-wild-cards\fR" 4
8074 .IX Item "omega-max-wild-cards"
8075 The maximum number of wildcard variables that the Omega solver will
8076 be able to insert.  The default value is 18.
8077 .IP "\fBomega-hash-table-size\fR" 4
8078 .IX Item "omega-hash-table-size"
8079 The size of the hash table in the Omega solver.  The default value is
8080 550.
8081 .IP "\fBomega-max-keys\fR" 4
8082 .IX Item "omega-max-keys"
8083 The maximal number of keys used by the Omega solver.  The default
8084 value is 500.
8085 .IP "\fBomega-eliminate-redundant-constraints\fR" 4
8086 .IX Item "omega-eliminate-redundant-constraints"
8087 When set to 1, use expensive methods to eliminate all redundant
8088 constraints.  The default value is 0.
8089 .IP "\fBvect-max-version-for-alignment-checks\fR" 4
8090 .IX Item "vect-max-version-for-alignment-checks"
8091 The maximum number of run-time checks that can be performed when
8092 doing loop versioning for alignment in the vectorizer.  See option
8093 ftree-vect-loop-version for more information.
8094 .IP "\fBvect-max-version-for-alias-checks\fR" 4
8095 .IX Item "vect-max-version-for-alias-checks"
8096 The maximum number of run-time checks that can be performed when
8097 doing loop versioning for alias in the vectorizer.  See option
8098 ftree-vect-loop-version for more information.
8099 .IP "\fBmax-iterations-to-track\fR" 4
8100 .IX Item "max-iterations-to-track"
8101 The maximum number of iterations of a loop the brute force algorithm
8102 for analysis of # of iterations of the loop tries to evaluate.
8103 .IP "\fBhot-bb-count-fraction\fR" 4
8104 .IX Item "hot-bb-count-fraction"
8105 Select fraction of the maximal count of repetitions of basic block in program
8106 given basic block needs to have to be considered hot.
8107 .IP "\fBhot-bb-frequency-fraction\fR" 4
8108 .IX Item "hot-bb-frequency-fraction"
8109 Select fraction of the entry block frequency of executions of basic block in
8110 function given basic block needs to have to be considered hot.
8111 .IP "\fBmax-predicted-iterations\fR" 4
8112 .IX Item "max-predicted-iterations"
8113 The maximum number of loop iterations we predict statically.  This is useful
8114 in cases where function contain single loop with known bound and other loop
8115 with unknown.  We predict the known number of iterations correctly, while
8116 the unknown number of iterations average to roughly 10.  This means that the
8117 loop without bounds would appear artificially cold relative to the other one.
8118 .IP "\fBalign-threshold\fR" 4
8119 .IX Item "align-threshold"
8120 Select fraction of the maximal frequency of executions of basic block in
8121 function given basic block will get aligned.
8122 .IP "\fBalign-loop-iterations\fR" 4
8123 .IX Item "align-loop-iterations"
8124 A loop expected to iterate at lest the selected number of iterations will get
8125 aligned.
8126 .IP "\fBtracer-dynamic-coverage\fR" 4
8127 .IX Item "tracer-dynamic-coverage"
8128 .PD 0
8129 .IP "\fBtracer-dynamic-coverage-feedback\fR" 4
8130 .IX Item "tracer-dynamic-coverage-feedback"
8131 .PD
8132 This value is used to limit superblock formation once the given percentage of
8133 executed instructions is covered.  This limits unnecessary code size
8134 expansion.
8135 .Sp
8136 The \fBtracer-dynamic-coverage-feedback\fR is used only when profile
8137 feedback is available.  The real profiles (as opposed to statically estimated
8138 ones) are much less balanced allowing the threshold to be larger value.
8139 .IP "\fBtracer-max-code-growth\fR" 4
8140 .IX Item "tracer-max-code-growth"
8141 Stop tail duplication once code growth has reached given percentage.  This is
8142 rather hokey argument, as most of the duplicates will be eliminated later in
8143 cross jumping, so it may be set to much higher values than is the desired code
8144 growth.
8145 .IP "\fBtracer-min-branch-ratio\fR" 4
8146 .IX Item "tracer-min-branch-ratio"
8147 Stop reverse growth when the reverse probability of best edge is less than this
8148 threshold (in percent).
8149 .IP "\fBtracer-min-branch-ratio\fR" 4
8150 .IX Item "tracer-min-branch-ratio"
8151 .PD 0
8152 .IP "\fBtracer-min-branch-ratio-feedback\fR" 4
8153 .IX Item "tracer-min-branch-ratio-feedback"
8154 .PD
8155 Stop forward growth if the best edge do have probability lower than this
8156 threshold.
8157 .Sp
8158 Similarly to \fBtracer-dynamic-coverage\fR two values are present, one for
8159 compilation for profile feedback and one for compilation without.  The value
8160 for compilation with profile feedback needs to be more conservative (higher) in
8161 order to make tracer effective.
8162 .IP "\fBmax-cse-path-length\fR" 4
8163 .IX Item "max-cse-path-length"
8164 Maximum number of basic blocks on path that cse considers.  The default is 10.
8165 .IP "\fBmax-cse-insns\fR" 4
8166 .IX Item "max-cse-insns"
8167 The maximum instructions \s-1CSE\s0 process before flushing. The default is 1000.
8168 .IP "\fBggc-min-expand\fR" 4
8169 .IX Item "ggc-min-expand"
8170 \&\s-1GCC\s0 uses a garbage collector to manage its own memory allocation.  This
8171 parameter specifies the minimum percentage by which the garbage
8172 collector's heap should be allowed to expand between collections.
8173 Tuning this may improve compilation speed; it has no effect on code
8174 generation.
8175 .Sp
8176 The default is 30% + 70% * (\s-1RAM/1GB\s0) with an upper bound of 100% when
8177 \&\s-1RAM\s0 >= 1GB.  If \f(CW\*(C`getrlimit\*(C'\fR is available, the notion of \*(L"\s-1RAM\s0\*(R" is
8178 the smallest of actual \s-1RAM\s0 and \f(CW\*(C`RLIMIT_DATA\*(C'\fR or \f(CW\*(C`RLIMIT_AS\*(C'\fR.  If
8179 \&\s-1GCC\s0 is not able to calculate \s-1RAM\s0 on a particular platform, the lower
8180 bound of 30% is used.  Setting this parameter and
8181 \&\fBggc-min-heapsize\fR to zero causes a full collection to occur at
8182 every opportunity.  This is extremely slow, but can be useful for
8183 debugging.
8184 .IP "\fBggc-min-heapsize\fR" 4
8185 .IX Item "ggc-min-heapsize"
8186 Minimum size of the garbage collector's heap before it begins bothering
8187 to collect garbage.  The first collection occurs after the heap expands
8188 by \fBggc-min-expand\fR% beyond \fBggc-min-heapsize\fR.  Again,
8189 tuning this may improve compilation speed, and has no effect on code
8190 generation.
8191 .Sp
8192 The default is the smaller of \s-1RAM/8\s0, \s-1RLIMIT_RSS\s0, or a limit that
8193 tries to ensure that \s-1RLIMIT_DATA\s0 or \s-1RLIMIT_AS\s0 are not exceeded, but
8194 with a lower bound of 4096 (four megabytes) and an upper bound of
8195 131072 (128 megabytes).  If \s-1GCC\s0 is not able to calculate \s-1RAM\s0 on a
8196 particular platform, the lower bound is used.  Setting this parameter
8197 very large effectively disables garbage collection.  Setting this
8198 parameter and \fBggc-min-expand\fR to zero causes a full collection
8199 to occur at every opportunity.
8200 .IP "\fBmax-reload-search-insns\fR" 4
8201 .IX Item "max-reload-search-insns"
8202 The maximum number of instruction reload should look backward for equivalent
8203 register.  Increasing values mean more aggressive optimization, making the
8204 compilation time increase with probably slightly better performance.
8205 The default value is 100.
8206 .IP "\fBmax-cselib-memory-locations\fR" 4
8207 .IX Item "max-cselib-memory-locations"
8208 The maximum number of memory locations cselib should take into account.
8209 Increasing values mean more aggressive optimization, making the compilation time
8210 increase with probably slightly better performance.  The default value is 500.
8211 .IP "\fBreorder-blocks-duplicate\fR" 4
8212 .IX Item "reorder-blocks-duplicate"
8213 .PD 0
8214 .IP "\fBreorder-blocks-duplicate-feedback\fR" 4
8215 .IX Item "reorder-blocks-duplicate-feedback"
8216 .PD
8217 Used by basic block reordering pass to decide whether to use unconditional
8218 branch or duplicate the code on its destination.  Code is duplicated when its
8219 estimated size is smaller than this value multiplied by the estimated size of
8220 unconditional jump in the hot spots of the program.
8221 .Sp
8222 The \fBreorder-block-duplicate-feedback\fR is used only when profile
8223 feedback is available and may be set to higher values than
8224 \&\fBreorder-block-duplicate\fR since information about the hot spots is more
8225 accurate.
8226 .IP "\fBmax-sched-ready-insns\fR" 4
8227 .IX Item "max-sched-ready-insns"
8228 The maximum number of instructions ready to be issued the scheduler should
8229 consider at any given time during the first scheduling pass.  Increasing
8230 values mean more thorough searches, making the compilation time increase
8231 with probably little benefit.  The default value is 100.
8232 .IP "\fBmax-sched-region-blocks\fR" 4
8233 .IX Item "max-sched-region-blocks"
8234 The maximum number of blocks in a region to be considered for
8235 interblock scheduling.  The default value is 10.
8236 .IP "\fBmax-pipeline-region-blocks\fR" 4
8237 .IX Item "max-pipeline-region-blocks"
8238 The maximum number of blocks in a region to be considered for
8239 pipelining in the selective scheduler.  The default value is 15.
8240 .IP "\fBmax-sched-region-insns\fR" 4
8241 .IX Item "max-sched-region-insns"
8242 The maximum number of insns in a region to be considered for
8243 interblock scheduling.  The default value is 100.
8244 .IP "\fBmax-pipeline-region-insns\fR" 4
8245 .IX Item "max-pipeline-region-insns"
8246 The maximum number of insns in a region to be considered for
8247 pipelining in the selective scheduler.  The default value is 200.
8248 .IP "\fBmin-spec-prob\fR" 4
8249 .IX Item "min-spec-prob"
8250 The minimum probability (in percents) of reaching a source block
8251 for interblock speculative scheduling.  The default value is 40.
8252 .IP "\fBmax-sched-extend-regions-iters\fR" 4
8253 .IX Item "max-sched-extend-regions-iters"
8254 The maximum number of iterations through \s-1CFG\s0 to extend regions.
8255 0 \- disable region extension,
8256 N \- do at most N iterations.
8257 The default value is 0.
8258 .IP "\fBmax-sched-insn-conflict-delay\fR" 4
8259 .IX Item "max-sched-insn-conflict-delay"
8260 The maximum conflict delay for an insn to be considered for speculative motion.
8261 The default value is 3.
8262 .IP "\fBsched-spec-prob-cutoff\fR" 4
8263 .IX Item "sched-spec-prob-cutoff"
8264 The minimal probability of speculation success (in percents), so that
8265 speculative insn will be scheduled.
8266 The default value is 40.
8267 .IP "\fBsched-mem-true-dep-cost\fR" 4
8268 .IX Item "sched-mem-true-dep-cost"
8269 Minimal distance (in \s-1CPU\s0 cycles) between store and load targeting same
8270 memory locations.  The default value is 1.
8271 .IP "\fBselsched-max-lookahead\fR" 4
8272 .IX Item "selsched-max-lookahead"
8273 The maximum size of the lookahead window of selective scheduling.  It is a
8274 depth of search for available instructions.
8275 The default value is 50.
8276 .IP "\fBselsched-max-sched-times\fR" 4
8277 .IX Item "selsched-max-sched-times"
8278 The maximum number of times that an instruction will be scheduled during
8279 selective scheduling.  This is the limit on the number of iterations
8280 through which the instruction may be pipelined.  The default value is 2.
8281 .IP "\fBselsched-max-insns-to-rename\fR" 4
8282 .IX Item "selsched-max-insns-to-rename"
8283 The maximum number of best instructions in the ready list that are considered
8284 for renaming in the selective scheduler.  The default value is 2.
8285 .IP "\fBsms-min-sc\fR" 4
8286 .IX Item "sms-min-sc"
8287 The minimum value of stage count that swing modulo scheduler will
8288 generate.  The default value is 2.
8289 .IP "\fBmax-last-value-rtl\fR" 4
8290 .IX Item "max-last-value-rtl"
8291 The maximum size measured as number of RTLs that can be recorded in an expression
8292 in combiner for a pseudo register as last known value of that register.  The default
8293 is 10000.
8294 .IP "\fBinteger-share-limit\fR" 4
8295 .IX Item "integer-share-limit"
8296 Small integer constants can use a shared data structure, reducing the
8297 compiler's memory usage and increasing its speed.  This sets the maximum
8298 value of a shared integer constant.  The default value is 256.
8299 .IP "\fBmin-virtual-mappings\fR" 4
8300 .IX Item "min-virtual-mappings"
8301 Specifies the minimum number of virtual mappings in the incremental
8302 \&\s-1SSA\s0 updater that should be registered to trigger the virtual mappings
8303 heuristic defined by virtual-mappings-ratio.  The default value is
8304 100.
8305 .IP "\fBvirtual-mappings-ratio\fR" 4
8306 .IX Item "virtual-mappings-ratio"
8307 If the number of virtual mappings is virtual-mappings-ratio bigger
8308 than the number of virtual symbols to be updated, then the incremental
8309 \&\s-1SSA\s0 updater switches to a full update for those symbols.  The default
8310 ratio is 3.
8311 .IP "\fBssp-buffer-size\fR" 4
8312 .IX Item "ssp-buffer-size"
8313 The minimum size of buffers (i.e. arrays) that will receive stack smashing
8314 protection when \fB\-fstack\-protection\fR is used.
8315 .IP "\fBmax-jump-thread-duplication-stmts\fR" 4
8316 .IX Item "max-jump-thread-duplication-stmts"
8317 Maximum number of statements allowed in a block that needs to be
8318 duplicated when threading jumps.
8319 .IP "\fBmax-fields-for-field-sensitive\fR" 4
8320 .IX Item "max-fields-for-field-sensitive"
8321 Maximum number of fields in a structure we will treat in
8322 a field sensitive manner during pointer analysis.  The default is zero
8323 for \-O0, and \-O1 and 100 for \-Os, \-O2, and \-O3.
8324 .IP "\fBprefetch-latency\fR" 4
8325 .IX Item "prefetch-latency"
8326 Estimate on average number of instructions that are executed before
8327 prefetch finishes.  The distance we prefetch ahead is proportional
8328 to this constant.  Increasing this number may also lead to less
8329 streams being prefetched (see \fBsimultaneous-prefetches\fR).
8330 .IP "\fBsimultaneous-prefetches\fR" 4
8331 .IX Item "simultaneous-prefetches"
8332 Maximum number of prefetches that can run at the same time.
8333 .IP "\fBl1\-cache\-line\-size\fR" 4
8334 .IX Item "l1-cache-line-size"
8335 The size of cache line in L1 cache, in bytes.
8336 .IP "\fBl1\-cache\-size\fR" 4
8337 .IX Item "l1-cache-size"
8338 The size of L1 cache, in kilobytes.
8339 .IP "\fBl2\-cache\-size\fR" 4
8340 .IX Item "l2-cache-size"
8341 The size of L2 cache, in kilobytes.
8342 .IP "\fBmin-insn-to-prefetch-ratio\fR" 4
8343 .IX Item "min-insn-to-prefetch-ratio"
8344 The minimum ratio between the number of instructions and the
8345 number of prefetches to enable prefetching in a loop.
8346 .IP "\fBprefetch-min-insn-to-mem-ratio\fR" 4
8347 .IX Item "prefetch-min-insn-to-mem-ratio"
8348 The minimum ratio between the number of instructions and the
8349 number of memory references to enable prefetching in a loop.
8350 .IP "\fBuse-canonical-types\fR" 4
8351 .IX Item "use-canonical-types"
8352 Whether the compiler should use the \*(L"canonical\*(R" type system.  By
8353 default, this should always be 1, which uses a more efficient internal
8354 mechanism for comparing types in \*(C+ and Objective\-\*(C+.  However, if
8355 bugs in the canonical type system are causing compilation failures,
8356 set this value to 0 to disable canonical types.
8357 .IP "\fBswitch-conversion-max-branch-ratio\fR" 4
8358 .IX Item "switch-conversion-max-branch-ratio"
8359 Switch initialization conversion will refuse to create arrays that are
8360 bigger than \fBswitch-conversion-max-branch-ratio\fR times the number of
8361 branches in the switch.
8362 .IP "\fBmax-partial-antic-length\fR" 4
8363 .IX Item "max-partial-antic-length"
8364 Maximum length of the partial antic set computed during the tree
8365 partial redundancy elimination optimization (\fB\-ftree\-pre\fR) when
8366 optimizing at \fB\-O3\fR and above.  For some sorts of source code
8367 the enhanced partial redundancy elimination optimization can run away,
8368 consuming all of the memory available on the host machine.  This
8369 parameter sets a limit on the length of the sets that are computed,
8370 which prevents the runaway behavior.  Setting a value of 0 for
8371 this parameter will allow an unlimited set length.
8372 .IP "\fBsccvn-max-scc-size\fR" 4
8373 .IX Item "sccvn-max-scc-size"
8374 Maximum size of a strongly connected component (\s-1SCC\s0) during \s-1SCCVN\s0
8375 processing.  If this limit is hit, \s-1SCCVN\s0 processing for the whole
8376 function will not be done and optimizations depending on it will
8377 be disabled.  The default maximum \s-1SCC\s0 size is 10000.
8378 .IP "\fBira-max-loops-num\fR" 4
8379 .IX Item "ira-max-loops-num"
8380 \&\s-1IRA\s0 uses regional register allocation by default.  If a function
8381 contains more loops than the number given by this parameter, only at most
8382 the given number of the most frequently-executed loops form regions
8383 for regional register allocation.  The default value of the
8384 parameter is 100.
8385 .IP "\fBira-max-conflict-table-size\fR" 4
8386 .IX Item "ira-max-conflict-table-size"
8387 Although \s-1IRA\s0 uses a sophisticated algorithm to compress the conflict
8388 table, the table can still require excessive amounts of memory for
8389 huge functions.  If the conflict table for a function could be more
8390 than the size in \s-1MB\s0 given by this parameter, the register allocator
8391 instead uses a faster, simpler, and lower-quality
8392 algorithm that does not require building a pseudo-register conflict table.  
8393 The default value of the parameter is 2000.
8394 .IP "\fBira-loop-reserved-regs\fR" 4
8395 .IX Item "ira-loop-reserved-regs"
8396 \&\s-1IRA\s0 can be used to evaluate more accurate register pressure in loops
8397 for decisions to move loop invariants (see \fB\-O3\fR).  The number
8398 of available registers reserved for some other purposes is given
8399 by this parameter.  The default value of the parameter is 2, which is
8400 the minimal number of registers needed by typical instructions.
8401 This value is the best found from numerous experiments.
8402 .IP "\fBloop-invariant-max-bbs-in-loop\fR" 4
8403 .IX Item "loop-invariant-max-bbs-in-loop"
8404 Loop invariant motion can be very expensive, both in compilation time and
8405 in amount of needed compile-time memory, with very large loops.  Loops
8406 with more basic blocks than this parameter won't have loop invariant
8407 motion optimization performed on them.  The default value of the
8408 parameter is 1000 for \-O1 and 10000 for \-O2 and above.
8409 .IP "\fBloop-max-datarefs-for-datadeps\fR" 4
8410 .IX Item "loop-max-datarefs-for-datadeps"
8411 Building data dapendencies is expensive for very large loops.  This
8412 parameter limits the number of data references in loops that are
8413 considered for data dependence analysis.  These large loops will not
8414 be handled then by the optimizations using loop data dependencies.
8415 The default value is 1000.
8416 .IP "\fBmax-vartrack-size\fR" 4
8417 .IX Item "max-vartrack-size"
8418 Sets a maximum number of hash table slots to use during variable
8419 tracking dataflow analysis of any function.  If this limit is exceeded
8420 with variable tracking at assignments enabled, analysis for that
8421 function is retried without it, after removing all debug insns from
8422 the function.  If the limit is exceeded even without debug insns, var
8423 tracking analysis is completely disabled for the function.  Setting
8424 the parameter to zero makes it unlimited.
8425 .IP "\fBmax-vartrack-expr-depth\fR" 4
8426 .IX Item "max-vartrack-expr-depth"
8427 Sets a maximum number of recursion levels when attempting to map
8428 variable names or debug temporaries to value expressions.  This trades
8429 compilation time for more complete debug information.  If this is set too
8430 low, value expressions that are available and could be represented in
8431 debug information may end up not being used; setting this higher may
8432 enable the compiler to find more complex debug expressions, but compile
8433 time and memory use may grow.  The default is 12.
8434 .IP "\fBmin-nondebug-insn-uid\fR" 4
8435 .IX Item "min-nondebug-insn-uid"
8436 Use uids starting at this parameter for nondebug insns.  The range below
8437 the parameter is reserved exclusively for debug insns created by
8438 \&\fB\-fvar\-tracking\-assignments\fR, but debug insns may get
8439 (non-overlapping) uids above it if the reserved range is exhausted.
8440 .IP "\fBipa-sra-ptr-growth-factor\fR" 4
8441 .IX Item "ipa-sra-ptr-growth-factor"
8442 IPA-SRA will replace a pointer to an aggregate with one or more new
8443 parameters only when their cumulative size is less or equal to
8444 \&\fBipa-sra-ptr-growth-factor\fR times the size of the original
8445 pointer parameter.
8446 .IP "\fBtm-max-aggregate-size\fR" 4
8447 .IX Item "tm-max-aggregate-size"
8448 When making copies of thread-local variables in a transaction, this
8449 parameter specifies the size in bytes after which variables will be
8450 saved with the logging functions as opposed to save/restore code
8451 sequence pairs.  This option only applies when using
8452 \&\fB\-fgnu\-tm\fR.
8453 .IP "\fBgraphite-max-nb-scop-params\fR" 4
8454 .IX Item "graphite-max-nb-scop-params"
8455 To avoid exponential effects in the Graphite loop transforms, the
8456 number of parameters in a Static Control Part (SCoP) is bounded.  The
8457 default value is 10 parameters.  A variable whose value is unknown at
8458 compilation time and defined outside a SCoP is a parameter of the SCoP.
8459 .IP "\fBgraphite-max-bbs-per-function\fR" 4
8460 .IX Item "graphite-max-bbs-per-function"
8461 To avoid exponential effects in the detection of SCoPs, the size of
8462 the functions analyzed by Graphite is bounded.  The default value is
8463 100 basic blocks.
8464 .IP "\fBloop-block-tile-size\fR" 4
8465 .IX Item "loop-block-tile-size"
8466 Loop blocking or strip mining transforms, enabled with
8467 \&\fB\-floop\-block\fR or \fB\-floop\-strip\-mine\fR, strip mine each
8468 loop in the loop nest by a given number of iterations.  The strip
8469 length can be changed using the \fBloop-block-tile-size\fR
8470 parameter.  The default value is 51 iterations.
8471 .IP "\fBipa-cp-value-list-size\fR" 4
8472 .IX Item "ipa-cp-value-list-size"
8473 IPA-CP attempts to track all possible values and types passed to a function's
8474 parameter in order to propagate them and perform devirtualization.
8475 \&\fBipa-cp-value-list-size\fR is the maximum number of values and types it
8476 stores per one formal parameter of a function.
8477 .IP "\fBlto-partitions\fR" 4
8478 .IX Item "lto-partitions"
8479 Specify desired number of partitions produced during \s-1WHOPR\s0 compilation.
8480 The number of partitions should exceed the number of CPUs used for compilation.
8481 The default value is 32.
8482 .IP "\fBlto-minpartition\fR" 4
8483 .IX Item "lto-minpartition"
8484 Size of minimal partition for \s-1WHOPR\s0 (in estimated instructions).
8485 This prevents expenses of splitting very small programs into too many
8486 partitions.
8487 .IP "\fBcxx-max-namespaces-for-diagnostic-help\fR" 4
8488 .IX Item "cxx-max-namespaces-for-diagnostic-help"
8489 The maximum number of namespaces to consult for suggestions when \*(C+
8490 name lookup fails for an identifier.  The default is 1000.
8491 .IP "\fBsink-frequency-threshold\fR" 4
8492 .IX Item "sink-frequency-threshold"
8493 The maximum relative execution frequency (in percents) of the target block
8494 relative to a statement's original block to allow statement sinking of a
8495 statement.  Larger numbers result in more aggressive statement sinking.
8496 The default value is 75.  A small positive adjustment is applied for
8497 statements with memory operands as those are even more profitable so sink.
8498 .IP "\fBmax-stores-to-sink\fR" 4
8499 .IX Item "max-stores-to-sink"
8500 The maximum number of conditional stores paires that can be sunk.  Set to 0
8501 if either vectorization (\fB\-ftree\-vectorize\fR) or if-conversion
8502 (\fB\-ftree\-loop\-if\-convert\fR) is disabled.  The default is 2.
8503 .IP "\fBallow-load-data-races\fR" 4
8504 .IX Item "allow-load-data-races"
8505 Allow optimizers to introduce new data races on loads.
8506 Set to 1 to allow, otherwise to 0.  This option is enabled by default
8507 unless implicitly set by the \fB\-fmemory\-model=\fR option.
8508 .IP "\fBallow-store-data-races\fR" 4
8509 .IX Item "allow-store-data-races"
8510 Allow optimizers to introduce new data races on stores.
8511 Set to 1 to allow, otherwise to 0.  This option is enabled by default
8512 unless implicitly set by the \fB\-fmemory\-model=\fR option.
8513 .IP "\fBallow-packed-load-data-races\fR" 4
8514 .IX Item "allow-packed-load-data-races"
8515 Allow optimizers to introduce new data races on packed data loads.
8516 Set to 1 to allow, otherwise to 0.  This option is enabled by default
8517 unless implicitly set by the \fB\-fmemory\-model=\fR option.
8518 .IP "\fBallow-packed-store-data-races\fR" 4
8519 .IX Item "allow-packed-store-data-races"
8520 Allow optimizers to introduce new data races on packed data stores.
8521 Set to 1 to allow, otherwise to 0.  This option is enabled by default
8522 unless implicitly set by the \fB\-fmemory\-model=\fR option.
8523 .IP "\fBcase-values-threshold\fR" 4
8524 .IX Item "case-values-threshold"
8525 The smallest number of different values for which it is best to use a
8526 jump-table instead of a tree of conditional branches.  If the value is
8527 0, use the default for the machine.  The default is 0.
8528 .IP "\fBtree-reassoc-width\fR" 4
8529 .IX Item "tree-reassoc-width"
8530 Set the maximum number of instructions executed in parallel in
8531 reassociated tree. This parameter overrides target dependent
8532 heuristics used by default if has non zero value.
8533 .RE
8534 .RS 4
8535 .RE
8536 .Sh "Options Controlling the Preprocessor"
8537 .IX Subsection "Options Controlling the Preprocessor"
8538 These options control the C preprocessor, which is run on each C source
8539 file before actual compilation.
8540 .PP
8541 If you use the \fB\-E\fR option, nothing is done except preprocessing.
8542 Some of these options make sense only together with \fB\-E\fR because
8543 they cause the preprocessor output to be unsuitable for actual
8544 compilation.
8545 .IP "\fB\-Wp,\fR\fIoption\fR" 4
8546 .IX Item "-Wp,option"
8547 You can use \fB\-Wp,\fR\fIoption\fR to bypass the compiler driver
8548 and pass \fIoption\fR directly through to the preprocessor.  If
8549 \&\fIoption\fR contains commas, it is split into multiple options at the
8550 commas.  However, many options are modified, translated or interpreted
8551 by the compiler driver before being passed to the preprocessor, and
8552 \&\fB\-Wp\fR forcibly bypasses this phase.  The preprocessor's direct
8553 interface is undocumented and subject to change, so whenever possible
8554 you should avoid using \fB\-Wp\fR and let the driver handle the
8555 options instead.
8556 .IP "\fB\-Xpreprocessor\fR \fIoption\fR" 4
8557 .IX Item "-Xpreprocessor option"
8558 Pass \fIoption\fR as an option to the preprocessor.  You can use this to
8559 supply system-specific preprocessor options that \s-1GCC\s0 does not know how to
8560 recognize.
8561 .Sp
8562 If you want to pass an option that takes an argument, you must use
8563 \&\fB\-Xpreprocessor\fR twice, once for the option and once for the argument.
8564 .IP "\fB\-D\fR \fIname\fR" 4
8565 .IX Item "-D name"
8566 Predefine \fIname\fR as a macro, with definition \f(CW1\fR.
8567 .IP "\fB\-D\fR \fIname\fR\fB=\fR\fIdefinition\fR" 4
8568 .IX Item "-D name=definition"
8569 The contents of \fIdefinition\fR are tokenized and processed as if
8570 they appeared during translation phase three in a \fB#define\fR
8571 directive.  In particular, the definition will be truncated by
8572 embedded newline characters.
8573 .Sp
8574 If you are invoking the preprocessor from a shell or shell-like
8575 program you may need to use the shell's quoting syntax to protect
8576 characters such as spaces that have a meaning in the shell syntax.
8577 .Sp
8578 If you wish to define a function-like macro on the command line, write
8579 its argument list with surrounding parentheses before the equals sign
8580 (if any).  Parentheses are meaningful to most shells, so you will need
8581 to quote the option.  With \fBsh\fR and \fBcsh\fR,
8582 \&\fB\-D'\fR\fIname\fR\fB(\fR\fIargs...\fR\fB)=\fR\fIdefinition\fR\fB'\fR works.
8583 .Sp
8584 \&\fB\-D\fR and \fB\-U\fR options are processed in the order they
8585 are given on the command line.  All \fB\-imacros\fR \fIfile\fR and
8586 \&\fB\-include\fR \fIfile\fR options are processed after all
8587 \&\fB\-D\fR and \fB\-U\fR options.
8588 .IP "\fB\-U\fR \fIname\fR" 4
8589 .IX Item "-U name"
8590 Cancel any previous definition of \fIname\fR, either built in or
8591 provided with a \fB\-D\fR option.
8592 .IP "\fB\-undef\fR" 4
8593 .IX Item "-undef"
8594 Do not predefine any system-specific or GCC-specific macros.  The
8595 standard predefined macros remain defined.
8596 .IP "\fB\-I\fR \fIdir\fR" 4
8597 .IX Item "-I dir"
8598 Add the directory \fIdir\fR to the list of directories to be searched
8599 for header files.
8600 Directories named by \fB\-I\fR are searched before the standard
8601 system include directories.  If the directory \fIdir\fR is a standard
8602 system include directory, the option is ignored to ensure that the
8603 default search order for system directories and the special treatment
8604 of system headers are not defeated
8605 \&.
8606 If \fIdir\fR begins with \f(CW\*(C`=\*(C'\fR, then the \f(CW\*(C`=\*(C'\fR will be replaced
8607 by the sysroot prefix; see \fB\-\-sysroot\fR and \fB\-isysroot\fR.
8608 .IP "\fB\-o\fR \fIfile\fR" 4
8609 .IX Item "-o file"
8610 Write output to \fIfile\fR.  This is the same as specifying \fIfile\fR
8611 as the second non-option argument to \fBcpp\fR.  \fBgcc\fR has a
8612 different interpretation of a second non-option argument, so you must
8613 use \fB\-o\fR to specify the output file.
8614 .IP "\fB\-Wall\fR" 4
8615 .IX Item "-Wall"
8616 Turns on all optional warnings which are desirable for normal code.
8617 At present this is \fB\-Wcomment\fR, \fB\-Wtrigraphs\fR,
8618 \&\fB\-Wmultichar\fR and a warning about integer promotion causing a
8619 change of sign in \f(CW\*(C`#if\*(C'\fR expressions.  Note that many of the
8620 preprocessor's warnings are on by default and have no options to
8621 control them.
8622 .IP "\fB\-Wcomment\fR" 4
8623 .IX Item "-Wcomment"
8624 .PD 0
8625 .IP "\fB\-Wcomments\fR" 4
8626 .IX Item "-Wcomments"
8627 .PD
8628 Warn whenever a comment-start sequence \fB/*\fR appears in a \fB/*\fR
8629 comment, or whenever a backslash-newline appears in a \fB//\fR comment.
8630 (Both forms have the same effect.)
8631 .IP "\fB\-Wtrigraphs\fR" 4
8632 .IX Item "-Wtrigraphs"
8633 Most trigraphs in comments cannot affect the meaning of the program.
8634 However, a trigraph that would form an escaped newline (\fB??/\fR at
8635 the end of a line) can, by changing where the comment begins or ends.
8636 Therefore, only trigraphs that would form escaped newlines produce
8637 warnings inside a comment.
8638 .Sp
8639 This option is implied by \fB\-Wall\fR.  If \fB\-Wall\fR is not
8640 given, this option is still enabled unless trigraphs are enabled.  To
8641 get trigraph conversion without warnings, but get the other
8642 \&\fB\-Wall\fR warnings, use \fB\-trigraphs \-Wall \-Wno\-trigraphs\fR.
8643 .IP "\fB\-Wtraditional\fR" 4
8644 .IX Item "-Wtraditional"
8645 Warn about certain constructs that behave differently in traditional and
8646 \&\s-1ISO\s0 C.  Also warn about \s-1ISO\s0 C constructs that have no traditional C
8647 equivalent, and problematic constructs which should be avoided.
8648 .IP "\fB\-Wundef\fR" 4
8649 .IX Item "-Wundef"
8650 Warn whenever an identifier which is not a macro is encountered in an
8651 \&\fB#if\fR directive, outside of \fBdefined\fR.  Such identifiers are
8652 replaced with zero.
8653 .IP "\fB\-Wunused\-macros\fR" 4
8654 .IX Item "-Wunused-macros"
8655 Warn about macros defined in the main file that are unused.  A macro
8656 is \fIused\fR if it is expanded or tested for existence at least once.
8657 The preprocessor will also warn if the macro has not been used at the
8658 time it is redefined or undefined.
8659 .Sp
8660 Built-in macros, macros defined on the command line, and macros
8661 defined in include files are not warned about.
8662 .Sp
8663 \&\fINote:\fR If a macro is actually used, but only used in skipped
8664 conditional blocks, then \s-1CPP\s0 will report it as unused.  To avoid the
8665 warning in such a case, you might improve the scope of the macro's
8666 definition by, for example, moving it into the first skipped block.
8667 Alternatively, you could provide a dummy use with something like:
8668 .Sp
8669 .Vb 2
8670 \&        #if defined the_macro_causing_the_warning
8671 \&        #endif
8672 .Ve
8673 .IP "\fB\-Wendif\-labels\fR" 4
8674 .IX Item "-Wendif-labels"
8675 Warn whenever an \fB#else\fR or an \fB#endif\fR are followed by text.
8676 This usually happens in code of the form
8677 .Sp
8678 .Vb 5
8679 \&        #if FOO
8680 \&        ...
8681 \&        #else FOO
8682 \&        ...
8683 \&        #endif FOO
8684 .Ve
8685 .Sp
8686 The second and third \f(CW\*(C`FOO\*(C'\fR should be in comments, but often are not
8687 in older programs.  This warning is on by default.
8688 .IP "\fB\-Werror\fR" 4
8689 .IX Item "-Werror"
8690 Make all warnings into hard errors.  Source code which triggers warnings
8691 will be rejected.
8692 .IP "\fB\-Wsystem\-headers\fR" 4
8693 .IX Item "-Wsystem-headers"
8694 Issue warnings for code in system headers.  These are normally unhelpful
8695 in finding bugs in your own code, therefore suppressed.  If you are
8696 responsible for the system library, you may want to see them.
8697 .IP "\fB\-w\fR" 4
8698 .IX Item "-w"
8699 Suppress all warnings, including those which \s-1GNU\s0 \s-1CPP\s0 issues by default.
8700 .IP "\fB\-pedantic\fR" 4
8701 .IX Item "-pedantic"
8702 Issue all the mandatory diagnostics listed in the C standard.  Some of
8703 them are left out by default, since they trigger frequently on harmless
8704 code.
8705 .IP "\fB\-pedantic\-errors\fR" 4
8706 .IX Item "-pedantic-errors"
8707 Issue all the mandatory diagnostics, and make all mandatory diagnostics
8708 into errors.  This includes mandatory diagnostics that \s-1GCC\s0 issues
8709 without \fB\-pedantic\fR but treats as warnings.
8710 .IP "\fB\-M\fR" 4
8711 .IX Item "-M"
8712 Instead of outputting the result of preprocessing, output a rule
8713 suitable for \fBmake\fR describing the dependencies of the main
8714 source file.  The preprocessor outputs one \fBmake\fR rule containing
8715 the object file name for that source file, a colon, and the names of all
8716 the included files, including those coming from \fB\-include\fR or
8717 \&\fB\-imacros\fR command line options.
8718 .Sp
8719 Unless specified explicitly (with \fB\-MT\fR or \fB\-MQ\fR), the
8720 object file name consists of the name of the source file with any
8721 suffix replaced with object file suffix and with any leading directory
8722 parts removed.  If there are many included files then the rule is
8723 split into several lines using \fB\e\fR\-newline.  The rule has no
8724 commands.
8725 .Sp
8726 This option does not suppress the preprocessor's debug output, such as
8727 \&\fB\-dM\fR.  To avoid mixing such debug output with the dependency
8728 rules you should explicitly specify the dependency output file with
8729 \&\fB\-MF\fR, or use an environment variable like
8730 \&\fB\s-1DEPENDENCIES_OUTPUT\s0\fR.  Debug output
8731 will still be sent to the regular output stream as normal.
8732 .Sp
8733 Passing \fB\-M\fR to the driver implies \fB\-E\fR, and suppresses
8734 warnings with an implicit \fB\-w\fR.
8735 .IP "\fB\-MM\fR" 4
8736 .IX Item "-MM"
8737 Like \fB\-M\fR but do not mention header files that are found in
8738 system header directories, nor header files that are included,
8739 directly or indirectly, from such a header.
8740 .Sp
8741 This implies that the choice of angle brackets or double quotes in an
8742 \&\fB#include\fR directive does not in itself determine whether that
8743 header will appear in \fB\-MM\fR dependency output.  This is a
8744 slight change in semantics from \s-1GCC\s0 versions 3.0 and earlier.
8745 .IP "\fB\-MF\fR \fIfile\fR" 4
8746 .IX Item "-MF file"
8747 When used with \fB\-M\fR or \fB\-MM\fR, specifies a
8748 file to write the dependencies to.  If no \fB\-MF\fR switch is given
8749 the preprocessor sends the rules to the same place it would have sent
8750 preprocessed output.
8751 .Sp
8752 When used with the driver options \fB\-MD\fR or \fB\-MMD\fR,
8753 \&\fB\-MF\fR overrides the default dependency output file.
8754 .IP "\fB\-MG\fR" 4
8755 .IX Item "-MG"
8756 In conjunction with an option such as \fB\-M\fR requesting
8757 dependency generation, \fB\-MG\fR assumes missing header files are
8758 generated files and adds them to the dependency list without raising
8759 an error.  The dependency filename is taken directly from the
8760 \&\f(CW\*(C`#include\*(C'\fR directive without prepending any path.  \fB\-MG\fR
8761 also suppresses preprocessed output, as a missing header file renders
8762 this useless.
8763 .Sp
8764 This feature is used in automatic updating of makefiles.
8765 .IP "\fB\-MP\fR" 4
8766 .IX Item "-MP"
8767 This option instructs \s-1CPP\s0 to add a phony target for each dependency
8768 other than the main file, causing each to depend on nothing.  These
8769 dummy rules work around errors \fBmake\fR gives if you remove header
8770 files without updating the \fIMakefile\fR to match.
8771 .Sp
8772 This is typical output:
8773 .Sp
8774 .Vb 1
8775 \&        test.o: test.c test.h
8776 \&        
8777 \&        test.h:
8778 .Ve
8779 .IP "\fB\-MT\fR \fItarget\fR" 4
8780 .IX Item "-MT target"
8781 Change the target of the rule emitted by dependency generation.  By
8782 default \s-1CPP\s0 takes the name of the main input file, deletes any
8783 directory components and any file suffix such as \fB.c\fR, and
8784 appends the platform's usual object suffix.  The result is the target.
8785 .Sp
8786 An \fB\-MT\fR option will set the target to be exactly the string you
8787 specify.  If you want multiple targets, you can specify them as a single
8788 argument to \fB\-MT\fR, or use multiple \fB\-MT\fR options.
8789 .Sp
8790 For example, \fB\-MT\ '$(objpfx)foo.o'\fR might give
8791 .Sp
8792 .Vb 1
8793 \&        $(objpfx)foo.o: foo.c
8794 .Ve
8795 .IP "\fB\-MQ\fR \fItarget\fR" 4
8796 .IX Item "-MQ target"
8797 Same as \fB\-MT\fR, but it quotes any characters which are special to
8798 Make.  \fB\-MQ\ '$(objpfx)foo.o'\fR gives
8799 .Sp
8800 .Vb 1
8801 \&        $$(objpfx)foo.o: foo.c
8802 .Ve
8803 .Sp
8804 The default target is automatically quoted, as if it were given with
8805 \&\fB\-MQ\fR.
8806 .IP "\fB\-MD\fR" 4
8807 .IX Item "-MD"
8808 \&\fB\-MD\fR is equivalent to \fB\-M \-MF\fR \fIfile\fR, except that
8809 \&\fB\-E\fR is not implied.  The driver determines \fIfile\fR based on
8810 whether an \fB\-o\fR option is given.  If it is, the driver uses its
8811 argument but with a suffix of \fI.d\fR, otherwise it takes the name
8812 of the input file, removes any directory components and suffix, and
8813 applies a \fI.d\fR suffix.
8814 .Sp
8815 If \fB\-MD\fR is used in conjunction with \fB\-E\fR, any
8816 \&\fB\-o\fR switch is understood to specify the dependency output file, but if used without \fB\-E\fR, each \fB\-o\fR
8817 is understood to specify a target object file.
8818 .Sp
8819 Since \fB\-E\fR is not implied, \fB\-MD\fR can be used to generate
8820 a dependency output file as a side-effect of the compilation process.
8821 .IP "\fB\-MMD\fR" 4
8822 .IX Item "-MMD"
8823 Like \fB\-MD\fR except mention only user header files, not system
8824 header files.
8825 .IP "\fB\-fpch\-deps\fR" 4
8826 .IX Item "-fpch-deps"
8827 When using precompiled headers, this flag
8828 will cause the dependency-output flags to also list the files from the
8829 precompiled header's dependencies.  If not specified only the
8830 precompiled header would be listed and not the files that were used to
8831 create it because those files are not consulted when a precompiled
8832 header is used.
8833 .IP "\fB\-fpch\-preprocess\fR" 4
8834 .IX Item "-fpch-preprocess"
8835 This option allows use of a precompiled header together with \fB\-E\fR.  It inserts a special \f(CW\*(C`#pragma\*(C'\fR,
8836 \&\f(CW\*(C`#pragma GCC pch_preprocess "\f(CIfilename\f(CW"\*(C'\fR in the output to mark
8837 the place where the precompiled header was found, and its \fIfilename\fR.
8838 When \fB\-fpreprocessed\fR is in use, \s-1GCC\s0 recognizes this \f(CW\*(C`#pragma\*(C'\fR
8839 and loads the \s-1PCH\s0.
8840 .Sp
8841 This option is off by default, because the resulting preprocessed output
8842 is only really suitable as input to \s-1GCC\s0.  It is switched on by
8843 \&\fB\-save\-temps\fR.
8844 .Sp
8845 You should not write this \f(CW\*(C`#pragma\*(C'\fR in your own code, but it is
8846 safe to edit the filename if the \s-1PCH\s0 file is available in a different
8847 location.  The filename may be absolute or it may be relative to \s-1GCC\s0's
8848 current directory.
8849 .IP "\fB\-x c\fR" 4
8850 .IX Item "-x c"
8851 .PD 0
8852 .IP "\fB\-x c++\fR" 4
8853 .IX Item "-x c++"
8854 .IP "\fB\-x objective-c\fR" 4
8855 .IX Item "-x objective-c"
8856 .IP "\fB\-x assembler-with-cpp\fR" 4
8857 .IX Item "-x assembler-with-cpp"
8858 .PD
8859 Specify the source language: C, \*(C+, Objective-C, or assembly.  This has
8860 nothing to do with standards conformance or extensions; it merely
8861 selects which base syntax to expect.  If you give none of these options,
8862 cpp will deduce the language from the extension of the source file:
8863 \&\fB.c\fR, \fB.cc\fR, \fB.m\fR, or \fB.S\fR.  Some other common
8864 extensions for \*(C+ and assembly are also recognized.  If cpp does not
8865 recognize the extension, it will treat the file as C; this is the most
8866 generic mode.
8867 .Sp
8868 \&\fINote:\fR Previous versions of cpp accepted a \fB\-lang\fR option
8869 which selected both the language and the standards conformance level.
8870 This option has been removed, because it conflicts with the \fB\-l\fR
8871 option.
8872 .IP "\fB\-std=\fR\fIstandard\fR" 4
8873 .IX Item "-std=standard"
8874 .PD 0
8875 .IP "\fB\-ansi\fR" 4
8876 .IX Item "-ansi"
8877 .PD
8878 Specify the standard to which the code should conform.  Currently \s-1CPP\s0
8879 knows about C and \*(C+ standards; others may be added in the future.
8880 .Sp
8881 \&\fIstandard\fR
8882 may be one of:
8883 .RS 4
8884 .ie n .IP """c90""" 4
8885 .el .IP "\f(CWc90\fR" 4
8886 .IX Item "c90"
8887 .PD 0
8888 .ie n .IP """c89""" 4
8889 .el .IP "\f(CWc89\fR" 4
8890 .IX Item "c89"
8891 .ie n .IP """iso9899:1990""" 4
8892 .el .IP "\f(CWiso9899:1990\fR" 4
8893 .IX Item "iso9899:1990"
8894 .PD
8895 The \s-1ISO\s0 C standard from 1990.  \fBc90\fR is the customary shorthand for
8896 this version of the standard.
8897 .Sp
8898 The \fB\-ansi\fR option is equivalent to \fB\-std=c90\fR.
8899 .ie n .IP """iso9899:199409""" 4
8900 .el .IP "\f(CWiso9899:199409\fR" 4
8901 .IX Item "iso9899:199409"
8902 The 1990 C standard, as amended in 1994.
8903 .ie n .IP """iso9899:1999""" 4
8904 .el .IP "\f(CWiso9899:1999\fR" 4
8905 .IX Item "iso9899:1999"
8906 .PD 0
8907 .ie n .IP """c99""" 4
8908 .el .IP "\f(CWc99\fR" 4
8909 .IX Item "c99"
8910 .ie n .IP """iso9899:199x""" 4
8911 .el .IP "\f(CWiso9899:199x\fR" 4
8912 .IX Item "iso9899:199x"
8913 .ie n .IP """c9x""" 4
8914 .el .IP "\f(CWc9x\fR" 4
8915 .IX Item "c9x"
8916 .PD
8917 The revised \s-1ISO\s0 C standard, published in December 1999.  Before
8918 publication, this was known as C9X.
8919 .ie n .IP """iso9899:2011""" 4
8920 .el .IP "\f(CWiso9899:2011\fR" 4
8921 .IX Item "iso9899:2011"
8922 .PD 0
8923 .ie n .IP """c11""" 4
8924 .el .IP "\f(CWc11\fR" 4
8925 .IX Item "c11"
8926 .ie n .IP """c1x""" 4
8927 .el .IP "\f(CWc1x\fR" 4
8928 .IX Item "c1x"
8929 .PD
8930 The revised \s-1ISO\s0 C standard, published in December 2011.  Before
8931 publication, this was known as C1X.
8932 .ie n .IP """gnu90""" 4
8933 .el .IP "\f(CWgnu90\fR" 4
8934 .IX Item "gnu90"
8935 .PD 0
8936 .ie n .IP """gnu89""" 4
8937 .el .IP "\f(CWgnu89\fR" 4
8938 .IX Item "gnu89"
8939 .PD
8940 The 1990 C standard plus \s-1GNU\s0 extensions.  This is the default.
8941 .ie n .IP """gnu99""" 4
8942 .el .IP "\f(CWgnu99\fR" 4
8943 .IX Item "gnu99"
8944 .PD 0
8945 .ie n .IP """gnu9x""" 4
8946 .el .IP "\f(CWgnu9x\fR" 4
8947 .IX Item "gnu9x"
8948 .PD
8949 The 1999 C standard plus \s-1GNU\s0 extensions.
8950 .ie n .IP """gnu11""" 4
8951 .el .IP "\f(CWgnu11\fR" 4
8952 .IX Item "gnu11"
8953 .PD 0
8954 .ie n .IP """gnu1x""" 4
8955 .el .IP "\f(CWgnu1x\fR" 4
8956 .IX Item "gnu1x"
8957 .PD
8958 The 2011 C standard plus \s-1GNU\s0 extensions.
8959 .ie n .IP """c++98""" 4
8960 .el .IP "\f(CWc++98\fR" 4
8961 .IX Item "c++98"
8962 The 1998 \s-1ISO\s0 \*(C+ standard plus amendments.
8963 .ie n .IP """gnu++98""" 4
8964 .el .IP "\f(CWgnu++98\fR" 4
8965 .IX Item "gnu++98"
8966 The same as \fB\-std=c++98\fR plus \s-1GNU\s0 extensions.  This is the
8967 default for \*(C+ code.
8968 .RE
8969 .RS 4
8970 .RE
8971 .IP "\fB\-I\-\fR" 4
8972 .IX Item "-I-"
8973 Split the include path.  Any directories specified with \fB\-I\fR
8974 options before \fB\-I\-\fR are searched only for headers requested with
8975 \&\f(CW\*(C`#include\ "\f(CIfile\f(CW"\*(C'\fR; they are not searched for
8976 \&\f(CW\*(C`#include\ <\f(CIfile\f(CW>\*(C'\fR.  If additional directories are
8977 specified with \fB\-I\fR options after the \fB\-I\-\fR, those
8978 directories are searched for all \fB#include\fR directives.
8979 .Sp
8980 In addition, \fB\-I\-\fR inhibits the use of the directory of the current
8981 file directory as the first search directory for \f(CW\*(C`#include\ "\f(CIfile\f(CW"\*(C'\fR.
8982 This option has been deprecated.
8983 .IP "\fB\-nostdinc\fR" 4
8984 .IX Item "-nostdinc"
8985 Do not search the standard system directories for header files.
8986 Only the directories you have specified with \fB\-I\fR options
8987 (and the directory of the current file, if appropriate) are searched.
8988 .IP "\fB\-nostdinc++\fR" 4
8989 .IX Item "-nostdinc++"
8990 Do not search for header files in the \*(C+\-specific standard directories,
8991 but do still search the other standard directories.  (This option is
8992 used when building the \*(C+ library.)
8993 .IP "\fB\-include\fR \fIfile\fR" 4
8994 .IX Item "-include file"
8995 Process \fIfile\fR as if \f(CW\*(C`#include "file"\*(C'\fR appeared as the first
8996 line of the primary source file.  However, the first directory searched
8997 for \fIfile\fR is the preprocessor's working directory \fIinstead of\fR
8998 the directory containing the main source file.  If not found there, it
8999 is searched for in the remainder of the \f(CW\*(C`#include "..."\*(C'\fR search
9000 chain as normal.
9001 .Sp
9002 If multiple \fB\-include\fR options are given, the files are included
9003 in the order they appear on the command line.
9004 .IP "\fB\-imacros\fR \fIfile\fR" 4
9005 .IX Item "-imacros file"
9006 Exactly like \fB\-include\fR, except that any output produced by
9007 scanning \fIfile\fR is thrown away.  Macros it defines remain defined.
9008 This allows you to acquire all the macros from a header without also
9009 processing its declarations.
9010 .Sp
9011 All files specified by \fB\-imacros\fR are processed before all files
9012 specified by \fB\-include\fR.
9013 .IP "\fB\-idirafter\fR \fIdir\fR" 4
9014 .IX Item "-idirafter dir"
9015 Search \fIdir\fR for header files, but do it \fIafter\fR all
9016 directories specified with \fB\-I\fR and the standard system directories
9017 have been exhausted.  \fIdir\fR is treated as a system include directory.
9018 If \fIdir\fR begins with \f(CW\*(C`=\*(C'\fR, then the \f(CW\*(C`=\*(C'\fR will be replaced
9019 by the sysroot prefix; see \fB\-\-sysroot\fR and \fB\-isysroot\fR.
9020 .IP "\fB\-iprefix\fR \fIprefix\fR" 4
9021 .IX Item "-iprefix prefix"
9022 Specify \fIprefix\fR as the prefix for subsequent \fB\-iwithprefix\fR
9023 options.  If the prefix represents a directory, you should include the
9024 final \fB/\fR.
9025 .IP "\fB\-iwithprefix\fR \fIdir\fR" 4
9026 .IX Item "-iwithprefix dir"
9027 .PD 0
9028 .IP "\fB\-iwithprefixbefore\fR \fIdir\fR" 4
9029 .IX Item "-iwithprefixbefore dir"
9030 .PD
9031 Append \fIdir\fR to the prefix specified previously with
9032 \&\fB\-iprefix\fR, and add the resulting directory to the include search
9033 path.  \fB\-iwithprefixbefore\fR puts it in the same place \fB\-I\fR
9034 would; \fB\-iwithprefix\fR puts it where \fB\-idirafter\fR would.
9035 .IP "\fB\-isysroot\fR \fIdir\fR" 4
9036 .IX Item "-isysroot dir"
9037 This option is like the \fB\-\-sysroot\fR option, but applies only to
9038 header files (except for Darwin targets, where it applies to both header
9039 files and libraries).  See the \fB\-\-sysroot\fR option for more
9040 information.
9041 .IP "\fB\-imultilib\fR \fIdir\fR" 4
9042 .IX Item "-imultilib dir"
9043 Use \fIdir\fR as a subdirectory of the directory containing
9044 target-specific \*(C+ headers.
9045 .IP "\fB\-isystem\fR \fIdir\fR" 4
9046 .IX Item "-isystem dir"
9047 Search \fIdir\fR for header files, after all directories specified by
9048 \&\fB\-I\fR but before the standard system directories.  Mark it
9049 as a system directory, so that it gets the same special treatment as
9050 is applied to the standard system directories.
9051 If \fIdir\fR begins with \f(CW\*(C`=\*(C'\fR, then the \f(CW\*(C`=\*(C'\fR will be replaced
9052 by the sysroot prefix; see \fB\-\-sysroot\fR and \fB\-isysroot\fR.
9053 .IP "\fB\-iquote\fR \fIdir\fR" 4
9054 .IX Item "-iquote dir"
9055 Search \fIdir\fR only for header files requested with
9056 \&\f(CW\*(C`#include\ "\f(CIfile\f(CW"\*(C'\fR; they are not searched for
9057 \&\f(CW\*(C`#include\ <\f(CIfile\f(CW>\*(C'\fR, before all directories specified by
9058 \&\fB\-I\fR and before the standard system directories.
9059 If \fIdir\fR begins with \f(CW\*(C`=\*(C'\fR, then the \f(CW\*(C`=\*(C'\fR will be replaced
9060 by the sysroot prefix; see \fB\-\-sysroot\fR and \fB\-isysroot\fR.
9061 .IP "\fB\-fdirectives\-only\fR" 4
9062 .IX Item "-fdirectives-only"
9063 When preprocessing, handle directives, but do not expand macros.
9064 .Sp
9065 The option's behavior depends on the \fB\-E\fR and \fB\-fpreprocessed\fR
9066 options.
9067 .Sp
9068 With \fB\-E\fR, preprocessing is limited to the handling of directives
9069 such as \f(CW\*(C`#define\*(C'\fR, \f(CW\*(C`#ifdef\*(C'\fR, and \f(CW\*(C`#error\*(C'\fR.  Other
9070 preprocessor operations, such as macro expansion and trigraph
9071 conversion are not performed.  In addition, the \fB\-dD\fR option is
9072 implicitly enabled.
9073 .Sp
9074 With \fB\-fpreprocessed\fR, predefinition of command line and most
9075 builtin macros is disabled.  Macros such as \f(CW\*(C`_\|_LINE_\|_\*(C'\fR, which are
9076 contextually dependent, are handled normally.  This enables compilation of
9077 files previously preprocessed with \f(CW\*(C`\-E \-fdirectives\-only\*(C'\fR.
9078 .Sp
9079 With both \fB\-E\fR and \fB\-fpreprocessed\fR, the rules for
9080 \&\fB\-fpreprocessed\fR take precedence.  This enables full preprocessing of
9081 files previously preprocessed with \f(CW\*(C`\-E \-fdirectives\-only\*(C'\fR.
9082 .IP "\fB\-fdollars\-in\-identifiers\fR" 4
9083 .IX Item "-fdollars-in-identifiers"
9084 Accept \fB$\fR in identifiers.
9085 .IP "\fB\-fextended\-identifiers\fR" 4
9086 .IX Item "-fextended-identifiers"
9087 Accept universal character names in identifiers.  This option is
9088 experimental; in a future version of \s-1GCC\s0, it will be enabled by
9089 default for C99 and \*(C+.
9090 .IP "\fB\-fpreprocessed\fR" 4
9091 .IX Item "-fpreprocessed"
9092 Indicate to the preprocessor that the input file has already been
9093 preprocessed.  This suppresses things like macro expansion, trigraph
9094 conversion, escaped newline splicing, and processing of most directives.
9095 The preprocessor still recognizes and removes comments, so that you can
9096 pass a file preprocessed with \fB\-C\fR to the compiler without
9097 problems.  In this mode the integrated preprocessor is little more than
9098 a tokenizer for the front ends.
9099 .Sp
9100 \&\fB\-fpreprocessed\fR is implicit if the input file has one of the
9101 extensions \fB.i\fR, \fB.ii\fR or \fB.mi\fR.  These are the
9102 extensions that \s-1GCC\s0 uses for preprocessed files created by
9103 \&\fB\-save\-temps\fR.
9104 .IP "\fB\-ftabstop=\fR\fIwidth\fR" 4
9105 .IX Item "-ftabstop=width"
9106 Set the distance between tab stops.  This helps the preprocessor report
9107 correct column numbers in warnings or errors, even if tabs appear on the
9108 line.  If the value is less than 1 or greater than 100, the option is
9109 ignored.  The default is 8.
9110 .IP "\fB\-fdebug\-cpp\fR" 4
9111 .IX Item "-fdebug-cpp"
9112 This option is only useful for debugging \s-1GCC\s0.  When used with
9113 \&\fB\-E\fR, dumps debugging information about location maps.  Every
9114 token in the output is preceded by the dump of the map its location
9115 belongs to.  The dump of the map holding the location of a token would
9116 be:
9117 .Sp
9118 .Vb 1
9119 \&        {"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>}
9120 .Ve
9121 .Sp
9122 When used without \fB\-E\fR, this option has no effect.
9123 .IP "\fB\-ftrack\-macro\-expansion\fR[\fB=\fR\fIlevel\fR]" 4
9124 .IX Item "-ftrack-macro-expansion[=level]"
9125 Track locations of tokens across macro expansions. This allows the
9126 compiler to emit diagnostic about the current macro expansion stack
9127 when a compilation error occurs in a macro expansion. Using this
9128 option makes the preprocessor and the compiler consume more
9129 memory. The \fIlevel\fR parameter can be used to choose the level of
9130 precision of token location tracking thus decreasing the memory
9131 consumption if necessary. Value \fB0\fR of \fIlevel\fR de-activates
9132 this option just as if no \fB\-ftrack\-macro\-expansion\fR was present
9133 on the command line. Value \fB1\fR tracks tokens locations in a
9134 degraded mode for the sake of minimal memory overhead. In this mode
9135 all tokens resulting from the expansion of an argument of a
9136 function-like macro have the same location. Value \fB2\fR tracks
9137 tokens locations completely. This value is the most memory hungry.
9138 When this option is given no argument, the default parameter value is
9139 \&\fB2\fR.
9140 .IP "\fB\-fexec\-charset=\fR\fIcharset\fR" 4
9141 .IX Item "-fexec-charset=charset"
9142 Set the execution character set, used for string and character
9143 constants.  The default is \s-1UTF\-8\s0.  \fIcharset\fR can be any encoding
9144 supported by the system's \f(CW\*(C`iconv\*(C'\fR library routine.
9145 .IP "\fB\-fwide\-exec\-charset=\fR\fIcharset\fR" 4
9146 .IX Item "-fwide-exec-charset=charset"
9147 Set the wide execution character set, used for wide string and
9148 character constants.  The default is \s-1UTF\-32\s0 or \s-1UTF\-16\s0, whichever
9149 corresponds to the width of \f(CW\*(C`wchar_t\*(C'\fR.  As with
9150 \&\fB\-fexec\-charset\fR, \fIcharset\fR can be any encoding supported
9151 by the system's \f(CW\*(C`iconv\*(C'\fR library routine; however, you will have
9152 problems with encodings that do not fit exactly in \f(CW\*(C`wchar_t\*(C'\fR.
9153 .IP "\fB\-finput\-charset=\fR\fIcharset\fR" 4
9154 .IX Item "-finput-charset=charset"
9155 Set the input character set, used for translation from the character
9156 set of the input file to the source character set used by \s-1GCC\s0.  If the
9157 locale does not specify, or \s-1GCC\s0 cannot get this information from the
9158 locale, the default is \s-1UTF\-8\s0.  This can be overridden by either the locale
9159 or this command line option.  Currently the command line option takes
9160 precedence if there's a conflict.  \fIcharset\fR can be any encoding
9161 supported by the system's \f(CW\*(C`iconv\*(C'\fR library routine.
9162 .IP "\fB\-fworking\-directory\fR" 4
9163 .IX Item "-fworking-directory"
9164 Enable generation of linemarkers in the preprocessor output that will
9165 let the compiler know the current working directory at the time of
9166 preprocessing.  When this option is enabled, the preprocessor will
9167 emit, after the initial linemarker, a second linemarker with the
9168 current working directory followed by two slashes.  \s-1GCC\s0 will use this
9169 directory, when it's present in the preprocessed input, as the
9170 directory emitted as the current working directory in some debugging
9171 information formats.  This option is implicitly enabled if debugging
9172 information is enabled, but this can be inhibited with the negated
9173 form \fB\-fno\-working\-directory\fR.  If the \fB\-P\fR flag is
9174 present in the command line, this option has no effect, since no
9175 \&\f(CW\*(C`#line\*(C'\fR directives are emitted whatsoever.
9176 .IP "\fB\-fno\-show\-column\fR" 4
9177 .IX Item "-fno-show-column"
9178 Do not print column numbers in diagnostics.  This may be necessary if
9179 diagnostics are being scanned by a program that does not understand the
9180 column numbers, such as \fBdejagnu\fR.
9181 .IP "\fB\-A\fR \fIpredicate\fR\fB=\fR\fIanswer\fR" 4
9182 .IX Item "-A predicate=answer"
9183 Make an assertion with the predicate \fIpredicate\fR and answer
9184 \&\fIanswer\fR.  This form is preferred to the older form \fB\-A\fR
9185 \&\fIpredicate\fR\fB(\fR\fIanswer\fR\fB)\fR, which is still supported, because
9186 it does not use shell special characters.
9187 .IP "\fB\-A \-\fR\fIpredicate\fR\fB=\fR\fIanswer\fR" 4
9188 .IX Item "-A -predicate=answer"
9189 Cancel an assertion with the predicate \fIpredicate\fR and answer
9190 \&\fIanswer\fR.
9191 .IP "\fB\-dCHARS\fR" 4
9192 .IX Item "-dCHARS"
9193 \&\fI\s-1CHARS\s0\fR is a sequence of one or more of the following characters,
9194 and must not be preceded by a space.  Other characters are interpreted
9195 by the compiler proper, or reserved for future versions of \s-1GCC\s0, and so
9196 are silently ignored.  If you specify characters whose behavior
9197 conflicts, the result is undefined.
9198 .RS 4
9199 .IP "\fBM\fR" 4
9200 .IX Item "M"
9201 Instead of the normal output, generate a list of \fB#define\fR
9202 directives for all the macros defined during the execution of the
9203 preprocessor, including predefined macros.  This gives you a way of
9204 finding out what is predefined in your version of the preprocessor.
9205 Assuming you have no file \fIfoo.h\fR, the command
9206 .Sp
9207 .Vb 1
9208 \&        touch foo.h; cpp \-dM foo.h
9209 .Ve
9210 .Sp
9211 will show all the predefined macros.
9212 .Sp
9213 If you use \fB\-dM\fR without the \fB\-E\fR option, \fB\-dM\fR is
9214 interpreted as a synonym for \fB\-fdump\-rtl\-mach\fR.
9215 .IP "\fBD\fR" 4
9216 .IX Item "D"
9217 Like \fBM\fR except in two respects: it does \fInot\fR include the
9218 predefined macros, and it outputs \fIboth\fR the \fB#define\fR
9219 directives and the result of preprocessing.  Both kinds of output go to
9220 the standard output file.
9221 .IP "\fBN\fR" 4
9222 .IX Item "N"
9223 Like \fBD\fR, but emit only the macro names, not their expansions.
9224 .IP "\fBI\fR" 4
9225 .IX Item "I"
9226 Output \fB#include\fR directives in addition to the result of
9227 preprocessing.
9228 .IP "\fBU\fR" 4
9229 .IX Item "U"
9230 Like \fBD\fR except that only macros that are expanded, or whose
9231 definedness is tested in preprocessor directives, are output; the
9232 output is delayed until the use or test of the macro; and
9233 \&\fB#undef\fR directives are also output for macros tested but
9234 undefined at the time.
9235 .RE
9236 .RS 4
9237 .RE
9238 .IP "\fB\-P\fR" 4
9239 .IX Item "-P"
9240 Inhibit generation of linemarkers in the output from the preprocessor.
9241 This might be useful when running the preprocessor on something that is
9242 not C code, and will be sent to a program which might be confused by the
9243 linemarkers.
9244 .IP "\fB\-C\fR" 4
9245 .IX Item "-C"
9246 Do not discard comments.  All comments are passed through to the output
9247 file, except for comments in processed directives, which are deleted
9248 along with the directive.
9249 .Sp
9250 You should be prepared for side effects when using \fB\-C\fR; it
9251 causes the preprocessor to treat comments as tokens in their own right.
9252 For example, comments appearing at the start of what would be a
9253 directive line have the effect of turning that line into an ordinary
9254 source line, since the first token on the line is no longer a \fB#\fR.
9255 .IP "\fB\-CC\fR" 4
9256 .IX Item "-CC"
9257 Do not discard comments, including during macro expansion.  This is
9258 like \fB\-C\fR, except that comments contained within macros are
9259 also passed through to the output file where the macro is expanded.
9260 .Sp
9261 In addition to the side-effects of the \fB\-C\fR option, the
9262 \&\fB\-CC\fR option causes all \*(C+\-style comments inside a macro
9263 to be converted to C\-style comments.  This is to prevent later use
9264 of that macro from inadvertently commenting out the remainder of
9265 the source line.
9266 .Sp
9267 The \fB\-CC\fR option is generally used to support lint comments.
9268 .IP "\fB\-traditional\-cpp\fR" 4
9269 .IX Item "-traditional-cpp"
9270 Try to imitate the behavior of old-fashioned C preprocessors, as
9271 opposed to \s-1ISO\s0 C preprocessors.
9272 .IP "\fB\-trigraphs\fR" 4
9273 .IX Item "-trigraphs"
9274 Process trigraph sequences.
9275 These are three-character sequences, all starting with \fB??\fR, that
9276 are defined by \s-1ISO\s0 C to stand for single characters.  For example,
9277 \&\fB??/\fR stands for \fB\e\fR, so \fB'??/n'\fR is a character
9278 constant for a newline.  By default, \s-1GCC\s0 ignores trigraphs, but in
9279 standard-conforming modes it converts them.  See the \fB\-std\fR and
9280 \&\fB\-ansi\fR options.
9281 .Sp
9282 The nine trigraphs and their replacements are
9283 .Sp
9284 .Vb 2
9285 \&        Trigraph:       ??(  ??)  ??<  ??>  ??=  ??/  ??\*(Aq  ??!  ??\-
9286 \&        Replacement:      [    ]    {    }    #    \e    ^    |    ~
9287 .Ve
9288 .IP "\fB\-remap\fR" 4
9289 .IX Item "-remap"
9290 Enable special code to work around file systems which only permit very
9291 short file names, such as MS-DOS.
9292 .IP "\fB\-\-help\fR" 4
9293 .IX Item "--help"
9294 .PD 0
9295 .IP "\fB\-\-target\-help\fR" 4
9296 .IX Item "--target-help"
9297 .PD
9298 Print text describing all the command line options instead of
9299 preprocessing anything.
9300 .IP "\fB\-v\fR" 4
9301 .IX Item "-v"
9302 Verbose mode.  Print out \s-1GNU\s0 \s-1CPP\s0's version number at the beginning of
9303 execution, and report the final form of the include path.
9304 .IP "\fB\-H\fR" 4
9305 .IX Item "-H"
9306 Print the name of each header file used, in addition to other normal
9307 activities.  Each name is indented to show how deep in the
9308 \&\fB#include\fR stack it is.  Precompiled header files are also
9309 printed, even if they are found to be invalid; an invalid precompiled
9310 header file is printed with \fB...x\fR and a valid one with \fB...!\fR .
9311 .IP "\fB\-version\fR" 4
9312 .IX Item "-version"
9313 .PD 0
9314 .IP "\fB\-\-version\fR" 4
9315 .IX Item "--version"
9316 .PD
9317 Print out \s-1GNU\s0 \s-1CPP\s0's version number.  With one dash, proceed to
9318 preprocess as normal.  With two dashes, exit immediately.
9319 .Sh "Passing Options to the Assembler"
9320 .IX Subsection "Passing Options to the Assembler"
9321 You can pass options to the assembler.
9322 .IP "\fB\-Wa,\fR\fIoption\fR" 4
9323 .IX Item "-Wa,option"
9324 Pass \fIoption\fR as an option to the assembler.  If \fIoption\fR
9325 contains commas, it is split into multiple options at the commas.
9326 .IP "\fB\-Xassembler\fR \fIoption\fR" 4
9327 .IX Item "-Xassembler option"
9328 Pass \fIoption\fR as an option to the assembler.  You can use this to
9329 supply system-specific assembler options that \s-1GCC\s0 does not know how to
9330 recognize.
9331 .Sp
9332 If you want to pass an option that takes an argument, you must use
9333 \&\fB\-Xassembler\fR twice, once for the option and once for the argument.
9334 .Sh "Options for Linking"
9335 .IX Subsection "Options for Linking"
9336 These options come into play when the compiler links object files into
9337 an executable output file.  They are meaningless if the compiler is
9338 not doing a link step.
9339 .IP "\fIobject-file-name\fR" 4
9340 .IX Item "object-file-name"
9341 A file name that does not end in a special recognized suffix is
9342 considered to name an object file or library.  (Object files are
9343 distinguished from libraries by the linker according to the file
9344 contents.)  If linking is done, these object files are used as input
9345 to the linker.
9346 .IP "\fB\-c\fR" 4
9347 .IX Item "-c"
9348 .PD 0
9349 .IP "\fB\-S\fR" 4
9350 .IX Item "-S"
9351 .IP "\fB\-E\fR" 4
9352 .IX Item "-E"
9353 .PD
9354 If any of these options is used, then the linker is not run, and
9355 object file names should not be used as arguments.
9356 .IP "\fB\-l\fR\fIlibrary\fR" 4
9357 .IX Item "-llibrary"
9358 .PD 0
9359 .IP "\fB\-l\fR \fIlibrary\fR" 4
9360 .IX Item "-l library"
9361 .PD
9362 Search the library named \fIlibrary\fR when linking.  (The second
9363 alternative with the library as a separate argument is only for
9364 \&\s-1POSIX\s0 compliance and is not recommended.)
9365 .Sp
9366 It makes a difference where in the command you write this option; the
9367 linker searches and processes libraries and object files in the order they
9368 are specified.  Thus, \fBfoo.o \-lz bar.o\fR searches library \fBz\fR
9369 after file \fIfoo.o\fR but before \fIbar.o\fR.  If \fIbar.o\fR refers
9370 to functions in \fBz\fR, those functions may not be loaded.
9371 .Sp
9372 The linker searches a standard list of directories for the library,
9373 which is actually a file named \fIlib\fIlibrary\fI.a\fR.  The linker
9374 then uses this file as if it had been specified precisely by name.
9375 .Sp
9376 The directories searched include several standard system directories
9377 plus any that you specify with \fB\-L\fR.
9378 .Sp
9379 Normally the files found this way are library files\-\-\-archive files
9380 whose members are object files.  The linker handles an archive file by
9381 scanning through it for members which define symbols that have so far
9382 been referenced but not defined.  But if the file that is found is an
9383 ordinary object file, it is linked in the usual fashion.  The only
9384 difference between using an \fB\-l\fR option and specifying a file name
9385 is that \fB\-l\fR surrounds \fIlibrary\fR with \fBlib\fR and \fB.a\fR
9386 and searches several directories.
9387 .IP "\fB\-lobjc\fR" 4
9388 .IX Item "-lobjc"
9389 You need this special case of the \fB\-l\fR option in order to
9390 link an Objective-C or Objective\-\*(C+ program.
9391 .IP "\fB\-nostartfiles\fR" 4
9392 .IX Item "-nostartfiles"
9393 Do not use the standard system startup files when linking.
9394 The standard system libraries are used normally, unless \fB\-nostdlib\fR
9395 or \fB\-nodefaultlibs\fR is used.
9396 .IP "\fB\-nodefaultlibs\fR" 4
9397 .IX Item "-nodefaultlibs"
9398 Do not use the standard system libraries when linking.
9399 Only the libraries you specify will be passed to the linker, options
9400 specifying linkage of the system libraries, such as \f(CW\*(C`\-static\-libgcc\*(C'\fR
9401 or \f(CW\*(C`\-shared\-libgcc\*(C'\fR, will be ignored.
9402 The standard startup files are used normally, unless \fB\-nostartfiles\fR
9403 is used.  The compiler may generate calls to \f(CW\*(C`memcmp\*(C'\fR,
9404 \&\f(CW\*(C`memset\*(C'\fR, \f(CW\*(C`memcpy\*(C'\fR and \f(CW\*(C`memmove\*(C'\fR.
9405 These entries are usually resolved by entries in
9406 libc.  These entry points should be supplied through some other
9407 mechanism when this option is specified.
9408 .IP "\fB\-nostdlib\fR" 4
9409 .IX Item "-nostdlib"
9410 Do not use the standard system startup files or libraries when linking.
9411 No startup files and only the libraries you specify will be passed to
9412 the linker, options specifying linkage of the system libraries, such as
9413 \&\f(CW\*(C`\-static\-libgcc\*(C'\fR or \f(CW\*(C`\-shared\-libgcc\*(C'\fR, will be ignored.
9414 The compiler may generate calls to \f(CW\*(C`memcmp\*(C'\fR, \f(CW\*(C`memset\*(C'\fR,
9415 \&\f(CW\*(C`memcpy\*(C'\fR and \f(CW\*(C`memmove\*(C'\fR.
9416 These entries are usually resolved by entries in
9417 libc.  These entry points should be supplied through some other
9418 mechanism when this option is specified.
9419 .Sp
9420 One of the standard libraries bypassed by \fB\-nostdlib\fR and
9421 \&\fB\-nodefaultlibs\fR is \fIlibgcc.a\fR, a library of internal subroutines
9422 which \s-1GCC\s0 uses to overcome shortcomings of particular machines, or special
9423 needs for some languages.
9424 .Sp
9425 In most cases, you need \fIlibgcc.a\fR even when you want to avoid
9426 other standard libraries.  In other words, when you specify \fB\-nostdlib\fR
9427 or \fB\-nodefaultlibs\fR you should usually specify \fB\-lgcc\fR as well.
9428 This ensures that you have no unresolved references to internal \s-1GCC\s0
9429 library subroutines.  (For example, \fB_\|_main\fR, used to ensure \*(C+
9430 constructors will be called.)
9431 .IP "\fB\-pie\fR" 4
9432 .IX Item "-pie"
9433 Produce a position independent executable on targets that support it.
9434 For predictable results, you must also specify the same set of options
9435 that were used to generate code (\fB\-fpie\fR, \fB\-fPIE\fR,
9436 or model suboptions) when you specify this option.
9437 .IP "\fB\-rdynamic\fR" 4
9438 .IX Item "-rdynamic"
9439 Pass the flag \fB\-export\-dynamic\fR to the \s-1ELF\s0 linker, on targets
9440 that support it. This instructs the linker to add all symbols, not
9441 only used ones, to the dynamic symbol table. This option is needed
9442 for some uses of \f(CW\*(C`dlopen\*(C'\fR or to allow obtaining backtraces
9443 from within a program.
9444 .IP "\fB\-s\fR" 4
9445 .IX Item "-s"
9446 Remove all symbol table and relocation information from the executable.
9447 .IP "\fB\-static\fR" 4
9448 .IX Item "-static"
9449 On systems that support dynamic linking, this prevents linking with the shared
9450 libraries.  On other systems, this option has no effect.
9451 .IP "\fB\-shared\fR" 4
9452 .IX Item "-shared"
9453 Produce a shared object which can then be linked with other objects to
9454 form an executable.  Not all systems support this option.  For predictable
9455 results, you must also specify the same set of options that were used to
9456 generate code (\fB\-fpic\fR, \fB\-fPIC\fR, or model suboptions)
9457 when you specify this option.[1]
9458 .IP "\fB\-shared\-libgcc\fR" 4
9459 .IX Item "-shared-libgcc"
9460 .PD 0
9461 .IP "\fB\-static\-libgcc\fR" 4
9462 .IX Item "-static-libgcc"
9463 .PD
9464 On systems that provide \fIlibgcc\fR as a shared library, these options
9465 force the use of either the shared or static version respectively.
9466 If no shared version of \fIlibgcc\fR was built when the compiler was
9467 configured, these options have no effect.
9468 .Sp
9469 There are several situations in which an application should use the
9470 shared \fIlibgcc\fR instead of the static version.  The most common
9471 of these is when the application wishes to throw and catch exceptions
9472 across different shared libraries.  In that case, each of the libraries
9473 as well as the application itself should use the shared \fIlibgcc\fR.
9474 .Sp
9475 Therefore, the G++ and \s-1GCJ\s0 drivers automatically add
9476 \&\fB\-shared\-libgcc\fR whenever you build a shared library or a main
9477 executable, because \*(C+ and Java programs typically use exceptions, so
9478 this is the right thing to do.
9479 .Sp
9480 If, instead, you use the \s-1GCC\s0 driver to create shared libraries, you may
9481 find that they will not always be linked with the shared \fIlibgcc\fR.
9482 If \s-1GCC\s0 finds, at its configuration time, that you have a non-GNU linker
9483 or a \s-1GNU\s0 linker that does not support option \fB\-\-eh\-frame\-hdr\fR,
9484 it will link the shared version of \fIlibgcc\fR into shared libraries
9485 by default.  Otherwise, it will take advantage of the linker and optimize
9486 away the linking with the shared version of \fIlibgcc\fR, linking with
9487 the static version of libgcc by default.  This allows exceptions to
9488 propagate through such shared libraries, without incurring relocation
9489 costs at library load time.
9490 .Sp
9491 However, if a library or main executable is supposed to throw or catch
9492 exceptions, you must link it using the G++ or \s-1GCJ\s0 driver, as appropriate
9493 for the languages used in the program, or using the option
9494 \&\fB\-shared\-libgcc\fR, such that it is linked with the shared
9495 \&\fIlibgcc\fR.
9496 .IP "\fB\-static\-libstdc++\fR" 4
9497 .IX Item "-static-libstdc++"
9498 When the \fBg++\fR program is used to link a \*(C+ program, it will
9499 normally automatically link against \fBlibstdc++\fR.  If
9500 \&\fIlibstdc++\fR is available as a shared library, and the
9501 \&\fB\-static\fR option is not used, then this will link against the
9502 shared version of \fIlibstdc++\fR.  That is normally fine.  However, it
9503 is sometimes useful to freeze the version of \fIlibstdc++\fR used by
9504 the program without going all the way to a fully static link.  The
9505 \&\fB\-static\-libstdc++\fR option directs the \fBg++\fR driver to
9506 link \fIlibstdc++\fR statically, without necessarily linking other
9507 libraries statically.
9508 .IP "\fB\-symbolic\fR" 4
9509 .IX Item "-symbolic"
9510 Bind references to global symbols when building a shared object.  Warn
9511 about any unresolved references (unless overridden by the link editor
9512 option \fB\-Xlinker \-z \-Xlinker defs\fR).  Only a few systems support
9513 this option.
9514 .IP "\fB\-T\fR \fIscript\fR" 4
9515 .IX Item "-T script"
9516 Use \fIscript\fR as the linker script.  This option is supported by most
9517 systems using the \s-1GNU\s0 linker.  On some targets, such as bare-board
9518 targets without an operating system, the \fB\-T\fR option may be required
9519 when linking to avoid references to undefined symbols.
9520 .IP "\fB\-Xlinker\fR \fIoption\fR" 4
9521 .IX Item "-Xlinker option"
9522 Pass \fIoption\fR as an option to the linker.  You can use this to
9523 supply system-specific linker options that \s-1GCC\s0 does not recognize.
9524 .Sp
9525 If you want to pass an option that takes a separate argument, you must use
9526 \&\fB\-Xlinker\fR twice, once for the option and once for the argument.
9527 For example, to pass \fB\-assert definitions\fR, you must write
9528 \&\fB\-Xlinker \-assert \-Xlinker definitions\fR.  It does not work to write
9529 \&\fB\-Xlinker \*(L"\-assert definitions\*(R"\fR, because this passes the entire
9530 string as a single argument, which is not what the linker expects.
9531 .Sp
9532 When using the \s-1GNU\s0 linker, it is usually more convenient to pass
9533 arguments to linker options using the \fIoption\fR\fB=\fR\fIvalue\fR
9534 syntax than as separate arguments.  For example, you can specify
9535 \&\fB\-Xlinker \-Map=output.map\fR rather than
9536 \&\fB\-Xlinker \-Map \-Xlinker output.map\fR.  Other linkers may not support
9537 this syntax for command-line options.
9538 .IP "\fB\-Wl,\fR\fIoption\fR" 4
9539 .IX Item "-Wl,option"
9540 Pass \fIoption\fR as an option to the linker.  If \fIoption\fR contains
9541 commas, it is split into multiple options at the commas.  You can use this
9542 syntax to pass an argument to the option.
9543 For example, \fB\-Wl,\-Map,output.map\fR passes \fB\-Map output.map\fR to the
9544 linker.  When using the \s-1GNU\s0 linker, you can also get the same effect with
9545 \&\fB\-Wl,\-Map=output.map\fR.
9546 .IP "\fB\-u\fR \fIsymbol\fR" 4
9547 .IX Item "-u symbol"
9548 Pretend the symbol \fIsymbol\fR is undefined, to force linking of
9549 library modules to define it.  You can use \fB\-u\fR multiple times with
9550 different symbols to force loading of additional library modules.
9551 .Sh "Options for Directory Search"
9552 .IX Subsection "Options for Directory Search"
9553 These options specify directories to search for header files, for
9554 libraries and for parts of the compiler:
9555 .IP "\fB\-I\fR\fIdir\fR" 4
9556 .IX Item "-Idir"
9557 Add the directory \fIdir\fR to the head of the list of directories to be
9558 searched for header files.  This can be used to override a system header
9559 file, substituting your own version, since these directories are
9560 searched before the system header file directories.  However, you should
9561 not use this option to add directories that contain vendor-supplied
9562 system header files (use \fB\-isystem\fR for that).  If you use more than
9563 one \fB\-I\fR option, the directories are scanned in left-to-right
9564 order; the standard system directories come after.
9565 .Sp
9566 If a standard system include directory, or a directory specified with
9567 \&\fB\-isystem\fR, is also specified with \fB\-I\fR, the \fB\-I\fR
9568 option will be ignored.  The directory will still be searched but as a
9569 system directory at its normal position in the system include chain.
9570 This is to ensure that \s-1GCC\s0's procedure to fix buggy system headers and
9571 the ordering for the include_next directive are not inadvertently changed.
9572 If you really need to change the search order for system directories,
9573 use the \fB\-nostdinc\fR and/or \fB\-isystem\fR options.
9574 .IP "\fB\-iplugindir=\fR\fIdir\fR" 4
9575 .IX Item "-iplugindir=dir"
9576 Set the directory to search for plugins that are passed
9577 by \fB\-fplugin=\fR\fIname\fR instead of
9578 \&\fB\-fplugin=\fR\fIpath\fR\fB/\fR\fIname\fR\fB.so\fR.  This option is not meant
9579 to be used by the user, but only passed by the driver.
9580 .IP "\fB\-iquote\fR\fIdir\fR" 4
9581 .IX Item "-iquotedir"
9582 Add the directory \fIdir\fR to the head of the list of directories to
9583 be searched for header files only for the case of \fB#include
9584 "\fR\fIfile\fR\fB"\fR; they are not searched for \fB#include <\fR\fIfile\fR\fB>\fR,
9585 otherwise just like \fB\-I\fR.
9586 .IP "\fB\-L\fR\fIdir\fR" 4
9587 .IX Item "-Ldir"
9588 Add directory \fIdir\fR to the list of directories to be searched
9589 for \fB\-l\fR.
9590 .IP "\fB\-B\fR\fIprefix\fR" 4
9591 .IX Item "-Bprefix"
9592 This option specifies where to find the executables, libraries,
9593 include files, and data files of the compiler itself.
9594 .Sp
9595 The compiler driver program runs one or more of the subprograms
9596 \&\fIcpp\fR, \fIcc1\fR, \fIas\fR and \fIld\fR.  It tries
9597 \&\fIprefix\fR as a prefix for each program it tries to run, both with and
9598 without \fImachine\fR\fB/\fR\fIversion\fR\fB/\fR.
9599 .Sp
9600 For each subprogram to be run, the compiler driver first tries the
9601 \&\fB\-B\fR prefix, if any.  If that name is not found, or if \fB\-B\fR
9602 was not specified, the driver tries two standard prefixes, 
9603 \&\fI/usr/lib/gcc/\fR and \fI/usr/local/lib/gcc/\fR.  If neither of
9604 those results in a file name that is found, the unmodified program
9605 name is searched for using the directories specified in your
9606 \&\fB\s-1PATH\s0\fR environment variable.
9607 .Sp
9608 The compiler will check to see if the path provided by the \fB\-B\fR
9609 refers to a directory, and if necessary it will add a directory
9610 separator character at the end of the path.
9611 .Sp
9612 \&\fB\-B\fR prefixes that effectively specify directory names also apply
9613 to libraries in the linker, because the compiler translates these
9614 options into \fB\-L\fR options for the linker.  They also apply to
9615 includes files in the preprocessor, because the compiler translates these
9616 options into \fB\-isystem\fR options for the preprocessor.  In this case,
9617 the compiler appends \fBinclude\fR to the prefix.
9618 .Sp
9619 The runtime support file \fIlibgcc.a\fR can also be searched for using
9620 the \fB\-B\fR prefix, if needed.  If it is not found there, the two
9621 standard prefixes above are tried, and that is all.  The file is left
9622 out of the link if it is not found by those means.
9623 .Sp
9624 Another way to specify a prefix much like the \fB\-B\fR prefix is to use
9625 the environment variable \fB\s-1GCC_EXEC_PREFIX\s0\fR.
9626 .Sp
9627 As a special kludge, if the path provided by \fB\-B\fR is
9628 \&\fI[dir/]stage\fIN\fI/\fR, where \fIN\fR is a number in the range 0 to
9629 9, then it will be replaced by \fI[dir/]include\fR.  This is to help
9630 with boot-strapping the compiler.
9631 .IP "\fB\-specs=\fR\fIfile\fR" 4
9632 .IX Item "-specs=file"
9633 Process \fIfile\fR after the compiler reads in the standard \fIspecs\fR
9634 file, in order to override the defaults which the \fIgcc\fR driver
9635 program uses when determining what switches to pass to \fIcc1\fR,
9636 \&\fIcc1plus\fR, \fIas\fR, \fIld\fR, etc.  More than one
9637 \&\fB\-specs=\fR\fIfile\fR can be specified on the command line, and they
9638 are processed in order, from left to right.
9639 .IP "\fB\-\-sysroot=\fR\fIdir\fR" 4
9640 .IX Item "--sysroot=dir"
9641 Use \fIdir\fR as the logical root directory for headers and libraries.
9642 For example, if the compiler would normally search for headers in
9643 \&\fI/usr/include\fR and libraries in \fI/usr/lib\fR, it will instead
9644 search \fI\fIdir\fI/usr/include\fR and \fI\fIdir\fI/usr/lib\fR.
9645 .Sp
9646 If you use both this option and the \fB\-isysroot\fR option, then
9647 the \fB\-\-sysroot\fR option will apply to libraries, but the
9648 \&\fB\-isysroot\fR option will apply to header files.
9649 .Sp
9650 The \s-1GNU\s0 linker (beginning with version 2.16) has the necessary support
9651 for this option.  If your linker does not support this option, the
9652 header file aspect of \fB\-\-sysroot\fR will still work, but the
9653 library aspect will not.
9654 .IP "\fB\-I\-\fR" 4
9655 .IX Item "-I-"
9656 This option has been deprecated.  Please use \fB\-iquote\fR instead for
9657 \&\fB\-I\fR directories before the \fB\-I\-\fR and remove the \fB\-I\-\fR.
9658 Any directories you specify with \fB\-I\fR options before the \fB\-I\-\fR
9659 option are searched only for the case of \fB#include "\fR\fIfile\fR\fB"\fR;
9660 they are not searched for \fB#include <\fR\fIfile\fR\fB>\fR.
9661 .Sp
9662 If additional directories are specified with \fB\-I\fR options after
9663 the \fB\-I\-\fR, these directories are searched for all \fB#include\fR
9664 directives.  (Ordinarily \fIall\fR \fB\-I\fR directories are used
9665 this way.)
9666 .Sp
9667 In addition, the \fB\-I\-\fR option inhibits the use of the current
9668 directory (where the current input file came from) as the first search
9669 directory for \fB#include "\fR\fIfile\fR\fB"\fR.  There is no way to
9670 override this effect of \fB\-I\-\fR.  With \fB\-I.\fR you can specify
9671 searching the directory that was current when the compiler was
9672 invoked.  That is not exactly the same as what the preprocessor does
9673 by default, but it is often satisfactory.
9674 .Sp
9675 \&\fB\-I\-\fR does not inhibit the use of the standard system directories
9676 for header files.  Thus, \fB\-I\-\fR and \fB\-nostdinc\fR are
9677 independent.
9678 .Sh "Specifying Target Machine and Compiler Version"
9679 .IX Subsection "Specifying Target Machine and Compiler Version"
9680 The usual way to run \s-1GCC\s0 is to run the executable called \fBgcc\fR, or
9681 \&\fImachine\fR\fB\-gcc\fR when cross-compiling, or
9682 \&\fImachine\fR\fB\-gcc\-\fR\fIversion\fR to run a version other than the
9683 one that was installed last.
9684 .Sh "Hardware Models and Configurations"
9685 .IX Subsection "Hardware Models and Configurations"
9686 Each target machine types can have its own
9687 special options, starting with \fB\-m\fR, to choose among various
9688 hardware models or configurations\-\-\-for example, 68010 vs 68020,
9689 floating coprocessor or none.  A single installed version of the
9690 compiler can compile for any model or configuration, according to the
9691 options specified.
9692 .PP
9693 Some configurations of the compiler also support additional special
9694 options, usually for compatibility with other compilers on the same
9695 platform.
9696 .PP
9697 \fIAdapteva Epiphany Options\fR
9698 .IX Subsection "Adapteva Epiphany Options"
9699 .PP
9700 These \fB\-m\fR options are defined for Adapteva Epiphany:
9701 .IP "\fB\-mhalf\-reg\-file\fR" 4
9702 .IX Item "-mhalf-reg-file"
9703 Don't allocate any register in the range \f(CW\*(C`r32\*(C'\fR...\f(CW\*(C`r63\*(C'\fR.
9704 That allows code to run on hardware variants that lack these registers.
9705 .IP "\fB\-mprefer\-short\-insn\-regs\fR" 4
9706 .IX Item "-mprefer-short-insn-regs"
9707 Preferrentially allocate registers that allow short instruction generation.
9708 This can result in increasesd instruction count, so if this reduces or
9709 increases code size might vary from case to case.
9710 .IP "\fB\-mbranch\-cost=\fR\fInum\fR" 4
9711 .IX Item "-mbranch-cost=num"
9712 Set the cost of branches to roughly \fInum\fR \*(L"simple\*(R" instructions.
9713 This cost is only a heuristic and is not guaranteed to produce
9714 consistent results across releases.
9715 .IP "\fB\-mcmove\fR" 4
9716 .IX Item "-mcmove"
9717 Enable the generation of conditional moves.
9718 .IP "\fB\-mnops=\fR\fInum\fR" 4
9719 .IX Item "-mnops=num"
9720 Emit \fInum\fR nops before every other generated instruction.
9721 .IP "\fB\-mno\-soft\-cmpsf\fR" 4
9722 .IX Item "-mno-soft-cmpsf"
9723 For single-precision floating-point comparisons, emit an fsub instruction
9724 and test the flags.  This is faster than a software comparison, but can
9725 get incorrect results in the presence of NaNs, or when two different small
9726 numbers are compared such that their difference is calculated as zero.
9727 The default is \fB\-msoft\-cmpsf\fR, which uses slower, but IEEE-compliant,
9728 software comparisons.
9729 .IP "\fB\-mstack\-offset=\fR\fInum\fR" 4
9730 .IX Item "-mstack-offset=num"
9731 Set the offset between the top of the stack and the stack pointer.
9732 E.g., a value of 8 means that the eight bytes in the range sp+0...sp+7
9733 can be used by leaf functions without stack allocation.
9734 Values other than \fB8\fR or \fB16\fR are untested and unlikely to work.
9735 Note also that this option changes the \s-1ABI\s0, compiling a program with a
9736 different stack offset than the libraries have been compiled with
9737 will generally not work.
9738 This option can be useful if you want to evaluate if a different stack
9739 offset would give you better code, but to actually use a different stack
9740 offset to build working programs, it is recommended to configure the
9741 toolchain with the appropriate \fB\-\-with\-stack\-offset=\fR\fInum\fR option.
9742 .IP "\fB\-mno\-round\-nearest\fR" 4
9743 .IX Item "-mno-round-nearest"
9744 Make the scheduler assume that the rounding mode has been set to
9745 truncating.  The default is \fB\-mround\-nearest\fR.
9746 .IP "\fB\-mlong\-calls\fR" 4
9747 .IX Item "-mlong-calls"
9748 If not otherwise specified by an attribute, assume all calls might be beyond
9749 the offset range of the b / bl instructions, and therefore load the
9750 function address into a register before performing a (otherwise direct) call.
9751 This is the default.
9752 .IP "\fB\-mshort\-calls\fR" 4
9753 .IX Item "-mshort-calls"
9754 If not otherwise specified by an attribute, assume all direct calls are
9755 in the range of the b / bl instructions, so use these instructions
9756 for direct calls.  The default is \fB\-mlong\-calls\fR.
9757 .IP "\fB\-msmall16\fR" 4
9758 .IX Item "-msmall16"
9759 Assume addresses can be loaded as 16\-bit unsigned values.  This does not
9760 apply to function addresses for which \fB\-mlong\-calls\fR semantics
9761 are in effect.
9762 .IP "\fB\-mfp\-mode=\fR\fImode\fR" 4
9763 .IX Item "-mfp-mode=mode"
9764 Set the prevailing mode of the floating-point unit.
9765 This determines the floating-point mode that is provided and expected
9766 at function call and return time.  Making this mode match the mode you
9767 predominantly need at function start can make your programs smaller and
9768 faster by avoiding unnecessary mode switches.
9769 .Sp
9770 \&\fImode\fR can be set to one the following values:
9771 .RS 4
9772 .IP "\fBcaller\fR" 4
9773 .IX Item "caller"
9774 Any mode at function entry is valid, and retained or restored when
9775 the function returns, and when it calls other functions.
9776 This mode is useful for compiling libraries or other compilation units
9777 you might want to incorporate into different programs with different
9778 prevailing \s-1FPU\s0 modes, and the convenience of being able to use a single
9779 object file outweighs the size and speed overhead for any extra
9780 mode switching that might be needed, compared with what would be needed
9781 with a more specific choice of prevailing \s-1FPU\s0 mode.
9782 .IP "\fBtruncate\fR" 4
9783 .IX Item "truncate"
9784 This is the mode used for floating-point calculations with
9785 truncating (i.e. round towards zero) rounding mode.  That includes
9786 conversion from floating point to integer.
9787 .IP "\fBround-nearest\fR" 4
9788 .IX Item "round-nearest"
9789 This is the mode used for floating-point calculations with
9790 round-to-nearest-or-even rounding mode.
9791 .IP "\fBint\fR" 4
9792 .IX Item "int"
9793 This is the mode used to perform integer calculations in the \s-1FPU\s0, e.g.
9794 integer multiply, or integer multiply-and-accumulate.
9795 .RE
9796 .RS 4
9797 .Sp
9798 The default is \fB\-mfp\-mode=caller\fR
9799 .RE
9800 .IP "\fB\-mnosplit\-lohi\fR" 4
9801 .IX Item "-mnosplit-lohi"
9802 .PD 0
9803 .IP "\fB\-mno\-postinc\fR" 4
9804 .IX Item "-mno-postinc"
9805 .IP "\fB\-mno\-postmodify\fR" 4
9806 .IX Item "-mno-postmodify"
9807 .PD
9808 Code generation tweaks that disable, respectively, splitting of 32\-bit
9809 loads, generation of post-increment addresses, and generation of
9810 post-modify addresses.  The defaults are \fBmsplit-lohi\fR,
9811 \&\fB\-mpost\-inc\fR, and \fB\-mpost\-modify\fR.
9812 .IP "\fB\-mnovect\-double\fR" 4
9813 .IX Item "-mnovect-double"
9814 Change the preferred \s-1SIMD\s0 mode to SImode.  The default is
9815 \&\fB\-mvect\-double\fR, which uses DImode as preferred \s-1SIMD\s0 mode.
9816 .IP "\fB\-max\-vect\-align=\fR\fInum\fR" 4
9817 .IX Item "-max-vect-align=num"
9818 The maximum alignment for \s-1SIMD\s0 vector mode types.
9819 \&\fInum\fR may be 4 or 8.  The default is 8.
9820 Note that this is an \s-1ABI\s0 change, even though many library function
9821 interfaces will be unaffected, if they don't use \s-1SIMD\s0 vector modes
9822 in places where they affect size and/or alignment of relevant types.
9823 .IP "\fB\-msplit\-vecmove\-early\fR" 4
9824 .IX Item "-msplit-vecmove-early"
9825 Split vector moves into single word moves before reload.  In theory this
9826 could give better register allocation, but so far the reverse seems to be
9827 generally the case.
9828 .IP "\fB\-m1reg\-\fR\fIreg\fR" 4
9829 .IX Item "-m1reg-reg"
9830 Specify a register to hold the constant \-1, which makes loading small negative
9831 constants and certain bitmasks faster.
9832 Allowable values for reg are r43 and r63, which specify to use that register
9833 as a fixed register, and none, which means that no register is used for this
9834 purpose.  The default is \fB\-m1reg\-none\fR.
9835 .PP
9836 \fI\s-1ARM\s0 Options\fR
9837 .IX Subsection "ARM Options"
9838 .PP
9839 These \fB\-m\fR options are defined for Advanced \s-1RISC\s0 Machines (\s-1ARM\s0)
9840 architectures:
9841 .IP "\fB\-mabi=\fR\fIname\fR" 4
9842 .IX Item "-mabi=name"
9843 Generate code for the specified \s-1ABI\s0.  Permissible values are: \fBapcs-gnu\fR,
9844 \&\fBatpcs\fR, \fBaapcs\fR, \fBaapcs-linux\fR and \fBiwmmxt\fR.
9845 .IP "\fB\-mapcs\-frame\fR" 4
9846 .IX Item "-mapcs-frame"
9847 Generate a stack frame that is compliant with the \s-1ARM\s0 Procedure Call
9848 Standard for all functions, even if this is not strictly necessary for
9849 correct execution of the code.  Specifying \fB\-fomit\-frame\-pointer\fR
9850 with this option will cause the stack frames not to be generated for
9851 leaf functions.  The default is \fB\-mno\-apcs\-frame\fR.
9852 .IP "\fB\-mapcs\fR" 4
9853 .IX Item "-mapcs"
9854 This is a synonym for \fB\-mapcs\-frame\fR.
9855 .IP "\fB\-mthumb\-interwork\fR" 4
9856 .IX Item "-mthumb-interwork"
9857 Generate code that supports calling between the \s-1ARM\s0 and Thumb
9858 instruction sets.  Without this option, on pre\-v5 architectures, the
9859 two instruction sets cannot be reliably used inside one program.  The
9860 default is \fB\-mno\-thumb\-interwork\fR, since slightly larger code
9861 is generated when \fB\-mthumb\-interwork\fR is specified.  In \s-1AAPCS\s0
9862 configurations this option is meaningless.
9863 .IP "\fB\-mno\-sched\-prolog\fR" 4
9864 .IX Item "-mno-sched-prolog"
9865 Prevent the reordering of instructions in the function prologue, or the
9866 merging of those instruction with the instructions in the function's
9867 body.  This means that all functions will start with a recognizable set
9868 of instructions (or in fact one of a choice from a small set of
9869 different function prologues), and this information can be used to
9870 locate the start if functions inside an executable piece of code.  The
9871 default is \fB\-msched\-prolog\fR.
9872 .IP "\fB\-mfloat\-abi=\fR\fIname\fR" 4
9873 .IX Item "-mfloat-abi=name"
9874 Specifies which floating-point \s-1ABI\s0 to use.  Permissible values
9875 are: \fBsoft\fR, \fBsoftfp\fR and \fBhard\fR.
9876 .Sp
9877 Specifying \fBsoft\fR causes \s-1GCC\s0 to generate output containing
9878 library calls for floating-point operations.
9879 \&\fBsoftfp\fR allows the generation of code using hardware floating-point
9880 instructions, but still uses the soft-float calling conventions.
9881 \&\fBhard\fR allows generation of floating-point instructions
9882 and uses FPU-specific calling conventions.
9883 .Sp
9884 The default depends on the specific target configuration.  Note that
9885 the hard-float and soft-float ABIs are not link-compatible; you must
9886 compile your entire program with the same \s-1ABI\s0, and link with a
9887 compatible set of libraries.
9888 .IP "\fB\-mlittle\-endian\fR" 4
9889 .IX Item "-mlittle-endian"
9890 Generate code for a processor running in little-endian mode.  This is
9891 the default for all standard configurations.
9892 .IP "\fB\-mbig\-endian\fR" 4
9893 .IX Item "-mbig-endian"
9894 Generate code for a processor running in big-endian mode; the default is
9895 to compile code for a little-endian processor.
9896 .IP "\fB\-mwords\-little\-endian\fR" 4
9897 .IX Item "-mwords-little-endian"
9898 This option only applies when generating code for big-endian processors.
9899 Generate code for a little-endian word order but a big-endian byte
9900 order.  That is, a byte order of the form \fB32107654\fR.  Note: this
9901 option should only be used if you require compatibility with code for
9902 big-endian \s-1ARM\s0 processors generated by versions of the compiler prior to
9903 2.8.  This option is now deprecated.
9904 .IP "\fB\-mcpu=\fR\fIname\fR" 4
9905 .IX Item "-mcpu=name"
9906 This specifies the name of the target \s-1ARM\s0 processor.  \s-1GCC\s0 uses this name
9907 to determine what kind of instructions it can emit when generating
9908 assembly code.  Permissible names are: \fBarm2\fR, \fBarm250\fR,
9909 \&\fBarm3\fR, \fBarm6\fR, \fBarm60\fR, \fBarm600\fR, \fBarm610\fR,
9910 \&\fBarm620\fR, \fBarm7\fR, \fBarm7m\fR, \fBarm7d\fR, \fBarm7dm\fR,
9911 \&\fBarm7di\fR, \fBarm7dmi\fR, \fBarm70\fR, \fBarm700\fR,
9912 \&\fBarm700i\fR, \fBarm710\fR, \fBarm710c\fR, \fBarm7100\fR,
9913 \&\fBarm720\fR,
9914 \&\fBarm7500\fR, \fBarm7500fe\fR, \fBarm7tdmi\fR, \fBarm7tdmi\-s\fR,
9915 \&\fBarm710t\fR, \fBarm720t\fR, \fBarm740t\fR,
9916 \&\fBstrongarm\fR, \fBstrongarm110\fR, \fBstrongarm1100\fR,
9917 \&\fBstrongarm1110\fR,
9918 \&\fBarm8\fR, \fBarm810\fR, \fBarm9\fR, \fBarm9e\fR, \fBarm920\fR,
9919 \&\fBarm920t\fR, \fBarm922t\fR, \fBarm946e\-s\fR, \fBarm966e\-s\fR,
9920 \&\fBarm968e\-s\fR, \fBarm926ej\-s\fR, \fBarm940t\fR, \fBarm9tdmi\fR,
9921 \&\fBarm10tdmi\fR, \fBarm1020t\fR, \fBarm1026ej\-s\fR,
9922 \&\fBarm10e\fR, \fBarm1020e\fR, \fBarm1022e\fR,
9923 \&\fBarm1136j\-s\fR, \fBarm1136jf\-s\fR, \fBmpcore\fR, \fBmpcorenovfp\fR,
9924 \&\fBarm1156t2\-s\fR, \fBarm1156t2f\-s\fR, \fBarm1176jz\-s\fR, \fBarm1176jzf\-s\fR,
9925 \&\fBcortex\-a5\fR, \fBcortex\-a7\fR, \fBcortex\-a8\fR, \fBcortex\-a9\fR, 
9926 \&\fBcortex\-a15\fR, \fBcortex\-r4\fR, \fBcortex\-r4f\fR, \fBcortex\-r5\fR,
9927 \&\fBcortex\-m4\fR, \fBcortex\-m3\fR,
9928 \&\fBcortex\-m1\fR,
9929 \&\fBcortex\-m0\fR,
9930 \&\fBxscale\fR, \fBiwmmxt\fR, \fBiwmmxt2\fR, \fBep9312\fR,
9931 \&\fBfa526\fR, \fBfa626\fR,
9932 \&\fBfa606te\fR, \fBfa626te\fR, \fBfmp626\fR, \fBfa726te\fR.
9933 .Sp
9934 \&\fB\-mcpu=generic\-\fR\fIarch\fR is also permissible, and is
9935 equivalent to \fB\-march=\fR\fIarch\fR \fB\-mtune=generic\-\fR\fIarch\fR.
9936 See \fB\-mtune\fR for more information.
9937 .Sp
9938 \&\fB\-mcpu=native\fR causes the compiler to auto-detect the \s-1CPU\s0
9939 of the build computer.  At present, this feature is only supported on
9940 Linux, and not all architectures are recognized.  If the auto-detect is
9941 unsuccessful the option has no effect.
9942 .IP "\fB\-mtune=\fR\fIname\fR" 4
9943 .IX Item "-mtune=name"
9944 This option is very similar to the \fB\-mcpu=\fR option, except that
9945 instead of specifying the actual target processor type, and hence
9946 restricting which instructions can be used, it specifies that \s-1GCC\s0 should
9947 tune the performance of the code as if the target were of the type
9948 specified in this option, but still choosing the instructions that it
9949 will generate based on the \s-1CPU\s0 specified by a \fB\-mcpu=\fR option.
9950 For some \s-1ARM\s0 implementations better performance can be obtained by using
9951 this option.
9952 .Sp
9953 \&\fB\-mtune=generic\-\fR\fIarch\fR specifies that \s-1GCC\s0 should tune the
9954 performance for a blend of processors within architecture \fIarch\fR.
9955 The aim is to generate code that run well on the current most popular
9956 processors, balancing between optimizations that benefit some CPUs in the
9957 range, and avoiding performance pitfalls of other CPUs.  The effects of
9958 this option may change in future \s-1GCC\s0 versions as \s-1CPU\s0 models come and go.
9959 .Sp
9960 \&\fB\-mtune=native\fR causes the compiler to auto-detect the \s-1CPU\s0
9961 of the build computer.  At present, this feature is only supported on
9962 Linux, and not all architectures are recognized.  If the auto-detect is
9963 unsuccessful the option has no effect.
9964 .IP "\fB\-march=\fR\fIname\fR" 4
9965 .IX Item "-march=name"
9966 This specifies the name of the target \s-1ARM\s0 architecture.  \s-1GCC\s0 uses this
9967 name to determine what kind of instructions it can emit when generating
9968 assembly code.  This option can be used in conjunction with or instead
9969 of the \fB\-mcpu=\fR option.  Permissible names are: \fBarmv2\fR,
9970 \&\fBarmv2a\fR, \fBarmv3\fR, \fBarmv3m\fR, \fBarmv4\fR, \fBarmv4t\fR,
9971 \&\fBarmv5\fR, \fBarmv5t\fR, \fBarmv5e\fR, \fBarmv5te\fR,
9972 \&\fBarmv6\fR, \fBarmv6j\fR,
9973 \&\fBarmv6t2\fR, \fBarmv6z\fR, \fBarmv6zk\fR, \fBarmv6\-m\fR,
9974 \&\fBarmv7\fR, \fBarmv7\-a\fR, \fBarmv7\-r\fR, \fBarmv7\-m\fR,
9975 \&\fBiwmmxt\fR, \fBiwmmxt2\fR, \fBep9312\fR.
9976 .Sp
9977 \&\fB\-march=native\fR causes the compiler to auto-detect the architecture
9978 of the build computer.  At present, this feature is only supported on
9979 Linux, and not all architectures are recognized.  If the auto-detect is
9980 unsuccessful the option has no effect.
9981 .IP "\fB\-mfpu=\fR\fIname\fR" 4
9982 .IX Item "-mfpu=name"
9983 .PD 0
9984 .IP "\fB\-mfpe=\fR\fInumber\fR" 4
9985 .IX Item "-mfpe=number"
9986 .IP "\fB\-mfp=\fR\fInumber\fR" 4
9987 .IX Item "-mfp=number"
9988 .PD
9989 This specifies what floating-point hardware (or hardware emulation) is
9990 available on the target.  Permissible names are: \fBfpa\fR, \fBfpe2\fR,
9991 \&\fBfpe3\fR, \fBmaverick\fR, \fBvfp\fR, \fBvfpv3\fR, \fBvfpv3\-fp16\fR,
9992 \&\fBvfpv3\-d16\fR, \fBvfpv3\-d16\-fp16\fR, \fBvfpv3xd\fR, \fBvfpv3xd\-fp16\fR,
9993 \&\fBneon\fR, \fBneon\-fp16\fR, \fBvfpv4\fR, \fBvfpv4\-d16\fR,
9994 \&\fBfpv4\-sp\-d16\fR and \fBneon\-vfpv4\fR.
9995 \&\fB\-mfp\fR and \fB\-mfpe\fR are synonyms for
9996 \&\fB\-mfpu\fR=\fBfpe\fR\fInumber\fR, for compatibility with older versions
9997 of \s-1GCC\s0.
9998 .Sp
9999 If \fB\-msoft\-float\fR is specified this specifies the format of
10000 floating-point values.
10001 .Sp
10002 If the selected floating-point hardware includes the \s-1NEON\s0 extension
10003 (e.g. \fB\-mfpu\fR=\fBneon\fR), note that floating-point
10004 operations will not be used by \s-1GCC\s0's auto-vectorization pass unless
10005 \&\fB\-funsafe\-math\-optimizations\fR is also specified.  This is
10006 because \s-1NEON\s0 hardware does not fully implement the \s-1IEEE\s0 754 standard for
10007 floating-point arithmetic (in particular denormal values are treated as
10008 zero), so the use of \s-1NEON\s0 instructions may lead to a loss of precision.
10009 .IP "\fB\-mfp16\-format=\fR\fIname\fR" 4
10010 .IX Item "-mfp16-format=name"
10011 Specify the format of the \f(CW\*(C`_\|_fp16\*(C'\fR half-precision floating-point type.
10012 Permissible names are \fBnone\fR, \fBieee\fR, and \fBalternative\fR;
10013 the default is \fBnone\fR, in which case the \f(CW\*(C`_\|_fp16\*(C'\fR type is not
10014 defined.
10015 .IP "\fB\-mstructure\-size\-boundary=\fR\fIn\fR" 4
10016 .IX Item "-mstructure-size-boundary=n"
10017 The size of all structures and unions will be rounded up to a multiple
10018 of the number of bits set by this option.  Permissible values are 8, 32
10019 and 64.  The default value varies for different toolchains.  For the \s-1COFF\s0
10020 targeted toolchain the default value is 8.  A value of 64 is only allowed
10021 if the underlying \s-1ABI\s0 supports it.
10022 .Sp
10023 Specifying the larger number can produce faster, more efficient code, but
10024 can also increase the size of the program.  Different values are potentially
10025 incompatible.  Code compiled with one value cannot necessarily expect to
10026 work with code or libraries compiled with another value, if they exchange
10027 information using structures or unions.
10028 .IP "\fB\-mabort\-on\-noreturn\fR" 4
10029 .IX Item "-mabort-on-noreturn"
10030 Generate a call to the function \f(CW\*(C`abort\*(C'\fR at the end of a
10031 \&\f(CW\*(C`noreturn\*(C'\fR function.  It will be executed if the function tries to
10032 return.
10033 .IP "\fB\-mlong\-calls\fR" 4
10034 .IX Item "-mlong-calls"
10035 .PD 0
10036 .IP "\fB\-mno\-long\-calls\fR" 4
10037 .IX Item "-mno-long-calls"
10038 .PD
10039 Tells the compiler to perform function calls by first loading the
10040 address of the function into a register and then performing a subroutine
10041 call on this register.  This switch is needed if the target function
10042 will lie outside of the 64 megabyte addressing range of the offset based
10043 version of subroutine call instruction.
10044 .Sp
10045 Even if this switch is enabled, not all function calls will be turned
10046 into long calls.  The heuristic is that static functions, functions
10047 that have the \fBshort-call\fR attribute, functions that are inside
10048 the scope of a \fB#pragma no_long_calls\fR directive and functions whose
10049 definitions have already been compiled within the current compilation
10050 unit, will not be turned into long calls.  The exception to this rule is
10051 that weak function definitions, functions with the \fBlong-call\fR
10052 attribute or the \fBsection\fR attribute, and functions that are within
10053 the scope of a \fB#pragma long_calls\fR directive, will always be
10054 turned into long calls.
10055 .Sp
10056 This feature is not enabled by default.  Specifying
10057 \&\fB\-mno\-long\-calls\fR will restore the default behavior, as will
10058 placing the function calls within the scope of a \fB#pragma
10059 long_calls_off\fR directive.  Note these switches have no effect on how
10060 the compiler generates code to handle function calls via function
10061 pointers.
10062 .IP "\fB\-msingle\-pic\-base\fR" 4
10063 .IX Item "-msingle-pic-base"
10064 Treat the register used for \s-1PIC\s0 addressing as read-only, rather than
10065 loading it in the prologue for each function.  The runtime system is
10066 responsible for initializing this register with an appropriate value
10067 before execution begins.
10068 .IP "\fB\-mpic\-register=\fR\fIreg\fR" 4
10069 .IX Item "-mpic-register=reg"
10070 Specify the register to be used for \s-1PIC\s0 addressing.  The default is R10
10071 unless stack-checking is enabled, when R9 is used.
10072 .IP "\fB\-mcirrus\-fix\-invalid\-insns\fR" 4
10073 .IX Item "-mcirrus-fix-invalid-insns"
10074 Insert NOPs into the instruction stream to in order to work around
10075 problems with invalid Maverick instruction combinations.  This option
10076 is only valid if the \fB\-mcpu=ep9312\fR option has been used to
10077 enable generation of instructions for the Cirrus Maverick floating-point
10078 co-processor.  This option is not enabled by default, since the
10079 problem is only present in older Maverick implementations.  The default
10080 can be re-enabled by use of the \fB\-mno\-cirrus\-fix\-invalid\-insns\fR
10081 switch.
10082 .IP "\fB\-mpoke\-function\-name\fR" 4
10083 .IX Item "-mpoke-function-name"
10084 Write the name of each function into the text section, directly
10085 preceding the function prologue.  The generated code is similar to this:
10086 .Sp
10087 .Vb 9
10088 \&             t0
10089 \&                 .ascii "arm_poke_function_name", 0
10090 \&                 .align
10091 \&             t1
10092 \&                 .word 0xff000000 + (t1 \- t0)
10093 \&             arm_poke_function_name
10094 \&                 mov     ip, sp
10095 \&                 stmfd   sp!, {fp, ip, lr, pc}
10096 \&                 sub     fp, ip, #4
10097 .Ve
10098 .Sp
10099 When performing a stack backtrace, code can inspect the value of
10100 \&\f(CW\*(C`pc\*(C'\fR stored at \f(CW\*(C`fp + 0\*(C'\fR.  If the trace function then looks at
10101 location \f(CW\*(C`pc \- 12\*(C'\fR and the top 8 bits are set, then we know that
10102 there is a function name embedded immediately preceding this location
10103 and has length \f(CW\*(C`((pc[\-3]) & 0xff000000)\*(C'\fR.
10104 .IP "\fB\-mthumb\fR" 4
10105 .IX Item "-mthumb"
10106 .PD 0
10107 .IP "\fB\-marm\fR" 4
10108 .IX Item "-marm"
10109 .PD
10110 Select between generating code that executes in \s-1ARM\s0 and Thumb
10111 states.  The default for most configurations is to generate code
10112 that executes in \s-1ARM\s0 state, but the default can be changed by
10113 configuring \s-1GCC\s0 with the \fB\-\-with\-mode=\fR\fIstate\fR
10114 configure option.
10115 .IP "\fB\-mtpcs\-frame\fR" 4
10116 .IX Item "-mtpcs-frame"
10117 Generate a stack frame that is compliant with the Thumb Procedure Call
10118 Standard for all non-leaf functions.  (A leaf function is one that does
10119 not call any other functions.)  The default is \fB\-mno\-tpcs\-frame\fR.
10120 .IP "\fB\-mtpcs\-leaf\-frame\fR" 4
10121 .IX Item "-mtpcs-leaf-frame"
10122 Generate a stack frame that is compliant with the Thumb Procedure Call
10123 Standard for all leaf functions.  (A leaf function is one that does
10124 not call any other functions.)  The default is \fB\-mno\-apcs\-leaf\-frame\fR.
10125 .IP "\fB\-mcallee\-super\-interworking\fR" 4
10126 .IX Item "-mcallee-super-interworking"
10127 Gives all externally visible functions in the file being compiled an \s-1ARM\s0
10128 instruction set header which switches to Thumb mode before executing the
10129 rest of the function.  This allows these functions to be called from
10130 non-interworking code.  This option is not valid in \s-1AAPCS\s0 configurations
10131 because interworking is enabled by default.
10132 .IP "\fB\-mcaller\-super\-interworking\fR" 4
10133 .IX Item "-mcaller-super-interworking"
10134 Allows calls via function pointers (including virtual functions) to
10135 execute correctly regardless of whether the target code has been
10136 compiled for interworking or not.  There is a small overhead in the cost
10137 of executing a function pointer if this option is enabled.  This option
10138 is not valid in \s-1AAPCS\s0 configurations because interworking is enabled
10139 by default.
10140 .IP "\fB\-mtp=\fR\fIname\fR" 4
10141 .IX Item "-mtp=name"
10142 Specify the access model for the thread local storage pointer.  The valid
10143 models are \fBsoft\fR, which generates calls to \f(CW\*(C`_\|_aeabi_read_tp\*(C'\fR,
10144 \&\fBcp15\fR, which fetches the thread pointer from \f(CW\*(C`cp15\*(C'\fR directly
10145 (supported in the arm6k architecture), and \fBauto\fR, which uses the
10146 best available method for the selected processor.  The default setting is
10147 \&\fBauto\fR.
10148 .IP "\fB\-mtls\-dialect=\fR\fIdialect\fR" 4
10149 .IX Item "-mtls-dialect=dialect"
10150 Specify the dialect to use for accessing thread local storage.  Two
10151 dialects are supported \-\-\- \fBgnu\fR and \fBgnu2\fR.  The
10152 \&\fBgnu\fR dialect selects the original \s-1GNU\s0 scheme for supporting
10153 local and global dynamic \s-1TLS\s0 models.  The \fBgnu2\fR dialect
10154 selects the \s-1GNU\s0 descriptor scheme, which provides better performance
10155 for shared libraries.  The \s-1GNU\s0 descriptor scheme is compatible with
10156 the original scheme, but does require new assembler, linker and
10157 library support.  Initial and local exec \s-1TLS\s0 models are unaffected by
10158 this option and always use the original scheme.
10159 .IP "\fB\-mword\-relocations\fR" 4
10160 .IX Item "-mword-relocations"
10161 Only generate absolute relocations on word-sized values (i.e. R_ARM_ABS32).
10162 This is enabled by default on targets (uClinux, SymbianOS) where the runtime
10163 loader imposes this restriction, and when \fB\-fpic\fR or \fB\-fPIC\fR
10164 is specified.
10165 .IP "\fB\-mfix\-cortex\-m3\-ldrd\fR" 4
10166 .IX Item "-mfix-cortex-m3-ldrd"
10167 Some Cortex\-M3 cores can cause data corruption when \f(CW\*(C`ldrd\*(C'\fR instructions
10168 with overlapping destination and base registers are used.  This option avoids
10169 generating these instructions.  This option is enabled by default when
10170 \&\fB\-mcpu=cortex\-m3\fR is specified.
10171 .IP "\fB\-munaligned\-access\fR" 4
10172 .IX Item "-munaligned-access"
10173 .PD 0
10174 .IP "\fB\-mno\-unaligned\-access\fR" 4
10175 .IX Item "-mno-unaligned-access"
10176 .PD
10177 Enables (or disables) reading and writing of 16\- and 32\- bit values
10178 from addresses that are not 16\- or 32\- bit aligned.  By default
10179 unaligned access is disabled for all pre\-ARMv6 and all ARMv6\-M
10180 architectures, and enabled for all other architectures.  If unaligned
10181 access is not enabled then words in packed data structures will be
10182 accessed a byte at a time.
10183 .Sp
10184 The \s-1ARM\s0 attribute \f(CW\*(C`Tag_CPU_unaligned_access\*(C'\fR will be set in the
10185 generated object file to either true or false, depending upon the
10186 setting of this option.  If unaligned access is enabled then the
10187 preprocessor symbol \f(CW\*(C`_\|_ARM_FEATURE_UNALIGNED\*(C'\fR will also be
10188 defined.
10189 .PP
10190 \fI\s-1AVR\s0 Options\fR
10191 .IX Subsection "AVR Options"
10192 .IP "\fB\-mmcu=\fR\fImcu\fR" 4
10193 .IX Item "-mmcu=mcu"
10194 Specify Atmel \s-1AVR\s0 instruction set architectures (\s-1ISA\s0) or \s-1MCU\s0 type.
10195 .Sp
10196 The default for this option is@tie{}\f(CW\*(C`avr2\*(C'\fR.
10197 .Sp
10198 \&\s-1GCC\s0 supports the following \s-1AVR\s0 devices and ISAs:
10199 .RS 4
10200 .ie n .IP """avr2""" 4
10201 .el .IP "\f(CWavr2\fR" 4
10202 .IX Item "avr2"
10203 \&\*(L"Classic\*(R" devices with up to 8@tie{}KiB of program memory.
10204 \&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`attiny22\*(C'\fR, \f(CW\*(C`attiny26\*(C'\fR, \f(CW\*(C`at90c8534\*(C'\fR,
10205 \&\f(CW\*(C`at90s2313\*(C'\fR, \f(CW\*(C`at90s2323\*(C'\fR, \f(CW\*(C`at90s2333\*(C'\fR,
10206 \&\f(CW\*(C`at90s2343\*(C'\fR, \f(CW\*(C`at90s4414\*(C'\fR, \f(CW\*(C`at90s4433\*(C'\fR,
10207 \&\f(CW\*(C`at90s4434\*(C'\fR, \f(CW\*(C`at90s8515\*(C'\fR, \f(CW\*(C`at90s8535\*(C'\fR.
10208 .ie n .IP """avr25""" 4
10209 .el .IP "\f(CWavr25\fR" 4
10210 .IX Item "avr25"
10211 \&\*(L"Classic\*(R" devices with up to 8@tie{}KiB of program memory and with
10212 the \f(CW\*(C`MOVW\*(C'\fR instruction.
10213 \&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`ata6289\*(C'\fR, \f(CW\*(C`attiny13\*(C'\fR, \f(CW\*(C`attiny13a\*(C'\fR,
10214 \&\f(CW\*(C`attiny2313\*(C'\fR, \f(CW\*(C`attiny2313a\*(C'\fR, \f(CW\*(C`attiny24\*(C'\fR,
10215 \&\f(CW\*(C`attiny24a\*(C'\fR, \f(CW\*(C`attiny25\*(C'\fR, \f(CW\*(C`attiny261\*(C'\fR,
10216 \&\f(CW\*(C`attiny261a\*(C'\fR, \f(CW\*(C`attiny43u\*(C'\fR, \f(CW\*(C`attiny4313\*(C'\fR,
10217 \&\f(CW\*(C`attiny44\*(C'\fR, \f(CW\*(C`attiny44a\*(C'\fR, \f(CW\*(C`attiny45\*(C'\fR, \f(CW\*(C`attiny461\*(C'\fR,
10218 \&\f(CW\*(C`attiny461a\*(C'\fR, \f(CW\*(C`attiny48\*(C'\fR, \f(CW\*(C`attiny84\*(C'\fR, \f(CW\*(C`attiny84a\*(C'\fR,
10219 \&\f(CW\*(C`attiny85\*(C'\fR, \f(CW\*(C`attiny861\*(C'\fR, \f(CW\*(C`attiny861a\*(C'\fR, \f(CW\*(C`attiny87\*(C'\fR,
10220 \&\f(CW\*(C`attiny88\*(C'\fR, \f(CW\*(C`at86rf401\*(C'\fR.
10221 .ie n .IP """avr3""" 4
10222 .el .IP "\f(CWavr3\fR" 4
10223 .IX Item "avr3"
10224 \&\*(L"Classic\*(R" devices with 16@tie{}KiB up to 64@tie{}KiB of  program memory.
10225 \&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`at43usb355\*(C'\fR, \f(CW\*(C`at76c711\*(C'\fR.
10226 .ie n .IP """avr31""" 4
10227 .el .IP "\f(CWavr31\fR" 4
10228 .IX Item "avr31"
10229 \&\*(L"Classic\*(R" devices with 128@tie{}KiB of program memory.
10230 \&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`atmega103\*(C'\fR, \f(CW\*(C`at43usb320\*(C'\fR.
10231 .ie n .IP """avr35""" 4
10232 .el .IP "\f(CWavr35\fR" 4
10233 .IX Item "avr35"
10234 \&\*(L"Classic\*(R" devices with 16@tie{}KiB up to 64@tie{}KiB of program
10235 memory and with the \f(CW\*(C`MOVW\*(C'\fR instruction.
10236 \&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`atmega16u2\*(C'\fR, \f(CW\*(C`atmega32u2\*(C'\fR,
10237 \&\f(CW\*(C`atmega8u2\*(C'\fR, \f(CW\*(C`attiny167\*(C'\fR, \f(CW\*(C`at90usb162\*(C'\fR,
10238 \&\f(CW\*(C`at90usb82\*(C'\fR.
10239 .ie n .IP """avr4""" 4
10240 .el .IP "\f(CWavr4\fR" 4
10241 .IX Item "avr4"
10242 \&\*(L"Enhanced\*(R" devices with up to 8@tie{}KiB of program memory.
10243 \&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`atmega48\*(C'\fR, \f(CW\*(C`atmega48a\*(C'\fR,
10244 \&\f(CW\*(C`atmega48p\*(C'\fR, \f(CW\*(C`atmega8\*(C'\fR, \f(CW\*(C`atmega8hva\*(C'\fR,
10245 \&\f(CW\*(C`atmega8515\*(C'\fR, \f(CW\*(C`atmega8535\*(C'\fR, \f(CW\*(C`atmega88\*(C'\fR,
10246 \&\f(CW\*(C`atmega88a\*(C'\fR, \f(CW\*(C`atmega88p\*(C'\fR, \f(CW\*(C`atmega88pa\*(C'\fR,
10247 \&\f(CW\*(C`at90pwm1\*(C'\fR, \f(CW\*(C`at90pwm2\*(C'\fR, \f(CW\*(C`at90pwm2b\*(C'\fR, \f(CW\*(C`at90pwm3\*(C'\fR,
10248 \&\f(CW\*(C`at90pwm3b\*(C'\fR, \f(CW\*(C`at90pwm81\*(C'\fR.
10249 .ie n .IP """avr5""" 4
10250 .el .IP "\f(CWavr5\fR" 4
10251 .IX Item "avr5"
10252 \&\*(L"Enhanced\*(R" devices with 16@tie{}KiB up to 64@tie{}KiB of program memory.
10253 \&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`atmega16\*(C'\fR, \f(CW\*(C`atmega16a\*(C'\fR,
10254 \&\f(CW\*(C`atmega16hva\*(C'\fR, \f(CW\*(C`atmega16hva2\*(C'\fR, \f(CW\*(C`atmega16hvb\*(C'\fR,
10255 \&\f(CW\*(C`atmega16m1\*(C'\fR, \f(CW\*(C`atmega16u4\*(C'\fR, \f(CW\*(C`atmega161\*(C'\fR,
10256 \&\f(CW\*(C`atmega162\*(C'\fR, \f(CW\*(C`atmega163\*(C'\fR, \f(CW\*(C`atmega164a\*(C'\fR,
10257 \&\f(CW\*(C`atmega164p\*(C'\fR, \f(CW\*(C`atmega165\*(C'\fR, \f(CW\*(C`atmega165a\*(C'\fR,
10258 \&\f(CW\*(C`atmega165p\*(C'\fR, \f(CW\*(C`atmega168\*(C'\fR, \f(CW\*(C`atmega168a\*(C'\fR,
10259 \&\f(CW\*(C`atmega168p\*(C'\fR, \f(CW\*(C`atmega169\*(C'\fR, \f(CW\*(C`atmega169a\*(C'\fR,
10260 \&\f(CW\*(C`atmega169p\*(C'\fR, \f(CW\*(C`atmega169pa\*(C'\fR, \f(CW\*(C`atmega32\*(C'\fR,
10261 \&\f(CW\*(C`atmega32c1\*(C'\fR, \f(CW\*(C`atmega32hvb\*(C'\fR, \f(CW\*(C`atmega32m1\*(C'\fR,
10262 \&\f(CW\*(C`atmega32u4\*(C'\fR, \f(CW\*(C`atmega32u6\*(C'\fR, \f(CW\*(C`atmega323\*(C'\fR,
10263 \&\f(CW\*(C`atmega324a\*(C'\fR, \f(CW\*(C`atmega324p\*(C'\fR, \f(CW\*(C`atmega324pa\*(C'\fR,
10264 \&\f(CW\*(C`atmega325\*(C'\fR, \f(CW\*(C`atmega325a\*(C'\fR, \f(CW\*(C`atmega325p\*(C'\fR,
10265 \&\f(CW\*(C`atmega3250\*(C'\fR, \f(CW\*(C`atmega3250a\*(C'\fR, \f(CW\*(C`atmega3250p\*(C'\fR,
10266 \&\f(CW\*(C`atmega328\*(C'\fR, \f(CW\*(C`atmega328p\*(C'\fR, \f(CW\*(C`atmega329\*(C'\fR,
10267 \&\f(CW\*(C`atmega329a\*(C'\fR, \f(CW\*(C`atmega329p\*(C'\fR, \f(CW\*(C`atmega329pa\*(C'\fR,
10268 \&\f(CW\*(C`atmega3290\*(C'\fR, \f(CW\*(C`atmega3290a\*(C'\fR, \f(CW\*(C`atmega3290p\*(C'\fR,
10269 \&\f(CW\*(C`atmega406\*(C'\fR, \f(CW\*(C`atmega64\*(C'\fR, \f(CW\*(C`atmega64c1\*(C'\fR,
10270 \&\f(CW\*(C`atmega64hve\*(C'\fR, \f(CW\*(C`atmega64m1\*(C'\fR, \f(CW\*(C`atmega640\*(C'\fR,
10271 \&\f(CW\*(C`atmega644\*(C'\fR, \f(CW\*(C`atmega644a\*(C'\fR, \f(CW\*(C`atmega644p\*(C'\fR,
10272 \&\f(CW\*(C`atmega644pa\*(C'\fR, \f(CW\*(C`atmega645\*(C'\fR, \f(CW\*(C`atmega645a\*(C'\fR,
10273 \&\f(CW\*(C`atmega645p\*(C'\fR, \f(CW\*(C`atmega6450\*(C'\fR, \f(CW\*(C`atmega6450a\*(C'\fR,
10274 \&\f(CW\*(C`atmega6450p\*(C'\fR, \f(CW\*(C`atmega649\*(C'\fR, \f(CW\*(C`atmega649a\*(C'\fR,
10275 \&\f(CW\*(C`atmega649p\*(C'\fR, \f(CW\*(C`atmega6490\*(C'\fR, \f(CW\*(C`at90can32\*(C'\fR,
10276 \&\f(CW\*(C`at90can64\*(C'\fR, \f(CW\*(C`at90pwm216\*(C'\fR, \f(CW\*(C`at90pwm316\*(C'\fR,
10277 \&\f(CW\*(C`at90scr100\*(C'\fR, \f(CW\*(C`at90usb646\*(C'\fR, \f(CW\*(C`at90usb647\*(C'\fR, \f(CW\*(C`at94k\*(C'\fR,
10278 \&\f(CW\*(C`m3000\*(C'\fR.
10279 .ie n .IP """avr51""" 4
10280 .el .IP "\f(CWavr51\fR" 4
10281 .IX Item "avr51"
10282 \&\*(L"Enhanced\*(R" devices with 128@tie{}KiB of program memory.
10283 \&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`atmega128\*(C'\fR, \f(CW\*(C`atmega128rfa1\*(C'\fR,
10284 \&\f(CW\*(C`atmega1280\*(C'\fR, \f(CW\*(C`atmega1281\*(C'\fR, \f(CW\*(C`atmega1284p\*(C'\fR,
10285 \&\f(CW\*(C`at90can128\*(C'\fR, \f(CW\*(C`at90usb1286\*(C'\fR, \f(CW\*(C`at90usb1287\*(C'\fR.
10286 .ie n .IP """avr6""" 4
10287 .el .IP "\f(CWavr6\fR" 4
10288 .IX Item "avr6"
10289 \&\*(L"Enhanced\*(R" devices with 3\-byte \s-1PC\s0, i.e. with more than
10290 128@tie{}KiB of program memory.
10291 \&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`atmega2560\*(C'\fR, \f(CW\*(C`atmega2561\*(C'\fR.
10292 .ie n .IP """avrxmega2""" 4
10293 .el .IP "\f(CWavrxmega2\fR" 4
10294 .IX Item "avrxmega2"
10295 \&\*(L"\s-1XMEGA\s0\*(R" devices with more than 8@tie{}KiB and up to 64@tie{}KiB of
10296 program memory.
10297 \&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`atxmega16a4\*(C'\fR, \f(CW\*(C`atxmega16d4\*(C'\fR,
10298 \&\f(CW\*(C`atxmega16x1\*(C'\fR, \f(CW\*(C`atxmega32a4\*(C'\fR, \f(CW\*(C`atxmega32d4\*(C'\fR,
10299 \&\f(CW\*(C`atxmega32x1\*(C'\fR.
10300 .ie n .IP """avrxmega4""" 4
10301 .el .IP "\f(CWavrxmega4\fR" 4
10302 .IX Item "avrxmega4"
10303 \&\*(L"\s-1XMEGA\s0\*(R" devices with more than 64@tie{}KiB and up to 128@tie{}KiB of
10304 program memory.
10305 \&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`atxmega64a3\*(C'\fR, \f(CW\*(C`atxmega64d3\*(C'\fR.
10306 .ie n .IP """avrxmega5""" 4
10307 .el .IP "\f(CWavrxmega5\fR" 4
10308 .IX Item "avrxmega5"
10309 \&\*(L"\s-1XMEGA\s0\*(R" devices with more than 64@tie{}KiB and up to 128@tie{}KiB of
10310 program memory and more than 64@tie{}KiB of \s-1RAM\s0.
10311 \&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`atxmega64a1\*(C'\fR, \f(CW\*(C`atxmega64a1u\*(C'\fR.
10312 .ie n .IP """avrxmega6""" 4
10313 .el .IP "\f(CWavrxmega6\fR" 4
10314 .IX Item "avrxmega6"
10315 \&\*(L"\s-1XMEGA\s0\*(R" devices with more than 128@tie{}KiB of program memory.
10316 \&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`atxmega128a3\*(C'\fR, \f(CW\*(C`atxmega128d3\*(C'\fR,
10317 \&\f(CW\*(C`atxmega192a3\*(C'\fR, \f(CW\*(C`atxmega192d3\*(C'\fR, \f(CW\*(C`atxmega256a3\*(C'\fR,
10318 \&\f(CW\*(C`atxmega256a3b\*(C'\fR, \f(CW\*(C`atxmega256a3bu\*(C'\fR, \f(CW\*(C`atxmega256d3\*(C'\fR.
10319 .ie n .IP """avrxmega7""" 4
10320 .el .IP "\f(CWavrxmega7\fR" 4
10321 .IX Item "avrxmega7"
10322 \&\*(L"\s-1XMEGA\s0\*(R" devices with more than 128@tie{}KiB of program memory and
10323 more than 64@tie{}KiB of \s-1RAM\s0.
10324 \&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`atxmega128a1\*(C'\fR, \f(CW\*(C`atxmega128a1u\*(C'\fR.
10325 .ie n .IP """avr1""" 4
10326 .el .IP "\f(CWavr1\fR" 4
10327 .IX Item "avr1"
10328 This \s-1ISA\s0 is implemented by the minimal \s-1AVR\s0 core and supported for
10329 assembler only.
10330 \&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`attiny11\*(C'\fR, \f(CW\*(C`attiny12\*(C'\fR, \f(CW\*(C`attiny15\*(C'\fR,
10331 \&\f(CW\*(C`attiny28\*(C'\fR, \f(CW\*(C`at90s1200\*(C'\fR.
10332 .RE
10333 .RS 4
10334 .RE
10335 .IP "\fB\-maccumulate\-args\fR" 4
10336 .IX Item "-maccumulate-args"
10337 Accumulate outgoing function arguments and acquire/release the needed
10338 stack space for outgoing function arguments once in function
10339 prologue/epilogue.  Without this option, outgoing arguments are pushed
10340 before calling a function and popped afterwards.
10341 .Sp
10342 Popping the arguments after the function call can be expensive on
10343 \&\s-1AVR\s0 so that accumulating the stack space might lead to smaller
10344 executables because arguments need not to be removed from the
10345 stack after such a function call.
10346 .Sp
10347 This option can lead to reduced code size for functions that perform
10348 several calls to functions that get their arguments on the stack like
10349 calls to printf-like functions.
10350 .IP "\fB\-mbranch\-cost=\fR\fIcost\fR" 4
10351 .IX Item "-mbranch-cost=cost"
10352 Set the branch costs for conditional branch instructions to
10353 \&\fIcost\fR.  Reasonable values for \fIcost\fR are small, non-negative
10354 integers. The default branch cost is 0.
10355 .IP "\fB\-mcall\-prologues\fR" 4
10356 .IX Item "-mcall-prologues"
10357 Functions prologues/epilogues are expanded as calls to appropriate
10358 subroutines.  Code size is smaller.
10359 .IP "\fB\-mint8\fR" 4
10360 .IX Item "-mint8"
10361 Assume \f(CW\*(C`int\*(C'\fR to be 8\-bit integer.  This affects the sizes of all types: a
10362 \&\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,
10363 and \f(CW\*(C`long long\*(C'\fR is 4 bytes.  Please note that this option does not
10364 conform to the C standards, but it results in smaller code
10365 size.
10366 .IP "\fB\-mno\-interrupts\fR" 4
10367 .IX Item "-mno-interrupts"
10368 Generated code is not compatible with hardware interrupts.
10369 Code size is smaller.
10370 .IP "\fB\-mrelax\fR" 4
10371 .IX Item "-mrelax"
10372 Try to replace \f(CW\*(C`CALL\*(C'\fR resp. \f(CW\*(C`JMP\*(C'\fR instruction by the shorter
10373 \&\f(CW\*(C`RCALL\*(C'\fR resp. \f(CW\*(C`RJMP\*(C'\fR instruction if applicable.
10374 Setting \f(CW\*(C`\-mrelax\*(C'\fR just adds the \f(CW\*(C`\-\-relax\*(C'\fR option to the
10375 linker command line when the linker is called.
10376 .Sp
10377 Jump relaxing is performed by the linker because jump offsets are not
10378 known before code is located. Therefore, the assembler code generated by the
10379 compiler is the same, but the instructions in the executable may
10380 differ from instructions in the assembler code.
10381 .Sp
10382 Relaxing must be turned on if linker stubs are needed, see the
10383 section on \f(CW\*(C`EIND\*(C'\fR and linker stubs below.
10384 .IP "\fB\-mshort\-calls\fR" 4
10385 .IX Item "-mshort-calls"
10386 This option has been deprecated and will be removed in \s-1GCC\s0 4.8.
10387 See \f(CW\*(C`\-mrelax\*(C'\fR for a replacement.
10388 .Sp
10389 Use \f(CW\*(C`RCALL\*(C'\fR/\f(CW\*(C`RJMP\*(C'\fR instructions even on devices with
10390 16@tie{}KiB or more of program memory, i.e. on devices that
10391 have the \f(CW\*(C`CALL\*(C'\fR and \f(CW\*(C`JMP\*(C'\fR instructions.
10392 .IP "\fB\-msp8\fR" 4
10393 .IX Item "-msp8"
10394 Treat the stack pointer register as an 8\-bit register,
10395 i.e. assume the high byte of the stack pointer is zero.
10396 In general, you don't need to set this option by hand.
10397 .Sp
10398 This option is used internally by the compiler to select and
10399 build multilibs for architectures \f(CW\*(C`avr2\*(C'\fR and \f(CW\*(C`avr25\*(C'\fR.
10400 These architectures mix devices with and without \f(CW\*(C`SPH\*(C'\fR.
10401 For any setting other than \f(CW\*(C`\-mmcu=avr2\*(C'\fR or \f(CW\*(C`\-mmcu=avr25\*(C'\fR
10402 the compiler driver will add or remove this option from the compiler
10403 proper's command line, because the compiler then knows if the device
10404 or architecture has an 8\-bit stack pointer and thus no \f(CW\*(C`SPH\*(C'\fR
10405 register or not.
10406 .IP "\fB\-mstrict\-X\fR" 4
10407 .IX Item "-mstrict-X"
10408 Use address register \f(CW\*(C`X\*(C'\fR in a way proposed by the hardware.  This means
10409 that \f(CW\*(C`X\*(C'\fR is only used in indirect, post-increment or
10410 pre-decrement addressing.
10411 .Sp
10412 Without this option, the \f(CW\*(C`X\*(C'\fR register may be used in the same way
10413 as \f(CW\*(C`Y\*(C'\fR or \f(CW\*(C`Z\*(C'\fR which then is emulated by additional
10414 instructions.  
10415 For example, loading a value with \f(CW\*(C`X+const\*(C'\fR addressing with a
10416 small non-negative \f(CW\*(C`const < 64\*(C'\fR to a register \fIRn\fR is
10417 performed as
10418 .Sp
10419 .Vb 3
10420 \&        adiw r26, const   ; X += const
10421 \&        ld   <Rn>, X        ; <Rn> = *X
10422 \&        sbiw r26, const   ; X \-= const
10423 .Ve
10424 .IP "\fB\-mtiny\-stack\fR" 4
10425 .IX Item "-mtiny-stack"
10426 Only change the lower 8@tie{}bits of the stack pointer.
10427 .PP
10428 \f(CW\*(C`EIND\*(C'\fR and Devices with more than 128 Ki Bytes of Flash
10429 .IX Subsection "EIND and Devices with more than 128 Ki Bytes of Flash"
10430 .PP
10431 Pointers in the implementation are 16@tie{}bits wide.
10432 The address of a function or label is represented as word address so
10433 that indirect jumps and calls can target any code address in the
10434 range of 64@tie{}Ki words.
10435 .PP
10436 In order to facilitate indirect jump on devices with more than 128@tie{}Ki
10437 bytes of program memory space, there is a special function register called
10438 \&\f(CW\*(C`EIND\*(C'\fR that serves as most significant part of the target address
10439 when \f(CW\*(C`EICALL\*(C'\fR or \f(CW\*(C`EIJMP\*(C'\fR instructions are used.
10440 .PP
10441 Indirect jumps and calls on these devices are handled as follows by
10442 the compiler and are subject to some limitations:
10443 .IP "\(bu" 4
10444 The compiler never sets \f(CW\*(C`EIND\*(C'\fR.
10445 .IP "\(bu" 4
10446 The compiler uses \f(CW\*(C`EIND\*(C'\fR implicitely in \f(CW\*(C`EICALL\*(C'\fR/\f(CW\*(C`EIJMP\*(C'\fR
10447 instructions or might read \f(CW\*(C`EIND\*(C'\fR directly in order to emulate an
10448 indirect call/jump by means of a \f(CW\*(C`RET\*(C'\fR instruction.
10449 .IP "\(bu" 4
10450 The compiler assumes that \f(CW\*(C`EIND\*(C'\fR never changes during the startup
10451 code or during the application. In particular, \f(CW\*(C`EIND\*(C'\fR is not
10452 saved/restored in function or interrupt service routine
10453 prologue/epilogue.
10454 .IP "\(bu" 4
10455 For indirect calls to functions and computed goto, the linker
10456 generates \fIstubs\fR. Stubs are jump pads sometimes also called
10457 \&\fItrampolines\fR. Thus, the indirect call/jump jumps to such a stub.
10458 The stub contains a direct jump to the desired address.
10459 .IP "\(bu" 4
10460 Linker relaxation must be turned on so that the linker will generate
10461 the stubs correctly an all situaltion. See the compiler option
10462 \&\f(CW\*(C`\-mrelax\*(C'\fR and the linler option \f(CW\*(C`\-\-relax\*(C'\fR.
10463 There are corner cases where the linker is supposed to generate stubs
10464 but aborts without relaxation and without a helpful error message.
10465 .IP "\(bu" 4
10466 The default linker script is arranged for code with \f(CW\*(C`EIND = 0\*(C'\fR.
10467 If code is supposed to work for a setup with \f(CW\*(C`EIND != 0\*(C'\fR, a custom
10468 linker script has to be used in order to place the sections whose
10469 name start with \f(CW\*(C`.trampolines\*(C'\fR into the segment where \f(CW\*(C`EIND\*(C'\fR
10470 points to.
10471 .IP "\(bu" 4
10472 The startup code from libgcc never sets \f(CW\*(C`EIND\*(C'\fR.
10473 Notice that startup code is a blend of code from libgcc and AVR-LibC.
10474 For the impact of AVR-LibC on \f(CW\*(C`EIND\*(C'\fR, see the
10475 AVR-LibC\ user\ manual (\f(CW\*(C`http://nongnu.org/avr\-libc/user\-manual/\*(C'\fR).
10476 .IP "\(bu" 4
10477 It is legitimate for user-specific startup code to set up \f(CW\*(C`EIND\*(C'\fR
10478 early, for example by means of initialization code located in
10479 section \f(CW\*(C`.init3\*(C'\fR. Such code runs prior to general startup code
10480 that initializes \s-1RAM\s0 and calls constructors, but after the bit
10481 of startup code from AVR-LibC that sets \f(CW\*(C`EIND\*(C'\fR to the segment
10482 where the vector table is located.
10483 .Sp
10484 .Vb 1
10485 \&        #include <avr/io.h>
10486 \&        
10487 \&        static void
10488 \&        _\|_attribute_\|_((section(".init3"),naked,used,no_instrument_function))
10489 \&        init3_set_eind (void)
10490 \&        {
10491 \&          _\|_asm volatile ("ldi r24,pm_hh8(_\|_trampolines_start)\en\et"
10492 \&                          "out %i0,r24" :: "n" (&EIND) : "r24","memory");
10493 \&        }
10494 .Ve
10495 .Sp
10496 The \f(CW\*(C`_\|_trampolines_start\*(C'\fR symbol is defined in the linker script.
10497 .IP "\(bu" 4
10498 Stubs are generated automatically by the linker if
10499 the following two conditions are met:
10500 .RS 4
10501 .ie n .IP "\-<The address of a label is taken by means of the ""gs"" modifier>" 4
10502 .el .IP "\-<The address of a label is taken by means of the \f(CWgs\fR modifier>" 4
10503 .IX Item "-<The address of a label is taken by means of the gs modifier>"
10504 (short for \fIgenerate stubs\fR) like so:
10505 .Sp
10506 .Vb 2
10507 \&        LDI r24, lo8(gs(<func>))
10508 \&        LDI r25, hi8(gs(<func>))
10509 .Ve
10510 .IP "\-<The final location of that label is in a code segment>" 4
10511 .IX Item "-<The final location of that label is in a code segment>"
10512 \&\fIoutside\fR the segment where the stubs are located.
10513 .RE
10514 .RS 4
10515 .RE
10516 .IP "\(bu" 4
10517 The compiler emits such \f(CW\*(C`gs\*(C'\fR modifiers for code labels in the
10518 following situations:
10519 .RS 4
10520 .IP "\-<Taking address of a function or code label.>" 4
10521 .IX Item "-<Taking address of a function or code label.>"
10522 .PD 0
10523 .IP "\-<Computed goto.>" 4
10524 .IX Item "-<Computed goto.>"
10525 .IP "\-<If prologue-save function is used, see \fB\-mcall\-prologues\fR>" 4
10526 .IX Item "-<If prologue-save function is used, see -mcall-prologues>"
10527 .PD
10528 command-line option.
10529 .IP "\-<Switch/case dispatch tables. If you do not want such dispatch>" 4
10530 .IX Item "-<Switch/case dispatch tables. If you do not want such dispatch>"
10531 tables you can specify the \fB\-fno\-jump\-tables\fR command-line option.
10532 .IP "\-<C and \*(C+ constructors/destructors called during startup/shutdown.>" 4
10533 .IX Item "-<C and  constructors/destructors called during startup/shutdown.>"
10534 .PD 0
10535 .ie n .IP "\-<If the tools hit a ""gs()"" modifier explained above.>" 4
10536 .el .IP "\-<If the tools hit a \f(CWgs()\fR modifier explained above.>" 4
10537 .IX Item "-<If the tools hit a gs() modifier explained above.>"
10538 .RE
10539 .RS 4
10540 .RE
10541 .IP "\(bu" 4
10542 .PD
10543 Jumping to non-symbolic addresses like so is \fInot\fR supported:
10544 .Sp
10545 .Vb 5
10546 \&        int main (void)
10547 \&        {
10548 \&            /* Call function at word address 0x2 */
10549 \&            return ((int(*)(void)) 0x2)();
10550 \&        }
10551 .Ve
10552 .Sp
10553 Instead, a stub has to be set up, i.e. the function has to be called
10554 through a symbol (\f(CW\*(C`func_4\*(C'\fR in the example):
10555 .Sp
10556 .Vb 3
10557 \&        int main (void)
10558 \&        {
10559 \&            extern int func_4 (void);
10560 \&        
10561 \&            /* Call function at byte address 0x4 */
10562 \&            return func_4();
10563 \&        }
10564 .Ve
10565 .Sp
10566 and the application be linked with \f(CW\*(C`\-Wl,\-\-defsym,func_4=0x4\*(C'\fR.
10567 Alternatively, \f(CW\*(C`func_4\*(C'\fR can be defined in the linker script.
10568 .PP
10569 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
10570 .IX Subsection "Handling of the RAMPD, RAMPX, RAMPY and RAMPZ Special Function Registers"
10571 .PP
10572 Some \s-1AVR\s0 devices support memories larger than the 64@tie{}KiB range
10573 that can be accessed with 16\-bit pointers.  To access memory locations
10574 outside this 64@tie{}KiB range, the contentent of a \f(CW\*(C`RAMP\*(C'\fR
10575 register is used as high part of the address:
10576 The \f(CW\*(C`X\*(C'\fR, \f(CW\*(C`Y\*(C'\fR, \f(CW\*(C`Z\*(C'\fR address register is concatenated
10577 with the \f(CW\*(C`RAMPX\*(C'\fR, \f(CW\*(C`RAMPY\*(C'\fR, \f(CW\*(C`RAMPZ\*(C'\fR special function
10578 register, respectively, to get a wide address. Similarly,
10579 \&\f(CW\*(C`RAMPD\*(C'\fR is used together with direct addressing.
10580 .IP "\(bu" 4
10581 The startup code initializes the \f(CW\*(C`RAMP\*(C'\fR special function
10582 registers with zero.
10583 .IP "\(bu" 4
10584 If a \fB\s-1AVR\s0 Named Address Spaces,named address space\fR other than
10585 generic or \f(CW\*(C`_\|_flash\*(C'\fR is used, then \f(CW\*(C`RAMPZ\*(C'\fR is set
10586 as needed before the operation.
10587 .IP "\(bu" 4
10588 If the device supports \s-1RAM\s0 larger than 64@tie{KiB} and the compiler
10589 needs to change \f(CW\*(C`RAMPZ\*(C'\fR to accomplish an operation, \f(CW\*(C`RAMPZ\*(C'\fR
10590 is reset to zero after the operation.
10591 .IP "\(bu" 4
10592 If the device comes with a specific \f(CW\*(C`RAMP\*(C'\fR register, the \s-1ISR\s0
10593 prologue/epilogue saves/restores that \s-1SFR\s0 and initializes it with
10594 zero in case the \s-1ISR\s0 code might (implicitly) use it.
10595 .IP "\(bu" 4
10596 \&\s-1RAM\s0 larger than 64@tie{KiB} is not supported by \s-1GCC\s0 for \s-1AVR\s0 targets.
10597 If you use inline assembler to read from locations outside the
10598 16\-bit address range and change one of the \f(CW\*(C`RAMP\*(C'\fR registers,
10599 you must reset it to zero after the access.
10600 .PP
10601 \s-1AVR\s0 Built-in Macros
10602 .IX Subsection "AVR Built-in Macros"
10603 .PP
10604 \&\s-1GCC\s0 defines several built-in macros so that the user code can test
10605 for the presence or absence of features.  Almost any of the following
10606 built-in macros are deduced from device capabilities and thus
10607 triggered by the \f(CW\*(C`\-mmcu=\*(C'\fR command-line option.
10608 .PP
10609 For even more AVR-specific built-in macros see
10610 \&\fB\s-1AVR\s0 Named Address Spaces\fR and \fB\s-1AVR\s0 Built-in Functions\fR.
10611 .ie n .IP """_\|_AVR_ARCH_\|_""" 4
10612 .el .IP "\f(CW_\|_AVR_ARCH_\|_\fR" 4
10613 .IX Item "__AVR_ARCH__"
10614 Build-in macro that resolves to a decimal number that identifies the
10615 architecture and depends on the \f(CW\*(C`\-mmcu=\f(CImcu\f(CW\*(C'\fR option.
10616 Possible values are:
10617 .Sp
10618 \&\f(CW2\fR, \f(CW25\fR, \f(CW3\fR, \f(CW31\fR, \f(CW35\fR,
10619 \&\f(CW4\fR, \f(CW5\fR, \f(CW51\fR, \f(CW6\fR, \f(CW102\fR, \f(CW104\fR,
10620 \&\f(CW105\fR, \f(CW106\fR, \f(CW107\fR
10621 .Sp
10622 for \fImcu\fR=\f(CW\*(C`avr2\*(C'\fR, \f(CW\*(C`avr25\*(C'\fR, \f(CW\*(C`avr3\*(C'\fR,
10623 \&\f(CW\*(C`avr31\*(C'\fR, \f(CW\*(C`avr35\*(C'\fR, \f(CW\*(C`avr4\*(C'\fR, \f(CW\*(C`avr5\*(C'\fR, \f(CW\*(C`avr51\*(C'\fR,
10624 \&\f(CW\*(C`avr6\*(C'\fR, \f(CW\*(C`avrxmega2\*(C'\fR, \f(CW\*(C`avrxmega4\*(C'\fR, \f(CW\*(C`avrxmega5\*(C'\fR,
10625 \&\f(CW\*(C`avrxmega6\*(C'\fR, \f(CW\*(C`avrxmega7\*(C'\fR, respectively.
10626 If \fImcu\fR specifies a device, this built-in macro is set
10627 accordingly. For example, with \f(CW\*(C`\-mmcu=atmega8\*(C'\fR the macro will be
10628 defined to \f(CW4\fR.
10629 .ie n .IP """_\|_AVR_\f(CIDevice\f(CW_\|_""" 4
10630 .el .IP "\f(CW_\|_AVR_\f(CIDevice\f(CW_\|_\fR" 4
10631 .IX Item "__AVR_Device__"
10632 Setting \f(CW\*(C`\-mmcu=\f(CIdevice\f(CW\*(C'\fR defines this built-in macro which reflects
10633 the device's name. For example, \f(CW\*(C`\-mmcu=atmega8\*(C'\fR defines the
10634 built-in macro \f(CW\*(C`_\|_AVR_ATmega8_\|_\*(C'\fR, \f(CW\*(C`\-mmcu=attiny261a\*(C'\fR defines
10635 \&\f(CW\*(C`_\|_AVR_ATtiny261A_\|_\*(C'\fR, etc.
10636 .Sp
10637 The built-in macros' names follow
10638 the scheme \f(CW\*(C`_\|_AVR_\f(CIDevice\f(CW_\|_\*(C'\fR where \fIDevice\fR is
10639 the device name as from the \s-1AVR\s0 user manual. The difference between
10640 \&\fIDevice\fR in the built-in macro and \fIdevice\fR in
10641 \&\f(CW\*(C`\-mmcu=\f(CIdevice\f(CW\*(C'\fR is that the latter is always lowercase.
10642 .Sp
10643 If \fIdevice\fR is not a device but only a core architecture like
10644 \&\f(CW\*(C`avr51\*(C'\fR, this macro will not be defined.
10645 .ie n .IP """_\|_AVR_XMEGA_\|_""" 4
10646 .el .IP "\f(CW_\|_AVR_XMEGA_\|_\fR" 4
10647 .IX Item "__AVR_XMEGA__"
10648 The device/architecture belongs to the \s-1XMEGA\s0 family of devices.
10649 .ie n .IP """_\|_AVR_HAVE_ELPM_\|_""" 4
10650 .el .IP "\f(CW_\|_AVR_HAVE_ELPM_\|_\fR" 4
10651 .IX Item "__AVR_HAVE_ELPM__"
10652 The device has the the \f(CW\*(C`ELPM\*(C'\fR instruction.
10653 .ie n .IP """_\|_AVR_HAVE_ELPMX_\|_""" 4
10654 .el .IP "\f(CW_\|_AVR_HAVE_ELPMX_\|_\fR" 4
10655 .IX Item "__AVR_HAVE_ELPMX__"
10656 The device has the \f(CW\*(C`ELPM R\f(CIn\f(CW,Z\*(C'\fR and \f(CW\*(C`ELPM
10657 R\f(CIn\f(CW,Z+\*(C'\fR instructions.
10658 .ie n .IP """_\|_AVR_HAVE_MOVW_\|_""" 4
10659 .el .IP "\f(CW_\|_AVR_HAVE_MOVW_\|_\fR" 4
10660 .IX Item "__AVR_HAVE_MOVW__"
10661 The device has the \f(CW\*(C`MOVW\*(C'\fR instruction to perform 16\-bit
10662 register-register moves.
10663 .ie n .IP """_\|_AVR_HAVE_LPMX_\|_""" 4
10664 .el .IP "\f(CW_\|_AVR_HAVE_LPMX_\|_\fR" 4
10665 .IX Item "__AVR_HAVE_LPMX__"
10666 The device has the \f(CW\*(C`LPM R\f(CIn\f(CW,Z\*(C'\fR and
10667 \&\f(CW\*(C`LPM R\f(CIn\f(CW,Z+\*(C'\fR instructions.
10668 .ie n .IP """_\|_AVR_HAVE_MUL_\|_""" 4
10669 .el .IP "\f(CW_\|_AVR_HAVE_MUL_\|_\fR" 4
10670 .IX Item "__AVR_HAVE_MUL__"
10671 The device has a hardware multiplier.
10672 .ie n .IP """_\|_AVR_HAVE_JMP_CALL_\|_""" 4
10673 .el .IP "\f(CW_\|_AVR_HAVE_JMP_CALL_\|_\fR" 4
10674 .IX Item "__AVR_HAVE_JMP_CALL__"
10675 The device has the \f(CW\*(C`JMP\*(C'\fR and \f(CW\*(C`CALL\*(C'\fR instructions.
10676 This is the case for devices with at least 16@tie{}KiB of program
10677 memory and if \f(CW\*(C`\-mshort\-calls\*(C'\fR is not set.
10678 .ie n .IP """_\|_AVR_HAVE_EIJMP_EICALL_\|_""" 4
10679 .el .IP "\f(CW_\|_AVR_HAVE_EIJMP_EICALL_\|_\fR" 4
10680 .IX Item "__AVR_HAVE_EIJMP_EICALL__"
10681 .PD 0
10682 .ie n .IP """_\|_AVR_3_BYTE_PC_\|_""" 4
10683 .el .IP "\f(CW_\|_AVR_3_BYTE_PC_\|_\fR" 4
10684 .IX Item "__AVR_3_BYTE_PC__"
10685 .PD
10686 The device has the \f(CW\*(C`EIJMP\*(C'\fR and \f(CW\*(C`EICALL\*(C'\fR instructions.
10687 This is the case for devices with more than 128@tie{}KiB of program memory.
10688 This also means that the program counter
10689 (\s-1PC\s0) is 3@tie{}bytes wide.
10690 .ie n .IP """_\|_AVR_2_BYTE_PC_\|_""" 4
10691 .el .IP "\f(CW_\|_AVR_2_BYTE_PC_\|_\fR" 4
10692 .IX Item "__AVR_2_BYTE_PC__"
10693 The program counter (\s-1PC\s0) is 2@tie{}bytes wide. This is the case for devices
10694 with up to 128@tie{}KiB of program memory.
10695 .ie n .IP """_\|_AVR_HAVE_8BIT_SP_\|_""" 4
10696 .el .IP "\f(CW_\|_AVR_HAVE_8BIT_SP_\|_\fR" 4
10697 .IX Item "__AVR_HAVE_8BIT_SP__"
10698 .PD 0
10699 .ie n .IP """_\|_AVR_HAVE_16BIT_SP_\|_""" 4
10700 .el .IP "\f(CW_\|_AVR_HAVE_16BIT_SP_\|_\fR" 4
10701 .IX Item "__AVR_HAVE_16BIT_SP__"
10702 .PD
10703 The stack pointer (\s-1SP\s0) register is treated as 8\-bit respectively
10704 16\-bit register by the compiler.
10705 The definition of these macros is affected by \f(CW\*(C`\-mtiny\-stack\*(C'\fR.
10706 .ie n .IP """_\|_AVR_HAVE_SPH_\|_""" 4
10707 .el .IP "\f(CW_\|_AVR_HAVE_SPH_\|_\fR" 4
10708 .IX Item "__AVR_HAVE_SPH__"
10709 .PD 0
10710 .ie n .IP """_\|_AVR_SP8_\|_""" 4
10711 .el .IP "\f(CW_\|_AVR_SP8_\|_\fR" 4
10712 .IX Item "__AVR_SP8__"
10713 .PD
10714 The device has the \s-1SPH\s0 (high part of stack pointer) special function
10715 register or has an 8\-bit stack pointer, respectively.
10716 The definition of these macros is affected by \f(CW\*(C`\-mmcu=\*(C'\fR and
10717 in the cases of \f(CW\*(C`\-mmcu=avr2\*(C'\fR and \f(CW\*(C`\-mmcu=avr25\*(C'\fR also
10718 by \f(CW\*(C`\-msp8\*(C'\fR.
10719 .ie n .IP """_\|_AVR_HAVE_RAMPD_\|_""" 4
10720 .el .IP "\f(CW_\|_AVR_HAVE_RAMPD_\|_\fR" 4
10721 .IX Item "__AVR_HAVE_RAMPD__"
10722 .PD 0
10723 .ie n .IP """_\|_AVR_HAVE_RAMPX_\|_""" 4
10724 .el .IP "\f(CW_\|_AVR_HAVE_RAMPX_\|_\fR" 4
10725 .IX Item "__AVR_HAVE_RAMPX__"
10726 .ie n .IP """_\|_AVR_HAVE_RAMPY_\|_""" 4
10727 .el .IP "\f(CW_\|_AVR_HAVE_RAMPY_\|_\fR" 4
10728 .IX Item "__AVR_HAVE_RAMPY__"
10729 .ie n .IP """_\|_AVR_HAVE_RAMPZ_\|_""" 4
10730 .el .IP "\f(CW_\|_AVR_HAVE_RAMPZ_\|_\fR" 4
10731 .IX Item "__AVR_HAVE_RAMPZ__"
10732 .PD
10733 The device has the \f(CW\*(C`RAMPD\*(C'\fR, \f(CW\*(C`RAMPX\*(C'\fR, \f(CW\*(C`RAMPY\*(C'\fR,
10734 \&\f(CW\*(C`RAMPZ\*(C'\fR special function register, respectively.
10735 .ie n .IP """_\|_NO_INTERRUPTS_\|_""" 4
10736 .el .IP "\f(CW_\|_NO_INTERRUPTS_\|_\fR" 4
10737 .IX Item "__NO_INTERRUPTS__"
10738 This macro reflects the \f(CW\*(C`\-mno\-interrupts\*(C'\fR command line option.
10739 .ie n .IP """_\|_AVR_ERRATA_SKIP_\|_""" 4
10740 .el .IP "\f(CW_\|_AVR_ERRATA_SKIP_\|_\fR" 4
10741 .IX Item "__AVR_ERRATA_SKIP__"
10742 .PD 0
10743 .ie n .IP """_\|_AVR_ERRATA_SKIP_JMP_CALL_\|_""" 4
10744 .el .IP "\f(CW_\|_AVR_ERRATA_SKIP_JMP_CALL_\|_\fR" 4
10745 .IX Item "__AVR_ERRATA_SKIP_JMP_CALL__"
10746 .PD
10747 Some \s-1AVR\s0 devices (\s-1AT90S8515\s0, ATmega103) must not skip 32\-bit
10748 instructions because of a hardware erratum.  Skip instructions are
10749 \&\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.
10750 The second macro is only defined if \f(CW\*(C`_\|_AVR_HAVE_JMP_CALL_\|_\*(C'\fR is also
10751 set.
10752 .ie n .IP """_\|_AVR_SFR_OFFSET_\|_=\f(CIoffset\f(CW""" 4
10753 .el .IP "\f(CW_\|_AVR_SFR_OFFSET_\|_=\f(CIoffset\f(CW\fR" 4
10754 .IX Item "__AVR_SFR_OFFSET__=offset"
10755 Instructions that can address I/O special function registers directly
10756 like \f(CW\*(C`IN\*(C'\fR, \f(CW\*(C`OUT\*(C'\fR, \f(CW\*(C`SBI\*(C'\fR, etc. may use a different
10757 address as if addressed by an instruction to access \s-1RAM\s0 like \f(CW\*(C`LD\*(C'\fR
10758 or \f(CW\*(C`STS\*(C'\fR. This offset depends on the device architecture and has
10759 to be subtracted from the \s-1RAM\s0 address in order to get the
10760 respective I/O@tie{}address.
10761 .ie n .IP """_\|_WITH_AVRLIBC_\|_""" 4
10762 .el .IP "\f(CW_\|_WITH_AVRLIBC_\|_\fR" 4
10763 .IX Item "__WITH_AVRLIBC__"
10764 The compiler is configured to be used together with AVR-Libc.
10765 See the \f(CW\*(C`\-\-with\-avrlibc\*(C'\fR configure option.
10766 .PP
10767 \fIBlackfin Options\fR
10768 .IX Subsection "Blackfin Options"
10769 .IP "\fB\-mcpu=\fR\fIcpu\fR[\fB\-\fR\fIsirevision\fR]" 4
10770 .IX Item "-mcpu=cpu[-sirevision]"
10771 Specifies the name of the target Blackfin processor.  Currently, \fIcpu\fR
10772 can be one of \fBbf512\fR, \fBbf514\fR, \fBbf516\fR, \fBbf518\fR,
10773 \&\fBbf522\fR, \fBbf523\fR, \fBbf524\fR, \fBbf525\fR, \fBbf526\fR,
10774 \&\fBbf527\fR, \fBbf531\fR, \fBbf532\fR, \fBbf533\fR,
10775 \&\fBbf534\fR, \fBbf536\fR, \fBbf537\fR, \fBbf538\fR, \fBbf539\fR,
10776 \&\fBbf542\fR, \fBbf544\fR, \fBbf547\fR, \fBbf548\fR, \fBbf549\fR,
10777 \&\fBbf542m\fR, \fBbf544m\fR, \fBbf547m\fR, \fBbf548m\fR, \fBbf549m\fR,
10778 \&\fBbf561\fR, \fBbf592\fR.
10779 The optional \fIsirevision\fR specifies the silicon revision of the target
10780 Blackfin processor.  Any workarounds available for the targeted silicon revision
10781 will be enabled.  If \fIsirevision\fR is \fBnone\fR, no workarounds are enabled.
10782 If \fIsirevision\fR is \fBany\fR, all workarounds for the targeted processor
10783 will be enabled.  The \f(CW\*(C`_\|_SILICON_REVISION_\|_\*(C'\fR macro is defined to two
10784 hexadecimal digits representing the major and minor numbers in the silicon
10785 revision.  If \fIsirevision\fR is \fBnone\fR, the \f(CW\*(C`_\|_SILICON_REVISION_\|_\*(C'\fR
10786 is not defined.  If \fIsirevision\fR is \fBany\fR, the
10787 \&\f(CW\*(C`_\|_SILICON_REVISION_\|_\*(C'\fR is defined to be \f(CW0xffff\fR.
10788 If this optional \fIsirevision\fR is not used, \s-1GCC\s0 assumes the latest known
10789 silicon revision of the targeted Blackfin processor.
10790 .Sp
10791 Support for \fBbf561\fR is incomplete.  For \fBbf561\fR,
10792 Only the processor macro is defined.
10793 Without this option, \fBbf532\fR is used as the processor by default.
10794 The corresponding predefined processor macros for \fIcpu\fR is to
10795 be defined.  And for \fBbfin-elf\fR toolchain, this causes the hardware \s-1BSP\s0
10796 provided by libgloss to be linked in if \fB\-msim\fR is not given.
10797 .IP "\fB\-msim\fR" 4
10798 .IX Item "-msim"
10799 Specifies that the program will be run on the simulator.  This causes
10800 the simulator \s-1BSP\s0 provided by libgloss to be linked in.  This option
10801 has effect only for \fBbfin-elf\fR toolchain.
10802 Certain other options, such as \fB\-mid\-shared\-library\fR and
10803 \&\fB\-mfdpic\fR, imply \fB\-msim\fR.
10804 .IP "\fB\-momit\-leaf\-frame\-pointer\fR" 4
10805 .IX Item "-momit-leaf-frame-pointer"
10806 Don't keep the frame pointer in a register for leaf functions.  This
10807 avoids the instructions to save, set up and restore frame pointers and
10808 makes an extra register available in leaf functions.  The option
10809 \&\fB\-fomit\-frame\-pointer\fR removes the frame pointer for all functions,
10810 which might make debugging harder.
10811 .IP "\fB\-mspecld\-anomaly\fR" 4
10812 .IX Item "-mspecld-anomaly"
10813 When enabled, the compiler will ensure that the generated code does not
10814 contain speculative loads after jump instructions. If this option is used,
10815 \&\f(CW\*(C`_\|_WORKAROUND_SPECULATIVE_LOADS\*(C'\fR is defined.
10816 .IP "\fB\-mno\-specld\-anomaly\fR" 4
10817 .IX Item "-mno-specld-anomaly"
10818 Don't generate extra code to prevent speculative loads from occurring.
10819 .IP "\fB\-mcsync\-anomaly\fR" 4
10820 .IX Item "-mcsync-anomaly"
10821 When enabled, the compiler will ensure that the generated code does not
10822 contain \s-1CSYNC\s0 or \s-1SSYNC\s0 instructions too soon after conditional branches.
10823 If this option is used, \f(CW\*(C`_\|_WORKAROUND_SPECULATIVE_SYNCS\*(C'\fR is defined.
10824 .IP "\fB\-mno\-csync\-anomaly\fR" 4
10825 .IX Item "-mno-csync-anomaly"
10826 Don't generate extra code to prevent \s-1CSYNC\s0 or \s-1SSYNC\s0 instructions from
10827 occurring too soon after a conditional branch.
10828 .IP "\fB\-mlow\-64k\fR" 4
10829 .IX Item "-mlow-64k"
10830 When enabled, the compiler is free to take advantage of the knowledge that
10831 the entire program fits into the low 64k of memory.
10832 .IP "\fB\-mno\-low\-64k\fR" 4
10833 .IX Item "-mno-low-64k"
10834 Assume that the program is arbitrarily large.  This is the default.
10835 .IP "\fB\-mstack\-check\-l1\fR" 4
10836 .IX Item "-mstack-check-l1"
10837 Do stack checking using information placed into L1 scratchpad memory by the
10838 uClinux kernel.
10839 .IP "\fB\-mid\-shared\-library\fR" 4
10840 .IX Item "-mid-shared-library"
10841 Generate code that supports shared libraries via the library \s-1ID\s0 method.
10842 This allows for execute in place and shared libraries in an environment
10843 without virtual memory management.  This option implies \fB\-fPIC\fR.
10844 With a \fBbfin-elf\fR target, this option implies \fB\-msim\fR.
10845 .IP "\fB\-mno\-id\-shared\-library\fR" 4
10846 .IX Item "-mno-id-shared-library"
10847 Generate code that doesn't assume \s-1ID\s0 based shared libraries are being used.
10848 This is the default.
10849 .IP "\fB\-mleaf\-id\-shared\-library\fR" 4
10850 .IX Item "-mleaf-id-shared-library"
10851 Generate code that supports shared libraries via the library \s-1ID\s0 method,
10852 but assumes that this library or executable won't link against any other
10853 \&\s-1ID\s0 shared libraries.  That allows the compiler to use faster code for jumps
10854 and calls.
10855 .IP "\fB\-mno\-leaf\-id\-shared\-library\fR" 4
10856 .IX Item "-mno-leaf-id-shared-library"
10857 Do not assume that the code being compiled won't link against any \s-1ID\s0 shared
10858 libraries.  Slower code will be generated for jump and call insns.
10859 .IP "\fB\-mshared\-library\-id=n\fR" 4
10860 .IX Item "-mshared-library-id=n"
10861 Specified the identification number of the \s-1ID\s0 based shared library being
10862 compiled.  Specifying a value of 0 will generate more compact code, specifying
10863 other values will force the allocation of that number to the current
10864 library but is no more space or time efficient than omitting this option.
10865 .IP "\fB\-msep\-data\fR" 4
10866 .IX Item "-msep-data"
10867 Generate code that allows the data segment to be located in a different
10868 area of memory from the text segment.  This allows for execute in place in
10869 an environment without virtual memory management by eliminating relocations
10870 against the text section.
10871 .IP "\fB\-mno\-sep\-data\fR" 4
10872 .IX Item "-mno-sep-data"
10873 Generate code that assumes that the data segment follows the text segment.
10874 This is the default.
10875 .IP "\fB\-mlong\-calls\fR" 4
10876 .IX Item "-mlong-calls"
10877 .PD 0
10878 .IP "\fB\-mno\-long\-calls\fR" 4
10879 .IX Item "-mno-long-calls"
10880 .PD
10881 Tells the compiler to perform function calls by first loading the
10882 address of the function into a register and then performing a subroutine
10883 call on this register.  This switch is needed if the target function
10884 lies outside of the 24\-bit addressing range of the offset-based
10885 version of subroutine call instruction.
10886 .Sp
10887 This feature is not enabled by default.  Specifying
10888 \&\fB\-mno\-long\-calls\fR will restore the default behavior.  Note these
10889 switches have no effect on how the compiler generates code to handle
10890 function calls via function pointers.
10891 .IP "\fB\-mfast\-fp\fR" 4
10892 .IX Item "-mfast-fp"
10893 Link with the fast floating-point library. This library relaxes some of
10894 the \s-1IEEE\s0 floating-point standard's rules for checking inputs against
10895 Not-a-Number (\s-1NAN\s0), in the interest of performance.
10896 .IP "\fB\-minline\-plt\fR" 4
10897 .IX Item "-minline-plt"
10898 Enable inlining of \s-1PLT\s0 entries in function calls to functions that are
10899 not known to bind locally.  It has no effect without \fB\-mfdpic\fR.
10900 .IP "\fB\-mmulticore\fR" 4
10901 .IX Item "-mmulticore"
10902 Build standalone application for multicore Blackfin processor. Proper
10903 start files and link scripts will be used to support multicore.
10904 This option defines \f(CW\*(C`_\|_BFIN_MULTICORE\*(C'\fR. It can only be used with
10905 \&\fB\-mcpu=bf561\fR[\fB\-\fR\fIsirevision\fR]. It can be used with
10906 \&\fB\-mcorea\fR or \fB\-mcoreb\fR. If it's used without
10907 \&\fB\-mcorea\fR or \fB\-mcoreb\fR, single application/dual core
10908 programming model is used. In this model, the main function of Core B
10909 should be named as coreb_main. If it's used with \fB\-mcorea\fR or
10910 \&\fB\-mcoreb\fR, one application per core programming model is used.
10911 If this option is not used, single core application programming
10912 model is used.
10913 .IP "\fB\-mcorea\fR" 4
10914 .IX Item "-mcorea"
10915 Build standalone application for Core A of \s-1BF561\s0 when using
10916 one application per core programming model. Proper start files
10917 and link scripts will be used to support Core A. This option
10918 defines \f(CW\*(C`_\|_BFIN_COREA\*(C'\fR. It must be used with \fB\-mmulticore\fR.
10919 .IP "\fB\-mcoreb\fR" 4
10920 .IX Item "-mcoreb"
10921 Build standalone application for Core B of \s-1BF561\s0 when using
10922 one application per core programming model. Proper start files
10923 and link scripts will be used to support Core B. This option
10924 defines \f(CW\*(C`_\|_BFIN_COREB\*(C'\fR. When this option is used, coreb_main
10925 should be used instead of main. It must be used with
10926 \&\fB\-mmulticore\fR.
10927 .IP "\fB\-msdram\fR" 4
10928 .IX Item "-msdram"
10929 Build standalone application for \s-1SDRAM\s0. Proper start files and
10930 link scripts will be used to put the application into \s-1SDRAM\s0.
10931 Loader should initialize \s-1SDRAM\s0 before loading the application
10932 into \s-1SDRAM\s0. This option defines \f(CW\*(C`_\|_BFIN_SDRAM\*(C'\fR.
10933 .IP "\fB\-micplb\fR" 4
10934 .IX Item "-micplb"
10935 Assume that ICPLBs are enabled at run time.  This has an effect on certain
10936 anomaly workarounds.  For Linux targets, the default is to assume ICPLBs
10937 are enabled; for standalone applications the default is off.
10938 .PP
10939 \fIC6X Options\fR
10940 .IX Subsection "C6X Options"
10941 .IP "\fB\-march=\fR\fIname\fR" 4
10942 .IX Item "-march=name"
10943 This specifies the name of the target architecture.  \s-1GCC\s0 uses this
10944 name to determine what kind of instructions it can emit when generating
10945 assembly code.  Permissible names are: \fBc62x\fR,
10946 \&\fBc64x\fR, \fBc64x+\fR, \fBc67x\fR, \fBc67x+\fR, \fBc674x\fR.
10947 .IP "\fB\-mbig\-endian\fR" 4
10948 .IX Item "-mbig-endian"
10949 Generate code for a big-endian target.
10950 .IP "\fB\-mlittle\-endian\fR" 4
10951 .IX Item "-mlittle-endian"
10952 Generate code for a little-endian target.  This is the default.
10953 .IP "\fB\-msim\fR" 4
10954 .IX Item "-msim"
10955 Choose startup files and linker script suitable for the simulator.
10956 .IP "\fB\-msdata=default\fR" 4
10957 .IX Item "-msdata=default"
10958 Put small global and static data in the \fB.neardata\fR section,
10959 which is pointed to by register \f(CW\*(C`B14\*(C'\fR.  Put small uninitialized
10960 global and static data in the \fB.bss\fR section, which is adjacent
10961 to the \fB.neardata\fR section.  Put small read-only data into the
10962 \&\fB.rodata\fR section.  The corresponding sections used for large
10963 pieces of data are \fB.fardata\fR, \fB.far\fR and \fB.const\fR.
10964 .IP "\fB\-msdata=all\fR" 4
10965 .IX Item "-msdata=all"
10966 Put all data, not just small objets, into the sections reserved for
10967 small data, and use addressing relative to the \f(CW\*(C`B14\*(C'\fR register to
10968 access them.
10969 .IP "\fB\-msdata=none\fR" 4
10970 .IX Item "-msdata=none"
10971 Make no use of the sections reserved for small data, and use absolute
10972 addresses to access all data.  Put all initialized global and static
10973 data in the \fB.fardata\fR section, and all uninitialized data in the
10974 \&\fB.far\fR section.  Put all constant data into the \fB.const\fR
10975 section.
10976 .PP
10977 \fI\s-1CRIS\s0 Options\fR
10978 .IX Subsection "CRIS Options"
10979 .PP
10980 These options are defined specifically for the \s-1CRIS\s0 ports.
10981 .IP "\fB\-march=\fR\fIarchitecture-type\fR" 4
10982 .IX Item "-march=architecture-type"
10983 .PD 0
10984 .IP "\fB\-mcpu=\fR\fIarchitecture-type\fR" 4
10985 .IX Item "-mcpu=architecture-type"
10986 .PD
10987 Generate code for the specified architecture.  The choices for
10988 \&\fIarchitecture-type\fR are \fBv3\fR, \fBv8\fR and \fBv10\fR for
10989 respectively \s-1ETRAX\s0\ 4, \s-1ETRAX\s0\ 100, and \s-1ETRAX\s0\ 100\ \s-1LX\s0.
10990 Default is \fBv0\fR except for cris-axis-linux-gnu, where the default is
10991 \&\fBv10\fR.
10992 .IP "\fB\-mtune=\fR\fIarchitecture-type\fR" 4
10993 .IX Item "-mtune=architecture-type"
10994 Tune to \fIarchitecture-type\fR everything applicable about the generated
10995 code, except for the \s-1ABI\s0 and the set of available instructions.  The
10996 choices for \fIarchitecture-type\fR are the same as for
10997 \&\fB\-march=\fR\fIarchitecture-type\fR.
10998 .IP "\fB\-mmax\-stack\-frame=\fR\fIn\fR" 4
10999 .IX Item "-mmax-stack-frame=n"
11000 Warn when the stack frame of a function exceeds \fIn\fR bytes.
11001 .IP "\fB\-metrax4\fR" 4
11002 .IX Item "-metrax4"
11003 .PD 0
11004 .IP "\fB\-metrax100\fR" 4
11005 .IX Item "-metrax100"
11006 .PD
11007 The options \fB\-metrax4\fR and \fB\-metrax100\fR are synonyms for
11008 \&\fB\-march=v3\fR and \fB\-march=v8\fR respectively.
11009 .IP "\fB\-mmul\-bug\-workaround\fR" 4
11010 .IX Item "-mmul-bug-workaround"
11011 .PD 0
11012 .IP "\fB\-mno\-mul\-bug\-workaround\fR" 4
11013 .IX Item "-mno-mul-bug-workaround"
11014 .PD
11015 Work around a bug in the \f(CW\*(C`muls\*(C'\fR and \f(CW\*(C`mulu\*(C'\fR instructions for \s-1CPU\s0
11016 models where it applies.  This option is active by default.
11017 .IP "\fB\-mpdebug\fR" 4
11018 .IX Item "-mpdebug"
11019 Enable CRIS-specific verbose debug-related information in the assembly
11020 code.  This option also has the effect to turn off the \fB#NO_APP\fR
11021 formatted-code indicator to the assembler at the beginning of the
11022 assembly file.
11023 .IP "\fB\-mcc\-init\fR" 4
11024 .IX Item "-mcc-init"
11025 Do not use condition-code results from previous instruction; always emit
11026 compare and test instructions before use of condition codes.
11027 .IP "\fB\-mno\-side\-effects\fR" 4
11028 .IX Item "-mno-side-effects"
11029 Do not emit instructions with side-effects in addressing modes other than
11030 post-increment.
11031 .IP "\fB\-mstack\-align\fR" 4
11032 .IX Item "-mstack-align"
11033 .PD 0
11034 .IP "\fB\-mno\-stack\-align\fR" 4
11035 .IX Item "-mno-stack-align"
11036 .IP "\fB\-mdata\-align\fR" 4
11037 .IX Item "-mdata-align"
11038 .IP "\fB\-mno\-data\-align\fR" 4
11039 .IX Item "-mno-data-align"
11040 .IP "\fB\-mconst\-align\fR" 4
11041 .IX Item "-mconst-align"
11042 .IP "\fB\-mno\-const\-align\fR" 4
11043 .IX Item "-mno-const-align"
11044 .PD
11045 These options (no-options) arranges (eliminate arrangements) for the
11046 stack-frame, individual data and constants to be aligned for the maximum
11047 single data access size for the chosen \s-1CPU\s0 model.  The default is to
11048 arrange for 32\-bit alignment.  \s-1ABI\s0 details such as structure layout are
11049 not affected by these options.
11050 .IP "\fB\-m32\-bit\fR" 4
11051 .IX Item "-m32-bit"
11052 .PD 0
11053 .IP "\fB\-m16\-bit\fR" 4
11054 .IX Item "-m16-bit"
11055 .IP "\fB\-m8\-bit\fR" 4
11056 .IX Item "-m8-bit"
11057 .PD
11058 Similar to the stack\- data\- and const-align options above, these options
11059 arrange for stack-frame, writable data and constants to all be 32\-bit,
11060 16\-bit or 8\-bit aligned.  The default is 32\-bit alignment.
11061 .IP "\fB\-mno\-prologue\-epilogue\fR" 4
11062 .IX Item "-mno-prologue-epilogue"
11063 .PD 0
11064 .IP "\fB\-mprologue\-epilogue\fR" 4
11065 .IX Item "-mprologue-epilogue"
11066 .PD
11067 With \fB\-mno\-prologue\-epilogue\fR, the normal function prologue and
11068 epilogue which set up the stack frame are omitted and no return
11069 instructions or return sequences are generated in the code.  Use this
11070 option only together with visual inspection of the compiled code: no
11071 warnings or errors are generated when call-saved registers must be saved,
11072 or storage for local variable needs to be allocated.
11073 .IP "\fB\-mno\-gotplt\fR" 4
11074 .IX Item "-mno-gotplt"
11075 .PD 0
11076 .IP "\fB\-mgotplt\fR" 4
11077 .IX Item "-mgotplt"
11078 .PD
11079 With \fB\-fpic\fR and \fB\-fPIC\fR, don't generate (do generate)
11080 instruction sequences that load addresses for functions from the \s-1PLT\s0 part
11081 of the \s-1GOT\s0 rather than (traditional on other architectures) calls to the
11082 \&\s-1PLT\s0.  The default is \fB\-mgotplt\fR.
11083 .IP "\fB\-melf\fR" 4
11084 .IX Item "-melf"
11085 Legacy no-op option only recognized with the cris-axis-elf and
11086 cris-axis-linux-gnu targets.
11087 .IP "\fB\-mlinux\fR" 4
11088 .IX Item "-mlinux"
11089 Legacy no-op option only recognized with the cris-axis-linux-gnu target.
11090 .IP "\fB\-sim\fR" 4
11091 .IX Item "-sim"
11092 This option, recognized for the cris-axis-elf arranges
11093 to link with input-output functions from a simulator library.  Code,
11094 initialized data and zero-initialized data are allocated consecutively.
11095 .IP "\fB\-sim2\fR" 4
11096 .IX Item "-sim2"
11097 Like \fB\-sim\fR, but pass linker options to locate initialized data at
11098 0x40000000 and zero-initialized data at 0x80000000.
11099 .PP
11100 \fI\s-1CR16\s0 Options\fR
11101 .IX Subsection "CR16 Options"
11102 .PP
11103 These options are defined specifically for the \s-1CR16\s0 ports.
11104 .IP "\fB\-mmac\fR" 4
11105 .IX Item "-mmac"
11106 Enable the use of multiply-accumulate instructions. Disabled by default.
11107 .IP "\fB\-mcr16cplus\fR" 4
11108 .IX Item "-mcr16cplus"
11109 .PD 0
11110 .IP "\fB\-mcr16c\fR" 4
11111 .IX Item "-mcr16c"
11112 .PD
11113 Generate code for \s-1CR16C\s0 or \s-1CR16C+\s0 architecture. \s-1CR16C+\s0 architecture 
11114 is default.
11115 .IP "\fB\-msim\fR" 4
11116 .IX Item "-msim"
11117 Links the library libsim.a which is in compatible with simulator. Applicable
11118 to elf compiler only.
11119 .IP "\fB\-mint32\fR" 4
11120 .IX Item "-mint32"
11121 Choose integer type as 32\-bit wide.
11122 .IP "\fB\-mbit\-ops\fR" 4
11123 .IX Item "-mbit-ops"
11124 Generates sbit/cbit instructions for bit manipulations.
11125 .IP "\fB\-mdata\-model=\fR\fImodel\fR" 4
11126 .IX Item "-mdata-model=model"
11127 Choose a data model. The choices for \fImodel\fR are \fBnear\fR,
11128 \&\fBfar\fR or \fBmedium\fR. \fBmedium\fR is default.
11129 However, \fBfar\fR is not valid when \-mcr16c option is chosen as
11130 \&\s-1CR16C\s0 architecture does not support far data model.
11131 .PP
11132 \fIDarwin Options\fR
11133 .IX Subsection "Darwin Options"
11134 .PP
11135 These options are defined for all architectures running the Darwin operating
11136 system.
11137 .PP
11138 \&\s-1FSF\s0 \s-1GCC\s0 on Darwin does not create \*(L"fat\*(R" object files; it will create
11139 an object file for the single architecture that it was built to
11140 target.  Apple's \s-1GCC\s0 on Darwin does create \*(L"fat\*(R" files if multiple
11141 \&\fB\-arch\fR options are used; it does so by running the compiler or
11142 linker multiple times and joining the results together with
11143 \&\fIlipo\fR.
11144 .PP
11145 The subtype of the file created (like \fBppc7400\fR or \fBppc970\fR or
11146 \&\fBi686\fR) is determined by the flags that specify the \s-1ISA\s0
11147 that \s-1GCC\s0 is targetting, like \fB\-mcpu\fR or \fB\-march\fR.  The
11148 \&\fB\-force_cpusubtype_ALL\fR option can be used to override this.
11149 .PP
11150 The Darwin tools vary in their behavior when presented with an \s-1ISA\s0
11151 mismatch.  The assembler, \fIas\fR, will only permit instructions to
11152 be used that are valid for the subtype of the file it is generating,
11153 so you cannot put 64\-bit instructions in a \fBppc750\fR object file.
11154 The linker for shared libraries, \fI/usr/bin/libtool\fR, will fail
11155 and print an error if asked to create a shared library with a less
11156 restrictive subtype than its input files (for instance, trying to put
11157 a \fBppc970\fR object file in a \fBppc7400\fR library).  The linker
11158 for executables, \fIld\fR, will quietly give the executable the most
11159 restrictive subtype of any of its input files.
11160 .IP "\fB\-F\fR\fIdir\fR" 4
11161 .IX Item "-Fdir"
11162 Add the framework directory \fIdir\fR to the head of the list of
11163 directories to be searched for header files.  These directories are
11164 interleaved with those specified by \fB\-I\fR options and are
11165 scanned in a left-to-right order.
11166 .Sp
11167 A framework directory is a directory with frameworks in it.  A
11168 framework is a directory with a \fB\*(L"Headers\*(R"\fR and/or
11169 \&\fB\*(L"PrivateHeaders\*(R"\fR directory contained directly in it that ends
11170 in \fB\*(L".framework\*(R"\fR.  The name of a framework is the name of this
11171 directory excluding the \fB\*(L".framework\*(R"\fR.  Headers associated with
11172 the framework are found in one of those two directories, with
11173 \&\fB\*(L"Headers\*(R"\fR being searched first.  A subframework is a framework
11174 directory that is in a framework's \fB\*(L"Frameworks\*(R"\fR directory.
11175 Includes of subframework headers can only appear in a header of a
11176 framework that contains the subframework, or in a sibling subframework
11177 header.  Two subframeworks are siblings if they occur in the same
11178 framework.  A subframework should not have the same name as a
11179 framework, a warning will be issued if this is violated.  Currently a
11180 subframework cannot have subframeworks, in the future, the mechanism
11181 may be extended to support this.  The standard frameworks can be found
11182 in \fB\*(L"/System/Library/Frameworks\*(R"\fR and
11183 \&\fB\*(L"/Library/Frameworks\*(R"\fR.  An example include looks like
11184 \&\f(CW\*(C`#include <Framework/header.h>\*(C'\fR, where \fBFramework\fR denotes
11185 the name of the framework and header.h is found in the
11186 \&\fB\*(L"PrivateHeaders\*(R"\fR or \fB\*(L"Headers\*(R"\fR directory.
11187 .IP "\fB\-iframework\fR\fIdir\fR" 4
11188 .IX Item "-iframeworkdir"
11189 Like \fB\-F\fR except the directory is a treated as a system
11190 directory.  The main difference between this \fB\-iframework\fR and
11191 \&\fB\-F\fR is that with \fB\-iframework\fR the compiler does not
11192 warn about constructs contained within header files found via
11193 \&\fIdir\fR.  This option is valid only for the C family of languages.
11194 .IP "\fB\-gused\fR" 4
11195 .IX Item "-gused"
11196 Emit debugging information for symbols that are used.  For \s-1STABS\s0
11197 debugging format, this enables \fB\-feliminate\-unused\-debug\-symbols\fR.
11198 This is by default \s-1ON\s0.
11199 .IP "\fB\-gfull\fR" 4
11200 .IX Item "-gfull"
11201 Emit debugging information for all symbols and types.
11202 .IP "\fB\-mmacosx\-version\-min=\fR\fIversion\fR" 4
11203 .IX Item "-mmacosx-version-min=version"
11204 The earliest version of MacOS X that this executable will run on
11205 is \fIversion\fR.  Typical values of \fIversion\fR include \f(CW10.1\fR,
11206 \&\f(CW10.2\fR, and \f(CW10.3.9\fR.
11207 .Sp
11208 If the compiler was built to use the system's headers by default,
11209 then the default for this option is the system version on which the
11210 compiler is running, otherwise the default is to make choices that
11211 are compatible with as many systems and code bases as possible.
11212 .IP "\fB\-mkernel\fR" 4
11213 .IX Item "-mkernel"
11214 Enable kernel development mode.  The \fB\-mkernel\fR option sets
11215 \&\fB\-static\fR, \fB\-fno\-common\fR, \fB\-fno\-cxa\-atexit\fR,
11216 \&\fB\-fno\-exceptions\fR, \fB\-fno\-non\-call\-exceptions\fR,
11217 \&\fB\-fapple\-kext\fR, \fB\-fno\-weak\fR and \fB\-fno\-rtti\fR where
11218 applicable.  This mode also sets \fB\-mno\-altivec\fR,
11219 \&\fB\-msoft\-float\fR, \fB\-fno\-builtin\fR and
11220 \&\fB\-mlong\-branch\fR for PowerPC targets.
11221 .IP "\fB\-mone\-byte\-bool\fR" 4
11222 .IX Item "-mone-byte-bool"
11223 Override the defaults for \fBbool\fR so that \fBsizeof(bool)==1\fR.
11224 By default \fBsizeof(bool)\fR is \fB4\fR when compiling for
11225 Darwin/PowerPC and \fB1\fR when compiling for Darwin/x86, so this
11226 option has no effect on x86.
11227 .Sp
11228 \&\fBWarning:\fR The \fB\-mone\-byte\-bool\fR switch causes \s-1GCC\s0
11229 to generate code that is not binary compatible with code generated
11230 without that switch.  Using this switch may require recompiling all
11231 other modules in a program, including system libraries.  Use this
11232 switch to conform to a non-default data model.
11233 .IP "\fB\-mfix\-and\-continue\fR" 4
11234 .IX Item "-mfix-and-continue"
11235 .PD 0
11236 .IP "\fB\-ffix\-and\-continue\fR" 4
11237 .IX Item "-ffix-and-continue"
11238 .IP "\fB\-findirect\-data\fR" 4
11239 .IX Item "-findirect-data"
11240 .PD
11241 Generate code suitable for fast turn around development.  Needed to
11242 enable gdb to dynamically load \f(CW\*(C`.o\*(C'\fR files into already running
11243 programs.  \fB\-findirect\-data\fR and \fB\-ffix\-and\-continue\fR
11244 are provided for backwards compatibility.
11245 .IP "\fB\-all_load\fR" 4
11246 .IX Item "-all_load"
11247 Loads all members of static archive libraries.
11248 See man \fIld\fR\|(1) for more information.
11249 .IP "\fB\-arch_errors_fatal\fR" 4
11250 .IX Item "-arch_errors_fatal"
11251 Cause the errors having to do with files that have the wrong architecture
11252 to be fatal.
11253 .IP "\fB\-bind_at_load\fR" 4
11254 .IX Item "-bind_at_load"
11255 Causes the output file to be marked such that the dynamic linker will
11256 bind all undefined references when the file is loaded or launched.
11257 .IP "\fB\-bundle\fR" 4
11258 .IX Item "-bundle"
11259 Produce a Mach-o bundle format file.
11260 See man \fIld\fR\|(1) for more information.
11261 .IP "\fB\-bundle_loader\fR \fIexecutable\fR" 4
11262 .IX Item "-bundle_loader executable"
11263 This option specifies the \fIexecutable\fR that will be loading the build
11264 output file being linked.  See man \fIld\fR\|(1) for more information.
11265 .IP "\fB\-dynamiclib\fR" 4
11266 .IX Item "-dynamiclib"
11267 When passed this option, \s-1GCC\s0 will produce a dynamic library instead of
11268 an executable when linking, using the Darwin \fIlibtool\fR command.
11269 .IP "\fB\-force_cpusubtype_ALL\fR" 4
11270 .IX Item "-force_cpusubtype_ALL"
11271 This causes \s-1GCC\s0's output file to have the \fI\s-1ALL\s0\fR subtype, instead of
11272 one controlled by the \fB\-mcpu\fR or \fB\-march\fR option.
11273 .IP "\fB\-allowable_client\fR  \fIclient_name\fR" 4
11274 .IX Item "-allowable_client  client_name"
11275 .PD 0
11276 .IP "\fB\-client_name\fR" 4
11277 .IX Item "-client_name"
11278 .IP "\fB\-compatibility_version\fR" 4
11279 .IX Item "-compatibility_version"
11280 .IP "\fB\-current_version\fR" 4
11281 .IX Item "-current_version"
11282 .IP "\fB\-dead_strip\fR" 4
11283 .IX Item "-dead_strip"
11284 .IP "\fB\-dependency\-file\fR" 4
11285 .IX Item "-dependency-file"
11286 .IP "\fB\-dylib_file\fR" 4
11287 .IX Item "-dylib_file"
11288 .IP "\fB\-dylinker_install_name\fR" 4
11289 .IX Item "-dylinker_install_name"
11290 .IP "\fB\-dynamic\fR" 4
11291 .IX Item "-dynamic"
11292 .IP "\fB\-exported_symbols_list\fR" 4
11293 .IX Item "-exported_symbols_list"
11294 .IP "\fB\-filelist\fR" 4
11295 .IX Item "-filelist"
11296 .IP "\fB\-flat_namespace\fR" 4
11297 .IX Item "-flat_namespace"
11298 .IP "\fB\-force_flat_namespace\fR" 4
11299 .IX Item "-force_flat_namespace"
11300 .IP "\fB\-headerpad_max_install_names\fR" 4
11301 .IX Item "-headerpad_max_install_names"
11302 .IP "\fB\-image_base\fR" 4
11303 .IX Item "-image_base"
11304 .IP "\fB\-init\fR" 4
11305 .IX Item "-init"
11306 .IP "\fB\-install_name\fR" 4
11307 .IX Item "-install_name"
11308 .IP "\fB\-keep_private_externs\fR" 4
11309 .IX Item "-keep_private_externs"
11310 .IP "\fB\-multi_module\fR" 4
11311 .IX Item "-multi_module"
11312 .IP "\fB\-multiply_defined\fR" 4
11313 .IX Item "-multiply_defined"
11314 .IP "\fB\-multiply_defined_unused\fR" 4
11315 .IX Item "-multiply_defined_unused"
11316 .IP "\fB\-noall_load\fR" 4
11317 .IX Item "-noall_load"
11318 .IP "\fB\-no_dead_strip_inits_and_terms\fR" 4
11319 .IX Item "-no_dead_strip_inits_and_terms"
11320 .IP "\fB\-nofixprebinding\fR" 4
11321 .IX Item "-nofixprebinding"
11322 .IP "\fB\-nomultidefs\fR" 4
11323 .IX Item "-nomultidefs"
11324 .IP "\fB\-noprebind\fR" 4
11325 .IX Item "-noprebind"
11326 .IP "\fB\-noseglinkedit\fR" 4
11327 .IX Item "-noseglinkedit"
11328 .IP "\fB\-pagezero_size\fR" 4
11329 .IX Item "-pagezero_size"
11330 .IP "\fB\-prebind\fR" 4
11331 .IX Item "-prebind"
11332 .IP "\fB\-prebind_all_twolevel_modules\fR" 4
11333 .IX Item "-prebind_all_twolevel_modules"
11334 .IP "\fB\-private_bundle\fR" 4
11335 .IX Item "-private_bundle"
11336 .IP "\fB\-read_only_relocs\fR" 4
11337 .IX Item "-read_only_relocs"
11338 .IP "\fB\-sectalign\fR" 4
11339 .IX Item "-sectalign"
11340 .IP "\fB\-sectobjectsymbols\fR" 4
11341 .IX Item "-sectobjectsymbols"
11342 .IP "\fB\-whyload\fR" 4
11343 .IX Item "-whyload"
11344 .IP "\fB\-seg1addr\fR" 4
11345 .IX Item "-seg1addr"
11346 .IP "\fB\-sectcreate\fR" 4
11347 .IX Item "-sectcreate"
11348 .IP "\fB\-sectobjectsymbols\fR" 4
11349 .IX Item "-sectobjectsymbols"
11350 .IP "\fB\-sectorder\fR" 4
11351 .IX Item "-sectorder"
11352 .IP "\fB\-segaddr\fR" 4
11353 .IX Item "-segaddr"
11354 .IP "\fB\-segs_read_only_addr\fR" 4
11355 .IX Item "-segs_read_only_addr"
11356 .IP "\fB\-segs_read_write_addr\fR" 4
11357 .IX Item "-segs_read_write_addr"
11358 .IP "\fB\-seg_addr_table\fR" 4
11359 .IX Item "-seg_addr_table"
11360 .IP "\fB\-seg_addr_table_filename\fR" 4
11361 .IX Item "-seg_addr_table_filename"
11362 .IP "\fB\-seglinkedit\fR" 4
11363 .IX Item "-seglinkedit"
11364 .IP "\fB\-segprot\fR" 4
11365 .IX Item "-segprot"
11366 .IP "\fB\-segs_read_only_addr\fR" 4
11367 .IX Item "-segs_read_only_addr"
11368 .IP "\fB\-segs_read_write_addr\fR" 4
11369 .IX Item "-segs_read_write_addr"
11370 .IP "\fB\-single_module\fR" 4
11371 .IX Item "-single_module"
11372 .IP "\fB\-static\fR" 4
11373 .IX Item "-static"
11374 .IP "\fB\-sub_library\fR" 4
11375 .IX Item "-sub_library"
11376 .IP "\fB\-sub_umbrella\fR" 4
11377 .IX Item "-sub_umbrella"
11378 .IP "\fB\-twolevel_namespace\fR" 4
11379 .IX Item "-twolevel_namespace"
11380 .IP "\fB\-umbrella\fR" 4
11381 .IX Item "-umbrella"
11382 .IP "\fB\-undefined\fR" 4
11383 .IX Item "-undefined"
11384 .IP "\fB\-unexported_symbols_list\fR" 4
11385 .IX Item "-unexported_symbols_list"
11386 .IP "\fB\-weak_reference_mismatches\fR" 4
11387 .IX Item "-weak_reference_mismatches"
11388 .IP "\fB\-whatsloaded\fR" 4
11389 .IX Item "-whatsloaded"
11390 .PD
11391 These options are passed to the Darwin linker.  The Darwin linker man page
11392 describes them in detail.
11393 .PP
11394 \fI\s-1DEC\s0 Alpha Options\fR
11395 .IX Subsection "DEC Alpha Options"
11396 .PP
11397 These \fB\-m\fR options are defined for the \s-1DEC\s0 Alpha implementations:
11398 .IP "\fB\-mno\-soft\-float\fR" 4
11399 .IX Item "-mno-soft-float"
11400 .PD 0
11401 .IP "\fB\-msoft\-float\fR" 4
11402 .IX Item "-msoft-float"
11403 .PD
11404 Use (do not use) the hardware floating-point instructions for
11405 floating-point operations.  When \fB\-msoft\-float\fR is specified,
11406 functions in \fIlibgcc.a\fR will be used to perform floating-point
11407 operations.  Unless they are replaced by routines that emulate the
11408 floating-point operations, or compiled in such a way as to call such
11409 emulations routines, these routines will issue floating-point
11410 operations.   If you are compiling for an Alpha without floating-point
11411 operations, you must ensure that the library is built so as not to call
11412 them.
11413 .Sp
11414 Note that Alpha implementations without floating-point operations are
11415 required to have floating-point registers.
11416 .IP "\fB\-mfp\-reg\fR" 4
11417 .IX Item "-mfp-reg"
11418 .PD 0
11419 .IP "\fB\-mno\-fp\-regs\fR" 4
11420 .IX Item "-mno-fp-regs"
11421 .PD
11422 Generate code that uses (does not use) the floating-point register set.
11423 \&\fB\-mno\-fp\-regs\fR implies \fB\-msoft\-float\fR.  If the floating-point
11424 register set is not used, floating-point operands are passed in integer
11425 registers as if they were integers and floating-point results are passed
11426 in \f(CW$0\fR instead of \f(CW$f0\fR.  This is a non-standard calling sequence,
11427 so any function with a floating-point argument or return value called by code
11428 compiled with \fB\-mno\-fp\-regs\fR must also be compiled with that
11429 option.
11430 .Sp
11431 A typical use of this option is building a kernel that does not use,
11432 and hence need not save and restore, any floating-point registers.
11433 .IP "\fB\-mieee\fR" 4
11434 .IX Item "-mieee"
11435 The Alpha architecture implements floating-point hardware optimized for
11436 maximum performance.  It is mostly compliant with the \s-1IEEE\s0 floating-point
11437 standard.  However, for full compliance, software assistance is
11438 required.  This option generates code fully IEEE-compliant code
11439 \&\fIexcept\fR that the \fIinexact-flag\fR is not maintained (see below).
11440 If this option is turned on, the preprocessor macro \f(CW\*(C`_IEEE_FP\*(C'\fR is
11441 defined during compilation.  The resulting code is less efficient but is
11442 able to correctly support denormalized numbers and exceptional \s-1IEEE\s0
11443 values such as not-a-number and plus/minus infinity.  Other Alpha
11444 compilers call this option \fB\-ieee_with_no_inexact\fR.
11445 .IP "\fB\-mieee\-with\-inexact\fR" 4
11446 .IX Item "-mieee-with-inexact"
11447 This is like \fB\-mieee\fR except the generated code also maintains
11448 the \s-1IEEE\s0 \fIinexact-flag\fR.  Turning on this option causes the
11449 generated code to implement fully-compliant \s-1IEEE\s0 math.  In addition to
11450 \&\f(CW\*(C`_IEEE_FP\*(C'\fR, \f(CW\*(C`_IEEE_FP_EXACT\*(C'\fR is defined as a preprocessor
11451 macro.  On some Alpha implementations the resulting code may execute
11452 significantly slower than the code generated by default.  Since there is
11453 very little code that depends on the \fIinexact-flag\fR, you should
11454 normally not specify this option.  Other Alpha compilers call this
11455 option \fB\-ieee_with_inexact\fR.
11456 .IP "\fB\-mfp\-trap\-mode=\fR\fItrap-mode\fR" 4
11457 .IX Item "-mfp-trap-mode=trap-mode"
11458 This option controls what floating-point related traps are enabled.
11459 Other Alpha compilers call this option \fB\-fptm\fR \fItrap-mode\fR.
11460 The trap mode can be set to one of four values:
11461 .RS 4
11462 .IP "\fBn\fR" 4
11463 .IX Item "n"
11464 This is the default (normal) setting.  The only traps that are enabled
11465 are the ones that cannot be disabled in software (e.g., division by zero
11466 trap).
11467 .IP "\fBu\fR" 4
11468 .IX Item "u"
11469 In addition to the traps enabled by \fBn\fR, underflow traps are enabled
11470 as well.
11471 .IP "\fBsu\fR" 4
11472 .IX Item "su"
11473 Like \fBu\fR, but the instructions are marked to be safe for software
11474 completion (see Alpha architecture manual for details).
11475 .IP "\fBsui\fR" 4
11476 .IX Item "sui"
11477 Like \fBsu\fR, but inexact traps are enabled as well.
11478 .RE
11479 .RS 4
11480 .RE
11481 .IP "\fB\-mfp\-rounding\-mode=\fR\fIrounding-mode\fR" 4
11482 .IX Item "-mfp-rounding-mode=rounding-mode"
11483 Selects the \s-1IEEE\s0 rounding mode.  Other Alpha compilers call this option
11484 \&\fB\-fprm\fR \fIrounding-mode\fR.  The \fIrounding-mode\fR can be one
11485 of:
11486 .RS 4
11487 .IP "\fBn\fR" 4
11488 .IX Item "n"
11489 Normal \s-1IEEE\s0 rounding mode.  Floating-point numbers are rounded towards
11490 the nearest machine number or towards the even machine number in case
11491 of a tie.
11492 .IP "\fBm\fR" 4
11493 .IX Item "m"
11494 Round towards minus infinity.
11495 .IP "\fBc\fR" 4
11496 .IX Item "c"
11497 Chopped rounding mode.  Floating-point numbers are rounded towards zero.
11498 .IP "\fBd\fR" 4
11499 .IX Item "d"
11500 Dynamic rounding mode.  A field in the floating-point control register
11501 (\fIfpcr\fR, see Alpha architecture reference manual) controls the
11502 rounding mode in effect.  The C library initializes this register for
11503 rounding towards plus infinity.  Thus, unless your program modifies the
11504 \&\fIfpcr\fR, \fBd\fR corresponds to round towards plus infinity.
11505 .RE
11506 .RS 4
11507 .RE
11508 .IP "\fB\-mtrap\-precision=\fR\fItrap-precision\fR" 4
11509 .IX Item "-mtrap-precision=trap-precision"
11510 In the Alpha architecture, floating-point traps are imprecise.  This
11511 means without software assistance it is impossible to recover from a
11512 floating trap and program execution normally needs to be terminated.
11513 \&\s-1GCC\s0 can generate code that can assist operating system trap handlers
11514 in determining the exact location that caused a floating-point trap.
11515 Depending on the requirements of an application, different levels of
11516 precisions can be selected:
11517 .RS 4
11518 .IP "\fBp\fR" 4
11519 .IX Item "p"
11520 Program precision.  This option is the default and means a trap handler
11521 can only identify which program caused a floating-point exception.
11522 .IP "\fBf\fR" 4
11523 .IX Item "f"
11524 Function precision.  The trap handler can determine the function that
11525 caused a floating-point exception.
11526 .IP "\fBi\fR" 4
11527 .IX Item "i"
11528 Instruction precision.  The trap handler can determine the exact
11529 instruction that caused a floating-point exception.
11530 .RE
11531 .RS 4
11532 .Sp
11533 Other Alpha compilers provide the equivalent options called
11534 \&\fB\-scope_safe\fR and \fB\-resumption_safe\fR.
11535 .RE
11536 .IP "\fB\-mieee\-conformant\fR" 4
11537 .IX Item "-mieee-conformant"
11538 This option marks the generated code as \s-1IEEE\s0 conformant.  You must not
11539 use this option unless you also specify \fB\-mtrap\-precision=i\fR and either
11540 \&\fB\-mfp\-trap\-mode=su\fR or \fB\-mfp\-trap\-mode=sui\fR.  Its only effect
11541 is to emit the line \fB.eflag 48\fR in the function prologue of the
11542 generated assembly file.  Under \s-1DEC\s0 Unix, this has the effect that
11543 IEEE-conformant math library routines will be linked in.
11544 .IP "\fB\-mbuild\-constants\fR" 4
11545 .IX Item "-mbuild-constants"
11546 Normally \s-1GCC\s0 examines a 32\- or 64\-bit integer constant to
11547 see if it can construct it from smaller constants in two or three
11548 instructions.  If it cannot, it will output the constant as a literal and
11549 generate code to load it from the data segment at run time.
11550 .Sp
11551 Use this option to require \s-1GCC\s0 to construct \fIall\fR integer constants
11552 using code, even if it takes more instructions (the maximum is six).
11553 .Sp
11554 You would typically use this option to build a shared library dynamic
11555 loader.  Itself a shared library, it must relocate itself in memory
11556 before it can find the variables and constants in its own data segment.
11557 .IP "\fB\-malpha\-as\fR" 4
11558 .IX Item "-malpha-as"
11559 .PD 0
11560 .IP "\fB\-mgas\fR" 4
11561 .IX Item "-mgas"
11562 .PD
11563 Select whether to generate code to be assembled by the vendor-supplied
11564 assembler (\fB\-malpha\-as\fR) or by the \s-1GNU\s0 assembler \fB\-mgas\fR.
11565 .IP "\fB\-mbwx\fR" 4
11566 .IX Item "-mbwx"
11567 .PD 0
11568 .IP "\fB\-mno\-bwx\fR" 4
11569 .IX Item "-mno-bwx"
11570 .IP "\fB\-mcix\fR" 4
11571 .IX Item "-mcix"
11572 .IP "\fB\-mno\-cix\fR" 4
11573 .IX Item "-mno-cix"
11574 .IP "\fB\-mfix\fR" 4
11575 .IX Item "-mfix"
11576 .IP "\fB\-mno\-fix\fR" 4
11577 .IX Item "-mno-fix"
11578 .IP "\fB\-mmax\fR" 4
11579 .IX Item "-mmax"
11580 .IP "\fB\-mno\-max\fR" 4
11581 .IX Item "-mno-max"
11582 .PD
11583 Indicate whether \s-1GCC\s0 should generate code to use the optional \s-1BWX\s0,
11584 \&\s-1CIX\s0, \s-1FIX\s0 and \s-1MAX\s0 instruction sets.  The default is to use the instruction
11585 sets supported by the \s-1CPU\s0 type specified via \fB\-mcpu=\fR option or that
11586 of the \s-1CPU\s0 on which \s-1GCC\s0 was built if none was specified.
11587 .IP "\fB\-mfloat\-vax\fR" 4
11588 .IX Item "-mfloat-vax"
11589 .PD 0
11590 .IP "\fB\-mfloat\-ieee\fR" 4
11591 .IX Item "-mfloat-ieee"
11592 .PD
11593 Generate code that uses (does not use) \s-1VAX\s0 F and G floating-point
11594 arithmetic instead of \s-1IEEE\s0 single and double precision.
11595 .IP "\fB\-mexplicit\-relocs\fR" 4
11596 .IX Item "-mexplicit-relocs"
11597 .PD 0
11598 .IP "\fB\-mno\-explicit\-relocs\fR" 4
11599 .IX Item "-mno-explicit-relocs"
11600 .PD
11601 Older Alpha assemblers provided no way to generate symbol relocations
11602 except via assembler macros.  Use of these macros does not allow
11603 optimal instruction scheduling.  \s-1GNU\s0 binutils as of version 2.12
11604 supports a new syntax that allows the compiler to explicitly mark
11605 which relocations should apply to which instructions.  This option
11606 is mostly useful for debugging, as \s-1GCC\s0 detects the capabilities of
11607 the assembler when it is built and sets the default accordingly.
11608 .IP "\fB\-msmall\-data\fR" 4
11609 .IX Item "-msmall-data"
11610 .PD 0
11611 .IP "\fB\-mlarge\-data\fR" 4
11612 .IX Item "-mlarge-data"
11613 .PD
11614 When \fB\-mexplicit\-relocs\fR is in effect, static data is
11615 accessed via \fIgp-relative\fR relocations.  When \fB\-msmall\-data\fR
11616 is used, objects 8 bytes long or smaller are placed in a \fIsmall data area\fR
11617 (the \f(CW\*(C`.sdata\*(C'\fR and \f(CW\*(C`.sbss\*(C'\fR sections) and are accessed via
11618 16\-bit relocations off of the \f(CW$gp\fR register.  This limits the
11619 size of the small data area to 64KB, but allows the variables to be
11620 directly accessed via a single instruction.
11621 .Sp
11622 The default is \fB\-mlarge\-data\fR.  With this option the data area
11623 is limited to just below 2GB.  Programs that require more than 2GB of
11624 data must use \f(CW\*(C`malloc\*(C'\fR or \f(CW\*(C`mmap\*(C'\fR to allocate the data in the
11625 heap instead of in the program's data segment.
11626 .Sp
11627 When generating code for shared libraries, \fB\-fpic\fR implies
11628 \&\fB\-msmall\-data\fR and \fB\-fPIC\fR implies \fB\-mlarge\-data\fR.
11629 .IP "\fB\-msmall\-text\fR" 4
11630 .IX Item "-msmall-text"
11631 .PD 0
11632 .IP "\fB\-mlarge\-text\fR" 4
11633 .IX Item "-mlarge-text"
11634 .PD
11635 When \fB\-msmall\-text\fR is used, the compiler assumes that the
11636 code of the entire program (or shared library) fits in 4MB, and is
11637 thus reachable with a branch instruction.  When \fB\-msmall\-data\fR
11638 is used, the compiler can assume that all local symbols share the
11639 same \f(CW$gp\fR value, and thus reduce the number of instructions
11640 required for a function call from 4 to 1.
11641 .Sp
11642 The default is \fB\-mlarge\-text\fR.
11643 .IP "\fB\-mcpu=\fR\fIcpu_type\fR" 4
11644 .IX Item "-mcpu=cpu_type"
11645 Set the instruction set and instruction scheduling parameters for
11646 machine type \fIcpu_type\fR.  You can specify either the \fB\s-1EV\s0\fR
11647 style name or the corresponding chip number.  \s-1GCC\s0 supports scheduling
11648 parameters for the \s-1EV4\s0, \s-1EV5\s0 and \s-1EV6\s0 family of processors and will
11649 choose the default values for the instruction set from the processor
11650 you specify.  If you do not specify a processor type, \s-1GCC\s0 will default
11651 to the processor on which the compiler was built.
11652 .Sp
11653 Supported values for \fIcpu_type\fR are
11654 .RS 4
11655 .IP "\fBev4\fR" 4
11656 .IX Item "ev4"
11657 .PD 0
11658 .IP "\fBev45\fR" 4
11659 .IX Item "ev45"
11660 .IP "\fB21064\fR" 4
11661 .IX Item "21064"
11662 .PD
11663 Schedules as an \s-1EV4\s0 and has no instruction set extensions.
11664 .IP "\fBev5\fR" 4
11665 .IX Item "ev5"
11666 .PD 0
11667 .IP "\fB21164\fR" 4
11668 .IX Item "21164"
11669 .PD
11670 Schedules as an \s-1EV5\s0 and has no instruction set extensions.
11671 .IP "\fBev56\fR" 4
11672 .IX Item "ev56"
11673 .PD 0
11674 .IP "\fB21164a\fR" 4
11675 .IX Item "21164a"
11676 .PD
11677 Schedules as an \s-1EV5\s0 and supports the \s-1BWX\s0 extension.
11678 .IP "\fBpca56\fR" 4
11679 .IX Item "pca56"
11680 .PD 0
11681 .IP "\fB21164pc\fR" 4
11682 .IX Item "21164pc"
11683 .IP "\fB21164PC\fR" 4
11684 .IX Item "21164PC"
11685 .PD
11686 Schedules as an \s-1EV5\s0 and supports the \s-1BWX\s0 and \s-1MAX\s0 extensions.
11687 .IP "\fBev6\fR" 4
11688 .IX Item "ev6"
11689 .PD 0
11690 .IP "\fB21264\fR" 4
11691 .IX Item "21264"
11692 .PD
11693 Schedules as an \s-1EV6\s0 and supports the \s-1BWX\s0, \s-1FIX\s0, and \s-1MAX\s0 extensions.
11694 .IP "\fBev67\fR" 4
11695 .IX Item "ev67"
11696 .PD 0
11697 .IP "\fB21264a\fR" 4
11698 .IX Item "21264a"
11699 .PD
11700 Schedules as an \s-1EV6\s0 and supports the \s-1BWX\s0, \s-1CIX\s0, \s-1FIX\s0, and \s-1MAX\s0 extensions.
11701 .RE
11702 .RS 4
11703 .Sp
11704 Native toolchains also support the value \fBnative\fR,
11705 which selects the best architecture option for the host processor.
11706 \&\fB\-mcpu=native\fR has no effect if \s-1GCC\s0 does not recognize
11707 the processor.
11708 .RE
11709 .IP "\fB\-mtune=\fR\fIcpu_type\fR" 4
11710 .IX Item "-mtune=cpu_type"
11711 Set only the instruction scheduling parameters for machine type
11712 \&\fIcpu_type\fR.  The instruction set is not changed.
11713 .Sp
11714 Native toolchains also support the value \fBnative\fR,
11715 which selects the best architecture option for the host processor.
11716 \&\fB\-mtune=native\fR has no effect if \s-1GCC\s0 does not recognize
11717 the processor.
11718 .IP "\fB\-mmemory\-latency=\fR\fItime\fR" 4
11719 .IX Item "-mmemory-latency=time"
11720 Sets the latency the scheduler should assume for typical memory
11721 references as seen by the application.  This number is highly
11722 dependent on the memory access patterns used by the application
11723 and the size of the external cache on the machine.
11724 .Sp
11725 Valid options for \fItime\fR are
11726 .RS 4
11727 .IP "\fInumber\fR" 4
11728 .IX Item "number"
11729 A decimal number representing clock cycles.
11730 .IP "\fBL1\fR" 4
11731 .IX Item "L1"
11732 .PD 0
11733 .IP "\fBL2\fR" 4
11734 .IX Item "L2"
11735 .IP "\fBL3\fR" 4
11736 .IX Item "L3"
11737 .IP "\fBmain\fR" 4
11738 .IX Item "main"
11739 .PD
11740 The compiler contains estimates of the number of clock cycles for
11741 \&\*(L"typical\*(R" \s-1EV4\s0 & \s-1EV5\s0 hardware for the Level 1, 2 & 3 caches
11742 (also called Dcache, Scache, and Bcache), as well as to main memory.
11743 Note that L3 is only valid for \s-1EV5\s0.
11744 .RE
11745 .RS 4
11746 .RE
11747 .PP
11748 \fI\s-1DEC\s0 Alpha/VMS Options\fR
11749 .IX Subsection "DEC Alpha/VMS Options"
11750 .PP
11751 These \fB\-m\fR options are defined for the \s-1DEC\s0 Alpha/VMS implementations:
11752 .IP "\fB\-mvms\-return\-codes\fR" 4
11753 .IX Item "-mvms-return-codes"
11754 Return \s-1VMS\s0 condition codes from main.  The default is to return \s-1POSIX\s0
11755 style condition (e.g. error) codes.
11756 .IP "\fB\-mdebug\-main=\fR\fIprefix\fR" 4
11757 .IX Item "-mdebug-main=prefix"
11758 Flag the first routine whose name starts with \fIprefix\fR as the main
11759 routine for the debugger.
11760 .IP "\fB\-mmalloc64\fR" 4
11761 .IX Item "-mmalloc64"
11762 Default to 64\-bit memory allocation routines.
11763 .PP
11764 \fI\s-1FR30\s0 Options\fR
11765 .IX Subsection "FR30 Options"
11766 .PP
11767 These options are defined specifically for the \s-1FR30\s0 port.
11768 .IP "\fB\-msmall\-model\fR" 4
11769 .IX Item "-msmall-model"
11770 Use the small address space model.  This can produce smaller code, but
11771 it does assume that all symbolic values and addresses will fit into a
11772 20\-bit range.
11773 .IP "\fB\-mno\-lsim\fR" 4
11774 .IX Item "-mno-lsim"
11775 Assume that runtime support has been provided and so there is no need
11776 to include the simulator library (\fIlibsim.a\fR) on the linker
11777 command line.
11778 .PP
11779 \fI\s-1FRV\s0 Options\fR
11780 .IX Subsection "FRV Options"
11781 .IP "\fB\-mgpr\-32\fR" 4
11782 .IX Item "-mgpr-32"
11783 Only use the first 32 general-purpose registers.
11784 .IP "\fB\-mgpr\-64\fR" 4
11785 .IX Item "-mgpr-64"
11786 Use all 64 general-purpose registers.
11787 .IP "\fB\-mfpr\-32\fR" 4
11788 .IX Item "-mfpr-32"
11789 Use only the first 32 floating-point registers.
11790 .IP "\fB\-mfpr\-64\fR" 4
11791 .IX Item "-mfpr-64"
11792 Use all 64 floating-point registers.
11793 .IP "\fB\-mhard\-float\fR" 4
11794 .IX Item "-mhard-float"
11795 Use hardware instructions for floating-point operations.
11796 .IP "\fB\-msoft\-float\fR" 4
11797 .IX Item "-msoft-float"
11798 Use library routines for floating-point operations.
11799 .IP "\fB\-malloc\-cc\fR" 4
11800 .IX Item "-malloc-cc"
11801 Dynamically allocate condition code registers.
11802 .IP "\fB\-mfixed\-cc\fR" 4
11803 .IX Item "-mfixed-cc"
11804 Do not try to dynamically allocate condition code registers, only
11805 use \f(CW\*(C`icc0\*(C'\fR and \f(CW\*(C`fcc0\*(C'\fR.
11806 .IP "\fB\-mdword\fR" 4
11807 .IX Item "-mdword"
11808 Change \s-1ABI\s0 to use double word insns.
11809 .IP "\fB\-mno\-dword\fR" 4
11810 .IX Item "-mno-dword"
11811 Do not use double word instructions.
11812 .IP "\fB\-mdouble\fR" 4
11813 .IX Item "-mdouble"
11814 Use floating-point double instructions.
11815 .IP "\fB\-mno\-double\fR" 4
11816 .IX Item "-mno-double"
11817 Do not use floating-point double instructions.
11818 .IP "\fB\-mmedia\fR" 4
11819 .IX Item "-mmedia"
11820 Use media instructions.
11821 .IP "\fB\-mno\-media\fR" 4
11822 .IX Item "-mno-media"
11823 Do not use media instructions.
11824 .IP "\fB\-mmuladd\fR" 4
11825 .IX Item "-mmuladd"
11826 Use multiply and add/subtract instructions.
11827 .IP "\fB\-mno\-muladd\fR" 4
11828 .IX Item "-mno-muladd"
11829 Do not use multiply and add/subtract instructions.
11830 .IP "\fB\-mfdpic\fR" 4
11831 .IX Item "-mfdpic"
11832 Select the \s-1FDPIC\s0 \s-1ABI\s0, which uses function descriptors to represent
11833 pointers to functions.  Without any PIC/PIE\-related options, it
11834 implies \fB\-fPIE\fR.  With \fB\-fpic\fR or \fB\-fpie\fR, it
11835 assumes \s-1GOT\s0 entries and small data are within a 12\-bit range from the
11836 \&\s-1GOT\s0 base address; with \fB\-fPIC\fR or \fB\-fPIE\fR, \s-1GOT\s0 offsets
11837 are computed with 32 bits.
11838 With a \fBbfin-elf\fR target, this option implies \fB\-msim\fR.
11839 .IP "\fB\-minline\-plt\fR" 4
11840 .IX Item "-minline-plt"
11841 Enable inlining of \s-1PLT\s0 entries in function calls to functions that are
11842 not known to bind locally.  It has no effect without \fB\-mfdpic\fR.
11843 It's enabled by default if optimizing for speed and compiling for
11844 shared libraries (i.e., \fB\-fPIC\fR or \fB\-fpic\fR), or when an
11845 optimization option such as \fB\-O3\fR or above is present in the
11846 command line.
11847 .IP "\fB\-mTLS\fR" 4
11848 .IX Item "-mTLS"
11849 Assume a large \s-1TLS\s0 segment when generating thread-local code.
11850 .IP "\fB\-mtls\fR" 4
11851 .IX Item "-mtls"
11852 Do not assume a large \s-1TLS\s0 segment when generating thread-local code.
11853 .IP "\fB\-mgprel\-ro\fR" 4
11854 .IX Item "-mgprel-ro"
11855 Enable the use of \f(CW\*(C`GPREL\*(C'\fR relocations in the \s-1FDPIC\s0 \s-1ABI\s0 for data
11856 that is known to be in read-only sections.  It's enabled by default,
11857 except for \fB\-fpic\fR or \fB\-fpie\fR: even though it may help
11858 make the global offset table smaller, it trades 1 instruction for 4.
11859 With \fB\-fPIC\fR or \fB\-fPIE\fR, it trades 3 instructions for 4,
11860 one of which may be shared by multiple symbols, and it avoids the need
11861 for a \s-1GOT\s0 entry for the referenced symbol, so it's more likely to be a
11862 win.  If it is not, \fB\-mno\-gprel\-ro\fR can be used to disable it.
11863 .IP "\fB\-multilib\-library\-pic\fR" 4
11864 .IX Item "-multilib-library-pic"
11865 Link with the (library, not \s-1FD\s0) pic libraries.  It's implied by
11866 \&\fB\-mlibrary\-pic\fR, as well as by \fB\-fPIC\fR and
11867 \&\fB\-fpic\fR without \fB\-mfdpic\fR.  You should never have to use
11868 it explicitly.
11869 .IP "\fB\-mlinked\-fp\fR" 4
11870 .IX Item "-mlinked-fp"
11871 Follow the \s-1EABI\s0 requirement of always creating a frame pointer whenever
11872 a stack frame is allocated.  This option is enabled by default and can
11873 be disabled with \fB\-mno\-linked\-fp\fR.
11874 .IP "\fB\-mlong\-calls\fR" 4
11875 .IX Item "-mlong-calls"
11876 Use indirect addressing to call functions outside the current
11877 compilation unit.  This allows the functions to be placed anywhere
11878 within the 32\-bit address space.
11879 .IP "\fB\-malign\-labels\fR" 4
11880 .IX Item "-malign-labels"
11881 Try to align labels to an 8\-byte boundary by inserting nops into the
11882 previous packet.  This option only has an effect when \s-1VLIW\s0 packing
11883 is enabled.  It doesn't create new packets; it merely adds nops to
11884 existing ones.
11885 .IP "\fB\-mlibrary\-pic\fR" 4
11886 .IX Item "-mlibrary-pic"
11887 Generate position-independent \s-1EABI\s0 code.
11888 .IP "\fB\-macc\-4\fR" 4
11889 .IX Item "-macc-4"
11890 Use only the first four media accumulator registers.
11891 .IP "\fB\-macc\-8\fR" 4
11892 .IX Item "-macc-8"
11893 Use all eight media accumulator registers.
11894 .IP "\fB\-mpack\fR" 4
11895 .IX Item "-mpack"
11896 Pack \s-1VLIW\s0 instructions.
11897 .IP "\fB\-mno\-pack\fR" 4
11898 .IX Item "-mno-pack"
11899 Do not pack \s-1VLIW\s0 instructions.
11900 .IP "\fB\-mno\-eflags\fR" 4
11901 .IX Item "-mno-eflags"
11902 Do not mark \s-1ABI\s0 switches in e_flags.
11903 .IP "\fB\-mcond\-move\fR" 4
11904 .IX Item "-mcond-move"
11905 Enable the use of conditional-move instructions (default).
11906 .Sp
11907 This switch is mainly for debugging the compiler and will likely be removed
11908 in a future version.
11909 .IP "\fB\-mno\-cond\-move\fR" 4
11910 .IX Item "-mno-cond-move"
11911 Disable the use of conditional-move instructions.
11912 .Sp
11913 This switch is mainly for debugging the compiler and will likely be removed
11914 in a future version.
11915 .IP "\fB\-mscc\fR" 4
11916 .IX Item "-mscc"
11917 Enable the use of conditional set instructions (default).
11918 .Sp
11919 This switch is mainly for debugging the compiler and will likely be removed
11920 in a future version.
11921 .IP "\fB\-mno\-scc\fR" 4
11922 .IX Item "-mno-scc"
11923 Disable the use of conditional set instructions.
11924 .Sp
11925 This switch is mainly for debugging the compiler and will likely be removed
11926 in a future version.
11927 .IP "\fB\-mcond\-exec\fR" 4
11928 .IX Item "-mcond-exec"
11929 Enable the use of conditional execution (default).
11930 .Sp
11931 This switch is mainly for debugging the compiler and will likely be removed
11932 in a future version.
11933 .IP "\fB\-mno\-cond\-exec\fR" 4
11934 .IX Item "-mno-cond-exec"
11935 Disable the use of conditional execution.
11936 .Sp
11937 This switch is mainly for debugging the compiler and will likely be removed
11938 in a future version.
11939 .IP "\fB\-mvliw\-branch\fR" 4
11940 .IX Item "-mvliw-branch"
11941 Run a pass to pack branches into \s-1VLIW\s0 instructions (default).
11942 .Sp
11943 This switch is mainly for debugging the compiler and will likely be removed
11944 in a future version.
11945 .IP "\fB\-mno\-vliw\-branch\fR" 4
11946 .IX Item "-mno-vliw-branch"
11947 Do not run a pass to pack branches into \s-1VLIW\s0 instructions.
11948 .Sp
11949 This switch is mainly for debugging the compiler and will likely be removed
11950 in a future version.
11951 .IP "\fB\-mmulti\-cond\-exec\fR" 4
11952 .IX Item "-mmulti-cond-exec"
11953 Enable optimization of \f(CW\*(C`&&\*(C'\fR and \f(CW\*(C`||\*(C'\fR in conditional execution
11954 (default).
11955 .Sp
11956 This switch is mainly for debugging the compiler and will likely be removed
11957 in a future version.
11958 .IP "\fB\-mno\-multi\-cond\-exec\fR" 4
11959 .IX Item "-mno-multi-cond-exec"
11960 Disable optimization of \f(CW\*(C`&&\*(C'\fR and \f(CW\*(C`||\*(C'\fR in conditional execution.
11961 .Sp
11962 This switch is mainly for debugging the compiler and will likely be removed
11963 in a future version.
11964 .IP "\fB\-mnested\-cond\-exec\fR" 4
11965 .IX Item "-mnested-cond-exec"
11966 Enable nested conditional execution optimizations (default).
11967 .Sp
11968 This switch is mainly for debugging the compiler and will likely be removed
11969 in a future version.
11970 .IP "\fB\-mno\-nested\-cond\-exec\fR" 4
11971 .IX Item "-mno-nested-cond-exec"
11972 Disable nested conditional execution optimizations.
11973 .Sp
11974 This switch is mainly for debugging the compiler and will likely be removed
11975 in a future version.
11976 .IP "\fB\-moptimize\-membar\fR" 4
11977 .IX Item "-moptimize-membar"
11978 This switch removes redundant \f(CW\*(C`membar\*(C'\fR instructions from the
11979 compiler generated code.  It is enabled by default.
11980 .IP "\fB\-mno\-optimize\-membar\fR" 4
11981 .IX Item "-mno-optimize-membar"
11982 This switch disables the automatic removal of redundant \f(CW\*(C`membar\*(C'\fR
11983 instructions from the generated code.
11984 .IP "\fB\-mtomcat\-stats\fR" 4
11985 .IX Item "-mtomcat-stats"
11986 Cause gas to print out tomcat statistics.
11987 .IP "\fB\-mcpu=\fR\fIcpu\fR" 4
11988 .IX Item "-mcpu=cpu"
11989 Select the processor type for which to generate code.  Possible values are
11990 \&\fBfrv\fR, \fBfr550\fR, \fBtomcat\fR, \fBfr500\fR, \fBfr450\fR,
11991 \&\fBfr405\fR, \fBfr400\fR, \fBfr300\fR and \fBsimple\fR.
11992 .PP
11993 \fIGNU/Linux Options\fR
11994 .IX Subsection "GNU/Linux Options"
11995 .PP
11996 These \fB\-m\fR options are defined for GNU/Linux targets:
11997 .IP "\fB\-mglibc\fR" 4
11998 .IX Item "-mglibc"
11999 Use the \s-1GNU\s0 C library.  This is the default except
12000 on \fB*\-*\-linux\-*uclibc*\fR and \fB*\-*\-linux\-*android*\fR targets.
12001 .IP "\fB\-muclibc\fR" 4
12002 .IX Item "-muclibc"
12003 Use uClibc C library.  This is the default on
12004 \&\fB*\-*\-linux\-*uclibc*\fR targets.
12005 .IP "\fB\-mbionic\fR" 4
12006 .IX Item "-mbionic"
12007 Use Bionic C library.  This is the default on
12008 \&\fB*\-*\-linux\-*android*\fR targets.
12009 .IP "\fB\-mandroid\fR" 4
12010 .IX Item "-mandroid"
12011 Compile code compatible with Android platform.  This is the default on
12012 \&\fB*\-*\-linux\-*android*\fR targets.
12013 .Sp
12014 When compiling, this option enables \fB\-mbionic\fR, \fB\-fPIC\fR,
12015 \&\fB\-fno\-exceptions\fR and \fB\-fno\-rtti\fR by default.  When linking,
12016 this option makes the \s-1GCC\s0 driver pass Android-specific options to the linker.
12017 Finally, this option causes the preprocessor macro \f(CW\*(C`_\|_ANDROID_\|_\*(C'\fR
12018 to be defined.
12019 .IP "\fB\-tno\-android\-cc\fR" 4
12020 .IX Item "-tno-android-cc"
12021 Disable compilation effects of \fB\-mandroid\fR, i.e., do not enable
12022 \&\fB\-mbionic\fR, \fB\-fPIC\fR, \fB\-fno\-exceptions\fR and
12023 \&\fB\-fno\-rtti\fR by default.
12024 .IP "\fB\-tno\-android\-ld\fR" 4
12025 .IX Item "-tno-android-ld"
12026 Disable linking effects of \fB\-mandroid\fR, i.e., pass standard Linux
12027 linking options to the linker.
12028 .PP
12029 \fIH8/300 Options\fR
12030 .IX Subsection "H8/300 Options"
12031 .PP
12032 These \fB\-m\fR options are defined for the H8/300 implementations:
12033 .IP "\fB\-mrelax\fR" 4
12034 .IX Item "-mrelax"
12035 Shorten some address references at link time, when possible; uses the
12036 linker option \fB\-relax\fR.
12037 .IP "\fB\-mh\fR" 4
12038 .IX Item "-mh"
12039 Generate code for the H8/300H.
12040 .IP "\fB\-ms\fR" 4
12041 .IX Item "-ms"
12042 Generate code for the H8S.
12043 .IP "\fB\-mn\fR" 4
12044 .IX Item "-mn"
12045 Generate code for the H8S and H8/300H in the normal mode.  This switch
12046 must be used either with \fB\-mh\fR or \fB\-ms\fR.
12047 .IP "\fB\-ms2600\fR" 4
12048 .IX Item "-ms2600"
12049 Generate code for the H8S/2600.  This switch must be used with \fB\-ms\fR.
12050 .IP "\fB\-mint32\fR" 4
12051 .IX Item "-mint32"
12052 Make \f(CW\*(C`int\*(C'\fR data 32 bits by default.
12053 .IP "\fB\-malign\-300\fR" 4
12054 .IX Item "-malign-300"
12055 On the H8/300H and H8S, use the same alignment rules as for the H8/300.
12056 The default for the H8/300H and H8S is to align longs and floats on
12057 4\-byte boundaries.
12058 \&\fB\-malign\-300\fR causes them to be aligned on 2\-byte boundaries.
12059 This option has no effect on the H8/300.
12060 .PP
12061 \fI\s-1HPPA\s0 Options\fR
12062 .IX Subsection "HPPA Options"
12063 .PP
12064 These \fB\-m\fR options are defined for the \s-1HPPA\s0 family of computers:
12065 .IP "\fB\-march=\fR\fIarchitecture-type\fR" 4
12066 .IX Item "-march=architecture-type"
12067 Generate code for the specified architecture.  The choices for
12068 \&\fIarchitecture-type\fR are \fB1.0\fR for \s-1PA\s0 1.0, \fB1.1\fR for \s-1PA\s0
12069 1.1, and \fB2.0\fR for \s-1PA\s0 2.0 processors.  Refer to
12070 \&\fI/usr/lib/sched.models\fR on an HP-UX system to determine the proper
12071 architecture option for your machine.  Code compiled for lower numbered
12072 architectures will run on higher numbered architectures, but not the
12073 other way around.
12074 .IP "\fB\-mpa\-risc\-1\-0\fR" 4
12075 .IX Item "-mpa-risc-1-0"
12076 .PD 0
12077 .IP "\fB\-mpa\-risc\-1\-1\fR" 4
12078 .IX Item "-mpa-risc-1-1"
12079 .IP "\fB\-mpa\-risc\-2\-0\fR" 4
12080 .IX Item "-mpa-risc-2-0"
12081 .PD
12082 Synonyms for \fB\-march=1.0\fR, \fB\-march=1.1\fR, and \fB\-march=2.0\fR respectively.
12083 .IP "\fB\-mbig\-switch\fR" 4
12084 .IX Item "-mbig-switch"
12085 Generate code suitable for big switch tables.  Use this option only if
12086 the assembler/linker complain about out of range branches within a switch
12087 table.
12088 .IP "\fB\-mjump\-in\-delay\fR" 4
12089 .IX Item "-mjump-in-delay"
12090 Fill delay slots of function calls with unconditional jump instructions
12091 by modifying the return pointer for the function call to be the target
12092 of the conditional jump.
12093 .IP "\fB\-mdisable\-fpregs\fR" 4
12094 .IX Item "-mdisable-fpregs"
12095 Prevent floating-point registers from being used in any manner.  This is
12096 necessary for compiling kernels that perform lazy context switching of
12097 floating-point registers.  If you use this option and attempt to perform
12098 floating-point operations, the compiler aborts.
12099 .IP "\fB\-mdisable\-indexing\fR" 4
12100 .IX Item "-mdisable-indexing"
12101 Prevent the compiler from using indexing address modes.  This avoids some
12102 rather obscure problems when compiling \s-1MIG\s0 generated code under \s-1MACH\s0.
12103 .IP "\fB\-mno\-space\-regs\fR" 4
12104 .IX Item "-mno-space-regs"
12105 Generate code that assumes the target has no space registers.  This allows
12106 \&\s-1GCC\s0 to generate faster indirect calls and use unscaled index address modes.
12107 .Sp
12108 Such code is suitable for level 0 \s-1PA\s0 systems and kernels.
12109 .IP "\fB\-mfast\-indirect\-calls\fR" 4
12110 .IX Item "-mfast-indirect-calls"
12111 Generate code that assumes calls never cross space boundaries.  This
12112 allows \s-1GCC\s0 to emit code that performs faster indirect calls.
12113 .Sp
12114 This option will not work in the presence of shared libraries or nested
12115 functions.
12116 .IP "\fB\-mfixed\-range=\fR\fIregister-range\fR" 4
12117 .IX Item "-mfixed-range=register-range"
12118 Generate code treating the given register range as fixed registers.
12119 A fixed register is one that the register allocator can not use.  This is
12120 useful when compiling kernel code.  A register range is specified as
12121 two registers separated by a dash.  Multiple register ranges can be
12122 specified separated by a comma.
12123 .IP "\fB\-mlong\-load\-store\fR" 4
12124 .IX Item "-mlong-load-store"
12125 Generate 3\-instruction load and store sequences as sometimes required by
12126 the HP-UX 10 linker.  This is equivalent to the \fB+k\fR option to
12127 the \s-1HP\s0 compilers.
12128 .IP "\fB\-mportable\-runtime\fR" 4
12129 .IX Item "-mportable-runtime"
12130 Use the portable calling conventions proposed by \s-1HP\s0 for \s-1ELF\s0 systems.
12131 .IP "\fB\-mgas\fR" 4
12132 .IX Item "-mgas"
12133 Enable the use of assembler directives only \s-1GAS\s0 understands.
12134 .IP "\fB\-mschedule=\fR\fIcpu-type\fR" 4
12135 .IX Item "-mschedule=cpu-type"
12136 Schedule code according to the constraints for the machine type
12137 \&\fIcpu-type\fR.  The choices for \fIcpu-type\fR are \fB700\fR
12138 \&\fB7100\fR, \fB7100LC\fR, \fB7200\fR, \fB7300\fR and \fB8000\fR.  Refer
12139 to \fI/usr/lib/sched.models\fR on an HP-UX system to determine the
12140 proper scheduling option for your machine.  The default scheduling is
12141 \&\fB8000\fR.
12142 .IP "\fB\-mlinker\-opt\fR" 4
12143 .IX Item "-mlinker-opt"
12144 Enable the optimization pass in the HP-UX linker.  Note this makes symbolic
12145 debugging impossible.  It also triggers a bug in the HP-UX 8 and HP-UX 9
12146 linkers in which they give bogus error messages when linking some programs.
12147 .IP "\fB\-msoft\-float\fR" 4
12148 .IX Item "-msoft-float"
12149 Generate output containing library calls for floating point.
12150 \&\fBWarning:\fR the requisite libraries are not available for all \s-1HPPA\s0
12151 targets.  Normally the facilities of the machine's usual C compiler are
12152 used, but this cannot be done directly in cross-compilation.  You must make
12153 your own arrangements to provide suitable library functions for
12154 cross-compilation.
12155 .Sp
12156 \&\fB\-msoft\-float\fR changes the calling convention in the output file;
12157 therefore, it is only useful if you compile \fIall\fR of a program with
12158 this option.  In particular, you need to compile \fIlibgcc.a\fR, the
12159 library that comes with \s-1GCC\s0, with \fB\-msoft\-float\fR in order for
12160 this to work.
12161 .IP "\fB\-msio\fR" 4
12162 .IX Item "-msio"
12163 Generate the predefine, \f(CW\*(C`_SIO\*(C'\fR, for server \s-1IO\s0.  The default is
12164 \&\fB\-mwsio\fR.  This generates the predefines, \f(CW\*(C`_\|_hp9000s700\*(C'\fR,
12165 \&\f(CW\*(C`_\|_hp9000s700_\|_\*(C'\fR and \f(CW\*(C`_WSIO\*(C'\fR, for workstation \s-1IO\s0.  These
12166 options are available under HP-UX and HI-UX.
12167 .IP "\fB\-mgnu\-ld\fR" 4
12168 .IX Item "-mgnu-ld"
12169 Use \s-1GNU\s0 ld specific options.  This passes \fB\-shared\fR to ld when
12170 building a shared library.  It is the default when \s-1GCC\s0 is configured,
12171 explicitly or implicitly, with the \s-1GNU\s0 linker.  This option does not
12172 have any affect on which ld is called, it only changes what parameters
12173 are passed to that ld.  The ld that is called is determined by the
12174 \&\fB\-\-with\-ld\fR configure option, \s-1GCC\s0's program search path, and
12175 finally by the user's \fB\s-1PATH\s0\fR.  The linker used by \s-1GCC\s0 can be printed
12176 using \fBwhich `gcc \-print\-prog\-name=ld`\fR.  This option is only available
12177 on the 64\-bit HP-UX \s-1GCC\s0, i.e. configured with \fBhppa*64*\-*\-hpux*\fR.
12178 .IP "\fB\-mhp\-ld\fR" 4
12179 .IX Item "-mhp-ld"
12180 Use \s-1HP\s0 ld specific options.  This passes \fB\-b\fR to ld when building
12181 a shared library and passes \fB+Accept TypeMismatch\fR to ld on all
12182 links.  It is the default when \s-1GCC\s0 is configured, explicitly or
12183 implicitly, with the \s-1HP\s0 linker.  This option does not have any affect on
12184 which ld is called, it only changes what parameters are passed to that
12185 ld.  The ld that is called is determined by the \fB\-\-with\-ld\fR
12186 configure option, \s-1GCC\s0's program search path, and finally by the user's
12187 \&\fB\s-1PATH\s0\fR.  The linker used by \s-1GCC\s0 can be printed using \fBwhich
12188 `gcc \-print\-prog\-name=ld`\fR.  This option is only available on the 64\-bit
12189 HP-UX \s-1GCC\s0, i.e. configured with \fBhppa*64*\-*\-hpux*\fR.
12190 .IP "\fB\-mlong\-calls\fR" 4
12191 .IX Item "-mlong-calls"
12192 Generate code that uses long call sequences.  This ensures that a call
12193 is always able to reach linker generated stubs.  The default is to generate
12194 long calls only when the distance from the call site to the beginning
12195 of the function or translation unit, as the case may be, exceeds a
12196 predefined limit set by the branch type being used.  The limits for
12197 normal calls are 7,600,000 and 240,000 bytes, respectively for the
12198 \&\s-1PA\s0 2.0 and \s-1PA\s0 1.X architectures.  Sibcalls are always limited at
12199 240,000 bytes.
12200 .Sp
12201 Distances are measured from the beginning of functions when using the
12202 \&\fB\-ffunction\-sections\fR option, or when using the \fB\-mgas\fR
12203 and \fB\-mno\-portable\-runtime\fR options together under HP-UX with
12204 the \s-1SOM\s0 linker.
12205 .Sp
12206 It is normally not desirable to use this option as it will degrade
12207 performance.  However, it may be useful in large applications,
12208 particularly when partial linking is used to build the application.
12209 .Sp
12210 The types of long calls used depends on the capabilities of the
12211 assembler and linker, and the type of code being generated.  The
12212 impact on systems that support long absolute calls, and long pic
12213 symbol-difference or pc-relative calls should be relatively small.
12214 However, an indirect call is used on 32\-bit \s-1ELF\s0 systems in pic code
12215 and it is quite long.
12216 .IP "\fB\-munix=\fR\fIunix-std\fR" 4
12217 .IX Item "-munix=unix-std"
12218 Generate compiler predefines and select a startfile for the specified
12219 \&\s-1UNIX\s0 standard.  The choices for \fIunix-std\fR are \fB93\fR, \fB95\fR
12220 and \fB98\fR.  \fB93\fR is supported on all HP-UX versions.  \fB95\fR
12221 is available on HP-UX 10.10 and later.  \fB98\fR is available on HP-UX
12222 11.11 and later.  The default values are \fB93\fR for HP-UX 10.00,
12223 \&\fB95\fR for HP-UX 10.10 though to 11.00, and \fB98\fR for HP-UX 11.11
12224 and later.
12225 .Sp
12226 \&\fB\-munix=93\fR provides the same predefines as \s-1GCC\s0 3.3 and 3.4.
12227 \&\fB\-munix=95\fR provides additional predefines for \f(CW\*(C`XOPEN_UNIX\*(C'\fR
12228 and \f(CW\*(C`_XOPEN_SOURCE_EXTENDED\*(C'\fR, and the startfile \fIunix95.o\fR.
12229 \&\fB\-munix=98\fR provides additional predefines for \f(CW\*(C`_XOPEN_UNIX\*(C'\fR,
12230 \&\f(CW\*(C`_XOPEN_SOURCE_EXTENDED\*(C'\fR, \f(CW\*(C`_INCLUDE_\|_STDC_A1_SOURCE\*(C'\fR and
12231 \&\f(CW\*(C`_INCLUDE_XOPEN_SOURCE_500\*(C'\fR, and the startfile \fIunix98.o\fR.
12232 .Sp
12233 It is \fIimportant\fR to note that this option changes the interfaces
12234 for various library routines.  It also affects the operational behavior
12235 of the C library.  Thus, \fIextreme\fR care is needed in using this
12236 option.
12237 .Sp
12238 Library code that is intended to operate with more than one \s-1UNIX\s0
12239 standard must test, set and restore the variable \fI_\|_xpg4_extended_mask\fR
12240 as appropriate.  Most \s-1GNU\s0 software doesn't provide this capability.
12241 .IP "\fB\-nolibdld\fR" 4
12242 .IX Item "-nolibdld"
12243 Suppress the generation of link options to search libdld.sl when the
12244 \&\fB\-static\fR option is specified on HP-UX 10 and later.
12245 .IP "\fB\-static\fR" 4
12246 .IX Item "-static"
12247 The HP-UX implementation of setlocale in libc has a dependency on
12248 libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
12249 when the \fB\-static\fR option is specified, special link options
12250 are needed to resolve this dependency.
12251 .Sp
12252 On HP-UX 10 and later, the \s-1GCC\s0 driver adds the necessary options to
12253 link with libdld.sl when the \fB\-static\fR option is specified.
12254 This causes the resulting binary to be dynamic.  On the 64\-bit port,
12255 the linkers generate dynamic binaries by default in any case.  The
12256 \&\fB\-nolibdld\fR option can be used to prevent the \s-1GCC\s0 driver from
12257 adding these link options.
12258 .IP "\fB\-threads\fR" 4
12259 .IX Item "-threads"
12260 Add support for multithreading with the \fIdce thread\fR library
12261 under HP-UX.  This option sets flags for both the preprocessor and
12262 linker.
12263 .PP
12264 \fIIntel 386 and \s-1AMD\s0 x86\-64 Options\fR
12265 .IX Subsection "Intel 386 and AMD x86-64 Options"
12266 .PP
12267 These \fB\-m\fR options are defined for the i386 and x86\-64 family of
12268 computers:
12269 .IP "\fB\-mtune=\fR\fIcpu-type\fR" 4
12270 .IX Item "-mtune=cpu-type"
12271 Tune to \fIcpu-type\fR everything applicable about the generated code, except
12272 for the \s-1ABI\s0 and the set of available instructions.  The choices for
12273 \&\fIcpu-type\fR are:
12274 .RS 4
12275 .IP "\fIgeneric\fR" 4
12276 .IX Item "generic"
12277 Produce code optimized for the most common \s-1IA32/AMD64/EM64T\s0 processors.
12278 If you know the \s-1CPU\s0 on which your code will run, then you should use
12279 the corresponding \fB\-mtune\fR option instead of
12280 \&\fB\-mtune=generic\fR.  But, if you do not know exactly what \s-1CPU\s0 users
12281 of your application will have, then you should use this option.
12282 .Sp
12283 As new processors are deployed in the marketplace, the behavior of this
12284 option will change.  Therefore, if you upgrade to a newer version of
12285 \&\s-1GCC\s0, the code generated option will change to reflect the processors
12286 that were most common when that version of \s-1GCC\s0 was released.
12287 .Sp
12288 There is no \fB\-march=generic\fR option because \fB\-march\fR
12289 indicates the instruction set the compiler can use, and there is no
12290 generic instruction set applicable to all processors.  In contrast,
12291 \&\fB\-mtune\fR indicates the processor (or, in this case, collection of
12292 processors) for which the code is optimized.
12293 .IP "\fInative\fR" 4
12294 .IX Item "native"
12295 This selects the \s-1CPU\s0 to tune for at compilation time by determining
12296 the processor type of the compiling machine.  Using \fB\-mtune=native\fR
12297 will produce code optimized for the local machine under the constraints
12298 of the selected instruction set.  Using \fB\-march=native\fR will
12299 enable all instruction subsets supported by the local machine (hence
12300 the result might not run on different machines).
12301 .IP "\fIi386\fR" 4
12302 .IX Item "i386"
12303 Original Intel's i386 \s-1CPU\s0.
12304 .IP "\fIi486\fR" 4
12305 .IX Item "i486"
12306 Intel's i486 \s-1CPU\s0.  (No scheduling is implemented for this chip.)
12307 .IP "\fIi586, pentium\fR" 4
12308 .IX Item "i586, pentium"
12309 Intel Pentium \s-1CPU\s0 with no \s-1MMX\s0 support.
12310 .IP "\fIpentium-mmx\fR" 4
12311 .IX Item "pentium-mmx"
12312 Intel PentiumMMX \s-1CPU\s0 based on Pentium core with \s-1MMX\s0 instruction set support.
12313 .IP "\fIpentiumpro\fR" 4
12314 .IX Item "pentiumpro"
12315 Intel PentiumPro \s-1CPU\s0.
12316 .IP "\fIi686\fR" 4
12317 .IX Item "i686"
12318 Same as \f(CW\*(C`generic\*(C'\fR, but when used as \f(CW\*(C`march\*(C'\fR option, PentiumPro
12319 instruction set will be used, so the code will run on all i686 family chips.
12320 .IP "\fIpentium2\fR" 4
12321 .IX Item "pentium2"
12322 Intel Pentium2 \s-1CPU\s0 based on PentiumPro core with \s-1MMX\s0 instruction set support.
12323 .IP "\fIpentium3, pentium3m\fR" 4
12324 .IX Item "pentium3, pentium3m"
12325 Intel Pentium3 \s-1CPU\s0 based on PentiumPro core with \s-1MMX\s0 and \s-1SSE\s0 instruction set
12326 support.
12327 .IP "\fIpentium-m\fR" 4
12328 .IX Item "pentium-m"
12329 Low power version of Intel Pentium3 \s-1CPU\s0 with \s-1MMX\s0, \s-1SSE\s0 and \s-1SSE2\s0 instruction set
12330 support.  Used by Centrino notebooks.
12331 .IP "\fIpentium4, pentium4m\fR" 4
12332 .IX Item "pentium4, pentium4m"
12333 Intel Pentium4 \s-1CPU\s0 with \s-1MMX\s0, \s-1SSE\s0 and \s-1SSE2\s0 instruction set support.
12334 .IP "\fIprescott\fR" 4
12335 .IX Item "prescott"
12336 Improved version of Intel Pentium4 \s-1CPU\s0 with \s-1MMX\s0, \s-1SSE\s0, \s-1SSE2\s0 and \s-1SSE3\s0 instruction
12337 set support.
12338 .IP "\fInocona\fR" 4
12339 .IX Item "nocona"
12340 Improved version of Intel Pentium4 \s-1CPU\s0 with 64\-bit extensions, \s-1MMX\s0, \s-1SSE\s0,
12341 \&\s-1SSE2\s0 and \s-1SSE3\s0 instruction set support.
12342 .IP "\fIcore2\fR" 4
12343 .IX Item "core2"
12344 Intel Core2 \s-1CPU\s0 with 64\-bit extensions, \s-1MMX\s0, \s-1SSE\s0, \s-1SSE2\s0, \s-1SSE3\s0 and \s-1SSSE3\s0
12345 instruction set support.
12346 .IP "\fIcorei7\fR" 4
12347 .IX Item "corei7"
12348 Intel Core i7 \s-1CPU\s0 with 64\-bit extensions, \s-1MMX\s0, \s-1SSE\s0, \s-1SSE2\s0, \s-1SSE3\s0, \s-1SSSE3\s0, \s-1SSE4\s0.1
12349 and \s-1SSE4\s0.2 instruction set support.
12350 .IP "\fIcorei7\-avx\fR" 4
12351 .IX Item "corei7-avx"
12352 Intel Core i7 \s-1CPU\s0 with 64\-bit extensions, \s-1MMX\s0, \s-1SSE\s0, \s-1SSE2\s0, \s-1SSE3\s0, \s-1SSSE3\s0,
12353 \&\s-1SSE4\s0.1, \s-1SSE4\s0.2, \s-1AVX\s0, \s-1AES\s0 and \s-1PCLMUL\s0 instruction set support.
12354 .IP "\fIcore-avx-i\fR" 4
12355 .IX Item "core-avx-i"
12356 Intel Core \s-1CPU\s0 with 64\-bit extensions, \s-1MMX\s0, \s-1SSE\s0, \s-1SSE2\s0, \s-1SSE3\s0, \s-1SSSE3\s0,
12357 \&\s-1SSE4\s0.1, \s-1SSE4\s0.2, \s-1AVX\s0, \s-1AES\s0, \s-1PCLMUL\s0, \s-1FSGSBASE\s0, \s-1RDRND\s0 and F16C instruction
12358 set support.
12359 .IP "\fIatom\fR" 4
12360 .IX Item "atom"
12361 Intel Atom \s-1CPU\s0 with 64\-bit extensions, \s-1MMX\s0, \s-1SSE\s0, \s-1SSE2\s0, \s-1SSE3\s0 and \s-1SSSE3\s0
12362 instruction set support.
12363 .IP "\fIk6\fR" 4
12364 .IX Item "k6"
12365 \&\s-1AMD\s0 K6 \s-1CPU\s0 with \s-1MMX\s0 instruction set support.
12366 .IP "\fIk6\-2, k6\-3\fR" 4
12367 .IX Item "k6-2, k6-3"
12368 Improved versions of \s-1AMD\s0 K6 \s-1CPU\s0 with \s-1MMX\s0 and 3DNow! instruction set support.
12369 .IP "\fIathlon, athlon-tbird\fR" 4
12370 .IX Item "athlon, athlon-tbird"
12371 \&\s-1AMD\s0 Athlon \s-1CPU\s0 with \s-1MMX\s0, 3dNOW!, enhanced 3DNow! and \s-1SSE\s0 prefetch instructions
12372 support.
12373 .IP "\fIathlon\-4, athlon-xp, athlon-mp\fR" 4
12374 .IX Item "athlon-4, athlon-xp, athlon-mp"
12375 Improved \s-1AMD\s0 Athlon \s-1CPU\s0 with \s-1MMX\s0, 3DNow!, enhanced 3DNow! and full \s-1SSE\s0
12376 instruction set support.
12377 .IP "\fIk8, opteron, athlon64, athlon-fx\fR" 4
12378 .IX Item "k8, opteron, athlon64, athlon-fx"
12379 \&\s-1AMD\s0 K8 core based CPUs with x86\-64 instruction set support.  (This supersets
12380 \&\s-1MMX\s0, \s-1SSE\s0, \s-1SSE2\s0, 3DNow!, enhanced 3DNow! and 64\-bit instruction set extensions.)
12381 .IP "\fIk8\-sse3, opteron\-sse3, athlon64\-sse3\fR" 4
12382 .IX Item "k8-sse3, opteron-sse3, athlon64-sse3"
12383 Improved versions of k8, opteron and athlon64 with \s-1SSE3\s0 instruction set support.
12384 .IP "\fIamdfam10, barcelona\fR" 4
12385 .IX Item "amdfam10, barcelona"
12386 \&\s-1AMD\s0 Family 10h core based CPUs with x86\-64 instruction set support.  (This
12387 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
12388 instruction set extensions.)
12389 .IP "\fIbdver1\fR" 4
12390 .IX Item "bdver1"
12391 \&\s-1AMD\s0 Family 15h core based CPUs with x86\-64 instruction set support.  (This
12392 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,
12393 \&\s-1SSSE3\s0, \s-1SSE4\s0.1, \s-1SSE4\s0.2, \s-1ABM\s0 and 64\-bit instruction set extensions.)
12394 .IP "\fIbdver2\fR" 4
12395 .IX Item "bdver2"
12396 \&\s-1AMD\s0 Family 15h core based CPUs with x86\-64 instruction set support.  (This
12397 supersets \s-1BMI\s0, \s-1TBM\s0, F16C, \s-1FMA\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,
12398 \&\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 
12399 extensions.)
12400 .IP "\fIbtver1\fR" 4
12401 .IX Item "btver1"
12402 \&\s-1AMD\s0 Family 14h core based CPUs with x86\-64 instruction set support.  (This
12403 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
12404 instruction set extensions.)
12405 .IP "\fIwinchip\-c6\fR" 4
12406 .IX Item "winchip-c6"
12407 \&\s-1IDT\s0 Winchip C6 \s-1CPU\s0, dealt in same way as i486 with additional \s-1MMX\s0 instruction
12408 set support.
12409 .IP "\fIwinchip2\fR" 4
12410 .IX Item "winchip2"
12411 \&\s-1IDT\s0 Winchip2 \s-1CPU\s0, dealt in same way as i486 with additional \s-1MMX\s0 and 3DNow!
12412 instruction set support.
12413 .IP "\fIc3\fR" 4
12414 .IX Item "c3"
12415 Via C3 \s-1CPU\s0 with \s-1MMX\s0 and 3DNow! instruction set support.  (No scheduling is
12416 implemented for this chip.)
12417 .IP "\fIc3\-2\fR" 4
12418 .IX Item "c3-2"
12419 Via C3\-2 \s-1CPU\s0 with \s-1MMX\s0 and \s-1SSE\s0 instruction set support.  (No scheduling is
12420 implemented for this chip.)
12421 .IP "\fIgeode\fR" 4
12422 .IX Item "geode"
12423 Embedded \s-1AMD\s0 \s-1CPU\s0 with \s-1MMX\s0 and 3DNow! instruction set support.
12424 .RE
12425 .RS 4
12426 .Sp
12427 While picking a specific \fIcpu-type\fR will schedule things appropriately
12428 for that particular chip, the compiler will not generate any code that
12429 does not run on the default machine type without the \fB\-march=\fR\fIcpu-type\fR
12430 option being used. For example, if \s-1GCC\s0 is configured for i686\-pc\-linux\-gnu
12431 then \fB\-mtune=pentium4\fR will generate code that is tuned for Pentium4
12432 but will still run on i686 machines.
12433 .RE
12434 .IP "\fB\-march=\fR\fIcpu-type\fR" 4
12435 .IX Item "-march=cpu-type"
12436 Generate instructions for the machine type \fIcpu-type\fR.  The choices
12437 for \fIcpu-type\fR are the same as for \fB\-mtune\fR.  Moreover,
12438 specifying \fB\-march=\fR\fIcpu-type\fR implies \fB\-mtune=\fR\fIcpu-type\fR.
12439 .IP "\fB\-mcpu=\fR\fIcpu-type\fR" 4
12440 .IX Item "-mcpu=cpu-type"
12441 A deprecated synonym for \fB\-mtune\fR.
12442 .IP "\fB\-mfpmath=\fR\fIunit\fR" 4
12443 .IX Item "-mfpmath=unit"
12444 Generate floating-point arithmetic for selected unit \fIunit\fR.  The choices
12445 for \fIunit\fR are:
12446 .RS 4
12447 .IP "\fB387\fR" 4
12448 .IX Item "387"
12449 Use the standard 387 floating-point coprocessor present on the majority of chips and
12450 emulated otherwise.  Code compiled with this option runs almost everywhere.
12451 The temporary results are computed in 80\-bit precision instead of the precision
12452 specified by the type, resulting in slightly different results compared to most
12453 of other chips.  See \fB\-ffloat\-store\fR for more detailed description.
12454 .Sp
12455 This is the default choice for i386 compiler.
12456 .IP "\fBsse\fR" 4
12457 .IX Item "sse"
12458 Use scalar floating-point instructions present in the \s-1SSE\s0 instruction set.
12459 This instruction set is supported by Pentium3 and newer chips, in the \s-1AMD\s0 line
12460 by Athlon\-4, Athlon-xp and Athlon-mp chips.  The earlier version of \s-1SSE\s0
12461 instruction set supports only single-precision arithmetic, thus the double and
12462 extended-precision arithmetic are still done using 387.  A later version, present
12463 only in Pentium4 and the future \s-1AMD\s0 x86\-64 chips, supports double-precision
12464 arithmetic too.
12465 .Sp
12466 For the i386 compiler, you need to use \fB\-march=\fR\fIcpu-type\fR, \fB\-msse\fR
12467 or \fB\-msse2\fR switches to enable \s-1SSE\s0 extensions and make this option
12468 effective.  For the x86\-64 compiler, these extensions are enabled by default.
12469 .Sp
12470 The resulting code should be considerably faster in the majority of cases and avoid
12471 the numerical instability problems of 387 code, but may break some existing
12472 code that expects temporaries to be 80 bits.
12473 .Sp
12474 This is the default choice for the x86\-64 compiler.
12475 .IP "\fBsse,387\fR" 4
12476 .IX Item "sse,387"
12477 .PD 0
12478 .IP "\fBsse+387\fR" 4
12479 .IX Item "sse+387"
12480 .IP "\fBboth\fR" 4
12481 .IX Item "both"
12482 .PD
12483 Attempt to utilize both instruction sets at once.  This effectively double the
12484 amount of available registers and on chips with separate execution units for
12485 387 and \s-1SSE\s0 the execution resources too.  Use this option with care, as it is
12486 still experimental, because the \s-1GCC\s0 register allocator does not model separate
12487 functional units well resulting in instable performance.
12488 .RE
12489 .RS 4
12490 .RE
12491 .IP "\fB\-masm=\fR\fIdialect\fR" 4
12492 .IX Item "-masm=dialect"
12493 Output asm instructions using selected \fIdialect\fR.  Supported
12494 choices are \fBintel\fR or \fBatt\fR (the default one).  Darwin does
12495 not support \fBintel\fR.
12496 .IP "\fB\-mieee\-fp\fR" 4
12497 .IX Item "-mieee-fp"
12498 .PD 0
12499 .IP "\fB\-mno\-ieee\-fp\fR" 4
12500 .IX Item "-mno-ieee-fp"
12501 .PD
12502 Control whether or not the compiler uses \s-1IEEE\s0 floating-point
12503 comparisons.  These handle correctly the case where the result of a
12504 comparison is unordered.
12505 .IP "\fB\-msoft\-float\fR" 4
12506 .IX Item "-msoft-float"
12507 Generate output containing library calls for floating point.
12508 \&\fBWarning:\fR the requisite libraries are not part of \s-1GCC\s0.
12509 Normally the facilities of the machine's usual C compiler are used, but
12510 this can't be done directly in cross-compilation.  You must make your
12511 own arrangements to provide suitable library functions for
12512 cross-compilation.
12513 .Sp
12514 On machines where a function returns floating-point results in the 80387
12515 register stack, some floating-point opcodes may be emitted even if
12516 \&\fB\-msoft\-float\fR is used.
12517 .IP "\fB\-mno\-fp\-ret\-in\-387\fR" 4
12518 .IX Item "-mno-fp-ret-in-387"
12519 Do not use the \s-1FPU\s0 registers for return values of functions.
12520 .Sp
12521 The usual calling convention has functions return values of types
12522 \&\f(CW\*(C`float\*(C'\fR and \f(CW\*(C`double\*(C'\fR in an \s-1FPU\s0 register, even if there
12523 is no \s-1FPU\s0.  The idea is that the operating system should emulate
12524 an \s-1FPU\s0.
12525 .Sp
12526 The option \fB\-mno\-fp\-ret\-in\-387\fR causes such values to be returned
12527 in ordinary \s-1CPU\s0 registers instead.
12528 .IP "\fB\-mno\-fancy\-math\-387\fR" 4
12529 .IX Item "-mno-fancy-math-387"
12530 Some 387 emulators do not support the \f(CW\*(C`sin\*(C'\fR, \f(CW\*(C`cos\*(C'\fR and
12531 \&\f(CW\*(C`sqrt\*(C'\fR instructions for the 387.  Specify this option to avoid
12532 generating those instructions.  This option is the default on FreeBSD,
12533 OpenBSD and NetBSD.  This option is overridden when \fB\-march\fR
12534 indicates that the target \s-1CPU\s0 will always have an \s-1FPU\s0 and so the
12535 instruction will not need emulation.  As of revision 2.6.1, these
12536 instructions are not generated unless you also use the
12537 \&\fB\-funsafe\-math\-optimizations\fR switch.
12538 .IP "\fB\-malign\-double\fR" 4
12539 .IX Item "-malign-double"
12540 .PD 0
12541 .IP "\fB\-mno\-align\-double\fR" 4
12542 .IX Item "-mno-align-double"
12543 .PD
12544 Control whether \s-1GCC\s0 aligns \f(CW\*(C`double\*(C'\fR, \f(CW\*(C`long double\*(C'\fR, and
12545 \&\f(CW\*(C`long long\*(C'\fR variables on a two-word boundary or a one-word
12546 boundary.  Aligning \f(CW\*(C`double\*(C'\fR variables on a two-word boundary
12547 produces code that runs somewhat faster on a \fBPentium\fR at the
12548 expense of more memory.
12549 .Sp
12550 On x86\-64, \fB\-malign\-double\fR is enabled by default.
12551 .Sp
12552 \&\fBWarning:\fR if you use the \fB\-malign\-double\fR switch,
12553 structures containing the above types will be aligned differently than
12554 the published application binary interface specifications for the 386
12555 and will not be binary compatible with structures in code compiled
12556 without that switch.
12557 .IP "\fB\-m96bit\-long\-double\fR" 4
12558 .IX Item "-m96bit-long-double"
12559 .PD 0
12560 .IP "\fB\-m128bit\-long\-double\fR" 4
12561 .IX Item "-m128bit-long-double"
12562 .PD
12563 These switches control the size of \f(CW\*(C`long double\*(C'\fR type.  The i386
12564 application binary interface specifies the size to be 96 bits,
12565 so \fB\-m96bit\-long\-double\fR is the default in 32\-bit mode.
12566 .Sp
12567 Modern architectures (Pentium and newer) prefer \f(CW\*(C`long double\*(C'\fR
12568 to be aligned to an 8\- or 16\-byte boundary.  In arrays or structures
12569 conforming to the \s-1ABI\s0, this is not possible.  So specifying
12570 \&\fB\-m128bit\-long\-double\fR aligns \f(CW\*(C`long double\*(C'\fR
12571 to a 16\-byte boundary by padding the \f(CW\*(C`long double\*(C'\fR with an additional
12572 32\-bit zero.
12573 .Sp
12574 In the x86\-64 compiler, \fB\-m128bit\-long\-double\fR is the default choice as
12575 its \s-1ABI\s0 specifies that \f(CW\*(C`long double\*(C'\fR is to be aligned on 16\-byte boundary.
12576 .Sp
12577 Notice that neither of these options enable any extra precision over the x87
12578 standard of 80 bits for a \f(CW\*(C`long double\*(C'\fR.
12579 .Sp
12580 \&\fBWarning:\fR if you override the default value for your target \s-1ABI\s0, the
12581 structures and arrays containing \f(CW\*(C`long double\*(C'\fR variables will change
12582 their size as well as function calling convention for function taking
12583 \&\f(CW\*(C`long double\*(C'\fR will be modified.  Hence they will not be binary
12584 compatible with arrays or structures in code compiled without that switch.
12585 .IP "\fB\-mlarge\-data\-threshold=\fR\fInumber\fR" 4
12586 .IX Item "-mlarge-data-threshold=number"
12587 When \fB\-mcmodel=medium\fR is specified, the data greater than
12588 \&\fIthreshold\fR are placed in large data section.  This value must be the
12589 same across all object linked into the binary and defaults to 65535.
12590 .IP "\fB\-mrtd\fR" 4
12591 .IX Item "-mrtd"
12592 Use a different function-calling convention, in which functions that
12593 take a fixed number of arguments return with the \f(CW\*(C`ret\*(C'\fR \fInum\fR
12594 instruction, which pops their arguments while returning.  This saves one
12595 instruction in the caller since there is no need to pop the arguments
12596 there.
12597 .Sp
12598 You can specify that an individual function is called with this calling
12599 sequence with the function attribute \fBstdcall\fR.  You can also
12600 override the \fB\-mrtd\fR option by using the function attribute
12601 \&\fBcdecl\fR.
12602 .Sp
12603 \&\fBWarning:\fR this calling convention is incompatible with the one
12604 normally used on Unix, so you cannot use it if you need to call
12605 libraries compiled with the Unix compiler.
12606 .Sp
12607 Also, you must provide function prototypes for all functions that
12608 take variable numbers of arguments (including \f(CW\*(C`printf\*(C'\fR);
12609 otherwise incorrect code will be generated for calls to those
12610 functions.
12611 .Sp
12612 In addition, seriously incorrect code will result if you call a
12613 function with too many arguments.  (Normally, extra arguments are
12614 harmlessly ignored.)
12615 .IP "\fB\-mregparm=\fR\fInum\fR" 4
12616 .IX Item "-mregparm=num"
12617 Control how many registers are used to pass integer arguments.  By
12618 default, no registers are used to pass arguments, and at most 3
12619 registers can be used.  You can control this behavior for a specific
12620 function by using the function attribute \fBregparm\fR.
12621 .Sp
12622 \&\fBWarning:\fR if you use this switch, and
12623 \&\fInum\fR is nonzero, then you must build all modules with the same
12624 value, including any libraries.  This includes the system libraries and
12625 startup modules.
12626 .IP "\fB\-msseregparm\fR" 4
12627 .IX Item "-msseregparm"
12628 Use \s-1SSE\s0 register passing conventions for float and double arguments
12629 and return values.  You can control this behavior for a specific
12630 function by using the function attribute \fBsseregparm\fR.
12631 .Sp
12632 \&\fBWarning:\fR if you use this switch then you must build all
12633 modules with the same value, including any libraries.  This includes
12634 the system libraries and startup modules.
12635 .IP "\fB\-mvect8\-ret\-in\-mem\fR" 4
12636 .IX Item "-mvect8-ret-in-mem"
12637 Return 8\-byte vectors in memory instead of \s-1MMX\s0 registers.  This is the
12638 default on Solaris@tie{}8 and 9 and VxWorks to match the \s-1ABI\s0 of the Sun
12639 Studio compilers until version 12.  Later compiler versions (starting
12640 with Studio 12 Update@tie{}1) follow the \s-1ABI\s0 used by other x86 targets, which
12641 is the default on Solaris@tie{}10 and later.  \fIOnly\fR use this option if
12642 you need to remain compatible with existing code produced by those
12643 previous compiler versions or older versions of \s-1GCC\s0.
12644 .IP "\fB\-mpc32\fR" 4
12645 .IX Item "-mpc32"
12646 .PD 0
12647 .IP "\fB\-mpc64\fR" 4
12648 .IX Item "-mpc64"
12649 .IP "\fB\-mpc80\fR" 4
12650 .IX Item "-mpc80"
12651 .PD
12652 Set 80387 floating-point precision to 32, 64 or 80 bits.  When \fB\-mpc32\fR
12653 is specified, the significands of results of floating-point operations are
12654 rounded to 24 bits (single precision); \fB\-mpc64\fR rounds the
12655 significands of results of floating-point operations to 53 bits (double
12656 precision) and \fB\-mpc80\fR rounds the significands of results of
12657 floating-point operations to 64 bits (extended double precision), which is
12658 the default.  When this option is used, floating-point operations in higher
12659 precisions are not available to the programmer without setting the \s-1FPU\s0
12660 control word explicitly.
12661 .Sp
12662 Setting the rounding of floating-point operations to less than the default
12663 80 bits can speed some programs by 2% or more.  Note that some mathematical
12664 libraries assume that extended-precision (80\-bit) floating-point operations
12665 are enabled by default; routines in such libraries could suffer significant
12666 loss of accuracy, typically through so-called \*(L"catastrophic cancellation\*(R",
12667 when this option is used to set the precision to less than extended precision.
12668 .IP "\fB\-mstackrealign\fR" 4
12669 .IX Item "-mstackrealign"
12670 Realign the stack at entry.  On the Intel x86, the \fB\-mstackrealign\fR
12671 option will generate an alternate prologue and epilogue that realigns the
12672 run-time stack if necessary.  This supports mixing legacy codes that keep
12673 a 4\-byte aligned stack with modern codes that keep a 16\-byte stack for
12674 \&\s-1SSE\s0 compatibility.  See also the attribute \f(CW\*(C`force_align_arg_pointer\*(C'\fR,
12675 applicable to individual functions.
12676 .IP "\fB\-mpreferred\-stack\-boundary=\fR\fInum\fR" 4
12677 .IX Item "-mpreferred-stack-boundary=num"
12678 Attempt to keep the stack boundary aligned to a 2 raised to \fInum\fR
12679 byte boundary.  If \fB\-mpreferred\-stack\-boundary\fR is not specified,
12680 the default is 4 (16 bytes or 128 bits).
12681 .IP "\fB\-mincoming\-stack\-boundary=\fR\fInum\fR" 4
12682 .IX Item "-mincoming-stack-boundary=num"
12683 Assume the incoming stack is aligned to a 2 raised to \fInum\fR byte
12684 boundary.  If \fB\-mincoming\-stack\-boundary\fR is not specified,
12685 the one specified by \fB\-mpreferred\-stack\-boundary\fR will be used.
12686 .Sp
12687 On Pentium and PentiumPro, \f(CW\*(C`double\*(C'\fR and \f(CW\*(C`long double\*(C'\fR values
12688 should be aligned to an 8\-byte boundary (see \fB\-malign\-double\fR) or
12689 suffer significant run time performance penalties.  On Pentium \s-1III\s0, the
12690 Streaming \s-1SIMD\s0 Extension (\s-1SSE\s0) data type \f(CW\*(C`_\|_m128\*(C'\fR may not work
12691 properly if it is not 16\-byte aligned.
12692 .Sp
12693 To ensure proper alignment of this values on the stack, the stack boundary
12694 must be as aligned as that required by any value stored on the stack.
12695 Further, every function must be generated such that it keeps the stack
12696 aligned.  Thus calling a function compiled with a higher preferred
12697 stack boundary from a function compiled with a lower preferred stack
12698 boundary will most likely misalign the stack.  It is recommended that
12699 libraries that use callbacks always use the default setting.
12700 .Sp
12701 This extra alignment does consume extra stack space, and generally
12702 increases code size.  Code that is sensitive to stack space usage, such
12703 as embedded systems and operating system kernels, may want to reduce the
12704 preferred alignment to \fB\-mpreferred\-stack\-boundary=2\fR.
12705 .IP "\fB\-mmmx\fR" 4
12706 .IX Item "-mmmx"
12707 .PD 0
12708 .IP "\fB\-mno\-mmx\fR" 4
12709 .IX Item "-mno-mmx"
12710 .IP "\fB\-msse\fR" 4
12711 .IX Item "-msse"
12712 .IP "\fB\-mno\-sse\fR" 4
12713 .IX Item "-mno-sse"
12714 .IP "\fB\-msse2\fR" 4
12715 .IX Item "-msse2"
12716 .IP "\fB\-mno\-sse2\fR" 4
12717 .IX Item "-mno-sse2"
12718 .IP "\fB\-msse3\fR" 4
12719 .IX Item "-msse3"
12720 .IP "\fB\-mno\-sse3\fR" 4
12721 .IX Item "-mno-sse3"
12722 .IP "\fB\-mssse3\fR" 4
12723 .IX Item "-mssse3"
12724 .IP "\fB\-mno\-ssse3\fR" 4
12725 .IX Item "-mno-ssse3"
12726 .IP "\fB\-msse4.1\fR" 4
12727 .IX Item "-msse4.1"
12728 .IP "\fB\-mno\-sse4.1\fR" 4
12729 .IX Item "-mno-sse4.1"
12730 .IP "\fB\-msse4.2\fR" 4
12731 .IX Item "-msse4.2"
12732 .IP "\fB\-mno\-sse4.2\fR" 4
12733 .IX Item "-mno-sse4.2"
12734 .IP "\fB\-msse4\fR" 4
12735 .IX Item "-msse4"
12736 .IP "\fB\-mno\-sse4\fR" 4
12737 .IX Item "-mno-sse4"
12738 .IP "\fB\-mavx\fR" 4
12739 .IX Item "-mavx"
12740 .IP "\fB\-mno\-avx\fR" 4
12741 .IX Item "-mno-avx"
12742 .IP "\fB\-mavx2\fR" 4
12743 .IX Item "-mavx2"
12744 .IP "\fB\-mno\-avx2\fR" 4
12745 .IX Item "-mno-avx2"
12746 .IP "\fB\-maes\fR" 4
12747 .IX Item "-maes"
12748 .IP "\fB\-mno\-aes\fR" 4
12749 .IX Item "-mno-aes"
12750 .IP "\fB\-mpclmul\fR" 4
12751 .IX Item "-mpclmul"
12752 .IP "\fB\-mno\-pclmul\fR" 4
12753 .IX Item "-mno-pclmul"
12754 .IP "\fB\-mfsgsbase\fR" 4
12755 .IX Item "-mfsgsbase"
12756 .IP "\fB\-mno\-fsgsbase\fR" 4
12757 .IX Item "-mno-fsgsbase"
12758 .IP "\fB\-mrdrnd\fR" 4
12759 .IX Item "-mrdrnd"
12760 .IP "\fB\-mno\-rdrnd\fR" 4
12761 .IX Item "-mno-rdrnd"
12762 .IP "\fB\-mf16c\fR" 4
12763 .IX Item "-mf16c"
12764 .IP "\fB\-mno\-f16c\fR" 4
12765 .IX Item "-mno-f16c"
12766 .IP "\fB\-mfma\fR" 4
12767 .IX Item "-mfma"
12768 .IP "\fB\-mno\-fma\fR" 4
12769 .IX Item "-mno-fma"
12770 .IP "\fB\-msse4a\fR" 4
12771 .IX Item "-msse4a"
12772 .IP "\fB\-mno\-sse4a\fR" 4
12773 .IX Item "-mno-sse4a"
12774 .IP "\fB\-mfma4\fR" 4
12775 .IX Item "-mfma4"
12776 .IP "\fB\-mno\-fma4\fR" 4
12777 .IX Item "-mno-fma4"
12778 .IP "\fB\-mxop\fR" 4
12779 .IX Item "-mxop"
12780 .IP "\fB\-mno\-xop\fR" 4
12781 .IX Item "-mno-xop"
12782 .IP "\fB\-mlwp\fR" 4
12783 .IX Item "-mlwp"
12784 .IP "\fB\-mno\-lwp\fR" 4
12785 .IX Item "-mno-lwp"
12786 .IP "\fB\-m3dnow\fR" 4
12787 .IX Item "-m3dnow"
12788 .IP "\fB\-mno\-3dnow\fR" 4
12789 .IX Item "-mno-3dnow"
12790 .IP "\fB\-mpopcnt\fR" 4
12791 .IX Item "-mpopcnt"
12792 .IP "\fB\-mno\-popcnt\fR" 4
12793 .IX Item "-mno-popcnt"
12794 .IP "\fB\-mabm\fR" 4
12795 .IX Item "-mabm"
12796 .IP "\fB\-mno\-abm\fR" 4
12797 .IX Item "-mno-abm"
12798 .IP "\fB\-mbmi\fR" 4
12799 .IX Item "-mbmi"
12800 .IP "\fB\-mbmi2\fR" 4
12801 .IX Item "-mbmi2"
12802 .IP "\fB\-mno\-bmi\fR" 4
12803 .IX Item "-mno-bmi"
12804 .IP "\fB\-mno\-bmi2\fR" 4
12805 .IX Item "-mno-bmi2"
12806 .IP "\fB\-mlzcnt\fR" 4
12807 .IX Item "-mlzcnt"
12808 .IP "\fB\-mno\-lzcnt\fR" 4
12809 .IX Item "-mno-lzcnt"
12810 .IP "\fB\-mtbm\fR" 4
12811 .IX Item "-mtbm"
12812 .IP "\fB\-mno\-tbm\fR" 4
12813 .IX Item "-mno-tbm"
12814 .PD
12815 These switches enable or disable the use of instructions in the \s-1MMX\s0, \s-1SSE\s0,
12816 \&\s-1SSE2\s0, \s-1SSE3\s0, \s-1SSSE3\s0, \s-1SSE4\s0.1, \s-1AVX\s0, \s-1AVX2\s0, \s-1AES\s0, \s-1PCLMUL\s0, \s-1FSGSBASE\s0, \s-1RDRND\s0, F16C,
12817 \&\s-1FMA\s0, \s-1SSE4A\s0, \s-1FMA4\s0, \s-1XOP\s0, \s-1LWP\s0, \s-1ABM\s0, \s-1BMI\s0, \s-1BMI2\s0, \s-1LZCNT\s0 or 3DNow!
12818  extended instruction sets.
12819 These extensions are also available as built-in functions: see
12820 \&\fBX86 Built-in Functions\fR, for details of the functions enabled and
12821 disabled by these switches.
12822 .Sp
12823 To have \s-1SSE/SSE2\s0 instructions generated automatically from floating-point
12824 code (as opposed to 387 instructions), see \fB\-mfpmath=sse\fR.
12825 .Sp
12826 \&\s-1GCC\s0 depresses SSEx instructions when \fB\-mavx\fR is used. Instead, it
12827 generates new \s-1AVX\s0 instructions or \s-1AVX\s0 equivalence for all SSEx instructions
12828 when needed.
12829 .Sp
12830 These options will enable \s-1GCC\s0 to use these extended instructions in
12831 generated code, even without \fB\-mfpmath=sse\fR.  Applications that
12832 perform run-time \s-1CPU\s0 detection must compile separate files for each
12833 supported architecture, using the appropriate flags.  In particular,
12834 the file containing the \s-1CPU\s0 detection code should be compiled without
12835 these options.
12836 .IP "\fB\-mcld\fR" 4
12837 .IX Item "-mcld"
12838 This option instructs \s-1GCC\s0 to emit a \f(CW\*(C`cld\*(C'\fR instruction in the prologue
12839 of functions that use string instructions.  String instructions depend on
12840 the \s-1DF\s0 flag to select between autoincrement or autodecrement mode.  While the
12841 \&\s-1ABI\s0 specifies the \s-1DF\s0 flag to be cleared on function entry, some operating
12842 systems violate this specification by not clearing the \s-1DF\s0 flag in their
12843 exception dispatchers.  The exception handler can be invoked with the \s-1DF\s0 flag
12844 set, which leads to wrong direction mode when string instructions are used.
12845 This option can be enabled by default on 32\-bit x86 targets by configuring
12846 \&\s-1GCC\s0 with the \fB\-\-enable\-cld\fR configure option.  Generation of \f(CW\*(C`cld\*(C'\fR
12847 instructions can be suppressed with the \fB\-mno\-cld\fR compiler option
12848 in this case.
12849 .IP "\fB\-mvzeroupper\fR" 4
12850 .IX Item "-mvzeroupper"
12851 This option instructs \s-1GCC\s0 to emit a \f(CW\*(C`vzeroupper\*(C'\fR instruction
12852 before a transfer of control flow out of the function to minimize
12853 \&\s-1AVX\s0 to \s-1SSE\s0 transition penalty as well as remove unnecessary zeroupper
12854 intrinsics.
12855 .IP "\fB\-mprefer\-avx128\fR" 4
12856 .IX Item "-mprefer-avx128"
12857 This option instructs \s-1GCC\s0 to use 128\-bit \s-1AVX\s0 instructions instead of
12858 256\-bit \s-1AVX\s0 instructions in the auto-vectorizer.
12859 .IP "\fB\-mcx16\fR" 4
12860 .IX Item "-mcx16"
12861 This option will enable \s-1GCC\s0 to use \s-1CMPXCHG16B\s0 instruction in generated code.
12862 \&\s-1CMPXCHG16B\s0 allows for atomic operations on 128\-bit double quadword (or oword)
12863 data types.  This is useful for high resolution counters that could be updated
12864 by multiple processors (or cores).  This instruction is generated as part of
12865 atomic built-in functions: see \fB_\|_sync Builtins\fR or
12866 \&\fB_\|_atomic Builtins\fR for details.
12867 .IP "\fB\-msahf\fR" 4
12868 .IX Item "-msahf"
12869 This option will enable \s-1GCC\s0 to use \s-1SAHF\s0 instruction in generated 64\-bit code.
12870 Early Intel CPUs with Intel 64 lacked \s-1LAHF\s0 and \s-1SAHF\s0 instructions supported
12871 by \s-1AMD64\s0 until introduction of Pentium 4 G1 step in December 2005.  \s-1LAHF\s0 and
12872 \&\s-1SAHF\s0 are load and store instructions, respectively, for certain status flags.
12873 In 64\-bit mode, \s-1SAHF\s0 instruction is used to optimize \f(CW\*(C`fmod\*(C'\fR, \f(CW\*(C`drem\*(C'\fR
12874 or \f(CW\*(C`remainder\*(C'\fR built-in functions: see \fBOther Builtins\fR for details.
12875 .IP "\fB\-mmovbe\fR" 4
12876 .IX Item "-mmovbe"
12877 This option will enable \s-1GCC\s0 to use movbe instruction to implement
12878 \&\f(CW\*(C`_\|_builtin_bswap32\*(C'\fR and \f(CW\*(C`_\|_builtin_bswap64\*(C'\fR.
12879 .IP "\fB\-mcrc32\fR" 4
12880 .IX Item "-mcrc32"
12881 This option will enable built-in functions, \f(CW\*(C`_\|_builtin_ia32_crc32qi\*(C'\fR,
12882 \&\f(CW\*(C`_\|_builtin_ia32_crc32hi\*(C'\fR. \f(CW\*(C`_\|_builtin_ia32_crc32si\*(C'\fR and
12883 \&\f(CW\*(C`_\|_builtin_ia32_crc32di\*(C'\fR to generate the crc32 machine instruction.
12884 .IP "\fB\-mrecip\fR" 4
12885 .IX Item "-mrecip"
12886 This option will enable \s-1GCC\s0 to use \s-1RCPSS\s0 and \s-1RSQRTSS\s0 instructions (and their
12887 vectorized variants \s-1RCPPS\s0 and \s-1RSQRTPS\s0) with an additional Newton-Raphson step
12888 to increase precision instead of \s-1DIVSS\s0 and \s-1SQRTSS\s0 (and their vectorized
12889 variants) for single-precision floating-point arguments.  These instructions
12890 are generated only when \fB\-funsafe\-math\-optimizations\fR is enabled
12891 together with \fB\-finite\-math\-only\fR and \fB\-fno\-trapping\-math\fR.
12892 Note that while the throughput of the sequence is higher than the throughput
12893 of the non-reciprocal instruction, the precision of the sequence can be
12894 decreased by up to 2 ulp (i.e. the inverse of 1.0 equals 0.99999994).
12895 .Sp
12896 Note that \s-1GCC\s0 implements \f(CW\*(C`1.0f/sqrtf(\f(CIx\f(CW)\*(C'\fR in terms of \s-1RSQRTSS\s0
12897 (or \s-1RSQRTPS\s0) already with \fB\-ffast\-math\fR (or the above option
12898 combination), and doesn't need \fB\-mrecip\fR.
12899 .Sp
12900 Also note that \s-1GCC\s0 emits the above sequence with additional Newton-Raphson step
12901 for vectorized single-float division and vectorized \f(CW\*(C`sqrtf(\f(CIx\f(CW)\*(C'\fR
12902 already with \fB\-ffast\-math\fR (or the above option combination), and
12903 doesn't need \fB\-mrecip\fR.
12904 .IP "\fB\-mrecip=\fR\fIopt\fR" 4
12905 .IX Item "-mrecip=opt"
12906 This option allows to control which reciprocal estimate instructions
12907 may be used.  \fIopt\fR is a comma separated list of options, which may
12908 be preceded by a \f(CW\*(C`!\*(C'\fR to invert the option:
12909 \&\f(CW\*(C`all\*(C'\fR: enable all estimate instructions,
12910 \&\f(CW\*(C`default\*(C'\fR: enable the default instructions, equivalent to \fB\-mrecip\fR,
12911 \&\f(CW\*(C`none\*(C'\fR: disable all estimate instructions, equivalent to \fB\-mno\-recip\fR,
12912 \&\f(CW\*(C`div\*(C'\fR: enable the approximation for scalar division,
12913 \&\f(CW\*(C`vec\-div\*(C'\fR: enable the approximation for vectorized division,
12914 \&\f(CW\*(C`sqrt\*(C'\fR: enable the approximation for scalar square root,
12915 \&\f(CW\*(C`vec\-sqrt\*(C'\fR: enable the approximation for vectorized square root.
12916 .Sp
12917 So for example, \fB\-mrecip=all,!sqrt\fR would enable
12918 all of the reciprocal approximations, except for square root.
12919 .IP "\fB\-mveclibabi=\fR\fItype\fR" 4
12920 .IX Item "-mveclibabi=type"
12921 Specifies the \s-1ABI\s0 type to use for vectorizing intrinsics using an
12922 external library.  Supported types are \f(CW\*(C`svml\*(C'\fR for the Intel short
12923 vector math library and \f(CW\*(C`acml\*(C'\fR for the \s-1AMD\s0 math core library style
12924 of interfacing.  \s-1GCC\s0 will currently emit calls to \f(CW\*(C`vmldExp2\*(C'\fR,
12925 \&\f(CW\*(C`vmldLn2\*(C'\fR, \f(CW\*(C`vmldLog102\*(C'\fR, \f(CW\*(C`vmldLog102\*(C'\fR, \f(CW\*(C`vmldPow2\*(C'\fR,
12926 \&\f(CW\*(C`vmldTanh2\*(C'\fR, \f(CW\*(C`vmldTan2\*(C'\fR, \f(CW\*(C`vmldAtan2\*(C'\fR, \f(CW\*(C`vmldAtanh2\*(C'\fR,
12927 \&\f(CW\*(C`vmldCbrt2\*(C'\fR, \f(CW\*(C`vmldSinh2\*(C'\fR, \f(CW\*(C`vmldSin2\*(C'\fR, \f(CW\*(C`vmldAsinh2\*(C'\fR,
12928 \&\f(CW\*(C`vmldAsin2\*(C'\fR, \f(CW\*(C`vmldCosh2\*(C'\fR, \f(CW\*(C`vmldCos2\*(C'\fR, \f(CW\*(C`vmldAcosh2\*(C'\fR,
12929 \&\f(CW\*(C`vmldAcos2\*(C'\fR, \f(CW\*(C`vmlsExp4\*(C'\fR, \f(CW\*(C`vmlsLn4\*(C'\fR, \f(CW\*(C`vmlsLog104\*(C'\fR,
12930 \&\f(CW\*(C`vmlsLog104\*(C'\fR, \f(CW\*(C`vmlsPow4\*(C'\fR, \f(CW\*(C`vmlsTanh4\*(C'\fR, \f(CW\*(C`vmlsTan4\*(C'\fR,
12931 \&\f(CW\*(C`vmlsAtan4\*(C'\fR, \f(CW\*(C`vmlsAtanh4\*(C'\fR, \f(CW\*(C`vmlsCbrt4\*(C'\fR, \f(CW\*(C`vmlsSinh4\*(C'\fR,
12932 \&\f(CW\*(C`vmlsSin4\*(C'\fR, \f(CW\*(C`vmlsAsinh4\*(C'\fR, \f(CW\*(C`vmlsAsin4\*(C'\fR, \f(CW\*(C`vmlsCosh4\*(C'\fR,
12933 \&\f(CW\*(C`vmlsCos4\*(C'\fR, \f(CW\*(C`vmlsAcosh4\*(C'\fR and \f(CW\*(C`vmlsAcos4\*(C'\fR for corresponding
12934 function type when \fB\-mveclibabi=svml\fR is used and \f(CW\*(C`_\|_vrd2_sin\*(C'\fR,
12935 \&\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,
12936 \&\f(CW\*(C`_\|_vrd2_log10\*(C'\fR, \f(CW\*(C`_\|_vrs4_sinf\*(C'\fR, \f(CW\*(C`_\|_vrs4_cosf\*(C'\fR,
12937 \&\f(CW\*(C`_\|_vrs4_expf\*(C'\fR, \f(CW\*(C`_\|_vrs4_logf\*(C'\fR, \f(CW\*(C`_\|_vrs4_log2f\*(C'\fR,
12938 \&\f(CW\*(C`_\|_vrs4_log10f\*(C'\fR and \f(CW\*(C`_\|_vrs4_powf\*(C'\fR for corresponding function type
12939 when \fB\-mveclibabi=acml\fR is used. Both \fB\-ftree\-vectorize\fR and
12940 \&\fB\-funsafe\-math\-optimizations\fR have to be enabled. A \s-1SVML\s0 or \s-1ACML\s0 \s-1ABI\s0
12941 compatible library will have to be specified at link time.
12942 .IP "\fB\-mabi=\fR\fIname\fR" 4
12943 .IX Item "-mabi=name"
12944 Generate code for the specified calling convention.  Permissible values
12945 are: \fBsysv\fR for the \s-1ABI\s0 used on GNU/Linux and other systems and
12946 \&\fBms\fR for the Microsoft \s-1ABI\s0.  The default is to use the Microsoft
12947 \&\s-1ABI\s0 when targeting Windows.  On all other systems, the default is the
12948 \&\s-1SYSV\s0 \s-1ABI\s0.  You can control this behavior for a specific function by
12949 using the function attribute \fBms_abi\fR/\fBsysv_abi\fR.
12950 .IP "\fB\-mtls\-dialect=\fR\fItype\fR" 4
12951 .IX Item "-mtls-dialect=type"
12952 Generate code to access thread-local storage using the \fBgnu\fR or
12953 \&\fBgnu2\fR conventions.  \fBgnu\fR is the conservative default;
12954 \&\fBgnu2\fR is more efficient, but it may add compile\- and run-time
12955 requirements that cannot be satisfied on all systems.
12956 .IP "\fB\-mpush\-args\fR" 4
12957 .IX Item "-mpush-args"
12958 .PD 0
12959 .IP "\fB\-mno\-push\-args\fR" 4
12960 .IX Item "-mno-push-args"
12961 .PD
12962 Use \s-1PUSH\s0 operations to store outgoing parameters.  This method is shorter
12963 and usually equally fast as method using \s-1SUB/MOV\s0 operations and is enabled
12964 by default.  In some cases disabling it may improve performance because of
12965 improved scheduling and reduced dependencies.
12966 .IP "\fB\-maccumulate\-outgoing\-args\fR" 4
12967 .IX Item "-maccumulate-outgoing-args"
12968 If enabled, the maximum amount of space required for outgoing arguments will be
12969 computed in the function prologue.  This is faster on most modern CPUs
12970 because of reduced dependencies, improved scheduling and reduced stack usage
12971 when preferred stack boundary is not equal to 2.  The drawback is a notable
12972 increase in code size.  This switch implies \fB\-mno\-push\-args\fR.
12973 .IP "\fB\-mthreads\fR" 4
12974 .IX Item "-mthreads"
12975 Support thread-safe exception handling on \fBMingw32\fR.  Code that relies
12976 on thread-safe exception handling must compile and link all code with the
12977 \&\fB\-mthreads\fR option.  When compiling, \fB\-mthreads\fR defines
12978 \&\fB\-D_MT\fR; when linking, it links in a special thread helper library
12979 \&\fB\-lmingwthrd\fR which cleans up per thread exception handling data.
12980 .IP "\fB\-mno\-align\-stringops\fR" 4
12981 .IX Item "-mno-align-stringops"
12982 Do not align destination of inlined string operations.  This switch reduces
12983 code size and improves performance in case the destination is already aligned,
12984 but \s-1GCC\s0 doesn't know about it.
12985 .IP "\fB\-minline\-all\-stringops\fR" 4
12986 .IX Item "-minline-all-stringops"
12987 By default \s-1GCC\s0 inlines string operations only when the destination is 
12988 known to be aligned to least a 4\-byte boundary.  
12989 This enables more inlining, increase code
12990 size, but may improve performance of code that depends on fast memcpy, strlen
12991 and memset for short lengths.
12992 .IP "\fB\-minline\-stringops\-dynamically\fR" 4
12993 .IX Item "-minline-stringops-dynamically"
12994 For string operations of unknown size, use run-time checks with
12995 inline code for small blocks and a library call for large blocks.
12996 .IP "\fB\-mstringop\-strategy=\fR\fIalg\fR" 4
12997 .IX Item "-mstringop-strategy=alg"
12998 Overwrite internal decision heuristic about particular algorithm to inline
12999 string operation with.  The allowed values are \f(CW\*(C`rep_byte\*(C'\fR,
13000 \&\f(CW\*(C`rep_4byte\*(C'\fR, \f(CW\*(C`rep_8byte\*(C'\fR for expanding using i386 \f(CW\*(C`rep\*(C'\fR prefix
13001 of specified size, \f(CW\*(C`byte_loop\*(C'\fR, \f(CW\*(C`loop\*(C'\fR, \f(CW\*(C`unrolled_loop\*(C'\fR for
13002 expanding inline loop, \f(CW\*(C`libcall\*(C'\fR for always expanding library call.
13003 .IP "\fB\-momit\-leaf\-frame\-pointer\fR" 4
13004 .IX Item "-momit-leaf-frame-pointer"
13005 Don't keep the frame pointer in a register for leaf functions.  This
13006 avoids the instructions to save, set up and restore frame pointers and
13007 makes an extra register available in leaf functions.  The option
13008 \&\fB\-fomit\-frame\-pointer\fR removes the frame pointer for all functions,
13009 which might make debugging harder.
13010 .IP "\fB\-mtls\-direct\-seg\-refs\fR" 4
13011 .IX Item "-mtls-direct-seg-refs"
13012 .PD 0
13013 .IP "\fB\-mno\-tls\-direct\-seg\-refs\fR" 4
13014 .IX Item "-mno-tls-direct-seg-refs"
13015 .PD
13016 Controls whether \s-1TLS\s0 variables may be accessed with offsets from the
13017 \&\s-1TLS\s0 segment register (\f(CW%gs\fR for 32\-bit, \f(CW%fs\fR for 64\-bit),
13018 or whether the thread base pointer must be added.  Whether or not this
13019 is legal depends on the operating system, and whether it maps the
13020 segment to cover the entire \s-1TLS\s0 area.
13021 .Sp
13022 For systems that use \s-1GNU\s0 libc, the default is on.
13023 .IP "\fB\-msse2avx\fR" 4
13024 .IX Item "-msse2avx"
13025 .PD 0
13026 .IP "\fB\-mno\-sse2avx\fR" 4
13027 .IX Item "-mno-sse2avx"
13028 .PD
13029 Specify that the assembler should encode \s-1SSE\s0 instructions with \s-1VEX\s0
13030 prefix.  The option \fB\-mavx\fR turns this on by default.
13031 .IP "\fB\-mfentry\fR" 4
13032 .IX Item "-mfentry"
13033 .PD 0
13034 .IP "\fB\-mno\-fentry\fR" 4
13035 .IX Item "-mno-fentry"
13036 .PD
13037 If profiling is active \fB\-pg\fR put the profiling
13038 counter call before prologue.
13039 Note: On x86 architectures the attribute \f(CW\*(C`ms_hook_prologue\*(C'\fR
13040 isn't possible at the moment for \fB\-mfentry\fR and \fB\-pg\fR.
13041 .IP "\fB\-m8bit\-idiv\fR" 4
13042 .IX Item "-m8bit-idiv"
13043 .PD 0
13044 .IP "\fB\-mno\-8bit\-idiv\fR" 4
13045 .IX Item "-mno-8bit-idiv"
13046 .PD
13047 On some processors, like Intel Atom, 8\-bit unsigned integer divide is
13048 much faster than 32\-bit/64\-bit integer divide.  This option generates a
13049 run-time check.  If both dividend and divisor are within range of 0
13050 to 255, 8\-bit unsigned integer divide is used instead of
13051 32\-bit/64\-bit integer divide.
13052 .IP "\fB\-mavx256\-split\-unaligned\-load\fR" 4
13053 .IX Item "-mavx256-split-unaligned-load"
13054 .PD 0
13055 .IP "\fB\-mavx256\-split\-unaligned\-store\fR" 4
13056 .IX Item "-mavx256-split-unaligned-store"
13057 .PD
13058 Split 32\-byte \s-1AVX\s0 unaligned load and store.
13059 .PP
13060 These \fB\-m\fR switches are supported in addition to the above
13061 on \s-1AMD\s0 x86\-64 processors in 64\-bit environments.
13062 .IP "\fB\-m32\fR" 4
13063 .IX Item "-m32"
13064 .PD 0
13065 .IP "\fB\-m64\fR" 4
13066 .IX Item "-m64"
13067 .IP "\fB\-mx32\fR" 4
13068 .IX Item "-mx32"
13069 .PD
13070 Generate code for a 32\-bit or 64\-bit environment.
13071 The \fB\-m32\fR option sets int, long and pointer to 32 bits and
13072 generates code that runs on any i386 system.
13073 The \fB\-m64\fR option sets int to 32 bits and long and pointer
13074 to 64 bits and generates code for \s-1AMD\s0's x86\-64 architecture.
13075 The \fB\-mx32\fR option sets int, long and pointer to 32 bits and
13076 generates code for \s-1AMD\s0's x86\-64 architecture.
13077 For darwin only the \fB\-m64\fR option turns off the \fB\-fno\-pic\fR
13078 and \fB\-mdynamic\-no\-pic\fR options.
13079 .IP "\fB\-mno\-red\-zone\fR" 4
13080 .IX Item "-mno-red-zone"
13081 Do not use a so called red zone for x86\-64 code.  The red zone is mandated
13082 by the x86\-64 \s-1ABI\s0, it is a 128\-byte area beyond the location of the
13083 stack pointer that will not be modified by signal or interrupt handlers
13084 and therefore can be used for temporary data without adjusting the stack
13085 pointer.  The flag \fB\-mno\-red\-zone\fR disables this red zone.
13086 .IP "\fB\-mcmodel=small\fR" 4
13087 .IX Item "-mcmodel=small"
13088 Generate code for the small code model: the program and its symbols must
13089 be linked in the lower 2 \s-1GB\s0 of the address space.  Pointers are 64 bits.
13090 Programs can be statically or dynamically linked.  This is the default
13091 code model.
13092 .IP "\fB\-mcmodel=kernel\fR" 4
13093 .IX Item "-mcmodel=kernel"
13094 Generate code for the kernel code model.  The kernel runs in the
13095 negative 2 \s-1GB\s0 of the address space.
13096 This model has to be used for Linux kernel code.
13097 .IP "\fB\-mcmodel=medium\fR" 4
13098 .IX Item "-mcmodel=medium"
13099 Generate code for the medium model: The program is linked in the lower 2
13100 \&\s-1GB\s0 of the address space.  Small symbols are also placed there.  Symbols
13101 with sizes larger than \fB\-mlarge\-data\-threshold\fR are put into
13102 large data or bss sections and can be located above 2GB.  Programs can
13103 be statically or dynamically linked.
13104 .IP "\fB\-mcmodel=large\fR" 4
13105 .IX Item "-mcmodel=large"
13106 Generate code for the large model: This model makes no assumptions
13107 about addresses and sizes of sections.
13108 .PP
13109 \fIi386 and x86\-64 Windows Options\fR
13110 .IX Subsection "i386 and x86-64 Windows Options"
13111 .PP
13112 These additional options are available for Windows targets:
13113 .IP "\fB\-mconsole\fR" 4
13114 .IX Item "-mconsole"
13115 This option is available for Cygwin and MinGW targets.  It
13116 specifies that a console application is to be generated, by
13117 instructing the linker to set the \s-1PE\s0 header subsystem type
13118 required for console applications.
13119 This is the default behavior for Cygwin and MinGW targets.
13120 .IP "\fB\-mdll\fR" 4
13121 .IX Item "-mdll"
13122 This option is available for Cygwin and MinGW targets.  It
13123 specifies that a \s-1DLL\s0 \- a dynamic link library \- is to be
13124 generated, enabling the selection of the required runtime
13125 startup object and entry point.
13126 .IP "\fB\-mnop\-fun\-dllimport\fR" 4
13127 .IX Item "-mnop-fun-dllimport"
13128 This option is available for Cygwin and MinGW targets.  It
13129 specifies that the dllimport attribute should be ignored.
13130 .IP "\fB\-mthread\fR" 4
13131 .IX Item "-mthread"
13132 This option is available for MinGW targets. It specifies
13133 that MinGW-specific thread support is to be used.
13134 .IP "\fB\-municode\fR" 4
13135 .IX Item "-municode"
13136 This option is available for mingw\-w64 targets.  It specifies
13137 that the \s-1UNICODE\s0 macro is getting pre-defined and that the
13138 unicode capable runtime startup code is chosen.
13139 .IP "\fB\-mwin32\fR" 4
13140 .IX Item "-mwin32"
13141 This option is available for Cygwin and MinGW targets.  It
13142 specifies that the typical Windows pre-defined macros are to
13143 be set in the pre-processor, but does not influence the choice
13144 of runtime library/startup code.
13145 .IP "\fB\-mwindows\fR" 4
13146 .IX Item "-mwindows"
13147 This option is available for Cygwin and MinGW targets.  It
13148 specifies that a \s-1GUI\s0 application is to be generated by
13149 instructing the linker to set the \s-1PE\s0 header subsystem type
13150 appropriately.
13151 .IP "\fB\-fno\-set\-stack\-executable\fR" 4
13152 .IX Item "-fno-set-stack-executable"
13153 This option is available for MinGW targets. It specifies that
13154 the executable flag for stack used by nested functions isn't
13155 set. This is necessary for binaries running in kernel mode of
13156 Windows, as there the user32 \s-1API\s0, which is used to set executable
13157 privileges, isn't available.
13158 .IP "\fB\-mpe\-aligned\-commons\fR" 4
13159 .IX Item "-mpe-aligned-commons"
13160 This option is available for Cygwin and MinGW targets.  It
13161 specifies that the \s-1GNU\s0 extension to the \s-1PE\s0 file format that
13162 permits the correct alignment of \s-1COMMON\s0 variables should be
13163 used when generating code.  It will be enabled by default if
13164 \&\s-1GCC\s0 detects that the target assembler found during configuration
13165 supports the feature.
13166 .PP
13167 See also under \fBi386 and x86\-64 Options\fR for standard options.
13168 .PP
13169 \fI\s-1IA\-64\s0 Options\fR
13170 .IX Subsection "IA-64 Options"
13171 .PP
13172 These are the \fB\-m\fR options defined for the Intel \s-1IA\-64\s0 architecture.
13173 .IP "\fB\-mbig\-endian\fR" 4
13174 .IX Item "-mbig-endian"
13175 Generate code for a big-endian target.  This is the default for HP-UX.
13176 .IP "\fB\-mlittle\-endian\fR" 4
13177 .IX Item "-mlittle-endian"
13178 Generate code for a little-endian target.  This is the default for \s-1AIX5\s0
13179 and GNU/Linux.
13180 .IP "\fB\-mgnu\-as\fR" 4
13181 .IX Item "-mgnu-as"
13182 .PD 0
13183 .IP "\fB\-mno\-gnu\-as\fR" 4
13184 .IX Item "-mno-gnu-as"
13185 .PD
13186 Generate (or don't) code for the \s-1GNU\s0 assembler.  This is the default.
13187 .IP "\fB\-mgnu\-ld\fR" 4
13188 .IX Item "-mgnu-ld"
13189 .PD 0
13190 .IP "\fB\-mno\-gnu\-ld\fR" 4
13191 .IX Item "-mno-gnu-ld"
13192 .PD
13193 Generate (or don't) code for the \s-1GNU\s0 linker.  This is the default.
13194 .IP "\fB\-mno\-pic\fR" 4
13195 .IX Item "-mno-pic"
13196 Generate code that does not use a global pointer register.  The result
13197 is not position independent code, and violates the \s-1IA\-64\s0 \s-1ABI\s0.
13198 .IP "\fB\-mvolatile\-asm\-stop\fR" 4
13199 .IX Item "-mvolatile-asm-stop"
13200 .PD 0
13201 .IP "\fB\-mno\-volatile\-asm\-stop\fR" 4
13202 .IX Item "-mno-volatile-asm-stop"
13203 .PD
13204 Generate (or don't) a stop bit immediately before and after volatile asm
13205 statements.
13206 .IP "\fB\-mregister\-names\fR" 4
13207 .IX Item "-mregister-names"
13208 .PD 0
13209 .IP "\fB\-mno\-register\-names\fR" 4
13210 .IX Item "-mno-register-names"
13211 .PD
13212 Generate (or don't) \fBin\fR, \fBloc\fR, and \fBout\fR register names for
13213 the stacked registers.  This may make assembler output more readable.
13214 .IP "\fB\-mno\-sdata\fR" 4
13215 .IX Item "-mno-sdata"
13216 .PD 0
13217 .IP "\fB\-msdata\fR" 4
13218 .IX Item "-msdata"
13219 .PD
13220 Disable (or enable) optimizations that use the small data section.  This may
13221 be useful for working around optimizer bugs.
13222 .IP "\fB\-mconstant\-gp\fR" 4
13223 .IX Item "-mconstant-gp"
13224 Generate code that uses a single constant global pointer value.  This is
13225 useful when compiling kernel code.
13226 .IP "\fB\-mauto\-pic\fR" 4
13227 .IX Item "-mauto-pic"
13228 Generate code that is self-relocatable.  This implies \fB\-mconstant\-gp\fR.
13229 This is useful when compiling firmware code.
13230 .IP "\fB\-minline\-float\-divide\-min\-latency\fR" 4
13231 .IX Item "-minline-float-divide-min-latency"
13232 Generate code for inline divides of floating-point values
13233 using the minimum latency algorithm.
13234 .IP "\fB\-minline\-float\-divide\-max\-throughput\fR" 4
13235 .IX Item "-minline-float-divide-max-throughput"
13236 Generate code for inline divides of floating-point values
13237 using the maximum throughput algorithm.
13238 .IP "\fB\-mno\-inline\-float\-divide\fR" 4
13239 .IX Item "-mno-inline-float-divide"
13240 Do not generate inline code for divides of floating-point values.
13241 .IP "\fB\-minline\-int\-divide\-min\-latency\fR" 4
13242 .IX Item "-minline-int-divide-min-latency"
13243 Generate code for inline divides of integer values
13244 using the minimum latency algorithm.
13245 .IP "\fB\-minline\-int\-divide\-max\-throughput\fR" 4
13246 .IX Item "-minline-int-divide-max-throughput"
13247 Generate code for inline divides of integer values
13248 using the maximum throughput algorithm.
13249 .IP "\fB\-mno\-inline\-int\-divide\fR" 4
13250 .IX Item "-mno-inline-int-divide"
13251 Do not generate inline code for divides of integer values.
13252 .IP "\fB\-minline\-sqrt\-min\-latency\fR" 4
13253 .IX Item "-minline-sqrt-min-latency"
13254 Generate code for inline square roots
13255 using the minimum latency algorithm.
13256 .IP "\fB\-minline\-sqrt\-max\-throughput\fR" 4
13257 .IX Item "-minline-sqrt-max-throughput"
13258 Generate code for inline square roots
13259 using the maximum throughput algorithm.
13260 .IP "\fB\-mno\-inline\-sqrt\fR" 4
13261 .IX Item "-mno-inline-sqrt"
13262 Do not generate inline code for sqrt.
13263 .IP "\fB\-mfused\-madd\fR" 4
13264 .IX Item "-mfused-madd"
13265 .PD 0
13266 .IP "\fB\-mno\-fused\-madd\fR" 4
13267 .IX Item "-mno-fused-madd"
13268 .PD
13269 Do (don't) generate code that uses the fused multiply/add or multiply/subtract
13270 instructions.  The default is to use these instructions.
13271 .IP "\fB\-mno\-dwarf2\-asm\fR" 4
13272 .IX Item "-mno-dwarf2-asm"
13273 .PD 0
13274 .IP "\fB\-mdwarf2\-asm\fR" 4
13275 .IX Item "-mdwarf2-asm"
13276 .PD
13277 Don't (or do) generate assembler code for the \s-1DWARF2\s0 line number debugging
13278 info.  This may be useful when not using the \s-1GNU\s0 assembler.
13279 .IP "\fB\-mearly\-stop\-bits\fR" 4
13280 .IX Item "-mearly-stop-bits"
13281 .PD 0
13282 .IP "\fB\-mno\-early\-stop\-bits\fR" 4
13283 .IX Item "-mno-early-stop-bits"
13284 .PD
13285 Allow stop bits to be placed earlier than immediately preceding the
13286 instruction that triggered the stop bit.  This can improve instruction
13287 scheduling, but does not always do so.
13288 .IP "\fB\-mfixed\-range=\fR\fIregister-range\fR" 4
13289 .IX Item "-mfixed-range=register-range"
13290 Generate code treating the given register range as fixed registers.
13291 A fixed register is one that the register allocator can not use.  This is
13292 useful when compiling kernel code.  A register range is specified as
13293 two registers separated by a dash.  Multiple register ranges can be
13294 specified separated by a comma.
13295 .IP "\fB\-mtls\-size=\fR\fItls-size\fR" 4
13296 .IX Item "-mtls-size=tls-size"
13297 Specify bit size of immediate \s-1TLS\s0 offsets.  Valid values are 14, 22, and
13298 64.
13299 .IP "\fB\-mtune=\fR\fIcpu-type\fR" 4
13300 .IX Item "-mtune=cpu-type"
13301 Tune the instruction scheduling for a particular \s-1CPU\s0, Valid values are
13302 itanium, itanium1, merced, itanium2, and mckinley.
13303 .IP "\fB\-milp32\fR" 4
13304 .IX Item "-milp32"
13305 .PD 0
13306 .IP "\fB\-mlp64\fR" 4
13307 .IX Item "-mlp64"
13308 .PD
13309 Generate code for a 32\-bit or 64\-bit environment.
13310 The 32\-bit environment sets int, long and pointer to 32 bits.
13311 The 64\-bit environment sets int to 32 bits and long and pointer
13312 to 64 bits.  These are HP-UX specific flags.
13313 .IP "\fB\-mno\-sched\-br\-data\-spec\fR" 4
13314 .IX Item "-mno-sched-br-data-spec"
13315 .PD 0
13316 .IP "\fB\-msched\-br\-data\-spec\fR" 4
13317 .IX Item "-msched-br-data-spec"
13318 .PD
13319 (Dis/En)able data speculative scheduling before reload.
13320 This will result in generation of the ld.a instructions and
13321 the corresponding check instructions (ld.c / chk.a).
13322 The default is 'disable'.
13323 .IP "\fB\-msched\-ar\-data\-spec\fR" 4
13324 .IX Item "-msched-ar-data-spec"
13325 .PD 0
13326 .IP "\fB\-mno\-sched\-ar\-data\-spec\fR" 4
13327 .IX Item "-mno-sched-ar-data-spec"
13328 .PD
13329 (En/Dis)able data speculative scheduling after reload.
13330 This will result in generation of the ld.a instructions and
13331 the corresponding check instructions (ld.c / chk.a).
13332 The default is 'enable'.
13333 .IP "\fB\-mno\-sched\-control\-spec\fR" 4
13334 .IX Item "-mno-sched-control-spec"
13335 .PD 0
13336 .IP "\fB\-msched\-control\-spec\fR" 4
13337 .IX Item "-msched-control-spec"
13338 .PD
13339 (Dis/En)able control speculative scheduling.  This feature is
13340 available only during region scheduling (i.e. before reload).
13341 This will result in generation of the ld.s instructions and
13342 the corresponding check instructions chk.s .
13343 The default is 'disable'.
13344 .IP "\fB\-msched\-br\-in\-data\-spec\fR" 4
13345 .IX Item "-msched-br-in-data-spec"
13346 .PD 0
13347 .IP "\fB\-mno\-sched\-br\-in\-data\-spec\fR" 4
13348 .IX Item "-mno-sched-br-in-data-spec"
13349 .PD
13350 (En/Dis)able speculative scheduling of the instructions that
13351 are dependent on the data speculative loads before reload.
13352 This is effective only with \fB\-msched\-br\-data\-spec\fR enabled.
13353 The default is 'enable'.
13354 .IP "\fB\-msched\-ar\-in\-data\-spec\fR" 4
13355 .IX Item "-msched-ar-in-data-spec"
13356 .PD 0
13357 .IP "\fB\-mno\-sched\-ar\-in\-data\-spec\fR" 4
13358 .IX Item "-mno-sched-ar-in-data-spec"
13359 .PD
13360 (En/Dis)able speculative scheduling of the instructions that
13361 are dependent on the data speculative loads after reload.
13362 This is effective only with \fB\-msched\-ar\-data\-spec\fR enabled.
13363 The default is 'enable'.
13364 .IP "\fB\-msched\-in\-control\-spec\fR" 4
13365 .IX Item "-msched-in-control-spec"
13366 .PD 0
13367 .IP "\fB\-mno\-sched\-in\-control\-spec\fR" 4
13368 .IX Item "-mno-sched-in-control-spec"
13369 .PD
13370 (En/Dis)able speculative scheduling of the instructions that
13371 are dependent on the control speculative loads.
13372 This is effective only with \fB\-msched\-control\-spec\fR enabled.
13373 The default is 'enable'.
13374 .IP "\fB\-mno\-sched\-prefer\-non\-data\-spec\-insns\fR" 4
13375 .IX Item "-mno-sched-prefer-non-data-spec-insns"
13376 .PD 0
13377 .IP "\fB\-msched\-prefer\-non\-data\-spec\-insns\fR" 4
13378 .IX Item "-msched-prefer-non-data-spec-insns"
13379 .PD
13380 If enabled, data speculative instructions will be chosen for schedule
13381 only if there are no other choices at the moment.  This will make
13382 the use of the data speculation much more conservative.
13383 The default is 'disable'.
13384 .IP "\fB\-mno\-sched\-prefer\-non\-control\-spec\-insns\fR" 4
13385 .IX Item "-mno-sched-prefer-non-control-spec-insns"
13386 .PD 0
13387 .IP "\fB\-msched\-prefer\-non\-control\-spec\-insns\fR" 4
13388 .IX Item "-msched-prefer-non-control-spec-insns"
13389 .PD
13390 If enabled, control speculative instructions will be chosen for schedule
13391 only if there are no other choices at the moment.  This will make
13392 the use of the control speculation much more conservative.
13393 The default is 'disable'.
13394 .IP "\fB\-mno\-sched\-count\-spec\-in\-critical\-path\fR" 4
13395 .IX Item "-mno-sched-count-spec-in-critical-path"
13396 .PD 0
13397 .IP "\fB\-msched\-count\-spec\-in\-critical\-path\fR" 4
13398 .IX Item "-msched-count-spec-in-critical-path"
13399 .PD
13400 If enabled, speculative dependencies will be considered during
13401 computation of the instructions priorities.  This will make the use of the
13402 speculation a bit more conservative.
13403 The default is 'disable'.
13404 .IP "\fB\-msched\-spec\-ldc\fR" 4
13405 .IX Item "-msched-spec-ldc"
13406 Use a simple data speculation check.  This option is on by default.
13407 .IP "\fB\-msched\-control\-spec\-ldc\fR" 4
13408 .IX Item "-msched-control-spec-ldc"
13409 Use a simple check for control speculation.  This option is on by default.
13410 .IP "\fB\-msched\-stop\-bits\-after\-every\-cycle\fR" 4
13411 .IX Item "-msched-stop-bits-after-every-cycle"
13412 Place a stop bit after every cycle when scheduling.  This option is on
13413 by default.
13414 .IP "\fB\-msched\-fp\-mem\-deps\-zero\-cost\fR" 4
13415 .IX Item "-msched-fp-mem-deps-zero-cost"
13416 Assume that floating-point stores and loads are not likely to cause a conflict
13417 when placed into the same instruction group.  This option is disabled by
13418 default.
13419 .IP "\fB\-msel\-sched\-dont\-check\-control\-spec\fR" 4
13420 .IX Item "-msel-sched-dont-check-control-spec"
13421 Generate checks for control speculation in selective scheduling.
13422 This flag is disabled by default.
13423 .IP "\fB\-msched\-max\-memory\-insns=\fR\fImax-insns\fR" 4
13424 .IX Item "-msched-max-memory-insns=max-insns"
13425 Limit on the number of memory insns per instruction group, giving lower
13426 priority to subsequent memory insns attempting to schedule in the same
13427 instruction group. Frequently useful to prevent cache bank conflicts.
13428 The default value is 1.
13429 .IP "\fB\-msched\-max\-memory\-insns\-hard\-limit\fR" 4
13430 .IX Item "-msched-max-memory-insns-hard-limit"
13431 Disallow more than `msched\-max\-memory\-insns' in instruction group.
13432 Otherwise, limit is `soft' meaning that we would prefer non-memory operations
13433 when limit is reached but may still schedule memory operations.
13434 .PP
13435 \fI\s-1IA\-64/VMS\s0 Options\fR
13436 .IX Subsection "IA-64/VMS Options"
13437 .PP
13438 These \fB\-m\fR options are defined for the \s-1IA\-64/VMS\s0 implementations:
13439 .IP "\fB\-mvms\-return\-codes\fR" 4
13440 .IX Item "-mvms-return-codes"
13441 Return \s-1VMS\s0 condition codes from main. The default is to return \s-1POSIX\s0
13442 style condition (e.g. error) codes.
13443 .IP "\fB\-mdebug\-main=\fR\fIprefix\fR" 4
13444 .IX Item "-mdebug-main=prefix"
13445 Flag the first routine whose name starts with \fIprefix\fR as the main
13446 routine for the debugger.
13447 .IP "\fB\-mmalloc64\fR" 4
13448 .IX Item "-mmalloc64"
13449 Default to 64\-bit memory allocation routines.
13450 .PP
13451 \fI\s-1LM32\s0 Options\fR
13452 .IX Subsection "LM32 Options"
13453 .PP
13454 These \fB\-m\fR options are defined for the Lattice Mico32 architecture:
13455 .IP "\fB\-mbarrel\-shift\-enabled\fR" 4
13456 .IX Item "-mbarrel-shift-enabled"
13457 Enable barrel-shift instructions.
13458 .IP "\fB\-mdivide\-enabled\fR" 4
13459 .IX Item "-mdivide-enabled"
13460 Enable divide and modulus instructions.
13461 .IP "\fB\-mmultiply\-enabled\fR" 4
13462 .IX Item "-mmultiply-enabled"
13463 Enable multiply instructions.
13464 .IP "\fB\-msign\-extend\-enabled\fR" 4
13465 .IX Item "-msign-extend-enabled"
13466 Enable sign extend instructions.
13467 .IP "\fB\-muser\-enabled\fR" 4
13468 .IX Item "-muser-enabled"
13469 Enable user-defined instructions.
13470 .PP
13471 \fIM32C Options\fR
13472 .IX Subsection "M32C Options"
13473 .IP "\fB\-mcpu=\fR\fIname\fR" 4
13474 .IX Item "-mcpu=name"
13475 Select the \s-1CPU\s0 for which code is generated.  \fIname\fR may be one of
13476 \&\fBr8c\fR for the R8C/Tiny series, \fBm16c\fR for the M16C (up to
13477 /60) series, \fBm32cm\fR for the M16C/80 series, or \fBm32c\fR for
13478 the M32C/80 series.
13479 .IP "\fB\-msim\fR" 4
13480 .IX Item "-msim"
13481 Specifies that the program will be run on the simulator.  This causes
13482 an alternate runtime library to be linked in which supports, for
13483 example, file I/O.  You must not use this option when generating
13484 programs that will run on real hardware; you must provide your own
13485 runtime library for whatever I/O functions are needed.
13486 .IP "\fB\-memregs=\fR\fInumber\fR" 4
13487 .IX Item "-memregs=number"
13488 Specifies the number of memory-based pseudo-registers \s-1GCC\s0 will use
13489 during code generation.  These pseudo-registers will be used like real
13490 registers, so there is a tradeoff between \s-1GCC\s0's ability to fit the
13491 code into available registers, and the performance penalty of using
13492 memory instead of registers.  Note that all modules in a program must
13493 be compiled with the same value for this option.  Because of that, you
13494 must not use this option with the default runtime libraries gcc
13495 builds.
13496 .PP
13497 \fIM32R/D Options\fR
13498 .IX Subsection "M32R/D Options"
13499 .PP
13500 These \fB\-m\fR options are defined for Renesas M32R/D architectures:
13501 .IP "\fB\-m32r2\fR" 4
13502 .IX Item "-m32r2"
13503 Generate code for the M32R/2.
13504 .IP "\fB\-m32rx\fR" 4
13505 .IX Item "-m32rx"
13506 Generate code for the M32R/X.
13507 .IP "\fB\-m32r\fR" 4
13508 .IX Item "-m32r"
13509 Generate code for the M32R.  This is the default.
13510 .IP "\fB\-mmodel=small\fR" 4
13511 .IX Item "-mmodel=small"
13512 Assume all objects live in the lower 16MB of memory (so that their addresses
13513 can be loaded with the \f(CW\*(C`ld24\*(C'\fR instruction), and assume all subroutines
13514 are reachable with the \f(CW\*(C`bl\*(C'\fR instruction.
13515 This is the default.
13516 .Sp
13517 The addressability of a particular object can be set with the
13518 \&\f(CW\*(C`model\*(C'\fR attribute.
13519 .IP "\fB\-mmodel=medium\fR" 4
13520 .IX Item "-mmodel=medium"
13521 Assume objects may be anywhere in the 32\-bit address space (the compiler
13522 will generate \f(CW\*(C`seth/add3\*(C'\fR instructions to load their addresses), and
13523 assume all subroutines are reachable with the \f(CW\*(C`bl\*(C'\fR instruction.
13524 .IP "\fB\-mmodel=large\fR" 4
13525 .IX Item "-mmodel=large"
13526 Assume objects may be anywhere in the 32\-bit address space (the compiler
13527 will generate \f(CW\*(C`seth/add3\*(C'\fR instructions to load their addresses), and
13528 assume subroutines may not be reachable with the \f(CW\*(C`bl\*(C'\fR instruction
13529 (the compiler will generate the much slower \f(CW\*(C`seth/add3/jl\*(C'\fR
13530 instruction sequence).
13531 .IP "\fB\-msdata=none\fR" 4
13532 .IX Item "-msdata=none"
13533 Disable use of the small data area.  Variables will be put into
13534 one of \fB.data\fR, \fBbss\fR, or \fB.rodata\fR (unless the
13535 \&\f(CW\*(C`section\*(C'\fR attribute has been specified).
13536 This is the default.
13537 .Sp
13538 The small data area consists of sections \fB.sdata\fR and \fB.sbss\fR.
13539 Objects may be explicitly put in the small data area with the
13540 \&\f(CW\*(C`section\*(C'\fR attribute using one of these sections.
13541 .IP "\fB\-msdata=sdata\fR" 4
13542 .IX Item "-msdata=sdata"
13543 Put small global and static data in the small data area, but do not
13544 generate special code to reference them.
13545 .IP "\fB\-msdata=use\fR" 4
13546 .IX Item "-msdata=use"
13547 Put small global and static data in the small data area, and generate
13548 special instructions to reference them.
13549 .IP "\fB\-G\fR \fInum\fR" 4
13550 .IX Item "-G num"
13551 Put global and static objects less than or equal to \fInum\fR bytes
13552 into the small data or bss sections instead of the normal data or bss
13553 sections.  The default value of \fInum\fR is 8.
13554 The \fB\-msdata\fR option must be set to one of \fBsdata\fR or \fBuse\fR
13555 for this option to have any effect.
13556 .Sp
13557 All modules should be compiled with the same \fB\-G\fR \fInum\fR value.
13558 Compiling with different values of \fInum\fR may or may not work; if it
13559 doesn't the linker will give an error message\-\-\-incorrect code will not be
13560 generated.
13561 .IP "\fB\-mdebug\fR" 4
13562 .IX Item "-mdebug"
13563 Makes the M32R specific code in the compiler display some statistics
13564 that might help in debugging programs.
13565 .IP "\fB\-malign\-loops\fR" 4
13566 .IX Item "-malign-loops"
13567 Align all loops to a 32\-byte boundary.
13568 .IP "\fB\-mno\-align\-loops\fR" 4
13569 .IX Item "-mno-align-loops"
13570 Do not enforce a 32\-byte alignment for loops.  This is the default.
13571 .IP "\fB\-missue\-rate=\fR\fInumber\fR" 4
13572 .IX Item "-missue-rate=number"
13573 Issue \fInumber\fR instructions per cycle.  \fInumber\fR can only be 1
13574 or 2.
13575 .IP "\fB\-mbranch\-cost=\fR\fInumber\fR" 4
13576 .IX Item "-mbranch-cost=number"
13577 \&\fInumber\fR can only be 1 or 2.  If it is 1 then branches will be
13578 preferred over conditional code, if it is 2, then the opposite will
13579 apply.
13580 .IP "\fB\-mflush\-trap=\fR\fInumber\fR" 4
13581 .IX Item "-mflush-trap=number"
13582 Specifies the trap number to use to flush the cache.  The default is
13583 12.  Valid numbers are between 0 and 15 inclusive.
13584 .IP "\fB\-mno\-flush\-trap\fR" 4
13585 .IX Item "-mno-flush-trap"
13586 Specifies that the cache cannot be flushed by using a trap.
13587 .IP "\fB\-mflush\-func=\fR\fIname\fR" 4
13588 .IX Item "-mflush-func=name"
13589 Specifies the name of the operating system function to call to flush
13590 the cache.  The default is \fI_flush_cache\fR, but a function call
13591 will only be used if a trap is not available.
13592 .IP "\fB\-mno\-flush\-func\fR" 4
13593 .IX Item "-mno-flush-func"
13594 Indicates that there is no \s-1OS\s0 function for flushing the cache.
13595 .PP
13596 \fIM680x0 Options\fR
13597 .IX Subsection "M680x0 Options"
13598 .PP
13599 These are the \fB\-m\fR options defined for M680x0 and ColdFire processors.
13600 The default settings depend on which architecture was selected when
13601 the compiler was configured; the defaults for the most common choices
13602 are given below.
13603 .IP "\fB\-march=\fR\fIarch\fR" 4
13604 .IX Item "-march=arch"
13605 Generate code for a specific M680x0 or ColdFire instruction set
13606 architecture.  Permissible values of \fIarch\fR for M680x0
13607 architectures are: \fB68000\fR, \fB68010\fR, \fB68020\fR,
13608 \&\fB68030\fR, \fB68040\fR, \fB68060\fR and \fBcpu32\fR.  ColdFire
13609 architectures are selected according to Freescale's \s-1ISA\s0 classification
13610 and the permissible values are: \fBisaa\fR, \fBisaaplus\fR,
13611 \&\fBisab\fR and \fBisac\fR.
13612 .Sp
13613 gcc defines a macro \fB_\|_mcf\fR\fIarch\fR\fB_\|_\fR whenever it is generating
13614 code for a ColdFire target.  The \fIarch\fR in this macro is one of the
13615 \&\fB\-march\fR arguments given above.
13616 .Sp
13617 When used together, \fB\-march\fR and \fB\-mtune\fR select code
13618 that runs on a family of similar processors but that is optimized
13619 for a particular microarchitecture.
13620 .IP "\fB\-mcpu=\fR\fIcpu\fR" 4
13621 .IX Item "-mcpu=cpu"
13622 Generate code for a specific M680x0 or ColdFire processor.
13623 The M680x0 \fIcpu\fRs are: \fB68000\fR, \fB68010\fR, \fB68020\fR,
13624 \&\fB68030\fR, \fB68040\fR, \fB68060\fR, \fB68302\fR, \fB68332\fR
13625 and \fBcpu32\fR.  The ColdFire \fIcpu\fRs are given by the table
13626 below, which also classifies the CPUs into families:
13627 .RS 4
13628 .IP "Family : \fB\-mcpu\fR arguments" 4
13629 .IX Item "Family : -mcpu arguments"
13630 .PD 0
13631 .IP "\fB51\fR : \fB51\fR \fB51ac\fR \fB51cn\fR \fB51em\fR \fB51qe\fR" 4
13632 .IX Item "51 : 51 51ac 51cn 51em 51qe"
13633 .IP "\fB5206\fR : \fB5202\fR \fB5204\fR \fB5206\fR" 4
13634 .IX Item "5206 : 5202 5204 5206"
13635 .IP "\fB5206e\fR : \fB5206e\fR" 4
13636 .IX Item "5206e : 5206e"
13637 .IP "\fB5208\fR : \fB5207\fR \fB5208\fR" 4
13638 .IX Item "5208 : 5207 5208"
13639 .IP "\fB5211a\fR : \fB5210a\fR \fB5211a\fR" 4
13640 .IX Item "5211a : 5210a 5211a"
13641 .IP "\fB5213\fR : \fB5211\fR \fB5212\fR \fB5213\fR" 4
13642 .IX Item "5213 : 5211 5212 5213"
13643 .IP "\fB5216\fR : \fB5214\fR \fB5216\fR" 4
13644 .IX Item "5216 : 5214 5216"
13645 .IP "\fB52235\fR : \fB52230\fR \fB52231\fR \fB52232\fR \fB52233\fR \fB52234\fR \fB52235\fR" 4
13646 .IX Item "52235 : 52230 52231 52232 52233 52234 52235"
13647 .IP "\fB5225\fR : \fB5224\fR \fB5225\fR" 4
13648 .IX Item "5225 : 5224 5225"
13649 .IP "\fB52259\fR : \fB52252\fR \fB52254\fR \fB52255\fR \fB52256\fR \fB52258\fR \fB52259\fR" 4
13650 .IX Item "52259 : 52252 52254 52255 52256 52258 52259"
13651 .IP "\fB5235\fR : \fB5232\fR \fB5233\fR \fB5234\fR \fB5235\fR \fB523x\fR" 4
13652 .IX Item "5235 : 5232 5233 5234 5235 523x"
13653 .IP "\fB5249\fR : \fB5249\fR" 4
13654 .IX Item "5249 : 5249"
13655 .IP "\fB5250\fR : \fB5250\fR" 4
13656 .IX Item "5250 : 5250"
13657 .IP "\fB5271\fR : \fB5270\fR \fB5271\fR" 4
13658 .IX Item "5271 : 5270 5271"
13659 .IP "\fB5272\fR : \fB5272\fR" 4
13660 .IX Item "5272 : 5272"
13661 .IP "\fB5275\fR : \fB5274\fR \fB5275\fR" 4
13662 .IX Item "5275 : 5274 5275"
13663 .IP "\fB5282\fR : \fB5280\fR \fB5281\fR \fB5282\fR \fB528x\fR" 4
13664 .IX Item "5282 : 5280 5281 5282 528x"
13665 .IP "\fB53017\fR : \fB53011\fR \fB53012\fR \fB53013\fR \fB53014\fR \fB53015\fR \fB53016\fR \fB53017\fR" 4
13666 .IX Item "53017 : 53011 53012 53013 53014 53015 53016 53017"
13667 .IP "\fB5307\fR : \fB5307\fR" 4
13668 .IX Item "5307 : 5307"
13669 .IP "\fB5329\fR : \fB5327\fR \fB5328\fR \fB5329\fR \fB532x\fR" 4
13670 .IX Item "5329 : 5327 5328 5329 532x"
13671 .IP "\fB5373\fR : \fB5372\fR \fB5373\fR \fB537x\fR" 4
13672 .IX Item "5373 : 5372 5373 537x"
13673 .IP "\fB5407\fR : \fB5407\fR" 4
13674 .IX Item "5407 : 5407"
13675 .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
13676 .IX Item "5475 : 5470 5471 5472 5473 5474 5475 547x 5480 5481 5482 5483 5484 5485"
13677 .RE
13678 .RS 4
13679 .PD
13680 .Sp
13681 \&\fB\-mcpu=\fR\fIcpu\fR overrides \fB\-march=\fR\fIarch\fR if
13682 \&\fIarch\fR is compatible with \fIcpu\fR.  Other combinations of
13683 \&\fB\-mcpu\fR and \fB\-march\fR are rejected.
13684 .Sp
13685 gcc defines the macro \fB_\|_mcf_cpu_\fR\fIcpu\fR when ColdFire target
13686 \&\fIcpu\fR is selected.  It also defines \fB_\|_mcf_family_\fR\fIfamily\fR,
13687 where the value of \fIfamily\fR is given by the table above.
13688 .RE
13689 .IP "\fB\-mtune=\fR\fItune\fR" 4
13690 .IX Item "-mtune=tune"
13691 Tune the code for a particular microarchitecture, within the
13692 constraints set by \fB\-march\fR and \fB\-mcpu\fR.
13693 The M680x0 microarchitectures are: \fB68000\fR, \fB68010\fR,
13694 \&\fB68020\fR, \fB68030\fR, \fB68040\fR, \fB68060\fR
13695 and \fBcpu32\fR.  The ColdFire microarchitectures
13696 are: \fBcfv1\fR, \fBcfv2\fR, \fBcfv3\fR, \fBcfv4\fR and \fBcfv4e\fR.
13697 .Sp
13698 You can also use \fB\-mtune=68020\-40\fR for code that needs
13699 to run relatively well on 68020, 68030 and 68040 targets.
13700 \&\fB\-mtune=68020\-60\fR is similar but includes 68060 targets
13701 as well.  These two options select the same tuning decisions as
13702 \&\fB\-m68020\-40\fR and \fB\-m68020\-60\fR respectively.
13703 .Sp
13704 gcc defines the macros \fB_\|_mc\fR\fIarch\fR and \fB_\|_mc\fR\fIarch\fR\fB_\|_\fR
13705 when tuning for 680x0 architecture \fIarch\fR.  It also defines
13706 \&\fBmc\fR\fIarch\fR unless either \fB\-ansi\fR or a non-GNU \fB\-std\fR
13707 option is used.  If gcc is tuning for a range of architectures,
13708 as selected by \fB\-mtune=68020\-40\fR or \fB\-mtune=68020\-60\fR,
13709 it defines the macros for every architecture in the range.
13710 .Sp
13711 gcc also defines the macro \fB_\|_m\fR\fIuarch\fR\fB_\|_\fR when tuning for
13712 ColdFire microarchitecture \fIuarch\fR, where \fIuarch\fR is one
13713 of the arguments given above.
13714 .IP "\fB\-m68000\fR" 4
13715 .IX Item "-m68000"
13716 .PD 0
13717 .IP "\fB\-mc68000\fR" 4
13718 .IX Item "-mc68000"
13719 .PD
13720 Generate output for a 68000.  This is the default
13721 when the compiler is configured for 68000\-based systems.
13722 It is equivalent to \fB\-march=68000\fR.
13723 .Sp
13724 Use this option for microcontrollers with a 68000 or \s-1EC000\s0 core,
13725 including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
13726 .IP "\fB\-m68010\fR" 4
13727 .IX Item "-m68010"
13728 Generate output for a 68010.  This is the default
13729 when the compiler is configured for 68010\-based systems.
13730 It is equivalent to \fB\-march=68010\fR.
13731 .IP "\fB\-m68020\fR" 4
13732 .IX Item "-m68020"
13733 .PD 0
13734 .IP "\fB\-mc68020\fR" 4
13735 .IX Item "-mc68020"
13736 .PD
13737 Generate output for a 68020.  This is the default
13738 when the compiler is configured for 68020\-based systems.
13739 It is equivalent to \fB\-march=68020\fR.
13740 .IP "\fB\-m68030\fR" 4
13741 .IX Item "-m68030"
13742 Generate output for a 68030.  This is the default when the compiler is
13743 configured for 68030\-based systems.  It is equivalent to
13744 \&\fB\-march=68030\fR.
13745 .IP "\fB\-m68040\fR" 4
13746 .IX Item "-m68040"
13747 Generate output for a 68040.  This is the default when the compiler is
13748 configured for 68040\-based systems.  It is equivalent to
13749 \&\fB\-march=68040\fR.
13750 .Sp
13751 This option inhibits the use of 68881/68882 instructions that have to be
13752 emulated by software on the 68040.  Use this option if your 68040 does not
13753 have code to emulate those instructions.
13754 .IP "\fB\-m68060\fR" 4
13755 .IX Item "-m68060"
13756 Generate output for a 68060.  This is the default when the compiler is
13757 configured for 68060\-based systems.  It is equivalent to
13758 \&\fB\-march=68060\fR.
13759 .Sp
13760 This option inhibits the use of 68020 and 68881/68882 instructions that
13761 have to be emulated by software on the 68060.  Use this option if your 68060
13762 does not have code to emulate those instructions.
13763 .IP "\fB\-mcpu32\fR" 4
13764 .IX Item "-mcpu32"
13765 Generate output for a \s-1CPU32\s0.  This is the default
13766 when the compiler is configured for CPU32\-based systems.
13767 It is equivalent to \fB\-march=cpu32\fR.
13768 .Sp
13769 Use this option for microcontrollers with a
13770 \&\s-1CPU32\s0 or \s-1CPU32+\s0 core, including the 68330, 68331, 68332, 68333, 68334,
13771 68336, 68340, 68341, 68349 and 68360.
13772 .IP "\fB\-m5200\fR" 4
13773 .IX Item "-m5200"
13774 Generate output for a 520X ColdFire \s-1CPU\s0.  This is the default
13775 when the compiler is configured for 520X\-based systems.
13776 It is equivalent to \fB\-mcpu=5206\fR, and is now deprecated
13777 in favor of that option.
13778 .Sp
13779 Use this option for microcontroller with a 5200 core, including
13780 the \s-1MCF5202\s0, \s-1MCF5203\s0, \s-1MCF5204\s0 and \s-1MCF5206\s0.
13781 .IP "\fB\-m5206e\fR" 4
13782 .IX Item "-m5206e"
13783 Generate output for a 5206e ColdFire \s-1CPU\s0.  The option is now
13784 deprecated in favor of the equivalent \fB\-mcpu=5206e\fR.
13785 .IP "\fB\-m528x\fR" 4
13786 .IX Item "-m528x"
13787 Generate output for a member of the ColdFire 528X family.
13788 The option is now deprecated in favor of the equivalent
13789 \&\fB\-mcpu=528x\fR.
13790 .IP "\fB\-m5307\fR" 4
13791 .IX Item "-m5307"
13792 Generate output for a ColdFire 5307 \s-1CPU\s0.  The option is now deprecated
13793 in favor of the equivalent \fB\-mcpu=5307\fR.
13794 .IP "\fB\-m5407\fR" 4
13795 .IX Item "-m5407"
13796 Generate output for a ColdFire 5407 \s-1CPU\s0.  The option is now deprecated
13797 in favor of the equivalent \fB\-mcpu=5407\fR.
13798 .IP "\fB\-mcfv4e\fR" 4
13799 .IX Item "-mcfv4e"
13800 Generate output for a ColdFire V4e family \s-1CPU\s0 (e.g. 547x/548x).
13801 This includes use of hardware floating-point instructions.
13802 The option is equivalent to \fB\-mcpu=547x\fR, and is now
13803 deprecated in favor of that option.
13804 .IP "\fB\-m68020\-40\fR" 4
13805 .IX Item "-m68020-40"
13806 Generate output for a 68040, without using any of the new instructions.
13807 This results in code that can run relatively efficiently on either a
13808 68020/68881 or a 68030 or a 68040.  The generated code does use the
13809 68881 instructions that are emulated on the 68040.
13810 .Sp
13811 The option is equivalent to \fB\-march=68020\fR \fB\-mtune=68020\-40\fR.
13812 .IP "\fB\-m68020\-60\fR" 4
13813 .IX Item "-m68020-60"
13814 Generate output for a 68060, without using any of the new instructions.
13815 This results in code that can run relatively efficiently on either a
13816 68020/68881 or a 68030 or a 68040.  The generated code does use the
13817 68881 instructions that are emulated on the 68060.
13818 .Sp
13819 The option is equivalent to \fB\-march=68020\fR \fB\-mtune=68020\-60\fR.
13820 .IP "\fB\-mhard\-float\fR" 4
13821 .IX Item "-mhard-float"
13822 .PD 0
13823 .IP "\fB\-m68881\fR" 4
13824 .IX Item "-m68881"
13825 .PD
13826 Generate floating-point instructions.  This is the default for 68020
13827 and above, and for ColdFire devices that have an \s-1FPU\s0.  It defines the
13828 macro \fB_\|_HAVE_68881_\|_\fR on M680x0 targets and \fB_\|_mcffpu_\|_\fR
13829 on ColdFire targets.
13830 .IP "\fB\-msoft\-float\fR" 4
13831 .IX Item "-msoft-float"
13832 Do not generate floating-point instructions; use library calls instead.
13833 This is the default for 68000, 68010, and 68832 targets.  It is also
13834 the default for ColdFire devices that have no \s-1FPU\s0.
13835 .IP "\fB\-mdiv\fR" 4
13836 .IX Item "-mdiv"
13837 .PD 0
13838 .IP "\fB\-mno\-div\fR" 4
13839 .IX Item "-mno-div"
13840 .PD
13841 Generate (do not generate) ColdFire hardware divide and remainder
13842 instructions.  If \fB\-march\fR is used without \fB\-mcpu\fR,
13843 the default is \*(L"on\*(R" for ColdFire architectures and \*(L"off\*(R" for M680x0
13844 architectures.  Otherwise, the default is taken from the target \s-1CPU\s0
13845 (either the default \s-1CPU\s0, or the one specified by \fB\-mcpu\fR).  For
13846 example, the default is \*(L"off\*(R" for \fB\-mcpu=5206\fR and \*(L"on\*(R" for
13847 \&\fB\-mcpu=5206e\fR.
13848 .Sp
13849 gcc defines the macro \fB_\|_mcfhwdiv_\|_\fR when this option is enabled.
13850 .IP "\fB\-mshort\fR" 4
13851 .IX Item "-mshort"
13852 Consider type \f(CW\*(C`int\*(C'\fR to be 16 bits wide, like \f(CW\*(C`short int\*(C'\fR.
13853 Additionally, parameters passed on the stack are also aligned to a
13854 16\-bit boundary even on targets whose \s-1API\s0 mandates promotion to 32\-bit.
13855 .IP "\fB\-mno\-short\fR" 4
13856 .IX Item "-mno-short"
13857 Do not consider type \f(CW\*(C`int\*(C'\fR to be 16 bits wide.  This is the default.
13858 .IP "\fB\-mnobitfield\fR" 4
13859 .IX Item "-mnobitfield"
13860 .PD 0
13861 .IP "\fB\-mno\-bitfield\fR" 4
13862 .IX Item "-mno-bitfield"
13863 .PD
13864 Do not use the bit-field instructions.  The \fB\-m68000\fR, \fB\-mcpu32\fR
13865 and \fB\-m5200\fR options imply \fB\-mnobitfield\fR.
13866 .IP "\fB\-mbitfield\fR" 4
13867 .IX Item "-mbitfield"
13868 Do use the bit-field instructions.  The \fB\-m68020\fR option implies
13869 \&\fB\-mbitfield\fR.  This is the default if you use a configuration
13870 designed for a 68020.
13871 .IP "\fB\-mrtd\fR" 4
13872 .IX Item "-mrtd"
13873 Use a different function-calling convention, in which functions
13874 that take a fixed number of arguments return with the \f(CW\*(C`rtd\*(C'\fR
13875 instruction, which pops their arguments while returning.  This
13876 saves one instruction in the caller since there is no need to pop
13877 the arguments there.
13878 .Sp
13879 This calling convention is incompatible with the one normally
13880 used on Unix, so you cannot use it if you need to call libraries
13881 compiled with the Unix compiler.
13882 .Sp
13883 Also, you must provide function prototypes for all functions that
13884 take variable numbers of arguments (including \f(CW\*(C`printf\*(C'\fR);
13885 otherwise incorrect code will be generated for calls to those
13886 functions.
13887 .Sp
13888 In addition, seriously incorrect code will result if you call a
13889 function with too many arguments.  (Normally, extra arguments are
13890 harmlessly ignored.)
13891 .Sp
13892 The \f(CW\*(C`rtd\*(C'\fR instruction is supported by the 68010, 68020, 68030,
13893 68040, 68060 and \s-1CPU32\s0 processors, but not by the 68000 or 5200.
13894 .IP "\fB\-mno\-rtd\fR" 4
13895 .IX Item "-mno-rtd"
13896 Do not use the calling conventions selected by \fB\-mrtd\fR.
13897 This is the default.
13898 .IP "\fB\-malign\-int\fR" 4
13899 .IX Item "-malign-int"
13900 .PD 0
13901 .IP "\fB\-mno\-align\-int\fR" 4
13902 .IX Item "-mno-align-int"
13903 .PD
13904 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,
13905 \&\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
13906 boundary (\fB\-malign\-int\fR) or a 16\-bit boundary (\fB\-mno\-align\-int\fR).
13907 Aligning variables on 32\-bit boundaries produces code that runs somewhat
13908 faster on processors with 32\-bit busses at the expense of more memory.
13909 .Sp
13910 \&\fBWarning:\fR if you use the \fB\-malign\-int\fR switch, \s-1GCC\s0 will
13911 align structures containing the above types  differently than
13912 most published application binary interface specifications for the m68k.
13913 .IP "\fB\-mpcrel\fR" 4
13914 .IX Item "-mpcrel"
13915 Use the pc-relative addressing mode of the 68000 directly, instead of
13916 using a global offset table.  At present, this option implies \fB\-fpic\fR,
13917 allowing at most a 16\-bit offset for pc-relative addressing.  \fB\-fPIC\fR is
13918 not presently supported with \fB\-mpcrel\fR, though this could be supported for
13919 68020 and higher processors.
13920 .IP "\fB\-mno\-strict\-align\fR" 4
13921 .IX Item "-mno-strict-align"
13922 .PD 0
13923 .IP "\fB\-mstrict\-align\fR" 4
13924 .IX Item "-mstrict-align"
13925 .PD
13926 Do not (do) assume that unaligned memory references will be handled by
13927 the system.
13928 .IP "\fB\-msep\-data\fR" 4
13929 .IX Item "-msep-data"
13930 Generate code that allows the data segment to be located in a different
13931 area of memory from the text segment.  This allows for execute in place in
13932 an environment without virtual memory management.  This option implies
13933 \&\fB\-fPIC\fR.
13934 .IP "\fB\-mno\-sep\-data\fR" 4
13935 .IX Item "-mno-sep-data"
13936 Generate code that assumes that the data segment follows the text segment.
13937 This is the default.
13938 .IP "\fB\-mid\-shared\-library\fR" 4
13939 .IX Item "-mid-shared-library"
13940 Generate code that supports shared libraries via the library \s-1ID\s0 method.
13941 This allows for execute in place and shared libraries in an environment
13942 without virtual memory management.  This option implies \fB\-fPIC\fR.
13943 .IP "\fB\-mno\-id\-shared\-library\fR" 4
13944 .IX Item "-mno-id-shared-library"
13945 Generate code that doesn't assume \s-1ID\s0 based shared libraries are being used.
13946 This is the default.
13947 .IP "\fB\-mshared\-library\-id=n\fR" 4
13948 .IX Item "-mshared-library-id=n"
13949 Specified the identification number of the \s-1ID\s0 based shared library being
13950 compiled.  Specifying a value of 0 will generate more compact code, specifying
13951 other values will force the allocation of that number to the current
13952 library but is no more space or time efficient than omitting this option.
13953 .IP "\fB\-mxgot\fR" 4
13954 .IX Item "-mxgot"
13955 .PD 0
13956 .IP "\fB\-mno\-xgot\fR" 4
13957 .IX Item "-mno-xgot"
13958 .PD
13959 When generating position-independent code for ColdFire, generate code
13960 that works if the \s-1GOT\s0 has more than 8192 entries.  This code is
13961 larger and slower than code generated without this option.  On M680x0
13962 processors, this option is not needed; \fB\-fPIC\fR suffices.
13963 .Sp
13964 \&\s-1GCC\s0 normally uses a single instruction to load values from the \s-1GOT\s0.
13965 While this is relatively efficient, it only works if the \s-1GOT\s0
13966 is smaller than about 64k.  Anything larger causes the linker
13967 to report an error such as:
13968 .Sp
13969 .Vb 1
13970 \&        relocation truncated to fit: R_68K_GOT16O foobar
13971 .Ve
13972 .Sp
13973 If this happens, you should recompile your code with \fB\-mxgot\fR.
13974 It should then work with very large GOTs.  However, code generated with
13975 \&\fB\-mxgot\fR is less efficient, since it takes 4 instructions to fetch
13976 the value of a global symbol.
13977 .Sp
13978 Note that some linkers, including newer versions of the \s-1GNU\s0 linker,
13979 can create multiple GOTs and sort \s-1GOT\s0 entries.  If you have such a linker,
13980 you should only need to use \fB\-mxgot\fR when compiling a single
13981 object file that accesses more than 8192 \s-1GOT\s0 entries.  Very few do.
13982 .Sp
13983 These options have no effect unless \s-1GCC\s0 is generating
13984 position-independent code.
13985 .PP
13986 \fIMCore Options\fR
13987 .IX Subsection "MCore Options"
13988 .PP
13989 These are the \fB\-m\fR options defined for the Motorola M*Core
13990 processors.
13991 .IP "\fB\-mhardlit\fR" 4
13992 .IX Item "-mhardlit"
13993 .PD 0
13994 .IP "\fB\-mno\-hardlit\fR" 4
13995 .IX Item "-mno-hardlit"
13996 .PD
13997 Inline constants into the code stream if it can be done in two
13998 instructions or less.
13999 .IP "\fB\-mdiv\fR" 4
14000 .IX Item "-mdiv"
14001 .PD 0
14002 .IP "\fB\-mno\-div\fR" 4
14003 .IX Item "-mno-div"
14004 .PD
14005 Use the divide instruction.  (Enabled by default).
14006 .IP "\fB\-mrelax\-immediate\fR" 4
14007 .IX Item "-mrelax-immediate"
14008 .PD 0
14009 .IP "\fB\-mno\-relax\-immediate\fR" 4
14010 .IX Item "-mno-relax-immediate"
14011 .PD
14012 Allow arbitrary sized immediates in bit operations.
14013 .IP "\fB\-mwide\-bitfields\fR" 4
14014 .IX Item "-mwide-bitfields"
14015 .PD 0
14016 .IP "\fB\-mno\-wide\-bitfields\fR" 4
14017 .IX Item "-mno-wide-bitfields"
14018 .PD
14019 Always treat bit-fields as int-sized.
14020 .IP "\fB\-m4byte\-functions\fR" 4
14021 .IX Item "-m4byte-functions"
14022 .PD 0
14023 .IP "\fB\-mno\-4byte\-functions\fR" 4
14024 .IX Item "-mno-4byte-functions"
14025 .PD
14026 Force all functions to be aligned to a 4\-byte boundary.
14027 .IP "\fB\-mcallgraph\-data\fR" 4
14028 .IX Item "-mcallgraph-data"
14029 .PD 0
14030 .IP "\fB\-mno\-callgraph\-data\fR" 4
14031 .IX Item "-mno-callgraph-data"
14032 .PD
14033 Emit callgraph information.
14034 .IP "\fB\-mslow\-bytes\fR" 4
14035 .IX Item "-mslow-bytes"
14036 .PD 0
14037 .IP "\fB\-mno\-slow\-bytes\fR" 4
14038 .IX Item "-mno-slow-bytes"
14039 .PD
14040 Prefer word access when reading byte quantities.
14041 .IP "\fB\-mlittle\-endian\fR" 4
14042 .IX Item "-mlittle-endian"
14043 .PD 0
14044 .IP "\fB\-mbig\-endian\fR" 4
14045 .IX Item "-mbig-endian"
14046 .PD
14047 Generate code for a little-endian target.
14048 .IP "\fB\-m210\fR" 4
14049 .IX Item "-m210"
14050 .PD 0
14051 .IP "\fB\-m340\fR" 4
14052 .IX Item "-m340"
14053 .PD
14054 Generate code for the 210 processor.
14055 .IP "\fB\-mno\-lsim\fR" 4
14056 .IX Item "-mno-lsim"
14057 Assume that runtime support has been provided and so omit the
14058 simulator library (\fIlibsim.a)\fR from the linker command line.
14059 .IP "\fB\-mstack\-increment=\fR\fIsize\fR" 4
14060 .IX Item "-mstack-increment=size"
14061 Set the maximum amount for a single stack increment operation.  Large
14062 values can increase the speed of programs that contain functions
14063 that need a large amount of stack space, but they can also trigger a
14064 segmentation fault if the stack is extended too much.  The default
14065 value is 0x1000.
14066 .PP
14067 \fIMeP Options\fR
14068 .IX Subsection "MeP Options"
14069 .IP "\fB\-mabsdiff\fR" 4
14070 .IX Item "-mabsdiff"
14071 Enables the \f(CW\*(C`abs\*(C'\fR instruction, which is the absolute difference
14072 between two registers.
14073 .IP "\fB\-mall\-opts\fR" 4
14074 .IX Item "-mall-opts"
14075 Enables all the optional instructions \- average, multiply, divide, bit
14076 operations, leading zero, absolute difference, min/max, clip, and
14077 saturation.
14078 .IP "\fB\-maverage\fR" 4
14079 .IX Item "-maverage"
14080 Enables the \f(CW\*(C`ave\*(C'\fR instruction, which computes the average of two
14081 registers.
14082 .IP "\fB\-mbased=\fR\fIn\fR" 4
14083 .IX Item "-mbased=n"
14084 Variables of size \fIn\fR bytes or smaller will be placed in the
14085 \&\f(CW\*(C`.based\*(C'\fR section by default.  Based variables use the \f(CW$tp\fR
14086 register as a base register, and there is a 128\-byte limit to the
14087 \&\f(CW\*(C`.based\*(C'\fR section.
14088 .IP "\fB\-mbitops\fR" 4
14089 .IX Item "-mbitops"
14090 Enables the bit operation instructions \- bit test (\f(CW\*(C`btstm\*(C'\fR), set
14091 (\f(CW\*(C`bsetm\*(C'\fR), clear (\f(CW\*(C`bclrm\*(C'\fR), invert (\f(CW\*(C`bnotm\*(C'\fR), and
14092 test-and-set (\f(CW\*(C`tas\*(C'\fR).
14093 .IP "\fB\-mc=\fR\fIname\fR" 4
14094 .IX Item "-mc=name"
14095 Selects which section constant data will be placed in.  \fIname\fR may
14096 be \f(CW\*(C`tiny\*(C'\fR, \f(CW\*(C`near\*(C'\fR, or \f(CW\*(C`far\*(C'\fR.
14097 .IP "\fB\-mclip\fR" 4
14098 .IX Item "-mclip"
14099 Enables the \f(CW\*(C`clip\*(C'\fR instruction.  Note that \f(CW\*(C`\-mclip\*(C'\fR is not
14100 useful unless you also provide \f(CW\*(C`\-mminmax\*(C'\fR.
14101 .IP "\fB\-mconfig=\fR\fIname\fR" 4
14102 .IX Item "-mconfig=name"
14103 Selects one of the build-in core configurations.  Each MeP chip has
14104 one or more modules in it; each module has a core \s-1CPU\s0 and a variety of
14105 coprocessors, optional instructions, and peripherals.  The
14106 \&\f(CW\*(C`MeP\-Integrator\*(C'\fR tool, not part of \s-1GCC\s0, provides these
14107 configurations through this option; using this option is the same as
14108 using all the corresponding command-line options.  The default
14109 configuration is \f(CW\*(C`default\*(C'\fR.
14110 .IP "\fB\-mcop\fR" 4
14111 .IX Item "-mcop"
14112 Enables the coprocessor instructions.  By default, this is a 32\-bit
14113 coprocessor.  Note that the coprocessor is normally enabled via the
14114 \&\f(CW\*(C`\-mconfig=\*(C'\fR option.
14115 .IP "\fB\-mcop32\fR" 4
14116 .IX Item "-mcop32"
14117 Enables the 32\-bit coprocessor's instructions.
14118 .IP "\fB\-mcop64\fR" 4
14119 .IX Item "-mcop64"
14120 Enables the 64\-bit coprocessor's instructions.
14121 .IP "\fB\-mivc2\fR" 4
14122 .IX Item "-mivc2"
14123 Enables \s-1IVC2\s0 scheduling.  \s-1IVC2\s0 is a 64\-bit \s-1VLIW\s0 coprocessor.
14124 .IP "\fB\-mdc\fR" 4
14125 .IX Item "-mdc"
14126 Causes constant variables to be placed in the \f(CW\*(C`.near\*(C'\fR section.
14127 .IP "\fB\-mdiv\fR" 4
14128 .IX Item "-mdiv"
14129 Enables the \f(CW\*(C`div\*(C'\fR and \f(CW\*(C`divu\*(C'\fR instructions.
14130 .IP "\fB\-meb\fR" 4
14131 .IX Item "-meb"
14132 Generate big-endian code.
14133 .IP "\fB\-mel\fR" 4
14134 .IX Item "-mel"
14135 Generate little-endian code.
14136 .IP "\fB\-mio\-volatile\fR" 4
14137 .IX Item "-mio-volatile"
14138 Tells the compiler that any variable marked with the \f(CW\*(C`io\*(C'\fR
14139 attribute is to be considered volatile.
14140 .IP "\fB\-ml\fR" 4
14141 .IX Item "-ml"
14142 Causes variables to be assigned to the \f(CW\*(C`.far\*(C'\fR section by default.
14143 .IP "\fB\-mleadz\fR" 4
14144 .IX Item "-mleadz"
14145 Enables the \f(CW\*(C`leadz\*(C'\fR (leading zero) instruction.
14146 .IP "\fB\-mm\fR" 4
14147 .IX Item "-mm"
14148 Causes variables to be assigned to the \f(CW\*(C`.near\*(C'\fR section by default.
14149 .IP "\fB\-mminmax\fR" 4
14150 .IX Item "-mminmax"
14151 Enables the \f(CW\*(C`min\*(C'\fR and \f(CW\*(C`max\*(C'\fR instructions.
14152 .IP "\fB\-mmult\fR" 4
14153 .IX Item "-mmult"
14154 Enables the multiplication and multiply-accumulate instructions.
14155 .IP "\fB\-mno\-opts\fR" 4
14156 .IX Item "-mno-opts"
14157 Disables all the optional instructions enabled by \f(CW\*(C`\-mall\-opts\*(C'\fR.
14158 .IP "\fB\-mrepeat\fR" 4
14159 .IX Item "-mrepeat"
14160 Enables the \f(CW\*(C`repeat\*(C'\fR and \f(CW\*(C`erepeat\*(C'\fR instructions, used for
14161 low-overhead looping.
14162 .IP "\fB\-ms\fR" 4
14163 .IX Item "-ms"
14164 Causes all variables to default to the \f(CW\*(C`.tiny\*(C'\fR section.  Note
14165 that there is a 65536\-byte limit to this section.  Accesses to these
14166 variables use the \f(CW%gp\fR base register.
14167 .IP "\fB\-msatur\fR" 4
14168 .IX Item "-msatur"
14169 Enables the saturation instructions.  Note that the compiler does not
14170 currently generate these itself, but this option is included for
14171 compatibility with other tools, like \f(CW\*(C`as\*(C'\fR.
14172 .IP "\fB\-msdram\fR" 4
14173 .IX Item "-msdram"
14174 Link the SDRAM-based runtime instead of the default ROM-based runtime.
14175 .IP "\fB\-msim\fR" 4
14176 .IX Item "-msim"
14177 Link the simulator runtime libraries.
14178 .IP "\fB\-msimnovec\fR" 4
14179 .IX Item "-msimnovec"
14180 Link the simulator runtime libraries, excluding built-in support
14181 for reset and exception vectors and tables.
14182 .IP "\fB\-mtf\fR" 4
14183 .IX Item "-mtf"
14184 Causes all functions to default to the \f(CW\*(C`.far\*(C'\fR section.  Without
14185 this option, functions default to the \f(CW\*(C`.near\*(C'\fR section.
14186 .IP "\fB\-mtiny=\fR\fIn\fR" 4
14187 .IX Item "-mtiny=n"
14188 Variables that are \fIn\fR bytes or smaller will be allocated to the
14189 \&\f(CW\*(C`.tiny\*(C'\fR section.  These variables use the \f(CW$gp\fR base
14190 register.  The default for this option is 4, but note that there's a
14191 65536\-byte limit to the \f(CW\*(C`.tiny\*(C'\fR section.
14192 .PP
14193 \fIMicroBlaze Options\fR
14194 .IX Subsection "MicroBlaze Options"
14195 .IP "\fB\-msoft\-float\fR" 4
14196 .IX Item "-msoft-float"
14197 Use software emulation for floating point (default).
14198 .IP "\fB\-mhard\-float\fR" 4
14199 .IX Item "-mhard-float"
14200 Use hardware floating-point instructions.
14201 .IP "\fB\-mmemcpy\fR" 4
14202 .IX Item "-mmemcpy"
14203 Do not optimize block moves, use \f(CW\*(C`memcpy\*(C'\fR.
14204 .IP "\fB\-mno\-clearbss\fR" 4
14205 .IX Item "-mno-clearbss"
14206 This option is deprecated.  Use \fB\-fno\-zero\-initialized\-in\-bss\fR instead.
14207 .IP "\fB\-mcpu=\fR\fIcpu-type\fR" 4
14208 .IX Item "-mcpu=cpu-type"
14209 Use features of and schedule code for given \s-1CPU\s0.
14210 Supported values are in the format \fBv\fR\fIX\fR\fB.\fR\fI\s-1YY\s0\fR\fB.\fR\fIZ\fR,
14211 where \fIX\fR is a major version, \fI\s-1YY\s0\fR is the minor version, and
14212 \&\fIZ\fR is compatibility code.  Example values are \fBv3.00.a\fR,
14213 \&\fBv4.00.b\fR, \fBv5.00.a\fR, \fBv5.00.b\fR, \fBv5.00.b\fR, \fBv6.00.a\fR.
14214 .IP "\fB\-mxl\-soft\-mul\fR" 4
14215 .IX Item "-mxl-soft-mul"
14216 Use software multiply emulation (default).
14217 .IP "\fB\-mxl\-soft\-div\fR" 4
14218 .IX Item "-mxl-soft-div"
14219 Use software emulation for divides (default).
14220 .IP "\fB\-mxl\-barrel\-shift\fR" 4
14221 .IX Item "-mxl-barrel-shift"
14222 Use the hardware barrel shifter.
14223 .IP "\fB\-mxl\-pattern\-compare\fR" 4
14224 .IX Item "-mxl-pattern-compare"
14225 Use pattern compare instructions.
14226 .IP "\fB\-msmall\-divides\fR" 4
14227 .IX Item "-msmall-divides"
14228 Use table lookup optimization for small signed integer divisions.
14229 .IP "\fB\-mxl\-stack\-check\fR" 4
14230 .IX Item "-mxl-stack-check"
14231 This option is deprecated.  Use \-fstack\-check instead.
14232 .IP "\fB\-mxl\-gp\-opt\fR" 4
14233 .IX Item "-mxl-gp-opt"
14234 Use \s-1GP\s0 relative sdata/sbss sections.
14235 .IP "\fB\-mxl\-multiply\-high\fR" 4
14236 .IX Item "-mxl-multiply-high"
14237 Use multiply high instructions for high part of 32x32 multiply.
14238 .IP "\fB\-mxl\-float\-convert\fR" 4
14239 .IX Item "-mxl-float-convert"
14240 Use hardware floating-point conversion instructions.
14241 .IP "\fB\-mxl\-float\-sqrt\fR" 4
14242 .IX Item "-mxl-float-sqrt"
14243 Use hardware floating-point square root instruction.
14244 .IP "\fB\-mxl\-mode\-\fR\fIapp-model\fR" 4
14245 .IX Item "-mxl-mode-app-model"
14246 Select application model \fIapp-model\fR.  Valid models are
14247 .RS 4
14248 .IP "\fBexecutable\fR" 4
14249 .IX Item "executable"
14250 normal executable (default), uses startup code \fIcrt0.o\fR.
14251 .IP "\fBxmdstub\fR" 4
14252 .IX Item "xmdstub"
14253 for use with Xilinx Microprocessor Debugger (\s-1XMD\s0) based
14254 software intrusive debug agent called xmdstub. This uses startup file
14255 \&\fIcrt1.o\fR and sets the start address of the program to be 0x800.
14256 .IP "\fBbootstrap\fR" 4
14257 .IX Item "bootstrap"
14258 for applications that are loaded using a bootloader.
14259 This model uses startup file \fIcrt2.o\fR which does not contain a processor
14260 reset vector handler. This is suitable for transferring control on a
14261 processor reset to the bootloader rather than the application.
14262 .IP "\fBnovectors\fR" 4
14263 .IX Item "novectors"
14264 for applications that do not require any of the
14265 MicroBlaze vectors. This option may be useful for applications running
14266 within a monitoring application. This model uses \fIcrt3.o\fR as a startup file.
14267 .RE
14268 .RS 4
14269 .Sp
14270 Option \fB\-xl\-mode\-\fR\fIapp-model\fR is a deprecated alias for
14271 \&\fB\-mxl\-mode\-\fR\fIapp-model\fR.
14272 .RE
14273 .PP
14274 \fI\s-1MIPS\s0 Options\fR
14275 .IX Subsection "MIPS Options"
14276 .IP "\fB\-EB\fR" 4
14277 .IX Item "-EB"
14278 Generate big-endian code.
14279 .IP "\fB\-EL\fR" 4
14280 .IX Item "-EL"
14281 Generate little-endian code.  This is the default for \fBmips*el\-*\-*\fR
14282 configurations.
14283 .IP "\fB\-march=\fR\fIarch\fR" 4
14284 .IX Item "-march=arch"
14285 Generate code that will run on \fIarch\fR, which can be the name of a
14286 generic \s-1MIPS\s0 \s-1ISA\s0, or the name of a particular processor.
14287 The \s-1ISA\s0 names are:
14288 \&\fBmips1\fR, \fBmips2\fR, \fBmips3\fR, \fBmips4\fR,
14289 \&\fBmips32\fR, \fBmips32r2\fR, \fBmips64\fR and \fBmips64r2\fR.
14290 The processor names are:
14291 \&\fB4kc\fR, \fB4km\fR, \fB4kp\fR, \fB4ksc\fR,
14292 \&\fB4kec\fR, \fB4kem\fR, \fB4kep\fR, \fB4ksd\fR,
14293 \&\fB5kc\fR, \fB5kf\fR,
14294 \&\fB20kc\fR,
14295 \&\fB24kc\fR, \fB24kf2_1\fR, \fB24kf1_1\fR,
14296 \&\fB24kec\fR, \fB24kef2_1\fR, \fB24kef1_1\fR,
14297 \&\fB34kc\fR, \fB34kf2_1\fR, \fB34kf1_1\fR,
14298 \&\fB74kc\fR, \fB74kf2_1\fR, \fB74kf1_1\fR, \fB74kf3_2\fR,
14299 \&\fB1004kc\fR, \fB1004kf2_1\fR, \fB1004kf1_1\fR,
14300 \&\fBloongson2e\fR, \fBloongson2f\fR, \fBloongson3a\fR,
14301 \&\fBm4k\fR,
14302 \&\fBocteon\fR, \fBocteon+\fR, \fBocteon2\fR,
14303 \&\fBorion\fR,
14304 \&\fBr2000\fR, \fBr3000\fR, \fBr3900\fR, \fBr4000\fR, \fBr4400\fR,
14305 \&\fBr4600\fR, \fBr4650\fR, \fBr6000\fR, \fBr8000\fR,
14306 \&\fBrm7000\fR, \fBrm9000\fR,
14307 \&\fBr10000\fR, \fBr12000\fR, \fBr14000\fR, \fBr16000\fR,
14308 \&\fBsb1\fR,
14309 \&\fBsr71000\fR,
14310 \&\fBvr4100\fR, \fBvr4111\fR, \fBvr4120\fR, \fBvr4130\fR, \fBvr4300\fR,
14311 \&\fBvr5000\fR, \fBvr5400\fR, \fBvr5500\fR
14312 and \fBxlr\fR.
14313 The special value \fBfrom-abi\fR selects the
14314 most compatible architecture for the selected \s-1ABI\s0 (that is,
14315 \&\fBmips1\fR for 32\-bit ABIs and \fBmips3\fR for 64\-bit ABIs).
14316 .Sp
14317 Native Linux/GNU and \s-1IRIX\s0 toolchains also support the value \fBnative\fR,
14318 which selects the best architecture option for the host processor.
14319 \&\fB\-march=native\fR has no effect if \s-1GCC\s0 does not recognize
14320 the processor.
14321 .Sp
14322 In processor names, a final \fB000\fR can be abbreviated as \fBk\fR
14323 (for example, \fB\-march=r2k\fR).  Prefixes are optional, and
14324 \&\fBvr\fR may be written \fBr\fR.
14325 .Sp
14326 Names of the form \fIn\fR\fBf2_1\fR refer to processors with
14327 FPUs clocked at half the rate of the core, names of the form
14328 \&\fIn\fR\fBf1_1\fR refer to processors with FPUs clocked at the same
14329 rate as the core, and names of the form \fIn\fR\fBf3_2\fR refer to
14330 processors with FPUs clocked a ratio of 3:2 with respect to the core.
14331 For compatibility reasons, \fIn\fR\fBf\fR is accepted as a synonym
14332 for \fIn\fR\fBf2_1\fR while \fIn\fR\fBx\fR and \fIb\fR\fBfx\fR are
14333 accepted as synonyms for \fIn\fR\fBf1_1\fR.
14334 .Sp
14335 \&\s-1GCC\s0 defines two macros based on the value of this option.  The first
14336 is \fB_MIPS_ARCH\fR, which gives the name of target architecture, as
14337 a string.  The second has the form \fB_MIPS_ARCH_\fR\fIfoo\fR,
14338 where \fIfoo\fR is the capitalized value of \fB_MIPS_ARCH\fR.
14339 For example, \fB\-march=r2000\fR will set \fB_MIPS_ARCH\fR
14340 to \fB\*(L"r2000\*(R"\fR and define the macro \fB_MIPS_ARCH_R2000\fR.
14341 .Sp
14342 Note that the \fB_MIPS_ARCH\fR macro uses the processor names given
14343 above.  In other words, it will have the full prefix and will not
14344 abbreviate \fB000\fR as \fBk\fR.  In the case of \fBfrom-abi\fR,
14345 the macro names the resolved architecture (either \fB\*(L"mips1\*(R"\fR or
14346 \&\fB\*(L"mips3\*(R"\fR).  It names the default architecture when no
14347 \&\fB\-march\fR option is given.
14348 .IP "\fB\-mtune=\fR\fIarch\fR" 4
14349 .IX Item "-mtune=arch"
14350 Optimize for \fIarch\fR.  Among other things, this option controls
14351 the way instructions are scheduled, and the perceived cost of arithmetic
14352 operations.  The list of \fIarch\fR values is the same as for
14353 \&\fB\-march\fR.
14354 .Sp
14355 When this option is not used, \s-1GCC\s0 will optimize for the processor
14356 specified by \fB\-march\fR.  By using \fB\-march\fR and
14357 \&\fB\-mtune\fR together, it is possible to generate code that will
14358 run on a family of processors, but optimize the code for one
14359 particular member of that family.
14360 .Sp
14361 \&\fB\-mtune\fR defines the macros \fB_MIPS_TUNE\fR and
14362 \&\fB_MIPS_TUNE_\fR\fIfoo\fR, which work in the same way as the
14363 \&\fB\-march\fR ones described above.
14364 .IP "\fB\-mips1\fR" 4
14365 .IX Item "-mips1"
14366 Equivalent to \fB\-march=mips1\fR.
14367 .IP "\fB\-mips2\fR" 4
14368 .IX Item "-mips2"
14369 Equivalent to \fB\-march=mips2\fR.
14370 .IP "\fB\-mips3\fR" 4
14371 .IX Item "-mips3"
14372 Equivalent to \fB\-march=mips3\fR.
14373 .IP "\fB\-mips4\fR" 4
14374 .IX Item "-mips4"
14375 Equivalent to \fB\-march=mips4\fR.
14376 .IP "\fB\-mips32\fR" 4
14377 .IX Item "-mips32"
14378 Equivalent to \fB\-march=mips32\fR.
14379 .IP "\fB\-mips32r2\fR" 4
14380 .IX Item "-mips32r2"
14381 Equivalent to \fB\-march=mips32r2\fR.
14382 .IP "\fB\-mips64\fR" 4
14383 .IX Item "-mips64"
14384 Equivalent to \fB\-march=mips64\fR.
14385 .IP "\fB\-mips64r2\fR" 4
14386 .IX Item "-mips64r2"
14387 Equivalent to \fB\-march=mips64r2\fR.
14388 .IP "\fB\-mips16\fR" 4
14389 .IX Item "-mips16"
14390 .PD 0
14391 .IP "\fB\-mno\-mips16\fR" 4
14392 .IX Item "-mno-mips16"
14393 .PD
14394 Generate (do not generate) \s-1MIPS16\s0 code.  If \s-1GCC\s0 is targetting a
14395 \&\s-1MIPS32\s0 or \s-1MIPS64\s0 architecture, it will make use of the MIPS16e \s-1ASE\s0.
14396 .Sp
14397 \&\s-1MIPS16\s0 code generation can also be controlled on a per-function basis
14398 by means of \f(CW\*(C`mips16\*(C'\fR and \f(CW\*(C`nomips16\*(C'\fR attributes.
14399 .IP "\fB\-mflip\-mips16\fR" 4
14400 .IX Item "-mflip-mips16"
14401 Generate \s-1MIPS16\s0 code on alternating functions.  This option is provided
14402 for regression testing of mixed MIPS16/non\-MIPS16 code generation, and is
14403 not intended for ordinary use in compiling user code.
14404 .IP "\fB\-minterlink\-mips16\fR" 4
14405 .IX Item "-minterlink-mips16"
14406 .PD 0
14407 .IP "\fB\-mno\-interlink\-mips16\fR" 4
14408 .IX Item "-mno-interlink-mips16"
14409 .PD
14410 Require (do not require) that non\-MIPS16 code be link-compatible with
14411 \&\s-1MIPS16\s0 code.
14412 .Sp
14413 For example, non\-MIPS16 code cannot jump directly to \s-1MIPS16\s0 code;
14414 it must either use a call or an indirect jump.  \fB\-minterlink\-mips16\fR
14415 therefore disables direct jumps unless \s-1GCC\s0 knows that the target of the
14416 jump is not \s-1MIPS16\s0.
14417 .IP "\fB\-mabi=32\fR" 4
14418 .IX Item "-mabi=32"
14419 .PD 0
14420 .IP "\fB\-mabi=o64\fR" 4
14421 .IX Item "-mabi=o64"
14422 .IP "\fB\-mabi=n32\fR" 4
14423 .IX Item "-mabi=n32"
14424 .IP "\fB\-mabi=64\fR" 4
14425 .IX Item "-mabi=64"
14426 .IP "\fB\-mabi=eabi\fR" 4
14427 .IX Item "-mabi=eabi"
14428 .PD
14429 Generate code for the given \s-1ABI\s0.
14430 .Sp
14431 Note that the \s-1EABI\s0 has a 32\-bit and a 64\-bit variant.  \s-1GCC\s0 normally
14432 generates 64\-bit code when you select a 64\-bit architecture, but you
14433 can use \fB\-mgp32\fR to get 32\-bit code instead.
14434 .Sp
14435 For information about the O64 \s-1ABI\s0, see
14436 <\fBhttp://gcc.gnu.org/projects/mipso64\-abi.html\fR>.
14437 .Sp
14438 \&\s-1GCC\s0 supports a variant of the o32 \s-1ABI\s0 in which floating-point registers
14439 are 64 rather than 32 bits wide.  You can select this combination with
14440 \&\fB\-mabi=32\fR \fB\-mfp64\fR.  This \s-1ABI\s0 relies on the \fBmthc1\fR
14441 and \fBmfhc1\fR instructions and is therefore only supported for
14442 \&\s-1MIPS32R2\s0 processors.
14443 .Sp
14444 The register assignments for arguments and return values remain the
14445 same, but each scalar value is passed in a single 64\-bit register
14446 rather than a pair of 32\-bit registers.  For example, scalar
14447 floating-point values are returned in \fB\f(CB$f0\fB\fR only, not a
14448 \&\fB\f(CB$f0\fB\fR/\fB\f(CB$f1\fB\fR pair.  The set of call-saved registers also
14449 remains the same, but all 64 bits are saved.
14450 .IP "\fB\-mabicalls\fR" 4
14451 .IX Item "-mabicalls"
14452 .PD 0
14453 .IP "\fB\-mno\-abicalls\fR" 4
14454 .IX Item "-mno-abicalls"
14455 .PD
14456 Generate (do not generate) code that is suitable for SVR4\-style
14457 dynamic objects.  \fB\-mabicalls\fR is the default for SVR4\-based
14458 systems.
14459 .IP "\fB\-mshared\fR" 4
14460 .IX Item "-mshared"
14461 .PD 0
14462 .IP "\fB\-mno\-shared\fR" 4
14463 .IX Item "-mno-shared"
14464 .PD
14465 Generate (do not generate) code that is fully position-independent,
14466 and that can therefore be linked into shared libraries.  This option
14467 only affects \fB\-mabicalls\fR.
14468 .Sp
14469 All \fB\-mabicalls\fR code has traditionally been position-independent,
14470 regardless of options like \fB\-fPIC\fR and \fB\-fpic\fR.  However,
14471 as an extension, the \s-1GNU\s0 toolchain allows executables to use absolute
14472 accesses for locally-binding symbols.  It can also use shorter \s-1GP\s0
14473 initialization sequences and generate direct calls to locally-defined
14474 functions.  This mode is selected by \fB\-mno\-shared\fR.
14475 .Sp
14476 \&\fB\-mno\-shared\fR depends on binutils 2.16 or higher and generates
14477 objects that can only be linked by the \s-1GNU\s0 linker.  However, the option
14478 does not affect the \s-1ABI\s0 of the final executable; it only affects the \s-1ABI\s0
14479 of relocatable objects.  Using \fB\-mno\-shared\fR will generally make
14480 executables both smaller and quicker.
14481 .Sp
14482 \&\fB\-mshared\fR is the default.
14483 .IP "\fB\-mplt\fR" 4
14484 .IX Item "-mplt"
14485 .PD 0
14486 .IP "\fB\-mno\-plt\fR" 4
14487 .IX Item "-mno-plt"
14488 .PD
14489 Assume (do not assume) that the static and dynamic linkers
14490 support PLTs and copy relocations.  This option only affects
14491 \&\fB\-mno\-shared \-mabicalls\fR.  For the n64 \s-1ABI\s0, this option
14492 has no effect without \fB\-msym32\fR.
14493 .Sp
14494 You can make \fB\-mplt\fR the default by configuring
14495 \&\s-1GCC\s0 with \fB\-\-with\-mips\-plt\fR.  The default is
14496 \&\fB\-mno\-plt\fR otherwise.
14497 .IP "\fB\-mxgot\fR" 4
14498 .IX Item "-mxgot"
14499 .PD 0
14500 .IP "\fB\-mno\-xgot\fR" 4
14501 .IX Item "-mno-xgot"
14502 .PD
14503 Lift (do not lift) the usual restrictions on the size of the global
14504 offset table.
14505 .Sp
14506 \&\s-1GCC\s0 normally uses a single instruction to load values from the \s-1GOT\s0.
14507 While this is relatively efficient, it will only work if the \s-1GOT\s0
14508 is smaller than about 64k.  Anything larger will cause the linker
14509 to report an error such as:
14510 .Sp
14511 .Vb 1
14512 \&        relocation truncated to fit: R_MIPS_GOT16 foobar
14513 .Ve
14514 .Sp
14515 If this happens, you should recompile your code with \fB\-mxgot\fR.
14516 It should then work with very large GOTs, although it will also be
14517 less efficient, since it will take three instructions to fetch the
14518 value of a global symbol.
14519 .Sp
14520 Note that some linkers can create multiple GOTs.  If you have such a
14521 linker, you should only need to use \fB\-mxgot\fR when a single object
14522 file accesses more than 64k's worth of \s-1GOT\s0 entries.  Very few do.
14523 .Sp
14524 These options have no effect unless \s-1GCC\s0 is generating position
14525 independent code.
14526 .IP "\fB\-mgp32\fR" 4
14527 .IX Item "-mgp32"
14528 Assume that general-purpose registers are 32 bits wide.
14529 .IP "\fB\-mgp64\fR" 4
14530 .IX Item "-mgp64"
14531 Assume that general-purpose registers are 64 bits wide.
14532 .IP "\fB\-mfp32\fR" 4
14533 .IX Item "-mfp32"
14534 Assume that floating-point registers are 32 bits wide.
14535 .IP "\fB\-mfp64\fR" 4
14536 .IX Item "-mfp64"
14537 Assume that floating-point registers are 64 bits wide.
14538 .IP "\fB\-mhard\-float\fR" 4
14539 .IX Item "-mhard-float"
14540 Use floating-point coprocessor instructions.
14541 .IP "\fB\-msoft\-float\fR" 4
14542 .IX Item "-msoft-float"
14543 Do not use floating-point coprocessor instructions.  Implement
14544 floating-point calculations using library calls instead.
14545 .IP "\fB\-msingle\-float\fR" 4
14546 .IX Item "-msingle-float"
14547 Assume that the floating-point coprocessor only supports single-precision
14548 operations.
14549 .IP "\fB\-mdouble\-float\fR" 4
14550 .IX Item "-mdouble-float"
14551 Assume that the floating-point coprocessor supports double-precision
14552 operations.  This is the default.
14553 .IP "\fB\-mllsc\fR" 4
14554 .IX Item "-mllsc"
14555 .PD 0
14556 .IP "\fB\-mno\-llsc\fR" 4
14557 .IX Item "-mno-llsc"
14558 .PD
14559 Use (do not use) \fBll\fR, \fBsc\fR, and \fBsync\fR instructions to
14560 implement atomic memory built-in functions.  When neither option is
14561 specified, \s-1GCC\s0 will use the instructions if the target architecture
14562 supports them.
14563 .Sp
14564 \&\fB\-mllsc\fR is useful if the runtime environment can emulate the
14565 instructions and \fB\-mno\-llsc\fR can be useful when compiling for
14566 nonstandard ISAs.  You can make either option the default by
14567 configuring \s-1GCC\s0 with \fB\-\-with\-llsc\fR and \fB\-\-without\-llsc\fR
14568 respectively.  \fB\-\-with\-llsc\fR is the default for some
14569 configurations; see the installation documentation for details.
14570 .IP "\fB\-mdsp\fR" 4
14571 .IX Item "-mdsp"
14572 .PD 0
14573 .IP "\fB\-mno\-dsp\fR" 4
14574 .IX Item "-mno-dsp"
14575 .PD
14576 Use (do not use) revision 1 of the \s-1MIPS\s0 \s-1DSP\s0 \s-1ASE\s0.
14577   This option defines the
14578 preprocessor macro \fB_\|_mips_dsp\fR.  It also defines
14579 \&\fB_\|_mips_dsp_rev\fR to 1.
14580 .IP "\fB\-mdspr2\fR" 4
14581 .IX Item "-mdspr2"
14582 .PD 0
14583 .IP "\fB\-mno\-dspr2\fR" 4
14584 .IX Item "-mno-dspr2"
14585 .PD
14586 Use (do not use) revision 2 of the \s-1MIPS\s0 \s-1DSP\s0 \s-1ASE\s0.
14587   This option defines the
14588 preprocessor macros \fB_\|_mips_dsp\fR and \fB_\|_mips_dspr2\fR.
14589 It also defines \fB_\|_mips_dsp_rev\fR to 2.
14590 .IP "\fB\-msmartmips\fR" 4
14591 .IX Item "-msmartmips"
14592 .PD 0
14593 .IP "\fB\-mno\-smartmips\fR" 4
14594 .IX Item "-mno-smartmips"
14595 .PD
14596 Use (do not use) the \s-1MIPS\s0 SmartMIPS \s-1ASE\s0.
14597 .IP "\fB\-mpaired\-single\fR" 4
14598 .IX Item "-mpaired-single"
14599 .PD 0
14600 .IP "\fB\-mno\-paired\-single\fR" 4
14601 .IX Item "-mno-paired-single"
14602 .PD
14603 Use (do not use) paired-single floating-point instructions.
14604   This option requires
14605 hardware floating-point support to be enabled.
14606 .IP "\fB\-mdmx\fR" 4
14607 .IX Item "-mdmx"
14608 .PD 0
14609 .IP "\fB\-mno\-mdmx\fR" 4
14610 .IX Item "-mno-mdmx"
14611 .PD
14612 Use (do not use) \s-1MIPS\s0 Digital Media Extension instructions.
14613 This option can only be used when generating 64\-bit code and requires
14614 hardware floating-point support to be enabled.
14615 .IP "\fB\-mips3d\fR" 4
14616 .IX Item "-mips3d"
14617 .PD 0
14618 .IP "\fB\-mno\-mips3d\fR" 4
14619 .IX Item "-mno-mips3d"
14620 .PD
14621 Use (do not use) the \s-1MIPS\-3D\s0 \s-1ASE\s0.  
14622 The option \fB\-mips3d\fR implies \fB\-mpaired\-single\fR.
14623 .IP "\fB\-mmt\fR" 4
14624 .IX Item "-mmt"
14625 .PD 0
14626 .IP "\fB\-mno\-mt\fR" 4
14627 .IX Item "-mno-mt"
14628 .PD
14629 Use (do not use) \s-1MT\s0 Multithreading instructions.
14630 .IP "\fB\-mlong64\fR" 4
14631 .IX Item "-mlong64"
14632 Force \f(CW\*(C`long\*(C'\fR types to be 64 bits wide.  See \fB\-mlong32\fR for
14633 an explanation of the default and the way that the pointer size is
14634 determined.
14635 .IP "\fB\-mlong32\fR" 4
14636 .IX Item "-mlong32"
14637 Force \f(CW\*(C`long\*(C'\fR, \f(CW\*(C`int\*(C'\fR, and pointer types to be 32 bits wide.
14638 .Sp
14639 The default size of \f(CW\*(C`int\*(C'\fRs, \f(CW\*(C`long\*(C'\fRs and pointers depends on
14640 the \s-1ABI\s0.  All the supported ABIs use 32\-bit \f(CW\*(C`int\*(C'\fRs.  The n64 \s-1ABI\s0
14641 uses 64\-bit \f(CW\*(C`long\*(C'\fRs, as does the 64\-bit \s-1EABI\s0; the others use
14642 32\-bit \f(CW\*(C`long\*(C'\fRs.  Pointers are the same size as \f(CW\*(C`long\*(C'\fRs,
14643 or the same size as integer registers, whichever is smaller.
14644 .IP "\fB\-msym32\fR" 4
14645 .IX Item "-msym32"
14646 .PD 0
14647 .IP "\fB\-mno\-sym32\fR" 4
14648 .IX Item "-mno-sym32"
14649 .PD
14650 Assume (do not assume) that all symbols have 32\-bit values, regardless
14651 of the selected \s-1ABI\s0.  This option is useful in combination with
14652 \&\fB\-mabi=64\fR and \fB\-mno\-abicalls\fR because it allows \s-1GCC\s0
14653 to generate shorter and faster references to symbolic addresses.
14654 .IP "\fB\-G\fR \fInum\fR" 4
14655 .IX Item "-G num"
14656 Put definitions of externally-visible data in a small data section
14657 if that data is no bigger than \fInum\fR bytes.  \s-1GCC\s0 can then access
14658 the data more efficiently; see \fB\-mgpopt\fR for details.
14659 .Sp
14660 The default \fB\-G\fR option depends on the configuration.
14661 .IP "\fB\-mlocal\-sdata\fR" 4
14662 .IX Item "-mlocal-sdata"
14663 .PD 0
14664 .IP "\fB\-mno\-local\-sdata\fR" 4
14665 .IX Item "-mno-local-sdata"
14666 .PD
14667 Extend (do not extend) the \fB\-G\fR behavior to local data too,
14668 such as to static variables in C.  \fB\-mlocal\-sdata\fR is the
14669 default for all configurations.
14670 .Sp
14671 If the linker complains that an application is using too much small data,
14672 you might want to try rebuilding the less performance-critical parts with
14673 \&\fB\-mno\-local\-sdata\fR.  You might also want to build large
14674 libraries with \fB\-mno\-local\-sdata\fR, so that the libraries leave
14675 more room for the main program.
14676 .IP "\fB\-mextern\-sdata\fR" 4
14677 .IX Item "-mextern-sdata"
14678 .PD 0
14679 .IP "\fB\-mno\-extern\-sdata\fR" 4
14680 .IX Item "-mno-extern-sdata"
14681 .PD
14682 Assume (do not assume) that externally-defined data will be in
14683 a small data section if that data is within the \fB\-G\fR limit.
14684 \&\fB\-mextern\-sdata\fR is the default for all configurations.
14685 .Sp
14686 If you compile a module \fIMod\fR with \fB\-mextern\-sdata\fR \fB\-G\fR
14687 \&\fInum\fR \fB\-mgpopt\fR, and \fIMod\fR references a variable \fIVar\fR
14688 that is no bigger than \fInum\fR bytes, you must make sure that \fIVar\fR
14689 is placed in a small data section.  If \fIVar\fR is defined by another
14690 module, you must either compile that module with a high-enough
14691 \&\fB\-G\fR setting or attach a \f(CW\*(C`section\*(C'\fR attribute to \fIVar\fR's
14692 definition.  If \fIVar\fR is common, you must link the application
14693 with a high-enough \fB\-G\fR setting.
14694 .Sp
14695 The easiest way of satisfying these restrictions is to compile
14696 and link every module with the same \fB\-G\fR option.  However,
14697 you may wish to build a library that supports several different
14698 small data limits.  You can do this by compiling the library with
14699 the highest supported \fB\-G\fR setting and additionally using
14700 \&\fB\-mno\-extern\-sdata\fR to stop the library from making assumptions
14701 about externally-defined data.
14702 .IP "\fB\-mgpopt\fR" 4
14703 .IX Item "-mgpopt"
14704 .PD 0
14705 .IP "\fB\-mno\-gpopt\fR" 4
14706 .IX Item "-mno-gpopt"
14707 .PD
14708 Use (do not use) GP-relative accesses for symbols that are known to be
14709 in a small data section; see \fB\-G\fR, \fB\-mlocal\-sdata\fR and
14710 \&\fB\-mextern\-sdata\fR.  \fB\-mgpopt\fR is the default for all
14711 configurations.
14712 .Sp
14713 \&\fB\-mno\-gpopt\fR is useful for cases where the \f(CW$gp\fR register
14714 might not hold the value of \f(CW\*(C`_gp\*(C'\fR.  For example, if the code is
14715 part of a library that might be used in a boot monitor, programs that
14716 call boot monitor routines will pass an unknown value in \f(CW$gp\fR.
14717 (In such situations, the boot monitor itself would usually be compiled
14718 with \fB\-G0\fR.)
14719 .Sp
14720 \&\fB\-mno\-gpopt\fR implies \fB\-mno\-local\-sdata\fR and
14721 \&\fB\-mno\-extern\-sdata\fR.
14722 .IP "\fB\-membedded\-data\fR" 4
14723 .IX Item "-membedded-data"
14724 .PD 0
14725 .IP "\fB\-mno\-embedded\-data\fR" 4
14726 .IX Item "-mno-embedded-data"
14727 .PD
14728 Allocate variables to the read-only data section first if possible, then
14729 next in the small data section if possible, otherwise in data.  This gives
14730 slightly slower code than the default, but reduces the amount of \s-1RAM\s0 required
14731 when executing, and thus may be preferred for some embedded systems.
14732 .IP "\fB\-muninit\-const\-in\-rodata\fR" 4
14733 .IX Item "-muninit-const-in-rodata"
14734 .PD 0
14735 .IP "\fB\-mno\-uninit\-const\-in\-rodata\fR" 4
14736 .IX Item "-mno-uninit-const-in-rodata"
14737 .PD
14738 Put uninitialized \f(CW\*(C`const\*(C'\fR variables in the read-only data section.
14739 This option is only meaningful in conjunction with \fB\-membedded\-data\fR.
14740 .IP "\fB\-mcode\-readable=\fR\fIsetting\fR" 4
14741 .IX Item "-mcode-readable=setting"
14742 Specify whether \s-1GCC\s0 may generate code that reads from executable sections.
14743 There are three possible settings:
14744 .RS 4
14745 .IP "\fB\-mcode\-readable=yes\fR" 4
14746 .IX Item "-mcode-readable=yes"
14747 Instructions may freely access executable sections.  This is the
14748 default setting.
14749 .IP "\fB\-mcode\-readable=pcrel\fR" 4
14750 .IX Item "-mcode-readable=pcrel"
14751 \&\s-1MIPS16\s0 PC-relative load instructions can access executable sections,
14752 but other instructions must not do so.  This option is useful on 4KSc
14753 and 4KSd processors when the code TLBs have the Read Inhibit bit set.
14754 It is also useful on processors that can be configured to have a dual
14755 instruction/data \s-1SRAM\s0 interface and that, like the M4K, automatically
14756 redirect PC-relative loads to the instruction \s-1RAM\s0.
14757 .IP "\fB\-mcode\-readable=no\fR" 4
14758 .IX Item "-mcode-readable=no"
14759 Instructions must not access executable sections.  This option can be
14760 useful on targets that are configured to have a dual instruction/data
14761 \&\s-1SRAM\s0 interface but that (unlike the M4K) do not automatically redirect
14762 PC-relative loads to the instruction \s-1RAM\s0.
14763 .RE
14764 .RS 4
14765 .RE
14766 .IP "\fB\-msplit\-addresses\fR" 4
14767 .IX Item "-msplit-addresses"
14768 .PD 0
14769 .IP "\fB\-mno\-split\-addresses\fR" 4
14770 .IX Item "-mno-split-addresses"
14771 .PD
14772 Enable (disable) use of the \f(CW\*(C`%hi()\*(C'\fR and \f(CW\*(C`%lo()\*(C'\fR assembler
14773 relocation operators.  This option has been superseded by
14774 \&\fB\-mexplicit\-relocs\fR but is retained for backwards compatibility.
14775 .IP "\fB\-mexplicit\-relocs\fR" 4
14776 .IX Item "-mexplicit-relocs"
14777 .PD 0
14778 .IP "\fB\-mno\-explicit\-relocs\fR" 4
14779 .IX Item "-mno-explicit-relocs"
14780 .PD
14781 Use (do not use) assembler relocation operators when dealing with symbolic
14782 addresses.  The alternative, selected by \fB\-mno\-explicit\-relocs\fR,
14783 is to use assembler macros instead.
14784 .Sp
14785 \&\fB\-mexplicit\-relocs\fR is the default if \s-1GCC\s0 was configured
14786 to use an assembler that supports relocation operators.
14787 .IP "\fB\-mcheck\-zero\-division\fR" 4
14788 .IX Item "-mcheck-zero-division"
14789 .PD 0
14790 .IP "\fB\-mno\-check\-zero\-division\fR" 4
14791 .IX Item "-mno-check-zero-division"
14792 .PD
14793 Trap (do not trap) on integer division by zero.
14794 .Sp
14795 The default is \fB\-mcheck\-zero\-division\fR.
14796 .IP "\fB\-mdivide\-traps\fR" 4
14797 .IX Item "-mdivide-traps"
14798 .PD 0
14799 .IP "\fB\-mdivide\-breaks\fR" 4
14800 .IX Item "-mdivide-breaks"
14801 .PD
14802 \&\s-1MIPS\s0 systems check for division by zero by generating either a
14803 conditional trap or a break instruction.  Using traps results in
14804 smaller code, but is only supported on \s-1MIPS\s0 \s-1II\s0 and later.  Also, some
14805 versions of the Linux kernel have a bug that prevents trap from
14806 generating the proper signal (\f(CW\*(C`SIGFPE\*(C'\fR).  Use \fB\-mdivide\-traps\fR to
14807 allow conditional traps on architectures that support them and
14808 \&\fB\-mdivide\-breaks\fR to force the use of breaks.
14809 .Sp
14810 The default is usually \fB\-mdivide\-traps\fR, but this can be
14811 overridden at configure time using \fB\-\-with\-divide=breaks\fR.
14812 Divide-by-zero checks can be completely disabled using
14813 \&\fB\-mno\-check\-zero\-division\fR.
14814 .IP "\fB\-mmemcpy\fR" 4
14815 .IX Item "-mmemcpy"
14816 .PD 0
14817 .IP "\fB\-mno\-memcpy\fR" 4
14818 .IX Item "-mno-memcpy"
14819 .PD
14820 Force (do not force) the use of \f(CW\*(C`memcpy()\*(C'\fR for non-trivial block
14821 moves.  The default is \fB\-mno\-memcpy\fR, which allows \s-1GCC\s0 to inline
14822 most constant-sized copies.
14823 .IP "\fB\-mlong\-calls\fR" 4
14824 .IX Item "-mlong-calls"
14825 .PD 0
14826 .IP "\fB\-mno\-long\-calls\fR" 4
14827 .IX Item "-mno-long-calls"
14828 .PD
14829 Disable (do not disable) use of the \f(CW\*(C`jal\*(C'\fR instruction.  Calling
14830 functions using \f(CW\*(C`jal\*(C'\fR is more efficient but requires the caller
14831 and callee to be in the same 256 megabyte segment.
14832 .Sp
14833 This option has no effect on abicalls code.  The default is
14834 \&\fB\-mno\-long\-calls\fR.
14835 .IP "\fB\-mmad\fR" 4
14836 .IX Item "-mmad"
14837 .PD 0
14838 .IP "\fB\-mno\-mad\fR" 4
14839 .IX Item "-mno-mad"
14840 .PD
14841 Enable (disable) use of the \f(CW\*(C`mad\*(C'\fR, \f(CW\*(C`madu\*(C'\fR and \f(CW\*(C`mul\*(C'\fR
14842 instructions, as provided by the R4650 \s-1ISA\s0.
14843 .IP "\fB\-mfused\-madd\fR" 4
14844 .IX Item "-mfused-madd"
14845 .PD 0
14846 .IP "\fB\-mno\-fused\-madd\fR" 4
14847 .IX Item "-mno-fused-madd"
14848 .PD
14849 Enable (disable) use of the floating-point multiply-accumulate
14850 instructions, when they are available.  The default is
14851 \&\fB\-mfused\-madd\fR.
14852 .Sp
14853 When multiply-accumulate instructions are used, the intermediate
14854 product is calculated to infinite precision and is not subject to
14855 the \s-1FCSR\s0 Flush to Zero bit.  This may be undesirable in some
14856 circumstances.
14857 .IP "\fB\-nocpp\fR" 4
14858 .IX Item "-nocpp"
14859 Tell the \s-1MIPS\s0 assembler to not run its preprocessor over user
14860 assembler files (with a \fB.s\fR suffix) when assembling them.
14861 .IP "\fB\-mfix\-24k\fR" 4
14862 .IX Item "-mfix-24k"
14863 .PD 0
14864 .IP "\fB\-mno\-fix\-24k\fR" 4
14865 .IX Item "-mno-fix-24k"
14866 .PD
14867 Work around the 24K E48 (lost data on stores during refill) errata.
14868 The workarounds are implemented by the assembler rather than by \s-1GCC\s0.
14869 .IP "\fB\-mfix\-r4000\fR" 4
14870 .IX Item "-mfix-r4000"
14871 .PD 0
14872 .IP "\fB\-mno\-fix\-r4000\fR" 4
14873 .IX Item "-mno-fix-r4000"
14874 .PD
14875 Work around certain R4000 \s-1CPU\s0 errata:
14876 .RS 4
14877 .IP "\-" 4
14878 A double-word or a variable shift may give an incorrect result if executed
14879 immediately after starting an integer division.
14880 .IP "\-" 4
14881 A double-word or a variable shift may give an incorrect result if executed
14882 while an integer multiplication is in progress.
14883 .IP "\-" 4
14884 An integer division may give an incorrect result if started in a delay slot
14885 of a taken branch or a jump.
14886 .RE
14887 .RS 4
14888 .RE
14889 .IP "\fB\-mfix\-r4400\fR" 4
14890 .IX Item "-mfix-r4400"
14891 .PD 0
14892 .IP "\fB\-mno\-fix\-r4400\fR" 4
14893 .IX Item "-mno-fix-r4400"
14894 .PD
14895 Work around certain R4400 \s-1CPU\s0 errata:
14896 .RS 4
14897 .IP "\-" 4
14898 A double-word or a variable shift may give an incorrect result if executed
14899 immediately after starting an integer division.
14900 .RE
14901 .RS 4
14902 .RE
14903 .IP "\fB\-mfix\-r10000\fR" 4
14904 .IX Item "-mfix-r10000"
14905 .PD 0
14906 .IP "\fB\-mno\-fix\-r10000\fR" 4
14907 .IX Item "-mno-fix-r10000"
14908 .PD
14909 Work around certain R10000 errata:
14910 .RS 4
14911 .IP "\-" 4
14912 \&\f(CW\*(C`ll\*(C'\fR/\f(CW\*(C`sc\*(C'\fR sequences may not behave atomically on revisions
14913 prior to 3.0.  They may deadlock on revisions 2.6 and earlier.
14914 .RE
14915 .RS 4
14916 .Sp
14917 This option can only be used if the target architecture supports
14918 branch-likely instructions.  \fB\-mfix\-r10000\fR is the default when
14919 \&\fB\-march=r10000\fR is used; \fB\-mno\-fix\-r10000\fR is the default
14920 otherwise.
14921 .RE
14922 .IP "\fB\-mfix\-vr4120\fR" 4
14923 .IX Item "-mfix-vr4120"
14924 .PD 0
14925 .IP "\fB\-mno\-fix\-vr4120\fR" 4
14926 .IX Item "-mno-fix-vr4120"
14927 .PD
14928 Work around certain \s-1VR4120\s0 errata:
14929 .RS 4
14930 .IP "\-" 4
14931 \&\f(CW\*(C`dmultu\*(C'\fR does not always produce the correct result.
14932 .IP "\-" 4
14933 \&\f(CW\*(C`div\*(C'\fR and \f(CW\*(C`ddiv\*(C'\fR do not always produce the correct result if one
14934 of the operands is negative.
14935 .RE
14936 .RS 4
14937 .Sp
14938 The workarounds for the division errata rely on special functions in
14939 \&\fIlibgcc.a\fR.  At present, these functions are only provided by
14940 the \f(CW\*(C`mips64vr*\-elf\*(C'\fR configurations.
14941 .Sp
14942 Other \s-1VR4120\s0 errata require a nop to be inserted between certain pairs of
14943 instructions.  These errata are handled by the assembler, not by \s-1GCC\s0 itself.
14944 .RE
14945 .IP "\fB\-mfix\-vr4130\fR" 4
14946 .IX Item "-mfix-vr4130"
14947 Work around the \s-1VR4130\s0 \f(CW\*(C`mflo\*(C'\fR/\f(CW\*(C`mfhi\*(C'\fR errata.  The
14948 workarounds are implemented by the assembler rather than by \s-1GCC\s0,
14949 although \s-1GCC\s0 will avoid using \f(CW\*(C`mflo\*(C'\fR and \f(CW\*(C`mfhi\*(C'\fR if the
14950 \&\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
14951 instructions are available instead.
14952 .IP "\fB\-mfix\-sb1\fR" 4
14953 .IX Item "-mfix-sb1"
14954 .PD 0
14955 .IP "\fB\-mno\-fix\-sb1\fR" 4
14956 .IX Item "-mno-fix-sb1"
14957 .PD
14958 Work around certain \s-1SB\-1\s0 \s-1CPU\s0 core errata.
14959 (This flag currently works around the \s-1SB\-1\s0 revision 2
14960 \&\*(L"F1\*(R" and \*(L"F2\*(R" floating-point errata.)
14961 .IP "\fB\-mr10k\-cache\-barrier=\fR\fIsetting\fR" 4
14962 .IX Item "-mr10k-cache-barrier=setting"
14963 Specify whether \s-1GCC\s0 should insert cache barriers to avoid the
14964 side-effects of speculation on R10K processors.
14965 .Sp
14966 In common with many processors, the R10K tries to predict the outcome
14967 of a conditional branch and speculatively executes instructions from
14968 the \*(L"taken\*(R" branch.  It later aborts these instructions if the
14969 predicted outcome was wrong.  However, on the R10K, even aborted
14970 instructions can have side effects.
14971 .Sp
14972 This problem only affects kernel stores and, depending on the system,
14973 kernel loads.  As an example, a speculatively-executed store may load
14974 the target memory into cache and mark the cache line as dirty, even if
14975 the store itself is later aborted.  If a \s-1DMA\s0 operation writes to the
14976 same area of memory before the \*(L"dirty\*(R" line is flushed, the cached
14977 data will overwrite the DMA-ed data.  See the R10K processor manual
14978 for a full description, including other potential problems.
14979 .Sp
14980 One workaround is to insert cache barrier instructions before every memory
14981 access that might be speculatively executed and that might have side
14982 effects even if aborted.  \fB\-mr10k\-cache\-barrier=\fR\fIsetting\fR
14983 controls \s-1GCC\s0's implementation of this workaround.  It assumes that
14984 aborted accesses to any byte in the following regions will not have
14985 side effects:
14986 .RS 4
14987 .IP "1." 4
14988 the memory occupied by the current function's stack frame;
14989 .IP "2." 4
14990 the memory occupied by an incoming stack argument;
14991 .IP "3." 4
14992 the memory occupied by an object with a link-time-constant address.
14993 .RE
14994 .RS 4
14995 .Sp
14996 It is the kernel's responsibility to ensure that speculative
14997 accesses to these regions are indeed safe.
14998 .Sp
14999 If the input program contains a function declaration such as:
15000 .Sp
15001 .Vb 1
15002 \&        void foo (void);
15003 .Ve
15004 .Sp
15005 then the implementation of \f(CW\*(C`foo\*(C'\fR must allow \f(CW\*(C`j foo\*(C'\fR and
15006 \&\f(CW\*(C`jal foo\*(C'\fR to be executed speculatively.  \s-1GCC\s0 honors this
15007 restriction for functions it compiles itself.  It expects non-GCC
15008 functions (such as hand-written assembly code) to do the same.
15009 .Sp
15010 The option has three forms:
15011 .IP "\fB\-mr10k\-cache\-barrier=load\-store\fR" 4
15012 .IX Item "-mr10k-cache-barrier=load-store"
15013 Insert a cache barrier before a load or store that might be
15014 speculatively executed and that might have side effects even
15015 if aborted.
15016 .IP "\fB\-mr10k\-cache\-barrier=store\fR" 4
15017 .IX Item "-mr10k-cache-barrier=store"
15018 Insert a cache barrier before a store that might be speculatively
15019 executed and that might have side effects even if aborted.
15020 .IP "\fB\-mr10k\-cache\-barrier=none\fR" 4
15021 .IX Item "-mr10k-cache-barrier=none"
15022 Disable the insertion of cache barriers.  This is the default setting.
15023 .RE
15024 .RS 4
15025 .RE
15026 .IP "\fB\-mflush\-func=\fR\fIfunc\fR" 4
15027 .IX Item "-mflush-func=func"
15028 .PD 0
15029 .IP "\fB\-mno\-flush\-func\fR" 4
15030 .IX Item "-mno-flush-func"
15031 .PD
15032 Specifies the function to call to flush the I and D caches, or to not
15033 call any such function.  If called, the function must take the same
15034 arguments as the common \f(CW\*(C`_flush_func()\*(C'\fR, that is, the address of the
15035 memory range for which the cache is being flushed, the size of the
15036 memory range, and the number 3 (to flush both caches).  The default
15037 depends on the target \s-1GCC\s0 was configured for, but commonly is either
15038 \&\fB_flush_func\fR or \fB_\|_cpu_flush\fR.
15039 .IP "\fBmbranch\-cost=\fR\fInum\fR" 4
15040 .IX Item "mbranch-cost=num"
15041 Set the cost of branches to roughly \fInum\fR \*(L"simple\*(R" instructions.
15042 This cost is only a heuristic and is not guaranteed to produce
15043 consistent results across releases.  A zero cost redundantly selects
15044 the default, which is based on the \fB\-mtune\fR setting.
15045 .IP "\fB\-mbranch\-likely\fR" 4
15046 .IX Item "-mbranch-likely"
15047 .PD 0
15048 .IP "\fB\-mno\-branch\-likely\fR" 4
15049 .IX Item "-mno-branch-likely"
15050 .PD
15051 Enable or disable use of Branch Likely instructions, regardless of the
15052 default for the selected architecture.  By default, Branch Likely
15053 instructions may be generated if they are supported by the selected
15054 architecture.  An exception is for the \s-1MIPS32\s0 and \s-1MIPS64\s0 architectures
15055 and processors that implement those architectures; for those, Branch
15056 Likely instructions will not be generated by default because the \s-1MIPS32\s0
15057 and \s-1MIPS64\s0 architectures specifically deprecate their use.
15058 .IP "\fB\-mfp\-exceptions\fR" 4
15059 .IX Item "-mfp-exceptions"
15060 .PD 0
15061 .IP "\fB\-mno\-fp\-exceptions\fR" 4
15062 .IX Item "-mno-fp-exceptions"
15063 .PD
15064 Specifies whether \s-1FP\s0 exceptions are enabled.  This affects how we schedule
15065 \&\s-1FP\s0 instructions for some processors.  The default is that \s-1FP\s0 exceptions are
15066 enabled.
15067 .Sp
15068 For instance, on the \s-1SB\-1\s0, if \s-1FP\s0 exceptions are disabled, and we are emitting
15069 64\-bit code, then we can use both \s-1FP\s0 pipes.  Otherwise, we can only use one
15070 \&\s-1FP\s0 pipe.
15071 .IP "\fB\-mvr4130\-align\fR" 4
15072 .IX Item "-mvr4130-align"
15073 .PD 0
15074 .IP "\fB\-mno\-vr4130\-align\fR" 4
15075 .IX Item "-mno-vr4130-align"
15076 .PD
15077 The \s-1VR4130\s0 pipeline is two-way superscalar, but can only issue two
15078 instructions together if the first one is 8\-byte aligned.  When this
15079 option is enabled, \s-1GCC\s0 will align pairs of instructions that it
15080 thinks should execute in parallel.
15081 .Sp
15082 This option only has an effect when optimizing for the \s-1VR4130\s0.
15083 It normally makes code faster, but at the expense of making it bigger.
15084 It is enabled by default at optimization level \fB\-O3\fR.
15085 .IP "\fB\-msynci\fR" 4
15086 .IX Item "-msynci"
15087 .PD 0
15088 .IP "\fB\-mno\-synci\fR" 4
15089 .IX Item "-mno-synci"
15090 .PD
15091 Enable (disable) generation of \f(CW\*(C`synci\*(C'\fR instructions on
15092 architectures that support it.  The \f(CW\*(C`synci\*(C'\fR instructions (if
15093 enabled) will be generated when \f(CW\*(C`_\|_builtin_\|_\|_clear_cache()\*(C'\fR is
15094 compiled.
15095 .Sp
15096 This option defaults to \f(CW\*(C`\-mno\-synci\*(C'\fR, but the default can be
15097 overridden by configuring with \f(CW\*(C`\-\-with\-synci\*(C'\fR.
15098 .Sp
15099 When compiling code for single processor systems, it is generally safe
15100 to use \f(CW\*(C`synci\*(C'\fR.  However, on many multi-core (\s-1SMP\s0) systems, it
15101 will not invalidate the instruction caches on all cores and may lead
15102 to undefined behavior.
15103 .IP "\fB\-mrelax\-pic\-calls\fR" 4
15104 .IX Item "-mrelax-pic-calls"
15105 .PD 0
15106 .IP "\fB\-mno\-relax\-pic\-calls\fR" 4
15107 .IX Item "-mno-relax-pic-calls"
15108 .PD
15109 Try to turn \s-1PIC\s0 calls that are normally dispatched via register
15110 \&\f(CW$25\fR into direct calls.  This is only possible if the linker can
15111 resolve the destination at link-time and if the destination is within
15112 range for a direct call.
15113 .Sp
15114 \&\fB\-mrelax\-pic\-calls\fR is the default if \s-1GCC\s0 was configured to use
15115 an assembler and a linker that supports the \f(CW\*(C`.reloc\*(C'\fR assembly
15116 directive and \f(CW\*(C`\-mexplicit\-relocs\*(C'\fR is in effect.  With
15117 \&\f(CW\*(C`\-mno\-explicit\-relocs\*(C'\fR, this optimization can be performed by the
15118 assembler and the linker alone without help from the compiler.
15119 .IP "\fB\-mmcount\-ra\-address\fR" 4
15120 .IX Item "-mmcount-ra-address"
15121 .PD 0
15122 .IP "\fB\-mno\-mcount\-ra\-address\fR" 4
15123 .IX Item "-mno-mcount-ra-address"
15124 .PD
15125 Emit (do not emit) code that allows \f(CW\*(C`_mcount\*(C'\fR to modify the
15126 calling function's return address.  When enabled, this option extends
15127 the usual \f(CW\*(C`_mcount\*(C'\fR interface with a new \fIra-address\fR
15128 parameter, which has type \f(CW\*(C`intptr_t *\*(C'\fR and is passed in register
15129 \&\f(CW$12\fR.  \f(CW\*(C`_mcount\*(C'\fR can then modify the return address by
15130 doing both of the following:
15131 .RS 4
15132 .IP "\(bu" 4
15133 Returning the new address in register \f(CW$31\fR.
15134 .IP "\(bu" 4
15135 Storing the new address in \f(CW\*(C`*\f(CIra\-address\f(CW\*(C'\fR,
15136 if \fIra-address\fR is nonnull.
15137 .RE
15138 .RS 4
15139 .Sp
15140 The default is \fB\-mno\-mcount\-ra\-address\fR.
15141 .RE
15142 .PP
15143 \fI\s-1MMIX\s0 Options\fR
15144 .IX Subsection "MMIX Options"
15145 .PP
15146 These options are defined for the \s-1MMIX:\s0
15147 .IP "\fB\-mlibfuncs\fR" 4
15148 .IX Item "-mlibfuncs"
15149 .PD 0
15150 .IP "\fB\-mno\-libfuncs\fR" 4
15151 .IX Item "-mno-libfuncs"
15152 .PD
15153 Specify that intrinsic library functions are being compiled, passing all
15154 values in registers, no matter the size.
15155 .IP "\fB\-mepsilon\fR" 4
15156 .IX Item "-mepsilon"
15157 .PD 0
15158 .IP "\fB\-mno\-epsilon\fR" 4
15159 .IX Item "-mno-epsilon"
15160 .PD
15161 Generate floating-point comparison instructions that compare with respect
15162 to the \f(CW\*(C`rE\*(C'\fR epsilon register.
15163 .IP "\fB\-mabi=mmixware\fR" 4
15164 .IX Item "-mabi=mmixware"
15165 .PD 0
15166 .IP "\fB\-mabi=gnu\fR" 4
15167 .IX Item "-mabi=gnu"
15168 .PD
15169 Generate code that passes function parameters and return values that (in
15170 the called function) are seen as registers \f(CW$0\fR and up, as opposed to
15171 the \s-1GNU\s0 \s-1ABI\s0 which uses global registers \f(CW$231\fR and up.
15172 .IP "\fB\-mzero\-extend\fR" 4
15173 .IX Item "-mzero-extend"
15174 .PD 0
15175 .IP "\fB\-mno\-zero\-extend\fR" 4
15176 .IX Item "-mno-zero-extend"
15177 .PD
15178 When reading data from memory in sizes shorter than 64 bits, use (do not
15179 use) zero-extending load instructions by default, rather than
15180 sign-extending ones.
15181 .IP "\fB\-mknuthdiv\fR" 4
15182 .IX Item "-mknuthdiv"
15183 .PD 0
15184 .IP "\fB\-mno\-knuthdiv\fR" 4
15185 .IX Item "-mno-knuthdiv"
15186 .PD
15187 Make the result of a division yielding a remainder have the same sign as
15188 the divisor.  With the default, \fB\-mno\-knuthdiv\fR, the sign of the
15189 remainder follows the sign of the dividend.  Both methods are
15190 arithmetically valid, the latter being almost exclusively used.
15191 .IP "\fB\-mtoplevel\-symbols\fR" 4
15192 .IX Item "-mtoplevel-symbols"
15193 .PD 0
15194 .IP "\fB\-mno\-toplevel\-symbols\fR" 4
15195 .IX Item "-mno-toplevel-symbols"
15196 .PD
15197 Prepend (do not prepend) a \fB:\fR to all global symbols, so the assembly
15198 code can be used with the \f(CW\*(C`PREFIX\*(C'\fR assembly directive.
15199 .IP "\fB\-melf\fR" 4
15200 .IX Item "-melf"
15201 Generate an executable in the \s-1ELF\s0 format, rather than the default
15202 \&\fBmmo\fR format used by the \fBmmix\fR simulator.
15203 .IP "\fB\-mbranch\-predict\fR" 4
15204 .IX Item "-mbranch-predict"
15205 .PD 0
15206 .IP "\fB\-mno\-branch\-predict\fR" 4
15207 .IX Item "-mno-branch-predict"
15208 .PD
15209 Use (do not use) the probable-branch instructions, when static branch
15210 prediction indicates a probable branch.
15211 .IP "\fB\-mbase\-addresses\fR" 4
15212 .IX Item "-mbase-addresses"
15213 .PD 0
15214 .IP "\fB\-mno\-base\-addresses\fR" 4
15215 .IX Item "-mno-base-addresses"
15216 .PD
15217 Generate (do not generate) code that uses \fIbase addresses\fR.  Using a
15218 base address automatically generates a request (handled by the assembler
15219 and the linker) for a constant to be set up in a global register.  The
15220 register is used for one or more base address requests within the range 0
15221 to 255 from the value held in the register.  The generally leads to short
15222 and fast code, but the number of different data items that can be
15223 addressed is limited.  This means that a program that uses lots of static
15224 data may require \fB\-mno\-base\-addresses\fR.
15225 .IP "\fB\-msingle\-exit\fR" 4
15226 .IX Item "-msingle-exit"
15227 .PD 0
15228 .IP "\fB\-mno\-single\-exit\fR" 4
15229 .IX Item "-mno-single-exit"
15230 .PD
15231 Force (do not force) generated code to have a single exit point in each
15232 function.
15233 .PP
15234 \fI\s-1MN10300\s0 Options\fR
15235 .IX Subsection "MN10300 Options"
15236 .PP
15237 These \fB\-m\fR options are defined for Matsushita \s-1MN10300\s0 architectures:
15238 .IP "\fB\-mmult\-bug\fR" 4
15239 .IX Item "-mmult-bug"
15240 Generate code to avoid bugs in the multiply instructions for the \s-1MN10300\s0
15241 processors.  This is the default.
15242 .IP "\fB\-mno\-mult\-bug\fR" 4
15243 .IX Item "-mno-mult-bug"
15244 Do not generate code to avoid bugs in the multiply instructions for the
15245 \&\s-1MN10300\s0 processors.
15246 .IP "\fB\-mam33\fR" 4
15247 .IX Item "-mam33"
15248 Generate code using features specific to the \s-1AM33\s0 processor.
15249 .IP "\fB\-mno\-am33\fR" 4
15250 .IX Item "-mno-am33"
15251 Do not generate code using features specific to the \s-1AM33\s0 processor.  This
15252 is the default.
15253 .IP "\fB\-mam33\-2\fR" 4
15254 .IX Item "-mam33-2"
15255 Generate code using features specific to the \s-1AM33/2\s0.0 processor.
15256 .IP "\fB\-mam34\fR" 4
15257 .IX Item "-mam34"
15258 Generate code using features specific to the \s-1AM34\s0 processor.
15259 .IP "\fB\-mtune=\fR\fIcpu-type\fR" 4
15260 .IX Item "-mtune=cpu-type"
15261 Use the timing characteristics of the indicated \s-1CPU\s0 type when
15262 scheduling instructions.  This does not change the targeted processor
15263 type.  The \s-1CPU\s0 type must be one of \fBmn10300\fR, \fBam33\fR,
15264 \&\fBam33\-2\fR or \fBam34\fR.
15265 .IP "\fB\-mreturn\-pointer\-on\-d0\fR" 4
15266 .IX Item "-mreturn-pointer-on-d0"
15267 When generating a function that returns a pointer, return the pointer
15268 in both \f(CW\*(C`a0\*(C'\fR and \f(CW\*(C`d0\*(C'\fR.  Otherwise, the pointer is returned
15269 only in a0, and attempts to call such functions without a prototype
15270 would result in errors.  Note that this option is on by default; use
15271 \&\fB\-mno\-return\-pointer\-on\-d0\fR to disable it.
15272 .IP "\fB\-mno\-crt0\fR" 4
15273 .IX Item "-mno-crt0"
15274 Do not link in the C run-time initialization object file.
15275 .IP "\fB\-mrelax\fR" 4
15276 .IX Item "-mrelax"
15277 Indicate to the linker that it should perform a relaxation optimization pass
15278 to shorten branches, calls and absolute memory addresses.  This option only
15279 has an effect when used on the command line for the final link step.
15280 .Sp
15281 This option makes symbolic debugging impossible.
15282 .IP "\fB\-mliw\fR" 4
15283 .IX Item "-mliw"
15284 Allow the compiler to generate \fILong Instruction Word\fR
15285 instructions if the target is the \fB\s-1AM33\s0\fR or later.  This is the
15286 default.  This option defines the preprocessor macro \fB_\|_LIW_\|_\fR.
15287 .IP "\fB\-mnoliw\fR" 4
15288 .IX Item "-mnoliw"
15289 Do not allow the compiler to generate \fILong Instruction Word\fR
15290 instructions.  This option defines the preprocessor macro
15291 \&\fB_\|_NO_LIW_\|_\fR.
15292 .IP "\fB\-msetlb\fR" 4
15293 .IX Item "-msetlb"
15294 Allow the compiler to generate the \fI\s-1SETLB\s0\fR and \fILcc\fR
15295 instructions if the target is the \fB\s-1AM33\s0\fR or later.  This is the
15296 default.  This option defines the preprocessor macro \fB_\|_SETLB_\|_\fR.
15297 .IP "\fB\-mnosetlb\fR" 4
15298 .IX Item "-mnosetlb"
15299 Do not allow the compiler to generate \fI\s-1SETLB\s0\fR or \fILcc\fR
15300 instructions.  This option defines the preprocessor macro
15301 \&\fB_\|_NO_SETLB_\|_\fR.
15302 .PP
15303 \fI\s-1PDP\-11\s0 Options\fR
15304 .IX Subsection "PDP-11 Options"
15305 .PP
15306 These options are defined for the \s-1PDP\-11:\s0
15307 .IP "\fB\-mfpu\fR" 4
15308 .IX Item "-mfpu"
15309 Use hardware \s-1FPP\s0 floating point.  This is the default.  (\s-1FIS\s0 floating
15310 point on the \s-1PDP\-11/40\s0 is not supported.)
15311 .IP "\fB\-msoft\-float\fR" 4
15312 .IX Item "-msoft-float"
15313 Do not use hardware floating point.
15314 .IP "\fB\-mac0\fR" 4
15315 .IX Item "-mac0"
15316 Return floating-point results in ac0 (fr0 in Unix assembler syntax).
15317 .IP "\fB\-mno\-ac0\fR" 4
15318 .IX Item "-mno-ac0"
15319 Return floating-point results in memory.  This is the default.
15320 .IP "\fB\-m40\fR" 4
15321 .IX Item "-m40"
15322 Generate code for a \s-1PDP\-11/40\s0.
15323 .IP "\fB\-m45\fR" 4
15324 .IX Item "-m45"
15325 Generate code for a \s-1PDP\-11/45\s0.  This is the default.
15326 .IP "\fB\-m10\fR" 4
15327 .IX Item "-m10"
15328 Generate code for a \s-1PDP\-11/10\s0.
15329 .IP "\fB\-mbcopy\-builtin\fR" 4
15330 .IX Item "-mbcopy-builtin"
15331 Use inline \f(CW\*(C`movmemhi\*(C'\fR patterns for copying memory.  This is the
15332 default.
15333 .IP "\fB\-mbcopy\fR" 4
15334 .IX Item "-mbcopy"
15335 Do not use inline \f(CW\*(C`movmemhi\*(C'\fR patterns for copying memory.
15336 .IP "\fB\-mint16\fR" 4
15337 .IX Item "-mint16"
15338 .PD 0
15339 .IP "\fB\-mno\-int32\fR" 4
15340 .IX Item "-mno-int32"
15341 .PD
15342 Use 16\-bit \f(CW\*(C`int\*(C'\fR.  This is the default.
15343 .IP "\fB\-mint32\fR" 4
15344 .IX Item "-mint32"
15345 .PD 0
15346 .IP "\fB\-mno\-int16\fR" 4
15347 .IX Item "-mno-int16"
15348 .PD
15349 Use 32\-bit \f(CW\*(C`int\*(C'\fR.
15350 .IP "\fB\-mfloat64\fR" 4
15351 .IX Item "-mfloat64"
15352 .PD 0
15353 .IP "\fB\-mno\-float32\fR" 4
15354 .IX Item "-mno-float32"
15355 .PD
15356 Use 64\-bit \f(CW\*(C`float\*(C'\fR.  This is the default.
15357 .IP "\fB\-mfloat32\fR" 4
15358 .IX Item "-mfloat32"
15359 .PD 0
15360 .IP "\fB\-mno\-float64\fR" 4
15361 .IX Item "-mno-float64"
15362 .PD
15363 Use 32\-bit \f(CW\*(C`float\*(C'\fR.
15364 .IP "\fB\-mabshi\fR" 4
15365 .IX Item "-mabshi"
15366 Use \f(CW\*(C`abshi2\*(C'\fR pattern.  This is the default.
15367 .IP "\fB\-mno\-abshi\fR" 4
15368 .IX Item "-mno-abshi"
15369 Do not use \f(CW\*(C`abshi2\*(C'\fR pattern.
15370 .IP "\fB\-mbranch\-expensive\fR" 4
15371 .IX Item "-mbranch-expensive"
15372 Pretend that branches are expensive.  This is for experimenting with
15373 code generation only.
15374 .IP "\fB\-mbranch\-cheap\fR" 4
15375 .IX Item "-mbranch-cheap"
15376 Do not pretend that branches are expensive.  This is the default.
15377 .IP "\fB\-munix\-asm\fR" 4
15378 .IX Item "-munix-asm"
15379 Use Unix assembler syntax.  This is the default when configured for
15380 \&\fBpdp11\-*\-bsd\fR.
15381 .IP "\fB\-mdec\-asm\fR" 4
15382 .IX Item "-mdec-asm"
15383 Use \s-1DEC\s0 assembler syntax.  This is the default when configured for any
15384 \&\s-1PDP\-11\s0 target other than \fBpdp11\-*\-bsd\fR.
15385 .PP
15386 \fIpicoChip Options\fR
15387 .IX Subsection "picoChip Options"
15388 .PP
15389 These \fB\-m\fR options are defined for picoChip implementations:
15390 .IP "\fB\-mae=\fR\fIae_type\fR" 4
15391 .IX Item "-mae=ae_type"
15392 Set the instruction set, register set, and instruction scheduling
15393 parameters for array element type \fIae_type\fR.  Supported values
15394 for \fIae_type\fR are \fB\s-1ANY\s0\fR, \fB\s-1MUL\s0\fR, and \fB\s-1MAC\s0\fR.
15395 .Sp
15396 \&\fB\-mae=ANY\fR selects a completely generic \s-1AE\s0 type.  Code
15397 generated with this option will run on any of the other \s-1AE\s0 types.  The
15398 code will not be as efficient as it would be if compiled for a specific
15399 \&\s-1AE\s0 type, and some types of operation (e.g., multiplication) will not
15400 work properly on all types of \s-1AE\s0.
15401 .Sp
15402 \&\fB\-mae=MUL\fR selects a \s-1MUL\s0 \s-1AE\s0 type.  This is the most useful \s-1AE\s0 type
15403 for compiled code, and is the default.
15404 .Sp
15405 \&\fB\-mae=MAC\fR selects a DSP-style \s-1MAC\s0 \s-1AE\s0.  Code compiled with this
15406 option may suffer from poor performance of byte (char) manipulation,
15407 since the \s-1DSP\s0 \s-1AE\s0 does not provide hardware support for byte load/stores.
15408 .IP "\fB\-msymbol\-as\-address\fR" 4
15409 .IX Item "-msymbol-as-address"
15410 Enable the compiler to directly use a symbol name as an address in a
15411 load/store instruction, without first loading it into a
15412 register.  Typically, the use of this option will generate larger
15413 programs, which run faster than when the option isn't used.  However, the
15414 results vary from program to program, so it is left as a user option,
15415 rather than being permanently enabled.
15416 .IP "\fB\-mno\-inefficient\-warnings\fR" 4
15417 .IX Item "-mno-inefficient-warnings"
15418 Disables warnings about the generation of inefficient code.  These
15419 warnings can be generated, for example, when compiling code that
15420 performs byte-level memory operations on the \s-1MAC\s0 \s-1AE\s0 type.  The \s-1MAC\s0 \s-1AE\s0 has
15421 no hardware support for byte-level memory operations, so all byte
15422 load/stores must be synthesized from word load/store operations.  This is
15423 inefficient and a warning will be generated indicating to the programmer
15424 that they should rewrite the code to avoid byte operations, or to target
15425 an \s-1AE\s0 type that has the necessary hardware support.  This option enables
15426 the warning to be turned off.
15427 .PP
15428 \fIPowerPC Options\fR
15429 .IX Subsection "PowerPC Options"
15430 .PP
15431 These are listed under
15432 .PP
15433 \fI\s-1RL78\s0 Options\fR
15434 .IX Subsection "RL78 Options"
15435 .IP "\fB\-msim\fR" 4
15436 .IX Item "-msim"
15437 Links in additional target libraries to support operation within a
15438 simulator.
15439 .IP "\fB\-mmul=none\fR" 4
15440 .IX Item "-mmul=none"
15441 .PD 0
15442 .IP "\fB\-mmul=g13\fR" 4
15443 .IX Item "-mmul=g13"
15444 .IP "\fB\-mmul=rl78\fR" 4
15445 .IX Item "-mmul=rl78"
15446 .PD
15447 Specifies the type of hardware multiplication support to be used.  The
15448 default is \f(CW\*(C`none\*(C'\fR, which uses software multiplication functions.
15449 The \f(CW\*(C`g13\*(C'\fR option is for the hardware multiply/divide peripheral
15450 only on the \s-1RL78/G13\s0 targets.  The \f(CW\*(C`rl78\*(C'\fR option is for the
15451 standard hardware multiplication defined in the \s-1RL78\s0 software manual.
15452 .PP
15453 \fI\s-1IBM\s0 \s-1RS/6000\s0 and PowerPC Options\fR
15454 .IX Subsection "IBM RS/6000 and PowerPC Options"
15455 .PP
15456 These \fB\-m\fR options are defined for the \s-1IBM\s0 \s-1RS/6000\s0 and PowerPC:
15457 .IP "\fB\-mpower\fR" 4
15458 .IX Item "-mpower"
15459 .PD 0
15460 .IP "\fB\-mno\-power\fR" 4
15461 .IX Item "-mno-power"
15462 .IP "\fB\-mpower2\fR" 4
15463 .IX Item "-mpower2"
15464 .IP "\fB\-mno\-power2\fR" 4
15465 .IX Item "-mno-power2"
15466 .IP "\fB\-mpowerpc\fR" 4
15467 .IX Item "-mpowerpc"
15468 .IP "\fB\-mno\-powerpc\fR" 4
15469 .IX Item "-mno-powerpc"
15470 .IP "\fB\-mpowerpc\-gpopt\fR" 4
15471 .IX Item "-mpowerpc-gpopt"
15472 .IP "\fB\-mno\-powerpc\-gpopt\fR" 4
15473 .IX Item "-mno-powerpc-gpopt"
15474 .IP "\fB\-mpowerpc\-gfxopt\fR" 4
15475 .IX Item "-mpowerpc-gfxopt"
15476 .IP "\fB\-mno\-powerpc\-gfxopt\fR" 4
15477 .IX Item "-mno-powerpc-gfxopt"
15478 .IP "\fB\-mpowerpc64\fR" 4
15479 .IX Item "-mpowerpc64"
15480 .IP "\fB\-mno\-powerpc64\fR" 4
15481 .IX Item "-mno-powerpc64"
15482 .IP "\fB\-mmfcrf\fR" 4
15483 .IX Item "-mmfcrf"
15484 .IP "\fB\-mno\-mfcrf\fR" 4
15485 .IX Item "-mno-mfcrf"
15486 .IP "\fB\-mpopcntb\fR" 4
15487 .IX Item "-mpopcntb"
15488 .IP "\fB\-mno\-popcntb\fR" 4
15489 .IX Item "-mno-popcntb"
15490 .IP "\fB\-mpopcntd\fR" 4
15491 .IX Item "-mpopcntd"
15492 .IP "\fB\-mno\-popcntd\fR" 4
15493 .IX Item "-mno-popcntd"
15494 .IP "\fB\-mfprnd\fR" 4
15495 .IX Item "-mfprnd"
15496 .IP "\fB\-mno\-fprnd\fR" 4
15497 .IX Item "-mno-fprnd"
15498 .IP "\fB\-mcmpb\fR" 4
15499 .IX Item "-mcmpb"
15500 .IP "\fB\-mno\-cmpb\fR" 4
15501 .IX Item "-mno-cmpb"
15502 .IP "\fB\-mmfpgpr\fR" 4
15503 .IX Item "-mmfpgpr"
15504 .IP "\fB\-mno\-mfpgpr\fR" 4
15505 .IX Item "-mno-mfpgpr"
15506 .IP "\fB\-mhard\-dfp\fR" 4
15507 .IX Item "-mhard-dfp"
15508 .IP "\fB\-mno\-hard\-dfp\fR" 4
15509 .IX Item "-mno-hard-dfp"
15510 .PD
15511 \&\s-1GCC\s0 supports two related instruction set architectures for the
15512 \&\s-1RS/6000\s0 and PowerPC.  The \fI\s-1POWER\s0\fR instruction set are those
15513 instructions supported by the \fBrios\fR chip set used in the original
15514 \&\s-1RS/6000\s0 systems and the \fIPowerPC\fR instruction set is the
15515 architecture of the Freescale MPC5xx, MPC6xx, MPC8xx microprocessors, and
15516 the \s-1IBM\s0 4xx, 6xx, and follow-on microprocessors.
15517 .Sp
15518 Neither architecture is a subset of the other.  However there is a
15519 large common subset of instructions supported by both.  An \s-1MQ\s0
15520 register is included in processors supporting the \s-1POWER\s0 architecture.
15521 .Sp
15522 You use these options to specify which instructions are available on the
15523 processor you are using.  The default value of these options is
15524 determined when configuring \s-1GCC\s0.  Specifying the
15525 \&\fB\-mcpu=\fR\fIcpu_type\fR overrides the specification of these
15526 options.  We recommend you use the \fB\-mcpu=\fR\fIcpu_type\fR option
15527 rather than the options listed above.
15528 .Sp
15529 The \fB\-mpower\fR option allows \s-1GCC\s0 to generate instructions that
15530 are found only in the \s-1POWER\s0 architecture and to use the \s-1MQ\s0 register.
15531 Specifying \fB\-mpower2\fR implies \fB\-power\fR and also allows \s-1GCC\s0
15532 to generate instructions that are present in the \s-1POWER2\s0 architecture but
15533 not the original \s-1POWER\s0 architecture.
15534 .Sp
15535 The \fB\-mpowerpc\fR option allows \s-1GCC\s0 to generate instructions that
15536 are found only in the 32\-bit subset of the PowerPC architecture.
15537 Specifying \fB\-mpowerpc\-gpopt\fR implies \fB\-mpowerpc\fR and also allows
15538 \&\s-1GCC\s0 to use the optional PowerPC architecture instructions in the
15539 General Purpose group, including floating-point square root.  Specifying
15540 \&\fB\-mpowerpc\-gfxopt\fR implies \fB\-mpowerpc\fR and also allows \s-1GCC\s0 to
15541 use the optional PowerPC architecture instructions in the Graphics
15542 group, including floating-point select.
15543 .Sp
15544 The \fB\-mmfcrf\fR option allows \s-1GCC\s0 to generate the move from
15545 condition register field instruction implemented on the \s-1POWER4\s0
15546 processor and other processors that support the PowerPC V2.01
15547 architecture.
15548 The \fB\-mpopcntb\fR option allows \s-1GCC\s0 to generate the popcount and
15549 double-precision \s-1FP\s0 reciprocal estimate instruction implemented on the
15550 \&\s-1POWER5\s0 processor and other processors that support the PowerPC V2.02
15551 architecture.
15552 The \fB\-mpopcntd\fR option allows \s-1GCC\s0 to generate the popcount
15553 instruction implemented on the \s-1POWER7\s0 processor and other processors
15554 that support the PowerPC V2.06 architecture.
15555 The \fB\-mfprnd\fR option allows \s-1GCC\s0 to generate the \s-1FP\s0 round to
15556 integer instructions implemented on the \s-1POWER5+\s0 processor and other
15557 processors that support the PowerPC V2.03 architecture.
15558 The \fB\-mcmpb\fR option allows \s-1GCC\s0 to generate the compare bytes
15559 instruction implemented on the \s-1POWER6\s0 processor and other processors
15560 that support the PowerPC V2.05 architecture.
15561 The \fB\-mmfpgpr\fR option allows \s-1GCC\s0 to generate the \s-1FP\s0 move to/from
15562 general-purpose register instructions implemented on the \s-1POWER6X\s0
15563 processor and other processors that support the extended PowerPC V2.05
15564 architecture.
15565 The \fB\-mhard\-dfp\fR option allows \s-1GCC\s0 to generate the decimal
15566 floating-point instructions implemented on some \s-1POWER\s0 processors.
15567 .Sp
15568 The \fB\-mpowerpc64\fR option allows \s-1GCC\s0 to generate the additional
15569 64\-bit instructions that are found in the full PowerPC64 architecture
15570 and to treat GPRs as 64\-bit, doubleword quantities.  \s-1GCC\s0 defaults to
15571 \&\fB\-mno\-powerpc64\fR.
15572 .Sp
15573 If you specify both \fB\-mno\-power\fR and \fB\-mno\-powerpc\fR, \s-1GCC\s0
15574 will use only the instructions in the common subset of both
15575 architectures plus some special \s-1AIX\s0 common-mode calls, and will not use
15576 the \s-1MQ\s0 register.  Specifying both \fB\-mpower\fR and \fB\-mpowerpc\fR
15577 permits \s-1GCC\s0 to use any instruction from either architecture and to
15578 allow use of the \s-1MQ\s0 register; specify this for the Motorola \s-1MPC601\s0.
15579 .IP "\fB\-mnew\-mnemonics\fR" 4
15580 .IX Item "-mnew-mnemonics"
15581 .PD 0
15582 .IP "\fB\-mold\-mnemonics\fR" 4
15583 .IX Item "-mold-mnemonics"
15584 .PD
15585 Select which mnemonics to use in the generated assembler code.  With
15586 \&\fB\-mnew\-mnemonics\fR, \s-1GCC\s0 uses the assembler mnemonics defined for
15587 the PowerPC architecture.  With \fB\-mold\-mnemonics\fR it uses the
15588 assembler mnemonics defined for the \s-1POWER\s0 architecture.  Instructions
15589 defined in only one architecture have only one mnemonic; \s-1GCC\s0 uses that
15590 mnemonic irrespective of which of these options is specified.
15591 .Sp
15592 \&\s-1GCC\s0 defaults to the mnemonics appropriate for the architecture in
15593 use.  Specifying \fB\-mcpu=\fR\fIcpu_type\fR sometimes overrides the
15594 value of these option.  Unless you are building a cross-compiler, you
15595 should normally not specify either \fB\-mnew\-mnemonics\fR or
15596 \&\fB\-mold\-mnemonics\fR, but should instead accept the default.
15597 .IP "\fB\-mcpu=\fR\fIcpu_type\fR" 4
15598 .IX Item "-mcpu=cpu_type"
15599 Set architecture type, register usage, choice of mnemonics, and
15600 instruction scheduling parameters for machine type \fIcpu_type\fR.
15601 Supported values for \fIcpu_type\fR are \fB401\fR, \fB403\fR,
15602 \&\fB405\fR, \fB405fp\fR, \fB440\fR, \fB440fp\fR, \fB464\fR, \fB464fp\fR,
15603 \&\fB476\fR, \fB476fp\fR, \fB505\fR, \fB601\fR, \fB602\fR, \fB603\fR,
15604 \&\fB603e\fR, \fB604\fR, \fB604e\fR, \fB620\fR, \fB630\fR, \fB740\fR,
15605 \&\fB7400\fR, \fB7450\fR, \fB750\fR, \fB801\fR, \fB821\fR, \fB823\fR,
15606 \&\fB860\fR, \fB970\fR, \fB8540\fR, \fBa2\fR, \fBe300c2\fR,
15607 \&\fBe300c3\fR, \fBe500mc\fR, \fBe500mc64\fR, \fBec603e\fR, \fBG3\fR,
15608 \&\fBG4\fR, \fBG5\fR, \fBtitan\fR, \fBpower\fR, \fBpower2\fR, \fBpower3\fR,
15609 \&\fBpower4\fR, \fBpower5\fR, \fBpower5+\fR, \fBpower6\fR, \fBpower6x\fR,
15610 \&\fBpower7\fR, \fBcommon\fR, \fBpowerpc\fR, \fBpowerpc64\fR, \fBrios\fR,
15611 \&\fBrios1\fR, \fBrios2\fR, \fBrsc\fR, and \fBrs64\fR.
15612 .Sp
15613 \&\fB\-mcpu=common\fR selects a completely generic processor.  Code
15614 generated under this option will run on any \s-1POWER\s0 or PowerPC processor.
15615 \&\s-1GCC\s0 will use only the instructions in the common subset of both
15616 architectures, and will not use the \s-1MQ\s0 register.  \s-1GCC\s0 assumes a generic
15617 processor model for scheduling purposes.
15618 .Sp
15619 \&\fB\-mcpu=power\fR, \fB\-mcpu=power2\fR, \fB\-mcpu=powerpc\fR, and
15620 \&\fB\-mcpu=powerpc64\fR specify generic \s-1POWER\s0, \s-1POWER2\s0, pure 32\-bit
15621 PowerPC (i.e., not \s-1MPC601\s0), and 64\-bit PowerPC architecture machine
15622 types, with an appropriate, generic processor model assumed for
15623 scheduling purposes.
15624 .Sp
15625 The other options specify a specific processor.  Code generated under
15626 those options will run best on that processor, and may not run at all on
15627 others.
15628 .Sp
15629 The \fB\-mcpu\fR options automatically enable or disable the
15630 following options:
15631 .Sp
15632 \&\fB\-maltivec  \-mfprnd  \-mhard\-float  \-mmfcrf  \-mmultiple 
15633 \&\-mnew\-mnemonics  \-mpopcntb \-mpopcntd  \-mpower  \-mpower2  \-mpowerpc64 
15634 \&\-mpowerpc\-gpopt  \-mpowerpc\-gfxopt  \-msingle\-float \-mdouble\-float 
15635 \&\-msimple\-fpu \-mstring  \-mmulhw  \-mdlmzb  \-mmfpgpr \-mvsx\fR
15636 .Sp
15637 The particular options set for any particular \s-1CPU\s0 will vary between
15638 compiler versions, depending on what setting seems to produce optimal
15639 code for that \s-1CPU\s0; it doesn't necessarily reflect the actual hardware's
15640 capabilities.  If you wish to set an individual option to a particular
15641 value, you may specify it after the \fB\-mcpu\fR option, like
15642 \&\fB\-mcpu=970 \-mno\-altivec\fR.
15643 .Sp
15644 On \s-1AIX\s0, the \fB\-maltivec\fR and \fB\-mpowerpc64\fR options are
15645 not enabled or disabled by the \fB\-mcpu\fR option at present because
15646 \&\s-1AIX\s0 does not have full support for these options.  You may still
15647 enable or disable them individually if you're sure it'll work in your
15648 environment.
15649 .IP "\fB\-mtune=\fR\fIcpu_type\fR" 4
15650 .IX Item "-mtune=cpu_type"
15651 Set the instruction scheduling parameters for machine type
15652 \&\fIcpu_type\fR, but do not set the architecture type, register usage, or
15653 choice of mnemonics, as \fB\-mcpu=\fR\fIcpu_type\fR would.  The same
15654 values for \fIcpu_type\fR are used for \fB\-mtune\fR as for
15655 \&\fB\-mcpu\fR.  If both are specified, the code generated will use the
15656 architecture, registers, and mnemonics set by \fB\-mcpu\fR, but the
15657 scheduling parameters set by \fB\-mtune\fR.
15658 .IP "\fB\-mcmodel=small\fR" 4
15659 .IX Item "-mcmodel=small"
15660 Generate PowerPC64 code for the small model: The \s-1TOC\s0 is limited to
15661 64k.
15662 .IP "\fB\-mcmodel=medium\fR" 4
15663 .IX Item "-mcmodel=medium"
15664 Generate PowerPC64 code for the medium model: The \s-1TOC\s0 and other static
15665 data may be up to a total of 4G in size.
15666 .IP "\fB\-mcmodel=large\fR" 4
15667 .IX Item "-mcmodel=large"
15668 Generate PowerPC64 code for the large model: The \s-1TOC\s0 may be up to 4G
15669 in size.  Other data and code is only limited by the 64\-bit address
15670 space.
15671 .IP "\fB\-maltivec\fR" 4
15672 .IX Item "-maltivec"
15673 .PD 0
15674 .IP "\fB\-mno\-altivec\fR" 4
15675 .IX Item "-mno-altivec"
15676 .PD
15677 Generate code that uses (does not use) AltiVec instructions, and also
15678 enable the use of built-in functions that allow more direct access to
15679 the AltiVec instruction set.  You may also need to set
15680 \&\fB\-mabi=altivec\fR to adjust the current \s-1ABI\s0 with AltiVec \s-1ABI\s0
15681 enhancements.
15682 .IP "\fB\-mvrsave\fR" 4
15683 .IX Item "-mvrsave"
15684 .PD 0
15685 .IP "\fB\-mno\-vrsave\fR" 4
15686 .IX Item "-mno-vrsave"
15687 .PD
15688 Generate \s-1VRSAVE\s0 instructions when generating AltiVec code.
15689 .IP "\fB\-mgen\-cell\-microcode\fR" 4
15690 .IX Item "-mgen-cell-microcode"
15691 Generate Cell microcode instructions
15692 .IP "\fB\-mwarn\-cell\-microcode\fR" 4
15693 .IX Item "-mwarn-cell-microcode"
15694 Warning when a Cell microcode instruction is going to emitted.  An example
15695 of a Cell microcode instruction is a variable shift.
15696 .IP "\fB\-msecure\-plt\fR" 4
15697 .IX Item "-msecure-plt"
15698 Generate code that allows ld and ld.so to build executables and shared
15699 libraries with non-exec .plt and .got sections.  This is a PowerPC
15700 32\-bit \s-1SYSV\s0 \s-1ABI\s0 option.
15701 .IP "\fB\-mbss\-plt\fR" 4
15702 .IX Item "-mbss-plt"
15703 Generate code that uses a \s-1BSS\s0 .plt section that ld.so fills in, and
15704 requires .plt and .got sections that are both writable and executable.
15705 This is a PowerPC 32\-bit \s-1SYSV\s0 \s-1ABI\s0 option.
15706 .IP "\fB\-misel\fR" 4
15707 .IX Item "-misel"
15708 .PD 0
15709 .IP "\fB\-mno\-isel\fR" 4
15710 .IX Item "-mno-isel"
15711 .PD
15712 This switch enables or disables the generation of \s-1ISEL\s0 instructions.
15713 .IP "\fB\-misel=\fR\fIyes/no\fR" 4
15714 .IX Item "-misel=yes/no"
15715 This switch has been deprecated.  Use \fB\-misel\fR and
15716 \&\fB\-mno\-isel\fR instead.
15717 .IP "\fB\-mspe\fR" 4
15718 .IX Item "-mspe"
15719 .PD 0
15720 .IP "\fB\-mno\-spe\fR" 4
15721 .IX Item "-mno-spe"
15722 .PD
15723 This switch enables or disables the generation of \s-1SPE\s0 simd
15724 instructions.
15725 .IP "\fB\-mpaired\fR" 4
15726 .IX Item "-mpaired"
15727 .PD 0
15728 .IP "\fB\-mno\-paired\fR" 4
15729 .IX Item "-mno-paired"
15730 .PD
15731 This switch enables or disables the generation of \s-1PAIRED\s0 simd
15732 instructions.
15733 .IP "\fB\-mspe=\fR\fIyes/no\fR" 4
15734 .IX Item "-mspe=yes/no"
15735 This option has been deprecated.  Use \fB\-mspe\fR and
15736 \&\fB\-mno\-spe\fR instead.
15737 .IP "\fB\-mvsx\fR" 4
15738 .IX Item "-mvsx"
15739 .PD 0
15740 .IP "\fB\-mno\-vsx\fR" 4
15741 .IX Item "-mno-vsx"
15742 .PD
15743 Generate code that uses (does not use) vector/scalar (\s-1VSX\s0)
15744 instructions, and also enable the use of built-in functions that allow
15745 more direct access to the \s-1VSX\s0 instruction set.
15746 .IP "\fB\-mfloat\-gprs=\fR\fIyes/single/double/no\fR" 4
15747 .IX Item "-mfloat-gprs=yes/single/double/no"
15748 .PD 0
15749 .IP "\fB\-mfloat\-gprs\fR" 4
15750 .IX Item "-mfloat-gprs"
15751 .PD
15752 This switch enables or disables the generation of floating-point
15753 operations on the general-purpose registers for architectures that
15754 support it.
15755 .Sp
15756 The argument \fIyes\fR or \fIsingle\fR enables the use of
15757 single-precision floating-point operations.
15758 .Sp
15759 The argument \fIdouble\fR enables the use of single and
15760 double-precision floating-point operations.
15761 .Sp
15762 The argument \fIno\fR disables floating-point operations on the
15763 general-purpose registers.
15764 .Sp
15765 This option is currently only available on the MPC854x.
15766 .IP "\fB\-m32\fR" 4
15767 .IX Item "-m32"
15768 .PD 0
15769 .IP "\fB\-m64\fR" 4
15770 .IX Item "-m64"
15771 .PD
15772 Generate code for 32\-bit or 64\-bit environments of Darwin and \s-1SVR4\s0
15773 targets (including GNU/Linux).  The 32\-bit environment sets int, long
15774 and pointer to 32 bits and generates code that runs on any PowerPC
15775 variant.  The 64\-bit environment sets int to 32 bits and long and
15776 pointer to 64 bits, and generates code for PowerPC64, as for
15777 \&\fB\-mpowerpc64\fR.
15778 .IP "\fB\-mfull\-toc\fR" 4
15779 .IX Item "-mfull-toc"
15780 .PD 0
15781 .IP "\fB\-mno\-fp\-in\-toc\fR" 4
15782 .IX Item "-mno-fp-in-toc"
15783 .IP "\fB\-mno\-sum\-in\-toc\fR" 4
15784 .IX Item "-mno-sum-in-toc"
15785 .IP "\fB\-mminimal\-toc\fR" 4
15786 .IX Item "-mminimal-toc"
15787 .PD
15788 Modify generation of the \s-1TOC\s0 (Table Of Contents), which is created for
15789 every executable file.  The \fB\-mfull\-toc\fR option is selected by
15790 default.  In that case, \s-1GCC\s0 will allocate at least one \s-1TOC\s0 entry for
15791 each unique non-automatic variable reference in your program.  \s-1GCC\s0
15792 will also place floating-point constants in the \s-1TOC\s0.  However, only
15793 16,384 entries are available in the \s-1TOC\s0.
15794 .Sp
15795 If you receive a linker error message that saying you have overflowed
15796 the available \s-1TOC\s0 space, you can reduce the amount of \s-1TOC\s0 space used
15797 with the \fB\-mno\-fp\-in\-toc\fR and \fB\-mno\-sum\-in\-toc\fR options.
15798 \&\fB\-mno\-fp\-in\-toc\fR prevents \s-1GCC\s0 from putting floating-point
15799 constants in the \s-1TOC\s0 and \fB\-mno\-sum\-in\-toc\fR forces \s-1GCC\s0 to
15800 generate code to calculate the sum of an address and a constant at
15801 run time instead of putting that sum into the \s-1TOC\s0.  You may specify one
15802 or both of these options.  Each causes \s-1GCC\s0 to produce very slightly
15803 slower and larger code at the expense of conserving \s-1TOC\s0 space.
15804 .Sp
15805 If you still run out of space in the \s-1TOC\s0 even when you specify both of
15806 these options, specify \fB\-mminimal\-toc\fR instead.  This option causes
15807 \&\s-1GCC\s0 to make only one \s-1TOC\s0 entry for every file.  When you specify this
15808 option, \s-1GCC\s0 will produce code that is slower and larger but which
15809 uses extremely little \s-1TOC\s0 space.  You may wish to use this option
15810 only on files that contain less frequently executed code.
15811 .IP "\fB\-maix64\fR" 4
15812 .IX Item "-maix64"
15813 .PD 0
15814 .IP "\fB\-maix32\fR" 4
15815 .IX Item "-maix32"
15816 .PD
15817 Enable 64\-bit \s-1AIX\s0 \s-1ABI\s0 and calling convention: 64\-bit pointers, 64\-bit
15818 \&\f(CW\*(C`long\*(C'\fR type, and the infrastructure needed to support them.
15819 Specifying \fB\-maix64\fR implies \fB\-mpowerpc64\fR and
15820 \&\fB\-mpowerpc\fR, while \fB\-maix32\fR disables the 64\-bit \s-1ABI\s0 and
15821 implies \fB\-mno\-powerpc64\fR.  \s-1GCC\s0 defaults to \fB\-maix32\fR.
15822 .IP "\fB\-mxl\-compat\fR" 4
15823 .IX Item "-mxl-compat"
15824 .PD 0
15825 .IP "\fB\-mno\-xl\-compat\fR" 4
15826 .IX Item "-mno-xl-compat"
15827 .PD
15828 Produce code that conforms more closely to \s-1IBM\s0 \s-1XL\s0 compiler semantics
15829 when using AIX-compatible \s-1ABI\s0.  Pass floating-point arguments to
15830 prototyped functions beyond the register save area (\s-1RSA\s0) on the stack
15831 in addition to argument FPRs.  Do not assume that most significant
15832 double in 128\-bit long double value is properly rounded when comparing
15833 values and converting to double.  Use \s-1XL\s0 symbol names for long double
15834 support routines.
15835 .Sp
15836 The \s-1AIX\s0 calling convention was extended but not initially documented to
15837 handle an obscure K&R C case of calling a function that takes the
15838 address of its arguments with fewer arguments than declared.  \s-1IBM\s0 \s-1XL\s0
15839 compilers access floating-point arguments that do not fit in the
15840 \&\s-1RSA\s0 from the stack when a subroutine is compiled without
15841 optimization.  Because always storing floating-point arguments on the
15842 stack is inefficient and rarely needed, this option is not enabled by
15843 default and only is necessary when calling subroutines compiled by \s-1IBM\s0
15844 \&\s-1XL\s0 compilers without optimization.
15845 .IP "\fB\-mpe\fR" 4
15846 .IX Item "-mpe"
15847 Support \fI\s-1IBM\s0 \s-1RS/6000\s0 \s-1SP\s0\fR \fIParallel Environment\fR (\s-1PE\s0).  Link an
15848 application written to use message passing with special startup code to
15849 enable the application to run.  The system must have \s-1PE\s0 installed in the
15850 standard location (\fI/usr/lpp/ppe.poe/\fR), or the \fIspecs\fR file
15851 must be overridden with the \fB\-specs=\fR option to specify the
15852 appropriate directory location.  The Parallel Environment does not
15853 support threads, so the \fB\-mpe\fR option and the \fB\-pthread\fR
15854 option are incompatible.
15855 .IP "\fB\-malign\-natural\fR" 4
15856 .IX Item "-malign-natural"
15857 .PD 0
15858 .IP "\fB\-malign\-power\fR" 4
15859 .IX Item "-malign-power"
15860 .PD
15861 On \s-1AIX\s0, 32\-bit Darwin, and 64\-bit PowerPC GNU/Linux, the option
15862 \&\fB\-malign\-natural\fR overrides the ABI-defined alignment of larger
15863 types, such as floating-point doubles, on their natural size-based boundary.
15864 The option \fB\-malign\-power\fR instructs \s-1GCC\s0 to follow the ABI-specified
15865 alignment rules.  \s-1GCC\s0 defaults to the standard alignment defined in the \s-1ABI\s0.
15866 .Sp
15867 On 64\-bit Darwin, natural alignment is the default, and \fB\-malign\-power\fR
15868 is not supported.
15869 .IP "\fB\-msoft\-float\fR" 4
15870 .IX Item "-msoft-float"
15871 .PD 0
15872 .IP "\fB\-mhard\-float\fR" 4
15873 .IX Item "-mhard-float"
15874 .PD
15875 Generate code that does not use (uses) the floating-point register set.
15876 Software floating-point emulation is provided if you use the
15877 \&\fB\-msoft\-float\fR option, and pass the option to \s-1GCC\s0 when linking.
15878 .IP "\fB\-msingle\-float\fR" 4
15879 .IX Item "-msingle-float"
15880 .PD 0
15881 .IP "\fB\-mdouble\-float\fR" 4
15882 .IX Item "-mdouble-float"
15883 .PD
15884 Generate code for single\- or double-precision floating-point operations.
15885 \&\fB\-mdouble\-float\fR implies \fB\-msingle\-float\fR.
15886 .IP "\fB\-msimple\-fpu\fR" 4
15887 .IX Item "-msimple-fpu"
15888 Do not generate sqrt and div instructions for hardware floating-point unit.
15889 .IP "\fB\-mfpu\fR" 4
15890 .IX Item "-mfpu"
15891 Specify type of floating-point unit.  Valid values are \fIsp_lite\fR
15892 (equivalent to \-msingle\-float \-msimple\-fpu), \fIdp_lite\fR (equivalent
15893 to \-mdouble\-float \-msimple\-fpu), \fIsp_full\fR (equivalent to \-msingle\-float),
15894 and \fIdp_full\fR (equivalent to \-mdouble\-float).
15895 .IP "\fB\-mxilinx\-fpu\fR" 4
15896 .IX Item "-mxilinx-fpu"
15897 Perform optimizations for the floating-point unit on Xilinx \s-1PPC\s0 405/440.
15898 .IP "\fB\-mmultiple\fR" 4
15899 .IX Item "-mmultiple"
15900 .PD 0
15901 .IP "\fB\-mno\-multiple\fR" 4
15902 .IX Item "-mno-multiple"
15903 .PD
15904 Generate code that uses (does not use) the load multiple word
15905 instructions and the store multiple word instructions.  These
15906 instructions are generated by default on \s-1POWER\s0 systems, and not
15907 generated on PowerPC systems.  Do not use \fB\-mmultiple\fR on little-endian
15908 PowerPC systems, since those instructions do not work when the
15909 processor is in little-endian mode.  The exceptions are \s-1PPC740\s0 and
15910 \&\s-1PPC750\s0 which permit these instructions in little-endian mode.
15911 .IP "\fB\-mstring\fR" 4
15912 .IX Item "-mstring"
15913 .PD 0
15914 .IP "\fB\-mno\-string\fR" 4
15915 .IX Item "-mno-string"
15916 .PD
15917 Generate code that uses (does not use) the load string instructions
15918 and the store string word instructions to save multiple registers and
15919 do small block moves.  These instructions are generated by default on
15920 \&\s-1POWER\s0 systems, and not generated on PowerPC systems.  Do not use
15921 \&\fB\-mstring\fR on little-endian PowerPC systems, since those
15922 instructions do not work when the processor is in little-endian mode.
15923 The exceptions are \s-1PPC740\s0 and \s-1PPC750\s0 which permit these instructions
15924 in little-endian mode.
15925 .IP "\fB\-mupdate\fR" 4
15926 .IX Item "-mupdate"
15927 .PD 0
15928 .IP "\fB\-mno\-update\fR" 4
15929 .IX Item "-mno-update"
15930 .PD
15931 Generate code that uses (does not use) the load or store instructions
15932 that update the base register to the address of the calculated memory
15933 location.  These instructions are generated by default.  If you use
15934 \&\fB\-mno\-update\fR, there is a small window between the time that the
15935 stack pointer is updated and the address of the previous frame is
15936 stored, which means code that walks the stack frame across interrupts or
15937 signals may get corrupted data.
15938 .IP "\fB\-mavoid\-indexed\-addresses\fR" 4
15939 .IX Item "-mavoid-indexed-addresses"
15940 .PD 0
15941 .IP "\fB\-mno\-avoid\-indexed\-addresses\fR" 4
15942 .IX Item "-mno-avoid-indexed-addresses"
15943 .PD
15944 Generate code that tries to avoid (not avoid) the use of indexed load
15945 or store instructions. These instructions can incur a performance
15946 penalty on Power6 processors in certain situations, such as when
15947 stepping through large arrays that cross a 16M boundary.  This option
15948 is enabled by default when targetting Power6 and disabled otherwise.
15949 .IP "\fB\-mfused\-madd\fR" 4
15950 .IX Item "-mfused-madd"
15951 .PD 0
15952 .IP "\fB\-mno\-fused\-madd\fR" 4
15953 .IX Item "-mno-fused-madd"
15954 .PD
15955 Generate code that uses (does not use) the floating-point multiply and
15956 accumulate instructions.  These instructions are generated by default
15957 if hardware floating point is used.  The machine-dependent
15958 \&\fB\-mfused\-madd\fR option is now mapped to the machine-independent
15959 \&\fB\-ffp\-contract=fast\fR option, and \fB\-mno\-fused\-madd\fR is
15960 mapped to \fB\-ffp\-contract=off\fR.
15961 .IP "\fB\-mmulhw\fR" 4
15962 .IX Item "-mmulhw"
15963 .PD 0
15964 .IP "\fB\-mno\-mulhw\fR" 4
15965 .IX Item "-mno-mulhw"
15966 .PD
15967 Generate code that uses (does not use) the half-word multiply and
15968 multiply-accumulate instructions on the \s-1IBM\s0 405, 440, 464 and 476 processors.
15969 These instructions are generated by default when targetting those
15970 processors.
15971 .IP "\fB\-mdlmzb\fR" 4
15972 .IX Item "-mdlmzb"
15973 .PD 0
15974 .IP "\fB\-mno\-dlmzb\fR" 4
15975 .IX Item "-mno-dlmzb"
15976 .PD
15977 Generate code that uses (does not use) the string-search \fBdlmzb\fR
15978 instruction on the \s-1IBM\s0 405, 440, 464 and 476 processors.  This instruction is
15979 generated by default when targetting those processors.
15980 .IP "\fB\-mno\-bit\-align\fR" 4
15981 .IX Item "-mno-bit-align"
15982 .PD 0
15983 .IP "\fB\-mbit\-align\fR" 4
15984 .IX Item "-mbit-align"
15985 .PD
15986 On System V.4 and embedded PowerPC systems do not (do) force structures
15987 and unions that contain bit-fields to be aligned to the base type of the
15988 bit-field.
15989 .Sp
15990 For example, by default a structure containing nothing but 8
15991 \&\f(CW\*(C`unsigned\*(C'\fR bit-fields of length 1 is aligned to a 4\-byte
15992 boundary and has a size of 4 bytes.  By using \fB\-mno\-bit\-align\fR,
15993 the structure is aligned to a 1\-byte boundary and is 1 byte in
15994 size.
15995 .IP "\fB\-mno\-strict\-align\fR" 4
15996 .IX Item "-mno-strict-align"
15997 .PD 0
15998 .IP "\fB\-mstrict\-align\fR" 4
15999 .IX Item "-mstrict-align"
16000 .PD
16001 On System V.4 and embedded PowerPC systems do not (do) assume that
16002 unaligned memory references will be handled by the system.
16003 .IP "\fB\-mrelocatable\fR" 4
16004 .IX Item "-mrelocatable"
16005 .PD 0
16006 .IP "\fB\-mno\-relocatable\fR" 4
16007 .IX Item "-mno-relocatable"
16008 .PD
16009 Generate code that allows (does not allow) a static executable to be
16010 relocated to a different address at run time.  A simple embedded
16011 PowerPC system loader should relocate the entire contents of
16012 \&\f(CW\*(C`.got2\*(C'\fR and 4\-byte locations listed in the \f(CW\*(C`.fixup\*(C'\fR section,
16013 a table of 32\-bit addresses generated by this option.  For this to
16014 work, all objects linked together must be compiled with
16015 \&\fB\-mrelocatable\fR or \fB\-mrelocatable\-lib\fR.
16016 \&\fB\-mrelocatable\fR code aligns the stack to an 8\-byte boundary.
16017 .IP "\fB\-mrelocatable\-lib\fR" 4
16018 .IX Item "-mrelocatable-lib"
16019 .PD 0
16020 .IP "\fB\-mno\-relocatable\-lib\fR" 4
16021 .IX Item "-mno-relocatable-lib"
16022 .PD
16023 Like \fB\-mrelocatable\fR, \fB\-mrelocatable\-lib\fR generates a
16024 \&\f(CW\*(C`.fixup\*(C'\fR section to allow static executables to be relocated at
16025 run time, but \fB\-mrelocatable\-lib\fR does not use the smaller stack
16026 alignment of \fB\-mrelocatable\fR.  Objects compiled with
16027 \&\fB\-mrelocatable\-lib\fR may be linked with objects compiled with
16028 any combination of the \fB\-mrelocatable\fR options.
16029 .IP "\fB\-mno\-toc\fR" 4
16030 .IX Item "-mno-toc"
16031 .PD 0
16032 .IP "\fB\-mtoc\fR" 4
16033 .IX Item "-mtoc"
16034 .PD
16035 On System V.4 and embedded PowerPC systems do not (do) assume that
16036 register 2 contains a pointer to a global area pointing to the addresses
16037 used in the program.
16038 .IP "\fB\-mlittle\fR" 4
16039 .IX Item "-mlittle"
16040 .PD 0
16041 .IP "\fB\-mlittle\-endian\fR" 4
16042 .IX Item "-mlittle-endian"
16043 .PD
16044 On System V.4 and embedded PowerPC systems compile code for the
16045 processor in little-endian mode.  The \fB\-mlittle\-endian\fR option is
16046 the same as \fB\-mlittle\fR.
16047 .IP "\fB\-mbig\fR" 4
16048 .IX Item "-mbig"
16049 .PD 0
16050 .IP "\fB\-mbig\-endian\fR" 4
16051 .IX Item "-mbig-endian"
16052 .PD
16053 On System V.4 and embedded PowerPC systems compile code for the
16054 processor in big-endian mode.  The \fB\-mbig\-endian\fR option is
16055 the same as \fB\-mbig\fR.
16056 .IP "\fB\-mdynamic\-no\-pic\fR" 4
16057 .IX Item "-mdynamic-no-pic"
16058 On Darwin and Mac \s-1OS\s0 X systems, compile code so that it is not
16059 relocatable, but that its external references are relocatable.  The
16060 resulting code is suitable for applications, but not shared
16061 libraries.
16062 .IP "\fB\-msingle\-pic\-base\fR" 4
16063 .IX Item "-msingle-pic-base"
16064 Treat the register used for \s-1PIC\s0 addressing as read-only, rather than
16065 loading it in the prologue for each function.  The runtime system is
16066 responsible for initializing this register with an appropriate value
16067 before execution begins.
16068 .IP "\fB\-mprioritize\-restricted\-insns=\fR\fIpriority\fR" 4
16069 .IX Item "-mprioritize-restricted-insns=priority"
16070 This option controls the priority that is assigned to
16071 dispatch-slot restricted instructions during the second scheduling
16072 pass.  The argument \fIpriority\fR takes the value \fI0/1/2\fR to assign
16073 \&\fIno/highest/second\-highest\fR priority to dispatch slot restricted
16074 instructions.
16075 .IP "\fB\-msched\-costly\-dep=\fR\fIdependence_type\fR" 4
16076 .IX Item "-msched-costly-dep=dependence_type"
16077 This option controls which dependences are considered costly
16078 by the target during instruction scheduling.  The argument
16079 \&\fIdependence_type\fR takes one of the following values:
16080 \&\fIno\fR: no dependence is costly,
16081 \&\fIall\fR: all dependences are costly,
16082 \&\fItrue_store_to_load\fR: a true dependence from store to load is costly,
16083 \&\fIstore_to_load\fR: any dependence from store to load is costly,
16084 \&\fInumber\fR: any dependence for which latency >= \fInumber\fR is costly.
16085 .IP "\fB\-minsert\-sched\-nops=\fR\fIscheme\fR" 4
16086 .IX Item "-minsert-sched-nops=scheme"
16087 This option controls which nop insertion scheme will be used during
16088 the second scheduling pass.  The argument \fIscheme\fR takes one of the
16089 following values:
16090 \&\fIno\fR: Don't insert nops.
16091 \&\fIpad\fR: Pad with nops any dispatch group that has vacant issue slots,
16092 according to the scheduler's grouping.
16093 \&\fIregroup_exact\fR: Insert nops to force costly dependent insns into
16094 separate groups.  Insert exactly as many nops as needed to force an insn
16095 to a new group, according to the estimated processor grouping.
16096 \&\fInumber\fR: Insert nops to force costly dependent insns into
16097 separate groups.  Insert \fInumber\fR nops to force an insn to a new group.
16098 .IP "\fB\-mcall\-sysv\fR" 4
16099 .IX Item "-mcall-sysv"
16100 On System V.4 and embedded PowerPC systems compile code using calling
16101 conventions that adheres to the March 1995 draft of the System V
16102 Application Binary Interface, PowerPC processor supplement.  This is the
16103 default unless you configured \s-1GCC\s0 using \fBpowerpc\-*\-eabiaix\fR.
16104 .IP "\fB\-mcall\-sysv\-eabi\fR" 4
16105 .IX Item "-mcall-sysv-eabi"
16106 .PD 0
16107 .IP "\fB\-mcall\-eabi\fR" 4
16108 .IX Item "-mcall-eabi"
16109 .PD
16110 Specify both \fB\-mcall\-sysv\fR and \fB\-meabi\fR options.
16111 .IP "\fB\-mcall\-sysv\-noeabi\fR" 4
16112 .IX Item "-mcall-sysv-noeabi"
16113 Specify both \fB\-mcall\-sysv\fR and \fB\-mno\-eabi\fR options.
16114 .IP "\fB\-mcall\-aixdesc\fR" 4
16115 .IX Item "-mcall-aixdesc"
16116 On System V.4 and embedded PowerPC systems compile code for the \s-1AIX\s0
16117 operating system.
16118 .IP "\fB\-mcall\-linux\fR" 4
16119 .IX Item "-mcall-linux"
16120 On System V.4 and embedded PowerPC systems compile code for the
16121 Linux-based \s-1GNU\s0 system.
16122 .IP "\fB\-mcall\-freebsd\fR" 4
16123 .IX Item "-mcall-freebsd"
16124 On System V.4 and embedded PowerPC systems compile code for the
16125 FreeBSD operating system.
16126 .IP "\fB\-mcall\-netbsd\fR" 4
16127 .IX Item "-mcall-netbsd"
16128 On System V.4 and embedded PowerPC systems compile code for the
16129 NetBSD operating system.
16130 .IP "\fB\-mcall\-openbsd\fR" 4
16131 .IX Item "-mcall-openbsd"
16132 On System V.4 and embedded PowerPC systems compile code for the
16133 OpenBSD operating system.
16134 .IP "\fB\-maix\-struct\-return\fR" 4
16135 .IX Item "-maix-struct-return"
16136 Return all structures in memory (as specified by the \s-1AIX\s0 \s-1ABI\s0).
16137 .IP "\fB\-msvr4\-struct\-return\fR" 4
16138 .IX Item "-msvr4-struct-return"
16139 Return structures smaller than 8 bytes in registers (as specified by the
16140 \&\s-1SVR4\s0 \s-1ABI\s0).
16141 .IP "\fB\-mabi=\fR\fIabi-type\fR" 4
16142 .IX Item "-mabi=abi-type"
16143 Extend the current \s-1ABI\s0 with a particular extension, or remove such extension.
16144 Valid values are \fIaltivec\fR, \fIno-altivec\fR, \fIspe\fR,
16145 \&\fIno-spe\fR, \fIibmlongdouble\fR, \fIieeelongdouble\fR.
16146 .IP "\fB\-mabi=spe\fR" 4
16147 .IX Item "-mabi=spe"
16148 Extend the current \s-1ABI\s0 with \s-1SPE\s0 \s-1ABI\s0 extensions.  This does not change
16149 the default \s-1ABI\s0, instead it adds the \s-1SPE\s0 \s-1ABI\s0 extensions to the current
16150 \&\s-1ABI\s0.
16151 .IP "\fB\-mabi=no\-spe\fR" 4
16152 .IX Item "-mabi=no-spe"
16153 Disable Booke \s-1SPE\s0 \s-1ABI\s0 extensions for the current \s-1ABI\s0.
16154 .IP "\fB\-mabi=ibmlongdouble\fR" 4
16155 .IX Item "-mabi=ibmlongdouble"
16156 Change the current \s-1ABI\s0 to use \s-1IBM\s0 extended-precision long double.
16157 This is a PowerPC 32\-bit \s-1SYSV\s0 \s-1ABI\s0 option.
16158 .IP "\fB\-mabi=ieeelongdouble\fR" 4
16159 .IX Item "-mabi=ieeelongdouble"
16160 Change the current \s-1ABI\s0 to use \s-1IEEE\s0 extended-precision long double.
16161 This is a PowerPC 32\-bit Linux \s-1ABI\s0 option.
16162 .IP "\fB\-mprototype\fR" 4
16163 .IX Item "-mprototype"
16164 .PD 0
16165 .IP "\fB\-mno\-prototype\fR" 4
16166 .IX Item "-mno-prototype"
16167 .PD
16168 On System V.4 and embedded PowerPC systems assume that all calls to
16169 variable argument functions are properly prototyped.  Otherwise, the
16170 compiler must insert an instruction before every non prototyped call to
16171 set or clear bit 6 of the condition code register (\fI\s-1CR\s0\fR) to
16172 indicate whether floating-point values were passed in the floating-point
16173 registers in case the function takes variable arguments.  With
16174 \&\fB\-mprototype\fR, only calls to prototyped variable argument functions
16175 will set or clear the bit.
16176 .IP "\fB\-msim\fR" 4
16177 .IX Item "-msim"
16178 On embedded PowerPC systems, assume that the startup module is called
16179 \&\fIsim\-crt0.o\fR and that the standard C libraries are \fIlibsim.a\fR and
16180 \&\fIlibc.a\fR.  This is the default for \fBpowerpc\-*\-eabisim\fR
16181 configurations.
16182 .IP "\fB\-mmvme\fR" 4
16183 .IX Item "-mmvme"
16184 On embedded PowerPC systems, assume that the startup module is called
16185 \&\fIcrt0.o\fR and the standard C libraries are \fIlibmvme.a\fR and
16186 \&\fIlibc.a\fR.
16187 .IP "\fB\-mads\fR" 4
16188 .IX Item "-mads"
16189 On embedded PowerPC systems, assume that the startup module is called
16190 \&\fIcrt0.o\fR and the standard C libraries are \fIlibads.a\fR and
16191 \&\fIlibc.a\fR.
16192 .IP "\fB\-myellowknife\fR" 4
16193 .IX Item "-myellowknife"
16194 On embedded PowerPC systems, assume that the startup module is called
16195 \&\fIcrt0.o\fR and the standard C libraries are \fIlibyk.a\fR and
16196 \&\fIlibc.a\fR.
16197 .IP "\fB\-mvxworks\fR" 4
16198 .IX Item "-mvxworks"
16199 On System V.4 and embedded PowerPC systems, specify that you are
16200 compiling for a VxWorks system.
16201 .IP "\fB\-memb\fR" 4
16202 .IX Item "-memb"
16203 On embedded PowerPC systems, set the \fI\s-1PPC_EMB\s0\fR bit in the \s-1ELF\s0 flags
16204 header to indicate that \fBeabi\fR extended relocations are used.
16205 .IP "\fB\-meabi\fR" 4
16206 .IX Item "-meabi"
16207 .PD 0
16208 .IP "\fB\-mno\-eabi\fR" 4
16209 .IX Item "-mno-eabi"
16210 .PD
16211 On System V.4 and embedded PowerPC systems do (do not) adhere to the
16212 Embedded Applications Binary Interface (eabi) which is a set of
16213 modifications to the System V.4 specifications.  Selecting \fB\-meabi\fR
16214 means that the stack is aligned to an 8\-byte boundary, a function
16215 \&\f(CW\*(C`_\|_eabi\*(C'\fR is called to from \f(CW\*(C`main\*(C'\fR to set up the eabi
16216 environment, and the \fB\-msdata\fR option can use both \f(CW\*(C`r2\*(C'\fR and
16217 \&\f(CW\*(C`r13\*(C'\fR to point to two separate small data areas.  Selecting
16218 \&\fB\-mno\-eabi\fR means that the stack is aligned to a 16\-byte boundary,
16219 do not call an initialization function from \f(CW\*(C`main\*(C'\fR, and the
16220 \&\fB\-msdata\fR option will only use \f(CW\*(C`r13\*(C'\fR to point to a single
16221 small data area.  The \fB\-meabi\fR option is on by default if you
16222 configured \s-1GCC\s0 using one of the \fBpowerpc*\-*\-eabi*\fR options.
16223 .IP "\fB\-msdata=eabi\fR" 4
16224 .IX Item "-msdata=eabi"
16225 On System V.4 and embedded PowerPC systems, put small initialized
16226 \&\f(CW\*(C`const\*(C'\fR global and static data in the \fB.sdata2\fR section, which
16227 is pointed to by register \f(CW\*(C`r2\*(C'\fR.  Put small initialized
16228 non\-\f(CW\*(C`const\*(C'\fR global and static data in the \fB.sdata\fR section,
16229 which is pointed to by register \f(CW\*(C`r13\*(C'\fR.  Put small uninitialized
16230 global and static data in the \fB.sbss\fR section, which is adjacent to
16231 the \fB.sdata\fR section.  The \fB\-msdata=eabi\fR option is
16232 incompatible with the \fB\-mrelocatable\fR option.  The
16233 \&\fB\-msdata=eabi\fR option also sets the \fB\-memb\fR option.
16234 .IP "\fB\-msdata=sysv\fR" 4
16235 .IX Item "-msdata=sysv"
16236 On System V.4 and embedded PowerPC systems, put small global and static
16237 data in the \fB.sdata\fR section, which is pointed to by register
16238 \&\f(CW\*(C`r13\*(C'\fR.  Put small uninitialized global and static data in the
16239 \&\fB.sbss\fR section, which is adjacent to the \fB.sdata\fR section.
16240 The \fB\-msdata=sysv\fR option is incompatible with the
16241 \&\fB\-mrelocatable\fR option.
16242 .IP "\fB\-msdata=default\fR" 4
16243 .IX Item "-msdata=default"
16244 .PD 0
16245 .IP "\fB\-msdata\fR" 4
16246 .IX Item "-msdata"
16247 .PD
16248 On System V.4 and embedded PowerPC systems, if \fB\-meabi\fR is used,
16249 compile code the same as \fB\-msdata=eabi\fR, otherwise compile code the
16250 same as \fB\-msdata=sysv\fR.
16251 .IP "\fB\-msdata=data\fR" 4
16252 .IX Item "-msdata=data"
16253 On System V.4 and embedded PowerPC systems, put small global
16254 data in the \fB.sdata\fR section.  Put small uninitialized global
16255 data in the \fB.sbss\fR section.  Do not use register \f(CW\*(C`r13\*(C'\fR
16256 to address small data however.  This is the default behavior unless
16257 other \fB\-msdata\fR options are used.
16258 .IP "\fB\-msdata=none\fR" 4
16259 .IX Item "-msdata=none"
16260 .PD 0
16261 .IP "\fB\-mno\-sdata\fR" 4
16262 .IX Item "-mno-sdata"
16263 .PD
16264 On embedded PowerPC systems, put all initialized global and static data
16265 in the \fB.data\fR section, and all uninitialized data in the
16266 \&\fB.bss\fR section.
16267 .IP "\fB\-mblock\-move\-inline\-limit=\fR\fInum\fR" 4
16268 .IX Item "-mblock-move-inline-limit=num"
16269 Inline all block moves (such as calls to \f(CW\*(C`memcpy\*(C'\fR or structure
16270 copies) less than or equal to \fInum\fR bytes.  The minimum value for
16271 \&\fInum\fR is 32 bytes on 32\-bit targets and 64 bytes on 64\-bit
16272 targets.  The default value is target-specific.
16273 .IP "\fB\-G\fR \fInum\fR" 4
16274 .IX Item "-G num"
16275 On embedded PowerPC systems, put global and static items less than or
16276 equal to \fInum\fR bytes into the small data or bss sections instead of
16277 the normal data or bss section.  By default, \fInum\fR is 8.  The
16278 \&\fB\-G\fR \fInum\fR switch is also passed to the linker.
16279 All modules should be compiled with the same \fB\-G\fR \fInum\fR value.
16280 .IP "\fB\-mregnames\fR" 4
16281 .IX Item "-mregnames"
16282 .PD 0
16283 .IP "\fB\-mno\-regnames\fR" 4
16284 .IX Item "-mno-regnames"
16285 .PD
16286 On System V.4 and embedded PowerPC systems do (do not) emit register
16287 names in the assembly language output using symbolic forms.
16288 .IP "\fB\-mlongcall\fR" 4
16289 .IX Item "-mlongcall"
16290 .PD 0
16291 .IP "\fB\-mno\-longcall\fR" 4
16292 .IX Item "-mno-longcall"
16293 .PD
16294 By default assume that all calls are far away so that a longer more
16295 expensive calling sequence is required.  This is required for calls
16296 further than 32 megabytes (33,554,432 bytes) from the current location.
16297 A short call will be generated if the compiler knows
16298 the call cannot be that far away.  This setting can be overridden by
16299 the \f(CW\*(C`shortcall\*(C'\fR function attribute, or by \f(CW\*(C`#pragma
16300 longcall(0)\*(C'\fR.
16301 .Sp
16302 Some linkers are capable of detecting out-of-range calls and generating
16303 glue code on the fly.  On these systems, long calls are unnecessary and
16304 generate slower code.  As of this writing, the \s-1AIX\s0 linker can do this,
16305 as can the \s-1GNU\s0 linker for PowerPC/64.  It is planned to add this feature
16306 to the \s-1GNU\s0 linker for 32\-bit PowerPC systems as well.
16307 .Sp
16308 On Darwin/PPC systems, \f(CW\*(C`#pragma longcall\*(C'\fR will generate \*(L"jbsr
16309 callee, L42\*(R", plus a \*(L"branch island\*(R" (glue code).  The two target
16310 addresses represent the callee and the \*(L"branch island\*(R".  The
16311 Darwin/PPC linker will prefer the first address and generate a \*(L"bl
16312 callee\*(R" if the \s-1PPC\s0 \*(L"bl\*(R" instruction will reach the callee directly;
16313 otherwise, the linker will generate \*(L"bl L42\*(R" to call the \*(L"branch
16314 island\*(R".  The \*(L"branch island\*(R" is appended to the body of the
16315 calling function; it computes the full 32\-bit address of the callee
16316 and jumps to it.
16317 .Sp
16318 On Mach-O (Darwin) systems, this option directs the compiler emit to
16319 the glue for every direct call, and the Darwin linker decides whether
16320 to use or discard it.
16321 .Sp
16322 In the future, we may cause \s-1GCC\s0 to ignore all longcall specifications
16323 when the linker is known to generate glue.
16324 .IP "\fB\-mtls\-markers\fR" 4
16325 .IX Item "-mtls-markers"
16326 .PD 0
16327 .IP "\fB\-mno\-tls\-markers\fR" 4
16328 .IX Item "-mno-tls-markers"
16329 .PD
16330 Mark (do not mark) calls to \f(CW\*(C`_\|_tls_get_addr\*(C'\fR with a relocation
16331 specifying the function argument.  The relocation allows ld to
16332 reliably associate function call with argument setup instructions for
16333 \&\s-1TLS\s0 optimization, which in turn allows gcc to better schedule the
16334 sequence.
16335 .IP "\fB\-pthread\fR" 4
16336 .IX Item "-pthread"
16337 Adds support for multithreading with the \fIpthreads\fR library.
16338 This option sets flags for both the preprocessor and linker.
16339 .IP "\fB\-mrecip\fR" 4
16340 .IX Item "-mrecip"
16341 .PD 0
16342 .IP "\fB\-mno\-recip\fR" 4
16343 .IX Item "-mno-recip"
16344 .PD
16345 This option will enable \s-1GCC\s0 to use the reciprocal estimate and
16346 reciprocal square root estimate instructions with additional
16347 Newton-Raphson steps to increase precision instead of doing a divide or
16348 square root and divide for floating-point arguments.  You should use
16349 the \fB\-ffast\-math\fR option when using \fB\-mrecip\fR (or at
16350 least \fB\-funsafe\-math\-optimizations\fR,
16351 \&\fB\-finite\-math\-only\fR, \fB\-freciprocal\-math\fR and
16352 \&\fB\-fno\-trapping\-math\fR).  Note that while the throughput of the
16353 sequence is generally higher than the throughput of the non-reciprocal
16354 instruction, the precision of the sequence can be decreased by up to 2
16355 ulp (i.e. the inverse of 1.0 equals 0.99999994) for reciprocal square
16356 roots.
16357 .IP "\fB\-mrecip=\fR\fIopt\fR" 4
16358 .IX Item "-mrecip=opt"
16359 This option allows to control which reciprocal estimate instructions
16360 may be used.  \fIopt\fR is a comma separated list of options, which may
16361 be preceded by a \f(CW\*(C`!\*(C'\fR to invert the option:
16362 \&\f(CW\*(C`all\*(C'\fR: enable all estimate instructions,
16363 \&\f(CW\*(C`default\*(C'\fR: enable the default instructions, equivalent to \fB\-mrecip\fR,
16364 \&\f(CW\*(C`none\*(C'\fR: disable all estimate instructions, equivalent to \fB\-mno\-recip\fR;
16365 \&\f(CW\*(C`div\*(C'\fR: enable the reciprocal approximation instructions for both single and double precision;
16366 \&\f(CW\*(C`divf\*(C'\fR: enable the single-precision reciprocal approximation instructions;
16367 \&\f(CW\*(C`divd\*(C'\fR: enable the double-precision reciprocal approximation instructions;
16368 \&\f(CW\*(C`rsqrt\*(C'\fR: enable the reciprocal square root approximation instructions for both single and double precision;
16369 \&\f(CW\*(C`rsqrtf\*(C'\fR: enable the single-precision reciprocal square root approximation instructions;
16370 \&\f(CW\*(C`rsqrtd\*(C'\fR: enable the double-precision reciprocal square root approximation instructions;
16371 .Sp
16372 So for example, \fB\-mrecip=all,!rsqrtd\fR would enable the
16373 all of the reciprocal estimate instructions, except for the
16374 \&\f(CW\*(C`FRSQRTE\*(C'\fR, \f(CW\*(C`XSRSQRTEDP\*(C'\fR, and \f(CW\*(C`XVRSQRTEDP\*(C'\fR instructions
16375 which handle the double-precision reciprocal square root calculations.
16376 .IP "\fB\-mrecip\-precision\fR" 4
16377 .IX Item "-mrecip-precision"
16378 .PD 0
16379 .IP "\fB\-mno\-recip\-precision\fR" 4
16380 .IX Item "-mno-recip-precision"
16381 .PD
16382 Assume (do not assume) that the reciprocal estimate instructions
16383 provide higher-precision estimates than is mandated by the PowerPC
16384 \&\s-1ABI\s0.  Selecting \fB\-mcpu=power6\fR or \fB\-mcpu=power7\fR
16385 automatically selects \fB\-mrecip\-precision\fR.  The double-precision 
16386 square root estimate instructions are not generated by
16387 default on low-precision machines, since they do not provide an
16388 estimate that converges after three steps.
16389 .IP "\fB\-mveclibabi=\fR\fItype\fR" 4
16390 .IX Item "-mveclibabi=type"
16391 Specifies the \s-1ABI\s0 type to use for vectorizing intrinsics using an
16392 external library.  The only type supported at present is \f(CW\*(C`mass\*(C'\fR,
16393 which specifies to use \s-1IBM\s0's Mathematical Acceleration Subsystem
16394 (\s-1MASS\s0) libraries for vectorizing intrinsics using external libraries.
16395 \&\s-1GCC\s0 will currently emit calls to \f(CW\*(C`acosd2\*(C'\fR, \f(CW\*(C`acosf4\*(C'\fR,
16396 \&\f(CW\*(C`acoshd2\*(C'\fR, \f(CW\*(C`acoshf4\*(C'\fR, \f(CW\*(C`asind2\*(C'\fR, \f(CW\*(C`asinf4\*(C'\fR,
16397 \&\f(CW\*(C`asinhd2\*(C'\fR, \f(CW\*(C`asinhf4\*(C'\fR, \f(CW\*(C`atan2d2\*(C'\fR, \f(CW\*(C`atan2f4\*(C'\fR,
16398 \&\f(CW\*(C`atand2\*(C'\fR, \f(CW\*(C`atanf4\*(C'\fR, \f(CW\*(C`atanhd2\*(C'\fR, \f(CW\*(C`atanhf4\*(C'\fR,
16399 \&\f(CW\*(C`cbrtd2\*(C'\fR, \f(CW\*(C`cbrtf4\*(C'\fR, \f(CW\*(C`cosd2\*(C'\fR, \f(CW\*(C`cosf4\*(C'\fR,
16400 \&\f(CW\*(C`coshd2\*(C'\fR, \f(CW\*(C`coshf4\*(C'\fR, \f(CW\*(C`erfcd2\*(C'\fR, \f(CW\*(C`erfcf4\*(C'\fR,
16401 \&\f(CW\*(C`erfd2\*(C'\fR, \f(CW\*(C`erff4\*(C'\fR, \f(CW\*(C`exp2d2\*(C'\fR, \f(CW\*(C`exp2f4\*(C'\fR,
16402 \&\f(CW\*(C`expd2\*(C'\fR, \f(CW\*(C`expf4\*(C'\fR, \f(CW\*(C`expm1d2\*(C'\fR, \f(CW\*(C`expm1f4\*(C'\fR,
16403 \&\f(CW\*(C`hypotd2\*(C'\fR, \f(CW\*(C`hypotf4\*(C'\fR, \f(CW\*(C`lgammad2\*(C'\fR, \f(CW\*(C`lgammaf4\*(C'\fR,
16404 \&\f(CW\*(C`log10d2\*(C'\fR, \f(CW\*(C`log10f4\*(C'\fR, \f(CW\*(C`log1pd2\*(C'\fR, \f(CW\*(C`log1pf4\*(C'\fR,
16405 \&\f(CW\*(C`log2d2\*(C'\fR, \f(CW\*(C`log2f4\*(C'\fR, \f(CW\*(C`logd2\*(C'\fR, \f(CW\*(C`logf4\*(C'\fR,
16406 \&\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,
16407 \&\f(CW\*(C`sinhf4\*(C'\fR, \f(CW\*(C`sqrtd2\*(C'\fR, \f(CW\*(C`sqrtf4\*(C'\fR, \f(CW\*(C`tand2\*(C'\fR,
16408 \&\f(CW\*(C`tanf4\*(C'\fR, \f(CW\*(C`tanhd2\*(C'\fR, and \f(CW\*(C`tanhf4\*(C'\fR when generating code
16409 for power7.  Both \fB\-ftree\-vectorize\fR and
16410 \&\fB\-funsafe\-math\-optimizations\fR have to be enabled.  The \s-1MASS\s0
16411 libraries will have to be specified at link time.
16412 .IP "\fB\-mfriz\fR" 4
16413 .IX Item "-mfriz"
16414 .PD 0
16415 .IP "\fB\-mno\-friz\fR" 4
16416 .IX Item "-mno-friz"
16417 .PD
16418 Generate (do not generate) the \f(CW\*(C`friz\*(C'\fR instruction when the
16419 \&\fB\-funsafe\-math\-optimizations\fR option is used to optimize
16420 rounding of floating-point values to 64\-bit integer and back to floating
16421 point.  The \f(CW\*(C`friz\*(C'\fR instruction does not return the same value if
16422 the floating-point number is too large to fit in an integer.
16423 .IP "\fB\-mpointers\-to\-nested\-functions\fR" 4
16424 .IX Item "-mpointers-to-nested-functions"
16425 .PD 0
16426 .IP "\fB\-mno\-pointers\-to\-nested\-functions\fR" 4
16427 .IX Item "-mno-pointers-to-nested-functions"
16428 .PD
16429 Generate (do not generate) code to load up the static chain register
16430 (\fIr11\fR) when calling through a pointer on \s-1AIX\s0 and 64\-bit Linux
16431 systems where a function pointer points to a 3\-word descriptor giving
16432 the function address, \s-1TOC\s0 value to be loaded in register \fIr2\fR, and
16433 static chain value to be loaded in register \fIr11\fR.  The
16434 \&\fB\-mpointers\-to\-nested\-functions\fR is on by default.  You will
16435 not be able to call through pointers to nested functions or pointers
16436 to functions compiled in other languages that use the static chain if
16437 you use the \fB\-mno\-pointers\-to\-nested\-functions\fR.
16438 .IP "\fB\-msave\-toc\-indirect\fR" 4
16439 .IX Item "-msave-toc-indirect"
16440 .PD 0
16441 .IP "\fB\-mno\-save\-toc\-indirect\fR" 4
16442 .IX Item "-mno-save-toc-indirect"
16443 .PD
16444 Generate (do not generate) code to save the \s-1TOC\s0 value in the reserved
16445 stack location in the function prologue if the function calls through
16446 a pointer on \s-1AIX\s0 and 64\-bit Linux systems.  If the \s-1TOC\s0 value is not
16447 saved in the prologue, it is saved just before the call through the
16448 pointer.  The \fB\-mno\-save\-toc\-indirect\fR option is the default.
16449 .PP
16450 \fI\s-1RX\s0 Options\fR
16451 .IX Subsection "RX Options"
16452 .PP
16453 These command-line options are defined for \s-1RX\s0 targets:
16454 .IP "\fB\-m64bit\-doubles\fR" 4
16455 .IX Item "-m64bit-doubles"
16456 .PD 0
16457 .IP "\fB\-m32bit\-doubles\fR" 4
16458 .IX Item "-m32bit-doubles"
16459 .PD
16460 Make the \f(CW\*(C`double\*(C'\fR data type be 64 bits (\fB\-m64bit\-doubles\fR)
16461 or 32 bits (\fB\-m32bit\-doubles\fR) in size.  The default is
16462 \&\fB\-m32bit\-doubles\fR.  \fINote\fR \s-1RX\s0 floating-point hardware only
16463 works on 32\-bit values, which is why the default is
16464 \&\fB\-m32bit\-doubles\fR.
16465 .IP "\fB\-fpu\fR" 4
16466 .IX Item "-fpu"
16467 .PD 0
16468 .IP "\fB\-nofpu\fR" 4
16469 .IX Item "-nofpu"
16470 .PD
16471 Enables (\fB\-fpu\fR) or disables (\fB\-nofpu\fR) the use of \s-1RX\s0
16472 floating-point hardware.  The default is enabled for the \fI\s-1RX600\s0\fR
16473 series and disabled for the \fI\s-1RX200\s0\fR series.
16474 .Sp
16475 Floating-point instructions will only be generated for 32\-bit floating-point 
16476 values however, so if the \fB\-m64bit\-doubles\fR option is in
16477 use then the \s-1FPU\s0 hardware will not be used for doubles.
16478 .Sp
16479 \&\fINote\fR If the \fB\-fpu\fR option is enabled then
16480 \&\fB\-funsafe\-math\-optimizations\fR is also enabled automatically.
16481 This is because the \s-1RX\s0 \s-1FPU\s0 instructions are themselves unsafe.
16482 .IP "\fB\-mcpu=\fR\fIname\fR" 4
16483 .IX Item "-mcpu=name"
16484 Selects the type of \s-1RX\s0 \s-1CPU\s0 to be targeted.  Currently three types are
16485 supported, the generic \fI\s-1RX600\s0\fR and \fI\s-1RX200\s0\fR series hardware and
16486 the specific \fI\s-1RX610\s0\fR \s-1CPU\s0.  The default is \fI\s-1RX600\s0\fR.
16487 .Sp
16488 The only difference between \fI\s-1RX600\s0\fR and \fI\s-1RX610\s0\fR is that the
16489 \&\fI\s-1RX610\s0\fR does not support the \f(CW\*(C`MVTIPL\*(C'\fR instruction.
16490 .Sp
16491 The \fI\s-1RX200\s0\fR series does not have a hardware floating-point unit
16492 and so \fB\-nofpu\fR is enabled by default when this type is
16493 selected.
16494 .IP "\fB\-mbig\-endian\-data\fR" 4
16495 .IX Item "-mbig-endian-data"
16496 .PD 0
16497 .IP "\fB\-mlittle\-endian\-data\fR" 4
16498 .IX Item "-mlittle-endian-data"
16499 .PD
16500 Store data (but not code) in the big-endian format.  The default is
16501 \&\fB\-mlittle\-endian\-data\fR, i.e. to store data in the little-endian
16502 format.
16503 .IP "\fB\-msmall\-data\-limit=\fR\fIN\fR" 4
16504 .IX Item "-msmall-data-limit=N"
16505 Specifies the maximum size in bytes of global and static variables
16506 which can be placed into the small data area.  Using the small data
16507 area can lead to smaller and faster code, but the size of area is
16508 limited and it is up to the programmer to ensure that the area does
16509 not overflow.  Also when the small data area is used one of the \s-1RX\s0's
16510 registers (usually \f(CW\*(C`r13\*(C'\fR) is reserved for use pointing to this
16511 area, so it is no longer available for use by the compiler.  This
16512 could result in slower and/or larger code if variables which once
16513 could have been held in the reserved register are now pushed onto the
16514 stack.
16515 .Sp
16516 Note, common variables (variables that have not been initialized) and
16517 constants are not placed into the small data area as they are assigned
16518 to other sections in the output executable.
16519 .Sp
16520 The default value is zero, which disables this feature.  Note, this
16521 feature is not enabled by default with higher optimization levels
16522 (\fB\-O2\fR etc) because of the potentially detrimental effects of
16523 reserving a register.  It is up to the programmer to experiment and
16524 discover whether this feature is of benefit to their program.  See the
16525 description of the \fB\-mpid\fR option for a description of how the
16526 actual register to hold the small data area pointer is chosen.
16527 .IP "\fB\-msim\fR" 4
16528 .IX Item "-msim"
16529 .PD 0
16530 .IP "\fB\-mno\-sim\fR" 4
16531 .IX Item "-mno-sim"
16532 .PD
16533 Use the simulator runtime.  The default is to use the libgloss board
16534 specific runtime.
16535 .IP "\fB\-mas100\-syntax\fR" 4
16536 .IX Item "-mas100-syntax"
16537 .PD 0
16538 .IP "\fB\-mno\-as100\-syntax\fR" 4
16539 .IX Item "-mno-as100-syntax"
16540 .PD
16541 When generating assembler output use a syntax that is compatible with
16542 Renesas's \s-1AS100\s0 assembler.  This syntax can also be handled by the \s-1GAS\s0
16543 assembler but it has some restrictions so generating it is not the
16544 default option.
16545 .IP "\fB\-mmax\-constant\-size=\fR\fIN\fR" 4
16546 .IX Item "-mmax-constant-size=N"
16547 Specifies the maximum size, in bytes, of a constant that can be used as
16548 an operand in a \s-1RX\s0 instruction.  Although the \s-1RX\s0 instruction set does
16549 allow constants of up to 4 bytes in length to be used in instructions,
16550 a longer value equates to a longer instruction.  Thus in some
16551 circumstances it can be beneficial to restrict the size of constants
16552 that are used in instructions.  Constants that are too big are instead
16553 placed into a constant pool and referenced via register indirection.
16554 .Sp
16555 The value \fIN\fR can be between 0 and 4.  A value of 0 (the default)
16556 or 4 means that constants of any size are allowed.
16557 .IP "\fB\-mrelax\fR" 4
16558 .IX Item "-mrelax"
16559 Enable linker relaxation.  Linker relaxation is a process whereby the
16560 linker will attempt to reduce the size of a program by finding shorter
16561 versions of various instructions.  Disabled by default.
16562 .IP "\fB\-mint\-register=\fR\fIN\fR" 4
16563 .IX Item "-mint-register=N"
16564 Specify the number of registers to reserve for fast interrupt handler
16565 functions.  The value \fIN\fR can be between 0 and 4.  A value of 1
16566 means that register \f(CW\*(C`r13\*(C'\fR will be reserved for the exclusive use
16567 of fast interrupt handlers.  A value of 2 reserves \f(CW\*(C`r13\*(C'\fR and
16568 \&\f(CW\*(C`r12\*(C'\fR.  A value of 3 reserves \f(CW\*(C`r13\*(C'\fR, \f(CW\*(C`r12\*(C'\fR and
16569 \&\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.
16570 A value of 0, the default, does not reserve any registers.
16571 .IP "\fB\-msave\-acc\-in\-interrupts\fR" 4
16572 .IX Item "-msave-acc-in-interrupts"
16573 Specifies that interrupt handler functions should preserve the
16574 accumulator register.  This is only necessary if normal code might use
16575 the accumulator register, for example because it performs 64\-bit
16576 multiplications.  The default is to ignore the accumulator as this
16577 makes the interrupt handlers faster.
16578 .IP "\fB\-mpid\fR" 4
16579 .IX Item "-mpid"
16580 .PD 0
16581 .IP "\fB\-mno\-pid\fR" 4
16582 .IX Item "-mno-pid"
16583 .PD
16584 Enables the generation of position independent data.  When enabled any
16585 access to constant data will done via an offset from a base address
16586 held in a register.  This allows the location of constant data to be
16587 determined at run time without requiring the executable to be
16588 relocated, which is a benefit to embedded applications with tight
16589 memory constraints.  Data that can be modified is not affected by this
16590 option.
16591 .Sp
16592 Note, using this feature reserves a register, usually \f(CW\*(C`r13\*(C'\fR, for
16593 the constant data base address.  This can result in slower and/or
16594 larger code, especially in complicated functions.
16595 .Sp
16596 The actual register chosen to hold the constant data base address
16597 depends upon whether the \fB\-msmall\-data\-limit\fR and/or the
16598 \&\fB\-mint\-register\fR command-line options are enabled.  Starting
16599 with register \f(CW\*(C`r13\*(C'\fR and proceeding downwards, registers are
16600 allocated first to satisfy the requirements of \fB\-mint\-register\fR,
16601 then \fB\-mpid\fR and finally \fB\-msmall\-data\-limit\fR.  Thus it
16602 is possible for the small data area register to be \f(CW\*(C`r8\*(C'\fR if both
16603 \&\fB\-mint\-register=4\fR and \fB\-mpid\fR are specified on the
16604 command line.
16605 .Sp
16606 By default this feature is not enabled.  The default can be restored
16607 via the \fB\-mno\-pid\fR command-line option.
16608 .PP
16609 \&\fINote:\fR The generic \s-1GCC\s0 command-line option \fB\-ffixed\-\fR\fIreg\fR
16610 has special significance to the \s-1RX\s0 port when used with the
16611 \&\f(CW\*(C`interrupt\*(C'\fR function attribute.  This attribute indicates a
16612 function intended to process fast interrupts.  \s-1GCC\s0 will will ensure
16613 that it only uses the registers \f(CW\*(C`r10\*(C'\fR, \f(CW\*(C`r11\*(C'\fR, \f(CW\*(C`r12\*(C'\fR
16614 and/or \f(CW\*(C`r13\*(C'\fR and only provided that the normal use of the
16615 corresponding registers have been restricted via the
16616 \&\fB\-ffixed\-\fR\fIreg\fR or \fB\-mint\-register\fR command-line
16617 options.
16618 .PP
16619 \fIS/390 and zSeries Options\fR
16620 .IX Subsection "S/390 and zSeries Options"
16621 .PP
16622 These are the \fB\-m\fR options defined for the S/390 and zSeries architecture.
16623 .IP "\fB\-mhard\-float\fR" 4
16624 .IX Item "-mhard-float"
16625 .PD 0
16626 .IP "\fB\-msoft\-float\fR" 4
16627 .IX Item "-msoft-float"
16628 .PD
16629 Use (do not use) the hardware floating-point instructions and registers
16630 for floating-point operations.  When \fB\-msoft\-float\fR is specified,
16631 functions in \fIlibgcc.a\fR will be used to perform floating-point
16632 operations.  When \fB\-mhard\-float\fR is specified, the compiler
16633 generates \s-1IEEE\s0 floating-point instructions.  This is the default.
16634 .IP "\fB\-mhard\-dfp\fR" 4
16635 .IX Item "-mhard-dfp"
16636 .PD 0
16637 .IP "\fB\-mno\-hard\-dfp\fR" 4
16638 .IX Item "-mno-hard-dfp"
16639 .PD
16640 Use (do not use) the hardware decimal-floating-point instructions for
16641 decimal-floating-point operations.  When \fB\-mno\-hard\-dfp\fR is
16642 specified, functions in \fIlibgcc.a\fR will be used to perform
16643 decimal-floating-point operations.  When \fB\-mhard\-dfp\fR is
16644 specified, the compiler generates decimal-floating-point hardware
16645 instructions.  This is the default for \fB\-march=z9\-ec\fR or higher.
16646 .IP "\fB\-mlong\-double\-64\fR" 4
16647 .IX Item "-mlong-double-64"
16648 .PD 0
16649 .IP "\fB\-mlong\-double\-128\fR" 4
16650 .IX Item "-mlong-double-128"
16651 .PD
16652 These switches control the size of \f(CW\*(C`long double\*(C'\fR type. A size
16653 of 64 bits makes the \f(CW\*(C`long double\*(C'\fR type equivalent to the \f(CW\*(C`double\*(C'\fR
16654 type. This is the default.
16655 .IP "\fB\-mbackchain\fR" 4
16656 .IX Item "-mbackchain"
16657 .PD 0
16658 .IP "\fB\-mno\-backchain\fR" 4
16659 .IX Item "-mno-backchain"
16660 .PD
16661 Store (do not store) the address of the caller's frame as backchain pointer
16662 into the callee's stack frame.
16663 A backchain may be needed to allow debugging using tools that do not understand
16664 \&\s-1DWARF\-2\s0 call frame information.
16665 When \fB\-mno\-packed\-stack\fR is in effect, the backchain pointer is stored
16666 at the bottom of the stack frame; when \fB\-mpacked\-stack\fR is in effect,
16667 the backchain is placed into the topmost word of the 96/160 byte register
16668 save area.
16669 .Sp
16670 In general, code compiled with \fB\-mbackchain\fR is call-compatible with
16671 code compiled with \fB\-mmo\-backchain\fR; however, use of the backchain
16672 for debugging purposes usually requires that the whole binary is built with
16673 \&\fB\-mbackchain\fR.  Note that the combination of \fB\-mbackchain\fR,
16674 \&\fB\-mpacked\-stack\fR and \fB\-mhard\-float\fR is not supported.  In order
16675 to build a linux kernel use \fB\-msoft\-float\fR.
16676 .Sp
16677 The default is to not maintain the backchain.
16678 .IP "\fB\-mpacked\-stack\fR" 4
16679 .IX Item "-mpacked-stack"
16680 .PD 0
16681 .IP "\fB\-mno\-packed\-stack\fR" 4
16682 .IX Item "-mno-packed-stack"
16683 .PD
16684 Use (do not use) the packed stack layout.  When \fB\-mno\-packed\-stack\fR is
16685 specified, the compiler uses the all fields of the 96/160 byte register save
16686 area only for their default purpose; unused fields still take up stack space.
16687 When \fB\-mpacked\-stack\fR is specified, register save slots are densely
16688 packed at the top of the register save area; unused space is reused for other
16689 purposes, allowing for more efficient use of the available stack space.
16690 However, when \fB\-mbackchain\fR is also in effect, the topmost word of
16691 the save area is always used to store the backchain, and the return address
16692 register is always saved two words below the backchain.
16693 .Sp
16694 As long as the stack frame backchain is not used, code generated with
16695 \&\fB\-mpacked\-stack\fR is call-compatible with code generated with
16696 \&\fB\-mno\-packed\-stack\fR.  Note that some non-FSF releases of \s-1GCC\s0 2.95 for
16697 S/390 or zSeries generated code that uses the stack frame backchain at run
16698 time, not just for debugging purposes.  Such code is not call-compatible
16699 with code compiled with \fB\-mpacked\-stack\fR.  Also, note that the
16700 combination of \fB\-mbackchain\fR,
16701 \&\fB\-mpacked\-stack\fR and \fB\-mhard\-float\fR is not supported.  In order
16702 to build a linux kernel use \fB\-msoft\-float\fR.
16703 .Sp
16704 The default is to not use the packed stack layout.
16705 .IP "\fB\-msmall\-exec\fR" 4
16706 .IX Item "-msmall-exec"
16707 .PD 0
16708 .IP "\fB\-mno\-small\-exec\fR" 4
16709 .IX Item "-mno-small-exec"
16710 .PD
16711 Generate (or do not generate) code using the \f(CW\*(C`bras\*(C'\fR instruction
16712 to do subroutine calls.
16713 This only works reliably if the total executable size does not
16714 exceed 64k.  The default is to use the \f(CW\*(C`basr\*(C'\fR instruction instead,
16715 which does not have this limitation.
16716 .IP "\fB\-m64\fR" 4
16717 .IX Item "-m64"
16718 .PD 0
16719 .IP "\fB\-m31\fR" 4
16720 .IX Item "-m31"
16721 .PD
16722 When \fB\-m31\fR is specified, generate code compliant to the
16723 GNU/Linux for S/390 \s-1ABI\s0.  When \fB\-m64\fR is specified, generate
16724 code compliant to the GNU/Linux for zSeries \s-1ABI\s0.  This allows \s-1GCC\s0 in
16725 particular to generate 64\-bit instructions.  For the \fBs390\fR
16726 targets, the default is \fB\-m31\fR, while the \fBs390x\fR
16727 targets default to \fB\-m64\fR.
16728 .IP "\fB\-mzarch\fR" 4
16729 .IX Item "-mzarch"
16730 .PD 0
16731 .IP "\fB\-mesa\fR" 4
16732 .IX Item "-mesa"
16733 .PD
16734 When \fB\-mzarch\fR is specified, generate code using the
16735 instructions available on z/Architecture.
16736 When \fB\-mesa\fR is specified, generate code using the
16737 instructions available on \s-1ESA/390\s0.  Note that \fB\-mesa\fR is
16738 not possible with \fB\-m64\fR.
16739 When generating code compliant to the GNU/Linux for S/390 \s-1ABI\s0,
16740 the default is \fB\-mesa\fR.  When generating code compliant
16741 to the GNU/Linux for zSeries \s-1ABI\s0, the default is \fB\-mzarch\fR.
16742 .IP "\fB\-mmvcle\fR" 4
16743 .IX Item "-mmvcle"
16744 .PD 0
16745 .IP "\fB\-mno\-mvcle\fR" 4
16746 .IX Item "-mno-mvcle"
16747 .PD
16748 Generate (or do not generate) code using the \f(CW\*(C`mvcle\*(C'\fR instruction
16749 to perform block moves.  When \fB\-mno\-mvcle\fR is specified,
16750 use a \f(CW\*(C`mvc\*(C'\fR loop instead.  This is the default unless optimizing for
16751 size.
16752 .IP "\fB\-mdebug\fR" 4
16753 .IX Item "-mdebug"
16754 .PD 0
16755 .IP "\fB\-mno\-debug\fR" 4
16756 .IX Item "-mno-debug"
16757 .PD
16758 Print (or do not print) additional debug information when compiling.
16759 The default is to not print debug information.
16760 .IP "\fB\-march=\fR\fIcpu-type\fR" 4
16761 .IX Item "-march=cpu-type"
16762 Generate code that will run on \fIcpu-type\fR, which is the name of a system
16763 representing a certain processor type.  Possible values for
16764 \&\fIcpu-type\fR are \fBg5\fR, \fBg6\fR, \fBz900\fR, \fBz990\fR,
16765 \&\fBz9\-109\fR, \fBz9\-ec\fR and \fBz10\fR.
16766 When generating code using the instructions available on z/Architecture,
16767 the default is \fB\-march=z900\fR.  Otherwise, the default is
16768 \&\fB\-march=g5\fR.
16769 .IP "\fB\-mtune=\fR\fIcpu-type\fR" 4
16770 .IX Item "-mtune=cpu-type"
16771 Tune to \fIcpu-type\fR everything applicable about the generated code,
16772 except for the \s-1ABI\s0 and the set of available instructions.
16773 The list of \fIcpu-type\fR values is the same as for \fB\-march\fR.
16774 The default is the value used for \fB\-march\fR.
16775 .IP "\fB\-mtpf\-trace\fR" 4
16776 .IX Item "-mtpf-trace"
16777 .PD 0
16778 .IP "\fB\-mno\-tpf\-trace\fR" 4
16779 .IX Item "-mno-tpf-trace"
16780 .PD
16781 Generate code that adds (does not add) in \s-1TPF\s0 \s-1OS\s0 specific branches to trace
16782 routines in the operating system.  This option is off by default, even
16783 when compiling for the \s-1TPF\s0 \s-1OS\s0.
16784 .IP "\fB\-mfused\-madd\fR" 4
16785 .IX Item "-mfused-madd"
16786 .PD 0
16787 .IP "\fB\-mno\-fused\-madd\fR" 4
16788 .IX Item "-mno-fused-madd"
16789 .PD
16790 Generate code that uses (does not use) the floating-point multiply and
16791 accumulate instructions.  These instructions are generated by default if
16792 hardware floating point is used.
16793 .IP "\fB\-mwarn\-framesize=\fR\fIframesize\fR" 4
16794 .IX Item "-mwarn-framesize=framesize"
16795 Emit a warning if the current function exceeds the given frame size.  Because
16796 this is a compile-time check it doesn't need to be a real problem when the program
16797 runs.  It is intended to identify functions that most probably cause
16798 a stack overflow.  It is useful to be used in an environment with limited stack
16799 size e.g. the linux kernel.
16800 .IP "\fB\-mwarn\-dynamicstack\fR" 4
16801 .IX Item "-mwarn-dynamicstack"
16802 Emit a warning if the function calls alloca or uses dynamically
16803 sized arrays.  This is generally a bad idea with a limited stack size.
16804 .IP "\fB\-mstack\-guard=\fR\fIstack-guard\fR" 4
16805 .IX Item "-mstack-guard=stack-guard"
16806 .PD 0
16807 .IP "\fB\-mstack\-size=\fR\fIstack-size\fR" 4
16808 .IX Item "-mstack-size=stack-size"
16809 .PD
16810 If these options are provided the s390 back end emits additional instructions in
16811 the function prologue which trigger a trap if the stack size is \fIstack-guard\fR
16812 bytes above the \fIstack-size\fR (remember that the stack on s390 grows downward).
16813 If the \fIstack-guard\fR option is omitted the smallest power of 2 larger than
16814 the frame size of the compiled function is chosen.
16815 These options are intended to be used to help debugging stack overflow problems.
16816 The additionally emitted code causes only little overhead and hence can also be
16817 used in production like systems without greater performance degradation.  The given
16818 values have to be exact powers of 2 and \fIstack-size\fR has to be greater than
16819 \&\fIstack-guard\fR without exceeding 64k.
16820 In order to be efficient the extra code makes the assumption that the stack starts
16821 at an address aligned to the value given by \fIstack-size\fR.
16822 The \fIstack-guard\fR option can only be used in conjunction with \fIstack-size\fR.
16823 .PP
16824 \fIScore Options\fR
16825 .IX Subsection "Score Options"
16826 .PP
16827 These options are defined for Score implementations:
16828 .IP "\fB\-meb\fR" 4
16829 .IX Item "-meb"
16830 Compile code for big-endian mode.  This is the default.
16831 .IP "\fB\-mel\fR" 4
16832 .IX Item "-mel"
16833 Compile code for little-endian mode.
16834 .IP "\fB\-mnhwloop\fR" 4
16835 .IX Item "-mnhwloop"
16836 Disable generate bcnz instruction.
16837 .IP "\fB\-muls\fR" 4
16838 .IX Item "-muls"
16839 Enable generate unaligned load and store instruction.
16840 .IP "\fB\-mmac\fR" 4
16841 .IX Item "-mmac"
16842 Enable the use of multiply-accumulate instructions. Disabled by default.
16843 .IP "\fB\-mscore5\fR" 4
16844 .IX Item "-mscore5"
16845 Specify the \s-1SCORE5\s0 as the target architecture.
16846 .IP "\fB\-mscore5u\fR" 4
16847 .IX Item "-mscore5u"
16848 Specify the \s-1SCORE5U\s0 of the target architecture.
16849 .IP "\fB\-mscore7\fR" 4
16850 .IX Item "-mscore7"
16851 Specify the \s-1SCORE7\s0 as the target architecture. This is the default.
16852 .IP "\fB\-mscore7d\fR" 4
16853 .IX Item "-mscore7d"
16854 Specify the \s-1SCORE7D\s0 as the target architecture.
16855 .PP
16856 \fI\s-1SH\s0 Options\fR
16857 .IX Subsection "SH Options"
16858 .PP
16859 These \fB\-m\fR options are defined for the \s-1SH\s0 implementations:
16860 .IP "\fB\-m1\fR" 4
16861 .IX Item "-m1"
16862 Generate code for the \s-1SH1\s0.
16863 .IP "\fB\-m2\fR" 4
16864 .IX Item "-m2"
16865 Generate code for the \s-1SH2\s0.
16866 .IP "\fB\-m2e\fR" 4
16867 .IX Item "-m2e"
16868 Generate code for the SH2e.
16869 .IP "\fB\-m2a\-nofpu\fR" 4
16870 .IX Item "-m2a-nofpu"
16871 Generate code for the SH2a without \s-1FPU\s0, or for a SH2a\-FPU in such a way
16872 that the floating-point unit is not used.
16873 .IP "\fB\-m2a\-single\-only\fR" 4
16874 .IX Item "-m2a-single-only"
16875 Generate code for the SH2a\-FPU, in such a way that no double-precision
16876 floating-point operations are used.
16877 .IP "\fB\-m2a\-single\fR" 4
16878 .IX Item "-m2a-single"
16879 Generate code for the SH2a\-FPU assuming the floating-point unit is in
16880 single-precision mode by default.
16881 .IP "\fB\-m2a\fR" 4
16882 .IX Item "-m2a"
16883 Generate code for the SH2a\-FPU assuming the floating-point unit is in
16884 double-precision mode by default.
16885 .IP "\fB\-m3\fR" 4
16886 .IX Item "-m3"
16887 Generate code for the \s-1SH3\s0.
16888 .IP "\fB\-m3e\fR" 4
16889 .IX Item "-m3e"
16890 Generate code for the SH3e.
16891 .IP "\fB\-m4\-nofpu\fR" 4
16892 .IX Item "-m4-nofpu"
16893 Generate code for the \s-1SH4\s0 without a floating-point unit.
16894 .IP "\fB\-m4\-single\-only\fR" 4
16895 .IX Item "-m4-single-only"
16896 Generate code for the \s-1SH4\s0 with a floating-point unit that only
16897 supports single-precision arithmetic.
16898 .IP "\fB\-m4\-single\fR" 4
16899 .IX Item "-m4-single"
16900 Generate code for the \s-1SH4\s0 assuming the floating-point unit is in
16901 single-precision mode by default.
16902 .IP "\fB\-m4\fR" 4
16903 .IX Item "-m4"
16904 Generate code for the \s-1SH4\s0.
16905 .IP "\fB\-m4a\-nofpu\fR" 4
16906 .IX Item "-m4a-nofpu"
16907 Generate code for the SH4al\-dsp, or for a SH4a in such a way that the
16908 floating-point unit is not used.
16909 .IP "\fB\-m4a\-single\-only\fR" 4
16910 .IX Item "-m4a-single-only"
16911 Generate code for the SH4a, in such a way that no double-precision
16912 floating-point operations are used.
16913 .IP "\fB\-m4a\-single\fR" 4
16914 .IX Item "-m4a-single"
16915 Generate code for the SH4a assuming the floating-point unit is in
16916 single-precision mode by default.
16917 .IP "\fB\-m4a\fR" 4
16918 .IX Item "-m4a"
16919 Generate code for the SH4a.
16920 .IP "\fB\-m4al\fR" 4
16921 .IX Item "-m4al"
16922 Same as \fB\-m4a\-nofpu\fR, except that it implicitly passes
16923 \&\fB\-dsp\fR to the assembler.  \s-1GCC\s0 doesn't generate any \s-1DSP\s0
16924 instructions at the moment.
16925 .IP "\fB\-mb\fR" 4
16926 .IX Item "-mb"
16927 Compile code for the processor in big-endian mode.
16928 .IP "\fB\-ml\fR" 4
16929 .IX Item "-ml"
16930 Compile code for the processor in little-endian mode.
16931 .IP "\fB\-mdalign\fR" 4
16932 .IX Item "-mdalign"
16933 Align doubles at 64\-bit boundaries.  Note that this changes the calling
16934 conventions, and thus some functions from the standard C library will
16935 not work unless you recompile it first with \fB\-mdalign\fR.
16936 .IP "\fB\-mrelax\fR" 4
16937 .IX Item "-mrelax"
16938 Shorten some address references at link time, when possible; uses the
16939 linker option \fB\-relax\fR.
16940 .IP "\fB\-mbigtable\fR" 4
16941 .IX Item "-mbigtable"
16942 Use 32\-bit offsets in \f(CW\*(C`switch\*(C'\fR tables.  The default is to use
16943 16\-bit offsets.
16944 .IP "\fB\-mbitops\fR" 4
16945 .IX Item "-mbitops"
16946 Enable the use of bit manipulation instructions on \s-1SH2A\s0.
16947 .IP "\fB\-mfmovd\fR" 4
16948 .IX Item "-mfmovd"
16949 Enable the use of the instruction \f(CW\*(C`fmovd\*(C'\fR.  Check \fB\-mdalign\fR for
16950 alignment constraints.
16951 .IP "\fB\-mhitachi\fR" 4
16952 .IX Item "-mhitachi"
16953 Comply with the calling conventions defined by Renesas.
16954 .IP "\fB\-mrenesas\fR" 4
16955 .IX Item "-mrenesas"
16956 Comply with the calling conventions defined by Renesas.
16957 .IP "\fB\-mno\-renesas\fR" 4
16958 .IX Item "-mno-renesas"
16959 Comply with the calling conventions defined for \s-1GCC\s0 before the Renesas
16960 conventions were available.  This option is the default for all
16961 targets of the \s-1SH\s0 toolchain.
16962 .IP "\fB\-mnomacsave\fR" 4
16963 .IX Item "-mnomacsave"
16964 Mark the \f(CW\*(C`MAC\*(C'\fR register as call-clobbered, even if
16965 \&\fB\-mhitachi\fR is given.
16966 .IP "\fB\-mieee\fR" 4
16967 .IX Item "-mieee"
16968 .PD 0
16969 .IP "\fB\-mno\-ieee\fR" 4
16970 .IX Item "-mno-ieee"
16971 .PD
16972 Control the \s-1IEEE\s0 compliance of floating-point comparisons, which affects the
16973 handling of cases where the result of a comparison is unordered.  By default
16974 \&\fB\-mieee\fR is implicitly enabled.  If \fB\-ffinite\-math\-only\fR is
16975 enabled \fB\-mno\-ieee\fR is implicitly set, which results in faster
16976 floating-point greater-equal and less-equal comparisons.  The implcit settings
16977 can be overridden by specifying either \fB\-mieee\fR or \fB\-mno\-ieee\fR.
16978 .IP "\fB\-minline\-ic_invalidate\fR" 4
16979 .IX Item "-minline-ic_invalidate"
16980 Inline code to invalidate instruction cache entries after setting up
16981 nested function trampolines.
16982 This option has no effect if \-musermode is in effect and the selected
16983 code generation option (e.g. \-m4) does not allow the use of the icbi
16984 instruction.
16985 If the selected code generation option does not allow the use of the icbi
16986 instruction, and \-musermode is not in effect, the inlined code will
16987 manipulate the instruction cache address array directly with an associative
16988 write.  This not only requires privileged mode, but it will also
16989 fail if the cache line had been mapped via the \s-1TLB\s0 and has become unmapped.
16990 .IP "\fB\-misize\fR" 4
16991 .IX Item "-misize"
16992 Dump instruction size and location in the assembly code.
16993 .IP "\fB\-mpadstruct\fR" 4
16994 .IX Item "-mpadstruct"
16995 This option is deprecated.  It pads structures to multiple of 4 bytes,
16996 which is incompatible with the \s-1SH\s0 \s-1ABI\s0.
16997 .IP "\fB\-msoft\-atomic\fR" 4
16998 .IX Item "-msoft-atomic"
16999 Generate GNU/Linux compatible gUSA software atomic sequences for the atomic
17000 built-in functions.  The generated atomic sequences require support from the 
17001 interrupt / exception handling code of the system and are only suitable for
17002 single-core systems.  They will not perform correctly on multi-core systems.
17003 This option is enabled by default when the target is \f(CW\*(C`sh\-*\-linux*\*(C'\fR.
17004 For details on the atomic built-in functions see \fB_\|_atomic Builtins\fR.
17005 .IP "\fB\-mspace\fR" 4
17006 .IX Item "-mspace"
17007 Optimize for space instead of speed.  Implied by \fB\-Os\fR.
17008 .IP "\fB\-mprefergot\fR" 4
17009 .IX Item "-mprefergot"
17010 When generating position-independent code, emit function calls using
17011 the Global Offset Table instead of the Procedure Linkage Table.
17012 .IP "\fB\-musermode\fR" 4
17013 .IX Item "-musermode"
17014 Don't generate privileged mode only code; implies \-mno\-inline\-ic_invalidate
17015 if the inlined code would not work in user mode.
17016 This is the default when the target is \f(CW\*(C`sh\-*\-linux*\*(C'\fR.
17017 .IP "\fB\-multcost=\fR\fInumber\fR" 4
17018 .IX Item "-multcost=number"
17019 Set the cost to assume for a multiply insn.
17020 .IP "\fB\-mdiv=\fR\fIstrategy\fR" 4
17021 .IX Item "-mdiv=strategy"
17022 Set the division strategy to be used for integer division operations.
17023 For SHmedia \fIstrategy\fR can be one of:
17024 .RS 4
17025 .IP "\fBfp\fR" 4
17026 .IX Item "fp"
17027 Performs the operation in floating point.  This has a very high latency,
17028 but needs only a few instructions, so it might be a good choice if
17029 your code has enough easily-exploitable \s-1ILP\s0 to allow the compiler to
17030 schedule the floating-point instructions together with other instructions.
17031 Division by zero causes a floating-point exception.
17032 .IP "\fBinv\fR" 4
17033 .IX Item "inv"
17034 Uses integer operations to calculate the inverse of the divisor,
17035 and then multiplies the dividend with the inverse.  This strategy allows
17036 \&\s-1CSE\s0 and hoisting of the inverse calculation.  Division by zero calculates
17037 an unspecified result, but does not trap.
17038 .IP "\fBinv:minlat\fR" 4
17039 .IX Item "inv:minlat"
17040 A variant of \fBinv\fR where, if no \s-1CSE\s0 or hoisting opportunities
17041 have been found, or if the entire operation has been hoisted to the same
17042 place, the last stages of the inverse calculation are intertwined with the
17043 final multiply to reduce the overall latency, at the expense of using a few
17044 more instructions, and thus offering fewer scheduling opportunities with
17045 other code.
17046 .IP "\fBcall\fR" 4
17047 .IX Item "call"
17048 Calls a library function that usually implements the \fBinv:minlat\fR
17049 strategy.
17050 This gives high code density for \f(CW\*(C`m5\-*media\-nofpu\*(C'\fR compilations.
17051 .IP "\fBcall2\fR" 4
17052 .IX Item "call2"
17053 Uses a different entry point of the same library function, where it
17054 assumes that a pointer to a lookup table has already been set up, which
17055 exposes the pointer load to \s-1CSE\s0 and code hoisting optimizations.
17056 .IP "\fBinv:call\fR" 4
17057 .IX Item "inv:call"
17058 .PD 0
17059 .IP "\fBinv:call2\fR" 4
17060 .IX Item "inv:call2"
17061 .IP "\fBinv:fp\fR" 4
17062 .IX Item "inv:fp"
17063 .PD
17064 Use the \fBinv\fR algorithm for initial
17065 code generation, but if the code stays unoptimized, revert to the \fBcall\fR,
17066 \&\fBcall2\fR, or \fBfp\fR strategies, respectively.  Note that the
17067 potentially-trapping side effect of division by zero is carried by a
17068 separate instruction, so it is possible that all the integer instructions
17069 are hoisted out, but the marker for the side effect stays where it is.
17070 A recombination to floating-point operations or a call is not possible
17071 in that case.
17072 .IP "\fBinv20u\fR" 4
17073 .IX Item "inv20u"
17074 .PD 0
17075 .IP "\fBinv20l\fR" 4
17076 .IX Item "inv20l"
17077 .PD
17078 Variants of the \fBinv:minlat\fR strategy.  In the case
17079 that the inverse calculation is not separated from the multiply, they speed
17080 up division where the dividend fits into 20 bits (plus sign where applicable)
17081 by inserting a test to skip a number of operations in this case; this test
17082 slows down the case of larger dividends.  \fBinv20u\fR assumes the case of a such
17083 a small dividend to be unlikely, and \fBinv20l\fR assumes it to be likely.
17084 .RE
17085 .RS 4
17086 .Sp
17087 For targets other than SHmedia \fIstrategy\fR can be one of:
17088 .IP "\fBcall\-div1\fR" 4
17089 .IX Item "call-div1"
17090 Calls a library function that uses the single-step division instruction
17091 \&\f(CW\*(C`div1\*(C'\fR to perform the operation.  Division by zero calculates an
17092 unspecified result and does not trap.  This is the default except for \s-1SH4\s0,
17093 \&\s-1SH2A\s0 and SHcompact.
17094 .IP "\fBcall-fp\fR" 4
17095 .IX Item "call-fp"
17096 Calls a library function that performs the operation in double precision
17097 floating point.  Division by zero causes a floating-point exception.  This is
17098 the default for SHcompact with \s-1FPU\s0.  Specifying this for targets that do not
17099 have a double precision \s-1FPU\s0 will default to \f(CW\*(C`call\-div1\*(C'\fR.
17100 .IP "\fBcall-table\fR" 4
17101 .IX Item "call-table"
17102 Calls a library function that uses a lookup table for small divisors and
17103 the \f(CW\*(C`div1\*(C'\fR instruction with case distinction for larger divisors.  Division
17104 by zero calculates an unspecified result and does not trap.  This is the default
17105 for \s-1SH4\s0.  Specifying this for targets that do not have dynamic shift
17106 instructions will default to \f(CW\*(C`call\-div1\*(C'\fR.
17107 .RE
17108 .RS 4
17109 .Sp
17110 When a division strategy has not been specified the default strategy will be
17111 selected based on the current target.  For \s-1SH2A\s0 the default strategy is to
17112 use the \f(CW\*(C`divs\*(C'\fR and \f(CW\*(C`divu\*(C'\fR instructions instead of library function
17113 calls.
17114 .RE
17115 .IP "\fB\-maccumulate\-outgoing\-args\fR" 4
17116 .IX Item "-maccumulate-outgoing-args"
17117 Reserve space once for outgoing arguments in the function prologue rather
17118 than around each call.  Generally beneficial for performance and size.  Also
17119 needed for unwinding to avoid changing the stack frame around conditional code.
17120 .IP "\fB\-mdivsi3_libfunc=\fR\fIname\fR" 4
17121 .IX Item "-mdivsi3_libfunc=name"
17122 Set the name of the library function used for 32\-bit signed division to
17123 \&\fIname\fR.  This only affect the name used in the call and inv:call
17124 division strategies, and the compiler will still expect the same
17125 sets of input/output/clobbered registers as if this option was not present.
17126 .IP "\fB\-mfixed\-range=\fR\fIregister-range\fR" 4
17127 .IX Item "-mfixed-range=register-range"
17128 Generate code treating the given register range as fixed registers.
17129 A fixed register is one that the register allocator can not use.  This is
17130 useful when compiling kernel code.  A register range is specified as
17131 two registers separated by a dash.  Multiple register ranges can be
17132 specified separated by a comma.
17133 .IP "\fB\-madjust\-unroll\fR" 4
17134 .IX Item "-madjust-unroll"
17135 Throttle unrolling to avoid thrashing target registers.
17136 This option only has an effect if the gcc code base supports the
17137 \&\s-1TARGET_ADJUST_UNROLL_MAX\s0 target hook.
17138 .IP "\fB\-mindexed\-addressing\fR" 4
17139 .IX Item "-mindexed-addressing"
17140 Enable the use of the indexed addressing mode for SHmedia32/SHcompact.
17141 This is only safe if the hardware and/or \s-1OS\s0 implement 32\-bit wrap-around
17142 semantics for the indexed addressing mode.  The architecture allows the
17143 implementation of processors with 64\-bit \s-1MMU\s0, which the \s-1OS\s0 could use to
17144 get 32\-bit addressing, but since no current hardware implementation supports
17145 this or any other way to make the indexed addressing mode safe to use in
17146 the 32\-bit \s-1ABI\s0, the default is \fB\-mno\-indexed\-addressing\fR.
17147 .IP "\fB\-mgettrcost=\fR\fInumber\fR" 4
17148 .IX Item "-mgettrcost=number"
17149 Set the cost assumed for the gettr instruction to \fInumber\fR.
17150 The default is 2 if \fB\-mpt\-fixed\fR is in effect, 100 otherwise.
17151 .IP "\fB\-mpt\-fixed\fR" 4
17152 .IX Item "-mpt-fixed"
17153 Assume pt* instructions won't trap.  This will generally generate better
17154 scheduled code, but is unsafe on current hardware.  The current architecture
17155 definition says that ptabs and ptrel trap when the target anded with 3 is 3.
17156 This has the unintentional effect of making it unsafe to schedule ptabs /
17157 ptrel before a branch, or hoist it out of a loop.  For example,
17158 _\|_do_global_ctors, a part of libgcc that runs constructors at program
17159 startup, calls functions in a list which is delimited by \-1.  With the
17160 \&\-mpt\-fixed option, the ptabs will be done before testing against \-1.
17161 That means that all the constructors will be run a bit quicker, but when
17162 the loop comes to the end of the list, the program crashes because ptabs
17163 loads \-1 into a target register.  Since this option is unsafe for any
17164 hardware implementing the current architecture specification, the default
17165 is \-mno\-pt\-fixed.  Unless the user specifies a specific cost with
17166 \&\fB\-mgettrcost\fR, \-mno\-pt\-fixed also implies \fB\-mgettrcost=100\fR;
17167 this deters register allocation using target registers for storing
17168 ordinary integers.
17169 .IP "\fB\-minvalid\-symbols\fR" 4
17170 .IX Item "-minvalid-symbols"
17171 Assume symbols might be invalid.  Ordinary function symbols generated by
17172 the compiler will always be valid to load with movi/shori/ptabs or
17173 movi/shori/ptrel, but with assembler and/or linker tricks it is possible
17174 to generate symbols that will cause ptabs / ptrel to trap.
17175 This option is only meaningful when \fB\-mno\-pt\-fixed\fR is in effect.
17176 It will then prevent cross-basic-block cse, hoisting and most scheduling
17177 of symbol loads.  The default is \fB\-mno\-invalid\-symbols\fR.
17178 .IP "\fB\-mbranch\-cost=\fR\fInum\fR" 4
17179 .IX Item "-mbranch-cost=num"
17180 Assume \fInum\fR to be the cost for a branch instruction.  Higher numbers
17181 will make the compiler try to generate more branch-free code if possible.  
17182 If not specified the value is selected depending on the processor type that
17183 is being compiled for.
17184 .IP "\fB\-mcbranchdi\fR" 4
17185 .IX Item "-mcbranchdi"
17186 Enable the \f(CW\*(C`cbranchdi4\*(C'\fR instruction pattern.
17187 .IP "\fB\-mcmpeqdi\fR" 4
17188 .IX Item "-mcmpeqdi"
17189 Emit the \f(CW\*(C`cmpeqdi_t\*(C'\fR instruction pattern even when \fB\-mcbranchdi\fR
17190 is in effect.
17191 .IP "\fB\-mfused\-madd\fR" 4
17192 .IX Item "-mfused-madd"
17193 Allow the usage of the \f(CW\*(C`fmac\*(C'\fR instruction (floating-point
17194 multiply-accumulate) if the processor type supports it.  Enabling this
17195 option might generate code that produces different numeric floating-point
17196 results compared to strict \s-1IEEE\s0 754 arithmetic.
17197 .IP "\fB\-mpretend\-cmove\fR" 4
17198 .IX Item "-mpretend-cmove"
17199 Prefer zero-displacement conditional branches for conditional move instruction
17200 patterns.  This can result in faster code on the \s-1SH4\s0 processor.
17201 .PP
17202 \fISolaris 2 Options\fR
17203 .IX Subsection "Solaris 2 Options"
17204 .PP
17205 These \fB\-m\fR options are supported on Solaris 2:
17206 .IP "\fB\-mimpure\-text\fR" 4
17207 .IX Item "-mimpure-text"
17208 \&\fB\-mimpure\-text\fR, used in addition to \fB\-shared\fR, tells
17209 the compiler to not pass \fB\-z text\fR to the linker when linking a
17210 shared object.  Using this option, you can link position-dependent
17211 code into a shared object.
17212 .Sp
17213 \&\fB\-mimpure\-text\fR suppresses the \*(L"relocations remain against
17214 allocatable but non-writable sections\*(R" linker error message.
17215 However, the necessary relocations will trigger copy-on-write, and the
17216 shared object is not actually shared across processes.  Instead of
17217 using \fB\-mimpure\-text\fR, you should compile all source code with
17218 \&\fB\-fpic\fR or \fB\-fPIC\fR.
17219 .PP
17220 These switches are supported in addition to the above on Solaris 2:
17221 .IP "\fB\-pthreads\fR" 4
17222 .IX Item "-pthreads"
17223 Add support for multithreading using the \s-1POSIX\s0 threads library.  This
17224 option sets flags for both the preprocessor and linker.  This option does
17225 not affect the thread safety of object code produced  by the compiler or
17226 that of libraries supplied with it.
17227 .IP "\fB\-pthread\fR" 4
17228 .IX Item "-pthread"
17229 This is a synonym for \fB\-pthreads\fR.
17230 .PP
17231 \fI\s-1SPARC\s0 Options\fR
17232 .IX Subsection "SPARC Options"
17233 .PP
17234 These \fB\-m\fR options are supported on the \s-1SPARC:\s0
17235 .IP "\fB\-mno\-app\-regs\fR" 4
17236 .IX Item "-mno-app-regs"
17237 .PD 0
17238 .IP "\fB\-mapp\-regs\fR" 4
17239 .IX Item "-mapp-regs"
17240 .PD
17241 Specify \fB\-mapp\-regs\fR to generate output using the global registers
17242 2 through 4, which the \s-1SPARC\s0 \s-1SVR4\s0 \s-1ABI\s0 reserves for applications.  This
17243 is the default.
17244 .Sp
17245 To be fully \s-1SVR4\s0 \s-1ABI\s0 compliant at the cost of some performance loss,
17246 specify \fB\-mno\-app\-regs\fR.  You should compile libraries and system
17247 software with this option.
17248 .IP "\fB\-mflat\fR" 4
17249 .IX Item "-mflat"
17250 .PD 0
17251 .IP "\fB\-mno\-flat\fR" 4
17252 .IX Item "-mno-flat"
17253 .PD
17254 With \fB\-mflat\fR, the compiler does not generate save/restore instructions
17255 and uses a \*(L"flat\*(R" or single register window model.  This model is compatible
17256 with the regular register window model.  The local registers and the input
17257 registers (0\-\-5) are still treated as \*(L"call-saved\*(R" registers and will be
17258 saved on the stack as needed.
17259 .Sp
17260 With \fB\-mno\-flat\fR (the default), the compiler generates save/restore
17261 instructions (except for leaf functions).  This is the normal operating mode.
17262 .IP "\fB\-mfpu\fR" 4
17263 .IX Item "-mfpu"
17264 .PD 0
17265 .IP "\fB\-mhard\-float\fR" 4
17266 .IX Item "-mhard-float"
17267 .PD
17268 Generate output containing floating-point instructions.  This is the
17269 default.
17270 .IP "\fB\-mno\-fpu\fR" 4
17271 .IX Item "-mno-fpu"
17272 .PD 0
17273 .IP "\fB\-msoft\-float\fR" 4
17274 .IX Item "-msoft-float"
17275 .PD
17276 Generate output containing library calls for floating point.
17277 \&\fBWarning:\fR the requisite libraries are not available for all \s-1SPARC\s0
17278 targets.  Normally the facilities of the machine's usual C compiler are
17279 used, but this cannot be done directly in cross-compilation.  You must make
17280 your own arrangements to provide suitable library functions for
17281 cross-compilation.  The embedded targets \fBsparc\-*\-aout\fR and
17282 \&\fBsparclite\-*\-*\fR do provide software floating-point support.
17283 .Sp
17284 \&\fB\-msoft\-float\fR changes the calling convention in the output file;
17285 therefore, it is only useful if you compile \fIall\fR of a program with
17286 this option.  In particular, you need to compile \fIlibgcc.a\fR, the
17287 library that comes with \s-1GCC\s0, with \fB\-msoft\-float\fR in order for
17288 this to work.
17289 .IP "\fB\-mhard\-quad\-float\fR" 4
17290 .IX Item "-mhard-quad-float"
17291 Generate output containing quad-word (long double) floating-point
17292 instructions.
17293 .IP "\fB\-msoft\-quad\-float\fR" 4
17294 .IX Item "-msoft-quad-float"
17295 Generate output containing library calls for quad-word (long double)
17296 floating-point instructions.  The functions called are those specified
17297 in the \s-1SPARC\s0 \s-1ABI\s0.  This is the default.
17298 .Sp
17299 As of this writing, there are no \s-1SPARC\s0 implementations that have hardware
17300 support for the quad-word floating-point instructions.  They all invoke
17301 a trap handler for one of these instructions, and then the trap handler
17302 emulates the effect of the instruction.  Because of the trap handler overhead,
17303 this is much slower than calling the \s-1ABI\s0 library routines.  Thus the
17304 \&\fB\-msoft\-quad\-float\fR option is the default.
17305 .IP "\fB\-mno\-unaligned\-doubles\fR" 4
17306 .IX Item "-mno-unaligned-doubles"
17307 .PD 0
17308 .IP "\fB\-munaligned\-doubles\fR" 4
17309 .IX Item "-munaligned-doubles"
17310 .PD
17311 Assume that doubles have 8\-byte alignment.  This is the default.
17312 .Sp
17313 With \fB\-munaligned\-doubles\fR, \s-1GCC\s0 assumes that doubles have 8\-byte
17314 alignment only if they are contained in another type, or if they have an
17315 absolute address.  Otherwise, it assumes they have 4\-byte alignment.
17316 Specifying this option avoids some rare compatibility problems with code
17317 generated by other compilers.  It is not the default because it results
17318 in a performance loss, especially for floating-point code.
17319 .IP "\fB\-mno\-faster\-structs\fR" 4
17320 .IX Item "-mno-faster-structs"
17321 .PD 0
17322 .IP "\fB\-mfaster\-structs\fR" 4
17323 .IX Item "-mfaster-structs"
17324 .PD
17325 With \fB\-mfaster\-structs\fR, the compiler assumes that structures
17326 should have 8\-byte alignment.  This enables the use of pairs of
17327 \&\f(CW\*(C`ldd\*(C'\fR and \f(CW\*(C`std\*(C'\fR instructions for copies in structure
17328 assignment, in place of twice as many \f(CW\*(C`ld\*(C'\fR and \f(CW\*(C`st\*(C'\fR pairs.
17329 However, the use of this changed alignment directly violates the \s-1SPARC\s0
17330 \&\s-1ABI\s0.  Thus, it's intended only for use on targets where the developer
17331 acknowledges that their resulting code will not be directly in line with
17332 the rules of the \s-1ABI\s0.
17333 .IP "\fB\-mcpu=\fR\fIcpu_type\fR" 4
17334 .IX Item "-mcpu=cpu_type"
17335 Set the instruction set, register set, and instruction scheduling parameters
17336 for machine type \fIcpu_type\fR.  Supported values for \fIcpu_type\fR are
17337 \&\fBv7\fR, \fBcypress\fR, \fBv8\fR, \fBsupersparc\fR, \fBhypersparc\fR,
17338 \&\fBleon\fR, \fBsparclite\fR, \fBf930\fR, \fBf934\fR, \fBsparclite86x\fR,
17339 \&\fBsparclet\fR, \fBtsc701\fR, \fBv9\fR, \fBultrasparc\fR,
17340 \&\fBultrasparc3\fR, \fBniagara\fR, \fBniagara2\fR, \fBniagara3\fR,
17341 and \fBniagara4\fR.
17342 .Sp
17343 Native Solaris and GNU/Linux toolchains also support the value \fBnative\fR,
17344 which selects the best architecture option for the host processor.
17345 \&\fB\-mcpu=native\fR has no effect if \s-1GCC\s0 does not recognize
17346 the processor.
17347 .Sp
17348 Default instruction scheduling parameters are used for values that select
17349 an architecture and not an implementation.  These are \fBv7\fR, \fBv8\fR,
17350 \&\fBsparclite\fR, \fBsparclet\fR, \fBv9\fR.
17351 .Sp
17352 Here is a list of each supported architecture and their supported
17353 implementations.
17354 .RS 4
17355 .IP "v7" 4
17356 .IX Item "v7"
17357 cypress
17358 .IP "v8" 4
17359 .IX Item "v8"
17360 supersparc, hypersparc, leon
17361 .IP "sparclite" 4
17362 .IX Item "sparclite"
17363 f930, f934, sparclite86x
17364 .IP "sparclet" 4
17365 .IX Item "sparclet"
17366 tsc701
17367 .IP "v9" 4
17368 .IX Item "v9"
17369 ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4
17370 .RE
17371 .RS 4
17372 .Sp
17373 By default (unless configured otherwise), \s-1GCC\s0 generates code for the V7
17374 variant of the \s-1SPARC\s0 architecture.  With \fB\-mcpu=cypress\fR, the compiler
17375 additionally optimizes it for the Cypress \s-1CY7C602\s0 chip, as used in the
17376 SPARCStation/SPARCServer 3xx series.  This is also appropriate for the older
17377 SPARCStation 1, 2, \s-1IPX\s0 etc.
17378 .Sp
17379 With \fB\-mcpu=v8\fR, \s-1GCC\s0 generates code for the V8 variant of the \s-1SPARC\s0
17380 architecture.  The only difference from V7 code is that the compiler emits
17381 the integer multiply and integer divide instructions which exist in \s-1SPARC\-V8\s0
17382 but not in \s-1SPARC\-V7\s0.  With \fB\-mcpu=supersparc\fR, the compiler additionally
17383 optimizes it for the SuperSPARC chip, as used in the SPARCStation 10, 1000 and
17384 2000 series.
17385 .Sp
17386 With \fB\-mcpu=sparclite\fR, \s-1GCC\s0 generates code for the SPARClite variant of
17387 the \s-1SPARC\s0 architecture.  This adds the integer multiply, integer divide step
17388 and scan (\f(CW\*(C`ffs\*(C'\fR) instructions which exist in SPARClite but not in \s-1SPARC\-V7\s0.
17389 With \fB\-mcpu=f930\fR, the compiler additionally optimizes it for the
17390 Fujitsu \s-1MB86930\s0 chip, which is the original SPARClite, with no \s-1FPU\s0.  With
17391 \&\fB\-mcpu=f934\fR, the compiler additionally optimizes it for the Fujitsu
17392 \&\s-1MB86934\s0 chip, which is the more recent SPARClite with \s-1FPU\s0.
17393 .Sp
17394 With \fB\-mcpu=sparclet\fR, \s-1GCC\s0 generates code for the SPARClet variant of
17395 the \s-1SPARC\s0 architecture.  This adds the integer multiply, multiply/accumulate,
17396 integer divide step and scan (\f(CW\*(C`ffs\*(C'\fR) instructions which exist in SPARClet
17397 but not in \s-1SPARC\-V7\s0.  With \fB\-mcpu=tsc701\fR, the compiler additionally
17398 optimizes it for the \s-1TEMIC\s0 SPARClet chip.
17399 .Sp
17400 With \fB\-mcpu=v9\fR, \s-1GCC\s0 generates code for the V9 variant of the \s-1SPARC\s0
17401 architecture.  This adds 64\-bit integer and floating-point move instructions,
17402 3 additional floating-point condition code registers and conditional move
17403 instructions.  With \fB\-mcpu=ultrasparc\fR, the compiler additionally
17404 optimizes it for the Sun UltraSPARC I/II/IIi chips.  With
17405 \&\fB\-mcpu=ultrasparc3\fR, the compiler additionally optimizes it for the
17406 Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+ chips.  With
17407 \&\fB\-mcpu=niagara\fR, the compiler additionally optimizes it for
17408 Sun UltraSPARC T1 chips.  With \fB\-mcpu=niagara2\fR, the compiler
17409 additionally optimizes it for Sun UltraSPARC T2 chips. With
17410 \&\fB\-mcpu=niagara3\fR, the compiler additionally optimizes it for Sun
17411 UltraSPARC T3 chips.  With \fB\-mcpu=niagara4\fR, the compiler
17412 additionally optimizes it for Sun UltraSPARC T4 chips.
17413 .RE
17414 .IP "\fB\-mtune=\fR\fIcpu_type\fR" 4
17415 .IX Item "-mtune=cpu_type"
17416 Set the instruction scheduling parameters for machine type
17417 \&\fIcpu_type\fR, but do not set the instruction set or register set that the
17418 option \fB\-mcpu=\fR\fIcpu_type\fR would.
17419 .Sp
17420 The same values for \fB\-mcpu=\fR\fIcpu_type\fR can be used for
17421 \&\fB\-mtune=\fR\fIcpu_type\fR, but the only useful values are those
17422 that select a particular \s-1CPU\s0 implementation.  Those are \fBcypress\fR,
17423 \&\fBsupersparc\fR, \fBhypersparc\fR, \fBleon\fR, \fBf930\fR, \fBf934\fR,
17424 \&\fBsparclite86x\fR, \fBtsc701\fR, \fBultrasparc\fR, \fBultrasparc3\fR,
17425 \&\fBniagara\fR, \fBniagara2\fR, \fBniagara3\fR and \fBniagara4\fR.  With
17426 native Solaris and GNU/Linux toolchains, \fBnative\fR can also be used.
17427 .IP "\fB\-mv8plus\fR" 4
17428 .IX Item "-mv8plus"
17429 .PD 0
17430 .IP "\fB\-mno\-v8plus\fR" 4
17431 .IX Item "-mno-v8plus"
17432 .PD
17433 With \fB\-mv8plus\fR, \s-1GCC\s0 generates code for the \s-1SPARC\-V8+\s0 \s-1ABI\s0.  The
17434 difference from the V8 \s-1ABI\s0 is that the global and out registers are
17435 considered 64 bits wide.  This is enabled by default on Solaris in 32\-bit
17436 mode for all \s-1SPARC\-V9\s0 processors.
17437 .IP "\fB\-mvis\fR" 4
17438 .IX Item "-mvis"
17439 .PD 0
17440 .IP "\fB\-mno\-vis\fR" 4
17441 .IX Item "-mno-vis"
17442 .PD
17443 With \fB\-mvis\fR, \s-1GCC\s0 generates code that takes advantage of the UltraSPARC
17444 Visual Instruction Set extensions.  The default is \fB\-mno\-vis\fR.
17445 .IP "\fB\-mvis2\fR" 4
17446 .IX Item "-mvis2"
17447 .PD 0
17448 .IP "\fB\-mno\-vis2\fR" 4
17449 .IX Item "-mno-vis2"
17450 .PD
17451 With \fB\-mvis2\fR, \s-1GCC\s0 generates code that takes advantage of
17452 version 2.0 of the UltraSPARC Visual Instruction Set extensions.  The
17453 default is \fB\-mvis2\fR when targetting a cpu that supports such
17454 instructions, such as UltraSPARC-III and later.  Setting \fB\-mvis2\fR
17455 also sets \fB\-mvis\fR.
17456 .IP "\fB\-mvis3\fR" 4
17457 .IX Item "-mvis3"
17458 .PD 0
17459 .IP "\fB\-mno\-vis3\fR" 4
17460 .IX Item "-mno-vis3"
17461 .PD
17462 With \fB\-mvis3\fR, \s-1GCC\s0 generates code that takes advantage of
17463 version 3.0 of the UltraSPARC Visual Instruction Set extensions.  The
17464 default is \fB\-mvis3\fR when targetting a cpu that supports such
17465 instructions, such as niagara\-3 and later.  Setting \fB\-mvis3\fR
17466 also sets \fB\-mvis2\fR and \fB\-mvis\fR.
17467 .IP "\fB\-mpopc\fR" 4
17468 .IX Item "-mpopc"
17469 .PD 0
17470 .IP "\fB\-mno\-popc\fR" 4
17471 .IX Item "-mno-popc"
17472 .PD
17473 With \fB\-mpopc\fR, \s-1GCC\s0 generates code that takes advantage of the UltraSPARC
17474 population count instruction.  The default is \fB\-mpopc\fR
17475 when targetting a cpu that supports such instructions, such as Niagara\-2 and
17476 later.
17477 .IP "\fB\-mfmaf\fR" 4
17478 .IX Item "-mfmaf"
17479 .PD 0
17480 .IP "\fB\-mno\-fmaf\fR" 4
17481 .IX Item "-mno-fmaf"
17482 .PD
17483 With \fB\-mfmaf\fR, \s-1GCC\s0 generates code that takes advantage of the UltraSPARC
17484 Fused Multiply-Add Floating-point extensions.  The default is \fB\-mfmaf\fR
17485 when targetting a cpu that supports such instructions, such as Niagara\-3 and
17486 later.
17487 .IP "\fB\-mfix\-at697f\fR" 4
17488 .IX Item "-mfix-at697f"
17489 Enable the documented workaround for the single erratum of the Atmel \s-1AT697F\s0
17490 processor (which corresponds to erratum #13 of the \s-1AT697E\s0 processor).
17491 .PP
17492 These \fB\-m\fR options are supported in addition to the above
17493 on \s-1SPARC\-V9\s0 processors in 64\-bit environments:
17494 .IP "\fB\-m32\fR" 4
17495 .IX Item "-m32"
17496 .PD 0
17497 .IP "\fB\-m64\fR" 4
17498 .IX Item "-m64"
17499 .PD
17500 Generate code for a 32\-bit or 64\-bit environment.
17501 The 32\-bit environment sets int, long and pointer to 32 bits.
17502 The 64\-bit environment sets int to 32 bits and long and pointer
17503 to 64 bits.
17504 .IP "\fB\-mcmodel=\fR\fIwhich\fR" 4
17505 .IX Item "-mcmodel=which"
17506 Set the code model to one of
17507 .RS 4
17508 .IP "\fBmedlow\fR" 4
17509 .IX Item "medlow"
17510 The Medium/Low code model: 64\-bit addresses, programs
17511 must be linked in the low 32 bits of memory.  Programs can be statically
17512 or dynamically linked.
17513 .IP "\fBmedmid\fR" 4
17514 .IX Item "medmid"
17515 The Medium/Middle code model: 64\-bit addresses, programs
17516 must be linked in the low 44 bits of memory, the text and data segments must
17517 be less than 2GB in size and the data segment must be located within 2GB of
17518 the text segment.
17519 .IP "\fBmedany\fR" 4
17520 .IX Item "medany"
17521 The Medium/Anywhere code model: 64\-bit addresses, programs
17522 may be linked anywhere in memory, the text and data segments must be less
17523 than 2GB in size and the data segment must be located within 2GB of the
17524 text segment.
17525 .IP "\fBembmedany\fR" 4
17526 .IX Item "embmedany"
17527 The Medium/Anywhere code model for embedded systems:
17528 64\-bit addresses, the text and data segments must be less than 2GB in
17529 size, both starting anywhere in memory (determined at link time).  The
17530 global register \f(CW%g4\fR points to the base of the data segment.  Programs
17531 are statically linked and \s-1PIC\s0 is not supported.
17532 .RE
17533 .RS 4
17534 .RE
17535 .IP "\fB\-mmemory\-model=\fR\fImem-model\fR" 4
17536 .IX Item "-mmemory-model=mem-model"
17537 Set the memory model in force on the processor to one of
17538 .RS 4
17539 .IP "\fBdefault\fR" 4
17540 .IX Item "default"
17541 The default memory model for the processor and operating system.
17542 .IP "\fBrmo\fR" 4
17543 .IX Item "rmo"
17544 Relaxed Memory Order
17545 .IP "\fBpso\fR" 4
17546 .IX Item "pso"
17547 Partial Store Order
17548 .IP "\fBtso\fR" 4
17549 .IX Item "tso"
17550 Total Store Order
17551 .IP "\fBsc\fR" 4
17552 .IX Item "sc"
17553 Sequential Consistency
17554 .RE
17555 .RS 4
17556 .Sp
17557 These memory models are formally defined in Appendix D of the Sparc V9
17558 architecture manual, as set in the processor's \f(CW\*(C`PSTATE.MM\*(C'\fR field.
17559 .RE
17560 .IP "\fB\-mstack\-bias\fR" 4
17561 .IX Item "-mstack-bias"
17562 .PD 0
17563 .IP "\fB\-mno\-stack\-bias\fR" 4
17564 .IX Item "-mno-stack-bias"
17565 .PD
17566 With \fB\-mstack\-bias\fR, \s-1GCC\s0 assumes that the stack pointer, and
17567 frame pointer if present, are offset by \-2047 which must be added back
17568 when making stack frame references.  This is the default in 64\-bit mode.
17569 Otherwise, assume no such offset is present.
17570 .PP
17571 \fI\s-1SPU\s0 Options\fR
17572 .IX Subsection "SPU Options"
17573 .PP
17574 These \fB\-m\fR options are supported on the \s-1SPU:\s0
17575 .IP "\fB\-mwarn\-reloc\fR" 4
17576 .IX Item "-mwarn-reloc"
17577 .PD 0
17578 .IP "\fB\-merror\-reloc\fR" 4
17579 .IX Item "-merror-reloc"
17580 .PD
17581 The loader for \s-1SPU\s0 does not handle dynamic relocations.  By default, \s-1GCC\s0
17582 will give an error when it generates code that requires a dynamic
17583 relocation.  \fB\-mno\-error\-reloc\fR disables the error,
17584 \&\fB\-mwarn\-reloc\fR will generate a warning instead.
17585 .IP "\fB\-msafe\-dma\fR" 4
17586 .IX Item "-msafe-dma"
17587 .PD 0
17588 .IP "\fB\-munsafe\-dma\fR" 4
17589 .IX Item "-munsafe-dma"
17590 .PD
17591 Instructions that initiate or test completion of \s-1DMA\s0 must not be
17592 reordered with respect to loads and stores of the memory that is being
17593 accessed.  Users typically address this problem using the volatile
17594 keyword, but that can lead to inefficient code in places where the
17595 memory is known to not change.  Rather than mark the memory as volatile
17596 we treat the \s-1DMA\s0 instructions as potentially effecting all memory.  With
17597 \&\fB\-munsafe\-dma\fR users must use the volatile keyword to protect
17598 memory accesses.
17599 .IP "\fB\-mbranch\-hints\fR" 4
17600 .IX Item "-mbranch-hints"
17601 By default, \s-1GCC\s0 will generate a branch hint instruction to avoid
17602 pipeline stalls for always taken or probably taken branches.  A hint
17603 will not be generated closer than 8 instructions away from its branch.
17604 There is little reason to disable them, except for debugging purposes,
17605 or to make an object a little bit smaller.
17606 .IP "\fB\-msmall\-mem\fR" 4
17607 .IX Item "-msmall-mem"
17608 .PD 0
17609 .IP "\fB\-mlarge\-mem\fR" 4
17610 .IX Item "-mlarge-mem"
17611 .PD
17612 By default, \s-1GCC\s0 generates code assuming that addresses are never larger
17613 than 18 bits.  With \fB\-mlarge\-mem\fR code is generated that assumes
17614 a full 32\-bit address.
17615 .IP "\fB\-mstdmain\fR" 4
17616 .IX Item "-mstdmain"
17617 By default, \s-1GCC\s0 links against startup code that assumes the SPU-style
17618 main function interface (which has an unconventional parameter list).
17619 With \fB\-mstdmain\fR, \s-1GCC\s0 will link your program against startup
17620 code that assumes a C99\-style interface to \f(CW\*(C`main\*(C'\fR, including a
17621 local copy of \f(CW\*(C`argv\*(C'\fR strings.
17622 .IP "\fB\-mfixed\-range=\fR\fIregister-range\fR" 4
17623 .IX Item "-mfixed-range=register-range"
17624 Generate code treating the given register range as fixed registers.
17625 A fixed register is one that the register allocator can not use.  This is
17626 useful when compiling kernel code.  A register range is specified as
17627 two registers separated by a dash.  Multiple register ranges can be
17628 specified separated by a comma.
17629 .IP "\fB\-mea32\fR" 4
17630 .IX Item "-mea32"
17631 .PD 0
17632 .IP "\fB\-mea64\fR" 4
17633 .IX Item "-mea64"
17634 .PD
17635 Compile code assuming that pointers to the \s-1PPU\s0 address space accessed
17636 via the \f(CW\*(C`_\|_ea\*(C'\fR named address space qualifier are either 32 or 64
17637 bits wide.  The default is 32 bits.  As this is an \s-1ABI\s0 changing option,
17638 all object code in an executable must be compiled with the same setting.
17639 .IP "\fB\-maddress\-space\-conversion\fR" 4
17640 .IX Item "-maddress-space-conversion"
17641 .PD 0
17642 .IP "\fB\-mno\-address\-space\-conversion\fR" 4
17643 .IX Item "-mno-address-space-conversion"
17644 .PD
17645 Allow/disallow treating the \f(CW\*(C`_\|_ea\*(C'\fR address space as superset
17646 of the generic address space.  This enables explicit type casts
17647 between \f(CW\*(C`_\|_ea\*(C'\fR and generic pointer as well as implicit
17648 conversions of generic pointers to \f(CW\*(C`_\|_ea\*(C'\fR pointers.  The
17649 default is to allow address space pointer conversions.
17650 .IP "\fB\-mcache\-size=\fR\fIcache-size\fR" 4
17651 .IX Item "-mcache-size=cache-size"
17652 This option controls the version of libgcc that the compiler links to an
17653 executable and selects a software-managed cache for accessing variables
17654 in the \f(CW\*(C`_\|_ea\*(C'\fR address space with a particular cache size.  Possible
17655 options for \fIcache-size\fR are \fB8\fR, \fB16\fR, \fB32\fR, \fB64\fR
17656 and \fB128\fR.  The default cache size is 64KB.
17657 .IP "\fB\-matomic\-updates\fR" 4
17658 .IX Item "-matomic-updates"
17659 .PD 0
17660 .IP "\fB\-mno\-atomic\-updates\fR" 4
17661 .IX Item "-mno-atomic-updates"
17662 .PD
17663 This option controls the version of libgcc that the compiler links to an
17664 executable and selects whether atomic updates to the software-managed
17665 cache of PPU-side variables are used.  If you use atomic updates, changes
17666 to a \s-1PPU\s0 variable from \s-1SPU\s0 code using the \f(CW\*(C`_\|_ea\*(C'\fR named address space
17667 qualifier will not interfere with changes to other \s-1PPU\s0 variables residing
17668 in the same cache line from \s-1PPU\s0 code.  If you do not use atomic updates,
17669 such interference may occur; however, writing back cache lines will be
17670 more efficient.  The default behavior is to use atomic updates.
17671 .IP "\fB\-mdual\-nops\fR" 4
17672 .IX Item "-mdual-nops"
17673 .PD 0
17674 .IP "\fB\-mdual\-nops=\fR\fIn\fR" 4
17675 .IX Item "-mdual-nops=n"
17676 .PD
17677 By default, \s-1GCC\s0 will insert nops to increase dual issue when it expects
17678 it to increase performance.  \fIn\fR can be a value from 0 to 10.  A
17679 smaller \fIn\fR will insert fewer nops.  10 is the default, 0 is the
17680 same as \fB\-mno\-dual\-nops\fR.  Disabled with \fB\-Os\fR.
17681 .IP "\fB\-mhint\-max\-nops=\fR\fIn\fR" 4
17682 .IX Item "-mhint-max-nops=n"
17683 Maximum number of nops to insert for a branch hint.  A branch hint must
17684 be at least 8 instructions away from the branch it is effecting.  \s-1GCC\s0
17685 will insert up to \fIn\fR nops to enforce this, otherwise it will not
17686 generate the branch hint.
17687 .IP "\fB\-mhint\-max\-distance=\fR\fIn\fR" 4
17688 .IX Item "-mhint-max-distance=n"
17689 The encoding of the branch hint instruction limits the hint to be within
17690 256 instructions of the branch it is effecting.  By default, \s-1GCC\s0 makes
17691 sure it is within 125.
17692 .IP "\fB\-msafe\-hints\fR" 4
17693 .IX Item "-msafe-hints"
17694 Work around a hardware bug that causes the \s-1SPU\s0 to stall indefinitely.
17695 By default, \s-1GCC\s0 will insert the \f(CW\*(C`hbrp\*(C'\fR instruction to make sure
17696 this stall won't happen.
17697 .PP
17698 \fIOptions for System V\fR
17699 .IX Subsection "Options for System V"
17700 .PP
17701 These additional options are available on System V Release 4 for
17702 compatibility with other compilers on those systems:
17703 .IP "\fB\-G\fR" 4
17704 .IX Item "-G"
17705 Create a shared object.
17706 It is recommended that \fB\-symbolic\fR or \fB\-shared\fR be used instead.
17707 .IP "\fB\-Qy\fR" 4
17708 .IX Item "-Qy"
17709 Identify the versions of each tool used by the compiler, in a
17710 \&\f(CW\*(C`.ident\*(C'\fR assembler directive in the output.
17711 .IP "\fB\-Qn\fR" 4
17712 .IX Item "-Qn"
17713 Refrain from adding \f(CW\*(C`.ident\*(C'\fR directives to the output file (this is
17714 the default).
17715 .IP "\fB\-YP,\fR\fIdirs\fR" 4
17716 .IX Item "-YP,dirs"
17717 Search the directories \fIdirs\fR, and no others, for libraries
17718 specified with \fB\-l\fR.
17719 .IP "\fB\-Ym,\fR\fIdir\fR" 4
17720 .IX Item "-Ym,dir"
17721 Look in the directory \fIdir\fR to find the M4 preprocessor.
17722 The assembler uses this option.
17723 .PP
17724 \fITILE-Gx Options\fR
17725 .IX Subsection "TILE-Gx Options"
17726 .PP
17727 These \fB\-m\fR options are supported on the TILE-Gx:
17728 .IP "\fB\-mcpu=\fR\fIname\fR" 4
17729 .IX Item "-mcpu=name"
17730 Selects the type of \s-1CPU\s0 to be targeted.  Currently the only supported
17731 type is \fBtilegx\fR.
17732 .IP "\fB\-m32\fR" 4
17733 .IX Item "-m32"
17734 .PD 0
17735 .IP "\fB\-m64\fR" 4
17736 .IX Item "-m64"
17737 .PD
17738 Generate code for a 32\-bit or 64\-bit environment.  The 32\-bit
17739 environment sets int, long, and pointer to 32 bits.  The 64\-bit
17740 environment sets int to 32 bits and long and pointer to 64 bits.
17741 .PP
17742 \fITILEPro Options\fR
17743 .IX Subsection "TILEPro Options"
17744 .PP
17745 These \fB\-m\fR options are supported on the TILEPro:
17746 .IP "\fB\-mcpu=\fR\fIname\fR" 4
17747 .IX Item "-mcpu=name"
17748 Selects the type of \s-1CPU\s0 to be targeted.  Currently the only supported
17749 type is \fBtilepro\fR.
17750 .IP "\fB\-m32\fR" 4
17751 .IX Item "-m32"
17752 Generate code for a 32\-bit environment, which sets int, long, and
17753 pointer to 32 bits.  This is the only supported behavior so the flag
17754 is essentially ignored.
17755 .PP
17756 \fIV850 Options\fR
17757 .IX Subsection "V850 Options"
17758 .PP
17759 These \fB\-m\fR options are defined for V850 implementations:
17760 .IP "\fB\-mlong\-calls\fR" 4
17761 .IX Item "-mlong-calls"
17762 .PD 0
17763 .IP "\fB\-mno\-long\-calls\fR" 4
17764 .IX Item "-mno-long-calls"
17765 .PD
17766 Treat all calls as being far away (near).  If calls are assumed to be
17767 far away, the compiler will always load the functions address up into a
17768 register, and call indirect through the pointer.
17769 .IP "\fB\-mno\-ep\fR" 4
17770 .IX Item "-mno-ep"
17771 .PD 0
17772 .IP "\fB\-mep\fR" 4
17773 .IX Item "-mep"
17774 .PD
17775 Do not optimize (do optimize) basic blocks that use the same index
17776 pointer 4 or more times to copy pointer into the \f(CW\*(C`ep\*(C'\fR register, and
17777 use the shorter \f(CW\*(C`sld\*(C'\fR and \f(CW\*(C`sst\*(C'\fR instructions.  The \fB\-mep\fR
17778 option is on by default if you optimize.
17779 .IP "\fB\-mno\-prolog\-function\fR" 4
17780 .IX Item "-mno-prolog-function"
17781 .PD 0
17782 .IP "\fB\-mprolog\-function\fR" 4
17783 .IX Item "-mprolog-function"
17784 .PD
17785 Do not use (do use) external functions to save and restore registers
17786 at the prologue and epilogue of a function.  The external functions
17787 are slower, but use less code space if more than one function saves
17788 the same number of registers.  The \fB\-mprolog\-function\fR option
17789 is on by default if you optimize.
17790 .IP "\fB\-mspace\fR" 4
17791 .IX Item "-mspace"
17792 Try to make the code as small as possible.  At present, this just turns
17793 on the \fB\-mep\fR and \fB\-mprolog\-function\fR options.
17794 .IP "\fB\-mtda=\fR\fIn\fR" 4
17795 .IX Item "-mtda=n"
17796 Put static or global variables whose size is \fIn\fR bytes or less into
17797 the tiny data area that register \f(CW\*(C`ep\*(C'\fR points to.  The tiny data
17798 area can hold up to 256 bytes in total (128 bytes for byte references).
17799 .IP "\fB\-msda=\fR\fIn\fR" 4
17800 .IX Item "-msda=n"
17801 Put static or global variables whose size is \fIn\fR bytes or less into
17802 the small data area that register \f(CW\*(C`gp\*(C'\fR points to.  The small data
17803 area can hold up to 64 kilobytes.
17804 .IP "\fB\-mzda=\fR\fIn\fR" 4
17805 .IX Item "-mzda=n"
17806 Put static or global variables whose size is \fIn\fR bytes or less into
17807 the first 32 kilobytes of memory.
17808 .IP "\fB\-mv850\fR" 4
17809 .IX Item "-mv850"
17810 Specify that the target processor is the V850.
17811 .IP "\fB\-mbig\-switch\fR" 4
17812 .IX Item "-mbig-switch"
17813 Generate code suitable for big switch tables.  Use this option only if
17814 the assembler/linker complain about out of range branches within a switch
17815 table.
17816 .IP "\fB\-mapp\-regs\fR" 4
17817 .IX Item "-mapp-regs"
17818 This option will cause r2 and r5 to be used in the code generated by
17819 the compiler.  This setting is the default.
17820 .IP "\fB\-mno\-app\-regs\fR" 4
17821 .IX Item "-mno-app-regs"
17822 This option will cause r2 and r5 to be treated as fixed registers.
17823 .IP "\fB\-mv850e2v3\fR" 4
17824 .IX Item "-mv850e2v3"
17825 Specify that the target processor is the V850E2V3.  The preprocessor
17826 constants \fB_\|_v850e2v3_\|_\fR will be defined if
17827 this option is used.
17828 .IP "\fB\-mv850e2\fR" 4
17829 .IX Item "-mv850e2"
17830 Specify that the target processor is the V850E2.  The preprocessor
17831 constants \fB_\|_v850e2_\|_\fR will be defined if this option is used.
17832 .IP "\fB\-mv850e1\fR" 4
17833 .IX Item "-mv850e1"
17834 Specify that the target processor is the V850E1.  The preprocessor
17835 constants \fB_\|_v850e1_\|_\fR and \fB_\|_v850e_\|_\fR will be defined if
17836 this option is used.
17837 .IP "\fB\-mv850es\fR" 4
17838 .IX Item "-mv850es"
17839 Specify that the target processor is the V850ES.  This is an alias for
17840 the \fB\-mv850e1\fR option.
17841 .IP "\fB\-mv850e\fR" 4
17842 .IX Item "-mv850e"
17843 Specify that the target processor is the V850E.  The preprocessor
17844 constant \fB_\|_v850e_\|_\fR will be defined if this option is used.
17845 .Sp
17846 If neither \fB\-mv850\fR nor \fB\-mv850e\fR nor \fB\-mv850e1\fR
17847 nor \fB\-mv850e2\fR nor \fB\-mv850e2v3\fR
17848 are defined then a default target processor will be chosen and the
17849 relevant \fB_\|_v850*_\|_\fR preprocessor constant will be defined.
17850 .Sp
17851 The preprocessor constants \fB_\|_v850\fR and \fB_\|_v851_\|_\fR are always
17852 defined, regardless of which processor variant is the target.
17853 .IP "\fB\-mdisable\-callt\fR" 4
17854 .IX Item "-mdisable-callt"
17855 This option will suppress generation of the \s-1CALLT\s0 instruction for the
17856 v850e, v850e1, v850e2 and v850e2v3 flavors of the v850 architecture.  The default is
17857 \&\fB\-mno\-disable\-callt\fR which allows the \s-1CALLT\s0 instruction to be used.
17858 .PP
17859 \fI\s-1VAX\s0 Options\fR
17860 .IX Subsection "VAX Options"
17861 .PP
17862 These \fB\-m\fR options are defined for the \s-1VAX:\s0
17863 .IP "\fB\-munix\fR" 4
17864 .IX Item "-munix"
17865 Do not output certain jump instructions (\f(CW\*(C`aobleq\*(C'\fR and so on)
17866 that the Unix assembler for the \s-1VAX\s0 cannot handle across long
17867 ranges.
17868 .IP "\fB\-mgnu\fR" 4
17869 .IX Item "-mgnu"
17870 Do output those jump instructions, on the assumption that you
17871 will assemble with the \s-1GNU\s0 assembler.
17872 .IP "\fB\-mg\fR" 4
17873 .IX Item "-mg"
17874 Output code for G\-format floating-point numbers instead of D\-format.
17875 .PP
17876 \fIVxWorks Options\fR
17877 .IX Subsection "VxWorks Options"
17878 .PP
17879 The options in this section are defined for all VxWorks targets.
17880 Options specific to the target hardware are listed with the other
17881 options for that target.
17882 .IP "\fB\-mrtp\fR" 4
17883 .IX Item "-mrtp"
17884 \&\s-1GCC\s0 can generate code for both VxWorks kernels and real time processes
17885 (RTPs).  This option switches from the former to the latter.  It also
17886 defines the preprocessor macro \f(CW\*(C`_\|_RTP_\|_\*(C'\fR.
17887 .IP "\fB\-non\-static\fR" 4
17888 .IX Item "-non-static"
17889 Link an \s-1RTP\s0 executable against shared libraries rather than static
17890 libraries.  The options \fB\-static\fR and \fB\-shared\fR can
17891 also be used for RTPs; \fB\-static\fR
17892 is the default.
17893 .IP "\fB\-Bstatic\fR" 4
17894 .IX Item "-Bstatic"
17895 .PD 0
17896 .IP "\fB\-Bdynamic\fR" 4
17897 .IX Item "-Bdynamic"
17898 .PD
17899 These options are passed down to the linker.  They are defined for
17900 compatibility with Diab.
17901 .IP "\fB\-Xbind\-lazy\fR" 4
17902 .IX Item "-Xbind-lazy"
17903 Enable lazy binding of function calls.  This option is equivalent to
17904 \&\fB\-Wl,\-z,now\fR and is defined for compatibility with Diab.
17905 .IP "\fB\-Xbind\-now\fR" 4
17906 .IX Item "-Xbind-now"
17907 Disable lazy binding of function calls.  This option is the default and
17908 is defined for compatibility with Diab.
17909 .PP
17910 \fIx86\-64 Options\fR
17911 .IX Subsection "x86-64 Options"
17912 .PP
17913 These are listed under
17914 .PP
17915 \fIXstormy16 Options\fR
17916 .IX Subsection "Xstormy16 Options"
17917 .PP
17918 These options are defined for Xstormy16:
17919 .IP "\fB\-msim\fR" 4
17920 .IX Item "-msim"
17921 Choose startup files and linker script suitable for the simulator.
17922 .PP
17923 \fIXtensa Options\fR
17924 .IX Subsection "Xtensa Options"
17925 .PP
17926 These options are supported for Xtensa targets:
17927 .IP "\fB\-mconst16\fR" 4
17928 .IX Item "-mconst16"
17929 .PD 0
17930 .IP "\fB\-mno\-const16\fR" 4
17931 .IX Item "-mno-const16"
17932 .PD
17933 Enable or disable use of \f(CW\*(C`CONST16\*(C'\fR instructions for loading
17934 constant values.  The \f(CW\*(C`CONST16\*(C'\fR instruction is currently not a
17935 standard option from Tensilica.  When enabled, \f(CW\*(C`CONST16\*(C'\fR
17936 instructions are always used in place of the standard \f(CW\*(C`L32R\*(C'\fR
17937 instructions.  The use of \f(CW\*(C`CONST16\*(C'\fR is enabled by default only if
17938 the \f(CW\*(C`L32R\*(C'\fR instruction is not available.
17939 .IP "\fB\-mfused\-madd\fR" 4
17940 .IX Item "-mfused-madd"
17941 .PD 0
17942 .IP "\fB\-mno\-fused\-madd\fR" 4
17943 .IX Item "-mno-fused-madd"
17944 .PD
17945 Enable or disable use of fused multiply/add and multiply/subtract
17946 instructions in the floating-point option.  This has no effect if the
17947 floating-point option is not also enabled.  Disabling fused multiply/add
17948 and multiply/subtract instructions forces the compiler to use separate
17949 instructions for the multiply and add/subtract operations.  This may be
17950 desirable in some cases where strict \s-1IEEE\s0 754\-compliant results are
17951 required: the fused multiply add/subtract instructions do not round the
17952 intermediate result, thereby producing results with \fImore\fR bits of
17953 precision than specified by the \s-1IEEE\s0 standard.  Disabling fused multiply
17954 add/subtract instructions also ensures that the program output is not
17955 sensitive to the compiler's ability to combine multiply and add/subtract
17956 operations.
17957 .IP "\fB\-mserialize\-volatile\fR" 4
17958 .IX Item "-mserialize-volatile"
17959 .PD 0
17960 .IP "\fB\-mno\-serialize\-volatile\fR" 4
17961 .IX Item "-mno-serialize-volatile"
17962 .PD
17963 When this option is enabled, \s-1GCC\s0 inserts \f(CW\*(C`MEMW\*(C'\fR instructions before
17964 \&\f(CW\*(C`volatile\*(C'\fR memory references to guarantee sequential consistency.
17965 The default is \fB\-mserialize\-volatile\fR.  Use
17966 \&\fB\-mno\-serialize\-volatile\fR to omit the \f(CW\*(C`MEMW\*(C'\fR instructions.
17967 .IP "\fB\-mforce\-no\-pic\fR" 4
17968 .IX Item "-mforce-no-pic"
17969 For targets, like GNU/Linux, where all user-mode Xtensa code must be
17970 position-independent code (\s-1PIC\s0), this option disables \s-1PIC\s0 for compiling
17971 kernel code.
17972 .IP "\fB\-mtext\-section\-literals\fR" 4
17973 .IX Item "-mtext-section-literals"
17974 .PD 0
17975 .IP "\fB\-mno\-text\-section\-literals\fR" 4
17976 .IX Item "-mno-text-section-literals"
17977 .PD
17978 Control the treatment of literal pools.  The default is
17979 \&\fB\-mno\-text\-section\-literals\fR, which places literals in a separate
17980 section in the output file.  This allows the literal pool to be placed
17981 in a data \s-1RAM/ROM\s0, and it also allows the linker to combine literal
17982 pools from separate object files to remove redundant literals and
17983 improve code size.  With \fB\-mtext\-section\-literals\fR, the literals
17984 are interspersed in the text section in order to keep them as close as
17985 possible to their references.  This may be necessary for large assembly
17986 files.
17987 .IP "\fB\-mtarget\-align\fR" 4
17988 .IX Item "-mtarget-align"
17989 .PD 0
17990 .IP "\fB\-mno\-target\-align\fR" 4
17991 .IX Item "-mno-target-align"
17992 .PD
17993 When this option is enabled, \s-1GCC\s0 instructs the assembler to
17994 automatically align instructions to reduce branch penalties at the
17995 expense of some code density.  The assembler attempts to widen density
17996 instructions to align branch targets and the instructions following call
17997 instructions.  If there are not enough preceding safe density
17998 instructions to align a target, no widening will be performed.  The
17999 default is \fB\-mtarget\-align\fR.  These options do not affect the
18000 treatment of auto-aligned instructions like \f(CW\*(C`LOOP\*(C'\fR, which the
18001 assembler will always align, either by widening density instructions or
18002 by inserting no-op instructions.
18003 .IP "\fB\-mlongcalls\fR" 4
18004 .IX Item "-mlongcalls"
18005 .PD 0
18006 .IP "\fB\-mno\-longcalls\fR" 4
18007 .IX Item "-mno-longcalls"
18008 .PD
18009 When this option is enabled, \s-1GCC\s0 instructs the assembler to translate
18010 direct calls to indirect calls unless it can determine that the target
18011 of a direct call is in the range allowed by the call instruction.  This
18012 translation typically occurs for calls to functions in other source
18013 files.  Specifically, the assembler translates a direct \f(CW\*(C`CALL\*(C'\fR
18014 instruction into an \f(CW\*(C`L32R\*(C'\fR followed by a \f(CW\*(C`CALLX\*(C'\fR instruction.
18015 The default is \fB\-mno\-longcalls\fR.  This option should be used in
18016 programs where the call target can potentially be out of range.  This
18017 option is implemented in the assembler, not the compiler, so the
18018 assembly code generated by \s-1GCC\s0 will still show direct call
18019 instructions\-\-\-look at the disassembled object code to see the actual
18020 instructions.  Note that the assembler will use an indirect call for
18021 every cross-file call, not just those that really will be out of range.
18022 .PP
18023 \fIzSeries Options\fR
18024 .IX Subsection "zSeries Options"
18025 .PP
18026 These are listed under
18027 .Sh "Options for Code Generation Conventions"
18028 .IX Subsection "Options for Code Generation Conventions"
18029 These machine-independent options control the interface conventions
18030 used in code generation.
18031 .PP
18032 Most of them have both positive and negative forms; the negative form
18033 of \fB\-ffoo\fR would be \fB\-fno\-foo\fR.  In the table below, only
18034 one of the forms is listed\-\-\-the one that is not the default.  You
18035 can figure out the other form by either removing \fBno\-\fR or adding
18036 it.
18037 .IP "\fB\-fbounds\-check\fR" 4
18038 .IX Item "-fbounds-check"
18039 For front ends that support it, generate additional code to check that
18040 indices used to access arrays are within the declared range.  This is
18041 currently only supported by the Java and Fortran front ends, where
18042 this option defaults to true and false respectively.
18043 .IP "\fB\-ftrapv\fR" 4
18044 .IX Item "-ftrapv"
18045 This option generates traps for signed overflow on addition, subtraction,
18046 multiplication operations.
18047 .IP "\fB\-fwrapv\fR" 4
18048 .IX Item "-fwrapv"
18049 This option instructs the compiler to assume that signed arithmetic
18050 overflow of addition, subtraction and multiplication wraps around
18051 using twos-complement representation.  This flag enables some optimizations
18052 and disables others.  This option is enabled by default for the Java
18053 front end, as required by the Java language specification.
18054 .IP "\fB\-fexceptions\fR" 4
18055 .IX Item "-fexceptions"
18056 Enable exception handling.  Generates extra code needed to propagate
18057 exceptions.  For some targets, this implies \s-1GCC\s0 will generate frame
18058 unwind information for all functions, which can produce significant data
18059 size overhead, although it does not affect execution.  If you do not
18060 specify this option, \s-1GCC\s0 will enable it by default for languages like
18061 \&\*(C+ that normally require exception handling, and disable it for
18062 languages like C that do not normally require it.  However, you may need
18063 to enable this option when compiling C code that needs to interoperate
18064 properly with exception handlers written in \*(C+.  You may also wish to
18065 disable this option if you are compiling older \*(C+ programs that don't
18066 use exception handling.
18067 .IP "\fB\-fnon\-call\-exceptions\fR" 4
18068 .IX Item "-fnon-call-exceptions"
18069 Generate code that allows trapping instructions to throw exceptions.
18070 Note that this requires platform-specific runtime support that does
18071 not exist everywhere.  Moreover, it only allows \fItrapping\fR
18072 instructions to throw exceptions, i.e. memory references or floating-point
18073 instructions.  It does not allow exceptions to be thrown from
18074 arbitrary signal handlers such as \f(CW\*(C`SIGALRM\*(C'\fR.
18075 .IP "\fB\-funwind\-tables\fR" 4
18076 .IX Item "-funwind-tables"
18077 Similar to \fB\-fexceptions\fR, except that it will just generate any needed
18078 static data, but will not affect the generated code in any other way.
18079 You will normally not enable this option; instead, a language processor
18080 that needs this handling would enable it on your behalf.
18081 .IP "\fB\-fasynchronous\-unwind\-tables\fR" 4
18082 .IX Item "-fasynchronous-unwind-tables"
18083 Generate unwind table in dwarf2 format, if supported by target machine.  The
18084 table is exact at each instruction boundary, so it can be used for stack
18085 unwinding from asynchronous events (such as debugger or garbage collector).
18086 .IP "\fB\-fpcc\-struct\-return\fR" 4
18087 .IX Item "-fpcc-struct-return"
18088 Return \*(L"short\*(R" \f(CW\*(C`struct\*(C'\fR and \f(CW\*(C`union\*(C'\fR values in memory like
18089 longer ones, rather than in registers.  This convention is less
18090 efficient, but it has the advantage of allowing intercallability between
18091 GCC-compiled files and files compiled with other compilers, particularly
18092 the Portable C Compiler (pcc).
18093 .Sp
18094 The precise convention for returning structures in memory depends
18095 on the target configuration macros.
18096 .Sp
18097 Short structures and unions are those whose size and alignment match
18098 that of some integer type.
18099 .Sp
18100 \&\fBWarning:\fR code compiled with the \fB\-fpcc\-struct\-return\fR
18101 switch is not binary compatible with code compiled with the
18102 \&\fB\-freg\-struct\-return\fR switch.
18103 Use it to conform to a non-default application binary interface.
18104 .IP "\fB\-freg\-struct\-return\fR" 4
18105 .IX Item "-freg-struct-return"
18106 Return \f(CW\*(C`struct\*(C'\fR and \f(CW\*(C`union\*(C'\fR values in registers when possible.
18107 This is more efficient for small structures than
18108 \&\fB\-fpcc\-struct\-return\fR.
18109 .Sp
18110 If you specify neither \fB\-fpcc\-struct\-return\fR nor
18111 \&\fB\-freg\-struct\-return\fR, \s-1GCC\s0 defaults to whichever convention is
18112 standard for the target.  If there is no standard convention, \s-1GCC\s0
18113 defaults to \fB\-fpcc\-struct\-return\fR, except on targets where \s-1GCC\s0 is
18114 the principal compiler.  In those cases, we can choose the standard, and
18115 we chose the more efficient register return alternative.
18116 .Sp
18117 \&\fBWarning:\fR code compiled with the \fB\-freg\-struct\-return\fR
18118 switch is not binary compatible with code compiled with the
18119 \&\fB\-fpcc\-struct\-return\fR switch.
18120 Use it to conform to a non-default application binary interface.
18121 .IP "\fB\-fshort\-enums\fR" 4
18122 .IX Item "-fshort-enums"
18123 Allocate to an \f(CW\*(C`enum\*(C'\fR type only as many bytes as it needs for the
18124 declared range of possible values.  Specifically, the \f(CW\*(C`enum\*(C'\fR type
18125 will be equivalent to the smallest integer type that has enough room.
18126 .Sp
18127 \&\fBWarning:\fR the \fB\-fshort\-enums\fR switch causes \s-1GCC\s0 to generate
18128 code that is not binary compatible with code generated without that switch.
18129 Use it to conform to a non-default application binary interface.
18130 .IP "\fB\-fshort\-double\fR" 4
18131 .IX Item "-fshort-double"
18132 Use the same size for \f(CW\*(C`double\*(C'\fR as for \f(CW\*(C`float\*(C'\fR.
18133 .Sp
18134 \&\fBWarning:\fR the \fB\-fshort\-double\fR switch causes \s-1GCC\s0 to generate
18135 code that is not binary compatible with code generated without that switch.
18136 Use it to conform to a non-default application binary interface.
18137 .IP "\fB\-fshort\-wchar\fR" 4
18138 .IX Item "-fshort-wchar"
18139 Override the underlying type for \fBwchar_t\fR to be \fBshort
18140 unsigned int\fR instead of the default for the target.  This option is
18141 useful for building programs to run under \s-1WINE\s0.
18142 .Sp
18143 \&\fBWarning:\fR the \fB\-fshort\-wchar\fR switch causes \s-1GCC\s0 to generate
18144 code that is not binary compatible with code generated without that switch.
18145 Use it to conform to a non-default application binary interface.
18146 .IP "\fB\-fno\-common\fR" 4
18147 .IX Item "-fno-common"
18148 In C code, controls the placement of uninitialized global variables.
18149 Unix C compilers have traditionally permitted multiple definitions of
18150 such variables in different compilation units by placing the variables
18151 in a common block.
18152 This is the behavior specified by \fB\-fcommon\fR, and is the default
18153 for \s-1GCC\s0 on most targets.
18154 On the other hand, this behavior is not required by \s-1ISO\s0 C, and on some
18155 targets may carry a speed or code size penalty on variable references.
18156 The \fB\-fno\-common\fR option specifies that the compiler should place
18157 uninitialized global variables in the data section of the object file,
18158 rather than generating them as common blocks.
18159 This has the effect that if the same variable is declared
18160 (without \f(CW\*(C`extern\*(C'\fR) in two different compilations,
18161 you will get a multiple-definition error when you link them.
18162 In this case, you must compile with \fB\-fcommon\fR instead.
18163 Compiling with \fB\-fno\-common\fR is useful on targets for which
18164 it provides better performance, or if you wish to verify that the
18165 program will work on other systems that always treat uninitialized
18166 variable declarations this way.
18167 .IP "\fB\-fno\-ident\fR" 4
18168 .IX Item "-fno-ident"
18169 Ignore the \fB#ident\fR directive.
18170 .IP "\fB\-finhibit\-size\-directive\fR" 4
18171 .IX Item "-finhibit-size-directive"
18172 Don't output a \f(CW\*(C`.size\*(C'\fR assembler directive, or anything else that
18173 would cause trouble if the function is split in the middle, and the
18174 two halves are placed at locations far apart in memory.  This option is
18175 used when compiling \fIcrtstuff.c\fR; you should not need to use it
18176 for anything else.
18177 .IP "\fB\-fverbose\-asm\fR" 4
18178 .IX Item "-fverbose-asm"
18179 Put extra commentary information in the generated assembly code to
18180 make it more readable.  This option is generally only of use to those
18181 who actually need to read the generated assembly code (perhaps while
18182 debugging the compiler itself).
18183 .Sp
18184 \&\fB\-fno\-verbose\-asm\fR, the default, causes the
18185 extra information to be omitted and is useful when comparing two assembler
18186 files.
18187 .IP "\fB\-frecord\-gcc\-switches\fR" 4
18188 .IX Item "-frecord-gcc-switches"
18189 This switch causes the command line that was used to invoke the
18190 compiler to be recorded into the object file that is being created.
18191 This switch is only implemented on some targets and the exact format
18192 of the recording is target and binary file format dependent, but it
18193 usually takes the form of a section containing \s-1ASCII\s0 text.  This
18194 switch is related to the \fB\-fverbose\-asm\fR switch, but that
18195 switch only records information in the assembler output file as
18196 comments, so it never reaches the object file.
18197 See also \fB\-grecord\-gcc\-switches\fR for another
18198 way of storing compiler options into the object file.
18199 .IP "\fB\-fpic\fR" 4
18200 .IX Item "-fpic"
18201 Generate position-independent code (\s-1PIC\s0) suitable for use in a shared
18202 library, if supported for the target machine.  Such code accesses all
18203 constant addresses through a global offset table (\s-1GOT\s0).  The dynamic
18204 loader resolves the \s-1GOT\s0 entries when the program starts (the dynamic
18205 loader is not part of \s-1GCC\s0; it is part of the operating system).  If
18206 the \s-1GOT\s0 size for the linked executable exceeds a machine-specific
18207 maximum size, you get an error message from the linker indicating that
18208 \&\fB\-fpic\fR does not work; in that case, recompile with \fB\-fPIC\fR
18209 instead.  (These maximums are 8k on the \s-1SPARC\s0 and 32k
18210 on the m68k and \s-1RS/6000\s0.  The 386 has no such limit.)
18211 .Sp
18212 Position-independent code requires special support, and therefore works
18213 only on certain machines.  For the 386, \s-1GCC\s0 supports \s-1PIC\s0 for System V
18214 but not for the Sun 386i.  Code generated for the \s-1IBM\s0 \s-1RS/6000\s0 is always
18215 position-independent.
18216 .Sp
18217 When this flag is set, the macros \f(CW\*(C`_\|_pic_\|_\*(C'\fR and \f(CW\*(C`_\|_PIC_\|_\*(C'\fR
18218 are defined to 1.
18219 .IP "\fB\-fPIC\fR" 4
18220 .IX Item "-fPIC"
18221 If supported for the target machine, emit position-independent code,
18222 suitable for dynamic linking and avoiding any limit on the size of the
18223 global offset table.  This option makes a difference on the m68k,
18224 PowerPC and \s-1SPARC\s0.
18225 .Sp
18226 Position-independent code requires special support, and therefore works
18227 only on certain machines.
18228 .Sp
18229 When this flag is set, the macros \f(CW\*(C`_\|_pic_\|_\*(C'\fR and \f(CW\*(C`_\|_PIC_\|_\*(C'\fR
18230 are defined to 2.
18231 .IP "\fB\-fpie\fR" 4
18232 .IX Item "-fpie"
18233 .PD 0
18234 .IP "\fB\-fPIE\fR" 4
18235 .IX Item "-fPIE"
18236 .PD
18237 These options are similar to \fB\-fpic\fR and \fB\-fPIC\fR, but
18238 generated position independent code can be only linked into executables.
18239 Usually these options are used when \fB\-pie\fR \s-1GCC\s0 option will be
18240 used during linking.
18241 .Sp
18242 \&\fB\-fpie\fR and \fB\-fPIE\fR both define the macros
18243 \&\f(CW\*(C`_\|_pie_\|_\*(C'\fR and \f(CW\*(C`_\|_PIE_\|_\*(C'\fR.  The macros have the value 1
18244 for \fB\-fpie\fR and 2 for \fB\-fPIE\fR.
18245 .IP "\fB\-fno\-jump\-tables\fR" 4
18246 .IX Item "-fno-jump-tables"
18247 Do not use jump tables for switch statements even where it would be
18248 more efficient than other code generation strategies.  This option is
18249 of use in conjunction with \fB\-fpic\fR or \fB\-fPIC\fR for
18250 building code that forms part of a dynamic linker and cannot
18251 reference the address of a jump table.  On some targets, jump tables
18252 do not require a \s-1GOT\s0 and this option is not needed.
18253 .IP "\fB\-ffixed\-\fR\fIreg\fR" 4
18254 .IX Item "-ffixed-reg"
18255 Treat the register named \fIreg\fR as a fixed register; generated code
18256 should never refer to it (except perhaps as a stack pointer, frame
18257 pointer or in some other fixed role).
18258 .Sp
18259 \&\fIreg\fR must be the name of a register.  The register names accepted
18260 are machine-specific and are defined in the \f(CW\*(C`REGISTER_NAMES\*(C'\fR
18261 macro in the machine description macro file.
18262 .Sp
18263 This flag does not have a negative form, because it specifies a
18264 three-way choice.
18265 .IP "\fB\-fcall\-used\-\fR\fIreg\fR" 4
18266 .IX Item "-fcall-used-reg"
18267 Treat the register named \fIreg\fR as an allocable register that is
18268 clobbered by function calls.  It may be allocated for temporaries or
18269 variables that do not live across a call.  Functions compiled this way
18270 will not save and restore the register \fIreg\fR.
18271 .Sp
18272 It is an error to used this flag with the frame pointer or stack pointer.
18273 Use of this flag for other registers that have fixed pervasive roles in
18274 the machine's execution model will produce disastrous results.
18275 .Sp
18276 This flag does not have a negative form, because it specifies a
18277 three-way choice.
18278 .IP "\fB\-fcall\-saved\-\fR\fIreg\fR" 4
18279 .IX Item "-fcall-saved-reg"
18280 Treat the register named \fIreg\fR as an allocable register saved by
18281 functions.  It may be allocated even for temporaries or variables that
18282 live across a call.  Functions compiled this way will save and restore
18283 the register \fIreg\fR if they use it.
18284 .Sp
18285 It is an error to used this flag with the frame pointer or stack pointer.
18286 Use of this flag for other registers that have fixed pervasive roles in
18287 the machine's execution model will produce disastrous results.
18288 .Sp
18289 A different sort of disaster will result from the use of this flag for
18290 a register in which function values may be returned.
18291 .Sp
18292 This flag does not have a negative form, because it specifies a
18293 three-way choice.
18294 .IP "\fB\-fpack\-struct[=\fR\fIn\fR\fB]\fR" 4
18295 .IX Item "-fpack-struct[=n]"
18296 Without a value specified, pack all structure members together without
18297 holes.  When a value is specified (which must be a small power of two), pack
18298 structure members according to this value, representing the maximum
18299 alignment (that is, objects with default alignment requirements larger than
18300 this will be output potentially unaligned at the next fitting location.
18301 .Sp
18302 \&\fBWarning:\fR the \fB\-fpack\-struct\fR switch causes \s-1GCC\s0 to generate
18303 code that is not binary compatible with code generated without that switch.
18304 Additionally, it makes the code suboptimal.
18305 Use it to conform to a non-default application binary interface.
18306 .IP "\fB\-finstrument\-functions\fR" 4
18307 .IX Item "-finstrument-functions"
18308 Generate instrumentation calls for entry and exit to functions.  Just
18309 after function entry and just before function exit, the following
18310 profiling functions will be called with the address of the current
18311 function and its call site.  (On some platforms,
18312 \&\f(CW\*(C`_\|_builtin_return_address\*(C'\fR does not work beyond the current
18313 function, so the call site information may not be available to the
18314 profiling functions otherwise.)
18315 .Sp
18316 .Vb 4
18317 \&        void _\|_cyg_profile_func_enter (void *this_fn,
18318 \&                                       void *call_site);
18319 \&        void _\|_cyg_profile_func_exit  (void *this_fn,
18320 \&                                       void *call_site);
18321 .Ve
18322 .Sp
18323 The first argument is the address of the start of the current function,
18324 which may be looked up exactly in the symbol table.
18325 .Sp
18326 This instrumentation is also done for functions expanded inline in other
18327 functions.  The profiling calls will indicate where, conceptually, the
18328 inline function is entered and exited.  This means that addressable
18329 versions of such functions must be available.  If all your uses of a
18330 function are expanded inline, this may mean an additional expansion of
18331 code size.  If you use \fBextern inline\fR in your C code, an
18332 addressable version of such functions must be provided.  (This is
18333 normally the case anyways, but if you get lucky and the optimizer always
18334 expands the functions inline, you might have gotten away without
18335 providing static copies.)
18336 .Sp
18337 A function may be given the attribute \f(CW\*(C`no_instrument_function\*(C'\fR, in
18338 which case this instrumentation will not be done.  This can be used, for
18339 example, for the profiling functions listed above, high-priority
18340 interrupt routines, and any functions from which the profiling functions
18341 cannot safely be called (perhaps signal handlers, if the profiling
18342 routines generate output or allocate memory).
18343 .IP "\fB\-finstrument\-functions\-exclude\-file\-list=\fR\fIfile\fR\fB,\fR\fIfile\fR\fB,...\fR" 4
18344 .IX Item "-finstrument-functions-exclude-file-list=file,file,..."
18345 Set the list of functions that are excluded from instrumentation (see
18346 the description of \f(CW\*(C`\-finstrument\-functions\*(C'\fR).  If the file that
18347 contains a function definition matches with one of \fIfile\fR, then
18348 that function is not instrumented.  The match is done on substrings:
18349 if the \fIfile\fR parameter is a substring of the file name, it is
18350 considered to be a match.
18351 .Sp
18352 For example:
18353 .Sp
18354 .Vb 1
18355 \&        \-finstrument\-functions\-exclude\-file\-list=/bits/stl,include/sys
18356 .Ve
18357 .Sp
18358 will exclude any inline function defined in files whose pathnames
18359 contain \f(CW\*(C`/bits/stl\*(C'\fR or \f(CW\*(C`include/sys\*(C'\fR.
18360 .Sp
18361 If, for some reason, you want to include letter \f(CW\*(Aq,\*(Aq\fR in one of
18362 \&\fIsym\fR, write \f(CW\*(Aq,\*(Aq\fR. For example,
18363 \&\f(CW\*(C`\-finstrument\-functions\-exclude\-file\-list=\*(Aq,,tmp\*(Aq\*(C'\fR
18364 (note the single quote surrounding the option).
18365 .IP "\fB\-finstrument\-functions\-exclude\-function\-list=\fR\fIsym\fR\fB,\fR\fIsym\fR\fB,...\fR" 4
18366 .IX Item "-finstrument-functions-exclude-function-list=sym,sym,..."
18367 This is similar to \f(CW\*(C`\-finstrument\-functions\-exclude\-file\-list\*(C'\fR,
18368 but this option sets the list of function names to be excluded from
18369 instrumentation.  The function name to be matched is its user-visible
18370 name, such as \f(CW\*(C`vector<int> blah(const vector<int> &)\*(C'\fR, not the
18371 internal mangled name (e.g., \f(CW\*(C`_Z4blahRSt6vectorIiSaIiEE\*(C'\fR).  The
18372 match is done on substrings: if the \fIsym\fR parameter is a substring
18373 of the function name, it is considered to be a match.  For C99 and \*(C+
18374 extended identifiers, the function name must be given in \s-1UTF\-8\s0, not
18375 using universal character names.
18376 .IP "\fB\-fstack\-check\fR" 4
18377 .IX Item "-fstack-check"
18378 Generate code to verify that you do not go beyond the boundary of the
18379 stack.  You should specify this flag if you are running in an
18380 environment with multiple threads, but only rarely need to specify it in
18381 a single-threaded environment since stack overflow is automatically
18382 detected on nearly all systems if there is only one stack.
18383 .Sp
18384 Note that this switch does not actually cause checking to be done; the
18385 operating system or the language runtime must do that.  The switch causes
18386 generation of code to ensure that they see the stack being extended.
18387 .Sp
18388 You can additionally specify a string parameter: \f(CW\*(C`no\*(C'\fR means no
18389 checking, \f(CW\*(C`generic\*(C'\fR means force the use of old-style checking,
18390 \&\f(CW\*(C`specific\*(C'\fR means use the best checking method and is equivalent
18391 to bare \fB\-fstack\-check\fR.
18392 .Sp
18393 Old-style checking is a generic mechanism that requires no specific
18394 target support in the compiler but comes with the following drawbacks:
18395 .RS 4
18396 .IP "1." 4
18397 Modified allocation strategy for large objects: they will always be
18398 allocated dynamically if their size exceeds a fixed threshold.
18399 .IP "2." 4
18400 Fixed limit on the size of the static frame of functions: when it is
18401 topped by a particular function, stack checking is not reliable and
18402 a warning is issued by the compiler.
18403 .IP "3." 4
18404 Inefficiency: because of both the modified allocation strategy and the
18405 generic implementation, the performances of the code are hampered.
18406 .RE
18407 .RS 4
18408 .Sp
18409 Note that old-style stack checking is also the fallback method for
18410 \&\f(CW\*(C`specific\*(C'\fR if no target support has been added in the compiler.
18411 .RE
18412 .IP "\fB\-fstack\-limit\-register=\fR\fIreg\fR" 4
18413 .IX Item "-fstack-limit-register=reg"
18414 .PD 0
18415 .IP "\fB\-fstack\-limit\-symbol=\fR\fIsym\fR" 4
18416 .IX Item "-fstack-limit-symbol=sym"
18417 .IP "\fB\-fno\-stack\-limit\fR" 4
18418 .IX Item "-fno-stack-limit"
18419 .PD
18420 Generate code to ensure that the stack does not grow beyond a certain value,
18421 either the value of a register or the address of a symbol.  If the stack
18422 would grow beyond the value, a signal is raised.  For most targets,
18423 the signal is raised before the stack overruns the boundary, so
18424 it is possible to catch the signal without taking special precautions.
18425 .Sp
18426 For instance, if the stack starts at absolute address \fB0x80000000\fR
18427 and grows downwards, you can use the flags
18428 \&\fB\-fstack\-limit\-symbol=_\|_stack_limit\fR and
18429 \&\fB\-Wl,\-\-defsym,_\|_stack_limit=0x7ffe0000\fR to enforce a stack limit
18430 of 128KB.  Note that this may only work with the \s-1GNU\s0 linker.
18431 .IP "\fB\-fsplit\-stack\fR" 4
18432 .IX Item "-fsplit-stack"
18433 Generate code to automatically split the stack before it overflows.
18434 The resulting program has a discontiguous stack which can only
18435 overflow if the program is unable to allocate any more memory.  This
18436 is most useful when running threaded programs, as it is no longer
18437 necessary to calculate a good stack size to use for each thread.  This
18438 is currently only implemented for the i386 and x86_64 back ends running
18439 GNU/Linux.
18440 .Sp
18441 When code compiled with \fB\-fsplit\-stack\fR calls code compiled
18442 without \fB\-fsplit\-stack\fR, there may not be much stack space
18443 available for the latter code to run.  If compiling all code,
18444 including library code, with \fB\-fsplit\-stack\fR is not an option,
18445 then the linker can fix up these calls so that the code compiled
18446 without \fB\-fsplit\-stack\fR always has a large stack.  Support for
18447 this is implemented in the gold linker in \s-1GNU\s0 binutils release 2.21
18448 and later.
18449 .IP "\fB\-fleading\-underscore\fR" 4
18450 .IX Item "-fleading-underscore"
18451 This option and its counterpart, \fB\-fno\-leading\-underscore\fR, forcibly
18452 change the way C symbols are represented in the object file.  One use
18453 is to help link with legacy assembly code.
18454 .Sp
18455 \&\fBWarning:\fR the \fB\-fleading\-underscore\fR switch causes \s-1GCC\s0 to
18456 generate code that is not binary compatible with code generated without that
18457 switch.  Use it to conform to a non-default application binary interface.
18458 Not all targets provide complete support for this switch.
18459 .IP "\fB\-ftls\-model=\fR\fImodel\fR" 4
18460 .IX Item "-ftls-model=model"
18461 Alter the thread-local storage model to be used.
18462 The \fImodel\fR argument should be one of \f(CW\*(C`global\-dynamic\*(C'\fR,
18463 \&\f(CW\*(C`local\-dynamic\*(C'\fR, \f(CW\*(C`initial\-exec\*(C'\fR or \f(CW\*(C`local\-exec\*(C'\fR.
18464 .Sp
18465 The default without \fB\-fpic\fR is \f(CW\*(C`initial\-exec\*(C'\fR; with
18466 \&\fB\-fpic\fR the default is \f(CW\*(C`global\-dynamic\*(C'\fR.
18467 .IP "\fB\-fvisibility=\fR\fIdefault|internal|hidden|protected\fR" 4
18468 .IX Item "-fvisibility=default|internal|hidden|protected"
18469 Set the default \s-1ELF\s0 image symbol visibility to the specified option\-\-\-all
18470 symbols will be marked with this unless overridden within the code.
18471 Using this feature can very substantially improve linking and
18472 load times of shared object libraries, produce more optimized
18473 code, provide near-perfect \s-1API\s0 export and prevent symbol clashes.
18474 It is \fBstrongly\fR recommended that you use this in any shared objects
18475 you distribute.
18476 .Sp
18477 Despite the nomenclature, \f(CW\*(C`default\*(C'\fR always means public; i.e.,
18478 available to be linked against from outside the shared object.
18479 \&\f(CW\*(C`protected\*(C'\fR and \f(CW\*(C`internal\*(C'\fR are pretty useless in real-world
18480 usage so the only other commonly used option will be \f(CW\*(C`hidden\*(C'\fR.
18481 The default if \fB\-fvisibility\fR isn't specified is
18482 \&\f(CW\*(C`default\*(C'\fR, i.e., make every
18483 symbol public\-\-\-this causes the same behavior as previous versions of
18484 \&\s-1GCC\s0.
18485 .Sp
18486 A good explanation of the benefits offered by ensuring \s-1ELF\s0
18487 symbols have the correct visibility is given by \*(L"How To Write
18488 Shared Libraries\*(R" by Ulrich Drepper (which can be found at
18489 <\fBhttp://people.redhat.com/~drepper/\fR>)\-\-\-however a superior
18490 solution made possible by this option to marking things hidden when
18491 the default is public is to make the default hidden and mark things
18492 public.  This is the norm with \s-1DLL\s0's on Windows and with \fB\-fvisibility=hidden\fR
18493 and \f(CW\*(C`_\|_attribute_\|_ ((visibility("default")))\*(C'\fR instead of
18494 \&\f(CW\*(C`_\|_declspec(dllexport)\*(C'\fR you get almost identical semantics with
18495 identical syntax.  This is a great boon to those working with
18496 cross-platform projects.
18497 .Sp
18498 For those adding visibility support to existing code, you may find
18499 \&\fB#pragma \s-1GCC\s0 visibility\fR of use.  This works by you enclosing
18500 the declarations you wish to set visibility for with (for example)
18501 \&\fB#pragma \s-1GCC\s0 visibility push(hidden)\fR and
18502 \&\fB#pragma \s-1GCC\s0 visibility pop\fR.
18503 Bear in mind that symbol visibility should be viewed \fBas
18504 part of the \s-1API\s0 interface contract\fR and thus all new code should
18505 always specify visibility when it is not the default; i.e., declarations
18506 only for use within the local \s-1DSO\s0 should \fBalways\fR be marked explicitly
18507 as hidden as so to avoid \s-1PLT\s0 indirection overheads\-\-\-making this
18508 abundantly clear also aids readability and self-documentation of the code.
18509 Note that due to \s-1ISO\s0 \*(C+ specification requirements, operator new and
18510 operator delete must always be of default visibility.
18511 .Sp
18512 Be aware that headers from outside your project, in particular system
18513 headers and headers from any other library you use, may not be
18514 expecting to be compiled with visibility other than the default.  You
18515 may need to explicitly say \fB#pragma \s-1GCC\s0 visibility push(default)\fR
18516 before including any such headers.
18517 .Sp
18518 \&\fBextern\fR declarations are not affected by \fB\-fvisibility\fR, so
18519 a lot of code can be recompiled with \fB\-fvisibility=hidden\fR with
18520 no modifications.  However, this means that calls to \fBextern\fR
18521 functions with no explicit visibility will use the \s-1PLT\s0, so it is more
18522 effective to use \fB_\|_attribute ((visibility))\fR and/or
18523 \&\fB#pragma \s-1GCC\s0 visibility\fR to tell the compiler which \fBextern\fR
18524 declarations should be treated as hidden.
18525 .Sp
18526 Note that \fB\-fvisibility\fR does affect \*(C+ vague linkage
18527 entities. This means that, for instance, an exception class that will
18528 be thrown between DSOs must be explicitly marked with default
18529 visibility so that the \fBtype_info\fR nodes will be unified between
18530 the DSOs.
18531 .Sp
18532 An overview of these techniques, their benefits and how to use them
18533 is at <\fBhttp://gcc.gnu.org/wiki/Visibility\fR>.
18534 .IP "\fB\-fstrict\-volatile\-bitfields\fR" 4
18535 .IX Item "-fstrict-volatile-bitfields"
18536 This option should be used if accesses to volatile bit-fields (or other
18537 structure fields, although the compiler usually honors those types
18538 anyway) should use a single access of the width of the
18539 field's type, aligned to a natural alignment if possible.  For
18540 example, targets with memory-mapped peripheral registers might require
18541 all such accesses to be 16 bits wide; with this flag the user could
18542 declare all peripheral bit-fields as \*(L"unsigned short\*(R" (assuming short
18543 is 16 bits on these targets) to force \s-1GCC\s0 to use 16\-bit accesses
18544 instead of, perhaps, a more efficient 32\-bit access.
18545 .Sp
18546 If this option is disabled, the compiler will use the most efficient
18547 instruction.  In the previous example, that might be a 32\-bit load
18548 instruction, even though that will access bytes that do not contain
18549 any portion of the bit-field, or memory-mapped registers unrelated to
18550 the one being updated.
18551 .Sp
18552 If the target requires strict alignment, and honoring the field
18553 type would require violating this alignment, a warning is issued.
18554 If the field has \f(CW\*(C`packed\*(C'\fR attribute, the access is done without
18555 honoring the field type.  If the field doesn't have \f(CW\*(C`packed\*(C'\fR
18556 attribute, the access is done honoring the field type.  In both cases,
18557 \&\s-1GCC\s0 assumes that the user knows something about the target hardware
18558 that it is unaware of.
18559 .Sp
18560 The default value of this option is determined by the application binary
18561 interface for the target processor.
18562 .SH "ENVIRONMENT"
18563 .IX Header "ENVIRONMENT"
18564 This section describes several environment variables that affect how \s-1GCC\s0
18565 operates.  Some of them work by specifying directories or prefixes to use
18566 when searching for various kinds of files.  Some are used to specify other
18567 aspects of the compilation environment.
18568 .PP
18569 Note that you can also specify places to search using options such as
18570 \&\fB\-B\fR, \fB\-I\fR and \fB\-L\fR.  These
18571 take precedence over places specified using environment variables, which
18572 in turn take precedence over those specified by the configuration of \s-1GCC\s0.
18573 .IP "\fB\s-1LANG\s0\fR" 4
18574 .IX Item "LANG"
18575 .PD 0
18576 .IP "\fB\s-1LC_CTYPE\s0\fR" 4
18577 .IX Item "LC_CTYPE"
18578 .IP "\fB\s-1LC_MESSAGES\s0\fR" 4
18579 .IX Item "LC_MESSAGES"
18580 .IP "\fB\s-1LC_ALL\s0\fR" 4
18581 .IX Item "LC_ALL"
18582 .PD
18583 These environment variables control the way that \s-1GCC\s0 uses
18584 localization information which allows \s-1GCC\s0 to work with different
18585 national conventions.  \s-1GCC\s0 inspects the locale categories
18586 \&\fB\s-1LC_CTYPE\s0\fR and \fB\s-1LC_MESSAGES\s0\fR if it has been configured to do
18587 so.  These locale categories can be set to any value supported by your
18588 installation.  A typical value is \fBen_GB.UTF\-8\fR for English in the United
18589 Kingdom encoded in \s-1UTF\-8\s0.
18590 .Sp
18591 The \fB\s-1LC_CTYPE\s0\fR environment variable specifies character
18592 classification.  \s-1GCC\s0 uses it to determine the character boundaries in
18593 a string; this is needed for some multibyte encodings that contain quote
18594 and escape characters that would otherwise be interpreted as a string
18595 end or escape.
18596 .Sp
18597 The \fB\s-1LC_MESSAGES\s0\fR environment variable specifies the language to
18598 use in diagnostic messages.
18599 .Sp
18600 If the \fB\s-1LC_ALL\s0\fR environment variable is set, it overrides the value
18601 of \fB\s-1LC_CTYPE\s0\fR and \fB\s-1LC_MESSAGES\s0\fR; otherwise, \fB\s-1LC_CTYPE\s0\fR
18602 and \fB\s-1LC_MESSAGES\s0\fR default to the value of the \fB\s-1LANG\s0\fR
18603 environment variable.  If none of these variables are set, \s-1GCC\s0
18604 defaults to traditional C English behavior.
18605 .IP "\fB\s-1TMPDIR\s0\fR" 4
18606 .IX Item "TMPDIR"
18607 If \fB\s-1TMPDIR\s0\fR is set, it specifies the directory to use for temporary
18608 files.  \s-1GCC\s0 uses temporary files to hold the output of one stage of
18609 compilation which is to be used as input to the next stage: for example,
18610 the output of the preprocessor, which is the input to the compiler
18611 proper.
18612 .IP "\fB\s-1GCC_COMPARE_DEBUG\s0\fR" 4
18613 .IX Item "GCC_COMPARE_DEBUG"
18614 Setting \fB\s-1GCC_COMPARE_DEBUG\s0\fR is nearly equivalent to passing
18615 \&\fB\-fcompare\-debug\fR to the compiler driver.  See the documentation
18616 of this option for more details.
18617 .IP "\fB\s-1GCC_EXEC_PREFIX\s0\fR" 4
18618 .IX Item "GCC_EXEC_PREFIX"
18619 If \fB\s-1GCC_EXEC_PREFIX\s0\fR is set, it specifies a prefix to use in the
18620 names of the subprograms executed by the compiler.  No slash is added
18621 when this prefix is combined with the name of a subprogram, but you can
18622 specify a prefix that ends with a slash if you wish.
18623 .Sp
18624 If \fB\s-1GCC_EXEC_PREFIX\s0\fR is not set, \s-1GCC\s0 will attempt to figure out
18625 an appropriate prefix to use based on the pathname it was invoked with.
18626 .Sp
18627 If \s-1GCC\s0 cannot find the subprogram using the specified prefix, it
18628 tries looking in the usual places for the subprogram.
18629 .Sp
18630 The default value of \fB\s-1GCC_EXEC_PREFIX\s0\fR is
18631 \&\fI\fIprefix\fI/lib/gcc/\fR where \fIprefix\fR is the prefix to
18632 the installed compiler. In many cases \fIprefix\fR is the value
18633 of \f(CW\*(C`prefix\*(C'\fR when you ran the \fIconfigure\fR script.
18634 .Sp
18635 Other prefixes specified with \fB\-B\fR take precedence over this prefix.
18636 .Sp
18637 This prefix is also used for finding files such as \fIcrt0.o\fR that are
18638 used for linking.
18639 .Sp
18640 In addition, the prefix is used in an unusual way in finding the
18641 directories to search for header files.  For each of the standard
18642 directories whose name normally begins with \fB/usr/local/lib/gcc\fR
18643 (more precisely, with the value of \fB\s-1GCC_INCLUDE_DIR\s0\fR), \s-1GCC\s0 tries
18644 replacing that beginning with the specified prefix to produce an
18645 alternate directory name.  Thus, with \fB\-Bfoo/\fR, \s-1GCC\s0 will search
18646 \&\fIfoo/bar\fR where it would normally search \fI/usr/local/lib/bar\fR.
18647 These alternate directories are searched first; the standard directories
18648 come next. If a standard directory begins with the configured
18649 \&\fIprefix\fR then the value of \fIprefix\fR is replaced by
18650 \&\fB\s-1GCC_EXEC_PREFIX\s0\fR when looking for header files.
18651 .IP "\fB\s-1COMPILER_PATH\s0\fR" 4
18652 .IX Item "COMPILER_PATH"
18653 The value of \fB\s-1COMPILER_PATH\s0\fR is a colon-separated list of
18654 directories, much like \fB\s-1PATH\s0\fR.  \s-1GCC\s0 tries the directories thus
18655 specified when searching for subprograms, if it can't find the
18656 subprograms using \fB\s-1GCC_EXEC_PREFIX\s0\fR.
18657 .IP "\fB\s-1LIBRARY_PATH\s0\fR" 4
18658 .IX Item "LIBRARY_PATH"
18659 The value of \fB\s-1LIBRARY_PATH\s0\fR is a colon-separated list of
18660 directories, much like \fB\s-1PATH\s0\fR.  When configured as a native compiler,
18661 \&\s-1GCC\s0 tries the directories thus specified when searching for special
18662 linker files, if it can't find them using \fB\s-1GCC_EXEC_PREFIX\s0\fR.  Linking
18663 using \s-1GCC\s0 also uses these directories when searching for ordinary
18664 libraries for the \fB\-l\fR option (but directories specified with
18665 \&\fB\-L\fR come first).
18666 .IP "\fB\s-1LANG\s0\fR" 4
18667 .IX Item "LANG"
18668 This variable is used to pass locale information to the compiler.  One way in
18669 which this information is used is to determine the character set to be used
18670 when character literals, string literals and comments are parsed in C and \*(C+.
18671 When the compiler is configured to allow multibyte characters,
18672 the following values for \fB\s-1LANG\s0\fR are recognized:
18673 .RS 4
18674 .IP "\fBC\-JIS\fR" 4
18675 .IX Item "C-JIS"
18676 Recognize \s-1JIS\s0 characters.
18677 .IP "\fBC\-SJIS\fR" 4
18678 .IX Item "C-SJIS"
18679 Recognize \s-1SJIS\s0 characters.
18680 .IP "\fBC\-EUCJP\fR" 4
18681 .IX Item "C-EUCJP"
18682 Recognize \s-1EUCJP\s0 characters.
18683 .RE
18684 .RS 4
18685 .Sp
18686 If \fB\s-1LANG\s0\fR is not defined, or if it has some other value, then the
18687 compiler will use mblen and mbtowc as defined by the default locale to
18688 recognize and translate multibyte characters.
18689 .RE
18690 .PP
18691 Some additional environments variables affect the behavior of the
18692 preprocessor.
18693 .IP "\fB\s-1CPATH\s0\fR" 4
18694 .IX Item "CPATH"
18695 .PD 0
18696 .IP "\fBC_INCLUDE_PATH\fR" 4
18697 .IX Item "C_INCLUDE_PATH"
18698 .IP "\fB\s-1CPLUS_INCLUDE_PATH\s0\fR" 4
18699 .IX Item "CPLUS_INCLUDE_PATH"
18700 .IP "\fB\s-1OBJC_INCLUDE_PATH\s0\fR" 4
18701 .IX Item "OBJC_INCLUDE_PATH"
18702 .PD
18703 Each variable's value is a list of directories separated by a special
18704 character, much like \fB\s-1PATH\s0\fR, in which to look for header files.
18705 The special character, \f(CW\*(C`PATH_SEPARATOR\*(C'\fR, is target-dependent and
18706 determined at \s-1GCC\s0 build time.  For Microsoft Windows-based targets it is a
18707 semicolon, and for almost all other targets it is a colon.
18708 .Sp
18709 \&\fB\s-1CPATH\s0\fR specifies a list of directories to be searched as if
18710 specified with \fB\-I\fR, but after any paths given with \fB\-I\fR
18711 options on the command line.  This environment variable is used
18712 regardless of which language is being preprocessed.
18713 .Sp
18714 The remaining environment variables apply only when preprocessing the
18715 particular language indicated.  Each specifies a list of directories
18716 to be searched as if specified with \fB\-isystem\fR, but after any
18717 paths given with \fB\-isystem\fR options on the command line.
18718 .Sp
18719 In all these variables, an empty element instructs the compiler to
18720 search its current working directory.  Empty elements can appear at the
18721 beginning or end of a path.  For instance, if the value of
18722 \&\fB\s-1CPATH\s0\fR is \f(CW\*(C`:/special/include\*(C'\fR, that has the same
18723 effect as \fB\-I.\ \-I/special/include\fR.
18724 .IP "\fB\s-1DEPENDENCIES_OUTPUT\s0\fR" 4
18725 .IX Item "DEPENDENCIES_OUTPUT"
18726 If this variable is set, its value specifies how to output
18727 dependencies for Make based on the non-system header files processed
18728 by the compiler.  System header files are ignored in the dependency
18729 output.
18730 .Sp
18731 The value of \fB\s-1DEPENDENCIES_OUTPUT\s0\fR can be just a file name, in
18732 which case the Make rules are written to that file, guessing the target
18733 name from the source file name.  Or the value can have the form
18734 \&\fIfile\fR\fB \fR\fItarget\fR, in which case the rules are written to
18735 file \fIfile\fR using \fItarget\fR as the target name.
18736 .Sp
18737 In other words, this environment variable is equivalent to combining
18738 the options \fB\-MM\fR and \fB\-MF\fR,
18739 with an optional \fB\-MT\fR switch too.
18740 .IP "\fB\s-1SUNPRO_DEPENDENCIES\s0\fR" 4
18741 .IX Item "SUNPRO_DEPENDENCIES"
18742 This variable is the same as \fB\s-1DEPENDENCIES_OUTPUT\s0\fR (see above),
18743 except that system header files are not ignored, so it implies
18744 \&\fB\-M\fR rather than \fB\-MM\fR.  However, the dependence on the
18745 main input file is omitted.
18746 .SH "BUGS"
18747 .IX Header "BUGS"
18748 For instructions on reporting bugs, see
18749 <\fBhttp://gcc.gnu.org/bugs.html\fR>.
18750 .SH "FOOTNOTES"
18751 .IX Header "FOOTNOTES"
18752 .IP "1." 4
18753 On some systems, \fBgcc \-shared\fR
18754 needs to build supplementary stub code for constructors to work.  On
18755 multi-libbed systems, \fBgcc \-shared\fR must select the correct support
18756 libraries to link against.  Failing to supply the correct flags may lead
18757 to subtle defects.  Supplying them in cases where they are not necessary
18758 is innocuous.
18759 .SH "SEE ALSO"
18760 .IX Header "SEE ALSO"
18761 \&\fIgpl\fR\|(7), \fIgfdl\fR\|(7), \fIfsf\-funding\fR\|(7),
18762 \&\fIcpp\fR\|(1), \fIgcov\fR\|(1), \fIas\fR\|(1), \fIld\fR\|(1), \fIgdb\fR\|(1), \fIadb\fR\|(1), \fIdbx\fR\|(1), \fIsdb\fR\|(1)
18763 and the Info entries for \fIgcc\fR, \fIcpp\fR, \fIas\fR,
18764 \&\fIld\fR, \fIbinutils\fR and \fIgdb\fR.
18765 .SH "AUTHOR"
18766 .IX Header "AUTHOR"
18767 See the Info entry for \fBgcc\fR, or
18768 <\fBhttp://gcc.gnu.org/onlinedocs/gcc/Contributors.html\fR>,
18769 for contributors to \s-1GCC\s0.
18770 .SH "COPYRIGHT"
18771 .IX Header "COPYRIGHT"
18772 Copyright (c) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
18773 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,
18774 2012
18775 Free Software Foundation, Inc.
18776 .PP
18777 Permission is granted to copy, distribute and/or modify this document
18778 under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or
18779 any later version published by the Free Software Foundation; with the
18780 Invariant Sections being \*(L"\s-1GNU\s0 General Public License\*(R" and \*(L"Funding
18781 Free Software\*(R", the Front-Cover texts being (a) (see below), and with
18782 the Back-Cover Texts being (b) (see below).  A copy of the license is
18783 included in the \fIgfdl\fR\|(7) man page.
18784 .PP
18785 (a) The \s-1FSF\s0's Front-Cover Text is:
18786 .PP
18787 .Vb 1
18788 \&     A GNU Manual
18789 .Ve
18790 .PP
18791 (b) The \s-1FSF\s0's Back-Cover Text is:
18792 .PP
18793 .Vb 3
18794 \&     You have freedom to copy and modify this GNU Manual, like GNU
18795 \&     software.  Copies published by the Free Software Foundation raise
18796 \&     funds for GNU development.
18797 .Ve