Import gcc-4.7.2 to new vendor branch
[dragonfly.git] / contrib / gcc-4.7 / gcc / doc / g++.1
1 .\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16)
2 .\"
3 .\" Standard preamble:
4 .\" ========================================================================
5 .de Sp \" Vertical space (when we can't use .PP)
6 .if t .sp .5v
7 .if n .sp
8 ..
9 .de Vb \" Begin verbatim text
10 .ft CW
11 .nf
12 .ne \\$1
13 ..
14 .de Ve \" End verbatim text
15 .ft R
16 .fi
17 ..
18 .\" Set up some character translations and predefined strings.  \*(-- will
19 .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
20 .\" double quote, and \*(R" will give a right double quote.  \*(C+ will
21 .\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
22 .\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
23 .\" nothing in troff, for use with C<>.
24 .tr \(*W-
25 .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
26 .ie n \{\
27 .    ds -- \(*W-
28 .    ds PI pi
29 .    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
30 .    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
31 .    ds L" ""
32 .    ds R" ""
33 .    ds C` ""
34 .    ds C' ""
35 'br\}
36 .el\{\
37 .    ds -- \|\(em\|
38 .    ds PI \(*p
39 .    ds L" ``
40 .    ds R" ''
41 'br\}
42 .\"
43 .\" Escape single quotes in literal strings from groff's Unicode transform.
44 .ie \n(.g .ds Aq \(aq
45 .el       .ds Aq '
46 .\"
47 .\" If the F register is turned on, we'll generate index entries on stderr for
48 .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
49 .\" entries marked with X<> in POD.  Of course, you'll have to process the
50 .\" output yourself in some meaningful fashion.
51 .ie \nF \{\
52 .    de IX
53 .    tm Index:\\$1\t\\n%\t"\\$2"
54 ..
55 .    nr % 0
56 .    rr F
57 .\}
58 .el \{\
59 .    de IX
60 ..
61 .\}
62 .\"
63 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
64 .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
65 .    \" fudge factors for nroff and troff
66 .if n \{\
67 .    ds #H 0
68 .    ds #V .8m
69 .    ds #F .3m
70 .    ds #[ \f1
71 .    ds #] \fP
72 .\}
73 .if t \{\
74 .    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
75 .    ds #V .6m
76 .    ds #F 0
77 .    ds #[ \&
78 .    ds #] \&
79 .\}
80 .    \" simple accents for nroff and troff
81 .if n \{\
82 .    ds ' \&
83 .    ds ` \&
84 .    ds ^ \&
85 .    ds , \&
86 .    ds ~ ~
87 .    ds /
88 .\}
89 .if t \{\
90 .    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
91 .    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
92 .    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
93 .    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
94 .    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
95 .    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
96 .\}
97 .    \" troff and (daisy-wheel) nroff accents
98 .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
99 .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
100 .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
101 .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
102 .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
103 .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
104 .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
105 .ds ae a\h'-(\w'a'u*4/10)'e
106 .ds Ae A\h'-(\w'A'u*4/10)'E
107 .    \" corrections for vroff
108 .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
109 .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
110 .    \" for low resolution devices (crt and lpr)
111 .if \n(.H>23 .if \n(.V>19 \
112 \{\
113 .    ds : e
114 .    ds 8 ss
115 .    ds o a
116 .    ds d- d\h'-1'\(ga
117 .    ds D- D\h'-1'\(hy
118 .    ds th \o'bp'
119 .    ds Th \o'LP'
120 .    ds ae ae
121 .    ds Ae AE
122 .\}
123 .rm #[ #] #H #V #F C
124 .\" ========================================================================
125 .\"
126 .IX Title "GCC 1"
127 .TH GCC 1 "2012-09-20" "gcc-4.7.2" "GNU"
128 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
129 .\" way too many mistakes in technical documents.
130 .if n .ad l
131 .nh
132 .SH "NAME"
133 gcc \- GNU project C and C++ compiler
134 .SH "SYNOPSIS"
135 .IX Header "SYNOPSIS"
136 gcc [\fB\-c\fR|\fB\-S\fR|\fB\-E\fR] [\fB\-std=\fR\fIstandard\fR]
137     [\fB\-g\fR] [\fB\-pg\fR] [\fB\-O\fR\fIlevel\fR]
138     [\fB\-W\fR\fIwarn\fR...] [\fB\-pedantic\fR]
139     [\fB\-I\fR\fIdir\fR...] [\fB\-L\fR\fIdir\fR...]
140     [\fB\-D\fR\fImacro\fR[=\fIdefn\fR]...] [\fB\-U\fR\fImacro\fR]
141     [\fB\-f\fR\fIoption\fR...] [\fB\-m\fR\fImachine-option\fR...]
142     [\fB\-o\fR \fIoutfile\fR] [@\fIfile\fR] \fIinfile\fR...
143 .PP
144 Only the most useful options are listed here; see below for the
145 remainder.  \fBg++\fR accepts mostly the same options as \fBgcc\fR.
146 .SH "DESCRIPTION"
147 .IX Header "DESCRIPTION"
148 When you invoke \s-1GCC\s0, it normally does preprocessing, compilation,
149 assembly and linking.  The \*(L"overall options\*(R" allow you to stop this
150 process at an intermediate stage.  For example, the \fB\-c\fR option
151 says not to run the linker.  Then the output consists of object files
152 output by the assembler.
153 .PP
154 Other options are passed on to one stage of processing.  Some options
155 control the preprocessor and others the compiler itself.  Yet other
156 options control the assembler and linker; most of these are not
157 documented here, since you rarely need to use any of them.
158 .PP
159 Most of the command-line options that you can use with \s-1GCC\s0 are useful
160 for C programs; when an option is only useful with another language
161 (usually \*(C+), the explanation says so explicitly.  If the description
162 for a particular option does not mention a source language, you can use
163 that option with all supported languages.
164 .PP
165 The \fBgcc\fR program accepts options and file names as operands.  Many
166 options have multi-letter names; therefore multiple single-letter options
167 may \fInot\fR be grouped: \fB\-dv\fR is very different from \fB\-d\ \-v\fR.
168 .PP
169 You can mix options and other arguments.  For the most part, the order
170 you use doesn't matter.  Order does matter when you use several
171 options of the same kind; for example, if you specify \fB\-L\fR more
172 than once, the directories are searched in the order specified.  Also,
173 the placement of the \fB\-l\fR option is significant.
174 .PP
175 Many options have long names starting with \fB\-f\fR or with
176 \&\fB\-W\fR\-\-\-for example,
177 \&\fB\-fmove\-loop\-invariants\fR, \fB\-Wformat\fR and so on.  Most of
178 these have both positive and negative forms; the negative form of
179 \&\fB\-ffoo\fR would be \fB\-fno\-foo\fR.  This manual documents
180 only one of these two forms, whichever one is not the default.
181 .SH "OPTIONS"
182 .IX Header "OPTIONS"
183 .SS "Option Summary"
184 .IX Subsection "Option Summary"
185 Here is a summary of all the options, grouped by type.  Explanations are
186 in the following sections.
187 .IP "\fIOverall Options\fR" 4
188 .IX Item "Overall Options"
189 \&\fB\-c  \-S  \-E  \-o\fR \fIfile\fR  \fB\-no\-canonical\-prefixes  
190 \&\-pipe  \-pass\-exit\-codes  
191 \&\-x\fR \fIlanguage\fR  \fB\-v  \-###  \-\-help\fR[\fB=\fR\fIclass\fR[\fB,...\fR]]  \fB\-\-target\-help  
192 \&\-\-version \-wrapper @\fR\fIfile\fR \fB\-fplugin=\fR\fIfile\fR \fB\-fplugin\-arg\-\fR\fIname\fR\fB=\fR\fIarg\fR  
193 \&\fB\-fdump\-ada\-spec\fR[\fB\-slim\fR] \fB\-fdump\-go\-spec=\fR\fIfile\fR
194 .IP "\fIC Language Options\fR" 4
195 .IX Item "C Language Options"
196 \&\fB\-ansi  \-std=\fR\fIstandard\fR  \fB\-fgnu89\-inline 
197 \&\-aux\-info\fR \fIfilename\fR \fB\-fallow\-parameterless\-variadic\-functions 
198 \&\-fno\-asm  \-fno\-builtin  \-fno\-builtin\-\fR\fIfunction\fR 
199 \&\fB\-fhosted  \-ffreestanding \-fopenmp \-fms\-extensions \-fplan9\-extensions 
200 \&\-trigraphs  \-no\-integrated\-cpp  \-traditional  \-traditional\-cpp 
201 \&\-fallow\-single\-precision  \-fcond\-mismatch \-flax\-vector\-conversions 
202 \&\-fsigned\-bitfields  \-fsigned\-char 
203 \&\-funsigned\-bitfields  \-funsigned\-char\fR
204 .IP "\fI\*(C+ Language Options\fR" 4
205 .IX Item " Language Options"
206 \&\fB\-fabi\-version=\fR\fIn\fR  \fB\-fno\-access\-control  \-fcheck\-new 
207 \&\-fconserve\-space  \-fconstexpr\-depth=\fR\fIn\fR  \fB\-ffriend\-injection 
208 \&\-fno\-elide\-constructors 
209 \&\-fno\-enforce\-eh\-specs 
210 \&\-ffor\-scope  \-fno\-for\-scope  \-fno\-gnu\-keywords 
211 \&\-fno\-implicit\-templates 
212 \&\-fno\-implicit\-inline\-templates 
213 \&\-fno\-implement\-inlines  \-fms\-extensions 
214 \&\-fno\-nonansi\-builtins  \-fnothrow\-opt  \-fno\-operator\-names 
215 \&\-fno\-optional\-diags  \-fpermissive 
216 \&\-fno\-pretty\-templates 
217 \&\-frepo  \-fno\-rtti  \-fstats  \-ftemplate\-depth=\fR\fIn\fR 
218 \&\fB\-fno\-threadsafe\-statics \-fuse\-cxa\-atexit  \-fno\-weak  \-nostdinc++ 
219 \&\-fno\-default\-inline  \-fvisibility\-inlines\-hidden 
220 \&\-fvisibility\-ms\-compat 
221 \&\-Wabi  \-Wconversion\-null  \-Wctor\-dtor\-privacy 
222 \&\-Wdelete\-non\-virtual\-dtor \-Wnarrowing \-Wnoexcept 
223 \&\-Wnon\-virtual\-dtor  \-Wreorder 
224 \&\-Weffc++  \-Wstrict\-null\-sentinel 
225 \&\-Wno\-non\-template\-friend  \-Wold\-style\-cast 
226 \&\-Woverloaded\-virtual  \-Wno\-pmf\-conversions 
227 \&\-Wsign\-promo\fR
228 .IP "\fIObjective-C and Objective\-\*(C+ Language Options\fR" 4
229 .IX Item "Objective-C and Objective- Language Options"
230 \&\fB\-fconstant\-string\-class=\fR\fIclass-name\fR 
231 \&\fB\-fgnu\-runtime  \-fnext\-runtime 
232 \&\-fno\-nil\-receivers 
233 \&\-fobjc\-abi\-version=\fR\fIn\fR 
234 \&\fB\-fobjc\-call\-cxx\-cdtors 
235 \&\-fobjc\-direct\-dispatch 
236 \&\-fobjc\-exceptions 
237 \&\-fobjc\-gc 
238 \&\-fobjc\-nilcheck 
239 \&\-fobjc\-std=objc1 
240 \&\-freplace\-objc\-classes 
241 \&\-fzero\-link 
242 \&\-gen\-decls 
243 \&\-Wassign\-intercept 
244 \&\-Wno\-protocol  \-Wselector 
245 \&\-Wstrict\-selector\-match 
246 \&\-Wundeclared\-selector\fR
247 .IP "\fILanguage Independent Options\fR" 4
248 .IX Item "Language Independent Options"
249 \&\fB\-fmessage\-length=\fR\fIn\fR  
250 \&\fB\-fdiagnostics\-show\-location=\fR[\fBonce\fR|\fBevery-line\fR]  
251 \&\fB\-fno\-diagnostics\-show\-option\fR
252 .IP "\fIWarning Options\fR" 4
253 .IX Item "Warning Options"
254 \&\fB\-fsyntax\-only  \-fmax\-errors=\fR\fIn\fR  \fB\-pedantic 
255 \&\-pedantic\-errors 
256 \&\-w  \-Wextra  \-Wall  \-Waddress  \-Waggregate\-return  \-Warray\-bounds 
257 \&\-Wno\-attributes \-Wno\-builtin\-macro\-redefined 
258 \&\-Wc++\-compat \-Wc++11\-compat \-Wcast\-align  \-Wcast\-qual  
259 \&\-Wchar\-subscripts \-Wclobbered  \-Wcomment 
260 \&\-Wconversion  \-Wcoverage\-mismatch  \-Wno\-cpp  \-Wno\-deprecated  
261 \&\-Wno\-deprecated\-declarations \-Wdisabled\-optimization  
262 \&\-Wno\-div\-by\-zero \-Wdouble\-promotion \-Wempty\-body  \-Wenum\-compare 
263 \&\-Wno\-endif\-labels \-Werror  \-Werror=* 
264 \&\-Wfatal\-errors  \-Wfloat\-equal  \-Wformat  \-Wformat=2 
265 \&\-Wno\-format\-contains\-nul \-Wno\-format\-extra\-args \-Wformat\-nonliteral 
266 \&\-Wformat\-security  \-Wformat\-y2k 
267 \&\-Wframe\-larger\-than=\fR\fIlen\fR \fB\-Wno\-free\-nonheap\-object \-Wjump\-misses\-init 
268 \&\-Wignored\-qualifiers 
269 \&\-Wimplicit  \-Wimplicit\-function\-declaration  \-Wimplicit\-int 
270 \&\-Winit\-self  \-Winline \-Wmaybe\-uninitialized 
271 \&\-Wno\-int\-to\-pointer\-cast \-Wno\-invalid\-offsetof 
272 \&\-Winvalid\-pch \-Wlarger\-than=\fR\fIlen\fR  \fB\-Wunsafe\-loop\-optimizations 
273 \&\-Wlogical\-op \-Wlong\-long 
274 \&\-Wmain \-Wmaybe\-uninitialized \-Wmissing\-braces  \-Wmissing\-field\-initializers 
275 \&\-Wmissing\-format\-attribute  \-Wmissing\-include\-dirs 
276 \&\-Wno\-mudflap 
277 \&\-Wno\-multichar  \-Wnonnull  \-Wno\-overflow 
278 \&\-Woverlength\-strings  \-Wpacked  \-Wpacked\-bitfield\-compat  \-Wpadded 
279 \&\-Wparentheses  \-Wpedantic\-ms\-format \-Wno\-pedantic\-ms\-format 
280 \&\-Wpointer\-arith  \-Wno\-pointer\-to\-int\-cast 
281 \&\-Wredundant\-decls 
282 \&\-Wreturn\-type  \-Wsequence\-point  \-Wshadow 
283 \&\-Wsign\-compare  \-Wsign\-conversion  \-Wstack\-protector 
284 \&\-Wstack\-usage=\fR\fIlen\fR \fB\-Wstrict\-aliasing \-Wstrict\-aliasing=n 
285 \&\-Wstrict\-overflow \-Wstrict\-overflow=\fR\fIn\fR 
286 \&\fB\-Wsuggest\-attribute=\fR[\fBpure\fR|\fBconst\fR|\fBnoreturn\fR] 
287 \&\fB\-Wswitch  \-Wswitch\-default  \-Wswitch\-enum \-Wsync\-nand 
288 \&\-Wsystem\-headers  \-Wtrampolines  \-Wtrigraphs  \-Wtype\-limits  \-Wundef 
289 \&\-Wuninitialized  \-Wunknown\-pragmas  \-Wno\-pragmas 
290 \&\-Wunsuffixed\-float\-constants  \-Wunused  \-Wunused\-function 
291 \&\-Wunused\-label  \-Wunused\-local\-typedefs \-Wunused\-parameter 
292 \&\-Wno\-unused\-result \-Wunused\-value  \-Wunused\-variable 
293 \&\-Wunused\-but\-set\-parameter \-Wunused\-but\-set\-variable 
294 \&\-Wvariadic\-macros \-Wvector\-operation\-performance \-Wvla 
295 \&\-Wvolatile\-register\-var  \-Wwrite\-strings \-Wzero\-as\-null\-pointer\-constant\fR
296 .IP "\fIC and Objective-C-only Warning Options\fR" 4
297 .IX Item "C and Objective-C-only Warning Options"
298 \&\fB\-Wbad\-function\-cast  \-Wmissing\-declarations 
299 \&\-Wmissing\-parameter\-type  \-Wmissing\-prototypes  \-Wnested\-externs 
300 \&\-Wold\-style\-declaration  \-Wold\-style\-definition 
301 \&\-Wstrict\-prototypes  \-Wtraditional  \-Wtraditional\-conversion 
302 \&\-Wdeclaration\-after\-statement \-Wpointer\-sign\fR
303 .IP "\fIDebugging Options\fR" 4
304 .IX Item "Debugging Options"
305 \&\fB\-d\fR\fIletters\fR  \fB\-dumpspecs  \-dumpmachine  \-dumpversion 
306 \&\-fdbg\-cnt\-list \-fdbg\-cnt=\fR\fIcounter-value-list\fR 
307 \&\fB\-fdisable\-ipa\-\fR\fIpass_name\fR 
308 \&\fB\-fdisable\-rtl\-\fR\fIpass_name\fR 
309 \&\fB\-fdisable\-rtl\-\fR\fIpass-name\fR\fB=\fR\fIrange-list\fR 
310 \&\fB\-fdisable\-tree\-\fR\fIpass_name\fR 
311 \&\fB\-fdisable\-tree\-\fR\fIpass-name\fR\fB=\fR\fIrange-list\fR 
312 \&\fB\-fdump\-noaddr \-fdump\-unnumbered \-fdump\-unnumbered\-links 
313 \&\-fdump\-translation\-unit\fR[\fB\-\fR\fIn\fR] 
314 \&\fB\-fdump\-class\-hierarchy\fR[\fB\-\fR\fIn\fR] 
315 \&\fB\-fdump\-ipa\-all \-fdump\-ipa\-cgraph \-fdump\-ipa\-inline 
316 \&\-fdump\-passes 
317 \&\-fdump\-statistics 
318 \&\-fdump\-tree\-all 
319 \&\-fdump\-tree\-original\fR[\fB\-\fR\fIn\fR]  
320 \&\fB\-fdump\-tree\-optimized\fR[\fB\-\fR\fIn\fR] 
321 \&\fB\-fdump\-tree\-cfg \-fdump\-tree\-vcg \-fdump\-tree\-alias 
322 \&\-fdump\-tree\-ch 
323 \&\-fdump\-tree\-ssa\fR[\fB\-\fR\fIn\fR] \fB\-fdump\-tree\-pre\fR[\fB\-\fR\fIn\fR] 
324 \&\fB\-fdump\-tree\-ccp\fR[\fB\-\fR\fIn\fR] \fB\-fdump\-tree\-dce\fR[\fB\-\fR\fIn\fR] 
325 \&\fB\-fdump\-tree\-gimple\fR[\fB\-raw\fR] \fB\-fdump\-tree\-mudflap\fR[\fB\-\fR\fIn\fR] 
326 \&\fB\-fdump\-tree\-dom\fR[\fB\-\fR\fIn\fR] 
327 \&\fB\-fdump\-tree\-dse\fR[\fB\-\fR\fIn\fR] 
328 \&\fB\-fdump\-tree\-phiprop\fR[\fB\-\fR\fIn\fR] 
329 \&\fB\-fdump\-tree\-phiopt\fR[\fB\-\fR\fIn\fR] 
330 \&\fB\-fdump\-tree\-forwprop\fR[\fB\-\fR\fIn\fR] 
331 \&\fB\-fdump\-tree\-copyrename\fR[\fB\-\fR\fIn\fR] 
332 \&\fB\-fdump\-tree\-nrv \-fdump\-tree\-vect 
333 \&\-fdump\-tree\-sink 
334 \&\-fdump\-tree\-sra\fR[\fB\-\fR\fIn\fR] 
335 \&\fB\-fdump\-tree\-forwprop\fR[\fB\-\fR\fIn\fR] 
336 \&\fB\-fdump\-tree\-fre\fR[\fB\-\fR\fIn\fR] 
337 \&\fB\-fdump\-tree\-vrp\fR[\fB\-\fR\fIn\fR] 
338 \&\fB\-ftree\-vectorizer\-verbose=\fR\fIn\fR 
339 \&\fB\-fdump\-tree\-storeccp\fR[\fB\-\fR\fIn\fR] 
340 \&\fB\-fdump\-final\-insns=\fR\fIfile\fR 
341 \&\fB\-fcompare\-debug\fR[\fB=\fR\fIopts\fR]  \fB\-fcompare\-debug\-second 
342 \&\-feliminate\-dwarf2\-dups \-feliminate\-unused\-debug\-types 
343 \&\-feliminate\-unused\-debug\-symbols \-femit\-class\-debug\-always 
344 \&\-fenable\-\fR\fIkind\fR\fB\-\fR\fIpass\fR 
345 \&\fB\-fenable\-\fR\fIkind\fR\fB\-\fR\fIpass\fR\fB=\fR\fIrange-list\fR 
346 \&\fB\-fdebug\-types\-section 
347 \&\-fmem\-report \-fpre\-ipa\-mem\-report \-fpost\-ipa\-mem\-report \-fprofile\-arcs 
348 \&\-frandom\-seed=\fR\fIstring\fR \fB\-fsched\-verbose=\fR\fIn\fR 
349 \&\fB\-fsel\-sched\-verbose \-fsel\-sched\-dump\-cfg \-fsel\-sched\-pipelining\-verbose 
350 \&\-fstack\-usage  \-ftest\-coverage  \-ftime\-report \-fvar\-tracking 
351 \&\-fvar\-tracking\-assignments  \-fvar\-tracking\-assignments\-toggle 
352 \&\-g  \-g\fR\fIlevel\fR  \fB\-gtoggle  \-gcoff  \-gdwarf\-\fR\fIversion\fR 
353 \&\fB\-ggdb  \-grecord\-gcc\-switches  \-gno\-record\-gcc\-switches 
354 \&\-gstabs  \-gstabs+  \-gstrict\-dwarf  \-gno\-strict\-dwarf 
355 \&\-gvms  \-gxcoff  \-gxcoff+ 
356 \&\-fno\-merge\-debug\-strings \-fno\-dwarf2\-cfi\-asm 
357 \&\-fdebug\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR 
358 \&\fB\-femit\-struct\-debug\-baseonly \-femit\-struct\-debug\-reduced 
359 \&\-femit\-struct\-debug\-detailed\fR[\fB=\fR\fIspec-list\fR] 
360 \&\fB\-p  \-pg  \-print\-file\-name=\fR\fIlibrary\fR  \fB\-print\-libgcc\-file\-name 
361 \&\-print\-multi\-directory  \-print\-multi\-lib  \-print\-multi\-os\-directory 
362 \&\-print\-prog\-name=\fR\fIprogram\fR  \fB\-print\-search\-dirs  \-Q 
363 \&\-print\-sysroot \-print\-sysroot\-headers\-suffix 
364 \&\-save\-temps \-save\-temps=cwd \-save\-temps=obj \-time\fR[\fB=\fR\fIfile\fR]
365 .IP "\fIOptimization Options\fR" 4
366 .IX Item "Optimization Options"
367 \&\fB\-falign\-functions[=\fR\fIn\fR\fB] \-falign\-jumps[=\fR\fIn\fR\fB] 
368 \&\-falign\-labels[=\fR\fIn\fR\fB] \-falign\-loops[=\fR\fIn\fR\fB] \-fassociative\-math 
369 \&\-fauto\-inc\-dec \-fbranch\-probabilities \-fbranch\-target\-load\-optimize 
370 \&\-fbranch\-target\-load\-optimize2 \-fbtr\-bb\-exclusive \-fcaller\-saves 
371 \&\-fcheck\-data\-deps \-fcombine\-stack\-adjustments \-fconserve\-stack 
372 \&\-fcompare\-elim \-fcprop\-registers \-fcrossjumping 
373 \&\-fcse\-follow\-jumps \-fcse\-skip\-blocks \-fcx\-fortran\-rules 
374 \&\-fcx\-limited\-range 
375 \&\-fdata\-sections \-fdce \-fdelayed\-branch 
376 \&\-fdelete\-null\-pointer\-checks \-fdevirtualize \-fdse 
377 \&\-fearly\-inlining \-fipa\-sra \-fexpensive\-optimizations \-ffat\-lto\-objects 
378 \&\-ffast\-math \-ffinite\-math\-only \-ffloat\-store \-fexcess\-precision=\fR\fIstyle\fR 
379 \&\fB\-fforward\-propagate \-ffp\-contract=\fR\fIstyle\fR \fB\-ffunction\-sections 
380 \&\-fgcse \-fgcse\-after\-reload \-fgcse\-las \-fgcse\-lm \-fgraphite\-identity 
381 \&\-fgcse\-sm \-fif\-conversion \-fif\-conversion2 \-findirect\-inlining 
382 \&\-finline\-functions \-finline\-functions\-called\-once \-finline\-limit=\fR\fIn\fR 
383 \&\fB\-finline\-small\-functions \-fipa\-cp \-fipa\-cp\-clone \-fipa\-matrix\-reorg 
384 \&\-fipa\-pta \-fipa\-profile \-fipa\-pure\-const \-fipa\-reference 
385 \&\-fira\-algorithm=\fR\fIalgorithm\fR 
386 \&\fB\-fira\-region=\fR\fIregion\fR 
387 \&\fB\-fira\-loop\-pressure \-fno\-ira\-share\-save\-slots 
388 \&\-fno\-ira\-share\-spill\-slots \-fira\-verbose=\fR\fIn\fR 
389 \&\fB\-fivopts \-fkeep\-inline\-functions \-fkeep\-static\-consts 
390 \&\-floop\-block \-floop\-flatten \-floop\-interchange \-floop\-strip\-mine 
391 \&\-floop\-parallelize\-all \-flto \-flto\-compression\-level 
392 \&\-flto\-partition=\fR\fIalg\fR \fB\-flto\-report \-fmerge\-all\-constants 
393 \&\-fmerge\-constants \-fmodulo\-sched \-fmodulo\-sched\-allow\-regmoves 
394 \&\-fmove\-loop\-invariants fmudflap \-fmudflapir \-fmudflapth \-fno\-branch\-count\-reg 
395 \&\-fno\-default\-inline 
396 \&\-fno\-defer\-pop \-fno\-function\-cse \-fno\-guess\-branch\-probability 
397 \&\-fno\-inline \-fno\-math\-errno \-fno\-peephole \-fno\-peephole2 
398 \&\-fno\-sched\-interblock \-fno\-sched\-spec \-fno\-signed\-zeros 
399 \&\-fno\-toplevel\-reorder \-fno\-trapping\-math \-fno\-zero\-initialized\-in\-bss 
400 \&\-fomit\-frame\-pointer \-foptimize\-register\-move \-foptimize\-sibling\-calls 
401 \&\-fpartial\-inlining \-fpeel\-loops \-fpredictive\-commoning 
402 \&\-fprefetch\-loop\-arrays 
403 \&\-fprofile\-correction \-fprofile\-dir=\fR\fIpath\fR \fB\-fprofile\-generate 
404 \&\-fprofile\-generate=\fR\fIpath\fR 
405 \&\fB\-fprofile\-use \-fprofile\-use=\fR\fIpath\fR \fB\-fprofile\-values 
406 \&\-freciprocal\-math \-free \-fregmove \-frename\-registers \-freorder\-blocks 
407 \&\-freorder\-blocks\-and\-partition \-freorder\-functions 
408 \&\-frerun\-cse\-after\-loop \-freschedule\-modulo\-scheduled\-loops 
409 \&\-frounding\-math \-fsched2\-use\-superblocks \-fsched\-pressure 
410 \&\-fsched\-spec\-load \-fsched\-spec\-load\-dangerous 
411 \&\-fsched\-stalled\-insns\-dep[=\fR\fIn\fR\fB] \-fsched\-stalled\-insns[=\fR\fIn\fR\fB] 
412 \&\-fsched\-group\-heuristic \-fsched\-critical\-path\-heuristic 
413 \&\-fsched\-spec\-insn\-heuristic \-fsched\-rank\-heuristic 
414 \&\-fsched\-last\-insn\-heuristic \-fsched\-dep\-count\-heuristic 
415 \&\-fschedule\-insns \-fschedule\-insns2 \-fsection\-anchors 
416 \&\-fselective\-scheduling \-fselective\-scheduling2 
417 \&\-fsel\-sched\-pipelining \-fsel\-sched\-pipelining\-outer\-loops 
418 \&\-fshrink\-wrap \-fsignaling\-nans \-fsingle\-precision\-constant 
419 \&\-fsplit\-ivs\-in\-unroller \-fsplit\-wide\-types \-fstack\-protector 
420 \&\-fstack\-protector\-all \-fstrict\-aliasing \-fstrict\-overflow 
421 \&\-fthread\-jumps \-ftracer \-ftree\-bit\-ccp 
422 \&\-ftree\-builtin\-call\-dce \-ftree\-ccp \-ftree\-ch \-ftree\-copy\-prop 
423 \&\-ftree\-copyrename \-ftree\-dce \-ftree\-dominator\-opts \-ftree\-dse 
424 \&\-ftree\-forwprop \-ftree\-fre \-ftree\-loop\-if\-convert 
425 \&\-ftree\-loop\-if\-convert\-stores \-ftree\-loop\-im 
426 \&\-ftree\-phiprop \-ftree\-loop\-distribution \-ftree\-loop\-distribute\-patterns 
427 \&\-ftree\-loop\-ivcanon \-ftree\-loop\-linear \-ftree\-loop\-optimize 
428 \&\-ftree\-parallelize\-loops=\fR\fIn\fR \fB\-ftree\-pre \-ftree\-pta \-ftree\-reassoc 
429 \&\-ftree\-sink \-ftree\-sra \-ftree\-switch\-conversion \-ftree\-tail\-merge 
430 \&\-ftree\-ter \-ftree\-vect\-loop\-version \-ftree\-vectorize \-ftree\-vrp 
431 \&\-funit\-at\-a\-time \-funroll\-all\-loops \-funroll\-loops 
432 \&\-funsafe\-loop\-optimizations \-funsafe\-math\-optimizations \-funswitch\-loops 
433 \&\-fvariable\-expansion\-in\-unroller \-fvect\-cost\-model \-fvpt \-fweb 
434 \&\-fwhole\-program \-fwpa \-fuse\-linker\-plugin 
435 \&\-\-param\fR \fIname\fR\fB=\fR\fIvalue\fR
436 \&\fB\-O  \-O0  \-O1  \-O2  \-O3  \-Os \-Ofast\fR
437 .IP "\fIPreprocessor Options\fR" 4
438 .IX Item "Preprocessor Options"
439 \&\fB\-A\fR\fIquestion\fR\fB=\fR\fIanswer\fR 
440 \&\fB\-A\-\fR\fIquestion\fR[\fB=\fR\fIanswer\fR] 
441 \&\fB\-C  \-dD  \-dI  \-dM  \-dN 
442 \&\-D\fR\fImacro\fR[\fB=\fR\fIdefn\fR]  \fB\-E  \-H 
443 \&\-idirafter\fR \fIdir\fR 
444 \&\fB\-include\fR \fIfile\fR  \fB\-imacros\fR \fIfile\fR 
445 \&\fB\-iprefix\fR \fIfile\fR  \fB\-iwithprefix\fR \fIdir\fR 
446 \&\fB\-iwithprefixbefore\fR \fIdir\fR  \fB\-isystem\fR \fIdir\fR 
447 \&\fB\-imultilib\fR \fIdir\fR \fB\-isysroot\fR \fIdir\fR 
448 \&\fB\-M  \-MM  \-MF  \-MG  \-MP  \-MQ  \-MT  \-nostdinc  
449 \&\-P  \-fdebug\-cpp \-ftrack\-macro\-expansion \-fworking\-directory 
450 \&\-remap \-trigraphs  \-undef  \-U\fR\fImacro\fR  
451 \&\fB\-Wp,\fR\fIoption\fR \fB\-Xpreprocessor\fR \fIoption\fR
452 .IP "\fIAssembler Option\fR" 4
453 .IX Item "Assembler Option"
454 \&\fB\-Wa,\fR\fIoption\fR  \fB\-Xassembler\fR \fIoption\fR
455 .IP "\fILinker Options\fR" 4
456 .IX Item "Linker Options"
457 \&\fIobject-file-name\fR  \fB\-l\fR\fIlibrary\fR 
458 \&\fB\-nostartfiles  \-nodefaultlibs  \-nostdlib \-pie \-rdynamic 
459 \&\-s  \-static  \-static\-libgcc  \-static\-libstdc++ \-shared  
460 \&\-shared\-libgcc  \-symbolic 
461 \&\-T\fR \fIscript\fR  \fB\-Wl,\fR\fIoption\fR  \fB\-Xlinker\fR \fIoption\fR 
462 \&\fB\-u\fR \fIsymbol\fR
463 .IP "\fIDirectory Options\fR" 4
464 .IX Item "Directory Options"
465 \&\fB\-B\fR\fIprefix\fR \fB\-I\fR\fIdir\fR \fB\-iplugindir=\fR\fIdir\fR 
466 \&\fB\-iquote\fR\fIdir\fR \fB\-L\fR\fIdir\fR \fB\-specs=\fR\fIfile\fR \fB\-I\- 
467 \&\-\-sysroot=\fR\fIdir\fR
468 .IP "\fIMachine Dependent Options\fR" 4
469 .IX Item "Machine Dependent Options"
470 \&\fIAdapteva Epiphany Options\fR
471 \&\fB\-mhalf\-reg\-file \-mprefer\-short\-insn\-regs 
472 \&\-mbranch\-cost=\fR\fInum\fR \fB\-mcmove \-mnops=\fR\fInum\fR \fB\-msoft\-cmpsf 
473 \&\-msplit\-lohi \-mpost\-inc \-mpost\-modify \-mstack\-offset=\fR\fInum\fR 
474 \&\fB\-mround\-nearest \-mlong\-calls \-mshort\-calls \-msmall16 
475 \&\-mfp\-mode=\fR\fImode\fR \fB\-mvect\-double \-max\-vect\-align=\fR\fInum\fR 
476 \&\fB\-msplit\-vecmove\-early \-m1reg\-\fR\fIreg\fR
477 .Sp
478 \&\fI\s-1ARM\s0 Options\fR
479 \&\fB\-mapcs\-frame  \-mno\-apcs\-frame 
480 \&\-mabi=\fR\fIname\fR 
481 \&\fB\-mapcs\-stack\-check  \-mno\-apcs\-stack\-check 
482 \&\-mapcs\-float  \-mno\-apcs\-float 
483 \&\-mapcs\-reentrant  \-mno\-apcs\-reentrant 
484 \&\-msched\-prolog  \-mno\-sched\-prolog 
485 \&\-mlittle\-endian  \-mbig\-endian  \-mwords\-little\-endian 
486 \&\-mfloat\-abi=\fR\fIname\fR  \fB\-mfpe 
487 \&\-mfp16\-format=\fR\fIname\fR
488 \&\fB\-mthumb\-interwork  \-mno\-thumb\-interwork 
489 \&\-mcpu=\fR\fIname\fR  \fB\-march=\fR\fIname\fR  \fB\-mfpu=\fR\fIname\fR  
490 \&\fB\-mstructure\-size\-boundary=\fR\fIn\fR 
491 \&\fB\-mabort\-on\-noreturn 
492 \&\-mlong\-calls  \-mno\-long\-calls 
493 \&\-msingle\-pic\-base  \-mno\-single\-pic\-base 
494 \&\-mpic\-register=\fR\fIreg\fR 
495 \&\fB\-mnop\-fun\-dllimport 
496 \&\-mcirrus\-fix\-invalid\-insns \-mno\-cirrus\-fix\-invalid\-insns 
497 \&\-mpoke\-function\-name 
498 \&\-mthumb  \-marm 
499 \&\-mtpcs\-frame  \-mtpcs\-leaf\-frame 
500 \&\-mcaller\-super\-interworking  \-mcallee\-super\-interworking 
501 \&\-mtp=\fR\fIname\fR \fB\-mtls\-dialect=\fR\fIdialect\fR 
502 \&\fB\-mword\-relocations 
503 \&\-mfix\-cortex\-m3\-ldrd 
504 \&\-munaligned\-access\fR
505 .Sp
506 \&\fI\s-1AVR\s0 Options\fR
507 \&\fB\-mmcu=\fR\fImcu\fR \fB\-maccumulate\-args \-mbranch\-cost=\fR\fIcost\fR 
508 \&\fB\-mcall\-prologues \-mint8 \-mno\-interrupts \-mrelax \-mshort\-calls 
509 \&\-mstrict\-X \-mtiny\-stack\fR
510 .Sp
511 \&\fIBlackfin Options\fR
512 \&\fB\-mcpu=\fR\fIcpu\fR[\fB\-\fR\fIsirevision\fR] 
513 \&\fB\-msim \-momit\-leaf\-frame\-pointer  \-mno\-omit\-leaf\-frame\-pointer 
514 \&\-mspecld\-anomaly  \-mno\-specld\-anomaly  \-mcsync\-anomaly  \-mno\-csync\-anomaly 
515 \&\-mlow\-64k \-mno\-low64k  \-mstack\-check\-l1  \-mid\-shared\-library 
516 \&\-mno\-id\-shared\-library  \-mshared\-library\-id=\fR\fIn\fR 
517 \&\fB\-mleaf\-id\-shared\-library  \-mno\-leaf\-id\-shared\-library 
518 \&\-msep\-data  \-mno\-sep\-data  \-mlong\-calls  \-mno\-long\-calls 
519 \&\-mfast\-fp \-minline\-plt \-mmulticore  \-mcorea  \-mcoreb  \-msdram 
520 \&\-micplb\fR
521 .Sp
522 \&\fIC6X Options\fR
523 \&\fB\-mbig\-endian  \-mlittle\-endian \-march=\fR\fIcpu\fR 
524 \&\fB\-msim \-msdata=\fR\fIsdata-type\fR
525 .Sp
526 \&\fI\s-1CRIS\s0 Options\fR
527 \&\fB\-mcpu=\fR\fIcpu\fR  \fB\-march=\fR\fIcpu\fR  \fB\-mtune=\fR\fIcpu\fR 
528 \&\fB\-mmax\-stack\-frame=\fR\fIn\fR  \fB\-melinux\-stacksize=\fR\fIn\fR 
529 \&\fB\-metrax4  \-metrax100  \-mpdebug  \-mcc\-init  \-mno\-side\-effects 
530 \&\-mstack\-align  \-mdata\-align  \-mconst\-align 
531 \&\-m32\-bit  \-m16\-bit  \-m8\-bit  \-mno\-prologue\-epilogue  \-mno\-gotplt 
532 \&\-melf  \-maout  \-melinux  \-mlinux  \-sim  \-sim2 
533 \&\-mmul\-bug\-workaround  \-mno\-mul\-bug\-workaround\fR
534 .Sp
535 \&\fI\s-1CR16\s0 Options\fR
536 \&\fB\-mmac 
537 \&\-mcr16cplus \-mcr16c 
538 \&\-msim \-mint32 \-mbit\-ops
539 \&\-mdata\-model=\fR\fImodel\fR
540 .Sp
541 \&\fIDarwin Options\fR
542 \&\fB\-all_load  \-allowable_client  \-arch  \-arch_errors_fatal 
543 \&\-arch_only  \-bind_at_load  \-bundle  \-bundle_loader 
544 \&\-client_name  \-compatibility_version  \-current_version 
545 \&\-dead_strip 
546 \&\-dependency\-file  \-dylib_file  \-dylinker_install_name 
547 \&\-dynamic  \-dynamiclib  \-exported_symbols_list 
548 \&\-filelist  \-flat_namespace  \-force_cpusubtype_ALL 
549 \&\-force_flat_namespace  \-headerpad_max_install_names 
550 \&\-iframework 
551 \&\-image_base  \-init  \-install_name  \-keep_private_externs 
552 \&\-multi_module  \-multiply_defined  \-multiply_defined_unused 
553 \&\-noall_load   \-no_dead_strip_inits_and_terms 
554 \&\-nofixprebinding \-nomultidefs  \-noprebind  \-noseglinkedit 
555 \&\-pagezero_size  \-prebind  \-prebind_all_twolevel_modules 
556 \&\-private_bundle  \-read_only_relocs  \-sectalign 
557 \&\-sectobjectsymbols  \-whyload  \-seg1addr 
558 \&\-sectcreate  \-sectobjectsymbols  \-sectorder 
559 \&\-segaddr \-segs_read_only_addr \-segs_read_write_addr 
560 \&\-seg_addr_table  \-seg_addr_table_filename  \-seglinkedit 
561 \&\-segprot  \-segs_read_only_addr  \-segs_read_write_addr 
562 \&\-single_module  \-static  \-sub_library  \-sub_umbrella 
563 \&\-twolevel_namespace  \-umbrella  \-undefined 
564 \&\-unexported_symbols_list  \-weak_reference_mismatches 
565 \&\-whatsloaded \-F \-gused \-gfull \-mmacosx\-version\-min=\fR\fIversion\fR 
566 \&\fB\-mkernel \-mone\-byte\-bool\fR
567 .Sp
568 \&\fI\s-1DEC\s0 Alpha Options\fR
569 \&\fB\-mno\-fp\-regs  \-msoft\-float  \-malpha\-as  \-mgas 
570 \&\-mieee  \-mieee\-with\-inexact  \-mieee\-conformant 
571 \&\-mfp\-trap\-mode=\fR\fImode\fR  \fB\-mfp\-rounding\-mode=\fR\fImode\fR 
572 \&\fB\-mtrap\-precision=\fR\fImode\fR  \fB\-mbuild\-constants 
573 \&\-mcpu=\fR\fIcpu-type\fR  \fB\-mtune=\fR\fIcpu-type\fR 
574 \&\fB\-mbwx  \-mmax  \-mfix  \-mcix 
575 \&\-mfloat\-vax  \-mfloat\-ieee 
576 \&\-mexplicit\-relocs  \-msmall\-data  \-mlarge\-data 
577 \&\-msmall\-text  \-mlarge\-text 
578 \&\-mmemory\-latency=\fR\fItime\fR
579 .Sp
580 \&\fI\s-1DEC\s0 Alpha/VMS Options\fR
581 \&\fB\-mvms\-return\-codes \-mdebug\-main=\fR\fIprefix\fR \fB\-mmalloc64\fR
582 .Sp
583 \&\fI\s-1FR30\s0 Options\fR
584 \&\fB\-msmall\-model \-mno\-lsim\fR
585 .Sp
586 \&\fI\s-1FRV\s0 Options\fR
587 \&\fB\-mgpr\-32  \-mgpr\-64  \-mfpr\-32  \-mfpr\-64 
588 \&\-mhard\-float  \-msoft\-float 
589 \&\-malloc\-cc  \-mfixed\-cc  \-mdword  \-mno\-dword 
590 \&\-mdouble  \-mno\-double 
591 \&\-mmedia  \-mno\-media  \-mmuladd  \-mno\-muladd 
592 \&\-mfdpic  \-minline\-plt \-mgprel\-ro  \-multilib\-library\-pic 
593 \&\-mlinked\-fp  \-mlong\-calls  \-malign\-labels 
594 \&\-mlibrary\-pic  \-macc\-4  \-macc\-8 
595 \&\-mpack  \-mno\-pack  \-mno\-eflags  \-mcond\-move  \-mno\-cond\-move 
596 \&\-moptimize\-membar \-mno\-optimize\-membar 
597 \&\-mscc  \-mno\-scc  \-mcond\-exec  \-mno\-cond\-exec 
598 \&\-mvliw\-branch  \-mno\-vliw\-branch 
599 \&\-mmulti\-cond\-exec  \-mno\-multi\-cond\-exec  \-mnested\-cond\-exec 
600 \&\-mno\-nested\-cond\-exec  \-mtomcat\-stats 
601 \&\-mTLS \-mtls 
602 \&\-mcpu=\fR\fIcpu\fR
603 .Sp
604 \&\fIGNU/Linux Options\fR
605 \&\fB\-mglibc \-muclibc \-mbionic \-mandroid 
606 \&\-tno\-android\-cc \-tno\-android\-ld\fR
607 .Sp
608 \&\fIH8/300 Options\fR
609 \&\fB\-mrelax  \-mh  \-ms  \-mn  \-mint32  \-malign\-300\fR
610 .Sp
611 \&\fI\s-1HPPA\s0 Options\fR
612 \&\fB\-march=\fR\fIarchitecture-type\fR 
613 \&\fB\-mbig\-switch  \-mdisable\-fpregs  \-mdisable\-indexing 
614 \&\-mfast\-indirect\-calls  \-mgas  \-mgnu\-ld   \-mhp\-ld 
615 \&\-mfixed\-range=\fR\fIregister-range\fR 
616 \&\fB\-mjump\-in\-delay \-mlinker\-opt \-mlong\-calls 
617 \&\-mlong\-load\-store  \-mno\-big\-switch  \-mno\-disable\-fpregs 
618 \&\-mno\-disable\-indexing  \-mno\-fast\-indirect\-calls  \-mno\-gas 
619 \&\-mno\-jump\-in\-delay  \-mno\-long\-load\-store 
620 \&\-mno\-portable\-runtime  \-mno\-soft\-float 
621 \&\-mno\-space\-regs  \-msoft\-float  \-mpa\-risc\-1\-0 
622 \&\-mpa\-risc\-1\-1  \-mpa\-risc\-2\-0  \-mportable\-runtime 
623 \&\-mschedule=\fR\fIcpu-type\fR  \fB\-mspace\-regs  \-msio  \-mwsio 
624 \&\-munix=\fR\fIunix-std\fR  \fB\-nolibdld  \-static  \-threads\fR
625 .Sp
626 \&\fIi386 and x86\-64 Options\fR
627 \&\fB\-mtune=\fR\fIcpu-type\fR  \fB\-march=\fR\fIcpu-type\fR 
628 \&\fB\-mfpmath=\fR\fIunit\fR 
629 \&\fB\-masm=\fR\fIdialect\fR  \fB\-mno\-fancy\-math\-387 
630 \&\-mno\-fp\-ret\-in\-387  \-msoft\-float 
631 \&\-mno\-wide\-multiply  \-mrtd  \-malign\-double 
632 \&\-mpreferred\-stack\-boundary=\fR\fInum\fR 
633 \&\fB\-mincoming\-stack\-boundary=\fR\fInum\fR 
634 \&\fB\-mcld \-mcx16 \-msahf \-mmovbe \-mcrc32 
635 \&\-mrecip \-mrecip=\fR\fIopt\fR 
636 \&\fB\-mvzeroupper 
637 \&\-mmmx  \-msse  \-msse2 \-msse3 \-mssse3 \-msse4.1 \-msse4.2 \-msse4 \-mavx 
638 \&\-mavx2 \-maes \-mpclmul \-mfsgsbase \-mrdrnd \-mf16c \-mfma 
639 \&\-msse4a \-m3dnow \-mpopcnt \-mabm \-mbmi \-mtbm \-mfma4 \-mxop \-mlzcnt 
640 \&\-mbmi2 \-mlwp \-mthreads  \-mno\-align\-stringops  \-minline\-all\-stringops 
641 \&\-minline\-stringops\-dynamically \-mstringop\-strategy=\fR\fIalg\fR 
642 \&\fB\-mpush\-args  \-maccumulate\-outgoing\-args  \-m128bit\-long\-double 
643 \&\-m96bit\-long\-double  \-mregparm=\fR\fInum\fR  \fB\-msseregparm 
644 \&\-mveclibabi=\fR\fItype\fR \fB\-mvect8\-ret\-in\-mem 
645 \&\-mpc32 \-mpc64 \-mpc80 \-mstackrealign 
646 \&\-momit\-leaf\-frame\-pointer  \-mno\-red\-zone \-mno\-tls\-direct\-seg\-refs 
647 \&\-mcmodel=\fR\fIcode-model\fR \fB\-mabi=\fR\fIname\fR 
648 \&\fB\-m32 \-m64 \-mx32 \-mlarge\-data\-threshold=\fR\fInum\fR 
649 \&\fB\-msse2avx \-mfentry \-m8bit\-idiv 
650 \&\-mavx256\-split\-unaligned\-load \-mavx256\-split\-unaligned\-store\fR
651 .Sp
652 \&\fIi386 and x86\-64 Windows Options\fR
653 \&\fB\-mconsole \-mcygwin \-mno\-cygwin \-mdll 
654 \&\-mnop\-fun\-dllimport \-mthread 
655 \&\-municode \-mwin32 \-mwindows \-fno\-set\-stack\-executable\fR
656 .Sp
657 \&\fI\s-1IA\-64\s0 Options\fR
658 \&\fB\-mbig\-endian  \-mlittle\-endian  \-mgnu\-as  \-mgnu\-ld  \-mno\-pic 
659 \&\-mvolatile\-asm\-stop  \-mregister\-names  \-msdata \-mno\-sdata 
660 \&\-mconstant\-gp  \-mauto\-pic  \-mfused\-madd 
661 \&\-minline\-float\-divide\-min\-latency 
662 \&\-minline\-float\-divide\-max\-throughput 
663 \&\-mno\-inline\-float\-divide 
664 \&\-minline\-int\-divide\-min\-latency 
665 \&\-minline\-int\-divide\-max\-throughput  
666 \&\-mno\-inline\-int\-divide 
667 \&\-minline\-sqrt\-min\-latency \-minline\-sqrt\-max\-throughput 
668 \&\-mno\-inline\-sqrt 
669 \&\-mdwarf2\-asm \-mearly\-stop\-bits 
670 \&\-mfixed\-range=\fR\fIregister-range\fR \fB\-mtls\-size=\fR\fItls-size\fR 
671 \&\fB\-mtune=\fR\fIcpu-type\fR \fB\-milp32 \-mlp64 
672 \&\-msched\-br\-data\-spec \-msched\-ar\-data\-spec \-msched\-control\-spec 
673 \&\-msched\-br\-in\-data\-spec \-msched\-ar\-in\-data\-spec \-msched\-in\-control\-spec 
674 \&\-msched\-spec\-ldc \-msched\-spec\-control\-ldc 
675 \&\-msched\-prefer\-non\-data\-spec\-insns \-msched\-prefer\-non\-control\-spec\-insns 
676 \&\-msched\-stop\-bits\-after\-every\-cycle \-msched\-count\-spec\-in\-critical\-path 
677 \&\-msel\-sched\-dont\-check\-control\-spec \-msched\-fp\-mem\-deps\-zero\-cost 
678 \&\-msched\-max\-memory\-insns\-hard\-limit \-msched\-max\-memory\-insns=\fR\fImax-insns\fR
679 .Sp
680 \&\fI\s-1IA\-64/VMS\s0 Options\fR
681 \&\fB\-mvms\-return\-codes \-mdebug\-main=\fR\fIprefix\fR \fB\-mmalloc64\fR
682 .Sp
683 \&\fI\s-1LM32\s0 Options\fR
684 \&\fB\-mbarrel\-shift\-enabled \-mdivide\-enabled \-mmultiply\-enabled 
685 \&\-msign\-extend\-enabled \-muser\-enabled\fR
686 .Sp
687 \&\fIM32R/D Options\fR
688 \&\fB\-m32r2 \-m32rx \-m32r 
689 \&\-mdebug 
690 \&\-malign\-loops \-mno\-align\-loops 
691 \&\-missue\-rate=\fR\fInumber\fR 
692 \&\fB\-mbranch\-cost=\fR\fInumber\fR 
693 \&\fB\-mmodel=\fR\fIcode-size-model-type\fR 
694 \&\fB\-msdata=\fR\fIsdata-type\fR 
695 \&\fB\-mno\-flush\-func \-mflush\-func=\fR\fIname\fR 
696 \&\fB\-mno\-flush\-trap \-mflush\-trap=\fR\fInumber\fR 
697 \&\fB\-G\fR \fInum\fR
698 .Sp
699 \&\fIM32C Options\fR
700 \&\fB\-mcpu=\fR\fIcpu\fR \fB\-msim \-memregs=\fR\fInumber\fR
701 .Sp
702 \&\fIM680x0 Options\fR
703 \&\fB\-march=\fR\fIarch\fR  \fB\-mcpu=\fR\fIcpu\fR  \fB\-mtune=\fR\fItune\fR
704 \&\fB\-m68000  \-m68020  \-m68020\-40  \-m68020\-60  \-m68030  \-m68040 
705 \&\-m68060  \-mcpu32  \-m5200  \-m5206e  \-m528x  \-m5307  \-m5407 
706 \&\-mcfv4e  \-mbitfield  \-mno\-bitfield  \-mc68000  \-mc68020 
707 \&\-mnobitfield  \-mrtd  \-mno\-rtd  \-mdiv  \-mno\-div  \-mshort 
708 \&\-mno\-short  \-mhard\-float  \-m68881  \-msoft\-float  \-mpcrel 
709 \&\-malign\-int  \-mstrict\-align  \-msep\-data  \-mno\-sep\-data 
710 \&\-mshared\-library\-id=n  \-mid\-shared\-library  \-mno\-id\-shared\-library 
711 \&\-mxgot \-mno\-xgot\fR
712 .Sp
713 \&\fIMCore Options\fR
714 \&\fB\-mhardlit  \-mno\-hardlit  \-mdiv  \-mno\-div  \-mrelax\-immediates 
715 \&\-mno\-relax\-immediates  \-mwide\-bitfields  \-mno\-wide\-bitfields 
716 \&\-m4byte\-functions  \-mno\-4byte\-functions  \-mcallgraph\-data 
717 \&\-mno\-callgraph\-data  \-mslow\-bytes  \-mno\-slow\-bytes  \-mno\-lsim 
718 \&\-mlittle\-endian  \-mbig\-endian  \-m210  \-m340  \-mstack\-increment\fR
719 .Sp
720 \&\fIMeP Options\fR
721 \&\fB\-mabsdiff \-mall\-opts \-maverage \-mbased=\fR\fIn\fR \fB\-mbitops 
722 \&\-mc=\fR\fIn\fR \fB\-mclip \-mconfig=\fR\fIname\fR \fB\-mcop \-mcop32 \-mcop64 \-mivc2 
723 \&\-mdc \-mdiv \-meb \-mel \-mio\-volatile \-ml \-mleadz \-mm \-mminmax 
724 \&\-mmult \-mno\-opts \-mrepeat \-ms \-msatur \-msdram \-msim \-msimnovec \-mtf 
725 \&\-mtiny=\fR\fIn\fR
726 .Sp
727 \&\fIMicroBlaze Options\fR
728 \&\fB\-msoft\-float \-mhard\-float \-msmall\-divides \-mcpu=\fR\fIcpu\fR 
729 \&\fB\-mmemcpy \-mxl\-soft\-mul \-mxl\-soft\-div \-mxl\-barrel\-shift 
730 \&\-mxl\-pattern\-compare \-mxl\-stack\-check \-mxl\-gp\-opt \-mno\-clearbss 
731 \&\-mxl\-multiply\-high \-mxl\-float\-convert \-mxl\-float\-sqrt 
732 \&\-mxl\-mode\-\fR\fIapp-model\fR
733 .Sp
734 \&\fI\s-1MIPS\s0 Options\fR
735 \&\fB\-EL  \-EB  \-march=\fR\fIarch\fR  \fB\-mtune=\fR\fIarch\fR 
736 \&\fB\-mips1  \-mips2  \-mips3  \-mips4  \-mips32  \-mips32r2 
737 \&\-mips64  \-mips64r2 
738 \&\-mips16  \-mno\-mips16  \-mflip\-mips16 
739 \&\-minterlink\-mips16  \-mno\-interlink\-mips16 
740 \&\-mabi=\fR\fIabi\fR  \fB\-mabicalls  \-mno\-abicalls 
741 \&\-mshared  \-mno\-shared  \-mplt  \-mno\-plt  \-mxgot  \-mno\-xgot 
742 \&\-mgp32  \-mgp64  \-mfp32  \-mfp64  \-mhard\-float  \-msoft\-float 
743 \&\-msingle\-float  \-mdouble\-float  \-mdsp  \-mno\-dsp  \-mdspr2  \-mno\-dspr2 
744 \&\-mfpu=\fR\fIfpu-type\fR 
745 \&\fB\-msmartmips  \-mno\-smartmips 
746 \&\-mpaired\-single  \-mno\-paired\-single  \-mdmx  \-mno\-mdmx 
747 \&\-mips3d  \-mno\-mips3d  \-mmt  \-mno\-mt  \-mllsc  \-mno\-llsc 
748 \&\-mlong64  \-mlong32  \-msym32  \-mno\-sym32 
749 \&\-G\fR\fInum\fR  \fB\-mlocal\-sdata  \-mno\-local\-sdata 
750 \&\-mextern\-sdata  \-mno\-extern\-sdata  \-mgpopt  \-mno\-gopt 
751 \&\-membedded\-data  \-mno\-embedded\-data 
752 \&\-muninit\-const\-in\-rodata  \-mno\-uninit\-const\-in\-rodata 
753 \&\-mcode\-readable=\fR\fIsetting\fR 
754 \&\fB\-msplit\-addresses  \-mno\-split\-addresses 
755 \&\-mexplicit\-relocs  \-mno\-explicit\-relocs 
756 \&\-mcheck\-zero\-division  \-mno\-check\-zero\-division 
757 \&\-mdivide\-traps  \-mdivide\-breaks 
758 \&\-mmemcpy  \-mno\-memcpy  \-mlong\-calls  \-mno\-long\-calls 
759 \&\-mmad  \-mno\-mad  \-mfused\-madd  \-mno\-fused\-madd  \-nocpp 
760 \&\-mfix\-24k \-mno\-fix\-24k 
761 \&\-mfix\-r4000  \-mno\-fix\-r4000  \-mfix\-r4400  \-mno\-fix\-r4400 
762 \&\-mfix\-r10000 \-mno\-fix\-r10000  \-mfix\-vr4120  \-mno\-fix\-vr4120 
763 \&\-mfix\-vr4130  \-mno\-fix\-vr4130  \-mfix\-sb1  \-mno\-fix\-sb1 
764 \&\-mflush\-func=\fR\fIfunc\fR  \fB\-mno\-flush\-func 
765 \&\-mbranch\-cost=\fR\fInum\fR  \fB\-mbranch\-likely  \-mno\-branch\-likely 
766 \&\-mfp\-exceptions \-mno\-fp\-exceptions 
767 \&\-mvr4130\-align \-mno\-vr4130\-align \-msynci \-mno\-synci 
768 \&\-mrelax\-pic\-calls \-mno\-relax\-pic\-calls \-mmcount\-ra\-address\fR
769 .Sp
770 \&\fI\s-1MMIX\s0 Options\fR
771 \&\fB\-mlibfuncs  \-mno\-libfuncs  \-mepsilon  \-mno\-epsilon  \-mabi=gnu 
772 \&\-mabi=mmixware  \-mzero\-extend  \-mknuthdiv  \-mtoplevel\-symbols 
773 \&\-melf  \-mbranch\-predict  \-mno\-branch\-predict  \-mbase\-addresses 
774 \&\-mno\-base\-addresses  \-msingle\-exit  \-mno\-single\-exit\fR
775 .Sp
776 \&\fI\s-1MN10300\s0 Options\fR
777 \&\fB\-mmult\-bug  \-mno\-mult\-bug 
778 \&\-mno\-am33 \-mam33 \-mam33\-2 \-mam34 
779 \&\-mtune=\fR\fIcpu-type\fR 
780 \&\fB\-mreturn\-pointer\-on\-d0 
781 \&\-mno\-crt0  \-mrelax \-mliw \-msetlb\fR
782 .Sp
783 \&\fI\s-1PDP\-11\s0 Options\fR
784 \&\fB\-mfpu  \-msoft\-float  \-mac0  \-mno\-ac0  \-m40  \-m45  \-m10 
785 \&\-mbcopy  \-mbcopy\-builtin  \-mint32  \-mno\-int16 
786 \&\-mint16  \-mno\-int32  \-mfloat32  \-mno\-float64 
787 \&\-mfloat64  \-mno\-float32  \-mabshi  \-mno\-abshi 
788 \&\-mbranch\-expensive  \-mbranch\-cheap 
789 \&\-munix\-asm  \-mdec\-asm\fR
790 .Sp
791 \&\fIpicoChip Options\fR
792 \&\fB\-mae=\fR\fIae_type\fR \fB\-mvliw\-lookahead=\fR\fIN\fR 
793 \&\fB\-msymbol\-as\-address \-mno\-inefficient\-warnings\fR
794 .Sp
795 \&\fIPowerPC Options\fR
796 See \s-1RS/6000\s0 and PowerPC Options.
797 .Sp
798 \&\fI\s-1RL78\s0 Options\fR
799 \&\fB\-msim \-mmul=none \-mmul=g13 \-mmul=rl78\fR
800 .Sp
801 \&\fI\s-1RS/6000\s0 and PowerPC Options\fR
802 \&\fB\-mcpu=\fR\fIcpu-type\fR 
803 \&\fB\-mtune=\fR\fIcpu-type\fR 
804 \&\fB\-mcmodel=\fR\fIcode-model\fR 
805 \&\fB\-mpower  \-mno\-power  \-mpower2  \-mno\-power2 
806 \&\-mpowerpc  \-mpowerpc64  \-mno\-powerpc 
807 \&\-maltivec  \-mno\-altivec 
808 \&\-mpowerpc\-gpopt  \-mno\-powerpc\-gpopt 
809 \&\-mpowerpc\-gfxopt  \-mno\-powerpc\-gfxopt 
810 \&\-mmfcrf  \-mno\-mfcrf  \-mpopcntb  \-mno\-popcntb \-mpopcntd \-mno\-popcntd 
811 \&\-mfprnd  \-mno\-fprnd 
812 \&\-mcmpb \-mno\-cmpb \-mmfpgpr \-mno\-mfpgpr \-mhard\-dfp \-mno\-hard\-dfp 
813 \&\-mnew\-mnemonics  \-mold\-mnemonics 
814 \&\-mfull\-toc   \-mminimal\-toc  \-mno\-fp\-in\-toc  \-mno\-sum\-in\-toc 
815 \&\-m64  \-m32  \-mxl\-compat  \-mno\-xl\-compat  \-mpe 
816 \&\-malign\-power  \-malign\-natural 
817 \&\-msoft\-float  \-mhard\-float  \-mmultiple  \-mno\-multiple 
818 \&\-msingle\-float \-mdouble\-float \-msimple\-fpu 
819 \&\-mstring  \-mno\-string  \-mupdate  \-mno\-update 
820 \&\-mavoid\-indexed\-addresses  \-mno\-avoid\-indexed\-addresses 
821 \&\-mfused\-madd  \-mno\-fused\-madd  \-mbit\-align  \-mno\-bit\-align 
822 \&\-mstrict\-align  \-mno\-strict\-align  \-mrelocatable 
823 \&\-mno\-relocatable  \-mrelocatable\-lib  \-mno\-relocatable\-lib 
824 \&\-mtoc  \-mno\-toc  \-mlittle  \-mlittle\-endian  \-mbig  \-mbig\-endian 
825 \&\-mdynamic\-no\-pic  \-maltivec \-mswdiv  \-msingle\-pic\-base 
826 \&\-mprioritize\-restricted\-insns=\fR\fIpriority\fR 
827 \&\fB\-msched\-costly\-dep=\fR\fIdependence_type\fR 
828 \&\fB\-minsert\-sched\-nops=\fR\fIscheme\fR 
829 \&\fB\-mcall\-sysv  \-mcall\-netbsd 
830 \&\-maix\-struct\-return  \-msvr4\-struct\-return 
831 \&\-mabi=\fR\fIabi-type\fR \fB\-msecure\-plt \-mbss\-plt 
832 \&\-mblock\-move\-inline\-limit=\fR\fInum\fR 
833 \&\fB\-misel \-mno\-isel 
834 \&\-misel=yes  \-misel=no 
835 \&\-mspe \-mno\-spe 
836 \&\-mspe=yes  \-mspe=no 
837 \&\-mpaired 
838 \&\-mgen\-cell\-microcode \-mwarn\-cell\-microcode 
839 \&\-mvrsave \-mno\-vrsave 
840 \&\-mmulhw \-mno\-mulhw 
841 \&\-mdlmzb \-mno\-dlmzb 
842 \&\-mfloat\-gprs=yes  \-mfloat\-gprs=no \-mfloat\-gprs=single \-mfloat\-gprs=double 
843 \&\-mprototype  \-mno\-prototype 
844 \&\-msim  \-mmvme  \-mads  \-myellowknife  \-memb  \-msdata 
845 \&\-msdata=\fR\fIopt\fR  \fB\-mvxworks  \-G\fR \fInum\fR  \fB\-pthread 
846 \&\-mrecip \-mrecip=\fR\fIopt\fR \fB\-mno\-recip \-mrecip\-precision 
847 \&\-mno\-recip\-precision 
848 \&\-mveclibabi=\fR\fItype\fR \fB\-mfriz \-mno\-friz 
849 \&\-mpointers\-to\-nested\-functions \-mno\-pointers\-to\-nested\-functions 
850 \&\-msave\-toc\-indirect \-mno\-save\-toc\-indirect\fR
851 .Sp
852 \&\fI\s-1RX\s0 Options\fR
853 \&\fB\-m64bit\-doubles  \-m32bit\-doubles  \-fpu  \-nofpu
854 \&\-mcpu=
855 \&\-mbig\-endian\-data \-mlittle\-endian\-data 
856 \&\-msmall\-data 
857 \&\-msim  \-mno\-sim
858 \&\-mas100\-syntax \-mno\-as100\-syntax
859 \&\-mrelax
860 \&\-mmax\-constant\-size=
861 \&\-mint\-register=
862 \&\-mpid
863 \&\-msave\-acc\-in\-interrupts\fR
864 .Sp
865 \&\fIS/390 and zSeries Options\fR
866 \&\fB\-mtune=\fR\fIcpu-type\fR  \fB\-march=\fR\fIcpu-type\fR 
867 \&\fB\-mhard\-float  \-msoft\-float  \-mhard\-dfp \-mno\-hard\-dfp 
868 \&\-mlong\-double\-64 \-mlong\-double\-128 
869 \&\-mbackchain  \-mno\-backchain \-mpacked\-stack  \-mno\-packed\-stack 
870 \&\-msmall\-exec  \-mno\-small\-exec  \-mmvcle \-mno\-mvcle 
871 \&\-m64  \-m31  \-mdebug  \-mno\-debug  \-mesa  \-mzarch 
872 \&\-mtpf\-trace \-mno\-tpf\-trace  \-mfused\-madd  \-mno\-fused\-madd 
873 \&\-mwarn\-framesize  \-mwarn\-dynamicstack  \-mstack\-size \-mstack\-guard\fR
874 .Sp
875 \&\fIScore Options\fR
876 \&\fB\-meb \-mel 
877 \&\-mnhwloop 
878 \&\-muls 
879 \&\-mmac 
880 \&\-mscore5 \-mscore5u \-mscore7 \-mscore7d\fR
881 .Sp
882 \&\fI\s-1SH\s0 Options\fR
883 \&\fB\-m1  \-m2  \-m2e 
884 \&\-m2a\-nofpu \-m2a\-single\-only \-m2a\-single \-m2a 
885 \&\-m3  \-m3e 
886 \&\-m4\-nofpu  \-m4\-single\-only  \-m4\-single  \-m4 
887 \&\-m4a\-nofpu \-m4a\-single\-only \-m4a\-single \-m4a \-m4al 
888 \&\-m5\-64media  \-m5\-64media\-nofpu 
889 \&\-m5\-32media  \-m5\-32media\-nofpu 
890 \&\-m5\-compact  \-m5\-compact\-nofpu 
891 \&\-mb  \-ml  \-mdalign  \-mrelax 
892 \&\-mbigtable \-mfmovd \-mhitachi \-mrenesas \-mno\-renesas \-mnomacsave 
893 \&\-mieee \-mno\-ieee \-mbitops  \-misize  \-minline\-ic_invalidate \-mpadstruct 
894 \&\-mspace \-mprefergot  \-musermode \-multcost=\fR\fInumber\fR \fB\-mdiv=\fR\fIstrategy\fR 
895 \&\fB\-mdivsi3_libfunc=\fR\fIname\fR \fB\-mfixed\-range=\fR\fIregister-range\fR 
896 \&\fB\-madjust\-unroll \-mindexed\-addressing \-mgettrcost=\fR\fInumber\fR \fB\-mpt\-fixed 
897 \&\-maccumulate\-outgoing\-args \-minvalid\-symbols \-msoft\-atomic 
898 \&\-mbranch\-cost=\fR\fInum\fR \fB\-mcbranchdi \-mcmpeqdi \-mfused\-madd \-mpretend\-cmove\fR
899 .Sp
900 \&\fISolaris 2 Options\fR
901 \&\fB\-mimpure\-text  \-mno\-impure\-text 
902 \&\-pthreads \-pthread\fR
903 .Sp
904 \&\fI\s-1SPARC\s0 Options\fR
905 \&\fB\-mcpu=\fR\fIcpu-type\fR 
906 \&\fB\-mtune=\fR\fIcpu-type\fR 
907 \&\fB\-mcmodel=\fR\fIcode-model\fR 
908 \&\fB\-mmemory\-model=\fR\fImem-model\fR 
909 \&\fB\-m32  \-m64  \-mapp\-regs  \-mno\-app\-regs 
910 \&\-mfaster\-structs  \-mno\-faster\-structs  \-mflat  \-mno\-flat 
911 \&\-mfpu  \-mno\-fpu  \-mhard\-float  \-msoft\-float 
912 \&\-mhard\-quad\-float  \-msoft\-quad\-float 
913 \&\-mlittle\-endian 
914 \&\-mstack\-bias  \-mno\-stack\-bias 
915 \&\-munaligned\-doubles  \-mno\-unaligned\-doubles 
916 \&\-mv8plus  \-mno\-v8plus  \-mvis  \-mno\-vis 
917 \&\-mvis2  \-mno\-vis2  \-mvis3  \-mno\-vis3 
918 \&\-mfmaf  \-mno\-fmaf  \-mpopc  \-mno\-popc 
919 \&\-mfix\-at697f\fR
920 .Sp
921 \&\fI\s-1SPU\s0 Options\fR
922 \&\fB\-mwarn\-reloc \-merror\-reloc 
923 \&\-msafe\-dma \-munsafe\-dma 
924 \&\-mbranch\-hints 
925 \&\-msmall\-mem \-mlarge\-mem \-mstdmain 
926 \&\-mfixed\-range=\fR\fIregister-range\fR 
927 \&\fB\-mea32 \-mea64 
928 \&\-maddress\-space\-conversion \-mno\-address\-space\-conversion 
929 \&\-mcache\-size=\fR\fIcache-size\fR 
930 \&\fB\-matomic\-updates \-mno\-atomic\-updates\fR
931 .Sp
932 \&\fISystem V Options\fR
933 \&\fB\-Qy  \-Qn  \-YP,\fR\fIpaths\fR  \fB\-Ym,\fR\fIdir\fR
934 .Sp
935 \&\fITILE-Gx Options\fR
936 \&\fB\-mcpu=\fR\fIcpu\fR \fB\-m32 \-m64\fR
937 .Sp
938 \&\fITILEPro Options\fR
939 \&\fB\-mcpu=\fR\fIcpu\fR \fB\-m32\fR
940 .Sp
941 \&\fIV850 Options\fR
942 \&\fB\-mlong\-calls  \-mno\-long\-calls  \-mep  \-mno\-ep 
943 \&\-mprolog\-function  \-mno\-prolog\-function  \-mspace 
944 \&\-mtda=\fR\fIn\fR  \fB\-msda=\fR\fIn\fR  \fB\-mzda=\fR\fIn\fR 
945 \&\fB\-mapp\-regs  \-mno\-app\-regs 
946 \&\-mdisable\-callt  \-mno\-disable\-callt 
947 \&\-mv850e2v3 
948 \&\-mv850e2 
949 \&\-mv850e1 \-mv850es 
950 \&\-mv850e 
951 \&\-mv850  \-mbig\-switch\fR
952 .Sp
953 \&\fI\s-1VAX\s0 Options\fR
954 \&\fB\-mg  \-mgnu  \-munix\fR
955 .Sp
956 \&\fIVxWorks Options\fR
957 \&\fB\-mrtp  \-non\-static  \-Bstatic  \-Bdynamic 
958 \&\-Xbind\-lazy  \-Xbind\-now\fR
959 .Sp
960 \&\fIx86\-64 Options\fR
961 See i386 and x86\-64 Options.
962 .Sp
963 \&\fIXstormy16 Options\fR
964 \&\fB\-msim\fR
965 .Sp
966 \&\fIXtensa Options\fR
967 \&\fB\-mconst16 \-mno\-const16 
968 \&\-mfused\-madd  \-mno\-fused\-madd 
969 \&\-mforce\-no\-pic 
970 \&\-mserialize\-volatile  \-mno\-serialize\-volatile 
971 \&\-mtext\-section\-literals  \-mno\-text\-section\-literals 
972 \&\-mtarget\-align  \-mno\-target\-align 
973 \&\-mlongcalls  \-mno\-longcalls\fR
974 .Sp
975 \&\fIzSeries Options\fR
976 See S/390 and zSeries Options.
977 .IP "\fICode Generation Options\fR" 4
978 .IX Item "Code Generation Options"
979 \&\fB\-fcall\-saved\-\fR\fIreg\fR  \fB\-fcall\-used\-\fR\fIreg\fR 
980 \&\fB\-ffixed\-\fR\fIreg\fR  \fB\-fexceptions 
981 \&\-fnon\-call\-exceptions  \-funwind\-tables 
982 \&\-fasynchronous\-unwind\-tables 
983 \&\-finhibit\-size\-directive  \-finstrument\-functions 
984 \&\-finstrument\-functions\-exclude\-function\-list=\fR\fIsym\fR\fB,\fR\fIsym\fR\fB,... 
985 \&\-finstrument\-functions\-exclude\-file\-list=\fR\fIfile\fR\fB,\fR\fIfile\fR\fB,... 
986 \&\-fno\-common  \-fno\-ident 
987 \&\-fpcc\-struct\-return  \-fpic  \-fPIC \-fpie \-fPIE 
988 \&\-fno\-jump\-tables 
989 \&\-frecord\-gcc\-switches 
990 \&\-freg\-struct\-return  \-fshort\-enums 
991 \&\-fshort\-double  \-fshort\-wchar 
992 \&\-fverbose\-asm  \-fpack\-struct[=\fR\fIn\fR\fB]  \-fstack\-check 
993 \&\-fstack\-limit\-register=\fR\fIreg\fR  \fB\-fstack\-limit\-symbol=\fR\fIsym\fR 
994 \&\fB\-fno\-stack\-limit \-fsplit\-stack 
995 \&\-fleading\-underscore  \-ftls\-model=\fR\fImodel\fR 
996 \&\fB\-ftrapv  \-fwrapv  \-fbounds\-check 
997 \&\-fvisibility \-fstrict\-volatile\-bitfields\fR
998 .SS "Options Controlling the Kind of Output"
999 .IX Subsection "Options Controlling the Kind of Output"
1000 Compilation can involve up to four stages: preprocessing, compilation
1001 proper, assembly and linking, always in that order.  \s-1GCC\s0 is capable of
1002 preprocessing and compiling several files either into several
1003 assembler input files, or into one assembler input file; then each
1004 assembler input file produces an object file, and linking combines all
1005 the object files (those newly compiled, and those specified as input)
1006 into an executable file.
1007 .PP
1008 For any given input file, the file name suffix determines what kind of
1009 compilation is done:
1010 .IP "\fIfile\fR\fB.c\fR" 4
1011 .IX Item "file.c"
1012 C source code that must be preprocessed.
1013 .IP "\fIfile\fR\fB.i\fR" 4
1014 .IX Item "file.i"
1015 C source code that should not be preprocessed.
1016 .IP "\fIfile\fR\fB.ii\fR" 4
1017 .IX Item "file.ii"
1018 \&\*(C+ source code that should not be preprocessed.
1019 .IP "\fIfile\fR\fB.m\fR" 4
1020 .IX Item "file.m"
1021 Objective-C source code.  Note that you must link with the \fIlibobjc\fR
1022 library to make an Objective-C program work.
1023 .IP "\fIfile\fR\fB.mi\fR" 4
1024 .IX Item "file.mi"
1025 Objective-C source code that should not be preprocessed.
1026 .IP "\fIfile\fR\fB.mm\fR" 4
1027 .IX Item "file.mm"
1028 .PD 0
1029 .IP "\fIfile\fR\fB.M\fR" 4
1030 .IX Item "file.M"
1031 .PD
1032 Objective\-\*(C+ source code.  Note that you must link with the \fIlibobjc\fR
1033 library to make an Objective\-\*(C+ program work.  Note that \fB.M\fR refers
1034 to a literal capital M.
1035 .IP "\fIfile\fR\fB.mii\fR" 4
1036 .IX Item "file.mii"
1037 Objective\-\*(C+ source code that should not be preprocessed.
1038 .IP "\fIfile\fR\fB.h\fR" 4
1039 .IX Item "file.h"
1040 C, \*(C+, Objective-C or Objective\-\*(C+ header file to be turned into a
1041 precompiled header (default), or C, \*(C+ header file to be turned into an
1042 Ada spec (via the \fB\-fdump\-ada\-spec\fR switch).
1043 .IP "\fIfile\fR\fB.cc\fR" 4
1044 .IX Item "file.cc"
1045 .PD 0
1046 .IP "\fIfile\fR\fB.cp\fR" 4
1047 .IX Item "file.cp"
1048 .IP "\fIfile\fR\fB.cxx\fR" 4
1049 .IX Item "file.cxx"
1050 .IP "\fIfile\fR\fB.cpp\fR" 4
1051 .IX Item "file.cpp"
1052 .IP "\fIfile\fR\fB.CPP\fR" 4
1053 .IX Item "file.CPP"
1054 .IP "\fIfile\fR\fB.c++\fR" 4
1055 .IX Item "file.c++"
1056 .IP "\fIfile\fR\fB.C\fR" 4
1057 .IX Item "file.C"
1058 .PD
1059 \&\*(C+ source code that must be preprocessed.  Note that in \fB.cxx\fR,
1060 the last two letters must both be literally \fBx\fR.  Likewise,
1061 \&\fB.C\fR refers to a literal capital C.
1062 .IP "\fIfile\fR\fB.mm\fR" 4
1063 .IX Item "file.mm"
1064 .PD 0
1065 .IP "\fIfile\fR\fB.M\fR" 4
1066 .IX Item "file.M"
1067 .PD
1068 Objective\-\*(C+ source code that must be preprocessed.
1069 .IP "\fIfile\fR\fB.mii\fR" 4
1070 .IX Item "file.mii"
1071 Objective\-\*(C+ source code that should not be preprocessed.
1072 .IP "\fIfile\fR\fB.hh\fR" 4
1073 .IX Item "file.hh"
1074 .PD 0
1075 .IP "\fIfile\fR\fB.H\fR" 4
1076 .IX Item "file.H"
1077 .IP "\fIfile\fR\fB.hp\fR" 4
1078 .IX Item "file.hp"
1079 .IP "\fIfile\fR\fB.hxx\fR" 4
1080 .IX Item "file.hxx"
1081 .IP "\fIfile\fR\fB.hpp\fR" 4
1082 .IX Item "file.hpp"
1083 .IP "\fIfile\fR\fB.HPP\fR" 4
1084 .IX Item "file.HPP"
1085 .IP "\fIfile\fR\fB.h++\fR" 4
1086 .IX Item "file.h++"
1087 .IP "\fIfile\fR\fB.tcc\fR" 4
1088 .IX Item "file.tcc"
1089 .PD
1090 \&\*(C+ header file to be turned into a precompiled header or Ada spec.
1091 .IP "\fIfile\fR\fB.f\fR" 4
1092 .IX Item "file.f"
1093 .PD 0
1094 .IP "\fIfile\fR\fB.for\fR" 4
1095 .IX Item "file.for"
1096 .IP "\fIfile\fR\fB.ftn\fR" 4
1097 .IX Item "file.ftn"
1098 .PD
1099 Fixed form Fortran source code that should not be preprocessed.
1100 .IP "\fIfile\fR\fB.F\fR" 4
1101 .IX Item "file.F"
1102 .PD 0
1103 .IP "\fIfile\fR\fB.FOR\fR" 4
1104 .IX Item "file.FOR"
1105 .IP "\fIfile\fR\fB.fpp\fR" 4
1106 .IX Item "file.fpp"
1107 .IP "\fIfile\fR\fB.FPP\fR" 4
1108 .IX Item "file.FPP"
1109 .IP "\fIfile\fR\fB.FTN\fR" 4
1110 .IX Item "file.FTN"
1111 .PD
1112 Fixed form Fortran source code that must be preprocessed (with the traditional
1113 preprocessor).
1114 .IP "\fIfile\fR\fB.f90\fR" 4
1115 .IX Item "file.f90"
1116 .PD 0
1117 .IP "\fIfile\fR\fB.f95\fR" 4
1118 .IX Item "file.f95"
1119 .IP "\fIfile\fR\fB.f03\fR" 4
1120 .IX Item "file.f03"
1121 .IP "\fIfile\fR\fB.f08\fR" 4
1122 .IX Item "file.f08"
1123 .PD
1124 Free form Fortran source code that should not be preprocessed.
1125 .IP "\fIfile\fR\fB.F90\fR" 4
1126 .IX Item "file.F90"
1127 .PD 0
1128 .IP "\fIfile\fR\fB.F95\fR" 4
1129 .IX Item "file.F95"
1130 .IP "\fIfile\fR\fB.F03\fR" 4
1131 .IX Item "file.F03"
1132 .IP "\fIfile\fR\fB.F08\fR" 4
1133 .IX Item "file.F08"
1134 .PD
1135 Free form Fortran source code that must be preprocessed (with the
1136 traditional preprocessor).
1137 .IP "\fIfile\fR\fB.go\fR" 4
1138 .IX Item "file.go"
1139 Go source code.
1140 .IP "\fIfile\fR\fB.ads\fR" 4
1141 .IX Item "file.ads"
1142 Ada source code file that contains a library unit declaration (a
1143 declaration of a package, subprogram, or generic, or a generic
1144 instantiation), or a library unit renaming declaration (a package,
1145 generic, or subprogram renaming declaration).  Such files are also
1146 called \fIspecs\fR.
1147 .IP "\fIfile\fR\fB.adb\fR" 4
1148 .IX Item "file.adb"
1149 Ada source code file containing a library unit body (a subprogram or
1150 package body).  Such files are also called \fIbodies\fR.
1151 .IP "\fIfile\fR\fB.s\fR" 4
1152 .IX Item "file.s"
1153 Assembler code.
1154 .IP "\fIfile\fR\fB.S\fR" 4
1155 .IX Item "file.S"
1156 .PD 0
1157 .IP "\fIfile\fR\fB.sx\fR" 4
1158 .IX Item "file.sx"
1159 .PD
1160 Assembler code that must be preprocessed.
1161 .IP "\fIother\fR" 4
1162 .IX Item "other"
1163 An object file to be fed straight into linking.
1164 Any file name with no recognized suffix is treated this way.
1165 .PP
1166 You can specify the input language explicitly with the \fB\-x\fR option:
1167 .IP "\fB\-x\fR \fIlanguage\fR" 4
1168 .IX Item "-x language"
1169 Specify explicitly the \fIlanguage\fR for the following input files
1170 (rather than letting the compiler choose a default based on the file
1171 name suffix).  This option applies to all following input files until
1172 the next \fB\-x\fR option.  Possible values for \fIlanguage\fR are:
1173 .Sp
1174 .Vb 9
1175 \&        c  c\-header  cpp\-output
1176 \&        c++  c++\-header  c++\-cpp\-output
1177 \&        objective\-c  objective\-c\-header  objective\-c\-cpp\-output
1178 \&        objective\-c++ objective\-c++\-header objective\-c++\-cpp\-output
1179 \&        assembler  assembler\-with\-cpp
1180 \&        ada
1181 \&        f77  f77\-cpp\-input f95  f95\-cpp\-input
1182 \&        go
1183 \&        java
1184 .Ve
1185 .IP "\fB\-x none\fR" 4
1186 .IX Item "-x none"
1187 Turn off any specification of a language, so that subsequent files are
1188 handled according to their file name suffixes (as they are if \fB\-x\fR
1189 has not been used at all).
1190 .IP "\fB\-pass\-exit\-codes\fR" 4
1191 .IX Item "-pass-exit-codes"
1192 Normally the \fBgcc\fR program will exit with the code of 1 if any
1193 phase of the compiler returns a non-success return code.  If you specify
1194 \&\fB\-pass\-exit\-codes\fR, the \fBgcc\fR program will instead return with
1195 numerically highest error produced by any phase that returned an error
1196 indication.  The C, \*(C+, and Fortran frontends return 4, if an internal
1197 compiler error is encountered.
1198 .PP
1199 If you only want some of the stages of compilation, you can use
1200 \&\fB\-x\fR (or filename suffixes) to tell \fBgcc\fR where to start, and
1201 one of the options \fB\-c\fR, \fB\-S\fR, or \fB\-E\fR to say where
1202 \&\fBgcc\fR is to stop.  Note that some combinations (for example,
1203 \&\fB\-x cpp-output \-E\fR) instruct \fBgcc\fR to do nothing at all.
1204 .IP "\fB\-c\fR" 4
1205 .IX Item "-c"
1206 Compile or assemble the source files, but do not link.  The linking
1207 stage simply is not done.  The ultimate output is in the form of an
1208 object file for each source file.
1209 .Sp
1210 By default, the object file name for a source file is made by replacing
1211 the suffix \fB.c\fR, \fB.i\fR, \fB.s\fR, etc., with \fB.o\fR.
1212 .Sp
1213 Unrecognized input files, not requiring compilation or assembly, are
1214 ignored.
1215 .IP "\fB\-S\fR" 4
1216 .IX Item "-S"
1217 Stop after the stage of compilation proper; do not assemble.  The output
1218 is in the form of an assembler code file for each non-assembler input
1219 file specified.
1220 .Sp
1221 By default, the assembler file name for a source file is made by
1222 replacing the suffix \fB.c\fR, \fB.i\fR, etc., with \fB.s\fR.
1223 .Sp
1224 Input files that don't require compilation are ignored.
1225 .IP "\fB\-E\fR" 4
1226 .IX Item "-E"
1227 Stop after the preprocessing stage; do not run the compiler proper.  The
1228 output is in the form of preprocessed source code, which is sent to the
1229 standard output.
1230 .Sp
1231 Input files that don't require preprocessing are ignored.
1232 .IP "\fB\-o\fR \fIfile\fR" 4
1233 .IX Item "-o file"
1234 Place output in file \fIfile\fR.  This applies regardless to whatever
1235 sort of output is being produced, whether it be an executable file,
1236 an object file, an assembler file or preprocessed C code.
1237 .Sp
1238 If \fB\-o\fR is not specified, the default is to put an executable
1239 file in \fIa.out\fR, the object file for
1240 \&\fI\fIsource\fI.\fIsuffix\fI\fR in \fI\fIsource\fI.o\fR, its
1241 assembler file in \fI\fIsource\fI.s\fR, a precompiled header file in
1242 \&\fI\fIsource\fI.\fIsuffix\fI.gch\fR, and all preprocessed C source on
1243 standard output.
1244 .IP "\fB\-v\fR" 4
1245 .IX Item "-v"
1246 Print (on standard error output) the commands executed to run the stages
1247 of compilation.  Also print the version number of the compiler driver
1248 program and of the preprocessor and the compiler proper.
1249 .IP "\fB\-###\fR" 4
1250 .IX Item "-###"
1251 Like \fB\-v\fR except the commands are not executed and arguments
1252 are quoted unless they contain only alphanumeric characters or \f(CW\*(C`./\-_\*(C'\fR.
1253 This is useful for shell scripts to capture the driver-generated command lines.
1254 .IP "\fB\-pipe\fR" 4
1255 .IX Item "-pipe"
1256 Use pipes rather than temporary files for communication between the
1257 various stages of compilation.  This fails to work on some systems where
1258 the assembler is unable to read from a pipe; but the \s-1GNU\s0 assembler has
1259 no trouble.
1260 .IP "\fB\-\-help\fR" 4
1261 .IX Item "--help"
1262 Print (on the standard output) a description of the command-line options
1263 understood by \fBgcc\fR.  If the \fB\-v\fR option is also specified
1264 then \fB\-\-help\fR will also be passed on to the various processes
1265 invoked by \fBgcc\fR, so that they can display the command-line options
1266 they accept.  If the \fB\-Wextra\fR option has also been specified
1267 (prior to the \fB\-\-help\fR option), then command-line options that
1268 have no documentation associated with them will also be displayed.
1269 .IP "\fB\-\-target\-help\fR" 4
1270 .IX Item "--target-help"
1271 Print (on the standard output) a description of target-specific command-line
1272 options for each tool.  For some targets extra target-specific
1273 information may also be printed.
1274 .IP "\fB\-\-help={\fR\fIclass\fR|[\fB^\fR]\fIqualifier\fR\fB}\fR[\fB,...\fR]" 4
1275 .IX Item "--help={class|[^]qualifier}[,...]"
1276 Print (on the standard output) a description of the command-line
1277 options understood by the compiler that fit into all specified classes
1278 and qualifiers.  These are the supported classes:
1279 .RS 4
1280 .IP "\fBoptimizers\fR" 4
1281 .IX Item "optimizers"
1282 This will display all of the optimization options supported by the
1283 compiler.
1284 .IP "\fBwarnings\fR" 4
1285 .IX Item "warnings"
1286 This will display all of the options controlling warning messages
1287 produced by the compiler.
1288 .IP "\fBtarget\fR" 4
1289 .IX Item "target"
1290 This will display target-specific options.  Unlike the
1291 \&\fB\-\-target\-help\fR option however, target-specific options of the
1292 linker and assembler will not be displayed.  This is because those
1293 tools do not currently support the extended \fB\-\-help=\fR syntax.
1294 .IP "\fBparams\fR" 4
1295 .IX Item "params"
1296 This will display the values recognized by the \fB\-\-param\fR
1297 option.
1298 .IP "\fIlanguage\fR" 4
1299 .IX Item "language"
1300 This will display the options supported for \fIlanguage\fR, where
1301 \&\fIlanguage\fR is the name of one of the languages supported in this
1302 version of \s-1GCC\s0.
1303 .IP "\fBcommon\fR" 4
1304 .IX Item "common"
1305 This will display the options that are common to all languages.
1306 .RE
1307 .RS 4
1308 .Sp
1309 These are the supported qualifiers:
1310 .IP "\fBundocumented\fR" 4
1311 .IX Item "undocumented"
1312 Display only those options that are undocumented.
1313 .IP "\fBjoined\fR" 4
1314 .IX Item "joined"
1315 Display options taking an argument that appears after an equal
1316 sign in the same continuous piece of text, such as:
1317 \&\fB\-\-help=target\fR.
1318 .IP "\fBseparate\fR" 4
1319 .IX Item "separate"
1320 Display options taking an argument that appears as a separate word
1321 following the original option, such as: \fB\-o output-file\fR.
1322 .RE
1323 .RS 4
1324 .Sp
1325 Thus for example to display all the undocumented target-specific
1326 switches supported by the compiler the following can be used:
1327 .Sp
1328 .Vb 1
1329 \&        \-\-help=target,undocumented
1330 .Ve
1331 .Sp
1332 The sense of a qualifier can be inverted by prefixing it with the
1333 \&\fB^\fR character, so for example to display all binary warning
1334 options (i.e., ones that are either on or off and that do not take an
1335 argument) that have a description, use:
1336 .Sp
1337 .Vb 1
1338 \&        \-\-help=warnings,^joined,^undocumented
1339 .Ve
1340 .Sp
1341 The argument to \fB\-\-help=\fR should not consist solely of inverted
1342 qualifiers.
1343 .Sp
1344 Combining several classes is possible, although this usually
1345 restricts the output by so much that there is nothing to display.  One
1346 case where it does work however is when one of the classes is
1347 \&\fItarget\fR.  So for example to display all the target-specific
1348 optimization options the following can be used:
1349 .Sp
1350 .Vb 1
1351 \&        \-\-help=target,optimizers
1352 .Ve
1353 .Sp
1354 The \fB\-\-help=\fR option can be repeated on the command line.  Each
1355 successive use will display its requested class of options, skipping
1356 those that have already been displayed.
1357 .Sp
1358 If the \fB\-Q\fR option appears on the command line before the
1359 \&\fB\-\-help=\fR option, then the descriptive text displayed by
1360 \&\fB\-\-help=\fR is changed.  Instead of describing the displayed
1361 options, an indication is given as to whether the option is enabled,
1362 disabled or set to a specific value (assuming that the compiler
1363 knows this at the point where the \fB\-\-help=\fR option is used).
1364 .Sp
1365 Here is a truncated example from the \s-1ARM\s0 port of \fBgcc\fR:
1366 .Sp
1367 .Vb 5
1368 \&          % gcc \-Q \-mabi=2 \-\-help=target \-c
1369 \&          The following options are target specific:
1370 \&          \-mabi=                                2
1371 \&          \-mabort\-on\-noreturn                   [disabled]
1372 \&          \-mapcs                                [disabled]
1373 .Ve
1374 .Sp
1375 The output is sensitive to the effects of previous command-line
1376 options, so for example it is possible to find out which optimizations
1377 are enabled at \fB\-O2\fR by using:
1378 .Sp
1379 .Vb 1
1380 \&        \-Q \-O2 \-\-help=optimizers
1381 .Ve
1382 .Sp
1383 Alternatively you can discover which binary optimizations are enabled
1384 by \fB\-O3\fR by using:
1385 .Sp
1386 .Vb 3
1387 \&        gcc \-c \-Q \-O3 \-\-help=optimizers > /tmp/O3\-opts
1388 \&        gcc \-c \-Q \-O2 \-\-help=optimizers > /tmp/O2\-opts
1389 \&        diff /tmp/O2\-opts /tmp/O3\-opts | grep enabled
1390 .Ve
1391 .RE
1392 .IP "\fB\-no\-canonical\-prefixes\fR" 4
1393 .IX Item "-no-canonical-prefixes"
1394 Do not expand any symbolic links, resolve references to \fB/../\fR
1395 or \fB/./\fR, or make the path absolute when generating a relative
1396 prefix.
1397 .IP "\fB\-\-version\fR" 4
1398 .IX Item "--version"
1399 Display the version number and copyrights of the invoked \s-1GCC\s0.
1400 .IP "\fB\-wrapper\fR" 4
1401 .IX Item "-wrapper"
1402 Invoke all subcommands under a wrapper program.  The name of the
1403 wrapper program and its parameters are passed as a comma separated
1404 list.
1405 .Sp
1406 .Vb 1
1407 \&        gcc \-c t.c \-wrapper gdb,\-\-args
1408 .Ve
1409 .Sp
1410 This will invoke all subprograms of \fBgcc\fR under
1411 \&\fBgdb \-\-args\fR, thus the invocation of \fBcc1\fR will be
1412 \&\fBgdb \-\-args cc1 ...\fR.
1413 .IP "\fB\-fplugin=\fR\fIname\fR\fB.so\fR" 4
1414 .IX Item "-fplugin=name.so"
1415 Load the plugin code in file \fIname\fR.so, assumed to be a
1416 shared object to be dlopen'd by the compiler.  The base name of
1417 the shared object file is used to identify the plugin for the
1418 purposes of argument parsing (See
1419 \&\fB\-fplugin\-arg\-\fR\fIname\fR\fB\-\fR\fIkey\fR\fB=\fR\fIvalue\fR below).
1420 Each plugin should define the callback functions specified in the
1421 Plugins \s-1API\s0.
1422 .IP "\fB\-fplugin\-arg\-\fR\fIname\fR\fB\-\fR\fIkey\fR\fB=\fR\fIvalue\fR" 4
1423 .IX Item "-fplugin-arg-name-key=value"
1424 Define an argument called \fIkey\fR with a value of \fIvalue\fR
1425 for the plugin called \fIname\fR.
1426 .IP "\fB\-fdump\-ada\-spec\fR[\fB\-slim\fR]" 4
1427 .IX Item "-fdump-ada-spec[-slim]"
1428 For C and \*(C+ source and include files, generate corresponding Ada
1429 specs.
1430 .IP "\fB\-fdump\-go\-spec=\fR\fIfile\fR" 4
1431 .IX Item "-fdump-go-spec=file"
1432 For input files in any language, generate corresponding Go
1433 declarations in \fIfile\fR.  This generates Go \f(CW\*(C`const\*(C'\fR,
1434 \&\f(CW\*(C`type\*(C'\fR, \f(CW\*(C`var\*(C'\fR, and \f(CW\*(C`func\*(C'\fR declarations which may be a
1435 useful way to start writing a Go interface to code written in some
1436 other language.
1437 .IP "\fB@\fR\fIfile\fR" 4
1438 .IX Item "@file"
1439 Read command-line options from \fIfile\fR.  The options read are
1440 inserted in place of the original @\fIfile\fR option.  If \fIfile\fR
1441 does not exist, or cannot be read, then the option will be treated
1442 literally, and not removed.
1443 .Sp
1444 Options in \fIfile\fR are separated by whitespace.  A whitespace
1445 character may be included in an option by surrounding the entire
1446 option in either single or double quotes.  Any character (including a
1447 backslash) may be included by prefixing the character to be included
1448 with a backslash.  The \fIfile\fR may itself contain additional
1449 @\fIfile\fR options; any such options will be processed recursively.
1450 .SS "Compiling \*(C+ Programs"
1451 .IX Subsection "Compiling  Programs"
1452 \&\*(C+ source files conventionally use one of the suffixes \fB.C\fR,
1453 \&\fB.cc\fR, \fB.cpp\fR, \fB.CPP\fR, \fB.c++\fR, \fB.cp\fR, or
1454 \&\fB.cxx\fR; \*(C+ header files often use \fB.hh\fR, \fB.hpp\fR,
1455 \&\fB.H\fR, or (for shared template code) \fB.tcc\fR; and
1456 preprocessed \*(C+ files use the suffix \fB.ii\fR.  \s-1GCC\s0 recognizes
1457 files with these names and compiles them as \*(C+ programs even if you
1458 call the compiler the same way as for compiling C programs (usually
1459 with the name \fBgcc\fR).
1460 .PP
1461 However, the use of \fBgcc\fR does not add the \*(C+ library.
1462 \&\fBg++\fR is a program that calls \s-1GCC\s0 and treats \fB.c\fR,
1463 \&\fB.h\fR and \fB.i\fR files as \*(C+ source files instead of C source
1464 files unless \fB\-x\fR is used, and automatically specifies linking
1465 against the \*(C+ library.  This program is also useful when
1466 precompiling a C header file with a \fB.h\fR extension for use in \*(C+
1467 compilations.  On many systems, \fBg++\fR is also installed with
1468 the name \fBc++\fR.
1469 .PP
1470 When you compile \*(C+ programs, you may specify many of the same
1471 command-line options that you use for compiling programs in any
1472 language; or command-line options meaningful for C and related
1473 languages; or options that are meaningful only for \*(C+ programs.
1474 .SS "Options Controlling C Dialect"
1475 .IX Subsection "Options Controlling C Dialect"
1476 The following options control the dialect of C (or languages derived
1477 from C, such as \*(C+, Objective-C and Objective\-\*(C+) that the compiler
1478 accepts:
1479 .IP "\fB\-ansi\fR" 4
1480 .IX Item "-ansi"
1481 In C mode, this is equivalent to \fB\-std=c90\fR. In \*(C+ mode, it is
1482 equivalent to \fB\-std=c++98\fR.
1483 .Sp
1484 This turns off certain features of \s-1GCC\s0 that are incompatible with \s-1ISO\s0
1485 C90 (when compiling C code), or of standard \*(C+ (when compiling \*(C+ code),
1486 such as the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR keywords, and
1487 predefined macros such as \f(CW\*(C`unix\*(C'\fR and \f(CW\*(C`vax\*(C'\fR that identify the
1488 type of system you are using.  It also enables the undesirable and
1489 rarely used \s-1ISO\s0 trigraph feature.  For the C compiler,
1490 it disables recognition of \*(C+ style \fB//\fR comments as well as
1491 the \f(CW\*(C`inline\*(C'\fR keyword.
1492 .Sp
1493 The alternate keywords \f(CW\*(C`_\|_asm_\|_\*(C'\fR, \f(CW\*(C`_\|_extension_\|_\*(C'\fR,
1494 \&\f(CW\*(C`_\|_inline_\|_\*(C'\fR and \f(CW\*(C`_\|_typeof_\|_\*(C'\fR continue to work despite
1495 \&\fB\-ansi\fR.  You would not want to use them in an \s-1ISO\s0 C program, of
1496 course, but it is useful to put them in header files that might be included
1497 in compilations done with \fB\-ansi\fR.  Alternate predefined macros
1498 such as \f(CW\*(C`_\|_unix_\|_\*(C'\fR and \f(CW\*(C`_\|_vax_\|_\*(C'\fR are also available, with or
1499 without \fB\-ansi\fR.
1500 .Sp
1501 The \fB\-ansi\fR option does not cause non-ISO programs to be
1502 rejected gratuitously.  For that, \fB\-pedantic\fR is required in
1503 addition to \fB\-ansi\fR.
1504 .Sp
1505 The macro \f(CW\*(C`_\|_STRICT_ANSI_\|_\*(C'\fR is predefined when the \fB\-ansi\fR
1506 option is used.  Some header files may notice this macro and refrain
1507 from declaring certain functions or defining certain macros that the
1508 \&\s-1ISO\s0 standard doesn't call for; this is to avoid interfering with any
1509 programs that might use these names for other things.
1510 .Sp
1511 Functions that would normally be built in but do not have semantics
1512 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
1513 functions when \fB\-ansi\fR is used.
1514 .IP "\fB\-std=\fR" 4
1515 .IX Item "-std="
1516 Determine the language standard.   This option
1517 is currently only supported when compiling C or \*(C+.
1518 .Sp
1519 The compiler can accept several base standards, such as \fBc90\fR or
1520 \&\fBc++98\fR, and \s-1GNU\s0 dialects of those standards, such as
1521 \&\fBgnu90\fR or \fBgnu++98\fR.  By specifying a base standard, the
1522 compiler will accept all programs following that standard and those
1523 using \s-1GNU\s0 extensions that do not contradict it.  For example,
1524 \&\fB\-std=c90\fR turns off certain features of \s-1GCC\s0 that are
1525 incompatible with \s-1ISO\s0 C90, such as the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR
1526 keywords, but not other \s-1GNU\s0 extensions that do not have a meaning in
1527 \&\s-1ISO\s0 C90, such as omitting the middle term of a \f(CW\*(C`?:\*(C'\fR
1528 expression. On the other hand, by specifying a \s-1GNU\s0 dialect of a
1529 standard, all features the compiler support are enabled, even when
1530 those features change the meaning of the base standard and some
1531 strict-conforming programs may be rejected.  The particular standard
1532 is used by \fB\-pedantic\fR to identify which features are \s-1GNU\s0
1533 extensions given that version of the standard. For example
1534 \&\fB\-std=gnu90 \-pedantic\fR would warn about \*(C+ style \fB//\fR
1535 comments, while \fB\-std=gnu99 \-pedantic\fR would not.
1536 .Sp
1537 A value for this option must be provided; possible values are
1538 .RS 4
1539 .IP "\fBc90\fR" 4
1540 .IX Item "c90"
1541 .PD 0
1542 .IP "\fBc89\fR" 4
1543 .IX Item "c89"
1544 .IP "\fBiso9899:1990\fR" 4
1545 .IX Item "iso9899:1990"
1546 .PD
1547 Support all \s-1ISO\s0 C90 programs (certain \s-1GNU\s0 extensions that conflict
1548 with \s-1ISO\s0 C90 are disabled). Same as \fB\-ansi\fR for C code.
1549 .IP "\fBiso9899:199409\fR" 4
1550 .IX Item "iso9899:199409"
1551 \&\s-1ISO\s0 C90 as modified in amendment 1.
1552 .IP "\fBc99\fR" 4
1553 .IX Item "c99"
1554 .PD 0
1555 .IP "\fBc9x\fR" 4
1556 .IX Item "c9x"
1557 .IP "\fBiso9899:1999\fR" 4
1558 .IX Item "iso9899:1999"
1559 .IP "\fBiso9899:199x\fR" 4
1560 .IX Item "iso9899:199x"
1561 .PD
1562 \&\s-1ISO\s0 C99.  Note that this standard is not yet fully supported; see
1563 <\fBhttp://gcc.gnu.org/gcc\-4.7/c99status.html\fR> for more information.  The
1564 names \fBc9x\fR and \fBiso9899:199x\fR are deprecated.
1565 .IP "\fBc11\fR" 4
1566 .IX Item "c11"
1567 .PD 0
1568 .IP "\fBc1x\fR" 4
1569 .IX Item "c1x"
1570 .IP "\fBiso9899:2011\fR" 4
1571 .IX Item "iso9899:2011"
1572 .PD
1573 \&\s-1ISO\s0 C11, the 2011 revision of the \s-1ISO\s0 C standard.
1574 Support is incomplete and experimental.  The name \fBc1x\fR is
1575 deprecated.
1576 .IP "\fBgnu90\fR" 4
1577 .IX Item "gnu90"
1578 .PD 0
1579 .IP "\fBgnu89\fR" 4
1580 .IX Item "gnu89"
1581 .PD
1582 \&\s-1GNU\s0 dialect of \s-1ISO\s0 C90 (including some C99 features). This
1583 is the default for C code.
1584 .IP "\fBgnu99\fR" 4
1585 .IX Item "gnu99"
1586 .PD 0
1587 .IP "\fBgnu9x\fR" 4
1588 .IX Item "gnu9x"
1589 .PD
1590 \&\s-1GNU\s0 dialect of \s-1ISO\s0 C99.  When \s-1ISO\s0 C99 is fully implemented in \s-1GCC\s0,
1591 this will become the default.  The name \fBgnu9x\fR is deprecated.
1592 .IP "\fBgnu11\fR" 4
1593 .IX Item "gnu11"
1594 .PD 0
1595 .IP "\fBgnu1x\fR" 4
1596 .IX Item "gnu1x"
1597 .PD
1598 \&\s-1GNU\s0 dialect of \s-1ISO\s0 C11.  Support is incomplete and experimental.  The
1599 name \fBgnu1x\fR is deprecated.
1600 .IP "\fBc++98\fR" 4
1601 .IX Item "c++98"
1602 The 1998 \s-1ISO\s0 \*(C+ standard plus amendments. Same as \fB\-ansi\fR for
1603 \&\*(C+ code.
1604 .IP "\fBgnu++98\fR" 4
1605 .IX Item "gnu++98"
1606 \&\s-1GNU\s0 dialect of \fB\-std=c++98\fR.  This is the default for
1607 \&\*(C+ code.
1608 .IP "\fBc++11\fR" 4
1609 .IX Item "c++11"
1610 The 2011 \s-1ISO\s0 \*(C+ standard plus amendments.  Support for \*(C+11 is still
1611 experimental, and may change in incompatible ways in future releases.
1612 .IP "\fBgnu++11\fR" 4
1613 .IX Item "gnu++11"
1614 \&\s-1GNU\s0 dialect of \fB\-std=c++11\fR. Support for \*(C+11 is still
1615 experimental, and may change in incompatible ways in future releases.
1616 .RE
1617 .RS 4
1618 .RE
1619 .IP "\fB\-fgnu89\-inline\fR" 4
1620 .IX Item "-fgnu89-inline"
1621 The option \fB\-fgnu89\-inline\fR tells \s-1GCC\s0 to use the traditional
1622 \&\s-1GNU\s0 semantics for \f(CW\*(C`inline\*(C'\fR functions when in C99 mode.
1623   This option
1624 is accepted and ignored by \s-1GCC\s0 versions 4.1.3 up to but not including
1625 4.3.  In \s-1GCC\s0 versions 4.3 and later it changes the behavior of \s-1GCC\s0 in
1626 C99 mode.  Using this option is roughly equivalent to adding the
1627 \&\f(CW\*(C`gnu_inline\*(C'\fR function attribute to all inline functions.
1628 .Sp
1629 The option \fB\-fno\-gnu89\-inline\fR explicitly tells \s-1GCC\s0 to use the
1630 C99 semantics for \f(CW\*(C`inline\*(C'\fR when in C99 or gnu99 mode (i.e., it
1631 specifies the default behavior).  This option was first supported in
1632 \&\s-1GCC\s0 4.3.  This option is not supported in \fB\-std=c90\fR or
1633 \&\fB\-std=gnu90\fR mode.
1634 .Sp
1635 The preprocessor macros \f(CW\*(C`_\|_GNUC_GNU_INLINE_\|_\*(C'\fR and
1636 \&\f(CW\*(C`_\|_GNUC_STDC_INLINE_\|_\*(C'\fR may be used to check which semantics are
1637 in effect for \f(CW\*(C`inline\*(C'\fR functions.
1638 .IP "\fB\-aux\-info\fR \fIfilename\fR" 4
1639 .IX Item "-aux-info filename"
1640 Output to the given filename prototyped declarations for all functions
1641 declared and/or defined in a translation unit, including those in header
1642 files.  This option is silently ignored in any language other than C.
1643 .Sp
1644 Besides declarations, the file indicates, in comments, the origin of
1645 each declaration (source file and line), whether the declaration was
1646 implicit, prototyped or unprototyped (\fBI\fR, \fBN\fR for new or
1647 \&\fBO\fR for old, respectively, in the first character after the line
1648 number and the colon), and whether it came from a declaration or a
1649 definition (\fBC\fR or \fBF\fR, respectively, in the following
1650 character).  In the case of function definitions, a K&R\-style list of
1651 arguments followed by their declarations is also provided, inside
1652 comments, after the declaration.
1653 .IP "\fB\-fallow\-parameterless\-variadic\-functions\fR" 4
1654 .IX Item "-fallow-parameterless-variadic-functions"
1655 Accept variadic functions without named parameters.
1656 .Sp
1657 Although it is possible to define such a function, this is not very
1658 useful as it is not possible to read the arguments.  This is only
1659 supported for C as this construct is allowed by \*(C+.
1660 .IP "\fB\-fno\-asm\fR" 4
1661 .IX Item "-fno-asm"
1662 Do not recognize \f(CW\*(C`asm\*(C'\fR, \f(CW\*(C`inline\*(C'\fR or \f(CW\*(C`typeof\*(C'\fR as a
1663 keyword, so that code can use these words as identifiers.  You can use
1664 the keywords \f(CW\*(C`_\|_asm_\|_\*(C'\fR, \f(CW\*(C`_\|_inline_\|_\*(C'\fR and \f(CW\*(C`_\|_typeof_\|_\*(C'\fR
1665 instead.  \fB\-ansi\fR implies \fB\-fno\-asm\fR.
1666 .Sp
1667 In \*(C+, this switch only affects the \f(CW\*(C`typeof\*(C'\fR keyword, since
1668 \&\f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`inline\*(C'\fR are standard keywords.  You may want to
1669 use the \fB\-fno\-gnu\-keywords\fR flag instead, which has the same
1670 effect.  In C99 mode (\fB\-std=c99\fR or \fB\-std=gnu99\fR), this
1671 switch only affects the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR keywords, since
1672 \&\f(CW\*(C`inline\*(C'\fR is a standard keyword in \s-1ISO\s0 C99.
1673 .IP "\fB\-fno\-builtin\fR" 4
1674 .IX Item "-fno-builtin"
1675 .PD 0
1676 .IP "\fB\-fno\-builtin\-\fR\fIfunction\fR" 4
1677 .IX Item "-fno-builtin-function"
1678 .PD
1679 Don't recognize built-in functions that do not begin with
1680 \&\fB_\|_builtin_\fR as prefix.
1681 .Sp
1682 \&\s-1GCC\s0 normally generates special code to handle certain built-in functions
1683 more efficiently; for instance, calls to \f(CW\*(C`alloca\*(C'\fR may become single
1684 instructions which adjust the stack directly, and calls to \f(CW\*(C`memcpy\*(C'\fR
1685 may become inline copy loops.  The resulting code is often both smaller
1686 and faster, but since the function calls no longer appear as such, you
1687 cannot set a breakpoint on those calls, nor can you change the behavior
1688 of the functions by linking with a different library.  In addition,
1689 when a function is recognized as a built-in function, \s-1GCC\s0 may use
1690 information about that function to warn about problems with calls to
1691 that function, or to generate more efficient code, even if the
1692 resulting code still contains calls to that function.  For example,
1693 warnings are given with \fB\-Wformat\fR for bad calls to
1694 \&\f(CW\*(C`printf\*(C'\fR, when \f(CW\*(C`printf\*(C'\fR is built in, and \f(CW\*(C`strlen\*(C'\fR is
1695 known not to modify global memory.
1696 .Sp
1697 With the \fB\-fno\-builtin\-\fR\fIfunction\fR option
1698 only the built-in function \fIfunction\fR is
1699 disabled.  \fIfunction\fR must not begin with \fB_\|_builtin_\fR.  If a
1700 function is named that is not built-in in this version of \s-1GCC\s0, this
1701 option is ignored.  There is no corresponding
1702 \&\fB\-fbuiltin\-\fR\fIfunction\fR option; if you wish to enable
1703 built-in functions selectively when using \fB\-fno\-builtin\fR or
1704 \&\fB\-ffreestanding\fR, you may define macros such as:
1705 .Sp
1706 .Vb 2
1707 \&        #define abs(n)          _\|_builtin_abs ((n))
1708 \&        #define strcpy(d, s)    _\|_builtin_strcpy ((d), (s))
1709 .Ve
1710 .IP "\fB\-fhosted\fR" 4
1711 .IX Item "-fhosted"
1712 Assert that compilation takes place in a hosted environment.  This implies
1713 \&\fB\-fbuiltin\fR.  A hosted environment is one in which the
1714 entire standard library is available, and in which \f(CW\*(C`main\*(C'\fR has a return
1715 type of \f(CW\*(C`int\*(C'\fR.  Examples are nearly everything except a kernel.
1716 This is equivalent to \fB\-fno\-freestanding\fR.
1717 .IP "\fB\-ffreestanding\fR" 4
1718 .IX Item "-ffreestanding"
1719 Assert that compilation takes place in a freestanding environment.  This
1720 implies \fB\-fno\-builtin\fR.  A freestanding environment
1721 is one in which the standard library may not exist, and program startup may
1722 not necessarily be at \f(CW\*(C`main\*(C'\fR.  The most obvious example is an \s-1OS\s0 kernel.
1723 This is equivalent to \fB\-fno\-hosted\fR.
1724 .IP "\fB\-fopenmp\fR" 4
1725 .IX Item "-fopenmp"
1726 Enable handling of OpenMP directives \f(CW\*(C`#pragma omp\*(C'\fR in C/\*(C+ and
1727 \&\f(CW\*(C`!$omp\*(C'\fR in Fortran.  When \fB\-fopenmp\fR is specified, the
1728 compiler generates parallel code according to the OpenMP Application
1729 Program Interface v3.0 <\fBhttp://www.openmp.org/\fR>.  This option
1730 implies \fB\-pthread\fR, and thus is only supported on targets that
1731 have support for \fB\-pthread\fR.
1732 .IP "\fB\-fgnu\-tm\fR" 4
1733 .IX Item "-fgnu-tm"
1734 When the option \fB\-fgnu\-tm\fR is specified, the compiler will
1735 generate code for the Linux variant of Intel's current Transactional
1736 Memory \s-1ABI\s0 specification document (Revision 1.1, May 6 2009).  This is
1737 an experimental feature whose interface may change in future versions
1738 of \s-1GCC\s0, as the official specification changes.  Please note that not
1739 all architectures are supported for this feature.
1740 .Sp
1741 For more information on \s-1GCC\s0's support for transactional memory,
1742 .Sp
1743 Note that the transactional memory feature is not supported with
1744 non-call exceptions (\fB\-fnon\-call\-exceptions\fR).
1745 .IP "\fB\-fms\-extensions\fR" 4
1746 .IX Item "-fms-extensions"
1747 Accept some non-standard constructs used in Microsoft header files.
1748 .Sp
1749 In \*(C+ code, this allows member names in structures to be similar
1750 to previous types declarations.
1751 .Sp
1752 .Vb 4
1753 \&        typedef int UOW;
1754 \&        struct ABC {
1755 \&          UOW UOW;
1756 \&        };
1757 .Ve
1758 .Sp
1759 Some cases of unnamed fields in structures and unions are only
1760 accepted with this option.
1761 .IP "\fB\-fplan9\-extensions\fR" 4
1762 .IX Item "-fplan9-extensions"
1763 Accept some non-standard constructs used in Plan 9 code.
1764 .Sp
1765 This enables \fB\-fms\-extensions\fR, permits passing pointers to
1766 structures with anonymous fields to functions that expect pointers to
1767 elements of the type of the field, and permits referring to anonymous
1768 fields declared using a typedef.    This is only
1769 supported for C, not \*(C+.
1770 .IP "\fB\-trigraphs\fR" 4
1771 .IX Item "-trigraphs"
1772 Support \s-1ISO\s0 C trigraphs.  The \fB\-ansi\fR option (and \fB\-std\fR
1773 options for strict \s-1ISO\s0 C conformance) implies \fB\-trigraphs\fR.
1774 .IP "\fB\-no\-integrated\-cpp\fR" 4
1775 .IX Item "-no-integrated-cpp"
1776 Performs a compilation in two passes: preprocessing and compiling.  This
1777 option allows a user supplied \*(L"cc1\*(R", \*(L"cc1plus\*(R", or \*(L"cc1obj\*(R" via the
1778 \&\fB\-B\fR option.  The user supplied compilation step can then add in
1779 an additional preprocessing step after normal preprocessing but before
1780 compiling.  The default is to use the integrated cpp (internal cpp)
1781 .Sp
1782 The semantics of this option will change if \*(L"cc1\*(R", \*(L"cc1plus\*(R", and
1783 \&\*(L"cc1obj\*(R" are merged.
1784 .IP "\fB\-traditional\fR" 4
1785 .IX Item "-traditional"
1786 .PD 0
1787 .IP "\fB\-traditional\-cpp\fR" 4
1788 .IX Item "-traditional-cpp"
1789 .PD
1790 Formerly, these options caused \s-1GCC\s0 to attempt to emulate a pre-standard
1791 C compiler.  They are now only supported with the \fB\-E\fR switch.
1792 The preprocessor continues to support a pre-standard mode.  See the \s-1GNU\s0
1793 \&\s-1CPP\s0 manual for details.
1794 .IP "\fB\-fcond\-mismatch\fR" 4
1795 .IX Item "-fcond-mismatch"
1796 Allow conditional expressions with mismatched types in the second and
1797 third arguments.  The value of such an expression is void.  This option
1798 is not supported for \*(C+.
1799 .IP "\fB\-flax\-vector\-conversions\fR" 4
1800 .IX Item "-flax-vector-conversions"
1801 Allow implicit conversions between vectors with differing numbers of
1802 elements and/or incompatible element types.  This option should not be
1803 used for new code.
1804 .IP "\fB\-funsigned\-char\fR" 4
1805 .IX Item "-funsigned-char"
1806 Let the type \f(CW\*(C`char\*(C'\fR be unsigned, like \f(CW\*(C`unsigned char\*(C'\fR.
1807 .Sp
1808 Each kind of machine has a default for what \f(CW\*(C`char\*(C'\fR should
1809 be.  It is either like \f(CW\*(C`unsigned char\*(C'\fR by default or like
1810 \&\f(CW\*(C`signed char\*(C'\fR by default.
1811 .Sp
1812 Ideally, a portable program should always use \f(CW\*(C`signed char\*(C'\fR or
1813 \&\f(CW\*(C`unsigned char\*(C'\fR when it depends on the signedness of an object.
1814 But many programs have been written to use plain \f(CW\*(C`char\*(C'\fR and
1815 expect it to be signed, or expect it to be unsigned, depending on the
1816 machines they were written for.  This option, and its inverse, let you
1817 make such a program work with the opposite default.
1818 .Sp
1819 The type \f(CW\*(C`char\*(C'\fR is always a distinct type from each of
1820 \&\f(CW\*(C`signed char\*(C'\fR or \f(CW\*(C`unsigned char\*(C'\fR, even though its behavior
1821 is always just like one of those two.
1822 .IP "\fB\-fsigned\-char\fR" 4
1823 .IX Item "-fsigned-char"
1824 Let the type \f(CW\*(C`char\*(C'\fR be signed, like \f(CW\*(C`signed char\*(C'\fR.
1825 .Sp
1826 Note that this is equivalent to \fB\-fno\-unsigned\-char\fR, which is
1827 the negative form of \fB\-funsigned\-char\fR.  Likewise, the option
1828 \&\fB\-fno\-signed\-char\fR is equivalent to \fB\-funsigned\-char\fR.
1829 .IP "\fB\-fsigned\-bitfields\fR" 4
1830 .IX Item "-fsigned-bitfields"
1831 .PD 0
1832 .IP "\fB\-funsigned\-bitfields\fR" 4
1833 .IX Item "-funsigned-bitfields"
1834 .IP "\fB\-fno\-signed\-bitfields\fR" 4
1835 .IX Item "-fno-signed-bitfields"
1836 .IP "\fB\-fno\-unsigned\-bitfields\fR" 4
1837 .IX Item "-fno-unsigned-bitfields"
1838 .PD
1839 These options control whether a bit-field is signed or unsigned, when the
1840 declaration does not use either \f(CW\*(C`signed\*(C'\fR or \f(CW\*(C`unsigned\*(C'\fR.  By
1841 default, such a bit-field is signed, because this is consistent: the
1842 basic integer types such as \f(CW\*(C`int\*(C'\fR are signed types.
1843 .SS "Options Controlling \*(C+ Dialect"
1844 .IX Subsection "Options Controlling  Dialect"
1845 This section describes the command-line options that are only meaningful
1846 for \*(C+ programs; but you can also use most of the \s-1GNU\s0 compiler options
1847 regardless of what language your program is in.  For example, you
1848 might compile a file \f(CW\*(C`firstClass.C\*(C'\fR like this:
1849 .PP
1850 .Vb 1
1851 \&        g++ \-g \-frepo \-O \-c firstClass.C
1852 .Ve
1853 .PP
1854 In this example, only \fB\-frepo\fR is an option meant
1855 only for \*(C+ programs; you can use the other options with any
1856 language supported by \s-1GCC\s0.
1857 .PP
1858 Here is a list of options that are \fIonly\fR for compiling \*(C+ programs:
1859 .IP "\fB\-fabi\-version=\fR\fIn\fR" 4
1860 .IX Item "-fabi-version=n"
1861 Use version \fIn\fR of the \*(C+ \s-1ABI\s0.  Version 2 is the version of the
1862 \&\*(C+ \s-1ABI\s0 that first appeared in G++ 3.4.  Version 1 is the version of
1863 the \*(C+ \s-1ABI\s0 that first appeared in G++ 3.2.  Version 0 will always be
1864 the version that conforms most closely to the \*(C+ \s-1ABI\s0 specification.
1865 Therefore, the \s-1ABI\s0 obtained using version 0 will change as \s-1ABI\s0 bugs
1866 are fixed.
1867 .Sp
1868 The default is version 2.
1869 .Sp
1870 Version 3 corrects an error in mangling a constant address as a
1871 template argument.
1872 .Sp
1873 Version 4, which first appeared in G++ 4.5, implements a standard
1874 mangling for vector types.
1875 .Sp
1876 Version 5, which first appeared in G++ 4.6, corrects the mangling of
1877 attribute const/volatile on function pointer types, decltype of a
1878 plain decl, and use of a function parameter in the declaration of
1879 another parameter.
1880 .Sp
1881 Version 6, which first appeared in G++ 4.7, corrects the promotion
1882 behavior of \*(C+11 scoped enums and the mangling of template argument
1883 packs, const/static_cast, prefix ++ and \-\-, and a class scope function
1884 used as a template argument.
1885 .Sp
1886 See also \fB\-Wabi\fR.
1887 .IP "\fB\-fno\-access\-control\fR" 4
1888 .IX Item "-fno-access-control"
1889 Turn off all access checking.  This switch is mainly useful for working
1890 around bugs in the access control code.
1891 .IP "\fB\-fcheck\-new\fR" 4
1892 .IX Item "-fcheck-new"
1893 Check that the pointer returned by \f(CW\*(C`operator new\*(C'\fR is non-null
1894 before attempting to modify the storage allocated.  This check is
1895 normally unnecessary because the \*(C+ standard specifies that
1896 \&\f(CW\*(C`operator new\*(C'\fR will only return \f(CW0\fR if it is declared
1897 \&\fB\f(BIthrow()\fB\fR, in which case the compiler will always check the
1898 return value even without this option.  In all other cases, when
1899 \&\f(CW\*(C`operator new\*(C'\fR has a non-empty exception specification, memory
1900 exhaustion is signalled by throwing \f(CW\*(C`std::bad_alloc\*(C'\fR.  See also
1901 \&\fBnew (nothrow)\fR.
1902 .IP "\fB\-fconserve\-space\fR" 4
1903 .IX Item "-fconserve-space"
1904 Put uninitialized or run-time-initialized global variables into the
1905 common segment, as C does.  This saves space in the executable at the
1906 cost of not diagnosing duplicate definitions.  If you compile with this
1907 flag and your program mysteriously crashes after \f(CW\*(C`main()\*(C'\fR has
1908 completed, you may have an object that is being destroyed twice because
1909 two definitions were merged.
1910 .Sp
1911 This option is no longer useful on most targets, now that support has
1912 been added for putting variables into \s-1BSS\s0 without making them common.
1913 .IP "\fB\-fconstexpr\-depth=\fR\fIn\fR" 4
1914 .IX Item "-fconstexpr-depth=n"
1915 Set the maximum nested evaluation depth for \*(C+11 constexpr functions
1916 to \fIn\fR.  A limit is needed to detect endless recursion during
1917 constant expression evaluation.  The minimum specified by the standard
1918 is 512.
1919 .IP "\fB\-fdeduce\-init\-list\fR" 4
1920 .IX Item "-fdeduce-init-list"
1921 Enable deduction of a template type parameter as
1922 std::initializer_list from a brace-enclosed initializer list, i.e.
1923 .Sp
1924 .Vb 4
1925 \&        template <class T> auto forward(T t) \-> decltype (realfn (t))
1926 \&        {
1927 \&          return realfn (t);
1928 \&        }
1929 \&        
1930 \&        void f()
1931 \&        {
1932 \&          forward({1,2}); // call forward<std::initializer_list<int>>
1933 \&        }
1934 .Ve
1935 .Sp
1936 This deduction was implemented as a possible extension to the
1937 originally proposed semantics for the \*(C+11 standard, but was not part
1938 of the final standard, so it is disabled by default.  This option is
1939 deprecated, and may be removed in a future version of G++.
1940 .IP "\fB\-ffriend\-injection\fR" 4
1941 .IX Item "-ffriend-injection"
1942 Inject friend functions into the enclosing namespace, so that they are
1943 visible outside the scope of the class in which they are declared.
1944 Friend functions were documented to work this way in the old Annotated
1945 \&\*(C+ Reference Manual, and versions of G++ before 4.1 always worked
1946 that way.  However, in \s-1ISO\s0 \*(C+ a friend function that is not declared
1947 in an enclosing scope can only be found using argument dependent
1948 lookup.  This option causes friends to be injected as they were in
1949 earlier releases.
1950 .Sp
1951 This option is for compatibility, and may be removed in a future
1952 release of G++.
1953 .IP "\fB\-fno\-elide\-constructors\fR" 4
1954 .IX Item "-fno-elide-constructors"
1955 The \*(C+ standard allows an implementation to omit creating a temporary
1956 that is only used to initialize another object of the same type.
1957 Specifying this option disables that optimization, and forces G++ to
1958 call the copy constructor in all cases.
1959 .IP "\fB\-fno\-enforce\-eh\-specs\fR" 4
1960 .IX Item "-fno-enforce-eh-specs"
1961 Don't generate code to check for violation of exception specifications
1962 at run time.  This option violates the \*(C+ standard, but may be useful
1963 for reducing code size in production builds, much like defining
1964 \&\fB\s-1NDEBUG\s0\fR.  This does not give user code permission to throw
1965 exceptions in violation of the exception specifications; the compiler
1966 will still optimize based on the specifications, so throwing an
1967 unexpected exception will result in undefined behavior.
1968 .IP "\fB\-ffor\-scope\fR" 4
1969 .IX Item "-ffor-scope"
1970 .PD 0
1971 .IP "\fB\-fno\-for\-scope\fR" 4
1972 .IX Item "-fno-for-scope"
1973 .PD
1974 If \fB\-ffor\-scope\fR is specified, the scope of variables declared in
1975 a \fIfor-init-statement\fR is limited to the \fBfor\fR loop itself,
1976 as specified by the \*(C+ standard.
1977 If \fB\-fno\-for\-scope\fR is specified, the scope of variables declared in
1978 a \fIfor-init-statement\fR extends to the end of the enclosing scope,
1979 as was the case in old versions of G++, and other (traditional)
1980 implementations of \*(C+.
1981 .Sp
1982 The default if neither flag is given to follow the standard,
1983 but to allow and give a warning for old-style code that would
1984 otherwise be invalid, or have different behavior.
1985 .IP "\fB\-fno\-gnu\-keywords\fR" 4
1986 .IX Item "-fno-gnu-keywords"
1987 Do not recognize \f(CW\*(C`typeof\*(C'\fR as a keyword, so that code can use this
1988 word as an identifier.  You can use the keyword \f(CW\*(C`_\|_typeof_\|_\*(C'\fR instead.
1989 \&\fB\-ansi\fR implies \fB\-fno\-gnu\-keywords\fR.
1990 .IP "\fB\-fno\-implicit\-templates\fR" 4
1991 .IX Item "-fno-implicit-templates"
1992 Never emit code for non-inline templates that are instantiated
1993 implicitly (i.e. by use); only emit code for explicit instantiations.
1994 .IP "\fB\-fno\-implicit\-inline\-templates\fR" 4
1995 .IX Item "-fno-implicit-inline-templates"
1996 Don't emit code for implicit instantiations of inline templates, either.
1997 The default is to handle inlines differently so that compiles with and
1998 without optimization will need the same set of explicit instantiations.
1999 .IP "\fB\-fno\-implement\-inlines\fR" 4
2000 .IX Item "-fno-implement-inlines"
2001 To save space, do not emit out-of-line copies of inline functions
2002 controlled by \fB#pragma implementation\fR.  This will cause linker
2003 errors if these functions are not inlined everywhere they are called.
2004 .IP "\fB\-fms\-extensions\fR" 4
2005 .IX Item "-fms-extensions"
2006 Disable pedantic warnings about constructs used in \s-1MFC\s0, such as implicit
2007 int and getting a pointer to member function via non-standard syntax.
2008 .IP "\fB\-fno\-nonansi\-builtins\fR" 4
2009 .IX Item "-fno-nonansi-builtins"
2010 Disable built-in declarations of functions that are not mandated by
2011 \&\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,
2012 \&\f(CW\*(C`index\*(C'\fR, \f(CW\*(C`bzero\*(C'\fR, \f(CW\*(C`conjf\*(C'\fR, and other related functions.
2013 .IP "\fB\-fnothrow\-opt\fR" 4
2014 .IX Item "-fnothrow-opt"
2015 Treat a \f(CW\*(C`throw()\*(C'\fR exception specification as though it were a
2016 \&\f(CW\*(C`noexcept\*(C'\fR specification to reduce or eliminate the text size
2017 overhead relative to a function with no exception specification.  If
2018 the function has local variables of types with non-trivial
2019 destructors, the exception specification will actually make the
2020 function smaller because the \s-1EH\s0 cleanups for those variables can be
2021 optimized away.  The semantic effect is that an exception thrown out of
2022 a function with such an exception specification will result in a call
2023 to \f(CW\*(C`terminate\*(C'\fR rather than \f(CW\*(C`unexpected\*(C'\fR.
2024 .IP "\fB\-fno\-operator\-names\fR" 4
2025 .IX Item "-fno-operator-names"
2026 Do not treat the operator name keywords \f(CW\*(C`and\*(C'\fR, \f(CW\*(C`bitand\*(C'\fR,
2027 \&\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
2028 synonyms as keywords.
2029 .IP "\fB\-fno\-optional\-diags\fR" 4
2030 .IX Item "-fno-optional-diags"
2031 Disable diagnostics that the standard says a compiler does not need to
2032 issue.  Currently, the only such diagnostic issued by G++ is the one for
2033 a name having multiple meanings within a class.
2034 .IP "\fB\-fpermissive\fR" 4
2035 .IX Item "-fpermissive"
2036 Downgrade some diagnostics about nonconformant code from errors to
2037 warnings.  Thus, using \fB\-fpermissive\fR will allow some
2038 nonconforming code to compile.
2039 .IP "\fB\-fno\-pretty\-templates\fR" 4
2040 .IX Item "-fno-pretty-templates"
2041 When an error message refers to a specialization of a function
2042 template, the compiler will normally print the signature of the
2043 template followed by the template arguments and any typedefs or
2044 typenames in the signature (e.g. \f(CW\*(C`void f(T) [with T = int]\*(C'\fR
2045 rather than \f(CW\*(C`void f(int)\*(C'\fR) so that it's clear which template is
2046 involved.  When an error message refers to a specialization of a class
2047 template, the compiler will omit any template arguments that match
2048 the default template arguments for that template.  If either of these
2049 behaviors make it harder to understand the error message rather than
2050 easier, using \fB\-fno\-pretty\-templates\fR will disable them.
2051 .IP "\fB\-frepo\fR" 4
2052 .IX Item "-frepo"
2053 Enable automatic template instantiation at link time.  This option also
2054 implies \fB\-fno\-implicit\-templates\fR.
2055 .IP "\fB\-fno\-rtti\fR" 4
2056 .IX Item "-fno-rtti"
2057 Disable generation of information about every class with virtual
2058 functions for use by the \*(C+ run-time type identification features
2059 (\fBdynamic_cast\fR and \fBtypeid\fR).  If you don't use those parts
2060 of the language, you can save some space by using this flag.  Note that
2061 exception handling uses the same information, but it will generate it as
2062 needed. The \fBdynamic_cast\fR operator can still be used for casts that
2063 do not require run-time type information, i.e. casts to \f(CW\*(C`void *\*(C'\fR or to
2064 unambiguous base classes.
2065 .IP "\fB\-fstats\fR" 4
2066 .IX Item "-fstats"
2067 Emit statistics about front-end processing at the end of the compilation.
2068 This information is generally only useful to the G++ development team.
2069 .IP "\fB\-fstrict\-enums\fR" 4
2070 .IX Item "-fstrict-enums"
2071 Allow the compiler to optimize using the assumption that a value of
2072 enumerated type can only be one of the values of the enumeration (as
2073 defined in the \*(C+ standard; basically, a value that can be
2074 represented in the minimum number of bits needed to represent all the
2075 enumerators).  This assumption may not be valid if the program uses a
2076 cast to convert an arbitrary integer value to the enumerated type.
2077 .IP "\fB\-ftemplate\-depth=\fR\fIn\fR" 4
2078 .IX Item "-ftemplate-depth=n"
2079 Set the maximum instantiation depth for template classes to \fIn\fR.
2080 A limit on the template instantiation depth is needed to detect
2081 endless recursions during template class instantiation.  \s-1ANSI/ISO\s0 \*(C+
2082 conforming programs must not rely on a maximum depth greater than 17
2083 (changed to 1024 in \*(C+11).  The default value is 900, as the compiler
2084 can run out of stack space before hitting 1024 in some situations.
2085 .IP "\fB\-fno\-threadsafe\-statics\fR" 4
2086 .IX Item "-fno-threadsafe-statics"
2087 Do not emit the extra code to use the routines specified in the \*(C+
2088 \&\s-1ABI\s0 for thread-safe initialization of local statics.  You can use this
2089 option to reduce code size slightly in code that doesn't need to be
2090 thread-safe.
2091 .IP "\fB\-fuse\-cxa\-atexit\fR" 4
2092 .IX Item "-fuse-cxa-atexit"
2093 Register destructors for objects with static storage duration with the
2094 \&\f(CW\*(C`_\|_cxa_atexit\*(C'\fR function rather than the \f(CW\*(C`atexit\*(C'\fR function.
2095 This option is required for fully standards-compliant handling of static
2096 destructors, but will only work if your C library supports
2097 \&\f(CW\*(C`_\|_cxa_atexit\*(C'\fR.
2098 .IP "\fB\-fno\-use\-cxa\-get\-exception\-ptr\fR" 4
2099 .IX Item "-fno-use-cxa-get-exception-ptr"
2100 Don't use the \f(CW\*(C`_\|_cxa_get_exception_ptr\*(C'\fR runtime routine.  This
2101 will cause \f(CW\*(C`std::uncaught_exception\*(C'\fR to be incorrect, but is necessary
2102 if the runtime routine is not available.
2103 .IP "\fB\-fvisibility\-inlines\-hidden\fR" 4
2104 .IX Item "-fvisibility-inlines-hidden"
2105 This switch declares that the user does not attempt to compare
2106 pointers to inline functions or methods where the addresses of the two functions
2107 were taken in different shared objects.
2108 .Sp
2109 The effect of this is that \s-1GCC\s0 may, effectively, mark inline methods with
2110 \&\f(CW\*(C`_\|_attribute_\|_ ((visibility ("hidden")))\*(C'\fR so that they do not
2111 appear in the export table of a \s-1DSO\s0 and do not require a \s-1PLT\s0 indirection
2112 when used within the \s-1DSO\s0.  Enabling this option can have a dramatic effect
2113 on load and link times of a \s-1DSO\s0 as it massively reduces the size of the
2114 dynamic export table when the library makes heavy use of templates.
2115 .Sp
2116 The behavior of this switch is not quite the same as marking the
2117 methods as hidden directly, because it does not affect static variables
2118 local to the function or cause the compiler to deduce that
2119 the function is defined in only one shared object.
2120 .Sp
2121 You may mark a method as having a visibility explicitly to negate the
2122 effect of the switch for that method.  For example, if you do want to
2123 compare pointers to a particular inline method, you might mark it as
2124 having default visibility.  Marking the enclosing class with explicit
2125 visibility will have no effect.
2126 .Sp
2127 Explicitly instantiated inline methods are unaffected by this option
2128 as their linkage might otherwise cross a shared library boundary.
2129 .IP "\fB\-fvisibility\-ms\-compat\fR" 4
2130 .IX Item "-fvisibility-ms-compat"
2131 This flag attempts to use visibility settings to make \s-1GCC\s0's \*(C+
2132 linkage model compatible with that of Microsoft Visual Studio.
2133 .Sp
2134 The flag makes these changes to \s-1GCC\s0's linkage model:
2135 .RS 4
2136 .IP "1." 4
2137 It sets the default visibility to \f(CW\*(C`hidden\*(C'\fR, like
2138 \&\fB\-fvisibility=hidden\fR.
2139 .IP "2." 4
2140 Types, but not their members, are not hidden by default.
2141 .IP "3." 4
2142 The One Definition Rule is relaxed for types without explicit
2143 visibility specifications that are defined in more than one different
2144 shared object: those declarations are permitted if they would have
2145 been permitted when this option was not used.
2146 .RE
2147 .RS 4
2148 .Sp
2149 In new code it is better to use \fB\-fvisibility=hidden\fR and
2150 export those classes that are intended to be externally visible.
2151 Unfortunately it is possible for code to rely, perhaps accidentally,
2152 on the Visual Studio behavior.
2153 .Sp
2154 Among the consequences of these changes are that static data members
2155 of the same type with the same name but defined in different shared
2156 objects will be different, so changing one will not change the other;
2157 and that pointers to function members defined in different shared
2158 objects may not compare equal.  When this flag is given, it is a
2159 violation of the \s-1ODR\s0 to define types with the same name differently.
2160 .RE
2161 .IP "\fB\-fno\-weak\fR" 4
2162 .IX Item "-fno-weak"
2163 Do not use weak symbol support, even if it is provided by the linker.
2164 By default, G++ will use weak symbols if they are available.  This
2165 option exists only for testing, and should not be used by end-users;
2166 it will result in inferior code and has no benefits.  This option may
2167 be removed in a future release of G++.
2168 .IP "\fB\-nostdinc++\fR" 4
2169 .IX Item "-nostdinc++"
2170 Do not search for header files in the standard directories specific to
2171 \&\*(C+, but do still search the other standard directories.  (This option
2172 is used when building the \*(C+ library.)
2173 .PP
2174 In addition, these optimization, warning, and code generation options
2175 have meanings only for \*(C+ programs:
2176 .IP "\fB\-fno\-default\-inline\fR" 4
2177 .IX Item "-fno-default-inline"
2178 Do not assume \fBinline\fR for functions defined inside a class scope.
2179   Note that these
2180 functions will have linkage like inline functions; they just won't be
2181 inlined by default.
2182 .IP "\fB\-Wabi\fR (C, Objective-C, \*(C+ and Objective\-\*(C+ only)" 4
2183 .IX Item "-Wabi (C, Objective-C,  and Objective- only)"
2184 Warn when G++ generates code that is probably not compatible with the
2185 vendor-neutral \*(C+ \s-1ABI\s0.  Although an effort has been made to warn about
2186 all such cases, there are probably some cases that are not warned about,
2187 even though G++ is generating incompatible code.  There may also be
2188 cases where warnings are emitted even though the code that is generated
2189 will be compatible.
2190 .Sp
2191 You should rewrite your code to avoid these warnings if you are
2192 concerned about the fact that code generated by G++ may not be binary
2193 compatible with code generated by other compilers.
2194 .Sp
2195 The known incompatibilities in \fB\-fabi\-version=2\fR (the default) include:
2196 .RS 4
2197 .IP "\(bu" 4
2198 A template with a non-type template parameter of reference type is
2199 mangled incorrectly:
2200 .Sp
2201 .Vb 3
2202 \&        extern int N;
2203 \&        template <int &> struct S {};
2204 \&        void n (S<N>) {2}
2205 .Ve
2206 .Sp
2207 This is fixed in \fB\-fabi\-version=3\fR.
2208 .IP "\(bu" 4
2209 \&\s-1SIMD\s0 vector types declared using \f(CW\*(C`_\|_attribute ((vector_size))\*(C'\fR are
2210 mangled in a non-standard way that does not allow for overloading of
2211 functions taking vectors of different sizes.
2212 .Sp
2213 The mangling is changed in \fB\-fabi\-version=4\fR.
2214 .RE
2215 .RS 4
2216 .Sp
2217 The known incompatibilities in \fB\-fabi\-version=1\fR include:
2218 .IP "\(bu" 4
2219 Incorrect handling of tail-padding for bit-fields.  G++ may attempt to
2220 pack data into the same byte as a base class.  For example:
2221 .Sp
2222 .Vb 2
2223 \&        struct A { virtual void f(); int f1 : 1; };
2224 \&        struct B : public A { int f2 : 1; };
2225 .Ve
2226 .Sp
2227 In this case, G++ will place \f(CW\*(C`B::f2\*(C'\fR into the same byte
2228 as\f(CW\*(C`A::f1\*(C'\fR; other compilers will not.  You can avoid this problem
2229 by explicitly padding \f(CW\*(C`A\*(C'\fR so that its size is a multiple of the
2230 byte size on your platform; that will cause G++ and other compilers to
2231 layout \f(CW\*(C`B\*(C'\fR identically.
2232 .IP "\(bu" 4
2233 Incorrect handling of tail-padding for virtual bases.  G++ does not use
2234 tail padding when laying out virtual bases.  For example:
2235 .Sp
2236 .Vb 3
2237 \&        struct A { virtual void f(); char c1; };
2238 \&        struct B { B(); char c2; };
2239 \&        struct C : public A, public virtual B {};
2240 .Ve
2241 .Sp
2242 In this case, G++ will not place \f(CW\*(C`B\*(C'\fR into the tail-padding for
2243 \&\f(CW\*(C`A\*(C'\fR; other compilers will.  You can avoid this problem by
2244 explicitly padding \f(CW\*(C`A\*(C'\fR so that its size is a multiple of its
2245 alignment (ignoring virtual base classes); that will cause G++ and other
2246 compilers to layout \f(CW\*(C`C\*(C'\fR identically.
2247 .IP "\(bu" 4
2248 Incorrect handling of bit-fields with declared widths greater than that
2249 of their underlying types, when the bit-fields appear in a union.  For
2250 example:
2251 .Sp
2252 .Vb 1
2253 \&        union U { int i : 4096; };
2254 .Ve
2255 .Sp
2256 Assuming that an \f(CW\*(C`int\*(C'\fR does not have 4096 bits, G++ will make the
2257 union too small by the number of bits in an \f(CW\*(C`int\*(C'\fR.
2258 .IP "\(bu" 4
2259 Empty classes can be placed at incorrect offsets.  For example:
2260 .Sp
2261 .Vb 1
2262 \&        struct A {};
2263 \&        
2264 \&        struct B {
2265 \&          A a;
2266 \&          virtual void f ();
2267 \&        };
2268 \&        
2269 \&        struct C : public B, public A {};
2270 .Ve
2271 .Sp
2272 G++ will place the \f(CW\*(C`A\*(C'\fR base class of \f(CW\*(C`C\*(C'\fR at a nonzero offset;
2273 it should be placed at offset zero.  G++ mistakenly believes that the
2274 \&\f(CW\*(C`A\*(C'\fR data member of \f(CW\*(C`B\*(C'\fR is already at offset zero.
2275 .IP "\(bu" 4
2276 Names of template functions whose types involve \f(CW\*(C`typename\*(C'\fR or
2277 template template parameters can be mangled incorrectly.
2278 .Sp
2279 .Vb 2
2280 \&        template <typename Q>
2281 \&        void f(typename Q::X) {}
2282 \&        
2283 \&        template <template <typename> class Q>
2284 \&        void f(typename Q<int>::X) {}
2285 .Ve
2286 .Sp
2287 Instantiations of these templates may be mangled incorrectly.
2288 .RE
2289 .RS 4
2290 .Sp
2291 It also warns psABI related changes.  The known psABI changes at this
2292 point include:
2293 .IP "\(bu" 4
2294 For SYSV/x86\-64, when passing union with long double, it is changed to
2295 pass in memory as specified in psABI.  For example:
2296 .Sp
2297 .Vb 4
2298 \&        union U {
2299 \&          long double ld;
2300 \&          int i;
2301 \&        };
2302 .Ve
2303 .Sp
2304 \&\f(CW\*(C`union U\*(C'\fR will always be passed in memory.
2305 .RE
2306 .RS 4
2307 .RE
2308 .IP "\fB\-Wctor\-dtor\-privacy\fR (\*(C+ and Objective\-\*(C+ only)" 4
2309 .IX Item "-Wctor-dtor-privacy ( and Objective- only)"
2310 Warn when a class seems unusable because all the constructors or
2311 destructors in that class are private, and it has neither friends nor
2312 public static member functions.
2313 .IP "\fB\-Wdelete\-non\-virtual\-dtor\fR (\*(C+ and Objective\-\*(C+ only)" 4
2314 .IX Item "-Wdelete-non-virtual-dtor ( and Objective- only)"
2315 Warn when \fBdelete\fR is used to destroy an instance of a class that
2316 has virtual functions and non-virtual destructor. It is unsafe to delete
2317 an instance of a derived class through a pointer to a base class if the
2318 base class does not have a virtual destructor.  This warning is enabled
2319 by \fB\-Wall\fR.
2320 .IP "\fB\-Wnarrowing\fR (\*(C+ and Objective\-\*(C+ only)" 4
2321 .IX Item "-Wnarrowing ( and Objective- only)"
2322 Warn when a narrowing conversion prohibited by \*(C+11 occurs within
2323 \&\fB{ }\fR, e.g.
2324 .Sp
2325 .Vb 1
2326 \&        int i = { 2.2 }; // error: narrowing from double to int
2327 .Ve
2328 .Sp
2329 This flag is included in \fB\-Wall\fR and \fB\-Wc++11\-compat\fR.
2330 .Sp
2331 With \-std=c++11, \fB\-Wno\-narrowing\fR suppresses the diagnostic
2332 required by the standard.  Note that this does not affect the meaning
2333 of well-formed code; narrowing conversions are still considered
2334 ill-formed in \s-1SFINAE\s0 context.
2335 .IP "\fB\-Wnoexcept\fR (\*(C+ and Objective\-\*(C+ only)" 4
2336 .IX Item "-Wnoexcept ( and Objective- only)"
2337 Warn when a noexcept-expression evaluates to false because of a call
2338 to a function that does not have a non-throwing exception
2339 specification (i.e. \fB\f(BIthrow()\fB\fR or \fBnoexcept\fR) but is known by
2340 the compiler to never throw an exception.
2341 .IP "\fB\-Wnon\-virtual\-dtor\fR (\*(C+ and Objective\-\*(C+ only)" 4
2342 .IX Item "-Wnon-virtual-dtor ( and Objective- only)"
2343 Warn when a class has virtual functions and accessible non-virtual
2344 destructor, in which case it would be possible but unsafe to delete
2345 an instance of a derived class through a pointer to the base class.
2346 This warning is also enabled if \fB\-Weffc++\fR is specified.
2347 .IP "\fB\-Wreorder\fR (\*(C+ and Objective\-\*(C+ only)" 4
2348 .IX Item "-Wreorder ( and Objective- only)"
2349 Warn when the order of member initializers given in the code does not
2350 match the order in which they must be executed.  For instance:
2351 .Sp
2352 .Vb 5
2353 \&        struct A {
2354 \&          int i;
2355 \&          int j;
2356 \&          A(): j (0), i (1) { }
2357 \&        };
2358 .Ve
2359 .Sp
2360 The compiler will rearrange the member initializers for \fBi\fR
2361 and \fBj\fR to match the declaration order of the members, emitting
2362 a warning to that effect.  This warning is enabled by \fB\-Wall\fR.
2363 .PP
2364 The following \fB\-W...\fR options are not affected by \fB\-Wall\fR.
2365 .IP "\fB\-Weffc++\fR (\*(C+ and Objective\-\*(C+ only)" 4
2366 .IX Item "-Weffc++ ( and Objective- only)"
2367 Warn about violations of the following style guidelines from Scott Meyers'
2368 \&\fIEffective \*(C+, Second Edition\fR book:
2369 .RS 4
2370 .IP "\(bu" 4
2371 Item 11:  Define a copy constructor and an assignment operator for classes
2372 with dynamically allocated memory.
2373 .IP "\(bu" 4
2374 Item 12:  Prefer initialization to assignment in constructors.
2375 .IP "\(bu" 4
2376 Item 14:  Make destructors virtual in base classes.
2377 .IP "\(bu" 4
2378 Item 15:  Have \f(CW\*(C`operator=\*(C'\fR return a reference to \f(CW*this\fR.
2379 .IP "\(bu" 4
2380 Item 23:  Don't try to return a reference when you must return an object.
2381 .RE
2382 .RS 4
2383 .Sp
2384 Also warn about violations of the following style guidelines from
2385 Scott Meyers' \fIMore Effective \*(C+\fR book:
2386 .IP "\(bu" 4
2387 Item 6:  Distinguish between prefix and postfix forms of increment and
2388 decrement operators.
2389 .IP "\(bu" 4
2390 Item 7:  Never overload \f(CW\*(C`&&\*(C'\fR, \f(CW\*(C`||\*(C'\fR, or \f(CW\*(C`,\*(C'\fR.
2391 .RE
2392 .RS 4
2393 .Sp
2394 When selecting this option, be aware that the standard library
2395 headers do not obey all of these guidelines; use \fBgrep \-v\fR
2396 to filter out those warnings.
2397 .RE
2398 .IP "\fB\-Wstrict\-null\-sentinel\fR (\*(C+ and Objective\-\*(C+ only)" 4
2399 .IX Item "-Wstrict-null-sentinel ( and Objective- only)"
2400 Warn also about the use of an uncasted \f(CW\*(C`NULL\*(C'\fR as sentinel.  When
2401 compiling only with \s-1GCC\s0 this is a valid sentinel, as \f(CW\*(C`NULL\*(C'\fR is defined
2402 to \f(CW\*(C`_\|_null\*(C'\fR.  Although it is a null pointer constant not a null pointer,
2403 it is guaranteed to be of the same size as a pointer.  But this use is
2404 not portable across different compilers.
2405 .IP "\fB\-Wno\-non\-template\-friend\fR (\*(C+ and Objective\-\*(C+ only)" 4
2406 .IX Item "-Wno-non-template-friend ( and Objective- only)"
2407 Disable warnings when non-templatized friend functions are declared
2408 within a template.  Since the advent of explicit template specification
2409 support in G++, if the name of the friend is an unqualified-id (i.e.,
2410 \&\fBfriend foo(int)\fR), the \*(C+ language specification demands that the
2411 friend declare or define an ordinary, nontemplate function.  (Section
2412 14.5.3).  Before G++ implemented explicit specification, unqualified-ids
2413 could be interpreted as a particular specialization of a templatized
2414 function.  Because this non-conforming behavior is no longer the default
2415 behavior for G++, \fB\-Wnon\-template\-friend\fR allows the compiler to
2416 check existing code for potential trouble spots and is on by default.
2417 This new compiler behavior can be turned off with
2418 \&\fB\-Wno\-non\-template\-friend\fR, which keeps the conformant compiler code
2419 but disables the helpful warning.
2420 .IP "\fB\-Wold\-style\-cast\fR (\*(C+ and Objective\-\*(C+ only)" 4
2421 .IX Item "-Wold-style-cast ( and Objective- only)"
2422 Warn if an old-style (C\-style) cast to a non-void type is used within
2423 a \*(C+ program.  The new-style casts (\fBdynamic_cast\fR,
2424 \&\fBstatic_cast\fR, \fBreinterpret_cast\fR, and \fBconst_cast\fR) are
2425 less vulnerable to unintended effects and much easier to search for.
2426 .IP "\fB\-Woverloaded\-virtual\fR (\*(C+ and Objective\-\*(C+ only)" 4
2427 .IX Item "-Woverloaded-virtual ( and Objective- only)"
2428 Warn when a function declaration hides virtual functions from a
2429 base class.  For example, in:
2430 .Sp
2431 .Vb 3
2432 \&        struct A {
2433 \&          virtual void f();
2434 \&        };
2435 \&        
2436 \&        struct B: public A {
2437 \&          void f(int);
2438 \&        };
2439 .Ve
2440 .Sp
2441 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
2442 like:
2443 .Sp
2444 .Vb 2
2445 \&        B* b;
2446 \&        b\->f();
2447 .Ve
2448 .Sp
2449 will fail to compile.
2450 .IP "\fB\-Wno\-pmf\-conversions\fR (\*(C+ and Objective\-\*(C+ only)" 4
2451 .IX Item "-Wno-pmf-conversions ( and Objective- only)"
2452 Disable the diagnostic for converting a bound pointer to member function
2453 to a plain pointer.
2454 .IP "\fB\-Wsign\-promo\fR (\*(C+ and Objective\-\*(C+ only)" 4
2455 .IX Item "-Wsign-promo ( and Objective- only)"
2456 Warn when overload resolution chooses a promotion from unsigned or
2457 enumerated type to a signed type, over a conversion to an unsigned type of
2458 the same size.  Previous versions of G++ would try to preserve
2459 unsignedness, but the standard mandates the current behavior.
2460 .Sp
2461 .Vb 4
2462 \&        struct A {
2463 \&          operator int ();
2464 \&          A& operator = (int);
2465 \&        };
2466 \&        
2467 \&        main ()
2468 \&        {
2469 \&          A a,b;
2470 \&          a = b;
2471 \&        }
2472 .Ve
2473 .Sp
2474 In this example, G++ will synthesize a default \fBA& operator =
2475 (const A&);\fR, while cfront will use the user-defined \fBoperator =\fR.
2476 .SS "Options Controlling Objective-C and Objective\-\*(C+ Dialects"
2477 .IX Subsection "Options Controlling Objective-C and Objective- Dialects"
2478 (\s-1NOTE:\s0 This manual does not describe the Objective-C and Objective\-\*(C+
2479 languages themselves.
2480 .PP
2481 This section describes the command-line options that are only meaningful
2482 for Objective-C and Objective\-\*(C+ programs, but you can also use most of
2483 the language-independent \s-1GNU\s0 compiler options.
2484 For example, you might compile a file \f(CW\*(C`some_class.m\*(C'\fR like this:
2485 .PP
2486 .Vb 1
2487 \&        gcc \-g \-fgnu\-runtime \-O \-c some_class.m
2488 .Ve
2489 .PP
2490 In this example, \fB\-fgnu\-runtime\fR is an option meant only for
2491 Objective-C and Objective\-\*(C+ programs; you can use the other options with
2492 any language supported by \s-1GCC\s0.
2493 .PP
2494 Note that since Objective-C is an extension of the C language, Objective-C
2495 compilations may also use options specific to the C front-end (e.g.,
2496 \&\fB\-Wtraditional\fR).  Similarly, Objective\-\*(C+ compilations may use
2497 \&\*(C+\-specific options (e.g., \fB\-Wabi\fR).
2498 .PP
2499 Here is a list of options that are \fIonly\fR for compiling Objective-C
2500 and Objective\-\*(C+ programs:
2501 .IP "\fB\-fconstant\-string\-class=\fR\fIclass-name\fR" 4
2502 .IX Item "-fconstant-string-class=class-name"
2503 Use \fIclass-name\fR as the name of the class to instantiate for each
2504 literal string specified with the syntax \f(CW\*(C`@"..."\*(C'\fR.  The default
2505 class name is \f(CW\*(C`NXConstantString\*(C'\fR if the \s-1GNU\s0 runtime is being used, and
2506 \&\f(CW\*(C`NSConstantString\*(C'\fR if the NeXT runtime is being used (see below).  The
2507 \&\fB\-fconstant\-cfstrings\fR option, if also present, will override the
2508 \&\fB\-fconstant\-string\-class\fR setting and cause \f(CW\*(C`@"..."\*(C'\fR literals
2509 to be laid out as constant CoreFoundation strings.
2510 .IP "\fB\-fgnu\-runtime\fR" 4
2511 .IX Item "-fgnu-runtime"
2512 Generate object code compatible with the standard \s-1GNU\s0 Objective-C
2513 runtime.  This is the default for most types of systems.
2514 .IP "\fB\-fnext\-runtime\fR" 4
2515 .IX Item "-fnext-runtime"
2516 Generate output compatible with the NeXT runtime.  This is the default
2517 for NeXT-based systems, including Darwin and Mac \s-1OS\s0 X.  The macro
2518 \&\f(CW\*(C`_\|_NEXT_RUNTIME_\|_\*(C'\fR is predefined if (and only if) this option is
2519 used.
2520 .IP "\fB\-fno\-nil\-receivers\fR" 4
2521 .IX Item "-fno-nil-receivers"
2522 Assume that all Objective-C message dispatches (\f(CW\*(C`[receiver
2523 message:arg]\*(C'\fR) in this translation unit ensure that the receiver is
2524 not \f(CW\*(C`nil\*(C'\fR.  This allows for more efficient entry points in the
2525 runtime to be used.  This option is only available in conjunction with
2526 the NeXT runtime and \s-1ABI\s0 version 0 or 1.
2527 .IP "\fB\-fobjc\-abi\-version=\fR\fIn\fR" 4
2528 .IX Item "-fobjc-abi-version=n"
2529 Use version \fIn\fR of the Objective-C \s-1ABI\s0 for the selected runtime.
2530 This option is currently supported only for the NeXT runtime.  In that
2531 case, Version 0 is the traditional (32\-bit) \s-1ABI\s0 without support for
2532 properties and other Objective-C 2.0 additions.  Version 1 is the
2533 traditional (32\-bit) \s-1ABI\s0 with support for properties and other
2534 Objective-C 2.0 additions.  Version 2 is the modern (64\-bit) \s-1ABI\s0.  If
2535 nothing is specified, the default is Version 0 on 32\-bit target
2536 machines, and Version 2 on 64\-bit target machines.
2537 .IP "\fB\-fobjc\-call\-cxx\-cdtors\fR" 4
2538 .IX Item "-fobjc-call-cxx-cdtors"
2539 For each Objective-C class, check if any of its instance variables is a
2540 \&\*(C+ object with a non-trivial default constructor.  If so, synthesize a
2541 special \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR instance method which will run
2542 non-trivial default constructors on any such instance variables, in order,
2543 and then return \f(CW\*(C`self\*(C'\fR.  Similarly, check if any instance variable
2544 is a \*(C+ object with a non-trivial destructor, and if so, synthesize a
2545 special \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR method which will run
2546 all such default destructors, in reverse order.
2547 .Sp
2548 The \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR and \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR
2549 methods thusly generated will only operate on instance variables
2550 declared in the current Objective-C class, and not those inherited
2551 from superclasses.  It is the responsibility of the Objective-C
2552 runtime to invoke all such methods in an object's inheritance
2553 hierarchy.  The \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR methods will be invoked
2554 by the runtime immediately after a new object instance is allocated;
2555 the \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR methods will be invoked immediately
2556 before the runtime deallocates an object instance.
2557 .Sp
2558 As of this writing, only the NeXT runtime on Mac \s-1OS\s0 X 10.4 and later has
2559 support for invoking the \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR and
2560 \&\f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR methods.
2561 .IP "\fB\-fobjc\-direct\-dispatch\fR" 4
2562 .IX Item "-fobjc-direct-dispatch"
2563 Allow fast jumps to the message dispatcher.  On Darwin this is
2564 accomplished via the comm page.
2565 .IP "\fB\-fobjc\-exceptions\fR" 4
2566 .IX Item "-fobjc-exceptions"
2567 Enable syntactic support for structured exception handling in
2568 Objective-C, similar to what is offered by \*(C+ and Java.  This option
2569 is required to use the Objective-C keywords \f(CW@try\fR,
2570 \&\f(CW@throw\fR, \f(CW@catch\fR, \f(CW@finally\fR and
2571 \&\f(CW@synchronized\fR.  This option is available with both the \s-1GNU\s0
2572 runtime and the NeXT runtime (but not available in conjunction with
2573 the NeXT runtime on Mac \s-1OS\s0 X 10.2 and earlier).
2574 .IP "\fB\-fobjc\-gc\fR" 4
2575 .IX Item "-fobjc-gc"
2576 Enable garbage collection (\s-1GC\s0) in Objective-C and Objective\-\*(C+
2577 programs.  This option is only available with the NeXT runtime; the
2578 \&\s-1GNU\s0 runtime has a different garbage collection implementation that
2579 does not require special compiler flags.
2580 .IP "\fB\-fobjc\-nilcheck\fR" 4
2581 .IX Item "-fobjc-nilcheck"
2582 For the NeXT runtime with version 2 of the \s-1ABI\s0, check for a nil
2583 receiver in method invocations before doing the actual method call.
2584 This is the default and can be disabled using
2585 \&\fB\-fno\-objc\-nilcheck\fR.  Class methods and super calls are never
2586 checked for nil in this way no matter what this flag is set to.
2587 Currently this flag does nothing when the \s-1GNU\s0 runtime, or an older
2588 version of the NeXT runtime \s-1ABI\s0, is used.
2589 .IP "\fB\-fobjc\-std=objc1\fR" 4
2590 .IX Item "-fobjc-std=objc1"
2591 Conform to the language syntax of Objective-C 1.0, the language
2592 recognized by \s-1GCC\s0 4.0.  This only affects the Objective-C additions to
2593 the C/\*(C+ language; it does not affect conformance to C/\*(C+ standards,
2594 which is controlled by the separate C/\*(C+ dialect option flags.  When
2595 this option is used with the Objective-C or Objective\-\*(C+ compiler,
2596 any Objective-C syntax that is not recognized by \s-1GCC\s0 4.0 is rejected.
2597 This is useful if you need to make sure that your Objective-C code can
2598 be compiled with older versions of \s-1GCC\s0.
2599 .IP "\fB\-freplace\-objc\-classes\fR" 4
2600 .IX Item "-freplace-objc-classes"
2601 Emit a special marker instructing \fB\f(BIld\fB\|(1)\fR not to statically link in
2602 the resulting object file, and allow \fB\f(BIdyld\fB\|(1)\fR to load it in at
2603 run time instead.  This is used in conjunction with the Fix-and-Continue
2604 debugging mode, where the object file in question may be recompiled and
2605 dynamically reloaded in the course of program execution, without the need
2606 to restart the program itself.  Currently, Fix-and-Continue functionality
2607 is only available in conjunction with the NeXT runtime on Mac \s-1OS\s0 X 10.3
2608 and later.
2609 .IP "\fB\-fzero\-link\fR" 4
2610 .IX Item "-fzero-link"
2611 When compiling for the NeXT runtime, the compiler ordinarily replaces calls
2612 to \f(CW\*(C`objc_getClass("...")\*(C'\fR (when the name of the class is known at
2613 compile time) with static class references that get initialized at load time,
2614 which improves run-time performance.  Specifying the \fB\-fzero\-link\fR flag
2615 suppresses this behavior and causes calls to \f(CW\*(C`objc_getClass("...")\*(C'\fR
2616 to be retained.  This is useful in Zero-Link debugging mode, since it allows
2617 for individual class implementations to be modified during program execution.
2618 The \s-1GNU\s0 runtime currently always retains calls to \f(CW\*(C`objc_get_class("...")\*(C'\fR
2619 regardless of command-line options.
2620 .IP "\fB\-gen\-decls\fR" 4
2621 .IX Item "-gen-decls"
2622 Dump interface declarations for all classes seen in the source file to a
2623 file named \fI\fIsourcename\fI.decl\fR.
2624 .IP "\fB\-Wassign\-intercept\fR (Objective-C and Objective\-\*(C+ only)" 4
2625 .IX Item "-Wassign-intercept (Objective-C and Objective- only)"
2626 Warn whenever an Objective-C assignment is being intercepted by the
2627 garbage collector.
2628 .IP "\fB\-Wno\-protocol\fR (Objective-C and Objective\-\*(C+ only)" 4
2629 .IX Item "-Wno-protocol (Objective-C and Objective- only)"
2630 If a class is declared to implement a protocol, a warning is issued for
2631 every method in the protocol that is not implemented by the class.  The
2632 default behavior is to issue a warning for every method not explicitly
2633 implemented in the class, even if a method implementation is inherited
2634 from the superclass.  If you use the \fB\-Wno\-protocol\fR option, then
2635 methods inherited from the superclass are considered to be implemented,
2636 and no warning is issued for them.
2637 .IP "\fB\-Wselector\fR (Objective-C and Objective\-\*(C+ only)" 4
2638 .IX Item "-Wselector (Objective-C and Objective- only)"
2639 Warn if multiple methods of different types for the same selector are
2640 found during compilation.  The check is performed on the list of methods
2641 in the final stage of compilation.  Additionally, a check is performed
2642 for each selector appearing in a \f(CW\*(C`@selector(...)\*(C'\fR
2643 expression, and a corresponding method for that selector has been found
2644 during compilation.  Because these checks scan the method table only at
2645 the end of compilation, these warnings are not produced if the final
2646 stage of compilation is not reached, for example because an error is
2647 found during compilation, or because the \fB\-fsyntax\-only\fR option is
2648 being used.
2649 .IP "\fB\-Wstrict\-selector\-match\fR (Objective-C and Objective\-\*(C+ only)" 4
2650 .IX Item "-Wstrict-selector-match (Objective-C and Objective- only)"
2651 Warn if multiple methods with differing argument and/or return types are
2652 found for a given selector when attempting to send a message using this
2653 selector to a receiver of type \f(CW\*(C`id\*(C'\fR or \f(CW\*(C`Class\*(C'\fR.  When this flag
2654 is off (which is the default behavior), the compiler will omit such warnings
2655 if any differences found are confined to types that share the same size
2656 and alignment.
2657 .IP "\fB\-Wundeclared\-selector\fR (Objective-C and Objective\-\*(C+ only)" 4
2658 .IX Item "-Wundeclared-selector (Objective-C and Objective- only)"
2659 Warn if a \f(CW\*(C`@selector(...)\*(C'\fR expression referring to an
2660 undeclared selector is found.  A selector is considered undeclared if no
2661 method with that name has been declared before the
2662 \&\f(CW\*(C`@selector(...)\*(C'\fR expression, either explicitly in an
2663 \&\f(CW@interface\fR or \f(CW@protocol\fR declaration, or implicitly in
2664 an \f(CW@implementation\fR section.  This option always performs its
2665 checks as soon as a \f(CW\*(C`@selector(...)\*(C'\fR expression is found,
2666 while \fB\-Wselector\fR only performs its checks in the final stage of
2667 compilation.  This also enforces the coding style convention
2668 that methods and selectors must be declared before being used.
2669 .IP "\fB\-print\-objc\-runtime\-info\fR" 4
2670 .IX Item "-print-objc-runtime-info"
2671 Generate C header describing the largest structure that is passed by
2672 value, if any.
2673 .SS "Options to Control Diagnostic Messages Formatting"
2674 .IX Subsection "Options to Control Diagnostic Messages Formatting"
2675 Traditionally, diagnostic messages have been formatted irrespective of
2676 the output device's aspect (e.g. its width, ...).  The options described
2677 below can be used to control the diagnostic messages formatting
2678 algorithm, e.g. how many characters per line, how often source location
2679 information should be reported.  Right now, only the \*(C+ front end can
2680 honor these options.  However it is expected, in the near future, that
2681 the remaining front ends would be able to digest them correctly.
2682 .IP "\fB\-fmessage\-length=\fR\fIn\fR" 4
2683 .IX Item "-fmessage-length=n"
2684 Try to format error messages so that they fit on lines of about \fIn\fR
2685 characters.  The default is 72 characters for \fBg++\fR and 0 for the rest of
2686 the front ends supported by \s-1GCC\s0.  If \fIn\fR is zero, then no
2687 line-wrapping will be done; each error message will appear on a single
2688 line.
2689 .IP "\fB\-fdiagnostics\-show\-location=once\fR" 4
2690 .IX Item "-fdiagnostics-show-location=once"
2691 Only meaningful in line-wrapping mode.  Instructs the diagnostic messages
2692 reporter to emit \fIonce\fR source location information; that is, in
2693 case the message is too long to fit on a single physical line and has to
2694 be wrapped, the source location won't be emitted (as prefix) again,
2695 over and over, in subsequent continuation lines.  This is the default
2696 behavior.
2697 .IP "\fB\-fdiagnostics\-show\-location=every\-line\fR" 4
2698 .IX Item "-fdiagnostics-show-location=every-line"
2699 Only meaningful in line-wrapping mode.  Instructs the diagnostic
2700 messages reporter to emit the same source location information (as
2701 prefix) for physical lines that result from the process of breaking
2702 a message which is too long to fit on a single line.
2703 .IP "\fB\-fno\-diagnostics\-show\-option\fR" 4
2704 .IX Item "-fno-diagnostics-show-option"
2705 By default, each diagnostic emitted includes text indicating the
2706 command-line option that directly controls the diagnostic (if such an
2707 option is known to the diagnostic machinery).  Specifying the
2708 \&\fB\-fno\-diagnostics\-show\-option\fR flag suppresses that behavior.
2709 .SS "Options to Request or Suppress Warnings"
2710 .IX Subsection "Options to Request or Suppress Warnings"
2711 Warnings are diagnostic messages that report constructions that
2712 are not inherently erroneous but that are risky or suggest there
2713 may have been an error.
2714 .PP
2715 The following language-independent options do not enable specific
2716 warnings but control the kinds of diagnostics produced by \s-1GCC\s0.
2717 .IP "\fB\-fsyntax\-only\fR" 4
2718 .IX Item "-fsyntax-only"
2719 Check the code for syntax errors, but don't do anything beyond that.
2720 .IP "\fB\-fmax\-errors=\fR\fIn\fR" 4
2721 .IX Item "-fmax-errors=n"
2722 Limits the maximum number of error messages to \fIn\fR, at which point
2723 \&\s-1GCC\s0 bails out rather than attempting to continue processing the source
2724 code.  If \fIn\fR is 0 (the default), there is no limit on the number
2725 of error messages produced.  If \fB\-Wfatal\-errors\fR is also
2726 specified, then \fB\-Wfatal\-errors\fR takes precedence over this
2727 option.
2728 .IP "\fB\-w\fR" 4
2729 .IX Item "-w"
2730 Inhibit all warning messages.
2731 .IP "\fB\-Werror\fR" 4
2732 .IX Item "-Werror"
2733 Make all warnings into errors.
2734 .IP "\fB\-Werror=\fR" 4
2735 .IX Item "-Werror="
2736 Make the specified warning into an error.  The specifier for a warning
2737 is appended, for example \fB\-Werror=switch\fR turns the warnings
2738 controlled by \fB\-Wswitch\fR into errors.  This switch takes a
2739 negative form, to be used to negate \fB\-Werror\fR for specific
2740 warnings, for example \fB\-Wno\-error=switch\fR makes
2741 \&\fB\-Wswitch\fR warnings not be errors, even when \fB\-Werror\fR
2742 is in effect.
2743 .Sp
2744 The warning message for each controllable warning includes the
2745 option that controls the warning.  That option can then be used with
2746 \&\fB\-Werror=\fR and \fB\-Wno\-error=\fR as described above.
2747 (Printing of the option in the warning message can be disabled using the
2748 \&\fB\-fno\-diagnostics\-show\-option\fR flag.)
2749 .Sp
2750 Note that specifying \fB\-Werror=\fR\fIfoo\fR automatically implies
2751 \&\fB\-W\fR\fIfoo\fR.  However, \fB\-Wno\-error=\fR\fIfoo\fR does not
2752 imply anything.
2753 .IP "\fB\-Wfatal\-errors\fR" 4
2754 .IX Item "-Wfatal-errors"
2755 This option causes the compiler to abort compilation on the first error
2756 occurred rather than trying to keep going and printing further error
2757 messages.
2758 .PP
2759 You can request many specific warnings with options beginning
2760 \&\fB\-W\fR, for example \fB\-Wimplicit\fR to request warnings on
2761 implicit declarations.  Each of these specific warning options also
2762 has a negative form beginning \fB\-Wno\-\fR to turn off warnings; for
2763 example, \fB\-Wno\-implicit\fR.  This manual lists only one of the
2764 two forms, whichever is not the default.  For further,
2765 language-specific options also refer to \fB\*(C+ Dialect Options\fR and
2766 \&\fBObjective-C and Objective\-\*(C+ Dialect Options\fR.
2767 .PP
2768 When an unrecognized warning option is requested (e.g.,
2769 \&\fB\-Wunknown\-warning\fR), \s-1GCC\s0 will emit a diagnostic stating
2770 that the option is not recognized.  However, if the \fB\-Wno\-\fR form
2771 is used, the behavior is slightly different: No diagnostic will be
2772 produced for \fB\-Wno\-unknown\-warning\fR unless other diagnostics
2773 are being produced.  This allows the use of new \fB\-Wno\-\fR options
2774 with old compilers, but if something goes wrong, the compiler will
2775 warn that an unrecognized option was used.
2776 .IP "\fB\-pedantic\fR" 4
2777 .IX Item "-pedantic"
2778 Issue all the warnings demanded by strict \s-1ISO\s0 C and \s-1ISO\s0 \*(C+;
2779 reject all programs that use forbidden extensions, and some other
2780 programs that do not follow \s-1ISO\s0 C and \s-1ISO\s0 \*(C+.  For \s-1ISO\s0 C, follows the
2781 version of the \s-1ISO\s0 C standard specified by any \fB\-std\fR option used.
2782 .Sp
2783 Valid \s-1ISO\s0 C and \s-1ISO\s0 \*(C+ programs should compile properly with or without
2784 this option (though a rare few will require \fB\-ansi\fR or a
2785 \&\fB\-std\fR option specifying the required version of \s-1ISO\s0 C).  However,
2786 without this option, certain \s-1GNU\s0 extensions and traditional C and \*(C+
2787 features are supported as well.  With this option, they are rejected.
2788 .Sp
2789 \&\fB\-pedantic\fR does not cause warning messages for use of the
2790 alternate keywords whose names begin and end with \fB_\|_\fR.  Pedantic
2791 warnings are also disabled in the expression that follows
2792 \&\f(CW\*(C`_\|_extension_\|_\*(C'\fR.  However, only system header files should use
2793 these escape routes; application programs should avoid them.
2794 .Sp
2795 Some users try to use \fB\-pedantic\fR to check programs for strict \s-1ISO\s0
2796 C conformance.  They soon find that it does not do quite what they want:
2797 it finds some non-ISO practices, but not all\-\-\-only those for which
2798 \&\s-1ISO\s0 C \fIrequires\fR a diagnostic, and some others for which
2799 diagnostics have been added.
2800 .Sp
2801 A feature to report any failure to conform to \s-1ISO\s0 C might be useful in
2802 some instances, but would require considerable additional work and would
2803 be quite different from \fB\-pedantic\fR.  We don't have plans to
2804 support such a feature in the near future.
2805 .Sp
2806 Where the standard specified with \fB\-std\fR represents a \s-1GNU\s0
2807 extended dialect of C, such as \fBgnu90\fR or \fBgnu99\fR, there is a
2808 corresponding \fIbase standard\fR, the version of \s-1ISO\s0 C on which the \s-1GNU\s0
2809 extended dialect is based.  Warnings from \fB\-pedantic\fR are given
2810 where they are required by the base standard.  (It would not make sense
2811 for such warnings to be given only for features not in the specified \s-1GNU\s0
2812 C dialect, since by definition the \s-1GNU\s0 dialects of C include all
2813 features the compiler supports with the given option, and there would be
2814 nothing to warn about.)
2815 .IP "\fB\-pedantic\-errors\fR" 4
2816 .IX Item "-pedantic-errors"
2817 Like \fB\-pedantic\fR, except that errors are produced rather than
2818 warnings.
2819 .IP "\fB\-Wall\fR" 4
2820 .IX Item "-Wall"
2821 This enables all the warnings about constructions that some users
2822 consider questionable, and that are easy to avoid (or modify to
2823 prevent the warning), even in conjunction with macros.  This also
2824 enables some language-specific warnings described in \fB\*(C+ Dialect
2825 Options\fR and \fBObjective-C and Objective\-\*(C+ Dialect Options\fR.
2826 .Sp
2827 \&\fB\-Wall\fR turns on the following warning flags:
2828 .Sp
2829 \&\fB\-Waddress   
2830 \&\-Warray\-bounds\fR (only with\fB \fR\fB\-O2\fR)  
2831 \&\fB\-Wc++11\-compat  
2832 \&\-Wchar\-subscripts  
2833 \&\-Wenum\-compare\fR (in C/Objc; this is on by default in \*(C+) 
2834 \&\fB\-Wimplicit\-int\fR (C and Objective-C only) 
2835 \&\fB\-Wimplicit\-function\-declaration\fR (C and Objective-C only) 
2836 \&\fB\-Wcomment  
2837 \&\-Wformat   
2838 \&\-Wmain\fR (only for C/ObjC and unless\fB \fR\fB\-ffreestanding\fR)  
2839 \&\fB\-Wmaybe\-uninitialized 
2840 \&\-Wmissing\-braces  
2841 \&\-Wnonnull  
2842 \&\-Wparentheses  
2843 \&\-Wpointer\-sign  
2844 \&\-Wreorder   
2845 \&\-Wreturn\-type  
2846 \&\-Wsequence\-point  
2847 \&\-Wsign\-compare\fR (only in \*(C+)  
2848 \&\fB\-Wstrict\-aliasing  
2849 \&\-Wstrict\-overflow=1  
2850 \&\-Wswitch  
2851 \&\-Wtrigraphs  
2852 \&\-Wuninitialized  
2853 \&\-Wunknown\-pragmas  
2854 \&\-Wunused\-function  
2855 \&\-Wunused\-label     
2856 \&\-Wunused\-value     
2857 \&\-Wunused\-variable  
2858 \&\-Wvolatile\-register\-var\fR
2859 .Sp
2860 Note that some warning flags are not implied by \fB\-Wall\fR.  Some of
2861 them warn about constructions that users generally do not consider
2862 questionable, but which occasionally you might wish to check for;
2863 others warn about constructions that are necessary or hard to avoid in
2864 some cases, and there is no simple way to modify the code to suppress
2865 the warning. Some of them are enabled by \fB\-Wextra\fR but many of
2866 them must be enabled individually.
2867 .IP "\fB\-Wextra\fR" 4
2868 .IX Item "-Wextra"
2869 This enables some extra warning flags that are not enabled by
2870 \&\fB\-Wall\fR. (This option used to be called \fB\-W\fR.  The older
2871 name is still supported, but the newer name is more descriptive.)
2872 .Sp
2873 \&\fB\-Wclobbered  
2874 \&\-Wempty\-body  
2875 \&\-Wignored\-qualifiers 
2876 \&\-Wmissing\-field\-initializers  
2877 \&\-Wmissing\-parameter\-type\fR (C only)  
2878 \&\fB\-Wold\-style\-declaration\fR (C only)  
2879 \&\fB\-Woverride\-init  
2880 \&\-Wsign\-compare  
2881 \&\-Wtype\-limits  
2882 \&\-Wuninitialized  
2883 \&\-Wunused\-parameter\fR (only with\fB \fR\fB\-Wunused\fR\fB \fRor\fB \fR\fB\-Wall\fR) 
2884 \&\fB\-Wunused\-but\-set\-parameter\fR (only with\fB \fR\fB\-Wunused\fR\fB \fRor\fB \fR\fB\-Wall\fR)  \fB \fR
2885 .Sp
2886 The option \fB\-Wextra\fR also prints warning messages for the
2887 following cases:
2888 .RS 4
2889 .IP "\(bu" 4
2890 A pointer is compared against integer zero with \fB<\fR, \fB<=\fR,
2891 \&\fB>\fR, or \fB>=\fR.
2892 .IP "\(bu" 4
2893 (\*(C+ only) An enumerator and a non-enumerator both appear in a
2894 conditional expression.
2895 .IP "\(bu" 4
2896 (\*(C+ only) Ambiguous virtual bases.
2897 .IP "\(bu" 4
2898 (\*(C+ only) Subscripting an array that has been declared \fBregister\fR.
2899 .IP "\(bu" 4
2900 (\*(C+ only) Taking the address of a variable that has been declared
2901 \&\fBregister\fR.
2902 .IP "\(bu" 4
2903 (\*(C+ only) A base class is not initialized in a derived class' copy
2904 constructor.
2905 .RE
2906 .RS 4
2907 .RE
2908 .IP "\fB\-Wchar\-subscripts\fR" 4
2909 .IX Item "-Wchar-subscripts"
2910 Warn if an array subscript has type \f(CW\*(C`char\*(C'\fR.  This is a common cause
2911 of error, as programmers often forget that this type is signed on some
2912 machines.
2913 This warning is enabled by \fB\-Wall\fR.
2914 .IP "\fB\-Wcomment\fR" 4
2915 .IX Item "-Wcomment"
2916 Warn whenever a comment-start sequence \fB/*\fR appears in a \fB/*\fR
2917 comment, or whenever a Backslash-Newline appears in a \fB//\fR comment.
2918 This warning is enabled by \fB\-Wall\fR.
2919 .IP "\fB\-Wno\-coverage\-mismatch\fR" 4
2920 .IX Item "-Wno-coverage-mismatch"
2921 Warn if feedback profiles do not match when using the
2922 \&\fB\-fprofile\-use\fR option.
2923 If a source file was changed between \fB\-fprofile\-gen\fR and
2924 \&\fB\-fprofile\-use\fR, the files with the profile feedback can fail
2925 to match the source file and \s-1GCC\s0 cannot use the profile feedback
2926 information.  By default, this warning is enabled and is treated as an
2927 error.  \fB\-Wno\-coverage\-mismatch\fR can be used to disable the
2928 warning or \fB\-Wno\-error=coverage\-mismatch\fR can be used to
2929 disable the error.  Disabling the error for this warning can result in
2930 poorly optimized code and is useful only in the
2931 case of very minor changes such as bug fixes to an existing code-base.
2932 Completely disabling the warning is not recommended.
2933 .IP "\fB\-Wno\-cpp\fR" 4
2934 .IX Item "-Wno-cpp"
2935 (C, Objective-C, \*(C+, Objective\-\*(C+ and Fortran only)
2936 .Sp
2937 Suppress warning messages emitted by \f(CW\*(C`#warning\*(C'\fR directives.
2938 .IP "\fB\-Wdouble\-promotion\fR (C, \*(C+, Objective-C and Objective\-\*(C+ only)" 4
2939 .IX Item "-Wdouble-promotion (C, , Objective-C and Objective- only)"
2940 Give a warning when a value of type \f(CW\*(C`float\*(C'\fR is implicitly
2941 promoted to \f(CW\*(C`double\*(C'\fR.  CPUs with a 32\-bit \*(L"single-precision\*(R"
2942 floating-point unit implement \f(CW\*(C`float\*(C'\fR in hardware, but emulate
2943 \&\f(CW\*(C`double\*(C'\fR in software.  On such a machine, doing computations
2944 using \f(CW\*(C`double\*(C'\fR values is much more expensive because of the
2945 overhead required for software emulation.
2946 .Sp
2947 It is easy to accidentally do computations with \f(CW\*(C`double\*(C'\fR because
2948 floating-point literals are implicitly of type \f(CW\*(C`double\*(C'\fR.  For
2949 example, in:
2950 .Sp
2951 .Vb 4
2952 \&        float area(float radius)
2953 \&        {
2954 \&           return 3.14159 * radius * radius;
2955 \&        }
2956 .Ve
2957 .Sp
2958 the compiler will perform the entire computation with \f(CW\*(C`double\*(C'\fR
2959 because the floating-point literal is a \f(CW\*(C`double\*(C'\fR.
2960 .IP "\fB\-Wformat\fR" 4
2961 .IX Item "-Wformat"
2962 Check calls to \f(CW\*(C`printf\*(C'\fR and \f(CW\*(C`scanf\*(C'\fR, etc., to make sure that
2963 the arguments supplied have types appropriate to the format string
2964 specified, and that the conversions specified in the format string make
2965 sense.  This includes standard functions, and others specified by format
2966 attributes, in the \f(CW\*(C`printf\*(C'\fR,
2967 \&\f(CW\*(C`scanf\*(C'\fR, \f(CW\*(C`strftime\*(C'\fR and \f(CW\*(C`strfmon\*(C'\fR (an X/Open extension,
2968 not in the C standard) families (or other target-specific families).
2969 Which functions are checked without format attributes having been
2970 specified depends on the standard version selected, and such checks of
2971 functions without the attribute specified are disabled by
2972 \&\fB\-ffreestanding\fR or \fB\-fno\-builtin\fR.
2973 .Sp
2974 The formats are checked against the format features supported by \s-1GNU\s0
2975 libc version 2.2.  These include all \s-1ISO\s0 C90 and C99 features, as well
2976 as features from the Single Unix Specification and some \s-1BSD\s0 and \s-1GNU\s0
2977 extensions.  Other library implementations may not support all these
2978 features; \s-1GCC\s0 does not support warning about features that go beyond a
2979 particular library's limitations.  However, if \fB\-pedantic\fR is used
2980 with \fB\-Wformat\fR, warnings will be given about format features not
2981 in the selected standard version (but not for \f(CW\*(C`strfmon\*(C'\fR formats,
2982 since those are not in any version of the C standard).
2983 .Sp
2984 Since \fB\-Wformat\fR also checks for null format arguments for
2985 several functions, \fB\-Wformat\fR also implies \fB\-Wnonnull\fR.
2986 .Sp
2987 \&\fB\-Wformat\fR is included in \fB\-Wall\fR.  For more control over some
2988 aspects of format checking, the options \fB\-Wformat\-y2k\fR,
2989 \&\fB\-Wno\-format\-extra\-args\fR, \fB\-Wno\-format\-zero\-length\fR,
2990 \&\fB\-Wformat\-nonliteral\fR, \fB\-Wformat\-security\fR, and
2991 \&\fB\-Wformat=2\fR are available, but are not included in \fB\-Wall\fR.
2992 .IP "\fB\-Wformat\-y2k\fR" 4
2993 .IX Item "-Wformat-y2k"
2994 If \fB\-Wformat\fR is specified, also warn about \f(CW\*(C`strftime\*(C'\fR
2995 formats that may yield only a two-digit year.
2996 .IP "\fB\-Wno\-format\-contains\-nul\fR" 4
2997 .IX Item "-Wno-format-contains-nul"
2998 If \fB\-Wformat\fR is specified, do not warn about format strings that
2999 contain \s-1NUL\s0 bytes.
3000 .IP "\fB\-Wno\-format\-extra\-args\fR" 4
3001 .IX Item "-Wno-format-extra-args"
3002 If \fB\-Wformat\fR is specified, do not warn about excess arguments to a
3003 \&\f(CW\*(C`printf\*(C'\fR or \f(CW\*(C`scanf\*(C'\fR format function.  The C standard specifies
3004 that such arguments are ignored.
3005 .Sp
3006 Where the unused arguments lie between used arguments that are
3007 specified with \fB$\fR operand number specifications, normally
3008 warnings are still given, since the implementation could not know what
3009 type to pass to \f(CW\*(C`va_arg\*(C'\fR to skip the unused arguments.  However,
3010 in the case of \f(CW\*(C`scanf\*(C'\fR formats, this option will suppress the
3011 warning if the unused arguments are all pointers, since the Single
3012 Unix Specification says that such unused arguments are allowed.
3013 .IP "\fB\-Wno\-format\-zero\-length\fR" 4
3014 .IX Item "-Wno-format-zero-length"
3015 If \fB\-Wformat\fR is specified, do not warn about zero-length formats.
3016 The C standard specifies that zero-length formats are allowed.
3017 .IP "\fB\-Wformat\-nonliteral\fR" 4
3018 .IX Item "-Wformat-nonliteral"
3019 If \fB\-Wformat\fR is specified, also warn if the format string is not a
3020 string literal and so cannot be checked, unless the format function
3021 takes its format arguments as a \f(CW\*(C`va_list\*(C'\fR.
3022 .IP "\fB\-Wformat\-security\fR" 4
3023 .IX Item "-Wformat-security"
3024 If \fB\-Wformat\fR is specified, also warn about uses of format
3025 functions that represent possible security problems.  At present, this
3026 warns about calls to \f(CW\*(C`printf\*(C'\fR and \f(CW\*(C`scanf\*(C'\fR functions where the
3027 format string is not a string literal and there are no format arguments,
3028 as in \f(CW\*(C`printf (foo);\*(C'\fR.  This may be a security hole if the format
3029 string came from untrusted input and contains \fB\f(CB%n\fB\fR.  (This is
3030 currently a subset of what \fB\-Wformat\-nonliteral\fR warns about, but
3031 in future warnings may be added to \fB\-Wformat\-security\fR that are not
3032 included in \fB\-Wformat\-nonliteral\fR.)
3033 .IP "\fB\-Wformat=2\fR" 4
3034 .IX Item "-Wformat=2"
3035 Enable \fB\-Wformat\fR plus format checks not included in
3036 \&\fB\-Wformat\fR.  Currently equivalent to \fB\-Wformat
3037 \&\-Wformat\-nonliteral \-Wformat\-security \-Wformat\-y2k\fR.
3038 .IP "\fB\-Wnonnull\fR" 4
3039 .IX Item "-Wnonnull"
3040 Warn about passing a null pointer for arguments marked as
3041 requiring a non-null value by the \f(CW\*(C`nonnull\*(C'\fR function attribute.
3042 .Sp
3043 \&\fB\-Wnonnull\fR is included in \fB\-Wall\fR and \fB\-Wformat\fR.  It
3044 can be disabled with the \fB\-Wno\-nonnull\fR option.
3045 .IP "\fB\-Winit\-self\fR (C, \*(C+, Objective-C and Objective\-\*(C+ only)" 4
3046 .IX Item "-Winit-self (C, , Objective-C and Objective- only)"
3047 Warn about uninitialized variables that are initialized with themselves.
3048 Note this option can only be used with the \fB\-Wuninitialized\fR option.
3049 .Sp
3050 For example, \s-1GCC\s0 will warn about \f(CW\*(C`i\*(C'\fR being uninitialized in the
3051 following snippet only when \fB\-Winit\-self\fR has been specified:
3052 .Sp
3053 .Vb 5
3054 \&        int f()
3055 \&        {
3056 \&          int i = i;
3057 \&          return i;
3058 \&        }
3059 .Ve
3060 .IP "\fB\-Wimplicit\-int\fR (C and Objective-C only)" 4
3061 .IX Item "-Wimplicit-int (C and Objective-C only)"
3062 Warn when a declaration does not specify a type.
3063 This warning is enabled by \fB\-Wall\fR.
3064 .IP "\fB\-Wimplicit\-function\-declaration\fR (C and Objective-C only)" 4
3065 .IX Item "-Wimplicit-function-declaration (C and Objective-C only)"
3066 Give a warning whenever a function is used before being declared. In
3067 C99 mode (\fB\-std=c99\fR or \fB\-std=gnu99\fR), this warning is
3068 enabled by default and it is made into an error by
3069 \&\fB\-pedantic\-errors\fR. This warning is also enabled by
3070 \&\fB\-Wall\fR.
3071 .IP "\fB\-Wimplicit\fR (C and Objective-C only)" 4
3072 .IX Item "-Wimplicit (C and Objective-C only)"
3073 Same as \fB\-Wimplicit\-int\fR and \fB\-Wimplicit\-function\-declaration\fR.
3074 This warning is enabled by \fB\-Wall\fR.
3075 .IP "\fB\-Wignored\-qualifiers\fR (C and \*(C+ only)" 4
3076 .IX Item "-Wignored-qualifiers (C and  only)"
3077 Warn if the return type of a function has a type qualifier
3078 such as \f(CW\*(C`const\*(C'\fR.  For \s-1ISO\s0 C such a type qualifier has no effect,
3079 since the value returned by a function is not an lvalue.
3080 For \*(C+, the warning is only emitted for scalar types or \f(CW\*(C`void\*(C'\fR.
3081 \&\s-1ISO\s0 C prohibits qualified \f(CW\*(C`void\*(C'\fR return types on function
3082 definitions, so such return types always receive a warning
3083 even without this option.
3084 .Sp
3085 This warning is also enabled by \fB\-Wextra\fR.
3086 .IP "\fB\-Wmain\fR" 4
3087 .IX Item "-Wmain"
3088 Warn if the type of \fBmain\fR is suspicious.  \fBmain\fR should be
3089 a function with external linkage, returning int, taking either zero
3090 arguments, two, or three arguments of appropriate types.  This warning
3091 is enabled by default in \*(C+ and is enabled by either \fB\-Wall\fR
3092 or \fB\-pedantic\fR.
3093 .IP "\fB\-Wmissing\-braces\fR" 4
3094 .IX Item "-Wmissing-braces"
3095 Warn if an aggregate or union initializer is not fully bracketed.  In
3096 the following example, the initializer for \fBa\fR is not fully
3097 bracketed, but that for \fBb\fR is fully bracketed.
3098 .Sp
3099 .Vb 2
3100 \&        int a[2][2] = { 0, 1, 2, 3 };
3101 \&        int b[2][2] = { { 0, 1 }, { 2, 3 } };
3102 .Ve
3103 .Sp
3104 This warning is enabled by \fB\-Wall\fR.
3105 .IP "\fB\-Wmissing\-include\-dirs\fR (C, \*(C+, Objective-C and Objective\-\*(C+ only)" 4
3106 .IX Item "-Wmissing-include-dirs (C, , Objective-C and Objective- only)"
3107 Warn if a user-supplied include directory does not exist.
3108 .IP "\fB\-Wparentheses\fR" 4
3109 .IX Item "-Wparentheses"
3110 Warn if parentheses are omitted in certain contexts, such
3111 as when there is an assignment in a context where a truth value
3112 is expected, or when operators are nested whose precedence people
3113 often get confused about.
3114 .Sp
3115 Also warn if a comparison like \fBx<=y<=z\fR appears; this is
3116 equivalent to \fB(x<=y ? 1 : 0) <= z\fR, which is a different
3117 interpretation from that of ordinary mathematical notation.
3118 .Sp
3119 Also warn about constructions where there may be confusion to which
3120 \&\f(CW\*(C`if\*(C'\fR statement an \f(CW\*(C`else\*(C'\fR branch belongs.  Here is an example of
3121 such a case:
3122 .Sp
3123 .Vb 7
3124 \&        {
3125 \&          if (a)
3126 \&            if (b)
3127 \&              foo ();
3128 \&          else
3129 \&            bar ();
3130 \&        }
3131 .Ve
3132 .Sp
3133 In C/\*(C+, every \f(CW\*(C`else\*(C'\fR branch belongs to the innermost possible
3134 \&\f(CW\*(C`if\*(C'\fR statement, which in this example is \f(CW\*(C`if (b)\*(C'\fR.  This is
3135 often not what the programmer expected, as illustrated in the above
3136 example by indentation the programmer chose.  When there is the
3137 potential for this confusion, \s-1GCC\s0 will issue a warning when this flag
3138 is specified.  To eliminate the warning, add explicit braces around
3139 the innermost \f(CW\*(C`if\*(C'\fR statement so there is no way the \f(CW\*(C`else\*(C'\fR
3140 could belong to the enclosing \f(CW\*(C`if\*(C'\fR.  The resulting code would
3141 look like this:
3142 .Sp
3143 .Vb 9
3144 \&        {
3145 \&          if (a)
3146 \&            {
3147 \&              if (b)
3148 \&                foo ();
3149 \&              else
3150 \&                bar ();
3151 \&            }
3152 \&        }
3153 .Ve
3154 .Sp
3155 Also warn for dangerous uses of the
3156 ?: with omitted middle operand \s-1GNU\s0 extension. When the condition
3157 in the ?: operator is a boolean expression the omitted value will
3158 be always 1. Often the user expects it to be a value computed
3159 inside the conditional expression instead.
3160 .Sp
3161 This warning is enabled by \fB\-Wall\fR.
3162 .IP "\fB\-Wsequence\-point\fR" 4
3163 .IX Item "-Wsequence-point"
3164 Warn about code that may have undefined semantics because of violations
3165 of sequence point rules in the C and \*(C+ standards.
3166 .Sp
3167 The C and \*(C+ standards defines the order in which expressions in a C/\*(C+
3168 program are evaluated in terms of \fIsequence points\fR, which represent
3169 a partial ordering between the execution of parts of the program: those
3170 executed before the sequence point, and those executed after it.  These
3171 occur after the evaluation of a full expression (one which is not part
3172 of a larger expression), after the evaluation of the first operand of a
3173 \&\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
3174 function is called (but after the evaluation of its arguments and the
3175 expression denoting the called function), and in certain other places.
3176 Other than as expressed by the sequence point rules, the order of
3177 evaluation of subexpressions of an expression is not specified.  All
3178 these rules describe only a partial order rather than a total order,
3179 since, for example, if two functions are called within one expression
3180 with no sequence point between them, the order in which the functions
3181 are called is not specified.  However, the standards committee have
3182 ruled that function calls do not overlap.
3183 .Sp
3184 It is not specified when between sequence points modifications to the
3185 values of objects take effect.  Programs whose behavior depends on this
3186 have undefined behavior; the C and \*(C+ standards specify that \*(L"Between
3187 the previous and next sequence point an object shall have its stored
3188 value modified at most once by the evaluation of an expression.
3189 Furthermore, the prior value shall be read only to determine the value
3190 to be stored.\*(R".  If a program breaks these rules, the results on any
3191 particular implementation are entirely unpredictable.
3192 .Sp
3193 Examples of code with undefined behavior are \f(CW\*(C`a = a++;\*(C'\fR, \f(CW\*(C`a[n]
3194 = b[n++]\*(C'\fR and \f(CW\*(C`a[i++] = i;\*(C'\fR.  Some more complicated cases are not
3195 diagnosed by this option, and it may give an occasional false positive
3196 result, but in general it has been found fairly effective at detecting
3197 this sort of problem in programs.
3198 .Sp
3199 The standard is worded confusingly, therefore there is some debate
3200 over the precise meaning of the sequence point rules in subtle cases.
3201 Links to discussions of the problem, including proposed formal
3202 definitions, may be found on the \s-1GCC\s0 readings page, at
3203 <\fBhttp://gcc.gnu.org/readings.html\fR>.
3204 .Sp
3205 This warning is enabled by \fB\-Wall\fR for C and \*(C+.
3206 .IP "\fB\-Wreturn\-type\fR" 4
3207 .IX Item "-Wreturn-type"
3208 Warn whenever a function is defined with a return-type that defaults
3209 to \f(CW\*(C`int\*(C'\fR.  Also warn about any \f(CW\*(C`return\*(C'\fR statement with no
3210 return-value in a function whose return-type is not \f(CW\*(C`void\*(C'\fR
3211 (falling off the end of the function body is considered returning
3212 without a value), and about a \f(CW\*(C`return\*(C'\fR statement with an
3213 expression in a function whose return-type is \f(CW\*(C`void\*(C'\fR.
3214 .Sp
3215 For \*(C+, a function without return type always produces a diagnostic
3216 message, even when \fB\-Wno\-return\-type\fR is specified.  The only
3217 exceptions are \fBmain\fR and functions defined in system headers.
3218 .Sp
3219 This warning is enabled by \fB\-Wall\fR.
3220 .IP "\fB\-Wswitch\fR" 4
3221 .IX Item "-Wswitch"
3222 Warn whenever a \f(CW\*(C`switch\*(C'\fR statement has an index of enumerated type
3223 and lacks a \f(CW\*(C`case\*(C'\fR for one or more of the named codes of that
3224 enumeration.  (The presence of a \f(CW\*(C`default\*(C'\fR label prevents this
3225 warning.)  \f(CW\*(C`case\*(C'\fR labels outside the enumeration range also
3226 provoke warnings when this option is used (even if there is a
3227 \&\f(CW\*(C`default\*(C'\fR label).
3228 This warning is enabled by \fB\-Wall\fR.
3229 .IP "\fB\-Wswitch\-default\fR" 4
3230 .IX Item "-Wswitch-default"
3231 Warn whenever a \f(CW\*(C`switch\*(C'\fR statement does not have a \f(CW\*(C`default\*(C'\fR
3232 case.
3233 .IP "\fB\-Wswitch\-enum\fR" 4
3234 .IX Item "-Wswitch-enum"
3235 Warn whenever a \f(CW\*(C`switch\*(C'\fR statement has an index of enumerated type
3236 and lacks a \f(CW\*(C`case\*(C'\fR for one or more of the named codes of that
3237 enumeration.  \f(CW\*(C`case\*(C'\fR labels outside the enumeration range also
3238 provoke warnings when this option is used.  The only difference
3239 between \fB\-Wswitch\fR and this option is that this option gives a
3240 warning about an omitted enumeration code even if there is a
3241 \&\f(CW\*(C`default\*(C'\fR label.
3242 .IP "\fB\-Wsync\-nand\fR (C and \*(C+ only)" 4
3243 .IX Item "-Wsync-nand (C and  only)"
3244 Warn when \f(CW\*(C`_\|_sync_fetch_and_nand\*(C'\fR and \f(CW\*(C`_\|_sync_nand_and_fetch\*(C'\fR
3245 built-in functions are used.  These functions changed semantics in \s-1GCC\s0 4.4.
3246 .IP "\fB\-Wtrigraphs\fR" 4
3247 .IX Item "-Wtrigraphs"
3248 Warn if any trigraphs are encountered that might change the meaning of
3249 the program (trigraphs within comments are not warned about).
3250 This warning is enabled by \fB\-Wall\fR.
3251 .IP "\fB\-Wunused\-but\-set\-parameter\fR" 4
3252 .IX Item "-Wunused-but-set-parameter"
3253 Warn whenever a function parameter is assigned to, but otherwise unused
3254 (aside from its declaration).
3255 .Sp
3256 To suppress this warning use the \fBunused\fR attribute.
3257 .Sp
3258 This warning is also enabled by \fB\-Wunused\fR together with
3259 \&\fB\-Wextra\fR.
3260 .IP "\fB\-Wunused\-but\-set\-variable\fR" 4
3261 .IX Item "-Wunused-but-set-variable"
3262 Warn whenever a local variable is assigned to, but otherwise unused
3263 (aside from its declaration).
3264 This warning is enabled by \fB\-Wall\fR.
3265 .Sp
3266 To suppress this warning use the \fBunused\fR attribute.
3267 .Sp
3268 This warning is also enabled by \fB\-Wunused\fR, which is enabled
3269 by \fB\-Wall\fR.
3270 .IP "\fB\-Wunused\-function\fR" 4
3271 .IX Item "-Wunused-function"
3272 Warn whenever a static function is declared but not defined or a
3273 non-inline static function is unused.
3274 This warning is enabled by \fB\-Wall\fR.
3275 .IP "\fB\-Wunused\-label\fR" 4
3276 .IX Item "-Wunused-label"
3277 Warn whenever a label is declared but not used.
3278 This warning is enabled by \fB\-Wall\fR.
3279 .Sp
3280 To suppress this warning use the \fBunused\fR attribute.
3281 .IP "\fB\-Wunused\-local\-typedefs\fR (C, Objective-C, \*(C+ and Objective\-\*(C+ only)" 4
3282 .IX Item "-Wunused-local-typedefs (C, Objective-C,  and Objective- only)"
3283 Warn when a typedef locally defined in a function is not used.
3284 .IP "\fB\-Wunused\-parameter\fR" 4
3285 .IX Item "-Wunused-parameter"
3286 Warn whenever a function parameter is unused aside from its declaration.
3287 .Sp
3288 To suppress this warning use the \fBunused\fR attribute.
3289 .IP "\fB\-Wno\-unused\-result\fR" 4
3290 .IX Item "-Wno-unused-result"
3291 Do not warn if a caller of a function marked with attribute
3292 \&\f(CW\*(C`warn_unused_result\*(C'\fR does not use
3293 its return value. The default is \fB\-Wunused\-result\fR.
3294 .IP "\fB\-Wunused\-variable\fR" 4
3295 .IX Item "-Wunused-variable"
3296 Warn whenever a local variable or non-constant static variable is unused
3297 aside from its declaration.
3298 This warning is enabled by \fB\-Wall\fR.
3299 .Sp
3300 To suppress this warning use the \fBunused\fR attribute.
3301 .IP "\fB\-Wunused\-value\fR" 4
3302 .IX Item "-Wunused-value"
3303 Warn whenever a statement computes a result that is explicitly not
3304 used. To suppress this warning cast the unused expression to
3305 \&\fBvoid\fR. This includes an expression-statement or the left-hand
3306 side of a comma expression that contains no side effects. For example,
3307 an expression such as \fBx[i,j]\fR will cause a warning, while
3308 \&\fBx[(void)i,j]\fR will not.
3309 .Sp
3310 This warning is enabled by \fB\-Wall\fR.
3311 .IP "\fB\-Wunused\fR" 4
3312 .IX Item "-Wunused"
3313 All the above \fB\-Wunused\fR options combined.
3314 .Sp
3315 In order to get a warning about an unused function parameter, you must
3316 either specify \fB\-Wextra \-Wunused\fR (note that \fB\-Wall\fR implies
3317 \&\fB\-Wunused\fR), or separately specify \fB\-Wunused\-parameter\fR.
3318 .IP "\fB\-Wuninitialized\fR" 4
3319 .IX Item "-Wuninitialized"
3320 Warn if an automatic variable is used without first being initialized
3321 or if a variable may be clobbered by a \f(CW\*(C`setjmp\*(C'\fR call. In \*(C+,
3322 warn if a non-static reference or non-static \fBconst\fR member
3323 appears in a class without constructors.
3324 .Sp
3325 If you want to warn about code that uses the uninitialized value of the
3326 variable in its own initializer, use the \fB\-Winit\-self\fR option.
3327 .Sp
3328 These warnings occur for individual uninitialized or clobbered
3329 elements of structure, union or array variables as well as for
3330 variables that are uninitialized or clobbered as a whole.  They do
3331 not occur for variables or elements declared \f(CW\*(C`volatile\*(C'\fR.  Because
3332 these warnings depend on optimization, the exact variables or elements
3333 for which there are warnings will depend on the precise optimization
3334 options and version of \s-1GCC\s0 used.
3335 .Sp
3336 Note that there may be no warning about a variable that is used only
3337 to compute a value that itself is never used, because such
3338 computations may be deleted by data flow analysis before the warnings
3339 are printed.
3340 .IP "\fB\-Wmaybe\-uninitialized\fR" 4
3341 .IX Item "-Wmaybe-uninitialized"
3342 For an automatic variable, if there exists a path from the function
3343 entry to a use of the variable that is initialized, but there exist
3344 some other paths the variable is not initialized, the compiler will
3345 emit a warning if it can not prove the uninitialized paths do not
3346 happen at run time. These warnings are made optional because \s-1GCC\s0 is
3347 not smart enough to see all the reasons why the code might be correct
3348 despite appearing to have an error.  Here is one example of how
3349 this can happen:
3350 .Sp
3351 .Vb 12
3352 \&        {
3353 \&          int x;
3354 \&          switch (y)
3355 \&            {
3356 \&            case 1: x = 1;
3357 \&              break;
3358 \&            case 2: x = 4;
3359 \&              break;
3360 \&            case 3: x = 5;
3361 \&            }
3362 \&          foo (x);
3363 \&        }
3364 .Ve
3365 .Sp
3366 If the value of \f(CW\*(C`y\*(C'\fR is always 1, 2 or 3, then \f(CW\*(C`x\*(C'\fR is
3367 always initialized, but \s-1GCC\s0 doesn't know this. To suppress the
3368 warning, the user needs to provide a default case with \fIassert\fR\|(0) or
3369 similar code.
3370 .Sp
3371 This option also warns when a non-volatile automatic variable might be
3372 changed by a call to \f(CW\*(C`longjmp\*(C'\fR.  These warnings as well are possible
3373 only in optimizing compilation.
3374 .Sp
3375 The compiler sees only the calls to \f(CW\*(C`setjmp\*(C'\fR.  It cannot know
3376 where \f(CW\*(C`longjmp\*(C'\fR will be called; in fact, a signal handler could
3377 call it at any point in the code.  As a result, you may get a warning
3378 even when there is in fact no problem because \f(CW\*(C`longjmp\*(C'\fR cannot
3379 in fact be called at the place that would cause a problem.
3380 .Sp
3381 Some spurious warnings can be avoided if you declare all the functions
3382 you use that never return as \f(CW\*(C`noreturn\*(C'\fR.
3383 .Sp
3384 This warning is enabled by \fB\-Wall\fR or \fB\-Wextra\fR.
3385 .IP "\fB\-Wunknown\-pragmas\fR" 4
3386 .IX Item "-Wunknown-pragmas"
3387 Warn when a \f(CW\*(C`#pragma\*(C'\fR directive is encountered that is not understood by 
3388 \&\s-1GCC\s0.  If this command-line option is used, warnings will even be issued
3389 for unknown pragmas in system header files.  This is not the case if
3390 the warnings were only enabled by the \fB\-Wall\fR command-line option.
3391 .IP "\fB\-Wno\-pragmas\fR" 4
3392 .IX Item "-Wno-pragmas"
3393 Do not warn about misuses of pragmas, such as incorrect parameters,
3394 invalid syntax, or conflicts between pragmas.  See also
3395 \&\fB\-Wunknown\-pragmas\fR.
3396 .IP "\fB\-Wstrict\-aliasing\fR" 4
3397 .IX Item "-Wstrict-aliasing"
3398 This option is only active when \fB\-fstrict\-aliasing\fR is active.
3399 It warns about code that might break the strict aliasing rules that the
3400 compiler is using for optimization.  The warning does not catch all
3401 cases, but does attempt to catch the more common pitfalls.  It is
3402 included in \fB\-Wall\fR.
3403 It is equivalent to \fB\-Wstrict\-aliasing=3\fR
3404 .IP "\fB\-Wstrict\-aliasing=n\fR" 4
3405 .IX Item "-Wstrict-aliasing=n"
3406 This option is only active when \fB\-fstrict\-aliasing\fR is active.
3407 It warns about code that might break the strict aliasing rules that the
3408 compiler is using for optimization.
3409 Higher levels correspond to higher accuracy (fewer false positives).
3410 Higher levels also correspond to more effort, similar to the way \-O works.
3411 \&\fB\-Wstrict\-aliasing\fR is equivalent to \fB\-Wstrict\-aliasing=n\fR,
3412 with n=3.
3413 .Sp
3414 Level 1: Most aggressive, quick, least accurate.
3415 Possibly useful when higher levels
3416 do not warn but \-fstrict\-aliasing still breaks the code, as it has very few
3417 false negatives.  However, it has many false positives.
3418 Warns for all pointer conversions between possibly incompatible types,
3419 even if never dereferenced.  Runs in the front end only.
3420 .Sp
3421 Level 2: Aggressive, quick, not too precise.
3422 May still have many false positives (not as many as level 1 though),
3423 and few false negatives (but possibly more than level 1).
3424 Unlike level 1, it only warns when an address is taken.  Warns about
3425 incomplete types.  Runs in the front end only.
3426 .Sp
3427 Level 3 (default for \fB\-Wstrict\-aliasing\fR):
3428 Should have very few false positives and few false
3429 negatives.  Slightly slower than levels 1 or 2 when optimization is enabled.
3430 Takes care of the common pun+dereference pattern in the front end:
3431 \&\f(CW\*(C`*(int*)&some_float\*(C'\fR.
3432 If optimization is enabled, it also runs in the back end, where it deals
3433 with multiple statement cases using flow-sensitive points-to information.
3434 Only warns when the converted pointer is dereferenced.
3435 Does not warn about incomplete types.
3436 .IP "\fB\-Wstrict\-overflow\fR" 4
3437 .IX Item "-Wstrict-overflow"
3438 .PD 0
3439 .IP "\fB\-Wstrict\-overflow=\fR\fIn\fR" 4
3440 .IX Item "-Wstrict-overflow=n"
3441 .PD
3442 This option is only active when \fB\-fstrict\-overflow\fR is active.
3443 It warns about cases where the compiler optimizes based on the
3444 assumption that signed overflow does not occur.  Note that it does not
3445 warn about all cases where the code might overflow: it only warns
3446 about cases where the compiler implements some optimization.  Thus
3447 this warning depends on the optimization level.
3448 .Sp
3449 An optimization that assumes that signed overflow does not occur is
3450 perfectly safe if the values of the variables involved are such that
3451 overflow never does, in fact, occur.  Therefore this warning can
3452 easily give a false positive: a warning about code that is not
3453 actually a problem.  To help focus on important issues, several
3454 warning levels are defined.  No warnings are issued for the use of
3455 undefined signed overflow when estimating how many iterations a loop
3456 will require, in particular when determining whether a loop will be
3457 executed at all.
3458 .RS 4
3459 .IP "\fB\-Wstrict\-overflow=1\fR" 4
3460 .IX Item "-Wstrict-overflow=1"
3461 Warn about cases that are both questionable and easy to avoid.  For
3462 example: \f(CW\*(C`x + 1 > x\*(C'\fR; with \fB\-fstrict\-overflow\fR, the
3463 compiler will simplify this to \f(CW1\fR.  This level of
3464 \&\fB\-Wstrict\-overflow\fR is enabled by \fB\-Wall\fR; higher levels
3465 are not, and must be explicitly requested.
3466 .IP "\fB\-Wstrict\-overflow=2\fR" 4
3467 .IX Item "-Wstrict-overflow=2"
3468 Also warn about other cases where a comparison is simplified to a
3469 constant.  For example: \f(CW\*(C`abs (x) >= 0\*(C'\fR.  This can only be
3470 simplified when \fB\-fstrict\-overflow\fR is in effect, because
3471 \&\f(CW\*(C`abs (INT_MIN)\*(C'\fR overflows to \f(CW\*(C`INT_MIN\*(C'\fR, which is less than
3472 zero.  \fB\-Wstrict\-overflow\fR (with no level) is the same as
3473 \&\fB\-Wstrict\-overflow=2\fR.
3474 .IP "\fB\-Wstrict\-overflow=3\fR" 4
3475 .IX Item "-Wstrict-overflow=3"
3476 Also warn about other cases where a comparison is simplified.  For
3477 example: \f(CW\*(C`x + 1 > 1\*(C'\fR will be simplified to \f(CW\*(C`x > 0\*(C'\fR.
3478 .IP "\fB\-Wstrict\-overflow=4\fR" 4
3479 .IX Item "-Wstrict-overflow=4"
3480 Also warn about other simplifications not covered by the above cases.
3481 For example: \f(CW\*(C`(x * 10) / 5\*(C'\fR will be simplified to \f(CW\*(C`x * 2\*(C'\fR.
3482 .IP "\fB\-Wstrict\-overflow=5\fR" 4
3483 .IX Item "-Wstrict-overflow=5"
3484 Also warn about cases where the compiler reduces the magnitude of a
3485 constant involved in a comparison.  For example: \f(CW\*(C`x + 2 > y\*(C'\fR will
3486 be simplified to \f(CW\*(C`x + 1 >= y\*(C'\fR.  This is reported only at the
3487 highest warning level because this simplification applies to many
3488 comparisons, so this warning level will give a very large number of
3489 false positives.
3490 .RE
3491 .RS 4
3492 .RE
3493 .IP "\fB\-Wsuggest\-attribute=\fR[\fBpure\fR|\fBconst\fR|\fBnoreturn\fR]" 4
3494 .IX Item "-Wsuggest-attribute=[pure|const|noreturn]"
3495 Warn for cases where adding an attribute may be beneficial. The
3496 attributes currently supported are listed below.
3497 .RS 4
3498 .IP "\fB\-Wsuggest\-attribute=pure\fR" 4
3499 .IX Item "-Wsuggest-attribute=pure"
3500 .PD 0
3501 .IP "\fB\-Wsuggest\-attribute=const\fR" 4
3502 .IX Item "-Wsuggest-attribute=const"
3503 .IP "\fB\-Wsuggest\-attribute=noreturn\fR" 4
3504 .IX Item "-Wsuggest-attribute=noreturn"
3505 .PD
3506 Warn about functions that might be candidates for attributes
3507 \&\f(CW\*(C`pure\*(C'\fR, \f(CW\*(C`const\*(C'\fR or \f(CW\*(C`noreturn\*(C'\fR.  The compiler only warns for
3508 functions visible in other compilation units or (in the case of \f(CW\*(C`pure\*(C'\fR and
3509 \&\f(CW\*(C`const\*(C'\fR) if it cannot prove that the function returns normally. A function
3510 returns normally if it doesn't contain an infinite loop nor returns abnormally
3511 by throwing, calling \f(CW\*(C`abort()\*(C'\fR or trapping.  This analysis requires option
3512 \&\fB\-fipa\-pure\-const\fR, which is enabled by default at \fB\-O\fR and
3513 higher.  Higher optimization levels improve the accuracy of the analysis.
3514 .RE
3515 .RS 4
3516 .RE
3517 .IP "\fB\-Warray\-bounds\fR" 4
3518 .IX Item "-Warray-bounds"
3519 This option is only active when \fB\-ftree\-vrp\fR is active
3520 (default for \fB\-O2\fR and above). It warns about subscripts to arrays
3521 that are always out of bounds. This warning is enabled by \fB\-Wall\fR.
3522 .IP "\fB\-Wno\-div\-by\-zero\fR" 4
3523 .IX Item "-Wno-div-by-zero"
3524 Do not warn about compile-time integer division by zero.  Floating-point
3525 division by zero is not warned about, as it can be a legitimate way of
3526 obtaining infinities and NaNs.
3527 .IP "\fB\-Wsystem\-headers\fR" 4
3528 .IX Item "-Wsystem-headers"
3529 Print warning messages for constructs found in system header files.
3530 Warnings from system headers are normally suppressed, on the assumption
3531 that they usually do not indicate real problems and would only make the
3532 compiler output harder to read.  Using this command-line option tells
3533 \&\s-1GCC\s0 to emit warnings from system headers as if they occurred in user
3534 code.  However, note that using \fB\-Wall\fR in conjunction with this
3535 option will \fInot\fR warn about unknown pragmas in system
3536 headers\-\-\-for that, \fB\-Wunknown\-pragmas\fR must also be used.
3537 .IP "\fB\-Wtrampolines\fR" 4
3538 .IX Item "-Wtrampolines"
3539 .Vb 1
3540 \& Warn about trampolines generated for pointers to nested functions.
3541 \&
3542 \& A trampoline is a small piece of data or code that is created at run
3543 \& time on the stack when the address of a nested function is taken, and
3544 \& is used to call the nested function indirectly.  For some targets, it
3545 \& is made up of data only and thus requires no special treatment.  But,
3546 \& for most targets, it is made up of code and thus requires the stack
3547 \& to be made executable in order for the program to work properly.
3548 .Ve
3549 .IP "\fB\-Wfloat\-equal\fR" 4
3550 .IX Item "-Wfloat-equal"
3551 Warn if floating-point values are used in equality comparisons.
3552 .Sp
3553 The idea behind this is that sometimes it is convenient (for the
3554 programmer) to consider floating-point values as approximations to
3555 infinitely precise real numbers.  If you are doing this, then you need
3556 to compute (by analyzing the code, or in some other way) the maximum or
3557 likely maximum error that the computation introduces, and allow for it
3558 when performing comparisons (and when producing output, but that's a
3559 different problem).  In particular, instead of testing for equality, you
3560 would check to see whether the two values have ranges that overlap; and
3561 this is done with the relational operators, so equality comparisons are
3562 probably mistaken.
3563 .IP "\fB\-Wtraditional\fR (C and Objective-C only)" 4
3564 .IX Item "-Wtraditional (C and Objective-C only)"
3565 Warn about certain constructs that behave differently in traditional and
3566 \&\s-1ISO\s0 C.  Also warn about \s-1ISO\s0 C constructs that have no traditional C
3567 equivalent, and/or problematic constructs that should be avoided.
3568 .RS 4
3569 .IP "\(bu" 4
3570 Macro parameters that appear within string literals in the macro body.
3571 In traditional C macro replacement takes place within string literals,
3572 but does not in \s-1ISO\s0 C.
3573 .IP "\(bu" 4
3574 In traditional C, some preprocessor directives did not exist.
3575 Traditional preprocessors would only consider a line to be a directive
3576 if the \fB#\fR appeared in column 1 on the line.  Therefore
3577 \&\fB\-Wtraditional\fR warns about directives that traditional C
3578 understands but would ignore because the \fB#\fR does not appear as the
3579 first character on the line.  It also suggests you hide directives like
3580 \&\fB#pragma\fR not understood by traditional C by indenting them.  Some
3581 traditional implementations would not recognize \fB#elif\fR, so it
3582 suggests avoiding it altogether.
3583 .IP "\(bu" 4
3584 A function-like macro that appears without arguments.
3585 .IP "\(bu" 4
3586 The unary plus operator.
3587 .IP "\(bu" 4
3588 The \fBU\fR integer constant suffix, or the \fBF\fR or \fBL\fR floating-point
3589 constant suffixes.  (Traditional C does support the \fBL\fR suffix on integer
3590 constants.)  Note, these suffixes appear in macros defined in the system
3591 headers of most modern systems, e.g. the \fB_MIN\fR/\fB_MAX\fR macros in \f(CW\*(C`<limits.h>\*(C'\fR.
3592 Use of these macros in user code might normally lead to spurious
3593 warnings, however \s-1GCC\s0's integrated preprocessor has enough context to
3594 avoid warning in these cases.
3595 .IP "\(bu" 4
3596 A function declared external in one block and then used after the end of
3597 the block.
3598 .IP "\(bu" 4
3599 A \f(CW\*(C`switch\*(C'\fR statement has an operand of type \f(CW\*(C`long\*(C'\fR.
3600 .IP "\(bu" 4
3601 A non\-\f(CW\*(C`static\*(C'\fR function declaration follows a \f(CW\*(C`static\*(C'\fR one.
3602 This construct is not accepted by some traditional C compilers.
3603 .IP "\(bu" 4
3604 The \s-1ISO\s0 type of an integer constant has a different width or
3605 signedness from its traditional type.  This warning is only issued if
3606 the base of the constant is ten.  I.e. hexadecimal or octal values, which
3607 typically represent bit patterns, are not warned about.
3608 .IP "\(bu" 4
3609 Usage of \s-1ISO\s0 string concatenation is detected.
3610 .IP "\(bu" 4
3611 Initialization of automatic aggregates.
3612 .IP "\(bu" 4
3613 Identifier conflicts with labels.  Traditional C lacks a separate
3614 namespace for labels.
3615 .IP "\(bu" 4
3616 Initialization of unions.  If the initializer is zero, the warning is
3617 omitted.  This is done under the assumption that the zero initializer in
3618 user code appears conditioned on e.g. \f(CW\*(C`_\|_STDC_\|_\*(C'\fR to avoid missing
3619 initializer warnings and relies on default initialization to zero in the
3620 traditional C case.
3621 .IP "\(bu" 4
3622 Conversions by prototypes between fixed/floating\-point values and vice
3623 versa.  The absence of these prototypes when compiling with traditional
3624 C would cause serious problems.  This is a subset of the possible
3625 conversion warnings, for the full set use \fB\-Wtraditional\-conversion\fR.
3626 .IP "\(bu" 4
3627 Use of \s-1ISO\s0 C style function definitions.  This warning intentionally is
3628 \&\fInot\fR issued for prototype declarations or variadic functions
3629 because these \s-1ISO\s0 C features will appear in your code when using
3630 libiberty's traditional C compatibility macros, \f(CW\*(C`PARAMS\*(C'\fR and
3631 \&\f(CW\*(C`VPARAMS\*(C'\fR.  This warning is also bypassed for nested functions
3632 because that feature is already a \s-1GCC\s0 extension and thus not relevant to
3633 traditional C compatibility.
3634 .RE
3635 .RS 4
3636 .RE
3637 .IP "\fB\-Wtraditional\-conversion\fR (C and Objective-C only)" 4
3638 .IX Item "-Wtraditional-conversion (C and Objective-C only)"
3639 Warn if a prototype causes a type conversion that is different from what
3640 would happen to the same argument in the absence of a prototype.  This
3641 includes conversions of fixed point to floating and vice versa, and
3642 conversions changing the width or signedness of a fixed-point argument
3643 except when the same as the default promotion.
3644 .IP "\fB\-Wdeclaration\-after\-statement\fR (C and Objective-C only)" 4
3645 .IX Item "-Wdeclaration-after-statement (C and Objective-C only)"
3646 Warn when a declaration is found after a statement in a block.  This
3647 construct, known from \*(C+, was introduced with \s-1ISO\s0 C99 and is by default
3648 allowed in \s-1GCC\s0.  It is not supported by \s-1ISO\s0 C90 and was not supported by
3649 \&\s-1GCC\s0 versions before \s-1GCC\s0 3.0.
3650 .IP "\fB\-Wundef\fR" 4
3651 .IX Item "-Wundef"
3652 Warn if an undefined identifier is evaluated in an \fB#if\fR directive.
3653 .IP "\fB\-Wno\-endif\-labels\fR" 4
3654 .IX Item "-Wno-endif-labels"
3655 Do not warn whenever an \fB#else\fR or an \fB#endif\fR are followed by text.
3656 .IP "\fB\-Wshadow\fR" 4
3657 .IX Item "-Wshadow"
3658 Warn whenever a local variable or type declaration shadows another variable,
3659 parameter, type, or class member (in \*(C+), or whenever a built-in function
3660 is shadowed. Note that in \*(C+, the compiler will not warn if a local variable
3661 shadows a struct/class/enum, but will warn if it shadows an explicit typedef.
3662 .IP "\fB\-Wlarger\-than=\fR\fIlen\fR" 4
3663 .IX Item "-Wlarger-than=len"
3664 Warn whenever an object of larger than \fIlen\fR bytes is defined.
3665 .IP "\fB\-Wframe\-larger\-than=\fR\fIlen\fR" 4
3666 .IX Item "-Wframe-larger-than=len"
3667 Warn if the size of a function frame is larger than \fIlen\fR bytes.
3668 The computation done to determine the stack frame size is approximate
3669 and not conservative.
3670 The actual requirements may be somewhat greater than \fIlen\fR
3671 even if you do not get a warning.  In addition, any space allocated
3672 via \f(CW\*(C`alloca\*(C'\fR, variable-length arrays, or related constructs
3673 is not included by the compiler when determining
3674 whether or not to issue a warning.
3675 .IP "\fB\-Wno\-free\-nonheap\-object\fR" 4
3676 .IX Item "-Wno-free-nonheap-object"
3677 Do not warn when attempting to free an object that was not allocated
3678 on the heap.
3679 .IP "\fB\-Wstack\-usage=\fR\fIlen\fR" 4
3680 .IX Item "-Wstack-usage=len"
3681 Warn if the stack usage of a function might be larger than \fIlen\fR bytes.
3682 The computation done to determine the stack usage is conservative.
3683 Any space allocated via \f(CW\*(C`alloca\*(C'\fR, variable-length arrays, or related
3684 constructs is included by the compiler when determining whether or not to
3685 issue a warning.
3686 .Sp
3687 The message is in keeping with the output of \fB\-fstack\-usage\fR.
3688 .RS 4
3689 .IP "\(bu" 4
3690 If the stack usage is fully static but exceeds the specified amount, it's:
3691 .Sp
3692 .Vb 1
3693 \&          warning: stack usage is 1120 bytes
3694 .Ve
3695 .IP "\(bu" 4
3696 If the stack usage is (partly) dynamic but bounded, it's:
3697 .Sp
3698 .Vb 1
3699 \&          warning: stack usage might be 1648 bytes
3700 .Ve
3701 .IP "\(bu" 4
3702 If the stack usage is (partly) dynamic and not bounded, it's:
3703 .Sp
3704 .Vb 1
3705 \&          warning: stack usage might be unbounded
3706 .Ve
3707 .RE
3708 .RS 4
3709 .RE
3710 .IP "\fB\-Wunsafe\-loop\-optimizations\fR" 4
3711 .IX Item "-Wunsafe-loop-optimizations"
3712 Warn if the loop cannot be optimized because the compiler could not
3713 assume anything on the bounds of the loop indices.  With
3714 \&\fB\-funsafe\-loop\-optimizations\fR warn if the compiler made
3715 such assumptions.
3716 .IP "\fB\-Wno\-pedantic\-ms\-format\fR (MinGW targets only)" 4
3717 .IX Item "-Wno-pedantic-ms-format (MinGW targets only)"
3718 Disables the warnings about non-ISO \f(CW\*(C`printf\*(C'\fR / \f(CW\*(C`scanf\*(C'\fR format
3719 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
3720 depending on the \s-1MS\s0 runtime, when you are using the options \fB\-Wformat\fR
3721 and \fB\-pedantic\fR without gnu-extensions.
3722 .IP "\fB\-Wpointer\-arith\fR" 4
3723 .IX Item "-Wpointer-arith"
3724 Warn about anything that depends on the \*(L"size of\*(R" a function type or
3725 of \f(CW\*(C`void\*(C'\fR.  \s-1GNU\s0 C assigns these types a size of 1, for
3726 convenience in calculations with \f(CW\*(C`void *\*(C'\fR pointers and pointers
3727 to functions.  In \*(C+, warn also when an arithmetic operation involves
3728 \&\f(CW\*(C`NULL\*(C'\fR.  This warning is also enabled by \fB\-pedantic\fR.
3729 .IP "\fB\-Wtype\-limits\fR" 4
3730 .IX Item "-Wtype-limits"
3731 Warn if a comparison is always true or always false due to the limited
3732 range of the data type, but do not warn for constant expressions.  For
3733 example, warn if an unsigned variable is compared against zero with
3734 \&\fB<\fR or \fB>=\fR.  This warning is also enabled by
3735 \&\fB\-Wextra\fR.
3736 .IP "\fB\-Wbad\-function\-cast\fR (C and Objective-C only)" 4
3737 .IX Item "-Wbad-function-cast (C and Objective-C only)"
3738 Warn whenever a function call is cast to a non-matching type.
3739 For example, warn if \f(CW\*(C`int malloc()\*(C'\fR is cast to \f(CW\*(C`anything *\*(C'\fR.
3740 .IP "\fB\-Wc++\-compat\fR (C and Objective-C only)" 4
3741 .IX Item "-Wc++-compat (C and Objective-C only)"
3742 Warn about \s-1ISO\s0 C constructs that are outside of the common subset of
3743 \&\s-1ISO\s0 C and \s-1ISO\s0 \*(C+, e.g. request for implicit conversion from
3744 \&\f(CW\*(C`void *\*(C'\fR to a pointer to non\-\f(CW\*(C`void\*(C'\fR type.
3745 .IP "\fB\-Wc++11\-compat\fR (\*(C+ and Objective\-\*(C+ only)" 4
3746 .IX Item "-Wc++11-compat ( and Objective- only)"
3747 Warn about \*(C+ constructs whose meaning differs between \s-1ISO\s0 \*(C+ 1998
3748 and \s-1ISO\s0 \*(C+ 2011, e.g., identifiers in \s-1ISO\s0 \*(C+ 1998 that are keywords
3749 in \s-1ISO\s0 \*(C+ 2011.  This warning turns on \fB\-Wnarrowing\fR and is
3750 enabled by \fB\-Wall\fR.
3751 .IP "\fB\-Wcast\-qual\fR" 4
3752 .IX Item "-Wcast-qual"
3753 Warn whenever a pointer is cast so as to remove a type qualifier from
3754 the target type.  For example, warn if a \f(CW\*(C`const char *\*(C'\fR is cast
3755 to an ordinary \f(CW\*(C`char *\*(C'\fR.
3756 .Sp
3757 Also warn when making a cast that introduces a type qualifier in an
3758 unsafe way.  For example, casting \f(CW\*(C`char **\*(C'\fR to \f(CW\*(C`const char **\*(C'\fR
3759 is unsafe, as in this example:
3760 .Sp
3761 .Vb 6
3762 \&          /* p is char ** value.  */
3763 \&          const char **q = (const char **) p;
3764 \&          /* Assignment of readonly string to const char * is OK.  */
3765 \&          *q = "string";
3766 \&          /* Now char** pointer points to read\-only memory.  */
3767 \&          **p = \*(Aqb\*(Aq;
3768 .Ve
3769 .IP "\fB\-Wcast\-align\fR" 4
3770 .IX Item "-Wcast-align"
3771 Warn whenever a pointer is cast such that the required alignment of the
3772 target is increased.  For example, warn if a \f(CW\*(C`char *\*(C'\fR is cast to
3773 an \f(CW\*(C`int *\*(C'\fR on machines where integers can only be accessed at
3774 two\- or four-byte boundaries.
3775 .IP "\fB\-Wwrite\-strings\fR" 4
3776 .IX Item "-Wwrite-strings"
3777 When compiling C, give string constants the type \f(CW\*(C`const
3778 char[\f(CIlength\f(CW]\*(C'\fR so that copying the address of one into a
3779 non\-\f(CW\*(C`const\*(C'\fR \f(CW\*(C`char *\*(C'\fR pointer will get a warning.  These
3780 warnings will help you find at compile time code that can try to write
3781 into a string constant, but only if you have been very careful about
3782 using \f(CW\*(C`const\*(C'\fR in declarations and prototypes.  Otherwise, it will
3783 just be a nuisance. This is why we did not make \fB\-Wall\fR request
3784 these warnings.
3785 .Sp
3786 When compiling \*(C+, warn about the deprecated conversion from string
3787 literals to \f(CW\*(C`char *\*(C'\fR.  This warning is enabled by default for \*(C+
3788 programs.
3789 .IP "\fB\-Wclobbered\fR" 4
3790 .IX Item "-Wclobbered"
3791 Warn for variables that might be changed by \fBlongjmp\fR or
3792 \&\fBvfork\fR.  This warning is also enabled by \fB\-Wextra\fR.
3793 .IP "\fB\-Wconversion\fR" 4
3794 .IX Item "-Wconversion"
3795 Warn for implicit conversions that may alter a value. This includes
3796 conversions between real and integer, like \f(CW\*(C`abs (x)\*(C'\fR when
3797 \&\f(CW\*(C`x\*(C'\fR is \f(CW\*(C`double\*(C'\fR; conversions between signed and unsigned,
3798 like \f(CW\*(C`unsigned ui = \-1\*(C'\fR; and conversions to smaller types, like
3799 \&\f(CW\*(C`sqrtf (M_PI)\*(C'\fR. Do not warn for explicit casts like \f(CW\*(C`abs
3800 ((int) x)\*(C'\fR and \f(CW\*(C`ui = (unsigned) \-1\*(C'\fR, or if the value is not
3801 changed by the conversion like in \f(CW\*(C`abs (2.0)\*(C'\fR.  Warnings about
3802 conversions between signed and unsigned integers can be disabled by
3803 using \fB\-Wno\-sign\-conversion\fR.
3804 .Sp
3805 For \*(C+, also warn for confusing overload resolution for user-defined
3806 conversions; and conversions that will never use a type conversion
3807 operator: conversions to \f(CW\*(C`void\*(C'\fR, the same type, a base class or a
3808 reference to them. Warnings about conversions between signed and
3809 unsigned integers are disabled by default in \*(C+ unless
3810 \&\fB\-Wsign\-conversion\fR is explicitly enabled.
3811 .IP "\fB\-Wno\-conversion\-null\fR (\*(C+ and Objective\-\*(C+ only)" 4
3812 .IX Item "-Wno-conversion-null ( and Objective- only)"
3813 Do not warn for conversions between \f(CW\*(C`NULL\*(C'\fR and non-pointer
3814 types. \fB\-Wconversion\-null\fR is enabled by default.
3815 .IP "\fB\-Wzero\-as\-null\-pointer\-constant\fR (\*(C+ and Objective\-\*(C+ only)" 4
3816 .IX Item "-Wzero-as-null-pointer-constant ( and Objective- only)"
3817 Warn when a literal '0' is used as null pointer constant.  This can
3818 be useful to facilitate the conversion to \f(CW\*(C`nullptr\*(C'\fR in \*(C+11.
3819 .IP "\fB\-Wempty\-body\fR" 4
3820 .IX Item "-Wempty-body"
3821 Warn if an empty body occurs in an \fBif\fR, \fBelse\fR or \fBdo
3822 while\fR statement.  This warning is also enabled by \fB\-Wextra\fR.
3823 .IP "\fB\-Wenum\-compare\fR" 4
3824 .IX Item "-Wenum-compare"
3825 Warn about a comparison between values of different enumerated types.
3826 In \*(C+ enumeral mismatches in conditional expressions are also
3827 diagnosed and the warning is enabled by default.  In C this warning is 
3828 enabled by \fB\-Wall\fR.
3829 .IP "\fB\-Wjump\-misses\-init\fR (C, Objective-C only)" 4
3830 .IX Item "-Wjump-misses-init (C, Objective-C only)"
3831 Warn if a \f(CW\*(C`goto\*(C'\fR statement or a \f(CW\*(C`switch\*(C'\fR statement jumps
3832 forward across the initialization of a variable, or jumps backward to a
3833 label after the variable has been initialized.  This only warns about
3834 variables that are initialized when they are declared.  This warning is
3835 only supported for C and Objective-C; in \*(C+ this sort of branch is an
3836 error in any case.
3837 .Sp
3838 \&\fB\-Wjump\-misses\-init\fR is included in \fB\-Wc++\-compat\fR.  It
3839 can be disabled with the \fB\-Wno\-jump\-misses\-init\fR option.
3840 .IP "\fB\-Wsign\-compare\fR" 4
3841 .IX Item "-Wsign-compare"
3842 Warn when a comparison between signed and unsigned values could produce
3843 an incorrect result when the signed value is converted to unsigned.
3844 This warning is also enabled by \fB\-Wextra\fR; to get the other warnings
3845 of \fB\-Wextra\fR without this warning, use \fB\-Wextra \-Wno\-sign\-compare\fR.
3846 .IP "\fB\-Wsign\-conversion\fR" 4
3847 .IX Item "-Wsign-conversion"
3848 Warn for implicit conversions that may change the sign of an integer
3849 value, like assigning a signed integer expression to an unsigned
3850 integer variable. An explicit cast silences the warning. In C, this
3851 option is enabled also by \fB\-Wconversion\fR.
3852 .IP "\fB\-Waddress\fR" 4
3853 .IX Item "-Waddress"
3854 Warn about suspicious uses of memory addresses. These include using
3855 the address of a function in a conditional expression, such as
3856 \&\f(CW\*(C`void func(void); if (func)\*(C'\fR, and comparisons against the memory
3857 address of a string literal, such as \f(CW\*(C`if (x == "abc")\*(C'\fR.  Such
3858 uses typically indicate a programmer error: the address of a function
3859 always evaluates to true, so their use in a conditional usually
3860 indicate that the programmer forgot the parentheses in a function
3861 call; and comparisons against string literals result in unspecified
3862 behavior and are not portable in C, so they usually indicate that the
3863 programmer intended to use \f(CW\*(C`strcmp\*(C'\fR.  This warning is enabled by
3864 \&\fB\-Wall\fR.
3865 .IP "\fB\-Wlogical\-op\fR" 4
3866 .IX Item "-Wlogical-op"
3867 Warn about suspicious uses of logical operators in expressions.
3868 This includes using logical operators in contexts where a
3869 bit-wise operator is likely to be expected.
3870 .IP "\fB\-Waggregate\-return\fR" 4
3871 .IX Item "-Waggregate-return"
3872 Warn if any functions that return structures or unions are defined or
3873 called.  (In languages where you can return an array, this also elicits
3874 a warning.)
3875 .IP "\fB\-Wno\-attributes\fR" 4
3876 .IX Item "-Wno-attributes"
3877 Do not warn if an unexpected \f(CW\*(C`_\|_attribute_\|_\*(C'\fR is used, such as
3878 unrecognized attributes, function attributes applied to variables,
3879 etc.  This will not stop errors for incorrect use of supported
3880 attributes.
3881 .IP "\fB\-Wno\-builtin\-macro\-redefined\fR" 4
3882 .IX Item "-Wno-builtin-macro-redefined"
3883 Do not warn if certain built-in macros are redefined.  This suppresses
3884 warnings for redefinition of \f(CW\*(C`_\|_TIMESTAMP_\|_\*(C'\fR, \f(CW\*(C`_\|_TIME_\|_\*(C'\fR,
3885 \&\f(CW\*(C`_\|_DATE_\|_\*(C'\fR, \f(CW\*(C`_\|_FILE_\|_\*(C'\fR, and \f(CW\*(C`_\|_BASE_FILE_\|_\*(C'\fR.
3886 .IP "\fB\-Wstrict\-prototypes\fR (C and Objective-C only)" 4
3887 .IX Item "-Wstrict-prototypes (C and Objective-C only)"
3888 Warn if a function is declared or defined without specifying the
3889 argument types.  (An old-style function definition is permitted without
3890 a warning if preceded by a declaration that specifies the argument
3891 types.)
3892 .IP "\fB\-Wold\-style\-declaration\fR (C and Objective-C only)" 4
3893 .IX Item "-Wold-style-declaration (C and Objective-C only)"
3894 Warn for obsolescent usages, according to the C Standard, in a
3895 declaration. For example, warn if storage-class specifiers like
3896 \&\f(CW\*(C`static\*(C'\fR are not the first things in a declaration.  This warning
3897 is also enabled by \fB\-Wextra\fR.
3898 .IP "\fB\-Wold\-style\-definition\fR (C and Objective-C only)" 4
3899 .IX Item "-Wold-style-definition (C and Objective-C only)"
3900 Warn if an old-style function definition is used.  A warning is given
3901 even if there is a previous prototype.
3902 .IP "\fB\-Wmissing\-parameter\-type\fR (C and Objective-C only)" 4
3903 .IX Item "-Wmissing-parameter-type (C and Objective-C only)"
3904 A function parameter is declared without a type specifier in K&R\-style
3905 functions:
3906 .Sp
3907 .Vb 1
3908 \&        void foo(bar) { }
3909 .Ve
3910 .Sp
3911 This warning is also enabled by \fB\-Wextra\fR.
3912 .IP "\fB\-Wmissing\-prototypes\fR (C and Objective-C only)" 4
3913 .IX Item "-Wmissing-prototypes (C and Objective-C only)"
3914 Warn if a global function is defined without a previous prototype
3915 declaration.  This warning is issued even if the definition itself
3916 provides a prototype.  The aim is to detect global functions that 
3917 are not declared in header files.
3918 .IP "\fB\-Wmissing\-declarations\fR" 4
3919 .IX Item "-Wmissing-declarations"
3920 Warn if a global function is defined without a previous declaration.
3921 Do so even if the definition itself provides a prototype.
3922 Use this option to detect global functions that are not declared in
3923 header files.  In \*(C+, no warnings are issued for function templates,
3924 or for inline functions, or for functions in anonymous namespaces.
3925 .IP "\fB\-Wmissing\-field\-initializers\fR" 4
3926 .IX Item "-Wmissing-field-initializers"
3927 Warn if a structure's initializer has some fields missing.  For
3928 example, the following code would cause such a warning, because
3929 \&\f(CW\*(C`x.h\*(C'\fR is implicitly zero:
3930 .Sp
3931 .Vb 2
3932 \&        struct s { int f, g, h; };
3933 \&        struct s x = { 3, 4 };
3934 .Ve
3935 .Sp
3936 This option does not warn about designated initializers, so the following
3937 modification would not trigger a warning:
3938 .Sp
3939 .Vb 2
3940 \&        struct s { int f, g, h; };
3941 \&        struct s x = { .f = 3, .g = 4 };
3942 .Ve
3943 .Sp
3944 This warning is included in \fB\-Wextra\fR.  To get other \fB\-Wextra\fR
3945 warnings without this one, use \fB\-Wextra \-Wno\-missing\-field\-initializers\fR.
3946 .IP "\fB\-Wmissing\-format\-attribute\fR" 4
3947 .IX Item "-Wmissing-format-attribute"
3948 Warn about function pointers that might be candidates for \f(CW\*(C`format\*(C'\fR
3949 attributes.  Note these are only possible candidates, not absolute ones.
3950 \&\s-1GCC\s0 will guess that function pointers with \f(CW\*(C`format\*(C'\fR attributes that
3951 are used in assignment, initialization, parameter passing or return
3952 statements should have a corresponding \f(CW\*(C`format\*(C'\fR attribute in the
3953 resulting type.  I.e. the left-hand side of the assignment or
3954 initialization, the type of the parameter variable, or the return type
3955 of the containing function respectively should also have a \f(CW\*(C`format\*(C'\fR
3956 attribute to avoid the warning.
3957 .Sp
3958 \&\s-1GCC\s0 will also warn about function definitions that might be
3959 candidates for \f(CW\*(C`format\*(C'\fR attributes.  Again, these are only
3960 possible candidates.  \s-1GCC\s0 will guess that \f(CW\*(C`format\*(C'\fR attributes
3961 might be appropriate for any function that calls a function like
3962 \&\f(CW\*(C`vprintf\*(C'\fR or \f(CW\*(C`vscanf\*(C'\fR, but this might not always be the
3963 case, and some functions for which \f(CW\*(C`format\*(C'\fR attributes are
3964 appropriate may not be detected.
3965 .IP "\fB\-Wno\-multichar\fR" 4
3966 .IX Item "-Wno-multichar"
3967 Do not warn if a multicharacter constant (\fB'\s-1FOOF\s0'\fR) is used.
3968 Usually they indicate a typo in the user's code, as they have
3969 implementation-defined values, and should not be used in portable code.
3970 .IP "\fB\-Wnormalized=<none|id|nfc|nfkc>\fR" 4
3971 .IX Item "-Wnormalized=<none|id|nfc|nfkc>"
3972 In \s-1ISO\s0 C and \s-1ISO\s0 \*(C+, two identifiers are different if they are
3973 different sequences of characters.  However, sometimes when characters
3974 outside the basic \s-1ASCII\s0 character set are used, you can have two
3975 different character sequences that look the same.  To avoid confusion,
3976 the \s-1ISO\s0 10646 standard sets out some \fInormalization rules\fR which
3977 when applied ensure that two sequences that look the same are turned into
3978 the same sequence.  \s-1GCC\s0 can warn you if you are using identifiers that
3979 have not been normalized; this option controls that warning.
3980 .Sp
3981 There are four levels of warning supported by \s-1GCC\s0.  The default is
3982 \&\fB\-Wnormalized=nfc\fR, which warns about any identifier that is
3983 not in the \s-1ISO\s0 10646 \*(L"C\*(R" normalized form, \fI\s-1NFC\s0\fR.  \s-1NFC\s0 is the
3984 recommended form for most uses.
3985 .Sp
3986 Unfortunately, there are some characters allowed in identifiers by
3987 \&\s-1ISO\s0 C and \s-1ISO\s0 \*(C+ that, when turned into \s-1NFC\s0, are not allowed in 
3988 identifiers.  That is, there's no way to use these symbols in portable
3989 \&\s-1ISO\s0 C or \*(C+ and have all your identifiers in \s-1NFC\s0.
3990 \&\fB\-Wnormalized=id\fR suppresses the warning for these characters.
3991 It is hoped that future versions of the standards involved will correct
3992 this, which is why this option is not the default.
3993 .Sp
3994 You can switch the warning off for all characters by writing
3995 \&\fB\-Wnormalized=none\fR.  You would only want to do this if you
3996 were using some other normalization scheme (like \*(L"D\*(R"), because
3997 otherwise you can easily create bugs that are literally impossible to see.
3998 .Sp
3999 Some characters in \s-1ISO\s0 10646 have distinct meanings but look identical
4000 in some fonts or display methodologies, especially once formatting has
4001 been applied.  For instance \f(CW\*(C`\eu207F\*(C'\fR, \*(L"\s-1SUPERSCRIPT\s0 \s-1LATIN\s0 \s-1SMALL\s0
4002 \&\s-1LETTER\s0 N\*(R", will display just like a regular \f(CW\*(C`n\*(C'\fR that has been
4003 placed in a superscript.  \s-1ISO\s0 10646 defines the \fI\s-1NFKC\s0\fR
4004 normalization scheme to convert all these into a standard form as
4005 well, and \s-1GCC\s0 will warn if your code is not in \s-1NFKC\s0 if you use
4006 \&\fB\-Wnormalized=nfkc\fR.  This warning is comparable to warning
4007 about every identifier that contains the letter O because it might be
4008 confused with the digit 0, and so is not the default, but may be
4009 useful as a local coding convention if the programming environment is
4010 unable to be fixed to display these characters distinctly.
4011 .IP "\fB\-Wno\-deprecated\fR" 4
4012 .IX Item "-Wno-deprecated"
4013 Do not warn about usage of deprecated features.
4014 .IP "\fB\-Wno\-deprecated\-declarations\fR" 4
4015 .IX Item "-Wno-deprecated-declarations"
4016 Do not warn about uses of functions,
4017 variables, and types marked as deprecated by using the \f(CW\*(C`deprecated\*(C'\fR
4018 attribute.
4019 .IP "\fB\-Wno\-overflow\fR" 4
4020 .IX Item "-Wno-overflow"
4021 Do not warn about compile-time overflow in constant expressions.
4022 .IP "\fB\-Woverride\-init\fR (C and Objective-C only)" 4
4023 .IX Item "-Woverride-init (C and Objective-C only)"
4024 Warn if an initialized field without side effects is overridden when
4025 using designated initializers.
4026 .Sp
4027 This warning is included in \fB\-Wextra\fR.  To get other
4028 \&\fB\-Wextra\fR warnings without this one, use \fB\-Wextra
4029 \&\-Wno\-override\-init\fR.
4030 .IP "\fB\-Wpacked\fR" 4
4031 .IX Item "-Wpacked"
4032 Warn if a structure is given the packed attribute, but the packed
4033 attribute has no effect on the layout or size of the structure.
4034 Such structures may be mis-aligned for little benefit.  For
4035 instance, in this code, the variable \f(CW\*(C`f.x\*(C'\fR in \f(CW\*(C`struct bar\*(C'\fR
4036 will be misaligned even though \f(CW\*(C`struct bar\*(C'\fR does not itself
4037 have the packed attribute:
4038 .Sp
4039 .Vb 8
4040 \&        struct foo {
4041 \&          int x;
4042 \&          char a, b, c, d;
4043 \&        } _\|_attribute_\|_((packed));
4044 \&        struct bar {
4045 \&          char z;
4046 \&          struct foo f;
4047 \&        };
4048 .Ve
4049 .IP "\fB\-Wpacked\-bitfield\-compat\fR" 4
4050 .IX Item "-Wpacked-bitfield-compat"
4051 The 4.1, 4.2 and 4.3 series of \s-1GCC\s0 ignore the \f(CW\*(C`packed\*(C'\fR attribute
4052 on bit-fields of type \f(CW\*(C`char\*(C'\fR.  This has been fixed in \s-1GCC\s0 4.4 but
4053 the change can lead to differences in the structure layout.  \s-1GCC\s0
4054 informs you when the offset of such a field has changed in \s-1GCC\s0 4.4.
4055 For example there is no longer a 4\-bit padding between field \f(CW\*(C`a\*(C'\fR
4056 and \f(CW\*(C`b\*(C'\fR in this structure:
4057 .Sp
4058 .Vb 5
4059 \&        struct foo
4060 \&        {
4061 \&          char a:4;
4062 \&          char b:8;
4063 \&        } _\|_attribute_\|_ ((packed));
4064 .Ve
4065 .Sp
4066 This warning is enabled by default.  Use
4067 \&\fB\-Wno\-packed\-bitfield\-compat\fR to disable this warning.
4068 .IP "\fB\-Wpadded\fR" 4
4069 .IX Item "-Wpadded"
4070 Warn if padding is included in a structure, either to align an element
4071 of the structure or to align the whole structure.  Sometimes when this
4072 happens it is possible to rearrange the fields of the structure to
4073 reduce the padding and so make the structure smaller.
4074 .IP "\fB\-Wredundant\-decls\fR" 4
4075 .IX Item "-Wredundant-decls"
4076 Warn if anything is declared more than once in the same scope, even in
4077 cases where multiple declaration is valid and changes nothing.
4078 .IP "\fB\-Wnested\-externs\fR (C and Objective-C only)" 4
4079 .IX Item "-Wnested-externs (C and Objective-C only)"
4080 Warn if an \f(CW\*(C`extern\*(C'\fR declaration is encountered within a function.
4081 .IP "\fB\-Winline\fR" 4
4082 .IX Item "-Winline"
4083 Warn if a function can not be inlined and it was declared as inline.
4084 Even with this option, the compiler will not warn about failures to
4085 inline functions declared in system headers.
4086 .Sp
4087 The compiler uses a variety of heuristics to determine whether or not
4088 to inline a function.  For example, the compiler takes into account
4089 the size of the function being inlined and the amount of inlining
4090 that has already been done in the current function.  Therefore,
4091 seemingly insignificant changes in the source program can cause the
4092 warnings produced by \fB\-Winline\fR to appear or disappear.
4093 .IP "\fB\-Wno\-invalid\-offsetof\fR (\*(C+ and Objective\-\*(C+ only)" 4
4094 .IX Item "-Wno-invalid-offsetof ( and Objective- only)"
4095 Suppress warnings from applying the \fBoffsetof\fR macro to a non-POD
4096 type.  According to the 1998 \s-1ISO\s0 \*(C+ standard, applying \fBoffsetof\fR
4097 to a non-POD type is undefined.  In existing \*(C+ implementations,
4098 however, \fBoffsetof\fR typically gives meaningful results even when
4099 applied to certain kinds of non-POD types. (Such as a simple
4100 \&\fBstruct\fR that fails to be a \s-1POD\s0 type only by virtue of having a
4101 constructor.)  This flag is for users who are aware that they are
4102 writing nonportable code and who have deliberately chosen to ignore the
4103 warning about it.
4104 .Sp
4105 The restrictions on \fBoffsetof\fR may be relaxed in a future version
4106 of the \*(C+ standard.
4107 .IP "\fB\-Wno\-int\-to\-pointer\-cast\fR" 4
4108 .IX Item "-Wno-int-to-pointer-cast"
4109 Suppress warnings from casts to pointer type of an integer of a
4110 different size. In \*(C+, casting to a pointer type of smaller size is
4111 an error. \fBWint-to-pointer-cast\fR is enabled by default.
4112 .IP "\fB\-Wno\-pointer\-to\-int\-cast\fR (C and Objective-C only)" 4
4113 .IX Item "-Wno-pointer-to-int-cast (C and Objective-C only)"
4114 Suppress warnings from casts from a pointer to an integer type of a
4115 different size.
4116 .IP "\fB\-Winvalid\-pch\fR" 4
4117 .IX Item "-Winvalid-pch"
4118 Warn if a precompiled header is found in
4119 the search path but can't be used.
4120 .IP "\fB\-Wlong\-long\fR" 4
4121 .IX Item "-Wlong-long"
4122 Warn if \fBlong long\fR type is used.  This is enabled by either
4123 \&\fB\-pedantic\fR or \fB\-Wtraditional\fR in \s-1ISO\s0 C90 and \*(C+98
4124 modes.  To inhibit the warning messages, use \fB\-Wno\-long\-long\fR.
4125 .IP "\fB\-Wvariadic\-macros\fR" 4
4126 .IX Item "-Wvariadic-macros"
4127 Warn if variadic macros are used in pedantic \s-1ISO\s0 C90 mode, or the \s-1GNU\s0
4128 alternate syntax when in pedantic \s-1ISO\s0 C99 mode.  This is default.
4129 To inhibit the warning messages, use \fB\-Wno\-variadic\-macros\fR.
4130 .IP "\fB\-Wvector\-operation\-performance\fR" 4
4131 .IX Item "-Wvector-operation-performance"
4132 Warn if vector operation is not implemented via \s-1SIMD\s0 capabilities of the
4133 architecture.  Mainly useful for the performance tuning.
4134 Vector operation can be implemented \f(CW\*(C`piecewise\*(C'\fR, which means that the
4135 scalar operation is performed on every vector element; 
4136 \&\f(CW\*(C`in parallel\*(C'\fR, which means that the vector operation is implemented
4137 using scalars of wider type, which normally is more performance efficient;
4138 and \f(CW\*(C`as a single scalar\*(C'\fR, which means that vector fits into a
4139 scalar type.
4140 .IP "\fB\-Wvla\fR" 4
4141 .IX Item "-Wvla"
4142 Warn if variable length array is used in the code.
4143 \&\fB\-Wno\-vla\fR will prevent the \fB\-pedantic\fR warning of
4144 the variable length array.
4145 .IP "\fB\-Wvolatile\-register\-var\fR" 4
4146 .IX Item "-Wvolatile-register-var"
4147 Warn if a register variable is declared volatile.  The volatile
4148 modifier does not inhibit all optimizations that may eliminate reads
4149 and/or writes to register variables.  This warning is enabled by
4150 \&\fB\-Wall\fR.
4151 .IP "\fB\-Wdisabled\-optimization\fR" 4
4152 .IX Item "-Wdisabled-optimization"
4153 Warn if a requested optimization pass is disabled.  This warning does
4154 not generally indicate that there is anything wrong with your code; it
4155 merely indicates that \s-1GCC\s0's optimizers were unable to handle the code
4156 effectively.  Often, the problem is that your code is too big or too
4157 complex; \s-1GCC\s0 will refuse to optimize programs when the optimization
4158 itself is likely to take inordinate amounts of time.
4159 .IP "\fB\-Wpointer\-sign\fR (C and Objective-C only)" 4
4160 .IX Item "-Wpointer-sign (C and Objective-C only)"
4161 Warn for pointer argument passing or assignment with different signedness.
4162 This option is only supported for C and Objective-C.  It is implied by
4163 \&\fB\-Wall\fR and by \fB\-pedantic\fR, which can be disabled with
4164 \&\fB\-Wno\-pointer\-sign\fR.
4165 .IP "\fB\-Wstack\-protector\fR" 4
4166 .IX Item "-Wstack-protector"
4167 This option is only active when \fB\-fstack\-protector\fR is active.  It
4168 warns about functions that will not be protected against stack smashing.
4169 .IP "\fB\-Wno\-mudflap\fR" 4
4170 .IX Item "-Wno-mudflap"
4171 Suppress warnings about constructs that cannot be instrumented by
4172 \&\fB\-fmudflap\fR.
4173 .IP "\fB\-Woverlength\-strings\fR" 4
4174 .IX Item "-Woverlength-strings"
4175 Warn about string constants that are longer than the \*(L"minimum
4176 maximum\*(R" length specified in the C standard.  Modern compilers
4177 generally allow string constants that are much longer than the
4178 standard's minimum limit, but very portable programs should avoid
4179 using longer strings.
4180 .Sp
4181 The limit applies \fIafter\fR string constant concatenation, and does
4182 not count the trailing \s-1NUL\s0.  In C90, the limit was 509 characters; in
4183 C99, it was raised to 4095.  \*(C+98 does not specify a normative
4184 minimum maximum, so we do not diagnose overlength strings in \*(C+.
4185 .Sp
4186 This option is implied by \fB\-pedantic\fR, and can be disabled with
4187 \&\fB\-Wno\-overlength\-strings\fR.
4188 .IP "\fB\-Wunsuffixed\-float\-constants\fR (C and Objective-C only)" 4
4189 .IX Item "-Wunsuffixed-float-constants (C and Objective-C only)"
4190 \&\s-1GCC\s0 will issue a warning for any floating constant that does not have
4191 a suffix.  When used together with \fB\-Wsystem\-headers\fR it will
4192 warn about such constants in system header files.  This can be useful
4193 when preparing code to use with the \f(CW\*(C`FLOAT_CONST_DECIMAL64\*(C'\fR pragma
4194 from the decimal floating-point extension to C99.
4195 .SS "Options for Debugging Your Program or \s-1GCC\s0"
4196 .IX Subsection "Options for Debugging Your Program or GCC"
4197 \&\s-1GCC\s0 has various special options that are used for debugging
4198 either your program or \s-1GCC:\s0
4199 .IP "\fB\-g\fR" 4
4200 .IX Item "-g"
4201 Produce debugging information in the operating system's native format
4202 (stabs, \s-1COFF\s0, \s-1XCOFF\s0, or \s-1DWARF\s0 2).  \s-1GDB\s0 can work with this debugging
4203 information.
4204 .Sp
4205 On most systems that use stabs format, \fB\-g\fR enables use of extra
4206 debugging information that only \s-1GDB\s0 can use; this extra information
4207 makes debugging work better in \s-1GDB\s0 but will probably make other debuggers
4208 crash or
4209 refuse to read the program.  If you want to control for certain whether
4210 to generate the extra information, use \fB\-gstabs+\fR, \fB\-gstabs\fR,
4211 \&\fB\-gxcoff+\fR, \fB\-gxcoff\fR, or \fB\-gvms\fR (see below).
4212 .Sp
4213 \&\s-1GCC\s0 allows you to use \fB\-g\fR with
4214 \&\fB\-O\fR.  The shortcuts taken by optimized code may occasionally
4215 produce surprising results: some variables you declared may not exist
4216 at all; flow of control may briefly move where you did not expect it;
4217 some statements may not be executed because they compute constant
4218 results or their values were already at hand; some statements may
4219 execute in different places because they were moved out of loops.
4220 .Sp
4221 Nevertheless it proves possible to debug optimized output.  This makes
4222 it reasonable to use the optimizer for programs that might have bugs.
4223 .Sp
4224 The following options are useful when \s-1GCC\s0 is generated with the
4225 capability for more than one debugging format.
4226 .IP "\fB\-ggdb\fR" 4
4227 .IX Item "-ggdb"
4228 Produce debugging information for use by \s-1GDB\s0.  This means to use the
4229 most expressive format available (\s-1DWARF\s0 2, stabs, or the native format
4230 if neither of those are supported), including \s-1GDB\s0 extensions if at all
4231 possible.
4232 .IP "\fB\-gstabs\fR" 4
4233 .IX Item "-gstabs"
4234 Produce debugging information in stabs format (if that is supported),
4235 without \s-1GDB\s0 extensions.  This is the format used by \s-1DBX\s0 on most \s-1BSD\s0
4236 systems.  On \s-1MIPS\s0, Alpha and System V Release 4 systems this option
4237 produces stabs debugging output that is not understood by \s-1DBX\s0 or \s-1SDB\s0.
4238 On System V Release 4 systems this option requires the \s-1GNU\s0 assembler.
4239 .IP "\fB\-feliminate\-unused\-debug\-symbols\fR" 4
4240 .IX Item "-feliminate-unused-debug-symbols"
4241 Produce debugging information in stabs format (if that is supported),
4242 for only symbols that are actually used.
4243 .IP "\fB\-femit\-class\-debug\-always\fR" 4
4244 .IX Item "-femit-class-debug-always"
4245 Instead of emitting debugging information for a \*(C+ class in only one
4246 object file, emit it in all object files using the class.  This option
4247 should be used only with debuggers that are unable to handle the way \s-1GCC\s0
4248 normally emits debugging information for classes because using this
4249 option will increase the size of debugging information by as much as a
4250 factor of two.
4251 .IP "\fB\-fno\-debug\-types\-section\fR" 4
4252 .IX Item "-fno-debug-types-section"
4253 By default when using \s-1DWARF\s0 v4 or higher type DIEs will be put into
4254 their own .debug_types section instead of making them part of the
4255 \&.debug_info section.  It is more efficient to put them in a separate
4256 comdat sections since the linker will then be able to remove duplicates.
4257 But not all \s-1DWARF\s0 consumers support .debug_types sections yet.
4258 .IP "\fB\-gstabs+\fR" 4
4259 .IX Item "-gstabs+"
4260 Produce debugging information in stabs format (if that is supported),
4261 using \s-1GNU\s0 extensions understood only by the \s-1GNU\s0 debugger (\s-1GDB\s0).  The
4262 use of these extensions is likely to make other debuggers crash or
4263 refuse to read the program.
4264 .IP "\fB\-gcoff\fR" 4
4265 .IX Item "-gcoff"
4266 Produce debugging information in \s-1COFF\s0 format (if that is supported).
4267 This is the format used by \s-1SDB\s0 on most System V systems prior to
4268 System V Release 4.
4269 .IP "\fB\-gxcoff\fR" 4
4270 .IX Item "-gxcoff"
4271 Produce debugging information in \s-1XCOFF\s0 format (if that is supported).
4272 This is the format used by the \s-1DBX\s0 debugger on \s-1IBM\s0 \s-1RS/6000\s0 systems.
4273 .IP "\fB\-gxcoff+\fR" 4
4274 .IX Item "-gxcoff+"
4275 Produce debugging information in \s-1XCOFF\s0 format (if that is supported),
4276 using \s-1GNU\s0 extensions understood only by the \s-1GNU\s0 debugger (\s-1GDB\s0).  The
4277 use of these extensions is likely to make other debuggers crash or
4278 refuse to read the program, and may cause assemblers other than the \s-1GNU\s0
4279 assembler (\s-1GAS\s0) to fail with an error.
4280 .IP "\fB\-gdwarf\-\fR\fIversion\fR" 4
4281 .IX Item "-gdwarf-version"
4282 Produce debugging information in \s-1DWARF\s0 format (if that is
4283 supported).  This is the format used by \s-1DBX\s0 on \s-1IRIX\s0 6.  The value
4284 of \fIversion\fR may be either 2, 3 or 4; the default version is 2.
4285 .Sp
4286 Note that with \s-1DWARF\s0 version 2 some ports require, and will always
4287 use, some non-conflicting \s-1DWARF\s0 3 extensions in the unwind tables.
4288 .Sp
4289 Version 4 may require \s-1GDB\s0 7.0 and \fB\-fvar\-tracking\-assignments\fR
4290 for maximum benefit.
4291 .IP "\fB\-grecord\-gcc\-switches\fR" 4
4292 .IX Item "-grecord-gcc-switches"
4293 This switch causes the command-line options used to invoke the
4294 compiler that may affect code generation to be appended to the
4295 DW_AT_producer attribute in \s-1DWARF\s0 debugging information.  The options
4296 are concatenated with spaces separating them from each other and from
4297 the compiler version.  See also \fB\-frecord\-gcc\-switches\fR for another
4298 way of storing compiler options into the object file.
4299 .IP "\fB\-gno\-record\-gcc\-switches\fR" 4
4300 .IX Item "-gno-record-gcc-switches"
4301 Disallow appending command-line options to the DW_AT_producer attribute
4302 in \s-1DWARF\s0 debugging information.  This is the default.
4303 .IP "\fB\-gstrict\-dwarf\fR" 4
4304 .IX Item "-gstrict-dwarf"
4305 Disallow using extensions of later \s-1DWARF\s0 standard version than selected
4306 with \fB\-gdwarf\-\fR\fIversion\fR.  On most targets using non-conflicting
4307 \&\s-1DWARF\s0 extensions from later standard versions is allowed.
4308 .IP "\fB\-gno\-strict\-dwarf\fR" 4
4309 .IX Item "-gno-strict-dwarf"
4310 Allow using extensions of later \s-1DWARF\s0 standard version than selected with
4311 \&\fB\-gdwarf\-\fR\fIversion\fR.
4312 .IP "\fB\-gvms\fR" 4
4313 .IX Item "-gvms"
4314 Produce debugging information in \s-1VMS\s0 debug format (if that is
4315 supported).  This is the format used by \s-1DEBUG\s0 on \s-1VMS\s0 systems.
4316 .IP "\fB\-g\fR\fIlevel\fR" 4
4317 .IX Item "-glevel"
4318 .PD 0
4319 .IP "\fB\-ggdb\fR\fIlevel\fR" 4
4320 .IX Item "-ggdblevel"
4321 .IP "\fB\-gstabs\fR\fIlevel\fR" 4
4322 .IX Item "-gstabslevel"
4323 .IP "\fB\-gcoff\fR\fIlevel\fR" 4
4324 .IX Item "-gcofflevel"
4325 .IP "\fB\-gxcoff\fR\fIlevel\fR" 4
4326 .IX Item "-gxcofflevel"
4327 .IP "\fB\-gvms\fR\fIlevel\fR" 4
4328 .IX Item "-gvmslevel"
4329 .PD
4330 Request debugging information and also use \fIlevel\fR to specify how
4331 much information.  The default level is 2.
4332 .Sp
4333 Level 0 produces no debug information at all.  Thus, \fB\-g0\fR negates
4334 \&\fB\-g\fR.
4335 .Sp
4336 Level 1 produces minimal information, enough for making backtraces in
4337 parts of the program that you don't plan to debug.  This includes
4338 descriptions of functions and external variables, but no information
4339 about local variables and no line numbers.
4340 .Sp
4341 Level 3 includes extra information, such as all the macro definitions
4342 present in the program.  Some debuggers support macro expansion when
4343 you use \fB\-g3\fR.
4344 .Sp
4345 \&\fB\-gdwarf\-2\fR does not accept a concatenated debug level, because
4346 \&\s-1GCC\s0 used to support an option \fB\-gdwarf\fR that meant to generate
4347 debug information in version 1 of the \s-1DWARF\s0 format (which is very
4348 different from version 2), and it would have been too confusing.  That
4349 debug format is long obsolete, but the option cannot be changed now.
4350 Instead use an additional \fB\-g\fR\fIlevel\fR option to change the
4351 debug level for \s-1DWARF\s0.
4352 .IP "\fB\-gtoggle\fR" 4
4353 .IX Item "-gtoggle"
4354 Turn off generation of debug info, if leaving out this option would have
4355 generated it, or turn it on at level 2 otherwise.  The position of this
4356 argument in the command line does not matter, it takes effect after all
4357 other options are processed, and it does so only once, no matter how
4358 many times it is given.  This is mainly intended to be used with
4359 \&\fB\-fcompare\-debug\fR.
4360 .IP "\fB\-fdump\-final\-insns\fR[\fB=\fR\fIfile\fR]" 4
4361 .IX Item "-fdump-final-insns[=file]"
4362 Dump the final internal representation (\s-1RTL\s0) to \fIfile\fR.  If the
4363 optional argument is omitted (or if \fIfile\fR is \f(CW\*(C`.\*(C'\fR), the name
4364 of the dump file will be determined by appending \f(CW\*(C`.gkd\*(C'\fR to the
4365 compilation output file name.
4366 .IP "\fB\-fcompare\-debug\fR[\fB=\fR\fIopts\fR]" 4
4367 .IX Item "-fcompare-debug[=opts]"
4368 If no error occurs during compilation, run the compiler a second time,
4369 adding \fIopts\fR and \fB\-fcompare\-debug\-second\fR to the arguments
4370 passed to the second compilation.  Dump the final internal
4371 representation in both compilations, and print an error if they differ.
4372 .Sp
4373 If the equal sign is omitted, the default \fB\-gtoggle\fR is used.
4374 .Sp
4375 The environment variable \fB\s-1GCC_COMPARE_DEBUG\s0\fR, if defined, non-empty
4376 and nonzero, implicitly enables \fB\-fcompare\-debug\fR.  If
4377 \&\fB\s-1GCC_COMPARE_DEBUG\s0\fR is defined to a string starting with a dash,
4378 then it is used for \fIopts\fR, otherwise the default \fB\-gtoggle\fR
4379 is used.
4380 .Sp
4381 \&\fB\-fcompare\-debug=\fR, with the equal sign but without \fIopts\fR,
4382 is equivalent to \fB\-fno\-compare\-debug\fR, which disables the dumping
4383 of the final representation and the second compilation, preventing even
4384 \&\fB\s-1GCC_COMPARE_DEBUG\s0\fR from taking effect.
4385 .Sp
4386 To verify full coverage during \fB\-fcompare\-debug\fR testing, set
4387 \&\fB\s-1GCC_COMPARE_DEBUG\s0\fR to say \fB\-fcompare\-debug\-not\-overridden\fR,
4388 which \s-1GCC\s0 will reject as an invalid option in any actual compilation
4389 (rather than preprocessing, assembly or linking).  To get just a
4390 warning, setting \fB\s-1GCC_COMPARE_DEBUG\s0\fR to \fB\-w%n\-fcompare\-debug
4391 not overridden\fR will do.
4392 .IP "\fB\-fcompare\-debug\-second\fR" 4
4393 .IX Item "-fcompare-debug-second"
4394 This option is implicitly passed to the compiler for the second
4395 compilation requested by \fB\-fcompare\-debug\fR, along with options to
4396 silence warnings, and omitting other options that would cause
4397 side-effect compiler outputs to files or to the standard output.  Dump
4398 files and preserved temporary files are renamed so as to contain the
4399 \&\f(CW\*(C`.gk\*(C'\fR additional extension during the second compilation, to avoid
4400 overwriting those generated by the first.
4401 .Sp
4402 When this option is passed to the compiler driver, it causes the
4403 \&\fIfirst\fR compilation to be skipped, which makes it useful for little
4404 other than debugging the compiler proper.
4405 .IP "\fB\-feliminate\-dwarf2\-dups\fR" 4
4406 .IX Item "-feliminate-dwarf2-dups"
4407 Compress \s-1DWARF2\s0 debugging information by eliminating duplicated
4408 information about each symbol.  This option only makes sense when
4409 generating \s-1DWARF2\s0 debugging information with \fB\-gdwarf\-2\fR.
4410 .IP "\fB\-femit\-struct\-debug\-baseonly\fR" 4
4411 .IX Item "-femit-struct-debug-baseonly"
4412 Emit debug information for struct-like types
4413 only when the base name of the compilation source file
4414 matches the base name of file in which the struct was defined.
4415 .Sp
4416 This option substantially reduces the size of debugging information,
4417 but at significant potential loss in type information to the debugger.
4418 See \fB\-femit\-struct\-debug\-reduced\fR for a less aggressive option.
4419 See \fB\-femit\-struct\-debug\-detailed\fR for more detailed control.
4420 .Sp
4421 This option works only with \s-1DWARF\s0 2.
4422 .IP "\fB\-femit\-struct\-debug\-reduced\fR" 4
4423 .IX Item "-femit-struct-debug-reduced"
4424 Emit debug information for struct-like types
4425 only when the base name of the compilation source file
4426 matches the base name of file in which the type was defined,
4427 unless the struct is a template or defined in a system header.
4428 .Sp
4429 This option significantly reduces the size of debugging information,
4430 with some potential loss in type information to the debugger.
4431 See \fB\-femit\-struct\-debug\-baseonly\fR for a more aggressive option.
4432 See \fB\-femit\-struct\-debug\-detailed\fR for more detailed control.
4433 .Sp
4434 This option works only with \s-1DWARF\s0 2.
4435 .IP "\fB\-femit\-struct\-debug\-detailed\fR[\fB=\fR\fIspec-list\fR]" 4
4436 .IX Item "-femit-struct-debug-detailed[=spec-list]"
4437 Specify the struct-like types
4438 for which the compiler will generate debug information.
4439 The intent is to reduce duplicate struct debug information
4440 between different object files within the same program.
4441 .Sp
4442 This option is a detailed version of
4443 \&\fB\-femit\-struct\-debug\-reduced\fR and \fB\-femit\-struct\-debug\-baseonly\fR,
4444 which will serve for most needs.
4445 .Sp
4446 A specification has the syntax[\fBdir:\fR|\fBind:\fR][\fBord:\fR|\fBgen:\fR](\fBany\fR|\fBsys\fR|\fBbase\fR|\fBnone\fR)
4447 .Sp
4448 The optional first word limits the specification to
4449 structs that are used directly (\fBdir:\fR) or used indirectly (\fBind:\fR).
4450 A struct type is used directly when it is the type of a variable, member.
4451 Indirect uses arise through pointers to structs.
4452 That is, when use of an incomplete struct would be legal, the use is indirect.
4453 An example is
4454 \&\fBstruct one direct; struct two * indirect;\fR.
4455 .Sp
4456 The optional second word limits the specification to
4457 ordinary structs (\fBord:\fR) or generic structs (\fBgen:\fR).
4458 Generic structs are a bit complicated to explain.
4459 For \*(C+, these are non-explicit specializations of template classes,
4460 or non-template classes within the above.
4461 Other programming languages have generics,
4462 but \fB\-femit\-struct\-debug\-detailed\fR does not yet implement them.
4463 .Sp
4464 The third word specifies the source files for those
4465 structs for which the compiler will emit debug information.
4466 The values \fBnone\fR and \fBany\fR have the normal meaning.
4467 The value \fBbase\fR means that
4468 the base of name of the file in which the type declaration appears
4469 must match the base of the name of the main compilation file.
4470 In practice, this means that
4471 types declared in \fIfoo.c\fR and \fIfoo.h\fR will have debug information,
4472 but types declared in other header will not.
4473 The value \fBsys\fR means those types satisfying \fBbase\fR
4474 or declared in system or compiler headers.
4475 .Sp
4476 You may need to experiment to determine the best settings for your application.
4477 .Sp
4478 The default is \fB\-femit\-struct\-debug\-detailed=all\fR.
4479 .Sp
4480 This option works only with \s-1DWARF\s0 2.
4481 .IP "\fB\-fno\-merge\-debug\-strings\fR" 4
4482 .IX Item "-fno-merge-debug-strings"
4483 Direct the linker to not merge together strings in the debugging
4484 information that are identical in different object files.  Merging is
4485 not supported by all assemblers or linkers.  Merging decreases the size
4486 of the debug information in the output file at the cost of increasing
4487 link processing time.  Merging is enabled by default.
4488 .IP "\fB\-fdebug\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR" 4
4489 .IX Item "-fdebug-prefix-map=old=new"
4490 When compiling files in directory \fI\fIold\fI\fR, record debugging
4491 information describing them as in \fI\fInew\fI\fR instead.
4492 .IP "\fB\-fno\-dwarf2\-cfi\-asm\fR" 4
4493 .IX Item "-fno-dwarf2-cfi-asm"
4494 Emit \s-1DWARF\s0 2 unwind info as compiler generated \f(CW\*(C`.eh_frame\*(C'\fR section
4495 instead of using \s-1GAS\s0 \f(CW\*(C`.cfi_*\*(C'\fR directives.
4496 .IP "\fB\-p\fR" 4
4497 .IX Item "-p"
4498 Generate extra code to write profile information suitable for the
4499 analysis program \fBprof\fR.  You must use this option when compiling
4500 the source files you want data about, and you must also use it when
4501 linking.
4502 .IP "\fB\-pg\fR" 4
4503 .IX Item "-pg"
4504 Generate extra code to write profile information suitable for the
4505 analysis program \fBgprof\fR.  You must use this option when compiling
4506 the source files you want data about, and you must also use it when
4507 linking.
4508 .IP "\fB\-Q\fR" 4
4509 .IX Item "-Q"
4510 Makes the compiler print out each function name as it is compiled, and
4511 print some statistics about each pass when it finishes.
4512 .IP "\fB\-ftime\-report\fR" 4
4513 .IX Item "-ftime-report"
4514 Makes the compiler print some statistics about the time consumed by each
4515 pass when it finishes.
4516 .IP "\fB\-fmem\-report\fR" 4
4517 .IX Item "-fmem-report"
4518 Makes the compiler print some statistics about permanent memory
4519 allocation when it finishes.
4520 .IP "\fB\-fpre\-ipa\-mem\-report\fR" 4
4521 .IX Item "-fpre-ipa-mem-report"
4522 .PD 0
4523 .IP "\fB\-fpost\-ipa\-mem\-report\fR" 4
4524 .IX Item "-fpost-ipa-mem-report"
4525 .PD
4526 Makes the compiler print some statistics about permanent memory
4527 allocation before or after interprocedural optimization.
4528 .IP "\fB\-fstack\-usage\fR" 4
4529 .IX Item "-fstack-usage"
4530 Makes the compiler output stack usage information for the program, on a
4531 per-function basis.  The filename for the dump is made by appending
4532 \&\fI.su\fR to the \fIauxname\fR.  \fIauxname\fR is generated from the name of
4533 the output file, if explicitly specified and it is not an executable,
4534 otherwise it is the basename of the source file.  An entry is made up
4535 of three fields:
4536 .RS 4
4537 .IP "\(bu" 4
4538 The name of the function.
4539 .IP "\(bu" 4
4540 A number of bytes.
4541 .IP "\(bu" 4
4542 One or more qualifiers: \f(CW\*(C`static\*(C'\fR, \f(CW\*(C`dynamic\*(C'\fR, \f(CW\*(C`bounded\*(C'\fR.
4543 .RE
4544 .RS 4
4545 .Sp
4546 The qualifier \f(CW\*(C`static\*(C'\fR means that the function manipulates the stack
4547 statically: a fixed number of bytes are allocated for the frame on function
4548 entry and released on function exit; no stack adjustments are otherwise made
4549 in the function.  The second field is this fixed number of bytes.
4550 .Sp
4551 The qualifier \f(CW\*(C`dynamic\*(C'\fR means that the function manipulates the stack
4552 dynamically: in addition to the static allocation described above, stack
4553 adjustments are made in the body of the function, for example to push/pop
4554 arguments around function calls.  If the qualifier \f(CW\*(C`bounded\*(C'\fR is also
4555 present, the amount of these adjustments is bounded at compile time and
4556 the second field is an upper bound of the total amount of stack used by
4557 the function.  If it is not present, the amount of these adjustments is
4558 not bounded at compile time and the second field only represents the
4559 bounded part.
4560 .RE
4561 .IP "\fB\-fprofile\-arcs\fR" 4
4562 .IX Item "-fprofile-arcs"
4563 Add code so that program flow \fIarcs\fR are instrumented.  During
4564 execution the program records how many times each branch and call is
4565 executed and how many times it is taken or returns.  When the compiled
4566 program exits it saves this data to a file called
4567 \&\fI\fIauxname\fI.gcda\fR for each source file.  The data may be used for
4568 profile-directed optimizations (\fB\-fbranch\-probabilities\fR), or for
4569 test coverage analysis (\fB\-ftest\-coverage\fR).  Each object file's
4570 \&\fIauxname\fR is generated from the name of the output file, if
4571 explicitly specified and it is not the final executable, otherwise it is
4572 the basename of the source file.  In both cases any suffix is removed
4573 (e.g. \fIfoo.gcda\fR for input file \fIdir/foo.c\fR, or
4574 \&\fIdir/foo.gcda\fR for output file specified as \fB\-o dir/foo.o\fR).
4575 .IP "\fB\-\-coverage\fR" 4
4576 .IX Item "--coverage"
4577 This option is used to compile and link code instrumented for coverage
4578 analysis.  The option is a synonym for \fB\-fprofile\-arcs\fR
4579 \&\fB\-ftest\-coverage\fR (when compiling) and \fB\-lgcov\fR (when
4580 linking).  See the documentation for those options for more details.
4581 .RS 4
4582 .IP "\(bu" 4
4583 Compile the source files with \fB\-fprofile\-arcs\fR plus optimization
4584 and code generation options.  For test coverage analysis, use the
4585 additional \fB\-ftest\-coverage\fR option.  You do not need to profile
4586 every source file in a program.
4587 .IP "\(bu" 4
4588 Link your object files with \fB\-lgcov\fR or \fB\-fprofile\-arcs\fR
4589 (the latter implies the former).
4590 .IP "\(bu" 4
4591 Run the program on a representative workload to generate the arc profile
4592 information.  This may be repeated any number of times.  You can run
4593 concurrent instances of your program, and provided that the file system
4594 supports locking, the data files will be correctly updated.  Also
4595 \&\f(CW\*(C`fork\*(C'\fR calls are detected and correctly handled (double counting
4596 will not happen).
4597 .IP "\(bu" 4
4598 For profile-directed optimizations, compile the source files again with
4599 the same optimization and code generation options plus
4600 \&\fB\-fbranch\-probabilities\fR.
4601 .IP "\(bu" 4
4602 For test coverage analysis, use \fBgcov\fR to produce human readable
4603 information from the \fI.gcno\fR and \fI.gcda\fR files.  Refer to the
4604 \&\fBgcov\fR documentation for further information.
4605 .RE
4606 .RS 4
4607 .Sp
4608 With \fB\-fprofile\-arcs\fR, for each function of your program \s-1GCC\s0
4609 creates a program flow graph, then finds a spanning tree for the graph.
4610 Only arcs that are not on the spanning tree have to be instrumented: the
4611 compiler adds code to count the number of times that these arcs are
4612 executed.  When an arc is the only exit or only entrance to a block, the
4613 instrumentation code can be added to the block; otherwise, a new basic
4614 block must be created to hold the instrumentation code.
4615 .RE
4616 .IP "\fB\-ftest\-coverage\fR" 4
4617 .IX Item "-ftest-coverage"
4618 Produce a notes file that the \fBgcov\fR code-coverage utility can use to
4619 show program coverage.  Each source file's note file is called
4620 \&\fI\fIauxname\fI.gcno\fR.  Refer to the \fB\-fprofile\-arcs\fR option
4621 above for a description of \fIauxname\fR and instructions on how to
4622 generate test coverage data.  Coverage data will match the source files
4623 more closely, if you do not optimize.
4624 .IP "\fB\-fdbg\-cnt\-list\fR" 4
4625 .IX Item "-fdbg-cnt-list"
4626 Print the name and the counter upper bound for all debug counters.
4627 .IP "\fB\-fdbg\-cnt=\fR\fIcounter-value-list\fR" 4
4628 .IX Item "-fdbg-cnt=counter-value-list"
4629 Set the internal debug counter upper bound.  \fIcounter-value-list\fR
4630 is a comma-separated list of \fIname\fR:\fIvalue\fR pairs
4631 which sets the upper bound of each debug counter \fIname\fR to \fIvalue\fR.
4632 All debug counters have the initial upper bound of \fI\s-1UINT_MAX\s0\fR,
4633 thus \fIdbg_cnt()\fR returns true always unless the upper bound is set by this option.
4634 e.g. With \-fdbg\-cnt=dce:10,tail_call:0
4635 dbg_cnt(dce) will return true only for first 10 invocations
4636 .IP "\fB\-fenable\-\fR\fIkind\fR\fB\-\fR\fIpass\fR" 4
4637 .IX Item "-fenable-kind-pass"
4638 .PD 0
4639 .IP "\fB\-fdisable\-\fR\fIkind\fR\fB\-\fR\fIpass\fR\fB=\fR\fIrange-list\fR" 4
4640 .IX Item "-fdisable-kind-pass=range-list"
4641 .PD
4642 This is a set of debugging options that are used to explicitly disable/enable
4643 optimization passes. For compiler users, regular options for enabling/disabling
4644 passes should be used instead.
4645 .RS 4
4646 .IP "*<\-fdisable\-ipa\-\fIpass\fR>" 4
4647 .IX Item "*<-fdisable-ipa-pass>"
4648 Disable ipa pass \fIpass\fR. \fIpass\fR is the pass name.  If the same pass is
4649 statically invoked in the compiler multiple times, the pass name should be
4650 appended with a sequential number starting from 1.
4651 .IP "*<\-fdisable\-rtl\-\fIpass\fR>" 4
4652 .IX Item "*<-fdisable-rtl-pass>"
4653 .PD 0
4654 .IP "*<\-fdisable\-rtl\-\fIpass\fR=\fIrange-list\fR>" 4
4655 .IX Item "*<-fdisable-rtl-pass=range-list>"
4656 .PD
4657 Disable rtl pass \fIpass\fR.  \fIpass\fR is the pass name.  If the same pass is
4658 statically invoked in the compiler multiple times, the pass name should be
4659 appended with a sequential number starting from 1.  \fIrange-list\fR is a comma
4660 seperated list of function ranges or assembler names.  Each range is a number
4661 pair seperated by a colon.  The range is inclusive in both ends.  If the range
4662 is trivial, the number pair can be simplified as a single number.  If the
4663 function's cgraph node's \fIuid\fR is falling within one of the specified ranges,
4664 the \fIpass\fR is disabled for that function.  The \fIuid\fR is shown in the
4665 function header of a dump file, and the pass names can be dumped by using
4666 option \fB\-fdump\-passes\fR.
4667 .IP "*<\-fdisable\-tree\-\fIpass\fR>" 4
4668 .IX Item "*<-fdisable-tree-pass>"
4669 .PD 0
4670 .IP "*<\-fdisable\-tree\-\fIpass\fR=\fIrange-list\fR>" 4
4671 .IX Item "*<-fdisable-tree-pass=range-list>"
4672 .PD
4673 Disable tree pass \fIpass\fR.  See \fB\-fdisable\-rtl\fR for the description of
4674 option arguments.
4675 .IP "*<\-fenable\-ipa\-\fIpass\fR>" 4
4676 .IX Item "*<-fenable-ipa-pass>"
4677 Enable ipa pass \fIpass\fR.  \fIpass\fR is the pass name.  If the same pass is
4678 statically invoked in the compiler multiple times, the pass name should be
4679 appended with a sequential number starting from 1.
4680 .IP "*<\-fenable\-rtl\-\fIpass\fR>" 4
4681 .IX Item "*<-fenable-rtl-pass>"
4682 .PD 0
4683 .IP "*<\-fenable\-rtl\-\fIpass\fR=\fIrange-list\fR>" 4
4684 .IX Item "*<-fenable-rtl-pass=range-list>"
4685 .PD
4686 Enable rtl pass \fIpass\fR.  See \fB\-fdisable\-rtl\fR for option argument
4687 description and examples.
4688 .IP "*<\-fenable\-tree\-\fIpass\fR>" 4
4689 .IX Item "*<-fenable-tree-pass>"
4690 .PD 0
4691 .IP "*<\-fenable\-tree\-\fIpass\fR=\fIrange-list\fR>" 4
4692 .IX Item "*<-fenable-tree-pass=range-list>"
4693 .PD
4694 Enable tree pass \fIpass\fR.  See \fB\-fdisable\-rtl\fR for the description
4695 of option arguments.
4696 .Sp
4697 .Vb 10
4698 \&        # disable ccp1 for all functions
4699 \&           \-fdisable\-tree\-ccp1
4700 \&        # disable complete unroll for function whose cgraph node uid is 1
4701 \&           \-fenable\-tree\-cunroll=1
4702 \&        # disable gcse2 for functions at the following ranges [1,1],
4703 \&        # [300,400], and [400,1000]
4704 \&        # disable gcse2 for functions foo and foo2
4705 \&           \-fdisable\-rtl\-gcse2=foo,foo2
4706 \&        # disable early inlining
4707 \&           \-fdisable\-tree\-einline
4708 \&        # disable ipa inlining
4709 \&           \-fdisable\-ipa\-inline
4710 \&        # enable tree full unroll
4711 \&           \-fenable\-tree\-unroll
4712 .Ve
4713 .RE
4714 .RS 4
4715 .RE
4716 .IP "\fB\-d\fR\fIletters\fR" 4
4717 .IX Item "-dletters"
4718 .PD 0
4719 .IP "\fB\-fdump\-rtl\-\fR\fIpass\fR" 4
4720 .IX Item "-fdump-rtl-pass"
4721 .PD
4722 Says to make debugging dumps during compilation at times specified by
4723 \&\fIletters\fR.  This is used for debugging the RTL-based passes of the
4724 compiler.  The file names for most of the dumps are made by appending
4725 a pass number and a word to the \fIdumpname\fR, and the files are
4726 created in the directory of the output file.  Note that the pass
4727 number is computed statically as passes get registered into the pass
4728 manager.  Thus the numbering is not related to the dynamic order of
4729 execution of passes.  In particular, a pass installed by a plugin
4730 could have a number over 200 even if it executed quite early.
4731 \&\fIdumpname\fR is generated from the name of the output file, if
4732 explicitly specified and it is not an executable, otherwise it is the
4733 basename of the source file. These switches may have different effects
4734 when \fB\-E\fR is used for preprocessing.
4735 .Sp
4736 Debug dumps can be enabled with a \fB\-fdump\-rtl\fR switch or some
4737 \&\fB\-d\fR option \fIletters\fR.  Here are the possible
4738 letters for use in \fIpass\fR and \fIletters\fR, and their meanings:
4739 .RS 4
4740 .IP "\fB\-fdump\-rtl\-alignments\fR" 4
4741 .IX Item "-fdump-rtl-alignments"
4742 Dump after branch alignments have been computed.
4743 .IP "\fB\-fdump\-rtl\-asmcons\fR" 4
4744 .IX Item "-fdump-rtl-asmcons"
4745 Dump after fixing rtl statements that have unsatisfied in/out constraints.
4746 .IP "\fB\-fdump\-rtl\-auto_inc_dec\fR" 4
4747 .IX Item "-fdump-rtl-auto_inc_dec"
4748 Dump after auto-inc-dec discovery.  This pass is only run on
4749 architectures that have auto inc or auto dec instructions.
4750 .IP "\fB\-fdump\-rtl\-barriers\fR" 4
4751 .IX Item "-fdump-rtl-barriers"
4752 Dump after cleaning up the barrier instructions.
4753 .IP "\fB\-fdump\-rtl\-bbpart\fR" 4
4754 .IX Item "-fdump-rtl-bbpart"
4755 Dump after partitioning hot and cold basic blocks.
4756 .IP "\fB\-fdump\-rtl\-bbro\fR" 4
4757 .IX Item "-fdump-rtl-bbro"
4758 Dump after block reordering.
4759 .IP "\fB\-fdump\-rtl\-btl1\fR" 4
4760 .IX Item "-fdump-rtl-btl1"
4761 .PD 0
4762 .IP "\fB\-fdump\-rtl\-btl2\fR" 4
4763 .IX Item "-fdump-rtl-btl2"
4764 .PD
4765 \&\fB\-fdump\-rtl\-btl1\fR and \fB\-fdump\-rtl\-btl2\fR enable dumping
4766 after the two branch
4767 target load optimization passes.
4768 .IP "\fB\-fdump\-rtl\-bypass\fR" 4
4769 .IX Item "-fdump-rtl-bypass"
4770 Dump after jump bypassing and control flow optimizations.
4771 .IP "\fB\-fdump\-rtl\-combine\fR" 4
4772 .IX Item "-fdump-rtl-combine"
4773 Dump after the \s-1RTL\s0 instruction combination pass.
4774 .IP "\fB\-fdump\-rtl\-compgotos\fR" 4
4775 .IX Item "-fdump-rtl-compgotos"
4776 Dump after duplicating the computed gotos.
4777 .IP "\fB\-fdump\-rtl\-ce1\fR" 4
4778 .IX Item "-fdump-rtl-ce1"
4779 .PD 0
4780 .IP "\fB\-fdump\-rtl\-ce2\fR" 4
4781 .IX Item "-fdump-rtl-ce2"
4782 .IP "\fB\-fdump\-rtl\-ce3\fR" 4
4783 .IX Item "-fdump-rtl-ce3"
4784 .PD
4785 \&\fB\-fdump\-rtl\-ce1\fR, \fB\-fdump\-rtl\-ce2\fR, and
4786 \&\fB\-fdump\-rtl\-ce3\fR enable dumping after the three
4787 if conversion passes.
4788 .IP "\fB\-fdump\-rtl\-cprop_hardreg\fR" 4
4789 .IX Item "-fdump-rtl-cprop_hardreg"
4790 Dump after hard register copy propagation.
4791 .IP "\fB\-fdump\-rtl\-csa\fR" 4
4792 .IX Item "-fdump-rtl-csa"
4793 Dump after combining stack adjustments.
4794 .IP "\fB\-fdump\-rtl\-cse1\fR" 4
4795 .IX Item "-fdump-rtl-cse1"
4796 .PD 0
4797 .IP "\fB\-fdump\-rtl\-cse2\fR" 4
4798 .IX Item "-fdump-rtl-cse2"
4799 .PD
4800 \&\fB\-fdump\-rtl\-cse1\fR and \fB\-fdump\-rtl\-cse2\fR enable dumping after
4801 the two common sub-expression elimination passes.
4802 .IP "\fB\-fdump\-rtl\-dce\fR" 4
4803 .IX Item "-fdump-rtl-dce"
4804 Dump after the standalone dead code elimination passes.
4805 .IP "\fB\-fdump\-rtl\-dbr\fR" 4
4806 .IX Item "-fdump-rtl-dbr"
4807 Dump after delayed branch scheduling.
4808 .IP "\fB\-fdump\-rtl\-dce1\fR" 4
4809 .IX Item "-fdump-rtl-dce1"
4810 .PD 0
4811 .IP "\fB\-fdump\-rtl\-dce2\fR" 4
4812 .IX Item "-fdump-rtl-dce2"
4813 .PD
4814 \&\fB\-fdump\-rtl\-dce1\fR and \fB\-fdump\-rtl\-dce2\fR enable dumping after
4815 the two dead store elimination passes.
4816 .IP "\fB\-fdump\-rtl\-eh\fR" 4
4817 .IX Item "-fdump-rtl-eh"
4818 Dump after finalization of \s-1EH\s0 handling code.
4819 .IP "\fB\-fdump\-rtl\-eh_ranges\fR" 4
4820 .IX Item "-fdump-rtl-eh_ranges"
4821 Dump after conversion of \s-1EH\s0 handling range regions.
4822 .IP "\fB\-fdump\-rtl\-expand\fR" 4
4823 .IX Item "-fdump-rtl-expand"
4824 Dump after \s-1RTL\s0 generation.
4825 .IP "\fB\-fdump\-rtl\-fwprop1\fR" 4
4826 .IX Item "-fdump-rtl-fwprop1"
4827 .PD 0
4828 .IP "\fB\-fdump\-rtl\-fwprop2\fR" 4
4829 .IX Item "-fdump-rtl-fwprop2"
4830 .PD
4831 \&\fB\-fdump\-rtl\-fwprop1\fR and \fB\-fdump\-rtl\-fwprop2\fR enable
4832 dumping after the two forward propagation passes.
4833 .IP "\fB\-fdump\-rtl\-gcse1\fR" 4
4834 .IX Item "-fdump-rtl-gcse1"
4835 .PD 0
4836 .IP "\fB\-fdump\-rtl\-gcse2\fR" 4
4837 .IX Item "-fdump-rtl-gcse2"
4838 .PD
4839 \&\fB\-fdump\-rtl\-gcse1\fR and \fB\-fdump\-rtl\-gcse2\fR enable dumping
4840 after global common subexpression elimination.
4841 .IP "\fB\-fdump\-rtl\-init\-regs\fR" 4
4842 .IX Item "-fdump-rtl-init-regs"
4843 Dump after the initialization of the registers.
4844 .IP "\fB\-fdump\-rtl\-initvals\fR" 4
4845 .IX Item "-fdump-rtl-initvals"
4846 Dump after the computation of the initial value sets.
4847 .IP "\fB\-fdump\-rtl\-into_cfglayout\fR" 4
4848 .IX Item "-fdump-rtl-into_cfglayout"
4849 Dump after converting to cfglayout mode.
4850 .IP "\fB\-fdump\-rtl\-ira\fR" 4
4851 .IX Item "-fdump-rtl-ira"
4852 Dump after iterated register allocation.
4853 .IP "\fB\-fdump\-rtl\-jump\fR" 4
4854 .IX Item "-fdump-rtl-jump"
4855 Dump after the second jump optimization.
4856 .IP "\fB\-fdump\-rtl\-loop2\fR" 4
4857 .IX Item "-fdump-rtl-loop2"
4858 \&\fB\-fdump\-rtl\-loop2\fR enables dumping after the rtl
4859 loop optimization passes.
4860 .IP "\fB\-fdump\-rtl\-mach\fR" 4
4861 .IX Item "-fdump-rtl-mach"
4862 Dump after performing the machine dependent reorganization pass, if that
4863 pass exists.
4864 .IP "\fB\-fdump\-rtl\-mode_sw\fR" 4
4865 .IX Item "-fdump-rtl-mode_sw"
4866 Dump after removing redundant mode switches.
4867 .IP "\fB\-fdump\-rtl\-rnreg\fR" 4
4868 .IX Item "-fdump-rtl-rnreg"
4869 Dump after register renumbering.
4870 .IP "\fB\-fdump\-rtl\-outof_cfglayout\fR" 4
4871 .IX Item "-fdump-rtl-outof_cfglayout"
4872 Dump after converting from cfglayout mode.
4873 .IP "\fB\-fdump\-rtl\-peephole2\fR" 4
4874 .IX Item "-fdump-rtl-peephole2"
4875 Dump after the peephole pass.
4876 .IP "\fB\-fdump\-rtl\-postreload\fR" 4
4877 .IX Item "-fdump-rtl-postreload"
4878 Dump after post-reload optimizations.
4879 .IP "\fB\-fdump\-rtl\-pro_and_epilogue\fR" 4
4880 .IX Item "-fdump-rtl-pro_and_epilogue"
4881 Dump after generating the function prologues and epilogues.
4882 .IP "\fB\-fdump\-rtl\-regmove\fR" 4
4883 .IX Item "-fdump-rtl-regmove"
4884 Dump after the register move pass.
4885 .IP "\fB\-fdump\-rtl\-sched1\fR" 4
4886 .IX Item "-fdump-rtl-sched1"
4887 .PD 0
4888 .IP "\fB\-fdump\-rtl\-sched2\fR" 4
4889 .IX Item "-fdump-rtl-sched2"
4890 .PD
4891 \&\fB\-fdump\-rtl\-sched1\fR and \fB\-fdump\-rtl\-sched2\fR enable dumping
4892 after the basic block scheduling passes.
4893 .IP "\fB\-fdump\-rtl\-see\fR" 4
4894 .IX Item "-fdump-rtl-see"
4895 Dump after sign extension elimination.
4896 .IP "\fB\-fdump\-rtl\-seqabstr\fR" 4
4897 .IX Item "-fdump-rtl-seqabstr"
4898 Dump after common sequence discovery.
4899 .IP "\fB\-fdump\-rtl\-shorten\fR" 4
4900 .IX Item "-fdump-rtl-shorten"
4901 Dump after shortening branches.
4902 .IP "\fB\-fdump\-rtl\-sibling\fR" 4
4903 .IX Item "-fdump-rtl-sibling"
4904 Dump after sibling call optimizations.
4905 .IP "\fB\-fdump\-rtl\-split1\fR" 4
4906 .IX Item "-fdump-rtl-split1"
4907 .PD 0
4908 .IP "\fB\-fdump\-rtl\-split2\fR" 4
4909 .IX Item "-fdump-rtl-split2"
4910 .IP "\fB\-fdump\-rtl\-split3\fR" 4
4911 .IX Item "-fdump-rtl-split3"
4912 .IP "\fB\-fdump\-rtl\-split4\fR" 4
4913 .IX Item "-fdump-rtl-split4"
4914 .IP "\fB\-fdump\-rtl\-split5\fR" 4
4915 .IX Item "-fdump-rtl-split5"
4916 .PD
4917 \&\fB\-fdump\-rtl\-split1\fR, \fB\-fdump\-rtl\-split2\fR,
4918 \&\fB\-fdump\-rtl\-split3\fR, \fB\-fdump\-rtl\-split4\fR and
4919 \&\fB\-fdump\-rtl\-split5\fR enable dumping after five rounds of
4920 instruction splitting.
4921 .IP "\fB\-fdump\-rtl\-sms\fR" 4
4922 .IX Item "-fdump-rtl-sms"
4923 Dump after modulo scheduling.  This pass is only run on some
4924 architectures.
4925 .IP "\fB\-fdump\-rtl\-stack\fR" 4
4926 .IX Item "-fdump-rtl-stack"
4927 Dump after conversion from \s-1GCC\s0's \*(L"flat register file\*(R" registers to the
4928 x87's stack-like registers.  This pass is only run on x86 variants.
4929 .IP "\fB\-fdump\-rtl\-subreg1\fR" 4
4930 .IX Item "-fdump-rtl-subreg1"
4931 .PD 0
4932 .IP "\fB\-fdump\-rtl\-subreg2\fR" 4
4933 .IX Item "-fdump-rtl-subreg2"
4934 .PD
4935 \&\fB\-fdump\-rtl\-subreg1\fR and \fB\-fdump\-rtl\-subreg2\fR enable dumping after
4936 the two subreg expansion passes.
4937 .IP "\fB\-fdump\-rtl\-unshare\fR" 4
4938 .IX Item "-fdump-rtl-unshare"
4939 Dump after all rtl has been unshared.
4940 .IP "\fB\-fdump\-rtl\-vartrack\fR" 4
4941 .IX Item "-fdump-rtl-vartrack"
4942 Dump after variable tracking.
4943 .IP "\fB\-fdump\-rtl\-vregs\fR" 4
4944 .IX Item "-fdump-rtl-vregs"
4945 Dump after converting virtual registers to hard registers.
4946 .IP "\fB\-fdump\-rtl\-web\fR" 4
4947 .IX Item "-fdump-rtl-web"
4948 Dump after live range splitting.
4949 .IP "\fB\-fdump\-rtl\-regclass\fR" 4
4950 .IX Item "-fdump-rtl-regclass"
4951 .PD 0
4952 .IP "\fB\-fdump\-rtl\-subregs_of_mode_init\fR" 4
4953 .IX Item "-fdump-rtl-subregs_of_mode_init"
4954 .IP "\fB\-fdump\-rtl\-subregs_of_mode_finish\fR" 4
4955 .IX Item "-fdump-rtl-subregs_of_mode_finish"
4956 .IP "\fB\-fdump\-rtl\-dfinit\fR" 4
4957 .IX Item "-fdump-rtl-dfinit"
4958 .IP "\fB\-fdump\-rtl\-dfinish\fR" 4
4959 .IX Item "-fdump-rtl-dfinish"
4960 .PD
4961 These dumps are defined but always produce empty files.
4962 .IP "\fB\-da\fR" 4
4963 .IX Item "-da"
4964 .PD 0
4965 .IP "\fB\-fdump\-rtl\-all\fR" 4
4966 .IX Item "-fdump-rtl-all"
4967 .PD
4968 Produce all the dumps listed above.
4969 .IP "\fB\-dA\fR" 4
4970 .IX Item "-dA"
4971 Annotate the assembler output with miscellaneous debugging information.
4972 .IP "\fB\-dD\fR" 4
4973 .IX Item "-dD"
4974 Dump all macro definitions, at the end of preprocessing, in addition to
4975 normal output.
4976 .IP "\fB\-dH\fR" 4
4977 .IX Item "-dH"
4978 Produce a core dump whenever an error occurs.
4979 .IP "\fB\-dp\fR" 4
4980 .IX Item "-dp"
4981 Annotate the assembler output with a comment indicating which
4982 pattern and alternative was used.  The length of each instruction is
4983 also printed.
4984 .IP "\fB\-dP\fR" 4
4985 .IX Item "-dP"
4986 Dump the \s-1RTL\s0 in the assembler output as a comment before each instruction.
4987 Also turns on \fB\-dp\fR annotation.
4988 .IP "\fB\-dv\fR" 4
4989 .IX Item "-dv"
4990 For each of the other indicated dump files (\fB\-fdump\-rtl\-\fR\fIpass\fR),
4991 dump a representation of the control flow graph suitable for viewing with \s-1VCG\s0
4992 to \fI\fIfile\fI.\fIpass\fI.vcg\fR.
4993 .IP "\fB\-dx\fR" 4
4994 .IX Item "-dx"
4995 Just generate \s-1RTL\s0 for a function instead of compiling it.  Usually used
4996 with \fB\-fdump\-rtl\-expand\fR.
4997 .RE
4998 .RS 4
4999 .RE
5000 .IP "\fB\-fdump\-noaddr\fR" 4
5001 .IX Item "-fdump-noaddr"
5002 When doing debugging dumps, suppress address output.  This makes it more
5003 feasible to use diff on debugging dumps for compiler invocations with
5004 different compiler binaries and/or different
5005 text / bss / data / heap / stack / dso start locations.
5006 .IP "\fB\-fdump\-unnumbered\fR" 4
5007 .IX Item "-fdump-unnumbered"
5008 When doing debugging dumps, suppress instruction numbers and address output.
5009 This makes it more feasible to use diff on debugging dumps for compiler
5010 invocations with different options, in particular with and without
5011 \&\fB\-g\fR.
5012 .IP "\fB\-fdump\-unnumbered\-links\fR" 4
5013 .IX Item "-fdump-unnumbered-links"
5014 When doing debugging dumps (see \fB\-d\fR option above), suppress
5015 instruction numbers for the links to the previous and next instructions
5016 in a sequence.
5017 .IP "\fB\-fdump\-translation\-unit\fR (\*(C+ only)" 4
5018 .IX Item "-fdump-translation-unit ( only)"
5019 .PD 0
5020 .IP "\fB\-fdump\-translation\-unit\-\fR\fIoptions\fR\fB \fR(\*(C+ only)" 4
5021 .IX Item "-fdump-translation-unit-options ( only)"
5022 .PD
5023 Dump a representation of the tree structure for the entire translation
5024 unit to a file.  The file name is made by appending \fI.tu\fR to the
5025 source file name, and the file is created in the same directory as the
5026 output file.  If the \fB\-\fR\fIoptions\fR form is used, \fIoptions\fR
5027 controls the details of the dump as described for the
5028 \&\fB\-fdump\-tree\fR options.
5029 .IP "\fB\-fdump\-class\-hierarchy\fR (\*(C+ only)" 4
5030 .IX Item "-fdump-class-hierarchy ( only)"
5031 .PD 0
5032 .IP "\fB\-fdump\-class\-hierarchy\-\fR\fIoptions\fR\fB \fR(\*(C+ only)" 4
5033 .IX Item "-fdump-class-hierarchy-options ( only)"
5034 .PD
5035 Dump a representation of each class's hierarchy and virtual function
5036 table layout to a file.  The file name is made by appending
5037 \&\fI.class\fR to the source file name, and the file is created in the
5038 same directory as the output file.  If the \fB\-\fR\fIoptions\fR form
5039 is used, \fIoptions\fR controls the details of the dump as described
5040 for the \fB\-fdump\-tree\fR options.
5041 .IP "\fB\-fdump\-ipa\-\fR\fIswitch\fR" 4
5042 .IX Item "-fdump-ipa-switch"
5043 Control the dumping at various stages of inter-procedural analysis
5044 language tree to a file.  The file name is generated by appending a
5045 switch specific suffix to the source file name, and the file is created
5046 in the same directory as the output file.  The following dumps are
5047 possible:
5048 .RS 4
5049 .IP "\fBall\fR" 4
5050 .IX Item "all"
5051 Enables all inter-procedural analysis dumps.
5052 .IP "\fBcgraph\fR" 4
5053 .IX Item "cgraph"
5054 Dumps information about call-graph optimization, unused function removal,
5055 and inlining decisions.
5056 .IP "\fBinline\fR" 4
5057 .IX Item "inline"
5058 Dump after function inlining.
5059 .RE
5060 .RS 4
5061 .RE
5062 .IP "\fB\-fdump\-passes\fR" 4
5063 .IX Item "-fdump-passes"
5064 Dump the list of optimization passes that are turned on and off by
5065 the current command-line options.
5066 .IP "\fB\-fdump\-statistics\-\fR\fIoption\fR" 4
5067 .IX Item "-fdump-statistics-option"
5068 Enable and control dumping of pass statistics in a separate file.  The
5069 file name is generated by appending a suffix ending in
5070 \&\fB.statistics\fR to the source file name, and the file is created in
5071 the same directory as the output file.  If the \fB\-\fR\fIoption\fR
5072 form is used, \fB\-stats\fR will cause counters to be summed over the
5073 whole compilation unit while \fB\-details\fR will dump every event as
5074 the passes generate them.  The default with no option is to sum
5075 counters for each function compiled.
5076 .IP "\fB\-fdump\-tree\-\fR\fIswitch\fR" 4
5077 .IX Item "-fdump-tree-switch"
5078 .PD 0
5079 .IP "\fB\-fdump\-tree\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR" 4
5080 .IX Item "-fdump-tree-switch-options"
5081 .PD
5082 Control the dumping at various stages of processing the intermediate
5083 language tree to a file.  The file name is generated by appending a
5084 switch specific suffix to the source file name, and the file is
5085 created in the same directory as the output file.  If the
5086 \&\fB\-\fR\fIoptions\fR form is used, \fIoptions\fR is a list of
5087 \&\fB\-\fR separated options which control the details of the dump.  Not
5088 all options are applicable to all dumps; those that are not
5089 meaningful will be ignored.  The following options are available
5090 .RS 4
5091 .IP "\fBaddress\fR" 4
5092 .IX Item "address"
5093 Print the address of each node.  Usually this is not meaningful as it
5094 changes according to the environment and source file.  Its primary use
5095 is for tying up a dump file with a debug environment.
5096 .IP "\fBasmname\fR" 4
5097 .IX Item "asmname"
5098 If \f(CW\*(C`DECL_ASSEMBLER_NAME\*(C'\fR has been set for a given decl, use that
5099 in the dump instead of \f(CW\*(C`DECL_NAME\*(C'\fR.  Its primary use is ease of
5100 use working backward from mangled names in the assembly file.
5101 .IP "\fBslim\fR" 4
5102 .IX Item "slim"
5103 Inhibit dumping of members of a scope or body of a function merely
5104 because that scope has been reached.  Only dump such items when they
5105 are directly reachable by some other path.  When dumping pretty-printed
5106 trees, this option inhibits dumping the bodies of control structures.
5107 .IP "\fBraw\fR" 4
5108 .IX Item "raw"
5109 Print a raw representation of the tree.  By default, trees are
5110 pretty-printed into a C\-like representation.
5111 .IP "\fBdetails\fR" 4
5112 .IX Item "details"
5113 Enable more detailed dumps (not honored by every dump option).
5114 .IP "\fBstats\fR" 4
5115 .IX Item "stats"
5116 Enable dumping various statistics about the pass (not honored by every dump
5117 option).
5118 .IP "\fBblocks\fR" 4
5119 .IX Item "blocks"
5120 Enable showing basic block boundaries (disabled in raw dumps).
5121 .IP "\fBvops\fR" 4
5122 .IX Item "vops"
5123 Enable showing virtual operands for every statement.
5124 .IP "\fBlineno\fR" 4
5125 .IX Item "lineno"
5126 Enable showing line numbers for statements.
5127 .IP "\fBuid\fR" 4
5128 .IX Item "uid"
5129 Enable showing the unique \s-1ID\s0 (\f(CW\*(C`DECL_UID\*(C'\fR) for each variable.
5130 .IP "\fBverbose\fR" 4
5131 .IX Item "verbose"
5132 Enable showing the tree dump for each statement.
5133 .IP "\fBeh\fR" 4
5134 .IX Item "eh"
5135 Enable showing the \s-1EH\s0 region number holding each statement.
5136 .IP "\fBscev\fR" 4
5137 .IX Item "scev"
5138 Enable showing scalar evolution analysis details.
5139 .IP "\fBall\fR" 4
5140 .IX Item "all"
5141 Turn on all options, except \fBraw\fR, \fBslim\fR, \fBverbose\fR
5142 and \fBlineno\fR.
5143 .RE
5144 .RS 4
5145 .Sp
5146 The following tree dumps are possible:
5147 .IP "\fBoriginal\fR" 4
5148 .IX Item "original"
5149 Dump before any tree based optimization, to \fI\fIfile\fI.original\fR.
5150 .IP "\fBoptimized\fR" 4
5151 .IX Item "optimized"
5152 Dump after all tree based optimization, to \fI\fIfile\fI.optimized\fR.
5153 .IP "\fBgimple\fR" 4
5154 .IX Item "gimple"
5155 Dump each function before and after the gimplification pass to a file.  The
5156 file name is made by appending \fI.gimple\fR to the source file name.
5157 .IP "\fBcfg\fR" 4
5158 .IX Item "cfg"
5159 Dump the control flow graph of each function to a file.  The file name is
5160 made by appending \fI.cfg\fR to the source file name.
5161 .IP "\fBvcg\fR" 4
5162 .IX Item "vcg"
5163 Dump the control flow graph of each function to a file in \s-1VCG\s0 format.  The
5164 file name is made by appending \fI.vcg\fR to the source file name.  Note
5165 that if the file contains more than one function, the generated file cannot
5166 be used directly by \s-1VCG\s0.  You will need to cut and paste each function's
5167 graph into its own separate file first.
5168 .IP "\fBch\fR" 4
5169 .IX Item "ch"
5170 Dump each function after copying loop headers.  The file name is made by
5171 appending \fI.ch\fR to the source file name.
5172 .IP "\fBssa\fR" 4
5173 .IX Item "ssa"
5174 Dump \s-1SSA\s0 related information to a file.  The file name is made by appending
5175 \&\fI.ssa\fR to the source file name.
5176 .IP "\fBalias\fR" 4
5177 .IX Item "alias"
5178 Dump aliasing information for each function.  The file name is made by
5179 appending \fI.alias\fR to the source file name.
5180 .IP "\fBccp\fR" 4
5181 .IX Item "ccp"
5182 Dump each function after \s-1CCP\s0.  The file name is made by appending
5183 \&\fI.ccp\fR to the source file name.
5184 .IP "\fBstoreccp\fR" 4
5185 .IX Item "storeccp"
5186 Dump each function after STORE-CCP.  The file name is made by appending
5187 \&\fI.storeccp\fR to the source file name.
5188 .IP "\fBpre\fR" 4
5189 .IX Item "pre"
5190 Dump trees after partial redundancy elimination.  The file name is made
5191 by appending \fI.pre\fR to the source file name.
5192 .IP "\fBfre\fR" 4
5193 .IX Item "fre"
5194 Dump trees after full redundancy elimination.  The file name is made
5195 by appending \fI.fre\fR to the source file name.
5196 .IP "\fBcopyprop\fR" 4
5197 .IX Item "copyprop"
5198 Dump trees after copy propagation.  The file name is made
5199 by appending \fI.copyprop\fR to the source file name.
5200 .IP "\fBstore_copyprop\fR" 4
5201 .IX Item "store_copyprop"
5202 Dump trees after store copy-propagation.  The file name is made
5203 by appending \fI.store_copyprop\fR to the source file name.
5204 .IP "\fBdce\fR" 4
5205 .IX Item "dce"
5206 Dump each function after dead code elimination.  The file name is made by
5207 appending \fI.dce\fR to the source file name.
5208 .IP "\fBmudflap\fR" 4
5209 .IX Item "mudflap"
5210 Dump each function after adding mudflap instrumentation.  The file name is
5211 made by appending \fI.mudflap\fR to the source file name.
5212 .IP "\fBsra\fR" 4
5213 .IX Item "sra"
5214 Dump each function after performing scalar replacement of aggregates.  The
5215 file name is made by appending \fI.sra\fR to the source file name.
5216 .IP "\fBsink\fR" 4
5217 .IX Item "sink"
5218 Dump each function after performing code sinking.  The file name is made
5219 by appending \fI.sink\fR to the source file name.
5220 .IP "\fBdom\fR" 4
5221 .IX Item "dom"
5222 Dump each function after applying dominator tree optimizations.  The file
5223 name is made by appending \fI.dom\fR to the source file name.
5224 .IP "\fBdse\fR" 4
5225 .IX Item "dse"
5226 Dump each function after applying dead store elimination.  The file
5227 name is made by appending \fI.dse\fR to the source file name.
5228 .IP "\fBphiopt\fR" 4
5229 .IX Item "phiopt"
5230 Dump each function after optimizing \s-1PHI\s0 nodes into straightline code.  The file
5231 name is made by appending \fI.phiopt\fR to the source file name.
5232 .IP "\fBforwprop\fR" 4
5233 .IX Item "forwprop"
5234 Dump each function after forward propagating single use variables.  The file
5235 name is made by appending \fI.forwprop\fR to the source file name.
5236 .IP "\fBcopyrename\fR" 4
5237 .IX Item "copyrename"
5238 Dump each function after applying the copy rename optimization.  The file
5239 name is made by appending \fI.copyrename\fR to the source file name.
5240 .IP "\fBnrv\fR" 4
5241 .IX Item "nrv"
5242 Dump each function after applying the named return value optimization on
5243 generic trees.  The file name is made by appending \fI.nrv\fR to the source
5244 file name.
5245 .IP "\fBvect\fR" 4
5246 .IX Item "vect"
5247 Dump each function after applying vectorization of loops.  The file name is
5248 made by appending \fI.vect\fR to the source file name.
5249 .IP "\fBslp\fR" 4
5250 .IX Item "slp"
5251 Dump each function after applying vectorization of basic blocks.  The file name
5252 is made by appending \fI.slp\fR to the source file name.
5253 .IP "\fBvrp\fR" 4
5254 .IX Item "vrp"
5255 Dump each function after Value Range Propagation (\s-1VRP\s0).  The file name
5256 is made by appending \fI.vrp\fR to the source file name.
5257 .IP "\fBall\fR" 4
5258 .IX Item "all"
5259 Enable all the available tree dumps with the flags provided in this option.
5260 .RE
5261 .RS 4
5262 .RE
5263 .IP "\fB\-ftree\-vectorizer\-verbose=\fR\fIn\fR" 4
5264 .IX Item "-ftree-vectorizer-verbose=n"
5265 This option controls the amount of debugging output the vectorizer prints.
5266 This information is written to standard error, unless
5267 \&\fB\-fdump\-tree\-all\fR or \fB\-fdump\-tree\-vect\fR is specified,
5268 in which case it is output to the usual dump listing file, \fI.vect\fR.
5269 For \fIn\fR=0 no diagnostic information is reported.
5270 If \fIn\fR=1 the vectorizer reports each loop that got vectorized,
5271 and the total number of loops that got vectorized.
5272 If \fIn\fR=2 the vectorizer also reports non-vectorized loops that passed
5273 the first analysis phase (vect_analyze_loop_form) \- i.e. countable,
5274 inner-most, single-bb, single\-entry/exit loops.  This is the same verbosity
5275 level that \fB\-fdump\-tree\-vect\-stats\fR uses.
5276 Higher verbosity levels mean either more information dumped for each
5277 reported loop, or same amount of information reported for more loops:
5278 if \fIn\fR=3, vectorizer cost model information is reported.
5279 If \fIn\fR=4, alignment related information is added to the reports.
5280 If \fIn\fR=5, data-references related information (e.g. memory dependences,
5281 memory access-patterns) is added to the reports.
5282 If \fIn\fR=6, the vectorizer reports also non-vectorized inner-most loops
5283 that did not pass the first analysis phase (i.e., may not be countable, or
5284 may have complicated control-flow).
5285 If \fIn\fR=7, the vectorizer reports also non-vectorized nested loops.
5286 If \fIn\fR=8, \s-1SLP\s0 related information is added to the reports.
5287 For \fIn\fR=9, all the information the vectorizer generates during its
5288 analysis and transformation is reported.  This is the same verbosity level
5289 that \fB\-fdump\-tree\-vect\-details\fR uses.
5290 .IP "\fB\-frandom\-seed=\fR\fIstring\fR" 4
5291 .IX Item "-frandom-seed=string"
5292 This option provides a seed that \s-1GCC\s0 uses when it would otherwise use
5293 random numbers.  It is used to generate certain symbol names
5294 that have to be different in every compiled file.  It is also used to
5295 place unique stamps in coverage data files and the object files that
5296 produce them.  You can use the \fB\-frandom\-seed\fR option to produce
5297 reproducibly identical object files.
5298 .Sp
5299 The \fIstring\fR should be different for every file you compile.
5300 .IP "\fB\-fsched\-verbose=\fR\fIn\fR" 4
5301 .IX Item "-fsched-verbose=n"
5302 On targets that use instruction scheduling, this option controls the
5303 amount of debugging output the scheduler prints.  This information is
5304 written to standard error, unless \fB\-fdump\-rtl\-sched1\fR or
5305 \&\fB\-fdump\-rtl\-sched2\fR is specified, in which case it is output
5306 to the usual dump listing file, \fI.sched1\fR or \fI.sched2\fR
5307 respectively.  However for \fIn\fR greater than nine, the output is
5308 always printed to standard error.
5309 .Sp
5310 For \fIn\fR greater than zero, \fB\-fsched\-verbose\fR outputs the
5311 same information as \fB\-fdump\-rtl\-sched1\fR and \fB\-fdump\-rtl\-sched2\fR.
5312 For \fIn\fR greater than one, it also output basic block probabilities,
5313 detailed ready list information and unit/insn info.  For \fIn\fR greater
5314 than two, it includes \s-1RTL\s0 at abort point, control-flow and regions info.
5315 And for \fIn\fR over four, \fB\-fsched\-verbose\fR also includes
5316 dependence info.
5317 .IP "\fB\-save\-temps\fR" 4
5318 .IX Item "-save-temps"
5319 .PD 0
5320 .IP "\fB\-save\-temps=cwd\fR" 4
5321 .IX Item "-save-temps=cwd"
5322 .PD
5323 Store the usual \*(L"temporary\*(R" intermediate files permanently; place them
5324 in the current directory and name them based on the source file.  Thus,
5325 compiling \fIfoo.c\fR with \fB\-c \-save\-temps\fR would produce files
5326 \&\fIfoo.i\fR and \fIfoo.s\fR, as well as \fIfoo.o\fR.  This creates a
5327 preprocessed \fIfoo.i\fR output file even though the compiler now
5328 normally uses an integrated preprocessor.
5329 .Sp
5330 When used in combination with the \fB\-x\fR command-line option,
5331 \&\fB\-save\-temps\fR is sensible enough to avoid over writing an
5332 input source file with the same extension as an intermediate file.
5333 The corresponding intermediate file may be obtained by renaming the
5334 source file before using \fB\-save\-temps\fR.
5335 .Sp
5336 If you invoke \s-1GCC\s0 in parallel, compiling several different source
5337 files that share a common base name in different subdirectories or the
5338 same source file compiled for multiple output destinations, it is
5339 likely that the different parallel compilers will interfere with each
5340 other, and overwrite the temporary files.  For instance:
5341 .Sp
5342 .Vb 2
5343 \&        gcc \-save\-temps \-o outdir1/foo.o indir1/foo.c&
5344 \&        gcc \-save\-temps \-o outdir2/foo.o indir2/foo.c&
5345 .Ve
5346 .Sp
5347 may result in \fIfoo.i\fR and \fIfoo.o\fR being written to
5348 simultaneously by both compilers.
5349 .IP "\fB\-save\-temps=obj\fR" 4
5350 .IX Item "-save-temps=obj"
5351 Store the usual \*(L"temporary\*(R" intermediate files permanently.  If the
5352 \&\fB\-o\fR option is used, the temporary files are based on the
5353 object file.  If the \fB\-o\fR option is not used, the
5354 \&\fB\-save\-temps=obj\fR switch behaves like \fB\-save\-temps\fR.
5355 .Sp
5356 For example:
5357 .Sp
5358 .Vb 3
5359 \&        gcc \-save\-temps=obj \-c foo.c
5360 \&        gcc \-save\-temps=obj \-c bar.c \-o dir/xbar.o
5361 \&        gcc \-save\-temps=obj foobar.c \-o dir2/yfoobar
5362 .Ve
5363 .Sp
5364 would create \fIfoo.i\fR, \fIfoo.s\fR, \fIdir/xbar.i\fR,
5365 \&\fIdir/xbar.s\fR, \fIdir2/yfoobar.i\fR, \fIdir2/yfoobar.s\fR, and
5366 \&\fIdir2/yfoobar.o\fR.
5367 .IP "\fB\-time\fR[\fB=\fR\fIfile\fR]" 4
5368 .IX Item "-time[=file]"
5369 Report the \s-1CPU\s0 time taken by each subprocess in the compilation
5370 sequence.  For C source files, this is the compiler proper and assembler
5371 (plus the linker if linking is done).
5372 .Sp
5373 Without the specification of an output file, the output looks like this:
5374 .Sp
5375 .Vb 2
5376 \&        # cc1 0.12 0.01
5377 \&        # as 0.00 0.01
5378 .Ve
5379 .Sp
5380 The first number on each line is the \*(L"user time\*(R", that is time spent
5381 executing the program itself.  The second number is \*(L"system time\*(R",
5382 time spent executing operating system routines on behalf of the program.
5383 Both numbers are in seconds.
5384 .Sp
5385 With the specification of an output file, the output is appended to the
5386 named file, and it looks like this:
5387 .Sp
5388 .Vb 2
5389 \&        0.12 0.01 cc1 <options>
5390 \&        0.00 0.01 as <options>
5391 .Ve
5392 .Sp
5393 The \*(L"user time\*(R" and the \*(L"system time\*(R" are moved before the program
5394 name, and the options passed to the program are displayed, so that one
5395 can later tell what file was being compiled, and with which options.
5396 .IP "\fB\-fvar\-tracking\fR" 4
5397 .IX Item "-fvar-tracking"
5398 Run variable tracking pass.  It computes where variables are stored at each
5399 position in code.  Better debugging information is then generated
5400 (if the debugging information format supports this information).
5401 .Sp
5402 It is enabled by default when compiling with optimization (\fB\-Os\fR,
5403 \&\fB\-O\fR, \fB\-O2\fR, ...), debugging information (\fB\-g\fR) and
5404 the debug info format supports it.
5405 .IP "\fB\-fvar\-tracking\-assignments\fR" 4
5406 .IX Item "-fvar-tracking-assignments"
5407 Annotate assignments to user variables early in the compilation and
5408 attempt to carry the annotations over throughout the compilation all the
5409 way to the end, in an attempt to improve debug information while
5410 optimizing.  Use of \fB\-gdwarf\-4\fR is recommended along with it.
5411 .Sp
5412 It can be enabled even if var-tracking is disabled, in which case
5413 annotations will be created and maintained, but discarded at the end.
5414 .IP "\fB\-fvar\-tracking\-assignments\-toggle\fR" 4
5415 .IX Item "-fvar-tracking-assignments-toggle"
5416 Toggle \fB\-fvar\-tracking\-assignments\fR, in the same way that
5417 \&\fB\-gtoggle\fR toggles \fB\-g\fR.
5418 .IP "\fB\-print\-file\-name=\fR\fIlibrary\fR" 4
5419 .IX Item "-print-file-name=library"
5420 Print the full absolute name of the library file \fIlibrary\fR that
5421 would be used when linking\-\-\-and don't do anything else.  With this
5422 option, \s-1GCC\s0 does not compile or link anything; it just prints the
5423 file name.
5424 .IP "\fB\-print\-multi\-directory\fR" 4
5425 .IX Item "-print-multi-directory"
5426 Print the directory name corresponding to the multilib selected by any
5427 other switches present in the command line.  This directory is supposed
5428 to exist in \fB\s-1GCC_EXEC_PREFIX\s0\fR.
5429 .IP "\fB\-print\-multi\-lib\fR" 4
5430 .IX Item "-print-multi-lib"
5431 Print the mapping from multilib directory names to compiler switches
5432 that enable them.  The directory name is separated from the switches by
5433 \&\fB;\fR, and each switch starts with an \fB@\fR instead of the
5434 \&\fB\-\fR, without spaces between multiple switches.  This is supposed to
5435 ease shell-processing.
5436 .IP "\fB\-print\-multi\-os\-directory\fR" 4
5437 .IX Item "-print-multi-os-directory"
5438 Print the path to \s-1OS\s0 libraries for the selected
5439 multilib, relative to some \fIlib\fR subdirectory.  If \s-1OS\s0 libraries are
5440 present in the \fIlib\fR subdirectory and no multilibs are used, this is
5441 usually just \fI.\fR, if \s-1OS\s0 libraries are present in \fIlib\fIsuffix\fI\fR
5442 sibling directories this prints e.g. \fI../lib64\fR, \fI../lib\fR or
5443 \&\fI../lib32\fR, or if \s-1OS\s0 libraries are present in \fIlib/\fIsubdir\fI\fR
5444 subdirectories it prints e.g. \fIamd64\fR, \fIsparcv9\fR or \fIev6\fR.
5445 .IP "\fB\-print\-prog\-name=\fR\fIprogram\fR" 4
5446 .IX Item "-print-prog-name=program"
5447 Like \fB\-print\-file\-name\fR, but searches for a program such as \fBcpp\fR.
5448 .IP "\fB\-print\-libgcc\-file\-name\fR" 4
5449 .IX Item "-print-libgcc-file-name"
5450 Same as \fB\-print\-file\-name=libgcc.a\fR.
5451 .Sp
5452 This is useful when you use \fB\-nostdlib\fR or \fB\-nodefaultlibs\fR
5453 but you do want to link with \fIlibgcc.a\fR.  You can do
5454 .Sp
5455 .Vb 1
5456 \&        gcc \-nostdlib <files>... \`gcc \-print\-libgcc\-file\-name\`
5457 .Ve
5458 .IP "\fB\-print\-search\-dirs\fR" 4
5459 .IX Item "-print-search-dirs"
5460 Print the name of the configured installation directory and a list of
5461 program and library directories \fBgcc\fR will search\-\-\-and don't do anything else.
5462 .Sp
5463 This is useful when \fBgcc\fR prints the error message
5464 \&\fBinstallation problem, cannot exec cpp0: No such file or directory\fR.
5465 To resolve this you either need to put \fIcpp0\fR and the other compiler
5466 components where \fBgcc\fR expects to find them, or you can set the environment
5467 variable \fB\s-1GCC_EXEC_PREFIX\s0\fR to the directory where you installed them.
5468 Don't forget the trailing \fB/\fR.
5469 .IP "\fB\-print\-sysroot\fR" 4
5470 .IX Item "-print-sysroot"
5471 Print the target sysroot directory that will be used during
5472 compilation.  This is the target sysroot specified either at configure
5473 time or using the \fB\-\-sysroot\fR option, possibly with an extra
5474 suffix that depends on compilation options.  If no target sysroot is
5475 specified, the option prints nothing.
5476 .IP "\fB\-print\-sysroot\-headers\-suffix\fR" 4
5477 .IX Item "-print-sysroot-headers-suffix"
5478 Print the suffix added to the target sysroot when searching for
5479 headers, or give an error if the compiler is not configured with such
5480 a suffix\-\-\-and don't do anything else.
5481 .IP "\fB\-dumpmachine\fR" 4
5482 .IX Item "-dumpmachine"
5483 Print the compiler's target machine (for example,
5484 \&\fBi686\-pc\-linux\-gnu\fR)\-\-\-and don't do anything else.
5485 .IP "\fB\-dumpversion\fR" 4
5486 .IX Item "-dumpversion"
5487 Print the compiler version (for example, \fB3.0\fR)\-\-\-and don't do
5488 anything else.
5489 .IP "\fB\-dumpspecs\fR" 4
5490 .IX Item "-dumpspecs"
5491 Print the compiler's built-in specs\-\-\-and don't do anything else.  (This
5492 is used when \s-1GCC\s0 itself is being built.)
5493 .IP "\fB\-feliminate\-unused\-debug\-types\fR" 4
5494 .IX Item "-feliminate-unused-debug-types"
5495 Normally, when producing \s-1DWARF2\s0 output, \s-1GCC\s0 will emit debugging
5496 information for all types declared in a compilation
5497 unit, regardless of whether or not they are actually used
5498 in that compilation unit.  Sometimes this is useful, such as
5499 if, in the debugger, you want to cast a value to a type that is
5500 not actually used in your program (but is declared).  More often,
5501 however, this results in a significant amount of wasted space.
5502 With this option, \s-1GCC\s0 will avoid producing debug symbol output
5503 for types that are nowhere used in the source file being compiled.
5504 .SS "Options That Control Optimization"
5505 .IX Subsection "Options That Control Optimization"
5506 These options control various sorts of optimizations.
5507 .PP
5508 Without any optimization option, the compiler's goal is to reduce the
5509 cost of compilation and to make debugging produce the expected
5510 results.  Statements are independent: if you stop the program with a
5511 breakpoint between statements, you can then assign a new value to any
5512 variable or change the program counter to any other statement in the
5513 function and get exactly the results you would expect from the source
5514 code.
5515 .PP
5516 Turning on optimization flags makes the compiler attempt to improve
5517 the performance and/or code size at the expense of compilation time
5518 and possibly the ability to debug the program.
5519 .PP
5520 The compiler performs optimization based on the knowledge it has of the
5521 program.  Compiling multiple files at once to a single output file mode allows
5522 the compiler to use information gained from all of the files when compiling
5523 each of them.
5524 .PP
5525 Not all optimizations are controlled directly by a flag.  Only
5526 optimizations that have a flag are listed in this section.
5527 .PP
5528 Most optimizations are only enabled if an \fB\-O\fR level is set on
5529 the command line.  Otherwise they are disabled, even if individual
5530 optimization flags are specified.
5531 .PP
5532 Depending on the target and how \s-1GCC\s0 was configured, a slightly different
5533 set of optimizations may be enabled at each \fB\-O\fR level than
5534 those listed here.  You can invoke \s-1GCC\s0 with \fB\-Q \-\-help=optimizers\fR
5535 to find out the exact set of optimizations that are enabled at each level.
5536 .IP "\fB\-O\fR" 4
5537 .IX Item "-O"
5538 .PD 0
5539 .IP "\fB\-O1\fR" 4
5540 .IX Item "-O1"
5541 .PD
5542 Optimize.  Optimizing compilation takes somewhat more time, and a lot
5543 more memory for a large function.
5544 .Sp
5545 With \fB\-O\fR, the compiler tries to reduce code size and execution
5546 time, without performing any optimizations that take a great deal of
5547 compilation time.
5548 .Sp
5549 \&\fB\-O\fR turns on the following optimization flags:
5550 .Sp
5551 \&\fB\-fauto\-inc\-dec 
5552 \&\-fcompare\-elim 
5553 \&\-fcprop\-registers 
5554 \&\-fdce 
5555 \&\-fdefer\-pop 
5556 \&\-fdelayed\-branch 
5557 \&\-fdse 
5558 \&\-fguess\-branch\-probability 
5559 \&\-fif\-conversion2 
5560 \&\-fif\-conversion 
5561 \&\-fipa\-pure\-const 
5562 \&\-fipa\-profile 
5563 \&\-fipa\-reference 
5564 \&\-fmerge\-constants
5565 \&\-fsplit\-wide\-types 
5566 \&\-ftree\-bit\-ccp 
5567 \&\-ftree\-builtin\-call\-dce 
5568 \&\-ftree\-ccp 
5569 \&\-ftree\-ch 
5570 \&\-ftree\-copyrename 
5571 \&\-ftree\-dce 
5572 \&\-ftree\-dominator\-opts 
5573 \&\-ftree\-dse 
5574 \&\-ftree\-forwprop 
5575 \&\-ftree\-fre 
5576 \&\-ftree\-phiprop 
5577 \&\-ftree\-sra 
5578 \&\-ftree\-pta 
5579 \&\-ftree\-ter 
5580 \&\-funit\-at\-a\-time\fR
5581 .Sp
5582 \&\fB\-O\fR also turns on \fB\-fomit\-frame\-pointer\fR on machines
5583 where doing so does not interfere with debugging.
5584 .IP "\fB\-O2\fR" 4
5585 .IX Item "-O2"
5586 Optimize even more.  \s-1GCC\s0 performs nearly all supported optimizations
5587 that do not involve a space-speed tradeoff.
5588 As compared to \fB\-O\fR, this option increases both compilation time
5589 and the performance of the generated code.
5590 .Sp
5591 \&\fB\-O2\fR turns on all optimization flags specified by \fB\-O\fR.  It
5592 also turns on the following optimization flags:
5593 \&\fB\-fthread\-jumps 
5594 \&\-falign\-functions  \-falign\-jumps 
5595 \&\-falign\-loops  \-falign\-labels 
5596 \&\-fcaller\-saves 
5597 \&\-fcrossjumping 
5598 \&\-fcse\-follow\-jumps  \-fcse\-skip\-blocks 
5599 \&\-fdelete\-null\-pointer\-checks 
5600 \&\-fdevirtualize 
5601 \&\-fexpensive\-optimizations 
5602 \&\-fgcse  \-fgcse\-lm  
5603 \&\-finline\-small\-functions 
5604 \&\-findirect\-inlining 
5605 \&\-fipa\-sra 
5606 \&\-foptimize\-sibling\-calls 
5607 \&\-fpartial\-inlining 
5608 \&\-fpeephole2 
5609 \&\-fregmove 
5610 \&\-freorder\-blocks  \-freorder\-functions 
5611 \&\-frerun\-cse\-after\-loop  
5612 \&\-fsched\-interblock  \-fsched\-spec 
5613 \&\-fschedule\-insns  \-fschedule\-insns2 
5614 \&\-fstrict\-aliasing \-fstrict\-overflow 
5615 \&\-ftree\-switch\-conversion \-ftree\-tail\-merge 
5616 \&\-ftree\-pre 
5617 \&\-ftree\-vrp\fR
5618 .Sp
5619 Please note the warning under \fB\-fgcse\fR about
5620 invoking \fB\-O2\fR on programs that use computed gotos.
5621 .IP "\fB\-O3\fR" 4
5622 .IX Item "-O3"
5623 Optimize yet more.  \fB\-O3\fR turns on all optimizations specified
5624 by \fB\-O2\fR and also turns on the \fB\-finline\-functions\fR,
5625 \&\fB\-funswitch\-loops\fR, \fB\-fpredictive\-commoning\fR,
5626 \&\fB\-fgcse\-after\-reload\fR, \fB\-ftree\-vectorize\fR and
5627 \&\fB\-fipa\-cp\-clone\fR options.
5628 .IP "\fB\-O0\fR" 4
5629 .IX Item "-O0"
5630 Reduce compilation time and make debugging produce the expected
5631 results.  This is the default.
5632 .IP "\fB\-Os\fR" 4
5633 .IX Item "-Os"
5634 Optimize for size.  \fB\-Os\fR enables all \fB\-O2\fR optimizations that
5635 do not typically increase code size.  It also performs further
5636 optimizations designed to reduce code size.
5637 .Sp
5638 \&\fB\-Os\fR disables the following optimization flags:
5639 \&\fB\-falign\-functions  \-falign\-jumps  \-falign\-loops 
5640 \&\-falign\-labels  \-freorder\-blocks  \-freorder\-blocks\-and\-partition 
5641 \&\-fprefetch\-loop\-arrays  \-ftree\-vect\-loop\-version\fR
5642 .IP "\fB\-Ofast\fR" 4
5643 .IX Item "-Ofast"
5644 Disregard strict standards compliance.  \fB\-Ofast\fR enables all
5645 \&\fB\-O3\fR optimizations.  It also enables optimizations that are not
5646 valid for all standard compliant programs.
5647 It turns on \fB\-ffast\-math\fR and the Fortran-specific
5648 \&\fB\-fno\-protect\-parens\fR and \fB\-fstack\-arrays\fR.
5649 .Sp
5650 If you use multiple \fB\-O\fR options, with or without level numbers,
5651 the last such option is the one that is effective.
5652 .PP
5653 Options of the form \fB\-f\fR\fIflag\fR specify machine-independent
5654 flags.  Most flags have both positive and negative forms; the negative
5655 form of \fB\-ffoo\fR would be \fB\-fno\-foo\fR.  In the table
5656 below, only one of the forms is listed\-\-\-the one you typically will
5657 use.  You can figure out the other form by either removing \fBno\-\fR
5658 or adding it.
5659 .PP
5660 The following options control specific optimizations.  They are either
5661 activated by \fB\-O\fR options or are related to ones that are.  You
5662 can use the following flags in the rare cases when \*(L"fine-tuning\*(R" of
5663 optimizations to be performed is desired.
5664 .IP "\fB\-fno\-default\-inline\fR" 4
5665 .IX Item "-fno-default-inline"
5666 Do not make member functions inline by default merely because they are
5667 defined inside the class scope (\*(C+ only).  Otherwise, when you specify
5668 \&\fB\-O\fR, member functions defined inside class scope are compiled
5669 inline by default; i.e., you don't need to add \fBinline\fR in front of
5670 the member function name.
5671 .IP "\fB\-fno\-defer\-pop\fR" 4
5672 .IX Item "-fno-defer-pop"
5673 Always pop the arguments to each function call as soon as that function
5674 returns.  For machines that must pop arguments after a function call,
5675 the compiler normally lets arguments accumulate on the stack for several
5676 function calls and pops them all at once.
5677 .Sp
5678 Disabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5679 .IP "\fB\-fforward\-propagate\fR" 4
5680 .IX Item "-fforward-propagate"
5681 Perform a forward propagation pass on \s-1RTL\s0.  The pass tries to combine two
5682 instructions and checks if the result can be simplified.  If loop unrolling
5683 is active, two passes are performed and the second is scheduled after
5684 loop unrolling.
5685 .Sp
5686 This option is enabled by default at optimization levels \fB\-O\fR,
5687 \&\fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5688 .IP "\fB\-ffp\-contract=\fR\fIstyle\fR" 4
5689 .IX Item "-ffp-contract=style"
5690 \&\fB\-ffp\-contract=off\fR disables floating-point expression contraction.
5691 \&\fB\-ffp\-contract=fast\fR enables floating-point expression contraction
5692 such as forming of fused multiply-add operations if the target has
5693 native support for them.
5694 \&\fB\-ffp\-contract=on\fR enables floating-point expression contraction
5695 if allowed by the language standard.  This is currently not implemented
5696 and treated equal to \fB\-ffp\-contract=off\fR.
5697 .Sp
5698 The default is \fB\-ffp\-contract=fast\fR.
5699 .IP "\fB\-fomit\-frame\-pointer\fR" 4
5700 .IX Item "-fomit-frame-pointer"
5701 Don't keep the frame pointer in a register for functions that
5702 don't need one.  This avoids the instructions to save, set up and
5703 restore frame pointers; it also makes an extra register available
5704 in many functions.  \fBIt also makes debugging impossible on
5705 some machines.\fR
5706 .Sp
5707 On some machines, such as the \s-1VAX\s0, this flag has no effect, because
5708 the standard calling sequence automatically handles the frame pointer
5709 and nothing is saved by pretending it doesn't exist.  The
5710 machine-description macro \f(CW\*(C`FRAME_POINTER_REQUIRED\*(C'\fR controls
5711 whether a target machine supports this flag.
5712 .Sp
5713 Starting with \s-1GCC\s0 version 4.6, the default setting (when not optimizing for
5714 size) for 32\-bit Linux x86 and 32\-bit Darwin x86 targets has been changed to
5715 \&\fB\-fomit\-frame\-pointer\fR.  The default can be reverted to
5716 \&\fB\-fno\-omit\-frame\-pointer\fR by configuring \s-1GCC\s0 with the
5717 \&\fB\-\-enable\-frame\-pointer\fR configure option.
5718 .Sp
5719 Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5720 .IP "\fB\-foptimize\-sibling\-calls\fR" 4
5721 .IX Item "-foptimize-sibling-calls"
5722 Optimize sibling and tail recursive calls.
5723 .Sp
5724 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5725 .IP "\fB\-fno\-inline\fR" 4
5726 .IX Item "-fno-inline"
5727 Do not expand any functions inline apart from those marked with
5728 the \f(CW\*(C`always_inline\*(C'\fR attribute.  This is the default when not
5729 optimizing.
5730 .Sp
5731 Single functions can be exempted from inlining by marking them
5732 with the \f(CW\*(C`noinline\*(C'\fR attribute.
5733 .IP "\fB\-finline\-small\-functions\fR" 4
5734 .IX Item "-finline-small-functions"
5735 Integrate functions into their callers when their body is smaller than expected
5736 function call code (so overall size of program gets smaller).  The compiler
5737 heuristically decides which functions are simple enough to be worth integrating
5738 in this way.  This inlining applies to all functions, even those not declared
5739 inline.
5740 .Sp
5741 Enabled at level \fB\-O2\fR.
5742 .IP "\fB\-findirect\-inlining\fR" 4
5743 .IX Item "-findirect-inlining"
5744 Inline also indirect calls that are discovered to be known at compile
5745 time thanks to previous inlining.  This option has any effect only
5746 when inlining itself is turned on by the \fB\-finline\-functions\fR
5747 or \fB\-finline\-small\-functions\fR options.
5748 .Sp
5749 Enabled at level \fB\-O2\fR.
5750 .IP "\fB\-finline\-functions\fR" 4
5751 .IX Item "-finline-functions"
5752 Consider all functions for inlining, even if they are not declared inline.
5753 The compiler heuristically decides which functions are worth integrating
5754 in this way.
5755 .Sp
5756 If all calls to a given function are integrated, and the function is
5757 declared \f(CW\*(C`static\*(C'\fR, then the function is normally not output as
5758 assembler code in its own right.
5759 .Sp
5760 Enabled at level \fB\-O3\fR.
5761 .IP "\fB\-finline\-functions\-called\-once\fR" 4
5762 .IX Item "-finline-functions-called-once"
5763 Consider all \f(CW\*(C`static\*(C'\fR functions called once for inlining into their
5764 caller even if they are not marked \f(CW\*(C`inline\*(C'\fR.  If a call to a given
5765 function is integrated, then the function is not output as assembler code
5766 in its own right.
5767 .Sp
5768 Enabled at levels \fB\-O1\fR, \fB\-O2\fR, \fB\-O3\fR and \fB\-Os\fR.
5769 .IP "\fB\-fearly\-inlining\fR" 4
5770 .IX Item "-fearly-inlining"
5771 Inline functions marked by \f(CW\*(C`always_inline\*(C'\fR and functions whose body seems
5772 smaller than the function call overhead early before doing
5773 \&\fB\-fprofile\-generate\fR instrumentation and real inlining pass.  Doing so
5774 makes profiling significantly cheaper and usually inlining faster on programs
5775 having large chains of nested wrapper functions.
5776 .Sp
5777 Enabled by default.
5778 .IP "\fB\-fipa\-sra\fR" 4
5779 .IX Item "-fipa-sra"
5780 Perform interprocedural scalar replacement of aggregates, removal of
5781 unused parameters and replacement of parameters passed by reference
5782 by parameters passed by value.
5783 .Sp
5784 Enabled at levels \fB\-O2\fR, \fB\-O3\fR and \fB\-Os\fR.
5785 .IP "\fB\-finline\-limit=\fR\fIn\fR" 4
5786 .IX Item "-finline-limit=n"
5787 By default, \s-1GCC\s0 limits the size of functions that can be inlined.  This flag
5788 allows coarse control of this limit.  \fIn\fR is the size of functions that
5789 can be inlined in number of pseudo instructions.
5790 .Sp
5791 Inlining is actually controlled by a number of parameters, which may be
5792 specified individually by using \fB\-\-param\fR \fIname\fR\fB=\fR\fIvalue\fR.
5793 The \fB\-finline\-limit=\fR\fIn\fR option sets some of these parameters
5794 as follows:
5795 .RS 4
5796 .IP "\fBmax-inline-insns-single\fR" 4
5797 .IX Item "max-inline-insns-single"
5798 is set to \fIn\fR/2.
5799 .IP "\fBmax-inline-insns-auto\fR" 4
5800 .IX Item "max-inline-insns-auto"
5801 is set to \fIn\fR/2.
5802 .RE
5803 .RS 4
5804 .Sp
5805 See below for a documentation of the individual
5806 parameters controlling inlining and for the defaults of these parameters.
5807 .Sp
5808 \&\fINote:\fR there may be no value to \fB\-finline\-limit\fR that results
5809 in default behavior.
5810 .Sp
5811 \&\fINote:\fR pseudo instruction represents, in this particular context, an
5812 abstract measurement of function's size.  In no way does it represent a count
5813 of assembly instructions and as such its exact meaning might change from one
5814 release to an another.
5815 .RE
5816 .IP "\fB\-fno\-keep\-inline\-dllexport\fR" 4
5817 .IX Item "-fno-keep-inline-dllexport"
5818 This is a more fine-grained version of \fB\-fkeep\-inline\-functions\fR,
5819 which applies only to functions that are declared using the \f(CW\*(C`dllexport\*(C'\fR
5820 attribute or declspec
5821 .IP "\fB\-fkeep\-inline\-functions\fR" 4
5822 .IX Item "-fkeep-inline-functions"
5823 In C, emit \f(CW\*(C`static\*(C'\fR functions that are declared \f(CW\*(C`inline\*(C'\fR
5824 into the object file, even if the function has been inlined into all
5825 of its callers.  This switch does not affect functions using the
5826 \&\f(CW\*(C`extern inline\*(C'\fR extension in \s-1GNU\s0 C90.  In \*(C+, emit any and all
5827 inline functions into the object file.
5828 .IP "\fB\-fkeep\-static\-consts\fR" 4
5829 .IX Item "-fkeep-static-consts"
5830 Emit variables declared \f(CW\*(C`static const\*(C'\fR when optimization isn't turned
5831 on, even if the variables aren't referenced.
5832 .Sp
5833 \&\s-1GCC\s0 enables this option by default.  If you want to force the compiler to
5834 check if the variable was referenced, regardless of whether or not
5835 optimization is turned on, use the \fB\-fno\-keep\-static\-consts\fR option.
5836 .IP "\fB\-fmerge\-constants\fR" 4
5837 .IX Item "-fmerge-constants"
5838 Attempt to merge identical constants (string constants and floating-point
5839 constants) across compilation units.
5840 .Sp
5841 This option is the default for optimized compilation if the assembler and
5842 linker support it.  Use \fB\-fno\-merge\-constants\fR to inhibit this
5843 behavior.
5844 .Sp
5845 Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5846 .IP "\fB\-fmerge\-all\-constants\fR" 4
5847 .IX Item "-fmerge-all-constants"
5848 Attempt to merge identical constants and identical variables.
5849 .Sp
5850 This option implies \fB\-fmerge\-constants\fR.  In addition to
5851 \&\fB\-fmerge\-constants\fR this considers e.g. even constant initialized
5852 arrays or initialized constant variables with integral or floating-point
5853 types.  Languages like C or \*(C+ require each variable, including multiple
5854 instances of the same variable in recursive calls, to have distinct locations,
5855 so using this option will result in non-conforming
5856 behavior.
5857 .IP "\fB\-fmodulo\-sched\fR" 4
5858 .IX Item "-fmodulo-sched"
5859 Perform swing modulo scheduling immediately before the first scheduling
5860 pass.  This pass looks at innermost loops and reorders their
5861 instructions by overlapping different iterations.
5862 .IP "\fB\-fmodulo\-sched\-allow\-regmoves\fR" 4
5863 .IX Item "-fmodulo-sched-allow-regmoves"
5864 Perform more aggressive \s-1SMS\s0 based modulo scheduling with register moves
5865 allowed.  By setting this flag certain anti-dependences edges will be
5866 deleted which will trigger the generation of reg-moves based on the
5867 life-range analysis.  This option is effective only with
5868 \&\fB\-fmodulo\-sched\fR enabled.
5869 .IP "\fB\-fno\-branch\-count\-reg\fR" 4
5870 .IX Item "-fno-branch-count-reg"
5871 Do not use \*(L"decrement and branch\*(R" instructions on a count register,
5872 but instead generate a sequence of instructions that decrement a
5873 register, compare it against zero, then branch based upon the result.
5874 This option is only meaningful on architectures that support such
5875 instructions, which include x86, PowerPC, \s-1IA\-64\s0 and S/390.
5876 .Sp
5877 The default is \fB\-fbranch\-count\-reg\fR.
5878 .IP "\fB\-fno\-function\-cse\fR" 4
5879 .IX Item "-fno-function-cse"
5880 Do not put function addresses in registers; make each instruction that
5881 calls a constant function contain the function's address explicitly.
5882 .Sp
5883 This option results in less efficient code, but some strange hacks
5884 that alter the assembler output may be confused by the optimizations
5885 performed when this option is not used.
5886 .Sp
5887 The default is \fB\-ffunction\-cse\fR
5888 .IP "\fB\-fno\-zero\-initialized\-in\-bss\fR" 4
5889 .IX Item "-fno-zero-initialized-in-bss"
5890 If the target supports a \s-1BSS\s0 section, \s-1GCC\s0 by default puts variables that
5891 are initialized to zero into \s-1BSS\s0.  This can save space in the resulting
5892 code.
5893 .Sp
5894 This option turns off this behavior because some programs explicitly
5895 rely on variables going to the data section.  E.g., so that the
5896 resulting executable can find the beginning of that section and/or make
5897 assumptions based on that.
5898 .Sp
5899 The default is \fB\-fzero\-initialized\-in\-bss\fR.
5900 .IP "\fB\-fmudflap \-fmudflapth \-fmudflapir\fR" 4
5901 .IX Item "-fmudflap -fmudflapth -fmudflapir"
5902 For front-ends that support it (C and \*(C+), instrument all risky
5903 pointer/array dereferencing operations, some standard library
5904 string/heap functions, and some other associated constructs with
5905 range/validity tests.  Modules so instrumented should be immune to
5906 buffer overflows, invalid heap use, and some other classes of C/\*(C+
5907 programming errors.  The instrumentation relies on a separate runtime
5908 library (\fIlibmudflap\fR), which will be linked into a program if
5909 \&\fB\-fmudflap\fR is given at link time.  Run-time behavior of the
5910 instrumented program is controlled by the \fB\s-1MUDFLAP_OPTIONS\s0\fR
5911 environment variable.  See \f(CW\*(C`env MUDFLAP_OPTIONS=\-help a.out\*(C'\fR
5912 for its options.
5913 .Sp
5914 Use \fB\-fmudflapth\fR instead of \fB\-fmudflap\fR to compile and to
5915 link if your program is multi-threaded.  Use \fB\-fmudflapir\fR, in
5916 addition to \fB\-fmudflap\fR or \fB\-fmudflapth\fR, if
5917 instrumentation should ignore pointer reads.  This produces less
5918 instrumentation (and therefore faster execution) and still provides
5919 some protection against outright memory corrupting writes, but allows
5920 erroneously read data to propagate within a program.
5921 .IP "\fB\-fthread\-jumps\fR" 4
5922 .IX Item "-fthread-jumps"
5923 Perform optimizations where we check to see if a jump branches to a
5924 location where another comparison subsumed by the first is found.  If
5925 so, the first branch is redirected to either the destination of the
5926 second branch or a point immediately following it, depending on whether
5927 the condition is known to be true or false.
5928 .Sp
5929 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5930 .IP "\fB\-fsplit\-wide\-types\fR" 4
5931 .IX Item "-fsplit-wide-types"
5932 When using a type that occupies multiple registers, such as \f(CW\*(C`long
5933 long\*(C'\fR on a 32\-bit system, split the registers apart and allocate them
5934 independently.  This normally generates better code for those types,
5935 but may make debugging more difficult.
5936 .Sp
5937 Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR,
5938 \&\fB\-Os\fR.
5939 .IP "\fB\-fcse\-follow\-jumps\fR" 4
5940 .IX Item "-fcse-follow-jumps"
5941 In common subexpression elimination (\s-1CSE\s0), scan through jump instructions
5942 when the target of the jump is not reached by any other path.  For
5943 example, when \s-1CSE\s0 encounters an \f(CW\*(C`if\*(C'\fR statement with an
5944 \&\f(CW\*(C`else\*(C'\fR clause, \s-1CSE\s0 will follow the jump when the condition
5945 tested is false.
5946 .Sp
5947 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5948 .IP "\fB\-fcse\-skip\-blocks\fR" 4
5949 .IX Item "-fcse-skip-blocks"
5950 This is similar to \fB\-fcse\-follow\-jumps\fR, but causes \s-1CSE\s0 to
5951 follow jumps that conditionally skip over blocks.  When \s-1CSE\s0
5952 encounters a simple \f(CW\*(C`if\*(C'\fR statement with no else clause,
5953 \&\fB\-fcse\-skip\-blocks\fR causes \s-1CSE\s0 to follow the jump around the
5954 body of the \f(CW\*(C`if\*(C'\fR.
5955 .Sp
5956 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5957 .IP "\fB\-frerun\-cse\-after\-loop\fR" 4
5958 .IX Item "-frerun-cse-after-loop"
5959 Re-run common subexpression elimination after loop optimizations has been
5960 performed.
5961 .Sp
5962 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5963 .IP "\fB\-fgcse\fR" 4
5964 .IX Item "-fgcse"
5965 Perform a global common subexpression elimination pass.
5966 This pass also performs global constant and copy propagation.
5967 .Sp
5968 \&\fINote:\fR When compiling a program using computed gotos, a \s-1GCC\s0
5969 extension, you may get better run-time performance if you disable
5970 the global common subexpression elimination pass by adding
5971 \&\fB\-fno\-gcse\fR to the command line.
5972 .Sp
5973 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5974 .IP "\fB\-fgcse\-lm\fR" 4
5975 .IX Item "-fgcse-lm"
5976 When \fB\-fgcse\-lm\fR is enabled, global common subexpression elimination will
5977 attempt to move loads that are only killed by stores into themselves.  This
5978 allows a loop containing a load/store sequence to be changed to a load outside
5979 the loop, and a copy/store within the loop.
5980 .Sp
5981 Enabled by default when gcse is enabled.
5982 .IP "\fB\-fgcse\-sm\fR" 4
5983 .IX Item "-fgcse-sm"
5984 When \fB\-fgcse\-sm\fR is enabled, a store motion pass is run after
5985 global common subexpression elimination.  This pass will attempt to move
5986 stores out of loops.  When used in conjunction with \fB\-fgcse\-lm\fR,
5987 loops containing a load/store sequence can be changed to a load before
5988 the loop and a store after the loop.
5989 .Sp
5990 Not enabled at any optimization level.
5991 .IP "\fB\-fgcse\-las\fR" 4
5992 .IX Item "-fgcse-las"
5993 When \fB\-fgcse\-las\fR is enabled, the global common subexpression
5994 elimination pass eliminates redundant loads that come after stores to the
5995 same memory location (both partial and full redundancies).
5996 .Sp
5997 Not enabled at any optimization level.
5998 .IP "\fB\-fgcse\-after\-reload\fR" 4
5999 .IX Item "-fgcse-after-reload"
6000 When \fB\-fgcse\-after\-reload\fR is enabled, a redundant load elimination
6001 pass is performed after reload.  The purpose of this pass is to cleanup
6002 redundant spilling.
6003 .IP "\fB\-funsafe\-loop\-optimizations\fR" 4
6004 .IX Item "-funsafe-loop-optimizations"
6005 If given, the loop optimizer will assume that loop indices do not
6006 overflow, and that the loops with nontrivial exit condition are not
6007 infinite.  This enables a wider range of loop optimizations even if
6008 the loop optimizer itself cannot prove that these assumptions are valid.
6009 Using \fB\-Wunsafe\-loop\-optimizations\fR, the compiler will warn you
6010 if it finds this kind of loop.
6011 .IP "\fB\-fcrossjumping\fR" 4
6012 .IX Item "-fcrossjumping"
6013 Perform cross-jumping transformation.  This transformation unifies equivalent code and save code size.  The
6014 resulting code may or may not perform better than without cross-jumping.
6015 .Sp
6016 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
6017 .IP "\fB\-fauto\-inc\-dec\fR" 4
6018 .IX Item "-fauto-inc-dec"
6019 Combine increments or decrements of addresses with memory accesses.
6020 This pass is always skipped on architectures that do not have
6021 instructions to support this.  Enabled by default at \fB\-O\fR and
6022 higher on architectures that support this.
6023 .IP "\fB\-fdce\fR" 4
6024 .IX Item "-fdce"
6025 Perform dead code elimination (\s-1DCE\s0) on \s-1RTL\s0.
6026 Enabled by default at \fB\-O\fR and higher.
6027 .IP "\fB\-fdse\fR" 4
6028 .IX Item "-fdse"
6029 Perform dead store elimination (\s-1DSE\s0) on \s-1RTL\s0.
6030 Enabled by default at \fB\-O\fR and higher.
6031 .IP "\fB\-fif\-conversion\fR" 4
6032 .IX Item "-fif-conversion"
6033 Attempt to transform conditional jumps into branch-less equivalents.  This
6034 include use of conditional moves, min, max, set flags and abs instructions, and
6035 some tricks doable by standard arithmetics.  The use of conditional execution
6036 on chips where it is available is controlled by \f(CW\*(C`if\-conversion2\*(C'\fR.
6037 .Sp
6038 Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
6039 .IP "\fB\-fif\-conversion2\fR" 4
6040 .IX Item "-fif-conversion2"
6041 Use conditional execution (where available) to transform conditional jumps into
6042 branch-less equivalents.
6043 .Sp
6044 Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
6045 .IP "\fB\-fdelete\-null\-pointer\-checks\fR" 4
6046 .IX Item "-fdelete-null-pointer-checks"
6047 Assume that programs cannot safely dereference null pointers, and that
6048 no code or data element resides there.  This enables simple constant
6049 folding optimizations at all optimization levels.  In addition, other
6050 optimization passes in \s-1GCC\s0 use this flag to control global dataflow
6051 analyses that eliminate useless checks for null pointers; these assume
6052 that if a pointer is checked after it has already been dereferenced,
6053 it cannot be null.
6054 .Sp
6055 Note however that in some environments this assumption is not true.
6056 Use \fB\-fno\-delete\-null\-pointer\-checks\fR to disable this optimization
6057 for programs that depend on that behavior.
6058 .Sp
6059 Some targets, especially embedded ones, disable this option at all levels.
6060 Otherwise it is enabled at all levels: \fB\-O0\fR, \fB\-O1\fR,
6061 \&\fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.  Passes that use the information
6062 are enabled independently at different optimization levels.
6063 .IP "\fB\-fdevirtualize\fR" 4
6064 .IX Item "-fdevirtualize"
6065 Attempt to convert calls to virtual functions to direct calls.  This
6066 is done both within a procedure and interprocedurally as part of
6067 indirect inlining (\f(CW\*(C`\-findirect\-inlining\*(C'\fR) and interprocedural constant
6068 propagation (\fB\-fipa\-cp\fR).
6069 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
6070 .IP "\fB\-fexpensive\-optimizations\fR" 4
6071 .IX Item "-fexpensive-optimizations"
6072 Perform a number of minor optimizations that are relatively expensive.
6073 .Sp
6074 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
6075 .IP "\fB\-free\fR" 4
6076 .IX Item "-free"
6077 Attempt to remove redundant extension instructions.  This is especially
6078 helpful for the x86\-64 architecture which implicitly zero-extends in 64\-bit
6079 registers after writing to their lower 32\-bit half.
6080 .Sp
6081 Enabled for x86 at levels \fB\-O2\fR, \fB\-O3\fR.
6082 .IP "\fB\-foptimize\-register\-move\fR" 4
6083 .IX Item "-foptimize-register-move"
6084 .PD 0
6085 .IP "\fB\-fregmove\fR" 4
6086 .IX Item "-fregmove"
6087 .PD
6088 Attempt to reassign register numbers in move instructions and as
6089 operands of other simple instructions in order to maximize the amount of
6090 register tying.  This is especially helpful on machines with two-operand
6091 instructions.
6092 .Sp
6093 Note \fB\-fregmove\fR and \fB\-foptimize\-register\-move\fR are the same
6094 optimization.
6095 .Sp
6096 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
6097 .IP "\fB\-fira\-algorithm=\fR\fIalgorithm\fR" 4
6098 .IX Item "-fira-algorithm=algorithm"
6099 Use the specified coloring algorithm for the integrated register
6100 allocator.  The \fIalgorithm\fR argument can be \fBpriority\fR, which
6101 specifies Chow's priority coloring, or \fB\s-1CB\s0\fR, which specifies
6102 Chaitin-Briggs coloring.  Chaitin-Briggs coloring is not implemented
6103 for all architectures, but for those targets that do support it, it is
6104 the default because it generates better code.
6105 .IP "\fB\-fira\-region=\fR\fIregion\fR" 4
6106 .IX Item "-fira-region=region"
6107 Use specified regions for the integrated register allocator.  The
6108 \&\fIregion\fR argument should be one of the following:
6109 .RS 4
6110 .IP "\fBall\fR" 4
6111 .IX Item "all"
6112 Use all loops as register allocation regions.
6113 This can give the best results for machines with a small and/or
6114 irregular register set.
6115 .IP "\fBmixed\fR" 4
6116 .IX Item "mixed"
6117 Use all loops except for loops with small register pressure 
6118 as the regions.  This value usually gives
6119 the best results in most cases and for most architectures,
6120 and is enabled by default when compiling with optimization for speed
6121 (\fB\-O\fR, \fB\-O2\fR, ...).
6122 .IP "\fBone\fR" 4
6123 .IX Item "one"
6124 Use all functions as a single region.  
6125 This typically results in the smallest code size, and is enabled by default for
6126 \&\fB\-Os\fR or \fB\-O0\fR.
6127 .RE
6128 .RS 4
6129 .RE
6130 .IP "\fB\-fira\-loop\-pressure\fR" 4
6131 .IX Item "-fira-loop-pressure"
6132 Use \s-1IRA\s0 to evaluate register pressure in loops for decisions to move
6133 loop invariants.  This option usually results in generation
6134 of faster and smaller code on machines with large register files (>= 32
6135 registers), but it can slow the compiler down.
6136 .Sp
6137 This option is enabled at level \fB\-O3\fR for some targets.
6138 .IP "\fB\-fno\-ira\-share\-save\-slots\fR" 4
6139 .IX Item "-fno-ira-share-save-slots"
6140 Disable sharing of stack slots used for saving call-used hard
6141 registers living through a call.  Each hard register gets a
6142 separate stack slot, and as a result function stack frames are
6143 larger.
6144 .IP "\fB\-fno\-ira\-share\-spill\-slots\fR" 4
6145 .IX Item "-fno-ira-share-spill-slots"
6146 Disable sharing of stack slots allocated for pseudo-registers.  Each
6147 pseudo-register that does not get a hard register gets a separate
6148 stack slot, and as a result function stack frames are larger.
6149 .IP "\fB\-fira\-verbose=\fR\fIn\fR" 4
6150 .IX Item "-fira-verbose=n"
6151 Control the verbosity of the dump file for the integrated register allocator.
6152 The default value is 5.  If the value \fIn\fR is greater or equal to 10,
6153 the dump output is sent to stderr using the same format as \fIn\fR minus 10.
6154 .IP "\fB\-fdelayed\-branch\fR" 4
6155 .IX Item "-fdelayed-branch"
6156 If supported for the target machine, attempt to reorder instructions
6157 to exploit instruction slots available after delayed branch
6158 instructions.
6159 .Sp
6160 Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
6161 .IP "\fB\-fschedule\-insns\fR" 4
6162 .IX Item "-fschedule-insns"
6163 If supported for the target machine, attempt to reorder instructions to
6164 eliminate execution stalls due to required data being unavailable.  This
6165 helps machines that have slow floating point or memory load instructions
6166 by allowing other instructions to be issued until the result of the load
6167 or floating-point instruction is required.
6168 .Sp
6169 Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
6170 .IP "\fB\-fschedule\-insns2\fR" 4
6171 .IX Item "-fschedule-insns2"
6172 Similar to \fB\-fschedule\-insns\fR, but requests an additional pass of
6173 instruction scheduling after register allocation has been done.  This is
6174 especially useful on machines with a relatively small number of
6175 registers and where memory load instructions take more than one cycle.
6176 .Sp
6177 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
6178 .IP "\fB\-fno\-sched\-interblock\fR" 4
6179 .IX Item "-fno-sched-interblock"
6180 Don't schedule instructions across basic blocks.  This is normally
6181 enabled by default when scheduling before register allocation, i.e.
6182 with \fB\-fschedule\-insns\fR or at \fB\-O2\fR or higher.
6183 .IP "\fB\-fno\-sched\-spec\fR" 4
6184 .IX Item "-fno-sched-spec"
6185 Don't allow speculative motion of non-load instructions.  This is normally
6186 enabled by default when scheduling before register allocation, i.e.
6187 with \fB\-fschedule\-insns\fR or at \fB\-O2\fR or higher.
6188 .IP "\fB\-fsched\-pressure\fR" 4
6189 .IX Item "-fsched-pressure"
6190 Enable register pressure sensitive insn scheduling before the register
6191 allocation.  This only makes sense when scheduling before register
6192 allocation is enabled, i.e. with \fB\-fschedule\-insns\fR or at
6193 \&\fB\-O2\fR or higher.  Usage of this option can improve the
6194 generated code and decrease its size by preventing register pressure
6195 increase above the number of available hard registers and as a
6196 consequence register spills in the register allocation.
6197 .IP "\fB\-fsched\-spec\-load\fR" 4
6198 .IX Item "-fsched-spec-load"
6199 Allow speculative motion of some load instructions.  This only makes
6200 sense when scheduling before register allocation, i.e. with
6201 \&\fB\-fschedule\-insns\fR or at \fB\-O2\fR or higher.
6202 .IP "\fB\-fsched\-spec\-load\-dangerous\fR" 4
6203 .IX Item "-fsched-spec-load-dangerous"
6204 Allow speculative motion of more load instructions.  This only makes
6205 sense when scheduling before register allocation, i.e. with
6206 \&\fB\-fschedule\-insns\fR or at \fB\-O2\fR or higher.
6207 .IP "\fB\-fsched\-stalled\-insns\fR" 4
6208 .IX Item "-fsched-stalled-insns"
6209 .PD 0
6210 .IP "\fB\-fsched\-stalled\-insns=\fR\fIn\fR" 4
6211 .IX Item "-fsched-stalled-insns=n"
6212 .PD
6213 Define how many insns (if any) can be moved prematurely from the queue
6214 of stalled insns into the ready list, during the second scheduling pass.
6215 \&\fB\-fno\-sched\-stalled\-insns\fR means that no insns will be moved
6216 prematurely, \fB\-fsched\-stalled\-insns=0\fR means there is no limit
6217 on how many queued insns can be moved prematurely.
6218 \&\fB\-fsched\-stalled\-insns\fR without a value is equivalent to
6219 \&\fB\-fsched\-stalled\-insns=1\fR.
6220 .IP "\fB\-fsched\-stalled\-insns\-dep\fR" 4
6221 .IX Item "-fsched-stalled-insns-dep"
6222 .PD 0
6223 .IP "\fB\-fsched\-stalled\-insns\-dep=\fR\fIn\fR" 4
6224 .IX Item "-fsched-stalled-insns-dep=n"
6225 .PD
6226 Define how many insn groups (cycles) will be examined for a dependency
6227 on a stalled insn that is candidate for premature removal from the queue
6228 of stalled insns.  This has an effect only during the second scheduling pass,
6229 and only if \fB\-fsched\-stalled\-insns\fR is used.
6230 \&\fB\-fno\-sched\-stalled\-insns\-dep\fR is equivalent to
6231 \&\fB\-fsched\-stalled\-insns\-dep=0\fR.
6232 \&\fB\-fsched\-stalled\-insns\-dep\fR without a value is equivalent to
6233 \&\fB\-fsched\-stalled\-insns\-dep=1\fR.
6234 .IP "\fB\-fsched2\-use\-superblocks\fR" 4
6235 .IX Item "-fsched2-use-superblocks"
6236 When scheduling after register allocation, do use superblock scheduling
6237 algorithm.  Superblock scheduling allows motion across basic block boundaries
6238 resulting on faster schedules.  This option is experimental, as not all machine
6239 descriptions used by \s-1GCC\s0 model the \s-1CPU\s0 closely enough to avoid unreliable
6240 results from the algorithm.
6241 .Sp
6242 This only makes sense when scheduling after register allocation, i.e. with
6243 \&\fB\-fschedule\-insns2\fR or at \fB\-O2\fR or higher.
6244 .IP "\fB\-fsched\-group\-heuristic\fR" 4
6245 .IX Item "-fsched-group-heuristic"
6246 Enable the group heuristic in the scheduler.  This heuristic favors
6247 the instruction that belongs to a schedule group.  This is enabled
6248 by default when scheduling is enabled, i.e. with \fB\-fschedule\-insns\fR
6249 or \fB\-fschedule\-insns2\fR or at \fB\-O2\fR or higher.
6250 .IP "\fB\-fsched\-critical\-path\-heuristic\fR" 4
6251 .IX Item "-fsched-critical-path-heuristic"
6252 Enable the critical-path heuristic in the scheduler.  This heuristic favors
6253 instructions on the critical path.  This is enabled by default when
6254 scheduling is enabled, i.e. with \fB\-fschedule\-insns\fR
6255 or \fB\-fschedule\-insns2\fR or at \fB\-O2\fR or higher.
6256 .IP "\fB\-fsched\-spec\-insn\-heuristic\fR" 4
6257 .IX Item "-fsched-spec-insn-heuristic"
6258 Enable the speculative instruction heuristic in the scheduler.  This
6259 heuristic favors speculative instructions with greater dependency weakness.
6260 This is enabled by default when scheduling is enabled, i.e.
6261 with \fB\-fschedule\-insns\fR or \fB\-fschedule\-insns2\fR
6262 or at \fB\-O2\fR or higher.
6263 .IP "\fB\-fsched\-rank\-heuristic\fR" 4
6264 .IX Item "-fsched-rank-heuristic"
6265 Enable the rank heuristic in the scheduler.  This heuristic favors
6266 the instruction belonging to a basic block with greater size or frequency.
6267 This is enabled by default when scheduling is enabled, i.e.
6268 with \fB\-fschedule\-insns\fR or \fB\-fschedule\-insns2\fR or
6269 at \fB\-O2\fR or higher.
6270 .IP "\fB\-fsched\-last\-insn\-heuristic\fR" 4
6271 .IX Item "-fsched-last-insn-heuristic"
6272 Enable the last-instruction heuristic in the scheduler.  This heuristic
6273 favors the instruction that is less dependent on the last instruction
6274 scheduled.  This is enabled by default when scheduling is enabled,
6275 i.e. with \fB\-fschedule\-insns\fR or \fB\-fschedule\-insns2\fR or
6276 at \fB\-O2\fR or higher.
6277 .IP "\fB\-fsched\-dep\-count\-heuristic\fR" 4
6278 .IX Item "-fsched-dep-count-heuristic"
6279 Enable the dependent-count heuristic in the scheduler.  This heuristic
6280 favors the instruction that has more instructions depending on it.
6281 This is enabled by default when scheduling is enabled, i.e.
6282 with \fB\-fschedule\-insns\fR or \fB\-fschedule\-insns2\fR or
6283 at \fB\-O2\fR or higher.
6284 .IP "\fB\-freschedule\-modulo\-scheduled\-loops\fR" 4
6285 .IX Item "-freschedule-modulo-scheduled-loops"
6286 The modulo scheduling comes before the traditional scheduling, if a loop
6287 was modulo scheduled we may want to prevent the later scheduling passes
6288 from changing its schedule, we use this option to control that.
6289 .IP "\fB\-fselective\-scheduling\fR" 4
6290 .IX Item "-fselective-scheduling"
6291 Schedule instructions using selective scheduling algorithm.  Selective
6292 scheduling runs instead of the first scheduler pass.
6293 .IP "\fB\-fselective\-scheduling2\fR" 4
6294 .IX Item "-fselective-scheduling2"
6295 Schedule instructions using selective scheduling algorithm.  Selective
6296 scheduling runs instead of the second scheduler pass.
6297 .IP "\fB\-fsel\-sched\-pipelining\fR" 4
6298 .IX Item "-fsel-sched-pipelining"
6299 Enable software pipelining of innermost loops during selective scheduling.
6300 This option has no effect until one of \fB\-fselective\-scheduling\fR or
6301 \&\fB\-fselective\-scheduling2\fR is turned on.
6302 .IP "\fB\-fsel\-sched\-pipelining\-outer\-loops\fR" 4
6303 .IX Item "-fsel-sched-pipelining-outer-loops"
6304 When pipelining loops during selective scheduling, also pipeline outer loops.
6305 This option has no effect until \fB\-fsel\-sched\-pipelining\fR is turned on.
6306 .IP "\fB\-fshrink\-wrap\fR" 4
6307 .IX Item "-fshrink-wrap"
6308 Emit function prologues only before parts of the function that need it,
6309 rather than at the top of the function.  This flag is enabled by default at
6310 \&\fB\-O\fR and higher.
6311 .IP "\fB\-fcaller\-saves\fR" 4
6312 .IX Item "-fcaller-saves"
6313 Enable values to be allocated in registers that will be clobbered by
6314 function calls, by emitting extra instructions to save and restore the
6315 registers around such calls.  Such allocation is done only when it
6316 seems to result in better code than would otherwise be produced.
6317 .Sp
6318 This option is always enabled by default on certain machines, usually
6319 those which have no call-preserved registers to use instead.
6320 .Sp
6321 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
6322 .IP "\fB\-fcombine\-stack\-adjustments\fR" 4
6323 .IX Item "-fcombine-stack-adjustments"
6324 Tracks stack adjustments (pushes and pops) and stack memory references
6325 and then tries to find ways to combine them.
6326 .Sp
6327 Enabled by default at \fB\-O1\fR and higher.
6328 .IP "\fB\-fconserve\-stack\fR" 4
6329 .IX Item "-fconserve-stack"
6330 Attempt to minimize stack usage.  The compiler will attempt to use less
6331 stack space, even if that makes the program slower.  This option
6332 implies setting the \fBlarge-stack-frame\fR parameter to 100
6333 and the \fBlarge-stack-frame-growth\fR parameter to 400.
6334 .IP "\fB\-ftree\-reassoc\fR" 4
6335 .IX Item "-ftree-reassoc"
6336 Perform reassociation on trees.  This flag is enabled by default
6337 at \fB\-O\fR and higher.
6338 .IP "\fB\-ftree\-pre\fR" 4
6339 .IX Item "-ftree-pre"
6340 Perform partial redundancy elimination (\s-1PRE\s0) on trees.  This flag is
6341 enabled by default at \fB\-O2\fR and \fB\-O3\fR.
6342 .IP "\fB\-ftree\-forwprop\fR" 4
6343 .IX Item "-ftree-forwprop"
6344 Perform forward propagation on trees.  This flag is enabled by default
6345 at \fB\-O\fR and higher.
6346 .IP "\fB\-ftree\-fre\fR" 4
6347 .IX Item "-ftree-fre"
6348 Perform full redundancy elimination (\s-1FRE\s0) on trees.  The difference
6349 between \s-1FRE\s0 and \s-1PRE\s0 is that \s-1FRE\s0 only considers expressions
6350 that are computed on all paths leading to the redundant computation.
6351 This analysis is faster than \s-1PRE\s0, though it exposes fewer redundancies.
6352 This flag is enabled by default at \fB\-O\fR and higher.
6353 .IP "\fB\-ftree\-phiprop\fR" 4
6354 .IX Item "-ftree-phiprop"
6355 Perform hoisting of loads from conditional pointers on trees.  This
6356 pass is enabled by default at \fB\-O\fR and higher.
6357 .IP "\fB\-ftree\-copy\-prop\fR" 4
6358 .IX Item "-ftree-copy-prop"
6359 Perform copy propagation on trees.  This pass eliminates unnecessary
6360 copy operations.  This flag is enabled by default at \fB\-O\fR and
6361 higher.
6362 .IP "\fB\-fipa\-pure\-const\fR" 4
6363 .IX Item "-fipa-pure-const"
6364 Discover which functions are pure or constant.
6365 Enabled by default at \fB\-O\fR and higher.
6366 .IP "\fB\-fipa\-reference\fR" 4
6367 .IX Item "-fipa-reference"
6368 Discover which static variables do not escape cannot escape the
6369 compilation unit.
6370 Enabled by default at \fB\-O\fR and higher.
6371 .IP "\fB\-fipa\-pta\fR" 4
6372 .IX Item "-fipa-pta"
6373 Perform interprocedural pointer analysis and interprocedural modification
6374 and reference analysis.  This option can cause excessive memory and
6375 compile-time usage on large compilation units.  It is not enabled by
6376 default at any optimization level.
6377 .IP "\fB\-fipa\-profile\fR" 4
6378 .IX Item "-fipa-profile"
6379 Perform interprocedural profile propagation.  The functions called only from
6380 cold functions are marked as cold. Also functions executed once (such as
6381 \&\f(CW\*(C`cold\*(C'\fR, \f(CW\*(C`noreturn\*(C'\fR, static constructors or destructors) are identified. Cold
6382 functions and loop less parts of functions executed once are then optimized for
6383 size.
6384 Enabled by default at \fB\-O\fR and higher.
6385 .IP "\fB\-fipa\-cp\fR" 4
6386 .IX Item "-fipa-cp"
6387 Perform interprocedural constant propagation.
6388 This optimization analyzes the program to determine when values passed
6389 to functions are constants and then optimizes accordingly.
6390 This optimization can substantially increase performance
6391 if the application has constants passed to functions.
6392 This flag is enabled by default at \fB\-O2\fR, \fB\-Os\fR and \fB\-O3\fR.
6393 .IP "\fB\-fipa\-cp\-clone\fR" 4
6394 .IX Item "-fipa-cp-clone"
6395 Perform function cloning to make interprocedural constant propagation stronger.
6396 When enabled, interprocedural constant propagation will perform function cloning
6397 when externally visible function can be called with constant arguments.
6398 Because this optimization can create multiple copies of functions,
6399 it may significantly increase code size
6400 (see \fB\-\-param ipcp\-unit\-growth=\fR\fIvalue\fR).
6401 This flag is enabled by default at \fB\-O3\fR.
6402 .IP "\fB\-fipa\-matrix\-reorg\fR" 4
6403 .IX Item "-fipa-matrix-reorg"
6404 Perform matrix flattening and transposing.
6405 Matrix flattening tries to replace an m\-dimensional matrix
6406 with its equivalent n\-dimensional matrix, where n < m.
6407 This reduces the level of indirection needed for accessing the elements
6408 of the matrix. The second optimization is matrix transposing, which
6409 attempts to change the order of the matrix's dimensions in order to
6410 improve cache locality.
6411 Both optimizations need the \fB\-fwhole\-program\fR flag.
6412 Transposing is enabled only if profiling information is available.
6413 .IP "\fB\-ftree\-sink\fR" 4
6414 .IX Item "-ftree-sink"
6415 Perform forward store motion  on trees.  This flag is
6416 enabled by default at \fB\-O\fR and higher.
6417 .IP "\fB\-ftree\-bit\-ccp\fR" 4
6418 .IX Item "-ftree-bit-ccp"
6419 Perform sparse conditional bit constant propagation on trees and propagate
6420 pointer alignment information.
6421 This pass only operates on local scalar variables and is enabled by default
6422 at \fB\-O\fR and higher.  It requires that \fB\-ftree\-ccp\fR is enabled.
6423 .IP "\fB\-ftree\-ccp\fR" 4
6424 .IX Item "-ftree-ccp"
6425 Perform sparse conditional constant propagation (\s-1CCP\s0) on trees.  This
6426 pass only operates on local scalar variables and is enabled by default
6427 at \fB\-O\fR and higher.
6428 .IP "\fB\-ftree\-switch\-conversion\fR" 4
6429 .IX Item "-ftree-switch-conversion"
6430 Perform conversion of simple initializations in a switch to
6431 initializations from a scalar array.  This flag is enabled by default
6432 at \fB\-O2\fR and higher.
6433 .IP "\fB\-ftree\-tail\-merge\fR" 4
6434 .IX Item "-ftree-tail-merge"
6435 Look for identical code sequences.  When found, replace one with a jump to the
6436 other.  This optimization is known as tail merging or cross jumping.  This flag
6437 is enabled by default at \fB\-O2\fR and higher.  The compilation time
6438 in this pass can
6439 be limited using \fBmax-tail-merge-comparisons\fR parameter and
6440 \&\fBmax-tail-merge-iterations\fR parameter.
6441 .IP "\fB\-ftree\-dce\fR" 4
6442 .IX Item "-ftree-dce"
6443 Perform dead code elimination (\s-1DCE\s0) on trees.  This flag is enabled by
6444 default at \fB\-O\fR and higher.
6445 .IP "\fB\-ftree\-builtin\-call\-dce\fR" 4
6446 .IX Item "-ftree-builtin-call-dce"
6447 Perform conditional dead code elimination (\s-1DCE\s0) for calls to builtin functions
6448 that may set \f(CW\*(C`errno\*(C'\fR but are otherwise side-effect free.  This flag is
6449 enabled by default at \fB\-O2\fR and higher if \fB\-Os\fR is not also
6450 specified.
6451 .IP "\fB\-ftree\-dominator\-opts\fR" 4
6452 .IX Item "-ftree-dominator-opts"
6453 Perform a variety of simple scalar cleanups (constant/copy
6454 propagation, redundancy elimination, range propagation and expression
6455 simplification) based on a dominator tree traversal.  This also
6456 performs jump threading (to reduce jumps to jumps). This flag is
6457 enabled by default at \fB\-O\fR and higher.
6458 .IP "\fB\-ftree\-dse\fR" 4
6459 .IX Item "-ftree-dse"
6460 Perform dead store elimination (\s-1DSE\s0) on trees.  A dead store is a store into
6461 a memory location that is later overwritten by another store without
6462 any intervening loads.  In this case the earlier store can be deleted.  This
6463 flag is enabled by default at \fB\-O\fR and higher.
6464 .IP "\fB\-ftree\-ch\fR" 4
6465 .IX Item "-ftree-ch"
6466 Perform loop header copying on trees.  This is beneficial since it increases
6467 effectiveness of code motion optimizations.  It also saves one jump.  This flag
6468 is enabled by default at \fB\-O\fR and higher.  It is not enabled
6469 for \fB\-Os\fR, since it usually increases code size.
6470 .IP "\fB\-ftree\-loop\-optimize\fR" 4
6471 .IX Item "-ftree-loop-optimize"
6472 Perform loop optimizations on trees.  This flag is enabled by default
6473 at \fB\-O\fR and higher.
6474 .IP "\fB\-ftree\-loop\-linear\fR" 4
6475 .IX Item "-ftree-loop-linear"
6476 Perform loop interchange transformations on tree.  Same as
6477 \&\fB\-floop\-interchange\fR.  To use this code transformation, \s-1GCC\s0 has
6478 to be configured with \fB\-\-with\-ppl\fR and \fB\-\-with\-cloog\fR to
6479 enable the Graphite loop transformation infrastructure.
6480 .IP "\fB\-floop\-interchange\fR" 4
6481 .IX Item "-floop-interchange"
6482 Perform loop interchange transformations on loops.  Interchanging two
6483 nested loops switches the inner and outer loops.  For example, given a
6484 loop like:
6485 .Sp
6486 .Vb 5
6487 \&        DO J = 1, M
6488 \&          DO I = 1, N
6489 \&            A(J, I) = A(J, I) * C
6490 \&          ENDDO
6491 \&        ENDDO
6492 .Ve
6493 .Sp
6494 loop interchange will transform the loop as if the user had written:
6495 .Sp
6496 .Vb 5
6497 \&        DO I = 1, N
6498 \&          DO J = 1, M
6499 \&            A(J, I) = A(J, I) * C
6500 \&          ENDDO
6501 \&        ENDDO
6502 .Ve
6503 .Sp
6504 which can be beneficial when \f(CW\*(C`N\*(C'\fR is larger than the caches,
6505 because in Fortran, the elements of an array are stored in memory
6506 contiguously by column, and the original loop iterates over rows,
6507 potentially creating at each access a cache miss.  This optimization
6508 applies to all the languages supported by \s-1GCC\s0 and is not limited to
6509 Fortran.  To use this code transformation, \s-1GCC\s0 has to be configured
6510 with \fB\-\-with\-ppl\fR and \fB\-\-with\-cloog\fR to enable the
6511 Graphite loop transformation infrastructure.
6512 .IP "\fB\-floop\-strip\-mine\fR" 4
6513 .IX Item "-floop-strip-mine"
6514 Perform loop strip mining transformations on loops.  Strip mining
6515 splits a loop into two nested loops.  The outer loop has strides
6516 equal to the strip size and the inner loop has strides of the
6517 original loop within a strip.  The strip length can be changed
6518 using the \fBloop-block-tile-size\fR parameter.  For example,
6519 given a loop like:
6520 .Sp
6521 .Vb 3
6522 \&        DO I = 1, N
6523 \&          A(I) = A(I) + C
6524 \&        ENDDO
6525 .Ve
6526 .Sp
6527 loop strip mining will transform the loop as if the user had written:
6528 .Sp
6529 .Vb 5
6530 \&        DO II = 1, N, 51
6531 \&          DO I = II, min (II + 50, N)
6532 \&            A(I) = A(I) + C
6533 \&          ENDDO
6534 \&        ENDDO
6535 .Ve
6536 .Sp
6537 This optimization applies to all the languages supported by \s-1GCC\s0 and is
6538 not limited to Fortran.  To use this code transformation, \s-1GCC\s0 has to
6539 be configured with \fB\-\-with\-ppl\fR and \fB\-\-with\-cloog\fR to
6540 enable the Graphite loop transformation infrastructure.
6541 .IP "\fB\-floop\-block\fR" 4
6542 .IX Item "-floop-block"
6543 Perform loop blocking transformations on loops.  Blocking strip mines
6544 each loop in the loop nest such that the memory accesses of the
6545 element loops fit inside caches.  The strip length can be changed
6546 using the \fBloop-block-tile-size\fR parameter.  For example, given
6547 a loop like:
6548 .Sp
6549 .Vb 5
6550 \&        DO I = 1, N
6551 \&          DO J = 1, M
6552 \&            A(J, I) = B(I) + C(J)
6553 \&          ENDDO
6554 \&        ENDDO
6555 .Ve
6556 .Sp
6557 loop blocking will transform the loop as if the user had written:
6558 .Sp
6559 .Vb 9
6560 \&        DO II = 1, N, 51
6561 \&          DO JJ = 1, M, 51
6562 \&            DO I = II, min (II + 50, N)
6563 \&              DO J = JJ, min (JJ + 50, M)
6564 \&                A(J, I) = B(I) + C(J)
6565 \&              ENDDO
6566 \&            ENDDO
6567 \&          ENDDO
6568 \&        ENDDO
6569 .Ve
6570 .Sp
6571 which can be beneficial when \f(CW\*(C`M\*(C'\fR is larger than the caches,
6572 because the innermost loop will iterate over a smaller amount of data
6573 which can be kept in the caches.  This optimization applies to all the
6574 languages supported by \s-1GCC\s0 and is not limited to Fortran.  To use this
6575 code transformation, \s-1GCC\s0 has to be configured with \fB\-\-with\-ppl\fR
6576 and \fB\-\-with\-cloog\fR to enable the Graphite loop transformation
6577 infrastructure.
6578 .IP "\fB\-fgraphite\-identity\fR" 4
6579 .IX Item "-fgraphite-identity"
6580 Enable the identity transformation for graphite.  For every SCoP we generate
6581 the polyhedral representation and transform it back to gimple.  Using
6582 \&\fB\-fgraphite\-identity\fR we can check the costs or benefits of the
6583 \&\s-1GIMPLE\s0 \-> \s-1GRAPHITE\s0 \-> \s-1GIMPLE\s0 transformation.  Some minimal optimizations
6584 are also performed by the code generator CLooG, like index splitting and
6585 dead code elimination in loops.
6586 .IP "\fB\-floop\-flatten\fR" 4
6587 .IX Item "-floop-flatten"
6588 Removes the loop nesting structure: transforms the loop nest into a
6589 single loop.  This transformation can be useful as an enablement
6590 transform for vectorization and parallelization.  This feature
6591 is experimental.
6592 To use this code transformation, \s-1GCC\s0 has to be configured
6593 with \fB\-\-with\-ppl\fR and \fB\-\-with\-cloog\fR to enable the
6594 Graphite loop transformation infrastructure.
6595 .IP "\fB\-floop\-parallelize\-all\fR" 4
6596 .IX Item "-floop-parallelize-all"
6597 Use the Graphite data dependence analysis to identify loops that can
6598 be parallelized.  Parallelize all the loops that can be analyzed to
6599 not contain loop carried dependences without checking that it is
6600 profitable to parallelize the loops.
6601 .IP "\fB\-fcheck\-data\-deps\fR" 4
6602 .IX Item "-fcheck-data-deps"
6603 Compare the results of several data dependence analyzers.  This option
6604 is used for debugging the data dependence analyzers.
6605 .IP "\fB\-ftree\-loop\-if\-convert\fR" 4
6606 .IX Item "-ftree-loop-if-convert"
6607 Attempt to transform conditional jumps in the innermost loops to
6608 branch-less equivalents.  The intent is to remove control-flow from
6609 the innermost loops in order to improve the ability of the
6610 vectorization pass to handle these loops.  This is enabled by default
6611 if vectorization is enabled.
6612 .IP "\fB\-ftree\-loop\-if\-convert\-stores\fR" 4
6613 .IX Item "-ftree-loop-if-convert-stores"
6614 Attempt to also if-convert conditional jumps containing memory writes.
6615 This transformation can be unsafe for multi-threaded programs as it
6616 transforms conditional memory writes into unconditional memory writes.
6617 For example,
6618 .Sp
6619 .Vb 3
6620 \&        for (i = 0; i < N; i++)
6621 \&          if (cond)
6622 \&            A[i] = expr;
6623 .Ve
6624 .Sp
6625 would be transformed to
6626 .Sp
6627 .Vb 2
6628 \&        for (i = 0; i < N; i++)
6629 \&          A[i] = cond ? expr : A[i];
6630 .Ve
6631 .Sp
6632 potentially producing data races.
6633 .IP "\fB\-ftree\-loop\-distribution\fR" 4
6634 .IX Item "-ftree-loop-distribution"
6635 Perform loop distribution.  This flag can improve cache performance on
6636 big loop bodies and allow further loop optimizations, like
6637 parallelization or vectorization, to take place.  For example, the loop
6638 .Sp
6639 .Vb 4
6640 \&        DO I = 1, N
6641 \&          A(I) = B(I) + C
6642 \&          D(I) = E(I) * F
6643 \&        ENDDO
6644 .Ve
6645 .Sp
6646 is transformed to
6647 .Sp
6648 .Vb 6
6649 \&        DO I = 1, N
6650 \&           A(I) = B(I) + C
6651 \&        ENDDO
6652 \&        DO I = 1, N
6653 \&           D(I) = E(I) * F
6654 \&        ENDDO
6655 .Ve
6656 .IP "\fB\-ftree\-loop\-distribute\-patterns\fR" 4
6657 .IX Item "-ftree-loop-distribute-patterns"
6658 Perform loop distribution of patterns that can be code generated with
6659 calls to a library.  This flag is enabled by default at \fB\-O3\fR.
6660 .Sp
6661 This pass distributes the initialization loops and generates a call to
6662 memset zero.  For example, the loop
6663 .Sp
6664 .Vb 4
6665 \&        DO I = 1, N
6666 \&          A(I) = 0
6667 \&          B(I) = A(I) + I
6668 \&        ENDDO
6669 .Ve
6670 .Sp
6671 is transformed to
6672 .Sp
6673 .Vb 6
6674 \&        DO I = 1, N
6675 \&           A(I) = 0
6676 \&        ENDDO
6677 \&        DO I = 1, N
6678 \&           B(I) = A(I) + I
6679 \&        ENDDO
6680 .Ve
6681 .Sp
6682 and the initialization loop is transformed into a call to memset zero.
6683 .IP "\fB\-ftree\-loop\-im\fR" 4
6684 .IX Item "-ftree-loop-im"
6685 Perform loop invariant motion on trees.  This pass moves only invariants that
6686 would be hard to handle at \s-1RTL\s0 level (function calls, operations that expand to
6687 nontrivial sequences of insns).  With \fB\-funswitch\-loops\fR it also moves
6688 operands of conditions that are invariant out of the loop, so that we can use
6689 just trivial invariantness analysis in loop unswitching.  The pass also includes
6690 store motion.
6691 .IP "\fB\-ftree\-loop\-ivcanon\fR" 4
6692 .IX Item "-ftree-loop-ivcanon"
6693 Create a canonical counter for number of iterations in loops for which
6694 determining number of iterations requires complicated analysis.  Later
6695 optimizations then may determine the number easily.  Useful especially
6696 in connection with unrolling.
6697 .IP "\fB\-fivopts\fR" 4
6698 .IX Item "-fivopts"
6699 Perform induction variable optimizations (strength reduction, induction
6700 variable merging and induction variable elimination) on trees.
6701 .IP "\fB\-ftree\-parallelize\-loops=n\fR" 4
6702 .IX Item "-ftree-parallelize-loops=n"
6703 Parallelize loops, i.e., split their iteration space to run in n threads.
6704 This is only possible for loops whose iterations are independent
6705 and can be arbitrarily reordered.  The optimization is only
6706 profitable on multiprocessor machines, for loops that are CPU-intensive,
6707 rather than constrained e.g. by memory bandwidth.  This option
6708 implies \fB\-pthread\fR, and thus is only supported on targets
6709 that have support for \fB\-pthread\fR.
6710 .IP "\fB\-ftree\-pta\fR" 4
6711 .IX Item "-ftree-pta"
6712 Perform function-local points-to analysis on trees.  This flag is
6713 enabled by default at \fB\-O\fR and higher.
6714 .IP "\fB\-ftree\-sra\fR" 4
6715 .IX Item "-ftree-sra"
6716 Perform scalar replacement of aggregates.  This pass replaces structure
6717 references with scalars to prevent committing structures to memory too
6718 early.  This flag is enabled by default at \fB\-O\fR and higher.
6719 .IP "\fB\-ftree\-copyrename\fR" 4
6720 .IX Item "-ftree-copyrename"
6721 Perform copy renaming on trees.  This pass attempts to rename compiler
6722 temporaries to other variables at copy locations, usually resulting in
6723 variable names which more closely resemble the original variables.  This flag
6724 is enabled by default at \fB\-O\fR and higher.
6725 .IP "\fB\-ftree\-ter\fR" 4
6726 .IX Item "-ftree-ter"
6727 Perform temporary expression replacement during the \s-1SSA\-\s0>normal phase.  Single
6728 use/single def temporaries are replaced at their use location with their
6729 defining expression.  This results in non-GIMPLE code, but gives the expanders
6730 much more complex trees to work on resulting in better \s-1RTL\s0 generation.  This is
6731 enabled by default at \fB\-O\fR and higher.
6732 .IP "\fB\-ftree\-vectorize\fR" 4
6733 .IX Item "-ftree-vectorize"
6734 Perform loop vectorization on trees. This flag is enabled by default at
6735 \&\fB\-O3\fR.
6736 .IP "\fB\-ftree\-slp\-vectorize\fR" 4
6737 .IX Item "-ftree-slp-vectorize"
6738 Perform basic block vectorization on trees. This flag is enabled by default at
6739 \&\fB\-O3\fR and when \fB\-ftree\-vectorize\fR is enabled.
6740 .IP "\fB\-ftree\-vect\-loop\-version\fR" 4
6741 .IX Item "-ftree-vect-loop-version"
6742 Perform loop versioning when doing loop vectorization on trees.  When a loop
6743 appears to be vectorizable except that data alignment or data dependence cannot
6744 be determined at compile time, then vectorized and non-vectorized versions of
6745 the loop are generated along with run-time checks for alignment or dependence
6746 to control which version is executed.  This option is enabled by default
6747 except at level \fB\-Os\fR where it is disabled.
6748 .IP "\fB\-fvect\-cost\-model\fR" 4
6749 .IX Item "-fvect-cost-model"
6750 Enable cost model for vectorization.
6751 .IP "\fB\-ftree\-vrp\fR" 4
6752 .IX Item "-ftree-vrp"
6753 Perform Value Range Propagation on trees.  This is similar to the
6754 constant propagation pass, but instead of values, ranges of values are
6755 propagated.  This allows the optimizers to remove unnecessary range
6756 checks like array bound checks and null pointer checks.  This is
6757 enabled by default at \fB\-O2\fR and higher.  Null pointer check
6758 elimination is only done if \fB\-fdelete\-null\-pointer\-checks\fR is
6759 enabled.
6760 .IP "\fB\-ftracer\fR" 4
6761 .IX Item "-ftracer"
6762 Perform tail duplication to enlarge superblock size.  This transformation
6763 simplifies the control flow of the function allowing other optimizations to do
6764 better job.
6765 .IP "\fB\-funroll\-loops\fR" 4
6766 .IX Item "-funroll-loops"
6767 Unroll loops whose number of iterations can be determined at compile
6768 time or upon entry to the loop.  \fB\-funroll\-loops\fR implies
6769 \&\fB\-frerun\-cse\-after\-loop\fR.  This option makes code larger,
6770 and may or may not make it run faster.
6771 .IP "\fB\-funroll\-all\-loops\fR" 4
6772 .IX Item "-funroll-all-loops"
6773 Unroll all loops, even if their number of iterations is uncertain when
6774 the loop is entered.  This usually makes programs run more slowly.
6775 \&\fB\-funroll\-all\-loops\fR implies the same options as
6776 \&\fB\-funroll\-loops\fR,
6777 .IP "\fB\-fsplit\-ivs\-in\-unroller\fR" 4
6778 .IX Item "-fsplit-ivs-in-unroller"
6779 Enables expressing of values of induction variables in later iterations
6780 of the unrolled loop using the value in the first iteration.  This breaks
6781 long dependency chains, thus improving efficiency of the scheduling passes.
6782 .Sp
6783 Combination of \fB\-fweb\fR and \s-1CSE\s0 is often sufficient to obtain the
6784 same effect.  However in cases the loop body is more complicated than
6785 a single basic block, this is not reliable.  It also does not work at all
6786 on some of the architectures due to restrictions in the \s-1CSE\s0 pass.
6787 .Sp
6788 This optimization is enabled by default.
6789 .IP "\fB\-fvariable\-expansion\-in\-unroller\fR" 4
6790 .IX Item "-fvariable-expansion-in-unroller"
6791 With this option, the compiler will create multiple copies of some
6792 local variables when unrolling a loop which can result in superior code.
6793 .IP "\fB\-fpartial\-inlining\fR" 4
6794 .IX Item "-fpartial-inlining"
6795 Inline parts of functions.  This option has any effect only
6796 when inlining itself is turned on by the \fB\-finline\-functions\fR
6797 or \fB\-finline\-small\-functions\fR options.
6798 .Sp
6799 Enabled at level \fB\-O2\fR.
6800 .IP "\fB\-fpredictive\-commoning\fR" 4
6801 .IX Item "-fpredictive-commoning"
6802 Perform predictive commoning optimization, i.e., reusing computations
6803 (especially memory loads and stores) performed in previous
6804 iterations of loops.
6805 .Sp
6806 This option is enabled at level \fB\-O3\fR.
6807 .IP "\fB\-fprefetch\-loop\-arrays\fR" 4
6808 .IX Item "-fprefetch-loop-arrays"
6809 If supported by the target machine, generate instructions to prefetch
6810 memory to improve the performance of loops that access large arrays.
6811 .Sp
6812 This option may generate better or worse code; results are highly
6813 dependent on the structure of loops within the source code.
6814 .Sp
6815 Disabled at level \fB\-Os\fR.
6816 .IP "\fB\-fno\-peephole\fR" 4
6817 .IX Item "-fno-peephole"
6818 .PD 0
6819 .IP "\fB\-fno\-peephole2\fR" 4
6820 .IX Item "-fno-peephole2"
6821 .PD
6822 Disable any machine-specific peephole optimizations.  The difference
6823 between \fB\-fno\-peephole\fR and \fB\-fno\-peephole2\fR is in how they
6824 are implemented in the compiler; some targets use one, some use the
6825 other, a few use both.
6826 .Sp
6827 \&\fB\-fpeephole\fR is enabled by default.
6828 \&\fB\-fpeephole2\fR enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
6829 .IP "\fB\-fno\-guess\-branch\-probability\fR" 4
6830 .IX Item "-fno-guess-branch-probability"
6831 Do not guess branch probabilities using heuristics.
6832 .Sp
6833 \&\s-1GCC\s0 will use heuristics to guess branch probabilities if they are
6834 not provided by profiling feedback (\fB\-fprofile\-arcs\fR).  These
6835 heuristics are based on the control flow graph.  If some branch probabilities
6836 are specified by \fB_\|_builtin_expect\fR, then the heuristics will be
6837 used to guess branch probabilities for the rest of the control flow graph,
6838 taking the \fB_\|_builtin_expect\fR info into account.  The interactions
6839 between the heuristics and \fB_\|_builtin_expect\fR can be complex, and in
6840 some cases, it may be useful to disable the heuristics so that the effects
6841 of \fB_\|_builtin_expect\fR are easier to understand.
6842 .Sp
6843 The default is \fB\-fguess\-branch\-probability\fR at levels
6844 \&\fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
6845 .IP "\fB\-freorder\-blocks\fR" 4
6846 .IX Item "-freorder-blocks"
6847 Reorder basic blocks in the compiled function in order to reduce number of
6848 taken branches and improve code locality.
6849 .Sp
6850 Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
6851 .IP "\fB\-freorder\-blocks\-and\-partition\fR" 4
6852 .IX Item "-freorder-blocks-and-partition"
6853 In addition to reordering basic blocks in the compiled function, in order
6854 to reduce number of taken branches, partitions hot and cold basic blocks
6855 into separate sections of the assembly and .o files, to improve
6856 paging and cache locality performance.
6857 .Sp
6858 This optimization is automatically turned off in the presence of
6859 exception handling, for linkonce sections, for functions with a user-defined
6860 section attribute and on any architecture that does not support named
6861 sections.
6862 .IP "\fB\-freorder\-functions\fR" 4
6863 .IX Item "-freorder-functions"
6864 Reorder functions in the object file in order to
6865 improve code locality.  This is implemented by using special
6866 subsections \f(CW\*(C`.text.hot\*(C'\fR for most frequently executed functions and
6867 \&\f(CW\*(C`.text.unlikely\*(C'\fR for unlikely executed functions.  Reordering is done by
6868 the linker so object file format must support named sections and linker must
6869 place them in a reasonable way.
6870 .Sp
6871 Also profile feedback must be available in to make this option effective.  See
6872 \&\fB\-fprofile\-arcs\fR for details.
6873 .Sp
6874 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
6875 .IP "\fB\-fstrict\-aliasing\fR" 4
6876 .IX Item "-fstrict-aliasing"
6877 Allow the compiler to assume the strictest aliasing rules applicable to
6878 the language being compiled.  For C (and \*(C+), this activates
6879 optimizations based on the type of expressions.  In particular, an
6880 object of one type is assumed never to reside at the same address as an
6881 object of a different type, unless the types are almost the same.  For
6882 example, an \f(CW\*(C`unsigned int\*(C'\fR can alias an \f(CW\*(C`int\*(C'\fR, but not a
6883 \&\f(CW\*(C`void*\*(C'\fR or a \f(CW\*(C`double\*(C'\fR.  A character type may alias any other
6884 type.
6885 .Sp
6886 Pay special attention to code like this:
6887 .Sp
6888 .Vb 4
6889 \&        union a_union {
6890 \&          int i;
6891 \&          double d;
6892 \&        };
6893 \&        
6894 \&        int f() {
6895 \&          union a_union t;
6896 \&          t.d = 3.0;
6897 \&          return t.i;
6898 \&        }
6899 .Ve
6900 .Sp
6901 The practice of reading from a different union member than the one most
6902 recently written to (called \*(L"type-punning\*(R") is common.  Even with
6903 \&\fB\-fstrict\-aliasing\fR, type-punning is allowed, provided the memory
6904 is accessed through the union type.  So, the code above will work as
6905 expected.    However, this code might not:
6906 .Sp
6907 .Vb 7
6908 \&        int f() {
6909 \&          union a_union t;
6910 \&          int* ip;
6911 \&          t.d = 3.0;
6912 \&          ip = &t.i;
6913 \&          return *ip;
6914 \&        }
6915 .Ve
6916 .Sp
6917 Similarly, access by taking the address, casting the resulting pointer
6918 and dereferencing the result has undefined behavior, even if the cast
6919 uses a union type, e.g.:
6920 .Sp
6921 .Vb 4
6922 \&        int f() {
6923 \&          double d = 3.0;
6924 \&          return ((union a_union *) &d)\->i;
6925 \&        }
6926 .Ve
6927 .Sp
6928 The \fB\-fstrict\-aliasing\fR option is enabled at levels
6929 \&\fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
6930 .IP "\fB\-fstrict\-overflow\fR" 4
6931 .IX Item "-fstrict-overflow"
6932 Allow the compiler to assume strict signed overflow rules, depending
6933 on the language being compiled.  For C (and \*(C+) this means that
6934 overflow when doing arithmetic with signed numbers is undefined, which
6935 means that the compiler may assume that it will not happen.  This
6936 permits various optimizations.  For example, the compiler will assume
6937 that an expression like \f(CW\*(C`i + 10 > i\*(C'\fR will always be true for
6938 signed \f(CW\*(C`i\*(C'\fR.  This assumption is only valid if signed overflow is
6939 undefined, as the expression is false if \f(CW\*(C`i + 10\*(C'\fR overflows when
6940 using twos complement arithmetic.  When this option is in effect any
6941 attempt to determine whether an operation on signed numbers will
6942 overflow must be written carefully to not actually involve overflow.
6943 .Sp
6944 This option also allows the compiler to assume strict pointer
6945 semantics: given a pointer to an object, if adding an offset to that
6946 pointer does not produce a pointer to the same object, the addition is
6947 undefined.  This permits the compiler to conclude that \f(CW\*(C`p + u >
6948 p\*(C'\fR is always true for a pointer \f(CW\*(C`p\*(C'\fR and unsigned integer
6949 \&\f(CW\*(C`u\*(C'\fR.  This assumption is only valid because pointer wraparound is
6950 undefined, as the expression is false if \f(CW\*(C`p + u\*(C'\fR overflows using
6951 twos complement arithmetic.
6952 .Sp
6953 See also the \fB\-fwrapv\fR option.  Using \fB\-fwrapv\fR means
6954 that integer signed overflow is fully defined: it wraps.  When
6955 \&\fB\-fwrapv\fR is used, there is no difference between
6956 \&\fB\-fstrict\-overflow\fR and \fB\-fno\-strict\-overflow\fR for
6957 integers.  With \fB\-fwrapv\fR certain types of overflow are
6958 permitted.  For example, if the compiler gets an overflow when doing
6959 arithmetic on constants, the overflowed value can still be used with
6960 \&\fB\-fwrapv\fR, but not otherwise.
6961 .Sp
6962 The \fB\-fstrict\-overflow\fR option is enabled at levels
6963 \&\fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
6964 .IP "\fB\-falign\-functions\fR" 4
6965 .IX Item "-falign-functions"
6966 .PD 0
6967 .IP "\fB\-falign\-functions=\fR\fIn\fR" 4
6968 .IX Item "-falign-functions=n"
6969 .PD
6970 Align the start of functions to the next power-of-two greater than
6971 \&\fIn\fR, skipping up to \fIn\fR bytes.  For instance,
6972 \&\fB\-falign\-functions=32\fR aligns functions to the next 32\-byte
6973 boundary, but \fB\-falign\-functions=24\fR would align to the next
6974 32\-byte boundary only if this can be done by skipping 23 bytes or less.
6975 .Sp
6976 \&\fB\-fno\-align\-functions\fR and \fB\-falign\-functions=1\fR are
6977 equivalent and mean that functions will not be aligned.
6978 .Sp
6979 Some assemblers only support this flag when \fIn\fR is a power of two;
6980 in that case, it is rounded up.
6981 .Sp
6982 If \fIn\fR is not specified or is zero, use a machine-dependent default.
6983 .Sp
6984 Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
6985 .IP "\fB\-falign\-labels\fR" 4
6986 .IX Item "-falign-labels"
6987 .PD 0
6988 .IP "\fB\-falign\-labels=\fR\fIn\fR" 4
6989 .IX Item "-falign-labels=n"
6990 .PD
6991 Align all branch targets to a power-of-two boundary, skipping up to
6992 \&\fIn\fR bytes like \fB\-falign\-functions\fR.  This option can easily
6993 make code slower, because it must insert dummy operations for when the
6994 branch target is reached in the usual flow of the code.
6995 .Sp
6996 \&\fB\-fno\-align\-labels\fR and \fB\-falign\-labels=1\fR are
6997 equivalent and mean that labels will not be aligned.
6998 .Sp
6999 If \fB\-falign\-loops\fR or \fB\-falign\-jumps\fR are applicable and
7000 are greater than this value, then their values are used instead.
7001 .Sp
7002 If \fIn\fR is not specified or is zero, use a machine-dependent default
7003 which is very likely to be \fB1\fR, meaning no alignment.
7004 .Sp
7005 Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
7006 .IP "\fB\-falign\-loops\fR" 4
7007 .IX Item "-falign-loops"
7008 .PD 0
7009 .IP "\fB\-falign\-loops=\fR\fIn\fR" 4
7010 .IX Item "-falign-loops=n"
7011 .PD
7012 Align loops to a power-of-two boundary, skipping up to \fIn\fR bytes
7013 like \fB\-falign\-functions\fR.  The hope is that the loop will be
7014 executed many times, which will make up for any execution of the dummy
7015 operations.
7016 .Sp
7017 \&\fB\-fno\-align\-loops\fR and \fB\-falign\-loops=1\fR are
7018 equivalent and mean that loops will not be aligned.
7019 .Sp
7020 If \fIn\fR is not specified or is zero, use a machine-dependent default.
7021 .Sp
7022 Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
7023 .IP "\fB\-falign\-jumps\fR" 4
7024 .IX Item "-falign-jumps"
7025 .PD 0
7026 .IP "\fB\-falign\-jumps=\fR\fIn\fR" 4
7027 .IX Item "-falign-jumps=n"
7028 .PD
7029 Align branch targets to a power-of-two boundary, for branch targets
7030 where the targets can only be reached by jumping, skipping up to \fIn\fR
7031 bytes like \fB\-falign\-functions\fR.  In this case, no dummy operations
7032 need be executed.
7033 .Sp
7034 \&\fB\-fno\-align\-jumps\fR and \fB\-falign\-jumps=1\fR are
7035 equivalent and mean that loops will not be aligned.
7036 .Sp
7037 If \fIn\fR is not specified or is zero, use a machine-dependent default.
7038 .Sp
7039 Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
7040 .IP "\fB\-funit\-at\-a\-time\fR" 4
7041 .IX Item "-funit-at-a-time"
7042 This option is left for compatibility reasons. \fB\-funit\-at\-a\-time\fR
7043 has no effect, while \fB\-fno\-unit\-at\-a\-time\fR implies
7044 \&\fB\-fno\-toplevel\-reorder\fR and \fB\-fno\-section\-anchors\fR.
7045 .Sp
7046 Enabled by default.
7047 .IP "\fB\-fno\-toplevel\-reorder\fR" 4
7048 .IX Item "-fno-toplevel-reorder"
7049 Do not reorder top-level functions, variables, and \f(CW\*(C`asm\*(C'\fR
7050 statements.  Output them in the same order that they appear in the
7051 input file.  When this option is used, unreferenced static variables
7052 will not be removed.  This option is intended to support existing code
7053 that relies on a particular ordering.  For new code, it is better to
7054 use attributes.
7055 .Sp
7056 Enabled at level \fB\-O0\fR.  When disabled explicitly, it also implies
7057 \&\fB\-fno\-section\-anchors\fR, which is otherwise enabled at \fB\-O0\fR on some
7058 targets.
7059 .IP "\fB\-fweb\fR" 4
7060 .IX Item "-fweb"
7061 Constructs webs as commonly used for register allocation purposes and assign
7062 each web individual pseudo register.  This allows the register allocation pass
7063 to operate on pseudos directly, but also strengthens several other optimization
7064 passes, such as \s-1CSE\s0, loop optimizer and trivial dead code remover.  It can,
7065 however, make debugging impossible, since variables will no longer stay in a
7066 \&\*(L"home register\*(R".
7067 .Sp
7068 Enabled by default with \fB\-funroll\-loops\fR.
7069 .IP "\fB\-fwhole\-program\fR" 4
7070 .IX Item "-fwhole-program"
7071 Assume that the current compilation unit represents the whole program being
7072 compiled.  All public functions and variables with the exception of \f(CW\*(C`main\*(C'\fR
7073 and those merged by attribute \f(CW\*(C`externally_visible\*(C'\fR become static functions
7074 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.
7075 While this option is equivalent to proper use of the \f(CW\*(C`static\*(C'\fR keyword for
7076 programs consisting of a single file, in combination with option
7077 \&\fB\-flto\fR this flag can be used to
7078 compile many smaller scale programs since the functions and variables become
7079 local for the whole combined compilation unit, not for the single source file
7080 itself.
7081 .Sp
7082 This option implies \fB\-fwhole\-file\fR for Fortran programs.
7083 .IP "\fB\-flto[=\fR\fIn\fR\fB]\fR" 4
7084 .IX Item "-flto[=n]"
7085 This option runs the standard link-time optimizer.  When invoked
7086 with source code, it generates \s-1GIMPLE\s0 (one of \s-1GCC\s0's internal
7087 representations) and writes it to special \s-1ELF\s0 sections in the object
7088 file.  When the object files are linked together, all the function
7089 bodies are read from these \s-1ELF\s0 sections and instantiated as if they
7090 had been part of the same translation unit.
7091 .Sp
7092 To use the link-time optimizer, \fB\-flto\fR needs to be specified at
7093 compile time and during the final link.  For example:
7094 .Sp
7095 .Vb 3
7096 \&        gcc \-c \-O2 \-flto foo.c
7097 \&        gcc \-c \-O2 \-flto bar.c
7098 \&        gcc \-o myprog \-flto \-O2 foo.o bar.o
7099 .Ve
7100 .Sp
7101 The first two invocations to \s-1GCC\s0 save a bytecode representation
7102 of \s-1GIMPLE\s0 into special \s-1ELF\s0 sections inside \fIfoo.o\fR and
7103 \&\fIbar.o\fR.  The final invocation reads the \s-1GIMPLE\s0 bytecode from
7104 \&\fIfoo.o\fR and \fIbar.o\fR, merges the two files into a single
7105 internal image, and compiles the result as usual.  Since both
7106 \&\fIfoo.o\fR and \fIbar.o\fR are merged into a single image, this
7107 causes all the interprocedural analyses and optimizations in \s-1GCC\s0 to
7108 work across the two files as if they were a single one.  This means,
7109 for example, that the inliner is able to inline functions in
7110 \&\fIbar.o\fR into functions in \fIfoo.o\fR and vice-versa.
7111 .Sp
7112 Another (simpler) way to enable link-time optimization is:
7113 .Sp
7114 .Vb 1
7115 \&        gcc \-o myprog \-flto \-O2 foo.c bar.c
7116 .Ve
7117 .Sp
7118 The above generates bytecode for \fIfoo.c\fR and \fIbar.c\fR,
7119 merges them together into a single \s-1GIMPLE\s0 representation and optimizes
7120 them as usual to produce \fImyprog\fR.
7121 .Sp
7122 The only important thing to keep in mind is that to enable link-time
7123 optimizations the \fB\-flto\fR flag needs to be passed to both the
7124 compile and the link commands.
7125 .Sp
7126 To make whole program optimization effective, it is necessary to make
7127 certain whole program assumptions.  The compiler needs to know
7128 what functions and variables can be accessed by libraries and runtime
7129 outside of the link-time optimized unit.  When supported by the linker,
7130 the linker plugin (see \fB\-fuse\-linker\-plugin\fR) passes information
7131 to the compiler about used and externally visible symbols.  When
7132 the linker plugin is not available, \fB\-fwhole\-program\fR should be
7133 used to allow the compiler to make these assumptions, which leads
7134 to more aggressive optimization decisions.
7135 .Sp
7136 Note that when a file is compiled with \fB\-flto\fR, the generated
7137 object file is larger than a regular object file because it 
7138 contains \s-1GIMPLE\s0 bytecodes and the usual final code.  This means that
7139 object files with \s-1LTO\s0 information can be linked as normal object
7140 files; if \fB\-flto\fR is not passed to the linker, no
7141 interprocedural optimizations are applied.
7142 .Sp
7143 Additionally, the optimization flags used to compile individual files
7144 are not necessarily related to those used at link time.  For instance,
7145 .Sp
7146 .Vb 3
7147 \&        gcc \-c \-O0 \-flto foo.c
7148 \&        gcc \-c \-O0 \-flto bar.c
7149 \&        gcc \-o myprog \-flto \-O3 foo.o bar.o
7150 .Ve
7151 .Sp
7152 This produces individual object files with unoptimized assembler
7153 code, but the resulting binary \fImyprog\fR is optimized at
7154 \&\fB\-O3\fR.  If, instead, the final binary is generated without
7155 \&\fB\-flto\fR, then \fImyprog\fR is not optimized.
7156 .Sp
7157 When producing the final binary with \fB\-flto\fR, \s-1GCC\s0 only
7158 applies link-time optimizations to those files that contain bytecode.
7159 Therefore, you can mix and match object files and libraries with
7160 \&\s-1GIMPLE\s0 bytecodes and final object code.  \s-1GCC\s0 automatically selects
7161 which files to optimize in \s-1LTO\s0 mode and which files to link without
7162 further processing.
7163 .Sp
7164 There are some code generation flags preserved by \s-1GCC\s0 when
7165 generating bytecodes, as they need to be used during the final link
7166 stage.  Currently, the following options are saved into the \s-1GIMPLE\s0
7167 bytecode files: \fB\-fPIC\fR, \fB\-fcommon\fR and all the
7168 \&\fB\-m\fR target flags.
7169 .Sp
7170 At link time, these options are read in and reapplied.  Note that the
7171 current implementation makes no attempt to recognize conflicting
7172 values for these options.  If different files have conflicting option
7173 values (e.g., one file is compiled with \fB\-fPIC\fR and another
7174 isn't), the compiler simply uses the last value read from the
7175 bytecode files.  It is recommended, then, that you compile all the files
7176 participating in the same link with the same options.
7177 .Sp
7178 If \s-1LTO\s0 encounters objects with C linkage declared with incompatible
7179 types in separate translation units to be linked together (undefined
7180 behavior according to \s-1ISO\s0 C99 6.2.7), a non-fatal diagnostic may be
7181 issued.  The behavior is still undefined at run time.
7182 .Sp
7183 Another feature of \s-1LTO\s0 is that it is possible to apply interprocedural
7184 optimizations on files written in different languages.  This requires
7185 support in the language front end.  Currently, the C, \*(C+ and
7186 Fortran front ends are capable of emitting \s-1GIMPLE\s0 bytecodes, so
7187 something like this should work:
7188 .Sp
7189 .Vb 4
7190 \&        gcc \-c \-flto foo.c
7191 \&        g++ \-c \-flto bar.cc
7192 \&        gfortran \-c \-flto baz.f90
7193 \&        g++ \-o myprog \-flto \-O3 foo.o bar.o baz.o \-lgfortran
7194 .Ve
7195 .Sp
7196 Notice that the final link is done with \fBg++\fR to get the \*(C+
7197 runtime libraries and \fB\-lgfortran\fR is added to get the Fortran
7198 runtime libraries.  In general, when mixing languages in \s-1LTO\s0 mode, you
7199 should use the same link command options as when mixing languages in a
7200 regular (non-LTO) compilation; all you need to add is \fB\-flto\fR to
7201 all the compile and link commands.
7202 .Sp
7203 If object files containing \s-1GIMPLE\s0 bytecode are stored in a library archive, say
7204 \&\fIlibfoo.a\fR, it is possible to extract and use them in an \s-1LTO\s0 link if you
7205 are using a linker with plugin support.  To enable this feature, use
7206 the flag \fB\-fuse\-linker\-plugin\fR at link time:
7207 .Sp
7208 .Vb 1
7209 \&        gcc \-o myprog \-O2 \-flto \-fuse\-linker\-plugin a.o b.o \-lfoo
7210 .Ve
7211 .Sp
7212 With the linker plugin enabled, the linker extracts the needed
7213 \&\s-1GIMPLE\s0 files from \fIlibfoo.a\fR and passes them on to the running \s-1GCC\s0
7214 to make them part of the aggregated \s-1GIMPLE\s0 image to be optimized.
7215 .Sp
7216 If you are not using a linker with plugin support and/or do not
7217 enable the linker plugin, then the objects inside \fIlibfoo.a\fR
7218 are extracted and linked as usual, but they do not participate
7219 in the \s-1LTO\s0 optimization process.
7220 .Sp
7221 Link-time optimizations do not require the presence of the whole program to
7222 operate.  If the program does not require any symbols to be exported, it is
7223 possible to combine \fB\-flto\fR and \fB\-fwhole\-program\fR to allow
7224 the interprocedural optimizers to use more aggressive assumptions which may
7225 lead to improved optimization opportunities.
7226 Use of \fB\-fwhole\-program\fR is not needed when linker plugin is
7227 active (see \fB\-fuse\-linker\-plugin\fR).
7228 .Sp
7229 The current implementation of \s-1LTO\s0 makes no
7230 attempt to generate bytecode that is portable between different
7231 types of hosts.  The bytecode files are versioned and there is a
7232 strict version check, so bytecode files generated in one version of
7233 \&\s-1GCC\s0 will not work with an older/newer version of \s-1GCC\s0.
7234 .Sp
7235 Link-time optimization does not work well with generation of debugging
7236 information.  Combining \fB\-flto\fR with
7237 \&\fB\-g\fR is currently experimental and expected to produce wrong
7238 results.
7239 .Sp
7240 If you specify the optional \fIn\fR, the optimization and code
7241 generation done at link time is executed in parallel using \fIn\fR
7242 parallel jobs by utilizing an installed \fBmake\fR program.  The
7243 environment variable \fB\s-1MAKE\s0\fR may be used to override the program
7244 used.  The default value for \fIn\fR is 1.
7245 .Sp
7246 You can also specify \fB\-flto=jobserver\fR to use \s-1GNU\s0 make's
7247 job server mode to determine the number of parallel jobs. This
7248 is useful when the Makefile calling \s-1GCC\s0 is already executing in parallel.
7249 You must prepend a \fB+\fR to the command recipe in the parent Makefile
7250 for this to work.  This option likely only works if \fB\s-1MAKE\s0\fR is
7251 \&\s-1GNU\s0 make.
7252 .Sp
7253 This option is disabled by default
7254 .IP "\fB\-flto\-partition=\fR\fIalg\fR" 4
7255 .IX Item "-flto-partition=alg"
7256 Specify the partitioning algorithm used by the link-time optimizer.
7257 The value is either \f(CW\*(C`1to1\*(C'\fR to specify a partitioning mirroring
7258 the original source files or \f(CW\*(C`balanced\*(C'\fR to specify partitioning
7259 into equally sized chunks (whenever possible).  Specifying \f(CW\*(C`none\*(C'\fR
7260 as an algorithm disables partitioning and streaming completely. The
7261 default value is \f(CW\*(C`balanced\*(C'\fR.
7262 .IP "\fB\-flto\-compression\-level=\fR\fIn\fR" 4
7263 .IX Item "-flto-compression-level=n"
7264 This option specifies the level of compression used for intermediate
7265 language written to \s-1LTO\s0 object files, and is only meaningful in
7266 conjunction with \s-1LTO\s0 mode (\fB\-flto\fR).  Valid
7267 values are 0 (no compression) to 9 (maximum compression).  Values
7268 outside this range are clamped to either 0 or 9.  If the option is not
7269 given, a default balanced compression setting is used.
7270 .IP "\fB\-flto\-report\fR" 4
7271 .IX Item "-flto-report"
7272 Prints a report with internal details on the workings of the link-time
7273 optimizer.  The contents of this report vary from version to version.
7274 It is meant to be useful to \s-1GCC\s0 developers when processing object
7275 files in \s-1LTO\s0 mode (via \fB\-flto\fR).
7276 .Sp
7277 Disabled by default.
7278 .IP "\fB\-fuse\-linker\-plugin\fR" 4
7279 .IX Item "-fuse-linker-plugin"
7280 Enables the use of a linker plugin during link-time optimization.  This
7281 option relies on plugin support in the linker, which is available in gold
7282 or in \s-1GNU\s0 ld 2.21 or newer.
7283 .Sp
7284 This option enables the extraction of object files with \s-1GIMPLE\s0 bytecode out
7285 of library archives. This improves the quality of optimization by exposing
7286 more code to the link-time optimizer.  This information specifies what
7287 symbols can be accessed externally (by non-LTO object or during dynamic
7288 linking).  Resulting code quality improvements on binaries (and shared
7289 libraries that use hidden visibility) are similar to \f(CW\*(C`\-fwhole\-program\*(C'\fR.
7290 See \fB\-flto\fR for a description of the effect of this flag and how to
7291 use it.
7292 .Sp
7293 This option is enabled by default when \s-1LTO\s0 support in \s-1GCC\s0 is enabled
7294 and \s-1GCC\s0 was configured for use with
7295 a linker supporting plugins (\s-1GNU\s0 ld 2.21 or newer or gold).
7296 .IP "\fB\-ffat\-lto\-objects\fR" 4
7297 .IX Item "-ffat-lto-objects"
7298 Fat \s-1LTO\s0 objects are object files that contain both the intermediate language
7299 and the object code. This makes them usable for both \s-1LTO\s0 linking and normal
7300 linking. This option is effective only when compiling with \fB\-flto\fR
7301 and is ignored at link time.
7302 .Sp
7303 \&\fB\-fno\-fat\-lto\-objects\fR improves compilation time over plain \s-1LTO\s0, but
7304 requires the complete toolchain to be aware of \s-1LTO\s0. It requires a linker with
7305 linker plugin support for basic functionality.  Additionally, nm, ar and ranlib
7306 need to support linker plugins to allow a full-featured build environment
7307 (capable of building static libraries etc).
7308 .Sp
7309 The default is \fB\-ffat\-lto\-objects\fR but this default is intended to
7310 change in future releases when linker plugin enabled environments become more
7311 common.
7312 .IP "\fB\-fcompare\-elim\fR" 4
7313 .IX Item "-fcompare-elim"
7314 After register allocation and post-register allocation instruction splitting,
7315 identify arithmetic instructions that compute processor flags similar to a
7316 comparison operation based on that arithmetic.  If possible, eliminate the
7317 explicit comparison operation.
7318 .Sp
7319 This pass only applies to certain targets that cannot explicitly represent
7320 the comparison operation before register allocation is complete.
7321 .Sp
7322 Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
7323 .IP "\fB\-fcprop\-registers\fR" 4
7324 .IX Item "-fcprop-registers"
7325 After register allocation and post-register allocation instruction splitting,
7326 we perform a copy-propagation pass to try to reduce scheduling dependencies
7327 and occasionally eliminate the copy.
7328 .Sp
7329 Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
7330 .IP "\fB\-fprofile\-correction\fR" 4
7331 .IX Item "-fprofile-correction"
7332 Profiles collected using an instrumented binary for multi-threaded programs may
7333 be inconsistent due to missed counter updates. When this option is specified,
7334 \&\s-1GCC\s0 will use heuristics to correct or smooth out such inconsistencies. By
7335 default, \s-1GCC\s0 will emit an error message when an inconsistent profile is detected.
7336 .IP "\fB\-fprofile\-dir=\fR\fIpath\fR" 4
7337 .IX Item "-fprofile-dir=path"
7338 Set the directory to search for the profile data files in to \fIpath\fR.
7339 This option affects only the profile data generated by
7340 \&\fB\-fprofile\-generate\fR, \fB\-ftest\-coverage\fR, \fB\-fprofile\-arcs\fR
7341 and used by \fB\-fprofile\-use\fR and \fB\-fbranch\-probabilities\fR
7342 and its related options.  Both absolute and relative paths can be used.
7343 By default, \s-1GCC\s0 will use the current directory as \fIpath\fR, thus the
7344 profile data file will appear in the same directory as the object file.
7345 .IP "\fB\-fprofile\-generate\fR" 4
7346 .IX Item "-fprofile-generate"
7347 .PD 0
7348 .IP "\fB\-fprofile\-generate=\fR\fIpath\fR" 4
7349 .IX Item "-fprofile-generate=path"
7350 .PD
7351 Enable options usually used for instrumenting application to produce
7352 profile useful for later recompilation with profile feedback based
7353 optimization.  You must use \fB\-fprofile\-generate\fR both when
7354 compiling and when linking your program.
7355 .Sp
7356 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.
7357 .Sp
7358 If \fIpath\fR is specified, \s-1GCC\s0 will look at the \fIpath\fR to find
7359 the profile feedback data files. See \fB\-fprofile\-dir\fR.
7360 .IP "\fB\-fprofile\-use\fR" 4
7361 .IX Item "-fprofile-use"
7362 .PD 0
7363 .IP "\fB\-fprofile\-use=\fR\fIpath\fR" 4
7364 .IX Item "-fprofile-use=path"
7365 .PD
7366 Enable profile feedback directed optimizations, and optimizations
7367 generally profitable only with profile feedback available.
7368 .Sp
7369 The following options are enabled: \f(CW\*(C`\-fbranch\-probabilities\*(C'\fR, \f(CW\*(C`\-fvpt\*(C'\fR,
7370 \&\f(CW\*(C`\-funroll\-loops\*(C'\fR, \f(CW\*(C`\-fpeel\-loops\*(C'\fR, \f(CW\*(C`\-ftracer\*(C'\fR
7371 .Sp
7372 By default, \s-1GCC\s0 emits an error message if the feedback profiles do not
7373 match the source code.  This error can be turned into a warning by using
7374 \&\fB\-Wcoverage\-mismatch\fR.  Note this may result in poorly optimized
7375 code.
7376 .Sp
7377 If \fIpath\fR is specified, \s-1GCC\s0 will look at the \fIpath\fR to find
7378 the profile feedback data files. See \fB\-fprofile\-dir\fR.
7379 .PP
7380 The following options control compiler behavior regarding floating-point 
7381 arithmetic.  These options trade off between speed and
7382 correctness.  All must be specifically enabled.
7383 .IP "\fB\-ffloat\-store\fR" 4
7384 .IX Item "-ffloat-store"
7385 Do not store floating-point variables in registers, and inhibit other
7386 options that might change whether a floating-point value is taken from a
7387 register or memory.
7388 .Sp
7389 This option prevents undesirable excess precision on machines such as
7390 the 68000 where the floating registers (of the 68881) keep more
7391 precision than a \f(CW\*(C`double\*(C'\fR is supposed to have.  Similarly for the
7392 x86 architecture.  For most programs, the excess precision does only
7393 good, but a few programs rely on the precise definition of \s-1IEEE\s0 floating
7394 point.  Use \fB\-ffloat\-store\fR for such programs, after modifying
7395 them to store all pertinent intermediate computations into variables.
7396 .IP "\fB\-fexcess\-precision=\fR\fIstyle\fR" 4
7397 .IX Item "-fexcess-precision=style"
7398 This option allows further control over excess precision on machines
7399 where floating-point registers have more precision than the \s-1IEEE\s0
7400 \&\f(CW\*(C`float\*(C'\fR and \f(CW\*(C`double\*(C'\fR types and the processor does not
7401 support operations rounding to those types.  By default,
7402 \&\fB\-fexcess\-precision=fast\fR is in effect; this means that
7403 operations are carried out in the precision of the registers and that
7404 it is unpredictable when rounding to the types specified in the source
7405 code takes place.  When compiling C, if
7406 \&\fB\-fexcess\-precision=standard\fR is specified then excess
7407 precision will follow the rules specified in \s-1ISO\s0 C99; in particular,
7408 both casts and assignments cause values to be rounded to their
7409 semantic types (whereas \fB\-ffloat\-store\fR only affects
7410 assignments).  This option is enabled by default for C if a strict
7411 conformance option such as \fB\-std=c99\fR is used.
7412 .Sp
7413 \&\fB\-fexcess\-precision=standard\fR is not implemented for languages
7414 other than C, and has no effect if
7415 \&\fB\-funsafe\-math\-optimizations\fR or \fB\-ffast\-math\fR is
7416 specified.  On the x86, it also has no effect if \fB\-mfpmath=sse\fR
7417 or \fB\-mfpmath=sse+387\fR is specified; in the former case, \s-1IEEE\s0
7418 semantics apply without excess precision, and in the latter, rounding
7419 is unpredictable.
7420 .IP "\fB\-ffast\-math\fR" 4
7421 .IX Item "-ffast-math"
7422 Sets \fB\-fno\-math\-errno\fR, \fB\-funsafe\-math\-optimizations\fR,
7423 \&\fB\-ffinite\-math\-only\fR, \fB\-fno\-rounding\-math\fR,
7424 \&\fB\-fno\-signaling\-nans\fR and \fB\-fcx\-limited\-range\fR.
7425 .Sp
7426 This option causes the preprocessor macro \f(CW\*(C`_\|_FAST_MATH_\|_\*(C'\fR to be defined.
7427 .Sp
7428 This option is not turned on by any \fB\-O\fR option besides
7429 \&\fB\-Ofast\fR since it can result in incorrect output for programs
7430 that depend on an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications
7431 for math functions. It may, however, yield faster code for programs
7432 that do not require the guarantees of these specifications.
7433 .IP "\fB\-fno\-math\-errno\fR" 4
7434 .IX Item "-fno-math-errno"
7435 Do not set \s-1ERRNO\s0 after calling math functions that are executed
7436 with a single instruction, e.g., sqrt.  A program that relies on
7437 \&\s-1IEEE\s0 exceptions for math error handling may want to use this flag
7438 for speed while maintaining \s-1IEEE\s0 arithmetic compatibility.
7439 .Sp
7440 This option is not turned on by any \fB\-O\fR option since
7441 it can result in incorrect output for programs that depend on
7442 an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
7443 math functions. It may, however, yield faster code for programs
7444 that do not require the guarantees of these specifications.
7445 .Sp
7446 The default is \fB\-fmath\-errno\fR.
7447 .Sp
7448 On Darwin systems, the math library never sets \f(CW\*(C`errno\*(C'\fR.  There is
7449 therefore no reason for the compiler to consider the possibility that
7450 it might, and \fB\-fno\-math\-errno\fR is the default.
7451 .IP "\fB\-funsafe\-math\-optimizations\fR" 4
7452 .IX Item "-funsafe-math-optimizations"
7453 Allow optimizations for floating-point arithmetic that (a) assume
7454 that arguments and results are valid and (b) may violate \s-1IEEE\s0 or
7455 \&\s-1ANSI\s0 standards.  When used at link-time, it may include libraries
7456 or startup files that change the default \s-1FPU\s0 control word or other
7457 similar optimizations.
7458 .Sp
7459 This option is not turned on by any \fB\-O\fR option since
7460 it can result in incorrect output for programs that depend on
7461 an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
7462 math functions. It may, however, yield faster code for programs
7463 that do not require the guarantees of these specifications.
7464 Enables \fB\-fno\-signed\-zeros\fR, \fB\-fno\-trapping\-math\fR,
7465 \&\fB\-fassociative\-math\fR and \fB\-freciprocal\-math\fR.
7466 .Sp
7467 The default is \fB\-fno\-unsafe\-math\-optimizations\fR.
7468 .IP "\fB\-fassociative\-math\fR" 4
7469 .IX Item "-fassociative-math"
7470 Allow re-association of operands in series of floating-point operations.
7471 This violates the \s-1ISO\s0 C and \*(C+ language standard by possibly changing
7472 computation result.  \s-1NOTE:\s0 re-ordering may change the sign of zero as
7473 well as ignore NaNs and inhibit or create underflow or overflow (and
7474 thus cannot be used on code that relies on rounding behavior like
7475 \&\f(CW\*(C`(x + 2**52) \- 2**52\*(C'\fR.  May also reorder floating-point comparisons
7476 and thus may not be used when ordered comparisons are required.
7477 This option requires that both \fB\-fno\-signed\-zeros\fR and
7478 \&\fB\-fno\-trapping\-math\fR be in effect.  Moreover, it doesn't make
7479 much sense with \fB\-frounding\-math\fR. For Fortran the option
7480 is automatically enabled when both \fB\-fno\-signed\-zeros\fR and
7481 \&\fB\-fno\-trapping\-math\fR are in effect.
7482 .Sp
7483 The default is \fB\-fno\-associative\-math\fR.
7484 .IP "\fB\-freciprocal\-math\fR" 4
7485 .IX Item "-freciprocal-math"
7486 Allow the reciprocal of a value to be used instead of dividing by
7487 the value if this enables optimizations.  For example \f(CW\*(C`x / y\*(C'\fR
7488 can be replaced with \f(CW\*(C`x * (1/y)\*(C'\fR, which is useful if \f(CW\*(C`(1/y)\*(C'\fR
7489 is subject to common subexpression elimination.  Note that this loses
7490 precision and increases the number of flops operating on the value.
7491 .Sp
7492 The default is \fB\-fno\-reciprocal\-math\fR.
7493 .IP "\fB\-ffinite\-math\-only\fR" 4
7494 .IX Item "-ffinite-math-only"
7495 Allow optimizations for floating-point arithmetic that assume
7496 that arguments and results are not NaNs or +\-Infs.
7497 .Sp
7498 This option is not turned on by any \fB\-O\fR option since
7499 it can result in incorrect output for programs that depend on
7500 an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
7501 math functions. It may, however, yield faster code for programs
7502 that do not require the guarantees of these specifications.
7503 .Sp
7504 The default is \fB\-fno\-finite\-math\-only\fR.
7505 .IP "\fB\-fno\-signed\-zeros\fR" 4
7506 .IX Item "-fno-signed-zeros"
7507 Allow optimizations for floating-point arithmetic that ignore the
7508 signedness of zero.  \s-1IEEE\s0 arithmetic specifies the behavior of
7509 distinct +0.0 and \-0.0 values, which then prohibits simplification
7510 of expressions such as x+0.0 or 0.0*x (even with \fB\-ffinite\-math\-only\fR).
7511 This option implies that the sign of a zero result isn't significant.
7512 .Sp
7513 The default is \fB\-fsigned\-zeros\fR.
7514 .IP "\fB\-fno\-trapping\-math\fR" 4
7515 .IX Item "-fno-trapping-math"
7516 Compile code assuming that floating-point operations cannot generate
7517 user-visible traps.  These traps include division by zero, overflow,
7518 underflow, inexact result and invalid operation.  This option requires
7519 that \fB\-fno\-signaling\-nans\fR be in effect.  Setting this option may
7520 allow faster code if one relies on \*(L"non-stop\*(R" \s-1IEEE\s0 arithmetic, for example.
7521 .Sp
7522 This option should never be turned on by any \fB\-O\fR option since
7523 it can result in incorrect output for programs that depend on
7524 an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
7525 math functions.
7526 .Sp
7527 The default is \fB\-ftrapping\-math\fR.
7528 .IP "\fB\-frounding\-math\fR" 4
7529 .IX Item "-frounding-math"
7530 Disable transformations and optimizations that assume default floating-point
7531 rounding behavior.  This is round-to-zero for all floating point
7532 to integer conversions, and round-to-nearest for all other arithmetic
7533 truncations.  This option should be specified for programs that change
7534 the \s-1FP\s0 rounding mode dynamically, or that may be executed with a
7535 non-default rounding mode.  This option disables constant folding of
7536 floating-point expressions at compile time (which may be affected by
7537 rounding mode) and arithmetic transformations that are unsafe in the
7538 presence of sign-dependent rounding modes.
7539 .Sp
7540 The default is \fB\-fno\-rounding\-math\fR.
7541 .Sp
7542 This option is experimental and does not currently guarantee to
7543 disable all \s-1GCC\s0 optimizations that are affected by rounding mode.
7544 Future versions of \s-1GCC\s0 may provide finer control of this setting
7545 using C99's \f(CW\*(C`FENV_ACCESS\*(C'\fR pragma.  This command-line option
7546 will be used to specify the default state for \f(CW\*(C`FENV_ACCESS\*(C'\fR.
7547 .IP "\fB\-fsignaling\-nans\fR" 4
7548 .IX Item "-fsignaling-nans"
7549 Compile code assuming that \s-1IEEE\s0 signaling NaNs may generate user-visible
7550 traps during floating-point operations.  Setting this option disables
7551 optimizations that may change the number of exceptions visible with
7552 signaling NaNs.  This option implies \fB\-ftrapping\-math\fR.
7553 .Sp
7554 This option causes the preprocessor macro \f(CW\*(C`_\|_SUPPORT_SNAN_\|_\*(C'\fR to
7555 be defined.
7556 .Sp
7557 The default is \fB\-fno\-signaling\-nans\fR.
7558 .Sp
7559 This option is experimental and does not currently guarantee to
7560 disable all \s-1GCC\s0 optimizations that affect signaling NaN behavior.
7561 .IP "\fB\-fsingle\-precision\-constant\fR" 4
7562 .IX Item "-fsingle-precision-constant"
7563 Treat floating-point constants as single precision instead of
7564 implicitly converting them to double-precision constants.
7565 .IP "\fB\-fcx\-limited\-range\fR" 4
7566 .IX Item "-fcx-limited-range"
7567 When enabled, this option states that a range reduction step is not
7568 needed when performing complex division.  Also, there is no checking
7569 whether the result of a complex multiplication or division is \f(CW\*(C`NaN
7570 + I*NaN\*(C'\fR, with an attempt to rescue the situation in that case.  The
7571 default is \fB\-fno\-cx\-limited\-range\fR, but is enabled by
7572 \&\fB\-ffast\-math\fR.
7573 .Sp
7574 This option controls the default setting of the \s-1ISO\s0 C99
7575 \&\f(CW\*(C`CX_LIMITED_RANGE\*(C'\fR pragma.  Nevertheless, the option applies to
7576 all languages.
7577 .IP "\fB\-fcx\-fortran\-rules\fR" 4
7578 .IX Item "-fcx-fortran-rules"
7579 Complex multiplication and division follow Fortran rules.  Range
7580 reduction is done as part of complex division, but there is no checking
7581 whether the result of a complex multiplication or division is \f(CW\*(C`NaN
7582 + I*NaN\*(C'\fR, with an attempt to rescue the situation in that case.
7583 .Sp
7584 The default is \fB\-fno\-cx\-fortran\-rules\fR.
7585 .PP
7586 The following options control optimizations that may improve
7587 performance, but are not enabled by any \fB\-O\fR options.  This
7588 section includes experimental options that may produce broken code.
7589 .IP "\fB\-fbranch\-probabilities\fR" 4
7590 .IX Item "-fbranch-probabilities"
7591 After running a program compiled with \fB\-fprofile\-arcs\fR, you can compile it a second time using
7592 \&\fB\-fbranch\-probabilities\fR, to improve optimizations based on
7593 the number of times each branch was taken.  When the program
7594 compiled with \fB\-fprofile\-arcs\fR exits it saves arc execution
7595 counts to a file called \fI\fIsourcename\fI.gcda\fR for each source
7596 file.  The information in this data file is very dependent on the
7597 structure of the generated code, so you must use the same source code
7598 and the same optimization options for both compilations.
7599 .Sp
7600 With \fB\-fbranch\-probabilities\fR, \s-1GCC\s0 puts a
7601 \&\fB\s-1REG_BR_PROB\s0\fR note on each \fB\s-1JUMP_INSN\s0\fR and \fB\s-1CALL_INSN\s0\fR.
7602 These can be used to improve optimization.  Currently, they are only
7603 used in one place: in \fIreorg.c\fR, instead of guessing which path a
7604 branch is most likely to take, the \fB\s-1REG_BR_PROB\s0\fR values are used to
7605 exactly determine which path is taken more often.
7606 .IP "\fB\-fprofile\-values\fR" 4
7607 .IX Item "-fprofile-values"
7608 If combined with \fB\-fprofile\-arcs\fR, it adds code so that some
7609 data about values of expressions in the program is gathered.
7610 .Sp
7611 With \fB\-fbranch\-probabilities\fR, it reads back the data gathered
7612 from profiling values of expressions for usage in optimizations.
7613 .Sp
7614 Enabled with \fB\-fprofile\-generate\fR and \fB\-fprofile\-use\fR.
7615 .IP "\fB\-fvpt\fR" 4
7616 .IX Item "-fvpt"
7617 If combined with \fB\-fprofile\-arcs\fR, it instructs the compiler to add
7618 a code to gather information about values of expressions.
7619 .Sp
7620 With \fB\-fbranch\-probabilities\fR, it reads back the data gathered
7621 and actually performs the optimizations based on them.
7622 Currently the optimizations include specialization of division operation
7623 using the knowledge about the value of the denominator.
7624 .IP "\fB\-frename\-registers\fR" 4
7625 .IX Item "-frename-registers"
7626 Attempt to avoid false dependencies in scheduled code by making use
7627 of registers left over after register allocation.  This optimization
7628 will most benefit processors with lots of registers.  Depending on the
7629 debug information format adopted by the target, however, it can
7630 make debugging impossible, since variables will no longer stay in
7631 a \*(L"home register\*(R".
7632 .Sp
7633 Enabled by default with \fB\-funroll\-loops\fR and \fB\-fpeel\-loops\fR.
7634 .IP "\fB\-ftracer\fR" 4
7635 .IX Item "-ftracer"
7636 Perform tail duplication to enlarge superblock size.  This transformation
7637 simplifies the control flow of the function allowing other optimizations to do
7638 better job.
7639 .Sp
7640 Enabled with \fB\-fprofile\-use\fR.
7641 .IP "\fB\-funroll\-loops\fR" 4
7642 .IX Item "-funroll-loops"
7643 Unroll loops whose number of iterations can be determined at compile time or
7644 upon entry to the loop.  \fB\-funroll\-loops\fR implies
7645 \&\fB\-frerun\-cse\-after\-loop\fR, \fB\-fweb\fR and \fB\-frename\-registers\fR.
7646 It also turns on complete loop peeling (i.e. complete removal of loops with
7647 small constant number of iterations).  This option makes code larger, and may
7648 or may not make it run faster.
7649 .Sp
7650 Enabled with \fB\-fprofile\-use\fR.
7651 .IP "\fB\-funroll\-all\-loops\fR" 4
7652 .IX Item "-funroll-all-loops"
7653 Unroll all loops, even if their number of iterations is uncertain when
7654 the loop is entered.  This usually makes programs run more slowly.
7655 \&\fB\-funroll\-all\-loops\fR implies the same options as
7656 \&\fB\-funroll\-loops\fR.
7657 .IP "\fB\-fpeel\-loops\fR" 4
7658 .IX Item "-fpeel-loops"
7659 Peels loops for which there is enough information that they do not
7660 roll much (from profile feedback).  It also turns on complete loop peeling
7661 (i.e. complete removal of loops with small constant number of iterations).
7662 .Sp
7663 Enabled with \fB\-fprofile\-use\fR.
7664 .IP "\fB\-fmove\-loop\-invariants\fR" 4
7665 .IX Item "-fmove-loop-invariants"
7666 Enables the loop invariant motion pass in the \s-1RTL\s0 loop optimizer.  Enabled
7667 at level \fB\-O1\fR
7668 .IP "\fB\-funswitch\-loops\fR" 4
7669 .IX Item "-funswitch-loops"
7670 Move branches with loop invariant conditions out of the loop, with duplicates
7671 of the loop on both branches (modified according to result of the condition).
7672 .IP "\fB\-ffunction\-sections\fR" 4
7673 .IX Item "-ffunction-sections"
7674 .PD 0
7675 .IP "\fB\-fdata\-sections\fR" 4
7676 .IX Item "-fdata-sections"
7677 .PD
7678 Place each function or data item into its own section in the output
7679 file if the target supports arbitrary sections.  The name of the
7680 function or the name of the data item determines the section's name
7681 in the output file.
7682 .Sp
7683 Use these options on systems where the linker can perform optimizations
7684 to improve locality of reference in the instruction space.  Most systems
7685 using the \s-1ELF\s0 object format and \s-1SPARC\s0 processors running Solaris 2 have
7686 linkers with such optimizations.  \s-1AIX\s0 may have these optimizations in
7687 the future.
7688 .Sp
7689 Only use these options when there are significant benefits from doing
7690 so.  When you specify these options, the assembler and linker will
7691 create larger object and executable files and will also be slower.
7692 You will not be able to use \f(CW\*(C`gprof\*(C'\fR on all systems if you
7693 specify this option and you may have problems with debugging if
7694 you specify both this option and \fB\-g\fR.
7695 .IP "\fB\-fbranch\-target\-load\-optimize\fR" 4
7696 .IX Item "-fbranch-target-load-optimize"
7697 Perform branch target register load optimization before prologue / epilogue
7698 threading.
7699 The use of target registers can typically be exposed only during reload,
7700 thus hoisting loads out of loops and doing inter-block scheduling needs
7701 a separate optimization pass.
7702 .IP "\fB\-fbranch\-target\-load\-optimize2\fR" 4
7703 .IX Item "-fbranch-target-load-optimize2"
7704 Perform branch target register load optimization after prologue / epilogue
7705 threading.
7706 .IP "\fB\-fbtr\-bb\-exclusive\fR" 4
7707 .IX Item "-fbtr-bb-exclusive"
7708 When performing branch target register load optimization, don't reuse
7709 branch target registers in within any basic block.
7710 .IP "\fB\-fstack\-protector\fR" 4
7711 .IX Item "-fstack-protector"
7712 Emit extra code to check for buffer overflows, such as stack smashing
7713 attacks.  This is done by adding a guard variable to functions with
7714 vulnerable objects.  This includes functions that call alloca, and
7715 functions with buffers larger than 8 bytes.  The guards are initialized
7716 when a function is entered and then checked when the function exits.
7717 If a guard check fails, an error message is printed and the program exits.
7718 .IP "\fB\-fstack\-protector\-all\fR" 4
7719 .IX Item "-fstack-protector-all"
7720 Like \fB\-fstack\-protector\fR except that all functions are protected.
7721 .IP "\fB\-fsection\-anchors\fR" 4
7722 .IX Item "-fsection-anchors"
7723 Try to reduce the number of symbolic address calculations by using
7724 shared \*(L"anchor\*(R" symbols to address nearby objects.  This transformation
7725 can help to reduce the number of \s-1GOT\s0 entries and \s-1GOT\s0 accesses on some
7726 targets.
7727 .Sp
7728 For example, the implementation of the following function \f(CW\*(C`foo\*(C'\fR:
7729 .Sp
7730 .Vb 2
7731 \&        static int a, b, c;
7732 \&        int foo (void) { return a + b + c; }
7733 .Ve
7734 .Sp
7735 would usually calculate the addresses of all three variables, but if you
7736 compile it with \fB\-fsection\-anchors\fR, it will access the variables
7737 from a common anchor point instead.  The effect is similar to the
7738 following pseudocode (which isn't valid C):
7739 .Sp
7740 .Vb 5
7741 \&        int foo (void)
7742 \&        {
7743 \&          register int *xr = &x;
7744 \&          return xr[&a \- &x] + xr[&b \- &x] + xr[&c \- &x];
7745 \&        }
7746 .Ve
7747 .Sp
7748 Not all targets support this option.
7749 .IP "\fB\-\-param\fR \fIname\fR\fB=\fR\fIvalue\fR" 4
7750 .IX Item "--param name=value"
7751 In some places, \s-1GCC\s0 uses various constants to control the amount of
7752 optimization that is done.  For example, \s-1GCC\s0 will not inline functions
7753 that contain more than a certain number of instructions.  You can
7754 control some of these constants on the command line using the
7755 \&\fB\-\-param\fR option.
7756 .Sp
7757 The names of specific parameters, and the meaning of the values, are
7758 tied to the internals of the compiler, and are subject to change
7759 without notice in future releases.
7760 .Sp
7761 In each case, the \fIvalue\fR is an integer.  The allowable choices for
7762 \&\fIname\fR are given in the following table:
7763 .RS 4
7764 .IP "\fBpredictable-branch-outcome\fR" 4
7765 .IX Item "predictable-branch-outcome"
7766 When branch is predicted to be taken with probability lower than this threshold
7767 (in percent), then it is considered well predictable. The default is 10.
7768 .IP "\fBmax-crossjump-edges\fR" 4
7769 .IX Item "max-crossjump-edges"
7770 The maximum number of incoming edges to consider for crossjumping.
7771 The algorithm used by \fB\-fcrossjumping\fR is O(N^2) in
7772 the number of edges incoming to each block.  Increasing values mean
7773 more aggressive optimization, making the compilation time increase with
7774 probably small improvement in executable size.
7775 .IP "\fBmin-crossjump-insns\fR" 4
7776 .IX Item "min-crossjump-insns"
7777 The minimum number of instructions that must be matched at the end
7778 of two blocks before crossjumping will be performed on them.  This
7779 value is ignored in the case where all instructions in the block being
7780 crossjumped from are matched.  The default value is 5.
7781 .IP "\fBmax-grow-copy-bb-insns\fR" 4
7782 .IX Item "max-grow-copy-bb-insns"
7783 The maximum code size expansion factor when copying basic blocks
7784 instead of jumping.  The expansion is relative to a jump instruction.
7785 The default value is 8.
7786 .IP "\fBmax-goto-duplication-insns\fR" 4
7787 .IX Item "max-goto-duplication-insns"
7788 The maximum number of instructions to duplicate to a block that jumps
7789 to a computed goto.  To avoid O(N^2) behavior in a number of
7790 passes, \s-1GCC\s0 factors computed gotos early in the compilation process,
7791 and unfactors them as late as possible.  Only computed jumps at the
7792 end of a basic blocks with no more than max-goto-duplication-insns are
7793 unfactored.  The default value is 8.
7794 .IP "\fBmax-delay-slot-insn-search\fR" 4
7795 .IX Item "max-delay-slot-insn-search"
7796 The maximum number of instructions to consider when looking for an
7797 instruction to fill a delay slot.  If more than this arbitrary number of
7798 instructions is searched, the time savings from filling the delay slot
7799 will be minimal so stop searching.  Increasing values mean more
7800 aggressive optimization, making the compilation time increase with probably
7801 small improvement in execution time.
7802 .IP "\fBmax-delay-slot-live-search\fR" 4
7803 .IX Item "max-delay-slot-live-search"
7804 When trying to fill delay slots, the maximum number of instructions to
7805 consider when searching for a block with valid live register
7806 information.  Increasing this arbitrarily chosen value means more
7807 aggressive optimization, increasing the compilation time.  This parameter
7808 should be removed when the delay slot code is rewritten to maintain the
7809 control-flow graph.
7810 .IP "\fBmax-gcse-memory\fR" 4
7811 .IX Item "max-gcse-memory"
7812 The approximate maximum amount of memory that will be allocated in
7813 order to perform the global common subexpression elimination
7814 optimization.  If more memory than specified is required, the
7815 optimization will not be done.
7816 .IP "\fBmax-gcse-insertion-ratio\fR" 4
7817 .IX Item "max-gcse-insertion-ratio"
7818 If the ratio of expression insertions to deletions is larger than this value
7819 for any expression, then \s-1RTL\s0 \s-1PRE\s0 will insert or remove the expression and thus
7820 leave partially redundant computations in the instruction stream.  The default value is 20.
7821 .IP "\fBmax-pending-list-length\fR" 4
7822 .IX Item "max-pending-list-length"
7823 The maximum number of pending dependencies scheduling will allow
7824 before flushing the current state and starting over.  Large functions
7825 with few branches or calls can create excessively large lists which
7826 needlessly consume memory and resources.
7827 .IP "\fBmax-modulo-backtrack-attempts\fR" 4
7828 .IX Item "max-modulo-backtrack-attempts"
7829 The maximum number of backtrack attempts the scheduler should make
7830 when modulo scheduling a loop.  Larger values can exponentially increase
7831 compilation time.
7832 .IP "\fBmax-inline-insns-single\fR" 4
7833 .IX Item "max-inline-insns-single"
7834 Several parameters control the tree inliner used in gcc.
7835 This number sets the maximum number of instructions (counted in \s-1GCC\s0's
7836 internal representation) in a single function that the tree inliner
7837 will consider for inlining.  This only affects functions declared
7838 inline and methods implemented in a class declaration (\*(C+).
7839 The default value is 400.
7840 .IP "\fBmax-inline-insns-auto\fR" 4
7841 .IX Item "max-inline-insns-auto"
7842 When you use \fB\-finline\-functions\fR (included in \fB\-O3\fR),
7843 a lot of functions that would otherwise not be considered for inlining
7844 by the compiler will be investigated.  To those functions, a different
7845 (more restrictive) limit compared to functions declared inline can
7846 be applied.
7847 The default value is 40.
7848 .IP "\fBlarge-function-insns\fR" 4
7849 .IX Item "large-function-insns"
7850 The limit specifying really large functions.  For functions larger than this
7851 limit after inlining, inlining is constrained by
7852 \&\fB\-\-param large-function-growth\fR.  This parameter is useful primarily
7853 to avoid extreme compilation time caused by non-linear algorithms used by the
7854 back end.
7855 The default value is 2700.
7856 .IP "\fBlarge-function-growth\fR" 4
7857 .IX Item "large-function-growth"
7858 Specifies maximal growth of large function caused by inlining in percents.
7859 The default value is 100 which limits large function growth to 2.0 times
7860 the original size.
7861 .IP "\fBlarge-unit-insns\fR" 4
7862 .IX Item "large-unit-insns"
7863 The limit specifying large translation unit.  Growth caused by inlining of
7864 units larger than this limit is limited by \fB\-\-param inline-unit-growth\fR.
7865 For small units this might be too tight (consider unit consisting of function A
7866 that is inline and B that just calls A three time.  If B is small relative to
7867 A, the growth of unit is 300\e% and yet such inlining is very sane.  For very
7868 large units consisting of small inlineable functions however the overall unit
7869 growth limit is needed to avoid exponential explosion of code size.  Thus for
7870 smaller units, the size is increased to \fB\-\-param large-unit-insns\fR
7871 before applying \fB\-\-param inline-unit-growth\fR.  The default is 10000
7872 .IP "\fBinline-unit-growth\fR" 4
7873 .IX Item "inline-unit-growth"
7874 Specifies maximal overall growth of the compilation unit caused by inlining.
7875 The default value is 30 which limits unit growth to 1.3 times the original
7876 size.
7877 .IP "\fBipcp-unit-growth\fR" 4
7878 .IX Item "ipcp-unit-growth"
7879 Specifies maximal overall growth of the compilation unit caused by
7880 interprocedural constant propagation.  The default value is 10 which limits
7881 unit growth to 1.1 times the original size.
7882 .IP "\fBlarge-stack-frame\fR" 4
7883 .IX Item "large-stack-frame"
7884 The limit specifying large stack frames.  While inlining the algorithm is trying
7885 to not grow past this limit too much.  Default value is 256 bytes.
7886 .IP "\fBlarge-stack-frame-growth\fR" 4
7887 .IX Item "large-stack-frame-growth"
7888 Specifies maximal growth of large stack frames caused by inlining in percents.
7889 The default value is 1000 which limits large stack frame growth to 11 times
7890 the original size.
7891 .IP "\fBmax-inline-insns-recursive\fR" 4
7892 .IX Item "max-inline-insns-recursive"
7893 .PD 0
7894 .IP "\fBmax-inline-insns-recursive-auto\fR" 4
7895 .IX Item "max-inline-insns-recursive-auto"
7896 .PD
7897 Specifies maximum number of instructions out-of-line copy of self recursive inline
7898 function can grow into by performing recursive inlining.
7899 .Sp
7900 For functions declared inline \fB\-\-param max-inline-insns-recursive\fR is
7901 taken into account.  For function not declared inline, recursive inlining
7902 happens only when \fB\-finline\-functions\fR (included in \fB\-O3\fR) is
7903 enabled and \fB\-\-param max-inline-insns-recursive-auto\fR is used.  The
7904 default value is 450.
7905 .IP "\fBmax-inline-recursive-depth\fR" 4
7906 .IX Item "max-inline-recursive-depth"
7907 .PD 0
7908 .IP "\fBmax-inline-recursive-depth-auto\fR" 4
7909 .IX Item "max-inline-recursive-depth-auto"
7910 .PD
7911 Specifies maximum recursion depth used by the recursive inlining.
7912 .Sp
7913 For functions declared inline \fB\-\-param max-inline-recursive-depth\fR is
7914 taken into account.  For function not declared inline, recursive inlining
7915 happens only when \fB\-finline\-functions\fR (included in \fB\-O3\fR) is
7916 enabled and \fB\-\-param max-inline-recursive-depth-auto\fR is used.  The
7917 default value is 8.
7918 .IP "\fBmin-inline-recursive-probability\fR" 4
7919 .IX Item "min-inline-recursive-probability"
7920 Recursive inlining is profitable only for function having deep recursion
7921 in average and can hurt for function having little recursion depth by
7922 increasing the prologue size or complexity of function body to other
7923 optimizers.
7924 .Sp
7925 When profile feedback is available (see \fB\-fprofile\-generate\fR) the actual
7926 recursion depth can be guessed from probability that function will recurse via
7927 given call expression.  This parameter limits inlining only to call expression
7928 whose probability exceeds given threshold (in percents).  The default value is
7929 10.
7930 .IP "\fBearly-inlining-insns\fR" 4
7931 .IX Item "early-inlining-insns"
7932 Specify growth that early inliner can make.  In effect it increases amount of
7933 inlining for code having large abstraction penalty.  The default value is 10.
7934 .IP "\fBmax-early-inliner-iterations\fR" 4
7935 .IX Item "max-early-inliner-iterations"
7936 .PD 0
7937 .IP "\fBmax-early-inliner-iterations\fR" 4
7938 .IX Item "max-early-inliner-iterations"
7939 .PD
7940 Limit of iterations of early inliner.  This basically bounds number of nested
7941 indirect calls early inliner can resolve.  Deeper chains are still handled by
7942 late inlining.
7943 .IP "\fBcomdat-sharing-probability\fR" 4
7944 .IX Item "comdat-sharing-probability"
7945 .PD 0
7946 .IP "\fBcomdat-sharing-probability\fR" 4
7947 .IX Item "comdat-sharing-probability"
7948 .PD
7949 Probability (in percent) that \*(C+ inline function with comdat visibility
7950 will be shared across multiple compilation units.  The default value is 20.
7951 .IP "\fBmin-vect-loop-bound\fR" 4
7952 .IX Item "min-vect-loop-bound"
7953 The minimum number of iterations under which a loop will not get vectorized
7954 when \fB\-ftree\-vectorize\fR is used.  The number of iterations after
7955 vectorization needs to be greater than the value specified by this option
7956 to allow vectorization.  The default value is 0.
7957 .IP "\fBgcse-cost-distance-ratio\fR" 4
7958 .IX Item "gcse-cost-distance-ratio"
7959 Scaling factor in calculation of maximum distance an expression
7960 can be moved by \s-1GCSE\s0 optimizations.  This is currently supported only in the
7961 code hoisting pass.  The bigger the ratio, the more aggressive code hoisting
7962 will be with simple expressions, i.e., the expressions that have cost
7963 less than \fBgcse-unrestricted-cost\fR.  Specifying 0 will disable
7964 hoisting of simple expressions.  The default value is 10.
7965 .IP "\fBgcse-unrestricted-cost\fR" 4
7966 .IX Item "gcse-unrestricted-cost"
7967 Cost, roughly measured as the cost of a single typical machine
7968 instruction, at which \s-1GCSE\s0 optimizations will not constrain
7969 the distance an expression can travel.  This is currently
7970 supported only in the code hoisting pass.  The lesser the cost,
7971 the more aggressive code hoisting will be.  Specifying 0 will
7972 allow all expressions to travel unrestricted distances.
7973 The default value is 3.
7974 .IP "\fBmax-hoist-depth\fR" 4
7975 .IX Item "max-hoist-depth"
7976 The depth of search in the dominator tree for expressions to hoist.
7977 This is used to avoid quadratic behavior in hoisting algorithm.
7978 The value of 0 will avoid limiting the search, but may slow down compilation
7979 of huge functions.  The default value is 30.
7980 .IP "\fBmax-tail-merge-comparisons\fR" 4
7981 .IX Item "max-tail-merge-comparisons"
7982 The maximum amount of similar bbs to compare a bb with.  This is used to
7983 avoid quadratic behavior in tree tail merging.  The default value is 10.
7984 .IP "\fBmax-tail-merge-iterations\fR" 4
7985 .IX Item "max-tail-merge-iterations"
7986 The maximum amount of iterations of the pass over the function.  This is used to
7987 limit compilation time in tree tail merging.  The default value is 2.
7988 .IP "\fBmax-unrolled-insns\fR" 4
7989 .IX Item "max-unrolled-insns"
7990 The maximum number of instructions that a loop should have if that loop
7991 is unrolled, and if the loop is unrolled, it determines how many times
7992 the loop code is unrolled.
7993 .IP "\fBmax-average-unrolled-insns\fR" 4
7994 .IX Item "max-average-unrolled-insns"
7995 The maximum number of instructions biased by probabilities of their execution
7996 that a loop should have if that loop is unrolled, and if the loop is unrolled,
7997 it determines how many times the loop code is unrolled.
7998 .IP "\fBmax-unroll-times\fR" 4
7999 .IX Item "max-unroll-times"
8000 The maximum number of unrollings of a single loop.
8001 .IP "\fBmax-peeled-insns\fR" 4
8002 .IX Item "max-peeled-insns"
8003 The maximum number of instructions that a loop should have if that loop
8004 is peeled, and if the loop is peeled, it determines how many times
8005 the loop code is peeled.
8006 .IP "\fBmax-peel-times\fR" 4
8007 .IX Item "max-peel-times"
8008 The maximum number of peelings of a single loop.
8009 .IP "\fBmax-completely-peeled-insns\fR" 4
8010 .IX Item "max-completely-peeled-insns"
8011 The maximum number of insns of a completely peeled loop.
8012 .IP "\fBmax-completely-peel-times\fR" 4
8013 .IX Item "max-completely-peel-times"
8014 The maximum number of iterations of a loop to be suitable for complete peeling.
8015 .IP "\fBmax-completely-peel-loop-nest-depth\fR" 4
8016 .IX Item "max-completely-peel-loop-nest-depth"
8017 The maximum depth of a loop nest suitable for complete peeling.
8018 .IP "\fBmax-unswitch-insns\fR" 4
8019 .IX Item "max-unswitch-insns"
8020 The maximum number of insns of an unswitched loop.
8021 .IP "\fBmax-unswitch-level\fR" 4
8022 .IX Item "max-unswitch-level"
8023 The maximum number of branches unswitched in a single loop.
8024 .IP "\fBlim-expensive\fR" 4
8025 .IX Item "lim-expensive"
8026 The minimum cost of an expensive expression in the loop invariant motion.
8027 .IP "\fBiv-consider-all-candidates-bound\fR" 4
8028 .IX Item "iv-consider-all-candidates-bound"
8029 Bound on number of candidates for induction variables below that
8030 all candidates are considered for each use in induction variable
8031 optimizations.  Only the most relevant candidates are considered
8032 if there are more candidates, to avoid quadratic time complexity.
8033 .IP "\fBiv-max-considered-uses\fR" 4
8034 .IX Item "iv-max-considered-uses"
8035 The induction variable optimizations give up on loops that contain more
8036 induction variable uses.
8037 .IP "\fBiv-always-prune-cand-set-bound\fR" 4
8038 .IX Item "iv-always-prune-cand-set-bound"
8039 If number of candidates in the set is smaller than this value,
8040 we always try to remove unnecessary ivs from the set during its
8041 optimization when a new iv is added to the set.
8042 .IP "\fBscev-max-expr-size\fR" 4
8043 .IX Item "scev-max-expr-size"
8044 Bound on size of expressions used in the scalar evolutions analyzer.
8045 Large expressions slow the analyzer.
8046 .IP "\fBscev-max-expr-complexity\fR" 4
8047 .IX Item "scev-max-expr-complexity"
8048 Bound on the complexity of the expressions in the scalar evolutions analyzer.
8049 Complex expressions slow the analyzer.
8050 .IP "\fBomega-max-vars\fR" 4
8051 .IX Item "omega-max-vars"
8052 The maximum number of variables in an Omega constraint system.
8053 The default value is 128.
8054 .IP "\fBomega-max-geqs\fR" 4
8055 .IX Item "omega-max-geqs"
8056 The maximum number of inequalities in an Omega constraint system.
8057 The default value is 256.
8058 .IP "\fBomega-max-eqs\fR" 4
8059 .IX Item "omega-max-eqs"
8060 The maximum number of equalities in an Omega constraint system.
8061 The default value is 128.
8062 .IP "\fBomega-max-wild-cards\fR" 4
8063 .IX Item "omega-max-wild-cards"
8064 The maximum number of wildcard variables that the Omega solver will
8065 be able to insert.  The default value is 18.
8066 .IP "\fBomega-hash-table-size\fR" 4
8067 .IX Item "omega-hash-table-size"
8068 The size of the hash table in the Omega solver.  The default value is
8069 550.
8070 .IP "\fBomega-max-keys\fR" 4
8071 .IX Item "omega-max-keys"
8072 The maximal number of keys used by the Omega solver.  The default
8073 value is 500.
8074 .IP "\fBomega-eliminate-redundant-constraints\fR" 4
8075 .IX Item "omega-eliminate-redundant-constraints"
8076 When set to 1, use expensive methods to eliminate all redundant
8077 constraints.  The default value is 0.
8078 .IP "\fBvect-max-version-for-alignment-checks\fR" 4
8079 .IX Item "vect-max-version-for-alignment-checks"
8080 The maximum number of run-time checks that can be performed when
8081 doing loop versioning for alignment in the vectorizer.  See option
8082 ftree-vect-loop-version for more information.
8083 .IP "\fBvect-max-version-for-alias-checks\fR" 4
8084 .IX Item "vect-max-version-for-alias-checks"
8085 The maximum number of run-time checks that can be performed when
8086 doing loop versioning for alias in the vectorizer.  See option
8087 ftree-vect-loop-version for more information.
8088 .IP "\fBmax-iterations-to-track\fR" 4
8089 .IX Item "max-iterations-to-track"
8090 The maximum number of iterations of a loop the brute force algorithm
8091 for analysis of # of iterations of the loop tries to evaluate.
8092 .IP "\fBhot-bb-count-fraction\fR" 4
8093 .IX Item "hot-bb-count-fraction"
8094 Select fraction of the maximal count of repetitions of basic block in program
8095 given basic block needs to have to be considered hot.
8096 .IP "\fBhot-bb-frequency-fraction\fR" 4
8097 .IX Item "hot-bb-frequency-fraction"
8098 Select fraction of the entry block frequency of executions of basic block in
8099 function given basic block needs to have to be considered hot.
8100 .IP "\fBmax-predicted-iterations\fR" 4
8101 .IX Item "max-predicted-iterations"
8102 The maximum number of loop iterations we predict statically.  This is useful
8103 in cases where function contain single loop with known bound and other loop
8104 with unknown.  We predict the known number of iterations correctly, while
8105 the unknown number of iterations average to roughly 10.  This means that the
8106 loop without bounds would appear artificially cold relative to the other one.
8107 .IP "\fBalign-threshold\fR" 4
8108 .IX Item "align-threshold"
8109 Select fraction of the maximal frequency of executions of basic block in
8110 function given basic block will get aligned.
8111 .IP "\fBalign-loop-iterations\fR" 4
8112 .IX Item "align-loop-iterations"
8113 A loop expected to iterate at lest the selected number of iterations will get
8114 aligned.
8115 .IP "\fBtracer-dynamic-coverage\fR" 4
8116 .IX Item "tracer-dynamic-coverage"
8117 .PD 0
8118 .IP "\fBtracer-dynamic-coverage-feedback\fR" 4
8119 .IX Item "tracer-dynamic-coverage-feedback"
8120 .PD
8121 This value is used to limit superblock formation once the given percentage of
8122 executed instructions is covered.  This limits unnecessary code size
8123 expansion.
8124 .Sp
8125 The \fBtracer-dynamic-coverage-feedback\fR is used only when profile
8126 feedback is available.  The real profiles (as opposed to statically estimated
8127 ones) are much less balanced allowing the threshold to be larger value.
8128 .IP "\fBtracer-max-code-growth\fR" 4
8129 .IX Item "tracer-max-code-growth"
8130 Stop tail duplication once code growth has reached given percentage.  This is
8131 rather hokey argument, as most of the duplicates will be eliminated later in
8132 cross jumping, so it may be set to much higher values than is the desired code
8133 growth.
8134 .IP "\fBtracer-min-branch-ratio\fR" 4
8135 .IX Item "tracer-min-branch-ratio"
8136 Stop reverse growth when the reverse probability of best edge is less than this
8137 threshold (in percent).
8138 .IP "\fBtracer-min-branch-ratio\fR" 4
8139 .IX Item "tracer-min-branch-ratio"
8140 .PD 0
8141 .IP "\fBtracer-min-branch-ratio-feedback\fR" 4
8142 .IX Item "tracer-min-branch-ratio-feedback"
8143 .PD
8144 Stop forward growth if the best edge do have probability lower than this
8145 threshold.
8146 .Sp
8147 Similarly to \fBtracer-dynamic-coverage\fR two values are present, one for
8148 compilation for profile feedback and one for compilation without.  The value
8149 for compilation with profile feedback needs to be more conservative (higher) in
8150 order to make tracer effective.
8151 .IP "\fBmax-cse-path-length\fR" 4
8152 .IX Item "max-cse-path-length"
8153 Maximum number of basic blocks on path that cse considers.  The default is 10.
8154 .IP "\fBmax-cse-insns\fR" 4
8155 .IX Item "max-cse-insns"
8156 The maximum instructions \s-1CSE\s0 process before flushing. The default is 1000.
8157 .IP "\fBggc-min-expand\fR" 4
8158 .IX Item "ggc-min-expand"
8159 \&\s-1GCC\s0 uses a garbage collector to manage its own memory allocation.  This
8160 parameter specifies the minimum percentage by which the garbage
8161 collector's heap should be allowed to expand between collections.
8162 Tuning this may improve compilation speed; it has no effect on code
8163 generation.
8164 .Sp
8165 The default is 30% + 70% * (\s-1RAM/1GB\s0) with an upper bound of 100% when
8166 \&\s-1RAM\s0 >= 1GB.  If \f(CW\*(C`getrlimit\*(C'\fR is available, the notion of \*(L"\s-1RAM\s0\*(R" is
8167 the smallest of actual \s-1RAM\s0 and \f(CW\*(C`RLIMIT_DATA\*(C'\fR or \f(CW\*(C`RLIMIT_AS\*(C'\fR.  If
8168 \&\s-1GCC\s0 is not able to calculate \s-1RAM\s0 on a particular platform, the lower
8169 bound of 30% is used.  Setting this parameter and
8170 \&\fBggc-min-heapsize\fR to zero causes a full collection to occur at
8171 every opportunity.  This is extremely slow, but can be useful for
8172 debugging.
8173 .IP "\fBggc-min-heapsize\fR" 4
8174 .IX Item "ggc-min-heapsize"
8175 Minimum size of the garbage collector's heap before it begins bothering
8176 to collect garbage.  The first collection occurs after the heap expands
8177 by \fBggc-min-expand\fR% beyond \fBggc-min-heapsize\fR.  Again,
8178 tuning this may improve compilation speed, and has no effect on code
8179 generation.
8180 .Sp
8181 The default is the smaller of \s-1RAM/8\s0, \s-1RLIMIT_RSS\s0, or a limit that
8182 tries to ensure that \s-1RLIMIT_DATA\s0 or \s-1RLIMIT_AS\s0 are not exceeded, but
8183 with a lower bound of 4096 (four megabytes) and an upper bound of
8184 131072 (128 megabytes).  If \s-1GCC\s0 is not able to calculate \s-1RAM\s0 on a
8185 particular platform, the lower bound is used.  Setting this parameter
8186 very large effectively disables garbage collection.  Setting this
8187 parameter and \fBggc-min-expand\fR to zero causes a full collection
8188 to occur at every opportunity.
8189 .IP "\fBmax-reload-search-insns\fR" 4
8190 .IX Item "max-reload-search-insns"
8191 The maximum number of instruction reload should look backward for equivalent
8192 register.  Increasing values mean more aggressive optimization, making the
8193 compilation time increase with probably slightly better performance.
8194 The default value is 100.
8195 .IP "\fBmax-cselib-memory-locations\fR" 4
8196 .IX Item "max-cselib-memory-locations"
8197 The maximum number of memory locations cselib should take into account.
8198 Increasing values mean more aggressive optimization, making the compilation time
8199 increase with probably slightly better performance.  The default value is 500.
8200 .IP "\fBreorder-blocks-duplicate\fR" 4
8201 .IX Item "reorder-blocks-duplicate"
8202 .PD 0
8203 .IP "\fBreorder-blocks-duplicate-feedback\fR" 4
8204 .IX Item "reorder-blocks-duplicate-feedback"
8205 .PD
8206 Used by basic block reordering pass to decide whether to use unconditional
8207 branch or duplicate the code on its destination.  Code is duplicated when its
8208 estimated size is smaller than this value multiplied by the estimated size of
8209 unconditional jump in the hot spots of the program.
8210 .Sp
8211 The \fBreorder-block-duplicate-feedback\fR is used only when profile
8212 feedback is available and may be set to higher values than
8213 \&\fBreorder-block-duplicate\fR since information about the hot spots is more
8214 accurate.
8215 .IP "\fBmax-sched-ready-insns\fR" 4
8216 .IX Item "max-sched-ready-insns"
8217 The maximum number of instructions ready to be issued the scheduler should
8218 consider at any given time during the first scheduling pass.  Increasing
8219 values mean more thorough searches, making the compilation time increase
8220 with probably little benefit.  The default value is 100.
8221 .IP "\fBmax-sched-region-blocks\fR" 4
8222 .IX Item "max-sched-region-blocks"
8223 The maximum number of blocks in a region to be considered for
8224 interblock scheduling.  The default value is 10.
8225 .IP "\fBmax-pipeline-region-blocks\fR" 4
8226 .IX Item "max-pipeline-region-blocks"
8227 The maximum number of blocks in a region to be considered for
8228 pipelining in the selective scheduler.  The default value is 15.
8229 .IP "\fBmax-sched-region-insns\fR" 4
8230 .IX Item "max-sched-region-insns"
8231 The maximum number of insns in a region to be considered for
8232 interblock scheduling.  The default value is 100.
8233 .IP "\fBmax-pipeline-region-insns\fR" 4
8234 .IX Item "max-pipeline-region-insns"
8235 The maximum number of insns in a region to be considered for
8236 pipelining in the selective scheduler.  The default value is 200.
8237 .IP "\fBmin-spec-prob\fR" 4
8238 .IX Item "min-spec-prob"
8239 The minimum probability (in percents) of reaching a source block
8240 for interblock speculative scheduling.  The default value is 40.
8241 .IP "\fBmax-sched-extend-regions-iters\fR" 4
8242 .IX Item "max-sched-extend-regions-iters"
8243 The maximum number of iterations through \s-1CFG\s0 to extend regions.
8244 0 \- disable region extension,
8245 N \- do at most N iterations.
8246 The default value is 0.
8247 .IP "\fBmax-sched-insn-conflict-delay\fR" 4
8248 .IX Item "max-sched-insn-conflict-delay"
8249 The maximum conflict delay for an insn to be considered for speculative motion.
8250 The default value is 3.
8251 .IP "\fBsched-spec-prob-cutoff\fR" 4
8252 .IX Item "sched-spec-prob-cutoff"
8253 The minimal probability of speculation success (in percents), so that
8254 speculative insn will be scheduled.
8255 The default value is 40.
8256 .IP "\fBsched-mem-true-dep-cost\fR" 4
8257 .IX Item "sched-mem-true-dep-cost"
8258 Minimal distance (in \s-1CPU\s0 cycles) between store and load targeting same
8259 memory locations.  The default value is 1.
8260 .IP "\fBselsched-max-lookahead\fR" 4
8261 .IX Item "selsched-max-lookahead"
8262 The maximum size of the lookahead window of selective scheduling.  It is a
8263 depth of search for available instructions.
8264 The default value is 50.
8265 .IP "\fBselsched-max-sched-times\fR" 4
8266 .IX Item "selsched-max-sched-times"
8267 The maximum number of times that an instruction will be scheduled during
8268 selective scheduling.  This is the limit on the number of iterations
8269 through which the instruction may be pipelined.  The default value is 2.
8270 .IP "\fBselsched-max-insns-to-rename\fR" 4
8271 .IX Item "selsched-max-insns-to-rename"
8272 The maximum number of best instructions in the ready list that are considered
8273 for renaming in the selective scheduler.  The default value is 2.
8274 .IP "\fBsms-min-sc\fR" 4
8275 .IX Item "sms-min-sc"
8276 The minimum value of stage count that swing modulo scheduler will
8277 generate.  The default value is 2.
8278 .IP "\fBmax-last-value-rtl\fR" 4
8279 .IX Item "max-last-value-rtl"
8280 The maximum size measured as number of RTLs that can be recorded in an expression
8281 in combiner for a pseudo register as last known value of that register.  The default
8282 is 10000.
8283 .IP "\fBinteger-share-limit\fR" 4
8284 .IX Item "integer-share-limit"
8285 Small integer constants can use a shared data structure, reducing the
8286 compiler's memory usage and increasing its speed.  This sets the maximum
8287 value of a shared integer constant.  The default value is 256.
8288 .IP "\fBmin-virtual-mappings\fR" 4
8289 .IX Item "min-virtual-mappings"
8290 Specifies the minimum number of virtual mappings in the incremental
8291 \&\s-1SSA\s0 updater that should be registered to trigger the virtual mappings
8292 heuristic defined by virtual-mappings-ratio.  The default value is
8293 100.
8294 .IP "\fBvirtual-mappings-ratio\fR" 4
8295 .IX Item "virtual-mappings-ratio"
8296 If the number of virtual mappings is virtual-mappings-ratio bigger
8297 than the number of virtual symbols to be updated, then the incremental
8298 \&\s-1SSA\s0 updater switches to a full update for those symbols.  The default
8299 ratio is 3.
8300 .IP "\fBssp-buffer-size\fR" 4
8301 .IX Item "ssp-buffer-size"
8302 The minimum size of buffers (i.e. arrays) that will receive stack smashing
8303 protection when \fB\-fstack\-protection\fR is used.
8304 .IP "\fBmax-jump-thread-duplication-stmts\fR" 4
8305 .IX Item "max-jump-thread-duplication-stmts"
8306 Maximum number of statements allowed in a block that needs to be
8307 duplicated when threading jumps.
8308 .IP "\fBmax-fields-for-field-sensitive\fR" 4
8309 .IX Item "max-fields-for-field-sensitive"
8310 Maximum number of fields in a structure we will treat in
8311 a field sensitive manner during pointer analysis.  The default is zero
8312 for \-O0, and \-O1 and 100 for \-Os, \-O2, and \-O3.
8313 .IP "\fBprefetch-latency\fR" 4
8314 .IX Item "prefetch-latency"
8315 Estimate on average number of instructions that are executed before
8316 prefetch finishes.  The distance we prefetch ahead is proportional
8317 to this constant.  Increasing this number may also lead to less
8318 streams being prefetched (see \fBsimultaneous-prefetches\fR).
8319 .IP "\fBsimultaneous-prefetches\fR" 4
8320 .IX Item "simultaneous-prefetches"
8321 Maximum number of prefetches that can run at the same time.
8322 .IP "\fBl1\-cache\-line\-size\fR" 4
8323 .IX Item "l1-cache-line-size"
8324 The size of cache line in L1 cache, in bytes.
8325 .IP "\fBl1\-cache\-size\fR" 4
8326 .IX Item "l1-cache-size"
8327 The size of L1 cache, in kilobytes.
8328 .IP "\fBl2\-cache\-size\fR" 4
8329 .IX Item "l2-cache-size"
8330 The size of L2 cache, in kilobytes.
8331 .IP "\fBmin-insn-to-prefetch-ratio\fR" 4
8332 .IX Item "min-insn-to-prefetch-ratio"
8333 The minimum ratio between the number of instructions and the
8334 number of prefetches to enable prefetching in a loop.
8335 .IP "\fBprefetch-min-insn-to-mem-ratio\fR" 4
8336 .IX Item "prefetch-min-insn-to-mem-ratio"
8337 The minimum ratio between the number of instructions and the
8338 number of memory references to enable prefetching in a loop.
8339 .IP "\fBuse-canonical-types\fR" 4
8340 .IX Item "use-canonical-types"
8341 Whether the compiler should use the \*(L"canonical\*(R" type system.  By
8342 default, this should always be 1, which uses a more efficient internal
8343 mechanism for comparing types in \*(C+ and Objective\-\*(C+.  However, if
8344 bugs in the canonical type system are causing compilation failures,
8345 set this value to 0 to disable canonical types.
8346 .IP "\fBswitch-conversion-max-branch-ratio\fR" 4
8347 .IX Item "switch-conversion-max-branch-ratio"
8348 Switch initialization conversion will refuse to create arrays that are
8349 bigger than \fBswitch-conversion-max-branch-ratio\fR times the number of
8350 branches in the switch.
8351 .IP "\fBmax-partial-antic-length\fR" 4
8352 .IX Item "max-partial-antic-length"
8353 Maximum length of the partial antic set computed during the tree
8354 partial redundancy elimination optimization (\fB\-ftree\-pre\fR) when
8355 optimizing at \fB\-O3\fR and above.  For some sorts of source code
8356 the enhanced partial redundancy elimination optimization can run away,
8357 consuming all of the memory available on the host machine.  This
8358 parameter sets a limit on the length of the sets that are computed,
8359 which prevents the runaway behavior.  Setting a value of 0 for
8360 this parameter will allow an unlimited set length.
8361 .IP "\fBsccvn-max-scc-size\fR" 4
8362 .IX Item "sccvn-max-scc-size"
8363 Maximum size of a strongly connected component (\s-1SCC\s0) during \s-1SCCVN\s0
8364 processing.  If this limit is hit, \s-1SCCVN\s0 processing for the whole
8365 function will not be done and optimizations depending on it will
8366 be disabled.  The default maximum \s-1SCC\s0 size is 10000.
8367 .IP "\fBira-max-loops-num\fR" 4
8368 .IX Item "ira-max-loops-num"
8369 \&\s-1IRA\s0 uses regional register allocation by default.  If a function
8370 contains more loops than the number given by this parameter, only at most
8371 the given number of the most frequently-executed loops form regions
8372 for regional register allocation.  The default value of the
8373 parameter is 100.
8374 .IP "\fBira-max-conflict-table-size\fR" 4
8375 .IX Item "ira-max-conflict-table-size"
8376 Although \s-1IRA\s0 uses a sophisticated algorithm to compress the conflict
8377 table, the table can still require excessive amounts of memory for
8378 huge functions.  If the conflict table for a function could be more
8379 than the size in \s-1MB\s0 given by this parameter, the register allocator
8380 instead uses a faster, simpler, and lower-quality
8381 algorithm that does not require building a pseudo-register conflict table.  
8382 The default value of the parameter is 2000.
8383 .IP "\fBira-loop-reserved-regs\fR" 4
8384 .IX Item "ira-loop-reserved-regs"
8385 \&\s-1IRA\s0 can be used to evaluate more accurate register pressure in loops
8386 for decisions to move loop invariants (see \fB\-O3\fR).  The number
8387 of available registers reserved for some other purposes is given
8388 by this parameter.  The default value of the parameter is 2, which is
8389 the minimal number of registers needed by typical instructions.
8390 This value is the best found from numerous experiments.
8391 .IP "\fBloop-invariant-max-bbs-in-loop\fR" 4
8392 .IX Item "loop-invariant-max-bbs-in-loop"
8393 Loop invariant motion can be very expensive, both in compilation time and
8394 in amount of needed compile-time memory, with very large loops.  Loops
8395 with more basic blocks than this parameter won't have loop invariant
8396 motion optimization performed on them.  The default value of the
8397 parameter is 1000 for \-O1 and 10000 for \-O2 and above.
8398 .IP "\fBloop-max-datarefs-for-datadeps\fR" 4
8399 .IX Item "loop-max-datarefs-for-datadeps"
8400 Building data dapendencies is expensive for very large loops.  This
8401 parameter limits the number of data references in loops that are
8402 considered for data dependence analysis.  These large loops will not
8403 be handled then by the optimizations using loop data dependencies.
8404 The default value is 1000.
8405 .IP "\fBmax-vartrack-size\fR" 4
8406 .IX Item "max-vartrack-size"
8407 Sets a maximum number of hash table slots to use during variable
8408 tracking dataflow analysis of any function.  If this limit is exceeded
8409 with variable tracking at assignments enabled, analysis for that
8410 function is retried without it, after removing all debug insns from
8411 the function.  If the limit is exceeded even without debug insns, var
8412 tracking analysis is completely disabled for the function.  Setting
8413 the parameter to zero makes it unlimited.
8414 .IP "\fBmax-vartrack-expr-depth\fR" 4
8415 .IX Item "max-vartrack-expr-depth"
8416 Sets a maximum number of recursion levels when attempting to map
8417 variable names or debug temporaries to value expressions.  This trades
8418 compilation time for more complete debug information.  If this is set too
8419 low, value expressions that are available and could be represented in
8420 debug information may end up not being used; setting this higher may
8421 enable the compiler to find more complex debug expressions, but compile
8422 time and memory use may grow.  The default is 12.
8423 .IP "\fBmin-nondebug-insn-uid\fR" 4
8424 .IX Item "min-nondebug-insn-uid"
8425 Use uids starting at this parameter for nondebug insns.  The range below
8426 the parameter is reserved exclusively for debug insns created by
8427 \&\fB\-fvar\-tracking\-assignments\fR, but debug insns may get
8428 (non-overlapping) uids above it if the reserved range is exhausted.
8429 .IP "\fBipa-sra-ptr-growth-factor\fR" 4
8430 .IX Item "ipa-sra-ptr-growth-factor"
8431 IPA-SRA will replace a pointer to an aggregate with one or more new
8432 parameters only when their cumulative size is less or equal to
8433 \&\fBipa-sra-ptr-growth-factor\fR times the size of the original
8434 pointer parameter.
8435 .IP "\fBtm-max-aggregate-size\fR" 4
8436 .IX Item "tm-max-aggregate-size"
8437 When making copies of thread-local variables in a transaction, this
8438 parameter specifies the size in bytes after which variables will be
8439 saved with the logging functions as opposed to save/restore code
8440 sequence pairs.  This option only applies when using
8441 \&\fB\-fgnu\-tm\fR.
8442 .IP "\fBgraphite-max-nb-scop-params\fR" 4
8443 .IX Item "graphite-max-nb-scop-params"
8444 To avoid exponential effects in the Graphite loop transforms, the
8445 number of parameters in a Static Control Part (SCoP) is bounded.  The
8446 default value is 10 parameters.  A variable whose value is unknown at
8447 compilation time and defined outside a SCoP is a parameter of the SCoP.
8448 .IP "\fBgraphite-max-bbs-per-function\fR" 4
8449 .IX Item "graphite-max-bbs-per-function"
8450 To avoid exponential effects in the detection of SCoPs, the size of
8451 the functions analyzed by Graphite is bounded.  The default value is
8452 100 basic blocks.
8453 .IP "\fBloop-block-tile-size\fR" 4
8454 .IX Item "loop-block-tile-size"
8455 Loop blocking or strip mining transforms, enabled with
8456 \&\fB\-floop\-block\fR or \fB\-floop\-strip\-mine\fR, strip mine each
8457 loop in the loop nest by a given number of iterations.  The strip
8458 length can be changed using the \fBloop-block-tile-size\fR
8459 parameter.  The default value is 51 iterations.
8460 .IP "\fBipa-cp-value-list-size\fR" 4
8461 .IX Item "ipa-cp-value-list-size"
8462 IPA-CP attempts to track all possible values and types passed to a function's
8463 parameter in order to propagate them and perform devirtualization.
8464 \&\fBipa-cp-value-list-size\fR is the maximum number of values and types it
8465 stores per one formal parameter of a function.
8466 .IP "\fBlto-partitions\fR" 4
8467 .IX Item "lto-partitions"
8468 Specify desired number of partitions produced during \s-1WHOPR\s0 compilation.
8469 The number of partitions should exceed the number of CPUs used for compilation.
8470 The default value is 32.
8471 .IP "\fBlto-minpartition\fR" 4
8472 .IX Item "lto-minpartition"
8473 Size of minimal partition for \s-1WHOPR\s0 (in estimated instructions).
8474 This prevents expenses of splitting very small programs into too many
8475 partitions.
8476 .IP "\fBcxx-max-namespaces-for-diagnostic-help\fR" 4
8477 .IX Item "cxx-max-namespaces-for-diagnostic-help"
8478 The maximum number of namespaces to consult for suggestions when \*(C+
8479 name lookup fails for an identifier.  The default is 1000.
8480 .IP "\fBsink-frequency-threshold\fR" 4
8481 .IX Item "sink-frequency-threshold"
8482 The maximum relative execution frequency (in percents) of the target block
8483 relative to a statement's original block to allow statement sinking of a
8484 statement.  Larger numbers result in more aggressive statement sinking.
8485 The default value is 75.  A small positive adjustment is applied for
8486 statements with memory operands as those are even more profitable so sink.
8487 .IP "\fBmax-stores-to-sink\fR" 4
8488 .IX Item "max-stores-to-sink"
8489 The maximum number of conditional stores paires that can be sunk.  Set to 0
8490 if either vectorization (\fB\-ftree\-vectorize\fR) or if-conversion
8491 (\fB\-ftree\-loop\-if\-convert\fR) is disabled.  The default is 2.
8492 .IP "\fBallow-load-data-races\fR" 4
8493 .IX Item "allow-load-data-races"
8494 Allow optimizers to introduce new data races on loads.
8495 Set to 1 to allow, otherwise to 0.  This option is enabled by default
8496 unless implicitly set by the \fB\-fmemory\-model=\fR option.
8497 .IP "\fBallow-store-data-races\fR" 4
8498 .IX Item "allow-store-data-races"
8499 Allow optimizers to introduce new data races on stores.
8500 Set to 1 to allow, otherwise to 0.  This option is enabled by default
8501 unless implicitly set by the \fB\-fmemory\-model=\fR option.
8502 .IP "\fBallow-packed-load-data-races\fR" 4
8503 .IX Item "allow-packed-load-data-races"
8504 Allow optimizers to introduce new data races on packed data loads.
8505 Set to 1 to allow, otherwise to 0.  This option is enabled by default
8506 unless implicitly set by the \fB\-fmemory\-model=\fR option.
8507 .IP "\fBallow-packed-store-data-races\fR" 4
8508 .IX Item "allow-packed-store-data-races"
8509 Allow optimizers to introduce new data races on packed data stores.
8510 Set to 1 to allow, otherwise to 0.  This option is enabled by default
8511 unless implicitly set by the \fB\-fmemory\-model=\fR option.
8512 .IP "\fBcase-values-threshold\fR" 4
8513 .IX Item "case-values-threshold"
8514 The smallest number of different values for which it is best to use a
8515 jump-table instead of a tree of conditional branches.  If the value is
8516 0, use the default for the machine.  The default is 0.
8517 .IP "\fBtree-reassoc-width\fR" 4
8518 .IX Item "tree-reassoc-width"
8519 Set the maximum number of instructions executed in parallel in
8520 reassociated tree. This parameter overrides target dependent
8521 heuristics used by default if has non zero value.
8522 .RE
8523 .RS 4
8524 .RE
8525 .SS "Options Controlling the Preprocessor"
8526 .IX Subsection "Options Controlling the Preprocessor"
8527 These options control the C preprocessor, which is run on each C source
8528 file before actual compilation.
8529 .PP
8530 If you use the \fB\-E\fR option, nothing is done except preprocessing.
8531 Some of these options make sense only together with \fB\-E\fR because
8532 they cause the preprocessor output to be unsuitable for actual
8533 compilation.
8534 .IP "\fB\-Wp,\fR\fIoption\fR" 4
8535 .IX Item "-Wp,option"
8536 You can use \fB\-Wp,\fR\fIoption\fR to bypass the compiler driver
8537 and pass \fIoption\fR directly through to the preprocessor.  If
8538 \&\fIoption\fR contains commas, it is split into multiple options at the
8539 commas.  However, many options are modified, translated or interpreted
8540 by the compiler driver before being passed to the preprocessor, and
8541 \&\fB\-Wp\fR forcibly bypasses this phase.  The preprocessor's direct
8542 interface is undocumented and subject to change, so whenever possible
8543 you should avoid using \fB\-Wp\fR and let the driver handle the
8544 options instead.
8545 .IP "\fB\-Xpreprocessor\fR \fIoption\fR" 4
8546 .IX Item "-Xpreprocessor option"
8547 Pass \fIoption\fR as an option to the preprocessor.  You can use this to
8548 supply system-specific preprocessor options that \s-1GCC\s0 does not know how to
8549 recognize.
8550 .Sp
8551 If you want to pass an option that takes an argument, you must use
8552 \&\fB\-Xpreprocessor\fR twice, once for the option and once for the argument.
8553 .IP "\fB\-D\fR \fIname\fR" 4
8554 .IX Item "-D name"
8555 Predefine \fIname\fR as a macro, with definition \f(CW1\fR.
8556 .IP "\fB\-D\fR \fIname\fR\fB=\fR\fIdefinition\fR" 4
8557 .IX Item "-D name=definition"
8558 The contents of \fIdefinition\fR are tokenized and processed as if
8559 they appeared during translation phase three in a \fB#define\fR
8560 directive.  In particular, the definition will be truncated by
8561 embedded newline characters.
8562 .Sp
8563 If you are invoking the preprocessor from a shell or shell-like
8564 program you may need to use the shell's quoting syntax to protect
8565 characters such as spaces that have a meaning in the shell syntax.
8566 .Sp
8567 If you wish to define a function-like macro on the command line, write
8568 its argument list with surrounding parentheses before the equals sign
8569 (if any).  Parentheses are meaningful to most shells, so you will need
8570 to quote the option.  With \fBsh\fR and \fBcsh\fR,
8571 \&\fB\-D'\fR\fIname\fR\fB(\fR\fIargs...\fR\fB)=\fR\fIdefinition\fR\fB'\fR works.
8572 .Sp
8573 \&\fB\-D\fR and \fB\-U\fR options are processed in the order they
8574 are given on the command line.  All \fB\-imacros\fR \fIfile\fR and
8575 \&\fB\-include\fR \fIfile\fR options are processed after all
8576 \&\fB\-D\fR and \fB\-U\fR options.
8577 .IP "\fB\-U\fR \fIname\fR" 4
8578 .IX Item "-U name"
8579 Cancel any previous definition of \fIname\fR, either built in or
8580 provided with a \fB\-D\fR option.
8581 .IP "\fB\-undef\fR" 4
8582 .IX Item "-undef"
8583 Do not predefine any system-specific or GCC-specific macros.  The
8584 standard predefined macros remain defined.
8585 .IP "\fB\-I\fR \fIdir\fR" 4
8586 .IX Item "-I dir"
8587 Add the directory \fIdir\fR to the list of directories to be searched
8588 for header files.
8589 Directories named by \fB\-I\fR are searched before the standard
8590 system include directories.  If the directory \fIdir\fR is a standard
8591 system include directory, the option is ignored to ensure that the
8592 default search order for system directories and the special treatment
8593 of system headers are not defeated
8594 \&.
8595 If \fIdir\fR begins with \f(CW\*(C`=\*(C'\fR, then the \f(CW\*(C`=\*(C'\fR will be replaced
8596 by the sysroot prefix; see \fB\-\-sysroot\fR and \fB\-isysroot\fR.
8597 .IP "\fB\-o\fR \fIfile\fR" 4
8598 .IX Item "-o file"
8599 Write output to \fIfile\fR.  This is the same as specifying \fIfile\fR
8600 as the second non-option argument to \fBcpp\fR.  \fBgcc\fR has a
8601 different interpretation of a second non-option argument, so you must
8602 use \fB\-o\fR to specify the output file.
8603 .IP "\fB\-Wall\fR" 4
8604 .IX Item "-Wall"
8605 Turns on all optional warnings which are desirable for normal code.
8606 At present this is \fB\-Wcomment\fR, \fB\-Wtrigraphs\fR,
8607 \&\fB\-Wmultichar\fR and a warning about integer promotion causing a
8608 change of sign in \f(CW\*(C`#if\*(C'\fR expressions.  Note that many of the
8609 preprocessor's warnings are on by default and have no options to
8610 control them.
8611 .IP "\fB\-Wcomment\fR" 4
8612 .IX Item "-Wcomment"
8613 .PD 0
8614 .IP "\fB\-Wcomments\fR" 4
8615 .IX Item "-Wcomments"
8616 .PD
8617 Warn whenever a comment-start sequence \fB/*\fR appears in a \fB/*\fR
8618 comment, or whenever a backslash-newline appears in a \fB//\fR comment.
8619 (Both forms have the same effect.)
8620 .IP "\fB\-Wtrigraphs\fR" 4
8621 .IX Item "-Wtrigraphs"
8622 Most trigraphs in comments cannot affect the meaning of the program.
8623 However, a trigraph that would form an escaped newline (\fB??/\fR at
8624 the end of a line) can, by changing where the comment begins or ends.
8625 Therefore, only trigraphs that would form escaped newlines produce
8626 warnings inside a comment.
8627 .Sp
8628 This option is implied by \fB\-Wall\fR.  If \fB\-Wall\fR is not
8629 given, this option is still enabled unless trigraphs are enabled.  To
8630 get trigraph conversion without warnings, but get the other
8631 \&\fB\-Wall\fR warnings, use \fB\-trigraphs \-Wall \-Wno\-trigraphs\fR.
8632 .IP "\fB\-Wtraditional\fR" 4
8633 .IX Item "-Wtraditional"
8634 Warn about certain constructs that behave differently in traditional and
8635 \&\s-1ISO\s0 C.  Also warn about \s-1ISO\s0 C constructs that have no traditional C
8636 equivalent, and problematic constructs which should be avoided.
8637 .IP "\fB\-Wundef\fR" 4
8638 .IX Item "-Wundef"
8639 Warn whenever an identifier which is not a macro is encountered in an
8640 \&\fB#if\fR directive, outside of \fBdefined\fR.  Such identifiers are
8641 replaced with zero.
8642 .IP "\fB\-Wunused\-macros\fR" 4
8643 .IX Item "-Wunused-macros"
8644 Warn about macros defined in the main file that are unused.  A macro
8645 is \fIused\fR if it is expanded or tested for existence at least once.
8646 The preprocessor will also warn if the macro has not been used at the
8647 time it is redefined or undefined.
8648 .Sp
8649 Built-in macros, macros defined on the command line, and macros
8650 defined in include files are not warned about.
8651 .Sp
8652 \&\fINote:\fR If a macro is actually used, but only used in skipped
8653 conditional blocks, then \s-1CPP\s0 will report it as unused.  To avoid the
8654 warning in such a case, you might improve the scope of the macro's
8655 definition by, for example, moving it into the first skipped block.
8656 Alternatively, you could provide a dummy use with something like:
8657 .Sp
8658 .Vb 2
8659 \&        #if defined the_macro_causing_the_warning
8660 \&        #endif
8661 .Ve
8662 .IP "\fB\-Wendif\-labels\fR" 4
8663 .IX Item "-Wendif-labels"
8664 Warn whenever an \fB#else\fR or an \fB#endif\fR are followed by text.
8665 This usually happens in code of the form
8666 .Sp
8667 .Vb 5
8668 \&        #if FOO
8669 \&        ...
8670 \&        #else FOO
8671 \&        ...
8672 \&        #endif FOO
8673 .Ve
8674 .Sp
8675 The second and third \f(CW\*(C`FOO\*(C'\fR should be in comments, but often are not
8676 in older programs.  This warning is on by default.
8677 .IP "\fB\-Werror\fR" 4
8678 .IX Item "-Werror"
8679 Make all warnings into hard errors.  Source code which triggers warnings
8680 will be rejected.
8681 .IP "\fB\-Wsystem\-headers\fR" 4
8682 .IX Item "-Wsystem-headers"
8683 Issue warnings for code in system headers.  These are normally unhelpful
8684 in finding bugs in your own code, therefore suppressed.  If you are
8685 responsible for the system library, you may want to see them.
8686 .IP "\fB\-w\fR" 4
8687 .IX Item "-w"
8688 Suppress all warnings, including those which \s-1GNU\s0 \s-1CPP\s0 issues by default.
8689 .IP "\fB\-pedantic\fR" 4
8690 .IX Item "-pedantic"
8691 Issue all the mandatory diagnostics listed in the C standard.  Some of
8692 them are left out by default, since they trigger frequently on harmless
8693 code.
8694 .IP "\fB\-pedantic\-errors\fR" 4
8695 .IX Item "-pedantic-errors"
8696 Issue all the mandatory diagnostics, and make all mandatory diagnostics
8697 into errors.  This includes mandatory diagnostics that \s-1GCC\s0 issues
8698 without \fB\-pedantic\fR but treats as warnings.
8699 .IP "\fB\-M\fR" 4
8700 .IX Item "-M"
8701 Instead of outputting the result of preprocessing, output a rule
8702 suitable for \fBmake\fR describing the dependencies of the main
8703 source file.  The preprocessor outputs one \fBmake\fR rule containing
8704 the object file name for that source file, a colon, and the names of all
8705 the included files, including those coming from \fB\-include\fR or
8706 \&\fB\-imacros\fR command line options.
8707 .Sp
8708 Unless specified explicitly (with \fB\-MT\fR or \fB\-MQ\fR), the
8709 object file name consists of the name of the source file with any
8710 suffix replaced with object file suffix and with any leading directory
8711 parts removed.  If there are many included files then the rule is
8712 split into several lines using \fB\e\fR\-newline.  The rule has no
8713 commands.
8714 .Sp
8715 This option does not suppress the preprocessor's debug output, such as
8716 \&\fB\-dM\fR.  To avoid mixing such debug output with the dependency
8717 rules you should explicitly specify the dependency output file with
8718 \&\fB\-MF\fR, or use an environment variable like
8719 \&\fB\s-1DEPENDENCIES_OUTPUT\s0\fR.  Debug output
8720 will still be sent to the regular output stream as normal.
8721 .Sp
8722 Passing \fB\-M\fR to the driver implies \fB\-E\fR, and suppresses
8723 warnings with an implicit \fB\-w\fR.
8724 .IP "\fB\-MM\fR" 4
8725 .IX Item "-MM"
8726 Like \fB\-M\fR but do not mention header files that are found in
8727 system header directories, nor header files that are included,
8728 directly or indirectly, from such a header.
8729 .Sp
8730 This implies that the choice of angle brackets or double quotes in an
8731 \&\fB#include\fR directive does not in itself determine whether that
8732 header will appear in \fB\-MM\fR dependency output.  This is a
8733 slight change in semantics from \s-1GCC\s0 versions 3.0 and earlier.
8734 .IP "\fB\-MF\fR \fIfile\fR" 4
8735 .IX Item "-MF file"
8736 When used with \fB\-M\fR or \fB\-MM\fR, specifies a
8737 file to write the dependencies to.  If no \fB\-MF\fR switch is given
8738 the preprocessor sends the rules to the same place it would have sent
8739 preprocessed output.
8740 .Sp
8741 When used with the driver options \fB\-MD\fR or \fB\-MMD\fR,
8742 \&\fB\-MF\fR overrides the default dependency output file.
8743 .IP "\fB\-MG\fR" 4
8744 .IX Item "-MG"
8745 In conjunction with an option such as \fB\-M\fR requesting
8746 dependency generation, \fB\-MG\fR assumes missing header files are
8747 generated files and adds them to the dependency list without raising
8748 an error.  The dependency filename is taken directly from the
8749 \&\f(CW\*(C`#include\*(C'\fR directive without prepending any path.  \fB\-MG\fR
8750 also suppresses preprocessed output, as a missing header file renders
8751 this useless.
8752 .Sp
8753 This feature is used in automatic updating of makefiles.
8754 .IP "\fB\-MP\fR" 4
8755 .IX Item "-MP"
8756 This option instructs \s-1CPP\s0 to add a phony target for each dependency
8757 other than the main file, causing each to depend on nothing.  These
8758 dummy rules work around errors \fBmake\fR gives if you remove header
8759 files without updating the \fIMakefile\fR to match.
8760 .Sp
8761 This is typical output:
8762 .Sp
8763 .Vb 1
8764 \&        test.o: test.c test.h
8765 \&        
8766 \&        test.h:
8767 .Ve
8768 .IP "\fB\-MT\fR \fItarget\fR" 4
8769 .IX Item "-MT target"
8770 Change the target of the rule emitted by dependency generation.  By
8771 default \s-1CPP\s0 takes the name of the main input file, deletes any
8772 directory components and any file suffix such as \fB.c\fR, and
8773 appends the platform's usual object suffix.  The result is the target.
8774 .Sp
8775 An \fB\-MT\fR option will set the target to be exactly the string you
8776 specify.  If you want multiple targets, you can specify them as a single
8777 argument to \fB\-MT\fR, or use multiple \fB\-MT\fR options.
8778 .Sp
8779 For example, \fB\-MT\ '$(objpfx)foo.o'\fR might give
8780 .Sp
8781 .Vb 1
8782 \&        $(objpfx)foo.o: foo.c
8783 .Ve
8784 .IP "\fB\-MQ\fR \fItarget\fR" 4
8785 .IX Item "-MQ target"
8786 Same as \fB\-MT\fR, but it quotes any characters which are special to
8787 Make.  \fB\-MQ\ '$(objpfx)foo.o'\fR gives
8788 .Sp
8789 .Vb 1
8790 \&        $$(objpfx)foo.o: foo.c
8791 .Ve
8792 .Sp
8793 The default target is automatically quoted, as if it were given with
8794 \&\fB\-MQ\fR.
8795 .IP "\fB\-MD\fR" 4
8796 .IX Item "-MD"
8797 \&\fB\-MD\fR is equivalent to \fB\-M \-MF\fR \fIfile\fR, except that
8798 \&\fB\-E\fR is not implied.  The driver determines \fIfile\fR based on
8799 whether an \fB\-o\fR option is given.  If it is, the driver uses its
8800 argument but with a suffix of \fI.d\fR, otherwise it takes the name
8801 of the input file, removes any directory components and suffix, and
8802 applies a \fI.d\fR suffix.
8803 .Sp
8804 If \fB\-MD\fR is used in conjunction with \fB\-E\fR, any
8805 \&\fB\-o\fR switch is understood to specify the dependency output file, but if used without \fB\-E\fR, each \fB\-o\fR
8806 is understood to specify a target object file.
8807 .Sp
8808 Since \fB\-E\fR is not implied, \fB\-MD\fR can be used to generate
8809 a dependency output file as a side-effect of the compilation process.
8810 .IP "\fB\-MMD\fR" 4
8811 .IX Item "-MMD"
8812 Like \fB\-MD\fR except mention only user header files, not system
8813 header files.
8814 .IP "\fB\-fpch\-deps\fR" 4
8815 .IX Item "-fpch-deps"
8816 When using precompiled headers, this flag
8817 will cause the dependency-output flags to also list the files from the
8818 precompiled header's dependencies.  If not specified only the
8819 precompiled header would be listed and not the files that were used to
8820 create it because those files are not consulted when a precompiled
8821 header is used.
8822 .IP "\fB\-fpch\-preprocess\fR" 4
8823 .IX Item "-fpch-preprocess"
8824 This option allows use of a precompiled header together with \fB\-E\fR.  It inserts a special \f(CW\*(C`#pragma\*(C'\fR,
8825 \&\f(CW\*(C`#pragma GCC pch_preprocess "\f(CIfilename\f(CW"\*(C'\fR in the output to mark
8826 the place where the precompiled header was found, and its \fIfilename\fR.
8827 When \fB\-fpreprocessed\fR is in use, \s-1GCC\s0 recognizes this \f(CW\*(C`#pragma\*(C'\fR
8828 and loads the \s-1PCH\s0.
8829 .Sp
8830 This option is off by default, because the resulting preprocessed output
8831 is only really suitable as input to \s-1GCC\s0.  It is switched on by
8832 \&\fB\-save\-temps\fR.
8833 .Sp
8834 You should not write this \f(CW\*(C`#pragma\*(C'\fR in your own code, but it is
8835 safe to edit the filename if the \s-1PCH\s0 file is available in a different
8836 location.  The filename may be absolute or it may be relative to \s-1GCC\s0's
8837 current directory.
8838 .IP "\fB\-x c\fR" 4
8839 .IX Item "-x c"
8840 .PD 0
8841 .IP "\fB\-x c++\fR" 4
8842 .IX Item "-x c++"
8843 .IP "\fB\-x objective-c\fR" 4
8844 .IX Item "-x objective-c"
8845 .IP "\fB\-x assembler-with-cpp\fR" 4
8846 .IX Item "-x assembler-with-cpp"
8847 .PD
8848 Specify the source language: C, \*(C+, Objective-C, or assembly.  This has
8849 nothing to do with standards conformance or extensions; it merely
8850 selects which base syntax to expect.  If you give none of these options,
8851 cpp will deduce the language from the extension of the source file:
8852 \&\fB.c\fR, \fB.cc\fR, \fB.m\fR, or \fB.S\fR.  Some other common
8853 extensions for \*(C+ and assembly are also recognized.  If cpp does not
8854 recognize the extension, it will treat the file as C; this is the most
8855 generic mode.
8856 .Sp
8857 \&\fINote:\fR Previous versions of cpp accepted a \fB\-lang\fR option
8858 which selected both the language and the standards conformance level.
8859 This option has been removed, because it conflicts with the \fB\-l\fR
8860 option.
8861 .IP "\fB\-std=\fR\fIstandard\fR" 4
8862 .IX Item "-std=standard"
8863 .PD 0
8864 .IP "\fB\-ansi\fR" 4
8865 .IX Item "-ansi"
8866 .PD
8867 Specify the standard to which the code should conform.  Currently \s-1CPP\s0
8868 knows about C and \*(C+ standards; others may be added in the future.
8869 .Sp
8870 \&\fIstandard\fR
8871 may be one of:
8872 .RS 4
8873 .ie n .IP """c90""" 4
8874 .el .IP "\f(CWc90\fR" 4
8875 .IX Item "c90"
8876 .PD 0
8877 .ie n .IP """c89""" 4
8878 .el .IP "\f(CWc89\fR" 4
8879 .IX Item "c89"
8880 .ie n .IP """iso9899:1990""" 4
8881 .el .IP "\f(CWiso9899:1990\fR" 4
8882 .IX Item "iso9899:1990"
8883 .PD
8884 The \s-1ISO\s0 C standard from 1990.  \fBc90\fR is the customary shorthand for
8885 this version of the standard.
8886 .Sp
8887 The \fB\-ansi\fR option is equivalent to \fB\-std=c90\fR.
8888 .ie n .IP """iso9899:199409""" 4
8889 .el .IP "\f(CWiso9899:199409\fR" 4
8890 .IX Item "iso9899:199409"
8891 The 1990 C standard, as amended in 1994.
8892 .ie n .IP """iso9899:1999""" 4
8893 .el .IP "\f(CWiso9899:1999\fR" 4
8894 .IX Item "iso9899:1999"
8895 .PD 0
8896 .ie n .IP """c99""" 4
8897 .el .IP "\f(CWc99\fR" 4
8898 .IX Item "c99"
8899 .ie n .IP """iso9899:199x""" 4
8900 .el .IP "\f(CWiso9899:199x\fR" 4
8901 .IX Item "iso9899:199x"
8902 .ie n .IP """c9x""" 4
8903 .el .IP "\f(CWc9x\fR" 4
8904 .IX Item "c9x"
8905 .PD
8906 The revised \s-1ISO\s0 C standard, published in December 1999.  Before
8907 publication, this was known as C9X.
8908 .ie n .IP """iso9899:2011""" 4
8909 .el .IP "\f(CWiso9899:2011\fR" 4
8910 .IX Item "iso9899:2011"
8911 .PD 0
8912 .ie n .IP """c11""" 4
8913 .el .IP "\f(CWc11\fR" 4
8914 .IX Item "c11"
8915 .ie n .IP """c1x""" 4
8916 .el .IP "\f(CWc1x\fR" 4
8917 .IX Item "c1x"
8918 .PD
8919 The revised \s-1ISO\s0 C standard, published in December 2011.  Before
8920 publication, this was known as C1X.
8921 .ie n .IP """gnu90""" 4
8922 .el .IP "\f(CWgnu90\fR" 4
8923 .IX Item "gnu90"
8924 .PD 0
8925 .ie n .IP """gnu89""" 4
8926 .el .IP "\f(CWgnu89\fR" 4
8927 .IX Item "gnu89"
8928 .PD
8929 The 1990 C standard plus \s-1GNU\s0 extensions.  This is the default.
8930 .ie n .IP """gnu99""" 4
8931 .el .IP "\f(CWgnu99\fR" 4
8932 .IX Item "gnu99"
8933 .PD 0
8934 .ie n .IP """gnu9x""" 4
8935 .el .IP "\f(CWgnu9x\fR" 4
8936 .IX Item "gnu9x"
8937 .PD
8938 The 1999 C standard plus \s-1GNU\s0 extensions.
8939 .ie n .IP """gnu11""" 4
8940 .el .IP "\f(CWgnu11\fR" 4
8941 .IX Item "gnu11"
8942 .PD 0
8943 .ie n .IP """gnu1x""" 4
8944 .el .IP "\f(CWgnu1x\fR" 4
8945 .IX Item "gnu1x"
8946 .PD
8947 The 2011 C standard plus \s-1GNU\s0 extensions.
8948 .ie n .IP """c++98""" 4
8949 .el .IP "\f(CWc++98\fR" 4
8950 .IX Item "c++98"
8951 The 1998 \s-1ISO\s0 \*(C+ standard plus amendments.
8952 .ie n .IP """gnu++98""" 4
8953 .el .IP "\f(CWgnu++98\fR" 4
8954 .IX Item "gnu++98"
8955 The same as \fB\-std=c++98\fR plus \s-1GNU\s0 extensions.  This is the
8956 default for \*(C+ code.
8957 .RE
8958 .RS 4
8959 .RE
8960 .IP "\fB\-I\-\fR" 4
8961 .IX Item "-I-"
8962 Split the include path.  Any directories specified with \fB\-I\fR
8963 options before \fB\-I\-\fR are searched only for headers requested with
8964 \&\f(CW\*(C`#include\ "\f(CIfile\f(CW"\*(C'\fR; they are not searched for
8965 \&\f(CW\*(C`#include\ <\f(CIfile\f(CW>\*(C'\fR.  If additional directories are
8966 specified with \fB\-I\fR options after the \fB\-I\-\fR, those
8967 directories are searched for all \fB#include\fR directives.
8968 .Sp
8969 In addition, \fB\-I\-\fR inhibits the use of the directory of the current
8970 file directory as the first search directory for \f(CW\*(C`#include\ "\f(CIfile\f(CW"\*(C'\fR.
8971 This option has been deprecated.
8972 .IP "\fB\-nostdinc\fR" 4
8973 .IX Item "-nostdinc"
8974 Do not search the standard system directories for header files.
8975 Only the directories you have specified with \fB\-I\fR options
8976 (and the directory of the current file, if appropriate) are searched.
8977 .IP "\fB\-nostdinc++\fR" 4
8978 .IX Item "-nostdinc++"
8979 Do not search for header files in the \*(C+\-specific standard directories,
8980 but do still search the other standard directories.  (This option is
8981 used when building the \*(C+ library.)
8982 .IP "\fB\-include\fR \fIfile\fR" 4
8983 .IX Item "-include file"
8984 Process \fIfile\fR as if \f(CW\*(C`#include "file"\*(C'\fR appeared as the first
8985 line of the primary source file.  However, the first directory searched
8986 for \fIfile\fR is the preprocessor's working directory \fIinstead of\fR
8987 the directory containing the main source file.  If not found there, it
8988 is searched for in the remainder of the \f(CW\*(C`#include "..."\*(C'\fR search
8989 chain as normal.
8990 .Sp
8991 If multiple \fB\-include\fR options are given, the files are included
8992 in the order they appear on the command line.
8993 .IP "\fB\-imacros\fR \fIfile\fR" 4
8994 .IX Item "-imacros file"
8995 Exactly like \fB\-include\fR, except that any output produced by
8996 scanning \fIfile\fR is thrown away.  Macros it defines remain defined.
8997 This allows you to acquire all the macros from a header without also
8998 processing its declarations.
8999 .Sp
9000 All files specified by \fB\-imacros\fR are processed before all files
9001 specified by \fB\-include\fR.
9002 .IP "\fB\-idirafter\fR \fIdir\fR" 4
9003 .IX Item "-idirafter dir"
9004 Search \fIdir\fR for header files, but do it \fIafter\fR all
9005 directories specified with \fB\-I\fR and the standard system directories
9006 have been exhausted.  \fIdir\fR is treated as a system include directory.
9007 If \fIdir\fR begins with \f(CW\*(C`=\*(C'\fR, then the \f(CW\*(C`=\*(C'\fR will be replaced
9008 by the sysroot prefix; see \fB\-\-sysroot\fR and \fB\-isysroot\fR.
9009 .IP "\fB\-iprefix\fR \fIprefix\fR" 4
9010 .IX Item "-iprefix prefix"
9011 Specify \fIprefix\fR as the prefix for subsequent \fB\-iwithprefix\fR
9012 options.  If the prefix represents a directory, you should include the
9013 final \fB/\fR.
9014 .IP "\fB\-iwithprefix\fR \fIdir\fR" 4
9015 .IX Item "-iwithprefix dir"
9016 .PD 0
9017 .IP "\fB\-iwithprefixbefore\fR \fIdir\fR" 4
9018 .IX Item "-iwithprefixbefore dir"
9019 .PD
9020 Append \fIdir\fR to the prefix specified previously with
9021 \&\fB\-iprefix\fR, and add the resulting directory to the include search
9022 path.  \fB\-iwithprefixbefore\fR puts it in the same place \fB\-I\fR
9023 would; \fB\-iwithprefix\fR puts it where \fB\-idirafter\fR would.
9024 .IP "\fB\-isysroot\fR \fIdir\fR" 4
9025 .IX Item "-isysroot dir"
9026 This option is like the \fB\-\-sysroot\fR option, but applies only to
9027 header files (except for Darwin targets, where it applies to both header
9028 files and libraries).  See the \fB\-\-sysroot\fR option for more
9029 information.
9030 .IP "\fB\-imultilib\fR \fIdir\fR" 4
9031 .IX Item "-imultilib dir"
9032 Use \fIdir\fR as a subdirectory of the directory containing
9033 target-specific \*(C+ headers.
9034 .IP "\fB\-isystem\fR \fIdir\fR" 4
9035 .IX Item "-isystem dir"
9036 Search \fIdir\fR for header files, after all directories specified by
9037 \&\fB\-I\fR but before the standard system directories.  Mark it
9038 as a system directory, so that it gets the same special treatment as
9039 is applied to the standard system directories.
9040 If \fIdir\fR begins with \f(CW\*(C`=\*(C'\fR, then the \f(CW\*(C`=\*(C'\fR will be replaced
9041 by the sysroot prefix; see \fB\-\-sysroot\fR and \fB\-isysroot\fR.
9042 .IP "\fB\-iquote\fR \fIdir\fR" 4
9043 .IX Item "-iquote dir"
9044 Search \fIdir\fR only for header files requested with
9045 \&\f(CW\*(C`#include\ "\f(CIfile\f(CW"\*(C'\fR; they are not searched for
9046 \&\f(CW\*(C`#include\ <\f(CIfile\f(CW>\*(C'\fR, before all directories specified by
9047 \&\fB\-I\fR and before the standard system directories.
9048 If \fIdir\fR begins with \f(CW\*(C`=\*(C'\fR, then the \f(CW\*(C`=\*(C'\fR will be replaced
9049 by the sysroot prefix; see \fB\-\-sysroot\fR and \fB\-isysroot\fR.
9050 .IP "\fB\-fdirectives\-only\fR" 4
9051 .IX Item "-fdirectives-only"
9052 When preprocessing, handle directives, but do not expand macros.
9053 .Sp
9054 The option's behavior depends on the \fB\-E\fR and \fB\-fpreprocessed\fR
9055 options.
9056 .Sp
9057 With \fB\-E\fR, preprocessing is limited to the handling of directives
9058 such as \f(CW\*(C`#define\*(C'\fR, \f(CW\*(C`#ifdef\*(C'\fR, and \f(CW\*(C`#error\*(C'\fR.  Other
9059 preprocessor operations, such as macro expansion and trigraph
9060 conversion are not performed.  In addition, the \fB\-dD\fR option is
9061 implicitly enabled.
9062 .Sp
9063 With \fB\-fpreprocessed\fR, predefinition of command line and most
9064 builtin macros is disabled.  Macros such as \f(CW\*(C`_\|_LINE_\|_\*(C'\fR, which are
9065 contextually dependent, are handled normally.  This enables compilation of
9066 files previously preprocessed with \f(CW\*(C`\-E \-fdirectives\-only\*(C'\fR.
9067 .Sp
9068 With both \fB\-E\fR and \fB\-fpreprocessed\fR, the rules for
9069 \&\fB\-fpreprocessed\fR take precedence.  This enables full preprocessing of
9070 files previously preprocessed with \f(CW\*(C`\-E \-fdirectives\-only\*(C'\fR.
9071 .IP "\fB\-fdollars\-in\-identifiers\fR" 4
9072 .IX Item "-fdollars-in-identifiers"
9073 Accept \fB$\fR in identifiers.
9074 .IP "\fB\-fextended\-identifiers\fR" 4
9075 .IX Item "-fextended-identifiers"
9076 Accept universal character names in identifiers.  This option is
9077 experimental; in a future version of \s-1GCC\s0, it will be enabled by
9078 default for C99 and \*(C+.
9079 .IP "\fB\-fpreprocessed\fR" 4
9080 .IX Item "-fpreprocessed"
9081 Indicate to the preprocessor that the input file has already been
9082 preprocessed.  This suppresses things like macro expansion, trigraph
9083 conversion, escaped newline splicing, and processing of most directives.
9084 The preprocessor still recognizes and removes comments, so that you can
9085 pass a file preprocessed with \fB\-C\fR to the compiler without
9086 problems.  In this mode the integrated preprocessor is little more than
9087 a tokenizer for the front ends.
9088 .Sp
9089 \&\fB\-fpreprocessed\fR is implicit if the input file has one of the
9090 extensions \fB.i\fR, \fB.ii\fR or \fB.mi\fR.  These are the
9091 extensions that \s-1GCC\s0 uses for preprocessed files created by
9092 \&\fB\-save\-temps\fR.
9093 .IP "\fB\-ftabstop=\fR\fIwidth\fR" 4
9094 .IX Item "-ftabstop=width"
9095 Set the distance between tab stops.  This helps the preprocessor report
9096 correct column numbers in warnings or errors, even if tabs appear on the
9097 line.  If the value is less than 1 or greater than 100, the option is
9098 ignored.  The default is 8.
9099 .IP "\fB\-fdebug\-cpp\fR" 4
9100 .IX Item "-fdebug-cpp"
9101 This option is only useful for debugging \s-1GCC\s0.  When used with
9102 \&\fB\-E\fR, dumps debugging information about location maps.  Every
9103 token in the output is preceded by the dump of the map its location
9104 belongs to.  The dump of the map holding the location of a token would
9105 be:
9106 .Sp
9107 .Vb 1
9108 \&        {"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>}
9109 .Ve
9110 .Sp
9111 When used without \fB\-E\fR, this option has no effect.
9112 .IP "\fB\-ftrack\-macro\-expansion\fR[\fB=\fR\fIlevel\fR]" 4
9113 .IX Item "-ftrack-macro-expansion[=level]"
9114 Track locations of tokens across macro expansions. This allows the
9115 compiler to emit diagnostic about the current macro expansion stack
9116 when a compilation error occurs in a macro expansion. Using this
9117 option makes the preprocessor and the compiler consume more
9118 memory. The \fIlevel\fR parameter can be used to choose the level of
9119 precision of token location tracking thus decreasing the memory
9120 consumption if necessary. Value \fB0\fR of \fIlevel\fR de-activates
9121 this option just as if no \fB\-ftrack\-macro\-expansion\fR was present
9122 on the command line. Value \fB1\fR tracks tokens locations in a
9123 degraded mode for the sake of minimal memory overhead. In this mode
9124 all tokens resulting from the expansion of an argument of a
9125 function-like macro have the same location. Value \fB2\fR tracks
9126 tokens locations completely. This value is the most memory hungry.
9127 When this option is given no argument, the default parameter value is
9128 \&\fB2\fR.
9129 .IP "\fB\-fexec\-charset=\fR\fIcharset\fR" 4
9130 .IX Item "-fexec-charset=charset"
9131 Set the execution character set, used for string and character
9132 constants.  The default is \s-1UTF\-8\s0.  \fIcharset\fR can be any encoding
9133 supported by the system's \f(CW\*(C`iconv\*(C'\fR library routine.
9134 .IP "\fB\-fwide\-exec\-charset=\fR\fIcharset\fR" 4
9135 .IX Item "-fwide-exec-charset=charset"
9136 Set the wide execution character set, used for wide string and
9137 character constants.  The default is \s-1UTF\-32\s0 or \s-1UTF\-16\s0, whichever
9138 corresponds to the width of \f(CW\*(C`wchar_t\*(C'\fR.  As with
9139 \&\fB\-fexec\-charset\fR, \fIcharset\fR can be any encoding supported
9140 by the system's \f(CW\*(C`iconv\*(C'\fR library routine; however, you will have
9141 problems with encodings that do not fit exactly in \f(CW\*(C`wchar_t\*(C'\fR.
9142 .IP "\fB\-finput\-charset=\fR\fIcharset\fR" 4
9143 .IX Item "-finput-charset=charset"
9144 Set the input character set, used for translation from the character
9145 set of the input file to the source character set used by \s-1GCC\s0.  If the
9146 locale does not specify, or \s-1GCC\s0 cannot get this information from the
9147 locale, the default is \s-1UTF\-8\s0.  This can be overridden by either the locale
9148 or this command line option.  Currently the command line option takes
9149 precedence if there's a conflict.  \fIcharset\fR can be any encoding
9150 supported by the system's \f(CW\*(C`iconv\*(C'\fR library routine.
9151 .IP "\fB\-fworking\-directory\fR" 4
9152 .IX Item "-fworking-directory"
9153 Enable generation of linemarkers in the preprocessor output that will
9154 let the compiler know the current working directory at the time of
9155 preprocessing.  When this option is enabled, the preprocessor will
9156 emit, after the initial linemarker, a second linemarker with the
9157 current working directory followed by two slashes.  \s-1GCC\s0 will use this
9158 directory, when it's present in the preprocessed input, as the
9159 directory emitted as the current working directory in some debugging
9160 information formats.  This option is implicitly enabled if debugging
9161 information is enabled, but this can be inhibited with the negated
9162 form \fB\-fno\-working\-directory\fR.  If the \fB\-P\fR flag is
9163 present in the command line, this option has no effect, since no
9164 \&\f(CW\*(C`#line\*(C'\fR directives are emitted whatsoever.
9165 .IP "\fB\-fno\-show\-column\fR" 4
9166 .IX Item "-fno-show-column"
9167 Do not print column numbers in diagnostics.  This may be necessary if
9168 diagnostics are being scanned by a program that does not understand the
9169 column numbers, such as \fBdejagnu\fR.
9170 .IP "\fB\-A\fR \fIpredicate\fR\fB=\fR\fIanswer\fR" 4
9171 .IX Item "-A predicate=answer"
9172 Make an assertion with the predicate \fIpredicate\fR and answer
9173 \&\fIanswer\fR.  This form is preferred to the older form \fB\-A\fR
9174 \&\fIpredicate\fR\fB(\fR\fIanswer\fR\fB)\fR, which is still supported, because
9175 it does not use shell special characters.
9176 .IP "\fB\-A \-\fR\fIpredicate\fR\fB=\fR\fIanswer\fR" 4
9177 .IX Item "-A -predicate=answer"
9178 Cancel an assertion with the predicate \fIpredicate\fR and answer
9179 \&\fIanswer\fR.
9180 .IP "\fB\-dCHARS\fR" 4
9181 .IX Item "-dCHARS"
9182 \&\fI\s-1CHARS\s0\fR is a sequence of one or more of the following characters,
9183 and must not be preceded by a space.  Other characters are interpreted
9184 by the compiler proper, or reserved for future versions of \s-1GCC\s0, and so
9185 are silently ignored.  If you specify characters whose behavior
9186 conflicts, the result is undefined.
9187 .RS 4
9188 .IP "\fBM\fR" 4
9189 .IX Item "M"
9190 Instead of the normal output, generate a list of \fB#define\fR
9191 directives for all the macros defined during the execution of the
9192 preprocessor, including predefined macros.  This gives you a way of
9193 finding out what is predefined in your version of the preprocessor.
9194 Assuming you have no file \fIfoo.h\fR, the command
9195 .Sp
9196 .Vb 1
9197 \&        touch foo.h; cpp \-dM foo.h
9198 .Ve
9199 .Sp
9200 will show all the predefined macros.
9201 .Sp
9202 If you use \fB\-dM\fR without the \fB\-E\fR option, \fB\-dM\fR is
9203 interpreted as a synonym for \fB\-fdump\-rtl\-mach\fR.
9204 .IP "\fBD\fR" 4
9205 .IX Item "D"
9206 Like \fBM\fR except in two respects: it does \fInot\fR include the
9207 predefined macros, and it outputs \fIboth\fR the \fB#define\fR
9208 directives and the result of preprocessing.  Both kinds of output go to
9209 the standard output file.
9210 .IP "\fBN\fR" 4
9211 .IX Item "N"
9212 Like \fBD\fR, but emit only the macro names, not their expansions.
9213 .IP "\fBI\fR" 4
9214 .IX Item "I"
9215 Output \fB#include\fR directives in addition to the result of
9216 preprocessing.
9217 .IP "\fBU\fR" 4
9218 .IX Item "U"
9219 Like \fBD\fR except that only macros that are expanded, or whose
9220 definedness is tested in preprocessor directives, are output; the
9221 output is delayed until the use or test of the macro; and
9222 \&\fB#undef\fR directives are also output for macros tested but
9223 undefined at the time.
9224 .RE
9225 .RS 4
9226 .RE
9227 .IP "\fB\-P\fR" 4
9228 .IX Item "-P"
9229 Inhibit generation of linemarkers in the output from the preprocessor.
9230 This might be useful when running the preprocessor on something that is
9231 not C code, and will be sent to a program which might be confused by the
9232 linemarkers.
9233 .IP "\fB\-C\fR" 4
9234 .IX Item "-C"
9235 Do not discard comments.  All comments are passed through to the output
9236 file, except for comments in processed directives, which are deleted
9237 along with the directive.
9238 .Sp
9239 You should be prepared for side effects when using \fB\-C\fR; it
9240 causes the preprocessor to treat comments as tokens in their own right.
9241 For example, comments appearing at the start of what would be a
9242 directive line have the effect of turning that line into an ordinary
9243 source line, since the first token on the line is no longer a \fB#\fR.
9244 .IP "\fB\-CC\fR" 4
9245 .IX Item "-CC"
9246 Do not discard comments, including during macro expansion.  This is
9247 like \fB\-C\fR, except that comments contained within macros are
9248 also passed through to the output file where the macro is expanded.
9249 .Sp
9250 In addition to the side-effects of the \fB\-C\fR option, the
9251 \&\fB\-CC\fR option causes all \*(C+\-style comments inside a macro
9252 to be converted to C\-style comments.  This is to prevent later use
9253 of that macro from inadvertently commenting out the remainder of
9254 the source line.
9255 .Sp
9256 The \fB\-CC\fR option is generally used to support lint comments.
9257 .IP "\fB\-traditional\-cpp\fR" 4
9258 .IX Item "-traditional-cpp"
9259 Try to imitate the behavior of old-fashioned C preprocessors, as
9260 opposed to \s-1ISO\s0 C preprocessors.
9261 .IP "\fB\-trigraphs\fR" 4
9262 .IX Item "-trigraphs"
9263 Process trigraph sequences.
9264 These are three-character sequences, all starting with \fB??\fR, that
9265 are defined by \s-1ISO\s0 C to stand for single characters.  For example,
9266 \&\fB??/\fR stands for \fB\e\fR, so \fB'??/n'\fR is a character
9267 constant for a newline.  By default, \s-1GCC\s0 ignores trigraphs, but in
9268 standard-conforming modes it converts them.  See the \fB\-std\fR and
9269 \&\fB\-ansi\fR options.
9270 .Sp
9271 The nine trigraphs and their replacements are
9272 .Sp
9273 .Vb 2
9274 \&        Trigraph:       ??(  ??)  ??<  ??>  ??=  ??/  ??\*(Aq  ??!  ??\-
9275 \&        Replacement:      [    ]    {    }    #    \e    ^    |    ~
9276 .Ve
9277 .IP "\fB\-remap\fR" 4
9278 .IX Item "-remap"
9279 Enable special code to work around file systems which only permit very
9280 short file names, such as MS-DOS.
9281 .IP "\fB\-\-help\fR" 4
9282 .IX Item "--help"
9283 .PD 0
9284 .IP "\fB\-\-target\-help\fR" 4
9285 .IX Item "--target-help"
9286 .PD
9287 Print text describing all the command line options instead of
9288 preprocessing anything.
9289 .IP "\fB\-v\fR" 4
9290 .IX Item "-v"
9291 Verbose mode.  Print out \s-1GNU\s0 \s-1CPP\s0's version number at the beginning of
9292 execution, and report the final form of the include path.
9293 .IP "\fB\-H\fR" 4
9294 .IX Item "-H"
9295 Print the name of each header file used, in addition to other normal
9296 activities.  Each name is indented to show how deep in the
9297 \&\fB#include\fR stack it is.  Precompiled header files are also
9298 printed, even if they are found to be invalid; an invalid precompiled
9299 header file is printed with \fB...x\fR and a valid one with \fB...!\fR .
9300 .IP "\fB\-version\fR" 4
9301 .IX Item "-version"
9302 .PD 0
9303 .IP "\fB\-\-version\fR" 4
9304 .IX Item "--version"
9305 .PD
9306 Print out \s-1GNU\s0 \s-1CPP\s0's version number.  With one dash, proceed to
9307 preprocess as normal.  With two dashes, exit immediately.
9308 .SS "Passing Options to the Assembler"
9309 .IX Subsection "Passing Options to the Assembler"
9310 You can pass options to the assembler.
9311 .IP "\fB\-Wa,\fR\fIoption\fR" 4
9312 .IX Item "-Wa,option"
9313 Pass \fIoption\fR as an option to the assembler.  If \fIoption\fR
9314 contains commas, it is split into multiple options at the commas.
9315 .IP "\fB\-Xassembler\fR \fIoption\fR" 4
9316 .IX Item "-Xassembler option"
9317 Pass \fIoption\fR as an option to the assembler.  You can use this to
9318 supply system-specific assembler options that \s-1GCC\s0 does not know how to
9319 recognize.
9320 .Sp
9321 If you want to pass an option that takes an argument, you must use
9322 \&\fB\-Xassembler\fR twice, once for the option and once for the argument.
9323 .SS "Options for Linking"
9324 .IX Subsection "Options for Linking"
9325 These options come into play when the compiler links object files into
9326 an executable output file.  They are meaningless if the compiler is
9327 not doing a link step.
9328 .IP "\fIobject-file-name\fR" 4
9329 .IX Item "object-file-name"
9330 A file name that does not end in a special recognized suffix is
9331 considered to name an object file or library.  (Object files are
9332 distinguished from libraries by the linker according to the file
9333 contents.)  If linking is done, these object files are used as input
9334 to the linker.
9335 .IP "\fB\-c\fR" 4
9336 .IX Item "-c"
9337 .PD 0
9338 .IP "\fB\-S\fR" 4
9339 .IX Item "-S"
9340 .IP "\fB\-E\fR" 4
9341 .IX Item "-E"
9342 .PD
9343 If any of these options is used, then the linker is not run, and
9344 object file names should not be used as arguments.
9345 .IP "\fB\-l\fR\fIlibrary\fR" 4
9346 .IX Item "-llibrary"
9347 .PD 0
9348 .IP "\fB\-l\fR \fIlibrary\fR" 4
9349 .IX Item "-l library"
9350 .PD
9351 Search the library named \fIlibrary\fR when linking.  (The second
9352 alternative with the library as a separate argument is only for
9353 \&\s-1POSIX\s0 compliance and is not recommended.)
9354 .Sp
9355 It makes a difference where in the command you write this option; the
9356 linker searches and processes libraries and object files in the order they
9357 are specified.  Thus, \fBfoo.o \-lz bar.o\fR searches library \fBz\fR
9358 after file \fIfoo.o\fR but before \fIbar.o\fR.  If \fIbar.o\fR refers
9359 to functions in \fBz\fR, those functions may not be loaded.
9360 .Sp
9361 The linker searches a standard list of directories for the library,
9362 which is actually a file named \fIlib\fIlibrary\fI.a\fR.  The linker
9363 then uses this file as if it had been specified precisely by name.
9364 .Sp
9365 The directories searched include several standard system directories
9366 plus any that you specify with \fB\-L\fR.
9367 .Sp
9368 Normally the files found this way are library files\-\-\-archive files
9369 whose members are object files.  The linker handles an archive file by
9370 scanning through it for members which define symbols that have so far
9371 been referenced but not defined.  But if the file that is found is an
9372 ordinary object file, it is linked in the usual fashion.  The only
9373 difference between using an \fB\-l\fR option and specifying a file name
9374 is that \fB\-l\fR surrounds \fIlibrary\fR with \fBlib\fR and \fB.a\fR
9375 and searches several directories.
9376 .IP "\fB\-lobjc\fR" 4
9377 .IX Item "-lobjc"
9378 You need this special case of the \fB\-l\fR option in order to
9379 link an Objective-C or Objective\-\*(C+ program.
9380 .IP "\fB\-nostartfiles\fR" 4
9381 .IX Item "-nostartfiles"
9382 Do not use the standard system startup files when linking.
9383 The standard system libraries are used normally, unless \fB\-nostdlib\fR
9384 or \fB\-nodefaultlibs\fR is used.
9385 .IP "\fB\-nodefaultlibs\fR" 4
9386 .IX Item "-nodefaultlibs"
9387 Do not use the standard system libraries when linking.
9388 Only the libraries you specify will be passed to the linker, options
9389 specifying linkage of the system libraries, such as \f(CW\*(C`\-static\-libgcc\*(C'\fR
9390 or \f(CW\*(C`\-shared\-libgcc\*(C'\fR, will be ignored.
9391 The standard startup files are used normally, unless \fB\-nostartfiles\fR
9392 is used.  The compiler may generate calls to \f(CW\*(C`memcmp\*(C'\fR,
9393 \&\f(CW\*(C`memset\*(C'\fR, \f(CW\*(C`memcpy\*(C'\fR and \f(CW\*(C`memmove\*(C'\fR.
9394 These entries are usually resolved by entries in
9395 libc.  These entry points should be supplied through some other
9396 mechanism when this option is specified.
9397 .IP "\fB\-nostdlib\fR" 4
9398 .IX Item "-nostdlib"
9399 Do not use the standard system startup files or libraries when linking.
9400 No startup files and only the libraries you specify will be passed to
9401 the linker, options specifying linkage of the system libraries, such as
9402 \&\f(CW\*(C`\-static\-libgcc\*(C'\fR or \f(CW\*(C`\-shared\-libgcc\*(C'\fR, will be ignored.
9403 The compiler may generate calls to \f(CW\*(C`memcmp\*(C'\fR, \f(CW\*(C`memset\*(C'\fR,
9404 \&\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 .Sp
9409 One of the standard libraries bypassed by \fB\-nostdlib\fR and
9410 \&\fB\-nodefaultlibs\fR is \fIlibgcc.a\fR, a library of internal subroutines
9411 which \s-1GCC\s0 uses to overcome shortcomings of particular machines, or special
9412 needs for some languages.
9413 .Sp
9414 In most cases, you need \fIlibgcc.a\fR even when you want to avoid
9415 other standard libraries.  In other words, when you specify \fB\-nostdlib\fR
9416 or \fB\-nodefaultlibs\fR you should usually specify \fB\-lgcc\fR as well.
9417 This ensures that you have no unresolved references to internal \s-1GCC\s0
9418 library subroutines.  (For example, \fB_\|_main\fR, used to ensure \*(C+
9419 constructors will be called.)
9420 .IP "\fB\-pie\fR" 4
9421 .IX Item "-pie"
9422 Produce a position independent executable on targets that support it.
9423 For predictable results, you must also specify the same set of options
9424 that were used to generate code (\fB\-fpie\fR, \fB\-fPIE\fR,
9425 or model suboptions) when you specify this option.
9426 .IP "\fB\-rdynamic\fR" 4
9427 .IX Item "-rdynamic"
9428 Pass the flag \fB\-export\-dynamic\fR to the \s-1ELF\s0 linker, on targets
9429 that support it. This instructs the linker to add all symbols, not
9430 only used ones, to the dynamic symbol table. This option is needed
9431 for some uses of \f(CW\*(C`dlopen\*(C'\fR or to allow obtaining backtraces
9432 from within a program.
9433 .IP "\fB\-s\fR" 4
9434 .IX Item "-s"
9435 Remove all symbol table and relocation information from the executable.
9436 .IP "\fB\-static\fR" 4
9437 .IX Item "-static"
9438 On systems that support dynamic linking, this prevents linking with the shared
9439 libraries.  On other systems, this option has no effect.
9440 .IP "\fB\-shared\fR" 4
9441 .IX Item "-shared"
9442 Produce a shared object which can then be linked with other objects to
9443 form an executable.  Not all systems support this option.  For predictable
9444 results, you must also specify the same set of options that were used to
9445 generate code (\fB\-fpic\fR, \fB\-fPIC\fR, or model suboptions)
9446 when you specify this option.[1]
9447 .IP "\fB\-shared\-libgcc\fR" 4
9448 .IX Item "-shared-libgcc"
9449 .PD 0
9450 .IP "\fB\-static\-libgcc\fR" 4
9451 .IX Item "-static-libgcc"
9452 .PD
9453 On systems that provide \fIlibgcc\fR as a shared library, these options
9454 force the use of either the shared or static version respectively.
9455 If no shared version of \fIlibgcc\fR was built when the compiler was
9456 configured, these options have no effect.
9457 .Sp
9458 There are several situations in which an application should use the
9459 shared \fIlibgcc\fR instead of the static version.  The most common
9460 of these is when the application wishes to throw and catch exceptions
9461 across different shared libraries.  In that case, each of the libraries
9462 as well as the application itself should use the shared \fIlibgcc\fR.
9463 .Sp
9464 Therefore, the G++ and \s-1GCJ\s0 drivers automatically add
9465 \&\fB\-shared\-libgcc\fR whenever you build a shared library or a main
9466 executable, because \*(C+ and Java programs typically use exceptions, so
9467 this is the right thing to do.
9468 .Sp
9469 If, instead, you use the \s-1GCC\s0 driver to create shared libraries, you may
9470 find that they will not always be linked with the shared \fIlibgcc\fR.
9471 If \s-1GCC\s0 finds, at its configuration time, that you have a non-GNU linker
9472 or a \s-1GNU\s0 linker that does not support option \fB\-\-eh\-frame\-hdr\fR,
9473 it will link the shared version of \fIlibgcc\fR into shared libraries
9474 by default.  Otherwise, it will take advantage of the linker and optimize
9475 away the linking with the shared version of \fIlibgcc\fR, linking with
9476 the static version of libgcc by default.  This allows exceptions to
9477 propagate through such shared libraries, without incurring relocation
9478 costs at library load time.
9479 .Sp
9480 However, if a library or main executable is supposed to throw or catch
9481 exceptions, you must link it using the G++ or \s-1GCJ\s0 driver, as appropriate
9482 for the languages used in the program, or using the option
9483 \&\fB\-shared\-libgcc\fR, such that it is linked with the shared
9484 \&\fIlibgcc\fR.
9485 .IP "\fB\-static\-libstdc++\fR" 4
9486 .IX Item "-static-libstdc++"
9487 When the \fBg++\fR program is used to link a \*(C+ program, it will
9488 normally automatically link against \fBlibstdc++\fR.  If
9489 \&\fIlibstdc++\fR is available as a shared library, and the
9490 \&\fB\-static\fR option is not used, then this will link against the
9491 shared version of \fIlibstdc++\fR.  That is normally fine.  However, it
9492 is sometimes useful to freeze the version of \fIlibstdc++\fR used by
9493 the program without going all the way to a fully static link.  The
9494 \&\fB\-static\-libstdc++\fR option directs the \fBg++\fR driver to
9495 link \fIlibstdc++\fR statically, without necessarily linking other
9496 libraries statically.
9497 .IP "\fB\-symbolic\fR" 4
9498 .IX Item "-symbolic"
9499 Bind references to global symbols when building a shared object.  Warn
9500 about any unresolved references (unless overridden by the link editor
9501 option \fB\-Xlinker \-z \-Xlinker defs\fR).  Only a few systems support
9502 this option.
9503 .IP "\fB\-T\fR \fIscript\fR" 4
9504 .IX Item "-T script"
9505 Use \fIscript\fR as the linker script.  This option is supported by most
9506 systems using the \s-1GNU\s0 linker.  On some targets, such as bare-board
9507 targets without an operating system, the \fB\-T\fR option may be required
9508 when linking to avoid references to undefined symbols.
9509 .IP "\fB\-Xlinker\fR \fIoption\fR" 4
9510 .IX Item "-Xlinker option"
9511 Pass \fIoption\fR as an option to the linker.  You can use this to
9512 supply system-specific linker options that \s-1GCC\s0 does not recognize.
9513 .Sp
9514 If you want to pass an option that takes a separate argument, you must use
9515 \&\fB\-Xlinker\fR twice, once for the option and once for the argument.
9516 For example, to pass \fB\-assert definitions\fR, you must write
9517 \&\fB\-Xlinker \-assert \-Xlinker definitions\fR.  It does not work to write
9518 \&\fB\-Xlinker \*(L"\-assert definitions\*(R"\fR, because this passes the entire
9519 string as a single argument, which is not what the linker expects.
9520 .Sp
9521 When using the \s-1GNU\s0 linker, it is usually more convenient to pass
9522 arguments to linker options using the \fIoption\fR\fB=\fR\fIvalue\fR
9523 syntax than as separate arguments.  For example, you can specify
9524 \&\fB\-Xlinker \-Map=output.map\fR rather than
9525 \&\fB\-Xlinker \-Map \-Xlinker output.map\fR.  Other linkers may not support
9526 this syntax for command-line options.
9527 .IP "\fB\-Wl,\fR\fIoption\fR" 4
9528 .IX Item "-Wl,option"
9529 Pass \fIoption\fR as an option to the linker.  If \fIoption\fR contains
9530 commas, it is split into multiple options at the commas.  You can use this
9531 syntax to pass an argument to the option.
9532 For example, \fB\-Wl,\-Map,output.map\fR passes \fB\-Map output.map\fR to the
9533 linker.  When using the \s-1GNU\s0 linker, you can also get the same effect with
9534 \&\fB\-Wl,\-Map=output.map\fR.
9535 .IP "\fB\-u\fR \fIsymbol\fR" 4
9536 .IX Item "-u symbol"
9537 Pretend the symbol \fIsymbol\fR is undefined, to force linking of
9538 library modules to define it.  You can use \fB\-u\fR multiple times with
9539 different symbols to force loading of additional library modules.
9540 .SS "Options for Directory Search"
9541 .IX Subsection "Options for Directory Search"
9542 These options specify directories to search for header files, for
9543 libraries and for parts of the compiler:
9544 .IP "\fB\-I\fR\fIdir\fR" 4
9545 .IX Item "-Idir"
9546 Add the directory \fIdir\fR to the head of the list of directories to be
9547 searched for header files.  This can be used to override a system header
9548 file, substituting your own version, since these directories are
9549 searched before the system header file directories.  However, you should
9550 not use this option to add directories that contain vendor-supplied
9551 system header files (use \fB\-isystem\fR for that).  If you use more than
9552 one \fB\-I\fR option, the directories are scanned in left-to-right
9553 order; the standard system directories come after.
9554 .Sp
9555 If a standard system include directory, or a directory specified with
9556 \&\fB\-isystem\fR, is also specified with \fB\-I\fR, the \fB\-I\fR
9557 option will be ignored.  The directory will still be searched but as a
9558 system directory at its normal position in the system include chain.
9559 This is to ensure that \s-1GCC\s0's procedure to fix buggy system headers and
9560 the ordering for the include_next directive are not inadvertently changed.
9561 If you really need to change the search order for system directories,
9562 use the \fB\-nostdinc\fR and/or \fB\-isystem\fR options.
9563 .IP "\fB\-iplugindir=\fR\fIdir\fR" 4
9564 .IX Item "-iplugindir=dir"
9565 Set the directory to search for plugins that are passed
9566 by \fB\-fplugin=\fR\fIname\fR instead of
9567 \&\fB\-fplugin=\fR\fIpath\fR\fB/\fR\fIname\fR\fB.so\fR.  This option is not meant
9568 to be used by the user, but only passed by the driver.
9569 .IP "\fB\-iquote\fR\fIdir\fR" 4
9570 .IX Item "-iquotedir"
9571 Add the directory \fIdir\fR to the head of the list of directories to
9572 be searched for header files only for the case of \fB#include
9573 "\fR\fIfile\fR\fB"\fR; they are not searched for \fB#include <\fR\fIfile\fR\fB>\fR,
9574 otherwise just like \fB\-I\fR.
9575 .IP "\fB\-L\fR\fIdir\fR" 4
9576 .IX Item "-Ldir"
9577 Add directory \fIdir\fR to the list of directories to be searched
9578 for \fB\-l\fR.
9579 .IP "\fB\-B\fR\fIprefix\fR" 4
9580 .IX Item "-Bprefix"
9581 This option specifies where to find the executables, libraries,
9582 include files, and data files of the compiler itself.
9583 .Sp
9584 The compiler driver program runs one or more of the subprograms
9585 \&\fIcpp\fR, \fIcc1\fR, \fIas\fR and \fIld\fR.  It tries
9586 \&\fIprefix\fR as a prefix for each program it tries to run, both with and
9587 without \fImachine\fR\fB/\fR\fIversion\fR\fB/\fR.
9588 .Sp
9589 For each subprogram to be run, the compiler driver first tries the
9590 \&\fB\-B\fR prefix, if any.  If that name is not found, or if \fB\-B\fR
9591 was not specified, the driver tries two standard prefixes, 
9592 \&\fI/usr/lib/gcc/\fR and \fI/usr/local/lib/gcc/\fR.  If neither of
9593 those results in a file name that is found, the unmodified program
9594 name is searched for using the directories specified in your
9595 \&\fB\s-1PATH\s0\fR environment variable.
9596 .Sp
9597 The compiler will check to see if the path provided by the \fB\-B\fR
9598 refers to a directory, and if necessary it will add a directory
9599 separator character at the end of the path.
9600 .Sp
9601 \&\fB\-B\fR prefixes that effectively specify directory names also apply
9602 to libraries in the linker, because the compiler translates these
9603 options into \fB\-L\fR options for the linker.  They also apply to
9604 includes files in the preprocessor, because the compiler translates these
9605 options into \fB\-isystem\fR options for the preprocessor.  In this case,
9606 the compiler appends \fBinclude\fR to the prefix.
9607 .Sp
9608 The runtime support file \fIlibgcc.a\fR can also be searched for using
9609 the \fB\-B\fR prefix, if needed.  If it is not found there, the two
9610 standard prefixes above are tried, and that is all.  The file is left
9611 out of the link if it is not found by those means.
9612 .Sp
9613 Another way to specify a prefix much like the \fB\-B\fR prefix is to use
9614 the environment variable \fB\s-1GCC_EXEC_PREFIX\s0\fR.
9615 .Sp
9616 As a special kludge, if the path provided by \fB\-B\fR is
9617 \&\fI[dir/]stage\fIN\fI/\fR, where \fIN\fR is a number in the range 0 to
9618 9, then it will be replaced by \fI[dir/]include\fR.  This is to help
9619 with boot-strapping the compiler.
9620 .IP "\fB\-specs=\fR\fIfile\fR" 4
9621 .IX Item "-specs=file"
9622 Process \fIfile\fR after the compiler reads in the standard \fIspecs\fR
9623 file, in order to override the defaults which the \fIgcc\fR driver
9624 program uses when determining what switches to pass to \fIcc1\fR,
9625 \&\fIcc1plus\fR, \fIas\fR, \fIld\fR, etc.  More than one
9626 \&\fB\-specs=\fR\fIfile\fR can be specified on the command line, and they
9627 are processed in order, from left to right.
9628 .IP "\fB\-\-sysroot=\fR\fIdir\fR" 4
9629 .IX Item "--sysroot=dir"
9630 Use \fIdir\fR as the logical root directory for headers and libraries.
9631 For example, if the compiler would normally search for headers in
9632 \&\fI/usr/include\fR and libraries in \fI/usr/lib\fR, it will instead
9633 search \fI\fIdir\fI/usr/include\fR and \fI\fIdir\fI/usr/lib\fR.
9634 .Sp
9635 If you use both this option and the \fB\-isysroot\fR option, then
9636 the \fB\-\-sysroot\fR option will apply to libraries, but the
9637 \&\fB\-isysroot\fR option will apply to header files.
9638 .Sp
9639 The \s-1GNU\s0 linker (beginning with version 2.16) has the necessary support
9640 for this option.  If your linker does not support this option, the
9641 header file aspect of \fB\-\-sysroot\fR will still work, but the
9642 library aspect will not.
9643 .IP "\fB\-I\-\fR" 4
9644 .IX Item "-I-"
9645 This option has been deprecated.  Please use \fB\-iquote\fR instead for
9646 \&\fB\-I\fR directories before the \fB\-I\-\fR and remove the \fB\-I\-\fR.
9647 Any directories you specify with \fB\-I\fR options before the \fB\-I\-\fR
9648 option are searched only for the case of \fB#include "\fR\fIfile\fR\fB"\fR;
9649 they are not searched for \fB#include <\fR\fIfile\fR\fB>\fR.
9650 .Sp
9651 If additional directories are specified with \fB\-I\fR options after
9652 the \fB\-I\-\fR, these directories are searched for all \fB#include\fR
9653 directives.  (Ordinarily \fIall\fR \fB\-I\fR directories are used
9654 this way.)
9655 .Sp
9656 In addition, the \fB\-I\-\fR option inhibits the use of the current
9657 directory (where the current input file came from) as the first search
9658 directory for \fB#include "\fR\fIfile\fR\fB"\fR.  There is no way to
9659 override this effect of \fB\-I\-\fR.  With \fB\-I.\fR you can specify
9660 searching the directory that was current when the compiler was
9661 invoked.  That is not exactly the same as what the preprocessor does
9662 by default, but it is often satisfactory.
9663 .Sp
9664 \&\fB\-I\-\fR does not inhibit the use of the standard system directories
9665 for header files.  Thus, \fB\-I\-\fR and \fB\-nostdinc\fR are
9666 independent.
9667 .SS "Specifying Target Machine and Compiler Version"
9668 .IX Subsection "Specifying Target Machine and Compiler Version"
9669 The usual way to run \s-1GCC\s0 is to run the executable called \fBgcc\fR, or
9670 \&\fImachine\fR\fB\-gcc\fR when cross-compiling, or
9671 \&\fImachine\fR\fB\-gcc\-\fR\fIversion\fR to run a version other than the
9672 one that was installed last.
9673 .SS "Hardware Models and Configurations"
9674 .IX Subsection "Hardware Models and Configurations"
9675 Each target machine types can have its own
9676 special options, starting with \fB\-m\fR, to choose among various
9677 hardware models or configurations\-\-\-for example, 68010 vs 68020,
9678 floating coprocessor or none.  A single installed version of the
9679 compiler can compile for any model or configuration, according to the
9680 options specified.
9681 .PP
9682 Some configurations of the compiler also support additional special
9683 options, usually for compatibility with other compilers on the same
9684 platform.
9685 .PP
9686 \fIAdapteva Epiphany Options\fR
9687 .IX Subsection "Adapteva Epiphany Options"
9688 .PP
9689 These \fB\-m\fR options are defined for Adapteva Epiphany:
9690 .IP "\fB\-mhalf\-reg\-file\fR" 4
9691 .IX Item "-mhalf-reg-file"
9692 Don't allocate any register in the range \f(CW\*(C`r32\*(C'\fR...\f(CW\*(C`r63\*(C'\fR.
9693 That allows code to run on hardware variants that lack these registers.
9694 .IP "\fB\-mprefer\-short\-insn\-regs\fR" 4
9695 .IX Item "-mprefer-short-insn-regs"
9696 Preferrentially allocate registers that allow short instruction generation.
9697 This can result in increasesd instruction count, so if this reduces or
9698 increases code size might vary from case to case.
9699 .IP "\fB\-mbranch\-cost=\fR\fInum\fR" 4
9700 .IX Item "-mbranch-cost=num"
9701 Set the cost of branches to roughly \fInum\fR \*(L"simple\*(R" instructions.
9702 This cost is only a heuristic and is not guaranteed to produce
9703 consistent results across releases.
9704 .IP "\fB\-mcmove\fR" 4
9705 .IX Item "-mcmove"
9706 Enable the generation of conditional moves.
9707 .IP "\fB\-mnops=\fR\fInum\fR" 4
9708 .IX Item "-mnops=num"
9709 Emit \fInum\fR nops before every other generated instruction.
9710 .IP "\fB\-mno\-soft\-cmpsf\fR" 4
9711 .IX Item "-mno-soft-cmpsf"
9712 For single-precision floating-point comparisons, emit an fsub instruction
9713 and test the flags.  This is faster than a software comparison, but can
9714 get incorrect results in the presence of NaNs, or when two different small
9715 numbers are compared such that their difference is calculated as zero.
9716 The default is \fB\-msoft\-cmpsf\fR, which uses slower, but IEEE-compliant,
9717 software comparisons.
9718 .IP "\fB\-mstack\-offset=\fR\fInum\fR" 4
9719 .IX Item "-mstack-offset=num"
9720 Set the offset between the top of the stack and the stack pointer.
9721 E.g., a value of 8 means that the eight bytes in the range sp+0...sp+7
9722 can be used by leaf functions without stack allocation.
9723 Values other than \fB8\fR or \fB16\fR are untested and unlikely to work.
9724 Note also that this option changes the \s-1ABI\s0, compiling a program with a
9725 different stack offset than the libraries have been compiled with
9726 will generally not work.
9727 This option can be useful if you want to evaluate if a different stack
9728 offset would give you better code, but to actually use a different stack
9729 offset to build working programs, it is recommended to configure the
9730 toolchain with the appropriate \fB\-\-with\-stack\-offset=\fR\fInum\fR option.
9731 .IP "\fB\-mno\-round\-nearest\fR" 4
9732 .IX Item "-mno-round-nearest"
9733 Make the scheduler assume that the rounding mode has been set to
9734 truncating.  The default is \fB\-mround\-nearest\fR.
9735 .IP "\fB\-mlong\-calls\fR" 4
9736 .IX Item "-mlong-calls"
9737 If not otherwise specified by an attribute, assume all calls might be beyond
9738 the offset range of the b / bl instructions, and therefore load the
9739 function address into a register before performing a (otherwise direct) call.
9740 This is the default.
9741 .IP "\fB\-mshort\-calls\fR" 4
9742 .IX Item "-mshort-calls"
9743 If not otherwise specified by an attribute, assume all direct calls are
9744 in the range of the b / bl instructions, so use these instructions
9745 for direct calls.  The default is \fB\-mlong\-calls\fR.
9746 .IP "\fB\-msmall16\fR" 4
9747 .IX Item "-msmall16"
9748 Assume addresses can be loaded as 16\-bit unsigned values.  This does not
9749 apply to function addresses for which \fB\-mlong\-calls\fR semantics
9750 are in effect.
9751 .IP "\fB\-mfp\-mode=\fR\fImode\fR" 4
9752 .IX Item "-mfp-mode=mode"
9753 Set the prevailing mode of the floating-point unit.
9754 This determines the floating-point mode that is provided and expected
9755 at function call and return time.  Making this mode match the mode you
9756 predominantly need at function start can make your programs smaller and
9757 faster by avoiding unnecessary mode switches.
9758 .Sp
9759 \&\fImode\fR can be set to one the following values:
9760 .RS 4
9761 .IP "\fBcaller\fR" 4
9762 .IX Item "caller"
9763 Any mode at function entry is valid, and retained or restored when
9764 the function returns, and when it calls other functions.
9765 This mode is useful for compiling libraries or other compilation units
9766 you might want to incorporate into different programs with different
9767 prevailing \s-1FPU\s0 modes, and the convenience of being able to use a single
9768 object file outweighs the size and speed overhead for any extra
9769 mode switching that might be needed, compared with what would be needed
9770 with a more specific choice of prevailing \s-1FPU\s0 mode.
9771 .IP "\fBtruncate\fR" 4
9772 .IX Item "truncate"
9773 This is the mode used for floating-point calculations with
9774 truncating (i.e. round towards zero) rounding mode.  That includes
9775 conversion from floating point to integer.
9776 .IP "\fBround-nearest\fR" 4
9777 .IX Item "round-nearest"
9778 This is the mode used for floating-point calculations with
9779 round-to-nearest-or-even rounding mode.
9780 .IP "\fBint\fR" 4
9781 .IX Item "int"
9782 This is the mode used to perform integer calculations in the \s-1FPU\s0, e.g.
9783 integer multiply, or integer multiply-and-accumulate.
9784 .RE
9785 .RS 4
9786 .Sp
9787 The default is \fB\-mfp\-mode=caller\fR
9788 .RE
9789 .IP "\fB\-mnosplit\-lohi\fR" 4
9790 .IX Item "-mnosplit-lohi"
9791 .PD 0
9792 .IP "\fB\-mno\-postinc\fR" 4
9793 .IX Item "-mno-postinc"
9794 .IP "\fB\-mno\-postmodify\fR" 4
9795 .IX Item "-mno-postmodify"
9796 .PD
9797 Code generation tweaks that disable, respectively, splitting of 32\-bit
9798 loads, generation of post-increment addresses, and generation of
9799 post-modify addresses.  The defaults are \fBmsplit-lohi\fR,
9800 \&\fB\-mpost\-inc\fR, and \fB\-mpost\-modify\fR.
9801 .IP "\fB\-mnovect\-double\fR" 4
9802 .IX Item "-mnovect-double"
9803 Change the preferred \s-1SIMD\s0 mode to SImode.  The default is
9804 \&\fB\-mvect\-double\fR, which uses DImode as preferred \s-1SIMD\s0 mode.
9805 .IP "\fB\-max\-vect\-align=\fR\fInum\fR" 4
9806 .IX Item "-max-vect-align=num"
9807 The maximum alignment for \s-1SIMD\s0 vector mode types.
9808 \&\fInum\fR may be 4 or 8.  The default is 8.
9809 Note that this is an \s-1ABI\s0 change, even though many library function
9810 interfaces will be unaffected, if they don't use \s-1SIMD\s0 vector modes
9811 in places where they affect size and/or alignment of relevant types.
9812 .IP "\fB\-msplit\-vecmove\-early\fR" 4
9813 .IX Item "-msplit-vecmove-early"
9814 Split vector moves into single word moves before reload.  In theory this
9815 could give better register allocation, but so far the reverse seems to be
9816 generally the case.
9817 .IP "\fB\-m1reg\-\fR\fIreg\fR" 4
9818 .IX Item "-m1reg-reg"
9819 Specify a register to hold the constant \-1, which makes loading small negative
9820 constants and certain bitmasks faster.
9821 Allowable values for reg are r43 and r63, which specify to use that register
9822 as a fixed register, and none, which means that no register is used for this
9823 purpose.  The default is \fB\-m1reg\-none\fR.
9824 .PP
9825 \fI\s-1ARM\s0 Options\fR
9826 .IX Subsection "ARM Options"
9827 .PP
9828 These \fB\-m\fR options are defined for Advanced \s-1RISC\s0 Machines (\s-1ARM\s0)
9829 architectures:
9830 .IP "\fB\-mabi=\fR\fIname\fR" 4
9831 .IX Item "-mabi=name"
9832 Generate code for the specified \s-1ABI\s0.  Permissible values are: \fBapcs-gnu\fR,
9833 \&\fBatpcs\fR, \fBaapcs\fR, \fBaapcs-linux\fR and \fBiwmmxt\fR.
9834 .IP "\fB\-mapcs\-frame\fR" 4
9835 .IX Item "-mapcs-frame"
9836 Generate a stack frame that is compliant with the \s-1ARM\s0 Procedure Call
9837 Standard for all functions, even if this is not strictly necessary for
9838 correct execution of the code.  Specifying \fB\-fomit\-frame\-pointer\fR
9839 with this option will cause the stack frames not to be generated for
9840 leaf functions.  The default is \fB\-mno\-apcs\-frame\fR.
9841 .IP "\fB\-mapcs\fR" 4
9842 .IX Item "-mapcs"
9843 This is a synonym for \fB\-mapcs\-frame\fR.
9844 .IP "\fB\-mthumb\-interwork\fR" 4
9845 .IX Item "-mthumb-interwork"
9846 Generate code that supports calling between the \s-1ARM\s0 and Thumb
9847 instruction sets.  Without this option, on pre\-v5 architectures, the
9848 two instruction sets cannot be reliably used inside one program.  The
9849 default is \fB\-mno\-thumb\-interwork\fR, since slightly larger code
9850 is generated when \fB\-mthumb\-interwork\fR is specified.  In \s-1AAPCS\s0
9851 configurations this option is meaningless.
9852 .IP "\fB\-mno\-sched\-prolog\fR" 4
9853 .IX Item "-mno-sched-prolog"
9854 Prevent the reordering of instructions in the function prologue, or the
9855 merging of those instruction with the instructions in the function's
9856 body.  This means that all functions will start with a recognizable set
9857 of instructions (or in fact one of a choice from a small set of
9858 different function prologues), and this information can be used to
9859 locate the start if functions inside an executable piece of code.  The
9860 default is \fB\-msched\-prolog\fR.
9861 .IP "\fB\-mfloat\-abi=\fR\fIname\fR" 4
9862 .IX Item "-mfloat-abi=name"
9863 Specifies which floating-point \s-1ABI\s0 to use.  Permissible values
9864 are: \fBsoft\fR, \fBsoftfp\fR and \fBhard\fR.
9865 .Sp
9866 Specifying \fBsoft\fR causes \s-1GCC\s0 to generate output containing
9867 library calls for floating-point operations.
9868 \&\fBsoftfp\fR allows the generation of code using hardware floating-point
9869 instructions, but still uses the soft-float calling conventions.
9870 \&\fBhard\fR allows generation of floating-point instructions
9871 and uses FPU-specific calling conventions.
9872 .Sp
9873 The default depends on the specific target configuration.  Note that
9874 the hard-float and soft-float ABIs are not link-compatible; you must
9875 compile your entire program with the same \s-1ABI\s0, and link with a
9876 compatible set of libraries.
9877 .IP "\fB\-mlittle\-endian\fR" 4
9878 .IX Item "-mlittle-endian"
9879 Generate code for a processor running in little-endian mode.  This is
9880 the default for all standard configurations.
9881 .IP "\fB\-mbig\-endian\fR" 4
9882 .IX Item "-mbig-endian"
9883 Generate code for a processor running in big-endian mode; the default is
9884 to compile code for a little-endian processor.
9885 .IP "\fB\-mwords\-little\-endian\fR" 4
9886 .IX Item "-mwords-little-endian"
9887 This option only applies when generating code for big-endian processors.
9888 Generate code for a little-endian word order but a big-endian byte
9889 order.  That is, a byte order of the form \fB32107654\fR.  Note: this
9890 option should only be used if you require compatibility with code for
9891 big-endian \s-1ARM\s0 processors generated by versions of the compiler prior to
9892 2.8.  This option is now deprecated.
9893 .IP "\fB\-mcpu=\fR\fIname\fR" 4
9894 .IX Item "-mcpu=name"
9895 This specifies the name of the target \s-1ARM\s0 processor.  \s-1GCC\s0 uses this name
9896 to determine what kind of instructions it can emit when generating
9897 assembly code.  Permissible names are: \fBarm2\fR, \fBarm250\fR,
9898 \&\fBarm3\fR, \fBarm6\fR, \fBarm60\fR, \fBarm600\fR, \fBarm610\fR,
9899 \&\fBarm620\fR, \fBarm7\fR, \fBarm7m\fR, \fBarm7d\fR, \fBarm7dm\fR,
9900 \&\fBarm7di\fR, \fBarm7dmi\fR, \fBarm70\fR, \fBarm700\fR,
9901 \&\fBarm700i\fR, \fBarm710\fR, \fBarm710c\fR, \fBarm7100\fR,
9902 \&\fBarm720\fR,
9903 \&\fBarm7500\fR, \fBarm7500fe\fR, \fBarm7tdmi\fR, \fBarm7tdmi\-s\fR,
9904 \&\fBarm710t\fR, \fBarm720t\fR, \fBarm740t\fR,
9905 \&\fBstrongarm\fR, \fBstrongarm110\fR, \fBstrongarm1100\fR,
9906 \&\fBstrongarm1110\fR,
9907 \&\fBarm8\fR, \fBarm810\fR, \fBarm9\fR, \fBarm9e\fR, \fBarm920\fR,
9908 \&\fBarm920t\fR, \fBarm922t\fR, \fBarm946e\-s\fR, \fBarm966e\-s\fR,
9909 \&\fBarm968e\-s\fR, \fBarm926ej\-s\fR, \fBarm940t\fR, \fBarm9tdmi\fR,
9910 \&\fBarm10tdmi\fR, \fBarm1020t\fR, \fBarm1026ej\-s\fR,
9911 \&\fBarm10e\fR, \fBarm1020e\fR, \fBarm1022e\fR,
9912 \&\fBarm1136j\-s\fR, \fBarm1136jf\-s\fR, \fBmpcore\fR, \fBmpcorenovfp\fR,
9913 \&\fBarm1156t2\-s\fR, \fBarm1156t2f\-s\fR, \fBarm1176jz\-s\fR, \fBarm1176jzf\-s\fR,
9914 \&\fBcortex\-a5\fR, \fBcortex\-a7\fR, \fBcortex\-a8\fR, \fBcortex\-a9\fR, 
9915 \&\fBcortex\-a15\fR, \fBcortex\-r4\fR, \fBcortex\-r4f\fR, \fBcortex\-r5\fR,
9916 \&\fBcortex\-m4\fR, \fBcortex\-m3\fR,
9917 \&\fBcortex\-m1\fR,
9918 \&\fBcortex\-m0\fR,
9919 \&\fBxscale\fR, \fBiwmmxt\fR, \fBiwmmxt2\fR, \fBep9312\fR,
9920 \&\fBfa526\fR, \fBfa626\fR,
9921 \&\fBfa606te\fR, \fBfa626te\fR, \fBfmp626\fR, \fBfa726te\fR.
9922 .Sp
9923 \&\fB\-mcpu=generic\-\fR\fIarch\fR is also permissible, and is
9924 equivalent to \fB\-march=\fR\fIarch\fR \fB\-mtune=generic\-\fR\fIarch\fR.
9925 See \fB\-mtune\fR for more information.
9926 .Sp
9927 \&\fB\-mcpu=native\fR causes the compiler to auto-detect the \s-1CPU\s0
9928 of the build computer.  At present, this feature is only supported on
9929 Linux, and not all architectures are recognized.  If the auto-detect is
9930 unsuccessful the option has no effect.
9931 .IP "\fB\-mtune=\fR\fIname\fR" 4
9932 .IX Item "-mtune=name"
9933 This option is very similar to the \fB\-mcpu=\fR option, except that
9934 instead of specifying the actual target processor type, and hence
9935 restricting which instructions can be used, it specifies that \s-1GCC\s0 should
9936 tune the performance of the code as if the target were of the type
9937 specified in this option, but still choosing the instructions that it
9938 will generate based on the \s-1CPU\s0 specified by a \fB\-mcpu=\fR option.
9939 For some \s-1ARM\s0 implementations better performance can be obtained by using
9940 this option.
9941 .Sp
9942 \&\fB\-mtune=generic\-\fR\fIarch\fR specifies that \s-1GCC\s0 should tune the
9943 performance for a blend of processors within architecture \fIarch\fR.
9944 The aim is to generate code that run well on the current most popular
9945 processors, balancing between optimizations that benefit some CPUs in the
9946 range, and avoiding performance pitfalls of other CPUs.  The effects of
9947 this option may change in future \s-1GCC\s0 versions as \s-1CPU\s0 models come and go.
9948 .Sp
9949 \&\fB\-mtune=native\fR causes the compiler to auto-detect the \s-1CPU\s0
9950 of the build computer.  At present, this feature is only supported on
9951 Linux, and not all architectures are recognized.  If the auto-detect is
9952 unsuccessful the option has no effect.
9953 .IP "\fB\-march=\fR\fIname\fR" 4
9954 .IX Item "-march=name"
9955 This specifies the name of the target \s-1ARM\s0 architecture.  \s-1GCC\s0 uses this
9956 name to determine what kind of instructions it can emit when generating
9957 assembly code.  This option can be used in conjunction with or instead
9958 of the \fB\-mcpu=\fR option.  Permissible names are: \fBarmv2\fR,
9959 \&\fBarmv2a\fR, \fBarmv3\fR, \fBarmv3m\fR, \fBarmv4\fR, \fBarmv4t\fR,
9960 \&\fBarmv5\fR, \fBarmv5t\fR, \fBarmv5e\fR, \fBarmv5te\fR,
9961 \&\fBarmv6\fR, \fBarmv6j\fR,
9962 \&\fBarmv6t2\fR, \fBarmv6z\fR, \fBarmv6zk\fR, \fBarmv6\-m\fR,
9963 \&\fBarmv7\fR, \fBarmv7\-a\fR, \fBarmv7\-r\fR, \fBarmv7\-m\fR,
9964 \&\fBiwmmxt\fR, \fBiwmmxt2\fR, \fBep9312\fR.
9965 .Sp
9966 \&\fB\-march=native\fR causes the compiler to auto-detect the architecture
9967 of the build computer.  At present, this feature is only supported on
9968 Linux, and not all architectures are recognized.  If the auto-detect is
9969 unsuccessful the option has no effect.
9970 .IP "\fB\-mfpu=\fR\fIname\fR" 4
9971 .IX Item "-mfpu=name"
9972 .PD 0
9973 .IP "\fB\-mfpe=\fR\fInumber\fR" 4
9974 .IX Item "-mfpe=number"
9975 .IP "\fB\-mfp=\fR\fInumber\fR" 4
9976 .IX Item "-mfp=number"
9977 .PD
9978 This specifies what floating-point hardware (or hardware emulation) is
9979 available on the target.  Permissible names are: \fBfpa\fR, \fBfpe2\fR,
9980 \&\fBfpe3\fR, \fBmaverick\fR, \fBvfp\fR, \fBvfpv3\fR, \fBvfpv3\-fp16\fR,
9981 \&\fBvfpv3\-d16\fR, \fBvfpv3\-d16\-fp16\fR, \fBvfpv3xd\fR, \fBvfpv3xd\-fp16\fR,
9982 \&\fBneon\fR, \fBneon\-fp16\fR, \fBvfpv4\fR, \fBvfpv4\-d16\fR,
9983 \&\fBfpv4\-sp\-d16\fR and \fBneon\-vfpv4\fR.
9984 \&\fB\-mfp\fR and \fB\-mfpe\fR are synonyms for
9985 \&\fB\-mfpu\fR=\fBfpe\fR\fInumber\fR, for compatibility with older versions
9986 of \s-1GCC\s0.
9987 .Sp
9988 If \fB\-msoft\-float\fR is specified this specifies the format of
9989 floating-point values.
9990 .Sp
9991 If the selected floating-point hardware includes the \s-1NEON\s0 extension
9992 (e.g. \fB\-mfpu\fR=\fBneon\fR), note that floating-point
9993 operations will not be used by \s-1GCC\s0's auto-vectorization pass unless
9994 \&\fB\-funsafe\-math\-optimizations\fR is also specified.  This is
9995 because \s-1NEON\s0 hardware does not fully implement the \s-1IEEE\s0 754 standard for
9996 floating-point arithmetic (in particular denormal values are treated as
9997 zero), so the use of \s-1NEON\s0 instructions may lead to a loss of precision.
9998 .IP "\fB\-mfp16\-format=\fR\fIname\fR" 4
9999 .IX Item "-mfp16-format=name"
10000 Specify the format of the \f(CW\*(C`_\|_fp16\*(C'\fR half-precision floating-point type.
10001 Permissible names are \fBnone\fR, \fBieee\fR, and \fBalternative\fR;
10002 the default is \fBnone\fR, in which case the \f(CW\*(C`_\|_fp16\*(C'\fR type is not
10003 defined.
10004 .IP "\fB\-mstructure\-size\-boundary=\fR\fIn\fR" 4
10005 .IX Item "-mstructure-size-boundary=n"
10006 The size of all structures and unions will be rounded up to a multiple
10007 of the number of bits set by this option.  Permissible values are 8, 32
10008 and 64.  The default value varies for different toolchains.  For the \s-1COFF\s0
10009 targeted toolchain the default value is 8.  A value of 64 is only allowed
10010 if the underlying \s-1ABI\s0 supports it.
10011 .Sp
10012 Specifying the larger number can produce faster, more efficient code, but
10013 can also increase the size of the program.  Different values are potentially
10014 incompatible.  Code compiled with one value cannot necessarily expect to
10015 work with code or libraries compiled with another value, if they exchange
10016 information using structures or unions.
10017 .IP "\fB\-mabort\-on\-noreturn\fR" 4
10018 .IX Item "-mabort-on-noreturn"
10019 Generate a call to the function \f(CW\*(C`abort\*(C'\fR at the end of a
10020 \&\f(CW\*(C`noreturn\*(C'\fR function.  It will be executed if the function tries to
10021 return.
10022 .IP "\fB\-mlong\-calls\fR" 4
10023 .IX Item "-mlong-calls"
10024 .PD 0
10025 .IP "\fB\-mno\-long\-calls\fR" 4
10026 .IX Item "-mno-long-calls"
10027 .PD
10028 Tells the compiler to perform function calls by first loading the
10029 address of the function into a register and then performing a subroutine
10030 call on this register.  This switch is needed if the target function
10031 will lie outside of the 64 megabyte addressing range of the offset based
10032 version of subroutine call instruction.
10033 .Sp
10034 Even if this switch is enabled, not all function calls will be turned
10035 into long calls.  The heuristic is that static functions, functions
10036 that have the \fBshort-call\fR attribute, functions that are inside
10037 the scope of a \fB#pragma no_long_calls\fR directive and functions whose
10038 definitions have already been compiled within the current compilation
10039 unit, will not be turned into long calls.  The exception to this rule is
10040 that weak function definitions, functions with the \fBlong-call\fR
10041 attribute or the \fBsection\fR attribute, and functions that are within
10042 the scope of a \fB#pragma long_calls\fR directive, will always be
10043 turned into long calls.
10044 .Sp
10045 This feature is not enabled by default.  Specifying
10046 \&\fB\-mno\-long\-calls\fR will restore the default behavior, as will
10047 placing the function calls within the scope of a \fB#pragma
10048 long_calls_off\fR directive.  Note these switches have no effect on how
10049 the compiler generates code to handle function calls via function
10050 pointers.
10051 .IP "\fB\-msingle\-pic\-base\fR" 4
10052 .IX Item "-msingle-pic-base"
10053 Treat the register used for \s-1PIC\s0 addressing as read-only, rather than
10054 loading it in the prologue for each function.  The runtime system is
10055 responsible for initializing this register with an appropriate value
10056 before execution begins.
10057 .IP "\fB\-mpic\-register=\fR\fIreg\fR" 4
10058 .IX Item "-mpic-register=reg"
10059 Specify the register to be used for \s-1PIC\s0 addressing.  The default is R10
10060 unless stack-checking is enabled, when R9 is used.
10061 .IP "\fB\-mcirrus\-fix\-invalid\-insns\fR" 4
10062 .IX Item "-mcirrus-fix-invalid-insns"
10063 Insert NOPs into the instruction stream to in order to work around
10064 problems with invalid Maverick instruction combinations.  This option
10065 is only valid if the \fB\-mcpu=ep9312\fR option has been used to
10066 enable generation of instructions for the Cirrus Maverick floating-point
10067 co-processor.  This option is not enabled by default, since the
10068 problem is only present in older Maverick implementations.  The default
10069 can be re-enabled by use of the \fB\-mno\-cirrus\-fix\-invalid\-insns\fR
10070 switch.
10071 .IP "\fB\-mpoke\-function\-name\fR" 4
10072 .IX Item "-mpoke-function-name"
10073 Write the name of each function into the text section, directly
10074 preceding the function prologue.  The generated code is similar to this:
10075 .Sp
10076 .Vb 9
10077 \&             t0
10078 \&                 .ascii "arm_poke_function_name", 0
10079 \&                 .align
10080 \&             t1
10081 \&                 .word 0xff000000 + (t1 \- t0)
10082 \&             arm_poke_function_name
10083 \&                 mov     ip, sp
10084 \&                 stmfd   sp!, {fp, ip, lr, pc}
10085 \&                 sub     fp, ip, #4
10086 .Ve
10087 .Sp
10088 When performing a stack backtrace, code can inspect the value of
10089 \&\f(CW\*(C`pc\*(C'\fR stored at \f(CW\*(C`fp + 0\*(C'\fR.  If the trace function then looks at
10090 location \f(CW\*(C`pc \- 12\*(C'\fR and the top 8 bits are set, then we know that
10091 there is a function name embedded immediately preceding this location
10092 and has length \f(CW\*(C`((pc[\-3]) & 0xff000000)\*(C'\fR.
10093 .IP "\fB\-mthumb\fR" 4
10094 .IX Item "-mthumb"
10095 .PD 0
10096 .IP "\fB\-marm\fR" 4
10097 .IX Item "-marm"
10098 .PD
10099 Select between generating code that executes in \s-1ARM\s0 and Thumb
10100 states.  The default for most configurations is to generate code
10101 that executes in \s-1ARM\s0 state, but the default can be changed by
10102 configuring \s-1GCC\s0 with the \fB\-\-with\-mode=\fR\fIstate\fR
10103 configure option.
10104 .IP "\fB\-mtpcs\-frame\fR" 4
10105 .IX Item "-mtpcs-frame"
10106 Generate a stack frame that is compliant with the Thumb Procedure Call
10107 Standard for all non-leaf functions.  (A leaf function is one that does
10108 not call any other functions.)  The default is \fB\-mno\-tpcs\-frame\fR.
10109 .IP "\fB\-mtpcs\-leaf\-frame\fR" 4
10110 .IX Item "-mtpcs-leaf-frame"
10111 Generate a stack frame that is compliant with the Thumb Procedure Call
10112 Standard for all leaf functions.  (A leaf function is one that does
10113 not call any other functions.)  The default is \fB\-mno\-apcs\-leaf\-frame\fR.
10114 .IP "\fB\-mcallee\-super\-interworking\fR" 4
10115 .IX Item "-mcallee-super-interworking"
10116 Gives all externally visible functions in the file being compiled an \s-1ARM\s0
10117 instruction set header which switches to Thumb mode before executing the
10118 rest of the function.  This allows these functions to be called from
10119 non-interworking code.  This option is not valid in \s-1AAPCS\s0 configurations
10120 because interworking is enabled by default.
10121 .IP "\fB\-mcaller\-super\-interworking\fR" 4
10122 .IX Item "-mcaller-super-interworking"
10123 Allows calls via function pointers (including virtual functions) to
10124 execute correctly regardless of whether the target code has been
10125 compiled for interworking or not.  There is a small overhead in the cost
10126 of executing a function pointer if this option is enabled.  This option
10127 is not valid in \s-1AAPCS\s0 configurations because interworking is enabled
10128 by default.
10129 .IP "\fB\-mtp=\fR\fIname\fR" 4
10130 .IX Item "-mtp=name"
10131 Specify the access model for the thread local storage pointer.  The valid
10132 models are \fBsoft\fR, which generates calls to \f(CW\*(C`_\|_aeabi_read_tp\*(C'\fR,
10133 \&\fBcp15\fR, which fetches the thread pointer from \f(CW\*(C`cp15\*(C'\fR directly
10134 (supported in the arm6k architecture), and \fBauto\fR, which uses the
10135 best available method for the selected processor.  The default setting is
10136 \&\fBauto\fR.
10137 .IP "\fB\-mtls\-dialect=\fR\fIdialect\fR" 4
10138 .IX Item "-mtls-dialect=dialect"
10139 Specify the dialect to use for accessing thread local storage.  Two
10140 dialects are supported \-\-\- \fBgnu\fR and \fBgnu2\fR.  The
10141 \&\fBgnu\fR dialect selects the original \s-1GNU\s0 scheme for supporting
10142 local and global dynamic \s-1TLS\s0 models.  The \fBgnu2\fR dialect
10143 selects the \s-1GNU\s0 descriptor scheme, which provides better performance
10144 for shared libraries.  The \s-1GNU\s0 descriptor scheme is compatible with
10145 the original scheme, but does require new assembler, linker and
10146 library support.  Initial and local exec \s-1TLS\s0 models are unaffected by
10147 this option and always use the original scheme.
10148 .IP "\fB\-mword\-relocations\fR" 4
10149 .IX Item "-mword-relocations"
10150 Only generate absolute relocations on word-sized values (i.e. R_ARM_ABS32).
10151 This is enabled by default on targets (uClinux, SymbianOS) where the runtime
10152 loader imposes this restriction, and when \fB\-fpic\fR or \fB\-fPIC\fR
10153 is specified.
10154 .IP "\fB\-mfix\-cortex\-m3\-ldrd\fR" 4
10155 .IX Item "-mfix-cortex-m3-ldrd"
10156 Some Cortex\-M3 cores can cause data corruption when \f(CW\*(C`ldrd\*(C'\fR instructions
10157 with overlapping destination and base registers are used.  This option avoids
10158 generating these instructions.  This option is enabled by default when
10159 \&\fB\-mcpu=cortex\-m3\fR is specified.
10160 .IP "\fB\-munaligned\-access\fR" 4
10161 .IX Item "-munaligned-access"
10162 .PD 0
10163 .IP "\fB\-mno\-unaligned\-access\fR" 4
10164 .IX Item "-mno-unaligned-access"
10165 .PD
10166 Enables (or disables) reading and writing of 16\- and 32\- bit values
10167 from addresses that are not 16\- or 32\- bit aligned.  By default
10168 unaligned access is disabled for all pre\-ARMv6 and all ARMv6\-M
10169 architectures, and enabled for all other architectures.  If unaligned
10170 access is not enabled then words in packed data structures will be
10171 accessed a byte at a time.
10172 .Sp
10173 The \s-1ARM\s0 attribute \f(CW\*(C`Tag_CPU_unaligned_access\*(C'\fR will be set in the
10174 generated object file to either true or false, depending upon the
10175 setting of this option.  If unaligned access is enabled then the
10176 preprocessor symbol \f(CW\*(C`_\|_ARM_FEATURE_UNALIGNED\*(C'\fR will also be
10177 defined.
10178 .PP
10179 \fI\s-1AVR\s0 Options\fR
10180 .IX Subsection "AVR Options"
10181 .IP "\fB\-mmcu=\fR\fImcu\fR" 4
10182 .IX Item "-mmcu=mcu"
10183 Specify Atmel \s-1AVR\s0 instruction set architectures (\s-1ISA\s0) or \s-1MCU\s0 type.
10184 .Sp
10185 For a complete list of \fImcu\fR values that are supported by \fBavr-gcc\fR,
10186 see the compiler output when called with the \fB\-\-help=target\fR
10187 command line option.
10188 The default for this option is@tie{}\f(CW\*(C`avr2\*(C'\fR.
10189 .Sp
10190 \&\s-1GCC\s0 supports the following \s-1AVR\s0 devices and ISAs:
10191 .RS 4
10192 .ie n .IP """avr2""" 4
10193 .el .IP "\f(CWavr2\fR" 4
10194 .IX Item "avr2"
10195 \&\*(L"Classic\*(R" devices with up to 8@tie{}KiB of program memory.
10196 \&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`at90c8534\*(C'\fR, \f(CW\*(C`at90s2313\*(C'\fR,
10197 \&\f(CW\*(C`at90s2323\*(C'\fR, \f(CW\*(C`at90s2333\*(C'\fR, \f(CW\*(C`at90s2343\*(C'\fR,
10198 \&\f(CW\*(C`at90s4414\*(C'\fR, \f(CW\*(C`at90s4433\*(C'\fR, \f(CW\*(C`at90s4434\*(C'\fR,
10199 \&\f(CW\*(C`at90s8515\*(C'\fR, \f(CW\*(C`at90s8535\*(C'\fR, \f(CW\*(C`attiny22\*(C'\fR, \f(CW\*(C`attiny26\*(C'\fR.
10200 .ie n .IP """avr25""" 4
10201 .el .IP "\f(CWavr25\fR" 4
10202 .IX Item "avr25"
10203 \&\*(L"Classic\*(R" devices with up to 8@tie{}KiB of program memory and with
10204 the \f(CW\*(C`MOVW\*(C'\fR instruction.
10205 \&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`at86rf401\*(C'\fR, \f(CW\*(C`ata6289\*(C'\fR, \f(CW\*(C`attiny13\*(C'\fR,
10206 \&\f(CW\*(C`attiny13a\*(C'\fR, \f(CW\*(C`attiny2313\*(C'\fR, \f(CW\*(C`attiny2313a\*(C'\fR,
10207 \&\f(CW\*(C`attiny24\*(C'\fR, \f(CW\*(C`attiny24a\*(C'\fR, \f(CW\*(C`attiny25\*(C'\fR, \f(CW\*(C`attiny261\*(C'\fR,
10208 \&\f(CW\*(C`attiny261a\*(C'\fR, \f(CW\*(C`attiny4313\*(C'\fR, \f(CW\*(C`attiny43u\*(C'\fR,
10209 \&\f(CW\*(C`attiny44\*(C'\fR, \f(CW\*(C`attiny44a\*(C'\fR, \f(CW\*(C`attiny45\*(C'\fR, \f(CW\*(C`attiny461\*(C'\fR,
10210 \&\f(CW\*(C`attiny461a\*(C'\fR, \f(CW\*(C`attiny48\*(C'\fR, \f(CW\*(C`attiny84\*(C'\fR, \f(CW\*(C`attiny84a\*(C'\fR,
10211 \&\f(CW\*(C`attiny85\*(C'\fR, \f(CW\*(C`attiny861\*(C'\fR, \f(CW\*(C`attiny861a\*(C'\fR, \f(CW\*(C`attiny87\*(C'\fR,
10212 \&\f(CW\*(C`attiny88\*(C'\fR.
10213 .ie n .IP """avr3""" 4
10214 .el .IP "\f(CWavr3\fR" 4
10215 .IX Item "avr3"
10216 \&\*(L"Classic\*(R" devices with 16@tie{}KiB up to 64@tie{}KiB of  program memory.
10217 \&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`at43usb355\*(C'\fR, \f(CW\*(C`at76c711\*(C'\fR.
10218 .ie n .IP """avr31""" 4
10219 .el .IP "\f(CWavr31\fR" 4
10220 .IX Item "avr31"
10221 \&\*(L"Classic\*(R" devices with 128@tie{}KiB of program memory.
10222 \&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`at43usb320\*(C'\fR, \f(CW\*(C`atmega103\*(C'\fR.
10223 .ie n .IP """avr35""" 4
10224 .el .IP "\f(CWavr35\fR" 4
10225 .IX Item "avr35"
10226 \&\*(L"Classic\*(R" devices with 16@tie{}KiB up to 64@tie{}KiB of program
10227 memory and with the \f(CW\*(C`MOVW\*(C'\fR instruction.
10228 \&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`at90usb162\*(C'\fR, \f(CW\*(C`at90usb82\*(C'\fR,
10229 \&\f(CW\*(C`atmega16u2\*(C'\fR, \f(CW\*(C`atmega32u2\*(C'\fR, \f(CW\*(C`atmega8u2\*(C'\fR,
10230 \&\f(CW\*(C`attiny167\*(C'\fR.
10231 .ie n .IP """avr4""" 4
10232 .el .IP "\f(CWavr4\fR" 4
10233 .IX Item "avr4"
10234 \&\*(L"Enhanced\*(R" devices with up to 8@tie{}KiB of program memory.
10235 \&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`at90pwm1\*(C'\fR, \f(CW\*(C`at90pwm2\*(C'\fR, \f(CW\*(C`at90pwm2b\*(C'\fR,
10236 \&\f(CW\*(C`at90pwm3\*(C'\fR, \f(CW\*(C`at90pwm3b\*(C'\fR, \f(CW\*(C`at90pwm81\*(C'\fR, \f(CW\*(C`atmega48\*(C'\fR,
10237 \&\f(CW\*(C`atmega48a\*(C'\fR, \f(CW\*(C`atmega48p\*(C'\fR, \f(CW\*(C`atmega8\*(C'\fR, \f(CW\*(C`atmega8515\*(C'\fR,
10238 \&\f(CW\*(C`atmega8535\*(C'\fR, \f(CW\*(C`atmega88\*(C'\fR, \f(CW\*(C`atmega88a\*(C'\fR,
10239 \&\f(CW\*(C`atmega88p\*(C'\fR, \f(CW\*(C`atmega88pa\*(C'\fR, \f(CW\*(C`atmega8hva\*(C'\fR.
10240 .ie n .IP """avr5""" 4
10241 .el .IP "\f(CWavr5\fR" 4
10242 .IX Item "avr5"
10243 \&\*(L"Enhanced\*(R" devices with 16@tie{}KiB up to 64@tie{}KiB of program memory.
10244 \&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`at90can32\*(C'\fR, \f(CW\*(C`at90can64\*(C'\fR,
10245 \&\f(CW\*(C`at90pwm216\*(C'\fR, \f(CW\*(C`at90pwm316\*(C'\fR, \f(CW\*(C`at90scr100\*(C'\fR,
10246 \&\f(CW\*(C`at90usb646\*(C'\fR, \f(CW\*(C`at90usb647\*(C'\fR, \f(CW\*(C`at94k\*(C'\fR, \f(CW\*(C`atmega16\*(C'\fR,
10247 \&\f(CW\*(C`atmega161\*(C'\fR, \f(CW\*(C`atmega162\*(C'\fR, \f(CW\*(C`atmega163\*(C'\fR,
10248 \&\f(CW\*(C`atmega164a\*(C'\fR, \f(CW\*(C`atmega164p\*(C'\fR, \f(CW\*(C`atmega165\*(C'\fR,
10249 \&\f(CW\*(C`atmega165a\*(C'\fR, \f(CW\*(C`atmega165p\*(C'\fR, \f(CW\*(C`atmega168\*(C'\fR,
10250 \&\f(CW\*(C`atmega168a\*(C'\fR, \f(CW\*(C`atmega168p\*(C'\fR, \f(CW\*(C`atmega169\*(C'\fR,
10251 \&\f(CW\*(C`atmega169a\*(C'\fR, \f(CW\*(C`atmega169p\*(C'\fR, \f(CW\*(C`atmega169pa\*(C'\fR,
10252 \&\f(CW\*(C`atmega16a\*(C'\fR, \f(CW\*(C`atmega16hva\*(C'\fR, \f(CW\*(C`atmega16hva2\*(C'\fR,
10253 \&\f(CW\*(C`atmega16hvb\*(C'\fR, \f(CW\*(C`atmega16m1\*(C'\fR, \f(CW\*(C`atmega16u4\*(C'\fR,
10254 \&\f(CW\*(C`atmega32\*(C'\fR, \f(CW\*(C`atmega323\*(C'\fR, \f(CW\*(C`atmega324a\*(C'\fR,
10255 \&\f(CW\*(C`atmega324p\*(C'\fR, \f(CW\*(C`atmega324pa\*(C'\fR, \f(CW\*(C`atmega325\*(C'\fR,
10256 \&\f(CW\*(C`atmega3250\*(C'\fR, \f(CW\*(C`atmega3250a\*(C'\fR, \f(CW\*(C`atmega3250p\*(C'\fR,
10257 \&\f(CW\*(C`atmega325a\*(C'\fR, \f(CW\*(C`atmega325p\*(C'\fR, \f(CW\*(C`atmega328\*(C'\fR,
10258 \&\f(CW\*(C`atmega328p\*(C'\fR, \f(CW\*(C`atmega329\*(C'\fR, \f(CW\*(C`atmega3290\*(C'\fR,
10259 \&\f(CW\*(C`atmega3290a\*(C'\fR, \f(CW\*(C`atmega3290p\*(C'\fR, \f(CW\*(C`atmega329a\*(C'\fR,
10260 \&\f(CW\*(C`atmega329p\*(C'\fR, \f(CW\*(C`atmega329pa\*(C'\fR, \f(CW\*(C`atmega32c1\*(C'\fR,
10261 \&\f(CW\*(C`atmega32hvb\*(C'\fR, \f(CW\*(C`atmega32m1\*(C'\fR, \f(CW\*(C`atmega32u4\*(C'\fR,
10262 \&\f(CW\*(C`atmega32u6\*(C'\fR, \f(CW\*(C`atmega406\*(C'\fR, \f(CW\*(C`atmega64\*(C'\fR,
10263 \&\f(CW\*(C`atmega640\*(C'\fR, \f(CW\*(C`atmega644\*(C'\fR, \f(CW\*(C`atmega644a\*(C'\fR,
10264 \&\f(CW\*(C`atmega644p\*(C'\fR, \f(CW\*(C`atmega644pa\*(C'\fR, \f(CW\*(C`atmega645\*(C'\fR,
10265 \&\f(CW\*(C`atmega6450\*(C'\fR, \f(CW\*(C`atmega6450a\*(C'\fR, \f(CW\*(C`atmega6450p\*(C'\fR,
10266 \&\f(CW\*(C`atmega645a\*(C'\fR, \f(CW\*(C`atmega645p\*(C'\fR, \f(CW\*(C`atmega649\*(C'\fR,
10267 \&\f(CW\*(C`atmega6490\*(C'\fR, \f(CW\*(C`atmega649a\*(C'\fR, \f(CW\*(C`atmega649p\*(C'\fR,
10268 \&\f(CW\*(C`atmega64c1\*(C'\fR, \f(CW\*(C`atmega64hve\*(C'\fR, \f(CW\*(C`atmega64m1\*(C'\fR,
10269 \&\f(CW\*(C`m3000\*(C'\fR.
10270 .ie n .IP """avr51""" 4
10271 .el .IP "\f(CWavr51\fR" 4
10272 .IX Item "avr51"
10273 \&\*(L"Enhanced\*(R" devices with 128@tie{}KiB of program memory.
10274 \&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`at90can128\*(C'\fR, \f(CW\*(C`at90usb1286\*(C'\fR,
10275 \&\f(CW\*(C`at90usb1287\*(C'\fR, \f(CW\*(C`atmega128\*(C'\fR, \f(CW\*(C`atmega1280\*(C'\fR,
10276 \&\f(CW\*(C`atmega1281\*(C'\fR, \f(CW\*(C`atmega1284p\*(C'\fR, \f(CW\*(C`atmega128rfa1\*(C'\fR.
10277 .ie n .IP """avr6""" 4
10278 .el .IP "\f(CWavr6\fR" 4
10279 .IX Item "avr6"
10280 \&\*(L"Enhanced\*(R" devices with 3\-byte \s-1PC\s0, i.e. with more than
10281 128@tie{}KiB of program memory.
10282 \&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`atmega2560\*(C'\fR, \f(CW\*(C`atmega2561\*(C'\fR.
10283 .ie n .IP """avrxmega2""" 4
10284 .el .IP "\f(CWavrxmega2\fR" 4
10285 .IX Item "avrxmega2"
10286 \&\*(L"\s-1XMEGA\s0\*(R" devices with more than 8@tie{}KiB and up to 64@tie{}KiB of
10287 program memory.
10288 \&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`atxmega16a4\*(C'\fR, \f(CW\*(C`atxmega16d4\*(C'\fR,
10289 \&\f(CW\*(C`atxmega16x1\*(C'\fR, \f(CW\*(C`atxmega32a4\*(C'\fR, \f(CW\*(C`atxmega32d4\*(C'\fR,
10290 \&\f(CW\*(C`atxmega32x1\*(C'\fR.
10291 .ie n .IP """avrxmega4""" 4
10292 .el .IP "\f(CWavrxmega4\fR" 4
10293 .IX Item "avrxmega4"
10294 \&\*(L"\s-1XMEGA\s0\*(R" devices with more than 64@tie{}KiB and up to 128@tie{}KiB of
10295 program memory.
10296 \&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`atxmega64a3\*(C'\fR, \f(CW\*(C`atxmega64d3\*(C'\fR.
10297 .ie n .IP """avrxmega5""" 4
10298 .el .IP "\f(CWavrxmega5\fR" 4
10299 .IX Item "avrxmega5"
10300 \&\*(L"\s-1XMEGA\s0\*(R" devices with more than 64@tie{}KiB and up to 128@tie{}KiB of
10301 program memory and more than 64@tie{}KiB of \s-1RAM\s0.
10302 \&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`atxmega64a1\*(C'\fR, \f(CW\*(C`atxmega64a1u\*(C'\fR.
10303 .ie n .IP """avrxmega6""" 4
10304 .el .IP "\f(CWavrxmega6\fR" 4
10305 .IX Item "avrxmega6"
10306 \&\*(L"\s-1XMEGA\s0\*(R" devices with more than 128@tie{}KiB of program memory.
10307 \&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`atxmega128a3\*(C'\fR, \f(CW\*(C`atxmega128d3\*(C'\fR,
10308 \&\f(CW\*(C`atxmega192a3\*(C'\fR, \f(CW\*(C`atxmega192d3\*(C'\fR, \f(CW\*(C`atxmega256a3\*(C'\fR,
10309 \&\f(CW\*(C`atxmega256a3b\*(C'\fR, \f(CW\*(C`atxmega256a3bu\*(C'\fR, \f(CW\*(C`atxmega256d3\*(C'\fR.
10310 .ie n .IP """avrxmega7""" 4
10311 .el .IP "\f(CWavrxmega7\fR" 4
10312 .IX Item "avrxmega7"
10313 \&\*(L"\s-1XMEGA\s0\*(R" devices with more than 128@tie{}KiB of program memory and
10314 more than 64@tie{}KiB of \s-1RAM\s0.
10315 \&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`atxmega128a1\*(C'\fR, \f(CW\*(C`atxmega128a1u\*(C'\fR.
10316 .ie n .IP """avr1""" 4
10317 .el .IP "\f(CWavr1\fR" 4
10318 .IX Item "avr1"
10319 This \s-1ISA\s0 is implemented by the minimal \s-1AVR\s0 core and supported for
10320 assembler only.
10321 \&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`at90s1200\*(C'\fR, \f(CW\*(C`attiny11\*(C'\fR, \f(CW\*(C`attiny12\*(C'\fR,
10322 \&\f(CW\*(C`attiny15\*(C'\fR, \f(CW\*(C`attiny28\*(C'\fR.
10323 .RE
10324 .RS 4
10325 .RE
10326 .IP "\fB\-maccumulate\-args\fR" 4
10327 .IX Item "-maccumulate-args"
10328 Accumulate outgoing function arguments and acquire/release the needed
10329 stack space for outgoing function arguments once in function
10330 prologue/epilogue.  Without this option, outgoing arguments are pushed
10331 before calling a function and popped afterwards.
10332 .Sp
10333 Popping the arguments after the function call can be expensive on
10334 \&\s-1AVR\s0 so that accumulating the stack space might lead to smaller
10335 executables because arguments need not to be removed from the
10336 stack after such a function call.
10337 .Sp
10338 This option can lead to reduced code size for functions that perform
10339 several calls to functions that get their arguments on the stack like
10340 calls to printf-like functions.
10341 .IP "\fB\-mbranch\-cost=\fR\fIcost\fR" 4
10342 .IX Item "-mbranch-cost=cost"
10343 Set the branch costs for conditional branch instructions to
10344 \&\fIcost\fR.  Reasonable values for \fIcost\fR are small, non-negative
10345 integers. The default branch cost is 0.
10346 .IP "\fB\-mcall\-prologues\fR" 4
10347 .IX Item "-mcall-prologues"
10348 Functions prologues/epilogues are expanded as calls to appropriate
10349 subroutines.  Code size is smaller.
10350 .IP "\fB\-mint8\fR" 4
10351 .IX Item "-mint8"
10352 Assume \f(CW\*(C`int\*(C'\fR to be 8\-bit integer.  This affects the sizes of all types: a
10353 \&\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,
10354 and \f(CW\*(C`long long\*(C'\fR is 4 bytes.  Please note that this option does not
10355 conform to the C standards, but it results in smaller code
10356 size.
10357 .IP "\fB\-mno\-interrupts\fR" 4
10358 .IX Item "-mno-interrupts"
10359 Generated code is not compatible with hardware interrupts.
10360 Code size is smaller.
10361 .IP "\fB\-mrelax\fR" 4
10362 .IX Item "-mrelax"
10363 Try to replace \f(CW\*(C`CALL\*(C'\fR resp. \f(CW\*(C`JMP\*(C'\fR instruction by the shorter
10364 \&\f(CW\*(C`RCALL\*(C'\fR resp. \f(CW\*(C`RJMP\*(C'\fR instruction if applicable.
10365 Setting \f(CW\*(C`\-mrelax\*(C'\fR just adds the \f(CW\*(C`\-\-relax\*(C'\fR option to the
10366 linker command line when the linker is called.
10367 .Sp
10368 Jump relaxing is performed by the linker because jump offsets are not
10369 known before code is located. Therefore, the assembler code generated by the
10370 compiler is the same, but the instructions in the executable may
10371 differ from instructions in the assembler code.
10372 .Sp
10373 Relaxing must be turned on if linker stubs are needed, see the
10374 section on \f(CW\*(C`EIND\*(C'\fR and linker stubs below.
10375 .IP "\fB\-mshort\-calls\fR" 4
10376 .IX Item "-mshort-calls"
10377 Use \f(CW\*(C`RCALL\*(C'\fR/\f(CW\*(C`RJMP\*(C'\fR instructions even on devices with
10378 16@tie{}KiB or more of program memory, i.e. on devices that
10379 have the \f(CW\*(C`CALL\*(C'\fR and \f(CW\*(C`JMP\*(C'\fR instructions.
10380 See also the \f(CW\*(C`\-mrelax\*(C'\fR command line option.
10381 .IP "\fB\-msp8\fR" 4
10382 .IX Item "-msp8"
10383 Treat the stack pointer register as an 8\-bit register,
10384 i.e. assume the high byte of the stack pointer is zero.
10385 In general, you don't need to set this option by hand.
10386 .Sp
10387 This option is used internally by the compiler to select and
10388 build multilibs for architectures \f(CW\*(C`avr2\*(C'\fR and \f(CW\*(C`avr25\*(C'\fR.
10389 These architectures mix devices with and without \f(CW\*(C`SPH\*(C'\fR.
10390 For any setting other than \f(CW\*(C`\-mmcu=avr2\*(C'\fR or \f(CW\*(C`\-mmcu=avr25\*(C'\fR
10391 the compiler driver will add or remove this option from the compiler
10392 proper's command line, because the compiler then knows if the device
10393 or architecture has an 8\-bit stack pointer and thus no \f(CW\*(C`SPH\*(C'\fR
10394 register or not.
10395 .IP "\fB\-mstrict\-X\fR" 4
10396 .IX Item "-mstrict-X"
10397 Use address register \f(CW\*(C`X\*(C'\fR in a way proposed by the hardware.  This means
10398 that \f(CW\*(C`X\*(C'\fR is only used in indirect, post-increment or
10399 pre-decrement addressing.
10400 .Sp
10401 Without this option, the \f(CW\*(C`X\*(C'\fR register may be used in the same way
10402 as \f(CW\*(C`Y\*(C'\fR or \f(CW\*(C`Z\*(C'\fR which then is emulated by additional
10403 instructions.  
10404 For example, loading a value with \f(CW\*(C`X+const\*(C'\fR addressing with a
10405 small non-negative \f(CW\*(C`const < 64\*(C'\fR to a register \fIRn\fR is
10406 performed as
10407 .Sp
10408 .Vb 3
10409 \&        adiw r26, const   ; X += const
10410 \&        ld   <Rn>, X        ; <Rn> = *X
10411 \&        sbiw r26, const   ; X \-= const
10412 .Ve
10413 .IP "\fB\-mtiny\-stack\fR" 4
10414 .IX Item "-mtiny-stack"
10415 Only change the lower 8@tie{}bits of the stack pointer.
10416 .PP
10417 \f(CW\*(C`EIND\*(C'\fR and Devices with more than 128 Ki Bytes of Flash
10418 .IX Subsection "EIND and Devices with more than 128 Ki Bytes of Flash"
10419 .PP
10420 Pointers in the implementation are 16@tie{}bits wide.
10421 The address of a function or label is represented as word address so
10422 that indirect jumps and calls can target any code address in the
10423 range of 64@tie{}Ki words.
10424 .PP
10425 In order to facilitate indirect jump on devices with more than 128@tie{}Ki
10426 bytes of program memory space, there is a special function register called
10427 \&\f(CW\*(C`EIND\*(C'\fR that serves as most significant part of the target address
10428 when \f(CW\*(C`EICALL\*(C'\fR or \f(CW\*(C`EIJMP\*(C'\fR instructions are used.
10429 .PP
10430 Indirect jumps and calls on these devices are handled as follows by
10431 the compiler and are subject to some limitations:
10432 .IP "\(bu" 4
10433 The compiler never sets \f(CW\*(C`EIND\*(C'\fR.
10434 .IP "\(bu" 4
10435 The compiler uses \f(CW\*(C`EIND\*(C'\fR implicitely in \f(CW\*(C`EICALL\*(C'\fR/\f(CW\*(C`EIJMP\*(C'\fR
10436 instructions or might read \f(CW\*(C`EIND\*(C'\fR directly in order to emulate an
10437 indirect call/jump by means of a \f(CW\*(C`RET\*(C'\fR instruction.
10438 .IP "\(bu" 4
10439 The compiler assumes that \f(CW\*(C`EIND\*(C'\fR never changes during the startup
10440 code or during the application. In particular, \f(CW\*(C`EIND\*(C'\fR is not
10441 saved/restored in function or interrupt service routine
10442 prologue/epilogue.
10443 .IP "\(bu" 4
10444 For indirect calls to functions and computed goto, the linker
10445 generates \fIstubs\fR. Stubs are jump pads sometimes also called
10446 \&\fItrampolines\fR. Thus, the indirect call/jump jumps to such a stub.
10447 The stub contains a direct jump to the desired address.
10448 .IP "\(bu" 4
10449 Linker relaxation must be turned on so that the linker will generate
10450 the stubs correctly an all situaltion. See the compiler option
10451 \&\f(CW\*(C`\-mrelax\*(C'\fR and the linler option \f(CW\*(C`\-\-relax\*(C'\fR.
10452 There are corner cases where the linker is supposed to generate stubs
10453 but aborts without relaxation and without a helpful error message.
10454 .IP "\(bu" 4
10455 The default linker script is arranged for code with \f(CW\*(C`EIND = 0\*(C'\fR.
10456 If code is supposed to work for a setup with \f(CW\*(C`EIND != 0\*(C'\fR, a custom
10457 linker script has to be used in order to place the sections whose
10458 name start with \f(CW\*(C`.trampolines\*(C'\fR into the segment where \f(CW\*(C`EIND\*(C'\fR
10459 points to.
10460 .IP "\(bu" 4
10461 The startup code from libgcc never sets \f(CW\*(C`EIND\*(C'\fR.
10462 Notice that startup code is a blend of code from libgcc and AVR-LibC.
10463 For the impact of AVR-LibC on \f(CW\*(C`EIND\*(C'\fR, see the
10464 AVR-LibC\ user\ manual (\f(CW\*(C`http://nongnu.org/avr\-libc/user\-manual\*(C'\fR).
10465 .IP "\(bu" 4
10466 It is legitimate for user-specific startup code to set up \f(CW\*(C`EIND\*(C'\fR
10467 early, for example by means of initialization code located in
10468 section \f(CW\*(C`.init3\*(C'\fR. Such code runs prior to general startup code
10469 that initializes \s-1RAM\s0 and calls constructors, but after the bit
10470 of startup code from AVR-LibC that sets \f(CW\*(C`EIND\*(C'\fR to the segment
10471 where the vector table is located.
10472 .Sp
10473 .Vb 1
10474 \&        #include <avr/io.h>
10475 \&        
10476 \&        static void
10477 \&        _\|_attribute_\|_((section(".init3"),naked,used,no_instrument_function))
10478 \&        init3_set_eind (void)
10479 \&        {
10480 \&          _\|_asm volatile ("ldi r24,pm_hh8(_\|_trampolines_start)\en\et"
10481 \&                          "out %i0,r24" :: "n" (&EIND) : "r24","memory");
10482 \&        }
10483 .Ve
10484 .Sp
10485 The \f(CW\*(C`_\|_trampolines_start\*(C'\fR symbol is defined in the linker script.
10486 .IP "\(bu" 4
10487 Stubs are generated automatically by the linker if
10488 the following two conditions are met:
10489 .RS 4
10490 .ie n .IP "\-<The address of a label is taken by means of the ""gs"" modifier>" 4
10491 .el .IP "\-<The address of a label is taken by means of the \f(CWgs\fR modifier>" 4
10492 .IX Item "-<The address of a label is taken by means of the gs modifier>"
10493 (short for \fIgenerate stubs\fR) like so:
10494 .Sp
10495 .Vb 2
10496 \&        LDI r24, lo8(gs(<func>))
10497 \&        LDI r25, hi8(gs(<func>))
10498 .Ve
10499 .IP "\-<The final location of that label is in a code segment>" 4
10500 .IX Item "-<The final location of that label is in a code segment>"
10501 \&\fIoutside\fR the segment where the stubs are located.
10502 .RE
10503 .RS 4
10504 .RE
10505 .IP "\(bu" 4
10506 The compiler emits such \f(CW\*(C`gs\*(C'\fR modifiers for code labels in the
10507 following situations:
10508 .RS 4
10509 .IP "\-<Taking address of a function or code label.>" 4
10510 .IX Item "-<Taking address of a function or code label.>"
10511 .PD 0
10512 .IP "\-<Computed goto.>" 4
10513 .IX Item "-<Computed goto.>"
10514 .IP "\-<If prologue-save function is used, see \fB\-mcall\-prologues\fR>" 4
10515 .IX Item "-<If prologue-save function is used, see -mcall-prologues>"
10516 .PD
10517 command-line option.
10518 .IP "\-<Switch/case dispatch tables. If you do not want such dispatch>" 4
10519 .IX Item "-<Switch/case dispatch tables. If you do not want such dispatch>"
10520 tables you can specify the \fB\-fno\-jump\-tables\fR command-line option.
10521 .IP "\-<C and \*(C+ constructors/destructors called during startup/shutdown.>" 4
10522 .IX Item "-<C and  constructors/destructors called during startup/shutdown.>"
10523 .PD 0
10524 .ie n .IP "\-<If the tools hit a ""gs()"" modifier explained above.>" 4
10525 .el .IP "\-<If the tools hit a \f(CWgs()\fR modifier explained above.>" 4
10526 .IX Item "-<If the tools hit a gs() modifier explained above.>"
10527 .RE
10528 .RS 4
10529 .RE
10530 .IP "\(bu" 4
10531 .PD
10532 Jumping to non-symbolic addresses like so is \fInot\fR supported:
10533 .Sp
10534 .Vb 5
10535 \&        int main (void)
10536 \&        {
10537 \&            /* Call function at word address 0x2 */
10538 \&            return ((int(*)(void)) 0x2)();
10539 \&        }
10540 .Ve
10541 .Sp
10542 Instead, a stub has to be set up, i.e. the function has to be called
10543 through a symbol (\f(CW\*(C`func_4\*(C'\fR in the example):
10544 .Sp
10545 .Vb 3
10546 \&        int main (void)
10547 \&        {
10548 \&            extern int func_4 (void);
10549 \&        
10550 \&            /* Call function at byte address 0x4 */
10551 \&            return func_4();
10552 \&        }
10553 .Ve
10554 .Sp
10555 and the application be linked with \f(CW\*(C`\-Wl,\-\-defsym,func_4=0x4\*(C'\fR.
10556 Alternatively, \f(CW\*(C`func_4\*(C'\fR can be defined in the linker script.
10557 .PP
10558 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
10559 .IX Subsection "Handling of the RAMPD, RAMPX, RAMPY and RAMPZ Special Function Registers"
10560 .PP
10561 Some \s-1AVR\s0 devices support memories larger than the 64@tie{}KiB range
10562 that can be accessed with 16\-bit pointers.  To access memory locations
10563 outside this 64@tie{}KiB range, the contentent of a \f(CW\*(C`RAMP\*(C'\fR
10564 register is used as high part of the address:
10565 The \f(CW\*(C`X\*(C'\fR, \f(CW\*(C`Y\*(C'\fR, \f(CW\*(C`Z\*(C'\fR address register is concatenated
10566 with the \f(CW\*(C`RAMPX\*(C'\fR, \f(CW\*(C`RAMPY\*(C'\fR, \f(CW\*(C`RAMPZ\*(C'\fR special function
10567 register, respectively, to get a wide address. Similarly,
10568 \&\f(CW\*(C`RAMPD\*(C'\fR is used together with direct addressing.
10569 .IP "\(bu" 4
10570 The startup code initializes the \f(CW\*(C`RAMP\*(C'\fR special function
10571 registers with zero.
10572 .IP "\(bu" 4
10573 If a \fB\s-1AVR\s0 Named Address Spaces,named address space\fR other than
10574 generic or \f(CW\*(C`_\|_flash\*(C'\fR is used, then \f(CW\*(C`RAMPZ\*(C'\fR is set
10575 as needed before the operation.
10576 .IP "\(bu" 4
10577 If the device supports \s-1RAM\s0 larger than 64@tie{KiB} and the compiler
10578 needs to change \f(CW\*(C`RAMPZ\*(C'\fR to accomplish an operation, \f(CW\*(C`RAMPZ\*(C'\fR
10579 is reset to zero after the operation.
10580 .IP "\(bu" 4
10581 If the device comes with a specific \f(CW\*(C`RAMP\*(C'\fR register, the \s-1ISR\s0
10582 prologue/epilogue saves/restores that \s-1SFR\s0 and initializes it with
10583 zero in case the \s-1ISR\s0 code might (implicitly) use it.
10584 .IP "\(bu" 4
10585 \&\s-1RAM\s0 larger than 64@tie{KiB} is not supported by \s-1GCC\s0 for \s-1AVR\s0 targets.
10586 If you use inline assembler to read from locations outside the
10587 16\-bit address range and change one of the \f(CW\*(C`RAMP\*(C'\fR registers,
10588 you must reset it to zero after the access.
10589 .PP
10590 \s-1AVR\s0 Built-in Macros
10591 .IX Subsection "AVR Built-in Macros"
10592 .PP
10593 \&\s-1GCC\s0 defines several built-in macros so that the user code can test
10594 for the presence or absence of features.  Almost any of the following
10595 built-in macros are deduced from device capabilities and thus
10596 triggered by the \f(CW\*(C`\-mmcu=\*(C'\fR command-line option.
10597 .PP
10598 For even more AVR-specific built-in macros see
10599 \&\fB\s-1AVR\s0 Named Address Spaces\fR and \fB\s-1AVR\s0 Built-in Functions\fR.
10600 .ie n .IP """_\|_AVR_\f(CIDevice\f(CW_\|_""" 4
10601 .el .IP "\f(CW_\|_AVR_\f(CIDevice\f(CW_\|_\fR" 4
10602 .IX Item "__AVR_Device__"
10603 Setting \f(CW\*(C`\-mmcu=\f(CIdevice\f(CW\*(C'\fR defines this built-in macro which reflects
10604 the device's name. For example, \f(CW\*(C`\-mmcu=atmega8\*(C'\fR defines the
10605 built-in macro \f(CW\*(C`_\|_AVR_ATmega8_\|_\*(C'\fR, \f(CW\*(C`\-mmcu=attiny261a\*(C'\fR defines
10606 \&\f(CW\*(C`_\|_AVR_ATtiny261A_\|_\*(C'\fR, etc.
10607 .Sp
10608 The built-in macros' names follow
10609 the scheme \f(CW\*(C`_\|_AVR_\f(CIDevice\f(CW_\|_\*(C'\fR where \fIDevice\fR is
10610 the device name as from the \s-1AVR\s0 user manual. The difference between
10611 \&\fIDevice\fR in the built-in macro and \fIdevice\fR in
10612 \&\f(CW\*(C`\-mmcu=\f(CIdevice\f(CW\*(C'\fR is that the latter is always lowercase.
10613 .ie n .IP """_\|_AVR_HAVE_ELPM_\|_""" 4
10614 .el .IP "\f(CW_\|_AVR_HAVE_ELPM_\|_\fR" 4
10615 .IX Item "__AVR_HAVE_ELPM__"
10616 The device has the the \f(CW\*(C`ELPM\*(C'\fR instruction.
10617 .ie n .IP """_\|_AVR_HAVE_ELPMX_\|_""" 4
10618 .el .IP "\f(CW_\|_AVR_HAVE_ELPMX_\|_\fR" 4
10619 .IX Item "__AVR_HAVE_ELPMX__"
10620 The device has the \f(CW\*(C`ELPM R\f(CIn\f(CW,Z\*(C'\fR and \f(CW\*(C`ELPM
10621 R\f(CIn\f(CW,Z+\*(C'\fR instructions.
10622 .ie n .IP """_\|_AVR_HAVE_MOVW_\|_""" 4
10623 .el .IP "\f(CW_\|_AVR_HAVE_MOVW_\|_\fR" 4
10624 .IX Item "__AVR_HAVE_MOVW__"
10625 The device has the \f(CW\*(C`MOVW\*(C'\fR instruction to perform 16\-bit
10626 register-register moves.
10627 .ie n .IP """_\|_AVR_HAVE_LPMX_\|_""" 4
10628 .el .IP "\f(CW_\|_AVR_HAVE_LPMX_\|_\fR" 4
10629 .IX Item "__AVR_HAVE_LPMX__"
10630 The device has the \f(CW\*(C`LPM R\f(CIn\f(CW,Z\*(C'\fR and
10631 \&\f(CW\*(C`LPM R\f(CIn\f(CW,Z+\*(C'\fR instructions.
10632 .ie n .IP """_\|_AVR_HAVE_MUL_\|_""" 4
10633 .el .IP "\f(CW_\|_AVR_HAVE_MUL_\|_\fR" 4
10634 .IX Item "__AVR_HAVE_MUL__"
10635 The device has a hardware multiplier.
10636 .ie n .IP """_\|_AVR_HAVE_JMP_CALL_\|_""" 4
10637 .el .IP "\f(CW_\|_AVR_HAVE_JMP_CALL_\|_\fR" 4
10638 .IX Item "__AVR_HAVE_JMP_CALL__"
10639 The device has the \f(CW\*(C`JMP\*(C'\fR and \f(CW\*(C`CALL\*(C'\fR instructions.
10640 This is the case for devices with at least 16@tie{}KiB of program
10641 memory and if \f(CW\*(C`\-mshort\-calls\*(C'\fR is not set.
10642 .ie n .IP """_\|_AVR_HAVE_EIJMP_EICALL_\|_""" 4
10643 .el .IP "\f(CW_\|_AVR_HAVE_EIJMP_EICALL_\|_\fR" 4
10644 .IX Item "__AVR_HAVE_EIJMP_EICALL__"
10645 .PD 0
10646 .ie n .IP """_\|_AVR_3_BYTE_PC_\|_""" 4
10647 .el .IP "\f(CW_\|_AVR_3_BYTE_PC_\|_\fR" 4
10648 .IX Item "__AVR_3_BYTE_PC__"
10649 .PD
10650 The device has the \f(CW\*(C`EIJMP\*(C'\fR and \f(CW\*(C`EICALL\*(C'\fR instructions.
10651 This is the case for devices with more than 128@tie{}KiB of program memory.
10652 This also means that the program counter
10653 (\s-1PC\s0) is 3@tie{}bytes wide.
10654 .ie n .IP """_\|_AVR_2_BYTE_PC_\|_""" 4
10655 .el .IP "\f(CW_\|_AVR_2_BYTE_PC_\|_\fR" 4
10656 .IX Item "__AVR_2_BYTE_PC__"
10657 The program counter (\s-1PC\s0) is 2@tie{}bytes wide. This is the case for devices
10658 with up to 128@tie{}KiB of program memory.
10659 .ie n .IP """_\|_AVR_HAVE_8BIT_SP_\|_""" 4
10660 .el .IP "\f(CW_\|_AVR_HAVE_8BIT_SP_\|_\fR" 4
10661 .IX Item "__AVR_HAVE_8BIT_SP__"
10662 .PD 0
10663 .ie n .IP """_\|_AVR_HAVE_16BIT_SP_\|_""" 4
10664 .el .IP "\f(CW_\|_AVR_HAVE_16BIT_SP_\|_\fR" 4
10665 .IX Item "__AVR_HAVE_16BIT_SP__"
10666 .PD
10667 The stack pointer (\s-1SP\s0) register is treated as 8\-bit respectively
10668 16\-bit register by the compiler.
10669 The definition of these macros is affected by \f(CW\*(C`\-mtiny\-stack\*(C'\fR.
10670 .ie n .IP """_\|_AVR_HAVE_SPH_\|_""" 4
10671 .el .IP "\f(CW_\|_AVR_HAVE_SPH_\|_\fR" 4
10672 .IX Item "__AVR_HAVE_SPH__"
10673 .PD 0
10674 .ie n .IP """_\|_AVR_SP8_\|_""" 4
10675 .el .IP "\f(CW_\|_AVR_SP8_\|_\fR" 4
10676 .IX Item "__AVR_SP8__"
10677 .PD
10678 The device has the \s-1SPH\s0 (high part of stack pointer) special function
10679 register or has an 8\-bit stack pointer, respectively.
10680 The definition of these macros is affected by \f(CW\*(C`\-mmcu=\*(C'\fR and
10681 in the cases of \f(CW\*(C`\-mmcu=avr2\*(C'\fR and \f(CW\*(C`\-mmcu=avr25\*(C'\fR also
10682 by \f(CW\*(C`\-msp8\*(C'\fR.
10683 .ie n .IP """_\|_AVR_HAVE_RAMPD_\|_""" 4
10684 .el .IP "\f(CW_\|_AVR_HAVE_RAMPD_\|_\fR" 4
10685 .IX Item "__AVR_HAVE_RAMPD__"
10686 .PD 0
10687 .ie n .IP """_\|_AVR_HAVE_RAMPX_\|_""" 4
10688 .el .IP "\f(CW_\|_AVR_HAVE_RAMPX_\|_\fR" 4
10689 .IX Item "__AVR_HAVE_RAMPX__"
10690 .ie n .IP """_\|_AVR_HAVE_RAMPY_\|_""" 4
10691 .el .IP "\f(CW_\|_AVR_HAVE_RAMPY_\|_\fR" 4
10692 .IX Item "__AVR_HAVE_RAMPY__"
10693 .ie n .IP """_\|_AVR_HAVE_RAMPZ_\|_""" 4
10694 .el .IP "\f(CW_\|_AVR_HAVE_RAMPZ_\|_\fR" 4
10695 .IX Item "__AVR_HAVE_RAMPZ__"
10696 .PD
10697 The device has the \f(CW\*(C`RAMPD\*(C'\fR, \f(CW\*(C`RAMPX\*(C'\fR, \f(CW\*(C`RAMPY\*(C'\fR,
10698 \&\f(CW\*(C`RAMPZ\*(C'\fR special function register, respectively.
10699 .ie n .IP """_\|_NO_INTERRUPTS_\|_""" 4
10700 .el .IP "\f(CW_\|_NO_INTERRUPTS_\|_\fR" 4
10701 .IX Item "__NO_INTERRUPTS__"
10702 This macro reflects the \f(CW\*(C`\-mno\-interrupts\*(C'\fR command line option.
10703 .ie n .IP """_\|_AVR_ERRATA_SKIP_\|_""" 4
10704 .el .IP "\f(CW_\|_AVR_ERRATA_SKIP_\|_\fR" 4
10705 .IX Item "__AVR_ERRATA_SKIP__"
10706 .PD 0
10707 .ie n .IP """_\|_AVR_ERRATA_SKIP_JMP_CALL_\|_""" 4
10708 .el .IP "\f(CW_\|_AVR_ERRATA_SKIP_JMP_CALL_\|_\fR" 4
10709 .IX Item "__AVR_ERRATA_SKIP_JMP_CALL__"
10710 .PD
10711 Some \s-1AVR\s0 devices (\s-1AT90S8515\s0, ATmega103) must not skip 32\-bit
10712 instructions because of a hardware erratum.  Skip instructions are
10713 \&\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.
10714 The second macro is only defined if \f(CW\*(C`_\|_AVR_HAVE_JMP_CALL_\|_\*(C'\fR is also
10715 set.
10716 .ie n .IP """_\|_AVR_SFR_OFFSET_\|_=\f(CIoffset\f(CW""" 4
10717 .el .IP "\f(CW_\|_AVR_SFR_OFFSET_\|_=\f(CIoffset\f(CW\fR" 4
10718 .IX Item "__AVR_SFR_OFFSET__=offset"
10719 Instructions that can address I/O special function registers directly
10720 like \f(CW\*(C`IN\*(C'\fR, \f(CW\*(C`OUT\*(C'\fR, \f(CW\*(C`SBI\*(C'\fR, etc. may use a different
10721 address as if addressed by an instruction to access \s-1RAM\s0 like \f(CW\*(C`LD\*(C'\fR
10722 or \f(CW\*(C`STS\*(C'\fR. This offset depends on the device architecture and has
10723 to be subtracted from the \s-1RAM\s0 address in order to get the
10724 respective I/O@tie{}address.
10725 .ie n .IP """_\|_WITH_AVRLIBC_\|_""" 4
10726 .el .IP "\f(CW_\|_WITH_AVRLIBC_\|_\fR" 4
10727 .IX Item "__WITH_AVRLIBC__"
10728 The compiler is configured to be used together with AVR-Libc.
10729 See the \f(CW\*(C`\-\-with\-avrlibc\*(C'\fR configure option.
10730 .PP
10731 \fIBlackfin Options\fR
10732 .IX Subsection "Blackfin Options"
10733 .IP "\fB\-mcpu=\fR\fIcpu\fR[\fB\-\fR\fIsirevision\fR]" 4
10734 .IX Item "-mcpu=cpu[-sirevision]"
10735 Specifies the name of the target Blackfin processor.  Currently, \fIcpu\fR
10736 can be one of \fBbf512\fR, \fBbf514\fR, \fBbf516\fR, \fBbf518\fR,
10737 \&\fBbf522\fR, \fBbf523\fR, \fBbf524\fR, \fBbf525\fR, \fBbf526\fR,
10738 \&\fBbf527\fR, \fBbf531\fR, \fBbf532\fR, \fBbf533\fR,
10739 \&\fBbf534\fR, \fBbf536\fR, \fBbf537\fR, \fBbf538\fR, \fBbf539\fR,
10740 \&\fBbf542\fR, \fBbf544\fR, \fBbf547\fR, \fBbf548\fR, \fBbf549\fR,
10741 \&\fBbf542m\fR, \fBbf544m\fR, \fBbf547m\fR, \fBbf548m\fR, \fBbf549m\fR,
10742 \&\fBbf561\fR, \fBbf592\fR.
10743 The optional \fIsirevision\fR specifies the silicon revision of the target
10744 Blackfin processor.  Any workarounds available for the targeted silicon revision
10745 will be enabled.  If \fIsirevision\fR is \fBnone\fR, no workarounds are enabled.
10746 If \fIsirevision\fR is \fBany\fR, all workarounds for the targeted processor
10747 will be enabled.  The \f(CW\*(C`_\|_SILICON_REVISION_\|_\*(C'\fR macro is defined to two
10748 hexadecimal digits representing the major and minor numbers in the silicon
10749 revision.  If \fIsirevision\fR is \fBnone\fR, the \f(CW\*(C`_\|_SILICON_REVISION_\|_\*(C'\fR
10750 is not defined.  If \fIsirevision\fR is \fBany\fR, the
10751 \&\f(CW\*(C`_\|_SILICON_REVISION_\|_\*(C'\fR is defined to be \f(CW0xffff\fR.
10752 If this optional \fIsirevision\fR is not used, \s-1GCC\s0 assumes the latest known
10753 silicon revision of the targeted Blackfin processor.
10754 .Sp
10755 Support for \fBbf561\fR is incomplete.  For \fBbf561\fR,
10756 Only the processor macro is defined.
10757 Without this option, \fBbf532\fR is used as the processor by default.
10758 The corresponding predefined processor macros for \fIcpu\fR is to
10759 be defined.  And for \fBbfin-elf\fR toolchain, this causes the hardware \s-1BSP\s0
10760 provided by libgloss to be linked in if \fB\-msim\fR is not given.
10761 .IP "\fB\-msim\fR" 4
10762 .IX Item "-msim"
10763 Specifies that the program will be run on the simulator.  This causes
10764 the simulator \s-1BSP\s0 provided by libgloss to be linked in.  This option
10765 has effect only for \fBbfin-elf\fR toolchain.
10766 Certain other options, such as \fB\-mid\-shared\-library\fR and
10767 \&\fB\-mfdpic\fR, imply \fB\-msim\fR.
10768 .IP "\fB\-momit\-leaf\-frame\-pointer\fR" 4
10769 .IX Item "-momit-leaf-frame-pointer"
10770 Don't keep the frame pointer in a register for leaf functions.  This
10771 avoids the instructions to save, set up and restore frame pointers and
10772 makes an extra register available in leaf functions.  The option
10773 \&\fB\-fomit\-frame\-pointer\fR removes the frame pointer for all functions,
10774 which might make debugging harder.
10775 .IP "\fB\-mspecld\-anomaly\fR" 4
10776 .IX Item "-mspecld-anomaly"
10777 When enabled, the compiler will ensure that the generated code does not
10778 contain speculative loads after jump instructions. If this option is used,
10779 \&\f(CW\*(C`_\|_WORKAROUND_SPECULATIVE_LOADS\*(C'\fR is defined.
10780 .IP "\fB\-mno\-specld\-anomaly\fR" 4
10781 .IX Item "-mno-specld-anomaly"
10782 Don't generate extra code to prevent speculative loads from occurring.
10783 .IP "\fB\-mcsync\-anomaly\fR" 4
10784 .IX Item "-mcsync-anomaly"
10785 When enabled, the compiler will ensure that the generated code does not
10786 contain \s-1CSYNC\s0 or \s-1SSYNC\s0 instructions too soon after conditional branches.
10787 If this option is used, \f(CW\*(C`_\|_WORKAROUND_SPECULATIVE_SYNCS\*(C'\fR is defined.
10788 .IP "\fB\-mno\-csync\-anomaly\fR" 4
10789 .IX Item "-mno-csync-anomaly"
10790 Don't generate extra code to prevent \s-1CSYNC\s0 or \s-1SSYNC\s0 instructions from
10791 occurring too soon after a conditional branch.
10792 .IP "\fB\-mlow\-64k\fR" 4
10793 .IX Item "-mlow-64k"
10794 When enabled, the compiler is free to take advantage of the knowledge that
10795 the entire program fits into the low 64k of memory.
10796 .IP "\fB\-mno\-low\-64k\fR" 4
10797 .IX Item "-mno-low-64k"
10798 Assume that the program is arbitrarily large.  This is the default.
10799 .IP "\fB\-mstack\-check\-l1\fR" 4
10800 .IX Item "-mstack-check-l1"
10801 Do stack checking using information placed into L1 scratchpad memory by the
10802 uClinux kernel.
10803 .IP "\fB\-mid\-shared\-library\fR" 4
10804 .IX Item "-mid-shared-library"
10805 Generate code that supports shared libraries via the library \s-1ID\s0 method.
10806 This allows for execute in place and shared libraries in an environment
10807 without virtual memory management.  This option implies \fB\-fPIC\fR.
10808 With a \fBbfin-elf\fR target, this option implies \fB\-msim\fR.
10809 .IP "\fB\-mno\-id\-shared\-library\fR" 4
10810 .IX Item "-mno-id-shared-library"
10811 Generate code that doesn't assume \s-1ID\s0 based shared libraries are being used.
10812 This is the default.
10813 .IP "\fB\-mleaf\-id\-shared\-library\fR" 4
10814 .IX Item "-mleaf-id-shared-library"
10815 Generate code that supports shared libraries via the library \s-1ID\s0 method,
10816 but assumes that this library or executable won't link against any other
10817 \&\s-1ID\s0 shared libraries.  That allows the compiler to use faster code for jumps
10818 and calls.
10819 .IP "\fB\-mno\-leaf\-id\-shared\-library\fR" 4
10820 .IX Item "-mno-leaf-id-shared-library"
10821 Do not assume that the code being compiled won't link against any \s-1ID\s0 shared
10822 libraries.  Slower code will be generated for jump and call insns.
10823 .IP "\fB\-mshared\-library\-id=n\fR" 4
10824 .IX Item "-mshared-library-id=n"
10825 Specified the identification number of the \s-1ID\s0 based shared library being
10826 compiled.  Specifying a value of 0 will generate more compact code, specifying
10827 other values will force the allocation of that number to the current
10828 library but is no more space or time efficient than omitting this option.
10829 .IP "\fB\-msep\-data\fR" 4
10830 .IX Item "-msep-data"
10831 Generate code that allows the data segment to be located in a different
10832 area of memory from the text segment.  This allows for execute in place in
10833 an environment without virtual memory management by eliminating relocations
10834 against the text section.
10835 .IP "\fB\-mno\-sep\-data\fR" 4
10836 .IX Item "-mno-sep-data"
10837 Generate code that assumes that the data segment follows the text segment.
10838 This is the default.
10839 .IP "\fB\-mlong\-calls\fR" 4
10840 .IX Item "-mlong-calls"
10841 .PD 0
10842 .IP "\fB\-mno\-long\-calls\fR" 4
10843 .IX Item "-mno-long-calls"
10844 .PD
10845 Tells the compiler to perform function calls by first loading the
10846 address of the function into a register and then performing a subroutine
10847 call on this register.  This switch is needed if the target function
10848 lies outside of the 24\-bit addressing range of the offset-based
10849 version of subroutine call instruction.
10850 .Sp
10851 This feature is not enabled by default.  Specifying
10852 \&\fB\-mno\-long\-calls\fR will restore the default behavior.  Note these
10853 switches have no effect on how the compiler generates code to handle
10854 function calls via function pointers.
10855 .IP "\fB\-mfast\-fp\fR" 4
10856 .IX Item "-mfast-fp"
10857 Link with the fast floating-point library. This library relaxes some of
10858 the \s-1IEEE\s0 floating-point standard's rules for checking inputs against
10859 Not-a-Number (\s-1NAN\s0), in the interest of performance.
10860 .IP "\fB\-minline\-plt\fR" 4
10861 .IX Item "-minline-plt"
10862 Enable inlining of \s-1PLT\s0 entries in function calls to functions that are
10863 not known to bind locally.  It has no effect without \fB\-mfdpic\fR.
10864 .IP "\fB\-mmulticore\fR" 4
10865 .IX Item "-mmulticore"
10866 Build standalone application for multicore Blackfin processor. Proper
10867 start files and link scripts will be used to support multicore.
10868 This option defines \f(CW\*(C`_\|_BFIN_MULTICORE\*(C'\fR. It can only be used with
10869 \&\fB\-mcpu=bf561\fR[\fB\-\fR\fIsirevision\fR]. It can be used with
10870 \&\fB\-mcorea\fR or \fB\-mcoreb\fR. If it's used without
10871 \&\fB\-mcorea\fR or \fB\-mcoreb\fR, single application/dual core
10872 programming model is used. In this model, the main function of Core B
10873 should be named as coreb_main. If it's used with \fB\-mcorea\fR or
10874 \&\fB\-mcoreb\fR, one application per core programming model is used.
10875 If this option is not used, single core application programming
10876 model is used.
10877 .IP "\fB\-mcorea\fR" 4
10878 .IX Item "-mcorea"
10879 Build standalone application for Core A of \s-1BF561\s0 when using
10880 one application per core programming model. Proper start files
10881 and link scripts will be used to support Core A. This option
10882 defines \f(CW\*(C`_\|_BFIN_COREA\*(C'\fR. It must be used with \fB\-mmulticore\fR.
10883 .IP "\fB\-mcoreb\fR" 4
10884 .IX Item "-mcoreb"
10885 Build standalone application for Core B of \s-1BF561\s0 when using
10886 one application per core programming model. Proper start files
10887 and link scripts will be used to support Core B. This option
10888 defines \f(CW\*(C`_\|_BFIN_COREB\*(C'\fR. When this option is used, coreb_main
10889 should be used instead of main. It must be used with
10890 \&\fB\-mmulticore\fR.
10891 .IP "\fB\-msdram\fR" 4
10892 .IX Item "-msdram"
10893 Build standalone application for \s-1SDRAM\s0. Proper start files and
10894 link scripts will be used to put the application into \s-1SDRAM\s0.
10895 Loader should initialize \s-1SDRAM\s0 before loading the application
10896 into \s-1SDRAM\s0. This option defines \f(CW\*(C`_\|_BFIN_SDRAM\*(C'\fR.
10897 .IP "\fB\-micplb\fR" 4
10898 .IX Item "-micplb"
10899 Assume that ICPLBs are enabled at run time.  This has an effect on certain
10900 anomaly workarounds.  For Linux targets, the default is to assume ICPLBs
10901 are enabled; for standalone applications the default is off.
10902 .PP
10903 \fIC6X Options\fR
10904 .IX Subsection "C6X Options"
10905 .IP "\fB\-march=\fR\fIname\fR" 4
10906 .IX Item "-march=name"
10907 This specifies the name of the target architecture.  \s-1GCC\s0 uses this
10908 name to determine what kind of instructions it can emit when generating
10909 assembly code.  Permissible names are: \fBc62x\fR,
10910 \&\fBc64x\fR, \fBc64x+\fR, \fBc67x\fR, \fBc67x+\fR, \fBc674x\fR.
10911 .IP "\fB\-mbig\-endian\fR" 4
10912 .IX Item "-mbig-endian"
10913 Generate code for a big-endian target.
10914 .IP "\fB\-mlittle\-endian\fR" 4
10915 .IX Item "-mlittle-endian"
10916 Generate code for a little-endian target.  This is the default.
10917 .IP "\fB\-msim\fR" 4
10918 .IX Item "-msim"
10919 Choose startup files and linker script suitable for the simulator.
10920 .IP "\fB\-msdata=default\fR" 4
10921 .IX Item "-msdata=default"
10922 Put small global and static data in the \fB.neardata\fR section,
10923 which is pointed to by register \f(CW\*(C`B14\*(C'\fR.  Put small uninitialized
10924 global and static data in the \fB.bss\fR section, which is adjacent
10925 to the \fB.neardata\fR section.  Put small read-only data into the
10926 \&\fB.rodata\fR section.  The corresponding sections used for large
10927 pieces of data are \fB.fardata\fR, \fB.far\fR and \fB.const\fR.
10928 .IP "\fB\-msdata=all\fR" 4
10929 .IX Item "-msdata=all"
10930 Put all data, not just small objets, into the sections reserved for
10931 small data, and use addressing relative to the \f(CW\*(C`B14\*(C'\fR register to
10932 access them.
10933 .IP "\fB\-msdata=none\fR" 4
10934 .IX Item "-msdata=none"
10935 Make no use of the sections reserved for small data, and use absolute
10936 addresses to access all data.  Put all initialized global and static
10937 data in the \fB.fardata\fR section, and all uninitialized data in the
10938 \&\fB.far\fR section.  Put all constant data into the \fB.const\fR
10939 section.
10940 .PP
10941 \fI\s-1CRIS\s0 Options\fR
10942 .IX Subsection "CRIS Options"
10943 .PP
10944 These options are defined specifically for the \s-1CRIS\s0 ports.
10945 .IP "\fB\-march=\fR\fIarchitecture-type\fR" 4
10946 .IX Item "-march=architecture-type"
10947 .PD 0
10948 .IP "\fB\-mcpu=\fR\fIarchitecture-type\fR" 4
10949 .IX Item "-mcpu=architecture-type"
10950 .PD
10951 Generate code for the specified architecture.  The choices for
10952 \&\fIarchitecture-type\fR are \fBv3\fR, \fBv8\fR and \fBv10\fR for
10953 respectively \s-1ETRAX\s0\ 4, \s-1ETRAX\s0\ 100, and \s-1ETRAX\s0\ 100\ \s-1LX\s0.
10954 Default is \fBv0\fR except for cris-axis-linux-gnu, where the default is
10955 \&\fBv10\fR.
10956 .IP "\fB\-mtune=\fR\fIarchitecture-type\fR" 4
10957 .IX Item "-mtune=architecture-type"
10958 Tune to \fIarchitecture-type\fR everything applicable about the generated
10959 code, except for the \s-1ABI\s0 and the set of available instructions.  The
10960 choices for \fIarchitecture-type\fR are the same as for
10961 \&\fB\-march=\fR\fIarchitecture-type\fR.
10962 .IP "\fB\-mmax\-stack\-frame=\fR\fIn\fR" 4
10963 .IX Item "-mmax-stack-frame=n"
10964 Warn when the stack frame of a function exceeds \fIn\fR bytes.
10965 .IP "\fB\-metrax4\fR" 4
10966 .IX Item "-metrax4"
10967 .PD 0
10968 .IP "\fB\-metrax100\fR" 4
10969 .IX Item "-metrax100"
10970 .PD
10971 The options \fB\-metrax4\fR and \fB\-metrax100\fR are synonyms for
10972 \&\fB\-march=v3\fR and \fB\-march=v8\fR respectively.
10973 .IP "\fB\-mmul\-bug\-workaround\fR" 4
10974 .IX Item "-mmul-bug-workaround"
10975 .PD 0
10976 .IP "\fB\-mno\-mul\-bug\-workaround\fR" 4
10977 .IX Item "-mno-mul-bug-workaround"
10978 .PD
10979 Work around a bug in the \f(CW\*(C`muls\*(C'\fR and \f(CW\*(C`mulu\*(C'\fR instructions for \s-1CPU\s0
10980 models where it applies.  This option is active by default.
10981 .IP "\fB\-mpdebug\fR" 4
10982 .IX Item "-mpdebug"
10983 Enable CRIS-specific verbose debug-related information in the assembly
10984 code.  This option also has the effect to turn off the \fB#NO_APP\fR
10985 formatted-code indicator to the assembler at the beginning of the
10986 assembly file.
10987 .IP "\fB\-mcc\-init\fR" 4
10988 .IX Item "-mcc-init"
10989 Do not use condition-code results from previous instruction; always emit
10990 compare and test instructions before use of condition codes.
10991 .IP "\fB\-mno\-side\-effects\fR" 4
10992 .IX Item "-mno-side-effects"
10993 Do not emit instructions with side-effects in addressing modes other than
10994 post-increment.
10995 .IP "\fB\-mstack\-align\fR" 4
10996 .IX Item "-mstack-align"
10997 .PD 0
10998 .IP "\fB\-mno\-stack\-align\fR" 4
10999 .IX Item "-mno-stack-align"
11000 .IP "\fB\-mdata\-align\fR" 4
11001 .IX Item "-mdata-align"
11002 .IP "\fB\-mno\-data\-align\fR" 4
11003 .IX Item "-mno-data-align"
11004 .IP "\fB\-mconst\-align\fR" 4
11005 .IX Item "-mconst-align"
11006 .IP "\fB\-mno\-const\-align\fR" 4
11007 .IX Item "-mno-const-align"
11008 .PD
11009 These options (no-options) arranges (eliminate arrangements) for the
11010 stack-frame, individual data and constants to be aligned for the maximum
11011 single data access size for the chosen \s-1CPU\s0 model.  The default is to
11012 arrange for 32\-bit alignment.  \s-1ABI\s0 details such as structure layout are
11013 not affected by these options.
11014 .IP "\fB\-m32\-bit\fR" 4
11015 .IX Item "-m32-bit"
11016 .PD 0
11017 .IP "\fB\-m16\-bit\fR" 4
11018 .IX Item "-m16-bit"
11019 .IP "\fB\-m8\-bit\fR" 4
11020 .IX Item "-m8-bit"
11021 .PD
11022 Similar to the stack\- data\- and const-align options above, these options
11023 arrange for stack-frame, writable data and constants to all be 32\-bit,
11024 16\-bit or 8\-bit aligned.  The default is 32\-bit alignment.
11025 .IP "\fB\-mno\-prologue\-epilogue\fR" 4
11026 .IX Item "-mno-prologue-epilogue"
11027 .PD 0
11028 .IP "\fB\-mprologue\-epilogue\fR" 4
11029 .IX Item "-mprologue-epilogue"
11030 .PD
11031 With \fB\-mno\-prologue\-epilogue\fR, the normal function prologue and
11032 epilogue which set up the stack frame are omitted and no return
11033 instructions or return sequences are generated in the code.  Use this
11034 option only together with visual inspection of the compiled code: no
11035 warnings or errors are generated when call-saved registers must be saved,
11036 or storage for local variable needs to be allocated.
11037 .IP "\fB\-mno\-gotplt\fR" 4
11038 .IX Item "-mno-gotplt"
11039 .PD 0
11040 .IP "\fB\-mgotplt\fR" 4
11041 .IX Item "-mgotplt"
11042 .PD
11043 With \fB\-fpic\fR and \fB\-fPIC\fR, don't generate (do generate)
11044 instruction sequences that load addresses for functions from the \s-1PLT\s0 part
11045 of the \s-1GOT\s0 rather than (traditional on other architectures) calls to the
11046 \&\s-1PLT\s0.  The default is \fB\-mgotplt\fR.
11047 .IP "\fB\-melf\fR" 4
11048 .IX Item "-melf"
11049 Legacy no-op option only recognized with the cris-axis-elf and
11050 cris-axis-linux-gnu targets.
11051 .IP "\fB\-mlinux\fR" 4
11052 .IX Item "-mlinux"
11053 Legacy no-op option only recognized with the cris-axis-linux-gnu target.
11054 .IP "\fB\-sim\fR" 4
11055 .IX Item "-sim"
11056 This option, recognized for the cris-axis-elf arranges
11057 to link with input-output functions from a simulator library.  Code,
11058 initialized data and zero-initialized data are allocated consecutively.
11059 .IP "\fB\-sim2\fR" 4
11060 .IX Item "-sim2"
11061 Like \fB\-sim\fR, but pass linker options to locate initialized data at
11062 0x40000000 and zero-initialized data at 0x80000000.
11063 .PP
11064 \fI\s-1CR16\s0 Options\fR
11065 .IX Subsection "CR16 Options"
11066 .PP
11067 These options are defined specifically for the \s-1CR16\s0 ports.
11068 .IP "\fB\-mmac\fR" 4
11069 .IX Item "-mmac"
11070 Enable the use of multiply-accumulate instructions. Disabled by default.
11071 .IP "\fB\-mcr16cplus\fR" 4
11072 .IX Item "-mcr16cplus"
11073 .PD 0
11074 .IP "\fB\-mcr16c\fR" 4
11075 .IX Item "-mcr16c"
11076 .PD
11077 Generate code for \s-1CR16C\s0 or \s-1CR16C+\s0 architecture. \s-1CR16C+\s0 architecture 
11078 is default.
11079 .IP "\fB\-msim\fR" 4
11080 .IX Item "-msim"
11081 Links the library libsim.a which is in compatible with simulator. Applicable
11082 to elf compiler only.
11083 .IP "\fB\-mint32\fR" 4
11084 .IX Item "-mint32"
11085 Choose integer type as 32\-bit wide.
11086 .IP "\fB\-mbit\-ops\fR" 4
11087 .IX Item "-mbit-ops"
11088 Generates sbit/cbit instructions for bit manipulations.
11089 .IP "\fB\-mdata\-model=\fR\fImodel\fR" 4
11090 .IX Item "-mdata-model=model"
11091 Choose a data model. The choices for \fImodel\fR are \fBnear\fR,
11092 \&\fBfar\fR or \fBmedium\fR. \fBmedium\fR is default.
11093 However, \fBfar\fR is not valid when \-mcr16c option is chosen as
11094 \&\s-1CR16C\s0 architecture does not support far data model.
11095 .PP
11096 \fIDarwin Options\fR
11097 .IX Subsection "Darwin Options"
11098 .PP
11099 These options are defined for all architectures running the Darwin operating
11100 system.
11101 .PP
11102 \&\s-1FSF\s0 \s-1GCC\s0 on Darwin does not create \*(L"fat\*(R" object files; it will create
11103 an object file for the single architecture that it was built to
11104 target.  Apple's \s-1GCC\s0 on Darwin does create \*(L"fat\*(R" files if multiple
11105 \&\fB\-arch\fR options are used; it does so by running the compiler or
11106 linker multiple times and joining the results together with
11107 \&\fIlipo\fR.
11108 .PP
11109 The subtype of the file created (like \fBppc7400\fR or \fBppc970\fR or
11110 \&\fBi686\fR) is determined by the flags that specify the \s-1ISA\s0
11111 that \s-1GCC\s0 is targetting, like \fB\-mcpu\fR or \fB\-march\fR.  The
11112 \&\fB\-force_cpusubtype_ALL\fR option can be used to override this.
11113 .PP
11114 The Darwin tools vary in their behavior when presented with an \s-1ISA\s0
11115 mismatch.  The assembler, \fIas\fR, will only permit instructions to
11116 be used that are valid for the subtype of the file it is generating,
11117 so you cannot put 64\-bit instructions in a \fBppc750\fR object file.
11118 The linker for shared libraries, \fI/usr/bin/libtool\fR, will fail
11119 and print an error if asked to create a shared library with a less
11120 restrictive subtype than its input files (for instance, trying to put
11121 a \fBppc970\fR object file in a \fBppc7400\fR library).  The linker
11122 for executables, \fIld\fR, will quietly give the executable the most
11123 restrictive subtype of any of its input files.
11124 .IP "\fB\-F\fR\fIdir\fR" 4
11125 .IX Item "-Fdir"
11126 Add the framework directory \fIdir\fR to the head of the list of
11127 directories to be searched for header files.  These directories are
11128 interleaved with those specified by \fB\-I\fR options and are
11129 scanned in a left-to-right order.
11130 .Sp
11131 A framework directory is a directory with frameworks in it.  A
11132 framework is a directory with a \fB\*(L"Headers\*(R"\fR and/or
11133 \&\fB\*(L"PrivateHeaders\*(R"\fR directory contained directly in it that ends
11134 in \fB\*(L".framework\*(R"\fR.  The name of a framework is the name of this
11135 directory excluding the \fB\*(L".framework\*(R"\fR.  Headers associated with
11136 the framework are found in one of those two directories, with
11137 \&\fB\*(L"Headers\*(R"\fR being searched first.  A subframework is a framework
11138 directory that is in a framework's \fB\*(L"Frameworks\*(R"\fR directory.
11139 Includes of subframework headers can only appear in a header of a
11140 framework that contains the subframework, or in a sibling subframework
11141 header.  Two subframeworks are siblings if they occur in the same
11142 framework.  A subframework should not have the same name as a
11143 framework, a warning will be issued if this is violated.  Currently a
11144 subframework cannot have subframeworks, in the future, the mechanism
11145 may be extended to support this.  The standard frameworks can be found
11146 in \fB\*(L"/System/Library/Frameworks\*(R"\fR and
11147 \&\fB\*(L"/Library/Frameworks\*(R"\fR.  An example include looks like
11148 \&\f(CW\*(C`#include <Framework/header.h>\*(C'\fR, where \fBFramework\fR denotes
11149 the name of the framework and header.h is found in the
11150 \&\fB\*(L"PrivateHeaders\*(R"\fR or \fB\*(L"Headers\*(R"\fR directory.
11151 .IP "\fB\-iframework\fR\fIdir\fR" 4
11152 .IX Item "-iframeworkdir"
11153 Like \fB\-F\fR except the directory is a treated as a system
11154 directory.  The main difference between this \fB\-iframework\fR and
11155 \&\fB\-F\fR is that with \fB\-iframework\fR the compiler does not
11156 warn about constructs contained within header files found via
11157 \&\fIdir\fR.  This option is valid only for the C family of languages.
11158 .IP "\fB\-gused\fR" 4
11159 .IX Item "-gused"
11160 Emit debugging information for symbols that are used.  For \s-1STABS\s0
11161 debugging format, this enables \fB\-feliminate\-unused\-debug\-symbols\fR.
11162 This is by default \s-1ON\s0.
11163 .IP "\fB\-gfull\fR" 4
11164 .IX Item "-gfull"
11165 Emit debugging information for all symbols and types.
11166 .IP "\fB\-mmacosx\-version\-min=\fR\fIversion\fR" 4
11167 .IX Item "-mmacosx-version-min=version"
11168 The earliest version of MacOS X that this executable will run on
11169 is \fIversion\fR.  Typical values of \fIversion\fR include \f(CW10.1\fR,
11170 \&\f(CW10.2\fR, and \f(CW10.3.9\fR.
11171 .Sp
11172 If the compiler was built to use the system's headers by default,
11173 then the default for this option is the system version on which the
11174 compiler is running, otherwise the default is to make choices that
11175 are compatible with as many systems and code bases as possible.
11176 .IP "\fB\-mkernel\fR" 4
11177 .IX Item "-mkernel"
11178 Enable kernel development mode.  The \fB\-mkernel\fR option sets
11179 \&\fB\-static\fR, \fB\-fno\-common\fR, \fB\-fno\-cxa\-atexit\fR,
11180 \&\fB\-fno\-exceptions\fR, \fB\-fno\-non\-call\-exceptions\fR,
11181 \&\fB\-fapple\-kext\fR, \fB\-fno\-weak\fR and \fB\-fno\-rtti\fR where
11182 applicable.  This mode also sets \fB\-mno\-altivec\fR,
11183 \&\fB\-msoft\-float\fR, \fB\-fno\-builtin\fR and
11184 \&\fB\-mlong\-branch\fR for PowerPC targets.
11185 .IP "\fB\-mone\-byte\-bool\fR" 4
11186 .IX Item "-mone-byte-bool"
11187 Override the defaults for \fBbool\fR so that \fBsizeof(bool)==1\fR.
11188 By default \fBsizeof(bool)\fR is \fB4\fR when compiling for
11189 Darwin/PowerPC and \fB1\fR when compiling for Darwin/x86, so this
11190 option has no effect on x86.
11191 .Sp
11192 \&\fBWarning:\fR The \fB\-mone\-byte\-bool\fR switch causes \s-1GCC\s0
11193 to generate code that is not binary compatible with code generated
11194 without that switch.  Using this switch may require recompiling all
11195 other modules in a program, including system libraries.  Use this
11196 switch to conform to a non-default data model.
11197 .IP "\fB\-mfix\-and\-continue\fR" 4
11198 .IX Item "-mfix-and-continue"
11199 .PD 0
11200 .IP "\fB\-ffix\-and\-continue\fR" 4
11201 .IX Item "-ffix-and-continue"
11202 .IP "\fB\-findirect\-data\fR" 4
11203 .IX Item "-findirect-data"
11204 .PD
11205 Generate code suitable for fast turn around development.  Needed to
11206 enable gdb to dynamically load \f(CW\*(C`.o\*(C'\fR files into already running
11207 programs.  \fB\-findirect\-data\fR and \fB\-ffix\-and\-continue\fR
11208 are provided for backwards compatibility.
11209 .IP "\fB\-all_load\fR" 4
11210 .IX Item "-all_load"
11211 Loads all members of static archive libraries.
11212 See man \fIld\fR\|(1) for more information.
11213 .IP "\fB\-arch_errors_fatal\fR" 4
11214 .IX Item "-arch_errors_fatal"
11215 Cause the errors having to do with files that have the wrong architecture
11216 to be fatal.
11217 .IP "\fB\-bind_at_load\fR" 4
11218 .IX Item "-bind_at_load"
11219 Causes the output file to be marked such that the dynamic linker will
11220 bind all undefined references when the file is loaded or launched.
11221 .IP "\fB\-bundle\fR" 4
11222 .IX Item "-bundle"
11223 Produce a Mach-o bundle format file.
11224 See man \fIld\fR\|(1) for more information.
11225 .IP "\fB\-bundle_loader\fR \fIexecutable\fR" 4
11226 .IX Item "-bundle_loader executable"
11227 This option specifies the \fIexecutable\fR that will be loading the build
11228 output file being linked.  See man \fIld\fR\|(1) for more information.
11229 .IP "\fB\-dynamiclib\fR" 4
11230 .IX Item "-dynamiclib"
11231 When passed this option, \s-1GCC\s0 will produce a dynamic library instead of
11232 an executable when linking, using the Darwin \fIlibtool\fR command.
11233 .IP "\fB\-force_cpusubtype_ALL\fR" 4
11234 .IX Item "-force_cpusubtype_ALL"
11235 This causes \s-1GCC\s0's output file to have the \fI\s-1ALL\s0\fR subtype, instead of
11236 one controlled by the \fB\-mcpu\fR or \fB\-march\fR option.
11237 .IP "\fB\-allowable_client\fR  \fIclient_name\fR" 4
11238 .IX Item "-allowable_client  client_name"
11239 .PD 0
11240 .IP "\fB\-client_name\fR" 4
11241 .IX Item "-client_name"
11242 .IP "\fB\-compatibility_version\fR" 4
11243 .IX Item "-compatibility_version"
11244 .IP "\fB\-current_version\fR" 4
11245 .IX Item "-current_version"
11246 .IP "\fB\-dead_strip\fR" 4
11247 .IX Item "-dead_strip"
11248 .IP "\fB\-dependency\-file\fR" 4
11249 .IX Item "-dependency-file"
11250 .IP "\fB\-dylib_file\fR" 4
11251 .IX Item "-dylib_file"
11252 .IP "\fB\-dylinker_install_name\fR" 4
11253 .IX Item "-dylinker_install_name"
11254 .IP "\fB\-dynamic\fR" 4
11255 .IX Item "-dynamic"
11256 .IP "\fB\-exported_symbols_list\fR" 4
11257 .IX Item "-exported_symbols_list"
11258 .IP "\fB\-filelist\fR" 4
11259 .IX Item "-filelist"
11260 .IP "\fB\-flat_namespace\fR" 4
11261 .IX Item "-flat_namespace"
11262 .IP "\fB\-force_flat_namespace\fR" 4
11263 .IX Item "-force_flat_namespace"
11264 .IP "\fB\-headerpad_max_install_names\fR" 4
11265 .IX Item "-headerpad_max_install_names"
11266 .IP "\fB\-image_base\fR" 4
11267 .IX Item "-image_base"
11268 .IP "\fB\-init\fR" 4
11269 .IX Item "-init"
11270 .IP "\fB\-install_name\fR" 4
11271 .IX Item "-install_name"
11272 .IP "\fB\-keep_private_externs\fR" 4
11273 .IX Item "-keep_private_externs"
11274 .IP "\fB\-multi_module\fR" 4
11275 .IX Item "-multi_module"
11276 .IP "\fB\-multiply_defined\fR" 4
11277 .IX Item "-multiply_defined"
11278 .IP "\fB\-multiply_defined_unused\fR" 4
11279 .IX Item "-multiply_defined_unused"
11280 .IP "\fB\-noall_load\fR" 4
11281 .IX Item "-noall_load"
11282 .IP "\fB\-no_dead_strip_inits_and_terms\fR" 4
11283 .IX Item "-no_dead_strip_inits_and_terms"
11284 .IP "\fB\-nofixprebinding\fR" 4
11285 .IX Item "-nofixprebinding"
11286 .IP "\fB\-nomultidefs\fR" 4
11287 .IX Item "-nomultidefs"
11288 .IP "\fB\-noprebind\fR" 4
11289 .IX Item "-noprebind"
11290 .IP "\fB\-noseglinkedit\fR" 4
11291 .IX Item "-noseglinkedit"
11292 .IP "\fB\-pagezero_size\fR" 4
11293 .IX Item "-pagezero_size"
11294 .IP "\fB\-prebind\fR" 4
11295 .IX Item "-prebind"
11296 .IP "\fB\-prebind_all_twolevel_modules\fR" 4
11297 .IX Item "-prebind_all_twolevel_modules"
11298 .IP "\fB\-private_bundle\fR" 4
11299 .IX Item "-private_bundle"
11300 .IP "\fB\-read_only_relocs\fR" 4
11301 .IX Item "-read_only_relocs"
11302 .IP "\fB\-sectalign\fR" 4
11303 .IX Item "-sectalign"
11304 .IP "\fB\-sectobjectsymbols\fR" 4
11305 .IX Item "-sectobjectsymbols"
11306 .IP "\fB\-whyload\fR" 4
11307 .IX Item "-whyload"
11308 .IP "\fB\-seg1addr\fR" 4
11309 .IX Item "-seg1addr"
11310 .IP "\fB\-sectcreate\fR" 4
11311 .IX Item "-sectcreate"
11312 .IP "\fB\-sectobjectsymbols\fR" 4
11313 .IX Item "-sectobjectsymbols"
11314 .IP "\fB\-sectorder\fR" 4
11315 .IX Item "-sectorder"
11316 .IP "\fB\-segaddr\fR" 4
11317 .IX Item "-segaddr"
11318 .IP "\fB\-segs_read_only_addr\fR" 4
11319 .IX Item "-segs_read_only_addr"
11320 .IP "\fB\-segs_read_write_addr\fR" 4
11321 .IX Item "-segs_read_write_addr"
11322 .IP "\fB\-seg_addr_table\fR" 4
11323 .IX Item "-seg_addr_table"
11324 .IP "\fB\-seg_addr_table_filename\fR" 4
11325 .IX Item "-seg_addr_table_filename"
11326 .IP "\fB\-seglinkedit\fR" 4
11327 .IX Item "-seglinkedit"
11328 .IP "\fB\-segprot\fR" 4
11329 .IX Item "-segprot"
11330 .IP "\fB\-segs_read_only_addr\fR" 4
11331 .IX Item "-segs_read_only_addr"
11332 .IP "\fB\-segs_read_write_addr\fR" 4
11333 .IX Item "-segs_read_write_addr"
11334 .IP "\fB\-single_module\fR" 4
11335 .IX Item "-single_module"
11336 .IP "\fB\-static\fR" 4
11337 .IX Item "-static"
11338 .IP "\fB\-sub_library\fR" 4
11339 .IX Item "-sub_library"
11340 .IP "\fB\-sub_umbrella\fR" 4
11341 .IX Item "-sub_umbrella"
11342 .IP "\fB\-twolevel_namespace\fR" 4
11343 .IX Item "-twolevel_namespace"
11344 .IP "\fB\-umbrella\fR" 4
11345 .IX Item "-umbrella"
11346 .IP "\fB\-undefined\fR" 4
11347 .IX Item "-undefined"
11348 .IP "\fB\-unexported_symbols_list\fR" 4
11349 .IX Item "-unexported_symbols_list"
11350 .IP "\fB\-weak_reference_mismatches\fR" 4
11351 .IX Item "-weak_reference_mismatches"
11352 .IP "\fB\-whatsloaded\fR" 4
11353 .IX Item "-whatsloaded"
11354 .PD
11355 These options are passed to the Darwin linker.  The Darwin linker man page
11356 describes them in detail.
11357 .PP
11358 \fI\s-1DEC\s0 Alpha Options\fR
11359 .IX Subsection "DEC Alpha Options"
11360 .PP
11361 These \fB\-m\fR options are defined for the \s-1DEC\s0 Alpha implementations:
11362 .IP "\fB\-mno\-soft\-float\fR" 4
11363 .IX Item "-mno-soft-float"
11364 .PD 0
11365 .IP "\fB\-msoft\-float\fR" 4
11366 .IX Item "-msoft-float"
11367 .PD
11368 Use (do not use) the hardware floating-point instructions for
11369 floating-point operations.  When \fB\-msoft\-float\fR is specified,
11370 functions in \fIlibgcc.a\fR will be used to perform floating-point
11371 operations.  Unless they are replaced by routines that emulate the
11372 floating-point operations, or compiled in such a way as to call such
11373 emulations routines, these routines will issue floating-point
11374 operations.   If you are compiling for an Alpha without floating-point
11375 operations, you must ensure that the library is built so as not to call
11376 them.
11377 .Sp
11378 Note that Alpha implementations without floating-point operations are
11379 required to have floating-point registers.
11380 .IP "\fB\-mfp\-reg\fR" 4
11381 .IX Item "-mfp-reg"
11382 .PD 0
11383 .IP "\fB\-mno\-fp\-regs\fR" 4
11384 .IX Item "-mno-fp-regs"
11385 .PD
11386 Generate code that uses (does not use) the floating-point register set.
11387 \&\fB\-mno\-fp\-regs\fR implies \fB\-msoft\-float\fR.  If the floating-point
11388 register set is not used, floating-point operands are passed in integer
11389 registers as if they were integers and floating-point results are passed
11390 in \f(CW$0\fR instead of \f(CW$f0\fR.  This is a non-standard calling sequence,
11391 so any function with a floating-point argument or return value called by code
11392 compiled with \fB\-mno\-fp\-regs\fR must also be compiled with that
11393 option.
11394 .Sp
11395 A typical use of this option is building a kernel that does not use,
11396 and hence need not save and restore, any floating-point registers.
11397 .IP "\fB\-mieee\fR" 4
11398 .IX Item "-mieee"
11399 The Alpha architecture implements floating-point hardware optimized for
11400 maximum performance.  It is mostly compliant with the \s-1IEEE\s0 floating-point
11401 standard.  However, for full compliance, software assistance is
11402 required.  This option generates code fully IEEE-compliant code
11403 \&\fIexcept\fR that the \fIinexact-flag\fR is not maintained (see below).
11404 If this option is turned on, the preprocessor macro \f(CW\*(C`_IEEE_FP\*(C'\fR is
11405 defined during compilation.  The resulting code is less efficient but is
11406 able to correctly support denormalized numbers and exceptional \s-1IEEE\s0
11407 values such as not-a-number and plus/minus infinity.  Other Alpha
11408 compilers call this option \fB\-ieee_with_no_inexact\fR.
11409 .IP "\fB\-mieee\-with\-inexact\fR" 4
11410 .IX Item "-mieee-with-inexact"
11411 This is like \fB\-mieee\fR except the generated code also maintains
11412 the \s-1IEEE\s0 \fIinexact-flag\fR.  Turning on this option causes the
11413 generated code to implement fully-compliant \s-1IEEE\s0 math.  In addition to
11414 \&\f(CW\*(C`_IEEE_FP\*(C'\fR, \f(CW\*(C`_IEEE_FP_EXACT\*(C'\fR is defined as a preprocessor
11415 macro.  On some Alpha implementations the resulting code may execute
11416 significantly slower than the code generated by default.  Since there is
11417 very little code that depends on the \fIinexact-flag\fR, you should
11418 normally not specify this option.  Other Alpha compilers call this
11419 option \fB\-ieee_with_inexact\fR.
11420 .IP "\fB\-mfp\-trap\-mode=\fR\fItrap-mode\fR" 4
11421 .IX Item "-mfp-trap-mode=trap-mode"
11422 This option controls what floating-point related traps are enabled.
11423 Other Alpha compilers call this option \fB\-fptm\fR \fItrap-mode\fR.
11424 The trap mode can be set to one of four values:
11425 .RS 4
11426 .IP "\fBn\fR" 4
11427 .IX Item "n"
11428 This is the default (normal) setting.  The only traps that are enabled
11429 are the ones that cannot be disabled in software (e.g., division by zero
11430 trap).
11431 .IP "\fBu\fR" 4
11432 .IX Item "u"
11433 In addition to the traps enabled by \fBn\fR, underflow traps are enabled
11434 as well.
11435 .IP "\fBsu\fR" 4
11436 .IX Item "su"
11437 Like \fBu\fR, but the instructions are marked to be safe for software
11438 completion (see Alpha architecture manual for details).
11439 .IP "\fBsui\fR" 4
11440 .IX Item "sui"
11441 Like \fBsu\fR, but inexact traps are enabled as well.
11442 .RE
11443 .RS 4
11444 .RE
11445 .IP "\fB\-mfp\-rounding\-mode=\fR\fIrounding-mode\fR" 4
11446 .IX Item "-mfp-rounding-mode=rounding-mode"
11447 Selects the \s-1IEEE\s0 rounding mode.  Other Alpha compilers call this option
11448 \&\fB\-fprm\fR \fIrounding-mode\fR.  The \fIrounding-mode\fR can be one
11449 of:
11450 .RS 4
11451 .IP "\fBn\fR" 4
11452 .IX Item "n"
11453 Normal \s-1IEEE\s0 rounding mode.  Floating-point numbers are rounded towards
11454 the nearest machine number or towards the even machine number in case
11455 of a tie.
11456 .IP "\fBm\fR" 4
11457 .IX Item "m"
11458 Round towards minus infinity.
11459 .IP "\fBc\fR" 4
11460 .IX Item "c"
11461 Chopped rounding mode.  Floating-point numbers are rounded towards zero.
11462 .IP "\fBd\fR" 4
11463 .IX Item "d"
11464 Dynamic rounding mode.  A field in the floating-point control register
11465 (\fIfpcr\fR, see Alpha architecture reference manual) controls the
11466 rounding mode in effect.  The C library initializes this register for
11467 rounding towards plus infinity.  Thus, unless your program modifies the
11468 \&\fIfpcr\fR, \fBd\fR corresponds to round towards plus infinity.
11469 .RE
11470 .RS 4
11471 .RE
11472 .IP "\fB\-mtrap\-precision=\fR\fItrap-precision\fR" 4
11473 .IX Item "-mtrap-precision=trap-precision"
11474 In the Alpha architecture, floating-point traps are imprecise.  This
11475 means without software assistance it is impossible to recover from a
11476 floating trap and program execution normally needs to be terminated.
11477 \&\s-1GCC\s0 can generate code that can assist operating system trap handlers
11478 in determining the exact location that caused a floating-point trap.
11479 Depending on the requirements of an application, different levels of
11480 precisions can be selected:
11481 .RS 4
11482 .IP "\fBp\fR" 4
11483 .IX Item "p"
11484 Program precision.  This option is the default and means a trap handler
11485 can only identify which program caused a floating-point exception.
11486 .IP "\fBf\fR" 4
11487 .IX Item "f"
11488 Function precision.  The trap handler can determine the function that
11489 caused a floating-point exception.
11490 .IP "\fBi\fR" 4
11491 .IX Item "i"
11492 Instruction precision.  The trap handler can determine the exact
11493 instruction that caused a floating-point exception.
11494 .RE
11495 .RS 4
11496 .Sp
11497 Other Alpha compilers provide the equivalent options called
11498 \&\fB\-scope_safe\fR and \fB\-resumption_safe\fR.
11499 .RE
11500 .IP "\fB\-mieee\-conformant\fR" 4
11501 .IX Item "-mieee-conformant"
11502 This option marks the generated code as \s-1IEEE\s0 conformant.  You must not
11503 use this option unless you also specify \fB\-mtrap\-precision=i\fR and either
11504 \&\fB\-mfp\-trap\-mode=su\fR or \fB\-mfp\-trap\-mode=sui\fR.  Its only effect
11505 is to emit the line \fB.eflag 48\fR in the function prologue of the
11506 generated assembly file.  Under \s-1DEC\s0 Unix, this has the effect that
11507 IEEE-conformant math library routines will be linked in.
11508 .IP "\fB\-mbuild\-constants\fR" 4
11509 .IX Item "-mbuild-constants"
11510 Normally \s-1GCC\s0 examines a 32\- or 64\-bit integer constant to
11511 see if it can construct it from smaller constants in two or three
11512 instructions.  If it cannot, it will output the constant as a literal and
11513 generate code to load it from the data segment at run time.
11514 .Sp
11515 Use this option to require \s-1GCC\s0 to construct \fIall\fR integer constants
11516 using code, even if it takes more instructions (the maximum is six).
11517 .Sp
11518 You would typically use this option to build a shared library dynamic
11519 loader.  Itself a shared library, it must relocate itself in memory
11520 before it can find the variables and constants in its own data segment.
11521 .IP "\fB\-malpha\-as\fR" 4
11522 .IX Item "-malpha-as"
11523 .PD 0
11524 .IP "\fB\-mgas\fR" 4
11525 .IX Item "-mgas"
11526 .PD
11527 Select whether to generate code to be assembled by the vendor-supplied
11528 assembler (\fB\-malpha\-as\fR) or by the \s-1GNU\s0 assembler \fB\-mgas\fR.
11529 .IP "\fB\-mbwx\fR" 4
11530 .IX Item "-mbwx"
11531 .PD 0
11532 .IP "\fB\-mno\-bwx\fR" 4
11533 .IX Item "-mno-bwx"
11534 .IP "\fB\-mcix\fR" 4
11535 .IX Item "-mcix"
11536 .IP "\fB\-mno\-cix\fR" 4
11537 .IX Item "-mno-cix"
11538 .IP "\fB\-mfix\fR" 4
11539 .IX Item "-mfix"
11540 .IP "\fB\-mno\-fix\fR" 4
11541 .IX Item "-mno-fix"
11542 .IP "\fB\-mmax\fR" 4
11543 .IX Item "-mmax"
11544 .IP "\fB\-mno\-max\fR" 4
11545 .IX Item "-mno-max"
11546 .PD
11547 Indicate whether \s-1GCC\s0 should generate code to use the optional \s-1BWX\s0,
11548 \&\s-1CIX\s0, \s-1FIX\s0 and \s-1MAX\s0 instruction sets.  The default is to use the instruction
11549 sets supported by the \s-1CPU\s0 type specified via \fB\-mcpu=\fR option or that
11550 of the \s-1CPU\s0 on which \s-1GCC\s0 was built if none was specified.
11551 .IP "\fB\-mfloat\-vax\fR" 4
11552 .IX Item "-mfloat-vax"
11553 .PD 0
11554 .IP "\fB\-mfloat\-ieee\fR" 4
11555 .IX Item "-mfloat-ieee"
11556 .PD
11557 Generate code that uses (does not use) \s-1VAX\s0 F and G floating-point
11558 arithmetic instead of \s-1IEEE\s0 single and double precision.
11559 .IP "\fB\-mexplicit\-relocs\fR" 4
11560 .IX Item "-mexplicit-relocs"
11561 .PD 0
11562 .IP "\fB\-mno\-explicit\-relocs\fR" 4
11563 .IX Item "-mno-explicit-relocs"
11564 .PD
11565 Older Alpha assemblers provided no way to generate symbol relocations
11566 except via assembler macros.  Use of these macros does not allow
11567 optimal instruction scheduling.  \s-1GNU\s0 binutils as of version 2.12
11568 supports a new syntax that allows the compiler to explicitly mark
11569 which relocations should apply to which instructions.  This option
11570 is mostly useful for debugging, as \s-1GCC\s0 detects the capabilities of
11571 the assembler when it is built and sets the default accordingly.
11572 .IP "\fB\-msmall\-data\fR" 4
11573 .IX Item "-msmall-data"
11574 .PD 0
11575 .IP "\fB\-mlarge\-data\fR" 4
11576 .IX Item "-mlarge-data"
11577 .PD
11578 When \fB\-mexplicit\-relocs\fR is in effect, static data is
11579 accessed via \fIgp-relative\fR relocations.  When \fB\-msmall\-data\fR
11580 is used, objects 8 bytes long or smaller are placed in a \fIsmall data area\fR
11581 (the \f(CW\*(C`.sdata\*(C'\fR and \f(CW\*(C`.sbss\*(C'\fR sections) and are accessed via
11582 16\-bit relocations off of the \f(CW$gp\fR register.  This limits the
11583 size of the small data area to 64KB, but allows the variables to be
11584 directly accessed via a single instruction.
11585 .Sp
11586 The default is \fB\-mlarge\-data\fR.  With this option the data area
11587 is limited to just below 2GB.  Programs that require more than 2GB of
11588 data must use \f(CW\*(C`malloc\*(C'\fR or \f(CW\*(C`mmap\*(C'\fR to allocate the data in the
11589 heap instead of in the program's data segment.
11590 .Sp
11591 When generating code for shared libraries, \fB\-fpic\fR implies
11592 \&\fB\-msmall\-data\fR and \fB\-fPIC\fR implies \fB\-mlarge\-data\fR.
11593 .IP "\fB\-msmall\-text\fR" 4
11594 .IX Item "-msmall-text"
11595 .PD 0
11596 .IP "\fB\-mlarge\-text\fR" 4
11597 .IX Item "-mlarge-text"
11598 .PD
11599 When \fB\-msmall\-text\fR is used, the compiler assumes that the
11600 code of the entire program (or shared library) fits in 4MB, and is
11601 thus reachable with a branch instruction.  When \fB\-msmall\-data\fR
11602 is used, the compiler can assume that all local symbols share the
11603 same \f(CW$gp\fR value, and thus reduce the number of instructions
11604 required for a function call from 4 to 1.
11605 .Sp
11606 The default is \fB\-mlarge\-text\fR.
11607 .IP "\fB\-mcpu=\fR\fIcpu_type\fR" 4
11608 .IX Item "-mcpu=cpu_type"
11609 Set the instruction set and instruction scheduling parameters for
11610 machine type \fIcpu_type\fR.  You can specify either the \fB\s-1EV\s0\fR
11611 style name or the corresponding chip number.  \s-1GCC\s0 supports scheduling
11612 parameters for the \s-1EV4\s0, \s-1EV5\s0 and \s-1EV6\s0 family of processors and will
11613 choose the default values for the instruction set from the processor
11614 you specify.  If you do not specify a processor type, \s-1GCC\s0 will default
11615 to the processor on which the compiler was built.
11616 .Sp
11617 Supported values for \fIcpu_type\fR are
11618 .RS 4
11619 .IP "\fBev4\fR" 4
11620 .IX Item "ev4"
11621 .PD 0
11622 .IP "\fBev45\fR" 4
11623 .IX Item "ev45"
11624 .IP "\fB21064\fR" 4
11625 .IX Item "21064"
11626 .PD
11627 Schedules as an \s-1EV4\s0 and has no instruction set extensions.
11628 .IP "\fBev5\fR" 4
11629 .IX Item "ev5"
11630 .PD 0
11631 .IP "\fB21164\fR" 4
11632 .IX Item "21164"
11633 .PD
11634 Schedules as an \s-1EV5\s0 and has no instruction set extensions.
11635 .IP "\fBev56\fR" 4
11636 .IX Item "ev56"
11637 .PD 0
11638 .IP "\fB21164a\fR" 4
11639 .IX Item "21164a"
11640 .PD
11641 Schedules as an \s-1EV5\s0 and supports the \s-1BWX\s0 extension.
11642 .IP "\fBpca56\fR" 4
11643 .IX Item "pca56"
11644 .PD 0
11645 .IP "\fB21164pc\fR" 4
11646 .IX Item "21164pc"
11647 .IP "\fB21164PC\fR" 4
11648 .IX Item "21164PC"
11649 .PD
11650 Schedules as an \s-1EV5\s0 and supports the \s-1BWX\s0 and \s-1MAX\s0 extensions.
11651 .IP "\fBev6\fR" 4
11652 .IX Item "ev6"
11653 .PD 0
11654 .IP "\fB21264\fR" 4
11655 .IX Item "21264"
11656 .PD
11657 Schedules as an \s-1EV6\s0 and supports the \s-1BWX\s0, \s-1FIX\s0, and \s-1MAX\s0 extensions.
11658 .IP "\fBev67\fR" 4
11659 .IX Item "ev67"
11660 .PD 0
11661 .IP "\fB21264a\fR" 4
11662 .IX Item "21264a"
11663 .PD
11664 Schedules as an \s-1EV6\s0 and supports the \s-1BWX\s0, \s-1CIX\s0, \s-1FIX\s0, and \s-1MAX\s0 extensions.
11665 .RE
11666 .RS 4
11667 .Sp
11668 Native toolchains also support the value \fBnative\fR,
11669 which selects the best architecture option for the host processor.
11670 \&\fB\-mcpu=native\fR has no effect if \s-1GCC\s0 does not recognize
11671 the processor.
11672 .RE
11673 .IP "\fB\-mtune=\fR\fIcpu_type\fR" 4
11674 .IX Item "-mtune=cpu_type"
11675 Set only the instruction scheduling parameters for machine type
11676 \&\fIcpu_type\fR.  The instruction set is not changed.
11677 .Sp
11678 Native toolchains also support the value \fBnative\fR,
11679 which selects the best architecture option for the host processor.
11680 \&\fB\-mtune=native\fR has no effect if \s-1GCC\s0 does not recognize
11681 the processor.
11682 .IP "\fB\-mmemory\-latency=\fR\fItime\fR" 4
11683 .IX Item "-mmemory-latency=time"
11684 Sets the latency the scheduler should assume for typical memory
11685 references as seen by the application.  This number is highly
11686 dependent on the memory access patterns used by the application
11687 and the size of the external cache on the machine.
11688 .Sp
11689 Valid options for \fItime\fR are
11690 .RS 4
11691 .IP "\fInumber\fR" 4
11692 .IX Item "number"
11693 A decimal number representing clock cycles.
11694 .IP "\fBL1\fR" 4
11695 .IX Item "L1"
11696 .PD 0
11697 .IP "\fBL2\fR" 4
11698 .IX Item "L2"
11699 .IP "\fBL3\fR" 4
11700 .IX Item "L3"
11701 .IP "\fBmain\fR" 4
11702 .IX Item "main"
11703 .PD
11704 The compiler contains estimates of the number of clock cycles for
11705 \&\*(L"typical\*(R" \s-1EV4\s0 & \s-1EV5\s0 hardware for the Level 1, 2 & 3 caches
11706 (also called Dcache, Scache, and Bcache), as well as to main memory.
11707 Note that L3 is only valid for \s-1EV5\s0.
11708 .RE
11709 .RS 4
11710 .RE
11711 .PP
11712 \fI\s-1DEC\s0 Alpha/VMS Options\fR
11713 .IX Subsection "DEC Alpha/VMS Options"
11714 .PP
11715 These \fB\-m\fR options are defined for the \s-1DEC\s0 Alpha/VMS implementations:
11716 .IP "\fB\-mvms\-return\-codes\fR" 4
11717 .IX Item "-mvms-return-codes"
11718 Return \s-1VMS\s0 condition codes from main.  The default is to return \s-1POSIX\s0
11719 style condition (e.g. error) codes.
11720 .IP "\fB\-mdebug\-main=\fR\fIprefix\fR" 4
11721 .IX Item "-mdebug-main=prefix"
11722 Flag the first routine whose name starts with \fIprefix\fR as the main
11723 routine for the debugger.
11724 .IP "\fB\-mmalloc64\fR" 4
11725 .IX Item "-mmalloc64"
11726 Default to 64\-bit memory allocation routines.
11727 .PP
11728 \fI\s-1FR30\s0 Options\fR
11729 .IX Subsection "FR30 Options"
11730 .PP
11731 These options are defined specifically for the \s-1FR30\s0 port.
11732 .IP "\fB\-msmall\-model\fR" 4
11733 .IX Item "-msmall-model"
11734 Use the small address space model.  This can produce smaller code, but
11735 it does assume that all symbolic values and addresses will fit into a
11736 20\-bit range.
11737 .IP "\fB\-mno\-lsim\fR" 4
11738 .IX Item "-mno-lsim"
11739 Assume that runtime support has been provided and so there is no need
11740 to include the simulator library (\fIlibsim.a\fR) on the linker
11741 command line.
11742 .PP
11743 \fI\s-1FRV\s0 Options\fR
11744 .IX Subsection "FRV Options"
11745 .IP "\fB\-mgpr\-32\fR" 4
11746 .IX Item "-mgpr-32"
11747 Only use the first 32 general-purpose registers.
11748 .IP "\fB\-mgpr\-64\fR" 4
11749 .IX Item "-mgpr-64"
11750 Use all 64 general-purpose registers.
11751 .IP "\fB\-mfpr\-32\fR" 4
11752 .IX Item "-mfpr-32"
11753 Use only the first 32 floating-point registers.
11754 .IP "\fB\-mfpr\-64\fR" 4
11755 .IX Item "-mfpr-64"
11756 Use all 64 floating-point registers.
11757 .IP "\fB\-mhard\-float\fR" 4
11758 .IX Item "-mhard-float"
11759 Use hardware instructions for floating-point operations.
11760 .IP "\fB\-msoft\-float\fR" 4
11761 .IX Item "-msoft-float"
11762 Use library routines for floating-point operations.
11763 .IP "\fB\-malloc\-cc\fR" 4
11764 .IX Item "-malloc-cc"
11765 Dynamically allocate condition code registers.
11766 .IP "\fB\-mfixed\-cc\fR" 4
11767 .IX Item "-mfixed-cc"
11768 Do not try to dynamically allocate condition code registers, only
11769 use \f(CW\*(C`icc0\*(C'\fR and \f(CW\*(C`fcc0\*(C'\fR.
11770 .IP "\fB\-mdword\fR" 4
11771 .IX Item "-mdword"
11772 Change \s-1ABI\s0 to use double word insns.
11773 .IP "\fB\-mno\-dword\fR" 4
11774 .IX Item "-mno-dword"
11775 Do not use double word instructions.
11776 .IP "\fB\-mdouble\fR" 4
11777 .IX Item "-mdouble"
11778 Use floating-point double instructions.
11779 .IP "\fB\-mno\-double\fR" 4
11780 .IX Item "-mno-double"
11781 Do not use floating-point double instructions.
11782 .IP "\fB\-mmedia\fR" 4
11783 .IX Item "-mmedia"
11784 Use media instructions.
11785 .IP "\fB\-mno\-media\fR" 4
11786 .IX Item "-mno-media"
11787 Do not use media instructions.
11788 .IP "\fB\-mmuladd\fR" 4
11789 .IX Item "-mmuladd"
11790 Use multiply and add/subtract instructions.
11791 .IP "\fB\-mno\-muladd\fR" 4
11792 .IX Item "-mno-muladd"
11793 Do not use multiply and add/subtract instructions.
11794 .IP "\fB\-mfdpic\fR" 4
11795 .IX Item "-mfdpic"
11796 Select the \s-1FDPIC\s0 \s-1ABI\s0, which uses function descriptors to represent
11797 pointers to functions.  Without any PIC/PIE\-related options, it
11798 implies \fB\-fPIE\fR.  With \fB\-fpic\fR or \fB\-fpie\fR, it
11799 assumes \s-1GOT\s0 entries and small data are within a 12\-bit range from the
11800 \&\s-1GOT\s0 base address; with \fB\-fPIC\fR or \fB\-fPIE\fR, \s-1GOT\s0 offsets
11801 are computed with 32 bits.
11802 With a \fBbfin-elf\fR target, this option implies \fB\-msim\fR.
11803 .IP "\fB\-minline\-plt\fR" 4
11804 .IX Item "-minline-plt"
11805 Enable inlining of \s-1PLT\s0 entries in function calls to functions that are
11806 not known to bind locally.  It has no effect without \fB\-mfdpic\fR.
11807 It's enabled by default if optimizing for speed and compiling for
11808 shared libraries (i.e., \fB\-fPIC\fR or \fB\-fpic\fR), or when an
11809 optimization option such as \fB\-O3\fR or above is present in the
11810 command line.
11811 .IP "\fB\-mTLS\fR" 4
11812 .IX Item "-mTLS"
11813 Assume a large \s-1TLS\s0 segment when generating thread-local code.
11814 .IP "\fB\-mtls\fR" 4
11815 .IX Item "-mtls"
11816 Do not assume a large \s-1TLS\s0 segment when generating thread-local code.
11817 .IP "\fB\-mgprel\-ro\fR" 4
11818 .IX Item "-mgprel-ro"
11819 Enable the use of \f(CW\*(C`GPREL\*(C'\fR relocations in the \s-1FDPIC\s0 \s-1ABI\s0 for data
11820 that is known to be in read-only sections.  It's enabled by default,
11821 except for \fB\-fpic\fR or \fB\-fpie\fR: even though it may help
11822 make the global offset table smaller, it trades 1 instruction for 4.
11823 With \fB\-fPIC\fR or \fB\-fPIE\fR, it trades 3 instructions for 4,
11824 one of which may be shared by multiple symbols, and it avoids the need
11825 for a \s-1GOT\s0 entry for the referenced symbol, so it's more likely to be a
11826 win.  If it is not, \fB\-mno\-gprel\-ro\fR can be used to disable it.
11827 .IP "\fB\-multilib\-library\-pic\fR" 4
11828 .IX Item "-multilib-library-pic"
11829 Link with the (library, not \s-1FD\s0) pic libraries.  It's implied by
11830 \&\fB\-mlibrary\-pic\fR, as well as by \fB\-fPIC\fR and
11831 \&\fB\-fpic\fR without \fB\-mfdpic\fR.  You should never have to use
11832 it explicitly.
11833 .IP "\fB\-mlinked\-fp\fR" 4
11834 .IX Item "-mlinked-fp"
11835 Follow the \s-1EABI\s0 requirement of always creating a frame pointer whenever
11836 a stack frame is allocated.  This option is enabled by default and can
11837 be disabled with \fB\-mno\-linked\-fp\fR.
11838 .IP "\fB\-mlong\-calls\fR" 4
11839 .IX Item "-mlong-calls"
11840 Use indirect addressing to call functions outside the current
11841 compilation unit.  This allows the functions to be placed anywhere
11842 within the 32\-bit address space.
11843 .IP "\fB\-malign\-labels\fR" 4
11844 .IX Item "-malign-labels"
11845 Try to align labels to an 8\-byte boundary by inserting nops into the
11846 previous packet.  This option only has an effect when \s-1VLIW\s0 packing
11847 is enabled.  It doesn't create new packets; it merely adds nops to
11848 existing ones.
11849 .IP "\fB\-mlibrary\-pic\fR" 4
11850 .IX Item "-mlibrary-pic"
11851 Generate position-independent \s-1EABI\s0 code.
11852 .IP "\fB\-macc\-4\fR" 4
11853 .IX Item "-macc-4"
11854 Use only the first four media accumulator registers.
11855 .IP "\fB\-macc\-8\fR" 4
11856 .IX Item "-macc-8"
11857 Use all eight media accumulator registers.
11858 .IP "\fB\-mpack\fR" 4
11859 .IX Item "-mpack"
11860 Pack \s-1VLIW\s0 instructions.
11861 .IP "\fB\-mno\-pack\fR" 4
11862 .IX Item "-mno-pack"
11863 Do not pack \s-1VLIW\s0 instructions.
11864 .IP "\fB\-mno\-eflags\fR" 4
11865 .IX Item "-mno-eflags"
11866 Do not mark \s-1ABI\s0 switches in e_flags.
11867 .IP "\fB\-mcond\-move\fR" 4
11868 .IX Item "-mcond-move"
11869 Enable the use of conditional-move instructions (default).
11870 .Sp
11871 This switch is mainly for debugging the compiler and will likely be removed
11872 in a future version.
11873 .IP "\fB\-mno\-cond\-move\fR" 4
11874 .IX Item "-mno-cond-move"
11875 Disable the use of conditional-move instructions.
11876 .Sp
11877 This switch is mainly for debugging the compiler and will likely be removed
11878 in a future version.
11879 .IP "\fB\-mscc\fR" 4
11880 .IX Item "-mscc"
11881 Enable the use of conditional set instructions (default).
11882 .Sp
11883 This switch is mainly for debugging the compiler and will likely be removed
11884 in a future version.
11885 .IP "\fB\-mno\-scc\fR" 4
11886 .IX Item "-mno-scc"
11887 Disable the use of conditional set instructions.
11888 .Sp
11889 This switch is mainly for debugging the compiler and will likely be removed
11890 in a future version.
11891 .IP "\fB\-mcond\-exec\fR" 4
11892 .IX Item "-mcond-exec"
11893 Enable the use of conditional execution (default).
11894 .Sp
11895 This switch is mainly for debugging the compiler and will likely be removed
11896 in a future version.
11897 .IP "\fB\-mno\-cond\-exec\fR" 4
11898 .IX Item "-mno-cond-exec"
11899 Disable the use of conditional execution.
11900 .Sp
11901 This switch is mainly for debugging the compiler and will likely be removed
11902 in a future version.
11903 .IP "\fB\-mvliw\-branch\fR" 4
11904 .IX Item "-mvliw-branch"
11905 Run a pass to pack branches into \s-1VLIW\s0 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\-vliw\-branch\fR" 4
11910 .IX Item "-mno-vliw-branch"
11911 Do not run a pass to pack branches into \s-1VLIW\s0 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\-mmulti\-cond\-exec\fR" 4
11916 .IX Item "-mmulti-cond-exec"
11917 Enable optimization of \f(CW\*(C`&&\*(C'\fR and \f(CW\*(C`||\*(C'\fR in conditional execution
11918 (default).
11919 .Sp
11920 This switch is mainly for debugging the compiler and will likely be removed
11921 in a future version.
11922 .IP "\fB\-mno\-multi\-cond\-exec\fR" 4
11923 .IX Item "-mno-multi-cond-exec"
11924 Disable optimization of \f(CW\*(C`&&\*(C'\fR and \f(CW\*(C`||\*(C'\fR in conditional execution.
11925 .Sp
11926 This switch is mainly for debugging the compiler and will likely be removed
11927 in a future version.
11928 .IP "\fB\-mnested\-cond\-exec\fR" 4
11929 .IX Item "-mnested-cond-exec"
11930 Enable nested conditional execution optimizations (default).
11931 .Sp
11932 This switch is mainly for debugging the compiler and will likely be removed
11933 in a future version.
11934 .IP "\fB\-mno\-nested\-cond\-exec\fR" 4
11935 .IX Item "-mno-nested-cond-exec"
11936 Disable nested conditional execution optimizations.
11937 .Sp
11938 This switch is mainly for debugging the compiler and will likely be removed
11939 in a future version.
11940 .IP "\fB\-moptimize\-membar\fR" 4
11941 .IX Item "-moptimize-membar"
11942 This switch removes redundant \f(CW\*(C`membar\*(C'\fR instructions from the
11943 compiler generated code.  It is enabled by default.
11944 .IP "\fB\-mno\-optimize\-membar\fR" 4
11945 .IX Item "-mno-optimize-membar"
11946 This switch disables the automatic removal of redundant \f(CW\*(C`membar\*(C'\fR
11947 instructions from the generated code.
11948 .IP "\fB\-mtomcat\-stats\fR" 4
11949 .IX Item "-mtomcat-stats"
11950 Cause gas to print out tomcat statistics.
11951 .IP "\fB\-mcpu=\fR\fIcpu\fR" 4
11952 .IX Item "-mcpu=cpu"
11953 Select the processor type for which to generate code.  Possible values are
11954 \&\fBfrv\fR, \fBfr550\fR, \fBtomcat\fR, \fBfr500\fR, \fBfr450\fR,
11955 \&\fBfr405\fR, \fBfr400\fR, \fBfr300\fR and \fBsimple\fR.
11956 .PP
11957 \fIGNU/Linux Options\fR
11958 .IX Subsection "GNU/Linux Options"
11959 .PP
11960 These \fB\-m\fR options are defined for GNU/Linux targets:
11961 .IP "\fB\-mglibc\fR" 4
11962 .IX Item "-mglibc"
11963 Use the \s-1GNU\s0 C library.  This is the default except
11964 on \fB*\-*\-linux\-*uclibc*\fR and \fB*\-*\-linux\-*android*\fR targets.
11965 .IP "\fB\-muclibc\fR" 4
11966 .IX Item "-muclibc"
11967 Use uClibc C library.  This is the default on
11968 \&\fB*\-*\-linux\-*uclibc*\fR targets.
11969 .IP "\fB\-mbionic\fR" 4
11970 .IX Item "-mbionic"
11971 Use Bionic C library.  This is the default on
11972 \&\fB*\-*\-linux\-*android*\fR targets.
11973 .IP "\fB\-mandroid\fR" 4
11974 .IX Item "-mandroid"
11975 Compile code compatible with Android platform.  This is the default on
11976 \&\fB*\-*\-linux\-*android*\fR targets.
11977 .Sp
11978 When compiling, this option enables \fB\-mbionic\fR, \fB\-fPIC\fR,
11979 \&\fB\-fno\-exceptions\fR and \fB\-fno\-rtti\fR by default.  When linking,
11980 this option makes the \s-1GCC\s0 driver pass Android-specific options to the linker.
11981 Finally, this option causes the preprocessor macro \f(CW\*(C`_\|_ANDROID_\|_\*(C'\fR
11982 to be defined.
11983 .IP "\fB\-tno\-android\-cc\fR" 4
11984 .IX Item "-tno-android-cc"
11985 Disable compilation effects of \fB\-mandroid\fR, i.e., do not enable
11986 \&\fB\-mbionic\fR, \fB\-fPIC\fR, \fB\-fno\-exceptions\fR and
11987 \&\fB\-fno\-rtti\fR by default.
11988 .IP "\fB\-tno\-android\-ld\fR" 4
11989 .IX Item "-tno-android-ld"
11990 Disable linking effects of \fB\-mandroid\fR, i.e., pass standard Linux
11991 linking options to the linker.
11992 .PP
11993 \fIH8/300 Options\fR
11994 .IX Subsection "H8/300 Options"
11995 .PP
11996 These \fB\-m\fR options are defined for the H8/300 implementations:
11997 .IP "\fB\-mrelax\fR" 4
11998 .IX Item "-mrelax"
11999 Shorten some address references at link time, when possible; uses the
12000 linker option \fB\-relax\fR.
12001 .IP "\fB\-mh\fR" 4
12002 .IX Item "-mh"
12003 Generate code for the H8/300H.
12004 .IP "\fB\-ms\fR" 4
12005 .IX Item "-ms"
12006 Generate code for the H8S.
12007 .IP "\fB\-mn\fR" 4
12008 .IX Item "-mn"
12009 Generate code for the H8S and H8/300H in the normal mode.  This switch
12010 must be used either with \fB\-mh\fR or \fB\-ms\fR.
12011 .IP "\fB\-ms2600\fR" 4
12012 .IX Item "-ms2600"
12013 Generate code for the H8S/2600.  This switch must be used with \fB\-ms\fR.
12014 .IP "\fB\-mint32\fR" 4
12015 .IX Item "-mint32"
12016 Make \f(CW\*(C`int\*(C'\fR data 32 bits by default.
12017 .IP "\fB\-malign\-300\fR" 4
12018 .IX Item "-malign-300"
12019 On the H8/300H and H8S, use the same alignment rules as for the H8/300.
12020 The default for the H8/300H and H8S is to align longs and floats on
12021 4\-byte boundaries.
12022 \&\fB\-malign\-300\fR causes them to be aligned on 2\-byte boundaries.
12023 This option has no effect on the H8/300.
12024 .PP
12025 \fI\s-1HPPA\s0 Options\fR
12026 .IX Subsection "HPPA Options"
12027 .PP
12028 These \fB\-m\fR options are defined for the \s-1HPPA\s0 family of computers:
12029 .IP "\fB\-march=\fR\fIarchitecture-type\fR" 4
12030 .IX Item "-march=architecture-type"
12031 Generate code for the specified architecture.  The choices for
12032 \&\fIarchitecture-type\fR are \fB1.0\fR for \s-1PA\s0 1.0, \fB1.1\fR for \s-1PA\s0
12033 1.1, and \fB2.0\fR for \s-1PA\s0 2.0 processors.  Refer to
12034 \&\fI/usr/lib/sched.models\fR on an HP-UX system to determine the proper
12035 architecture option for your machine.  Code compiled for lower numbered
12036 architectures will run on higher numbered architectures, but not the
12037 other way around.
12038 .IP "\fB\-mpa\-risc\-1\-0\fR" 4
12039 .IX Item "-mpa-risc-1-0"
12040 .PD 0
12041 .IP "\fB\-mpa\-risc\-1\-1\fR" 4
12042 .IX Item "-mpa-risc-1-1"
12043 .IP "\fB\-mpa\-risc\-2\-0\fR" 4
12044 .IX Item "-mpa-risc-2-0"
12045 .PD
12046 Synonyms for \fB\-march=1.0\fR, \fB\-march=1.1\fR, and \fB\-march=2.0\fR respectively.
12047 .IP "\fB\-mbig\-switch\fR" 4
12048 .IX Item "-mbig-switch"
12049 Generate code suitable for big switch tables.  Use this option only if
12050 the assembler/linker complain about out of range branches within a switch
12051 table.
12052 .IP "\fB\-mjump\-in\-delay\fR" 4
12053 .IX Item "-mjump-in-delay"
12054 Fill delay slots of function calls with unconditional jump instructions
12055 by modifying the return pointer for the function call to be the target
12056 of the conditional jump.
12057 .IP "\fB\-mdisable\-fpregs\fR" 4
12058 .IX Item "-mdisable-fpregs"
12059 Prevent floating-point registers from being used in any manner.  This is
12060 necessary for compiling kernels that perform lazy context switching of
12061 floating-point registers.  If you use this option and attempt to perform
12062 floating-point operations, the compiler aborts.
12063 .IP "\fB\-mdisable\-indexing\fR" 4
12064 .IX Item "-mdisable-indexing"
12065 Prevent the compiler from using indexing address modes.  This avoids some
12066 rather obscure problems when compiling \s-1MIG\s0 generated code under \s-1MACH\s0.
12067 .IP "\fB\-mno\-space\-regs\fR" 4
12068 .IX Item "-mno-space-regs"
12069 Generate code that assumes the target has no space registers.  This allows
12070 \&\s-1GCC\s0 to generate faster indirect calls and use unscaled index address modes.
12071 .Sp
12072 Such code is suitable for level 0 \s-1PA\s0 systems and kernels.
12073 .IP "\fB\-mfast\-indirect\-calls\fR" 4
12074 .IX Item "-mfast-indirect-calls"
12075 Generate code that assumes calls never cross space boundaries.  This
12076 allows \s-1GCC\s0 to emit code that performs faster indirect calls.
12077 .Sp
12078 This option will not work in the presence of shared libraries or nested
12079 functions.
12080 .IP "\fB\-mfixed\-range=\fR\fIregister-range\fR" 4
12081 .IX Item "-mfixed-range=register-range"
12082 Generate code treating the given register range as fixed registers.
12083 A fixed register is one that the register allocator can not use.  This is
12084 useful when compiling kernel code.  A register range is specified as
12085 two registers separated by a dash.  Multiple register ranges can be
12086 specified separated by a comma.
12087 .IP "\fB\-mlong\-load\-store\fR" 4
12088 .IX Item "-mlong-load-store"
12089 Generate 3\-instruction load and store sequences as sometimes required by
12090 the HP-UX 10 linker.  This is equivalent to the \fB+k\fR option to
12091 the \s-1HP\s0 compilers.
12092 .IP "\fB\-mportable\-runtime\fR" 4
12093 .IX Item "-mportable-runtime"
12094 Use the portable calling conventions proposed by \s-1HP\s0 for \s-1ELF\s0 systems.
12095 .IP "\fB\-mgas\fR" 4
12096 .IX Item "-mgas"
12097 Enable the use of assembler directives only \s-1GAS\s0 understands.
12098 .IP "\fB\-mschedule=\fR\fIcpu-type\fR" 4
12099 .IX Item "-mschedule=cpu-type"
12100 Schedule code according to the constraints for the machine type
12101 \&\fIcpu-type\fR.  The choices for \fIcpu-type\fR are \fB700\fR
12102 \&\fB7100\fR, \fB7100LC\fR, \fB7200\fR, \fB7300\fR and \fB8000\fR.  Refer
12103 to \fI/usr/lib/sched.models\fR on an HP-UX system to determine the
12104 proper scheduling option for your machine.  The default scheduling is
12105 \&\fB8000\fR.
12106 .IP "\fB\-mlinker\-opt\fR" 4
12107 .IX Item "-mlinker-opt"
12108 Enable the optimization pass in the HP-UX linker.  Note this makes symbolic
12109 debugging impossible.  It also triggers a bug in the HP-UX 8 and HP-UX 9
12110 linkers in which they give bogus error messages when linking some programs.
12111 .IP "\fB\-msoft\-float\fR" 4
12112 .IX Item "-msoft-float"
12113 Generate output containing library calls for floating point.
12114 \&\fBWarning:\fR the requisite libraries are not available for all \s-1HPPA\s0
12115 targets.  Normally the facilities of the machine's usual C compiler are
12116 used, but this cannot be done directly in cross-compilation.  You must make
12117 your own arrangements to provide suitable library functions for
12118 cross-compilation.
12119 .Sp
12120 \&\fB\-msoft\-float\fR changes the calling convention in the output file;
12121 therefore, it is only useful if you compile \fIall\fR of a program with
12122 this option.  In particular, you need to compile \fIlibgcc.a\fR, the
12123 library that comes with \s-1GCC\s0, with \fB\-msoft\-float\fR in order for
12124 this to work.
12125 .IP "\fB\-msio\fR" 4
12126 .IX Item "-msio"
12127 Generate the predefine, \f(CW\*(C`_SIO\*(C'\fR, for server \s-1IO\s0.  The default is
12128 \&\fB\-mwsio\fR.  This generates the predefines, \f(CW\*(C`_\|_hp9000s700\*(C'\fR,
12129 \&\f(CW\*(C`_\|_hp9000s700_\|_\*(C'\fR and \f(CW\*(C`_WSIO\*(C'\fR, for workstation \s-1IO\s0.  These
12130 options are available under HP-UX and HI-UX.
12131 .IP "\fB\-mgnu\-ld\fR" 4
12132 .IX Item "-mgnu-ld"
12133 Use \s-1GNU\s0 ld specific options.  This passes \fB\-shared\fR to ld when
12134 building a shared library.  It is the default when \s-1GCC\s0 is configured,
12135 explicitly or implicitly, with the \s-1GNU\s0 linker.  This option does not
12136 have any affect on which ld is called, it only changes what parameters
12137 are passed to that ld.  The ld that is called is determined by the
12138 \&\fB\-\-with\-ld\fR configure option, \s-1GCC\s0's program search path, and
12139 finally by the user's \fB\s-1PATH\s0\fR.  The linker used by \s-1GCC\s0 can be printed
12140 using \fBwhich `gcc \-print\-prog\-name=ld`\fR.  This option is only available
12141 on the 64\-bit HP-UX \s-1GCC\s0, i.e. configured with \fBhppa*64*\-*\-hpux*\fR.
12142 .IP "\fB\-mhp\-ld\fR" 4
12143 .IX Item "-mhp-ld"
12144 Use \s-1HP\s0 ld specific options.  This passes \fB\-b\fR to ld when building
12145 a shared library and passes \fB+Accept TypeMismatch\fR to ld on all
12146 links.  It is the default when \s-1GCC\s0 is configured, explicitly or
12147 implicitly, with the \s-1HP\s0 linker.  This option does not have any affect on
12148 which ld is called, it only changes what parameters are passed to that
12149 ld.  The ld that is called is determined by the \fB\-\-with\-ld\fR
12150 configure option, \s-1GCC\s0's program search path, and finally by the user's
12151 \&\fB\s-1PATH\s0\fR.  The linker used by \s-1GCC\s0 can be printed using \fBwhich
12152 `gcc \-print\-prog\-name=ld`\fR.  This option is only available on the 64\-bit
12153 HP-UX \s-1GCC\s0, i.e. configured with \fBhppa*64*\-*\-hpux*\fR.
12154 .IP "\fB\-mlong\-calls\fR" 4
12155 .IX Item "-mlong-calls"
12156 Generate code that uses long call sequences.  This ensures that a call
12157 is always able to reach linker generated stubs.  The default is to generate
12158 long calls only when the distance from the call site to the beginning
12159 of the function or translation unit, as the case may be, exceeds a
12160 predefined limit set by the branch type being used.  The limits for
12161 normal calls are 7,600,000 and 240,000 bytes, respectively for the
12162 \&\s-1PA\s0 2.0 and \s-1PA\s0 1.X architectures.  Sibcalls are always limited at
12163 240,000 bytes.
12164 .Sp
12165 Distances are measured from the beginning of functions when using the
12166 \&\fB\-ffunction\-sections\fR option, or when using the \fB\-mgas\fR
12167 and \fB\-mno\-portable\-runtime\fR options together under HP-UX with
12168 the \s-1SOM\s0 linker.
12169 .Sp
12170 It is normally not desirable to use this option as it will degrade
12171 performance.  However, it may be useful in large applications,
12172 particularly when partial linking is used to build the application.
12173 .Sp
12174 The types of long calls used depends on the capabilities of the
12175 assembler and linker, and the type of code being generated.  The
12176 impact on systems that support long absolute calls, and long pic
12177 symbol-difference or pc-relative calls should be relatively small.
12178 However, an indirect call is used on 32\-bit \s-1ELF\s0 systems in pic code
12179 and it is quite long.
12180 .IP "\fB\-munix=\fR\fIunix-std\fR" 4
12181 .IX Item "-munix=unix-std"
12182 Generate compiler predefines and select a startfile for the specified
12183 \&\s-1UNIX\s0 standard.  The choices for \fIunix-std\fR are \fB93\fR, \fB95\fR
12184 and \fB98\fR.  \fB93\fR is supported on all HP-UX versions.  \fB95\fR
12185 is available on HP-UX 10.10 and later.  \fB98\fR is available on HP-UX
12186 11.11 and later.  The default values are \fB93\fR for HP-UX 10.00,
12187 \&\fB95\fR for HP-UX 10.10 though to 11.00, and \fB98\fR for HP-UX 11.11
12188 and later.
12189 .Sp
12190 \&\fB\-munix=93\fR provides the same predefines as \s-1GCC\s0 3.3 and 3.4.
12191 \&\fB\-munix=95\fR provides additional predefines for \f(CW\*(C`XOPEN_UNIX\*(C'\fR
12192 and \f(CW\*(C`_XOPEN_SOURCE_EXTENDED\*(C'\fR, and the startfile \fIunix95.o\fR.
12193 \&\fB\-munix=98\fR provides additional predefines for \f(CW\*(C`_XOPEN_UNIX\*(C'\fR,
12194 \&\f(CW\*(C`_XOPEN_SOURCE_EXTENDED\*(C'\fR, \f(CW\*(C`_INCLUDE_\|_STDC_A1_SOURCE\*(C'\fR and
12195 \&\f(CW\*(C`_INCLUDE_XOPEN_SOURCE_500\*(C'\fR, and the startfile \fIunix98.o\fR.
12196 .Sp
12197 It is \fIimportant\fR to note that this option changes the interfaces
12198 for various library routines.  It also affects the operational behavior
12199 of the C library.  Thus, \fIextreme\fR care is needed in using this
12200 option.
12201 .Sp
12202 Library code that is intended to operate with more than one \s-1UNIX\s0
12203 standard must test, set and restore the variable \fI_\|_xpg4_extended_mask\fR
12204 as appropriate.  Most \s-1GNU\s0 software doesn't provide this capability.
12205 .IP "\fB\-nolibdld\fR" 4
12206 .IX Item "-nolibdld"
12207 Suppress the generation of link options to search libdld.sl when the
12208 \&\fB\-static\fR option is specified on HP-UX 10 and later.
12209 .IP "\fB\-static\fR" 4
12210 .IX Item "-static"
12211 The HP-UX implementation of setlocale in libc has a dependency on
12212 libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
12213 when the \fB\-static\fR option is specified, special link options
12214 are needed to resolve this dependency.
12215 .Sp
12216 On HP-UX 10 and later, the \s-1GCC\s0 driver adds the necessary options to
12217 link with libdld.sl when the \fB\-static\fR option is specified.
12218 This causes the resulting binary to be dynamic.  On the 64\-bit port,
12219 the linkers generate dynamic binaries by default in any case.  The
12220 \&\fB\-nolibdld\fR option can be used to prevent the \s-1GCC\s0 driver from
12221 adding these link options.
12222 .IP "\fB\-threads\fR" 4
12223 .IX Item "-threads"
12224 Add support for multithreading with the \fIdce thread\fR library
12225 under HP-UX.  This option sets flags for both the preprocessor and
12226 linker.
12227 .PP
12228 \fIIntel 386 and \s-1AMD\s0 x86\-64 Options\fR
12229 .IX Subsection "Intel 386 and AMD x86-64 Options"
12230 .PP
12231 These \fB\-m\fR options are defined for the i386 and x86\-64 family of
12232 computers:
12233 .IP "\fB\-mtune=\fR\fIcpu-type\fR" 4
12234 .IX Item "-mtune=cpu-type"
12235 Tune to \fIcpu-type\fR everything applicable about the generated code, except
12236 for the \s-1ABI\s0 and the set of available instructions.  The choices for
12237 \&\fIcpu-type\fR are:
12238 .RS 4
12239 .IP "\fIgeneric\fR" 4
12240 .IX Item "generic"
12241 Produce code optimized for the most common \s-1IA32/AMD64/EM64T\s0 processors.
12242 If you know the \s-1CPU\s0 on which your code will run, then you should use
12243 the corresponding \fB\-mtune\fR option instead of
12244 \&\fB\-mtune=generic\fR.  But, if you do not know exactly what \s-1CPU\s0 users
12245 of your application will have, then you should use this option.
12246 .Sp
12247 As new processors are deployed in the marketplace, the behavior of this
12248 option will change.  Therefore, if you upgrade to a newer version of
12249 \&\s-1GCC\s0, the code generated option will change to reflect the processors
12250 that were most common when that version of \s-1GCC\s0 was released.
12251 .Sp
12252 There is no \fB\-march=generic\fR option because \fB\-march\fR
12253 indicates the instruction set the compiler can use, and there is no
12254 generic instruction set applicable to all processors.  In contrast,
12255 \&\fB\-mtune\fR indicates the processor (or, in this case, collection of
12256 processors) for which the code is optimized.
12257 .IP "\fInative\fR" 4
12258 .IX Item "native"
12259 This selects the \s-1CPU\s0 to tune for at compilation time by determining
12260 the processor type of the compiling machine.  Using \fB\-mtune=native\fR
12261 will produce code optimized for the local machine under the constraints
12262 of the selected instruction set.  Using \fB\-march=native\fR will
12263 enable all instruction subsets supported by the local machine (hence
12264 the result might not run on different machines).
12265 .IP "\fIi386\fR" 4
12266 .IX Item "i386"
12267 Original Intel's i386 \s-1CPU\s0.
12268 .IP "\fIi486\fR" 4
12269 .IX Item "i486"
12270 Intel's i486 \s-1CPU\s0.  (No scheduling is implemented for this chip.)
12271 .IP "\fIi586, pentium\fR" 4
12272 .IX Item "i586, pentium"
12273 Intel Pentium \s-1CPU\s0 with no \s-1MMX\s0 support.
12274 .IP "\fIpentium-mmx\fR" 4
12275 .IX Item "pentium-mmx"
12276 Intel PentiumMMX \s-1CPU\s0 based on Pentium core with \s-1MMX\s0 instruction set support.
12277 .IP "\fIpentiumpro\fR" 4
12278 .IX Item "pentiumpro"
12279 Intel PentiumPro \s-1CPU\s0.
12280 .IP "\fIi686\fR" 4
12281 .IX Item "i686"
12282 Same as \f(CW\*(C`generic\*(C'\fR, but when used as \f(CW\*(C`march\*(C'\fR option, PentiumPro
12283 instruction set will be used, so the code will run on all i686 family chips.
12284 .IP "\fIpentium2\fR" 4
12285 .IX Item "pentium2"
12286 Intel Pentium2 \s-1CPU\s0 based on PentiumPro core with \s-1MMX\s0 instruction set support.
12287 .IP "\fIpentium3, pentium3m\fR" 4
12288 .IX Item "pentium3, pentium3m"
12289 Intel Pentium3 \s-1CPU\s0 based on PentiumPro core with \s-1MMX\s0 and \s-1SSE\s0 instruction set
12290 support.
12291 .IP "\fIpentium-m\fR" 4
12292 .IX Item "pentium-m"
12293 Low power version of Intel Pentium3 \s-1CPU\s0 with \s-1MMX\s0, \s-1SSE\s0 and \s-1SSE2\s0 instruction set
12294 support.  Used by Centrino notebooks.
12295 .IP "\fIpentium4, pentium4m\fR" 4
12296 .IX Item "pentium4, pentium4m"
12297 Intel Pentium4 \s-1CPU\s0 with \s-1MMX\s0, \s-1SSE\s0 and \s-1SSE2\s0 instruction set support.
12298 .IP "\fIprescott\fR" 4
12299 .IX Item "prescott"
12300 Improved version of Intel Pentium4 \s-1CPU\s0 with \s-1MMX\s0, \s-1SSE\s0, \s-1SSE2\s0 and \s-1SSE3\s0 instruction
12301 set support.
12302 .IP "\fInocona\fR" 4
12303 .IX Item "nocona"
12304 Improved version of Intel Pentium4 \s-1CPU\s0 with 64\-bit extensions, \s-1MMX\s0, \s-1SSE\s0,
12305 \&\s-1SSE2\s0 and \s-1SSE3\s0 instruction set support.
12306 .IP "\fIcore2\fR" 4
12307 .IX Item "core2"
12308 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
12309 instruction set support.
12310 .IP "\fIcorei7\fR" 4
12311 .IX Item "corei7"
12312 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
12313 and \s-1SSE4\s0.2 instruction set support.
12314 .IP "\fIcorei7\-avx\fR" 4
12315 .IX Item "corei7-avx"
12316 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,
12317 \&\s-1SSE4\s0.1, \s-1SSE4\s0.2, \s-1AVX\s0, \s-1AES\s0 and \s-1PCLMUL\s0 instruction set support.
12318 .IP "\fIcore-avx-i\fR" 4
12319 .IX Item "core-avx-i"
12320 Intel Core \s-1CPU\s0 with 64\-bit extensions, \s-1MMX\s0, \s-1SSE\s0, \s-1SSE2\s0, \s-1SSE3\s0, \s-1SSSE3\s0,
12321 \&\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
12322 set support.
12323 .IP "\fIatom\fR" 4
12324 .IX Item "atom"
12325 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
12326 instruction set support.
12327 .IP "\fIk6\fR" 4
12328 .IX Item "k6"
12329 \&\s-1AMD\s0 K6 \s-1CPU\s0 with \s-1MMX\s0 instruction set support.
12330 .IP "\fIk6\-2, k6\-3\fR" 4
12331 .IX Item "k6-2, k6-3"
12332 Improved versions of \s-1AMD\s0 K6 \s-1CPU\s0 with \s-1MMX\s0 and 3DNow! instruction set support.
12333 .IP "\fIathlon, athlon-tbird\fR" 4
12334 .IX Item "athlon, athlon-tbird"
12335 \&\s-1AMD\s0 Athlon \s-1CPU\s0 with \s-1MMX\s0, 3dNOW!, enhanced 3DNow! and \s-1SSE\s0 prefetch instructions
12336 support.
12337 .IP "\fIathlon\-4, athlon-xp, athlon-mp\fR" 4
12338 .IX Item "athlon-4, athlon-xp, athlon-mp"
12339 Improved \s-1AMD\s0 Athlon \s-1CPU\s0 with \s-1MMX\s0, 3DNow!, enhanced 3DNow! and full \s-1SSE\s0
12340 instruction set support.
12341 .IP "\fIk8, opteron, athlon64, athlon-fx\fR" 4
12342 .IX Item "k8, opteron, athlon64, athlon-fx"
12343 \&\s-1AMD\s0 K8 core based CPUs with x86\-64 instruction set support.  (This supersets
12344 \&\s-1MMX\s0, \s-1SSE\s0, \s-1SSE2\s0, 3DNow!, enhanced 3DNow! and 64\-bit instruction set extensions.)
12345 .IP "\fIk8\-sse3, opteron\-sse3, athlon64\-sse3\fR" 4
12346 .IX Item "k8-sse3, opteron-sse3, athlon64-sse3"
12347 Improved versions of k8, opteron and athlon64 with \s-1SSE3\s0 instruction set support.
12348 .IP "\fIamdfam10, barcelona\fR" 4
12349 .IX Item "amdfam10, barcelona"
12350 \&\s-1AMD\s0 Family 10h core based CPUs with x86\-64 instruction set support.  (This
12351 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
12352 instruction set extensions.)
12353 .IP "\fIbdver1\fR" 4
12354 .IX Item "bdver1"
12355 \&\s-1AMD\s0 Family 15h core based CPUs with x86\-64 instruction set support.  (This
12356 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,
12357 \&\s-1SSSE3\s0, \s-1SSE4\s0.1, \s-1SSE4\s0.2, \s-1ABM\s0 and 64\-bit instruction set extensions.)
12358 .IP "\fIbdver2\fR" 4
12359 .IX Item "bdver2"
12360 \&\s-1AMD\s0 Family 15h core based CPUs with x86\-64 instruction set support.  (This
12361 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,
12362 \&\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 
12363 extensions.)
12364 .IP "\fIbtver1\fR" 4
12365 .IX Item "btver1"
12366 \&\s-1AMD\s0 Family 14h core based CPUs with x86\-64 instruction set support.  (This
12367 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
12368 instruction set extensions.)
12369 .IP "\fIwinchip\-c6\fR" 4
12370 .IX Item "winchip-c6"
12371 \&\s-1IDT\s0 Winchip C6 \s-1CPU\s0, dealt in same way as i486 with additional \s-1MMX\s0 instruction
12372 set support.
12373 .IP "\fIwinchip2\fR" 4
12374 .IX Item "winchip2"
12375 \&\s-1IDT\s0 Winchip2 \s-1CPU\s0, dealt in same way as i486 with additional \s-1MMX\s0 and 3DNow!
12376 instruction set support.
12377 .IP "\fIc3\fR" 4
12378 .IX Item "c3"
12379 Via C3 \s-1CPU\s0 with \s-1MMX\s0 and 3DNow! instruction set support.  (No scheduling is
12380 implemented for this chip.)
12381 .IP "\fIc3\-2\fR" 4
12382 .IX Item "c3-2"
12383 Via C3\-2 \s-1CPU\s0 with \s-1MMX\s0 and \s-1SSE\s0 instruction set support.  (No scheduling is
12384 implemented for this chip.)
12385 .IP "\fIgeode\fR" 4
12386 .IX Item "geode"
12387 Embedded \s-1AMD\s0 \s-1CPU\s0 with \s-1MMX\s0 and 3DNow! instruction set support.
12388 .RE
12389 .RS 4
12390 .Sp
12391 While picking a specific \fIcpu-type\fR will schedule things appropriately
12392 for that particular chip, the compiler will not generate any code that
12393 does not run on the default machine type without the \fB\-march=\fR\fIcpu-type\fR
12394 option being used. For example, if \s-1GCC\s0 is configured for i686\-pc\-linux\-gnu
12395 then \fB\-mtune=pentium4\fR will generate code that is tuned for Pentium4
12396 but will still run on i686 machines.
12397 .RE
12398 .IP "\fB\-march=\fR\fIcpu-type\fR" 4
12399 .IX Item "-march=cpu-type"
12400 Generate instructions for the machine type \fIcpu-type\fR.  The choices
12401 for \fIcpu-type\fR are the same as for \fB\-mtune\fR.  Moreover,
12402 specifying \fB\-march=\fR\fIcpu-type\fR implies \fB\-mtune=\fR\fIcpu-type\fR.
12403 .IP "\fB\-mcpu=\fR\fIcpu-type\fR" 4
12404 .IX Item "-mcpu=cpu-type"
12405 A deprecated synonym for \fB\-mtune\fR.
12406 .IP "\fB\-mfpmath=\fR\fIunit\fR" 4
12407 .IX Item "-mfpmath=unit"
12408 Generate floating-point arithmetic for selected unit \fIunit\fR.  The choices
12409 for \fIunit\fR are:
12410 .RS 4
12411 .IP "\fB387\fR" 4
12412 .IX Item "387"
12413 Use the standard 387 floating-point coprocessor present on the majority of chips and
12414 emulated otherwise.  Code compiled with this option runs almost everywhere.
12415 The temporary results are computed in 80\-bit precision instead of the precision
12416 specified by the type, resulting in slightly different results compared to most
12417 of other chips.  See \fB\-ffloat\-store\fR for more detailed description.
12418 .Sp
12419 This is the default choice for i386 compiler.
12420 .IP "\fBsse\fR" 4
12421 .IX Item "sse"
12422 Use scalar floating-point instructions present in the \s-1SSE\s0 instruction set.
12423 This instruction set is supported by Pentium3 and newer chips, in the \s-1AMD\s0 line
12424 by Athlon\-4, Athlon-xp and Athlon-mp chips.  The earlier version of \s-1SSE\s0
12425 instruction set supports only single-precision arithmetic, thus the double and
12426 extended-precision arithmetic are still done using 387.  A later version, present
12427 only in Pentium4 and the future \s-1AMD\s0 x86\-64 chips, supports double-precision
12428 arithmetic too.
12429 .Sp
12430 For the i386 compiler, you need to use \fB\-march=\fR\fIcpu-type\fR, \fB\-msse\fR
12431 or \fB\-msse2\fR switches to enable \s-1SSE\s0 extensions and make this option
12432 effective.  For the x86\-64 compiler, these extensions are enabled by default.
12433 .Sp
12434 The resulting code should be considerably faster in the majority of cases and avoid
12435 the numerical instability problems of 387 code, but may break some existing
12436 code that expects temporaries to be 80 bits.
12437 .Sp
12438 This is the default choice for the x86\-64 compiler.
12439 .IP "\fBsse,387\fR" 4
12440 .IX Item "sse,387"
12441 .PD 0
12442 .IP "\fBsse+387\fR" 4
12443 .IX Item "sse+387"
12444 .IP "\fBboth\fR" 4
12445 .IX Item "both"
12446 .PD
12447 Attempt to utilize both instruction sets at once.  This effectively double the
12448 amount of available registers and on chips with separate execution units for
12449 387 and \s-1SSE\s0 the execution resources too.  Use this option with care, as it is
12450 still experimental, because the \s-1GCC\s0 register allocator does not model separate
12451 functional units well resulting in instable performance.
12452 .RE
12453 .RS 4
12454 .RE
12455 .IP "\fB\-masm=\fR\fIdialect\fR" 4
12456 .IX Item "-masm=dialect"
12457 Output asm instructions using selected \fIdialect\fR.  Supported
12458 choices are \fBintel\fR or \fBatt\fR (the default one).  Darwin does
12459 not support \fBintel\fR.
12460 .IP "\fB\-mieee\-fp\fR" 4
12461 .IX Item "-mieee-fp"
12462 .PD 0
12463 .IP "\fB\-mno\-ieee\-fp\fR" 4
12464 .IX Item "-mno-ieee-fp"
12465 .PD
12466 Control whether or not the compiler uses \s-1IEEE\s0 floating-point
12467 comparisons.  These handle correctly the case where the result of a
12468 comparison is unordered.
12469 .IP "\fB\-msoft\-float\fR" 4
12470 .IX Item "-msoft-float"
12471 Generate output containing library calls for floating point.
12472 \&\fBWarning:\fR the requisite libraries are not part of \s-1GCC\s0.
12473 Normally the facilities of the machine's usual C compiler are used, but
12474 this can't be done directly in cross-compilation.  You must make your
12475 own arrangements to provide suitable library functions for
12476 cross-compilation.
12477 .Sp
12478 On machines where a function returns floating-point results in the 80387
12479 register stack, some floating-point opcodes may be emitted even if
12480 \&\fB\-msoft\-float\fR is used.
12481 .IP "\fB\-mno\-fp\-ret\-in\-387\fR" 4
12482 .IX Item "-mno-fp-ret-in-387"
12483 Do not use the \s-1FPU\s0 registers for return values of functions.
12484 .Sp
12485 The usual calling convention has functions return values of types
12486 \&\f(CW\*(C`float\*(C'\fR and \f(CW\*(C`double\*(C'\fR in an \s-1FPU\s0 register, even if there
12487 is no \s-1FPU\s0.  The idea is that the operating system should emulate
12488 an \s-1FPU\s0.
12489 .Sp
12490 The option \fB\-mno\-fp\-ret\-in\-387\fR causes such values to be returned
12491 in ordinary \s-1CPU\s0 registers instead.
12492 .IP "\fB\-mno\-fancy\-math\-387\fR" 4
12493 .IX Item "-mno-fancy-math-387"
12494 Some 387 emulators do not support the \f(CW\*(C`sin\*(C'\fR, \f(CW\*(C`cos\*(C'\fR and
12495 \&\f(CW\*(C`sqrt\*(C'\fR instructions for the 387.  Specify this option to avoid
12496 generating those instructions.  This option is the default on FreeBSD,
12497 OpenBSD and NetBSD.  This option is overridden when \fB\-march\fR
12498 indicates that the target \s-1CPU\s0 will always have an \s-1FPU\s0 and so the
12499 instruction will not need emulation.  As of revision 2.6.1, these
12500 instructions are not generated unless you also use the
12501 \&\fB\-funsafe\-math\-optimizations\fR switch.
12502 .IP "\fB\-malign\-double\fR" 4
12503 .IX Item "-malign-double"
12504 .PD 0
12505 .IP "\fB\-mno\-align\-double\fR" 4
12506 .IX Item "-mno-align-double"
12507 .PD
12508 Control whether \s-1GCC\s0 aligns \f(CW\*(C`double\*(C'\fR, \f(CW\*(C`long double\*(C'\fR, and
12509 \&\f(CW\*(C`long long\*(C'\fR variables on a two-word boundary or a one-word
12510 boundary.  Aligning \f(CW\*(C`double\*(C'\fR variables on a two-word boundary
12511 produces code that runs somewhat faster on a \fBPentium\fR at the
12512 expense of more memory.
12513 .Sp
12514 On x86\-64, \fB\-malign\-double\fR is enabled by default.
12515 .Sp
12516 \&\fBWarning:\fR if you use the \fB\-malign\-double\fR switch,
12517 structures containing the above types will be aligned differently than
12518 the published application binary interface specifications for the 386
12519 and will not be binary compatible with structures in code compiled
12520 without that switch.
12521 .IP "\fB\-m96bit\-long\-double\fR" 4
12522 .IX Item "-m96bit-long-double"
12523 .PD 0
12524 .IP "\fB\-m128bit\-long\-double\fR" 4
12525 .IX Item "-m128bit-long-double"
12526 .PD
12527 These switches control the size of \f(CW\*(C`long double\*(C'\fR type.  The i386
12528 application binary interface specifies the size to be 96 bits,
12529 so \fB\-m96bit\-long\-double\fR is the default in 32\-bit mode.
12530 .Sp
12531 Modern architectures (Pentium and newer) prefer \f(CW\*(C`long double\*(C'\fR
12532 to be aligned to an 8\- or 16\-byte boundary.  In arrays or structures
12533 conforming to the \s-1ABI\s0, this is not possible.  So specifying
12534 \&\fB\-m128bit\-long\-double\fR aligns \f(CW\*(C`long double\*(C'\fR
12535 to a 16\-byte boundary by padding the \f(CW\*(C`long double\*(C'\fR with an additional
12536 32\-bit zero.
12537 .Sp
12538 In the x86\-64 compiler, \fB\-m128bit\-long\-double\fR is the default choice as
12539 its \s-1ABI\s0 specifies that \f(CW\*(C`long double\*(C'\fR is to be aligned on 16\-byte boundary.
12540 .Sp
12541 Notice that neither of these options enable any extra precision over the x87
12542 standard of 80 bits for a \f(CW\*(C`long double\*(C'\fR.
12543 .Sp
12544 \&\fBWarning:\fR if you override the default value for your target \s-1ABI\s0, the
12545 structures and arrays containing \f(CW\*(C`long double\*(C'\fR variables will change
12546 their size as well as function calling convention for function taking
12547 \&\f(CW\*(C`long double\*(C'\fR will be modified.  Hence they will not be binary
12548 compatible with arrays or structures in code compiled without that switch.
12549 .IP "\fB\-mlarge\-data\-threshold=\fR\fInumber\fR" 4
12550 .IX Item "-mlarge-data-threshold=number"
12551 When \fB\-mcmodel=medium\fR is specified, the data greater than
12552 \&\fIthreshold\fR are placed in large data section.  This value must be the
12553 same across all object linked into the binary and defaults to 65535.
12554 .IP "\fB\-mrtd\fR" 4
12555 .IX Item "-mrtd"
12556 Use a different function-calling convention, in which functions that
12557 take a fixed number of arguments return with the \f(CW\*(C`ret\*(C'\fR \fInum\fR
12558 instruction, which pops their arguments while returning.  This saves one
12559 instruction in the caller since there is no need to pop the arguments
12560 there.
12561 .Sp
12562 You can specify that an individual function is called with this calling
12563 sequence with the function attribute \fBstdcall\fR.  You can also
12564 override the \fB\-mrtd\fR option by using the function attribute
12565 \&\fBcdecl\fR.
12566 .Sp
12567 \&\fBWarning:\fR this calling convention is incompatible with the one
12568 normally used on Unix, so you cannot use it if you need to call
12569 libraries compiled with the Unix compiler.
12570 .Sp
12571 Also, you must provide function prototypes for all functions that
12572 take variable numbers of arguments (including \f(CW\*(C`printf\*(C'\fR);
12573 otherwise incorrect code will be generated for calls to those
12574 functions.
12575 .Sp
12576 In addition, seriously incorrect code will result if you call a
12577 function with too many arguments.  (Normally, extra arguments are
12578 harmlessly ignored.)
12579 .IP "\fB\-mregparm=\fR\fInum\fR" 4
12580 .IX Item "-mregparm=num"
12581 Control how many registers are used to pass integer arguments.  By
12582 default, no registers are used to pass arguments, and at most 3
12583 registers can be used.  You can control this behavior for a specific
12584 function by using the function attribute \fBregparm\fR.
12585 .Sp
12586 \&\fBWarning:\fR if you use this switch, and
12587 \&\fInum\fR is nonzero, then you must build all modules with the same
12588 value, including any libraries.  This includes the system libraries and
12589 startup modules.
12590 .IP "\fB\-msseregparm\fR" 4
12591 .IX Item "-msseregparm"
12592 Use \s-1SSE\s0 register passing conventions for float and double arguments
12593 and return values.  You can control this behavior for a specific
12594 function by using the function attribute \fBsseregparm\fR.
12595 .Sp
12596 \&\fBWarning:\fR if you use this switch then you must build all
12597 modules with the same value, including any libraries.  This includes
12598 the system libraries and startup modules.
12599 .IP "\fB\-mvect8\-ret\-in\-mem\fR" 4
12600 .IX Item "-mvect8-ret-in-mem"
12601 Return 8\-byte vectors in memory instead of \s-1MMX\s0 registers.  This is the
12602 default on Solaris@tie{}8 and 9 and VxWorks to match the \s-1ABI\s0 of the Sun
12603 Studio compilers until version 12.  Later compiler versions (starting
12604 with Studio 12 Update@tie{}1) follow the \s-1ABI\s0 used by other x86 targets, which
12605 is the default on Solaris@tie{}10 and later.  \fIOnly\fR use this option if
12606 you need to remain compatible with existing code produced by those
12607 previous compiler versions or older versions of \s-1GCC\s0.
12608 .IP "\fB\-mpc32\fR" 4
12609 .IX Item "-mpc32"
12610 .PD 0
12611 .IP "\fB\-mpc64\fR" 4
12612 .IX Item "-mpc64"
12613 .IP "\fB\-mpc80\fR" 4
12614 .IX Item "-mpc80"
12615 .PD
12616 Set 80387 floating-point precision to 32, 64 or 80 bits.  When \fB\-mpc32\fR
12617 is specified, the significands of results of floating-point operations are
12618 rounded to 24 bits (single precision); \fB\-mpc64\fR rounds the
12619 significands of results of floating-point operations to 53 bits (double
12620 precision) and \fB\-mpc80\fR rounds the significands of results of
12621 floating-point operations to 64 bits (extended double precision), which is
12622 the default.  When this option is used, floating-point operations in higher
12623 precisions are not available to the programmer without setting the \s-1FPU\s0
12624 control word explicitly.
12625 .Sp
12626 Setting the rounding of floating-point operations to less than the default
12627 80 bits can speed some programs by 2% or more.  Note that some mathematical
12628 libraries assume that extended-precision (80\-bit) floating-point operations
12629 are enabled by default; routines in such libraries could suffer significant
12630 loss of accuracy, typically through so-called \*(L"catastrophic cancellation\*(R",
12631 when this option is used to set the precision to less than extended precision.
12632 .IP "\fB\-mstackrealign\fR" 4
12633 .IX Item "-mstackrealign"
12634 Realign the stack at entry.  On the Intel x86, the \fB\-mstackrealign\fR
12635 option will generate an alternate prologue and epilogue that realigns the
12636 run-time stack if necessary.  This supports mixing legacy codes that keep
12637 a 4\-byte aligned stack with modern codes that keep a 16\-byte stack for
12638 \&\s-1SSE\s0 compatibility.  See also the attribute \f(CW\*(C`force_align_arg_pointer\*(C'\fR,
12639 applicable to individual functions.
12640 .IP "\fB\-mpreferred\-stack\-boundary=\fR\fInum\fR" 4
12641 .IX Item "-mpreferred-stack-boundary=num"
12642 Attempt to keep the stack boundary aligned to a 2 raised to \fInum\fR
12643 byte boundary.  If \fB\-mpreferred\-stack\-boundary\fR is not specified,
12644 the default is 4 (16 bytes or 128 bits).
12645 .IP "\fB\-mincoming\-stack\-boundary=\fR\fInum\fR" 4
12646 .IX Item "-mincoming-stack-boundary=num"
12647 Assume the incoming stack is aligned to a 2 raised to \fInum\fR byte
12648 boundary.  If \fB\-mincoming\-stack\-boundary\fR is not specified,
12649 the one specified by \fB\-mpreferred\-stack\-boundary\fR will be used.
12650 .Sp
12651 On Pentium and PentiumPro, \f(CW\*(C`double\*(C'\fR and \f(CW\*(C`long double\*(C'\fR values
12652 should be aligned to an 8\-byte boundary (see \fB\-malign\-double\fR) or
12653 suffer significant run time performance penalties.  On Pentium \s-1III\s0, the
12654 Streaming \s-1SIMD\s0 Extension (\s-1SSE\s0) data type \f(CW\*(C`_\|_m128\*(C'\fR may not work
12655 properly if it is not 16\-byte aligned.
12656 .Sp
12657 To ensure proper alignment of this values on the stack, the stack boundary
12658 must be as aligned as that required by any value stored on the stack.
12659 Further, every function must be generated such that it keeps the stack
12660 aligned.  Thus calling a function compiled with a higher preferred
12661 stack boundary from a function compiled with a lower preferred stack
12662 boundary will most likely misalign the stack.  It is recommended that
12663 libraries that use callbacks always use the default setting.
12664 .Sp
12665 This extra alignment does consume extra stack space, and generally
12666 increases code size.  Code that is sensitive to stack space usage, such
12667 as embedded systems and operating system kernels, may want to reduce the
12668 preferred alignment to \fB\-mpreferred\-stack\-boundary=2\fR.
12669 .IP "\fB\-mmmx\fR" 4
12670 .IX Item "-mmmx"
12671 .PD 0
12672 .IP "\fB\-mno\-mmx\fR" 4
12673 .IX Item "-mno-mmx"
12674 .IP "\fB\-msse\fR" 4
12675 .IX Item "-msse"
12676 .IP "\fB\-mno\-sse\fR" 4
12677 .IX Item "-mno-sse"
12678 .IP "\fB\-msse2\fR" 4
12679 .IX Item "-msse2"
12680 .IP "\fB\-mno\-sse2\fR" 4
12681 .IX Item "-mno-sse2"
12682 .IP "\fB\-msse3\fR" 4
12683 .IX Item "-msse3"
12684 .IP "\fB\-mno\-sse3\fR" 4
12685 .IX Item "-mno-sse3"
12686 .IP "\fB\-mssse3\fR" 4
12687 .IX Item "-mssse3"
12688 .IP "\fB\-mno\-ssse3\fR" 4
12689 .IX Item "-mno-ssse3"
12690 .IP "\fB\-msse4.1\fR" 4
12691 .IX Item "-msse4.1"
12692 .IP "\fB\-mno\-sse4.1\fR" 4
12693 .IX Item "-mno-sse4.1"
12694 .IP "\fB\-msse4.2\fR" 4
12695 .IX Item "-msse4.2"
12696 .IP "\fB\-mno\-sse4.2\fR" 4
12697 .IX Item "-mno-sse4.2"
12698 .IP "\fB\-msse4\fR" 4
12699 .IX Item "-msse4"
12700 .IP "\fB\-mno\-sse4\fR" 4
12701 .IX Item "-mno-sse4"
12702 .IP "\fB\-mavx\fR" 4
12703 .IX Item "-mavx"
12704 .IP "\fB\-mno\-avx\fR" 4
12705 .IX Item "-mno-avx"
12706 .IP "\fB\-mavx2\fR" 4
12707 .IX Item "-mavx2"
12708 .IP "\fB\-mno\-avx2\fR" 4
12709 .IX Item "-mno-avx2"
12710 .IP "\fB\-maes\fR" 4
12711 .IX Item "-maes"
12712 .IP "\fB\-mno\-aes\fR" 4
12713 .IX Item "-mno-aes"
12714 .IP "\fB\-mpclmul\fR" 4
12715 .IX Item "-mpclmul"
12716 .IP "\fB\-mno\-pclmul\fR" 4
12717 .IX Item "-mno-pclmul"
12718 .IP "\fB\-mfsgsbase\fR" 4
12719 .IX Item "-mfsgsbase"
12720 .IP "\fB\-mno\-fsgsbase\fR" 4
12721 .IX Item "-mno-fsgsbase"
12722 .IP "\fB\-mrdrnd\fR" 4
12723 .IX Item "-mrdrnd"
12724 .IP "\fB\-mno\-rdrnd\fR" 4
12725 .IX Item "-mno-rdrnd"
12726 .IP "\fB\-mf16c\fR" 4
12727 .IX Item "-mf16c"
12728 .IP "\fB\-mno\-f16c\fR" 4
12729 .IX Item "-mno-f16c"
12730 .IP "\fB\-mfma\fR" 4
12731 .IX Item "-mfma"
12732 .IP "\fB\-mno\-fma\fR" 4
12733 .IX Item "-mno-fma"
12734 .IP "\fB\-msse4a\fR" 4
12735 .IX Item "-msse4a"
12736 .IP "\fB\-mno\-sse4a\fR" 4
12737 .IX Item "-mno-sse4a"
12738 .IP "\fB\-mfma4\fR" 4
12739 .IX Item "-mfma4"
12740 .IP "\fB\-mno\-fma4\fR" 4
12741 .IX Item "-mno-fma4"
12742 .IP "\fB\-mxop\fR" 4
12743 .IX Item "-mxop"
12744 .IP "\fB\-mno\-xop\fR" 4
12745 .IX Item "-mno-xop"
12746 .IP "\fB\-mlwp\fR" 4
12747 .IX Item "-mlwp"
12748 .IP "\fB\-mno\-lwp\fR" 4
12749 .IX Item "-mno-lwp"
12750 .IP "\fB\-m3dnow\fR" 4
12751 .IX Item "-m3dnow"
12752 .IP "\fB\-mno\-3dnow\fR" 4
12753 .IX Item "-mno-3dnow"
12754 .IP "\fB\-mpopcnt\fR" 4
12755 .IX Item "-mpopcnt"
12756 .IP "\fB\-mno\-popcnt\fR" 4
12757 .IX Item "-mno-popcnt"
12758 .IP "\fB\-mabm\fR" 4
12759 .IX Item "-mabm"
12760 .IP "\fB\-mno\-abm\fR" 4
12761 .IX Item "-mno-abm"
12762 .IP "\fB\-mbmi\fR" 4
12763 .IX Item "-mbmi"
12764 .IP "\fB\-mbmi2\fR" 4
12765 .IX Item "-mbmi2"
12766 .IP "\fB\-mno\-bmi\fR" 4
12767 .IX Item "-mno-bmi"
12768 .IP "\fB\-mno\-bmi2\fR" 4
12769 .IX Item "-mno-bmi2"
12770 .IP "\fB\-mlzcnt\fR" 4
12771 .IX Item "-mlzcnt"
12772 .IP "\fB\-mno\-lzcnt\fR" 4
12773 .IX Item "-mno-lzcnt"
12774 .IP "\fB\-mtbm\fR" 4
12775 .IX Item "-mtbm"
12776 .IP "\fB\-mno\-tbm\fR" 4
12777 .IX Item "-mno-tbm"
12778 .PD
12779 These switches enable or disable the use of instructions in the \s-1MMX\s0, \s-1SSE\s0,
12780 \&\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,
12781 \&\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!
12782  extended instruction sets.
12783 These extensions are also available as built-in functions: see
12784 \&\fBX86 Built-in Functions\fR, for details of the functions enabled and
12785 disabled by these switches.
12786 .Sp
12787 To have \s-1SSE/SSE2\s0 instructions generated automatically from floating-point
12788 code (as opposed to 387 instructions), see \fB\-mfpmath=sse\fR.
12789 .Sp
12790 \&\s-1GCC\s0 depresses SSEx instructions when \fB\-mavx\fR is used. Instead, it
12791 generates new \s-1AVX\s0 instructions or \s-1AVX\s0 equivalence for all SSEx instructions
12792 when needed.
12793 .Sp
12794 These options will enable \s-1GCC\s0 to use these extended instructions in
12795 generated code, even without \fB\-mfpmath=sse\fR.  Applications that
12796 perform run-time \s-1CPU\s0 detection must compile separate files for each
12797 supported architecture, using the appropriate flags.  In particular,
12798 the file containing the \s-1CPU\s0 detection code should be compiled without
12799 these options.
12800 .IP "\fB\-mcld\fR" 4
12801 .IX Item "-mcld"
12802 This option instructs \s-1GCC\s0 to emit a \f(CW\*(C`cld\*(C'\fR instruction in the prologue
12803 of functions that use string instructions.  String instructions depend on
12804 the \s-1DF\s0 flag to select between autoincrement or autodecrement mode.  While the
12805 \&\s-1ABI\s0 specifies the \s-1DF\s0 flag to be cleared on function entry, some operating
12806 systems violate this specification by not clearing the \s-1DF\s0 flag in their
12807 exception dispatchers.  The exception handler can be invoked with the \s-1DF\s0 flag
12808 set, which leads to wrong direction mode when string instructions are used.
12809 This option can be enabled by default on 32\-bit x86 targets by configuring
12810 \&\s-1GCC\s0 with the \fB\-\-enable\-cld\fR configure option.  Generation of \f(CW\*(C`cld\*(C'\fR
12811 instructions can be suppressed with the \fB\-mno\-cld\fR compiler option
12812 in this case.
12813 .IP "\fB\-mvzeroupper\fR" 4
12814 .IX Item "-mvzeroupper"
12815 This option instructs \s-1GCC\s0 to emit a \f(CW\*(C`vzeroupper\*(C'\fR instruction
12816 before a transfer of control flow out of the function to minimize
12817 \&\s-1AVX\s0 to \s-1SSE\s0 transition penalty as well as remove unnecessary zeroupper
12818 intrinsics.
12819 .IP "\fB\-mcx16\fR" 4
12820 .IX Item "-mcx16"
12821 This option will enable \s-1GCC\s0 to use \s-1CMPXCHG16B\s0 instruction in generated code.
12822 \&\s-1CMPXCHG16B\s0 allows for atomic operations on 128\-bit double quadword (or oword)
12823 data types.  This is useful for high resolution counters that could be updated
12824 by multiple processors (or cores).  This instruction is generated as part of
12825 atomic built-in functions: see \fB_\|_sync Builtins\fR or
12826 \&\fB_\|_atomic Builtins\fR for details.
12827 .IP "\fB\-msahf\fR" 4
12828 .IX Item "-msahf"
12829 This option will enable \s-1GCC\s0 to use \s-1SAHF\s0 instruction in generated 64\-bit code.
12830 Early Intel CPUs with Intel 64 lacked \s-1LAHF\s0 and \s-1SAHF\s0 instructions supported
12831 by \s-1AMD64\s0 until introduction of Pentium 4 G1 step in December 2005.  \s-1LAHF\s0 and
12832 \&\s-1SAHF\s0 are load and store instructions, respectively, for certain status flags.
12833 In 64\-bit mode, \s-1SAHF\s0 instruction is used to optimize \f(CW\*(C`fmod\*(C'\fR, \f(CW\*(C`drem\*(C'\fR
12834 or \f(CW\*(C`remainder\*(C'\fR built-in functions: see \fBOther Builtins\fR for details.
12835 .IP "\fB\-mmovbe\fR" 4
12836 .IX Item "-mmovbe"
12837 This option will enable \s-1GCC\s0 to use movbe instruction to implement
12838 \&\f(CW\*(C`_\|_builtin_bswap32\*(C'\fR and \f(CW\*(C`_\|_builtin_bswap64\*(C'\fR.
12839 .IP "\fB\-mcrc32\fR" 4
12840 .IX Item "-mcrc32"
12841 This option will enable built-in functions, \f(CW\*(C`_\|_builtin_ia32_crc32qi\*(C'\fR,
12842 \&\f(CW\*(C`_\|_builtin_ia32_crc32hi\*(C'\fR. \f(CW\*(C`_\|_builtin_ia32_crc32si\*(C'\fR and
12843 \&\f(CW\*(C`_\|_builtin_ia32_crc32di\*(C'\fR to generate the crc32 machine instruction.
12844 .IP "\fB\-mrecip\fR" 4
12845 .IX Item "-mrecip"
12846 This option will enable \s-1GCC\s0 to use \s-1RCPSS\s0 and \s-1RSQRTSS\s0 instructions (and their
12847 vectorized variants \s-1RCPPS\s0 and \s-1RSQRTPS\s0) with an additional Newton-Raphson step
12848 to increase precision instead of \s-1DIVSS\s0 and \s-1SQRTSS\s0 (and their vectorized
12849 variants) for single-precision floating-point arguments.  These instructions
12850 are generated only when \fB\-funsafe\-math\-optimizations\fR is enabled
12851 together with \fB\-finite\-math\-only\fR and \fB\-fno\-trapping\-math\fR.
12852 Note that while the throughput of the sequence is higher than the throughput
12853 of the non-reciprocal instruction, the precision of the sequence can be
12854 decreased by up to 2 ulp (i.e. the inverse of 1.0 equals 0.99999994).
12855 .Sp
12856 Note that \s-1GCC\s0 implements \f(CW\*(C`1.0f/sqrtf(\f(CIx\f(CW)\*(C'\fR in terms of \s-1RSQRTSS\s0
12857 (or \s-1RSQRTPS\s0) already with \fB\-ffast\-math\fR (or the above option
12858 combination), and doesn't need \fB\-mrecip\fR.
12859 .Sp
12860 Also note that \s-1GCC\s0 emits the above sequence with additional Newton-Raphson step
12861 for vectorized single-float division and vectorized \f(CW\*(C`sqrtf(\f(CIx\f(CW)\*(C'\fR
12862 already with \fB\-ffast\-math\fR (or the above option combination), and
12863 doesn't need \fB\-mrecip\fR.
12864 .IP "\fB\-mrecip=\fR\fIopt\fR" 4
12865 .IX Item "-mrecip=opt"
12866 This option allows to control which reciprocal estimate instructions
12867 may be used.  \fIopt\fR is a comma separated list of options, which may
12868 be preceded by a \f(CW\*(C`!\*(C'\fR to invert the option:
12869 \&\f(CW\*(C`all\*(C'\fR: enable all estimate instructions,
12870 \&\f(CW\*(C`default\*(C'\fR: enable the default instructions, equivalent to \fB\-mrecip\fR,
12871 \&\f(CW\*(C`none\*(C'\fR: disable all estimate instructions, equivalent to \fB\-mno\-recip\fR,
12872 \&\f(CW\*(C`div\*(C'\fR: enable the approximation for scalar division,
12873 \&\f(CW\*(C`vec\-div\*(C'\fR: enable the approximation for vectorized division,
12874 \&\f(CW\*(C`sqrt\*(C'\fR: enable the approximation for scalar square root,
12875 \&\f(CW\*(C`vec\-sqrt\*(C'\fR: enable the approximation for vectorized square root.
12876 .Sp
12877 So for example, \fB\-mrecip=all,!sqrt\fR would enable
12878 all of the reciprocal approximations, except for square root.
12879 .IP "\fB\-mveclibabi=\fR\fItype\fR" 4
12880 .IX Item "-mveclibabi=type"
12881 Specifies the \s-1ABI\s0 type to use for vectorizing intrinsics using an
12882 external library.  Supported types are \f(CW\*(C`svml\*(C'\fR for the Intel short
12883 vector math library and \f(CW\*(C`acml\*(C'\fR for the \s-1AMD\s0 math core library style
12884 of interfacing.  \s-1GCC\s0 will currently emit calls to \f(CW\*(C`vmldExp2\*(C'\fR,
12885 \&\f(CW\*(C`vmldLn2\*(C'\fR, \f(CW\*(C`vmldLog102\*(C'\fR, \f(CW\*(C`vmldLog102\*(C'\fR, \f(CW\*(C`vmldPow2\*(C'\fR,
12886 \&\f(CW\*(C`vmldTanh2\*(C'\fR, \f(CW\*(C`vmldTan2\*(C'\fR, \f(CW\*(C`vmldAtan2\*(C'\fR, \f(CW\*(C`vmldAtanh2\*(C'\fR,
12887 \&\f(CW\*(C`vmldCbrt2\*(C'\fR, \f(CW\*(C`vmldSinh2\*(C'\fR, \f(CW\*(C`vmldSin2\*(C'\fR, \f(CW\*(C`vmldAsinh2\*(C'\fR,
12888 \&\f(CW\*(C`vmldAsin2\*(C'\fR, \f(CW\*(C`vmldCosh2\*(C'\fR, \f(CW\*(C`vmldCos2\*(C'\fR, \f(CW\*(C`vmldAcosh2\*(C'\fR,
12889 \&\f(CW\*(C`vmldAcos2\*(C'\fR, \f(CW\*(C`vmlsExp4\*(C'\fR, \f(CW\*(C`vmlsLn4\*(C'\fR, \f(CW\*(C`vmlsLog104\*(C'\fR,
12890 \&\f(CW\*(C`vmlsLog104\*(C'\fR, \f(CW\*(C`vmlsPow4\*(C'\fR, \f(CW\*(C`vmlsTanh4\*(C'\fR, \f(CW\*(C`vmlsTan4\*(C'\fR,
12891 \&\f(CW\*(C`vmlsAtan4\*(C'\fR, \f(CW\*(C`vmlsAtanh4\*(C'\fR, \f(CW\*(C`vmlsCbrt4\*(C'\fR, \f(CW\*(C`vmlsSinh4\*(C'\fR,
12892 \&\f(CW\*(C`vmlsSin4\*(C'\fR, \f(CW\*(C`vmlsAsinh4\*(C'\fR, \f(CW\*(C`vmlsAsin4\*(C'\fR, \f(CW\*(C`vmlsCosh4\*(C'\fR,
12893 \&\f(CW\*(C`vmlsCos4\*(C'\fR, \f(CW\*(C`vmlsAcosh4\*(C'\fR and \f(CW\*(C`vmlsAcos4\*(C'\fR for corresponding
12894 function type when \fB\-mveclibabi=svml\fR is used and \f(CW\*(C`_\|_vrd2_sin\*(C'\fR,
12895 \&\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,
12896 \&\f(CW\*(C`_\|_vrd2_log10\*(C'\fR, \f(CW\*(C`_\|_vrs4_sinf\*(C'\fR, \f(CW\*(C`_\|_vrs4_cosf\*(C'\fR,
12897 \&\f(CW\*(C`_\|_vrs4_expf\*(C'\fR, \f(CW\*(C`_\|_vrs4_logf\*(C'\fR, \f(CW\*(C`_\|_vrs4_log2f\*(C'\fR,
12898 \&\f(CW\*(C`_\|_vrs4_log10f\*(C'\fR and \f(CW\*(C`_\|_vrs4_powf\*(C'\fR for corresponding function type
12899 when \fB\-mveclibabi=acml\fR is used. Both \fB\-ftree\-vectorize\fR and
12900 \&\fB\-funsafe\-math\-optimizations\fR have to be enabled. A \s-1SVML\s0 or \s-1ACML\s0 \s-1ABI\s0
12901 compatible library will have to be specified at link time.
12902 .IP "\fB\-mabi=\fR\fIname\fR" 4
12903 .IX Item "-mabi=name"
12904 Generate code for the specified calling convention.  Permissible values
12905 are: \fBsysv\fR for the \s-1ABI\s0 used on GNU/Linux and other systems and
12906 \&\fBms\fR for the Microsoft \s-1ABI\s0.  The default is to use the Microsoft
12907 \&\s-1ABI\s0 when targeting Windows.  On all other systems, the default is the
12908 \&\s-1SYSV\s0 \s-1ABI\s0.  You can control this behavior for a specific function by
12909 using the function attribute \fBms_abi\fR/\fBsysv_abi\fR.
12910 .IP "\fB\-mtls\-dialect=\fR\fItype\fR" 4
12911 .IX Item "-mtls-dialect=type"
12912 Generate code to access thread-local storage using the \fBgnu\fR or
12913 \&\fBgnu2\fR conventions.  \fBgnu\fR is the conservative default;
12914 \&\fBgnu2\fR is more efficient, but it may add compile\- and run-time
12915 requirements that cannot be satisfied on all systems.
12916 .IP "\fB\-mpush\-args\fR" 4
12917 .IX Item "-mpush-args"
12918 .PD 0
12919 .IP "\fB\-mno\-push\-args\fR" 4
12920 .IX Item "-mno-push-args"
12921 .PD
12922 Use \s-1PUSH\s0 operations to store outgoing parameters.  This method is shorter
12923 and usually equally fast as method using \s-1SUB/MOV\s0 operations and is enabled
12924 by default.  In some cases disabling it may improve performance because of
12925 improved scheduling and reduced dependencies.
12926 .IP "\fB\-maccumulate\-outgoing\-args\fR" 4
12927 .IX Item "-maccumulate-outgoing-args"
12928 If enabled, the maximum amount of space required for outgoing arguments will be
12929 computed in the function prologue.  This is faster on most modern CPUs
12930 because of reduced dependencies, improved scheduling and reduced stack usage
12931 when preferred stack boundary is not equal to 2.  The drawback is a notable
12932 increase in code size.  This switch implies \fB\-mno\-push\-args\fR.
12933 .IP "\fB\-mthreads\fR" 4
12934 .IX Item "-mthreads"
12935 Support thread-safe exception handling on \fBMingw32\fR.  Code that relies
12936 on thread-safe exception handling must compile and link all code with the
12937 \&\fB\-mthreads\fR option.  When compiling, \fB\-mthreads\fR defines
12938 \&\fB\-D_MT\fR; when linking, it links in a special thread helper library
12939 \&\fB\-lmingwthrd\fR which cleans up per thread exception handling data.
12940 .IP "\fB\-mno\-align\-stringops\fR" 4
12941 .IX Item "-mno-align-stringops"
12942 Do not align destination of inlined string operations.  This switch reduces
12943 code size and improves performance in case the destination is already aligned,
12944 but \s-1GCC\s0 doesn't know about it.
12945 .IP "\fB\-minline\-all\-stringops\fR" 4
12946 .IX Item "-minline-all-stringops"
12947 By default \s-1GCC\s0 inlines string operations only when the destination is 
12948 known to be aligned to least a 4\-byte boundary.  
12949 This enables more inlining, increase code
12950 size, but may improve performance of code that depends on fast memcpy, strlen
12951 and memset for short lengths.
12952 .IP "\fB\-minline\-stringops\-dynamically\fR" 4
12953 .IX Item "-minline-stringops-dynamically"
12954 For string operations of unknown size, use run-time checks with
12955 inline code for small blocks and a library call for large blocks.
12956 .IP "\fB\-mstringop\-strategy=\fR\fIalg\fR" 4
12957 .IX Item "-mstringop-strategy=alg"
12958 Overwrite internal decision heuristic about particular algorithm to inline
12959 string operation with.  The allowed values are \f(CW\*(C`rep_byte\*(C'\fR,
12960 \&\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
12961 of specified size, \f(CW\*(C`byte_loop\*(C'\fR, \f(CW\*(C`loop\*(C'\fR, \f(CW\*(C`unrolled_loop\*(C'\fR for
12962 expanding inline loop, \f(CW\*(C`libcall\*(C'\fR for always expanding library call.
12963 .IP "\fB\-momit\-leaf\-frame\-pointer\fR" 4
12964 .IX Item "-momit-leaf-frame-pointer"
12965 Don't keep the frame pointer in a register for leaf functions.  This
12966 avoids the instructions to save, set up and restore frame pointers and
12967 makes an extra register available in leaf functions.  The option
12968 \&\fB\-fomit\-frame\-pointer\fR removes the frame pointer for all functions,
12969 which might make debugging harder.
12970 .IP "\fB\-mtls\-direct\-seg\-refs\fR" 4
12971 .IX Item "-mtls-direct-seg-refs"
12972 .PD 0
12973 .IP "\fB\-mno\-tls\-direct\-seg\-refs\fR" 4
12974 .IX Item "-mno-tls-direct-seg-refs"
12975 .PD
12976 Controls whether \s-1TLS\s0 variables may be accessed with offsets from the
12977 \&\s-1TLS\s0 segment register (\f(CW%gs\fR for 32\-bit, \f(CW%fs\fR for 64\-bit),
12978 or whether the thread base pointer must be added.  Whether or not this
12979 is legal depends on the operating system, and whether it maps the
12980 segment to cover the entire \s-1TLS\s0 area.
12981 .Sp
12982 For systems that use \s-1GNU\s0 libc, the default is on.
12983 .IP "\fB\-msse2avx\fR" 4
12984 .IX Item "-msse2avx"
12985 .PD 0
12986 .IP "\fB\-mno\-sse2avx\fR" 4
12987 .IX Item "-mno-sse2avx"
12988 .PD
12989 Specify that the assembler should encode \s-1SSE\s0 instructions with \s-1VEX\s0
12990 prefix.  The option \fB\-mavx\fR turns this on by default.
12991 .IP "\fB\-mfentry\fR" 4
12992 .IX Item "-mfentry"
12993 .PD 0
12994 .IP "\fB\-mno\-fentry\fR" 4
12995 .IX Item "-mno-fentry"
12996 .PD
12997 If profiling is active \fB\-pg\fR put the profiling
12998 counter call before prologue.
12999 Note: On x86 architectures the attribute \f(CW\*(C`ms_hook_prologue\*(C'\fR
13000 isn't possible at the moment for \fB\-mfentry\fR and \fB\-pg\fR.
13001 .IP "\fB\-m8bit\-idiv\fR" 4
13002 .IX Item "-m8bit-idiv"
13003 .PD 0
13004 .IP "\fB\-mno\-8bit\-idiv\fR" 4
13005 .IX Item "-mno-8bit-idiv"
13006 .PD
13007 On some processors, like Intel Atom, 8\-bit unsigned integer divide is
13008 much faster than 32\-bit/64\-bit integer divide.  This option generates a
13009 run-time check.  If both dividend and divisor are within range of 0
13010 to 255, 8\-bit unsigned integer divide is used instead of
13011 32\-bit/64\-bit integer divide.
13012 .IP "\fB\-mavx256\-split\-unaligned\-load\fR" 4
13013 .IX Item "-mavx256-split-unaligned-load"
13014 .PD 0
13015 .IP "\fB\-mavx256\-split\-unaligned\-store\fR" 4
13016 .IX Item "-mavx256-split-unaligned-store"
13017 .PD
13018 Split 32\-byte \s-1AVX\s0 unaligned load and store.
13019 .PP
13020 These \fB\-m\fR switches are supported in addition to the above
13021 on \s-1AMD\s0 x86\-64 processors in 64\-bit environments.
13022 .IP "\fB\-m32\fR" 4
13023 .IX Item "-m32"
13024 .PD 0
13025 .IP "\fB\-m64\fR" 4
13026 .IX Item "-m64"
13027 .IP "\fB\-mx32\fR" 4
13028 .IX Item "-mx32"
13029 .PD
13030 Generate code for a 32\-bit or 64\-bit environment.
13031 The \fB\-m32\fR option sets int, long and pointer to 32 bits and
13032 generates code that runs on any i386 system.
13033 The \fB\-m64\fR option sets int to 32 bits and long and pointer
13034 to 64 bits and generates code for \s-1AMD\s0's x86\-64 architecture.
13035 The \fB\-mx32\fR option sets int, long and pointer to 32 bits and
13036 generates code for \s-1AMD\s0's x86\-64 architecture.
13037 For darwin only the \fB\-m64\fR option turns off the \fB\-fno\-pic\fR
13038 and \fB\-mdynamic\-no\-pic\fR options.
13039 .IP "\fB\-mno\-red\-zone\fR" 4
13040 .IX Item "-mno-red-zone"
13041 Do not use a so called red zone for x86\-64 code.  The red zone is mandated
13042 by the x86\-64 \s-1ABI\s0, it is a 128\-byte area beyond the location of the
13043 stack pointer that will not be modified by signal or interrupt handlers
13044 and therefore can be used for temporary data without adjusting the stack
13045 pointer.  The flag \fB\-mno\-red\-zone\fR disables this red zone.
13046 .IP "\fB\-mcmodel=small\fR" 4
13047 .IX Item "-mcmodel=small"
13048 Generate code for the small code model: the program and its symbols must
13049 be linked in the lower 2 \s-1GB\s0 of the address space.  Pointers are 64 bits.
13050 Programs can be statically or dynamically linked.  This is the default
13051 code model.
13052 .IP "\fB\-mcmodel=kernel\fR" 4
13053 .IX Item "-mcmodel=kernel"
13054 Generate code for the kernel code model.  The kernel runs in the
13055 negative 2 \s-1GB\s0 of the address space.
13056 This model has to be used for Linux kernel code.
13057 .IP "\fB\-mcmodel=medium\fR" 4
13058 .IX Item "-mcmodel=medium"
13059 Generate code for the medium model: The program is linked in the lower 2
13060 \&\s-1GB\s0 of the address space.  Small symbols are also placed there.  Symbols
13061 with sizes larger than \fB\-mlarge\-data\-threshold\fR are put into
13062 large data or bss sections and can be located above 2GB.  Programs can
13063 be statically or dynamically linked.
13064 .IP "\fB\-mcmodel=large\fR" 4
13065 .IX Item "-mcmodel=large"
13066 Generate code for the large model: This model makes no assumptions
13067 about addresses and sizes of sections.
13068 .PP
13069 \fIi386 and x86\-64 Windows Options\fR
13070 .IX Subsection "i386 and x86-64 Windows Options"
13071 .PP
13072 These additional options are available for Windows targets:
13073 .IP "\fB\-mconsole\fR" 4
13074 .IX Item "-mconsole"
13075 This option is available for Cygwin and MinGW targets.  It
13076 specifies that a console application is to be generated, by
13077 instructing the linker to set the \s-1PE\s0 header subsystem type
13078 required for console applications.
13079 This is the default behavior for Cygwin and MinGW targets.
13080 .IP "\fB\-mdll\fR" 4
13081 .IX Item "-mdll"
13082 This option is available for Cygwin and MinGW targets.  It
13083 specifies that a \s-1DLL\s0 \- a dynamic link library \- is to be
13084 generated, enabling the selection of the required runtime
13085 startup object and entry point.
13086 .IP "\fB\-mnop\-fun\-dllimport\fR" 4
13087 .IX Item "-mnop-fun-dllimport"
13088 This option is available for Cygwin and MinGW targets.  It
13089 specifies that the dllimport attribute should be ignored.
13090 .IP "\fB\-mthread\fR" 4
13091 .IX Item "-mthread"
13092 This option is available for MinGW targets. It specifies
13093 that MinGW-specific thread support is to be used.
13094 .IP "\fB\-municode\fR" 4
13095 .IX Item "-municode"
13096 This option is available for mingw\-w64 targets.  It specifies
13097 that the \s-1UNICODE\s0 macro is getting pre-defined and that the
13098 unicode capable runtime startup code is chosen.
13099 .IP "\fB\-mwin32\fR" 4
13100 .IX Item "-mwin32"
13101 This option is available for Cygwin and MinGW targets.  It
13102 specifies that the typical Windows pre-defined macros are to
13103 be set in the pre-processor, but does not influence the choice
13104 of runtime library/startup code.
13105 .IP "\fB\-mwindows\fR" 4
13106 .IX Item "-mwindows"
13107 This option is available for Cygwin and MinGW targets.  It
13108 specifies that a \s-1GUI\s0 application is to be generated by
13109 instructing the linker to set the \s-1PE\s0 header subsystem type
13110 appropriately.
13111 .IP "\fB\-fno\-set\-stack\-executable\fR" 4
13112 .IX Item "-fno-set-stack-executable"
13113 This option is available for MinGW targets. It specifies that
13114 the executable flag for stack used by nested functions isn't
13115 set. This is necessary for binaries running in kernel mode of
13116 Windows, as there the user32 \s-1API\s0, which is used to set executable
13117 privileges, isn't available.
13118 .IP "\fB\-mpe\-aligned\-commons\fR" 4
13119 .IX Item "-mpe-aligned-commons"
13120 This option is available for Cygwin and MinGW targets.  It
13121 specifies that the \s-1GNU\s0 extension to the \s-1PE\s0 file format that
13122 permits the correct alignment of \s-1COMMON\s0 variables should be
13123 used when generating code.  It will be enabled by default if
13124 \&\s-1GCC\s0 detects that the target assembler found during configuration
13125 supports the feature.
13126 .PP
13127 See also under \fBi386 and x86\-64 Options\fR for standard options.
13128 .PP
13129 \fI\s-1IA\-64\s0 Options\fR
13130 .IX Subsection "IA-64 Options"
13131 .PP
13132 These are the \fB\-m\fR options defined for the Intel \s-1IA\-64\s0 architecture.
13133 .IP "\fB\-mbig\-endian\fR" 4
13134 .IX Item "-mbig-endian"
13135 Generate code for a big-endian target.  This is the default for HP-UX.
13136 .IP "\fB\-mlittle\-endian\fR" 4
13137 .IX Item "-mlittle-endian"
13138 Generate code for a little-endian target.  This is the default for \s-1AIX5\s0
13139 and GNU/Linux.
13140 .IP "\fB\-mgnu\-as\fR" 4
13141 .IX Item "-mgnu-as"
13142 .PD 0
13143 .IP "\fB\-mno\-gnu\-as\fR" 4
13144 .IX Item "-mno-gnu-as"
13145 .PD
13146 Generate (or don't) code for the \s-1GNU\s0 assembler.  This is the default.
13147 .IP "\fB\-mgnu\-ld\fR" 4
13148 .IX Item "-mgnu-ld"
13149 .PD 0
13150 .IP "\fB\-mno\-gnu\-ld\fR" 4
13151 .IX Item "-mno-gnu-ld"
13152 .PD
13153 Generate (or don't) code for the \s-1GNU\s0 linker.  This is the default.
13154 .IP "\fB\-mno\-pic\fR" 4
13155 .IX Item "-mno-pic"
13156 Generate code that does not use a global pointer register.  The result
13157 is not position independent code, and violates the \s-1IA\-64\s0 \s-1ABI\s0.
13158 .IP "\fB\-mvolatile\-asm\-stop\fR" 4
13159 .IX Item "-mvolatile-asm-stop"
13160 .PD 0
13161 .IP "\fB\-mno\-volatile\-asm\-stop\fR" 4
13162 .IX Item "-mno-volatile-asm-stop"
13163 .PD
13164 Generate (or don't) a stop bit immediately before and after volatile asm
13165 statements.
13166 .IP "\fB\-mregister\-names\fR" 4
13167 .IX Item "-mregister-names"
13168 .PD 0
13169 .IP "\fB\-mno\-register\-names\fR" 4
13170 .IX Item "-mno-register-names"
13171 .PD
13172 Generate (or don't) \fBin\fR, \fBloc\fR, and \fBout\fR register names for
13173 the stacked registers.  This may make assembler output more readable.
13174 .IP "\fB\-mno\-sdata\fR" 4
13175 .IX Item "-mno-sdata"
13176 .PD 0
13177 .IP "\fB\-msdata\fR" 4
13178 .IX Item "-msdata"
13179 .PD
13180 Disable (or enable) optimizations that use the small data section.  This may
13181 be useful for working around optimizer bugs.
13182 .IP "\fB\-mconstant\-gp\fR" 4
13183 .IX Item "-mconstant-gp"
13184 Generate code that uses a single constant global pointer value.  This is
13185 useful when compiling kernel code.
13186 .IP "\fB\-mauto\-pic\fR" 4
13187 .IX Item "-mauto-pic"
13188 Generate code that is self-relocatable.  This implies \fB\-mconstant\-gp\fR.
13189 This is useful when compiling firmware code.
13190 .IP "\fB\-minline\-float\-divide\-min\-latency\fR" 4
13191 .IX Item "-minline-float-divide-min-latency"
13192 Generate code for inline divides of floating-point values
13193 using the minimum latency algorithm.
13194 .IP "\fB\-minline\-float\-divide\-max\-throughput\fR" 4
13195 .IX Item "-minline-float-divide-max-throughput"
13196 Generate code for inline divides of floating-point values
13197 using the maximum throughput algorithm.
13198 .IP "\fB\-mno\-inline\-float\-divide\fR" 4
13199 .IX Item "-mno-inline-float-divide"
13200 Do not generate inline code for divides of floating-point values.
13201 .IP "\fB\-minline\-int\-divide\-min\-latency\fR" 4
13202 .IX Item "-minline-int-divide-min-latency"
13203 Generate code for inline divides of integer values
13204 using the minimum latency algorithm.
13205 .IP "\fB\-minline\-int\-divide\-max\-throughput\fR" 4
13206 .IX Item "-minline-int-divide-max-throughput"
13207 Generate code for inline divides of integer values
13208 using the maximum throughput algorithm.
13209 .IP "\fB\-mno\-inline\-int\-divide\fR" 4
13210 .IX Item "-mno-inline-int-divide"
13211 Do not generate inline code for divides of integer values.
13212 .IP "\fB\-minline\-sqrt\-min\-latency\fR" 4
13213 .IX Item "-minline-sqrt-min-latency"
13214 Generate code for inline square roots
13215 using the minimum latency algorithm.
13216 .IP "\fB\-minline\-sqrt\-max\-throughput\fR" 4
13217 .IX Item "-minline-sqrt-max-throughput"
13218 Generate code for inline square roots
13219 using the maximum throughput algorithm.
13220 .IP "\fB\-mno\-inline\-sqrt\fR" 4
13221 .IX Item "-mno-inline-sqrt"
13222 Do not generate inline code for sqrt.
13223 .IP "\fB\-mfused\-madd\fR" 4
13224 .IX Item "-mfused-madd"
13225 .PD 0
13226 .IP "\fB\-mno\-fused\-madd\fR" 4
13227 .IX Item "-mno-fused-madd"
13228 .PD
13229 Do (don't) generate code that uses the fused multiply/add or multiply/subtract
13230 instructions.  The default is to use these instructions.
13231 .IP "\fB\-mno\-dwarf2\-asm\fR" 4
13232 .IX Item "-mno-dwarf2-asm"
13233 .PD 0
13234 .IP "\fB\-mdwarf2\-asm\fR" 4
13235 .IX Item "-mdwarf2-asm"
13236 .PD
13237 Don't (or do) generate assembler code for the \s-1DWARF2\s0 line number debugging
13238 info.  This may be useful when not using the \s-1GNU\s0 assembler.
13239 .IP "\fB\-mearly\-stop\-bits\fR" 4
13240 .IX Item "-mearly-stop-bits"
13241 .PD 0
13242 .IP "\fB\-mno\-early\-stop\-bits\fR" 4
13243 .IX Item "-mno-early-stop-bits"
13244 .PD
13245 Allow stop bits to be placed earlier than immediately preceding the
13246 instruction that triggered the stop bit.  This can improve instruction
13247 scheduling, but does not always do so.
13248 .IP "\fB\-mfixed\-range=\fR\fIregister-range\fR" 4
13249 .IX Item "-mfixed-range=register-range"
13250 Generate code treating the given register range as fixed registers.
13251 A fixed register is one that the register allocator can not use.  This is
13252 useful when compiling kernel code.  A register range is specified as
13253 two registers separated by a dash.  Multiple register ranges can be
13254 specified separated by a comma.
13255 .IP "\fB\-mtls\-size=\fR\fItls-size\fR" 4
13256 .IX Item "-mtls-size=tls-size"
13257 Specify bit size of immediate \s-1TLS\s0 offsets.  Valid values are 14, 22, and
13258 64.
13259 .IP "\fB\-mtune=\fR\fIcpu-type\fR" 4
13260 .IX Item "-mtune=cpu-type"
13261 Tune the instruction scheduling for a particular \s-1CPU\s0, Valid values are
13262 itanium, itanium1, merced, itanium2, and mckinley.
13263 .IP "\fB\-milp32\fR" 4
13264 .IX Item "-milp32"
13265 .PD 0
13266 .IP "\fB\-mlp64\fR" 4
13267 .IX Item "-mlp64"
13268 .PD
13269 Generate code for a 32\-bit or 64\-bit environment.
13270 The 32\-bit environment sets int, long and pointer to 32 bits.
13271 The 64\-bit environment sets int to 32 bits and long and pointer
13272 to 64 bits.  These are HP-UX specific flags.
13273 .IP "\fB\-mno\-sched\-br\-data\-spec\fR" 4
13274 .IX Item "-mno-sched-br-data-spec"
13275 .PD 0
13276 .IP "\fB\-msched\-br\-data\-spec\fR" 4
13277 .IX Item "-msched-br-data-spec"
13278 .PD
13279 (Dis/En)able data speculative scheduling before reload.
13280 This will result in generation of the ld.a instructions and
13281 the corresponding check instructions (ld.c / chk.a).
13282 The default is 'disable'.
13283 .IP "\fB\-msched\-ar\-data\-spec\fR" 4
13284 .IX Item "-msched-ar-data-spec"
13285 .PD 0
13286 .IP "\fB\-mno\-sched\-ar\-data\-spec\fR" 4
13287 .IX Item "-mno-sched-ar-data-spec"
13288 .PD
13289 (En/Dis)able data speculative scheduling after reload.
13290 This will result in generation of the ld.a instructions and
13291 the corresponding check instructions (ld.c / chk.a).
13292 The default is 'enable'.
13293 .IP "\fB\-mno\-sched\-control\-spec\fR" 4
13294 .IX Item "-mno-sched-control-spec"
13295 .PD 0
13296 .IP "\fB\-msched\-control\-spec\fR" 4
13297 .IX Item "-msched-control-spec"
13298 .PD
13299 (Dis/En)able control speculative scheduling.  This feature is
13300 available only during region scheduling (i.e. before reload).
13301 This will result in generation of the ld.s instructions and
13302 the corresponding check instructions chk.s .
13303 The default is 'disable'.
13304 .IP "\fB\-msched\-br\-in\-data\-spec\fR" 4
13305 .IX Item "-msched-br-in-data-spec"
13306 .PD 0
13307 .IP "\fB\-mno\-sched\-br\-in\-data\-spec\fR" 4
13308 .IX Item "-mno-sched-br-in-data-spec"
13309 .PD
13310 (En/Dis)able speculative scheduling of the instructions that
13311 are dependent on the data speculative loads before reload.
13312 This is effective only with \fB\-msched\-br\-data\-spec\fR enabled.
13313 The default is 'enable'.
13314 .IP "\fB\-msched\-ar\-in\-data\-spec\fR" 4
13315 .IX Item "-msched-ar-in-data-spec"
13316 .PD 0
13317 .IP "\fB\-mno\-sched\-ar\-in\-data\-spec\fR" 4
13318 .IX Item "-mno-sched-ar-in-data-spec"
13319 .PD
13320 (En/Dis)able speculative scheduling of the instructions that
13321 are dependent on the data speculative loads after reload.
13322 This is effective only with \fB\-msched\-ar\-data\-spec\fR enabled.
13323 The default is 'enable'.
13324 .IP "\fB\-msched\-in\-control\-spec\fR" 4
13325 .IX Item "-msched-in-control-spec"
13326 .PD 0
13327 .IP "\fB\-mno\-sched\-in\-control\-spec\fR" 4
13328 .IX Item "-mno-sched-in-control-spec"
13329 .PD
13330 (En/Dis)able speculative scheduling of the instructions that
13331 are dependent on the control speculative loads.
13332 This is effective only with \fB\-msched\-control\-spec\fR enabled.
13333 The default is 'enable'.
13334 .IP "\fB\-mno\-sched\-prefer\-non\-data\-spec\-insns\fR" 4
13335 .IX Item "-mno-sched-prefer-non-data-spec-insns"
13336 .PD 0
13337 .IP "\fB\-msched\-prefer\-non\-data\-spec\-insns\fR" 4
13338 .IX Item "-msched-prefer-non-data-spec-insns"
13339 .PD
13340 If enabled, data speculative instructions will be chosen for schedule
13341 only if there are no other choices at the moment.  This will make
13342 the use of the data speculation much more conservative.
13343 The default is 'disable'.
13344 .IP "\fB\-mno\-sched\-prefer\-non\-control\-spec\-insns\fR" 4
13345 .IX Item "-mno-sched-prefer-non-control-spec-insns"
13346 .PD 0
13347 .IP "\fB\-msched\-prefer\-non\-control\-spec\-insns\fR" 4
13348 .IX Item "-msched-prefer-non-control-spec-insns"
13349 .PD
13350 If enabled, control speculative instructions will be chosen for schedule
13351 only if there are no other choices at the moment.  This will make
13352 the use of the control speculation much more conservative.
13353 The default is 'disable'.
13354 .IP "\fB\-mno\-sched\-count\-spec\-in\-critical\-path\fR" 4
13355 .IX Item "-mno-sched-count-spec-in-critical-path"
13356 .PD 0
13357 .IP "\fB\-msched\-count\-spec\-in\-critical\-path\fR" 4
13358 .IX Item "-msched-count-spec-in-critical-path"
13359 .PD
13360 If enabled, speculative dependencies will be considered during
13361 computation of the instructions priorities.  This will make the use of the
13362 speculation a bit more conservative.
13363 The default is 'disable'.
13364 .IP "\fB\-msched\-spec\-ldc\fR" 4
13365 .IX Item "-msched-spec-ldc"
13366 Use a simple data speculation check.  This option is on by default.
13367 .IP "\fB\-msched\-control\-spec\-ldc\fR" 4
13368 .IX Item "-msched-control-spec-ldc"
13369 Use a simple check for control speculation.  This option is on by default.
13370 .IP "\fB\-msched\-stop\-bits\-after\-every\-cycle\fR" 4
13371 .IX Item "-msched-stop-bits-after-every-cycle"
13372 Place a stop bit after every cycle when scheduling.  This option is on
13373 by default.
13374 .IP "\fB\-msched\-fp\-mem\-deps\-zero\-cost\fR" 4
13375 .IX Item "-msched-fp-mem-deps-zero-cost"
13376 Assume that floating-point stores and loads are not likely to cause a conflict
13377 when placed into the same instruction group.  This option is disabled by
13378 default.
13379 .IP "\fB\-msel\-sched\-dont\-check\-control\-spec\fR" 4
13380 .IX Item "-msel-sched-dont-check-control-spec"
13381 Generate checks for control speculation in selective scheduling.
13382 This flag is disabled by default.
13383 .IP "\fB\-msched\-max\-memory\-insns=\fR\fImax-insns\fR" 4
13384 .IX Item "-msched-max-memory-insns=max-insns"
13385 Limit on the number of memory insns per instruction group, giving lower
13386 priority to subsequent memory insns attempting to schedule in the same
13387 instruction group. Frequently useful to prevent cache bank conflicts.
13388 The default value is 1.
13389 .IP "\fB\-msched\-max\-memory\-insns\-hard\-limit\fR" 4
13390 .IX Item "-msched-max-memory-insns-hard-limit"
13391 Disallow more than `msched\-max\-memory\-insns' in instruction group.
13392 Otherwise, limit is `soft' meaning that we would prefer non-memory operations
13393 when limit is reached but may still schedule memory operations.
13394 .PP
13395 \fI\s-1IA\-64/VMS\s0 Options\fR
13396 .IX Subsection "IA-64/VMS Options"
13397 .PP
13398 These \fB\-m\fR options are defined for the \s-1IA\-64/VMS\s0 implementations:
13399 .IP "\fB\-mvms\-return\-codes\fR" 4
13400 .IX Item "-mvms-return-codes"
13401 Return \s-1VMS\s0 condition codes from main. The default is to return \s-1POSIX\s0
13402 style condition (e.g. error) codes.
13403 .IP "\fB\-mdebug\-main=\fR\fIprefix\fR" 4
13404 .IX Item "-mdebug-main=prefix"
13405 Flag the first routine whose name starts with \fIprefix\fR as the main
13406 routine for the debugger.
13407 .IP "\fB\-mmalloc64\fR" 4
13408 .IX Item "-mmalloc64"
13409 Default to 64\-bit memory allocation routines.
13410 .PP
13411 \fI\s-1LM32\s0 Options\fR
13412 .IX Subsection "LM32 Options"
13413 .PP
13414 These \fB\-m\fR options are defined for the Lattice Mico32 architecture:
13415 .IP "\fB\-mbarrel\-shift\-enabled\fR" 4
13416 .IX Item "-mbarrel-shift-enabled"
13417 Enable barrel-shift instructions.
13418 .IP "\fB\-mdivide\-enabled\fR" 4
13419 .IX Item "-mdivide-enabled"
13420 Enable divide and modulus instructions.
13421 .IP "\fB\-mmultiply\-enabled\fR" 4
13422 .IX Item "-mmultiply-enabled"
13423 Enable multiply instructions.
13424 .IP "\fB\-msign\-extend\-enabled\fR" 4
13425 .IX Item "-msign-extend-enabled"
13426 Enable sign extend instructions.
13427 .IP "\fB\-muser\-enabled\fR" 4
13428 .IX Item "-muser-enabled"
13429 Enable user-defined instructions.
13430 .PP
13431 \fIM32C Options\fR
13432 .IX Subsection "M32C Options"
13433 .IP "\fB\-mcpu=\fR\fIname\fR" 4
13434 .IX Item "-mcpu=name"
13435 Select the \s-1CPU\s0 for which code is generated.  \fIname\fR may be one of
13436 \&\fBr8c\fR for the R8C/Tiny series, \fBm16c\fR for the M16C (up to
13437 /60) series, \fBm32cm\fR for the M16C/80 series, or \fBm32c\fR for
13438 the M32C/80 series.
13439 .IP "\fB\-msim\fR" 4
13440 .IX Item "-msim"
13441 Specifies that the program will be run on the simulator.  This causes
13442 an alternate runtime library to be linked in which supports, for
13443 example, file I/O.  You must not use this option when generating
13444 programs that will run on real hardware; you must provide your own
13445 runtime library for whatever I/O functions are needed.
13446 .IP "\fB\-memregs=\fR\fInumber\fR" 4
13447 .IX Item "-memregs=number"
13448 Specifies the number of memory-based pseudo-registers \s-1GCC\s0 will use
13449 during code generation.  These pseudo-registers will be used like real
13450 registers, so there is a tradeoff between \s-1GCC\s0's ability to fit the
13451 code into available registers, and the performance penalty of using
13452 memory instead of registers.  Note that all modules in a program must
13453 be compiled with the same value for this option.  Because of that, you
13454 must not use this option with the default runtime libraries gcc
13455 builds.
13456 .PP
13457 \fIM32R/D Options\fR
13458 .IX Subsection "M32R/D Options"
13459 .PP
13460 These \fB\-m\fR options are defined for Renesas M32R/D architectures:
13461 .IP "\fB\-m32r2\fR" 4
13462 .IX Item "-m32r2"
13463 Generate code for the M32R/2.
13464 .IP "\fB\-m32rx\fR" 4
13465 .IX Item "-m32rx"
13466 Generate code for the M32R/X.
13467 .IP "\fB\-m32r\fR" 4
13468 .IX Item "-m32r"
13469 Generate code for the M32R.  This is the default.
13470 .IP "\fB\-mmodel=small\fR" 4
13471 .IX Item "-mmodel=small"
13472 Assume all objects live in the lower 16MB of memory (so that their addresses
13473 can be loaded with the \f(CW\*(C`ld24\*(C'\fR instruction), and assume all subroutines
13474 are reachable with the \f(CW\*(C`bl\*(C'\fR instruction.
13475 This is the default.
13476 .Sp
13477 The addressability of a particular object can be set with the
13478 \&\f(CW\*(C`model\*(C'\fR attribute.
13479 .IP "\fB\-mmodel=medium\fR" 4
13480 .IX Item "-mmodel=medium"
13481 Assume objects may be anywhere in the 32\-bit address space (the compiler
13482 will generate \f(CW\*(C`seth/add3\*(C'\fR instructions to load their addresses), and
13483 assume all subroutines are reachable with the \f(CW\*(C`bl\*(C'\fR instruction.
13484 .IP "\fB\-mmodel=large\fR" 4
13485 .IX Item "-mmodel=large"
13486 Assume objects may be anywhere in the 32\-bit address space (the compiler
13487 will generate \f(CW\*(C`seth/add3\*(C'\fR instructions to load their addresses), and
13488 assume subroutines may not be reachable with the \f(CW\*(C`bl\*(C'\fR instruction
13489 (the compiler will generate the much slower \f(CW\*(C`seth/add3/jl\*(C'\fR
13490 instruction sequence).
13491 .IP "\fB\-msdata=none\fR" 4
13492 .IX Item "-msdata=none"
13493 Disable use of the small data area.  Variables will be put into
13494 one of \fB.data\fR, \fBbss\fR, or \fB.rodata\fR (unless the
13495 \&\f(CW\*(C`section\*(C'\fR attribute has been specified).
13496 This is the default.
13497 .Sp
13498 The small data area consists of sections \fB.sdata\fR and \fB.sbss\fR.
13499 Objects may be explicitly put in the small data area with the
13500 \&\f(CW\*(C`section\*(C'\fR attribute using one of these sections.
13501 .IP "\fB\-msdata=sdata\fR" 4
13502 .IX Item "-msdata=sdata"
13503 Put small global and static data in the small data area, but do not
13504 generate special code to reference them.
13505 .IP "\fB\-msdata=use\fR" 4
13506 .IX Item "-msdata=use"
13507 Put small global and static data in the small data area, and generate
13508 special instructions to reference them.
13509 .IP "\fB\-G\fR \fInum\fR" 4
13510 .IX Item "-G num"
13511 Put global and static objects less than or equal to \fInum\fR bytes
13512 into the small data or bss sections instead of the normal data or bss
13513 sections.  The default value of \fInum\fR is 8.
13514 The \fB\-msdata\fR option must be set to one of \fBsdata\fR or \fBuse\fR
13515 for this option to have any effect.
13516 .Sp
13517 All modules should be compiled with the same \fB\-G\fR \fInum\fR value.
13518 Compiling with different values of \fInum\fR may or may not work; if it
13519 doesn't the linker will give an error message\-\-\-incorrect code will not be
13520 generated.
13521 .IP "\fB\-mdebug\fR" 4
13522 .IX Item "-mdebug"
13523 Makes the M32R specific code in the compiler display some statistics
13524 that might help in debugging programs.
13525 .IP "\fB\-malign\-loops\fR" 4
13526 .IX Item "-malign-loops"
13527 Align all loops to a 32\-byte boundary.
13528 .IP "\fB\-mno\-align\-loops\fR" 4
13529 .IX Item "-mno-align-loops"
13530 Do not enforce a 32\-byte alignment for loops.  This is the default.
13531 .IP "\fB\-missue\-rate=\fR\fInumber\fR" 4
13532 .IX Item "-missue-rate=number"
13533 Issue \fInumber\fR instructions per cycle.  \fInumber\fR can only be 1
13534 or 2.
13535 .IP "\fB\-mbranch\-cost=\fR\fInumber\fR" 4
13536 .IX Item "-mbranch-cost=number"
13537 \&\fInumber\fR can only be 1 or 2.  If it is 1 then branches will be
13538 preferred over conditional code, if it is 2, then the opposite will
13539 apply.
13540 .IP "\fB\-mflush\-trap=\fR\fInumber\fR" 4
13541 .IX Item "-mflush-trap=number"
13542 Specifies the trap number to use to flush the cache.  The default is
13543 12.  Valid numbers are between 0 and 15 inclusive.
13544 .IP "\fB\-mno\-flush\-trap\fR" 4
13545 .IX Item "-mno-flush-trap"
13546 Specifies that the cache cannot be flushed by using a trap.
13547 .IP "\fB\-mflush\-func=\fR\fIname\fR" 4
13548 .IX Item "-mflush-func=name"
13549 Specifies the name of the operating system function to call to flush
13550 the cache.  The default is \fI_flush_cache\fR, but a function call
13551 will only be used if a trap is not available.
13552 .IP "\fB\-mno\-flush\-func\fR" 4
13553 .IX Item "-mno-flush-func"
13554 Indicates that there is no \s-1OS\s0 function for flushing the cache.
13555 .PP
13556 \fIM680x0 Options\fR
13557 .IX Subsection "M680x0 Options"
13558 .PP
13559 These are the \fB\-m\fR options defined for M680x0 and ColdFire processors.
13560 The default settings depend on which architecture was selected when
13561 the compiler was configured; the defaults for the most common choices
13562 are given below.
13563 .IP "\fB\-march=\fR\fIarch\fR" 4
13564 .IX Item "-march=arch"
13565 Generate code for a specific M680x0 or ColdFire instruction set
13566 architecture.  Permissible values of \fIarch\fR for M680x0
13567 architectures are: \fB68000\fR, \fB68010\fR, \fB68020\fR,
13568 \&\fB68030\fR, \fB68040\fR, \fB68060\fR and \fBcpu32\fR.  ColdFire
13569 architectures are selected according to Freescale's \s-1ISA\s0 classification
13570 and the permissible values are: \fBisaa\fR, \fBisaaplus\fR,
13571 \&\fBisab\fR and \fBisac\fR.
13572 .Sp
13573 gcc defines a macro \fB_\|_mcf\fR\fIarch\fR\fB_\|_\fR whenever it is generating
13574 code for a ColdFire target.  The \fIarch\fR in this macro is one of the
13575 \&\fB\-march\fR arguments given above.
13576 .Sp
13577 When used together, \fB\-march\fR and \fB\-mtune\fR select code
13578 that runs on a family of similar processors but that is optimized
13579 for a particular microarchitecture.
13580 .IP "\fB\-mcpu=\fR\fIcpu\fR" 4
13581 .IX Item "-mcpu=cpu"
13582 Generate code for a specific M680x0 or ColdFire processor.
13583 The M680x0 \fIcpu\fRs are: \fB68000\fR, \fB68010\fR, \fB68020\fR,
13584 \&\fB68030\fR, \fB68040\fR, \fB68060\fR, \fB68302\fR, \fB68332\fR
13585 and \fBcpu32\fR.  The ColdFire \fIcpu\fRs are given by the table
13586 below, which also classifies the CPUs into families:
13587 .RS 4
13588 .IP "Family : \fB\-mcpu\fR arguments" 4
13589 .IX Item "Family : -mcpu arguments"
13590 .PD 0
13591 .IP "\fB51\fR : \fB51\fR \fB51ac\fR \fB51cn\fR \fB51em\fR \fB51qe\fR" 4
13592 .IX Item "51 : 51 51ac 51cn 51em 51qe"
13593 .IP "\fB5206\fR : \fB5202\fR \fB5204\fR \fB5206\fR" 4
13594 .IX Item "5206 : 5202 5204 5206"
13595 .IP "\fB5206e\fR : \fB5206e\fR" 4
13596 .IX Item "5206e : 5206e"
13597 .IP "\fB5208\fR : \fB5207\fR \fB5208\fR" 4
13598 .IX Item "5208 : 5207 5208"
13599 .IP "\fB5211a\fR : \fB5210a\fR \fB5211a\fR" 4
13600 .IX Item "5211a : 5210a 5211a"
13601 .IP "\fB5213\fR : \fB5211\fR \fB5212\fR \fB5213\fR" 4
13602 .IX Item "5213 : 5211 5212 5213"
13603 .IP "\fB5216\fR : \fB5214\fR \fB5216\fR" 4
13604 .IX Item "5216 : 5214 5216"
13605 .IP "\fB52235\fR : \fB52230\fR \fB52231\fR \fB52232\fR \fB52233\fR \fB52234\fR \fB52235\fR" 4
13606 .IX Item "52235 : 52230 52231 52232 52233 52234 52235"
13607 .IP "\fB5225\fR : \fB5224\fR \fB5225\fR" 4
13608 .IX Item "5225 : 5224 5225"
13609 .IP "\fB52259\fR : \fB52252\fR \fB52254\fR \fB52255\fR \fB52256\fR \fB52258\fR \fB52259\fR" 4
13610 .IX Item "52259 : 52252 52254 52255 52256 52258 52259"
13611 .IP "\fB5235\fR : \fB5232\fR \fB5233\fR \fB5234\fR \fB5235\fR \fB523x\fR" 4
13612 .IX Item "5235 : 5232 5233 5234 5235 523x"
13613 .IP "\fB5249\fR : \fB5249\fR" 4
13614 .IX Item "5249 : 5249"
13615 .IP "\fB5250\fR : \fB5250\fR" 4
13616 .IX Item "5250 : 5250"
13617 .IP "\fB5271\fR : \fB5270\fR \fB5271\fR" 4
13618 .IX Item "5271 : 5270 5271"
13619 .IP "\fB5272\fR : \fB5272\fR" 4
13620 .IX Item "5272 : 5272"
13621 .IP "\fB5275\fR : \fB5274\fR \fB5275\fR" 4
13622 .IX Item "5275 : 5274 5275"
13623 .IP "\fB5282\fR : \fB5280\fR \fB5281\fR \fB5282\fR \fB528x\fR" 4
13624 .IX Item "5282 : 5280 5281 5282 528x"
13625 .IP "\fB53017\fR : \fB53011\fR \fB53012\fR \fB53013\fR \fB53014\fR \fB53015\fR \fB53016\fR \fB53017\fR" 4
13626 .IX Item "53017 : 53011 53012 53013 53014 53015 53016 53017"
13627 .IP "\fB5307\fR : \fB5307\fR" 4
13628 .IX Item "5307 : 5307"
13629 .IP "\fB5329\fR : \fB5327\fR \fB5328\fR \fB5329\fR \fB532x\fR" 4
13630 .IX Item "5329 : 5327 5328 5329 532x"
13631 .IP "\fB5373\fR : \fB5372\fR \fB5373\fR \fB537x\fR" 4
13632 .IX Item "5373 : 5372 5373 537x"
13633 .IP "\fB5407\fR : \fB5407\fR" 4
13634 .IX Item "5407 : 5407"
13635 .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
13636 .IX Item "5475 : 5470 5471 5472 5473 5474 5475 547x 5480 5481 5482 5483 5484 5485"
13637 .RE
13638 .RS 4
13639 .PD
13640 .Sp
13641 \&\fB\-mcpu=\fR\fIcpu\fR overrides \fB\-march=\fR\fIarch\fR if
13642 \&\fIarch\fR is compatible with \fIcpu\fR.  Other combinations of
13643 \&\fB\-mcpu\fR and \fB\-march\fR are rejected.
13644 .Sp
13645 gcc defines the macro \fB_\|_mcf_cpu_\fR\fIcpu\fR when ColdFire target
13646 \&\fIcpu\fR is selected.  It also defines \fB_\|_mcf_family_\fR\fIfamily\fR,
13647 where the value of \fIfamily\fR is given by the table above.
13648 .RE
13649 .IP "\fB\-mtune=\fR\fItune\fR" 4
13650 .IX Item "-mtune=tune"
13651 Tune the code for a particular microarchitecture, within the
13652 constraints set by \fB\-march\fR and \fB\-mcpu\fR.
13653 The M680x0 microarchitectures are: \fB68000\fR, \fB68010\fR,
13654 \&\fB68020\fR, \fB68030\fR, \fB68040\fR, \fB68060\fR
13655 and \fBcpu32\fR.  The ColdFire microarchitectures
13656 are: \fBcfv1\fR, \fBcfv2\fR, \fBcfv3\fR, \fBcfv4\fR and \fBcfv4e\fR.
13657 .Sp
13658 You can also use \fB\-mtune=68020\-40\fR for code that needs
13659 to run relatively well on 68020, 68030 and 68040 targets.
13660 \&\fB\-mtune=68020\-60\fR is similar but includes 68060 targets
13661 as well.  These two options select the same tuning decisions as
13662 \&\fB\-m68020\-40\fR and \fB\-m68020\-60\fR respectively.
13663 .Sp
13664 gcc defines the macros \fB_\|_mc\fR\fIarch\fR and \fB_\|_mc\fR\fIarch\fR\fB_\|_\fR
13665 when tuning for 680x0 architecture \fIarch\fR.  It also defines
13666 \&\fBmc\fR\fIarch\fR unless either \fB\-ansi\fR or a non-GNU \fB\-std\fR
13667 option is used.  If gcc is tuning for a range of architectures,
13668 as selected by \fB\-mtune=68020\-40\fR or \fB\-mtune=68020\-60\fR,
13669 it defines the macros for every architecture in the range.
13670 .Sp
13671 gcc also defines the macro \fB_\|_m\fR\fIuarch\fR\fB_\|_\fR when tuning for
13672 ColdFire microarchitecture \fIuarch\fR, where \fIuarch\fR is one
13673 of the arguments given above.
13674 .IP "\fB\-m68000\fR" 4
13675 .IX Item "-m68000"
13676 .PD 0
13677 .IP "\fB\-mc68000\fR" 4
13678 .IX Item "-mc68000"
13679 .PD
13680 Generate output for a 68000.  This is the default
13681 when the compiler is configured for 68000\-based systems.
13682 It is equivalent to \fB\-march=68000\fR.
13683 .Sp
13684 Use this option for microcontrollers with a 68000 or \s-1EC000\s0 core,
13685 including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
13686 .IP "\fB\-m68010\fR" 4
13687 .IX Item "-m68010"
13688 Generate output for a 68010.  This is the default
13689 when the compiler is configured for 68010\-based systems.
13690 It is equivalent to \fB\-march=68010\fR.
13691 .IP "\fB\-m68020\fR" 4
13692 .IX Item "-m68020"
13693 .PD 0
13694 .IP "\fB\-mc68020\fR" 4
13695 .IX Item "-mc68020"
13696 .PD
13697 Generate output for a 68020.  This is the default
13698 when the compiler is configured for 68020\-based systems.
13699 It is equivalent to \fB\-march=68020\fR.
13700 .IP "\fB\-m68030\fR" 4
13701 .IX Item "-m68030"
13702 Generate output for a 68030.  This is the default when the compiler is
13703 configured for 68030\-based systems.  It is equivalent to
13704 \&\fB\-march=68030\fR.
13705 .IP "\fB\-m68040\fR" 4
13706 .IX Item "-m68040"
13707 Generate output for a 68040.  This is the default when the compiler is
13708 configured for 68040\-based systems.  It is equivalent to
13709 \&\fB\-march=68040\fR.
13710 .Sp
13711 This option inhibits the use of 68881/68882 instructions that have to be
13712 emulated by software on the 68040.  Use this option if your 68040 does not
13713 have code to emulate those instructions.
13714 .IP "\fB\-m68060\fR" 4
13715 .IX Item "-m68060"
13716 Generate output for a 68060.  This is the default when the compiler is
13717 configured for 68060\-based systems.  It is equivalent to
13718 \&\fB\-march=68060\fR.
13719 .Sp
13720 This option inhibits the use of 68020 and 68881/68882 instructions that
13721 have to be emulated by software on the 68060.  Use this option if your 68060
13722 does not have code to emulate those instructions.
13723 .IP "\fB\-mcpu32\fR" 4
13724 .IX Item "-mcpu32"
13725 Generate output for a \s-1CPU32\s0.  This is the default
13726 when the compiler is configured for CPU32\-based systems.
13727 It is equivalent to \fB\-march=cpu32\fR.
13728 .Sp
13729 Use this option for microcontrollers with a
13730 \&\s-1CPU32\s0 or \s-1CPU32+\s0 core, including the 68330, 68331, 68332, 68333, 68334,
13731 68336, 68340, 68341, 68349 and 68360.
13732 .IP "\fB\-m5200\fR" 4
13733 .IX Item "-m5200"
13734 Generate output for a 520X ColdFire \s-1CPU\s0.  This is the default
13735 when the compiler is configured for 520X\-based systems.
13736 It is equivalent to \fB\-mcpu=5206\fR, and is now deprecated
13737 in favor of that option.
13738 .Sp
13739 Use this option for microcontroller with a 5200 core, including
13740 the \s-1MCF5202\s0, \s-1MCF5203\s0, \s-1MCF5204\s0 and \s-1MCF5206\s0.
13741 .IP "\fB\-m5206e\fR" 4
13742 .IX Item "-m5206e"
13743 Generate output for a 5206e ColdFire \s-1CPU\s0.  The option is now
13744 deprecated in favor of the equivalent \fB\-mcpu=5206e\fR.
13745 .IP "\fB\-m528x\fR" 4
13746 .IX Item "-m528x"
13747 Generate output for a member of the ColdFire 528X family.
13748 The option is now deprecated in favor of the equivalent
13749 \&\fB\-mcpu=528x\fR.
13750 .IP "\fB\-m5307\fR" 4
13751 .IX Item "-m5307"
13752 Generate output for a ColdFire 5307 \s-1CPU\s0.  The option is now deprecated
13753 in favor of the equivalent \fB\-mcpu=5307\fR.
13754 .IP "\fB\-m5407\fR" 4
13755 .IX Item "-m5407"
13756 Generate output for a ColdFire 5407 \s-1CPU\s0.  The option is now deprecated
13757 in favor of the equivalent \fB\-mcpu=5407\fR.
13758 .IP "\fB\-mcfv4e\fR" 4
13759 .IX Item "-mcfv4e"
13760 Generate output for a ColdFire V4e family \s-1CPU\s0 (e.g. 547x/548x).
13761 This includes use of hardware floating-point instructions.
13762 The option is equivalent to \fB\-mcpu=547x\fR, and is now
13763 deprecated in favor of that option.
13764 .IP "\fB\-m68020\-40\fR" 4
13765 .IX Item "-m68020-40"
13766 Generate output for a 68040, without using any of the new instructions.
13767 This results in code that can run relatively efficiently on either a
13768 68020/68881 or a 68030 or a 68040.  The generated code does use the
13769 68881 instructions that are emulated on the 68040.
13770 .Sp
13771 The option is equivalent to \fB\-march=68020\fR \fB\-mtune=68020\-40\fR.
13772 .IP "\fB\-m68020\-60\fR" 4
13773 .IX Item "-m68020-60"
13774 Generate output for a 68060, without using any of the new instructions.
13775 This results in code that can run relatively efficiently on either a
13776 68020/68881 or a 68030 or a 68040.  The generated code does use the
13777 68881 instructions that are emulated on the 68060.
13778 .Sp
13779 The option is equivalent to \fB\-march=68020\fR \fB\-mtune=68020\-60\fR.
13780 .IP "\fB\-mhard\-float\fR" 4
13781 .IX Item "-mhard-float"
13782 .PD 0
13783 .IP "\fB\-m68881\fR" 4
13784 .IX Item "-m68881"
13785 .PD
13786 Generate floating-point instructions.  This is the default for 68020
13787 and above, and for ColdFire devices that have an \s-1FPU\s0.  It defines the
13788 macro \fB_\|_HAVE_68881_\|_\fR on M680x0 targets and \fB_\|_mcffpu_\|_\fR
13789 on ColdFire targets.
13790 .IP "\fB\-msoft\-float\fR" 4
13791 .IX Item "-msoft-float"
13792 Do not generate floating-point instructions; use library calls instead.
13793 This is the default for 68000, 68010, and 68832 targets.  It is also
13794 the default for ColdFire devices that have no \s-1FPU\s0.
13795 .IP "\fB\-mdiv\fR" 4
13796 .IX Item "-mdiv"
13797 .PD 0
13798 .IP "\fB\-mno\-div\fR" 4
13799 .IX Item "-mno-div"
13800 .PD
13801 Generate (do not generate) ColdFire hardware divide and remainder
13802 instructions.  If \fB\-march\fR is used without \fB\-mcpu\fR,
13803 the default is \*(L"on\*(R" for ColdFire architectures and \*(L"off\*(R" for M680x0
13804 architectures.  Otherwise, the default is taken from the target \s-1CPU\s0
13805 (either the default \s-1CPU\s0, or the one specified by \fB\-mcpu\fR).  For
13806 example, the default is \*(L"off\*(R" for \fB\-mcpu=5206\fR and \*(L"on\*(R" for
13807 \&\fB\-mcpu=5206e\fR.
13808 .Sp
13809 gcc defines the macro \fB_\|_mcfhwdiv_\|_\fR when this option is enabled.
13810 .IP "\fB\-mshort\fR" 4
13811 .IX Item "-mshort"
13812 Consider type \f(CW\*(C`int\*(C'\fR to be 16 bits wide, like \f(CW\*(C`short int\*(C'\fR.
13813 Additionally, parameters passed on the stack are also aligned to a
13814 16\-bit boundary even on targets whose \s-1API\s0 mandates promotion to 32\-bit.
13815 .IP "\fB\-mno\-short\fR" 4
13816 .IX Item "-mno-short"
13817 Do not consider type \f(CW\*(C`int\*(C'\fR to be 16 bits wide.  This is the default.
13818 .IP "\fB\-mnobitfield\fR" 4
13819 .IX Item "-mnobitfield"
13820 .PD 0
13821 .IP "\fB\-mno\-bitfield\fR" 4
13822 .IX Item "-mno-bitfield"
13823 .PD
13824 Do not use the bit-field instructions.  The \fB\-m68000\fR, \fB\-mcpu32\fR
13825 and \fB\-m5200\fR options imply \fB\-mnobitfield\fR.
13826 .IP "\fB\-mbitfield\fR" 4
13827 .IX Item "-mbitfield"
13828 Do use the bit-field instructions.  The \fB\-m68020\fR option implies
13829 \&\fB\-mbitfield\fR.  This is the default if you use a configuration
13830 designed for a 68020.
13831 .IP "\fB\-mrtd\fR" 4
13832 .IX Item "-mrtd"
13833 Use a different function-calling convention, in which functions
13834 that take a fixed number of arguments return with the \f(CW\*(C`rtd\*(C'\fR
13835 instruction, which pops their arguments while returning.  This
13836 saves one instruction in the caller since there is no need to pop
13837 the arguments there.
13838 .Sp
13839 This calling convention is incompatible with the one normally
13840 used on Unix, so you cannot use it if you need to call libraries
13841 compiled with the Unix compiler.
13842 .Sp
13843 Also, you must provide function prototypes for all functions that
13844 take variable numbers of arguments (including \f(CW\*(C`printf\*(C'\fR);
13845 otherwise incorrect code will be generated for calls to those
13846 functions.
13847 .Sp
13848 In addition, seriously incorrect code will result if you call a
13849 function with too many arguments.  (Normally, extra arguments are
13850 harmlessly ignored.)
13851 .Sp
13852 The \f(CW\*(C`rtd\*(C'\fR instruction is supported by the 68010, 68020, 68030,
13853 68040, 68060 and \s-1CPU32\s0 processors, but not by the 68000 or 5200.
13854 .IP "\fB\-mno\-rtd\fR" 4
13855 .IX Item "-mno-rtd"
13856 Do not use the calling conventions selected by \fB\-mrtd\fR.
13857 This is the default.
13858 .IP "\fB\-malign\-int\fR" 4
13859 .IX Item "-malign-int"
13860 .PD 0
13861 .IP "\fB\-mno\-align\-int\fR" 4
13862 .IX Item "-mno-align-int"
13863 .PD
13864 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,
13865 \&\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
13866 boundary (\fB\-malign\-int\fR) or a 16\-bit boundary (\fB\-mno\-align\-int\fR).
13867 Aligning variables on 32\-bit boundaries produces code that runs somewhat
13868 faster on processors with 32\-bit busses at the expense of more memory.
13869 .Sp
13870 \&\fBWarning:\fR if you use the \fB\-malign\-int\fR switch, \s-1GCC\s0 will
13871 align structures containing the above types  differently than
13872 most published application binary interface specifications for the m68k.
13873 .IP "\fB\-mpcrel\fR" 4
13874 .IX Item "-mpcrel"
13875 Use the pc-relative addressing mode of the 68000 directly, instead of
13876 using a global offset table.  At present, this option implies \fB\-fpic\fR,
13877 allowing at most a 16\-bit offset for pc-relative addressing.  \fB\-fPIC\fR is
13878 not presently supported with \fB\-mpcrel\fR, though this could be supported for
13879 68020 and higher processors.
13880 .IP "\fB\-mno\-strict\-align\fR" 4
13881 .IX Item "-mno-strict-align"
13882 .PD 0
13883 .IP "\fB\-mstrict\-align\fR" 4
13884 .IX Item "-mstrict-align"
13885 .PD
13886 Do not (do) assume that unaligned memory references will be handled by
13887 the system.
13888 .IP "\fB\-msep\-data\fR" 4
13889 .IX Item "-msep-data"
13890 Generate code that allows the data segment to be located in a different
13891 area of memory from the text segment.  This allows for execute in place in
13892 an environment without virtual memory management.  This option implies
13893 \&\fB\-fPIC\fR.
13894 .IP "\fB\-mno\-sep\-data\fR" 4
13895 .IX Item "-mno-sep-data"
13896 Generate code that assumes that the data segment follows the text segment.
13897 This is the default.
13898 .IP "\fB\-mid\-shared\-library\fR" 4
13899 .IX Item "-mid-shared-library"
13900 Generate code that supports shared libraries via the library \s-1ID\s0 method.
13901 This allows for execute in place and shared libraries in an environment
13902 without virtual memory management.  This option implies \fB\-fPIC\fR.
13903 .IP "\fB\-mno\-id\-shared\-library\fR" 4
13904 .IX Item "-mno-id-shared-library"
13905 Generate code that doesn't assume \s-1ID\s0 based shared libraries are being used.
13906 This is the default.
13907 .IP "\fB\-mshared\-library\-id=n\fR" 4
13908 .IX Item "-mshared-library-id=n"
13909 Specified the identification number of the \s-1ID\s0 based shared library being
13910 compiled.  Specifying a value of 0 will generate more compact code, specifying
13911 other values will force the allocation of that number to the current
13912 library but is no more space or time efficient than omitting this option.
13913 .IP "\fB\-mxgot\fR" 4
13914 .IX Item "-mxgot"
13915 .PD 0
13916 .IP "\fB\-mno\-xgot\fR" 4
13917 .IX Item "-mno-xgot"
13918 .PD
13919 When generating position-independent code for ColdFire, generate code
13920 that works if the \s-1GOT\s0 has more than 8192 entries.  This code is
13921 larger and slower than code generated without this option.  On M680x0
13922 processors, this option is not needed; \fB\-fPIC\fR suffices.
13923 .Sp
13924 \&\s-1GCC\s0 normally uses a single instruction to load values from the \s-1GOT\s0.
13925 While this is relatively efficient, it only works if the \s-1GOT\s0
13926 is smaller than about 64k.  Anything larger causes the linker
13927 to report an error such as:
13928 .Sp
13929 .Vb 1
13930 \&        relocation truncated to fit: R_68K_GOT16O foobar
13931 .Ve
13932 .Sp
13933 If this happens, you should recompile your code with \fB\-mxgot\fR.
13934 It should then work with very large GOTs.  However, code generated with
13935 \&\fB\-mxgot\fR is less efficient, since it takes 4 instructions to fetch
13936 the value of a global symbol.
13937 .Sp
13938 Note that some linkers, including newer versions of the \s-1GNU\s0 linker,
13939 can create multiple GOTs and sort \s-1GOT\s0 entries.  If you have such a linker,
13940 you should only need to use \fB\-mxgot\fR when compiling a single
13941 object file that accesses more than 8192 \s-1GOT\s0 entries.  Very few do.
13942 .Sp
13943 These options have no effect unless \s-1GCC\s0 is generating
13944 position-independent code.
13945 .PP
13946 \fIMCore Options\fR
13947 .IX Subsection "MCore Options"
13948 .PP
13949 These are the \fB\-m\fR options defined for the Motorola M*Core
13950 processors.
13951 .IP "\fB\-mhardlit\fR" 4
13952 .IX Item "-mhardlit"
13953 .PD 0
13954 .IP "\fB\-mno\-hardlit\fR" 4
13955 .IX Item "-mno-hardlit"
13956 .PD
13957 Inline constants into the code stream if it can be done in two
13958 instructions or less.
13959 .IP "\fB\-mdiv\fR" 4
13960 .IX Item "-mdiv"
13961 .PD 0
13962 .IP "\fB\-mno\-div\fR" 4
13963 .IX Item "-mno-div"
13964 .PD
13965 Use the divide instruction.  (Enabled by default).
13966 .IP "\fB\-mrelax\-immediate\fR" 4
13967 .IX Item "-mrelax-immediate"
13968 .PD 0
13969 .IP "\fB\-mno\-relax\-immediate\fR" 4
13970 .IX Item "-mno-relax-immediate"
13971 .PD
13972 Allow arbitrary sized immediates in bit operations.
13973 .IP "\fB\-mwide\-bitfields\fR" 4
13974 .IX Item "-mwide-bitfields"
13975 .PD 0
13976 .IP "\fB\-mno\-wide\-bitfields\fR" 4
13977 .IX Item "-mno-wide-bitfields"
13978 .PD
13979 Always treat bit-fields as int-sized.
13980 .IP "\fB\-m4byte\-functions\fR" 4
13981 .IX Item "-m4byte-functions"
13982 .PD 0
13983 .IP "\fB\-mno\-4byte\-functions\fR" 4
13984 .IX Item "-mno-4byte-functions"
13985 .PD
13986 Force all functions to be aligned to a 4\-byte boundary.
13987 .IP "\fB\-mcallgraph\-data\fR" 4
13988 .IX Item "-mcallgraph-data"
13989 .PD 0
13990 .IP "\fB\-mno\-callgraph\-data\fR" 4
13991 .IX Item "-mno-callgraph-data"
13992 .PD
13993 Emit callgraph information.
13994 .IP "\fB\-mslow\-bytes\fR" 4
13995 .IX Item "-mslow-bytes"
13996 .PD 0
13997 .IP "\fB\-mno\-slow\-bytes\fR" 4
13998 .IX Item "-mno-slow-bytes"
13999 .PD
14000 Prefer word access when reading byte quantities.
14001 .IP "\fB\-mlittle\-endian\fR" 4
14002 .IX Item "-mlittle-endian"
14003 .PD 0
14004 .IP "\fB\-mbig\-endian\fR" 4
14005 .IX Item "-mbig-endian"
14006 .PD
14007 Generate code for a little-endian target.
14008 .IP "\fB\-m210\fR" 4
14009 .IX Item "-m210"
14010 .PD 0
14011 .IP "\fB\-m340\fR" 4
14012 .IX Item "-m340"
14013 .PD
14014 Generate code for the 210 processor.
14015 .IP "\fB\-mno\-lsim\fR" 4
14016 .IX Item "-mno-lsim"
14017 Assume that runtime support has been provided and so omit the
14018 simulator library (\fIlibsim.a)\fR from the linker command line.
14019 .IP "\fB\-mstack\-increment=\fR\fIsize\fR" 4
14020 .IX Item "-mstack-increment=size"
14021 Set the maximum amount for a single stack increment operation.  Large
14022 values can increase the speed of programs that contain functions
14023 that need a large amount of stack space, but they can also trigger a
14024 segmentation fault if the stack is extended too much.  The default
14025 value is 0x1000.
14026 .PP
14027 \fIMeP Options\fR
14028 .IX Subsection "MeP Options"
14029 .IP "\fB\-mabsdiff\fR" 4
14030 .IX Item "-mabsdiff"
14031 Enables the \f(CW\*(C`abs\*(C'\fR instruction, which is the absolute difference
14032 between two registers.
14033 .IP "\fB\-mall\-opts\fR" 4
14034 .IX Item "-mall-opts"
14035 Enables all the optional instructions \- average, multiply, divide, bit
14036 operations, leading zero, absolute difference, min/max, clip, and
14037 saturation.
14038 .IP "\fB\-maverage\fR" 4
14039 .IX Item "-maverage"
14040 Enables the \f(CW\*(C`ave\*(C'\fR instruction, which computes the average of two
14041 registers.
14042 .IP "\fB\-mbased=\fR\fIn\fR" 4
14043 .IX Item "-mbased=n"
14044 Variables of size \fIn\fR bytes or smaller will be placed in the
14045 \&\f(CW\*(C`.based\*(C'\fR section by default.  Based variables use the \f(CW$tp\fR
14046 register as a base register, and there is a 128\-byte limit to the
14047 \&\f(CW\*(C`.based\*(C'\fR section.
14048 .IP "\fB\-mbitops\fR" 4
14049 .IX Item "-mbitops"
14050 Enables the bit operation instructions \- bit test (\f(CW\*(C`btstm\*(C'\fR), set
14051 (\f(CW\*(C`bsetm\*(C'\fR), clear (\f(CW\*(C`bclrm\*(C'\fR), invert (\f(CW\*(C`bnotm\*(C'\fR), and
14052 test-and-set (\f(CW\*(C`tas\*(C'\fR).
14053 .IP "\fB\-mc=\fR\fIname\fR" 4
14054 .IX Item "-mc=name"
14055 Selects which section constant data will be placed in.  \fIname\fR may
14056 be \f(CW\*(C`tiny\*(C'\fR, \f(CW\*(C`near\*(C'\fR, or \f(CW\*(C`far\*(C'\fR.
14057 .IP "\fB\-mclip\fR" 4
14058 .IX Item "-mclip"
14059 Enables the \f(CW\*(C`clip\*(C'\fR instruction.  Note that \f(CW\*(C`\-mclip\*(C'\fR is not
14060 useful unless you also provide \f(CW\*(C`\-mminmax\*(C'\fR.
14061 .IP "\fB\-mconfig=\fR\fIname\fR" 4
14062 .IX Item "-mconfig=name"
14063 Selects one of the build-in core configurations.  Each MeP chip has
14064 one or more modules in it; each module has a core \s-1CPU\s0 and a variety of
14065 coprocessors, optional instructions, and peripherals.  The
14066 \&\f(CW\*(C`MeP\-Integrator\*(C'\fR tool, not part of \s-1GCC\s0, provides these
14067 configurations through this option; using this option is the same as
14068 using all the corresponding command-line options.  The default
14069 configuration is \f(CW\*(C`default\*(C'\fR.
14070 .IP "\fB\-mcop\fR" 4
14071 .IX Item "-mcop"
14072 Enables the coprocessor instructions.  By default, this is a 32\-bit
14073 coprocessor.  Note that the coprocessor is normally enabled via the
14074 \&\f(CW\*(C`\-mconfig=\*(C'\fR option.
14075 .IP "\fB\-mcop32\fR" 4
14076 .IX Item "-mcop32"
14077 Enables the 32\-bit coprocessor's instructions.
14078 .IP "\fB\-mcop64\fR" 4
14079 .IX Item "-mcop64"
14080 Enables the 64\-bit coprocessor's instructions.
14081 .IP "\fB\-mivc2\fR" 4
14082 .IX Item "-mivc2"
14083 Enables \s-1IVC2\s0 scheduling.  \s-1IVC2\s0 is a 64\-bit \s-1VLIW\s0 coprocessor.
14084 .IP "\fB\-mdc\fR" 4
14085 .IX Item "-mdc"
14086 Causes constant variables to be placed in the \f(CW\*(C`.near\*(C'\fR section.
14087 .IP "\fB\-mdiv\fR" 4
14088 .IX Item "-mdiv"
14089 Enables the \f(CW\*(C`div\*(C'\fR and \f(CW\*(C`divu\*(C'\fR instructions.
14090 .IP "\fB\-meb\fR" 4
14091 .IX Item "-meb"
14092 Generate big-endian code.
14093 .IP "\fB\-mel\fR" 4
14094 .IX Item "-mel"
14095 Generate little-endian code.
14096 .IP "\fB\-mio\-volatile\fR" 4
14097 .IX Item "-mio-volatile"
14098 Tells the compiler that any variable marked with the \f(CW\*(C`io\*(C'\fR
14099 attribute is to be considered volatile.
14100 .IP "\fB\-ml\fR" 4
14101 .IX Item "-ml"
14102 Causes variables to be assigned to the \f(CW\*(C`.far\*(C'\fR section by default.
14103 .IP "\fB\-mleadz\fR" 4
14104 .IX Item "-mleadz"
14105 Enables the \f(CW\*(C`leadz\*(C'\fR (leading zero) instruction.
14106 .IP "\fB\-mm\fR" 4
14107 .IX Item "-mm"
14108 Causes variables to be assigned to the \f(CW\*(C`.near\*(C'\fR section by default.
14109 .IP "\fB\-mminmax\fR" 4
14110 .IX Item "-mminmax"
14111 Enables the \f(CW\*(C`min\*(C'\fR and \f(CW\*(C`max\*(C'\fR instructions.
14112 .IP "\fB\-mmult\fR" 4
14113 .IX Item "-mmult"
14114 Enables the multiplication and multiply-accumulate instructions.
14115 .IP "\fB\-mno\-opts\fR" 4
14116 .IX Item "-mno-opts"
14117 Disables all the optional instructions enabled by \f(CW\*(C`\-mall\-opts\*(C'\fR.
14118 .IP "\fB\-mrepeat\fR" 4
14119 .IX Item "-mrepeat"
14120 Enables the \f(CW\*(C`repeat\*(C'\fR and \f(CW\*(C`erepeat\*(C'\fR instructions, used for
14121 low-overhead looping.
14122 .IP "\fB\-ms\fR" 4
14123 .IX Item "-ms"
14124 Causes all variables to default to the \f(CW\*(C`.tiny\*(C'\fR section.  Note
14125 that there is a 65536\-byte limit to this section.  Accesses to these
14126 variables use the \f(CW%gp\fR base register.
14127 .IP "\fB\-msatur\fR" 4
14128 .IX Item "-msatur"
14129 Enables the saturation instructions.  Note that the compiler does not
14130 currently generate these itself, but this option is included for
14131 compatibility with other tools, like \f(CW\*(C`as\*(C'\fR.
14132 .IP "\fB\-msdram\fR" 4
14133 .IX Item "-msdram"
14134 Link the SDRAM-based runtime instead of the default ROM-based runtime.
14135 .IP "\fB\-msim\fR" 4
14136 .IX Item "-msim"
14137 Link the simulator runtime libraries.
14138 .IP "\fB\-msimnovec\fR" 4
14139 .IX Item "-msimnovec"
14140 Link the simulator runtime libraries, excluding built-in support
14141 for reset and exception vectors and tables.
14142 .IP "\fB\-mtf\fR" 4
14143 .IX Item "-mtf"
14144 Causes all functions to default to the \f(CW\*(C`.far\*(C'\fR section.  Without
14145 this option, functions default to the \f(CW\*(C`.near\*(C'\fR section.
14146 .IP "\fB\-mtiny=\fR\fIn\fR" 4
14147 .IX Item "-mtiny=n"
14148 Variables that are \fIn\fR bytes or smaller will be allocated to the
14149 \&\f(CW\*(C`.tiny\*(C'\fR section.  These variables use the \f(CW$gp\fR base
14150 register.  The default for this option is 4, but note that there's a
14151 65536\-byte limit to the \f(CW\*(C`.tiny\*(C'\fR section.
14152 .PP
14153 \fIMicroBlaze Options\fR
14154 .IX Subsection "MicroBlaze Options"
14155 .IP "\fB\-msoft\-float\fR" 4
14156 .IX Item "-msoft-float"
14157 Use software emulation for floating point (default).
14158 .IP "\fB\-mhard\-float\fR" 4
14159 .IX Item "-mhard-float"
14160 Use hardware floating-point instructions.
14161 .IP "\fB\-mmemcpy\fR" 4
14162 .IX Item "-mmemcpy"
14163 Do not optimize block moves, use \f(CW\*(C`memcpy\*(C'\fR.
14164 .IP "\fB\-mno\-clearbss\fR" 4
14165 .IX Item "-mno-clearbss"
14166 This option is deprecated.  Use \fB\-fno\-zero\-initialized\-in\-bss\fR instead.
14167 .IP "\fB\-mcpu=\fR\fIcpu-type\fR" 4
14168 .IX Item "-mcpu=cpu-type"
14169 Use features of and schedule code for given \s-1CPU\s0.
14170 Supported values are in the format \fBv\fR\fIX\fR\fB.\fR\fI\s-1YY\s0\fR\fB.\fR\fIZ\fR,
14171 where \fIX\fR is a major version, \fI\s-1YY\s0\fR is the minor version, and
14172 \&\fIZ\fR is compatibility code.  Example values are \fBv3.00.a\fR,
14173 \&\fBv4.00.b\fR, \fBv5.00.a\fR, \fBv5.00.b\fR, \fBv5.00.b\fR, \fBv6.00.a\fR.
14174 .IP "\fB\-mxl\-soft\-mul\fR" 4
14175 .IX Item "-mxl-soft-mul"
14176 Use software multiply emulation (default).
14177 .IP "\fB\-mxl\-soft\-div\fR" 4
14178 .IX Item "-mxl-soft-div"
14179 Use software emulation for divides (default).
14180 .IP "\fB\-mxl\-barrel\-shift\fR" 4
14181 .IX Item "-mxl-barrel-shift"
14182 Use the hardware barrel shifter.
14183 .IP "\fB\-mxl\-pattern\-compare\fR" 4
14184 .IX Item "-mxl-pattern-compare"
14185 Use pattern compare instructions.
14186 .IP "\fB\-msmall\-divides\fR" 4
14187 .IX Item "-msmall-divides"
14188 Use table lookup optimization for small signed integer divisions.
14189 .IP "\fB\-mxl\-stack\-check\fR" 4
14190 .IX Item "-mxl-stack-check"
14191 This option is deprecated.  Use \-fstack\-check instead.
14192 .IP "\fB\-mxl\-gp\-opt\fR" 4
14193 .IX Item "-mxl-gp-opt"
14194 Use \s-1GP\s0 relative sdata/sbss sections.
14195 .IP "\fB\-mxl\-multiply\-high\fR" 4
14196 .IX Item "-mxl-multiply-high"
14197 Use multiply high instructions for high part of 32x32 multiply.
14198 .IP "\fB\-mxl\-float\-convert\fR" 4
14199 .IX Item "-mxl-float-convert"
14200 Use hardware floating-point conversion instructions.
14201 .IP "\fB\-mxl\-float\-sqrt\fR" 4
14202 .IX Item "-mxl-float-sqrt"
14203 Use hardware floating-point square root instruction.
14204 .IP "\fB\-mxl\-mode\-\fR\fIapp-model\fR" 4
14205 .IX Item "-mxl-mode-app-model"
14206 Select application model \fIapp-model\fR.  Valid models are
14207 .RS 4
14208 .IP "\fBexecutable\fR" 4
14209 .IX Item "executable"
14210 normal executable (default), uses startup code \fIcrt0.o\fR.
14211 .IP "\fBxmdstub\fR" 4
14212 .IX Item "xmdstub"
14213 for use with Xilinx Microprocessor Debugger (\s-1XMD\s0) based
14214 software intrusive debug agent called xmdstub. This uses startup file
14215 \&\fIcrt1.o\fR and sets the start address of the program to be 0x800.
14216 .IP "\fBbootstrap\fR" 4
14217 .IX Item "bootstrap"
14218 for applications that are loaded using a bootloader.
14219 This model uses startup file \fIcrt2.o\fR which does not contain a processor
14220 reset vector handler. This is suitable for transferring control on a
14221 processor reset to the bootloader rather than the application.
14222 .IP "\fBnovectors\fR" 4
14223 .IX Item "novectors"
14224 for applications that do not require any of the
14225 MicroBlaze vectors. This option may be useful for applications running
14226 within a monitoring application. This model uses \fIcrt3.o\fR as a startup file.
14227 .RE
14228 .RS 4
14229 .Sp
14230 Option \fB\-xl\-mode\-\fR\fIapp-model\fR is a deprecated alias for
14231 \&\fB\-mxl\-mode\-\fR\fIapp-model\fR.
14232 .RE
14233 .PP
14234 \fI\s-1MIPS\s0 Options\fR
14235 .IX Subsection "MIPS Options"
14236 .IP "\fB\-EB\fR" 4
14237 .IX Item "-EB"
14238 Generate big-endian code.
14239 .IP "\fB\-EL\fR" 4
14240 .IX Item "-EL"
14241 Generate little-endian code.  This is the default for \fBmips*el\-*\-*\fR
14242 configurations.
14243 .IP "\fB\-march=\fR\fIarch\fR" 4
14244 .IX Item "-march=arch"
14245 Generate code that will run on \fIarch\fR, which can be the name of a
14246 generic \s-1MIPS\s0 \s-1ISA\s0, or the name of a particular processor.
14247 The \s-1ISA\s0 names are:
14248 \&\fBmips1\fR, \fBmips2\fR, \fBmips3\fR, \fBmips4\fR,
14249 \&\fBmips32\fR, \fBmips32r2\fR, \fBmips64\fR and \fBmips64r2\fR.
14250 The processor names are:
14251 \&\fB4kc\fR, \fB4km\fR, \fB4kp\fR, \fB4ksc\fR,
14252 \&\fB4kec\fR, \fB4kem\fR, \fB4kep\fR, \fB4ksd\fR,
14253 \&\fB5kc\fR, \fB5kf\fR,
14254 \&\fB20kc\fR,
14255 \&\fB24kc\fR, \fB24kf2_1\fR, \fB24kf1_1\fR,
14256 \&\fB24kec\fR, \fB24kef2_1\fR, \fB24kef1_1\fR,
14257 \&\fB34kc\fR, \fB34kf2_1\fR, \fB34kf1_1\fR,
14258 \&\fB74kc\fR, \fB74kf2_1\fR, \fB74kf1_1\fR, \fB74kf3_2\fR,
14259 \&\fB1004kc\fR, \fB1004kf2_1\fR, \fB1004kf1_1\fR,
14260 \&\fBloongson2e\fR, \fBloongson2f\fR, \fBloongson3a\fR,
14261 \&\fBm4k\fR,
14262 \&\fBocteon\fR, \fBocteon+\fR, \fBocteon2\fR,
14263 \&\fBorion\fR,
14264 \&\fBr2000\fR, \fBr3000\fR, \fBr3900\fR, \fBr4000\fR, \fBr4400\fR,
14265 \&\fBr4600\fR, \fBr4650\fR, \fBr6000\fR, \fBr8000\fR,
14266 \&\fBrm7000\fR, \fBrm9000\fR,
14267 \&\fBr10000\fR, \fBr12000\fR, \fBr14000\fR, \fBr16000\fR,
14268 \&\fBsb1\fR,
14269 \&\fBsr71000\fR,
14270 \&\fBvr4100\fR, \fBvr4111\fR, \fBvr4120\fR, \fBvr4130\fR, \fBvr4300\fR,
14271 \&\fBvr5000\fR, \fBvr5400\fR, \fBvr5500\fR
14272 and \fBxlr\fR.
14273 The special value \fBfrom-abi\fR selects the
14274 most compatible architecture for the selected \s-1ABI\s0 (that is,
14275 \&\fBmips1\fR for 32\-bit ABIs and \fBmips3\fR for 64\-bit ABIs).
14276 .Sp
14277 Native Linux/GNU and \s-1IRIX\s0 toolchains also support the value \fBnative\fR,
14278 which selects the best architecture option for the host processor.
14279 \&\fB\-march=native\fR has no effect if \s-1GCC\s0 does not recognize
14280 the processor.
14281 .Sp
14282 In processor names, a final \fB000\fR can be abbreviated as \fBk\fR
14283 (for example, \fB\-march=r2k\fR).  Prefixes are optional, and
14284 \&\fBvr\fR may be written \fBr\fR.
14285 .Sp
14286 Names of the form \fIn\fR\fBf2_1\fR refer to processors with
14287 FPUs clocked at half the rate of the core, names of the form
14288 \&\fIn\fR\fBf1_1\fR refer to processors with FPUs clocked at the same
14289 rate as the core, and names of the form \fIn\fR\fBf3_2\fR refer to
14290 processors with FPUs clocked a ratio of 3:2 with respect to the core.
14291 For compatibility reasons, \fIn\fR\fBf\fR is accepted as a synonym
14292 for \fIn\fR\fBf2_1\fR while \fIn\fR\fBx\fR and \fIb\fR\fBfx\fR are
14293 accepted as synonyms for \fIn\fR\fBf1_1\fR.
14294 .Sp
14295 \&\s-1GCC\s0 defines two macros based on the value of this option.  The first
14296 is \fB_MIPS_ARCH\fR, which gives the name of target architecture, as
14297 a string.  The second has the form \fB_MIPS_ARCH_\fR\fIfoo\fR,
14298 where \fIfoo\fR is the capitalized value of \fB_MIPS_ARCH\fR.
14299 For example, \fB\-march=r2000\fR will set \fB_MIPS_ARCH\fR
14300 to \fB\*(L"r2000\*(R"\fR and define the macro \fB_MIPS_ARCH_R2000\fR.
14301 .Sp
14302 Note that the \fB_MIPS_ARCH\fR macro uses the processor names given
14303 above.  In other words, it will have the full prefix and will not
14304 abbreviate \fB000\fR as \fBk\fR.  In the case of \fBfrom-abi\fR,
14305 the macro names the resolved architecture (either \fB\*(L"mips1\*(R"\fR or
14306 \&\fB\*(L"mips3\*(R"\fR).  It names the default architecture when no
14307 \&\fB\-march\fR option is given.
14308 .IP "\fB\-mtune=\fR\fIarch\fR" 4
14309 .IX Item "-mtune=arch"
14310 Optimize for \fIarch\fR.  Among other things, this option controls
14311 the way instructions are scheduled, and the perceived cost of arithmetic
14312 operations.  The list of \fIarch\fR values is the same as for
14313 \&\fB\-march\fR.
14314 .Sp
14315 When this option is not used, \s-1GCC\s0 will optimize for the processor
14316 specified by \fB\-march\fR.  By using \fB\-march\fR and
14317 \&\fB\-mtune\fR together, it is possible to generate code that will
14318 run on a family of processors, but optimize the code for one
14319 particular member of that family.
14320 .Sp
14321 \&\fB\-mtune\fR defines the macros \fB_MIPS_TUNE\fR and
14322 \&\fB_MIPS_TUNE_\fR\fIfoo\fR, which work in the same way as the
14323 \&\fB\-march\fR ones described above.
14324 .IP "\fB\-mips1\fR" 4
14325 .IX Item "-mips1"
14326 Equivalent to \fB\-march=mips1\fR.
14327 .IP "\fB\-mips2\fR" 4
14328 .IX Item "-mips2"
14329 Equivalent to \fB\-march=mips2\fR.
14330 .IP "\fB\-mips3\fR" 4
14331 .IX Item "-mips3"
14332 Equivalent to \fB\-march=mips3\fR.
14333 .IP "\fB\-mips4\fR" 4
14334 .IX Item "-mips4"
14335 Equivalent to \fB\-march=mips4\fR.
14336 .IP "\fB\-mips32\fR" 4
14337 .IX Item "-mips32"
14338 Equivalent to \fB\-march=mips32\fR.
14339 .IP "\fB\-mips32r2\fR" 4
14340 .IX Item "-mips32r2"
14341 Equivalent to \fB\-march=mips32r2\fR.
14342 .IP "\fB\-mips64\fR" 4
14343 .IX Item "-mips64"
14344 Equivalent to \fB\-march=mips64\fR.
14345 .IP "\fB\-mips64r2\fR" 4
14346 .IX Item "-mips64r2"
14347 Equivalent to \fB\-march=mips64r2\fR.
14348 .IP "\fB\-mips16\fR" 4
14349 .IX Item "-mips16"
14350 .PD 0
14351 .IP "\fB\-mno\-mips16\fR" 4
14352 .IX Item "-mno-mips16"
14353 .PD
14354 Generate (do not generate) \s-1MIPS16\s0 code.  If \s-1GCC\s0 is targetting a
14355 \&\s-1MIPS32\s0 or \s-1MIPS64\s0 architecture, it will make use of the MIPS16e \s-1ASE\s0.
14356 .Sp
14357 \&\s-1MIPS16\s0 code generation can also be controlled on a per-function basis
14358 by means of \f(CW\*(C`mips16\*(C'\fR and \f(CW\*(C`nomips16\*(C'\fR attributes.
14359 .IP "\fB\-mflip\-mips16\fR" 4
14360 .IX Item "-mflip-mips16"
14361 Generate \s-1MIPS16\s0 code on alternating functions.  This option is provided
14362 for regression testing of mixed MIPS16/non\-MIPS16 code generation, and is
14363 not intended for ordinary use in compiling user code.
14364 .IP "\fB\-minterlink\-mips16\fR" 4
14365 .IX Item "-minterlink-mips16"
14366 .PD 0
14367 .IP "\fB\-mno\-interlink\-mips16\fR" 4
14368 .IX Item "-mno-interlink-mips16"
14369 .PD
14370 Require (do not require) that non\-MIPS16 code be link-compatible with
14371 \&\s-1MIPS16\s0 code.
14372 .Sp
14373 For example, non\-MIPS16 code cannot jump directly to \s-1MIPS16\s0 code;
14374 it must either use a call or an indirect jump.  \fB\-minterlink\-mips16\fR
14375 therefore disables direct jumps unless \s-1GCC\s0 knows that the target of the
14376 jump is not \s-1MIPS16\s0.
14377 .IP "\fB\-mabi=32\fR" 4
14378 .IX Item "-mabi=32"
14379 .PD 0
14380 .IP "\fB\-mabi=o64\fR" 4
14381 .IX Item "-mabi=o64"
14382 .IP "\fB\-mabi=n32\fR" 4
14383 .IX Item "-mabi=n32"
14384 .IP "\fB\-mabi=64\fR" 4
14385 .IX Item "-mabi=64"
14386 .IP "\fB\-mabi=eabi\fR" 4
14387 .IX Item "-mabi=eabi"
14388 .PD
14389 Generate code for the given \s-1ABI\s0.
14390 .Sp
14391 Note that the \s-1EABI\s0 has a 32\-bit and a 64\-bit variant.  \s-1GCC\s0 normally
14392 generates 64\-bit code when you select a 64\-bit architecture, but you
14393 can use \fB\-mgp32\fR to get 32\-bit code instead.
14394 .Sp
14395 For information about the O64 \s-1ABI\s0, see
14396 <\fBhttp://gcc.gnu.org/projects/mipso64\-abi.html\fR>.
14397 .Sp
14398 \&\s-1GCC\s0 supports a variant of the o32 \s-1ABI\s0 in which floating-point registers
14399 are 64 rather than 32 bits wide.  You can select this combination with
14400 \&\fB\-mabi=32\fR \fB\-mfp64\fR.  This \s-1ABI\s0 relies on the \fBmthc1\fR
14401 and \fBmfhc1\fR instructions and is therefore only supported for
14402 \&\s-1MIPS32R2\s0 processors.
14403 .Sp
14404 The register assignments for arguments and return values remain the
14405 same, but each scalar value is passed in a single 64\-bit register
14406 rather than a pair of 32\-bit registers.  For example, scalar
14407 floating-point values are returned in \fB\f(CB$f0\fB\fR only, not a
14408 \&\fB\f(CB$f0\fB\fR/\fB\f(CB$f1\fB\fR pair.  The set of call-saved registers also
14409 remains the same, but all 64 bits are saved.
14410 .IP "\fB\-mabicalls\fR" 4
14411 .IX Item "-mabicalls"
14412 .PD 0
14413 .IP "\fB\-mno\-abicalls\fR" 4
14414 .IX Item "-mno-abicalls"
14415 .PD
14416 Generate (do not generate) code that is suitable for SVR4\-style
14417 dynamic objects.  \fB\-mabicalls\fR is the default for SVR4\-based
14418 systems.
14419 .IP "\fB\-mshared\fR" 4
14420 .IX Item "-mshared"
14421 .PD 0
14422 .IP "\fB\-mno\-shared\fR" 4
14423 .IX Item "-mno-shared"
14424 .PD
14425 Generate (do not generate) code that is fully position-independent,
14426 and that can therefore be linked into shared libraries.  This option
14427 only affects \fB\-mabicalls\fR.
14428 .Sp
14429 All \fB\-mabicalls\fR code has traditionally been position-independent,
14430 regardless of options like \fB\-fPIC\fR and \fB\-fpic\fR.  However,
14431 as an extension, the \s-1GNU\s0 toolchain allows executables to use absolute
14432 accesses for locally-binding symbols.  It can also use shorter \s-1GP\s0
14433 initialization sequences and generate direct calls to locally-defined
14434 functions.  This mode is selected by \fB\-mno\-shared\fR.
14435 .Sp
14436 \&\fB\-mno\-shared\fR depends on binutils 2.16 or higher and generates
14437 objects that can only be linked by the \s-1GNU\s0 linker.  However, the option
14438 does not affect the \s-1ABI\s0 of the final executable; it only affects the \s-1ABI\s0
14439 of relocatable objects.  Using \fB\-mno\-shared\fR will generally make
14440 executables both smaller and quicker.
14441 .Sp
14442 \&\fB\-mshared\fR is the default.
14443 .IP "\fB\-mplt\fR" 4
14444 .IX Item "-mplt"
14445 .PD 0
14446 .IP "\fB\-mno\-plt\fR" 4
14447 .IX Item "-mno-plt"
14448 .PD
14449 Assume (do not assume) that the static and dynamic linkers
14450 support PLTs and copy relocations.  This option only affects
14451 \&\fB\-mno\-shared \-mabicalls\fR.  For the n64 \s-1ABI\s0, this option
14452 has no effect without \fB\-msym32\fR.
14453 .Sp
14454 You can make \fB\-mplt\fR the default by configuring
14455 \&\s-1GCC\s0 with \fB\-\-with\-mips\-plt\fR.  The default is
14456 \&\fB\-mno\-plt\fR otherwise.
14457 .IP "\fB\-mxgot\fR" 4
14458 .IX Item "-mxgot"
14459 .PD 0
14460 .IP "\fB\-mno\-xgot\fR" 4
14461 .IX Item "-mno-xgot"
14462 .PD
14463 Lift (do not lift) the usual restrictions on the size of the global
14464 offset table.
14465 .Sp
14466 \&\s-1GCC\s0 normally uses a single instruction to load values from the \s-1GOT\s0.
14467 While this is relatively efficient, it will only work if the \s-1GOT\s0
14468 is smaller than about 64k.  Anything larger will cause the linker
14469 to report an error such as:
14470 .Sp
14471 .Vb 1
14472 \&        relocation truncated to fit: R_MIPS_GOT16 foobar
14473 .Ve
14474 .Sp
14475 If this happens, you should recompile your code with \fB\-mxgot\fR.
14476 It should then work with very large GOTs, although it will also be
14477 less efficient, since it will take three instructions to fetch the
14478 value of a global symbol.
14479 .Sp
14480 Note that some linkers can create multiple GOTs.  If you have such a
14481 linker, you should only need to use \fB\-mxgot\fR when a single object
14482 file accesses more than 64k's worth of \s-1GOT\s0 entries.  Very few do.
14483 .Sp
14484 These options have no effect unless \s-1GCC\s0 is generating position
14485 independent code.
14486 .IP "\fB\-mgp32\fR" 4
14487 .IX Item "-mgp32"
14488 Assume that general-purpose registers are 32 bits wide.
14489 .IP "\fB\-mgp64\fR" 4
14490 .IX Item "-mgp64"
14491 Assume that general-purpose registers are 64 bits wide.
14492 .IP "\fB\-mfp32\fR" 4
14493 .IX Item "-mfp32"
14494 Assume that floating-point registers are 32 bits wide.
14495 .IP "\fB\-mfp64\fR" 4
14496 .IX Item "-mfp64"
14497 Assume that floating-point registers are 64 bits wide.
14498 .IP "\fB\-mhard\-float\fR" 4
14499 .IX Item "-mhard-float"
14500 Use floating-point coprocessor instructions.
14501 .IP "\fB\-msoft\-float\fR" 4
14502 .IX Item "-msoft-float"
14503 Do not use floating-point coprocessor instructions.  Implement
14504 floating-point calculations using library calls instead.
14505 .IP "\fB\-msingle\-float\fR" 4
14506 .IX Item "-msingle-float"
14507 Assume that the floating-point coprocessor only supports single-precision
14508 operations.
14509 .IP "\fB\-mdouble\-float\fR" 4
14510 .IX Item "-mdouble-float"
14511 Assume that the floating-point coprocessor supports double-precision
14512 operations.  This is the default.
14513 .IP "\fB\-mllsc\fR" 4
14514 .IX Item "-mllsc"
14515 .PD 0
14516 .IP "\fB\-mno\-llsc\fR" 4
14517 .IX Item "-mno-llsc"
14518 .PD
14519 Use (do not use) \fBll\fR, \fBsc\fR, and \fBsync\fR instructions to
14520 implement atomic memory built-in functions.  When neither option is
14521 specified, \s-1GCC\s0 will use the instructions if the target architecture
14522 supports them.
14523 .Sp
14524 \&\fB\-mllsc\fR is useful if the runtime environment can emulate the
14525 instructions and \fB\-mno\-llsc\fR can be useful when compiling for
14526 nonstandard ISAs.  You can make either option the default by
14527 configuring \s-1GCC\s0 with \fB\-\-with\-llsc\fR and \fB\-\-without\-llsc\fR
14528 respectively.  \fB\-\-with\-llsc\fR is the default for some
14529 configurations; see the installation documentation for details.
14530 .IP "\fB\-mdsp\fR" 4
14531 .IX Item "-mdsp"
14532 .PD 0
14533 .IP "\fB\-mno\-dsp\fR" 4
14534 .IX Item "-mno-dsp"
14535 .PD
14536 Use (do not use) revision 1 of the \s-1MIPS\s0 \s-1DSP\s0 \s-1ASE\s0.
14537   This option defines the
14538 preprocessor macro \fB_\|_mips_dsp\fR.  It also defines
14539 \&\fB_\|_mips_dsp_rev\fR to 1.
14540 .IP "\fB\-mdspr2\fR" 4
14541 .IX Item "-mdspr2"
14542 .PD 0
14543 .IP "\fB\-mno\-dspr2\fR" 4
14544 .IX Item "-mno-dspr2"
14545 .PD
14546 Use (do not use) revision 2 of the \s-1MIPS\s0 \s-1DSP\s0 \s-1ASE\s0.
14547   This option defines the
14548 preprocessor macros \fB_\|_mips_dsp\fR and \fB_\|_mips_dspr2\fR.
14549 It also defines \fB_\|_mips_dsp_rev\fR to 2.
14550 .IP "\fB\-msmartmips\fR" 4
14551 .IX Item "-msmartmips"
14552 .PD 0
14553 .IP "\fB\-mno\-smartmips\fR" 4
14554 .IX Item "-mno-smartmips"
14555 .PD
14556 Use (do not use) the \s-1MIPS\s0 SmartMIPS \s-1ASE\s0.
14557 .IP "\fB\-mpaired\-single\fR" 4
14558 .IX Item "-mpaired-single"
14559 .PD 0
14560 .IP "\fB\-mno\-paired\-single\fR" 4
14561 .IX Item "-mno-paired-single"
14562 .PD
14563 Use (do not use) paired-single floating-point instructions.
14564   This option requires
14565 hardware floating-point support to be enabled.
14566 .IP "\fB\-mdmx\fR" 4
14567 .IX Item "-mdmx"
14568 .PD 0
14569 .IP "\fB\-mno\-mdmx\fR" 4
14570 .IX Item "-mno-mdmx"
14571 .PD
14572 Use (do not use) \s-1MIPS\s0 Digital Media Extension instructions.
14573 This option can only be used when generating 64\-bit code and requires
14574 hardware floating-point support to be enabled.
14575 .IP "\fB\-mips3d\fR" 4
14576 .IX Item "-mips3d"
14577 .PD 0
14578 .IP "\fB\-mno\-mips3d\fR" 4
14579 .IX Item "-mno-mips3d"
14580 .PD
14581 Use (do not use) the \s-1MIPS\-3D\s0 \s-1ASE\s0.  
14582 The option \fB\-mips3d\fR implies \fB\-mpaired\-single\fR.
14583 .IP "\fB\-mmt\fR" 4
14584 .IX Item "-mmt"
14585 .PD 0
14586 .IP "\fB\-mno\-mt\fR" 4
14587 .IX Item "-mno-mt"
14588 .PD
14589 Use (do not use) \s-1MT\s0 Multithreading instructions.
14590 .IP "\fB\-mlong64\fR" 4
14591 .IX Item "-mlong64"
14592 Force \f(CW\*(C`long\*(C'\fR types to be 64 bits wide.  See \fB\-mlong32\fR for
14593 an explanation of the default and the way that the pointer size is
14594 determined.
14595 .IP "\fB\-mlong32\fR" 4
14596 .IX Item "-mlong32"
14597 Force \f(CW\*(C`long\*(C'\fR, \f(CW\*(C`int\*(C'\fR, and pointer types to be 32 bits wide.
14598 .Sp
14599 The default size of \f(CW\*(C`int\*(C'\fRs, \f(CW\*(C`long\*(C'\fRs and pointers depends on
14600 the \s-1ABI\s0.  All the supported ABIs use 32\-bit \f(CW\*(C`int\*(C'\fRs.  The n64 \s-1ABI\s0
14601 uses 64\-bit \f(CW\*(C`long\*(C'\fRs, as does the 64\-bit \s-1EABI\s0; the others use
14602 32\-bit \f(CW\*(C`long\*(C'\fRs.  Pointers are the same size as \f(CW\*(C`long\*(C'\fRs,
14603 or the same size as integer registers, whichever is smaller.
14604 .IP "\fB\-msym32\fR" 4
14605 .IX Item "-msym32"
14606 .PD 0
14607 .IP "\fB\-mno\-sym32\fR" 4
14608 .IX Item "-mno-sym32"
14609 .PD
14610 Assume (do not assume) that all symbols have 32\-bit values, regardless
14611 of the selected \s-1ABI\s0.  This option is useful in combination with
14612 \&\fB\-mabi=64\fR and \fB\-mno\-abicalls\fR because it allows \s-1GCC\s0
14613 to generate shorter and faster references to symbolic addresses.
14614 .IP "\fB\-G\fR \fInum\fR" 4
14615 .IX Item "-G num"
14616 Put definitions of externally-visible data in a small data section
14617 if that data is no bigger than \fInum\fR bytes.  \s-1GCC\s0 can then access
14618 the data more efficiently; see \fB\-mgpopt\fR for details.
14619 .Sp
14620 The default \fB\-G\fR option depends on the configuration.
14621 .IP "\fB\-mlocal\-sdata\fR" 4
14622 .IX Item "-mlocal-sdata"
14623 .PD 0
14624 .IP "\fB\-mno\-local\-sdata\fR" 4
14625 .IX Item "-mno-local-sdata"
14626 .PD
14627 Extend (do not extend) the \fB\-G\fR behavior to local data too,
14628 such as to static variables in C.  \fB\-mlocal\-sdata\fR is the
14629 default for all configurations.
14630 .Sp
14631 If the linker complains that an application is using too much small data,
14632 you might want to try rebuilding the less performance-critical parts with
14633 \&\fB\-mno\-local\-sdata\fR.  You might also want to build large
14634 libraries with \fB\-mno\-local\-sdata\fR, so that the libraries leave
14635 more room for the main program.
14636 .IP "\fB\-mextern\-sdata\fR" 4
14637 .IX Item "-mextern-sdata"
14638 .PD 0
14639 .IP "\fB\-mno\-extern\-sdata\fR" 4
14640 .IX Item "-mno-extern-sdata"
14641 .PD
14642 Assume (do not assume) that externally-defined data will be in
14643 a small data section if that data is within the \fB\-G\fR limit.
14644 \&\fB\-mextern\-sdata\fR is the default for all configurations.
14645 .Sp
14646 If you compile a module \fIMod\fR with \fB\-mextern\-sdata\fR \fB\-G\fR
14647 \&\fInum\fR \fB\-mgpopt\fR, and \fIMod\fR references a variable \fIVar\fR
14648 that is no bigger than \fInum\fR bytes, you must make sure that \fIVar\fR
14649 is placed in a small data section.  If \fIVar\fR is defined by another
14650 module, you must either compile that module with a high-enough
14651 \&\fB\-G\fR setting or attach a \f(CW\*(C`section\*(C'\fR attribute to \fIVar\fR's
14652 definition.  If \fIVar\fR is common, you must link the application
14653 with a high-enough \fB\-G\fR setting.
14654 .Sp
14655 The easiest way of satisfying these restrictions is to compile
14656 and link every module with the same \fB\-G\fR option.  However,
14657 you may wish to build a library that supports several different
14658 small data limits.  You can do this by compiling the library with
14659 the highest supported \fB\-G\fR setting and additionally using
14660 \&\fB\-mno\-extern\-sdata\fR to stop the library from making assumptions
14661 about externally-defined data.
14662 .IP "\fB\-mgpopt\fR" 4
14663 .IX Item "-mgpopt"
14664 .PD 0
14665 .IP "\fB\-mno\-gpopt\fR" 4
14666 .IX Item "-mno-gpopt"
14667 .PD
14668 Use (do not use) GP-relative accesses for symbols that are known to be
14669 in a small data section; see \fB\-G\fR, \fB\-mlocal\-sdata\fR and
14670 \&\fB\-mextern\-sdata\fR.  \fB\-mgpopt\fR is the default for all
14671 configurations.
14672 .Sp
14673 \&\fB\-mno\-gpopt\fR is useful for cases where the \f(CW$gp\fR register
14674 might not hold the value of \f(CW\*(C`_gp\*(C'\fR.  For example, if the code is
14675 part of a library that might be used in a boot monitor, programs that
14676 call boot monitor routines will pass an unknown value in \f(CW$gp\fR.
14677 (In such situations, the boot monitor itself would usually be compiled
14678 with \fB\-G0\fR.)
14679 .Sp
14680 \&\fB\-mno\-gpopt\fR implies \fB\-mno\-local\-sdata\fR and
14681 \&\fB\-mno\-extern\-sdata\fR.
14682 .IP "\fB\-membedded\-data\fR" 4
14683 .IX Item "-membedded-data"
14684 .PD 0
14685 .IP "\fB\-mno\-embedded\-data\fR" 4
14686 .IX Item "-mno-embedded-data"
14687 .PD
14688 Allocate variables to the read-only data section first if possible, then
14689 next in the small data section if possible, otherwise in data.  This gives
14690 slightly slower code than the default, but reduces the amount of \s-1RAM\s0 required
14691 when executing, and thus may be preferred for some embedded systems.
14692 .IP "\fB\-muninit\-const\-in\-rodata\fR" 4
14693 .IX Item "-muninit-const-in-rodata"
14694 .PD 0
14695 .IP "\fB\-mno\-uninit\-const\-in\-rodata\fR" 4
14696 .IX Item "-mno-uninit-const-in-rodata"
14697 .PD
14698 Put uninitialized \f(CW\*(C`const\*(C'\fR variables in the read-only data section.
14699 This option is only meaningful in conjunction with \fB\-membedded\-data\fR.
14700 .IP "\fB\-mcode\-readable=\fR\fIsetting\fR" 4
14701 .IX Item "-mcode-readable=setting"
14702 Specify whether \s-1GCC\s0 may generate code that reads from executable sections.
14703 There are three possible settings:
14704 .RS 4
14705 .IP "\fB\-mcode\-readable=yes\fR" 4
14706 .IX Item "-mcode-readable=yes"
14707 Instructions may freely access executable sections.  This is the
14708 default setting.
14709 .IP "\fB\-mcode\-readable=pcrel\fR" 4
14710 .IX Item "-mcode-readable=pcrel"
14711 \&\s-1MIPS16\s0 PC-relative load instructions can access executable sections,
14712 but other instructions must not do so.  This option is useful on 4KSc
14713 and 4KSd processors when the code TLBs have the Read Inhibit bit set.
14714 It is also useful on processors that can be configured to have a dual
14715 instruction/data \s-1SRAM\s0 interface and that, like the M4K, automatically
14716 redirect PC-relative loads to the instruction \s-1RAM\s0.
14717 .IP "\fB\-mcode\-readable=no\fR" 4
14718 .IX Item "-mcode-readable=no"
14719 Instructions must not access executable sections.  This option can be
14720 useful on targets that are configured to have a dual instruction/data
14721 \&\s-1SRAM\s0 interface but that (unlike the M4K) do not automatically redirect
14722 PC-relative loads to the instruction \s-1RAM\s0.
14723 .RE
14724 .RS 4
14725 .RE
14726 .IP "\fB\-msplit\-addresses\fR" 4
14727 .IX Item "-msplit-addresses"
14728 .PD 0
14729 .IP "\fB\-mno\-split\-addresses\fR" 4
14730 .IX Item "-mno-split-addresses"
14731 .PD
14732 Enable (disable) use of the \f(CW\*(C`%hi()\*(C'\fR and \f(CW\*(C`%lo()\*(C'\fR assembler
14733 relocation operators.  This option has been superseded by
14734 \&\fB\-mexplicit\-relocs\fR but is retained for backwards compatibility.
14735 .IP "\fB\-mexplicit\-relocs\fR" 4
14736 .IX Item "-mexplicit-relocs"
14737 .PD 0
14738 .IP "\fB\-mno\-explicit\-relocs\fR" 4
14739 .IX Item "-mno-explicit-relocs"
14740 .PD
14741 Use (do not use) assembler relocation operators when dealing with symbolic
14742 addresses.  The alternative, selected by \fB\-mno\-explicit\-relocs\fR,
14743 is to use assembler macros instead.
14744 .Sp
14745 \&\fB\-mexplicit\-relocs\fR is the default if \s-1GCC\s0 was configured
14746 to use an assembler that supports relocation operators.
14747 .IP "\fB\-mcheck\-zero\-division\fR" 4
14748 .IX Item "-mcheck-zero-division"
14749 .PD 0
14750 .IP "\fB\-mno\-check\-zero\-division\fR" 4
14751 .IX Item "-mno-check-zero-division"
14752 .PD
14753 Trap (do not trap) on integer division by zero.
14754 .Sp
14755 The default is \fB\-mcheck\-zero\-division\fR.
14756 .IP "\fB\-mdivide\-traps\fR" 4
14757 .IX Item "-mdivide-traps"
14758 .PD 0
14759 .IP "\fB\-mdivide\-breaks\fR" 4
14760 .IX Item "-mdivide-breaks"
14761 .PD
14762 \&\s-1MIPS\s0 systems check for division by zero by generating either a
14763 conditional trap or a break instruction.  Using traps results in
14764 smaller code, but is only supported on \s-1MIPS\s0 \s-1II\s0 and later.  Also, some
14765 versions of the Linux kernel have a bug that prevents trap from
14766 generating the proper signal (\f(CW\*(C`SIGFPE\*(C'\fR).  Use \fB\-mdivide\-traps\fR to
14767 allow conditional traps on architectures that support them and
14768 \&\fB\-mdivide\-breaks\fR to force the use of breaks.
14769 .Sp
14770 The default is usually \fB\-mdivide\-traps\fR, but this can be
14771 overridden at configure time using \fB\-\-with\-divide=breaks\fR.
14772 Divide-by-zero checks can be completely disabled using
14773 \&\fB\-mno\-check\-zero\-division\fR.
14774 .IP "\fB\-mmemcpy\fR" 4
14775 .IX Item "-mmemcpy"
14776 .PD 0
14777 .IP "\fB\-mno\-memcpy\fR" 4
14778 .IX Item "-mno-memcpy"
14779 .PD
14780 Force (do not force) the use of \f(CW\*(C`memcpy()\*(C'\fR for non-trivial block
14781 moves.  The default is \fB\-mno\-memcpy\fR, which allows \s-1GCC\s0 to inline
14782 most constant-sized copies.
14783 .IP "\fB\-mlong\-calls\fR" 4
14784 .IX Item "-mlong-calls"
14785 .PD 0
14786 .IP "\fB\-mno\-long\-calls\fR" 4
14787 .IX Item "-mno-long-calls"
14788 .PD
14789 Disable (do not disable) use of the \f(CW\*(C`jal\*(C'\fR instruction.  Calling
14790 functions using \f(CW\*(C`jal\*(C'\fR is more efficient but requires the caller
14791 and callee to be in the same 256 megabyte segment.
14792 .Sp
14793 This option has no effect on abicalls code.  The default is
14794 \&\fB\-mno\-long\-calls\fR.
14795 .IP "\fB\-mmad\fR" 4
14796 .IX Item "-mmad"
14797 .PD 0
14798 .IP "\fB\-mno\-mad\fR" 4
14799 .IX Item "-mno-mad"
14800 .PD
14801 Enable (disable) use of the \f(CW\*(C`mad\*(C'\fR, \f(CW\*(C`madu\*(C'\fR and \f(CW\*(C`mul\*(C'\fR
14802 instructions, as provided by the R4650 \s-1ISA\s0.
14803 .IP "\fB\-mfused\-madd\fR" 4
14804 .IX Item "-mfused-madd"
14805 .PD 0
14806 .IP "\fB\-mno\-fused\-madd\fR" 4
14807 .IX Item "-mno-fused-madd"
14808 .PD
14809 Enable (disable) use of the floating-point multiply-accumulate
14810 instructions, when they are available.  The default is
14811 \&\fB\-mfused\-madd\fR.
14812 .Sp
14813 When multiply-accumulate instructions are used, the intermediate
14814 product is calculated to infinite precision and is not subject to
14815 the \s-1FCSR\s0 Flush to Zero bit.  This may be undesirable in some
14816 circumstances.
14817 .IP "\fB\-nocpp\fR" 4
14818 .IX Item "-nocpp"
14819 Tell the \s-1MIPS\s0 assembler to not run its preprocessor over user
14820 assembler files (with a \fB.s\fR suffix) when assembling them.
14821 .IP "\fB\-mfix\-24k\fR" 4
14822 .IX Item "-mfix-24k"
14823 .PD 0
14824 .IP "\fB\-mno\-fix\-24k\fR" 4
14825 .IX Item "-mno-fix-24k"
14826 .PD
14827 Work around the 24K E48 (lost data on stores during refill) errata.
14828 The workarounds are implemented by the assembler rather than by \s-1GCC\s0.
14829 .IP "\fB\-mfix\-r4000\fR" 4
14830 .IX Item "-mfix-r4000"
14831 .PD 0
14832 .IP "\fB\-mno\-fix\-r4000\fR" 4
14833 .IX Item "-mno-fix-r4000"
14834 .PD
14835 Work around certain R4000 \s-1CPU\s0 errata:
14836 .RS 4
14837 .IP "\-" 4
14838 A double-word or a variable shift may give an incorrect result if executed
14839 immediately after starting an integer division.
14840 .IP "\-" 4
14841 A double-word or a variable shift may give an incorrect result if executed
14842 while an integer multiplication is in progress.
14843 .IP "\-" 4
14844 An integer division may give an incorrect result if started in a delay slot
14845 of a taken branch or a jump.
14846 .RE
14847 .RS 4
14848 .RE
14849 .IP "\fB\-mfix\-r4400\fR" 4
14850 .IX Item "-mfix-r4400"
14851 .PD 0
14852 .IP "\fB\-mno\-fix\-r4400\fR" 4
14853 .IX Item "-mno-fix-r4400"
14854 .PD
14855 Work around certain R4400 \s-1CPU\s0 errata:
14856 .RS 4
14857 .IP "\-" 4
14858 A double-word or a variable shift may give an incorrect result if executed
14859 immediately after starting an integer division.
14860 .RE
14861 .RS 4
14862 .RE
14863 .IP "\fB\-mfix\-r10000\fR" 4
14864 .IX Item "-mfix-r10000"
14865 .PD 0
14866 .IP "\fB\-mno\-fix\-r10000\fR" 4
14867 .IX Item "-mno-fix-r10000"
14868 .PD
14869 Work around certain R10000 errata:
14870 .RS 4
14871 .IP "\-" 4
14872 \&\f(CW\*(C`ll\*(C'\fR/\f(CW\*(C`sc\*(C'\fR sequences may not behave atomically on revisions
14873 prior to 3.0.  They may deadlock on revisions 2.6 and earlier.
14874 .RE
14875 .RS 4
14876 .Sp
14877 This option can only be used if the target architecture supports
14878 branch-likely instructions.  \fB\-mfix\-r10000\fR is the default when
14879 \&\fB\-march=r10000\fR is used; \fB\-mno\-fix\-r10000\fR is the default
14880 otherwise.
14881 .RE
14882 .IP "\fB\-mfix\-vr4120\fR" 4
14883 .IX Item "-mfix-vr4120"
14884 .PD 0
14885 .IP "\fB\-mno\-fix\-vr4120\fR" 4
14886 .IX Item "-mno-fix-vr4120"
14887 .PD
14888 Work around certain \s-1VR4120\s0 errata:
14889 .RS 4
14890 .IP "\-" 4
14891 \&\f(CW\*(C`dmultu\*(C'\fR does not always produce the correct result.
14892 .IP "\-" 4
14893 \&\f(CW\*(C`div\*(C'\fR and \f(CW\*(C`ddiv\*(C'\fR do not always produce the correct result if one
14894 of the operands is negative.
14895 .RE
14896 .RS 4
14897 .Sp
14898 The workarounds for the division errata rely on special functions in
14899 \&\fIlibgcc.a\fR.  At present, these functions are only provided by
14900 the \f(CW\*(C`mips64vr*\-elf\*(C'\fR configurations.
14901 .Sp
14902 Other \s-1VR4120\s0 errata require a nop to be inserted between certain pairs of
14903 instructions.  These errata are handled by the assembler, not by \s-1GCC\s0 itself.
14904 .RE
14905 .IP "\fB\-mfix\-vr4130\fR" 4
14906 .IX Item "-mfix-vr4130"
14907 Work around the \s-1VR4130\s0 \f(CW\*(C`mflo\*(C'\fR/\f(CW\*(C`mfhi\*(C'\fR errata.  The
14908 workarounds are implemented by the assembler rather than by \s-1GCC\s0,
14909 although \s-1GCC\s0 will avoid using \f(CW\*(C`mflo\*(C'\fR and \f(CW\*(C`mfhi\*(C'\fR if the
14910 \&\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
14911 instructions are available instead.
14912 .IP "\fB\-mfix\-sb1\fR" 4
14913 .IX Item "-mfix-sb1"
14914 .PD 0
14915 .IP "\fB\-mno\-fix\-sb1\fR" 4
14916 .IX Item "-mno-fix-sb1"
14917 .PD
14918 Work around certain \s-1SB\-1\s0 \s-1CPU\s0 core errata.
14919 (This flag currently works around the \s-1SB\-1\s0 revision 2
14920 \&\*(L"F1\*(R" and \*(L"F2\*(R" floating-point errata.)
14921 .IP "\fB\-mr10k\-cache\-barrier=\fR\fIsetting\fR" 4
14922 .IX Item "-mr10k-cache-barrier=setting"
14923 Specify whether \s-1GCC\s0 should insert cache barriers to avoid the
14924 side-effects of speculation on R10K processors.
14925 .Sp
14926 In common with many processors, the R10K tries to predict the outcome
14927 of a conditional branch and speculatively executes instructions from
14928 the \*(L"taken\*(R" branch.  It later aborts these instructions if the
14929 predicted outcome was wrong.  However, on the R10K, even aborted
14930 instructions can have side effects.
14931 .Sp
14932 This problem only affects kernel stores and, depending on the system,
14933 kernel loads.  As an example, a speculatively-executed store may load
14934 the target memory into cache and mark the cache line as dirty, even if
14935 the store itself is later aborted.  If a \s-1DMA\s0 operation writes to the
14936 same area of memory before the \*(L"dirty\*(R" line is flushed, the cached
14937 data will overwrite the DMA-ed data.  See the R10K processor manual
14938 for a full description, including other potential problems.
14939 .Sp
14940 One workaround is to insert cache barrier instructions before every memory
14941 access that might be speculatively executed and that might have side
14942 effects even if aborted.  \fB\-mr10k\-cache\-barrier=\fR\fIsetting\fR
14943 controls \s-1GCC\s0's implementation of this workaround.  It assumes that
14944 aborted accesses to any byte in the following regions will not have
14945 side effects:
14946 .RS 4
14947 .IP "1." 4
14948 the memory occupied by the current function's stack frame;
14949 .IP "2." 4
14950 the memory occupied by an incoming stack argument;
14951 .IP "3." 4
14952 the memory occupied by an object with a link-time-constant address.
14953 .RE
14954 .RS 4
14955 .Sp
14956 It is the kernel's responsibility to ensure that speculative
14957 accesses to these regions are indeed safe.
14958 .Sp
14959 If the input program contains a function declaration such as:
14960 .Sp
14961 .Vb 1
14962 \&        void foo (void);
14963 .Ve
14964 .Sp
14965 then the implementation of \f(CW\*(C`foo\*(C'\fR must allow \f(CW\*(C`j foo\*(C'\fR and
14966 \&\f(CW\*(C`jal foo\*(C'\fR to be executed speculatively.  \s-1GCC\s0 honors this
14967 restriction for functions it compiles itself.  It expects non-GCC
14968 functions (such as hand-written assembly code) to do the same.
14969 .Sp
14970 The option has three forms:
14971 .IP "\fB\-mr10k\-cache\-barrier=load\-store\fR" 4
14972 .IX Item "-mr10k-cache-barrier=load-store"
14973 Insert a cache barrier before a load or store that might be
14974 speculatively executed and that might have side effects even
14975 if aborted.
14976 .IP "\fB\-mr10k\-cache\-barrier=store\fR" 4
14977 .IX Item "-mr10k-cache-barrier=store"
14978 Insert a cache barrier before a store that might be speculatively
14979 executed and that might have side effects even if aborted.
14980 .IP "\fB\-mr10k\-cache\-barrier=none\fR" 4
14981 .IX Item "-mr10k-cache-barrier=none"
14982 Disable the insertion of cache barriers.  This is the default setting.
14983 .RE
14984 .RS 4
14985 .RE
14986 .IP "\fB\-mflush\-func=\fR\fIfunc\fR" 4
14987 .IX Item "-mflush-func=func"
14988 .PD 0
14989 .IP "\fB\-mno\-flush\-func\fR" 4
14990 .IX Item "-mno-flush-func"
14991 .PD
14992 Specifies the function to call to flush the I and D caches, or to not
14993 call any such function.  If called, the function must take the same
14994 arguments as the common \f(CW\*(C`_flush_func()\*(C'\fR, that is, the address of the
14995 memory range for which the cache is being flushed, the size of the
14996 memory range, and the number 3 (to flush both caches).  The default
14997 depends on the target \s-1GCC\s0 was configured for, but commonly is either
14998 \&\fB_flush_func\fR or \fB_\|_cpu_flush\fR.
14999 .IP "\fBmbranch\-cost=\fR\fInum\fR" 4
15000 .IX Item "mbranch-cost=num"
15001 Set the cost of branches to roughly \fInum\fR \*(L"simple\*(R" instructions.
15002 This cost is only a heuristic and is not guaranteed to produce
15003 consistent results across releases.  A zero cost redundantly selects
15004 the default, which is based on the \fB\-mtune\fR setting.
15005 .IP "\fB\-mbranch\-likely\fR" 4
15006 .IX Item "-mbranch-likely"
15007 .PD 0
15008 .IP "\fB\-mno\-branch\-likely\fR" 4
15009 .IX Item "-mno-branch-likely"
15010 .PD
15011 Enable or disable use of Branch Likely instructions, regardless of the
15012 default for the selected architecture.  By default, Branch Likely
15013 instructions may be generated if they are supported by the selected
15014 architecture.  An exception is for the \s-1MIPS32\s0 and \s-1MIPS64\s0 architectures
15015 and processors that implement those architectures; for those, Branch
15016 Likely instructions will not be generated by default because the \s-1MIPS32\s0
15017 and \s-1MIPS64\s0 architectures specifically deprecate their use.
15018 .IP "\fB\-mfp\-exceptions\fR" 4
15019 .IX Item "-mfp-exceptions"
15020 .PD 0
15021 .IP "\fB\-mno\-fp\-exceptions\fR" 4
15022 .IX Item "-mno-fp-exceptions"
15023 .PD
15024 Specifies whether \s-1FP\s0 exceptions are enabled.  This affects how we schedule
15025 \&\s-1FP\s0 instructions for some processors.  The default is that \s-1FP\s0 exceptions are
15026 enabled.
15027 .Sp
15028 For instance, on the \s-1SB\-1\s0, if \s-1FP\s0 exceptions are disabled, and we are emitting
15029 64\-bit code, then we can use both \s-1FP\s0 pipes.  Otherwise, we can only use one
15030 \&\s-1FP\s0 pipe.
15031 .IP "\fB\-mvr4130\-align\fR" 4
15032 .IX Item "-mvr4130-align"
15033 .PD 0
15034 .IP "\fB\-mno\-vr4130\-align\fR" 4
15035 .IX Item "-mno-vr4130-align"
15036 .PD
15037 The \s-1VR4130\s0 pipeline is two-way superscalar, but can only issue two
15038 instructions together if the first one is 8\-byte aligned.  When this
15039 option is enabled, \s-1GCC\s0 will align pairs of instructions that it
15040 thinks should execute in parallel.
15041 .Sp
15042 This option only has an effect when optimizing for the \s-1VR4130\s0.
15043 It normally makes code faster, but at the expense of making it bigger.
15044 It is enabled by default at optimization level \fB\-O3\fR.
15045 .IP "\fB\-msynci\fR" 4
15046 .IX Item "-msynci"
15047 .PD 0
15048 .IP "\fB\-mno\-synci\fR" 4
15049 .IX Item "-mno-synci"
15050 .PD
15051 Enable (disable) generation of \f(CW\*(C`synci\*(C'\fR instructions on
15052 architectures that support it.  The \f(CW\*(C`synci\*(C'\fR instructions (if
15053 enabled) will be generated when \f(CW\*(C`_\|_builtin_\|_\|_clear_cache()\*(C'\fR is
15054 compiled.
15055 .Sp
15056 This option defaults to \f(CW\*(C`\-mno\-synci\*(C'\fR, but the default can be
15057 overridden by configuring with \f(CW\*(C`\-\-with\-synci\*(C'\fR.
15058 .Sp
15059 When compiling code for single processor systems, it is generally safe
15060 to use \f(CW\*(C`synci\*(C'\fR.  However, on many multi-core (\s-1SMP\s0) systems, it
15061 will not invalidate the instruction caches on all cores and may lead
15062 to undefined behavior.
15063 .IP "\fB\-mrelax\-pic\-calls\fR" 4
15064 .IX Item "-mrelax-pic-calls"
15065 .PD 0
15066 .IP "\fB\-mno\-relax\-pic\-calls\fR" 4
15067 .IX Item "-mno-relax-pic-calls"
15068 .PD
15069 Try to turn \s-1PIC\s0 calls that are normally dispatched via register
15070 \&\f(CW$25\fR into direct calls.  This is only possible if the linker can
15071 resolve the destination at link-time and if the destination is within
15072 range for a direct call.
15073 .Sp
15074 \&\fB\-mrelax\-pic\-calls\fR is the default if \s-1GCC\s0 was configured to use
15075 an assembler and a linker that supports the \f(CW\*(C`.reloc\*(C'\fR assembly
15076 directive and \f(CW\*(C`\-mexplicit\-relocs\*(C'\fR is in effect.  With
15077 \&\f(CW\*(C`\-mno\-explicit\-relocs\*(C'\fR, this optimization can be performed by the
15078 assembler and the linker alone without help from the compiler.
15079 .IP "\fB\-mmcount\-ra\-address\fR" 4
15080 .IX Item "-mmcount-ra-address"
15081 .PD 0
15082 .IP "\fB\-mno\-mcount\-ra\-address\fR" 4
15083 .IX Item "-mno-mcount-ra-address"
15084 .PD
15085 Emit (do not emit) code that allows \f(CW\*(C`_mcount\*(C'\fR to modify the
15086 calling function's return address.  When enabled, this option extends
15087 the usual \f(CW\*(C`_mcount\*(C'\fR interface with a new \fIra-address\fR
15088 parameter, which has type \f(CW\*(C`intptr_t *\*(C'\fR and is passed in register
15089 \&\f(CW$12\fR.  \f(CW\*(C`_mcount\*(C'\fR can then modify the return address by
15090 doing both of the following:
15091 .RS 4
15092 .IP "\(bu" 4
15093 Returning the new address in register \f(CW$31\fR.
15094 .IP "\(bu" 4
15095 Storing the new address in \f(CW\*(C`*\f(CIra\-address\f(CW\*(C'\fR,
15096 if \fIra-address\fR is nonnull.
15097 .RE
15098 .RS 4
15099 .Sp
15100 The default is \fB\-mno\-mcount\-ra\-address\fR.
15101 .RE
15102 .PP
15103 \fI\s-1MMIX\s0 Options\fR
15104 .IX Subsection "MMIX Options"
15105 .PP
15106 These options are defined for the \s-1MMIX:\s0
15107 .IP "\fB\-mlibfuncs\fR" 4
15108 .IX Item "-mlibfuncs"
15109 .PD 0
15110 .IP "\fB\-mno\-libfuncs\fR" 4
15111 .IX Item "-mno-libfuncs"
15112 .PD
15113 Specify that intrinsic library functions are being compiled, passing all
15114 values in registers, no matter the size.
15115 .IP "\fB\-mepsilon\fR" 4
15116 .IX Item "-mepsilon"
15117 .PD 0
15118 .IP "\fB\-mno\-epsilon\fR" 4
15119 .IX Item "-mno-epsilon"
15120 .PD
15121 Generate floating-point comparison instructions that compare with respect
15122 to the \f(CW\*(C`rE\*(C'\fR epsilon register.
15123 .IP "\fB\-mabi=mmixware\fR" 4
15124 .IX Item "-mabi=mmixware"
15125 .PD 0
15126 .IP "\fB\-mabi=gnu\fR" 4
15127 .IX Item "-mabi=gnu"
15128 .PD
15129 Generate code that passes function parameters and return values that (in
15130 the called function) are seen as registers \f(CW$0\fR and up, as opposed to
15131 the \s-1GNU\s0 \s-1ABI\s0 which uses global registers \f(CW$231\fR and up.
15132 .IP "\fB\-mzero\-extend\fR" 4
15133 .IX Item "-mzero-extend"
15134 .PD 0
15135 .IP "\fB\-mno\-zero\-extend\fR" 4
15136 .IX Item "-mno-zero-extend"
15137 .PD
15138 When reading data from memory in sizes shorter than 64 bits, use (do not
15139 use) zero-extending load instructions by default, rather than
15140 sign-extending ones.
15141 .IP "\fB\-mknuthdiv\fR" 4
15142 .IX Item "-mknuthdiv"
15143 .PD 0
15144 .IP "\fB\-mno\-knuthdiv\fR" 4
15145 .IX Item "-mno-knuthdiv"
15146 .PD
15147 Make the result of a division yielding a remainder have the same sign as
15148 the divisor.  With the default, \fB\-mno\-knuthdiv\fR, the sign of the
15149 remainder follows the sign of the dividend.  Both methods are
15150 arithmetically valid, the latter being almost exclusively used.
15151 .IP "\fB\-mtoplevel\-symbols\fR" 4
15152 .IX Item "-mtoplevel-symbols"
15153 .PD 0
15154 .IP "\fB\-mno\-toplevel\-symbols\fR" 4
15155 .IX Item "-mno-toplevel-symbols"
15156 .PD
15157 Prepend (do not prepend) a \fB:\fR to all global symbols, so the assembly
15158 code can be used with the \f(CW\*(C`PREFIX\*(C'\fR assembly directive.
15159 .IP "\fB\-melf\fR" 4
15160 .IX Item "-melf"
15161 Generate an executable in the \s-1ELF\s0 format, rather than the default
15162 \&\fBmmo\fR format used by the \fBmmix\fR simulator.
15163 .IP "\fB\-mbranch\-predict\fR" 4
15164 .IX Item "-mbranch-predict"
15165 .PD 0
15166 .IP "\fB\-mno\-branch\-predict\fR" 4
15167 .IX Item "-mno-branch-predict"
15168 .PD
15169 Use (do not use) the probable-branch instructions, when static branch
15170 prediction indicates a probable branch.
15171 .IP "\fB\-mbase\-addresses\fR" 4
15172 .IX Item "-mbase-addresses"
15173 .PD 0
15174 .IP "\fB\-mno\-base\-addresses\fR" 4
15175 .IX Item "-mno-base-addresses"
15176 .PD
15177 Generate (do not generate) code that uses \fIbase addresses\fR.  Using a
15178 base address automatically generates a request (handled by the assembler
15179 and the linker) for a constant to be set up in a global register.  The
15180 register is used for one or more base address requests within the range 0
15181 to 255 from the value held in the register.  The generally leads to short
15182 and fast code, but the number of different data items that can be
15183 addressed is limited.  This means that a program that uses lots of static
15184 data may require \fB\-mno\-base\-addresses\fR.
15185 .IP "\fB\-msingle\-exit\fR" 4
15186 .IX Item "-msingle-exit"
15187 .PD 0
15188 .IP "\fB\-mno\-single\-exit\fR" 4
15189 .IX Item "-mno-single-exit"
15190 .PD
15191 Force (do not force) generated code to have a single exit point in each
15192 function.
15193 .PP
15194 \fI\s-1MN10300\s0 Options\fR
15195 .IX Subsection "MN10300 Options"
15196 .PP
15197 These \fB\-m\fR options are defined for Matsushita \s-1MN10300\s0 architectures:
15198 .IP "\fB\-mmult\-bug\fR" 4
15199 .IX Item "-mmult-bug"
15200 Generate code to avoid bugs in the multiply instructions for the \s-1MN10300\s0
15201 processors.  This is the default.
15202 .IP "\fB\-mno\-mult\-bug\fR" 4
15203 .IX Item "-mno-mult-bug"
15204 Do not generate code to avoid bugs in the multiply instructions for the
15205 \&\s-1MN10300\s0 processors.
15206 .IP "\fB\-mam33\fR" 4
15207 .IX Item "-mam33"
15208 Generate code using features specific to the \s-1AM33\s0 processor.
15209 .IP "\fB\-mno\-am33\fR" 4
15210 .IX Item "-mno-am33"
15211 Do not generate code using features specific to the \s-1AM33\s0 processor.  This
15212 is the default.
15213 .IP "\fB\-mam33\-2\fR" 4
15214 .IX Item "-mam33-2"
15215 Generate code using features specific to the \s-1AM33/2\s0.0 processor.
15216 .IP "\fB\-mam34\fR" 4
15217 .IX Item "-mam34"
15218 Generate code using features specific to the \s-1AM34\s0 processor.
15219 .IP "\fB\-mtune=\fR\fIcpu-type\fR" 4
15220 .IX Item "-mtune=cpu-type"
15221 Use the timing characteristics of the indicated \s-1CPU\s0 type when
15222 scheduling instructions.  This does not change the targeted processor
15223 type.  The \s-1CPU\s0 type must be one of \fBmn10300\fR, \fBam33\fR,
15224 \&\fBam33\-2\fR or \fBam34\fR.
15225 .IP "\fB\-mreturn\-pointer\-on\-d0\fR" 4
15226 .IX Item "-mreturn-pointer-on-d0"
15227 When generating a function that returns a pointer, return the pointer
15228 in both \f(CW\*(C`a0\*(C'\fR and \f(CW\*(C`d0\*(C'\fR.  Otherwise, the pointer is returned
15229 only in a0, and attempts to call such functions without a prototype
15230 would result in errors.  Note that this option is on by default; use
15231 \&\fB\-mno\-return\-pointer\-on\-d0\fR to disable it.
15232 .IP "\fB\-mno\-crt0\fR" 4
15233 .IX Item "-mno-crt0"
15234 Do not link in the C run-time initialization object file.
15235 .IP "\fB\-mrelax\fR" 4
15236 .IX Item "-mrelax"
15237 Indicate to the linker that it should perform a relaxation optimization pass
15238 to shorten branches, calls and absolute memory addresses.  This option only
15239 has an effect when used on the command line for the final link step.
15240 .Sp
15241 This option makes symbolic debugging impossible.
15242 .IP "\fB\-mliw\fR" 4
15243 .IX Item "-mliw"
15244 Allow the compiler to generate \fILong Instruction Word\fR
15245 instructions if the target is the \fB\s-1AM33\s0\fR or later.  This is the
15246 default.  This option defines the preprocessor macro \fB_\|_LIW_\|_\fR.
15247 .IP "\fB\-mnoliw\fR" 4
15248 .IX Item "-mnoliw"
15249 Do not allow the compiler to generate \fILong Instruction Word\fR
15250 instructions.  This option defines the preprocessor macro
15251 \&\fB_\|_NO_LIW_\|_\fR.
15252 .IP "\fB\-msetlb\fR" 4
15253 .IX Item "-msetlb"
15254 Allow the compiler to generate the \fI\s-1SETLB\s0\fR and \fILcc\fR
15255 instructions if the target is the \fB\s-1AM33\s0\fR or later.  This is the
15256 default.  This option defines the preprocessor macro \fB_\|_SETLB_\|_\fR.
15257 .IP "\fB\-mnosetlb\fR" 4
15258 .IX Item "-mnosetlb"
15259 Do not allow the compiler to generate \fI\s-1SETLB\s0\fR or \fILcc\fR
15260 instructions.  This option defines the preprocessor macro
15261 \&\fB_\|_NO_SETLB_\|_\fR.
15262 .PP
15263 \fI\s-1PDP\-11\s0 Options\fR
15264 .IX Subsection "PDP-11 Options"
15265 .PP
15266 These options are defined for the \s-1PDP\-11:\s0
15267 .IP "\fB\-mfpu\fR" 4
15268 .IX Item "-mfpu"
15269 Use hardware \s-1FPP\s0 floating point.  This is the default.  (\s-1FIS\s0 floating
15270 point on the \s-1PDP\-11/40\s0 is not supported.)
15271 .IP "\fB\-msoft\-float\fR" 4
15272 .IX Item "-msoft-float"
15273 Do not use hardware floating point.
15274 .IP "\fB\-mac0\fR" 4
15275 .IX Item "-mac0"
15276 Return floating-point results in ac0 (fr0 in Unix assembler syntax).
15277 .IP "\fB\-mno\-ac0\fR" 4
15278 .IX Item "-mno-ac0"
15279 Return floating-point results in memory.  This is the default.
15280 .IP "\fB\-m40\fR" 4
15281 .IX Item "-m40"
15282 Generate code for a \s-1PDP\-11/40\s0.
15283 .IP "\fB\-m45\fR" 4
15284 .IX Item "-m45"
15285 Generate code for a \s-1PDP\-11/45\s0.  This is the default.
15286 .IP "\fB\-m10\fR" 4
15287 .IX Item "-m10"
15288 Generate code for a \s-1PDP\-11/10\s0.
15289 .IP "\fB\-mbcopy\-builtin\fR" 4
15290 .IX Item "-mbcopy-builtin"
15291 Use inline \f(CW\*(C`movmemhi\*(C'\fR patterns for copying memory.  This is the
15292 default.
15293 .IP "\fB\-mbcopy\fR" 4
15294 .IX Item "-mbcopy"
15295 Do not use inline \f(CW\*(C`movmemhi\*(C'\fR patterns for copying memory.
15296 .IP "\fB\-mint16\fR" 4
15297 .IX Item "-mint16"
15298 .PD 0
15299 .IP "\fB\-mno\-int32\fR" 4
15300 .IX Item "-mno-int32"
15301 .PD
15302 Use 16\-bit \f(CW\*(C`int\*(C'\fR.  This is the default.
15303 .IP "\fB\-mint32\fR" 4
15304 .IX Item "-mint32"
15305 .PD 0
15306 .IP "\fB\-mno\-int16\fR" 4
15307 .IX Item "-mno-int16"
15308 .PD
15309 Use 32\-bit \f(CW\*(C`int\*(C'\fR.
15310 .IP "\fB\-mfloat64\fR" 4
15311 .IX Item "-mfloat64"
15312 .PD 0
15313 .IP "\fB\-mno\-float32\fR" 4
15314 .IX Item "-mno-float32"
15315 .PD
15316 Use 64\-bit \f(CW\*(C`float\*(C'\fR.  This is the default.
15317 .IP "\fB\-mfloat32\fR" 4
15318 .IX Item "-mfloat32"
15319 .PD 0
15320 .IP "\fB\-mno\-float64\fR" 4
15321 .IX Item "-mno-float64"
15322 .PD
15323 Use 32\-bit \f(CW\*(C`float\*(C'\fR.
15324 .IP "\fB\-mabshi\fR" 4
15325 .IX Item "-mabshi"
15326 Use \f(CW\*(C`abshi2\*(C'\fR pattern.  This is the default.
15327 .IP "\fB\-mno\-abshi\fR" 4
15328 .IX Item "-mno-abshi"
15329 Do not use \f(CW\*(C`abshi2\*(C'\fR pattern.
15330 .IP "\fB\-mbranch\-expensive\fR" 4
15331 .IX Item "-mbranch-expensive"
15332 Pretend that branches are expensive.  This is for experimenting with
15333 code generation only.
15334 .IP "\fB\-mbranch\-cheap\fR" 4
15335 .IX Item "-mbranch-cheap"
15336 Do not pretend that branches are expensive.  This is the default.
15337 .IP "\fB\-munix\-asm\fR" 4
15338 .IX Item "-munix-asm"
15339 Use Unix assembler syntax.  This is the default when configured for
15340 \&\fBpdp11\-*\-bsd\fR.
15341 .IP "\fB\-mdec\-asm\fR" 4
15342 .IX Item "-mdec-asm"
15343 Use \s-1DEC\s0 assembler syntax.  This is the default when configured for any
15344 \&\s-1PDP\-11\s0 target other than \fBpdp11\-*\-bsd\fR.
15345 .PP
15346 \fIpicoChip Options\fR
15347 .IX Subsection "picoChip Options"
15348 .PP
15349 These \fB\-m\fR options are defined for picoChip implementations:
15350 .IP "\fB\-mae=\fR\fIae_type\fR" 4
15351 .IX Item "-mae=ae_type"
15352 Set the instruction set, register set, and instruction scheduling
15353 parameters for array element type \fIae_type\fR.  Supported values
15354 for \fIae_type\fR are \fB\s-1ANY\s0\fR, \fB\s-1MUL\s0\fR, and \fB\s-1MAC\s0\fR.
15355 .Sp
15356 \&\fB\-mae=ANY\fR selects a completely generic \s-1AE\s0 type.  Code
15357 generated with this option will run on any of the other \s-1AE\s0 types.  The
15358 code will not be as efficient as it would be if compiled for a specific
15359 \&\s-1AE\s0 type, and some types of operation (e.g., multiplication) will not
15360 work properly on all types of \s-1AE\s0.
15361 .Sp
15362 \&\fB\-mae=MUL\fR selects a \s-1MUL\s0 \s-1AE\s0 type.  This is the most useful \s-1AE\s0 type
15363 for compiled code, and is the default.
15364 .Sp
15365 \&\fB\-mae=MAC\fR selects a DSP-style \s-1MAC\s0 \s-1AE\s0.  Code compiled with this
15366 option may suffer from poor performance of byte (char) manipulation,
15367 since the \s-1DSP\s0 \s-1AE\s0 does not provide hardware support for byte load/stores.
15368 .IP "\fB\-msymbol\-as\-address\fR" 4
15369 .IX Item "-msymbol-as-address"
15370 Enable the compiler to directly use a symbol name as an address in a
15371 load/store instruction, without first loading it into a
15372 register.  Typically, the use of this option will generate larger
15373 programs, which run faster than when the option isn't used.  However, the
15374 results vary from program to program, so it is left as a user option,
15375 rather than being permanently enabled.
15376 .IP "\fB\-mno\-inefficient\-warnings\fR" 4
15377 .IX Item "-mno-inefficient-warnings"
15378 Disables warnings about the generation of inefficient code.  These
15379 warnings can be generated, for example, when compiling code that
15380 performs byte-level memory operations on the \s-1MAC\s0 \s-1AE\s0 type.  The \s-1MAC\s0 \s-1AE\s0 has
15381 no hardware support for byte-level memory operations, so all byte
15382 load/stores must be synthesized from word load/store operations.  This is
15383 inefficient and a warning will be generated indicating to the programmer
15384 that they should rewrite the code to avoid byte operations, or to target
15385 an \s-1AE\s0 type that has the necessary hardware support.  This option enables
15386 the warning to be turned off.
15387 .PP
15388 \fIPowerPC Options\fR
15389 .IX Subsection "PowerPC Options"
15390 .PP
15391 These are listed under
15392 .PP
15393 \fI\s-1RL78\s0 Options\fR
15394 .IX Subsection "RL78 Options"
15395 .IP "\fB\-msim\fR" 4
15396 .IX Item "-msim"
15397 Links in additional target libraries to support operation within a
15398 simulator.
15399 .IP "\fB\-mmul=none\fR" 4
15400 .IX Item "-mmul=none"
15401 .PD 0
15402 .IP "\fB\-mmul=g13\fR" 4
15403 .IX Item "-mmul=g13"
15404 .IP "\fB\-mmul=rl78\fR" 4
15405 .IX Item "-mmul=rl78"
15406 .PD
15407 Specifies the type of hardware multiplication support to be used.  The
15408 default is \f(CW\*(C`none\*(C'\fR, which uses software multiplication functions.
15409 The \f(CW\*(C`g13\*(C'\fR option is for the hardware multiply/divide peripheral
15410 only on the \s-1RL78/G13\s0 targets.  The \f(CW\*(C`rl78\*(C'\fR option is for the
15411 standard hardware multiplication defined in the \s-1RL78\s0 software manual.
15412 .PP
15413 \fI\s-1IBM\s0 \s-1RS/6000\s0 and PowerPC Options\fR
15414 .IX Subsection "IBM RS/6000 and PowerPC Options"
15415 .PP
15416 These \fB\-m\fR options are defined for the \s-1IBM\s0 \s-1RS/6000\s0 and PowerPC:
15417 .IP "\fB\-mpower\fR" 4
15418 .IX Item "-mpower"
15419 .PD 0
15420 .IP "\fB\-mno\-power\fR" 4
15421 .IX Item "-mno-power"
15422 .IP "\fB\-mpower2\fR" 4
15423 .IX Item "-mpower2"
15424 .IP "\fB\-mno\-power2\fR" 4
15425 .IX Item "-mno-power2"
15426 .IP "\fB\-mpowerpc\fR" 4
15427 .IX Item "-mpowerpc"
15428 .IP "\fB\-mno\-powerpc\fR" 4
15429 .IX Item "-mno-powerpc"
15430 .IP "\fB\-mpowerpc\-gpopt\fR" 4
15431 .IX Item "-mpowerpc-gpopt"
15432 .IP "\fB\-mno\-powerpc\-gpopt\fR" 4
15433 .IX Item "-mno-powerpc-gpopt"
15434 .IP "\fB\-mpowerpc\-gfxopt\fR" 4
15435 .IX Item "-mpowerpc-gfxopt"
15436 .IP "\fB\-mno\-powerpc\-gfxopt\fR" 4
15437 .IX Item "-mno-powerpc-gfxopt"
15438 .IP "\fB\-mpowerpc64\fR" 4
15439 .IX Item "-mpowerpc64"
15440 .IP "\fB\-mno\-powerpc64\fR" 4
15441 .IX Item "-mno-powerpc64"
15442 .IP "\fB\-mmfcrf\fR" 4
15443 .IX Item "-mmfcrf"
15444 .IP "\fB\-mno\-mfcrf\fR" 4
15445 .IX Item "-mno-mfcrf"
15446 .IP "\fB\-mpopcntb\fR" 4
15447 .IX Item "-mpopcntb"
15448 .IP "\fB\-mno\-popcntb\fR" 4
15449 .IX Item "-mno-popcntb"
15450 .IP "\fB\-mpopcntd\fR" 4
15451 .IX Item "-mpopcntd"
15452 .IP "\fB\-mno\-popcntd\fR" 4
15453 .IX Item "-mno-popcntd"
15454 .IP "\fB\-mfprnd\fR" 4
15455 .IX Item "-mfprnd"
15456 .IP "\fB\-mno\-fprnd\fR" 4
15457 .IX Item "-mno-fprnd"
15458 .IP "\fB\-mcmpb\fR" 4
15459 .IX Item "-mcmpb"
15460 .IP "\fB\-mno\-cmpb\fR" 4
15461 .IX Item "-mno-cmpb"
15462 .IP "\fB\-mmfpgpr\fR" 4
15463 .IX Item "-mmfpgpr"
15464 .IP "\fB\-mno\-mfpgpr\fR" 4
15465 .IX Item "-mno-mfpgpr"
15466 .IP "\fB\-mhard\-dfp\fR" 4
15467 .IX Item "-mhard-dfp"
15468 .IP "\fB\-mno\-hard\-dfp\fR" 4
15469 .IX Item "-mno-hard-dfp"
15470 .PD
15471 \&\s-1GCC\s0 supports two related instruction set architectures for the
15472 \&\s-1RS/6000\s0 and PowerPC.  The \fI\s-1POWER\s0\fR instruction set are those
15473 instructions supported by the \fBrios\fR chip set used in the original
15474 \&\s-1RS/6000\s0 systems and the \fIPowerPC\fR instruction set is the
15475 architecture of the Freescale MPC5xx, MPC6xx, MPC8xx microprocessors, and
15476 the \s-1IBM\s0 4xx, 6xx, and follow-on microprocessors.
15477 .Sp
15478 Neither architecture is a subset of the other.  However there is a
15479 large common subset of instructions supported by both.  An \s-1MQ\s0
15480 register is included in processors supporting the \s-1POWER\s0 architecture.
15481 .Sp
15482 You use these options to specify which instructions are available on the
15483 processor you are using.  The default value of these options is
15484 determined when configuring \s-1GCC\s0.  Specifying the
15485 \&\fB\-mcpu=\fR\fIcpu_type\fR overrides the specification of these
15486 options.  We recommend you use the \fB\-mcpu=\fR\fIcpu_type\fR option
15487 rather than the options listed above.
15488 .Sp
15489 The \fB\-mpower\fR option allows \s-1GCC\s0 to generate instructions that
15490 are found only in the \s-1POWER\s0 architecture and to use the \s-1MQ\s0 register.
15491 Specifying \fB\-mpower2\fR implies \fB\-power\fR and also allows \s-1GCC\s0
15492 to generate instructions that are present in the \s-1POWER2\s0 architecture but
15493 not the original \s-1POWER\s0 architecture.
15494 .Sp
15495 The \fB\-mpowerpc\fR option allows \s-1GCC\s0 to generate instructions that
15496 are found only in the 32\-bit subset of the PowerPC architecture.
15497 Specifying \fB\-mpowerpc\-gpopt\fR implies \fB\-mpowerpc\fR and also allows
15498 \&\s-1GCC\s0 to use the optional PowerPC architecture instructions in the
15499 General Purpose group, including floating-point square root.  Specifying
15500 \&\fB\-mpowerpc\-gfxopt\fR implies \fB\-mpowerpc\fR and also allows \s-1GCC\s0 to
15501 use the optional PowerPC architecture instructions in the Graphics
15502 group, including floating-point select.
15503 .Sp
15504 The \fB\-mmfcrf\fR option allows \s-1GCC\s0 to generate the move from
15505 condition register field instruction implemented on the \s-1POWER4\s0
15506 processor and other processors that support the PowerPC V2.01
15507 architecture.
15508 The \fB\-mpopcntb\fR option allows \s-1GCC\s0 to generate the popcount and
15509 double-precision \s-1FP\s0 reciprocal estimate instruction implemented on the
15510 \&\s-1POWER5\s0 processor and other processors that support the PowerPC V2.02
15511 architecture.
15512 The \fB\-mpopcntd\fR option allows \s-1GCC\s0 to generate the popcount
15513 instruction implemented on the \s-1POWER7\s0 processor and other processors
15514 that support the PowerPC V2.06 architecture.
15515 The \fB\-mfprnd\fR option allows \s-1GCC\s0 to generate the \s-1FP\s0 round to
15516 integer instructions implemented on the \s-1POWER5+\s0 processor and other
15517 processors that support the PowerPC V2.03 architecture.
15518 The \fB\-mcmpb\fR option allows \s-1GCC\s0 to generate the compare bytes
15519 instruction implemented on the \s-1POWER6\s0 processor and other processors
15520 that support the PowerPC V2.05 architecture.
15521 The \fB\-mmfpgpr\fR option allows \s-1GCC\s0 to generate the \s-1FP\s0 move to/from
15522 general-purpose register instructions implemented on the \s-1POWER6X\s0
15523 processor and other processors that support the extended PowerPC V2.05
15524 architecture.
15525 The \fB\-mhard\-dfp\fR option allows \s-1GCC\s0 to generate the decimal
15526 floating-point instructions implemented on some \s-1POWER\s0 processors.
15527 .Sp
15528 The \fB\-mpowerpc64\fR option allows \s-1GCC\s0 to generate the additional
15529 64\-bit instructions that are found in the full PowerPC64 architecture
15530 and to treat GPRs as 64\-bit, doubleword quantities.  \s-1GCC\s0 defaults to
15531 \&\fB\-mno\-powerpc64\fR.
15532 .Sp
15533 If you specify both \fB\-mno\-power\fR and \fB\-mno\-powerpc\fR, \s-1GCC\s0
15534 will use only the instructions in the common subset of both
15535 architectures plus some special \s-1AIX\s0 common-mode calls, and will not use
15536 the \s-1MQ\s0 register.  Specifying both \fB\-mpower\fR and \fB\-mpowerpc\fR
15537 permits \s-1GCC\s0 to use any instruction from either architecture and to
15538 allow use of the \s-1MQ\s0 register; specify this for the Motorola \s-1MPC601\s0.
15539 .IP "\fB\-mnew\-mnemonics\fR" 4
15540 .IX Item "-mnew-mnemonics"
15541 .PD 0
15542 .IP "\fB\-mold\-mnemonics\fR" 4
15543 .IX Item "-mold-mnemonics"
15544 .PD
15545 Select which mnemonics to use in the generated assembler code.  With
15546 \&\fB\-mnew\-mnemonics\fR, \s-1GCC\s0 uses the assembler mnemonics defined for
15547 the PowerPC architecture.  With \fB\-mold\-mnemonics\fR it uses the
15548 assembler mnemonics defined for the \s-1POWER\s0 architecture.  Instructions
15549 defined in only one architecture have only one mnemonic; \s-1GCC\s0 uses that
15550 mnemonic irrespective of which of these options is specified.
15551 .Sp
15552 \&\s-1GCC\s0 defaults to the mnemonics appropriate for the architecture in
15553 use.  Specifying \fB\-mcpu=\fR\fIcpu_type\fR sometimes overrides the
15554 value of these option.  Unless you are building a cross-compiler, you
15555 should normally not specify either \fB\-mnew\-mnemonics\fR or
15556 \&\fB\-mold\-mnemonics\fR, but should instead accept the default.
15557 .IP "\fB\-mcpu=\fR\fIcpu_type\fR" 4
15558 .IX Item "-mcpu=cpu_type"
15559 Set architecture type, register usage, choice of mnemonics, and
15560 instruction scheduling parameters for machine type \fIcpu_type\fR.
15561 Supported values for \fIcpu_type\fR are \fB401\fR, \fB403\fR,
15562 \&\fB405\fR, \fB405fp\fR, \fB440\fR, \fB440fp\fR, \fB464\fR, \fB464fp\fR,
15563 \&\fB476\fR, \fB476fp\fR, \fB505\fR, \fB601\fR, \fB602\fR, \fB603\fR,
15564 \&\fB603e\fR, \fB604\fR, \fB604e\fR, \fB620\fR, \fB630\fR, \fB740\fR,
15565 \&\fB7400\fR, \fB7450\fR, \fB750\fR, \fB801\fR, \fB821\fR, \fB823\fR,
15566 \&\fB860\fR, \fB970\fR, \fB8540\fR, \fBa2\fR, \fBe300c2\fR,
15567 \&\fBe300c3\fR, \fBe500mc\fR, \fBe500mc64\fR, \fBec603e\fR, \fBG3\fR,
15568 \&\fBG4\fR, \fBG5\fR, \fBtitan\fR, \fBpower\fR, \fBpower2\fR, \fBpower3\fR,
15569 \&\fBpower4\fR, \fBpower5\fR, \fBpower5+\fR, \fBpower6\fR, \fBpower6x\fR,
15570 \&\fBpower7\fR, \fBcommon\fR, \fBpowerpc\fR, \fBpowerpc64\fR, \fBrios\fR,
15571 \&\fBrios1\fR, \fBrios2\fR, \fBrsc\fR, and \fBrs64\fR.
15572 .Sp
15573 \&\fB\-mcpu=common\fR selects a completely generic processor.  Code
15574 generated under this option will run on any \s-1POWER\s0 or PowerPC processor.
15575 \&\s-1GCC\s0 will use only the instructions in the common subset of both
15576 architectures, and will not use the \s-1MQ\s0 register.  \s-1GCC\s0 assumes a generic
15577 processor model for scheduling purposes.
15578 .Sp
15579 \&\fB\-mcpu=power\fR, \fB\-mcpu=power2\fR, \fB\-mcpu=powerpc\fR, and
15580 \&\fB\-mcpu=powerpc64\fR specify generic \s-1POWER\s0, \s-1POWER2\s0, pure 32\-bit
15581 PowerPC (i.e., not \s-1MPC601\s0), and 64\-bit PowerPC architecture machine
15582 types, with an appropriate, generic processor model assumed for
15583 scheduling purposes.
15584 .Sp
15585 The other options specify a specific processor.  Code generated under
15586 those options will run best on that processor, and may not run at all on
15587 others.
15588 .Sp
15589 The \fB\-mcpu\fR options automatically enable or disable the
15590 following options:
15591 .Sp
15592 \&\fB\-maltivec  \-mfprnd  \-mhard\-float  \-mmfcrf  \-mmultiple 
15593 \&\-mnew\-mnemonics  \-mpopcntb \-mpopcntd  \-mpower  \-mpower2  \-mpowerpc64 
15594 \&\-mpowerpc\-gpopt  \-mpowerpc\-gfxopt  \-msingle\-float \-mdouble\-float 
15595 \&\-msimple\-fpu \-mstring  \-mmulhw  \-mdlmzb  \-mmfpgpr \-mvsx\fR
15596 .Sp
15597 The particular options set for any particular \s-1CPU\s0 will vary between
15598 compiler versions, depending on what setting seems to produce optimal
15599 code for that \s-1CPU\s0; it doesn't necessarily reflect the actual hardware's
15600 capabilities.  If you wish to set an individual option to a particular
15601 value, you may specify it after the \fB\-mcpu\fR option, like
15602 \&\fB\-mcpu=970 \-mno\-altivec\fR.
15603 .Sp
15604 On \s-1AIX\s0, the \fB\-maltivec\fR and \fB\-mpowerpc64\fR options are
15605 not enabled or disabled by the \fB\-mcpu\fR option at present because
15606 \&\s-1AIX\s0 does not have full support for these options.  You may still
15607 enable or disable them individually if you're sure it'll work in your
15608 environment.
15609 .IP "\fB\-mtune=\fR\fIcpu_type\fR" 4
15610 .IX Item "-mtune=cpu_type"
15611 Set the instruction scheduling parameters for machine type
15612 \&\fIcpu_type\fR, but do not set the architecture type, register usage, or
15613 choice of mnemonics, as \fB\-mcpu=\fR\fIcpu_type\fR would.  The same
15614 values for \fIcpu_type\fR are used for \fB\-mtune\fR as for
15615 \&\fB\-mcpu\fR.  If both are specified, the code generated will use the
15616 architecture, registers, and mnemonics set by \fB\-mcpu\fR, but the
15617 scheduling parameters set by \fB\-mtune\fR.
15618 .IP "\fB\-mcmodel=small\fR" 4
15619 .IX Item "-mcmodel=small"
15620 Generate PowerPC64 code for the small model: The \s-1TOC\s0 is limited to
15621 64k.
15622 .IP "\fB\-mcmodel=medium\fR" 4
15623 .IX Item "-mcmodel=medium"
15624 Generate PowerPC64 code for the medium model: The \s-1TOC\s0 and other static
15625 data may be up to a total of 4G in size.
15626 .IP "\fB\-mcmodel=large\fR" 4
15627 .IX Item "-mcmodel=large"
15628 Generate PowerPC64 code for the large model: The \s-1TOC\s0 may be up to 4G
15629 in size.  Other data and code is only limited by the 64\-bit address
15630 space.
15631 .IP "\fB\-maltivec\fR" 4
15632 .IX Item "-maltivec"
15633 .PD 0
15634 .IP "\fB\-mno\-altivec\fR" 4
15635 .IX Item "-mno-altivec"
15636 .PD
15637 Generate code that uses (does not use) AltiVec instructions, and also
15638 enable the use of built-in functions that allow more direct access to
15639 the AltiVec instruction set.  You may also need to set
15640 \&\fB\-mabi=altivec\fR to adjust the current \s-1ABI\s0 with AltiVec \s-1ABI\s0
15641 enhancements.
15642 .IP "\fB\-mvrsave\fR" 4
15643 .IX Item "-mvrsave"
15644 .PD 0
15645 .IP "\fB\-mno\-vrsave\fR" 4
15646 .IX Item "-mno-vrsave"
15647 .PD
15648 Generate \s-1VRSAVE\s0 instructions when generating AltiVec code.
15649 .IP "\fB\-mgen\-cell\-microcode\fR" 4
15650 .IX Item "-mgen-cell-microcode"
15651 Generate Cell microcode instructions
15652 .IP "\fB\-mwarn\-cell\-microcode\fR" 4
15653 .IX Item "-mwarn-cell-microcode"
15654 Warning when a Cell microcode instruction is going to emitted.  An example
15655 of a Cell microcode instruction is a variable shift.
15656 .IP "\fB\-msecure\-plt\fR" 4
15657 .IX Item "-msecure-plt"
15658 Generate code that allows ld and ld.so to build executables and shared
15659 libraries with non-exec .plt and .got sections.  This is a PowerPC
15660 32\-bit \s-1SYSV\s0 \s-1ABI\s0 option.
15661 .IP "\fB\-mbss\-plt\fR" 4
15662 .IX Item "-mbss-plt"
15663 Generate code that uses a \s-1BSS\s0 .plt section that ld.so fills in, and
15664 requires .plt and .got sections that are both writable and executable.
15665 This is a PowerPC 32\-bit \s-1SYSV\s0 \s-1ABI\s0 option.
15666 .IP "\fB\-misel\fR" 4
15667 .IX Item "-misel"
15668 .PD 0
15669 .IP "\fB\-mno\-isel\fR" 4
15670 .IX Item "-mno-isel"
15671 .PD
15672 This switch enables or disables the generation of \s-1ISEL\s0 instructions.
15673 .IP "\fB\-misel=\fR\fIyes/no\fR" 4
15674 .IX Item "-misel=yes/no"
15675 This switch has been deprecated.  Use \fB\-misel\fR and
15676 \&\fB\-mno\-isel\fR instead.
15677 .IP "\fB\-mspe\fR" 4
15678 .IX Item "-mspe"
15679 .PD 0
15680 .IP "\fB\-mno\-spe\fR" 4
15681 .IX Item "-mno-spe"
15682 .PD
15683 This switch enables or disables the generation of \s-1SPE\s0 simd
15684 instructions.
15685 .IP "\fB\-mpaired\fR" 4
15686 .IX Item "-mpaired"
15687 .PD 0
15688 .IP "\fB\-mno\-paired\fR" 4
15689 .IX Item "-mno-paired"
15690 .PD
15691 This switch enables or disables the generation of \s-1PAIRED\s0 simd
15692 instructions.
15693 .IP "\fB\-mspe=\fR\fIyes/no\fR" 4
15694 .IX Item "-mspe=yes/no"
15695 This option has been deprecated.  Use \fB\-mspe\fR and
15696 \&\fB\-mno\-spe\fR instead.
15697 .IP "\fB\-mvsx\fR" 4
15698 .IX Item "-mvsx"
15699 .PD 0
15700 .IP "\fB\-mno\-vsx\fR" 4
15701 .IX Item "-mno-vsx"
15702 .PD
15703 Generate code that uses (does not use) vector/scalar (\s-1VSX\s0)
15704 instructions, and also enable the use of built-in functions that allow
15705 more direct access to the \s-1VSX\s0 instruction set.
15706 .IP "\fB\-mfloat\-gprs=\fR\fIyes/single/double/no\fR" 4
15707 .IX Item "-mfloat-gprs=yes/single/double/no"
15708 .PD 0
15709 .IP "\fB\-mfloat\-gprs\fR" 4
15710 .IX Item "-mfloat-gprs"
15711 .PD
15712 This switch enables or disables the generation of floating-point
15713 operations on the general-purpose registers for architectures that
15714 support it.
15715 .Sp
15716 The argument \fIyes\fR or \fIsingle\fR enables the use of
15717 single-precision floating-point operations.
15718 .Sp
15719 The argument \fIdouble\fR enables the use of single and
15720 double-precision floating-point operations.
15721 .Sp
15722 The argument \fIno\fR disables floating-point operations on the
15723 general-purpose registers.
15724 .Sp
15725 This option is currently only available on the MPC854x.
15726 .IP "\fB\-m32\fR" 4
15727 .IX Item "-m32"
15728 .PD 0
15729 .IP "\fB\-m64\fR" 4
15730 .IX Item "-m64"
15731 .PD
15732 Generate code for 32\-bit or 64\-bit environments of Darwin and \s-1SVR4\s0
15733 targets (including GNU/Linux).  The 32\-bit environment sets int, long
15734 and pointer to 32 bits and generates code that runs on any PowerPC
15735 variant.  The 64\-bit environment sets int to 32 bits and long and
15736 pointer to 64 bits, and generates code for PowerPC64, as for
15737 \&\fB\-mpowerpc64\fR.
15738 .IP "\fB\-mfull\-toc\fR" 4
15739 .IX Item "-mfull-toc"
15740 .PD 0
15741 .IP "\fB\-mno\-fp\-in\-toc\fR" 4
15742 .IX Item "-mno-fp-in-toc"
15743 .IP "\fB\-mno\-sum\-in\-toc\fR" 4
15744 .IX Item "-mno-sum-in-toc"
15745 .IP "\fB\-mminimal\-toc\fR" 4
15746 .IX Item "-mminimal-toc"
15747 .PD
15748 Modify generation of the \s-1TOC\s0 (Table Of Contents), which is created for
15749 every executable file.  The \fB\-mfull\-toc\fR option is selected by
15750 default.  In that case, \s-1GCC\s0 will allocate at least one \s-1TOC\s0 entry for
15751 each unique non-automatic variable reference in your program.  \s-1GCC\s0
15752 will also place floating-point constants in the \s-1TOC\s0.  However, only
15753 16,384 entries are available in the \s-1TOC\s0.
15754 .Sp
15755 If you receive a linker error message that saying you have overflowed
15756 the available \s-1TOC\s0 space, you can reduce the amount of \s-1TOC\s0 space used
15757 with the \fB\-mno\-fp\-in\-toc\fR and \fB\-mno\-sum\-in\-toc\fR options.
15758 \&\fB\-mno\-fp\-in\-toc\fR prevents \s-1GCC\s0 from putting floating-point
15759 constants in the \s-1TOC\s0 and \fB\-mno\-sum\-in\-toc\fR forces \s-1GCC\s0 to
15760 generate code to calculate the sum of an address and a constant at
15761 run time instead of putting that sum into the \s-1TOC\s0.  You may specify one
15762 or both of these options.  Each causes \s-1GCC\s0 to produce very slightly
15763 slower and larger code at the expense of conserving \s-1TOC\s0 space.
15764 .Sp
15765 If you still run out of space in the \s-1TOC\s0 even when you specify both of
15766 these options, specify \fB\-mminimal\-toc\fR instead.  This option causes
15767 \&\s-1GCC\s0 to make only one \s-1TOC\s0 entry for every file.  When you specify this
15768 option, \s-1GCC\s0 will produce code that is slower and larger but which
15769 uses extremely little \s-1TOC\s0 space.  You may wish to use this option
15770 only on files that contain less frequently executed code.
15771 .IP "\fB\-maix64\fR" 4
15772 .IX Item "-maix64"
15773 .PD 0
15774 .IP "\fB\-maix32\fR" 4
15775 .IX Item "-maix32"
15776 .PD
15777 Enable 64\-bit \s-1AIX\s0 \s-1ABI\s0 and calling convention: 64\-bit pointers, 64\-bit
15778 \&\f(CW\*(C`long\*(C'\fR type, and the infrastructure needed to support them.
15779 Specifying \fB\-maix64\fR implies \fB\-mpowerpc64\fR and
15780 \&\fB\-mpowerpc\fR, while \fB\-maix32\fR disables the 64\-bit \s-1ABI\s0 and
15781 implies \fB\-mno\-powerpc64\fR.  \s-1GCC\s0 defaults to \fB\-maix32\fR.
15782 .IP "\fB\-mxl\-compat\fR" 4
15783 .IX Item "-mxl-compat"
15784 .PD 0
15785 .IP "\fB\-mno\-xl\-compat\fR" 4
15786 .IX Item "-mno-xl-compat"
15787 .PD
15788 Produce code that conforms more closely to \s-1IBM\s0 \s-1XL\s0 compiler semantics
15789 when using AIX-compatible \s-1ABI\s0.  Pass floating-point arguments to
15790 prototyped functions beyond the register save area (\s-1RSA\s0) on the stack
15791 in addition to argument FPRs.  Do not assume that most significant
15792 double in 128\-bit long double value is properly rounded when comparing
15793 values and converting to double.  Use \s-1XL\s0 symbol names for long double
15794 support routines.
15795 .Sp
15796 The \s-1AIX\s0 calling convention was extended but not initially documented to
15797 handle an obscure K&R C case of calling a function that takes the
15798 address of its arguments with fewer arguments than declared.  \s-1IBM\s0 \s-1XL\s0
15799 compilers access floating-point arguments that do not fit in the
15800 \&\s-1RSA\s0 from the stack when a subroutine is compiled without
15801 optimization.  Because always storing floating-point arguments on the
15802 stack is inefficient and rarely needed, this option is not enabled by
15803 default and only is necessary when calling subroutines compiled by \s-1IBM\s0
15804 \&\s-1XL\s0 compilers without optimization.
15805 .IP "\fB\-mpe\fR" 4
15806 .IX Item "-mpe"
15807 Support \fI\s-1IBM\s0 \s-1RS/6000\s0 \s-1SP\s0\fR \fIParallel Environment\fR (\s-1PE\s0).  Link an
15808 application written to use message passing with special startup code to
15809 enable the application to run.  The system must have \s-1PE\s0 installed in the
15810 standard location (\fI/usr/lpp/ppe.poe/\fR), or the \fIspecs\fR file
15811 must be overridden with the \fB\-specs=\fR option to specify the
15812 appropriate directory location.  The Parallel Environment does not
15813 support threads, so the \fB\-mpe\fR option and the \fB\-pthread\fR
15814 option are incompatible.
15815 .IP "\fB\-malign\-natural\fR" 4
15816 .IX Item "-malign-natural"
15817 .PD 0
15818 .IP "\fB\-malign\-power\fR" 4
15819 .IX Item "-malign-power"
15820 .PD
15821 On \s-1AIX\s0, 32\-bit Darwin, and 64\-bit PowerPC GNU/Linux, the option
15822 \&\fB\-malign\-natural\fR overrides the ABI-defined alignment of larger
15823 types, such as floating-point doubles, on their natural size-based boundary.
15824 The option \fB\-malign\-power\fR instructs \s-1GCC\s0 to follow the ABI-specified
15825 alignment rules.  \s-1GCC\s0 defaults to the standard alignment defined in the \s-1ABI\s0.
15826 .Sp
15827 On 64\-bit Darwin, natural alignment is the default, and \fB\-malign\-power\fR
15828 is not supported.
15829 .IP "\fB\-msoft\-float\fR" 4
15830 .IX Item "-msoft-float"
15831 .PD 0
15832 .IP "\fB\-mhard\-float\fR" 4
15833 .IX Item "-mhard-float"
15834 .PD
15835 Generate code that does not use (uses) the floating-point register set.
15836 Software floating-point emulation is provided if you use the
15837 \&\fB\-msoft\-float\fR option, and pass the option to \s-1GCC\s0 when linking.
15838 .IP "\fB\-msingle\-float\fR" 4
15839 .IX Item "-msingle-float"
15840 .PD 0
15841 .IP "\fB\-mdouble\-float\fR" 4
15842 .IX Item "-mdouble-float"
15843 .PD
15844 Generate code for single\- or double-precision floating-point operations.
15845 \&\fB\-mdouble\-float\fR implies \fB\-msingle\-float\fR.
15846 .IP "\fB\-msimple\-fpu\fR" 4
15847 .IX Item "-msimple-fpu"
15848 Do not generate sqrt and div instructions for hardware floating-point unit.
15849 .IP "\fB\-mfpu\fR" 4
15850 .IX Item "-mfpu"
15851 Specify type of floating-point unit.  Valid values are \fIsp_lite\fR
15852 (equivalent to \-msingle\-float \-msimple\-fpu), \fIdp_lite\fR (equivalent
15853 to \-mdouble\-float \-msimple\-fpu), \fIsp_full\fR (equivalent to \-msingle\-float),
15854 and \fIdp_full\fR (equivalent to \-mdouble\-float).
15855 .IP "\fB\-mxilinx\-fpu\fR" 4
15856 .IX Item "-mxilinx-fpu"
15857 Perform optimizations for the floating-point unit on Xilinx \s-1PPC\s0 405/440.
15858 .IP "\fB\-mmultiple\fR" 4
15859 .IX Item "-mmultiple"
15860 .PD 0
15861 .IP "\fB\-mno\-multiple\fR" 4
15862 .IX Item "-mno-multiple"
15863 .PD
15864 Generate code that uses (does not use) the load multiple word
15865 instructions and the store multiple word instructions.  These
15866 instructions are generated by default on \s-1POWER\s0 systems, and not
15867 generated on PowerPC systems.  Do not use \fB\-mmultiple\fR on little-endian
15868 PowerPC systems, since those instructions do not work when the
15869 processor is in little-endian mode.  The exceptions are \s-1PPC740\s0 and
15870 \&\s-1PPC750\s0 which permit these instructions in little-endian mode.
15871 .IP "\fB\-mstring\fR" 4
15872 .IX Item "-mstring"
15873 .PD 0
15874 .IP "\fB\-mno\-string\fR" 4
15875 .IX Item "-mno-string"
15876 .PD
15877 Generate code that uses (does not use) the load string instructions
15878 and the store string word instructions to save multiple registers and
15879 do small block moves.  These instructions are generated by default on
15880 \&\s-1POWER\s0 systems, and not generated on PowerPC systems.  Do not use
15881 \&\fB\-mstring\fR on little-endian PowerPC systems, since those
15882 instructions do not work when the processor is in little-endian mode.
15883 The exceptions are \s-1PPC740\s0 and \s-1PPC750\s0 which permit these instructions
15884 in little-endian mode.
15885 .IP "\fB\-mupdate\fR" 4
15886 .IX Item "-mupdate"
15887 .PD 0
15888 .IP "\fB\-mno\-update\fR" 4
15889 .IX Item "-mno-update"
15890 .PD
15891 Generate code that uses (does not use) the load or store instructions
15892 that update the base register to the address of the calculated memory
15893 location.  These instructions are generated by default.  If you use
15894 \&\fB\-mno\-update\fR, there is a small window between the time that the
15895 stack pointer is updated and the address of the previous frame is
15896 stored, which means code that walks the stack frame across interrupts or
15897 signals may get corrupted data.
15898 .IP "\fB\-mavoid\-indexed\-addresses\fR" 4
15899 .IX Item "-mavoid-indexed-addresses"
15900 .PD 0
15901 .IP "\fB\-mno\-avoid\-indexed\-addresses\fR" 4
15902 .IX Item "-mno-avoid-indexed-addresses"
15903 .PD
15904 Generate code that tries to avoid (not avoid) the use of indexed load
15905 or store instructions. These instructions can incur a performance
15906 penalty on Power6 processors in certain situations, such as when
15907 stepping through large arrays that cross a 16M boundary.  This option
15908 is enabled by default when targetting Power6 and disabled otherwise.
15909 .IP "\fB\-mfused\-madd\fR" 4
15910 .IX Item "-mfused-madd"
15911 .PD 0
15912 .IP "\fB\-mno\-fused\-madd\fR" 4
15913 .IX Item "-mno-fused-madd"
15914 .PD
15915 Generate code that uses (does not use) the floating-point multiply and
15916 accumulate instructions.  These instructions are generated by default
15917 if hardware floating point is used.  The machine-dependent
15918 \&\fB\-mfused\-madd\fR option is now mapped to the machine-independent
15919 \&\fB\-ffp\-contract=fast\fR option, and \fB\-mno\-fused\-madd\fR is
15920 mapped to \fB\-ffp\-contract=off\fR.
15921 .IP "\fB\-mmulhw\fR" 4
15922 .IX Item "-mmulhw"
15923 .PD 0
15924 .IP "\fB\-mno\-mulhw\fR" 4
15925 .IX Item "-mno-mulhw"
15926 .PD
15927 Generate code that uses (does not use) the half-word multiply and
15928 multiply-accumulate instructions on the \s-1IBM\s0 405, 440, 464 and 476 processors.
15929 These instructions are generated by default when targetting those
15930 processors.
15931 .IP "\fB\-mdlmzb\fR" 4
15932 .IX Item "-mdlmzb"
15933 .PD 0
15934 .IP "\fB\-mno\-dlmzb\fR" 4
15935 .IX Item "-mno-dlmzb"
15936 .PD
15937 Generate code that uses (does not use) the string-search \fBdlmzb\fR
15938 instruction on the \s-1IBM\s0 405, 440, 464 and 476 processors.  This instruction is
15939 generated by default when targetting those processors.
15940 .IP "\fB\-mno\-bit\-align\fR" 4
15941 .IX Item "-mno-bit-align"
15942 .PD 0
15943 .IP "\fB\-mbit\-align\fR" 4
15944 .IX Item "-mbit-align"
15945 .PD
15946 On System V.4 and embedded PowerPC systems do not (do) force structures
15947 and unions that contain bit-fields to be aligned to the base type of the
15948 bit-field.
15949 .Sp
15950 For example, by default a structure containing nothing but 8
15951 \&\f(CW\*(C`unsigned\*(C'\fR bit-fields of length 1 is aligned to a 4\-byte
15952 boundary and has a size of 4 bytes.  By using \fB\-mno\-bit\-align\fR,
15953 the structure is aligned to a 1\-byte boundary and is 1 byte in
15954 size.
15955 .IP "\fB\-mno\-strict\-align\fR" 4
15956 .IX Item "-mno-strict-align"
15957 .PD 0
15958 .IP "\fB\-mstrict\-align\fR" 4
15959 .IX Item "-mstrict-align"
15960 .PD
15961 On System V.4 and embedded PowerPC systems do not (do) assume that
15962 unaligned memory references will be handled by the system.
15963 .IP "\fB\-mrelocatable\fR" 4
15964 .IX Item "-mrelocatable"
15965 .PD 0
15966 .IP "\fB\-mno\-relocatable\fR" 4
15967 .IX Item "-mno-relocatable"
15968 .PD
15969 Generate code that allows (does not allow) a static executable to be
15970 relocated to a different address at run time.  A simple embedded
15971 PowerPC system loader should relocate the entire contents of
15972 \&\f(CW\*(C`.got2\*(C'\fR and 4\-byte locations listed in the \f(CW\*(C`.fixup\*(C'\fR section,
15973 a table of 32\-bit addresses generated by this option.  For this to
15974 work, all objects linked together must be compiled with
15975 \&\fB\-mrelocatable\fR or \fB\-mrelocatable\-lib\fR.
15976 \&\fB\-mrelocatable\fR code aligns the stack to an 8\-byte boundary.
15977 .IP "\fB\-mrelocatable\-lib\fR" 4
15978 .IX Item "-mrelocatable-lib"
15979 .PD 0
15980 .IP "\fB\-mno\-relocatable\-lib\fR" 4
15981 .IX Item "-mno-relocatable-lib"
15982 .PD
15983 Like \fB\-mrelocatable\fR, \fB\-mrelocatable\-lib\fR generates a
15984 \&\f(CW\*(C`.fixup\*(C'\fR section to allow static executables to be relocated at
15985 run time, but \fB\-mrelocatable\-lib\fR does not use the smaller stack
15986 alignment of \fB\-mrelocatable\fR.  Objects compiled with
15987 \&\fB\-mrelocatable\-lib\fR may be linked with objects compiled with
15988 any combination of the \fB\-mrelocatable\fR options.
15989 .IP "\fB\-mno\-toc\fR" 4
15990 .IX Item "-mno-toc"
15991 .PD 0
15992 .IP "\fB\-mtoc\fR" 4
15993 .IX Item "-mtoc"
15994 .PD
15995 On System V.4 and embedded PowerPC systems do not (do) assume that
15996 register 2 contains a pointer to a global area pointing to the addresses
15997 used in the program.
15998 .IP "\fB\-mlittle\fR" 4
15999 .IX Item "-mlittle"
16000 .PD 0
16001 .IP "\fB\-mlittle\-endian\fR" 4
16002 .IX Item "-mlittle-endian"
16003 .PD
16004 On System V.4 and embedded PowerPC systems compile code for the
16005 processor in little-endian mode.  The \fB\-mlittle\-endian\fR option is
16006 the same as \fB\-mlittle\fR.
16007 .IP "\fB\-mbig\fR" 4
16008 .IX Item "-mbig"
16009 .PD 0
16010 .IP "\fB\-mbig\-endian\fR" 4
16011 .IX Item "-mbig-endian"
16012 .PD
16013 On System V.4 and embedded PowerPC systems compile code for the
16014 processor in big-endian mode.  The \fB\-mbig\-endian\fR option is
16015 the same as \fB\-mbig\fR.
16016 .IP "\fB\-mdynamic\-no\-pic\fR" 4
16017 .IX Item "-mdynamic-no-pic"
16018 On Darwin and Mac \s-1OS\s0 X systems, compile code so that it is not
16019 relocatable, but that its external references are relocatable.  The
16020 resulting code is suitable for applications, but not shared
16021 libraries.
16022 .IP "\fB\-msingle\-pic\-base\fR" 4
16023 .IX Item "-msingle-pic-base"
16024 Treat the register used for \s-1PIC\s0 addressing as read-only, rather than
16025 loading it in the prologue for each function.  The runtime system is
16026 responsible for initializing this register with an appropriate value
16027 before execution begins.
16028 .IP "\fB\-mprioritize\-restricted\-insns=\fR\fIpriority\fR" 4
16029 .IX Item "-mprioritize-restricted-insns=priority"
16030 This option controls the priority that is assigned to
16031 dispatch-slot restricted instructions during the second scheduling
16032 pass.  The argument \fIpriority\fR takes the value \fI0/1/2\fR to assign
16033 \&\fIno/highest/second\-highest\fR priority to dispatch slot restricted
16034 instructions.
16035 .IP "\fB\-msched\-costly\-dep=\fR\fIdependence_type\fR" 4
16036 .IX Item "-msched-costly-dep=dependence_type"
16037 This option controls which dependences are considered costly
16038 by the target during instruction scheduling.  The argument
16039 \&\fIdependence_type\fR takes one of the following values:
16040 \&\fIno\fR: no dependence is costly,
16041 \&\fIall\fR: all dependences are costly,
16042 \&\fItrue_store_to_load\fR: a true dependence from store to load is costly,
16043 \&\fIstore_to_load\fR: any dependence from store to load is costly,
16044 \&\fInumber\fR: any dependence for which latency >= \fInumber\fR is costly.
16045 .IP "\fB\-minsert\-sched\-nops=\fR\fIscheme\fR" 4
16046 .IX Item "-minsert-sched-nops=scheme"
16047 This option controls which nop insertion scheme will be used during
16048 the second scheduling pass.  The argument \fIscheme\fR takes one of the
16049 following values:
16050 \&\fIno\fR: Don't insert nops.
16051 \&\fIpad\fR: Pad with nops any dispatch group that has vacant issue slots,
16052 according to the scheduler's grouping.
16053 \&\fIregroup_exact\fR: Insert nops to force costly dependent insns into
16054 separate groups.  Insert exactly as many nops as needed to force an insn
16055 to a new group, according to the estimated processor grouping.
16056 \&\fInumber\fR: Insert nops to force costly dependent insns into
16057 separate groups.  Insert \fInumber\fR nops to force an insn to a new group.
16058 .IP "\fB\-mcall\-sysv\fR" 4
16059 .IX Item "-mcall-sysv"
16060 On System V.4 and embedded PowerPC systems compile code using calling
16061 conventions that adheres to the March 1995 draft of the System V
16062 Application Binary Interface, PowerPC processor supplement.  This is the
16063 default unless you configured \s-1GCC\s0 using \fBpowerpc\-*\-eabiaix\fR.
16064 .IP "\fB\-mcall\-sysv\-eabi\fR" 4
16065 .IX Item "-mcall-sysv-eabi"
16066 .PD 0
16067 .IP "\fB\-mcall\-eabi\fR" 4
16068 .IX Item "-mcall-eabi"
16069 .PD
16070 Specify both \fB\-mcall\-sysv\fR and \fB\-meabi\fR options.
16071 .IP "\fB\-mcall\-sysv\-noeabi\fR" 4
16072 .IX Item "-mcall-sysv-noeabi"
16073 Specify both \fB\-mcall\-sysv\fR and \fB\-mno\-eabi\fR options.
16074 .IP "\fB\-mcall\-aixdesc\fR" 4
16075 .IX Item "-mcall-aixdesc"
16076 On System V.4 and embedded PowerPC systems compile code for the \s-1AIX\s0
16077 operating system.
16078 .IP "\fB\-mcall\-linux\fR" 4
16079 .IX Item "-mcall-linux"
16080 On System V.4 and embedded PowerPC systems compile code for the
16081 Linux-based \s-1GNU\s0 system.
16082 .IP "\fB\-mcall\-freebsd\fR" 4
16083 .IX Item "-mcall-freebsd"
16084 On System V.4 and embedded PowerPC systems compile code for the
16085 FreeBSD operating system.
16086 .IP "\fB\-mcall\-netbsd\fR" 4
16087 .IX Item "-mcall-netbsd"
16088 On System V.4 and embedded PowerPC systems compile code for the
16089 NetBSD operating system.
16090 .IP "\fB\-mcall\-openbsd\fR" 4
16091 .IX Item "-mcall-openbsd"
16092 On System V.4 and embedded PowerPC systems compile code for the
16093 OpenBSD operating system.
16094 .IP "\fB\-maix\-struct\-return\fR" 4
16095 .IX Item "-maix-struct-return"
16096 Return all structures in memory (as specified by the \s-1AIX\s0 \s-1ABI\s0).
16097 .IP "\fB\-msvr4\-struct\-return\fR" 4
16098 .IX Item "-msvr4-struct-return"
16099 Return structures smaller than 8 bytes in registers (as specified by the
16100 \&\s-1SVR4\s0 \s-1ABI\s0).
16101 .IP "\fB\-mabi=\fR\fIabi-type\fR" 4
16102 .IX Item "-mabi=abi-type"
16103 Extend the current \s-1ABI\s0 with a particular extension, or remove such extension.
16104 Valid values are \fIaltivec\fR, \fIno-altivec\fR, \fIspe\fR,
16105 \&\fIno-spe\fR, \fIibmlongdouble\fR, \fIieeelongdouble\fR.
16106 .IP "\fB\-mabi=spe\fR" 4
16107 .IX Item "-mabi=spe"
16108 Extend the current \s-1ABI\s0 with \s-1SPE\s0 \s-1ABI\s0 extensions.  This does not change
16109 the default \s-1ABI\s0, instead it adds the \s-1SPE\s0 \s-1ABI\s0 extensions to the current
16110 \&\s-1ABI\s0.
16111 .IP "\fB\-mabi=no\-spe\fR" 4
16112 .IX Item "-mabi=no-spe"
16113 Disable Booke \s-1SPE\s0 \s-1ABI\s0 extensions for the current \s-1ABI\s0.
16114 .IP "\fB\-mabi=ibmlongdouble\fR" 4
16115 .IX Item "-mabi=ibmlongdouble"
16116 Change the current \s-1ABI\s0 to use \s-1IBM\s0 extended-precision long double.
16117 This is a PowerPC 32\-bit \s-1SYSV\s0 \s-1ABI\s0 option.
16118 .IP "\fB\-mabi=ieeelongdouble\fR" 4
16119 .IX Item "-mabi=ieeelongdouble"
16120 Change the current \s-1ABI\s0 to use \s-1IEEE\s0 extended-precision long double.
16121 This is a PowerPC 32\-bit Linux \s-1ABI\s0 option.
16122 .IP "\fB\-mprototype\fR" 4
16123 .IX Item "-mprototype"
16124 .PD 0
16125 .IP "\fB\-mno\-prototype\fR" 4
16126 .IX Item "-mno-prototype"
16127 .PD
16128 On System V.4 and embedded PowerPC systems assume that all calls to
16129 variable argument functions are properly prototyped.  Otherwise, the
16130 compiler must insert an instruction before every non prototyped call to
16131 set or clear bit 6 of the condition code register (\fI\s-1CR\s0\fR) to
16132 indicate whether floating-point values were passed in the floating-point
16133 registers in case the function takes variable arguments.  With
16134 \&\fB\-mprototype\fR, only calls to prototyped variable argument functions
16135 will set or clear the bit.
16136 .IP "\fB\-msim\fR" 4
16137 .IX Item "-msim"
16138 On embedded PowerPC systems, assume that the startup module is called
16139 \&\fIsim\-crt0.o\fR and that the standard C libraries are \fIlibsim.a\fR and
16140 \&\fIlibc.a\fR.  This is the default for \fBpowerpc\-*\-eabisim\fR
16141 configurations.
16142 .IP "\fB\-mmvme\fR" 4
16143 .IX Item "-mmvme"
16144 On embedded PowerPC systems, assume that the startup module is called
16145 \&\fIcrt0.o\fR and the standard C libraries are \fIlibmvme.a\fR and
16146 \&\fIlibc.a\fR.
16147 .IP "\fB\-mads\fR" 4
16148 .IX Item "-mads"
16149 On embedded PowerPC systems, assume that the startup module is called
16150 \&\fIcrt0.o\fR and the standard C libraries are \fIlibads.a\fR and
16151 \&\fIlibc.a\fR.
16152 .IP "\fB\-myellowknife\fR" 4
16153 .IX Item "-myellowknife"
16154 On embedded PowerPC systems, assume that the startup module is called
16155 \&\fIcrt0.o\fR and the standard C libraries are \fIlibyk.a\fR and
16156 \&\fIlibc.a\fR.
16157 .IP "\fB\-mvxworks\fR" 4
16158 .IX Item "-mvxworks"
16159 On System V.4 and embedded PowerPC systems, specify that you are
16160 compiling for a VxWorks system.
16161 .IP "\fB\-memb\fR" 4
16162 .IX Item "-memb"
16163 On embedded PowerPC systems, set the \fI\s-1PPC_EMB\s0\fR bit in the \s-1ELF\s0 flags
16164 header to indicate that \fBeabi\fR extended relocations are used.
16165 .IP "\fB\-meabi\fR" 4
16166 .IX Item "-meabi"
16167 .PD 0
16168 .IP "\fB\-mno\-eabi\fR" 4
16169 .IX Item "-mno-eabi"
16170 .PD
16171 On System V.4 and embedded PowerPC systems do (do not) adhere to the
16172 Embedded Applications Binary Interface (eabi) which is a set of
16173 modifications to the System V.4 specifications.  Selecting \fB\-meabi\fR
16174 means that the stack is aligned to an 8\-byte boundary, a function
16175 \&\f(CW\*(C`_\|_eabi\*(C'\fR is called to from \f(CW\*(C`main\*(C'\fR to set up the eabi
16176 environment, and the \fB\-msdata\fR option can use both \f(CW\*(C`r2\*(C'\fR and
16177 \&\f(CW\*(C`r13\*(C'\fR to point to two separate small data areas.  Selecting
16178 \&\fB\-mno\-eabi\fR means that the stack is aligned to a 16\-byte boundary,
16179 do not call an initialization function from \f(CW\*(C`main\*(C'\fR, and the
16180 \&\fB\-msdata\fR option will only use \f(CW\*(C`r13\*(C'\fR to point to a single
16181 small data area.  The \fB\-meabi\fR option is on by default if you
16182 configured \s-1GCC\s0 using one of the \fBpowerpc*\-*\-eabi*\fR options.
16183 .IP "\fB\-msdata=eabi\fR" 4
16184 .IX Item "-msdata=eabi"
16185 On System V.4 and embedded PowerPC systems, put small initialized
16186 \&\f(CW\*(C`const\*(C'\fR global and static data in the \fB.sdata2\fR section, which
16187 is pointed to by register \f(CW\*(C`r2\*(C'\fR.  Put small initialized
16188 non\-\f(CW\*(C`const\*(C'\fR global and static data in the \fB.sdata\fR section,
16189 which is pointed to by register \f(CW\*(C`r13\*(C'\fR.  Put small uninitialized
16190 global and static data in the \fB.sbss\fR section, which is adjacent to
16191 the \fB.sdata\fR section.  The \fB\-msdata=eabi\fR option is
16192 incompatible with the \fB\-mrelocatable\fR option.  The
16193 \&\fB\-msdata=eabi\fR option also sets the \fB\-memb\fR option.
16194 .IP "\fB\-msdata=sysv\fR" 4
16195 .IX Item "-msdata=sysv"
16196 On System V.4 and embedded PowerPC systems, put small global and static
16197 data in the \fB.sdata\fR section, which is pointed to by register
16198 \&\f(CW\*(C`r13\*(C'\fR.  Put small uninitialized global and static data in the
16199 \&\fB.sbss\fR section, which is adjacent to the \fB.sdata\fR section.
16200 The \fB\-msdata=sysv\fR option is incompatible with the
16201 \&\fB\-mrelocatable\fR option.
16202 .IP "\fB\-msdata=default\fR" 4
16203 .IX Item "-msdata=default"
16204 .PD 0
16205 .IP "\fB\-msdata\fR" 4
16206 .IX Item "-msdata"
16207 .PD
16208 On System V.4 and embedded PowerPC systems, if \fB\-meabi\fR is used,
16209 compile code the same as \fB\-msdata=eabi\fR, otherwise compile code the
16210 same as \fB\-msdata=sysv\fR.
16211 .IP "\fB\-msdata=data\fR" 4
16212 .IX Item "-msdata=data"
16213 On System V.4 and embedded PowerPC systems, put small global
16214 data in the \fB.sdata\fR section.  Put small uninitialized global
16215 data in the \fB.sbss\fR section.  Do not use register \f(CW\*(C`r13\*(C'\fR
16216 to address small data however.  This is the default behavior unless
16217 other \fB\-msdata\fR options are used.
16218 .IP "\fB\-msdata=none\fR" 4
16219 .IX Item "-msdata=none"
16220 .PD 0
16221 .IP "\fB\-mno\-sdata\fR" 4
16222 .IX Item "-mno-sdata"
16223 .PD
16224 On embedded PowerPC systems, put all initialized global and static data
16225 in the \fB.data\fR section, and all uninitialized data in the
16226 \&\fB.bss\fR section.
16227 .IP "\fB\-mblock\-move\-inline\-limit=\fR\fInum\fR" 4
16228 .IX Item "-mblock-move-inline-limit=num"
16229 Inline all block moves (such as calls to \f(CW\*(C`memcpy\*(C'\fR or structure
16230 copies) less than or equal to \fInum\fR bytes.  The minimum value for
16231 \&\fInum\fR is 32 bytes on 32\-bit targets and 64 bytes on 64\-bit
16232 targets.  The default value is target-specific.
16233 .IP "\fB\-G\fR \fInum\fR" 4
16234 .IX Item "-G num"
16235 On embedded PowerPC systems, put global and static items less than or
16236 equal to \fInum\fR bytes into the small data or bss sections instead of
16237 the normal data or bss section.  By default, \fInum\fR is 8.  The
16238 \&\fB\-G\fR \fInum\fR switch is also passed to the linker.
16239 All modules should be compiled with the same \fB\-G\fR \fInum\fR value.
16240 .IP "\fB\-mregnames\fR" 4
16241 .IX Item "-mregnames"
16242 .PD 0
16243 .IP "\fB\-mno\-regnames\fR" 4
16244 .IX Item "-mno-regnames"
16245 .PD
16246 On System V.4 and embedded PowerPC systems do (do not) emit register
16247 names in the assembly language output using symbolic forms.
16248 .IP "\fB\-mlongcall\fR" 4
16249 .IX Item "-mlongcall"
16250 .PD 0
16251 .IP "\fB\-mno\-longcall\fR" 4
16252 .IX Item "-mno-longcall"
16253 .PD
16254 By default assume that all calls are far away so that a longer more
16255 expensive calling sequence is required.  This is required for calls
16256 further than 32 megabytes (33,554,432 bytes) from the current location.
16257 A short call will be generated if the compiler knows
16258 the call cannot be that far away.  This setting can be overridden by
16259 the \f(CW\*(C`shortcall\*(C'\fR function attribute, or by \f(CW\*(C`#pragma
16260 longcall(0)\*(C'\fR.
16261 .Sp
16262 Some linkers are capable of detecting out-of-range calls and generating
16263 glue code on the fly.  On these systems, long calls are unnecessary and
16264 generate slower code.  As of this writing, the \s-1AIX\s0 linker can do this,
16265 as can the \s-1GNU\s0 linker for PowerPC/64.  It is planned to add this feature
16266 to the \s-1GNU\s0 linker for 32\-bit PowerPC systems as well.
16267 .Sp
16268 On Darwin/PPC systems, \f(CW\*(C`#pragma longcall\*(C'\fR will generate \*(L"jbsr
16269 callee, L42\*(R", plus a \*(L"branch island\*(R" (glue code).  The two target
16270 addresses represent the callee and the \*(L"branch island\*(R".  The
16271 Darwin/PPC linker will prefer the first address and generate a \*(L"bl
16272 callee\*(R" if the \s-1PPC\s0 \*(L"bl\*(R" instruction will reach the callee directly;
16273 otherwise, the linker will generate \*(L"bl L42\*(R" to call the \*(L"branch
16274 island\*(R".  The \*(L"branch island\*(R" is appended to the body of the
16275 calling function; it computes the full 32\-bit address of the callee
16276 and jumps to it.
16277 .Sp
16278 On Mach-O (Darwin) systems, this option directs the compiler emit to
16279 the glue for every direct call, and the Darwin linker decides whether
16280 to use or discard it.
16281 .Sp
16282 In the future, we may cause \s-1GCC\s0 to ignore all longcall specifications
16283 when the linker is known to generate glue.
16284 .IP "\fB\-mtls\-markers\fR" 4
16285 .IX Item "-mtls-markers"
16286 .PD 0
16287 .IP "\fB\-mno\-tls\-markers\fR" 4
16288 .IX Item "-mno-tls-markers"
16289 .PD
16290 Mark (do not mark) calls to \f(CW\*(C`_\|_tls_get_addr\*(C'\fR with a relocation
16291 specifying the function argument.  The relocation allows ld to
16292 reliably associate function call with argument setup instructions for
16293 \&\s-1TLS\s0 optimization, which in turn allows gcc to better schedule the
16294 sequence.
16295 .IP "\fB\-pthread\fR" 4
16296 .IX Item "-pthread"
16297 Adds support for multithreading with the \fIpthreads\fR library.
16298 This option sets flags for both the preprocessor and linker.
16299 .IP "\fB\-mrecip\fR" 4
16300 .IX Item "-mrecip"
16301 .PD 0
16302 .IP "\fB\-mno\-recip\fR" 4
16303 .IX Item "-mno-recip"
16304 .PD
16305 This option will enable \s-1GCC\s0 to use the reciprocal estimate and
16306 reciprocal square root estimate instructions with additional
16307 Newton-Raphson steps to increase precision instead of doing a divide or
16308 square root and divide for floating-point arguments.  You should use
16309 the \fB\-ffast\-math\fR option when using \fB\-mrecip\fR (or at
16310 least \fB\-funsafe\-math\-optimizations\fR,
16311 \&\fB\-finite\-math\-only\fR, \fB\-freciprocal\-math\fR and
16312 \&\fB\-fno\-trapping\-math\fR).  Note that while the throughput of the
16313 sequence is generally higher than the throughput of the non-reciprocal
16314 instruction, the precision of the sequence can be decreased by up to 2
16315 ulp (i.e. the inverse of 1.0 equals 0.99999994) for reciprocal square
16316 roots.
16317 .IP "\fB\-mrecip=\fR\fIopt\fR" 4
16318 .IX Item "-mrecip=opt"
16319 This option allows to control which reciprocal estimate instructions
16320 may be used.  \fIopt\fR is a comma separated list of options, which may
16321 be preceded by a \f(CW\*(C`!\*(C'\fR to invert the option:
16322 \&\f(CW\*(C`all\*(C'\fR: enable all estimate instructions,
16323 \&\f(CW\*(C`default\*(C'\fR: enable the default instructions, equivalent to \fB\-mrecip\fR,
16324 \&\f(CW\*(C`none\*(C'\fR: disable all estimate instructions, equivalent to \fB\-mno\-recip\fR;
16325 \&\f(CW\*(C`div\*(C'\fR: enable the reciprocal approximation instructions for both single and double precision;
16326 \&\f(CW\*(C`divf\*(C'\fR: enable the single-precision reciprocal approximation instructions;
16327 \&\f(CW\*(C`divd\*(C'\fR: enable the double-precision reciprocal approximation instructions;
16328 \&\f(CW\*(C`rsqrt\*(C'\fR: enable the reciprocal square root approximation instructions for both single and double precision;
16329 \&\f(CW\*(C`rsqrtf\*(C'\fR: enable the single-precision reciprocal square root approximation instructions;
16330 \&\f(CW\*(C`rsqrtd\*(C'\fR: enable the double-precision reciprocal square root approximation instructions;
16331 .Sp
16332 So for example, \fB\-mrecip=all,!rsqrtd\fR would enable the
16333 all of the reciprocal estimate instructions, except for the
16334 \&\f(CW\*(C`FRSQRTE\*(C'\fR, \f(CW\*(C`XSRSQRTEDP\*(C'\fR, and \f(CW\*(C`XVRSQRTEDP\*(C'\fR instructions
16335 which handle the double-precision reciprocal square root calculations.
16336 .IP "\fB\-mrecip\-precision\fR" 4
16337 .IX Item "-mrecip-precision"
16338 .PD 0
16339 .IP "\fB\-mno\-recip\-precision\fR" 4
16340 .IX Item "-mno-recip-precision"
16341 .PD
16342 Assume (do not assume) that the reciprocal estimate instructions
16343 provide higher-precision estimates than is mandated by the PowerPC
16344 \&\s-1ABI\s0.  Selecting \fB\-mcpu=power6\fR or \fB\-mcpu=power7\fR
16345 automatically selects \fB\-mrecip\-precision\fR.  The double-precision 
16346 square root estimate instructions are not generated by
16347 default on low-precision machines, since they do not provide an
16348 estimate that converges after three steps.
16349 .IP "\fB\-mveclibabi=\fR\fItype\fR" 4
16350 .IX Item "-mveclibabi=type"
16351 Specifies the \s-1ABI\s0 type to use for vectorizing intrinsics using an
16352 external library.  The only type supported at present is \f(CW\*(C`mass\*(C'\fR,
16353 which specifies to use \s-1IBM\s0's Mathematical Acceleration Subsystem
16354 (\s-1MASS\s0) libraries for vectorizing intrinsics using external libraries.
16355 \&\s-1GCC\s0 will currently emit calls to \f(CW\*(C`acosd2\*(C'\fR, \f(CW\*(C`acosf4\*(C'\fR,
16356 \&\f(CW\*(C`acoshd2\*(C'\fR, \f(CW\*(C`acoshf4\*(C'\fR, \f(CW\*(C`asind2\*(C'\fR, \f(CW\*(C`asinf4\*(C'\fR,
16357 \&\f(CW\*(C`asinhd2\*(C'\fR, \f(CW\*(C`asinhf4\*(C'\fR, \f(CW\*(C`atan2d2\*(C'\fR, \f(CW\*(C`atan2f4\*(C'\fR,
16358 \&\f(CW\*(C`atand2\*(C'\fR, \f(CW\*(C`atanf4\*(C'\fR, \f(CW\*(C`atanhd2\*(C'\fR, \f(CW\*(C`atanhf4\*(C'\fR,
16359 \&\f(CW\*(C`cbrtd2\*(C'\fR, \f(CW\*(C`cbrtf4\*(C'\fR, \f(CW\*(C`cosd2\*(C'\fR, \f(CW\*(C`cosf4\*(C'\fR,
16360 \&\f(CW\*(C`coshd2\*(C'\fR, \f(CW\*(C`coshf4\*(C'\fR, \f(CW\*(C`erfcd2\*(C'\fR, \f(CW\*(C`erfcf4\*(C'\fR,
16361 \&\f(CW\*(C`erfd2\*(C'\fR, \f(CW\*(C`erff4\*(C'\fR, \f(CW\*(C`exp2d2\*(C'\fR, \f(CW\*(C`exp2f4\*(C'\fR,
16362 \&\f(CW\*(C`expd2\*(C'\fR, \f(CW\*(C`expf4\*(C'\fR, \f(CW\*(C`expm1d2\*(C'\fR, \f(CW\*(C`expm1f4\*(C'\fR,
16363 \&\f(CW\*(C`hypotd2\*(C'\fR, \f(CW\*(C`hypotf4\*(C'\fR, \f(CW\*(C`lgammad2\*(C'\fR, \f(CW\*(C`lgammaf4\*(C'\fR,
16364 \&\f(CW\*(C`log10d2\*(C'\fR, \f(CW\*(C`log10f4\*(C'\fR, \f(CW\*(C`log1pd2\*(C'\fR, \f(CW\*(C`log1pf4\*(C'\fR,
16365 \&\f(CW\*(C`log2d2\*(C'\fR, \f(CW\*(C`log2f4\*(C'\fR, \f(CW\*(C`logd2\*(C'\fR, \f(CW\*(C`logf4\*(C'\fR,
16366 \&\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,
16367 \&\f(CW\*(C`sinhf4\*(C'\fR, \f(CW\*(C`sqrtd2\*(C'\fR, \f(CW\*(C`sqrtf4\*(C'\fR, \f(CW\*(C`tand2\*(C'\fR,
16368 \&\f(CW\*(C`tanf4\*(C'\fR, \f(CW\*(C`tanhd2\*(C'\fR, and \f(CW\*(C`tanhf4\*(C'\fR when generating code
16369 for power7.  Both \fB\-ftree\-vectorize\fR and
16370 \&\fB\-funsafe\-math\-optimizations\fR have to be enabled.  The \s-1MASS\s0
16371 libraries will have to be specified at link time.
16372 .IP "\fB\-mfriz\fR" 4
16373 .IX Item "-mfriz"
16374 .PD 0
16375 .IP "\fB\-mno\-friz\fR" 4
16376 .IX Item "-mno-friz"
16377 .PD
16378 Generate (do not generate) the \f(CW\*(C`friz\*(C'\fR instruction when the
16379 \&\fB\-funsafe\-math\-optimizations\fR option is used to optimize
16380 rounding of floating-point values to 64\-bit integer and back to floating
16381 point.  The \f(CW\*(C`friz\*(C'\fR instruction does not return the same value if
16382 the floating-point number is too large to fit in an integer.
16383 .IP "\fB\-mpointers\-to\-nested\-functions\fR" 4
16384 .IX Item "-mpointers-to-nested-functions"
16385 .PD 0
16386 .IP "\fB\-mno\-pointers\-to\-nested\-functions\fR" 4
16387 .IX Item "-mno-pointers-to-nested-functions"
16388 .PD
16389 Generate (do not generate) code to load up the static chain register
16390 (\fIr11\fR) when calling through a pointer on \s-1AIX\s0 and 64\-bit Linux
16391 systems where a function pointer points to a 3\-word descriptor giving
16392 the function address, \s-1TOC\s0 value to be loaded in register \fIr2\fR, and
16393 static chain value to be loaded in register \fIr11\fR.  The
16394 \&\fB\-mpointers\-to\-nested\-functions\fR is on by default.  You will
16395 not be able to call through pointers to nested functions or pointers
16396 to functions compiled in other languages that use the static chain if
16397 you use the \fB\-mno\-pointers\-to\-nested\-functions\fR.
16398 .IP "\fB\-msave\-toc\-indirect\fR" 4
16399 .IX Item "-msave-toc-indirect"
16400 .PD 0
16401 .IP "\fB\-mno\-save\-toc\-indirect\fR" 4
16402 .IX Item "-mno-save-toc-indirect"
16403 .PD
16404 Generate (do not generate) code to save the \s-1TOC\s0 value in the reserved
16405 stack location in the function prologue if the function calls through
16406 a pointer on \s-1AIX\s0 and 64\-bit Linux systems.  If the \s-1TOC\s0 value is not
16407 saved in the prologue, it is saved just before the call through the
16408 pointer.  The \fB\-mno\-save\-toc\-indirect\fR option is the default.
16409 .PP
16410 \fI\s-1RX\s0 Options\fR
16411 .IX Subsection "RX Options"
16412 .PP
16413 These command-line options are defined for \s-1RX\s0 targets:
16414 .IP "\fB\-m64bit\-doubles\fR" 4
16415 .IX Item "-m64bit-doubles"
16416 .PD 0
16417 .IP "\fB\-m32bit\-doubles\fR" 4
16418 .IX Item "-m32bit-doubles"
16419 .PD
16420 Make the \f(CW\*(C`double\*(C'\fR data type be 64 bits (\fB\-m64bit\-doubles\fR)
16421 or 32 bits (\fB\-m32bit\-doubles\fR) in size.  The default is
16422 \&\fB\-m32bit\-doubles\fR.  \fINote\fR \s-1RX\s0 floating-point hardware only
16423 works on 32\-bit values, which is why the default is
16424 \&\fB\-m32bit\-doubles\fR.
16425 .IP "\fB\-fpu\fR" 4
16426 .IX Item "-fpu"
16427 .PD 0
16428 .IP "\fB\-nofpu\fR" 4
16429 .IX Item "-nofpu"
16430 .PD
16431 Enables (\fB\-fpu\fR) or disables (\fB\-nofpu\fR) the use of \s-1RX\s0
16432 floating-point hardware.  The default is enabled for the \fI\s-1RX600\s0\fR
16433 series and disabled for the \fI\s-1RX200\s0\fR series.
16434 .Sp
16435 Floating-point instructions will only be generated for 32\-bit floating-point 
16436 values however, so if the \fB\-m64bit\-doubles\fR option is in
16437 use then the \s-1FPU\s0 hardware will not be used for doubles.
16438 .Sp
16439 \&\fINote\fR If the \fB\-fpu\fR option is enabled then
16440 \&\fB\-funsafe\-math\-optimizations\fR is also enabled automatically.
16441 This is because the \s-1RX\s0 \s-1FPU\s0 instructions are themselves unsafe.
16442 .IP "\fB\-mcpu=\fR\fIname\fR" 4
16443 .IX Item "-mcpu=name"
16444 Selects the type of \s-1RX\s0 \s-1CPU\s0 to be targeted.  Currently three types are
16445 supported, the generic \fI\s-1RX600\s0\fR and \fI\s-1RX200\s0\fR series hardware and
16446 the specific \fI\s-1RX610\s0\fR \s-1CPU\s0.  The default is \fI\s-1RX600\s0\fR.
16447 .Sp
16448 The only difference between \fI\s-1RX600\s0\fR and \fI\s-1RX610\s0\fR is that the
16449 \&\fI\s-1RX610\s0\fR does not support the \f(CW\*(C`MVTIPL\*(C'\fR instruction.
16450 .Sp
16451 The \fI\s-1RX200\s0\fR series does not have a hardware floating-point unit
16452 and so \fB\-nofpu\fR is enabled by default when this type is
16453 selected.
16454 .IP "\fB\-mbig\-endian\-data\fR" 4
16455 .IX Item "-mbig-endian-data"
16456 .PD 0
16457 .IP "\fB\-mlittle\-endian\-data\fR" 4
16458 .IX Item "-mlittle-endian-data"
16459 .PD
16460 Store data (but not code) in the big-endian format.  The default is
16461 \&\fB\-mlittle\-endian\-data\fR, i.e. to store data in the little-endian
16462 format.
16463 .IP "\fB\-msmall\-data\-limit=\fR\fIN\fR" 4
16464 .IX Item "-msmall-data-limit=N"
16465 Specifies the maximum size in bytes of global and static variables
16466 which can be placed into the small data area.  Using the small data
16467 area can lead to smaller and faster code, but the size of area is
16468 limited and it is up to the programmer to ensure that the area does
16469 not overflow.  Also when the small data area is used one of the \s-1RX\s0's
16470 registers (usually \f(CW\*(C`r13\*(C'\fR) is reserved for use pointing to this
16471 area, so it is no longer available for use by the compiler.  This
16472 could result in slower and/or larger code if variables which once
16473 could have been held in the reserved register are now pushed onto the
16474 stack.
16475 .Sp
16476 Note, common variables (variables that have not been initialized) and
16477 constants are not placed into the small data area as they are assigned
16478 to other sections in the output executable.
16479 .Sp
16480 The default value is zero, which disables this feature.  Note, this
16481 feature is not enabled by default with higher optimization levels
16482 (\fB\-O2\fR etc) because of the potentially detrimental effects of
16483 reserving a register.  It is up to the programmer to experiment and
16484 discover whether this feature is of benefit to their program.  See the
16485 description of the \fB\-mpid\fR option for a description of how the
16486 actual register to hold the small data area pointer is chosen.
16487 .IP "\fB\-msim\fR" 4
16488 .IX Item "-msim"
16489 .PD 0
16490 .IP "\fB\-mno\-sim\fR" 4
16491 .IX Item "-mno-sim"
16492 .PD
16493 Use the simulator runtime.  The default is to use the libgloss board
16494 specific runtime.
16495 .IP "\fB\-mas100\-syntax\fR" 4
16496 .IX Item "-mas100-syntax"
16497 .PD 0
16498 .IP "\fB\-mno\-as100\-syntax\fR" 4
16499 .IX Item "-mno-as100-syntax"
16500 .PD
16501 When generating assembler output use a syntax that is compatible with
16502 Renesas's \s-1AS100\s0 assembler.  This syntax can also be handled by the \s-1GAS\s0
16503 assembler but it has some restrictions so generating it is not the
16504 default option.
16505 .IP "\fB\-mmax\-constant\-size=\fR\fIN\fR" 4
16506 .IX Item "-mmax-constant-size=N"
16507 Specifies the maximum size, in bytes, of a constant that can be used as
16508 an operand in a \s-1RX\s0 instruction.  Although the \s-1RX\s0 instruction set does
16509 allow constants of up to 4 bytes in length to be used in instructions,
16510 a longer value equates to a longer instruction.  Thus in some
16511 circumstances it can be beneficial to restrict the size of constants
16512 that are used in instructions.  Constants that are too big are instead
16513 placed into a constant pool and referenced via register indirection.
16514 .Sp
16515 The value \fIN\fR can be between 0 and 4.  A value of 0 (the default)
16516 or 4 means that constants of any size are allowed.
16517 .IP "\fB\-mrelax\fR" 4
16518 .IX Item "-mrelax"
16519 Enable linker relaxation.  Linker relaxation is a process whereby the
16520 linker will attempt to reduce the size of a program by finding shorter
16521 versions of various instructions.  Disabled by default.
16522 .IP "\fB\-mint\-register=\fR\fIN\fR" 4
16523 .IX Item "-mint-register=N"
16524 Specify the number of registers to reserve for fast interrupt handler
16525 functions.  The value \fIN\fR can be between 0 and 4.  A value of 1
16526 means that register \f(CW\*(C`r13\*(C'\fR will be reserved for the exclusive use
16527 of fast interrupt handlers.  A value of 2 reserves \f(CW\*(C`r13\*(C'\fR and
16528 \&\f(CW\*(C`r12\*(C'\fR.  A value of 3 reserves \f(CW\*(C`r13\*(C'\fR, \f(CW\*(C`r12\*(C'\fR and
16529 \&\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.
16530 A value of 0, the default, does not reserve any registers.
16531 .IP "\fB\-msave\-acc\-in\-interrupts\fR" 4
16532 .IX Item "-msave-acc-in-interrupts"
16533 Specifies that interrupt handler functions should preserve the
16534 accumulator register.  This is only necessary if normal code might use
16535 the accumulator register, for example because it performs 64\-bit
16536 multiplications.  The default is to ignore the accumulator as this
16537 makes the interrupt handlers faster.
16538 .IP "\fB\-mpid\fR" 4
16539 .IX Item "-mpid"
16540 .PD 0
16541 .IP "\fB\-mno\-pid\fR" 4
16542 .IX Item "-mno-pid"
16543 .PD
16544 Enables the generation of position independent data.  When enabled any
16545 access to constant data will done via an offset from a base address
16546 held in a register.  This allows the location of constant data to be
16547 determined at run time without requiring the executable to be
16548 relocated, which is a benefit to embedded applications with tight
16549 memory constraints.  Data that can be modified is not affected by this
16550 option.
16551 .Sp
16552 Note, using this feature reserves a register, usually \f(CW\*(C`r13\*(C'\fR, for
16553 the constant data base address.  This can result in slower and/or
16554 larger code, especially in complicated functions.
16555 .Sp
16556 The actual register chosen to hold the constant data base address
16557 depends upon whether the \fB\-msmall\-data\-limit\fR and/or the
16558 \&\fB\-mint\-register\fR command-line options are enabled.  Starting
16559 with register \f(CW\*(C`r13\*(C'\fR and proceeding downwards, registers are
16560 allocated first to satisfy the requirements of \fB\-mint\-register\fR,
16561 then \fB\-mpid\fR and finally \fB\-msmall\-data\-limit\fR.  Thus it
16562 is possible for the small data area register to be \f(CW\*(C`r8\*(C'\fR if both
16563 \&\fB\-mint\-register=4\fR and \fB\-mpid\fR are specified on the
16564 command line.
16565 .Sp
16566 By default this feature is not enabled.  The default can be restored
16567 via the \fB\-mno\-pid\fR command-line option.
16568 .PP
16569 \&\fINote:\fR The generic \s-1GCC\s0 command-line option \fB\-ffixed\-\fR\fIreg\fR
16570 has special significance to the \s-1RX\s0 port when used with the
16571 \&\f(CW\*(C`interrupt\*(C'\fR function attribute.  This attribute indicates a
16572 function intended to process fast interrupts.  \s-1GCC\s0 will will ensure
16573 that it only uses the registers \f(CW\*(C`r10\*(C'\fR, \f(CW\*(C`r11\*(C'\fR, \f(CW\*(C`r12\*(C'\fR
16574 and/or \f(CW\*(C`r13\*(C'\fR and only provided that the normal use of the
16575 corresponding registers have been restricted via the
16576 \&\fB\-ffixed\-\fR\fIreg\fR or \fB\-mint\-register\fR command-line
16577 options.
16578 .PP
16579 \fIS/390 and zSeries Options\fR
16580 .IX Subsection "S/390 and zSeries Options"
16581 .PP
16582 These are the \fB\-m\fR options defined for the S/390 and zSeries architecture.
16583 .IP "\fB\-mhard\-float\fR" 4
16584 .IX Item "-mhard-float"
16585 .PD 0
16586 .IP "\fB\-msoft\-float\fR" 4
16587 .IX Item "-msoft-float"
16588 .PD
16589 Use (do not use) the hardware floating-point instructions and registers
16590 for floating-point operations.  When \fB\-msoft\-float\fR is specified,
16591 functions in \fIlibgcc.a\fR will be used to perform floating-point
16592 operations.  When \fB\-mhard\-float\fR is specified, the compiler
16593 generates \s-1IEEE\s0 floating-point instructions.  This is the default.
16594 .IP "\fB\-mhard\-dfp\fR" 4
16595 .IX Item "-mhard-dfp"
16596 .PD 0
16597 .IP "\fB\-mno\-hard\-dfp\fR" 4
16598 .IX Item "-mno-hard-dfp"
16599 .PD
16600 Use (do not use) the hardware decimal-floating-point instructions for
16601 decimal-floating-point operations.  When \fB\-mno\-hard\-dfp\fR is
16602 specified, functions in \fIlibgcc.a\fR will be used to perform
16603 decimal-floating-point operations.  When \fB\-mhard\-dfp\fR is
16604 specified, the compiler generates decimal-floating-point hardware
16605 instructions.  This is the default for \fB\-march=z9\-ec\fR or higher.
16606 .IP "\fB\-mlong\-double\-64\fR" 4
16607 .IX Item "-mlong-double-64"
16608 .PD 0
16609 .IP "\fB\-mlong\-double\-128\fR" 4
16610 .IX Item "-mlong-double-128"
16611 .PD
16612 These switches control the size of \f(CW\*(C`long double\*(C'\fR type. A size
16613 of 64 bits makes the \f(CW\*(C`long double\*(C'\fR type equivalent to the \f(CW\*(C`double\*(C'\fR
16614 type. This is the default.
16615 .IP "\fB\-mbackchain\fR" 4
16616 .IX Item "-mbackchain"
16617 .PD 0
16618 .IP "\fB\-mno\-backchain\fR" 4
16619 .IX Item "-mno-backchain"
16620 .PD
16621 Store (do not store) the address of the caller's frame as backchain pointer
16622 into the callee's stack frame.
16623 A backchain may be needed to allow debugging using tools that do not understand
16624 \&\s-1DWARF\-2\s0 call frame information.
16625 When \fB\-mno\-packed\-stack\fR is in effect, the backchain pointer is stored
16626 at the bottom of the stack frame; when \fB\-mpacked\-stack\fR is in effect,
16627 the backchain is placed into the topmost word of the 96/160 byte register
16628 save area.
16629 .Sp
16630 In general, code compiled with \fB\-mbackchain\fR is call-compatible with
16631 code compiled with \fB\-mmo\-backchain\fR; however, use of the backchain
16632 for debugging purposes usually requires that the whole binary is built with
16633 \&\fB\-mbackchain\fR.  Note that the combination of \fB\-mbackchain\fR,
16634 \&\fB\-mpacked\-stack\fR and \fB\-mhard\-float\fR is not supported.  In order
16635 to build a linux kernel use \fB\-msoft\-float\fR.
16636 .Sp
16637 The default is to not maintain the backchain.
16638 .IP "\fB\-mpacked\-stack\fR" 4
16639 .IX Item "-mpacked-stack"
16640 .PD 0
16641 .IP "\fB\-mno\-packed\-stack\fR" 4
16642 .IX Item "-mno-packed-stack"
16643 .PD
16644 Use (do not use) the packed stack layout.  When \fB\-mno\-packed\-stack\fR is
16645 specified, the compiler uses the all fields of the 96/160 byte register save
16646 area only for their default purpose; unused fields still take up stack space.
16647 When \fB\-mpacked\-stack\fR is specified, register save slots are densely
16648 packed at the top of the register save area; unused space is reused for other
16649 purposes, allowing for more efficient use of the available stack space.
16650 However, when \fB\-mbackchain\fR is also in effect, the topmost word of
16651 the save area is always used to store the backchain, and the return address
16652 register is always saved two words below the backchain.
16653 .Sp
16654 As long as the stack frame backchain is not used, code generated with
16655 \&\fB\-mpacked\-stack\fR is call-compatible with code generated with
16656 \&\fB\-mno\-packed\-stack\fR.  Note that some non-FSF releases of \s-1GCC\s0 2.95 for
16657 S/390 or zSeries generated code that uses the stack frame backchain at run
16658 time, not just for debugging purposes.  Such code is not call-compatible
16659 with code compiled with \fB\-mpacked\-stack\fR.  Also, note that the
16660 combination of \fB\-mbackchain\fR,
16661 \&\fB\-mpacked\-stack\fR and \fB\-mhard\-float\fR is not supported.  In order
16662 to build a linux kernel use \fB\-msoft\-float\fR.
16663 .Sp
16664 The default is to not use the packed stack layout.
16665 .IP "\fB\-msmall\-exec\fR" 4
16666 .IX Item "-msmall-exec"
16667 .PD 0
16668 .IP "\fB\-mno\-small\-exec\fR" 4
16669 .IX Item "-mno-small-exec"
16670 .PD
16671 Generate (or do not generate) code using the \f(CW\*(C`bras\*(C'\fR instruction
16672 to do subroutine calls.
16673 This only works reliably if the total executable size does not
16674 exceed 64k.  The default is to use the \f(CW\*(C`basr\*(C'\fR instruction instead,
16675 which does not have this limitation.
16676 .IP "\fB\-m64\fR" 4
16677 .IX Item "-m64"
16678 .PD 0
16679 .IP "\fB\-m31\fR" 4
16680 .IX Item "-m31"
16681 .PD
16682 When \fB\-m31\fR is specified, generate code compliant to the
16683 GNU/Linux for S/390 \s-1ABI\s0.  When \fB\-m64\fR is specified, generate
16684 code compliant to the GNU/Linux for zSeries \s-1ABI\s0.  This allows \s-1GCC\s0 in
16685 particular to generate 64\-bit instructions.  For the \fBs390\fR
16686 targets, the default is \fB\-m31\fR, while the \fBs390x\fR
16687 targets default to \fB\-m64\fR.
16688 .IP "\fB\-mzarch\fR" 4
16689 .IX Item "-mzarch"
16690 .PD 0
16691 .IP "\fB\-mesa\fR" 4
16692 .IX Item "-mesa"
16693 .PD
16694 When \fB\-mzarch\fR is specified, generate code using the
16695 instructions available on z/Architecture.
16696 When \fB\-mesa\fR is specified, generate code using the
16697 instructions available on \s-1ESA/390\s0.  Note that \fB\-mesa\fR is
16698 not possible with \fB\-m64\fR.
16699 When generating code compliant to the GNU/Linux for S/390 \s-1ABI\s0,
16700 the default is \fB\-mesa\fR.  When generating code compliant
16701 to the GNU/Linux for zSeries \s-1ABI\s0, the default is \fB\-mzarch\fR.
16702 .IP "\fB\-mmvcle\fR" 4
16703 .IX Item "-mmvcle"
16704 .PD 0
16705 .IP "\fB\-mno\-mvcle\fR" 4
16706 .IX Item "-mno-mvcle"
16707 .PD
16708 Generate (or do not generate) code using the \f(CW\*(C`mvcle\*(C'\fR instruction
16709 to perform block moves.  When \fB\-mno\-mvcle\fR is specified,
16710 use a \f(CW\*(C`mvc\*(C'\fR loop instead.  This is the default unless optimizing for
16711 size.
16712 .IP "\fB\-mdebug\fR" 4
16713 .IX Item "-mdebug"
16714 .PD 0
16715 .IP "\fB\-mno\-debug\fR" 4
16716 .IX Item "-mno-debug"
16717 .PD
16718 Print (or do not print) additional debug information when compiling.
16719 The default is to not print debug information.
16720 .IP "\fB\-march=\fR\fIcpu-type\fR" 4
16721 .IX Item "-march=cpu-type"
16722 Generate code that will run on \fIcpu-type\fR, which is the name of a system
16723 representing a certain processor type.  Possible values for
16724 \&\fIcpu-type\fR are \fBg5\fR, \fBg6\fR, \fBz900\fR, \fBz990\fR,
16725 \&\fBz9\-109\fR, \fBz9\-ec\fR and \fBz10\fR.
16726 When generating code using the instructions available on z/Architecture,
16727 the default is \fB\-march=z900\fR.  Otherwise, the default is
16728 \&\fB\-march=g5\fR.
16729 .IP "\fB\-mtune=\fR\fIcpu-type\fR" 4
16730 .IX Item "-mtune=cpu-type"
16731 Tune to \fIcpu-type\fR everything applicable about the generated code,
16732 except for the \s-1ABI\s0 and the set of available instructions.
16733 The list of \fIcpu-type\fR values is the same as for \fB\-march\fR.
16734 The default is the value used for \fB\-march\fR.
16735 .IP "\fB\-mtpf\-trace\fR" 4
16736 .IX Item "-mtpf-trace"
16737 .PD 0
16738 .IP "\fB\-mno\-tpf\-trace\fR" 4
16739 .IX Item "-mno-tpf-trace"
16740 .PD
16741 Generate code that adds (does not add) in \s-1TPF\s0 \s-1OS\s0 specific branches to trace
16742 routines in the operating system.  This option is off by default, even
16743 when compiling for the \s-1TPF\s0 \s-1OS\s0.
16744 .IP "\fB\-mfused\-madd\fR" 4
16745 .IX Item "-mfused-madd"
16746 .PD 0
16747 .IP "\fB\-mno\-fused\-madd\fR" 4
16748 .IX Item "-mno-fused-madd"
16749 .PD
16750 Generate code that uses (does not use) the floating-point multiply and
16751 accumulate instructions.  These instructions are generated by default if
16752 hardware floating point is used.
16753 .IP "\fB\-mwarn\-framesize=\fR\fIframesize\fR" 4
16754 .IX Item "-mwarn-framesize=framesize"
16755 Emit a warning if the current function exceeds the given frame size.  Because
16756 this is a compile-time check it doesn't need to be a real problem when the program
16757 runs.  It is intended to identify functions that most probably cause
16758 a stack overflow.  It is useful to be used in an environment with limited stack
16759 size e.g. the linux kernel.
16760 .IP "\fB\-mwarn\-dynamicstack\fR" 4
16761 .IX Item "-mwarn-dynamicstack"
16762 Emit a warning if the function calls alloca or uses dynamically
16763 sized arrays.  This is generally a bad idea with a limited stack size.
16764 .IP "\fB\-mstack\-guard=\fR\fIstack-guard\fR" 4
16765 .IX Item "-mstack-guard=stack-guard"
16766 .PD 0
16767 .IP "\fB\-mstack\-size=\fR\fIstack-size\fR" 4
16768 .IX Item "-mstack-size=stack-size"
16769 .PD
16770 If these options are provided the s390 back end emits additional instructions in
16771 the function prologue which trigger a trap if the stack size is \fIstack-guard\fR
16772 bytes above the \fIstack-size\fR (remember that the stack on s390 grows downward).
16773 If the \fIstack-guard\fR option is omitted the smallest power of 2 larger than
16774 the frame size of the compiled function is chosen.
16775 These options are intended to be used to help debugging stack overflow problems.
16776 The additionally emitted code causes only little overhead and hence can also be
16777 used in production like systems without greater performance degradation.  The given
16778 values have to be exact powers of 2 and \fIstack-size\fR has to be greater than
16779 \&\fIstack-guard\fR without exceeding 64k.
16780 In order to be efficient the extra code makes the assumption that the stack starts
16781 at an address aligned to the value given by \fIstack-size\fR.
16782 The \fIstack-guard\fR option can only be used in conjunction with \fIstack-size\fR.
16783 .PP
16784 \fIScore Options\fR
16785 .IX Subsection "Score Options"
16786 .PP
16787 These options are defined for Score implementations:
16788 .IP "\fB\-meb\fR" 4
16789 .IX Item "-meb"
16790 Compile code for big-endian mode.  This is the default.
16791 .IP "\fB\-mel\fR" 4
16792 .IX Item "-mel"
16793 Compile code for little-endian mode.
16794 .IP "\fB\-mnhwloop\fR" 4
16795 .IX Item "-mnhwloop"
16796 Disable generate bcnz instruction.
16797 .IP "\fB\-muls\fR" 4
16798 .IX Item "-muls"
16799 Enable generate unaligned load and store instruction.
16800 .IP "\fB\-mmac\fR" 4
16801 .IX Item "-mmac"
16802 Enable the use of multiply-accumulate instructions. Disabled by default.
16803 .IP "\fB\-mscore5\fR" 4
16804 .IX Item "-mscore5"
16805 Specify the \s-1SCORE5\s0 as the target architecture.
16806 .IP "\fB\-mscore5u\fR" 4
16807 .IX Item "-mscore5u"
16808 Specify the \s-1SCORE5U\s0 of the target architecture.
16809 .IP "\fB\-mscore7\fR" 4
16810 .IX Item "-mscore7"
16811 Specify the \s-1SCORE7\s0 as the target architecture. This is the default.
16812 .IP "\fB\-mscore7d\fR" 4
16813 .IX Item "-mscore7d"
16814 Specify the \s-1SCORE7D\s0 as the target architecture.
16815 .PP
16816 \fI\s-1SH\s0 Options\fR
16817 .IX Subsection "SH Options"
16818 .PP
16819 These \fB\-m\fR options are defined for the \s-1SH\s0 implementations:
16820 .IP "\fB\-m1\fR" 4
16821 .IX Item "-m1"
16822 Generate code for the \s-1SH1\s0.
16823 .IP "\fB\-m2\fR" 4
16824 .IX Item "-m2"
16825 Generate code for the \s-1SH2\s0.
16826 .IP "\fB\-m2e\fR" 4
16827 .IX Item "-m2e"
16828 Generate code for the SH2e.
16829 .IP "\fB\-m2a\-nofpu\fR" 4
16830 .IX Item "-m2a-nofpu"
16831 Generate code for the SH2a without \s-1FPU\s0, or for a SH2a\-FPU in such a way
16832 that the floating-point unit is not used.
16833 .IP "\fB\-m2a\-single\-only\fR" 4
16834 .IX Item "-m2a-single-only"
16835 Generate code for the SH2a\-FPU, in such a way that no double-precision
16836 floating-point operations are used.
16837 .IP "\fB\-m2a\-single\fR" 4
16838 .IX Item "-m2a-single"
16839 Generate code for the SH2a\-FPU assuming the floating-point unit is in
16840 single-precision mode by default.
16841 .IP "\fB\-m2a\fR" 4
16842 .IX Item "-m2a"
16843 Generate code for the SH2a\-FPU assuming the floating-point unit is in
16844 double-precision mode by default.
16845 .IP "\fB\-m3\fR" 4
16846 .IX Item "-m3"
16847 Generate code for the \s-1SH3\s0.
16848 .IP "\fB\-m3e\fR" 4
16849 .IX Item "-m3e"
16850 Generate code for the SH3e.
16851 .IP "\fB\-m4\-nofpu\fR" 4
16852 .IX Item "-m4-nofpu"
16853 Generate code for the \s-1SH4\s0 without a floating-point unit.
16854 .IP "\fB\-m4\-single\-only\fR" 4
16855 .IX Item "-m4-single-only"
16856 Generate code for the \s-1SH4\s0 with a floating-point unit that only
16857 supports single-precision arithmetic.
16858 .IP "\fB\-m4\-single\fR" 4
16859 .IX Item "-m4-single"
16860 Generate code for the \s-1SH4\s0 assuming the floating-point unit is in
16861 single-precision mode by default.
16862 .IP "\fB\-m4\fR" 4
16863 .IX Item "-m4"
16864 Generate code for the \s-1SH4\s0.
16865 .IP "\fB\-m4a\-nofpu\fR" 4
16866 .IX Item "-m4a-nofpu"
16867 Generate code for the SH4al\-dsp, or for a SH4a in such a way that the
16868 floating-point unit is not used.
16869 .IP "\fB\-m4a\-single\-only\fR" 4
16870 .IX Item "-m4a-single-only"
16871 Generate code for the SH4a, in such a way that no double-precision
16872 floating-point operations are used.
16873 .IP "\fB\-m4a\-single\fR" 4
16874 .IX Item "-m4a-single"
16875 Generate code for the SH4a assuming the floating-point unit is in
16876 single-precision mode by default.
16877 .IP "\fB\-m4a\fR" 4
16878 .IX Item "-m4a"
16879 Generate code for the SH4a.
16880 .IP "\fB\-m4al\fR" 4
16881 .IX Item "-m4al"
16882 Same as \fB\-m4a\-nofpu\fR, except that it implicitly passes
16883 \&\fB\-dsp\fR to the assembler.  \s-1GCC\s0 doesn't generate any \s-1DSP\s0
16884 instructions at the moment.
16885 .IP "\fB\-mb\fR" 4
16886 .IX Item "-mb"
16887 Compile code for the processor in big-endian mode.
16888 .IP "\fB\-ml\fR" 4
16889 .IX Item "-ml"
16890 Compile code for the processor in little-endian mode.
16891 .IP "\fB\-mdalign\fR" 4
16892 .IX Item "-mdalign"
16893 Align doubles at 64\-bit boundaries.  Note that this changes the calling
16894 conventions, and thus some functions from the standard C library will
16895 not work unless you recompile it first with \fB\-mdalign\fR.
16896 .IP "\fB\-mrelax\fR" 4
16897 .IX Item "-mrelax"
16898 Shorten some address references at link time, when possible; uses the
16899 linker option \fB\-relax\fR.
16900 .IP "\fB\-mbigtable\fR" 4
16901 .IX Item "-mbigtable"
16902 Use 32\-bit offsets in \f(CW\*(C`switch\*(C'\fR tables.  The default is to use
16903 16\-bit offsets.
16904 .IP "\fB\-mbitops\fR" 4
16905 .IX Item "-mbitops"
16906 Enable the use of bit manipulation instructions on \s-1SH2A\s0.
16907 .IP "\fB\-mfmovd\fR" 4
16908 .IX Item "-mfmovd"
16909 Enable the use of the instruction \f(CW\*(C`fmovd\*(C'\fR.  Check \fB\-mdalign\fR for
16910 alignment constraints.
16911 .IP "\fB\-mhitachi\fR" 4
16912 .IX Item "-mhitachi"
16913 Comply with the calling conventions defined by Renesas.
16914 .IP "\fB\-mrenesas\fR" 4
16915 .IX Item "-mrenesas"
16916 Comply with the calling conventions defined by Renesas.
16917 .IP "\fB\-mno\-renesas\fR" 4
16918 .IX Item "-mno-renesas"
16919 Comply with the calling conventions defined for \s-1GCC\s0 before the Renesas
16920 conventions were available.  This option is the default for all
16921 targets of the \s-1SH\s0 toolchain.
16922 .IP "\fB\-mnomacsave\fR" 4
16923 .IX Item "-mnomacsave"
16924 Mark the \f(CW\*(C`MAC\*(C'\fR register as call-clobbered, even if
16925 \&\fB\-mhitachi\fR is given.
16926 .IP "\fB\-mieee\fR" 4
16927 .IX Item "-mieee"
16928 .PD 0
16929 .IP "\fB\-mno\-ieee\fR" 4
16930 .IX Item "-mno-ieee"
16931 .PD
16932 Control the \s-1IEEE\s0 compliance of floating-point comparisons, which affects the
16933 handling of cases where the result of a comparison is unordered.  By default
16934 \&\fB\-mieee\fR is implicitly enabled.  If \fB\-ffinite\-math\-only\fR is
16935 enabled \fB\-mno\-ieee\fR is implicitly set, which results in faster
16936 floating-point greater-equal and less-equal comparisons.  The implcit settings
16937 can be overridden by specifying either \fB\-mieee\fR or \fB\-mno\-ieee\fR.
16938 .IP "\fB\-minline\-ic_invalidate\fR" 4
16939 .IX Item "-minline-ic_invalidate"
16940 Inline code to invalidate instruction cache entries after setting up
16941 nested function trampolines.
16942 This option has no effect if \-musermode is in effect and the selected
16943 code generation option (e.g. \-m4) does not allow the use of the icbi
16944 instruction.
16945 If the selected code generation option does not allow the use of the icbi
16946 instruction, and \-musermode is not in effect, the inlined code will
16947 manipulate the instruction cache address array directly with an associative
16948 write.  This not only requires privileged mode, but it will also
16949 fail if the cache line had been mapped via the \s-1TLB\s0 and has become unmapped.
16950 .IP "\fB\-misize\fR" 4
16951 .IX Item "-misize"
16952 Dump instruction size and location in the assembly code.
16953 .IP "\fB\-mpadstruct\fR" 4
16954 .IX Item "-mpadstruct"
16955 This option is deprecated.  It pads structures to multiple of 4 bytes,
16956 which is incompatible with the \s-1SH\s0 \s-1ABI\s0.
16957 .IP "\fB\-msoft\-atomic\fR" 4
16958 .IX Item "-msoft-atomic"
16959 Generate GNU/Linux compatible gUSA software atomic sequences for the atomic
16960 built-in functions.  The generated atomic sequences require support from the 
16961 interrupt / exception handling code of the system and are only suitable for
16962 single-core systems.  They will not perform correctly on multi-core systems.
16963 This option is enabled by default when the target is \f(CW\*(C`sh\-*\-linux*\*(C'\fR.
16964 For details on the atomic built-in functions see \fB_\|_atomic Builtins\fR.
16965 .IP "\fB\-mspace\fR" 4
16966 .IX Item "-mspace"
16967 Optimize for space instead of speed.  Implied by \fB\-Os\fR.
16968 .IP "\fB\-mprefergot\fR" 4
16969 .IX Item "-mprefergot"
16970 When generating position-independent code, emit function calls using
16971 the Global Offset Table instead of the Procedure Linkage Table.
16972 .IP "\fB\-musermode\fR" 4
16973 .IX Item "-musermode"
16974 Don't generate privileged mode only code; implies \-mno\-inline\-ic_invalidate
16975 if the inlined code would not work in user mode.
16976 This is the default when the target is \f(CW\*(C`sh\-*\-linux*\*(C'\fR.
16977 .IP "\fB\-multcost=\fR\fInumber\fR" 4
16978 .IX Item "-multcost=number"
16979 Set the cost to assume for a multiply insn.
16980 .IP "\fB\-mdiv=\fR\fIstrategy\fR" 4
16981 .IX Item "-mdiv=strategy"
16982 Set the division strategy to use for SHmedia code.  \fIstrategy\fR must be
16983 one of: call, call2, fp, inv, inv:minlat, inv20u, inv20l, inv:call,
16984 inv:call2, inv:fp .
16985 \&\*(L"fp\*(R" performs the operation in floating point.  This has a very high latency,
16986 but needs only a few instructions, so it might be a good choice if
16987 your code has enough easily-exploitable \s-1ILP\s0 to allow the compiler to
16988 schedule the floating-point instructions together with other instructions.
16989 Division by zero causes a floating-point exception.
16990 \&\*(L"inv\*(R" uses integer operations to calculate the inverse of the divisor,
16991 and then multiplies the dividend with the inverse.  This strategy allows
16992 cse and hoisting of the inverse calculation.  Division by zero calculates
16993 an unspecified result, but does not trap.
16994 \&\*(L"inv:minlat\*(R" is a variant of \*(L"inv\*(R" where if no cse / hoisting opportunities
16995 have been found, or if the entire operation has been hoisted to the same
16996 place, the last stages of the inverse calculation are intertwined with the
16997 final multiply to reduce the overall latency, at the expense of using a few
16998 more instructions, and thus offering fewer scheduling opportunities with
16999 other code.
17000 \&\*(L"call\*(R" calls a library function that usually implements the inv:minlat
17001 strategy.
17002 This gives high code density for m5\-*media\-nofpu compilations.
17003 \&\*(L"call2\*(R" uses a different entry point of the same library function, where it
17004 assumes that a pointer to a lookup table has already been set up, which
17005 exposes the pointer load to cse / code hoisting optimizations.
17006 \&\*(L"inv:call\*(R", \*(L"inv:call2\*(R" and \*(L"inv:fp\*(R" all use the \*(L"inv\*(R" algorithm for initial
17007 code generation, but if the code stays unoptimized, revert to the \*(L"call\*(R",
17008 \&\*(L"call2\*(R", or \*(L"fp\*(R" strategies, respectively.  Note that the
17009 potentially-trapping side effect of division by zero is carried by a
17010 separate instruction, so it is possible that all the integer instructions
17011 are hoisted out, but the marker for the side effect stays where it is.
17012 A recombination to fp operations or a call is not possible in that case.
17013 \&\*(L"inv20u\*(R" and \*(L"inv20l\*(R" are variants of the \*(L"inv:minlat\*(R" strategy.  In the case
17014 that the inverse calculation was nor separated from the multiply, they speed
17015 up division where the dividend fits into 20 bits (plus sign where applicable),
17016 by inserting a test to skip a number of operations in this case; this test
17017 slows down the case of larger dividends.  inv20u assumes the case of a such
17018 a small dividend to be unlikely, and inv20l assumes it to be likely.
17019 .IP "\fB\-maccumulate\-outgoing\-args\fR" 4
17020 .IX Item "-maccumulate-outgoing-args"
17021 Reserve space once for outgoing arguments in the function prologue rather
17022 than around each call.  Generally beneficial for performance and size.  Also
17023 needed for unwinding to avoid changing the stack frame around conditional code.
17024 .IP "\fB\-mdivsi3_libfunc=\fR\fIname\fR" 4
17025 .IX Item "-mdivsi3_libfunc=name"
17026 Set the name of the library function used for 32\-bit signed division to
17027 \&\fIname\fR.  This only affect the name used in the call and inv:call
17028 division strategies, and the compiler will still expect the same
17029 sets of input/output/clobbered registers as if this option was not present.
17030 .IP "\fB\-mfixed\-range=\fR\fIregister-range\fR" 4
17031 .IX Item "-mfixed-range=register-range"
17032 Generate code treating the given register range as fixed registers.
17033 A fixed register is one that the register allocator can not use.  This is
17034 useful when compiling kernel code.  A register range is specified as
17035 two registers separated by a dash.  Multiple register ranges can be
17036 specified separated by a comma.
17037 .IP "\fB\-madjust\-unroll\fR" 4
17038 .IX Item "-madjust-unroll"
17039 Throttle unrolling to avoid thrashing target registers.
17040 This option only has an effect if the gcc code base supports the
17041 \&\s-1TARGET_ADJUST_UNROLL_MAX\s0 target hook.
17042 .IP "\fB\-mindexed\-addressing\fR" 4
17043 .IX Item "-mindexed-addressing"
17044 Enable the use of the indexed addressing mode for SHmedia32/SHcompact.
17045 This is only safe if the hardware and/or \s-1OS\s0 implement 32\-bit wrap-around
17046 semantics for the indexed addressing mode.  The architecture allows the
17047 implementation of processors with 64\-bit \s-1MMU\s0, which the \s-1OS\s0 could use to
17048 get 32\-bit addressing, but since no current hardware implementation supports
17049 this or any other way to make the indexed addressing mode safe to use in
17050 the 32\-bit \s-1ABI\s0, the default is \fB\-mno\-indexed\-addressing\fR.
17051 .IP "\fB\-mgettrcost=\fR\fInumber\fR" 4
17052 .IX Item "-mgettrcost=number"
17053 Set the cost assumed for the gettr instruction to \fInumber\fR.
17054 The default is 2 if \fB\-mpt\-fixed\fR is in effect, 100 otherwise.
17055 .IP "\fB\-mpt\-fixed\fR" 4
17056 .IX Item "-mpt-fixed"
17057 Assume pt* instructions won't trap.  This will generally generate better
17058 scheduled code, but is unsafe on current hardware.  The current architecture
17059 definition says that ptabs and ptrel trap when the target anded with 3 is 3.
17060 This has the unintentional effect of making it unsafe to schedule ptabs /
17061 ptrel before a branch, or hoist it out of a loop.  For example,
17062 _\|_do_global_ctors, a part of libgcc that runs constructors at program
17063 startup, calls functions in a list which is delimited by \-1.  With the
17064 \&\-mpt\-fixed option, the ptabs will be done before testing against \-1.
17065 That means that all the constructors will be run a bit quicker, but when
17066 the loop comes to the end of the list, the program crashes because ptabs
17067 loads \-1 into a target register.  Since this option is unsafe for any
17068 hardware implementing the current architecture specification, the default
17069 is \-mno\-pt\-fixed.  Unless the user specifies a specific cost with
17070 \&\fB\-mgettrcost\fR, \-mno\-pt\-fixed also implies \fB\-mgettrcost=100\fR;
17071 this deters register allocation using target registers for storing
17072 ordinary integers.
17073 .IP "\fB\-minvalid\-symbols\fR" 4
17074 .IX Item "-minvalid-symbols"
17075 Assume symbols might be invalid.  Ordinary function symbols generated by
17076 the compiler will always be valid to load with movi/shori/ptabs or
17077 movi/shori/ptrel, but with assembler and/or linker tricks it is possible
17078 to generate symbols that will cause ptabs / ptrel to trap.
17079 This option is only meaningful when \fB\-mno\-pt\-fixed\fR is in effect.
17080 It will then prevent cross-basic-block cse, hoisting and most scheduling
17081 of symbol loads.  The default is \fB\-mno\-invalid\-symbols\fR.
17082 .IP "\fB\-mbranch\-cost=\fR\fInum\fR" 4
17083 .IX Item "-mbranch-cost=num"
17084 Assume \fInum\fR to be the cost for a branch instruction.  Higher numbers
17085 will make the compiler try to generate more branch-free code if possible.  
17086 If not specified the value is selected depending on the processor type that
17087 is being compiled for.
17088 .IP "\fB\-mcbranchdi\fR" 4
17089 .IX Item "-mcbranchdi"
17090 Enable the \f(CW\*(C`cbranchdi4\*(C'\fR instruction pattern.
17091 .IP "\fB\-mcmpeqdi\fR" 4
17092 .IX Item "-mcmpeqdi"
17093 Emit the \f(CW\*(C`cmpeqdi_t\*(C'\fR instruction pattern even when \fB\-mcbranchdi\fR
17094 is in effect.
17095 .IP "\fB\-mfused\-madd\fR" 4
17096 .IX Item "-mfused-madd"
17097 Allow the usage of the \f(CW\*(C`fmac\*(C'\fR instruction (floating-point
17098 multiply-accumulate) if the processor type supports it.  Enabling this
17099 option might generate code that produces different numeric floating-point
17100 results compared to strict \s-1IEEE\s0 754 arithmetic.
17101 .IP "\fB\-mpretend\-cmove\fR" 4
17102 .IX Item "-mpretend-cmove"
17103 Prefer zero-displacement conditional branches for conditional move instruction
17104 patterns.  This can result in faster code on the \s-1SH4\s0 processor.
17105 .PP
17106 \fISolaris 2 Options\fR
17107 .IX Subsection "Solaris 2 Options"
17108 .PP
17109 These \fB\-m\fR options are supported on Solaris 2:
17110 .IP "\fB\-mimpure\-text\fR" 4
17111 .IX Item "-mimpure-text"
17112 \&\fB\-mimpure\-text\fR, used in addition to \fB\-shared\fR, tells
17113 the compiler to not pass \fB\-z text\fR to the linker when linking a
17114 shared object.  Using this option, you can link position-dependent
17115 code into a shared object.
17116 .Sp
17117 \&\fB\-mimpure\-text\fR suppresses the \*(L"relocations remain against
17118 allocatable but non-writable sections\*(R" linker error message.
17119 However, the necessary relocations will trigger copy-on-write, and the
17120 shared object is not actually shared across processes.  Instead of
17121 using \fB\-mimpure\-text\fR, you should compile all source code with
17122 \&\fB\-fpic\fR or \fB\-fPIC\fR.
17123 .PP
17124 These switches are supported in addition to the above on Solaris 2:
17125 .IP "\fB\-pthreads\fR" 4
17126 .IX Item "-pthreads"
17127 Add support for multithreading using the \s-1POSIX\s0 threads library.  This
17128 option sets flags for both the preprocessor and linker.  This option does
17129 not affect the thread safety of object code produced  by the compiler or
17130 that of libraries supplied with it.
17131 .IP "\fB\-pthread\fR" 4
17132 .IX Item "-pthread"
17133 This is a synonym for \fB\-pthreads\fR.
17134 .PP
17135 \fI\s-1SPARC\s0 Options\fR
17136 .IX Subsection "SPARC Options"
17137 .PP
17138 These \fB\-m\fR options are supported on the \s-1SPARC:\s0
17139 .IP "\fB\-mno\-app\-regs\fR" 4
17140 .IX Item "-mno-app-regs"
17141 .PD 0
17142 .IP "\fB\-mapp\-regs\fR" 4
17143 .IX Item "-mapp-regs"
17144 .PD
17145 Specify \fB\-mapp\-regs\fR to generate output using the global registers
17146 2 through 4, which the \s-1SPARC\s0 \s-1SVR4\s0 \s-1ABI\s0 reserves for applications.  This
17147 is the default.
17148 .Sp
17149 To be fully \s-1SVR4\s0 \s-1ABI\s0 compliant at the cost of some performance loss,
17150 specify \fB\-mno\-app\-regs\fR.  You should compile libraries and system
17151 software with this option.
17152 .IP "\fB\-mflat\fR" 4
17153 .IX Item "-mflat"
17154 .PD 0
17155 .IP "\fB\-mno\-flat\fR" 4
17156 .IX Item "-mno-flat"
17157 .PD
17158 With \fB\-mflat\fR, the compiler does not generate save/restore instructions
17159 and uses a \*(L"flat\*(R" or single register window model.  This model is compatible
17160 with the regular register window model.  The local registers and the input
17161 registers (0\-\-5) are still treated as \*(L"call-saved\*(R" registers and will be
17162 saved on the stack as needed.
17163 .Sp
17164 With \fB\-mno\-flat\fR (the default), the compiler generates save/restore
17165 instructions (except for leaf functions).  This is the normal operating mode.
17166 .IP "\fB\-mfpu\fR" 4
17167 .IX Item "-mfpu"
17168 .PD 0
17169 .IP "\fB\-mhard\-float\fR" 4
17170 .IX Item "-mhard-float"
17171 .PD
17172 Generate output containing floating-point instructions.  This is the
17173 default.
17174 .IP "\fB\-mno\-fpu\fR" 4
17175 .IX Item "-mno-fpu"
17176 .PD 0
17177 .IP "\fB\-msoft\-float\fR" 4
17178 .IX Item "-msoft-float"
17179 .PD
17180 Generate output containing library calls for floating point.
17181 \&\fBWarning:\fR the requisite libraries are not available for all \s-1SPARC\s0
17182 targets.  Normally the facilities of the machine's usual C compiler are
17183 used, but this cannot be done directly in cross-compilation.  You must make
17184 your own arrangements to provide suitable library functions for
17185 cross-compilation.  The embedded targets \fBsparc\-*\-aout\fR and
17186 \&\fBsparclite\-*\-*\fR do provide software floating-point support.
17187 .Sp
17188 \&\fB\-msoft\-float\fR changes the calling convention in the output file;
17189 therefore, it is only useful if you compile \fIall\fR of a program with
17190 this option.  In particular, you need to compile \fIlibgcc.a\fR, the
17191 library that comes with \s-1GCC\s0, with \fB\-msoft\-float\fR in order for
17192 this to work.
17193 .IP "\fB\-mhard\-quad\-float\fR" 4
17194 .IX Item "-mhard-quad-float"
17195 Generate output containing quad-word (long double) floating-point
17196 instructions.
17197 .IP "\fB\-msoft\-quad\-float\fR" 4
17198 .IX Item "-msoft-quad-float"
17199 Generate output containing library calls for quad-word (long double)
17200 floating-point instructions.  The functions called are those specified
17201 in the \s-1SPARC\s0 \s-1ABI\s0.  This is the default.
17202 .Sp
17203 As of this writing, there are no \s-1SPARC\s0 implementations that have hardware
17204 support for the quad-word floating-point instructions.  They all invoke
17205 a trap handler for one of these instructions, and then the trap handler
17206 emulates the effect of the instruction.  Because of the trap handler overhead,
17207 this is much slower than calling the \s-1ABI\s0 library routines.  Thus the
17208 \&\fB\-msoft\-quad\-float\fR option is the default.
17209 .IP "\fB\-mno\-unaligned\-doubles\fR" 4
17210 .IX Item "-mno-unaligned-doubles"
17211 .PD 0
17212 .IP "\fB\-munaligned\-doubles\fR" 4
17213 .IX Item "-munaligned-doubles"
17214 .PD
17215 Assume that doubles have 8\-byte alignment.  This is the default.
17216 .Sp
17217 With \fB\-munaligned\-doubles\fR, \s-1GCC\s0 assumes that doubles have 8\-byte
17218 alignment only if they are contained in another type, or if they have an
17219 absolute address.  Otherwise, it assumes they have 4\-byte alignment.
17220 Specifying this option avoids some rare compatibility problems with code
17221 generated by other compilers.  It is not the default because it results
17222 in a performance loss, especially for floating-point code.
17223 .IP "\fB\-mno\-faster\-structs\fR" 4
17224 .IX Item "-mno-faster-structs"
17225 .PD 0
17226 .IP "\fB\-mfaster\-structs\fR" 4
17227 .IX Item "-mfaster-structs"
17228 .PD
17229 With \fB\-mfaster\-structs\fR, the compiler assumes that structures
17230 should have 8\-byte alignment.  This enables the use of pairs of
17231 \&\f(CW\*(C`ldd\*(C'\fR and \f(CW\*(C`std\*(C'\fR instructions for copies in structure
17232 assignment, in place of twice as many \f(CW\*(C`ld\*(C'\fR and \f(CW\*(C`st\*(C'\fR pairs.
17233 However, the use of this changed alignment directly violates the \s-1SPARC\s0
17234 \&\s-1ABI\s0.  Thus, it's intended only for use on targets where the developer
17235 acknowledges that their resulting code will not be directly in line with
17236 the rules of the \s-1ABI\s0.
17237 .IP "\fB\-mcpu=\fR\fIcpu_type\fR" 4
17238 .IX Item "-mcpu=cpu_type"
17239 Set the instruction set, register set, and instruction scheduling parameters
17240 for machine type \fIcpu_type\fR.  Supported values for \fIcpu_type\fR are
17241 \&\fBv7\fR, \fBcypress\fR, \fBv8\fR, \fBsupersparc\fR, \fBhypersparc\fR,
17242 \&\fBleon\fR, \fBsparclite\fR, \fBf930\fR, \fBf934\fR, \fBsparclite86x\fR,
17243 \&\fBsparclet\fR, \fBtsc701\fR, \fBv9\fR, \fBultrasparc\fR,
17244 \&\fBultrasparc3\fR, \fBniagara\fR, \fBniagara2\fR, \fBniagara3\fR,
17245 and \fBniagara4\fR.
17246 .Sp
17247 Native Solaris and GNU/Linux toolchains also support the value \fBnative\fR,
17248 which selects the best architecture option for the host processor.
17249 \&\fB\-mcpu=native\fR has no effect if \s-1GCC\s0 does not recognize
17250 the processor.
17251 .Sp
17252 Default instruction scheduling parameters are used for values that select
17253 an architecture and not an implementation.  These are \fBv7\fR, \fBv8\fR,
17254 \&\fBsparclite\fR, \fBsparclet\fR, \fBv9\fR.
17255 .Sp
17256 Here is a list of each supported architecture and their supported
17257 implementations.
17258 .RS 4
17259 .IP "v7" 4
17260 .IX Item "v7"
17261 cypress
17262 .IP "v8" 4
17263 .IX Item "v8"
17264 supersparc, hypersparc, leon
17265 .IP "sparclite" 4
17266 .IX Item "sparclite"
17267 f930, f934, sparclite86x
17268 .IP "sparclet" 4
17269 .IX Item "sparclet"
17270 tsc701
17271 .IP "v9" 4
17272 .IX Item "v9"
17273 ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4
17274 .RE
17275 .RS 4
17276 .Sp
17277 By default (unless configured otherwise), \s-1GCC\s0 generates code for the V7
17278 variant of the \s-1SPARC\s0 architecture.  With \fB\-mcpu=cypress\fR, the compiler
17279 additionally optimizes it for the Cypress \s-1CY7C602\s0 chip, as used in the
17280 SPARCStation/SPARCServer 3xx series.  This is also appropriate for the older
17281 SPARCStation 1, 2, \s-1IPX\s0 etc.
17282 .Sp
17283 With \fB\-mcpu=v8\fR, \s-1GCC\s0 generates code for the V8 variant of the \s-1SPARC\s0
17284 architecture.  The only difference from V7 code is that the compiler emits
17285 the integer multiply and integer divide instructions which exist in \s-1SPARC\-V8\s0
17286 but not in \s-1SPARC\-V7\s0.  With \fB\-mcpu=supersparc\fR, the compiler additionally
17287 optimizes it for the SuperSPARC chip, as used in the SPARCStation 10, 1000 and
17288 2000 series.
17289 .Sp
17290 With \fB\-mcpu=sparclite\fR, \s-1GCC\s0 generates code for the SPARClite variant of
17291 the \s-1SPARC\s0 architecture.  This adds the integer multiply, integer divide step
17292 and scan (\f(CW\*(C`ffs\*(C'\fR) instructions which exist in SPARClite but not in \s-1SPARC\-V7\s0.
17293 With \fB\-mcpu=f930\fR, the compiler additionally optimizes it for the
17294 Fujitsu \s-1MB86930\s0 chip, which is the original SPARClite, with no \s-1FPU\s0.  With
17295 \&\fB\-mcpu=f934\fR, the compiler additionally optimizes it for the Fujitsu
17296 \&\s-1MB86934\s0 chip, which is the more recent SPARClite with \s-1FPU\s0.
17297 .Sp
17298 With \fB\-mcpu=sparclet\fR, \s-1GCC\s0 generates code for the SPARClet variant of
17299 the \s-1SPARC\s0 architecture.  This adds the integer multiply, multiply/accumulate,
17300 integer divide step and scan (\f(CW\*(C`ffs\*(C'\fR) instructions which exist in SPARClet
17301 but not in \s-1SPARC\-V7\s0.  With \fB\-mcpu=tsc701\fR, the compiler additionally
17302 optimizes it for the \s-1TEMIC\s0 SPARClet chip.
17303 .Sp
17304 With \fB\-mcpu=v9\fR, \s-1GCC\s0 generates code for the V9 variant of the \s-1SPARC\s0
17305 architecture.  This adds 64\-bit integer and floating-point move instructions,
17306 3 additional floating-point condition code registers and conditional move
17307 instructions.  With \fB\-mcpu=ultrasparc\fR, the compiler additionally
17308 optimizes it for the Sun UltraSPARC I/II/IIi chips.  With
17309 \&\fB\-mcpu=ultrasparc3\fR, the compiler additionally optimizes it for the
17310 Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+ chips.  With
17311 \&\fB\-mcpu=niagara\fR, the compiler additionally optimizes it for
17312 Sun UltraSPARC T1 chips.  With \fB\-mcpu=niagara2\fR, the compiler
17313 additionally optimizes it for Sun UltraSPARC T2 chips. With
17314 \&\fB\-mcpu=niagara3\fR, the compiler additionally optimizes it for Sun
17315 UltraSPARC T3 chips.  With \fB\-mcpu=niagara4\fR, the compiler
17316 additionally optimizes it for Sun UltraSPARC T4 chips.
17317 .RE
17318 .IP "\fB\-mtune=\fR\fIcpu_type\fR" 4
17319 .IX Item "-mtune=cpu_type"
17320 Set the instruction scheduling parameters for machine type
17321 \&\fIcpu_type\fR, but do not set the instruction set or register set that the
17322 option \fB\-mcpu=\fR\fIcpu_type\fR would.
17323 .Sp
17324 The same values for \fB\-mcpu=\fR\fIcpu_type\fR can be used for
17325 \&\fB\-mtune=\fR\fIcpu_type\fR, but the only useful values are those
17326 that select a particular \s-1CPU\s0 implementation.  Those are \fBcypress\fR,
17327 \&\fBsupersparc\fR, \fBhypersparc\fR, \fBleon\fR, \fBf930\fR, \fBf934\fR,
17328 \&\fBsparclite86x\fR, \fBtsc701\fR, \fBultrasparc\fR, \fBultrasparc3\fR,
17329 \&\fBniagara\fR, \fBniagara2\fR, \fBniagara3\fR and \fBniagara4\fR.  With
17330 native Solaris and GNU/Linux toolchains, \fBnative\fR can also be used.
17331 .IP "\fB\-mv8plus\fR" 4
17332 .IX Item "-mv8plus"
17333 .PD 0
17334 .IP "\fB\-mno\-v8plus\fR" 4
17335 .IX Item "-mno-v8plus"
17336 .PD
17337 With \fB\-mv8plus\fR, \s-1GCC\s0 generates code for the \s-1SPARC\-V8+\s0 \s-1ABI\s0.  The
17338 difference from the V8 \s-1ABI\s0 is that the global and out registers are
17339 considered 64 bits wide.  This is enabled by default on Solaris in 32\-bit
17340 mode for all \s-1SPARC\-V9\s0 processors.
17341 .IP "\fB\-mvis\fR" 4
17342 .IX Item "-mvis"
17343 .PD 0
17344 .IP "\fB\-mno\-vis\fR" 4
17345 .IX Item "-mno-vis"
17346 .PD
17347 With \fB\-mvis\fR, \s-1GCC\s0 generates code that takes advantage of the UltraSPARC
17348 Visual Instruction Set extensions.  The default is \fB\-mno\-vis\fR.
17349 .IP "\fB\-mvis2\fR" 4
17350 .IX Item "-mvis2"
17351 .PD 0
17352 .IP "\fB\-mno\-vis2\fR" 4
17353 .IX Item "-mno-vis2"
17354 .PD
17355 With \fB\-mvis2\fR, \s-1GCC\s0 generates code that takes advantage of
17356 version 2.0 of the UltraSPARC Visual Instruction Set extensions.  The
17357 default is \fB\-mvis2\fR when targetting a cpu that supports such
17358 instructions, such as UltraSPARC-III and later.  Setting \fB\-mvis2\fR
17359 also sets \fB\-mvis\fR.
17360 .IP "\fB\-mvis3\fR" 4
17361 .IX Item "-mvis3"
17362 .PD 0
17363 .IP "\fB\-mno\-vis3\fR" 4
17364 .IX Item "-mno-vis3"
17365 .PD
17366 With \fB\-mvis3\fR, \s-1GCC\s0 generates code that takes advantage of
17367 version 3.0 of the UltraSPARC Visual Instruction Set extensions.  The
17368 default is \fB\-mvis3\fR when targetting a cpu that supports such
17369 instructions, such as niagara\-3 and later.  Setting \fB\-mvis3\fR
17370 also sets \fB\-mvis2\fR and \fB\-mvis\fR.
17371 .IP "\fB\-mpopc\fR" 4
17372 .IX Item "-mpopc"
17373 .PD 0
17374 .IP "\fB\-mno\-popc\fR" 4
17375 .IX Item "-mno-popc"
17376 .PD
17377 With \fB\-mpopc\fR, \s-1GCC\s0 generates code that takes advantage of the UltraSPARC
17378 population count instruction.  The default is \fB\-mpopc\fR
17379 when targetting a cpu that supports such instructions, such as Niagara\-2 and
17380 later.
17381 .IP "\fB\-mfmaf\fR" 4
17382 .IX Item "-mfmaf"
17383 .PD 0
17384 .IP "\fB\-mno\-fmaf\fR" 4
17385 .IX Item "-mno-fmaf"
17386 .PD
17387 With \fB\-mfmaf\fR, \s-1GCC\s0 generates code that takes advantage of the UltraSPARC
17388 Fused Multiply-Add Floating-point extensions.  The default is \fB\-mfmaf\fR
17389 when targetting a cpu that supports such instructions, such as Niagara\-3 and
17390 later.
17391 .IP "\fB\-mfix\-at697f\fR" 4
17392 .IX Item "-mfix-at697f"
17393 Enable the documented workaround for the single erratum of the Atmel \s-1AT697F\s0
17394 processor (which corresponds to erratum #13 of the \s-1AT697E\s0 processor).
17395 .PP
17396 These \fB\-m\fR options are supported in addition to the above
17397 on \s-1SPARC\-V9\s0 processors in 64\-bit environments:
17398 .IP "\fB\-mlittle\-endian\fR" 4
17399 .IX Item "-mlittle-endian"
17400 Generate code for a processor running in little-endian mode.  It is only
17401 available for a few configurations and most notably not on Solaris and Linux.
17402 .IP "\fB\-m32\fR" 4
17403 .IX Item "-m32"
17404 .PD 0
17405 .IP "\fB\-m64\fR" 4
17406 .IX Item "-m64"
17407 .PD
17408 Generate code for a 32\-bit or 64\-bit environment.
17409 The 32\-bit environment sets int, long and pointer to 32 bits.
17410 The 64\-bit environment sets int to 32 bits and long and pointer
17411 to 64 bits.
17412 .IP "\fB\-mcmodel=\fR\fIwhich\fR" 4
17413 .IX Item "-mcmodel=which"
17414 Set the code model to one of
17415 .RS 4
17416 .IP "\fBmedlow\fR" 4
17417 .IX Item "medlow"
17418 The Medium/Low code model: 64\-bit addresses, programs
17419 must be linked in the low 32 bits of memory.  Programs can be statically
17420 or dynamically linked.
17421 .IP "\fBmedmid\fR" 4
17422 .IX Item "medmid"
17423 The Medium/Middle code model: 64\-bit addresses, programs
17424 must be linked in the low 44 bits of memory, the text and data segments must
17425 be less than 2GB in size and the data segment must be located within 2GB of
17426 the text segment.
17427 .IP "\fBmedany\fR" 4
17428 .IX Item "medany"
17429 The Medium/Anywhere code model: 64\-bit addresses, programs
17430 may be linked anywhere in memory, the text and data segments must be less
17431 than 2GB in size and the data segment must be located within 2GB of the
17432 text segment.
17433 .IP "\fBembmedany\fR" 4
17434 .IX Item "embmedany"
17435 The Medium/Anywhere code model for embedded systems:
17436 64\-bit addresses, the text and data segments must be less than 2GB in
17437 size, both starting anywhere in memory (determined at link time).  The
17438 global register \f(CW%g4\fR points to the base of the data segment.  Programs
17439 are statically linked and \s-1PIC\s0 is not supported.
17440 .RE
17441 .RS 4
17442 .RE
17443 .IP "\fB\-mmemory\-model=\fR\fImem-model\fR" 4
17444 .IX Item "-mmemory-model=mem-model"
17445 Set the memory model in force on the processor to one of
17446 .RS 4
17447 .IP "\fBdefault\fR" 4
17448 .IX Item "default"
17449 The default memory model for the processor and operating system.
17450 .IP "\fBrmo\fR" 4
17451 .IX Item "rmo"
17452 Relaxed Memory Order
17453 .IP "\fBpso\fR" 4
17454 .IX Item "pso"
17455 Partial Store Order
17456 .IP "\fBtso\fR" 4
17457 .IX Item "tso"
17458 Total Store Order
17459 .IP "\fBsc\fR" 4
17460 .IX Item "sc"
17461 Sequential Consistency
17462 .RE
17463 .RS 4
17464 .Sp
17465 These memory models are formally defined in Appendix D of the Sparc V9
17466 architecture manual, as set in the processor's \f(CW\*(C`PSTATE.MM\*(C'\fR field.
17467 .RE
17468 .IP "\fB\-mstack\-bias\fR" 4
17469 .IX Item "-mstack-bias"
17470 .PD 0
17471 .IP "\fB\-mno\-stack\-bias\fR" 4
17472 .IX Item "-mno-stack-bias"
17473 .PD
17474 With \fB\-mstack\-bias\fR, \s-1GCC\s0 assumes that the stack pointer, and
17475 frame pointer if present, are offset by \-2047 which must be added back
17476 when making stack frame references.  This is the default in 64\-bit mode.
17477 Otherwise, assume no such offset is present.
17478 .PP
17479 \fI\s-1SPU\s0 Options\fR
17480 .IX Subsection "SPU Options"
17481 .PP
17482 These \fB\-m\fR options are supported on the \s-1SPU:\s0
17483 .IP "\fB\-mwarn\-reloc\fR" 4
17484 .IX Item "-mwarn-reloc"
17485 .PD 0
17486 .IP "\fB\-merror\-reloc\fR" 4
17487 .IX Item "-merror-reloc"
17488 .PD
17489 The loader for \s-1SPU\s0 does not handle dynamic relocations.  By default, \s-1GCC\s0
17490 will give an error when it generates code that requires a dynamic
17491 relocation.  \fB\-mno\-error\-reloc\fR disables the error,
17492 \&\fB\-mwarn\-reloc\fR will generate a warning instead.
17493 .IP "\fB\-msafe\-dma\fR" 4
17494 .IX Item "-msafe-dma"
17495 .PD 0
17496 .IP "\fB\-munsafe\-dma\fR" 4
17497 .IX Item "-munsafe-dma"
17498 .PD
17499 Instructions that initiate or test completion of \s-1DMA\s0 must not be
17500 reordered with respect to loads and stores of the memory that is being
17501 accessed.  Users typically address this problem using the volatile
17502 keyword, but that can lead to inefficient code in places where the
17503 memory is known to not change.  Rather than mark the memory as volatile
17504 we treat the \s-1DMA\s0 instructions as potentially effecting all memory.  With
17505 \&\fB\-munsafe\-dma\fR users must use the volatile keyword to protect
17506 memory accesses.
17507 .IP "\fB\-mbranch\-hints\fR" 4
17508 .IX Item "-mbranch-hints"
17509 By default, \s-1GCC\s0 will generate a branch hint instruction to avoid
17510 pipeline stalls for always taken or probably taken branches.  A hint
17511 will not be generated closer than 8 instructions away from its branch.
17512 There is little reason to disable them, except for debugging purposes,
17513 or to make an object a little bit smaller.
17514 .IP "\fB\-msmall\-mem\fR" 4
17515 .IX Item "-msmall-mem"
17516 .PD 0
17517 .IP "\fB\-mlarge\-mem\fR" 4
17518 .IX Item "-mlarge-mem"
17519 .PD
17520 By default, \s-1GCC\s0 generates code assuming that addresses are never larger
17521 than 18 bits.  With \fB\-mlarge\-mem\fR code is generated that assumes
17522 a full 32\-bit address.
17523 .IP "\fB\-mstdmain\fR" 4
17524 .IX Item "-mstdmain"
17525 By default, \s-1GCC\s0 links against startup code that assumes the SPU-style
17526 main function interface (which has an unconventional parameter list).
17527 With \fB\-mstdmain\fR, \s-1GCC\s0 will link your program against startup
17528 code that assumes a C99\-style interface to \f(CW\*(C`main\*(C'\fR, including a
17529 local copy of \f(CW\*(C`argv\*(C'\fR strings.
17530 .IP "\fB\-mfixed\-range=\fR\fIregister-range\fR" 4
17531 .IX Item "-mfixed-range=register-range"
17532 Generate code treating the given register range as fixed registers.
17533 A fixed register is one that the register allocator can not use.  This is
17534 useful when compiling kernel code.  A register range is specified as
17535 two registers separated by a dash.  Multiple register ranges can be
17536 specified separated by a comma.
17537 .IP "\fB\-mea32\fR" 4
17538 .IX Item "-mea32"
17539 .PD 0
17540 .IP "\fB\-mea64\fR" 4
17541 .IX Item "-mea64"
17542 .PD
17543 Compile code assuming that pointers to the \s-1PPU\s0 address space accessed
17544 via the \f(CW\*(C`_\|_ea\*(C'\fR named address space qualifier are either 32 or 64
17545 bits wide.  The default is 32 bits.  As this is an \s-1ABI\s0 changing option,
17546 all object code in an executable must be compiled with the same setting.
17547 .IP "\fB\-maddress\-space\-conversion\fR" 4
17548 .IX Item "-maddress-space-conversion"
17549 .PD 0
17550 .IP "\fB\-mno\-address\-space\-conversion\fR" 4
17551 .IX Item "-mno-address-space-conversion"
17552 .PD
17553 Allow/disallow treating the \f(CW\*(C`_\|_ea\*(C'\fR address space as superset
17554 of the generic address space.  This enables explicit type casts
17555 between \f(CW\*(C`_\|_ea\*(C'\fR and generic pointer as well as implicit
17556 conversions of generic pointers to \f(CW\*(C`_\|_ea\*(C'\fR pointers.  The
17557 default is to allow address space pointer conversions.
17558 .IP "\fB\-mcache\-size=\fR\fIcache-size\fR" 4
17559 .IX Item "-mcache-size=cache-size"
17560 This option controls the version of libgcc that the compiler links to an
17561 executable and selects a software-managed cache for accessing variables
17562 in the \f(CW\*(C`_\|_ea\*(C'\fR address space with a particular cache size.  Possible
17563 options for \fIcache-size\fR are \fB8\fR, \fB16\fR, \fB32\fR, \fB64\fR
17564 and \fB128\fR.  The default cache size is 64KB.
17565 .IP "\fB\-matomic\-updates\fR" 4
17566 .IX Item "-matomic-updates"
17567 .PD 0
17568 .IP "\fB\-mno\-atomic\-updates\fR" 4
17569 .IX Item "-mno-atomic-updates"
17570 .PD
17571 This option controls the version of libgcc that the compiler links to an
17572 executable and selects whether atomic updates to the software-managed
17573 cache of PPU-side variables are used.  If you use atomic updates, changes
17574 to a \s-1PPU\s0 variable from \s-1SPU\s0 code using the \f(CW\*(C`_\|_ea\*(C'\fR named address space
17575 qualifier will not interfere with changes to other \s-1PPU\s0 variables residing
17576 in the same cache line from \s-1PPU\s0 code.  If you do not use atomic updates,
17577 such interference may occur; however, writing back cache lines will be
17578 more efficient.  The default behavior is to use atomic updates.
17579 .IP "\fB\-mdual\-nops\fR" 4
17580 .IX Item "-mdual-nops"
17581 .PD 0
17582 .IP "\fB\-mdual\-nops=\fR\fIn\fR" 4
17583 .IX Item "-mdual-nops=n"
17584 .PD
17585 By default, \s-1GCC\s0 will insert nops to increase dual issue when it expects
17586 it to increase performance.  \fIn\fR can be a value from 0 to 10.  A
17587 smaller \fIn\fR will insert fewer nops.  10 is the default, 0 is the
17588 same as \fB\-mno\-dual\-nops\fR.  Disabled with \fB\-Os\fR.
17589 .IP "\fB\-mhint\-max\-nops=\fR\fIn\fR" 4
17590 .IX Item "-mhint-max-nops=n"
17591 Maximum number of nops to insert for a branch hint.  A branch hint must
17592 be at least 8 instructions away from the branch it is effecting.  \s-1GCC\s0
17593 will insert up to \fIn\fR nops to enforce this, otherwise it will not
17594 generate the branch hint.
17595 .IP "\fB\-mhint\-max\-distance=\fR\fIn\fR" 4
17596 .IX Item "-mhint-max-distance=n"
17597 The encoding of the branch hint instruction limits the hint to be within
17598 256 instructions of the branch it is effecting.  By default, \s-1GCC\s0 makes
17599 sure it is within 125.
17600 .IP "\fB\-msafe\-hints\fR" 4
17601 .IX Item "-msafe-hints"
17602 Work around a hardware bug that causes the \s-1SPU\s0 to stall indefinitely.
17603 By default, \s-1GCC\s0 will insert the \f(CW\*(C`hbrp\*(C'\fR instruction to make sure
17604 this stall won't happen.
17605 .PP
17606 \fIOptions for System V\fR
17607 .IX Subsection "Options for System V"
17608 .PP
17609 These additional options are available on System V Release 4 for
17610 compatibility with other compilers on those systems:
17611 .IP "\fB\-G\fR" 4
17612 .IX Item "-G"
17613 Create a shared object.
17614 It is recommended that \fB\-symbolic\fR or \fB\-shared\fR be used instead.
17615 .IP "\fB\-Qy\fR" 4
17616 .IX Item "-Qy"
17617 Identify the versions of each tool used by the compiler, in a
17618 \&\f(CW\*(C`.ident\*(C'\fR assembler directive in the output.
17619 .IP "\fB\-Qn\fR" 4
17620 .IX Item "-Qn"
17621 Refrain from adding \f(CW\*(C`.ident\*(C'\fR directives to the output file (this is
17622 the default).
17623 .IP "\fB\-YP,\fR\fIdirs\fR" 4
17624 .IX Item "-YP,dirs"
17625 Search the directories \fIdirs\fR, and no others, for libraries
17626 specified with \fB\-l\fR.
17627 .IP "\fB\-Ym,\fR\fIdir\fR" 4
17628 .IX Item "-Ym,dir"
17629 Look in the directory \fIdir\fR to find the M4 preprocessor.
17630 The assembler uses this option.
17631 .PP
17632 \fITILE-Gx Options\fR
17633 .IX Subsection "TILE-Gx Options"
17634 .PP
17635 These \fB\-m\fR options are supported on the TILE-Gx:
17636 .IP "\fB\-mcpu=\fR\fIname\fR" 4
17637 .IX Item "-mcpu=name"
17638 Selects the type of \s-1CPU\s0 to be targeted.  Currently the only supported
17639 type is \fBtilegx\fR.
17640 .IP "\fB\-m32\fR" 4
17641 .IX Item "-m32"
17642 .PD 0
17643 .IP "\fB\-m64\fR" 4
17644 .IX Item "-m64"
17645 .PD
17646 Generate code for a 32\-bit or 64\-bit environment.  The 32\-bit
17647 environment sets int, long, and pointer to 32 bits.  The 64\-bit
17648 environment sets int to 32 bits and long and pointer to 64 bits.
17649 .PP
17650 \fITILEPro Options\fR
17651 .IX Subsection "TILEPro Options"
17652 .PP
17653 These \fB\-m\fR options are supported on the TILEPro:
17654 .IP "\fB\-mcpu=\fR\fIname\fR" 4
17655 .IX Item "-mcpu=name"
17656 Selects the type of \s-1CPU\s0 to be targeted.  Currently the only supported
17657 type is \fBtilepro\fR.
17658 .IP "\fB\-m32\fR" 4
17659 .IX Item "-m32"
17660 Generate code for a 32\-bit environment, which sets int, long, and
17661 pointer to 32 bits.  This is the only supported behavior so the flag
17662 is essentially ignored.
17663 .PP
17664 \fIV850 Options\fR
17665 .IX Subsection "V850 Options"
17666 .PP
17667 These \fB\-m\fR options are defined for V850 implementations:
17668 .IP "\fB\-mlong\-calls\fR" 4
17669 .IX Item "-mlong-calls"
17670 .PD 0
17671 .IP "\fB\-mno\-long\-calls\fR" 4
17672 .IX Item "-mno-long-calls"
17673 .PD
17674 Treat all calls as being far away (near).  If calls are assumed to be
17675 far away, the compiler will always load the functions address up into a
17676 register, and call indirect through the pointer.
17677 .IP "\fB\-mno\-ep\fR" 4
17678 .IX Item "-mno-ep"
17679 .PD 0
17680 .IP "\fB\-mep\fR" 4
17681 .IX Item "-mep"
17682 .PD
17683 Do not optimize (do optimize) basic blocks that use the same index
17684 pointer 4 or more times to copy pointer into the \f(CW\*(C`ep\*(C'\fR register, and
17685 use the shorter \f(CW\*(C`sld\*(C'\fR and \f(CW\*(C`sst\*(C'\fR instructions.  The \fB\-mep\fR
17686 option is on by default if you optimize.
17687 .IP "\fB\-mno\-prolog\-function\fR" 4
17688 .IX Item "-mno-prolog-function"
17689 .PD 0
17690 .IP "\fB\-mprolog\-function\fR" 4
17691 .IX Item "-mprolog-function"
17692 .PD
17693 Do not use (do use) external functions to save and restore registers
17694 at the prologue and epilogue of a function.  The external functions
17695 are slower, but use less code space if more than one function saves
17696 the same number of registers.  The \fB\-mprolog\-function\fR option
17697 is on by default if you optimize.
17698 .IP "\fB\-mspace\fR" 4
17699 .IX Item "-mspace"
17700 Try to make the code as small as possible.  At present, this just turns
17701 on the \fB\-mep\fR and \fB\-mprolog\-function\fR options.
17702 .IP "\fB\-mtda=\fR\fIn\fR" 4
17703 .IX Item "-mtda=n"
17704 Put static or global variables whose size is \fIn\fR bytes or less into
17705 the tiny data area that register \f(CW\*(C`ep\*(C'\fR points to.  The tiny data
17706 area can hold up to 256 bytes in total (128 bytes for byte references).
17707 .IP "\fB\-msda=\fR\fIn\fR" 4
17708 .IX Item "-msda=n"
17709 Put static or global variables whose size is \fIn\fR bytes or less into
17710 the small data area that register \f(CW\*(C`gp\*(C'\fR points to.  The small data
17711 area can hold up to 64 kilobytes.
17712 .IP "\fB\-mzda=\fR\fIn\fR" 4
17713 .IX Item "-mzda=n"
17714 Put static or global variables whose size is \fIn\fR bytes or less into
17715 the first 32 kilobytes of memory.
17716 .IP "\fB\-mv850\fR" 4
17717 .IX Item "-mv850"
17718 Specify that the target processor is the V850.
17719 .IP "\fB\-mbig\-switch\fR" 4
17720 .IX Item "-mbig-switch"
17721 Generate code suitable for big switch tables.  Use this option only if
17722 the assembler/linker complain about out of range branches within a switch
17723 table.
17724 .IP "\fB\-mapp\-regs\fR" 4
17725 .IX Item "-mapp-regs"
17726 This option will cause r2 and r5 to be used in the code generated by
17727 the compiler.  This setting is the default.
17728 .IP "\fB\-mno\-app\-regs\fR" 4
17729 .IX Item "-mno-app-regs"
17730 This option will cause r2 and r5 to be treated as fixed registers.
17731 .IP "\fB\-mv850e2v3\fR" 4
17732 .IX Item "-mv850e2v3"
17733 Specify that the target processor is the V850E2V3.  The preprocessor
17734 constants \fB_\|_v850e2v3_\|_\fR will be defined if
17735 this option is used.
17736 .IP "\fB\-mv850e2\fR" 4
17737 .IX Item "-mv850e2"
17738 Specify that the target processor is the V850E2.  The preprocessor
17739 constants \fB_\|_v850e2_\|_\fR will be defined if this option is used.
17740 .IP "\fB\-mv850e1\fR" 4
17741 .IX Item "-mv850e1"
17742 Specify that the target processor is the V850E1.  The preprocessor
17743 constants \fB_\|_v850e1_\|_\fR and \fB_\|_v850e_\|_\fR will be defined if
17744 this option is used.
17745 .IP "\fB\-mv850es\fR" 4
17746 .IX Item "-mv850es"
17747 Specify that the target processor is the V850ES.  This is an alias for
17748 the \fB\-mv850e1\fR option.
17749 .IP "\fB\-mv850e\fR" 4
17750 .IX Item "-mv850e"
17751 Specify that the target processor is the V850E.  The preprocessor
17752 constant \fB_\|_v850e_\|_\fR will be defined if this option is used.
17753 .Sp
17754 If neither \fB\-mv850\fR nor \fB\-mv850e\fR nor \fB\-mv850e1\fR
17755 nor \fB\-mv850e2\fR nor \fB\-mv850e2v3\fR
17756 are defined then a default target processor will be chosen and the
17757 relevant \fB_\|_v850*_\|_\fR preprocessor constant will be defined.
17758 .Sp
17759 The preprocessor constants \fB_\|_v850\fR and \fB_\|_v851_\|_\fR are always
17760 defined, regardless of which processor variant is the target.
17761 .IP "\fB\-mdisable\-callt\fR" 4
17762 .IX Item "-mdisable-callt"
17763 This option will suppress generation of the \s-1CALLT\s0 instruction for the
17764 v850e, v850e1, v850e2 and v850e2v3 flavors of the v850 architecture.  The default is
17765 \&\fB\-mno\-disable\-callt\fR which allows the \s-1CALLT\s0 instruction to be used.
17766 .PP
17767 \fI\s-1VAX\s0 Options\fR
17768 .IX Subsection "VAX Options"
17769 .PP
17770 These \fB\-m\fR options are defined for the \s-1VAX:\s0
17771 .IP "\fB\-munix\fR" 4
17772 .IX Item "-munix"
17773 Do not output certain jump instructions (\f(CW\*(C`aobleq\*(C'\fR and so on)
17774 that the Unix assembler for the \s-1VAX\s0 cannot handle across long
17775 ranges.
17776 .IP "\fB\-mgnu\fR" 4
17777 .IX Item "-mgnu"
17778 Do output those jump instructions, on the assumption that you
17779 will assemble with the \s-1GNU\s0 assembler.
17780 .IP "\fB\-mg\fR" 4
17781 .IX Item "-mg"
17782 Output code for G\-format floating-point numbers instead of D\-format.
17783 .PP
17784 \fIVxWorks Options\fR
17785 .IX Subsection "VxWorks Options"
17786 .PP
17787 The options in this section are defined for all VxWorks targets.
17788 Options specific to the target hardware are listed with the other
17789 options for that target.
17790 .IP "\fB\-mrtp\fR" 4
17791 .IX Item "-mrtp"
17792 \&\s-1GCC\s0 can generate code for both VxWorks kernels and real time processes
17793 (RTPs).  This option switches from the former to the latter.  It also
17794 defines the preprocessor macro \f(CW\*(C`_\|_RTP_\|_\*(C'\fR.
17795 .IP "\fB\-non\-static\fR" 4
17796 .IX Item "-non-static"
17797 Link an \s-1RTP\s0 executable against shared libraries rather than static
17798 libraries.  The options \fB\-static\fR and \fB\-shared\fR can
17799 also be used for RTPs; \fB\-static\fR
17800 is the default.
17801 .IP "\fB\-Bstatic\fR" 4
17802 .IX Item "-Bstatic"
17803 .PD 0
17804 .IP "\fB\-Bdynamic\fR" 4
17805 .IX Item "-Bdynamic"
17806 .PD
17807 These options are passed down to the linker.  They are defined for
17808 compatibility with Diab.
17809 .IP "\fB\-Xbind\-lazy\fR" 4
17810 .IX Item "-Xbind-lazy"
17811 Enable lazy binding of function calls.  This option is equivalent to
17812 \&\fB\-Wl,\-z,now\fR and is defined for compatibility with Diab.
17813 .IP "\fB\-Xbind\-now\fR" 4
17814 .IX Item "-Xbind-now"
17815 Disable lazy binding of function calls.  This option is the default and
17816 is defined for compatibility with Diab.
17817 .PP
17818 \fIx86\-64 Options\fR
17819 .IX Subsection "x86-64 Options"
17820 .PP
17821 These are listed under
17822 .PP
17823 \fIXstormy16 Options\fR
17824 .IX Subsection "Xstormy16 Options"
17825 .PP
17826 These options are defined for Xstormy16:
17827 .IP "\fB\-msim\fR" 4
17828 .IX Item "-msim"
17829 Choose startup files and linker script suitable for the simulator.
17830 .PP
17831 \fIXtensa Options\fR
17832 .IX Subsection "Xtensa Options"
17833 .PP
17834 These options are supported for Xtensa targets:
17835 .IP "\fB\-mconst16\fR" 4
17836 .IX Item "-mconst16"
17837 .PD 0
17838 .IP "\fB\-mno\-const16\fR" 4
17839 .IX Item "-mno-const16"
17840 .PD
17841 Enable or disable use of \f(CW\*(C`CONST16\*(C'\fR instructions for loading
17842 constant values.  The \f(CW\*(C`CONST16\*(C'\fR instruction is currently not a
17843 standard option from Tensilica.  When enabled, \f(CW\*(C`CONST16\*(C'\fR
17844 instructions are always used in place of the standard \f(CW\*(C`L32R\*(C'\fR
17845 instructions.  The use of \f(CW\*(C`CONST16\*(C'\fR is enabled by default only if
17846 the \f(CW\*(C`L32R\*(C'\fR instruction is not available.
17847 .IP "\fB\-mfused\-madd\fR" 4
17848 .IX Item "-mfused-madd"
17849 .PD 0
17850 .IP "\fB\-mno\-fused\-madd\fR" 4
17851 .IX Item "-mno-fused-madd"
17852 .PD
17853 Enable or disable use of fused multiply/add and multiply/subtract
17854 instructions in the floating-point option.  This has no effect if the
17855 floating-point option is not also enabled.  Disabling fused multiply/add
17856 and multiply/subtract instructions forces the compiler to use separate
17857 instructions for the multiply and add/subtract operations.  This may be
17858 desirable in some cases where strict \s-1IEEE\s0 754\-compliant results are
17859 required: the fused multiply add/subtract instructions do not round the
17860 intermediate result, thereby producing results with \fImore\fR bits of
17861 precision than specified by the \s-1IEEE\s0 standard.  Disabling fused multiply
17862 add/subtract instructions also ensures that the program output is not
17863 sensitive to the compiler's ability to combine multiply and add/subtract
17864 operations.
17865 .IP "\fB\-mserialize\-volatile\fR" 4
17866 .IX Item "-mserialize-volatile"
17867 .PD 0
17868 .IP "\fB\-mno\-serialize\-volatile\fR" 4
17869 .IX Item "-mno-serialize-volatile"
17870 .PD
17871 When this option is enabled, \s-1GCC\s0 inserts \f(CW\*(C`MEMW\*(C'\fR instructions before
17872 \&\f(CW\*(C`volatile\*(C'\fR memory references to guarantee sequential consistency.
17873 The default is \fB\-mserialize\-volatile\fR.  Use
17874 \&\fB\-mno\-serialize\-volatile\fR to omit the \f(CW\*(C`MEMW\*(C'\fR instructions.
17875 .IP "\fB\-mforce\-no\-pic\fR" 4
17876 .IX Item "-mforce-no-pic"
17877 For targets, like GNU/Linux, where all user-mode Xtensa code must be
17878 position-independent code (\s-1PIC\s0), this option disables \s-1PIC\s0 for compiling
17879 kernel code.
17880 .IP "\fB\-mtext\-section\-literals\fR" 4
17881 .IX Item "-mtext-section-literals"
17882 .PD 0
17883 .IP "\fB\-mno\-text\-section\-literals\fR" 4
17884 .IX Item "-mno-text-section-literals"
17885 .PD
17886 Control the treatment of literal pools.  The default is
17887 \&\fB\-mno\-text\-section\-literals\fR, which places literals in a separate
17888 section in the output file.  This allows the literal pool to be placed
17889 in a data \s-1RAM/ROM\s0, and it also allows the linker to combine literal
17890 pools from separate object files to remove redundant literals and
17891 improve code size.  With \fB\-mtext\-section\-literals\fR, the literals
17892 are interspersed in the text section in order to keep them as close as
17893 possible to their references.  This may be necessary for large assembly
17894 files.
17895 .IP "\fB\-mtarget\-align\fR" 4
17896 .IX Item "-mtarget-align"
17897 .PD 0
17898 .IP "\fB\-mno\-target\-align\fR" 4
17899 .IX Item "-mno-target-align"
17900 .PD
17901 When this option is enabled, \s-1GCC\s0 instructs the assembler to
17902 automatically align instructions to reduce branch penalties at the
17903 expense of some code density.  The assembler attempts to widen density
17904 instructions to align branch targets and the instructions following call
17905 instructions.  If there are not enough preceding safe density
17906 instructions to align a target, no widening will be performed.  The
17907 default is \fB\-mtarget\-align\fR.  These options do not affect the
17908 treatment of auto-aligned instructions like \f(CW\*(C`LOOP\*(C'\fR, which the
17909 assembler will always align, either by widening density instructions or
17910 by inserting no-op instructions.
17911 .IP "\fB\-mlongcalls\fR" 4
17912 .IX Item "-mlongcalls"
17913 .PD 0
17914 .IP "\fB\-mno\-longcalls\fR" 4
17915 .IX Item "-mno-longcalls"
17916 .PD
17917 When this option is enabled, \s-1GCC\s0 instructs the assembler to translate
17918 direct calls to indirect calls unless it can determine that the target
17919 of a direct call is in the range allowed by the call instruction.  This
17920 translation typically occurs for calls to functions in other source
17921 files.  Specifically, the assembler translates a direct \f(CW\*(C`CALL\*(C'\fR
17922 instruction into an \f(CW\*(C`L32R\*(C'\fR followed by a \f(CW\*(C`CALLX\*(C'\fR instruction.
17923 The default is \fB\-mno\-longcalls\fR.  This option should be used in
17924 programs where the call target can potentially be out of range.  This
17925 option is implemented in the assembler, not the compiler, so the
17926 assembly code generated by \s-1GCC\s0 will still show direct call
17927 instructions\-\-\-look at the disassembled object code to see the actual
17928 instructions.  Note that the assembler will use an indirect call for
17929 every cross-file call, not just those that really will be out of range.
17930 .PP
17931 \fIzSeries Options\fR
17932 .IX Subsection "zSeries Options"
17933 .PP
17934 These are listed under
17935 .SS "Options for Code Generation Conventions"
17936 .IX Subsection "Options for Code Generation Conventions"
17937 These machine-independent options control the interface conventions
17938 used in code generation.
17939 .PP
17940 Most of them have both positive and negative forms; the negative form
17941 of \fB\-ffoo\fR would be \fB\-fno\-foo\fR.  In the table below, only
17942 one of the forms is listed\-\-\-the one that is not the default.  You
17943 can figure out the other form by either removing \fBno\-\fR or adding
17944 it.
17945 .IP "\fB\-fbounds\-check\fR" 4
17946 .IX Item "-fbounds-check"
17947 For front ends that support it, generate additional code to check that
17948 indices used to access arrays are within the declared range.  This is
17949 currently only supported by the Java and Fortran front ends, where
17950 this option defaults to true and false respectively.
17951 .IP "\fB\-ftrapv\fR" 4
17952 .IX Item "-ftrapv"
17953 This option generates traps for signed overflow on addition, subtraction,
17954 multiplication operations.
17955 .IP "\fB\-fwrapv\fR" 4
17956 .IX Item "-fwrapv"
17957 This option instructs the compiler to assume that signed arithmetic
17958 overflow of addition, subtraction and multiplication wraps around
17959 using twos-complement representation.  This flag enables some optimizations
17960 and disables others.  This option is enabled by default for the Java
17961 front end, as required by the Java language specification.
17962 .IP "\fB\-fexceptions\fR" 4
17963 .IX Item "-fexceptions"
17964 Enable exception handling.  Generates extra code needed to propagate
17965 exceptions.  For some targets, this implies \s-1GCC\s0 will generate frame
17966 unwind information for all functions, which can produce significant data
17967 size overhead, although it does not affect execution.  If you do not
17968 specify this option, \s-1GCC\s0 will enable it by default for languages like
17969 \&\*(C+ that normally require exception handling, and disable it for
17970 languages like C that do not normally require it.  However, you may need
17971 to enable this option when compiling C code that needs to interoperate
17972 properly with exception handlers written in \*(C+.  You may also wish to
17973 disable this option if you are compiling older \*(C+ programs that don't
17974 use exception handling.
17975 .IP "\fB\-fnon\-call\-exceptions\fR" 4
17976 .IX Item "-fnon-call-exceptions"
17977 Generate code that allows trapping instructions to throw exceptions.
17978 Note that this requires platform-specific runtime support that does
17979 not exist everywhere.  Moreover, it only allows \fItrapping\fR
17980 instructions to throw exceptions, i.e. memory references or floating-point
17981 instructions.  It does not allow exceptions to be thrown from
17982 arbitrary signal handlers such as \f(CW\*(C`SIGALRM\*(C'\fR.
17983 .IP "\fB\-funwind\-tables\fR" 4
17984 .IX Item "-funwind-tables"
17985 Similar to \fB\-fexceptions\fR, except that it will just generate any needed
17986 static data, but will not affect the generated code in any other way.
17987 You will normally not enable this option; instead, a language processor
17988 that needs this handling would enable it on your behalf.
17989 .IP "\fB\-fasynchronous\-unwind\-tables\fR" 4
17990 .IX Item "-fasynchronous-unwind-tables"
17991 Generate unwind table in dwarf2 format, if supported by target machine.  The
17992 table is exact at each instruction boundary, so it can be used for stack
17993 unwinding from asynchronous events (such as debugger or garbage collector).
17994 .IP "\fB\-fpcc\-struct\-return\fR" 4
17995 .IX Item "-fpcc-struct-return"
17996 Return \*(L"short\*(R" \f(CW\*(C`struct\*(C'\fR and \f(CW\*(C`union\*(C'\fR values in memory like
17997 longer ones, rather than in registers.  This convention is less
17998 efficient, but it has the advantage of allowing intercallability between
17999 GCC-compiled files and files compiled with other compilers, particularly
18000 the Portable C Compiler (pcc).
18001 .Sp
18002 The precise convention for returning structures in memory depends
18003 on the target configuration macros.
18004 .Sp
18005 Short structures and unions are those whose size and alignment match
18006 that of some integer type.
18007 .Sp
18008 \&\fBWarning:\fR code compiled with the \fB\-fpcc\-struct\-return\fR
18009 switch is not binary compatible with code compiled with the
18010 \&\fB\-freg\-struct\-return\fR switch.
18011 Use it to conform to a non-default application binary interface.
18012 .IP "\fB\-freg\-struct\-return\fR" 4
18013 .IX Item "-freg-struct-return"
18014 Return \f(CW\*(C`struct\*(C'\fR and \f(CW\*(C`union\*(C'\fR values in registers when possible.
18015 This is more efficient for small structures than
18016 \&\fB\-fpcc\-struct\-return\fR.
18017 .Sp
18018 If you specify neither \fB\-fpcc\-struct\-return\fR nor
18019 \&\fB\-freg\-struct\-return\fR, \s-1GCC\s0 defaults to whichever convention is
18020 standard for the target.  If there is no standard convention, \s-1GCC\s0
18021 defaults to \fB\-fpcc\-struct\-return\fR, except on targets where \s-1GCC\s0 is
18022 the principal compiler.  In those cases, we can choose the standard, and
18023 we chose the more efficient register return alternative.
18024 .Sp
18025 \&\fBWarning:\fR code compiled with the \fB\-freg\-struct\-return\fR
18026 switch is not binary compatible with code compiled with the
18027 \&\fB\-fpcc\-struct\-return\fR switch.
18028 Use it to conform to a non-default application binary interface.
18029 .IP "\fB\-fshort\-enums\fR" 4
18030 .IX Item "-fshort-enums"
18031 Allocate to an \f(CW\*(C`enum\*(C'\fR type only as many bytes as it needs for the
18032 declared range of possible values.  Specifically, the \f(CW\*(C`enum\*(C'\fR type
18033 will be equivalent to the smallest integer type that has enough room.
18034 .Sp
18035 \&\fBWarning:\fR the \fB\-fshort\-enums\fR switch causes \s-1GCC\s0 to generate
18036 code that is not binary compatible with code generated without that switch.
18037 Use it to conform to a non-default application binary interface.
18038 .IP "\fB\-fshort\-double\fR" 4
18039 .IX Item "-fshort-double"
18040 Use the same size for \f(CW\*(C`double\*(C'\fR as for \f(CW\*(C`float\*(C'\fR.
18041 .Sp
18042 \&\fBWarning:\fR the \fB\-fshort\-double\fR switch causes \s-1GCC\s0 to generate
18043 code that is not binary compatible with code generated without that switch.
18044 Use it to conform to a non-default application binary interface.
18045 .IP "\fB\-fshort\-wchar\fR" 4
18046 .IX Item "-fshort-wchar"
18047 Override the underlying type for \fBwchar_t\fR to be \fBshort
18048 unsigned int\fR instead of the default for the target.  This option is
18049 useful for building programs to run under \s-1WINE\s0.
18050 .Sp
18051 \&\fBWarning:\fR the \fB\-fshort\-wchar\fR switch causes \s-1GCC\s0 to generate
18052 code that is not binary compatible with code generated without that switch.
18053 Use it to conform to a non-default application binary interface.
18054 .IP "\fB\-fno\-common\fR" 4
18055 .IX Item "-fno-common"
18056 In C code, controls the placement of uninitialized global variables.
18057 Unix C compilers have traditionally permitted multiple definitions of
18058 such variables in different compilation units by placing the variables
18059 in a common block.
18060 This is the behavior specified by \fB\-fcommon\fR, and is the default
18061 for \s-1GCC\s0 on most targets.
18062 On the other hand, this behavior is not required by \s-1ISO\s0 C, and on some
18063 targets may carry a speed or code size penalty on variable references.
18064 The \fB\-fno\-common\fR option specifies that the compiler should place
18065 uninitialized global variables in the data section of the object file,
18066 rather than generating them as common blocks.
18067 This has the effect that if the same variable is declared
18068 (without \f(CW\*(C`extern\*(C'\fR) in two different compilations,
18069 you will get a multiple-definition error when you link them.
18070 In this case, you must compile with \fB\-fcommon\fR instead.
18071 Compiling with \fB\-fno\-common\fR is useful on targets for which
18072 it provides better performance, or if you wish to verify that the
18073 program will work on other systems that always treat uninitialized
18074 variable declarations this way.
18075 .IP "\fB\-fno\-ident\fR" 4
18076 .IX Item "-fno-ident"
18077 Ignore the \fB#ident\fR directive.
18078 .IP "\fB\-finhibit\-size\-directive\fR" 4
18079 .IX Item "-finhibit-size-directive"
18080 Don't output a \f(CW\*(C`.size\*(C'\fR assembler directive, or anything else that
18081 would cause trouble if the function is split in the middle, and the
18082 two halves are placed at locations far apart in memory.  This option is
18083 used when compiling \fIcrtstuff.c\fR; you should not need to use it
18084 for anything else.
18085 .IP "\fB\-fverbose\-asm\fR" 4
18086 .IX Item "-fverbose-asm"
18087 Put extra commentary information in the generated assembly code to
18088 make it more readable.  This option is generally only of use to those
18089 who actually need to read the generated assembly code (perhaps while
18090 debugging the compiler itself).
18091 .Sp
18092 \&\fB\-fno\-verbose\-asm\fR, the default, causes the
18093 extra information to be omitted and is useful when comparing two assembler
18094 files.
18095 .IP "\fB\-frecord\-gcc\-switches\fR" 4
18096 .IX Item "-frecord-gcc-switches"
18097 This switch causes the command line that was used to invoke the
18098 compiler to be recorded into the object file that is being created.
18099 This switch is only implemented on some targets and the exact format
18100 of the recording is target and binary file format dependent, but it
18101 usually takes the form of a section containing \s-1ASCII\s0 text.  This
18102 switch is related to the \fB\-fverbose\-asm\fR switch, but that
18103 switch only records information in the assembler output file as
18104 comments, so it never reaches the object file.
18105 See also \fB\-grecord\-gcc\-switches\fR for another
18106 way of storing compiler options into the object file.
18107 .IP "\fB\-fpic\fR" 4
18108 .IX Item "-fpic"
18109 Generate position-independent code (\s-1PIC\s0) suitable for use in a shared
18110 library, if supported for the target machine.  Such code accesses all
18111 constant addresses through a global offset table (\s-1GOT\s0).  The dynamic
18112 loader resolves the \s-1GOT\s0 entries when the program starts (the dynamic
18113 loader is not part of \s-1GCC\s0; it is part of the operating system).  If
18114 the \s-1GOT\s0 size for the linked executable exceeds a machine-specific
18115 maximum size, you get an error message from the linker indicating that
18116 \&\fB\-fpic\fR does not work; in that case, recompile with \fB\-fPIC\fR
18117 instead.  (These maximums are 8k on the \s-1SPARC\s0 and 32k
18118 on the m68k and \s-1RS/6000\s0.  The 386 has no such limit.)
18119 .Sp
18120 Position-independent code requires special support, and therefore works
18121 only on certain machines.  For the 386, \s-1GCC\s0 supports \s-1PIC\s0 for System V
18122 but not for the Sun 386i.  Code generated for the \s-1IBM\s0 \s-1RS/6000\s0 is always
18123 position-independent.
18124 .Sp
18125 When this flag is set, the macros \f(CW\*(C`_\|_pic_\|_\*(C'\fR and \f(CW\*(C`_\|_PIC_\|_\*(C'\fR
18126 are defined to 1.
18127 .IP "\fB\-fPIC\fR" 4
18128 .IX Item "-fPIC"
18129 If supported for the target machine, emit position-independent code,
18130 suitable for dynamic linking and avoiding any limit on the size of the
18131 global offset table.  This option makes a difference on the m68k,
18132 PowerPC and \s-1SPARC\s0.
18133 .Sp
18134 Position-independent code requires special support, and therefore works
18135 only on certain machines.
18136 .Sp
18137 When this flag is set, the macros \f(CW\*(C`_\|_pic_\|_\*(C'\fR and \f(CW\*(C`_\|_PIC_\|_\*(C'\fR
18138 are defined to 2.
18139 .IP "\fB\-fpie\fR" 4
18140 .IX Item "-fpie"
18141 .PD 0
18142 .IP "\fB\-fPIE\fR" 4
18143 .IX Item "-fPIE"
18144 .PD
18145 These options are similar to \fB\-fpic\fR and \fB\-fPIC\fR, but
18146 generated position independent code can be only linked into executables.
18147 Usually these options are used when \fB\-pie\fR \s-1GCC\s0 option will be
18148 used during linking.
18149 .Sp
18150 \&\fB\-fpie\fR and \fB\-fPIE\fR both define the macros
18151 \&\f(CW\*(C`_\|_pie_\|_\*(C'\fR and \f(CW\*(C`_\|_PIE_\|_\*(C'\fR.  The macros have the value 1
18152 for \fB\-fpie\fR and 2 for \fB\-fPIE\fR.
18153 .IP "\fB\-fno\-jump\-tables\fR" 4
18154 .IX Item "-fno-jump-tables"
18155 Do not use jump tables for switch statements even where it would be
18156 more efficient than other code generation strategies.  This option is
18157 of use in conjunction with \fB\-fpic\fR or \fB\-fPIC\fR for
18158 building code that forms part of a dynamic linker and cannot
18159 reference the address of a jump table.  On some targets, jump tables
18160 do not require a \s-1GOT\s0 and this option is not needed.
18161 .IP "\fB\-ffixed\-\fR\fIreg\fR" 4
18162 .IX Item "-ffixed-reg"
18163 Treat the register named \fIreg\fR as a fixed register; generated code
18164 should never refer to it (except perhaps as a stack pointer, frame
18165 pointer or in some other fixed role).
18166 .Sp
18167 \&\fIreg\fR must be the name of a register.  The register names accepted
18168 are machine-specific and are defined in the \f(CW\*(C`REGISTER_NAMES\*(C'\fR
18169 macro in the machine description macro file.
18170 .Sp
18171 This flag does not have a negative form, because it specifies a
18172 three-way choice.
18173 .IP "\fB\-fcall\-used\-\fR\fIreg\fR" 4
18174 .IX Item "-fcall-used-reg"
18175 Treat the register named \fIreg\fR as an allocable register that is
18176 clobbered by function calls.  It may be allocated for temporaries or
18177 variables that do not live across a call.  Functions compiled this way
18178 will not save and restore the register \fIreg\fR.
18179 .Sp
18180 It is an error to used this flag with the frame pointer or stack pointer.
18181 Use of this flag for other registers that have fixed pervasive roles in
18182 the machine's execution model will produce disastrous results.
18183 .Sp
18184 This flag does not have a negative form, because it specifies a
18185 three-way choice.
18186 .IP "\fB\-fcall\-saved\-\fR\fIreg\fR" 4
18187 .IX Item "-fcall-saved-reg"
18188 Treat the register named \fIreg\fR as an allocable register saved by
18189 functions.  It may be allocated even for temporaries or variables that
18190 live across a call.  Functions compiled this way will save and restore
18191 the register \fIreg\fR if they use it.
18192 .Sp
18193 It is an error to used this flag with the frame pointer or stack pointer.
18194 Use of this flag for other registers that have fixed pervasive roles in
18195 the machine's execution model will produce disastrous results.
18196 .Sp
18197 A different sort of disaster will result from the use of this flag for
18198 a register in which function values may be returned.
18199 .Sp
18200 This flag does not have a negative form, because it specifies a
18201 three-way choice.
18202 .IP "\fB\-fpack\-struct[=\fR\fIn\fR\fB]\fR" 4
18203 .IX Item "-fpack-struct[=n]"
18204 Without a value specified, pack all structure members together without
18205 holes.  When a value is specified (which must be a small power of two), pack
18206 structure members according to this value, representing the maximum
18207 alignment (that is, objects with default alignment requirements larger than
18208 this will be output potentially unaligned at the next fitting location.
18209 .Sp
18210 \&\fBWarning:\fR the \fB\-fpack\-struct\fR switch causes \s-1GCC\s0 to generate
18211 code that is not binary compatible with code generated without that switch.
18212 Additionally, it makes the code suboptimal.
18213 Use it to conform to a non-default application binary interface.
18214 .IP "\fB\-finstrument\-functions\fR" 4
18215 .IX Item "-finstrument-functions"
18216 Generate instrumentation calls for entry and exit to functions.  Just
18217 after function entry and just before function exit, the following
18218 profiling functions will be called with the address of the current
18219 function and its call site.  (On some platforms,
18220 \&\f(CW\*(C`_\|_builtin_return_address\*(C'\fR does not work beyond the current
18221 function, so the call site information may not be available to the
18222 profiling functions otherwise.)
18223 .Sp
18224 .Vb 4
18225 \&        void _\|_cyg_profile_func_enter (void *this_fn,
18226 \&                                       void *call_site);
18227 \&        void _\|_cyg_profile_func_exit  (void *this_fn,
18228 \&                                       void *call_site);
18229 .Ve
18230 .Sp
18231 The first argument is the address of the start of the current function,
18232 which may be looked up exactly in the symbol table.
18233 .Sp
18234 This instrumentation is also done for functions expanded inline in other
18235 functions.  The profiling calls will indicate where, conceptually, the
18236 inline function is entered and exited.  This means that addressable
18237 versions of such functions must be available.  If all your uses of a
18238 function are expanded inline, this may mean an additional expansion of
18239 code size.  If you use \fBextern inline\fR in your C code, an
18240 addressable version of such functions must be provided.  (This is
18241 normally the case anyways, but if you get lucky and the optimizer always
18242 expands the functions inline, you might have gotten away without
18243 providing static copies.)
18244 .Sp
18245 A function may be given the attribute \f(CW\*(C`no_instrument_function\*(C'\fR, in
18246 which case this instrumentation will not be done.  This can be used, for
18247 example, for the profiling functions listed above, high-priority
18248 interrupt routines, and any functions from which the profiling functions
18249 cannot safely be called (perhaps signal handlers, if the profiling
18250 routines generate output or allocate memory).
18251 .IP "\fB\-finstrument\-functions\-exclude\-file\-list=\fR\fIfile\fR\fB,\fR\fIfile\fR\fB,...\fR" 4
18252 .IX Item "-finstrument-functions-exclude-file-list=file,file,..."
18253 Set the list of functions that are excluded from instrumentation (see
18254 the description of \f(CW\*(C`\-finstrument\-functions\*(C'\fR).  If the file that
18255 contains a function definition matches with one of \fIfile\fR, then
18256 that function is not instrumented.  The match is done on substrings:
18257 if the \fIfile\fR parameter is a substring of the file name, it is
18258 considered to be a match.
18259 .Sp
18260 For example:
18261 .Sp
18262 .Vb 1
18263 \&        \-finstrument\-functions\-exclude\-file\-list=/bits/stl,include/sys
18264 .Ve
18265 .Sp
18266 will exclude any inline function defined in files whose pathnames
18267 contain \f(CW\*(C`/bits/stl\*(C'\fR or \f(CW\*(C`include/sys\*(C'\fR.
18268 .Sp
18269 If, for some reason, you want to include letter \f(CW\*(Aq,\*(Aq\fR in one of
18270 \&\fIsym\fR, write \f(CW\*(Aq,\*(Aq\fR. For example,
18271 \&\f(CW\*(C`\-finstrument\-functions\-exclude\-file\-list=\*(Aq,,tmp\*(Aq\*(C'\fR
18272 (note the single quote surrounding the option).
18273 .IP "\fB\-finstrument\-functions\-exclude\-function\-list=\fR\fIsym\fR\fB,\fR\fIsym\fR\fB,...\fR" 4
18274 .IX Item "-finstrument-functions-exclude-function-list=sym,sym,..."
18275 This is similar to \f(CW\*(C`\-finstrument\-functions\-exclude\-file\-list\*(C'\fR,
18276 but this option sets the list of function names to be excluded from
18277 instrumentation.  The function name to be matched is its user-visible
18278 name, such as \f(CW\*(C`vector<int> blah(const vector<int> &)\*(C'\fR, not the
18279 internal mangled name (e.g., \f(CW\*(C`_Z4blahRSt6vectorIiSaIiEE\*(C'\fR).  The
18280 match is done on substrings: if the \fIsym\fR parameter is a substring
18281 of the function name, it is considered to be a match.  For C99 and \*(C+
18282 extended identifiers, the function name must be given in \s-1UTF\-8\s0, not
18283 using universal character names.
18284 .IP "\fB\-fstack\-check\fR" 4
18285 .IX Item "-fstack-check"
18286 Generate code to verify that you do not go beyond the boundary of the
18287 stack.  You should specify this flag if you are running in an
18288 environment with multiple threads, but only rarely need to specify it in
18289 a single-threaded environment since stack overflow is automatically
18290 detected on nearly all systems if there is only one stack.
18291 .Sp
18292 Note that this switch does not actually cause checking to be done; the
18293 operating system or the language runtime must do that.  The switch causes
18294 generation of code to ensure that they see the stack being extended.
18295 .Sp
18296 You can additionally specify a string parameter: \f(CW\*(C`no\*(C'\fR means no
18297 checking, \f(CW\*(C`generic\*(C'\fR means force the use of old-style checking,
18298 \&\f(CW\*(C`specific\*(C'\fR means use the best checking method and is equivalent
18299 to bare \fB\-fstack\-check\fR.
18300 .Sp
18301 Old-style checking is a generic mechanism that requires no specific
18302 target support in the compiler but comes with the following drawbacks:
18303 .RS 4
18304 .IP "1." 4
18305 Modified allocation strategy for large objects: they will always be
18306 allocated dynamically if their size exceeds a fixed threshold.
18307 .IP "2." 4
18308 Fixed limit on the size of the static frame of functions: when it is
18309 topped by a particular function, stack checking is not reliable and
18310 a warning is issued by the compiler.
18311 .IP "3." 4
18312 Inefficiency: because of both the modified allocation strategy and the
18313 generic implementation, the performances of the code are hampered.
18314 .RE
18315 .RS 4
18316 .Sp
18317 Note that old-style stack checking is also the fallback method for
18318 \&\f(CW\*(C`specific\*(C'\fR if no target support has been added in the compiler.
18319 .RE
18320 .IP "\fB\-fstack\-limit\-register=\fR\fIreg\fR" 4
18321 .IX Item "-fstack-limit-register=reg"
18322 .PD 0
18323 .IP "\fB\-fstack\-limit\-symbol=\fR\fIsym\fR" 4
18324 .IX Item "-fstack-limit-symbol=sym"
18325 .IP "\fB\-fno\-stack\-limit\fR" 4
18326 .IX Item "-fno-stack-limit"
18327 .PD
18328 Generate code to ensure that the stack does not grow beyond a certain value,
18329 either the value of a register or the address of a symbol.  If the stack
18330 would grow beyond the value, a signal is raised.  For most targets,
18331 the signal is raised before the stack overruns the boundary, so
18332 it is possible to catch the signal without taking special precautions.
18333 .Sp
18334 For instance, if the stack starts at absolute address \fB0x80000000\fR
18335 and grows downwards, you can use the flags
18336 \&\fB\-fstack\-limit\-symbol=_\|_stack_limit\fR and
18337 \&\fB\-Wl,\-\-defsym,_\|_stack_limit=0x7ffe0000\fR to enforce a stack limit
18338 of 128KB.  Note that this may only work with the \s-1GNU\s0 linker.
18339 .IP "\fB\-fsplit\-stack\fR" 4
18340 .IX Item "-fsplit-stack"
18341 Generate code to automatically split the stack before it overflows.
18342 The resulting program has a discontiguous stack which can only
18343 overflow if the program is unable to allocate any more memory.  This
18344 is most useful when running threaded programs, as it is no longer
18345 necessary to calculate a good stack size to use for each thread.  This
18346 is currently only implemented for the i386 and x86_64 back ends running
18347 GNU/Linux.
18348 .Sp
18349 When code compiled with \fB\-fsplit\-stack\fR calls code compiled
18350 without \fB\-fsplit\-stack\fR, there may not be much stack space
18351 available for the latter code to run.  If compiling all code,
18352 including library code, with \fB\-fsplit\-stack\fR is not an option,
18353 then the linker can fix up these calls so that the code compiled
18354 without \fB\-fsplit\-stack\fR always has a large stack.  Support for
18355 this is implemented in the gold linker in \s-1GNU\s0 binutils release 2.21
18356 and later.
18357 .IP "\fB\-fleading\-underscore\fR" 4
18358 .IX Item "-fleading-underscore"
18359 This option and its counterpart, \fB\-fno\-leading\-underscore\fR, forcibly
18360 change the way C symbols are represented in the object file.  One use
18361 is to help link with legacy assembly code.
18362 .Sp
18363 \&\fBWarning:\fR the \fB\-fleading\-underscore\fR switch causes \s-1GCC\s0 to
18364 generate code that is not binary compatible with code generated without that
18365 switch.  Use it to conform to a non-default application binary interface.
18366 Not all targets provide complete support for this switch.
18367 .IP "\fB\-ftls\-model=\fR\fImodel\fR" 4
18368 .IX Item "-ftls-model=model"
18369 Alter the thread-local storage model to be used.
18370 The \fImodel\fR argument should be one of \f(CW\*(C`global\-dynamic\*(C'\fR,
18371 \&\f(CW\*(C`local\-dynamic\*(C'\fR, \f(CW\*(C`initial\-exec\*(C'\fR or \f(CW\*(C`local\-exec\*(C'\fR.
18372 .Sp
18373 The default without \fB\-fpic\fR is \f(CW\*(C`initial\-exec\*(C'\fR; with
18374 \&\fB\-fpic\fR the default is \f(CW\*(C`global\-dynamic\*(C'\fR.
18375 .IP "\fB\-fvisibility=\fR\fIdefault|internal|hidden|protected\fR" 4
18376 .IX Item "-fvisibility=default|internal|hidden|protected"
18377 Set the default \s-1ELF\s0 image symbol visibility to the specified option\-\-\-all
18378 symbols will be marked with this unless overridden within the code.
18379 Using this feature can very substantially improve linking and
18380 load times of shared object libraries, produce more optimized
18381 code, provide near-perfect \s-1API\s0 export and prevent symbol clashes.
18382 It is \fBstrongly\fR recommended that you use this in any shared objects
18383 you distribute.
18384 .Sp
18385 Despite the nomenclature, \f(CW\*(C`default\*(C'\fR always means public; i.e.,
18386 available to be linked against from outside the shared object.
18387 \&\f(CW\*(C`protected\*(C'\fR and \f(CW\*(C`internal\*(C'\fR are pretty useless in real-world
18388 usage so the only other commonly used option will be \f(CW\*(C`hidden\*(C'\fR.
18389 The default if \fB\-fvisibility\fR isn't specified is
18390 \&\f(CW\*(C`default\*(C'\fR, i.e., make every
18391 symbol public\-\-\-this causes the same behavior as previous versions of
18392 \&\s-1GCC\s0.
18393 .Sp
18394 A good explanation of the benefits offered by ensuring \s-1ELF\s0
18395 symbols have the correct visibility is given by \*(L"How To Write
18396 Shared Libraries\*(R" by Ulrich Drepper (which can be found at
18397 <\fBhttp://people.redhat.com/~drepper/\fR>)\-\-\-however a superior
18398 solution made possible by this option to marking things hidden when
18399 the default is public is to make the default hidden and mark things
18400 public.  This is the norm with \s-1DLL\s0's on Windows and with \fB\-fvisibility=hidden\fR
18401 and \f(CW\*(C`_\|_attribute_\|_ ((visibility("default")))\*(C'\fR instead of
18402 \&\f(CW\*(C`_\|_declspec(dllexport)\*(C'\fR you get almost identical semantics with
18403 identical syntax.  This is a great boon to those working with
18404 cross-platform projects.
18405 .Sp
18406 For those adding visibility support to existing code, you may find
18407 \&\fB#pragma \s-1GCC\s0 visibility\fR of use.  This works by you enclosing
18408 the declarations you wish to set visibility for with (for example)
18409 \&\fB#pragma \s-1GCC\s0 visibility push(hidden)\fR and
18410 \&\fB#pragma \s-1GCC\s0 visibility pop\fR.
18411 Bear in mind that symbol visibility should be viewed \fBas
18412 part of the \s-1API\s0 interface contract\fR and thus all new code should
18413 always specify visibility when it is not the default; i.e., declarations
18414 only for use within the local \s-1DSO\s0 should \fBalways\fR be marked explicitly
18415 as hidden as so to avoid \s-1PLT\s0 indirection overheads\-\-\-making this
18416 abundantly clear also aids readability and self-documentation of the code.
18417 Note that due to \s-1ISO\s0 \*(C+ specification requirements, operator new and
18418 operator delete must always be of default visibility.
18419 .Sp
18420 Be aware that headers from outside your project, in particular system
18421 headers and headers from any other library you use, may not be
18422 expecting to be compiled with visibility other than the default.  You
18423 may need to explicitly say \fB#pragma \s-1GCC\s0 visibility push(default)\fR
18424 before including any such headers.
18425 .Sp
18426 \&\fBextern\fR declarations are not affected by \fB\-fvisibility\fR, so
18427 a lot of code can be recompiled with \fB\-fvisibility=hidden\fR with
18428 no modifications.  However, this means that calls to \fBextern\fR
18429 functions with no explicit visibility will use the \s-1PLT\s0, so it is more
18430 effective to use \fB_\|_attribute ((visibility))\fR and/or
18431 \&\fB#pragma \s-1GCC\s0 visibility\fR to tell the compiler which \fBextern\fR
18432 declarations should be treated as hidden.
18433 .Sp
18434 Note that \fB\-fvisibility\fR does affect \*(C+ vague linkage
18435 entities. This means that, for instance, an exception class that will
18436 be thrown between DSOs must be explicitly marked with default
18437 visibility so that the \fBtype_info\fR nodes will be unified between
18438 the DSOs.
18439 .Sp
18440 An overview of these techniques, their benefits and how to use them
18441 is at <\fBhttp://gcc.gnu.org/wiki/Visibility\fR>.
18442 .IP "\fB\-fstrict\-volatile\-bitfields\fR" 4
18443 .IX Item "-fstrict-volatile-bitfields"
18444 This option should be used if accesses to volatile bit-fields (or other
18445 structure fields, although the compiler usually honors those types
18446 anyway) should use a single access of the width of the
18447 field's type, aligned to a natural alignment if possible.  For
18448 example, targets with memory-mapped peripheral registers might require
18449 all such accesses to be 16 bits wide; with this flag the user could
18450 declare all peripheral bit-fields as \*(L"unsigned short\*(R" (assuming short
18451 is 16 bits on these targets) to force \s-1GCC\s0 to use 16\-bit accesses
18452 instead of, perhaps, a more efficient 32\-bit access.
18453 .Sp
18454 If this option is disabled, the compiler will use the most efficient
18455 instruction.  In the previous example, that might be a 32\-bit load
18456 instruction, even though that will access bytes that do not contain
18457 any portion of the bit-field, or memory-mapped registers unrelated to
18458 the one being updated.
18459 .Sp
18460 If the target requires strict alignment, and honoring the field
18461 type would require violating this alignment, a warning is issued.
18462 If the field has \f(CW\*(C`packed\*(C'\fR attribute, the access is done without
18463 honoring the field type.  If the field doesn't have \f(CW\*(C`packed\*(C'\fR
18464 attribute, the access is done honoring the field type.  In both cases,
18465 \&\s-1GCC\s0 assumes that the user knows something about the target hardware
18466 that it is unaware of.
18467 .Sp
18468 The default value of this option is determined by the application binary
18469 interface for the target processor.
18470 .SH "ENVIRONMENT"
18471 .IX Header "ENVIRONMENT"
18472 This section describes several environment variables that affect how \s-1GCC\s0
18473 operates.  Some of them work by specifying directories or prefixes to use
18474 when searching for various kinds of files.  Some are used to specify other
18475 aspects of the compilation environment.
18476 .PP
18477 Note that you can also specify places to search using options such as
18478 \&\fB\-B\fR, \fB\-I\fR and \fB\-L\fR.  These
18479 take precedence over places specified using environment variables, which
18480 in turn take precedence over those specified by the configuration of \s-1GCC\s0.
18481 .IP "\fB\s-1LANG\s0\fR" 4
18482 .IX Item "LANG"
18483 .PD 0
18484 .IP "\fB\s-1LC_CTYPE\s0\fR" 4
18485 .IX Item "LC_CTYPE"
18486 .IP "\fB\s-1LC_MESSAGES\s0\fR" 4
18487 .IX Item "LC_MESSAGES"
18488 .IP "\fB\s-1LC_ALL\s0\fR" 4
18489 .IX Item "LC_ALL"
18490 .PD
18491 These environment variables control the way that \s-1GCC\s0 uses
18492 localization information which allows \s-1GCC\s0 to work with different
18493 national conventions.  \s-1GCC\s0 inspects the locale categories
18494 \&\fB\s-1LC_CTYPE\s0\fR and \fB\s-1LC_MESSAGES\s0\fR if it has been configured to do
18495 so.  These locale categories can be set to any value supported by your
18496 installation.  A typical value is \fBen_GB.UTF\-8\fR for English in the United
18497 Kingdom encoded in \s-1UTF\-8\s0.
18498 .Sp
18499 The \fB\s-1LC_CTYPE\s0\fR environment variable specifies character
18500 classification.  \s-1GCC\s0 uses it to determine the character boundaries in
18501 a string; this is needed for some multibyte encodings that contain quote
18502 and escape characters that would otherwise be interpreted as a string
18503 end or escape.
18504 .Sp
18505 The \fB\s-1LC_MESSAGES\s0\fR environment variable specifies the language to
18506 use in diagnostic messages.
18507 .Sp
18508 If the \fB\s-1LC_ALL\s0\fR environment variable is set, it overrides the value
18509 of \fB\s-1LC_CTYPE\s0\fR and \fB\s-1LC_MESSAGES\s0\fR; otherwise, \fB\s-1LC_CTYPE\s0\fR
18510 and \fB\s-1LC_MESSAGES\s0\fR default to the value of the \fB\s-1LANG\s0\fR
18511 environment variable.  If none of these variables are set, \s-1GCC\s0
18512 defaults to traditional C English behavior.
18513 .IP "\fB\s-1TMPDIR\s0\fR" 4
18514 .IX Item "TMPDIR"
18515 If \fB\s-1TMPDIR\s0\fR is set, it specifies the directory to use for temporary
18516 files.  \s-1GCC\s0 uses temporary files to hold the output of one stage of
18517 compilation which is to be used as input to the next stage: for example,
18518 the output of the preprocessor, which is the input to the compiler
18519 proper.
18520 .IP "\fB\s-1GCC_COMPARE_DEBUG\s0\fR" 4
18521 .IX Item "GCC_COMPARE_DEBUG"
18522 Setting \fB\s-1GCC_COMPARE_DEBUG\s0\fR is nearly equivalent to passing
18523 \&\fB\-fcompare\-debug\fR to the compiler driver.  See the documentation
18524 of this option for more details.
18525 .IP "\fB\s-1GCC_EXEC_PREFIX\s0\fR" 4
18526 .IX Item "GCC_EXEC_PREFIX"
18527 If \fB\s-1GCC_EXEC_PREFIX\s0\fR is set, it specifies a prefix to use in the
18528 names of the subprograms executed by the compiler.  No slash is added
18529 when this prefix is combined with the name of a subprogram, but you can
18530 specify a prefix that ends with a slash if you wish.
18531 .Sp
18532 If \fB\s-1GCC_EXEC_PREFIX\s0\fR is not set, \s-1GCC\s0 will attempt to figure out
18533 an appropriate prefix to use based on the pathname it was invoked with.
18534 .Sp
18535 If \s-1GCC\s0 cannot find the subprogram using the specified prefix, it
18536 tries looking in the usual places for the subprogram.
18537 .Sp
18538 The default value of \fB\s-1GCC_EXEC_PREFIX\s0\fR is
18539 \&\fI\fIprefix\fI/lib/gcc/\fR where \fIprefix\fR is the prefix to
18540 the installed compiler. In many cases \fIprefix\fR is the value
18541 of \f(CW\*(C`prefix\*(C'\fR when you ran the \fIconfigure\fR script.
18542 .Sp
18543 Other prefixes specified with \fB\-B\fR take precedence over this prefix.
18544 .Sp
18545 This prefix is also used for finding files such as \fIcrt0.o\fR that are
18546 used for linking.
18547 .Sp
18548 In addition, the prefix is used in an unusual way in finding the
18549 directories to search for header files.  For each of the standard
18550 directories whose name normally begins with \fB/usr/local/lib/gcc\fR
18551 (more precisely, with the value of \fB\s-1GCC_INCLUDE_DIR\s0\fR), \s-1GCC\s0 tries
18552 replacing that beginning with the specified prefix to produce an
18553 alternate directory name.  Thus, with \fB\-Bfoo/\fR, \s-1GCC\s0 will search
18554 \&\fIfoo/bar\fR where it would normally search \fI/usr/local/lib/bar\fR.
18555 These alternate directories are searched first; the standard directories
18556 come next. If a standard directory begins with the configured
18557 \&\fIprefix\fR then the value of \fIprefix\fR is replaced by
18558 \&\fB\s-1GCC_EXEC_PREFIX\s0\fR when looking for header files.
18559 .IP "\fB\s-1COMPILER_PATH\s0\fR" 4
18560 .IX Item "COMPILER_PATH"
18561 The value of \fB\s-1COMPILER_PATH\s0\fR is a colon-separated list of
18562 directories, much like \fB\s-1PATH\s0\fR.  \s-1GCC\s0 tries the directories thus
18563 specified when searching for subprograms, if it can't find the
18564 subprograms using \fB\s-1GCC_EXEC_PREFIX\s0\fR.
18565 .IP "\fB\s-1LIBRARY_PATH\s0\fR" 4
18566 .IX Item "LIBRARY_PATH"
18567 The value of \fB\s-1LIBRARY_PATH\s0\fR is a colon-separated list of
18568 directories, much like \fB\s-1PATH\s0\fR.  When configured as a native compiler,
18569 \&\s-1GCC\s0 tries the directories thus specified when searching for special
18570 linker files, if it can't find them using \fB\s-1GCC_EXEC_PREFIX\s0\fR.  Linking
18571 using \s-1GCC\s0 also uses these directories when searching for ordinary
18572 libraries for the \fB\-l\fR option (but directories specified with
18573 \&\fB\-L\fR come first).
18574 .IP "\fB\s-1LANG\s0\fR" 4
18575 .IX Item "LANG"
18576 This variable is used to pass locale information to the compiler.  One way in
18577 which this information is used is to determine the character set to be used
18578 when character literals, string literals and comments are parsed in C and \*(C+.
18579 When the compiler is configured to allow multibyte characters,
18580 the following values for \fB\s-1LANG\s0\fR are recognized:
18581 .RS 4
18582 .IP "\fBC\-JIS\fR" 4
18583 .IX Item "C-JIS"
18584 Recognize \s-1JIS\s0 characters.
18585 .IP "\fBC\-SJIS\fR" 4
18586 .IX Item "C-SJIS"
18587 Recognize \s-1SJIS\s0 characters.
18588 .IP "\fBC\-EUCJP\fR" 4
18589 .IX Item "C-EUCJP"
18590 Recognize \s-1EUCJP\s0 characters.
18591 .RE
18592 .RS 4
18593 .Sp
18594 If \fB\s-1LANG\s0\fR is not defined, or if it has some other value, then the
18595 compiler will use mblen and mbtowc as defined by the default locale to
18596 recognize and translate multibyte characters.
18597 .RE
18598 .PP
18599 Some additional environments variables affect the behavior of the
18600 preprocessor.
18601 .IP "\fB\s-1CPATH\s0\fR" 4
18602 .IX Item "CPATH"
18603 .PD 0
18604 .IP "\fBC_INCLUDE_PATH\fR" 4
18605 .IX Item "C_INCLUDE_PATH"
18606 .IP "\fB\s-1CPLUS_INCLUDE_PATH\s0\fR" 4
18607 .IX Item "CPLUS_INCLUDE_PATH"
18608 .IP "\fB\s-1OBJC_INCLUDE_PATH\s0\fR" 4
18609 .IX Item "OBJC_INCLUDE_PATH"
18610 .PD
18611 Each variable's value is a list of directories separated by a special
18612 character, much like \fB\s-1PATH\s0\fR, in which to look for header files.
18613 The special character, \f(CW\*(C`PATH_SEPARATOR\*(C'\fR, is target-dependent and
18614 determined at \s-1GCC\s0 build time.  For Microsoft Windows-based targets it is a
18615 semicolon, and for almost all other targets it is a colon.
18616 .Sp
18617 \&\fB\s-1CPATH\s0\fR specifies a list of directories to be searched as if
18618 specified with \fB\-I\fR, but after any paths given with \fB\-I\fR
18619 options on the command line.  This environment variable is used
18620 regardless of which language is being preprocessed.
18621 .Sp
18622 The remaining environment variables apply only when preprocessing the
18623 particular language indicated.  Each specifies a list of directories
18624 to be searched as if specified with \fB\-isystem\fR, but after any
18625 paths given with \fB\-isystem\fR options on the command line.
18626 .Sp
18627 In all these variables, an empty element instructs the compiler to
18628 search its current working directory.  Empty elements can appear at the
18629 beginning or end of a path.  For instance, if the value of
18630 \&\fB\s-1CPATH\s0\fR is \f(CW\*(C`:/special/include\*(C'\fR, that has the same
18631 effect as \fB\-I.\ \-I/special/include\fR.
18632 .IP "\fB\s-1DEPENDENCIES_OUTPUT\s0\fR" 4
18633 .IX Item "DEPENDENCIES_OUTPUT"
18634 If this variable is set, its value specifies how to output
18635 dependencies for Make based on the non-system header files processed
18636 by the compiler.  System header files are ignored in the dependency
18637 output.
18638 .Sp
18639 The value of \fB\s-1DEPENDENCIES_OUTPUT\s0\fR can be just a file name, in
18640 which case the Make rules are written to that file, guessing the target
18641 name from the source file name.  Or the value can have the form
18642 \&\fIfile\fR\fB \fR\fItarget\fR, in which case the rules are written to
18643 file \fIfile\fR using \fItarget\fR as the target name.
18644 .Sp
18645 In other words, this environment variable is equivalent to combining
18646 the options \fB\-MM\fR and \fB\-MF\fR,
18647 with an optional \fB\-MT\fR switch too.
18648 .IP "\fB\s-1SUNPRO_DEPENDENCIES\s0\fR" 4
18649 .IX Item "SUNPRO_DEPENDENCIES"
18650 This variable is the same as \fB\s-1DEPENDENCIES_OUTPUT\s0\fR (see above),
18651 except that system header files are not ignored, so it implies
18652 \&\fB\-M\fR rather than \fB\-MM\fR.  However, the dependence on the
18653 main input file is omitted.
18654 .SH "BUGS"
18655 .IX Header "BUGS"
18656 For instructions on reporting bugs, see
18657 <\fBhttp://gcc.gnu.org/bugs.html\fR>.
18658 .SH "FOOTNOTES"
18659 .IX Header "FOOTNOTES"
18660 .IP "1." 4
18661 On some systems, \fBgcc \-shared\fR
18662 needs to build supplementary stub code for constructors to work.  On
18663 multi-libbed systems, \fBgcc \-shared\fR must select the correct support
18664 libraries to link against.  Failing to supply the correct flags may lead
18665 to subtle defects.  Supplying them in cases where they are not necessary
18666 is innocuous.
18667 .SH "SEE ALSO"
18668 .IX Header "SEE ALSO"
18669 \&\fIgpl\fR\|(7), \fIgfdl\fR\|(7), \fIfsf\-funding\fR\|(7),
18670 \&\fIcpp\fR\|(1), \fIgcov\fR\|(1), \fIas\fR\|(1), \fIld\fR\|(1), \fIgdb\fR\|(1), \fIadb\fR\|(1), \fIdbx\fR\|(1), \fIsdb\fR\|(1)
18671 and the Info entries for \fIgcc\fR, \fIcpp\fR, \fIas\fR,
18672 \&\fIld\fR, \fIbinutils\fR and \fIgdb\fR.
18673 .SH "AUTHOR"
18674 .IX Header "AUTHOR"
18675 See the Info entry for \fBgcc\fR, or
18676 <\fBhttp://gcc.gnu.org/onlinedocs/gcc/Contributors.html\fR>,
18677 for contributors to \s-1GCC\s0.
18678 .SH "COPYRIGHT"
18679 .IX Header "COPYRIGHT"
18680 Copyright (c) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
18681 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,
18682 2012
18683 Free Software Foundation, Inc.
18684 .PP
18685 Permission is granted to copy, distribute and/or modify this document
18686 under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or
18687 any later version published by the Free Software Foundation; with the
18688 Invariant Sections being \*(L"\s-1GNU\s0 General Public License\*(R" and \*(L"Funding
18689 Free Software\*(R", the Front-Cover texts being (a) (see below), and with
18690 the Back-Cover Texts being (b) (see below).  A copy of the license is
18691 included in the \fIgfdl\fR\|(7) man page.
18692 .PP
18693 (a) The \s-1FSF\s0's Front-Cover Text is:
18694 .PP
18695 .Vb 1
18696 \&     A GNU Manual
18697 .Ve
18698 .PP
18699 (b) The \s-1FSF\s0's Back-Cover Text is:
18700 .PP
18701 .Vb 3
18702 \&     You have freedom to copy and modify this GNU Manual, like GNU
18703 \&     software.  Copies published by the Free Software Foundation raise
18704 \&     funds for GNU development.
18705 .Ve