OSDN Git Service

eclair snapshot
[android-x86/prebuilt.git] / linux-x86 / toolchain / arm-eabi-4.4.0 / man / man1 / arm-eabi-gcc.1
1 .\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.3
2 .\"
3 .\" Standard preamble:
4 .\" ========================================================================
5 .de Sh \" Subsection heading
6 .br
7 .if t .Sp
8 .ne 5
9 .PP
10 \fB\\$1\fR
11 .PP
12 ..
13 .de Sp \" Vertical space (when we can't use .PP)
14 .if t .sp .5v
15 .if n .sp
16 ..
17 .de Vb \" Begin verbatim text
18 .ft CW
19 .nf
20 .ne \\$1
21 ..
22 .de Ve \" End verbatim text
23 .ft R
24 .fi
25 ..
26 .\" Set up some character translations and predefined strings.  \*(-- will
27 .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
28 .\" double quote, and \*(R" will give a right double quote.  | will give a
29 .\" real vertical bar.  \*(C+ will give a nicer C++.  Capital omega is used to
30 .\" do unbreakable dashes and therefore won't be available.  \*(C` and \*(C'
31 .\" expand to `' in nroff, nothing in troff, for use with C<>.
32 .tr \(*W-|\(bv\*(Tr
33 .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
34 .ie n \{\
35 .    ds -- \(*W-
36 .    ds PI pi
37 .    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
38 .    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
39 .    ds L" ""
40 .    ds R" ""
41 .    ds C` ""
42 .    ds C' ""
43 'br\}
44 .el\{\
45 .    ds -- \|\(em\|
46 .    ds PI \(*p
47 .    ds L" ``
48 .    ds R" ''
49 'br\}
50 .\"
51 .\" If the F register is turned on, we'll generate index entries on stderr for
52 .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
53 .\" entries marked with X<> in POD.  Of course, you'll have to process the
54 .\" output yourself in some meaningful fashion.
55 .if \nF \{\
56 .    de IX
57 .    tm Index:\\$1\t\\n%\t"\\$2"
58 ..
59 .    nr % 0
60 .    rr F
61 .\}
62 .\"
63 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
64 .\" way too many mistakes in technical documents.
65 .hy 0
66 .if n .na
67 .\"
68 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
69 .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
70 .    \" fudge factors for nroff and troff
71 .if n \{\
72 .    ds #H 0
73 .    ds #V .8m
74 .    ds #F .3m
75 .    ds #[ \f1
76 .    ds #] \fP
77 .\}
78 .if t \{\
79 .    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
80 .    ds #V .6m
81 .    ds #F 0
82 .    ds #[ \&
83 .    ds #] \&
84 .\}
85 .    \" simple accents for nroff and troff
86 .if n \{\
87 .    ds ' \&
88 .    ds ` \&
89 .    ds ^ \&
90 .    ds , \&
91 .    ds ~ ~
92 .    ds /
93 .\}
94 .if t \{\
95 .    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
96 .    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
97 .    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
98 .    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
99 .    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
100 .    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
101 .\}
102 .    \" troff and (daisy-wheel) nroff accents
103 .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
104 .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
105 .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
106 .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
107 .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
108 .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
109 .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
110 .ds ae a\h'-(\w'a'u*4/10)'e
111 .ds Ae A\h'-(\w'A'u*4/10)'E
112 .    \" corrections for vroff
113 .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
114 .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
115 .    \" for low resolution devices (crt and lpr)
116 .if \n(.H>23 .if \n(.V>19 \
117 \{\
118 .    ds : e
119 .    ds 8 ss
120 .    ds o a
121 .    ds d- d\h'-1'\(ga
122 .    ds D- D\h'-1'\(hy
123 .    ds th \o'bp'
124 .    ds Th \o'LP'
125 .    ds ae ae
126 .    ds Ae AE
127 .\}
128 .rm #[ #] #H #V #F C
129 .\" ========================================================================
130 .\"
131 .IX Title "GCC 1"
132 .TH GCC 1 " " "gcc-4.4.0" "GNU"
133 .SH "NAME"
134 gcc \- GNU project C and C++ compiler
135 .SH "SYNOPSIS"
136 .IX Header "SYNOPSIS"
137 gcc [\fB\-c\fR|\fB\-S\fR|\fB\-E\fR] [\fB\-std=\fR\fIstandard\fR]
138     [\fB\-g\fR] [\fB\-pg\fR] [\fB\-O\fR\fIlevel\fR]
139     [\fB\-W\fR\fIwarn\fR...] [\fB\-pedantic\fR]
140     [\fB\-I\fR\fIdir\fR...] [\fB\-L\fR\fIdir\fR...]
141     [\fB\-D\fR\fImacro\fR[=\fIdefn\fR]...] [\fB\-U\fR\fImacro\fR]
142     [\fB\-f\fR\fIoption\fR...] [\fB\-m\fR\fImachine-option\fR...]
143     [\fB\-o\fR \fIoutfile\fR] [@\fIfile\fR] \fIinfile\fR...
144 .PP
145 Only the most useful options are listed here; see below for the
146 remainder.  \fBg++\fR accepts mostly the same options as \fBgcc\fR.
147 .SH "DESCRIPTION"
148 .IX Header "DESCRIPTION"
149 When you invoke \s-1GCC\s0, it normally does preprocessing, compilation,
150 assembly and linking.  The \*(L"overall options\*(R" allow you to stop this
151 process at an intermediate stage.  For example, the \fB\-c\fR option
152 says not to run the linker.  Then the output consists of object files
153 output by the assembler.
154 .PP
155 Other options are passed on to one stage of processing.  Some options
156 control the preprocessor and others the compiler itself.  Yet other
157 options control the assembler and linker; most of these are not
158 documented here, since you rarely need to use any of them.
159 .PP
160 Most of the command line options that you can use with \s-1GCC\s0 are useful
161 for C programs; when an option is only useful with another language
162 (usually \*(C+), the explanation says so explicitly.  If the description
163 for a particular option does not mention a source language, you can use
164 that option with all supported languages.
165 .PP
166 The \fBgcc\fR program accepts options and file names as operands.  Many
167 options have multi-letter names; therefore multiple single-letter options
168 may \fInot\fR be grouped: \fB\-dv\fR is very different from \fB\-d\ \-v\fR.
169 .PP
170 You can mix options and other arguments.  For the most part, the order
171 you use doesn't matter.  Order does matter when you use several
172 options of the same kind; for example, if you specify \fB\-L\fR more
173 than once, the directories are searched in the order specified.  Also,
174 the placement of the \fB\-l\fR option is significant.
175 .PP
176 Many options have long names starting with \fB\-f\fR or with
177 \&\fB\-W\fR\-\-\-for example,
178 \&\fB\-fmove\-loop\-invariants\fR, \fB\-Wformat\fR and so on.  Most of
179 these have both positive and negative forms; the negative form of
180 \&\fB\-ffoo\fR would be \fB\-fno\-foo\fR.  This manual documents
181 only one of these two forms, whichever one is not the default.
182 .SH "OPTIONS"
183 .IX Header "OPTIONS"
184 .Sh "Option Summary"
185 .IX Subsection "Option Summary"
186 Here is a summary of all the options, grouped by type.  Explanations are
187 in the following sections.
188 .IP "\fIOverall Options\fR" 4
189 .IX Item "Overall Options"
190 \&\fB\-c  \-S  \-E  \-o\fR \fIfile\fR  \fB\-combine  \-no\-canonical\-prefixes  
191 \&\-pipe  \-pass\-exit\-codes  
192 \&\-x\fR \fIlanguage\fR  \fB\-v  \-###  \-\-help\fR[\fB=\fR\fIclass\fR[\fB,...\fR]]  \fB\-\-target\-help  
193 \&\-\-version \-wrapper@\fR\fIfile\fR \fB\-fplugin=\fR\fIfile\fR \fB\-fplugin\-arg\-\fR\fIname\fR\fB=\fR\fIarg\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 
198 \&\fB\-fno\-asm  \-fno\-builtin  \-fno\-builtin\-\fR\fIfunction\fR 
199 \&\fB\-fhosted  \-ffreestanding \-fopenmp \-fms\-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  \-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  \-fno\-operator\-names 
215 \&\-fno\-optional\-diags  \-fpermissive 
216 \&\-frepo  \-fno\-rtti  \-fstats  \-ftemplate\-depth\-\fR\fIn\fR 
217 \&\fB\-fno\-threadsafe\-statics \-fuse\-cxa\-atexit  \-fno\-weak  \-nostdinc++ 
218 \&\-fno\-default\-inline  \-fvisibility\-inlines\-hidden 
219 \&\-fvisibility\-ms\-compat 
220 \&\-Wabi  \-Wctor\-dtor\-privacy 
221 \&\-Wnon\-virtual\-dtor  \-Wreorder 
222 \&\-Weffc++  \-Wstrict\-null\-sentinel 
223 \&\-Wno\-non\-template\-friend  \-Wold\-style\-cast 
224 \&\-Woverloaded\-virtual  \-Wno\-pmf\-conversions 
225 \&\-Wsign\-promo\fR
226 .IP "\fIObjective-C and Objective\-\*(C+ Language Options\fR" 4
227 .IX Item "Objective-C and Objective- Language Options"
228 \&\fB\-fconstant\-string\-class=\fR\fIclass-name\fR 
229 \&\fB\-fgnu\-runtime  \-fnext\-runtime 
230 \&\-fno\-nil\-receivers 
231 \&\-fobjc\-call\-cxx\-cdtors 
232 \&\-fobjc\-direct\-dispatch 
233 \&\-fobjc\-exceptions 
234 \&\-fobjc\-gc 
235 \&\-freplace\-objc\-classes 
236 \&\-fzero\-link 
237 \&\-gen\-decls 
238 \&\-Wassign\-intercept 
239 \&\-Wno\-protocol  \-Wselector 
240 \&\-Wstrict\-selector\-match 
241 \&\-Wundeclared\-selector\fR
242 .IP "\fILanguage Independent Options\fR" 4
243 .IX Item "Language Independent Options"
244 \&\fB\-fmessage\-length=\fR\fIn\fR  
245 \&\fB\-fdiagnostics\-show\-location=\fR[\fBonce\fR|\fBevery-line\fR]  
246 \&\fB\-fdiagnostics\-show\-option\fR
247 .IP "\fIWarning Options\fR" 4
248 .IX Item "Warning Options"
249 \&\fB\-fsyntax\-only  \-pedantic  \-pedantic\-errors 
250 \&\-w  \-Wextra  \-Wall  \-Waddress  \-Waggregate\-return  \-Warray\-bounds 
251 \&\-Wno\-attributes \-Wno\-builtin\-macro\-redefined 
252 \&\-Wc++\-compat \-Wc++0x\-compat \-Wcast\-align  \-Wcast\-qual  
253 \&\-Wchar\-subscripts \-Wclobbered  \-Wcomment 
254 \&\-Wconversion  \-Wcoverage\-mismatch  \-Wno\-deprecated  
255 \&\-Wno\-deprecated\-declarations \-Wdisabled\-optimization  
256 \&\-Wno\-div\-by\-zero \-Wempty\-body  \-Wenum\-compare \-Wno\-endif\-labels 
257 \&\-Werror  \-Werror=* 
258 \&\-Wfatal\-errors  \-Wfloat\-equal  \-Wformat  \-Wformat=2 
259 \&\-Wno\-format\-contains\-nul \-Wno\-format\-extra\-args \-Wformat\-nonliteral 
260 \&\-Wformat\-security  \-Wformat\-y2k 
261 \&\-Wframe\-larger\-than=\fR\fIlen\fR \fB\-Wignored\-qualifiers 
262 \&\-Wimplicit  \-Wimplicit\-function\-declaration  \-Wimplicit\-int 
263 \&\-Winit\-self  \-Winline 
264 \&\-Wno\-int\-to\-pointer\-cast \-Wno\-invalid\-offsetof 
265 \&\-Winvalid\-pch \-Wlarger\-than=\fR\fIlen\fR  \fB\-Wunsafe\-loop\-optimizations 
266 \&\-Wlogical\-op \-Wlong\-long 
267 \&\-Wmain  \-Wmissing\-braces  \-Wmissing\-field\-initializers 
268 \&\-Wmissing\-format\-attribute  \-Wmissing\-include\-dirs 
269 \&\-Wmissing\-noreturn  \-Wno\-mudflap 
270 \&\-Wno\-multichar  \-Wnonnull  \-Wno\-overflow 
271 \&\-Woverlength\-strings  \-Wpacked  \-Wpacked\-bitfield\-compat  \-Wpadded 
272 \&\-Wparentheses  \-Wpedantic\-ms\-format \-Wno\-pedantic\-ms\-format 
273 \&\-Wpointer\-arith  \-Wno\-pointer\-to\-int\-cast 
274 \&\-Wredundant\-decls 
275 \&\-Wreturn\-type  \-Wsequence\-point  \-Wshadow 
276 \&\-Wsign\-compare  \-Wsign\-conversion  \-Wstack\-protector 
277 \&\-Wstrict\-aliasing \-Wstrict\-aliasing=n 
278 \&\-Wstrict\-overflow \-Wstrict\-overflow=\fR\fIn\fR 
279 \&\fB\-Wswitch  \-Wswitch\-default  \-Wswitch\-enum \-Wsync\-nand 
280 \&\-Wsystem\-headers  \-Wtrigraphs  \-Wtype\-limits  \-Wundef  \-Wuninitialized 
281 \&\-Wunknown\-pragmas  \-Wno\-pragmas \-Wunreachable\-code 
282 \&\-Wunused  \-Wunused\-function  \-Wunused\-label  \-Wunused\-parameter 
283 \&\-Wunused\-value  \-Wunused\-variable 
284 \&\-Wvariadic\-macros \-Wvla 
285 \&\-Wvolatile\-register\-var  \-Wwrite\-strings\fR
286 .IP "\fIC and Objective-C-only Warning Options\fR" 4
287 .IX Item "C and Objective-C-only Warning Options"
288 \&\fB\-Wbad\-function\-cast  \-Wmissing\-declarations 
289 \&\-Wmissing\-parameter\-type  \-Wmissing\-prototypes  \-Wnested\-externs 
290 \&\-Wold\-style\-declaration  \-Wold\-style\-definition 
291 \&\-Wstrict\-prototypes  \-Wtraditional  \-Wtraditional\-conversion 
292 \&\-Wdeclaration\-after\-statement \-Wpointer\-sign\fR
293 .IP "\fIDebugging Options\fR" 4
294 .IX Item "Debugging Options"
295 \&\fB\-d\fR\fIletters\fR  \fB\-dumpspecs  \-dumpmachine  \-dumpversion 
296 \&\-fdbg\-cnt\-list \-fdbg\-cnt=\fR\fIcounter-value-list\fR 
297 \&\fB\-fdump\-noaddr \-fdump\-unnumbered 
298 \&\-fdump\-translation\-unit\fR[\fB\-\fR\fIn\fR] 
299 \&\fB\-fdump\-class\-hierarchy\fR[\fB\-\fR\fIn\fR] 
300 \&\fB\-fdump\-ipa\-all \-fdump\-ipa\-cgraph \-fdump\-ipa\-inline 
301 \&\-fdump\-statistics 
302 \&\-fdump\-tree\-all 
303 \&\-fdump\-tree\-original\fR[\fB\-\fR\fIn\fR]  
304 \&\fB\-fdump\-tree\-optimized\fR[\fB\-\fR\fIn\fR] 
305 \&\fB\-fdump\-tree\-cfg \-fdump\-tree\-vcg \-fdump\-tree\-alias 
306 \&\-fdump\-tree\-ch 
307 \&\-fdump\-tree\-ssa\fR[\fB\-\fR\fIn\fR] \fB\-fdump\-tree\-pre\fR[\fB\-\fR\fIn\fR] 
308 \&\fB\-fdump\-tree\-ccp\fR[\fB\-\fR\fIn\fR] \fB\-fdump\-tree\-dce\fR[\fB\-\fR\fIn\fR] 
309 \&\fB\-fdump\-tree\-gimple\fR[\fB\-raw\fR] \fB\-fdump\-tree\-mudflap\fR[\fB\-\fR\fIn\fR] 
310 \&\fB\-fdump\-tree\-dom\fR[\fB\-\fR\fIn\fR] 
311 \&\fB\-fdump\-tree\-dse\fR[\fB\-\fR\fIn\fR] 
312 \&\fB\-fdump\-tree\-phiopt\fR[\fB\-\fR\fIn\fR] 
313 \&\fB\-fdump\-tree\-forwprop\fR[\fB\-\fR\fIn\fR] 
314 \&\fB\-fdump\-tree\-copyrename\fR[\fB\-\fR\fIn\fR] 
315 \&\fB\-fdump\-tree\-nrv \-fdump\-tree\-vect 
316 \&\-fdump\-tree\-sink 
317 \&\-fdump\-tree\-sra\fR[\fB\-\fR\fIn\fR] 
318 \&\fB\-fdump\-tree\-fre\fR[\fB\-\fR\fIn\fR] 
319 \&\fB\-fdump\-tree\-vrp\fR[\fB\-\fR\fIn\fR] 
320 \&\fB\-ftree\-vectorizer\-verbose=\fR\fIn\fR 
321 \&\fB\-fdump\-tree\-storeccp\fR[\fB\-\fR\fIn\fR] 
322 \&\fB\-feliminate\-dwarf2\-dups \-feliminate\-unused\-debug\-types 
323 \&\-feliminate\-unused\-debug\-symbols \-femit\-class\-debug\-always 
324 \&\-fmem\-report \-fpre\-ipa\-mem\-report \-fpost\-ipa\-mem\-report \-fprofile\-arcs 
325 \&\-frandom\-seed=\fR\fIstring\fR \fB\-fsched\-verbose=\fR\fIn\fR 
326 \&\fB\-fsel\-sched\-verbose \-fsel\-sched\-dump\-cfg \-fsel\-sched\-pipelining\-verbose 
327 \&\-ftest\-coverage  \-ftime\-report \-fvar\-tracking 
328 \&\-g  \-g\fR\fIlevel\fR  \fB\-gcoff \-gdwarf\-2 
329 \&\-ggdb  \-gstabs  \-gstabs+  \-gvms  \-gxcoff  \-gxcoff+ 
330 \&\-fno\-merge\-debug\-strings \-fno\-dwarf2\-cfi\-asm 
331 \&\-fdebug\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR 
332 \&\fB\-femit\-struct\-debug\-baseonly \-femit\-struct\-debug\-reduced 
333 \&\-femit\-struct\-debug\-detailed\fR[\fB=\fR\fIspec-list\fR] 
334 \&\fB\-p  \-pg  \-print\-file\-name=\fR\fIlibrary\fR  \fB\-print\-libgcc\-file\-name 
335 \&\-print\-multi\-directory  \-print\-multi\-lib 
336 \&\-print\-prog\-name=\fR\fIprogram\fR  \fB\-print\-search\-dirs  \-Q 
337 \&\-print\-sysroot \-print\-sysroot\-headers\-suffix 
338 \&\-save\-temps  \-time\fR
339 .IP "\fIOptimization Options\fR" 4
340 .IX Item "Optimization Options"
341 \&\fB\-falign\-functions[=\fR\fIn\fR\fB] \-falign\-jumps[=\fR\fIn\fR\fB] 
342 \&\-falign\-labels[=\fR\fIn\fR\fB] \-falign\-loops[=\fR\fIn\fR\fB] \-fassociative\-math 
343 \&\-fauto\-inc\-dec \-fbranch\-probabilities \-fbranch\-target\-load\-optimize 
344 \&\-fbranch\-target\-load\-optimize2 \-fbtr\-bb\-exclusive \-fcaller\-saves 
345 \&\-fcheck\-data\-deps \-fconserve\-stack \-fcprop\-registers \-fcrossjumping 
346 \&\-fcse\-follow\-jumps \-fcse\-skip\-blocks \-fcx\-fortran\-rules \-fcx\-limited\-range 
347 \&\-fdata\-sections \-fdce \-fdce 
348 \&\-fdelayed\-branch \-fdelete\-null\-pointer\-checks \-fdse \-fdse \-fdyn\-ipa 
349 \&\-fearly\-inlining \-fexpensive\-optimizations \-ffast\-math 
350 \&\-ffinite\-math\-only \-ffloat\-store \-fforward\-propagate 
351 \&\-ffunction\-sections \-fgcse \-fgcse\-after\-reload \-fgcse\-las \-fgcse\-lm 
352 \&\-fgcse\-sm \-fif\-conversion \-fif\-conversion2 \-findirect\-inlining 
353 \&\-finline\-functions \-finline\-functions\-called\-once \-finline\-limit=\fR\fIn\fR 
354 \&\fB\-finline\-small\-functions \-fipa\-cp \-fipa\-cp\-clone \-fipa\-matrix\-reorg \-fipa\-pta  
355 \&\-fipa\-pure\-const \-fipa\-reference \-fipa\-struct\-reorg 
356 \&\-fipa\-type\-escape \-fira\-algorithm=\fR\fIalgorithm\fR 
357 \&\fB\-fira\-region=\fR\fIregion\fR \fB\-fira\-coalesce \-fno\-ira\-share\-save\-slots 
358 \&\-fno\-ira\-share\-spill\-slots \-fira\-verbose=\fR\fIn\fR 
359 \&\fB\-fivopts \-fkeep\-inline\-functions \-fkeep\-static\-consts 
360 \&\-floop\-block \-floop\-interchange \-floop\-strip\-mine 
361 \&\-fmerge\-all\-constants \-fmerge\-constants \-fmodulo\-sched 
362 \&\-fmodulo\-sched\-allow\-regmoves \-fmove\-loop\-invariants \-fmudflap 
363 \&\-fmudflapir \-fmudflapth \-fno\-branch\-count\-reg \-fno\-default\-inline 
364 \&\-fno\-defer\-pop \-fno\-function\-cse \-fno\-guess\-branch\-probability 
365 \&\-fno\-inline \-fno\-math\-errno \-fno\-peephole \-fno\-peephole2 
366 \&\-fno\-sched\-interblock \-fno\-sched\-spec \-fno\-signed\-zeros 
367 \&\-fno\-toplevel\-reorder \-fno\-trapping\-math \-fno\-zero\-initialized\-in\-bss 
368 \&\-fomit\-frame\-pointer \-foptimize\-register\-move \-foptimize\-sibling\-calls 
369 \&\-fpeel\-loops \-fpredictive\-commoning \-fprefetch\-loop\-arrays 
370 \&\-fprofile\-correction \-fprofile\-dir=\fR\fIpath\fR \fB\-fprofile\-generate 
371 \&\-fprofile\-generate=\fR\fIpath\fR 
372 \&\fB\-fprofile\-use \-fprofile\-use=\fR\fIpath\fR \fB\-fprofile\-values 
373 \&\-freciprocal\-math \-fregmove \-frename\-registers \-freorder\-blocks 
374 \&\-freorder\-blocks\-and\-partition \-freorder\-functions 
375 \&\-frerun\-cse\-after\-loop \-freschedule\-modulo\-scheduled\-loops 
376 \&\-frounding\-math \-fsched2\-use\-superblocks 
377 \&\-fsched2\-use\-traces \-fsched\-spec\-load \-fsched\-spec\-load\-dangerous 
378 \&\-fsched\-stalled\-insns\-dep[=\fR\fIn\fR\fB] \-fsched\-stalled\-insns[=\fR\fIn\fR\fB] 
379 \&\-fschedule\-insns \-fschedule\-insns2 \-fsection\-anchors \-fsee 
380 \&\-fselective\-scheduling \-fselective\-scheduling2 
381 \&\-fsel\-sched\-pipelining \-fsel\-sched\-pipelining\-outer\-loops 
382 \&\-fsignaling\-nans \-fsingle\-precision\-constant \-fsplit\-ivs\-in\-unroller 
383 \&\-fsplit\-wide\-types \-fstack\-protector \-fstack\-protector\-all 
384 \&\-fstrict\-aliasing \-fstrict\-overflow \-fthread\-jumps \-ftracer 
385 \&\-ftree\-builtin\-call\-dce \-ftree\-ccp \-ftree\-ch \-ftree\-copy\-prop 
386 \&\-ftree\-copyrename \-ftree\-dce 
387 \&\-ftree\-dominator\-opts \-ftree\-dse \-ftree\-fre \-ftree\-loop\-im 
388 \&\-ftree\-loop\-distribution 
389 \&\-ftree\-loop\-ivcanon \-ftree\-loop\-linear \-ftree\-loop\-optimize 
390 \&\-ftree\-parallelize\-loops=\fR\fIn\fR \fB\-ftree\-pre \-ftree\-reassoc 
391 \&\-ftree\-sink \-ftree\-sra \-ftree\-switch\-conversion 
392 \&\-ftree\-ter \-ftree\-vect\-loop\-version \-ftree\-vectorize \-ftree\-vrp 
393 \&\-funit\-at\-a\-time \-funroll\-all\-loops \-funroll\-loops 
394 \&\-funsafe\-loop\-optimizations \-funsafe\-math\-optimizations \-funswitch\-loops 
395 \&\-fvariable\-expansion\-in\-unroller \-fvect\-cost\-model \-fvpt \-fweb 
396 \&\-fwhole\-program 
397 \&\-\-param\fR \fIname\fR\fB=\fR\fIvalue\fR
398 \&\fB\-O  \-O0  \-O1  \-O2  \-O3  \-Os\fR
399 .IP "\fIPreprocessor Options\fR" 4
400 .IX Item "Preprocessor Options"
401 \&\fB\-A\fR\fIquestion\fR\fB=\fR\fIanswer\fR 
402 \&\fB\-A\-\fR\fIquestion\fR[\fB=\fR\fIanswer\fR] 
403 \&\fB\-C  \-dD  \-dI  \-dM  \-dN 
404 \&\-D\fR\fImacro\fR[\fB=\fR\fIdefn\fR]  \fB\-E  \-H 
405 \&\-idirafter\fR \fIdir\fR 
406 \&\fB\-include\fR \fIfile\fR  \fB\-imacros\fR \fIfile\fR 
407 \&\fB\-iprefix\fR \fIfile\fR  \fB\-iwithprefix\fR \fIdir\fR 
408 \&\fB\-iwithprefixbefore\fR \fIdir\fR  \fB\-isystem\fR \fIdir\fR 
409 \&\fB\-imultilib\fR \fIdir\fR \fB\-isysroot\fR \fIdir\fR 
410 \&\fB\-M  \-MM  \-MF  \-MG  \-MP  \-MQ  \-MT  \-nostdinc  
411 \&\-P  \-fworking\-directory  \-remap 
412 \&\-trigraphs  \-undef  \-U\fR\fImacro\fR  \fB\-Wp,\fR\fIoption\fR 
413 \&\fB\-Xpreprocessor\fR \fIoption\fR
414 .IP "\fIAssembler Option\fR" 4
415 .IX Item "Assembler Option"
416 \&\fB\-Wa,\fR\fIoption\fR  \fB\-Xassembler\fR \fIoption\fR
417 .IP "\fILinker Options\fR" 4
418 .IX Item "Linker Options"
419 \&\fIobject-file-name\fR  \fB\-l\fR\fIlibrary\fR 
420 \&\fB\-nostartfiles  \-nodefaultlibs  \-nostdlib \-pie \-rdynamic 
421 \&\-s  \-static  \-static\-libgcc  \-shared  \-shared\-libgcc  \-symbolic 
422 \&\-T\fR \fIscript\fR  \fB\-Wl,\fR\fIoption\fR  \fB\-Xlinker\fR \fIoption\fR 
423 \&\fB\-u\fR \fIsymbol\fR
424 .IP "\fIDirectory Options\fR" 4
425 .IX Item "Directory Options"
426 \&\fB\-B\fR\fIprefix\fR  \fB\-I\fR\fIdir\fR  \fB\-iquote\fR\fIdir\fR  \fB\-L\fR\fIdir\fR
427 \&\fB\-specs=\fR\fIfile\fR  \fB\-I\- \-\-sysroot=\fR\fIdir\fR
428 .IP "\fITarget Options\fR" 4
429 .IX Item "Target Options"
430 \&\fB\-V\fR \fIversion\fR  \fB\-b\fR \fImachine\fR
431 .IP "\fIMachine Dependent Options\fR" 4
432 .IX Item "Machine Dependent Options"
433 \&\fI\s-1ARC\s0 Options\fR
434 \&\fB\-EB  \-EL 
435 \&\-mmangle\-cpu  \-mcpu=\fR\fIcpu\fR  \fB\-mtext=\fR\fItext-section\fR 
436 \&\fB\-mdata=\fR\fIdata-section\fR  \fB\-mrodata=\fR\fIreadonly-data-section\fR
437 .Sp
438 \&\fI\s-1ARM\s0 Options\fR
439 \&\fB\-mapcs\-frame  \-mno\-apcs\-frame 
440 \&\-mabi=\fR\fIname\fR 
441 \&\fB\-mapcs\-stack\-check  \-mno\-apcs\-stack\-check 
442 \&\-mapcs\-float  \-mno\-apcs\-float 
443 \&\-mapcs\-reentrant  \-mno\-apcs\-reentrant 
444 \&\-msched\-prolog  \-mno\-sched\-prolog 
445 \&\-mlittle\-endian  \-mbig\-endian  \-mwords\-little\-endian 
446 \&\-mfloat\-abi=\fR\fIname\fR  \fB\-msoft\-float  \-mhard\-float  \-mfpe 
447 \&\-mthumb\-interwork  \-mno\-thumb\-interwork 
448 \&\-mcpu=\fR\fIname\fR  \fB\-march=\fR\fIname\fR  \fB\-mfpu=\fR\fIname\fR  
449 \&\fB\-mstructure\-size\-boundary=\fR\fIn\fR 
450 \&\fB\-mabort\-on\-noreturn 
451 \&\-mlong\-calls  \-mno\-long\-calls 
452 \&\-msingle\-pic\-base  \-mno\-single\-pic\-base 
453 \&\-mpic\-register=\fR\fIreg\fR 
454 \&\fB\-mnop\-fun\-dllimport 
455 \&\-mcirrus\-fix\-invalid\-insns \-mno\-cirrus\-fix\-invalid\-insns 
456 \&\-mpoke\-function\-name 
457 \&\-mthumb  \-marm 
458 \&\-mtpcs\-frame  \-mtpcs\-leaf\-frame 
459 \&\-mcaller\-super\-interworking  \-mcallee\-super\-interworking 
460 \&\-mtp=\fR\fIname\fR 
461 \&\fB\-mword\-relocations 
462 \&\-mfix\-cortex\-m3\-ldrd 
463 \&\-mandroid\fR
464 .Sp
465 \&\fI\s-1AVR\s0 Options\fR
466 \&\fB\-mmcu=\fR\fImcu\fR  \fB\-msize  \-minit\-stack=\fR\fIn\fR  \fB\-mno\-interrupts 
467 \&\-mcall\-prologues  \-mno\-tablejump  \-mtiny\-stack  \-mint8\fR
468 .Sp
469 \&\fIBlackfin Options\fR
470 \&\fB\-mcpu=\fR\fIcpu\fR[\fB\-\fR\fIsirevision\fR] 
471 \&\fB\-msim \-momit\-leaf\-frame\-pointer  \-mno\-omit\-leaf\-frame\-pointer 
472 \&\-mspecld\-anomaly  \-mno\-specld\-anomaly  \-mcsync\-anomaly  \-mno\-csync\-anomaly 
473 \&\-mlow\-64k \-mno\-low64k  \-mstack\-check\-l1  \-mid\-shared\-library 
474 \&\-mno\-id\-shared\-library  \-mshared\-library\-id=\fR\fIn\fR 
475 \&\fB\-mleaf\-id\-shared\-library  \-mno\-leaf\-id\-shared\-library 
476 \&\-msep\-data  \-mno\-sep\-data  \-mlong\-calls  \-mno\-long\-calls 
477 \&\-mfast\-fp \-minline\-plt \-mmulticore  \-mcorea  \-mcoreb  \-msdram 
478 \&\-micplb\fR
479 .Sp
480 \&\fI\s-1CRIS\s0 Options\fR
481 \&\fB\-mcpu=\fR\fIcpu\fR  \fB\-march=\fR\fIcpu\fR  \fB\-mtune=\fR\fIcpu\fR 
482 \&\fB\-mmax\-stack\-frame=\fR\fIn\fR  \fB\-melinux\-stacksize=\fR\fIn\fR 
483 \&\fB\-metrax4  \-metrax100  \-mpdebug  \-mcc\-init  \-mno\-side\-effects 
484 \&\-mstack\-align  \-mdata\-align  \-mconst\-align 
485 \&\-m32\-bit  \-m16\-bit  \-m8\-bit  \-mno\-prologue\-epilogue  \-mno\-gotplt 
486 \&\-melf  \-maout  \-melinux  \-mlinux  \-sim  \-sim2 
487 \&\-mmul\-bug\-workaround  \-mno\-mul\-bug\-workaround\fR
488 .Sp
489 \&\fI\s-1CRX\s0 Options\fR
490 \&\fB\-mmac \-mpush\-args\fR
491 .Sp
492 \&\fIDarwin Options\fR
493 \&\fB\-all_load  \-allowable_client  \-arch  \-arch_errors_fatal 
494 \&\-arch_only  \-bind_at_load  \-bundle  \-bundle_loader 
495 \&\-client_name  \-compatibility_version  \-current_version 
496 \&\-dead_strip 
497 \&\-dependency\-file  \-dylib_file  \-dylinker_install_name 
498 \&\-dynamic  \-dynamiclib  \-exported_symbols_list 
499 \&\-filelist  \-flat_namespace  \-force_cpusubtype_ALL 
500 \&\-force_flat_namespace  \-headerpad_max_install_names 
501 \&\-iframework 
502 \&\-image_base  \-init  \-install_name  \-keep_private_externs 
503 \&\-multi_module  \-multiply_defined  \-multiply_defined_unused 
504 \&\-noall_load   \-no_dead_strip_inits_and_terms 
505 \&\-nofixprebinding \-nomultidefs  \-noprebind  \-noseglinkedit 
506 \&\-pagezero_size  \-prebind  \-prebind_all_twolevel_modules 
507 \&\-private_bundle  \-read_only_relocs  \-sectalign 
508 \&\-sectobjectsymbols  \-whyload  \-seg1addr 
509 \&\-sectcreate  \-sectobjectsymbols  \-sectorder 
510 \&\-segaddr \-segs_read_only_addr \-segs_read_write_addr 
511 \&\-seg_addr_table  \-seg_addr_table_filename  \-seglinkedit 
512 \&\-segprot  \-segs_read_only_addr  \-segs_read_write_addr 
513 \&\-single_module  \-static  \-sub_library  \-sub_umbrella 
514 \&\-twolevel_namespace  \-umbrella  \-undefined 
515 \&\-unexported_symbols_list  \-weak_reference_mismatches 
516 \&\-whatsloaded \-F \-gused \-gfull \-mmacosx\-version\-min=\fR\fIversion\fR 
517 \&\fB\-mkernel \-mone\-byte\-bool\fR
518 .Sp
519 \&\fI\s-1DEC\s0 Alpha Options\fR
520 \&\fB\-mno\-fp\-regs  \-msoft\-float  \-malpha\-as  \-mgas 
521 \&\-mieee  \-mieee\-with\-inexact  \-mieee\-conformant 
522 \&\-mfp\-trap\-mode=\fR\fImode\fR  \fB\-mfp\-rounding\-mode=\fR\fImode\fR 
523 \&\fB\-mtrap\-precision=\fR\fImode\fR  \fB\-mbuild\-constants 
524 \&\-mcpu=\fR\fIcpu-type\fR  \fB\-mtune=\fR\fIcpu-type\fR 
525 \&\fB\-mbwx  \-mmax  \-mfix  \-mcix 
526 \&\-mfloat\-vax  \-mfloat\-ieee 
527 \&\-mexplicit\-relocs  \-msmall\-data  \-mlarge\-data 
528 \&\-msmall\-text  \-mlarge\-text 
529 \&\-mmemory\-latency=\fR\fItime\fR
530 .Sp
531 \&\fI\s-1DEC\s0 Alpha/VMS Options\fR
532 \&\fB\-mvms\-return\-codes\fR
533 .Sp
534 \&\fI\s-1FR30\s0 Options\fR
535 \&\fB\-msmall\-model \-mno\-lsim\fR
536 .Sp
537 \&\fI\s-1FRV\s0 Options\fR
538 \&\fB\-mgpr\-32  \-mgpr\-64  \-mfpr\-32  \-mfpr\-64 
539 \&\-mhard\-float  \-msoft\-float 
540 \&\-malloc\-cc  \-mfixed\-cc  \-mdword  \-mno\-dword 
541 \&\-mdouble  \-mno\-double 
542 \&\-mmedia  \-mno\-media  \-mmuladd  \-mno\-muladd 
543 \&\-mfdpic  \-minline\-plt \-mgprel\-ro  \-multilib\-library\-pic 
544 \&\-mlinked\-fp  \-mlong\-calls  \-malign\-labels 
545 \&\-mlibrary\-pic  \-macc\-4  \-macc\-8 
546 \&\-mpack  \-mno\-pack  \-mno\-eflags  \-mcond\-move  \-mno\-cond\-move 
547 \&\-moptimize\-membar \-mno\-optimize\-membar 
548 \&\-mscc  \-mno\-scc  \-mcond\-exec  \-mno\-cond\-exec 
549 \&\-mvliw\-branch  \-mno\-vliw\-branch 
550 \&\-mmulti\-cond\-exec  \-mno\-multi\-cond\-exec  \-mnested\-cond\-exec 
551 \&\-mno\-nested\-cond\-exec  \-mtomcat\-stats 
552 \&\-mTLS \-mtls 
553 \&\-mcpu=\fR\fIcpu\fR
554 .Sp
555 \&\fIGNU/Linux Options\fR
556 \&\fB\-muclibc\fR
557 .Sp
558 \&\fIH8/300 Options\fR
559 \&\fB\-mrelax  \-mh  \-ms  \-mn  \-mint32  \-malign\-300\fR
560 .Sp
561 \&\fI\s-1HPPA\s0 Options\fR
562 \&\fB\-march=\fR\fIarchitecture-type\fR 
563 \&\fB\-mbig\-switch  \-mdisable\-fpregs  \-mdisable\-indexing 
564 \&\-mfast\-indirect\-calls  \-mgas  \-mgnu\-ld   \-mhp\-ld 
565 \&\-mfixed\-range=\fR\fIregister-range\fR 
566 \&\fB\-mjump\-in\-delay \-mlinker\-opt \-mlong\-calls 
567 \&\-mlong\-load\-store  \-mno\-big\-switch  \-mno\-disable\-fpregs 
568 \&\-mno\-disable\-indexing  \-mno\-fast\-indirect\-calls  \-mno\-gas 
569 \&\-mno\-jump\-in\-delay  \-mno\-long\-load\-store 
570 \&\-mno\-portable\-runtime  \-mno\-soft\-float 
571 \&\-mno\-space\-regs  \-msoft\-float  \-mpa\-risc\-1\-0 
572 \&\-mpa\-risc\-1\-1  \-mpa\-risc\-2\-0  \-mportable\-runtime 
573 \&\-mschedule=\fR\fIcpu-type\fR  \fB\-mspace\-regs  \-msio  \-mwsio 
574 \&\-munix=\fR\fIunix-std\fR  \fB\-nolibdld  \-static  \-threads\fR
575 .Sp
576 \&\fIi386 and x86\-64 Options\fR
577 \&\fB\-mtune=\fR\fIcpu-type\fR  \fB\-march=\fR\fIcpu-type\fR 
578 \&\fB\-mfpmath=\fR\fIunit\fR 
579 \&\fB\-masm=\fR\fIdialect\fR  \fB\-mno\-fancy\-math\-387 
580 \&\-mno\-fp\-ret\-in\-387  \-msoft\-float 
581 \&\-mno\-wide\-multiply  \-mrtd  \-malign\-double 
582 \&\-mpreferred\-stack\-boundary=\fR\fInum\fR
583 \&\fB\-mincoming\-stack\-boundary=\fR\fInum\fR
584 \&\fB\-mcld \-mcx16 \-msahf \-mrecip 
585 \&\-mmmx  \-msse  \-msse2 \-msse3 \-mssse3 \-msse4.1 \-msse4.2 \-msse4 \-mavx 
586 \&\-maes \-mpclmul 
587 \&\-msse4a \-m3dnow \-mpopcnt \-mabm \-msse5 
588 \&\-mthreads  \-mno\-align\-stringops  \-minline\-all\-stringops 
589 \&\-minline\-stringops\-dynamically \-minline\-compares 
590 \&\-mstringop\-strategy=\fR\fIalg\fR \fB\-mpush\-args  \-maccumulate\-outgoing\-args 
591 \&\-m128bit\-long\-double \-m96bit\-long\-double \-mregparm=\fR\fInum\fR \fB\-msseregparm 
592 \&\-mveclibabi=\fR\fItype\fR \fB\-mpc32 \-mpc64 \-mpc80 \-mstackrealign 
593 \&\-momit\-leaf\-frame\-pointer  \-mno\-red\-zone \-mno\-tls\-direct\-seg\-refs 
594 \&\-mcmodel=\fR\fIcode-model\fR 
595 \&\fB\-m32  \-m64 \-mlarge\-data\-threshold=\fR\fInum\fR 
596 \&\fB\-mfused\-madd \-mno\-fused\-madd \-msse2avx\fR
597 .Sp
598 \&\fI\s-1IA\-64\s0 Options\fR
599 \&\fB\-mbig\-endian  \-mlittle\-endian  \-mgnu\-as  \-mgnu\-ld  \-mno\-pic 
600 \&\-mvolatile\-asm\-stop  \-mregister\-names  \-mno\-sdata 
601 \&\-mconstant\-gp  \-mauto\-pic  \-minline\-float\-divide\-min\-latency 
602 \&\-minline\-float\-divide\-max\-throughput 
603 \&\-minline\-int\-divide\-min\-latency 
604 \&\-minline\-int\-divide\-max\-throughput  
605 \&\-minline\-sqrt\-min\-latency \-minline\-sqrt\-max\-throughput 
606 \&\-mno\-dwarf2\-asm \-mearly\-stop\-bits 
607 \&\-mfixed\-range=\fR\fIregister-range\fR \fB\-mtls\-size=\fR\fItls-size\fR 
608 \&\fB\-mtune=\fR\fIcpu-type\fR \fB\-mt \-pthread \-milp32 \-mlp64 
609 \&\-mno\-sched\-br\-data\-spec \-msched\-ar\-data\-spec \-mno\-sched\-control\-spec 
610 \&\-msched\-br\-in\-data\-spec \-msched\-ar\-in\-data\-spec \-msched\-in\-control\-spec 
611 \&\-msched\-ldc \-mno\-sched\-control\-ldc \-mno\-sched\-spec\-verbose 
612 \&\-mno\-sched\-prefer\-non\-data\-spec\-insns 
613 \&\-mno\-sched\-prefer\-non\-control\-spec\-insns 
614 \&\-mno\-sched\-count\-spec\-in\-critical\-path\fR
615 .Sp
616 \&\fIM32R/D Options\fR
617 \&\fB\-m32r2 \-m32rx \-m32r 
618 \&\-mdebug 
619 \&\-malign\-loops \-mno\-align\-loops 
620 \&\-missue\-rate=\fR\fInumber\fR 
621 \&\fB\-mbranch\-cost=\fR\fInumber\fR 
622 \&\fB\-mmodel=\fR\fIcode-size-model-type\fR 
623 \&\fB\-msdata=\fR\fIsdata-type\fR 
624 \&\fB\-mno\-flush\-func \-mflush\-func=\fR\fIname\fR 
625 \&\fB\-mno\-flush\-trap \-mflush\-trap=\fR\fInumber\fR 
626 \&\fB\-G\fR \fInum\fR
627 .Sp
628 \&\fIM32C Options\fR
629 \&\fB\-mcpu=\fR\fIcpu\fR \fB\-msim \-memregs=\fR\fInumber\fR
630 .Sp
631 \&\fIM680x0 Options\fR
632 \&\fB\-march=\fR\fIarch\fR  \fB\-mcpu=\fR\fIcpu\fR  \fB\-mtune=\fR\fItune\fR
633 \&\fB\-m68000  \-m68020  \-m68020\-40  \-m68020\-60  \-m68030  \-m68040 
634 \&\-m68060  \-mcpu32  \-m5200  \-m5206e  \-m528x  \-m5307  \-m5407 
635 \&\-mcfv4e  \-mbitfield  \-mno\-bitfield  \-mc68000  \-mc68020 
636 \&\-mnobitfield  \-mrtd  \-mno\-rtd  \-mdiv  \-mno\-div  \-mshort 
637 \&\-mno\-short  \-mhard\-float  \-m68881  \-msoft\-float  \-mpcrel 
638 \&\-malign\-int  \-mstrict\-align  \-msep\-data  \-mno\-sep\-data 
639 \&\-mshared\-library\-id=n  \-mid\-shared\-library  \-mno\-id\-shared\-library 
640 \&\-mxgot \-mno\-xgot\fR
641 .Sp
642 \&\fIM68hc1x Options\fR
643 \&\fB\-m6811  \-m6812  \-m68hc11  \-m68hc12   \-m68hcs12 
644 \&\-mauto\-incdec  \-minmax  \-mlong\-calls  \-mshort 
645 \&\-msoft\-reg\-count=\fR\fIcount\fR
646 .Sp
647 \&\fIMCore Options\fR
648 \&\fB\-mhardlit  \-mno\-hardlit  \-mdiv  \-mno\-div  \-mrelax\-immediates 
649 \&\-mno\-relax\-immediates  \-mwide\-bitfields  \-mno\-wide\-bitfields 
650 \&\-m4byte\-functions  \-mno\-4byte\-functions  \-mcallgraph\-data 
651 \&\-mno\-callgraph\-data  \-mslow\-bytes  \-mno\-slow\-bytes  \-mno\-lsim 
652 \&\-mlittle\-endian  \-mbig\-endian  \-m210  \-m340  \-mstack\-increment\fR
653 .Sp
654 \&\fI\s-1MIPS\s0 Options\fR
655 \&\fB\-EL  \-EB  \-march=\fR\fIarch\fR  \fB\-mtune=\fR\fIarch\fR 
656 \&\fB\-mips1  \-mips2  \-mips3  \-mips4  \-mips32  \-mips32r2 
657 \&\-mips64  \-mips64r2 
658 \&\-mips16  \-mno\-mips16  \-mflip\-mips16 
659 \&\-minterlink\-mips16  \-mno\-interlink\-mips16 
660 \&\-mabi=\fR\fIabi\fR  \fB\-mabicalls  \-mno\-abicalls 
661 \&\-mshared  \-mno\-shared  \-mplt  \-mno\-plt  \-mxgot  \-mno\-xgot 
662 \&\-mgp32  \-mgp64  \-mfp32  \-mfp64  \-mhard\-float  \-msoft\-float 
663 \&\-msingle\-float  \-mdouble\-float  \-mdsp  \-mno\-dsp  \-mdspr2  \-mno\-dspr2 
664 \&\-mfpu=\fR\fIfpu-type\fR 
665 \&\fB\-msmartmips  \-mno\-smartmips 
666 \&\-mpaired\-single  \-mno\-paired\-single  \-mdmx  \-mno\-mdmx 
667 \&\-mips3d  \-mno\-mips3d  \-mmt  \-mno\-mt  \-mllsc  \-mno\-llsc 
668 \&\-mlong64  \-mlong32  \-msym32  \-mno\-sym32 
669 \&\-G\fR\fInum\fR  \fB\-mlocal\-sdata  \-mno\-local\-sdata 
670 \&\-mextern\-sdata  \-mno\-extern\-sdata  \-mgpopt  \-mno\-gopt 
671 \&\-membedded\-data  \-mno\-embedded\-data 
672 \&\-muninit\-const\-in\-rodata  \-mno\-uninit\-const\-in\-rodata 
673 \&\-mcode\-readable=\fR\fIsetting\fR 
674 \&\fB\-msplit\-addresses  \-mno\-split\-addresses 
675 \&\-mexplicit\-relocs  \-mno\-explicit\-relocs 
676 \&\-mcheck\-zero\-division  \-mno\-check\-zero\-division 
677 \&\-mdivide\-traps  \-mdivide\-breaks 
678 \&\-mmemcpy  \-mno\-memcpy  \-mlong\-calls  \-mno\-long\-calls 
679 \&\-mmad  \-mno\-mad  \-mfused\-madd  \-mno\-fused\-madd  \-nocpp 
680 \&\-mfix\-r4000  \-mno\-fix\-r4000  \-mfix\-r4400  \-mno\-fix\-r4400 
681 \&\-mfix\-r10000 \-mno\-fix\-r10000  \-mfix\-vr4120  \-mno\-fix\-vr4120 
682 \&\-mfix\-vr4130  \-mno\-fix\-vr4130  \-mfix\-sb1  \-mno\-fix\-sb1 
683 \&\-mflush\-func=\fR\fIfunc\fR  \fB\-mno\-flush\-func 
684 \&\-mbranch\-cost=\fR\fInum\fR  \fB\-mbranch\-likely  \-mno\-branch\-likely 
685 \&\-mfp\-exceptions \-mno\-fp\-exceptions 
686 \&\-mvr4130\-align \-mno\-vr4130\-align\fR
687 .Sp
688 \&\fI\s-1MMIX\s0 Options\fR
689 \&\fB\-mlibfuncs  \-mno\-libfuncs  \-mepsilon  \-mno\-epsilon  \-mabi=gnu 
690 \&\-mabi=mmixware  \-mzero\-extend  \-mknuthdiv  \-mtoplevel\-symbols 
691 \&\-melf  \-mbranch\-predict  \-mno\-branch\-predict  \-mbase\-addresses 
692 \&\-mno\-base\-addresses  \-msingle\-exit  \-mno\-single\-exit\fR
693 .Sp
694 \&\fI\s-1MN10300\s0 Options\fR
695 \&\fB\-mmult\-bug  \-mno\-mult\-bug 
696 \&\-mam33  \-mno\-am33 
697 \&\-mam33\-2  \-mno\-am33\-2 
698 \&\-mreturn\-pointer\-on\-d0 
699 \&\-mno\-crt0  \-mrelax\fR
700 .Sp
701 \&\fI\s-1PDP\-11\s0 Options\fR
702 \&\fB\-mfpu  \-msoft\-float  \-mac0  \-mno\-ac0  \-m40  \-m45  \-m10 
703 \&\-mbcopy  \-mbcopy\-builtin  \-mint32  \-mno\-int16 
704 \&\-mint16  \-mno\-int32  \-mfloat32  \-mno\-float64 
705 \&\-mfloat64  \-mno\-float32  \-mabshi  \-mno\-abshi 
706 \&\-mbranch\-expensive  \-mbranch\-cheap 
707 \&\-msplit  \-mno\-split  \-munix\-asm  \-mdec\-asm\fR
708 .Sp
709 \&\fIpicoChip Options\fR
710 \&\fB\-mae=\fR\fIae_type\fR \fB\-mvliw\-lookahead=\fR\fIN\fR
711 \&\fB\-msymbol\-as\-address \-mno\-inefficient\-warnings\fR
712 .Sp
713 \&\fIPowerPC Options\fR
714 See \s-1RS/6000\s0 and PowerPC Options.
715 .Sp
716 \&\fI\s-1RS/6000\s0 and PowerPC Options\fR
717 \&\fB\-mcpu=\fR\fIcpu-type\fR 
718 \&\fB\-mtune=\fR\fIcpu-type\fR 
719 \&\fB\-mpower  \-mno\-power  \-mpower2  \-mno\-power2 
720 \&\-mpowerpc  \-mpowerpc64  \-mno\-powerpc 
721 \&\-maltivec  \-mno\-altivec 
722 \&\-mpowerpc\-gpopt  \-mno\-powerpc\-gpopt 
723 \&\-mpowerpc\-gfxopt  \-mno\-powerpc\-gfxopt 
724 \&\-mmfcrf  \-mno\-mfcrf  \-mpopcntb  \-mno\-popcntb  \-mfprnd  \-mno\-fprnd 
725 \&\-mcmpb \-mno\-cmpb \-mmfpgpr \-mno\-mfpgpr \-mhard\-dfp \-mno\-hard\-dfp 
726 \&\-mnew\-mnemonics  \-mold\-mnemonics 
727 \&\-mfull\-toc   \-mminimal\-toc  \-mno\-fp\-in\-toc  \-mno\-sum\-in\-toc 
728 \&\-m64  \-m32  \-mxl\-compat  \-mno\-xl\-compat  \-mpe 
729 \&\-malign\-power  \-malign\-natural 
730 \&\-msoft\-float  \-mhard\-float  \-mmultiple  \-mno\-multiple 
731 \&\-msingle\-float \-mdouble\-float \-msimple\-fpu 
732 \&\-mstring  \-mno\-string  \-mupdate  \-mno\-update 
733 \&\-mavoid\-indexed\-addresses  \-mno\-avoid\-indexed\-addresses 
734 \&\-mfused\-madd  \-mno\-fused\-madd  \-mbit\-align  \-mno\-bit\-align 
735 \&\-mstrict\-align  \-mno\-strict\-align  \-mrelocatable 
736 \&\-mno\-relocatable  \-mrelocatable\-lib  \-mno\-relocatable\-lib 
737 \&\-mtoc  \-mno\-toc  \-mlittle  \-mlittle\-endian  \-mbig  \-mbig\-endian 
738 \&\-mdynamic\-no\-pic  \-maltivec  \-mswdiv 
739 \&\-mprioritize\-restricted\-insns=\fR\fIpriority\fR 
740 \&\fB\-msched\-costly\-dep=\fR\fIdependence_type\fR 
741 \&\fB\-minsert\-sched\-nops=\fR\fIscheme\fR 
742 \&\fB\-mcall\-sysv  \-mcall\-netbsd 
743 \&\-maix\-struct\-return  \-msvr4\-struct\-return 
744 \&\-mabi=\fR\fIabi-type\fR \fB\-msecure\-plt \-mbss\-plt 
745 \&\-misel \-mno\-isel 
746 \&\-misel=yes  \-misel=no 
747 \&\-mspe \-mno\-spe 
748 \&\-mspe=yes  \-mspe=no 
749 \&\-mpaired 
750 \&\-mgen\-cell\-microcode \-mwarn\-cell\-microcode 
751 \&\-mvrsave \-mno\-vrsave 
752 \&\-mmulhw \-mno\-mulhw 
753 \&\-mdlmzb \-mno\-dlmzb 
754 \&\-mfloat\-gprs=yes  \-mfloat\-gprs=no \-mfloat\-gprs=single \-mfloat\-gprs=double 
755 \&\-mprototype  \-mno\-prototype 
756 \&\-msim  \-mmvme  \-mads  \-myellowknife  \-memb  \-msdata 
757 \&\-msdata=\fR\fIopt\fR  \fB\-mvxworks  \-G\fR \fInum\fR  \fB\-pthread\fR
758 .Sp
759 \&\fIS/390 and zSeries Options\fR
760 \&\fB\-mtune=\fR\fIcpu-type\fR  \fB\-march=\fR\fIcpu-type\fR 
761 \&\fB\-mhard\-float  \-msoft\-float  \-mhard\-dfp \-mno\-hard\-dfp 
762 \&\-mlong\-double\-64 \-mlong\-double\-128 
763 \&\-mbackchain  \-mno\-backchain \-mpacked\-stack  \-mno\-packed\-stack 
764 \&\-msmall\-exec  \-mno\-small\-exec  \-mmvcle \-mno\-mvcle 
765 \&\-m64  \-m31  \-mdebug  \-mno\-debug  \-mesa  \-mzarch 
766 \&\-mtpf\-trace \-mno\-tpf\-trace  \-mfused\-madd  \-mno\-fused\-madd 
767 \&\-mwarn\-framesize  \-mwarn\-dynamicstack  \-mstack\-size \-mstack\-guard\fR
768 .Sp
769 \&\fIScore Options\fR
770 \&\fB\-meb \-mel 
771 \&\-mnhwloop 
772 \&\-muls 
773 \&\-mmac 
774 \&\-mscore5 \-mscore5u \-mscore7 \-mscore7d\fR
775 .Sp
776 \&\fI\s-1SH\s0 Options\fR
777 \&\fB\-m1  \-m2  \-m2e  \-m3  \-m3e 
778 \&\-m4\-nofpu  \-m4\-single\-only  \-m4\-single  \-m4 
779 \&\-m4a\-nofpu \-m4a\-single\-only \-m4a\-single \-m4a \-m4al 
780 \&\-m5\-64media  \-m5\-64media\-nofpu 
781 \&\-m5\-32media  \-m5\-32media\-nofpu 
782 \&\-m5\-compact  \-m5\-compact\-nofpu 
783 \&\-mb  \-ml  \-mdalign  \-mrelax 
784 \&\-mbigtable  \-mfmovd  \-mhitachi \-mrenesas \-mno\-renesas \-mnomacsave 
785 \&\-mieee  \-mbitops  \-misize  \-minline\-ic_invalidate \-mpadstruct  \-mspace 
786 \&\-mprefergot  \-musermode \-multcost=\fR\fInumber\fR \fB\-mdiv=\fR\fIstrategy\fR 
787 \&\fB\-mdivsi3_libfunc=\fR\fIname\fR \fB\-mfixed\-range=\fR\fIregister-range\fR 
788 \&\fB\-madjust\-unroll \-mindexed\-addressing \-mgettrcost=\fR\fInumber\fR \fB\-mpt\-fixed 
789 \&\-minvalid\-symbols\fR
790 .Sp
791 \&\fI\s-1SPARC\s0 Options\fR
792 \&\fB\-mcpu=\fR\fIcpu-type\fR 
793 \&\fB\-mtune=\fR\fIcpu-type\fR 
794 \&\fB\-mcmodel=\fR\fIcode-model\fR 
795 \&\fB\-m32  \-m64  \-mapp\-regs  \-mno\-app\-regs 
796 \&\-mfaster\-structs  \-mno\-faster\-structs 
797 \&\-mfpu  \-mno\-fpu  \-mhard\-float  \-msoft\-float 
798 \&\-mhard\-quad\-float  \-msoft\-quad\-float 
799 \&\-mimpure\-text  \-mno\-impure\-text  \-mlittle\-endian 
800 \&\-mstack\-bias  \-mno\-stack\-bias 
801 \&\-munaligned\-doubles  \-mno\-unaligned\-doubles 
802 \&\-mv8plus  \-mno\-v8plus  \-mvis  \-mno\-vis
803 \&\-threads \-pthreads \-pthread\fR
804 .Sp
805 \&\fI\s-1SPU\s0 Options\fR
806 \&\fB\-mwarn\-reloc \-merror\-reloc 
807 \&\-msafe\-dma \-munsafe\-dma 
808 \&\-mbranch\-hints 
809 \&\-msmall\-mem \-mlarge\-mem \-mstdmain 
810 \&\-mfixed\-range=\fR\fIregister-range\fR
811 .Sp
812 \&\fISystem V Options\fR
813 \&\fB\-Qy  \-Qn  \-YP,\fR\fIpaths\fR  \fB\-Ym,\fR\fIdir\fR
814 .Sp
815 \&\fIV850 Options\fR
816 \&\fB\-mlong\-calls  \-mno\-long\-calls  \-mep  \-mno\-ep 
817 \&\-mprolog\-function  \-mno\-prolog\-function  \-mspace 
818 \&\-mtda=\fR\fIn\fR  \fB\-msda=\fR\fIn\fR  \fB\-mzda=\fR\fIn\fR 
819 \&\fB\-mapp\-regs  \-mno\-app\-regs 
820 \&\-mdisable\-callt  \-mno\-disable\-callt 
821 \&\-mv850e1 
822 \&\-mv850e 
823 \&\-mv850  \-mbig\-switch\fR
824 .Sp
825 \&\fI\s-1VAX\s0 Options\fR
826 \&\fB\-mg  \-mgnu  \-munix\fR
827 .Sp
828 \&\fIVxWorks Options\fR
829 \&\fB\-mrtp  \-non\-static  \-Bstatic  \-Bdynamic 
830 \&\-Xbind\-lazy  \-Xbind\-now\fR
831 .Sp
832 \&\fIx86\-64 Options\fR
833 See i386 and x86\-64 Options.
834 .Sp
835 \&\fIi386 and x86\-64 Windows Options\fR
836 \&\fB\-mconsole \-mcygwin \-mno\-cygwin \-mdll
837 \&\-mnop\-fun\-dllimport \-mthread \-mwin32 \-mwindows\fR
838 .Sp
839 \&\fIXstormy16 Options\fR
840 \&\fB\-msim\fR
841 .Sp
842 \&\fIXtensa Options\fR
843 \&\fB\-mconst16 \-mno\-const16 
844 \&\-mfused\-madd  \-mno\-fused\-madd 
845 \&\-mserialize\-volatile  \-mno\-serialize\-volatile 
846 \&\-mtext\-section\-literals  \-mno\-text\-section\-literals 
847 \&\-mtarget\-align  \-mno\-target\-align 
848 \&\-mlongcalls  \-mno\-longcalls\fR
849 .Sp
850 \&\fIzSeries Options\fR
851 See S/390 and zSeries Options.
852 .IP "\fICode Generation Options\fR" 4
853 .IX Item "Code Generation Options"
854 \&\fB\-fcall\-saved\-\fR\fIreg\fR  \fB\-fcall\-used\-\fR\fIreg\fR 
855 \&\fB\-ffixed\-\fR\fIreg\fR  \fB\-fexceptions 
856 \&\-fnon\-call\-exceptions  \-funwind\-tables 
857 \&\-fasynchronous\-unwind\-tables 
858 \&\-finhibit\-size\-directive  \-finstrument\-functions 
859 \&\-finstrument\-functions\-exclude\-function\-list=\fR\fIsym\fR\fB,\fR\fIsym\fR\fB,... 
860 \&\-finstrument\-functions\-exclude\-file\-list=\fR\fIfile\fR\fB,\fR\fIfile\fR\fB,... 
861 \&\-fno\-common  \-fno\-ident 
862 \&\-fpcc\-struct\-return  \-fpic  \-fPIC \-fpie \-fPIE 
863 \&\-fno\-jump\-tables 
864 \&\-frecord\-gcc\-switches 
865 \&\-freg\-struct\-return  \-fshort\-enums 
866 \&\-fshort\-double  \-fshort\-wchar 
867 \&\-fverbose\-asm  \-fpack\-struct[=\fR\fIn\fR\fB]  \-fstack\-check 
868 \&\-fstack\-limit\-register=\fR\fIreg\fR  \fB\-fstack\-limit\-symbol=\fR\fIsym\fR 
869 \&\fB\-fno\-stack\-limit  \-fargument\-alias  \-fargument\-noalias 
870 \&\-fargument\-noalias\-global  \-fargument\-noalias\-anything 
871 \&\-fleading\-underscore  \-ftls\-model=\fR\fImodel\fR 
872 \&\fB\-ftrapv  \-fwrapv  \-fbounds\-check 
873 \&\-fvisibility\fR
874 .Sh "Options Controlling the Kind of Output"
875 .IX Subsection "Options Controlling the Kind of Output"
876 Compilation can involve up to four stages: preprocessing, compilation
877 proper, assembly and linking, always in that order.  \s-1GCC\s0 is capable of
878 preprocessing and compiling several files either into several
879 assembler input files, or into one assembler input file; then each
880 assembler input file produces an object file, and linking combines all
881 the object files (those newly compiled, and those specified as input)
882 into an executable file.
883 .PP
884 For any given input file, the file name suffix determines what kind of
885 compilation is done:
886 .IP "\fIfile\fR\fB.c\fR" 4
887 .IX Item "file.c"
888 C source code which must be preprocessed.
889 .IP "\fIfile\fR\fB.i\fR" 4
890 .IX Item "file.i"
891 C source code which should not be preprocessed.
892 .IP "\fIfile\fR\fB.ii\fR" 4
893 .IX Item "file.ii"
894 \&\*(C+ source code which should not be preprocessed.
895 .IP "\fIfile\fR\fB.m\fR" 4
896 .IX Item "file.m"
897 Objective-C source code.  Note that you must link with the \fIlibobjc\fR
898 library to make an Objective-C program work.
899 .IP "\fIfile\fR\fB.mi\fR" 4
900 .IX Item "file.mi"
901 Objective-C source code which should not be preprocessed.
902 .IP "\fIfile\fR\fB.mm\fR" 4
903 .IX Item "file.mm"
904 .PD 0
905 .IP "\fIfile\fR\fB.M\fR" 4
906 .IX Item "file.M"
907 .PD
908 Objective\-\*(C+ source code.  Note that you must link with the \fIlibobjc\fR
909 library to make an Objective\-\*(C+ program work.  Note that \fB.M\fR refers
910 to a literal capital M.
911 .IP "\fIfile\fR\fB.mii\fR" 4
912 .IX Item "file.mii"
913 Objective\-\*(C+ source code which should not be preprocessed.
914 .IP "\fIfile\fR\fB.h\fR" 4
915 .IX Item "file.h"
916 C, \*(C+, Objective-C or Objective\-\*(C+ header file to be turned into a
917 precompiled header.
918 .IP "\fIfile\fR\fB.cc\fR" 4
919 .IX Item "file.cc"
920 .PD 0
921 .IP "\fIfile\fR\fB.cp\fR" 4
922 .IX Item "file.cp"
923 .IP "\fIfile\fR\fB.cxx\fR" 4
924 .IX Item "file.cxx"
925 .IP "\fIfile\fR\fB.cpp\fR" 4
926 .IX Item "file.cpp"
927 .IP "\fIfile\fR\fB.CPP\fR" 4
928 .IX Item "file.CPP"
929 .IP "\fIfile\fR\fB.c++\fR" 4
930 .IX Item "file.c++"
931 .IP "\fIfile\fR\fB.C\fR" 4
932 .IX Item "file.C"
933 .PD
934 \&\*(C+ source code which must be preprocessed.  Note that in \fB.cxx\fR,
935 the last two letters must both be literally \fBx\fR.  Likewise,
936 \&\fB.C\fR refers to a literal capital C.
937 .IP "\fIfile\fR\fB.mm\fR" 4
938 .IX Item "file.mm"
939 .PD 0
940 .IP "\fIfile\fR\fB.M\fR" 4
941 .IX Item "file.M"
942 .PD
943 Objective\-\*(C+ source code which must be preprocessed.
944 .IP "\fIfile\fR\fB.mii\fR" 4
945 .IX Item "file.mii"
946 Objective\-\*(C+ source code which should not be preprocessed.
947 .IP "\fIfile\fR\fB.hh\fR" 4
948 .IX Item "file.hh"
949 .PD 0
950 .IP "\fIfile\fR\fB.H\fR" 4
951 .IX Item "file.H"
952 .IP "\fIfile\fR\fB.hp\fR" 4
953 .IX Item "file.hp"
954 .IP "\fIfile\fR\fB.hxx\fR" 4
955 .IX Item "file.hxx"
956 .IP "\fIfile\fR\fB.hpp\fR" 4
957 .IX Item "file.hpp"
958 .IP "\fIfile\fR\fB.HPP\fR" 4
959 .IX Item "file.HPP"
960 .IP "\fIfile\fR\fB.h++\fR" 4
961 .IX Item "file.h++"
962 .IP "\fIfile\fR\fB.tcc\fR" 4
963 .IX Item "file.tcc"
964 .PD
965 \&\*(C+ header file to be turned into a precompiled header.
966 .IP "\fIfile\fR\fB.f\fR" 4
967 .IX Item "file.f"
968 .PD 0
969 .IP "\fIfile\fR\fB.for\fR" 4
970 .IX Item "file.for"
971 .IP "\fIfile\fR\fB.ftn\fR" 4
972 .IX Item "file.ftn"
973 .PD
974 Fixed form Fortran source code which should not be preprocessed.
975 .IP "\fIfile\fR\fB.F\fR" 4
976 .IX Item "file.F"
977 .PD 0
978 .IP "\fIfile\fR\fB.FOR\fR" 4
979 .IX Item "file.FOR"
980 .IP "\fIfile\fR\fB.fpp\fR" 4
981 .IX Item "file.fpp"
982 .IP "\fIfile\fR\fB.FPP\fR" 4
983 .IX Item "file.FPP"
984 .IP "\fIfile\fR\fB.FTN\fR" 4
985 .IX Item "file.FTN"
986 .PD
987 Fixed form Fortran source code which must be preprocessed (with the traditional
988 preprocessor).
989 .IP "\fIfile\fR\fB.f90\fR" 4
990 .IX Item "file.f90"
991 .PD 0
992 .IP "\fIfile\fR\fB.f95\fR" 4
993 .IX Item "file.f95"
994 .IP "\fIfile\fR\fB.f03\fR" 4
995 .IX Item "file.f03"
996 .IP "\fIfile\fR\fB.f08\fR" 4
997 .IX Item "file.f08"
998 .PD
999 Free form Fortran source code which should not be preprocessed.
1000 .IP "\fIfile\fR\fB.F90\fR" 4
1001 .IX Item "file.F90"
1002 .PD 0
1003 .IP "\fIfile\fR\fB.F95\fR" 4
1004 .IX Item "file.F95"
1005 .IP "\fIfile\fR\fB.F03\fR" 4
1006 .IX Item "file.F03"
1007 .IP "\fIfile\fR\fB.F08\fR" 4
1008 .IX Item "file.F08"
1009 .PD
1010 Free form Fortran source code which must be preprocessed (with the
1011 traditional preprocessor).
1012 .IP "\fIfile\fR\fB.ads\fR" 4
1013 .IX Item "file.ads"
1014 Ada source code file which contains a library unit declaration (a
1015 declaration of a package, subprogram, or generic, or a generic
1016 instantiation), or a library unit renaming declaration (a package,
1017 generic, or subprogram renaming declaration).  Such files are also
1018 called \fIspecs\fR.
1019 .IP "\fIfile\fR\fB.adb\fR" 4
1020 .IX Item "file.adb"
1021 Ada source code file containing a library unit body (a subprogram or
1022 package body).  Such files are also called \fIbodies\fR.
1023 .IP "\fIfile\fR\fB.s\fR" 4
1024 .IX Item "file.s"
1025 Assembler code.
1026 .IP "\fIfile\fR\fB.S\fR" 4
1027 .IX Item "file.S"
1028 .PD 0
1029 .IP "\fIfile\fR\fB.sx\fR" 4
1030 .IX Item "file.sx"
1031 .PD
1032 Assembler code which must be preprocessed.
1033 .IP "\fIother\fR" 4
1034 .IX Item "other"
1035 An object file to be fed straight into linking.
1036 Any file name with no recognized suffix is treated this way.
1037 .PP
1038 You can specify the input language explicitly with the \fB\-x\fR option:
1039 .IP "\fB\-x\fR \fIlanguage\fR" 4
1040 .IX Item "-x language"
1041 Specify explicitly the \fIlanguage\fR for the following input files
1042 (rather than letting the compiler choose a default based on the file
1043 name suffix).  This option applies to all following input files until
1044 the next \fB\-x\fR option.  Possible values for \fIlanguage\fR are:
1045 .Sp
1046 .Vb 8
1047 \&        c  c\-header  c\-cpp\-output
1048 \&        c++  c++\-header  c++\-cpp\-output
1049 \&        objective\-c  objective\-c\-header  objective\-c\-cpp\-output
1050 \&        objective\-c++ objective\-c++\-header objective\-c++\-cpp\-output
1051 \&        assembler  assembler\-with\-cpp
1052 \&        ada
1053 \&        f77  f77\-cpp\-input f95  f95\-cpp\-input
1054 \&        java
1055 .Ve
1056 .IP "\fB\-x none\fR" 4
1057 .IX Item "-x none"
1058 Turn off any specification of a language, so that subsequent files are
1059 handled according to their file name suffixes (as they are if \fB\-x\fR
1060 has not been used at all).
1061 .IP "\fB\-pass\-exit\-codes\fR" 4
1062 .IX Item "-pass-exit-codes"
1063 Normally the \fBgcc\fR program will exit with the code of 1 if any
1064 phase of the compiler returns a non-success return code.  If you specify
1065 \&\fB\-pass\-exit\-codes\fR, the \fBgcc\fR program will instead return with
1066 numerically highest error produced by any phase that returned an error
1067 indication.  The C, \*(C+, and Fortran frontends return 4, if an internal
1068 compiler error is encountered.
1069 .PP
1070 If you only want some of the stages of compilation, you can use
1071 \&\fB\-x\fR (or filename suffixes) to tell \fBgcc\fR where to start, and
1072 one of the options \fB\-c\fR, \fB\-S\fR, or \fB\-E\fR to say where
1073 \&\fBgcc\fR is to stop.  Note that some combinations (for example,
1074 \&\fB\-x cpp-output \-E\fR) instruct \fBgcc\fR to do nothing at all.
1075 .IP "\fB\-c\fR" 4
1076 .IX Item "-c"
1077 Compile or assemble the source files, but do not link.  The linking
1078 stage simply is not done.  The ultimate output is in the form of an
1079 object file for each source file.
1080 .Sp
1081 By default, the object file name for a source file is made by replacing
1082 the suffix \fB.c\fR, \fB.i\fR, \fB.s\fR, etc., with \fB.o\fR.
1083 .Sp
1084 Unrecognized input files, not requiring compilation or assembly, are
1085 ignored.
1086 .IP "\fB\-S\fR" 4
1087 .IX Item "-S"
1088 Stop after the stage of compilation proper; do not assemble.  The output
1089 is in the form of an assembler code file for each non-assembler input
1090 file specified.
1091 .Sp
1092 By default, the assembler file name for a source file is made by
1093 replacing the suffix \fB.c\fR, \fB.i\fR, etc., with \fB.s\fR.
1094 .Sp
1095 Input files that don't require compilation are ignored.
1096 .IP "\fB\-E\fR" 4
1097 .IX Item "-E"
1098 Stop after the preprocessing stage; do not run the compiler proper.  The
1099 output is in the form of preprocessed source code, which is sent to the
1100 standard output.
1101 .Sp
1102 Input files which don't require preprocessing are ignored.
1103 .IP "\fB\-o\fR \fIfile\fR" 4
1104 .IX Item "-o file"
1105 Place output in file \fIfile\fR.  This applies regardless to whatever
1106 sort of output is being produced, whether it be an executable file,
1107 an object file, an assembler file or preprocessed C code.
1108 .Sp
1109 If \fB\-o\fR is not specified, the default is to put an executable
1110 file in \fIa.out\fR, the object file for
1111 \&\fI\fIsource\fI.\fIsuffix\fI\fR in \fI\fIsource\fI.o\fR, its
1112 assembler file in \fI\fIsource\fI.s\fR, a precompiled header file in
1113 \&\fI\fIsource\fI.\fIsuffix\fI.gch\fR, and all preprocessed C source on
1114 standard output.
1115 .IP "\fB\-v\fR" 4
1116 .IX Item "-v"
1117 Print (on standard error output) the commands executed to run the stages
1118 of compilation.  Also print the version number of the compiler driver
1119 program and of the preprocessor and the compiler proper.
1120 .IP "\fB\-###\fR" 4
1121 .IX Item "-###"
1122 Like \fB\-v\fR except the commands are not executed and all command
1123 arguments are quoted.  This is useful for shell scripts to capture the
1124 driver-generated command lines.
1125 .IP "\fB\-pipe\fR" 4
1126 .IX Item "-pipe"
1127 Use pipes rather than temporary files for communication between the
1128 various stages of compilation.  This fails to work on some systems where
1129 the assembler is unable to read from a pipe; but the \s-1GNU\s0 assembler has
1130 no trouble.
1131 .IP "\fB\-combine\fR" 4
1132 .IX Item "-combine"
1133 If you are compiling multiple source files, this option tells the driver
1134 to pass all the source files to the compiler at once (for those
1135 languages for which the compiler can handle this).  This will allow
1136 intermodule analysis (\s-1IMA\s0) to be performed by the compiler.  Currently the only
1137 language for which this is supported is C.  If you pass source files for
1138 multiple languages to the driver, using this option, the driver will invoke
1139 the compiler(s) that support \s-1IMA\s0 once each, passing each compiler all the
1140 source files appropriate for it.  For those languages that do not support
1141 \&\s-1IMA\s0 this option will be ignored, and the compiler will be invoked once for
1142 each source file in that language.  If you use this option in conjunction
1143 with \fB\-save\-temps\fR, the compiler will generate multiple
1144 pre-processed files
1145 (one for each source file), but only one (combined) \fI.o\fR or
1146 \&\fI.s\fR file.
1147 .IP "\fB\-\-help\fR" 4
1148 .IX Item "--help"
1149 Print (on the standard output) a description of the command line options
1150 understood by \fBgcc\fR.  If the \fB\-v\fR option is also specified
1151 then \fB\-\-help\fR will also be passed on to the various processes
1152 invoked by \fBgcc\fR, so that they can display the command line options
1153 they accept.  If the \fB\-Wextra\fR option has also been specified
1154 (prior to the \fB\-\-help\fR option), then command line options which
1155 have no documentation associated with them will also be displayed.
1156 .IP "\fB\-\-target\-help\fR" 4
1157 .IX Item "--target-help"
1158 Print (on the standard output) a description of target-specific command
1159 line options for each tool.  For some targets extra target-specific
1160 information may also be printed.
1161 .IP "\fB\-\-help={\fR\fIclass\fR|[\fB^\fR]\fIqualifier\fR\fB}\fR[\fB,...\fR]" 4
1162 .IX Item "--help={class|[^]qualifier}[,...]"
1163 Print (on the standard output) a description of the command line
1164 options understood by the compiler that fit into all specified classes
1165 and qualifiers.  These are the supported classes:
1166 .RS 4
1167 .IP "\fBoptimizers\fR" 4
1168 .IX Item "optimizers"
1169 This will display all of the optimization options supported by the
1170 compiler.
1171 .IP "\fBwarnings\fR" 4
1172 .IX Item "warnings"
1173 This will display all of the options controlling warning messages
1174 produced by the compiler.
1175 .IP "\fBtarget\fR" 4
1176 .IX Item "target"
1177 This will display target-specific options.  Unlike the
1178 \&\fB\-\-target\-help\fR option however, target-specific options of the
1179 linker and assembler will not be displayed.  This is because those
1180 tools do not currently support the extended \fB\-\-help=\fR syntax.
1181 .IP "\fBparams\fR" 4
1182 .IX Item "params"
1183 This will display the values recognized by the \fB\-\-param\fR
1184 option.
1185 .IP "\fIlanguage\fR" 4
1186 .IX Item "language"
1187 This will display the options supported for \fIlanguage\fR, where 
1188 \&\fIlanguage\fR is the name of one of the languages supported in this 
1189 version of \s-1GCC\s0.
1190 .IP "\fBcommon\fR" 4
1191 .IX Item "common"
1192 This will display the options that are common to all languages.
1193 .RE
1194 .RS 4
1195 .Sp
1196 These are the supported qualifiers:
1197 .IP "\fBundocumented\fR" 4
1198 .IX Item "undocumented"
1199 Display only those options which are undocumented.
1200 .IP "\fBjoined\fR" 4
1201 .IX Item "joined"
1202 Display options which take an argument that appears after an equal
1203 sign in the same continuous piece of text, such as:
1204 \&\fB\-\-help=target\fR.
1205 .IP "\fBseparate\fR" 4
1206 .IX Item "separate"
1207 Display options which take an argument that appears as a separate word
1208 following the original option, such as: \fB\-o output-file\fR.
1209 .RE
1210 .RS 4
1211 .Sp
1212 Thus for example to display all the undocumented target-specific
1213 switches supported by the compiler the following can be used:
1214 .Sp
1215 .Vb 1
1216 \&        \-\-help=target,undocumented
1217 .Ve
1218 .Sp
1219 The sense of a qualifier can be inverted by prefixing it with the
1220 \&\fB^\fR character, so for example to display all binary warning
1221 options (i.e., ones that are either on or off and that do not take an
1222 argument), which have a description the following can be used:
1223 .Sp
1224 .Vb 1
1225 \&        \-\-help=warnings,^joined,^undocumented
1226 .Ve
1227 .Sp
1228 The argument to \fB\-\-help=\fR should not consist solely of inverted
1229 qualifiers.
1230 .Sp
1231 Combining several classes is possible, although this usually
1232 restricts the output by so much that there is nothing to display.  One
1233 case where it does work however is when one of the classes is
1234 \&\fItarget\fR.  So for example to display all the target-specific
1235 optimization options the following can be used:
1236 .Sp
1237 .Vb 1
1238 \&        \-\-help=target,optimizers
1239 .Ve
1240 .Sp
1241 The \fB\-\-help=\fR option can be repeated on the command line.  Each
1242 successive use will display its requested class of options, skipping
1243 those that have already been displayed.
1244 .Sp
1245 If the \fB\-Q\fR option appears on the command line before the
1246 \&\fB\-\-help=\fR option, then the descriptive text displayed by
1247 \&\fB\-\-help=\fR is changed.  Instead of describing the displayed
1248 options, an indication is given as to whether the option is enabled,
1249 disabled or set to a specific value (assuming that the compiler
1250 knows this at the point where the \fB\-\-help=\fR option is used).
1251 .Sp
1252 Here is a truncated example from the \s-1ARM\s0 port of \fBgcc\fR:
1253 .Sp
1254 .Vb 5
1255 \&          % gcc \-Q \-mabi=2 \-\-help=target \-c
1256 \&          The following options are target specific:
1257 \&          \-mabi=                                2
1258 \&          \-mabort\-on\-noreturn                   [disabled]
1259 \&          \-mapcs                                [disabled]
1260 .Ve
1261 .Sp
1262 The output is sensitive to the effects of previous command line
1263 options, so for example it is possible to find out which optimizations
1264 are enabled at \fB\-O2\fR by using:
1265 .Sp
1266 .Vb 1
1267 \&        \-Q \-O2 \-\-help=optimizers
1268 .Ve
1269 .Sp
1270 Alternatively you can discover which binary optimizations are enabled
1271 by \fB\-O3\fR by using:
1272 .Sp
1273 .Vb 3
1274 \&        gcc \-c \-Q \-O3 \-\-help=optimizers > /tmp/O3\-opts
1275 \&        gcc \-c \-Q \-O2 \-\-help=optimizers > /tmp/O2\-opts
1276 \&        diff /tmp/O2\-opts /tmp/O3\-opts | grep enabled
1277 .Ve
1278 .RE
1279 .IP "\fB\-no\-canonical\-prefixes\fR" 4
1280 .IX Item "-no-canonical-prefixes"
1281 Do not expand any symbolic links, resolve references to \fB/../\fR
1282 or \fB/./\fR, or make the path absolute when generating a relative
1283 prefix.
1284 .IP "\fB\-\-version\fR" 4
1285 .IX Item "--version"
1286 Display the version number and copyrights of the invoked \s-1GCC\s0.
1287 .IP "\fB\-wrapper\fR" 4
1288 .IX Item "-wrapper"
1289 Invoke all subcommands under a wrapper program. It takes a single
1290 comma separated list as an argument, which will be used to invoke
1291 the wrapper:
1292 .Sp
1293 .Vb 1
1294 \&        gcc \-c t.c \-wrapper gdb,\-\-args
1295 .Ve
1296 .Sp
1297 This will invoke all subprograms of gcc under \*(L"gdb \-\-args\*(R",
1298 thus cc1 invocation will be \*(L"gdb \-\-args cc1 ...\*(R".
1299 .IP "\fB\-fplugin=\fR\fIname\fR\fB.so\fR" 4
1300 .IX Item "-fplugin=name.so"
1301 Load the plugin code in file \fIname\fR.so, assumed to be a
1302 shared object to be dlopen'd by the compiler.  The base name of
1303 the shared object file is used to identify the plugin for the
1304 purposes of argument parsing (See
1305 \&\fB\-fplugin\-arg\-\fR\fIname\fR\fB\-\fR\fIkey\fR\fB=\fR\fIvalue\fR below).
1306 Each plugin should define the callback functions specified in the
1307 Plugins \s-1API\s0.
1308 .IP "\fB\-fplugin\-arg\-\fR\fIname\fR\fB\-\fR\fIkey\fR\fB=\fR\fIvalue\fR" 4
1309 .IX Item "-fplugin-arg-name-key=value"
1310 Define an argument called \fIkey\fR with a value of \fIvalue\fR
1311 for the plugin called \fIname\fR.
1312 .IP "\fB@\fR\fIfile\fR" 4
1313 .IX Item "@file"
1314 Read command-line options from \fIfile\fR.  The options read are
1315 inserted in place of the original @\fIfile\fR option.  If \fIfile\fR
1316 does not exist, or cannot be read, then the option will be treated
1317 literally, and not removed.  
1318 .Sp
1319 Options in \fIfile\fR are separated by whitespace.  A whitespace
1320 character may be included in an option by surrounding the entire
1321 option in either single or double quotes.  Any character (including a
1322 backslash) may be included by prefixing the character to be included
1323 with a backslash.  The \fIfile\fR may itself contain additional
1324 @\fIfile\fR options; any such options will be processed recursively.
1325 .Sh "Compiling \*(C+ Programs"
1326 .IX Subsection "Compiling  Programs"
1327 \&\*(C+ source files conventionally use one of the suffixes \fB.C\fR,
1328 \&\fB.cc\fR, \fB.cpp\fR, \fB.CPP\fR, \fB.c++\fR, \fB.cp\fR, or
1329 \&\fB.cxx\fR; \*(C+ header files often use \fB.hh\fR, \fB.hpp\fR,
1330 \&\fB.H\fR, or (for shared template code) \fB.tcc\fR; and
1331 preprocessed \*(C+ files use the suffix \fB.ii\fR.  \s-1GCC\s0 recognizes
1332 files with these names and compiles them as \*(C+ programs even if you
1333 call the compiler the same way as for compiling C programs (usually
1334 with the name \fBgcc\fR).
1335 .PP
1336 However, the use of \fBgcc\fR does not add the \*(C+ library.
1337 \&\fBg++\fR is a program that calls \s-1GCC\s0 and treats \fB.c\fR,
1338 \&\fB.h\fR and \fB.i\fR files as \*(C+ source files instead of C source
1339 files unless \fB\-x\fR is used, and automatically specifies linking
1340 against the \*(C+ library.  This program is also useful when
1341 precompiling a C header file with a \fB.h\fR extension for use in \*(C+
1342 compilations.  On many systems, \fBg++\fR is also installed with
1343 the name \fBc++\fR.
1344 .PP
1345 When you compile \*(C+ programs, you may specify many of the same
1346 command-line options that you use for compiling programs in any
1347 language; or command-line options meaningful for C and related
1348 languages; or options that are meaningful only for \*(C+ programs.
1349 .Sh "Options Controlling C Dialect"
1350 .IX Subsection "Options Controlling C Dialect"
1351 The following options control the dialect of C (or languages derived
1352 from C, such as \*(C+, Objective-C and Objective\-\*(C+) that the compiler
1353 accepts:
1354 .IP "\fB\-ansi\fR" 4
1355 .IX Item "-ansi"
1356 In C mode, this is equivalent to \fB\-std=c89\fR. In \*(C+ mode, it is
1357 equivalent to \fB\-std=c++98\fR.
1358 .Sp
1359 This turns off certain features of \s-1GCC\s0 that are incompatible with \s-1ISO\s0
1360 C90 (when compiling C code), or of standard \*(C+ (when compiling \*(C+ code),
1361 such as the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR keywords, and
1362 predefined macros such as \f(CW\*(C`unix\*(C'\fR and \f(CW\*(C`vax\*(C'\fR that identify the
1363 type of system you are using.  It also enables the undesirable and
1364 rarely used \s-1ISO\s0 trigraph feature.  For the C compiler,
1365 it disables recognition of \*(C+ style \fB//\fR comments as well as
1366 the \f(CW\*(C`inline\*(C'\fR keyword.
1367 .Sp
1368 The alternate keywords \f(CW\*(C`_\|_asm_\|_\*(C'\fR, \f(CW\*(C`_\|_extension_\|_\*(C'\fR,
1369 \&\f(CW\*(C`_\|_inline_\|_\*(C'\fR and \f(CW\*(C`_\|_typeof_\|_\*(C'\fR continue to work despite
1370 \&\fB\-ansi\fR.  You would not want to use them in an \s-1ISO\s0 C program, of
1371 course, but it is useful to put them in header files that might be included
1372 in compilations done with \fB\-ansi\fR.  Alternate predefined macros
1373 such as \f(CW\*(C`_\|_unix_\|_\*(C'\fR and \f(CW\*(C`_\|_vax_\|_\*(C'\fR are also available, with or
1374 without \fB\-ansi\fR.
1375 .Sp
1376 The \fB\-ansi\fR option does not cause non-ISO programs to be
1377 rejected gratuitously.  For that, \fB\-pedantic\fR is required in
1378 addition to \fB\-ansi\fR.  
1379 .Sp
1380 The macro \f(CW\*(C`_\|_STRICT_ANSI_\|_\*(C'\fR is predefined when the \fB\-ansi\fR
1381 option is used.  Some header files may notice this macro and refrain
1382 from declaring certain functions or defining certain macros that the
1383 \&\s-1ISO\s0 standard doesn't call for; this is to avoid interfering with any
1384 programs that might use these names for other things.
1385 .Sp
1386 Functions that would normally be built in but do not have semantics
1387 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
1388 functions when \fB\-ansi\fR is used.  
1389 .IP "\fB\-std=\fR" 4
1390 .IX Item "-std="
1391 Determine the language standard.   This option
1392 is currently only supported when compiling C or \*(C+. 
1393 .Sp
1394 The compiler can accept several base standards, such as \fBc89\fR or
1395 \&\fBc++98\fR, and \s-1GNU\s0 dialects of those standards, such as
1396 \&\fBgnu89\fR or \fBgnu++98\fR.  By specifying a base standard, the
1397 compiler will accept all programs following that standard and those
1398 using \s-1GNU\s0 extensions that do not contradict it.  For example,
1399 \&\fB\-std=c89\fR turns off certain features of \s-1GCC\s0 that are
1400 incompatible with \s-1ISO\s0 C90, such as the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR
1401 keywords, but not other \s-1GNU\s0 extensions that do not have a meaning in
1402 \&\s-1ISO\s0 C90, such as omitting the middle term of a \f(CW\*(C`?:\*(C'\fR
1403 expression. On the other hand, by specifying a \s-1GNU\s0 dialect of a
1404 standard, all features the compiler support are enabled, even when
1405 those features change the meaning of the base standard and some
1406 strict-conforming programs may be rejected.  The particular standard
1407 is used by \fB\-pedantic\fR to identify which features are \s-1GNU\s0
1408 extensions given that version of the standard. For example
1409 \&\fB\-std=gnu89 \-pedantic\fR would warn about \*(C+ style \fB//\fR
1410 comments, while \fB\-std=gnu99 \-pedantic\fR would not.
1411 .Sp
1412 A value for this option must be provided; possible values are
1413 .RS 4
1414 .IP "\fBc89\fR" 4
1415 .IX Item "c89"
1416 .PD 0
1417 .IP "\fBiso9899:1990\fR" 4
1418 .IX Item "iso9899:1990"
1419 .PD
1420 Support all \s-1ISO\s0 C90 programs (certain \s-1GNU\s0 extensions that conflict
1421 with \s-1ISO\s0 C90 are disabled). Same as \fB\-ansi\fR for C code.
1422 .IP "\fBiso9899:199409\fR" 4
1423 .IX Item "iso9899:199409"
1424 \&\s-1ISO\s0 C90 as modified in amendment 1.
1425 .IP "\fBc99\fR" 4
1426 .IX Item "c99"
1427 .PD 0
1428 .IP "\fBc9x\fR" 4
1429 .IX Item "c9x"
1430 .IP "\fBiso9899:1999\fR" 4
1431 .IX Item "iso9899:1999"
1432 .IP "\fBiso9899:199x\fR" 4
1433 .IX Item "iso9899:199x"
1434 .PD
1435 \&\s-1ISO\s0 C99.  Note that this standard is not yet fully supported; see
1436 <\fBhttp://gcc.gnu.org/gcc\-4.4/c99status.html\fR> for more information.  The
1437 names \fBc9x\fR and \fBiso9899:199x\fR are deprecated.
1438 .IP "\fBgnu89\fR" 4
1439 .IX Item "gnu89"
1440 \&\s-1GNU\s0 dialect of \s-1ISO\s0 C90 (including some C99 features). This
1441 is the default for C code.
1442 .IP "\fBgnu99\fR" 4
1443 .IX Item "gnu99"
1444 .PD 0
1445 .IP "\fBgnu9x\fR" 4
1446 .IX Item "gnu9x"
1447 .PD
1448 \&\s-1GNU\s0 dialect of \s-1ISO\s0 C99.  When \s-1ISO\s0 C99 is fully implemented in \s-1GCC\s0,
1449 this will become the default.  The name \fBgnu9x\fR is deprecated.
1450 .IP "\fBc++98\fR" 4
1451 .IX Item "c++98"
1452 The 1998 \s-1ISO\s0 \*(C+ standard plus amendments. Same as \fB\-ansi\fR for
1453 \&\*(C+ code.
1454 .IP "\fBgnu++98\fR" 4
1455 .IX Item "gnu++98"
1456 \&\s-1GNU\s0 dialect of \fB\-std=c++98\fR.  This is the default for
1457 \&\*(C+ code.
1458 .IP "\fBc++0x\fR" 4
1459 .IX Item "c++0x"
1460 The working draft of the upcoming \s-1ISO\s0 \*(C+0x standard. This option
1461 enables experimental features that are likely to be included in
1462 \&\*(C+0x. The working draft is constantly changing, and any feature that is
1463 enabled by this flag may be removed from future versions of \s-1GCC\s0 if it is
1464 not part of the \*(C+0x standard.
1465 .IP "\fBgnu++0x\fR" 4
1466 .IX Item "gnu++0x"
1467 \&\s-1GNU\s0 dialect of \fB\-std=c++0x\fR. This option enables
1468 experimental features that may be removed in future versions of \s-1GCC\s0.
1469 .RE
1470 .RS 4
1471 .RE
1472 .IP "\fB\-fgnu89\-inline\fR" 4
1473 .IX Item "-fgnu89-inline"
1474 The option \fB\-fgnu89\-inline\fR tells \s-1GCC\s0 to use the traditional
1475 \&\s-1GNU\s0 semantics for \f(CW\*(C`inline\*(C'\fR functions when in C99 mode.
1476   This option
1477 is accepted and ignored by \s-1GCC\s0 versions 4.1.3 up to but not including
1478 4.3.  In \s-1GCC\s0 versions 4.3 and later it changes the behavior of \s-1GCC\s0 in
1479 C99 mode.  Using this option is roughly equivalent to adding the
1480 \&\f(CW\*(C`gnu_inline\*(C'\fR function attribute to all inline functions.
1481 .Sp
1482 The option \fB\-fno\-gnu89\-inline\fR explicitly tells \s-1GCC\s0 to use the
1483 C99 semantics for \f(CW\*(C`inline\*(C'\fR when in C99 or gnu99 mode (i.e., it
1484 specifies the default behavior).  This option was first supported in
1485 \&\s-1GCC\s0 4.3.  This option is not supported in C89 or gnu89 mode.
1486 .Sp
1487 The preprocessor macros \f(CW\*(C`_\|_GNUC_GNU_INLINE_\|_\*(C'\fR and
1488 \&\f(CW\*(C`_\|_GNUC_STDC_INLINE_\|_\*(C'\fR may be used to check which semantics are
1489 in effect for \f(CW\*(C`inline\*(C'\fR functions.  
1490 .IP "\fB\-aux\-info\fR \fIfilename\fR" 4
1491 .IX Item "-aux-info filename"
1492 Output to the given filename prototyped declarations for all functions
1493 declared and/or defined in a translation unit, including those in header
1494 files.  This option is silently ignored in any language other than C.
1495 .Sp
1496 Besides declarations, the file indicates, in comments, the origin of
1497 each declaration (source file and line), whether the declaration was
1498 implicit, prototyped or unprototyped (\fBI\fR, \fBN\fR for new or
1499 \&\fBO\fR for old, respectively, in the first character after the line
1500 number and the colon), and whether it came from a declaration or a
1501 definition (\fBC\fR or \fBF\fR, respectively, in the following
1502 character).  In the case of function definitions, a K&R\-style list of
1503 arguments followed by their declarations is also provided, inside
1504 comments, after the declaration.
1505 .IP "\fB\-fno\-asm\fR" 4
1506 .IX Item "-fno-asm"
1507 Do not recognize \f(CW\*(C`asm\*(C'\fR, \f(CW\*(C`inline\*(C'\fR or \f(CW\*(C`typeof\*(C'\fR as a
1508 keyword, so that code can use these words as identifiers.  You can use
1509 the keywords \f(CW\*(C`_\|_asm_\|_\*(C'\fR, \f(CW\*(C`_\|_inline_\|_\*(C'\fR and \f(CW\*(C`_\|_typeof_\|_\*(C'\fR
1510 instead.  \fB\-ansi\fR implies \fB\-fno\-asm\fR.
1511 .Sp
1512 In \*(C+, this switch only affects the \f(CW\*(C`typeof\*(C'\fR keyword, since
1513 \&\f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`inline\*(C'\fR are standard keywords.  You may want to
1514 use the \fB\-fno\-gnu\-keywords\fR flag instead, which has the same
1515 effect.  In C99 mode (\fB\-std=c99\fR or \fB\-std=gnu99\fR), this
1516 switch only affects the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR keywords, since
1517 \&\f(CW\*(C`inline\*(C'\fR is a standard keyword in \s-1ISO\s0 C99.
1518 .IP "\fB\-fno\-builtin\fR" 4
1519 .IX Item "-fno-builtin"
1520 .PD 0
1521 .IP "\fB\-fno\-builtin\-\fR\fIfunction\fR" 4
1522 .IX Item "-fno-builtin-function"
1523 .PD
1524 Don't recognize built-in functions that do not begin with
1525 \&\fB_\|_builtin_\fR as prefix.  
1526 .Sp
1527 \&\s-1GCC\s0 normally generates special code to handle certain built-in functions
1528 more efficiently; for instance, calls to \f(CW\*(C`alloca\*(C'\fR may become single
1529 instructions that adjust the stack directly, and calls to \f(CW\*(C`memcpy\*(C'\fR
1530 may become inline copy loops.  The resulting code is often both smaller
1531 and faster, but since the function calls no longer appear as such, you
1532 cannot set a breakpoint on those calls, nor can you change the behavior
1533 of the functions by linking with a different library.  In addition,
1534 when a function is recognized as a built-in function, \s-1GCC\s0 may use
1535 information about that function to warn about problems with calls to
1536 that function, or to generate more efficient code, even if the
1537 resulting code still contains calls to that function.  For example,
1538 warnings are given with \fB\-Wformat\fR for bad calls to
1539 \&\f(CW\*(C`printf\*(C'\fR, when \f(CW\*(C`printf\*(C'\fR is built in, and \f(CW\*(C`strlen\*(C'\fR is
1540 known not to modify global memory.
1541 .Sp
1542 With the \fB\-fno\-builtin\-\fR\fIfunction\fR option
1543 only the built-in function \fIfunction\fR is
1544 disabled.  \fIfunction\fR must not begin with \fB_\|_builtin_\fR.  If a
1545 function is named that is not built-in in this version of \s-1GCC\s0, this
1546 option is ignored.  There is no corresponding
1547 \&\fB\-fbuiltin\-\fR\fIfunction\fR option; if you wish to enable
1548 built-in functions selectively when using \fB\-fno\-builtin\fR or
1549 \&\fB\-ffreestanding\fR, you may define macros such as:
1550 .Sp
1551 .Vb 2
1552 \&        #define abs(n)          __builtin_abs ((n))
1553 \&        #define strcpy(d, s)    __builtin_strcpy ((d), (s))
1554 .Ve
1555 .IP "\fB\-fhosted\fR" 4
1556 .IX Item "-fhosted"
1557 Assert that compilation takes place in a hosted environment.  This implies
1558 \&\fB\-fbuiltin\fR.  A hosted environment is one in which the
1559 entire standard library is available, and in which \f(CW\*(C`main\*(C'\fR has a return
1560 type of \f(CW\*(C`int\*(C'\fR.  Examples are nearly everything except a kernel.
1561 This is equivalent to \fB\-fno\-freestanding\fR.
1562 .IP "\fB\-ffreestanding\fR" 4
1563 .IX Item "-ffreestanding"
1564 Assert that compilation takes place in a freestanding environment.  This
1565 implies \fB\-fno\-builtin\fR.  A freestanding environment
1566 is one in which the standard library may not exist, and program startup may
1567 not necessarily be at \f(CW\*(C`main\*(C'\fR.  The most obvious example is an \s-1OS\s0 kernel.
1568 This is equivalent to \fB\-fno\-hosted\fR.
1569 .IP "\fB\-fopenmp\fR" 4
1570 .IX Item "-fopenmp"
1571 Enable handling of OpenMP directives \f(CW\*(C`#pragma omp\*(C'\fR in C/\*(C+ and
1572 \&\f(CW\*(C`!$omp\*(C'\fR in Fortran.  When \fB\-fopenmp\fR is specified, the
1573 compiler generates parallel code according to the OpenMP Application
1574 Program Interface v2.5 <\fBhttp://www.openmp.org/\fR>.  This option
1575 implies \fB\-pthread\fR, and thus is only supported on targets that
1576 have support for \fB\-pthread\fR.
1577 .IP "\fB\-fms\-extensions\fR" 4
1578 .IX Item "-fms-extensions"
1579 Accept some non-standard constructs used in Microsoft header files.
1580 .Sp
1581 Some cases of unnamed fields in structures and unions are only
1582 accepted with this option.  
1583 .IP "\fB\-trigraphs\fR" 4
1584 .IX Item "-trigraphs"
1585 Support \s-1ISO\s0 C trigraphs.  The \fB\-ansi\fR option (and \fB\-std\fR
1586 options for strict \s-1ISO\s0 C conformance) implies \fB\-trigraphs\fR.
1587 .IP "\fB\-no\-integrated\-cpp\fR" 4
1588 .IX Item "-no-integrated-cpp"
1589 Performs a compilation in two passes: preprocessing and compiling.  This
1590 option allows a user supplied \*(L"cc1\*(R", \*(L"cc1plus\*(R", or \*(L"cc1obj\*(R" via the
1591 \&\fB\-B\fR option.  The user supplied compilation step can then add in
1592 an additional preprocessing step after normal preprocessing but before
1593 compiling.  The default is to use the integrated cpp (internal cpp)
1594 .Sp
1595 The semantics of this option will change if \*(L"cc1\*(R", \*(L"cc1plus\*(R", and
1596 \&\*(L"cc1obj\*(R" are merged.
1597 .IP "\fB\-traditional\fR" 4
1598 .IX Item "-traditional"
1599 .PD 0
1600 .IP "\fB\-traditional\-cpp\fR" 4
1601 .IX Item "-traditional-cpp"
1602 .PD
1603 Formerly, these options caused \s-1GCC\s0 to attempt to emulate a pre-standard
1604 C compiler.  They are now only supported with the \fB\-E\fR switch.
1605 The preprocessor continues to support a pre-standard mode.  See the \s-1GNU\s0
1606 \&\s-1CPP\s0 manual for details.
1607 .IP "\fB\-fcond\-mismatch\fR" 4
1608 .IX Item "-fcond-mismatch"
1609 Allow conditional expressions with mismatched types in the second and
1610 third arguments.  The value of such an expression is void.  This option
1611 is not supported for \*(C+.
1612 .IP "\fB\-flax\-vector\-conversions\fR" 4
1613 .IX Item "-flax-vector-conversions"
1614 Allow implicit conversions between vectors with differing numbers of
1615 elements and/or incompatible element types.  This option should not be
1616 used for new code.
1617 .IP "\fB\-funsigned\-char\fR" 4
1618 .IX Item "-funsigned-char"
1619 Let the type \f(CW\*(C`char\*(C'\fR be unsigned, like \f(CW\*(C`unsigned char\*(C'\fR.
1620 .Sp
1621 Each kind of machine has a default for what \f(CW\*(C`char\*(C'\fR should
1622 be.  It is either like \f(CW\*(C`unsigned char\*(C'\fR by default or like
1623 \&\f(CW\*(C`signed char\*(C'\fR by default.
1624 .Sp
1625 Ideally, a portable program should always use \f(CW\*(C`signed char\*(C'\fR or
1626 \&\f(CW\*(C`unsigned char\*(C'\fR when it depends on the signedness of an object.
1627 But many programs have been written to use plain \f(CW\*(C`char\*(C'\fR and
1628 expect it to be signed, or expect it to be unsigned, depending on the
1629 machines they were written for.  This option, and its inverse, let you
1630 make such a program work with the opposite default.
1631 .Sp
1632 The type \f(CW\*(C`char\*(C'\fR is always a distinct type from each of
1633 \&\f(CW\*(C`signed char\*(C'\fR or \f(CW\*(C`unsigned char\*(C'\fR, even though its behavior
1634 is always just like one of those two.
1635 .IP "\fB\-fsigned\-char\fR" 4
1636 .IX Item "-fsigned-char"
1637 Let the type \f(CW\*(C`char\*(C'\fR be signed, like \f(CW\*(C`signed char\*(C'\fR.
1638 .Sp
1639 Note that this is equivalent to \fB\-fno\-unsigned\-char\fR, which is
1640 the negative form of \fB\-funsigned\-char\fR.  Likewise, the option
1641 \&\fB\-fno\-signed\-char\fR is equivalent to \fB\-funsigned\-char\fR.
1642 .IP "\fB\-fsigned\-bitfields\fR" 4
1643 .IX Item "-fsigned-bitfields"
1644 .PD 0
1645 .IP "\fB\-funsigned\-bitfields\fR" 4
1646 .IX Item "-funsigned-bitfields"
1647 .IP "\fB\-fno\-signed\-bitfields\fR" 4
1648 .IX Item "-fno-signed-bitfields"
1649 .IP "\fB\-fno\-unsigned\-bitfields\fR" 4
1650 .IX Item "-fno-unsigned-bitfields"
1651 .PD
1652 These options control whether a bit-field is signed or unsigned, when the
1653 declaration does not use either \f(CW\*(C`signed\*(C'\fR or \f(CW\*(C`unsigned\*(C'\fR.  By
1654 default, such a bit-field is signed, because this is consistent: the
1655 basic integer types such as \f(CW\*(C`int\*(C'\fR are signed types.
1656 .Sh "Options Controlling \*(C+ Dialect"
1657 .IX Subsection "Options Controlling  Dialect"
1658 This section describes the command-line options that are only meaningful
1659 for \*(C+ programs; but you can also use most of the \s-1GNU\s0 compiler options
1660 regardless of what language your program is in.  For example, you
1661 might compile a file \f(CW\*(C`firstClass.C\*(C'\fR like this:
1662 .PP
1663 .Vb 1
1664 \&        g++ \-g \-frepo \-O \-c firstClass.C
1665 .Ve
1666 .PP
1667 In this example, only \fB\-frepo\fR is an option meant
1668 only for \*(C+ programs; you can use the other options with any
1669 language supported by \s-1GCC\s0.
1670 .PP
1671 Here is a list of options that are \fIonly\fR for compiling \*(C+ programs:
1672 .IP "\fB\-fabi\-version=\fR\fIn\fR" 4
1673 .IX Item "-fabi-version=n"
1674 Use version \fIn\fR of the \*(C+ \s-1ABI\s0.  Version 2 is the version of the
1675 \&\*(C+ \s-1ABI\s0 that first appeared in G++ 3.4.  Version 1 is the version of
1676 the \*(C+ \s-1ABI\s0 that first appeared in G++ 3.2.  Version 0 will always be
1677 the version that conforms most closely to the \*(C+ \s-1ABI\s0 specification.
1678 Therefore, the \s-1ABI\s0 obtained using version 0 will change as \s-1ABI\s0 bugs
1679 are fixed.
1680 .Sp
1681 The default is version 2.
1682 .IP "\fB\-fno\-access\-control\fR" 4
1683 .IX Item "-fno-access-control"
1684 Turn off all access checking.  This switch is mainly useful for working
1685 around bugs in the access control code.
1686 .IP "\fB\-fcheck\-new\fR" 4
1687 .IX Item "-fcheck-new"
1688 Check that the pointer returned by \f(CW\*(C`operator new\*(C'\fR is non-null
1689 before attempting to modify the storage allocated.  This check is
1690 normally unnecessary because the \*(C+ standard specifies that
1691 \&\f(CW\*(C`operator new\*(C'\fR will only return \f(CW0\fR if it is declared
1692 \&\fB\f(BIthrow()\fB\fR, in which case the compiler will always check the
1693 return value even without this option.  In all other cases, when
1694 \&\f(CW\*(C`operator new\*(C'\fR has a non-empty exception specification, memory
1695 exhaustion is signalled by throwing \f(CW\*(C`std::bad_alloc\*(C'\fR.  See also
1696 \&\fBnew (nothrow)\fR.
1697 .IP "\fB\-fconserve\-space\fR" 4
1698 .IX Item "-fconserve-space"
1699 Put uninitialized or runtime-initialized global variables into the
1700 common segment, as C does.  This saves space in the executable at the
1701 cost of not diagnosing duplicate definitions.  If you compile with this
1702 flag and your program mysteriously crashes after \f(CW\*(C`main()\*(C'\fR has
1703 completed, you may have an object that is being destroyed twice because
1704 two definitions were merged.
1705 .Sp
1706 This option is no longer useful on most targets, now that support has
1707 been added for putting variables into \s-1BSS\s0 without making them common.
1708 .IP "\fB\-ffriend\-injection\fR" 4
1709 .IX Item "-ffriend-injection"
1710 Inject friend functions into the enclosing namespace, so that they are
1711 visible outside the scope of the class in which they are declared.
1712 Friend functions were documented to work this way in the old Annotated
1713 \&\*(C+ Reference Manual, and versions of G++ before 4.1 always worked
1714 that way.  However, in \s-1ISO\s0 \*(C+ a friend function which is not declared
1715 in an enclosing scope can only be found using argument dependent
1716 lookup.  This option causes friends to be injected as they were in
1717 earlier releases.
1718 .Sp
1719 This option is for compatibility, and may be removed in a future
1720 release of G++.
1721 .IP "\fB\-fno\-elide\-constructors\fR" 4
1722 .IX Item "-fno-elide-constructors"
1723 The \*(C+ standard allows an implementation to omit creating a temporary
1724 which is only used to initialize another object of the same type.
1725 Specifying this option disables that optimization, and forces G++ to
1726 call the copy constructor in all cases.
1727 .IP "\fB\-fno\-enforce\-eh\-specs\fR" 4
1728 .IX Item "-fno-enforce-eh-specs"
1729 Don't generate code to check for violation of exception specifications
1730 at runtime.  This option violates the \*(C+ standard, but may be useful
1731 for reducing code size in production builds, much like defining
1732 \&\fB\s-1NDEBUG\s0\fR.  This does not give user code permission to throw
1733 exceptions in violation of the exception specifications; the compiler
1734 will still optimize based on the specifications, so throwing an
1735 unexpected exception will result in undefined behavior.
1736 .IP "\fB\-ffor\-scope\fR" 4
1737 .IX Item "-ffor-scope"
1738 .PD 0
1739 .IP "\fB\-fno\-for\-scope\fR" 4
1740 .IX Item "-fno-for-scope"
1741 .PD
1742 If \fB\-ffor\-scope\fR is specified, the scope of variables declared in
1743 a \fIfor-init-statement\fR is limited to the \fBfor\fR loop itself,
1744 as specified by the \*(C+ standard.
1745 If \fB\-fno\-for\-scope\fR is specified, the scope of variables declared in
1746 a \fIfor-init-statement\fR extends to the end of the enclosing scope,
1747 as was the case in old versions of G++, and other (traditional)
1748 implementations of \*(C+.
1749 .Sp
1750 The default if neither flag is given to follow the standard,
1751 but to allow and give a warning for old-style code that would
1752 otherwise be invalid, or have different behavior.
1753 .IP "\fB\-fno\-gnu\-keywords\fR" 4
1754 .IX Item "-fno-gnu-keywords"
1755 Do not recognize \f(CW\*(C`typeof\*(C'\fR as a keyword, so that code can use this
1756 word as an identifier.  You can use the keyword \f(CW\*(C`_\|_typeof_\|_\*(C'\fR instead.
1757 \&\fB\-ansi\fR implies \fB\-fno\-gnu\-keywords\fR.
1758 .IP "\fB\-fno\-implicit\-templates\fR" 4
1759 .IX Item "-fno-implicit-templates"
1760 Never emit code for non-inline templates which are instantiated
1761 implicitly (i.e. by use); only emit code for explicit instantiations.
1762 .IP "\fB\-fno\-implicit\-inline\-templates\fR" 4
1763 .IX Item "-fno-implicit-inline-templates"
1764 Don't emit code for implicit instantiations of inline templates, either.
1765 The default is to handle inlines differently so that compiles with and
1766 without optimization will need the same set of explicit instantiations.
1767 .IP "\fB\-fno\-implement\-inlines\fR" 4
1768 .IX Item "-fno-implement-inlines"
1769 To save space, do not emit out-of-line copies of inline functions
1770 controlled by \fB#pragma implementation\fR.  This will cause linker
1771 errors if these functions are not inlined everywhere they are called.
1772 .IP "\fB\-fms\-extensions\fR" 4
1773 .IX Item "-fms-extensions"
1774 Disable pedantic warnings about constructs used in \s-1MFC\s0, such as implicit
1775 int and getting a pointer to member function via non-standard syntax.
1776 .IP "\fB\-fno\-nonansi\-builtins\fR" 4
1777 .IX Item "-fno-nonansi-builtins"
1778 Disable built-in declarations of functions that are not mandated by
1779 \&\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,
1780 \&\f(CW\*(C`index\*(C'\fR, \f(CW\*(C`bzero\*(C'\fR, \f(CW\*(C`conjf\*(C'\fR, and other related functions.
1781 .IP "\fB\-fno\-operator\-names\fR" 4
1782 .IX Item "-fno-operator-names"
1783 Do not treat the operator name keywords \f(CW\*(C`and\*(C'\fR, \f(CW\*(C`bitand\*(C'\fR,
1784 \&\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
1785 synonyms as keywords.
1786 .IP "\fB\-fno\-optional\-diags\fR" 4
1787 .IX Item "-fno-optional-diags"
1788 Disable diagnostics that the standard says a compiler does not need to
1789 issue.  Currently, the only such diagnostic issued by G++ is the one for
1790 a name having multiple meanings within a class.
1791 .IP "\fB\-fpermissive\fR" 4
1792 .IX Item "-fpermissive"
1793 Downgrade some diagnostics about nonconformant code from errors to
1794 warnings.  Thus, using \fB\-fpermissive\fR will allow some
1795 nonconforming code to compile.
1796 .IP "\fB\-frepo\fR" 4
1797 .IX Item "-frepo"
1798 Enable automatic template instantiation at link time.  This option also
1799 implies \fB\-fno\-implicit\-templates\fR.  
1800 .IP "\fB\-fno\-rtti\fR" 4
1801 .IX Item "-fno-rtti"
1802 Disable generation of information about every class with virtual
1803 functions for use by the \*(C+ runtime type identification features
1804 (\fBdynamic_cast\fR and \fBtypeid\fR).  If you don't use those parts
1805 of the language, you can save some space by using this flag.  Note that
1806 exception handling uses the same information, but it will generate it as
1807 needed. The \fBdynamic_cast\fR operator can still be used for casts that
1808 do not require runtime type information, i.e. casts to \f(CW\*(C`void *\*(C'\fR or to
1809 unambiguous base classes.
1810 .IP "\fB\-fstats\fR" 4
1811 .IX Item "-fstats"
1812 Emit statistics about front-end processing at the end of the compilation.
1813 This information is generally only useful to the G++ development team.
1814 .IP "\fB\-ftemplate\-depth\-\fR\fIn\fR" 4
1815 .IX Item "-ftemplate-depth-n"
1816 Set the maximum instantiation depth for template classes to \fIn\fR.
1817 A limit on the template instantiation depth is needed to detect
1818 endless recursions during template class instantiation.  \s-1ANSI/ISO\s0 \*(C+
1819 conforming programs must not rely on a maximum depth greater than 17.
1820 .IP "\fB\-fno\-threadsafe\-statics\fR" 4
1821 .IX Item "-fno-threadsafe-statics"
1822 Do not emit the extra code to use the routines specified in the \*(C+
1823 \&\s-1ABI\s0 for thread-safe initialization of local statics.  You can use this
1824 option to reduce code size slightly in code that doesn't need to be
1825 thread\-safe.
1826 .IP "\fB\-fuse\-cxa\-atexit\fR" 4
1827 .IX Item "-fuse-cxa-atexit"
1828 Register destructors for objects with static storage duration with the
1829 \&\f(CW\*(C`_\|_cxa_atexit\*(C'\fR function rather than the \f(CW\*(C`atexit\*(C'\fR function.
1830 This option is required for fully standards-compliant handling of static
1831 destructors, but will only work if your C library supports
1832 \&\f(CW\*(C`_\|_cxa_atexit\*(C'\fR.
1833 .IP "\fB\-fno\-use\-cxa\-get\-exception\-ptr\fR" 4
1834 .IX Item "-fno-use-cxa-get-exception-ptr"
1835 Don't use the \f(CW\*(C`_\|_cxa_get_exception_ptr\*(C'\fR runtime routine.  This
1836 will cause \f(CW\*(C`std::uncaught_exception\*(C'\fR to be incorrect, but is necessary
1837 if the runtime routine is not available.
1838 .IP "\fB\-fvisibility\-inlines\-hidden\fR" 4
1839 .IX Item "-fvisibility-inlines-hidden"
1840 This switch declares that the user does not attempt to compare
1841 pointers to inline methods where the addresses of the two functions
1842 were taken in different shared objects.
1843 .Sp
1844 The effect of this is that \s-1GCC\s0 may, effectively, mark inline methods with
1845 \&\f(CW\*(C`_\|_attribute_\|_ ((visibility ("hidden")))\*(C'\fR so that they do not
1846 appear in the export table of a \s-1DSO\s0 and do not require a \s-1PLT\s0 indirection
1847 when used within the \s-1DSO\s0.  Enabling this option can have a dramatic effect
1848 on load and link times of a \s-1DSO\s0 as it massively reduces the size of the
1849 dynamic export table when the library makes heavy use of templates.
1850 .Sp
1851 The behavior of this switch is not quite the same as marking the
1852 methods as hidden directly, because it does not affect static variables
1853 local to the function or cause the compiler to deduce that
1854 the function is defined in only one shared object.
1855 .Sp
1856 You may mark a method as having a visibility explicitly to negate the
1857 effect of the switch for that method.  For example, if you do want to
1858 compare pointers to a particular inline method, you might mark it as
1859 having default visibility.  Marking the enclosing class with explicit
1860 visibility will have no effect.
1861 .Sp
1862 Explicitly instantiated inline methods are unaffected by this option
1863 as their linkage might otherwise cross a shared library boundary.
1864 .IP "\fB\-fvisibility\-ms\-compat\fR" 4
1865 .IX Item "-fvisibility-ms-compat"
1866 This flag attempts to use visibility settings to make \s-1GCC\s0's \*(C+
1867 linkage model compatible with that of Microsoft Visual Studio.
1868 .Sp
1869 The flag makes these changes to \s-1GCC\s0's linkage model:
1870 .RS 4
1871 .IP "1." 4
1872 It sets the default visibility to \f(CW\*(C`hidden\*(C'\fR, like
1873 \&\fB\-fvisibility=hidden\fR.
1874 .IP "2." 4
1875 Types, but not their members, are not hidden by default.
1876 .IP "3." 4
1877 The One Definition Rule is relaxed for types without explicit
1878 visibility specifications which are defined in more than one different
1879 shared object: those declarations are permitted if they would have
1880 been permitted when this option was not used.
1881 .RE
1882 .RS 4
1883 .Sp
1884 In new code it is better to use \fB\-fvisibility=hidden\fR and
1885 export those classes which are intended to be externally visible.
1886 Unfortunately it is possible for code to rely, perhaps accidentally,
1887 on the Visual Studio behavior.
1888 .Sp
1889 Among the consequences of these changes are that static data members
1890 of the same type with the same name but defined in different shared
1891 objects will be different, so changing one will not change the other;
1892 and that pointers to function members defined in different shared
1893 objects may not compare equal.  When this flag is given, it is a
1894 violation of the \s-1ODR\s0 to define types with the same name differently.
1895 .RE
1896 .IP "\fB\-fno\-weak\fR" 4
1897 .IX Item "-fno-weak"
1898 Do not use weak symbol support, even if it is provided by the linker.
1899 By default, G++ will use weak symbols if they are available.  This
1900 option exists only for testing, and should not be used by end\-users;
1901 it will result in inferior code and has no benefits.  This option may
1902 be removed in a future release of G++.
1903 .IP "\fB\-nostdinc++\fR" 4
1904 .IX Item "-nostdinc++"
1905 Do not search for header files in the standard directories specific to
1906 \&\*(C+, but do still search the other standard directories.  (This option
1907 is used when building the \*(C+ library.)
1908 .PP
1909 In addition, these optimization, warning, and code generation options
1910 have meanings only for \*(C+ programs:
1911 .IP "\fB\-fno\-default\-inline\fR" 4
1912 .IX Item "-fno-default-inline"
1913 Do not assume \fBinline\fR for functions defined inside a class scope.
1914   Note that these
1915 functions will have linkage like inline functions; they just won't be
1916 inlined by default.
1917 .IP "\fB\-Wabi\fR (C, Objective\-C, \*(C+ and Objective\-\*(C+ only)" 4
1918 .IX Item "-Wabi (C, Objective-C,  and Objective- only)"
1919 Warn when G++ generates code that is probably not compatible with the
1920 vendor-neutral \*(C+ \s-1ABI\s0.  Although an effort has been made to warn about
1921 all such cases, there are probably some cases that are not warned about,
1922 even though G++ is generating incompatible code.  There may also be
1923 cases where warnings are emitted even though the code that is generated
1924 will be compatible.
1925 .Sp
1926 You should rewrite your code to avoid these warnings if you are
1927 concerned about the fact that code generated by G++ may not be binary
1928 compatible with code generated by other compilers.
1929 .Sp
1930 The known incompatibilities at this point include:
1931 .RS 4
1932 .IP "*" 4
1933 Incorrect handling of tail-padding for bit\-fields.  G++ may attempt to
1934 pack data into the same byte as a base class.  For example:
1935 .Sp
1936 .Vb 2
1937 \&        struct A { virtual void f(); int f1 : 1; };
1938 \&        struct B : public A { int f2 : 1; };
1939 .Ve
1940 .Sp
1941 In this case, G++ will place \f(CW\*(C`B::f2\*(C'\fR into the same byte
1942 as\f(CW\*(C`A::f1\*(C'\fR; other compilers will not.  You can avoid this problem
1943 by explicitly padding \f(CW\*(C`A\*(C'\fR so that its size is a multiple of the
1944 byte size on your platform; that will cause G++ and other compilers to
1945 layout \f(CW\*(C`B\*(C'\fR identically.
1946 .IP "*" 4
1947 Incorrect handling of tail-padding for virtual bases.  G++ does not use
1948 tail padding when laying out virtual bases.  For example:
1949 .Sp
1950 .Vb 3
1951 \&        struct A { virtual void f(); char c1; };
1952 \&        struct B { B(); char c2; };
1953 \&        struct C : public A, public virtual B {};
1954 .Ve
1955 .Sp
1956 In this case, G++ will not place \f(CW\*(C`B\*(C'\fR into the tail-padding for
1957 \&\f(CW\*(C`A\*(C'\fR; other compilers will.  You can avoid this problem by
1958 explicitly padding \f(CW\*(C`A\*(C'\fR so that its size is a multiple of its
1959 alignment (ignoring virtual base classes); that will cause G++ and other
1960 compilers to layout \f(CW\*(C`C\*(C'\fR identically.
1961 .IP "*" 4
1962 Incorrect handling of bit-fields with declared widths greater than that
1963 of their underlying types, when the bit-fields appear in a union.  For
1964 example:
1965 .Sp
1966 .Vb 1
1967 \&        union U { int i : 4096; };
1968 .Ve
1969 .Sp
1970 Assuming that an \f(CW\*(C`int\*(C'\fR does not have 4096 bits, G++ will make the
1971 union too small by the number of bits in an \f(CW\*(C`int\*(C'\fR.
1972 .IP "*" 4
1973 Empty classes can be placed at incorrect offsets.  For example:
1974 .Sp
1975 .Vb 1
1976 \&        struct A {};
1977 .Ve
1978 .Sp
1979 .Vb 4
1980 \&        struct B {
1981 \&          A a;
1982 \&          virtual void f ();
1983 \&        };
1984 .Ve
1985 .Sp
1986 .Vb 1
1987 \&        struct C : public B, public A {};
1988 .Ve
1989 .Sp
1990 G++ will place the \f(CW\*(C`A\*(C'\fR base class of \f(CW\*(C`C\*(C'\fR at a nonzero offset;
1991 it should be placed at offset zero.  G++ mistakenly believes that the
1992 \&\f(CW\*(C`A\*(C'\fR data member of \f(CW\*(C`B\*(C'\fR is already at offset zero.
1993 .IP "*" 4
1994 Names of template functions whose types involve \f(CW\*(C`typename\*(C'\fR or
1995 template template parameters can be mangled incorrectly.
1996 .Sp
1997 .Vb 2
1998 \&        template <typename Q>
1999 \&        void f(typename Q::X) {}
2000 .Ve
2001 .Sp
2002 .Vb 2
2003 \&        template <template <typename> class Q>
2004 \&        void f(typename Q<int>::X) {}
2005 .Ve
2006 .Sp
2007 Instantiations of these templates may be mangled incorrectly.
2008 .RE
2009 .RS 4
2010 .Sp
2011 It also warns psABI related changes.  The known psABI changes at this
2012 point include:
2013 .IP "*" 4
2014 For SYSV/x86\-64, when passing union with long double, it is changed to
2015 pass in memory as specified in psABI.  For example:
2016 .Sp
2017 .Vb 4
2018 \&        union U {
2019 \&          long double ld;
2020 \&          int i;
2021 \&        };
2022 .Ve
2023 .Sp
2024 \&\f(CW\*(C`union U\*(C'\fR will always be passed in memory.
2025 .RE
2026 .RS 4
2027 .RE
2028 .IP "\fB\-Wctor\-dtor\-privacy\fR (\*(C+ and Objective\-\*(C+ only)" 4
2029 .IX Item "-Wctor-dtor-privacy ( and Objective- only)"
2030 Warn when a class seems unusable because all the constructors or
2031 destructors in that class are private, and it has neither friends nor
2032 public static member functions.
2033 .IP "\fB\-Wnon\-virtual\-dtor\fR (\*(C+ and Objective\-\*(C+ only)" 4
2034 .IX Item "-Wnon-virtual-dtor ( and Objective- only)"
2035 Warn when a class has virtual functions and accessible non-virtual
2036 destructor, in which case it would be possible but unsafe to delete
2037 an instance of a derived class through a pointer to the base class.
2038 This warning is also enabled if \-Weffc++ is specified.
2039 .IP "\fB\-Wreorder\fR (\*(C+ and Objective\-\*(C+ only)" 4
2040 .IX Item "-Wreorder ( and Objective- only)"
2041 Warn when the order of member initializers given in the code does not
2042 match the order in which they must be executed.  For instance:
2043 .Sp
2044 .Vb 5
2045 \&        struct A {
2046 \&          int i;
2047 \&          int j;
2048 \&          A(): j (0), i (1) { }
2049 \&        };
2050 .Ve
2051 .Sp
2052 The compiler will rearrange the member initializers for \fBi\fR
2053 and \fBj\fR to match the declaration order of the members, emitting
2054 a warning to that effect.  This warning is enabled by \fB\-Wall\fR.
2055 .PP
2056 The following \fB\-W...\fR options are not affected by \fB\-Wall\fR.
2057 .IP "\fB\-Weffc++\fR (\*(C+ and Objective\-\*(C+ only)" 4
2058 .IX Item "-Weffc++ ( and Objective- only)"
2059 Warn about violations of the following style guidelines from Scott Meyers'
2060 \&\fIEffective \*(C+\fR book:
2061 .RS 4
2062 .IP "*" 4
2063 Item 11:  Define a copy constructor and an assignment operator for classes
2064 with dynamically allocated memory.
2065 .IP "*" 4
2066 Item 12:  Prefer initialization to assignment in constructors.
2067 .IP "*" 4
2068 Item 14:  Make destructors virtual in base classes.
2069 .IP "*" 4
2070 Item 15:  Have \f(CW\*(C`operator=\*(C'\fR return a reference to \f(CW*this\fR.
2071 .IP "*" 4
2072 Item 23:  Don't try to return a reference when you must return an object.
2073 .RE
2074 .RS 4
2075 .Sp
2076 Also warn about violations of the following style guidelines from
2077 Scott Meyers' \fIMore Effective \*(C+\fR book:
2078 .IP "*" 4
2079 Item 6:  Distinguish between prefix and postfix forms of increment and
2080 decrement operators.
2081 .IP "*" 4
2082 Item 7:  Never overload \f(CW\*(C`&&\*(C'\fR, \f(CW\*(C`||\*(C'\fR, or \f(CW\*(C`,\*(C'\fR.
2083 .RE
2084 .RS 4
2085 .Sp
2086 When selecting this option, be aware that the standard library
2087 headers do not obey all of these guidelines; use \fBgrep \-v\fR
2088 to filter out those warnings.
2089 .RE
2090 .IP "\fB\-Wstrict\-null\-sentinel\fR (\*(C+ and Objective\-\*(C+ only)" 4
2091 .IX Item "-Wstrict-null-sentinel ( and Objective- only)"
2092 Warn also about the use of an uncasted \f(CW\*(C`NULL\*(C'\fR as sentinel.  When
2093 compiling only with \s-1GCC\s0 this is a valid sentinel, as \f(CW\*(C`NULL\*(C'\fR is defined
2094 to \f(CW\*(C`_\|_null\*(C'\fR.  Although it is a null pointer constant not a null pointer,
2095 it is guaranteed to be of the same size as a pointer.  But this use is
2096 not portable across different compilers.
2097 .IP "\fB\-Wno\-non\-template\-friend\fR (\*(C+ and Objective\-\*(C+ only)" 4
2098 .IX Item "-Wno-non-template-friend ( and Objective- only)"
2099 Disable warnings when non-templatized friend functions are declared
2100 within a template.  Since the advent of explicit template specification
2101 support in G++, if the name of the friend is an unqualified-id (i.e.,
2102 \&\fBfriend foo(int)\fR), the \*(C+ language specification demands that the
2103 friend declare or define an ordinary, nontemplate function.  (Section
2104 14.5.3).  Before G++ implemented explicit specification, unqualified-ids
2105 could be interpreted as a particular specialization of a templatized
2106 function.  Because this non-conforming behavior is no longer the default
2107 behavior for G++, \fB\-Wnon\-template\-friend\fR allows the compiler to
2108 check existing code for potential trouble spots and is on by default.
2109 This new compiler behavior can be turned off with
2110 \&\fB\-Wno\-non\-template\-friend\fR which keeps the conformant compiler code
2111 but disables the helpful warning.
2112 .IP "\fB\-Wold\-style\-cast\fR (\*(C+ and Objective\-\*(C+ only)" 4
2113 .IX Item "-Wold-style-cast ( and Objective- only)"
2114 Warn if an old-style (C\-style) cast to a non-void type is used within
2115 a \*(C+ program.  The new-style casts (\fBdynamic_cast\fR,
2116 \&\fBstatic_cast\fR, \fBreinterpret_cast\fR, and \fBconst_cast\fR) are
2117 less vulnerable to unintended effects and much easier to search for.
2118 .IP "\fB\-Woverloaded\-virtual\fR (\*(C+ and Objective\-\*(C+ only)" 4
2119 .IX Item "-Woverloaded-virtual ( and Objective- only)"
2120 Warn when a function declaration hides virtual functions from a
2121 base class.  For example, in:
2122 .Sp
2123 .Vb 3
2124 \&        struct A {
2125 \&          virtual void f();
2126 \&        };
2127 .Ve
2128 .Sp
2129 .Vb 3
2130 \&        struct B: public A {
2131 \&          void f(int);
2132 \&        };
2133 .Ve
2134 .Sp
2135 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
2136 like:
2137 .Sp
2138 .Vb 2
2139 \&        B* b;
2140 \&        b\->f();
2141 .Ve
2142 .Sp
2143 will fail to compile.
2144 .IP "\fB\-Wno\-pmf\-conversions\fR (\*(C+ and Objective\-\*(C+ only)" 4
2145 .IX Item "-Wno-pmf-conversions ( and Objective- only)"
2146 Disable the diagnostic for converting a bound pointer to member function
2147 to a plain pointer.
2148 .IP "\fB\-Wsign\-promo\fR (\*(C+ and Objective\-\*(C+ only)" 4
2149 .IX Item "-Wsign-promo ( and Objective- only)"
2150 Warn when overload resolution chooses a promotion from unsigned or
2151 enumerated type to a signed type, over a conversion to an unsigned type of
2152 the same size.  Previous versions of G++ would try to preserve
2153 unsignedness, but the standard mandates the current behavior.
2154 .Sp
2155 .Vb 4
2156 \&        struct A {
2157 \&          operator int ();
2158 \&          A& operator = (int);
2159 \&        };
2160 .Ve
2161 .Sp
2162 .Vb 5
2163 \&        main ()
2164 \&        {
2165 \&          A a,b;
2166 \&          a = b;
2167 \&        }
2168 .Ve
2169 .Sp
2170 In this example, G++ will synthesize a default \fBA& operator =
2171 (const A&);\fR, while cfront will use the user-defined \fBoperator =\fR.
2172 .Sh "Options Controlling Objective-C and Objective\-\*(C+ Dialects"
2173 .IX Subsection "Options Controlling Objective-C and Objective- Dialects"
2174 (\s-1NOTE:\s0 This manual does not describe the Objective-C and Objective\-\*(C+
2175 languages themselves.  See 
2176 .PP
2177 This section describes the command-line options that are only meaningful
2178 for Objective-C and Objective\-\*(C+ programs, but you can also use most of
2179 the language-independent \s-1GNU\s0 compiler options.
2180 For example, you might compile a file \f(CW\*(C`some_class.m\*(C'\fR like this:
2181 .PP
2182 .Vb 1
2183 \&        gcc \-g \-fgnu\-runtime \-O \-c some_class.m
2184 .Ve
2185 .PP
2186 In this example, \fB\-fgnu\-runtime\fR is an option meant only for
2187 Objective-C and Objective\-\*(C+ programs; you can use the other options with
2188 any language supported by \s-1GCC\s0.
2189 .PP
2190 Note that since Objective-C is an extension of the C language, Objective-C
2191 compilations may also use options specific to the C front-end (e.g.,
2192 \&\fB\-Wtraditional\fR).  Similarly, Objective\-\*(C+ compilations may use
2193 \&\*(C+\-specific options (e.g., \fB\-Wabi\fR).
2194 .PP
2195 Here is a list of options that are \fIonly\fR for compiling Objective-C
2196 and Objective\-\*(C+ programs:
2197 .IP "\fB\-fconstant\-string\-class=\fR\fIclass-name\fR" 4
2198 .IX Item "-fconstant-string-class=class-name"
2199 Use \fIclass-name\fR as the name of the class to instantiate for each
2200 literal string specified with the syntax \f(CW\*(C`@"..."\*(C'\fR.  The default
2201 class name is \f(CW\*(C`NXConstantString\*(C'\fR if the \s-1GNU\s0 runtime is being used, and
2202 \&\f(CW\*(C`NSConstantString\*(C'\fR if the NeXT runtime is being used (see below).  The
2203 \&\fB\-fconstant\-cfstrings\fR option, if also present, will override the
2204 \&\fB\-fconstant\-string\-class\fR setting and cause \f(CW\*(C`@"..."\*(C'\fR literals
2205 to be laid out as constant CoreFoundation strings.
2206 .IP "\fB\-fgnu\-runtime\fR" 4
2207 .IX Item "-fgnu-runtime"
2208 Generate object code compatible with the standard \s-1GNU\s0 Objective-C
2209 runtime.  This is the default for most types of systems.
2210 .IP "\fB\-fnext\-runtime\fR" 4
2211 .IX Item "-fnext-runtime"
2212 Generate output compatible with the NeXT runtime.  This is the default
2213 for NeXT-based systems, including Darwin and Mac \s-1OS\s0 X.  The macro
2214 \&\f(CW\*(C`_\|_NEXT_RUNTIME_\|_\*(C'\fR is predefined if (and only if) this option is
2215 used.
2216 .IP "\fB\-fno\-nil\-receivers\fR" 4
2217 .IX Item "-fno-nil-receivers"
2218 Assume that all Objective-C message dispatches (e.g.,
2219 \&\f(CW\*(C`[receiver message:arg]\*(C'\fR) in this translation unit ensure that the receiver
2220 is not \f(CW\*(C`nil\*(C'\fR.  This allows for more efficient entry points in the runtime
2221 to be used.  Currently, this option is only available in conjunction with
2222 the NeXT runtime on Mac \s-1OS\s0 X 10.3 and later.
2223 .IP "\fB\-fobjc\-call\-cxx\-cdtors\fR" 4
2224 .IX Item "-fobjc-call-cxx-cdtors"
2225 For each Objective-C class, check if any of its instance variables is a
2226 \&\*(C+ object with a non-trivial default constructor.  If so, synthesize a
2227 special \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR instance method that will run
2228 non-trivial default constructors on any such instance variables, in order,
2229 and then return \f(CW\*(C`self\*(C'\fR.  Similarly, check if any instance variable
2230 is a \*(C+ object with a non-trivial destructor, and if so, synthesize a
2231 special \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR method that will run
2232 all such default destructors, in reverse order.
2233 .Sp
2234 The \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR and/or \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR methods
2235 thusly generated will only operate on instance variables declared in the
2236 current Objective-C class, and not those inherited from superclasses.  It
2237 is the responsibility of the Objective-C runtime to invoke all such methods
2238 in an object's inheritance hierarchy.  The \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR methods
2239 will be invoked by the runtime immediately after a new object
2240 instance is allocated; the \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR methods will
2241 be invoked immediately before the runtime deallocates an object instance.
2242 .Sp
2243 As of this writing, only the NeXT runtime on Mac \s-1OS\s0 X 10.4 and later has
2244 support for invoking the \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR and
2245 \&\f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR methods.
2246 .IP "\fB\-fobjc\-direct\-dispatch\fR" 4
2247 .IX Item "-fobjc-direct-dispatch"
2248 Allow fast jumps to the message dispatcher.  On Darwin this is
2249 accomplished via the comm page.
2250 .IP "\fB\-fobjc\-exceptions\fR" 4
2251 .IX Item "-fobjc-exceptions"
2252 Enable syntactic support for structured exception handling in Objective\-C,
2253 similar to what is offered by \*(C+ and Java.  This option is
2254 unavailable in conjunction with the NeXT runtime on Mac \s-1OS\s0 X 10.2 and
2255 earlier.
2256 .Sp
2257 .Vb 23
2258 \&          @try {
2259 \&            ...
2260 \&               @throw expr;
2261 \&            ...
2262 \&          }
2263 \&          @catch (AnObjCClass *exc) {
2264 \&            ...
2265 \&              @throw expr;
2266 \&            ...
2267 \&              @throw;
2268 \&            ...
2269 \&          }
2270 \&          @catch (AnotherClass *exc) {
2271 \&            ...
2272 \&          }
2273 \&          @catch (id allOthers) {
2274 \&            ...
2275 \&          }
2276 \&          @finally {
2277 \&            ...
2278 \&              @throw expr;
2279 \&            ...
2280 \&          }
2281 .Ve
2282 .Sp
2283 The \f(CW@throw\fR statement may appear anywhere in an Objective-C or
2284 Objective\-\*(C+ program; when used inside of a \f(CW@catch\fR block, the
2285 \&\f(CW@throw\fR may appear without an argument (as shown above), in which case
2286 the object caught by the \f(CW@catch\fR will be rethrown.
2287 .Sp
2288 Note that only (pointers to) Objective-C objects may be thrown and
2289 caught using this scheme.  When an object is thrown, it will be caught
2290 by the nearest \f(CW@catch\fR clause capable of handling objects of that type,
2291 analogously to how \f(CW\*(C`catch\*(C'\fR blocks work in \*(C+ and Java.  A
2292 \&\f(CW\*(C`@catch(id ...)\*(C'\fR clause (as shown above) may also be provided to catch
2293 any and all Objective-C exceptions not caught by previous \f(CW@catch\fR
2294 clauses (if any).
2295 .Sp
2296 The \f(CW@finally\fR clause, if present, will be executed upon exit from the
2297 immediately preceding \f(CW\*(C`@try ... @catch\*(C'\fR section.  This will happen
2298 regardless of whether any exceptions are thrown, caught or rethrown
2299 inside the \f(CW\*(C`@try ... @catch\*(C'\fR section, analogously to the behavior
2300 of the \f(CW\*(C`finally\*(C'\fR clause in Java.
2301 .Sp
2302 There are several caveats to using the new exception mechanism:
2303 .RS 4
2304 .IP "*" 4
2305 Although currently designed to be binary compatible with \f(CW\*(C`NS_HANDLER\*(C'\fR\-style
2306 idioms provided by the \f(CW\*(C`NSException\*(C'\fR class, the new
2307 exceptions can only be used on Mac \s-1OS\s0 X 10.3 (Panther) and later
2308 systems, due to additional functionality needed in the (NeXT) Objective-C
2309 runtime.
2310 .IP "*" 4
2311 As mentioned above, the new exceptions do not support handling
2312 types other than Objective-C objects.   Furthermore, when used from
2313 Objective\-\*(C+, the Objective-C exception model does not interoperate with \*(C+
2314 exceptions at this time.  This means you cannot \f(CW@throw\fR an exception
2315 from Objective-C and \f(CW\*(C`catch\*(C'\fR it in \*(C+, or vice versa
2316 (i.e., \f(CW\*(C`throw ... @catch\*(C'\fR).
2317 .RE
2318 .RS 4
2319 .Sp
2320 The \fB\-fobjc\-exceptions\fR switch also enables the use of synchronization
2321 blocks for thread-safe execution:
2322 .Sp
2323 .Vb 3
2324 \&          @synchronized (ObjCClass *guard) {
2325 \&            ...
2326 \&          }
2327 .Ve
2328 .Sp
2329 Upon entering the \f(CW@synchronized\fR block, a thread of execution shall
2330 first check whether a lock has been placed on the corresponding \f(CW\*(C`guard\*(C'\fR
2331 object by another thread.  If it has, the current thread shall wait until
2332 the other thread relinquishes its lock.  Once \f(CW\*(C`guard\*(C'\fR becomes available,
2333 the current thread will place its own lock on it, execute the code contained in
2334 the \f(CW@synchronized\fR block, and finally relinquish the lock (thereby
2335 making \f(CW\*(C`guard\*(C'\fR available to other threads).
2336 .Sp
2337 Unlike Java, Objective-C does not allow for entire methods to be marked
2338 \&\f(CW@synchronized\fR.  Note that throwing exceptions out of
2339 \&\f(CW@synchronized\fR blocks is allowed, and will cause the guarding object
2340 to be unlocked properly.
2341 .RE
2342 .IP "\fB\-fobjc\-gc\fR" 4
2343 .IX Item "-fobjc-gc"
2344 Enable garbage collection (\s-1GC\s0) in Objective-C and Objective\-\*(C+ programs.
2345 .IP "\fB\-freplace\-objc\-classes\fR" 4
2346 .IX Item "-freplace-objc-classes"
2347 Emit a special marker instructing \fB\f(BIld\fB\|(1)\fR not to statically link in
2348 the resulting object file, and allow \fB\f(BIdyld\fB\|(1)\fR to load it in at
2349 run time instead.  This is used in conjunction with the Fix-and-Continue
2350 debugging mode, where the object file in question may be recompiled and
2351 dynamically reloaded in the course of program execution, without the need
2352 to restart the program itself.  Currently, Fix-and-Continue functionality
2353 is only available in conjunction with the NeXT runtime on Mac \s-1OS\s0 X 10.3
2354 and later.
2355 .IP "\fB\-fzero\-link\fR" 4
2356 .IX Item "-fzero-link"
2357 When compiling for the NeXT runtime, the compiler ordinarily replaces calls
2358 to \f(CW\*(C`objc_getClass("...")\*(C'\fR (when the name of the class is known at
2359 compile time) with static class references that get initialized at load time,
2360 which improves run-time performance.  Specifying the \fB\-fzero\-link\fR flag
2361 suppresses this behavior and causes calls to \f(CW\*(C`objc_getClass("...")\*(C'\fR
2362 to be retained.  This is useful in Zero-Link debugging mode, since it allows
2363 for individual class implementations to be modified during program execution.
2364 .IP "\fB\-gen\-decls\fR" 4
2365 .IX Item "-gen-decls"
2366 Dump interface declarations for all classes seen in the source file to a
2367 file named \fI\fIsourcename\fI.decl\fR.
2368 .IP "\fB\-Wassign\-intercept\fR (Objective\-C and Objective\-\*(C+ only)" 4
2369 .IX Item "-Wassign-intercept (Objective-C and Objective- only)"
2370 Warn whenever an Objective-C assignment is being intercepted by the
2371 garbage collector.
2372 .IP "\fB\-Wno\-protocol\fR (Objective\-C and Objective\-\*(C+ only)" 4
2373 .IX Item "-Wno-protocol (Objective-C and Objective- only)"
2374 If a class is declared to implement a protocol, a warning is issued for
2375 every method in the protocol that is not implemented by the class.  The
2376 default behavior is to issue a warning for every method not explicitly
2377 implemented in the class, even if a method implementation is inherited
2378 from the superclass.  If you use the \fB\-Wno\-protocol\fR option, then
2379 methods inherited from the superclass are considered to be implemented,
2380 and no warning is issued for them.
2381 .IP "\fB\-Wselector\fR (Objective\-C and Objective\-\*(C+ only)" 4
2382 .IX Item "-Wselector (Objective-C and Objective- only)"
2383 Warn if multiple methods of different types for the same selector are
2384 found during compilation.  The check is performed on the list of methods
2385 in the final stage of compilation.  Additionally, a check is performed
2386 for each selector appearing in a \f(CW\*(C`@selector(...)\*(C'\fR
2387 expression, and a corresponding method for that selector has been found
2388 during compilation.  Because these checks scan the method table only at
2389 the end of compilation, these warnings are not produced if the final
2390 stage of compilation is not reached, for example because an error is
2391 found during compilation, or because the \fB\-fsyntax\-only\fR option is
2392 being used.
2393 .IP "\fB\-Wstrict\-selector\-match\fR (Objective\-C and Objective\-\*(C+ only)" 4
2394 .IX Item "-Wstrict-selector-match (Objective-C and Objective- only)"
2395 Warn if multiple methods with differing argument and/or return types are
2396 found for a given selector when attempting to send a message using this
2397 selector to a receiver of type \f(CW\*(C`id\*(C'\fR or \f(CW\*(C`Class\*(C'\fR.  When this flag
2398 is off (which is the default behavior), the compiler will omit such warnings
2399 if any differences found are confined to types which share the same size
2400 and alignment.
2401 .IP "\fB\-Wundeclared\-selector\fR (Objective\-C and Objective\-\*(C+ only)" 4
2402 .IX Item "-Wundeclared-selector (Objective-C and Objective- only)"
2403 Warn if a \f(CW\*(C`@selector(...)\*(C'\fR expression referring to an
2404 undeclared selector is found.  A selector is considered undeclared if no
2405 method with that name has been declared before the
2406 \&\f(CW\*(C`@selector(...)\*(C'\fR expression, either explicitly in an
2407 \&\f(CW@interface\fR or \f(CW@protocol\fR declaration, or implicitly in
2408 an \f(CW@implementation\fR section.  This option always performs its
2409 checks as soon as a \f(CW\*(C`@selector(...)\*(C'\fR expression is found,
2410 while \fB\-Wselector\fR only performs its checks in the final stage of
2411 compilation.  This also enforces the coding style convention
2412 that methods and selectors must be declared before being used.
2413 .IP "\fB\-print\-objc\-runtime\-info\fR" 4
2414 .IX Item "-print-objc-runtime-info"
2415 Generate C header describing the largest structure that is passed by
2416 value, if any.
2417 .Sh "Options to Control Diagnostic Messages Formatting"
2418 .IX Subsection "Options to Control Diagnostic Messages Formatting"
2419 Traditionally, diagnostic messages have been formatted irrespective of
2420 the output device's aspect (e.g. its width, ...).  The options described
2421 below can be used to control the diagnostic messages formatting
2422 algorithm, e.g. how many characters per line, how often source location
2423 information should be reported.  Right now, only the \*(C+ front end can
2424 honor these options.  However it is expected, in the near future, that
2425 the remaining front ends would be able to digest them correctly.
2426 .IP "\fB\-fmessage\-length=\fR\fIn\fR" 4
2427 .IX Item "-fmessage-length=n"
2428 Try to format error messages so that they fit on lines of about \fIn\fR
2429 characters.  The default is 72 characters for \fBg++\fR and 0 for the rest of
2430 the front ends supported by \s-1GCC\s0.  If \fIn\fR is zero, then no
2431 line-wrapping will be done; each error message will appear on a single
2432 line.
2433 .IP "\fB\-fdiagnostics\-show\-location=once\fR" 4
2434 .IX Item "-fdiagnostics-show-location=once"
2435 Only meaningful in line-wrapping mode.  Instructs the diagnostic messages
2436 reporter to emit \fIonce\fR source location information; that is, in
2437 case the message is too long to fit on a single physical line and has to
2438 be wrapped, the source location won't be emitted (as prefix) again,
2439 over and over, in subsequent continuation lines.  This is the default
2440 behavior.
2441 .IP "\fB\-fdiagnostics\-show\-location=every\-line\fR" 4
2442 .IX Item "-fdiagnostics-show-location=every-line"
2443 Only meaningful in line-wrapping mode.  Instructs the diagnostic
2444 messages reporter to emit the same source location information (as
2445 prefix) for physical lines that result from the process of breaking
2446 a message which is too long to fit on a single line.
2447 .IP "\fB\-fdiagnostics\-show\-option\fR" 4
2448 .IX Item "-fdiagnostics-show-option"
2449 This option instructs the diagnostic machinery to add text to each
2450 diagnostic emitted, which indicates which command line option directly
2451 controls that diagnostic, when such an option is known to the
2452 diagnostic machinery.
2453 .IP "\fB\-Wcoverage\-mismatch\fR" 4
2454 .IX Item "-Wcoverage-mismatch"
2455 Warn if feedback profiles do not match when using the
2456 \&\fB\-fprofile\-use\fR option.
2457 If a source file was changed between \fB\-fprofile\-gen\fR and
2458 \&\fB\-fprofile\-use\fR, the files with the profile feedback can fail
2459 to match the source file and \s-1GCC\s0 can not use the profile feedback
2460 information.  By default, \s-1GCC\s0 emits an error message in this case.
2461 The option \fB\-Wcoverage\-mismatch\fR emits a warning instead of an
2462 error.  \s-1GCC\s0 does not use appropriate feedback profiles, so using this
2463 option can result in poorly optimized code.  This option is useful
2464 only in the case of very minor changes such as bug fixes to an
2465 existing code\-base.
2466 .Sh "Options to Request or Suppress Warnings"
2467 .IX Subsection "Options to Request or Suppress Warnings"
2468 Warnings are diagnostic messages that report constructions which
2469 are not inherently erroneous but which are risky or suggest there
2470 may have been an error.
2471 .PP
2472 The following language-independent options do not enable specific
2473 warnings but control the kinds of diagnostics produced by \s-1GCC\s0.
2474 .IP "\fB\-fsyntax\-only\fR" 4
2475 .IX Item "-fsyntax-only"
2476 Check the code for syntax errors, but don't do anything beyond that.
2477 .IP "\fB\-w\fR" 4
2478 .IX Item "-w"
2479 Inhibit all warning messages.
2480 .IP "\fB\-Werror\fR" 4
2481 .IX Item "-Werror"
2482 Make all warnings into errors.
2483 .IP "\fB\-Werror=\fR" 4
2484 .IX Item "-Werror="
2485 Make the specified warning into an error.  The specifier for a warning
2486 is appended, for example \fB\-Werror=switch\fR turns the warnings
2487 controlled by \fB\-Wswitch\fR into errors.  This switch takes a
2488 negative form, to be used to negate \fB\-Werror\fR for specific
2489 warnings, for example \fB\-Wno\-error=switch\fR makes
2490 \&\fB\-Wswitch\fR warnings not be errors, even when \fB\-Werror\fR
2491 is in effect.  You can use the \fB\-fdiagnostics\-show\-option\fR
2492 option to have each controllable warning amended with the option which
2493 controls it, to determine what to use with this option.
2494 .Sp
2495 Note that specifying \fB\-Werror=\fR\fIfoo\fR automatically implies
2496 \&\fB\-W\fR\fIfoo\fR.  However, \fB\-Wno\-error=\fR\fIfoo\fR does not
2497 imply anything.
2498 .IP "\fB\-Wfatal\-errors\fR" 4
2499 .IX Item "-Wfatal-errors"
2500 This option causes the compiler to abort compilation on the first error
2501 occurred rather than trying to keep going and printing further error
2502 messages.
2503 .PP
2504 You can request many specific warnings with options beginning
2505 \&\fB\-W\fR, for example \fB\-Wimplicit\fR to request warnings on
2506 implicit declarations.  Each of these specific warning options also
2507 has a negative form beginning \fB\-Wno\-\fR to turn off warnings; for
2508 example, \fB\-Wno\-implicit\fR.  This manual lists only one of the
2509 two forms, whichever is not the default.  For further,
2510 language-specific options also refer to \fB\*(C+ Dialect Options\fR and
2511 \&\fBObjective-C and Objective\-\*(C+ Dialect Options\fR.
2512 .IP "\fB\-pedantic\fR" 4
2513 .IX Item "-pedantic"
2514 Issue all the warnings demanded by strict \s-1ISO\s0 C and \s-1ISO\s0 \*(C+;
2515 reject all programs that use forbidden extensions, and some other
2516 programs that do not follow \s-1ISO\s0 C and \s-1ISO\s0 \*(C+.  For \s-1ISO\s0 C, follows the
2517 version of the \s-1ISO\s0 C standard specified by any \fB\-std\fR option used.
2518 .Sp
2519 Valid \s-1ISO\s0 C and \s-1ISO\s0 \*(C+ programs should compile properly with or without
2520 this option (though a rare few will require \fB\-ansi\fR or a
2521 \&\fB\-std\fR option specifying the required version of \s-1ISO\s0 C).  However,
2522 without this option, certain \s-1GNU\s0 extensions and traditional C and \*(C+
2523 features are supported as well.  With this option, they are rejected.
2524 .Sp
2525 \&\fB\-pedantic\fR does not cause warning messages for use of the
2526 alternate keywords whose names begin and end with \fB_\|_\fR.  Pedantic
2527 warnings are also disabled in the expression that follows
2528 \&\f(CW\*(C`_\|_extension_\|_\*(C'\fR.  However, only system header files should use
2529 these escape routes; application programs should avoid them.
2530 .Sp
2531 Some users try to use \fB\-pedantic\fR to check programs for strict \s-1ISO\s0
2532 C conformance.  They soon find that it does not do quite what they want:
2533 it finds some non-ISO practices, but not all\-\-\-only those for which
2534 \&\s-1ISO\s0 C \fIrequires\fR a diagnostic, and some others for which
2535 diagnostics have been added.
2536 .Sp
2537 A feature to report any failure to conform to \s-1ISO\s0 C might be useful in
2538 some instances, but would require considerable additional work and would
2539 be quite different from \fB\-pedantic\fR.  We don't have plans to
2540 support such a feature in the near future.
2541 .Sp
2542 Where the standard specified with \fB\-std\fR represents a \s-1GNU\s0
2543 extended dialect of C, such as \fBgnu89\fR or \fBgnu99\fR, there is a
2544 corresponding \fIbase standard\fR, the version of \s-1ISO\s0 C on which the \s-1GNU\s0
2545 extended dialect is based.  Warnings from \fB\-pedantic\fR are given
2546 where they are required by the base standard.  (It would not make sense
2547 for such warnings to be given only for features not in the specified \s-1GNU\s0
2548 C dialect, since by definition the \s-1GNU\s0 dialects of C include all
2549 features the compiler supports with the given option, and there would be
2550 nothing to warn about.)
2551 .IP "\fB\-pedantic\-errors\fR" 4
2552 .IX Item "-pedantic-errors"
2553 Like \fB\-pedantic\fR, except that errors are produced rather than
2554 warnings.
2555 .IP "\fB\-Wall\fR" 4
2556 .IX Item "-Wall"
2557 This enables all the warnings about constructions that some users
2558 consider questionable, and that are easy to avoid (or modify to
2559 prevent the warning), even in conjunction with macros.  This also
2560 enables some language-specific warnings described in \fB\*(C+ Dialect
2561 Options\fR and \fBObjective-C and Objective\-\*(C+ Dialect Options\fR.
2562 .Sp
2563 \&\fB\-Wall\fR turns on the following warning flags:
2564 .Sp
2565 \&\fB\-Waddress   
2566 \&\-Warray\-bounds\fR (only with\fB \fR\fB\-O2\fR)  
2567 \&\fB\-Wc++0x\-compat  
2568 \&\-Wchar\-subscripts  
2569 \&\-Wimplicit\-int  
2570 \&\-Wimplicit\-function\-declaration  
2571 \&\-Wcomment  
2572 \&\-Wformat   
2573 \&\-Wmain\fR (only for C/ObjC and unless\fB \fR\fB\-ffreestanding\fR)  
2574 \&\fB\-Wmissing\-braces  
2575 \&\-Wnonnull  
2576 \&\-Wparentheses  
2577 \&\-Wpointer\-sign  
2578 \&\-Wreorder   
2579 \&\-Wreturn\-type  
2580 \&\-Wsequence\-point  
2581 \&\-Wsign\-compare\fR (only in \*(C+)  
2582 \&\fB\-Wstrict\-aliasing  
2583 \&\-Wstrict\-overflow=1  
2584 \&\-Wswitch  
2585 \&\-Wtrigraphs  
2586 \&\-Wuninitialized  
2587 \&\-Wunknown\-pragmas  
2588 \&\-Wunused\-function  
2589 \&\-Wunused\-label     
2590 \&\-Wunused\-value     
2591 \&\-Wunused\-variable  
2592 \&\-Wvolatile\-register\-var\fR 
2593 .Sp
2594 Note that some warning flags are not implied by \fB\-Wall\fR.  Some of
2595 them warn about constructions that users generally do not consider
2596 questionable, but which occasionally you might wish to check for;
2597 others warn about constructions that are necessary or hard to avoid in
2598 some cases, and there is no simple way to modify the code to suppress
2599 the warning. Some of them are enabled by \fB\-Wextra\fR but many of
2600 them must be enabled individually.
2601 .IP "\fB\-Wextra\fR" 4
2602 .IX Item "-Wextra"
2603 This enables some extra warning flags that are not enabled by
2604 \&\fB\-Wall\fR. (This option used to be called \fB\-W\fR.  The older
2605 name is still supported, but the newer name is more descriptive.)
2606 .Sp
2607 \&\fB\-Wclobbered  
2608 \&\-Wempty\-body  
2609 \&\-Wignored\-qualifiers 
2610 \&\-Wmissing\-field\-initializers  
2611 \&\-Wmissing\-parameter\-type\fR (C only)  
2612 \&\fB\-Wold\-style\-declaration\fR (C only)  
2613 \&\fB\-Woverride\-init  
2614 \&\-Wsign\-compare  
2615 \&\-Wtype\-limits  
2616 \&\-Wuninitialized  
2617 \&\-Wunused\-parameter\fR (only with\fB \fR\fB\-Wunused\fR\fB \fRor\fB \fR\fB\-Wall\fR)  \fB
2618 \&\fR
2619 .Sp
2620 The option \fB\-Wextra\fR also prints warning messages for the
2621 following cases:
2622 .RS 4
2623 .IP "*" 4
2624 A pointer is compared against integer zero with \fB<\fR, \fB<=\fR,
2625 \&\fB>\fR, or \fB>=\fR.
2626 .IP "*" 4
2627 (\*(C+ only) An enumerator and a non-enumerator both appear in a
2628 conditional expression.
2629 .IP "*" 4
2630 (\*(C+ only) Ambiguous virtual bases.
2631 .IP "*" 4
2632 (\*(C+ only) Subscripting an array which has been declared \fBregister\fR.
2633 .IP "*" 4
2634 (\*(C+ only) Taking the address of a variable which has been declared
2635 \&\fBregister\fR.
2636 .IP "*" 4
2637 (\*(C+ only) A base class is not initialized in a derived class' copy
2638 constructor.
2639 .RE
2640 .RS 4
2641 .RE
2642 .IP "\fB\-Wchar\-subscripts\fR" 4
2643 .IX Item "-Wchar-subscripts"
2644 Warn if an array subscript has type \f(CW\*(C`char\*(C'\fR.  This is a common cause
2645 of error, as programmers often forget that this type is signed on some
2646 machines.
2647 This warning is enabled by \fB\-Wall\fR.
2648 .IP "\fB\-Wcomment\fR" 4
2649 .IX Item "-Wcomment"
2650 Warn whenever a comment-start sequence \fB/*\fR appears in a \fB/*\fR
2651 comment, or whenever a Backslash-Newline appears in a \fB//\fR comment.
2652 This warning is enabled by \fB\-Wall\fR.
2653 .IP "\fB\-Wformat\fR" 4
2654 .IX Item "-Wformat"
2655 Check calls to \f(CW\*(C`printf\*(C'\fR and \f(CW\*(C`scanf\*(C'\fR, etc., to make sure that
2656 the arguments supplied have types appropriate to the format string
2657 specified, and that the conversions specified in the format string make
2658 sense.  This includes standard functions, and others specified by format
2659 attributes, in the \f(CW\*(C`printf\*(C'\fR,
2660 \&\f(CW\*(C`scanf\*(C'\fR, \f(CW\*(C`strftime\*(C'\fR and \f(CW\*(C`strfmon\*(C'\fR (an X/Open extension,
2661 not in the C standard) families (or other target-specific families).
2662 Which functions are checked without format attributes having been
2663 specified depends on the standard version selected, and such checks of
2664 functions without the attribute specified are disabled by
2665 \&\fB\-ffreestanding\fR or \fB\-fno\-builtin\fR.
2666 .Sp
2667 The formats are checked against the format features supported by \s-1GNU\s0
2668 libc version 2.2.  These include all \s-1ISO\s0 C90 and C99 features, as well
2669 as features from the Single Unix Specification and some \s-1BSD\s0 and \s-1GNU\s0
2670 extensions.  Other library implementations may not support all these
2671 features; \s-1GCC\s0 does not support warning about features that go beyond a
2672 particular library's limitations.  However, if \fB\-pedantic\fR is used
2673 with \fB\-Wformat\fR, warnings will be given about format features not
2674 in the selected standard version (but not for \f(CW\*(C`strfmon\*(C'\fR formats,
2675 since those are not in any version of the C standard).  
2676 .Sp
2677 Since \fB\-Wformat\fR also checks for null format arguments for
2678 several functions, \fB\-Wformat\fR also implies \fB\-Wnonnull\fR.
2679 .Sp
2680 \&\fB\-Wformat\fR is included in \fB\-Wall\fR.  For more control over some
2681 aspects of format checking, the options \fB\-Wformat\-y2k\fR,
2682 \&\fB\-Wno\-format\-extra\-args\fR, \fB\-Wno\-format\-zero\-length\fR,
2683 \&\fB\-Wformat\-nonliteral\fR, \fB\-Wformat\-security\fR, and
2684 \&\fB\-Wformat=2\fR are available, but are not included in \fB\-Wall\fR.
2685 .IP "\fB\-Wformat\-y2k\fR" 4
2686 .IX Item "-Wformat-y2k"
2687 If \fB\-Wformat\fR is specified, also warn about \f(CW\*(C`strftime\*(C'\fR
2688 formats which may yield only a two-digit year.
2689 .IP "\fB\-Wno\-format\-contains\-nul\fR" 4
2690 .IX Item "-Wno-format-contains-nul"
2691 If \fB\-Wformat\fR is specified, do not warn about format strings that
2692 contain \s-1NUL\s0 bytes.
2693 .IP "\fB\-Wno\-format\-extra\-args\fR" 4
2694 .IX Item "-Wno-format-extra-args"
2695 If \fB\-Wformat\fR is specified, do not warn about excess arguments to a
2696 \&\f(CW\*(C`printf\*(C'\fR or \f(CW\*(C`scanf\*(C'\fR format function.  The C standard specifies
2697 that such arguments are ignored.
2698 .Sp
2699 Where the unused arguments lie between used arguments that are
2700 specified with \fB$\fR operand number specifications, normally
2701 warnings are still given, since the implementation could not know what
2702 type to pass to \f(CW\*(C`va_arg\*(C'\fR to skip the unused arguments.  However,
2703 in the case of \f(CW\*(C`scanf\*(C'\fR formats, this option will suppress the
2704 warning if the unused arguments are all pointers, since the Single
2705 Unix Specification says that such unused arguments are allowed.
2706 .IP "\fB\-Wno\-format\-zero\-length\fR (C and Objective-C only)" 4
2707 .IX Item "-Wno-format-zero-length (C and Objective-C only)"
2708 If \fB\-Wformat\fR is specified, do not warn about zero-length formats.
2709 The C standard specifies that zero-length formats are allowed.
2710 .IP "\fB\-Wformat\-nonliteral\fR" 4
2711 .IX Item "-Wformat-nonliteral"
2712 If \fB\-Wformat\fR is specified, also warn if the format string is not a
2713 string literal and so cannot be checked, unless the format function
2714 takes its format arguments as a \f(CW\*(C`va_list\*(C'\fR.
2715 .IP "\fB\-Wformat\-security\fR" 4
2716 .IX Item "-Wformat-security"
2717 If \fB\-Wformat\fR is specified, also warn about uses of format
2718 functions that represent possible security problems.  At present, this
2719 warns about calls to \f(CW\*(C`printf\*(C'\fR and \f(CW\*(C`scanf\*(C'\fR functions where the
2720 format string is not a string literal and there are no format arguments,
2721 as in \f(CW\*(C`printf (foo);\*(C'\fR.  This may be a security hole if the format
2722 string came from untrusted input and contains \fB%n\fR.  (This is
2723 currently a subset of what \fB\-Wformat\-nonliteral\fR warns about, but
2724 in future warnings may be added to \fB\-Wformat\-security\fR that are not
2725 included in \fB\-Wformat\-nonliteral\fR.)
2726 .IP "\fB\-Wformat=2\fR" 4
2727 .IX Item "-Wformat=2"
2728 Enable \fB\-Wformat\fR plus format checks not included in
2729 \&\fB\-Wformat\fR.  Currently equivalent to \fB\-Wformat
2730 \&\-Wformat\-nonliteral \-Wformat\-security \-Wformat\-y2k\fR.
2731 .IP "\fB\-Wnonnull\fR (C and Objective-C only)" 4
2732 .IX Item "-Wnonnull (C and Objective-C only)"
2733 Warn about passing a null pointer for arguments marked as
2734 requiring a non-null value by the \f(CW\*(C`nonnull\*(C'\fR function attribute.
2735 .Sp
2736 \&\fB\-Wnonnull\fR is included in \fB\-Wall\fR and \fB\-Wformat\fR.  It
2737 can be disabled with the \fB\-Wno\-nonnull\fR option.
2738 .IP "\fB\-Winit\-self\fR (C, \*(C+, Objective-C and Objective\-\*(C+ only)" 4
2739 .IX Item "-Winit-self (C, , Objective-C and Objective- only)"
2740 Warn about uninitialized variables which are initialized with themselves.
2741 Note this option can only be used with the \fB\-Wuninitialized\fR option.
2742 .Sp
2743 For example, \s-1GCC\s0 will warn about \f(CW\*(C`i\*(C'\fR being uninitialized in the
2744 following snippet only when \fB\-Winit\-self\fR has been specified:
2745 .Sp
2746 .Vb 5
2747 \&        int f()
2748 \&        {
2749 \&          int i = i;
2750 \&          return i;
2751 \&        }
2752 .Ve
2753 .IP "\fB\-Wimplicit\-int\fR (C and Objective-C only)" 4
2754 .IX Item "-Wimplicit-int (C and Objective-C only)"
2755 Warn when a declaration does not specify a type.
2756 This warning is enabled by \fB\-Wall\fR.
2757 .IP "\fB\-Wimplicit\-function\-declaration\fR (C and Objective-C only)" 4
2758 .IX Item "-Wimplicit-function-declaration (C and Objective-C only)"
2759 Give a warning whenever a function is used before being declared. In
2760 C99 mode (\fB\-std=c99\fR or \fB\-std=gnu99\fR), this warning is
2761 enabled by default and it is made into an error by
2762 \&\fB\-pedantic\-errors\fR. This warning is also enabled by
2763 \&\fB\-Wall\fR.
2764 .IP "\fB\-Wimplicit\fR" 4
2765 .IX Item "-Wimplicit"
2766 Same as \fB\-Wimplicit\-int\fR and \fB\-Wimplicit\-function\-declaration\fR.
2767 This warning is enabled by \fB\-Wall\fR.
2768 .IP "\fB\-Wignored\-qualifiers\fR (C and \*(C+ only)" 4
2769 .IX Item "-Wignored-qualifiers (C and  only)"
2770 Warn if the return type of a function has a type qualifier
2771 such as \f(CW\*(C`const\*(C'\fR.  For \s-1ISO\s0 C such a type qualifier has no effect,
2772 since the value returned by a function is not an lvalue.
2773 For \*(C+, the warning is only emitted for scalar types or \f(CW\*(C`void\*(C'\fR.
2774 \&\s-1ISO\s0 C prohibits qualified \f(CW\*(C`void\*(C'\fR return types on function
2775 definitions, so such return types always receive a warning
2776 even without this option.
2777 .Sp
2778 This warning is also enabled by \fB\-Wextra\fR.
2779 .IP "\fB\-Wmain\fR" 4
2780 .IX Item "-Wmain"
2781 Warn if the type of \fBmain\fR is suspicious.  \fBmain\fR should be
2782 a function with external linkage, returning int, taking either zero
2783 arguments, two, or three arguments of appropriate types.  This warning
2784 is enabled by default in \*(C+ and is enabled by either \fB\-Wall\fR
2785 or \fB\-pedantic\fR.
2786 .IP "\fB\-Wmissing\-braces\fR" 4
2787 .IX Item "-Wmissing-braces"
2788 Warn if an aggregate or union initializer is not fully bracketed.  In
2789 the following example, the initializer for \fBa\fR is not fully
2790 bracketed, but that for \fBb\fR is fully bracketed.
2791 .Sp
2792 .Vb 2
2793 \&        int a[2][2] = { 0, 1, 2, 3 };
2794 \&        int b[2][2] = { { 0, 1 }, { 2, 3 } };
2795 .Ve
2796 .Sp
2797 This warning is enabled by \fB\-Wall\fR.
2798 .IP "\fB\-Wmissing\-include\-dirs\fR (C, \*(C+, Objective-C and Objective\-\*(C+ only)" 4
2799 .IX Item "-Wmissing-include-dirs (C, , Objective-C and Objective- only)"
2800 Warn if a user-supplied include directory does not exist.
2801 .IP "\fB\-Wparentheses\fR" 4
2802 .IX Item "-Wparentheses"
2803 Warn if parentheses are omitted in certain contexts, such
2804 as when there is an assignment in a context where a truth value
2805 is expected, or when operators are nested whose precedence people
2806 often get confused about.
2807 .Sp
2808 Also warn if a comparison like \fBx<=y<=z\fR appears; this is
2809 equivalent to \fB(x<=y ? 1 : 0) <= z\fR, which is a different
2810 interpretation from that of ordinary mathematical notation.
2811 .Sp
2812 Also warn about constructions where there may be confusion to which
2813 \&\f(CW\*(C`if\*(C'\fR statement an \f(CW\*(C`else\*(C'\fR branch belongs.  Here is an example of
2814 such a case:
2815 .Sp
2816 .Vb 7
2817 \&        {
2818 \&          if (a)
2819 \&            if (b)
2820 \&              foo ();
2821 \&          else
2822 \&            bar ();
2823 \&        }
2824 .Ve
2825 .Sp
2826 In C/\*(C+, every \f(CW\*(C`else\*(C'\fR branch belongs to the innermost possible
2827 \&\f(CW\*(C`if\*(C'\fR statement, which in this example is \f(CW\*(C`if (b)\*(C'\fR.  This is
2828 often not what the programmer expected, as illustrated in the above
2829 example by indentation the programmer chose.  When there is the
2830 potential for this confusion, \s-1GCC\s0 will issue a warning when this flag
2831 is specified.  To eliminate the warning, add explicit braces around
2832 the innermost \f(CW\*(C`if\*(C'\fR statement so there is no way the \f(CW\*(C`else\*(C'\fR
2833 could belong to the enclosing \f(CW\*(C`if\*(C'\fR.  The resulting code would
2834 look like this:
2835 .Sp
2836 .Vb 9
2837 \&        {
2838 \&          if (a)
2839 \&            {
2840 \&              if (b)
2841 \&                foo ();
2842 \&              else
2843 \&                bar ();
2844 \&            }
2845 \&        }
2846 .Ve
2847 .Sp
2848 This warning is enabled by \fB\-Wall\fR.
2849 .IP "\fB\-Wsequence\-point\fR" 4
2850 .IX Item "-Wsequence-point"
2851 Warn about code that may have undefined semantics because of violations
2852 of sequence point rules in the C and \*(C+ standards.
2853 .Sp
2854 The C and \*(C+ standards defines the order in which expressions in a C/\*(C+
2855 program are evaluated in terms of \fIsequence points\fR, which represent
2856 a partial ordering between the execution of parts of the program: those
2857 executed before the sequence point, and those executed after it.  These
2858 occur after the evaluation of a full expression (one which is not part
2859 of a larger expression), after the evaluation of the first operand of a
2860 \&\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
2861 function is called (but after the evaluation of its arguments and the
2862 expression denoting the called function), and in certain other places.
2863 Other than as expressed by the sequence point rules, the order of
2864 evaluation of subexpressions of an expression is not specified.  All
2865 these rules describe only a partial order rather than a total order,
2866 since, for example, if two functions are called within one expression
2867 with no sequence point between them, the order in which the functions
2868 are called is not specified.  However, the standards committee have
2869 ruled that function calls do not overlap.
2870 .Sp
2871 It is not specified when between sequence points modifications to the
2872 values of objects take effect.  Programs whose behavior depends on this
2873 have undefined behavior; the C and \*(C+ standards specify that \*(L"Between
2874 the previous and next sequence point an object shall have its stored
2875 value modified at most once by the evaluation of an expression.
2876 Furthermore, the prior value shall be read only to determine the value
2877 to be stored.\*(R".  If a program breaks these rules, the results on any
2878 particular implementation are entirely unpredictable.
2879 .Sp
2880 Examples of code with undefined behavior are \f(CW\*(C`a = a++;\*(C'\fR, \f(CW\*(C`a[n]
2881 = b[n++]\*(C'\fR and \f(CW\*(C`a[i++] = i;\*(C'\fR.  Some more complicated cases are not
2882 diagnosed by this option, and it may give an occasional false positive
2883 result, but in general it has been found fairly effective at detecting
2884 this sort of problem in programs.
2885 .Sp
2886 The standard is worded confusingly, therefore there is some debate
2887 over the precise meaning of the sequence point rules in subtle cases.
2888 Links to discussions of the problem, including proposed formal
2889 definitions, may be found on the \s-1GCC\s0 readings page, at
2890 <\fBhttp://gcc.gnu.org/readings.html\fR>.
2891 .Sp
2892 This warning is enabled by \fB\-Wall\fR for C and \*(C+.
2893 .IP "\fB\-Wreturn\-type\fR" 4
2894 .IX Item "-Wreturn-type"
2895 Warn whenever a function is defined with a return-type that defaults
2896 to \f(CW\*(C`int\*(C'\fR.  Also warn about any \f(CW\*(C`return\*(C'\fR statement with no
2897 return-value in a function whose return-type is not \f(CW\*(C`void\*(C'\fR
2898 (falling off the end of the function body is considered returning
2899 without a value), and about a \f(CW\*(C`return\*(C'\fR statement with a
2900 expression in a function whose return-type is \f(CW\*(C`void\*(C'\fR.
2901 .Sp
2902 For \*(C+, a function without return type always produces a diagnostic
2903 message, even when \fB\-Wno\-return\-type\fR is specified.  The only
2904 exceptions are \fBmain\fR and functions defined in system headers.
2905 .Sp
2906 This warning is enabled by \fB\-Wall\fR.
2907 .IP "\fB\-Wswitch\fR" 4
2908 .IX Item "-Wswitch"
2909 Warn whenever a \f(CW\*(C`switch\*(C'\fR statement has an index of enumerated type
2910 and lacks a \f(CW\*(C`case\*(C'\fR for one or more of the named codes of that
2911 enumeration.  (The presence of a \f(CW\*(C`default\*(C'\fR label prevents this
2912 warning.)  \f(CW\*(C`case\*(C'\fR labels outside the enumeration range also
2913 provoke warnings when this option is used.
2914 This warning is enabled by \fB\-Wall\fR.
2915 .IP "\fB\-Wswitch\-default\fR" 4
2916 .IX Item "-Wswitch-default"
2917 Warn whenever a \f(CW\*(C`switch\*(C'\fR statement does not have a \f(CW\*(C`default\*(C'\fR
2918 case.
2919 .IP "\fB\-Wswitch\-enum\fR" 4
2920 .IX Item "-Wswitch-enum"
2921 Warn whenever a \f(CW\*(C`switch\*(C'\fR statement has an index of enumerated type
2922 and lacks a \f(CW\*(C`case\*(C'\fR for one or more of the named codes of that
2923 enumeration.  \f(CW\*(C`case\*(C'\fR labels outside the enumeration range also
2924 provoke warnings when this option is used.
2925 .IP "\fB\-Wsync\-nand\fR (C and \*(C+ only)" 4
2926 .IX Item "-Wsync-nand (C and  only)"
2927 Warn when \f(CW\*(C`_\|_sync_fetch_and_nand\*(C'\fR and \f(CW\*(C`_\|_sync_nand_and_fetch\*(C'\fR
2928 built-in functions are used.  These functions changed semantics in \s-1GCC\s0 4.4.
2929 .IP "\fB\-Wtrigraphs\fR" 4
2930 .IX Item "-Wtrigraphs"
2931 Warn if any trigraphs are encountered that might change the meaning of
2932 the program (trigraphs within comments are not warned about).
2933 This warning is enabled by \fB\-Wall\fR.
2934 .IP "\fB\-Wunused\-function\fR" 4
2935 .IX Item "-Wunused-function"
2936 Warn whenever a static function is declared but not defined or a
2937 non-inline static function is unused.
2938 This warning is enabled by \fB\-Wall\fR.
2939 .IP "\fB\-Wunused\-label\fR" 4
2940 .IX Item "-Wunused-label"
2941 Warn whenever a label is declared but not used.
2942 This warning is enabled by \fB\-Wall\fR.
2943 .Sp
2944 To suppress this warning use the \fBunused\fR attribute.
2945 .IP "\fB\-Wunused\-parameter\fR" 4
2946 .IX Item "-Wunused-parameter"
2947 Warn whenever a function parameter is unused aside from its declaration.
2948 .Sp
2949 To suppress this warning use the \fBunused\fR attribute.
2950 .IP "\fB\-Wunused\-variable\fR" 4
2951 .IX Item "-Wunused-variable"
2952 Warn whenever a local variable or non-constant static variable is unused
2953 aside from its declaration.
2954 This warning is enabled by \fB\-Wall\fR.
2955 .Sp
2956 To suppress this warning use the \fBunused\fR attribute.
2957 .IP "\fB\-Wunused\-value\fR" 4
2958 .IX Item "-Wunused-value"
2959 Warn whenever a statement computes a result that is explicitly not
2960 used. To suppress this warning cast the unused expression to
2961 \&\fBvoid\fR. This includes an expression-statement or the left-hand
2962 side of a comma expression that contains no side effects. For example,
2963 an expression such as \fBx[i,j]\fR will cause a warning, while
2964 \&\fBx[(void)i,j]\fR will not.
2965 .Sp
2966 This warning is enabled by \fB\-Wall\fR.
2967 .IP "\fB\-Wunused\fR" 4
2968 .IX Item "-Wunused"
2969 All the above \fB\-Wunused\fR options combined.
2970 .Sp
2971 In order to get a warning about an unused function parameter, you must
2972 either specify \fB\-Wextra \-Wunused\fR (note that \fB\-Wall\fR implies
2973 \&\fB\-Wunused\fR), or separately specify \fB\-Wunused\-parameter\fR.
2974 .IP "\fB\-Wuninitialized\fR" 4
2975 .IX Item "-Wuninitialized"
2976 Warn if an automatic variable is used without first being initialized
2977 or if a variable may be clobbered by a \f(CW\*(C`setjmp\*(C'\fR call. In \*(C+,
2978 warn if a non-static reference or non-static \fBconst\fR member
2979 appears in a class without constructors.
2980 .Sp
2981 If you want to warn about code which uses the uninitialized value of the
2982 variable in its own initializer, use the \fB\-Winit\-self\fR option.
2983 .Sp
2984 These warnings occur for individual uninitialized or clobbered
2985 elements of structure, union or array variables as well as for
2986 variables which are uninitialized or clobbered as a whole.  They do
2987 not occur for variables or elements declared \f(CW\*(C`volatile\*(C'\fR.  Because
2988 these warnings depend on optimization, the exact variables or elements
2989 for which there are warnings will depend on the precise optimization
2990 options and version of \s-1GCC\s0 used.
2991 .Sp
2992 Note that there may be no warning about a variable that is used only
2993 to compute a value that itself is never used, because such
2994 computations may be deleted by data flow analysis before the warnings
2995 are printed.
2996 .Sp
2997 These warnings are made optional because \s-1GCC\s0 is not smart
2998 enough to see all the reasons why the code might be correct
2999 despite appearing to have an error.  Here is one example of how
3000 this can happen:
3001 .Sp
3002 .Vb 12
3003 \&        {
3004 \&          int x;
3005 \&          switch (y)
3006 \&            {
3007 \&            case 1: x = 1;
3008 \&              break;
3009 \&            case 2: x = 4;
3010 \&              break;
3011 \&            case 3: x = 5;
3012 \&            }
3013 \&          foo (x);
3014 \&        }
3015 .Ve
3016 .Sp
3017 If the value of \f(CW\*(C`y\*(C'\fR is always 1, 2 or 3, then \f(CW\*(C`x\*(C'\fR is
3018 always initialized, but \s-1GCC\s0 doesn't know this.  Here is
3019 another common case:
3020 .Sp
3021 .Vb 6
3022 \&        {
3023 \&          int save_y;
3024 \&          if (change_y) save_y = y, y = new_y;
3025 \&          ...
3026 \&          if (change_y) y = save_y;
3027 \&        }
3028 .Ve
3029 .Sp
3030 This has no bug because \f(CW\*(C`save_y\*(C'\fR is used only if it is set.
3031 .Sp
3032 This option also warns when a non-volatile automatic variable might be
3033 changed by a call to \f(CW\*(C`longjmp\*(C'\fR.  These warnings as well are possible
3034 only in optimizing compilation.
3035 .Sp
3036 The compiler sees only the calls to \f(CW\*(C`setjmp\*(C'\fR.  It cannot know
3037 where \f(CW\*(C`longjmp\*(C'\fR will be called; in fact, a signal handler could
3038 call it at any point in the code.  As a result, you may get a warning
3039 even when there is in fact no problem because \f(CW\*(C`longjmp\*(C'\fR cannot
3040 in fact be called at the place which would cause a problem.
3041 .Sp
3042 Some spurious warnings can be avoided if you declare all the functions
3043 you use that never return as \f(CW\*(C`noreturn\*(C'\fR.  
3044 .Sp
3045 This warning is enabled by \fB\-Wall\fR or \fB\-Wextra\fR.
3046 .IP "\fB\-Wunknown\-pragmas\fR" 4
3047 .IX Item "-Wunknown-pragmas"
3048 Warn when a #pragma directive is encountered which is not understood by
3049 \&\s-1GCC\s0.  If this command line option is used, warnings will even be issued
3050 for unknown pragmas in system header files.  This is not the case if
3051 the warnings were only enabled by the \fB\-Wall\fR command line option.
3052 .IP "\fB\-Wno\-pragmas\fR" 4
3053 .IX Item "-Wno-pragmas"
3054 Do not warn about misuses of pragmas, such as incorrect parameters,
3055 invalid syntax, or conflicts between pragmas.  See also
3056 \&\fB\-Wunknown\-pragmas\fR.
3057 .IP "\fB\-Wstrict\-aliasing\fR" 4
3058 .IX Item "-Wstrict-aliasing"
3059 This option is only active when \fB\-fstrict\-aliasing\fR is active.
3060 It warns about code which might break the strict aliasing rules that the
3061 compiler is using for optimization.  The warning does not catch all
3062 cases, but does attempt to catch the more common pitfalls.  It is
3063 included in \fB\-Wall\fR.
3064 It is equivalent to \fB\-Wstrict\-aliasing=3\fR
3065 .IP "\fB\-Wstrict\-aliasing=n\fR" 4
3066 .IX Item "-Wstrict-aliasing=n"
3067 This option is only active when \fB\-fstrict\-aliasing\fR is active.
3068 It warns about code which might break the strict aliasing rules that the
3069 compiler is using for optimization.
3070 Higher levels correspond to higher accuracy (fewer false positives).
3071 Higher levels also correspond to more effort, similar to the way \-O works.
3072 \&\fB\-Wstrict\-aliasing\fR is equivalent to \fB\-Wstrict\-aliasing=n\fR,
3073 with n=3.
3074 .Sp
3075 Level 1: Most aggressive, quick, least accurate.
3076 Possibly useful when higher levels
3077 do not warn but \-fstrict\-aliasing still breaks the code, as it has very few 
3078 false negatives.  However, it has many false positives.
3079 Warns for all pointer conversions between possibly incompatible types, 
3080 even if never dereferenced.  Runs in the frontend only.
3081 .Sp
3082 Level 2: Aggressive, quick, not too precise.
3083 May still have many false positives (not as many as level 1 though),
3084 and few false negatives (but possibly more than level 1).
3085 Unlike level 1, it only warns when an address is taken.  Warns about
3086 incomplete types.  Runs in the frontend only.
3087 .Sp
3088 Level 3 (default for \fB\-Wstrict\-aliasing\fR): 
3089 Should have very few false positives and few false 
3090 negatives.  Slightly slower than levels 1 or 2 when optimization is enabled.
3091 Takes care of the common punn+dereference pattern in the frontend:
3092 \&\f(CW\*(C`*(int*)&some_float\*(C'\fR.
3093 If optimization is enabled, it also runs in the backend, where it deals 
3094 with multiple statement cases using flow-sensitive points-to information.
3095 Only warns when the converted pointer is dereferenced.
3096 Does not warn about incomplete types.
3097 .IP "\fB\-Wstrict\-overflow\fR" 4
3098 .IX Item "-Wstrict-overflow"
3099 .PD 0
3100 .IP "\fB\-Wstrict\-overflow=\fR\fIn\fR" 4
3101 .IX Item "-Wstrict-overflow=n"
3102 .PD
3103 This option is only active when \fB\-fstrict\-overflow\fR is active.
3104 It warns about cases where the compiler optimizes based on the
3105 assumption that signed overflow does not occur.  Note that it does not
3106 warn about all cases where the code might overflow: it only warns
3107 about cases where the compiler implements some optimization.  Thus
3108 this warning depends on the optimization level.
3109 .Sp
3110 An optimization which assumes that signed overflow does not occur is
3111 perfectly safe if the values of the variables involved are such that
3112 overflow never does, in fact, occur.  Therefore this warning can
3113 easily give a false positive: a warning about code which is not
3114 actually a problem.  To help focus on important issues, several
3115 warning levels are defined.  No warnings are issued for the use of
3116 undefined signed overflow when estimating how many iterations a loop
3117 will require, in particular when determining whether a loop will be
3118 executed at all.
3119 .RS 4
3120 .IP "\fB\-Wstrict\-overflow=1\fR" 4
3121 .IX Item "-Wstrict-overflow=1"
3122 Warn about cases which are both questionable and easy to avoid.  For
3123 example: \f(CW\*(C`x + 1 > x\*(C'\fR; with \fB\-fstrict\-overflow\fR, the
3124 compiler will simplify this to \f(CW1\fR.  This level of
3125 \&\fB\-Wstrict\-overflow\fR is enabled by \fB\-Wall\fR; higher levels
3126 are not, and must be explicitly requested.
3127 .IP "\fB\-Wstrict\-overflow=2\fR" 4
3128 .IX Item "-Wstrict-overflow=2"
3129 Also warn about other cases where a comparison is simplified to a
3130 constant.  For example: \f(CW\*(C`abs (x) >= 0\*(C'\fR.  This can only be
3131 simplified when \fB\-fstrict\-overflow\fR is in effect, because
3132 \&\f(CW\*(C`abs (INT_MIN)\*(C'\fR overflows to \f(CW\*(C`INT_MIN\*(C'\fR, which is less than
3133 zero.  \fB\-Wstrict\-overflow\fR (with no level) is the same as
3134 \&\fB\-Wstrict\-overflow=2\fR.
3135 .IP "\fB\-Wstrict\-overflow=3\fR" 4
3136 .IX Item "-Wstrict-overflow=3"
3137 Also warn about other cases where a comparison is simplified.  For
3138 example: \f(CW\*(C`x + 1 > 1\*(C'\fR will be simplified to \f(CW\*(C`x > 0\*(C'\fR.
3139 .IP "\fB\-Wstrict\-overflow=4\fR" 4
3140 .IX Item "-Wstrict-overflow=4"
3141 Also warn about other simplifications not covered by the above cases.
3142 For example: \f(CW\*(C`(x * 10) / 5\*(C'\fR will be simplified to \f(CW\*(C`x * 2\*(C'\fR.
3143 .IP "\fB\-Wstrict\-overflow=5\fR" 4
3144 .IX Item "-Wstrict-overflow=5"
3145 Also warn about cases where the compiler reduces the magnitude of a
3146 constant involved in a comparison.  For example: \f(CW\*(C`x + 2 > y\*(C'\fR will
3147 be simplified to \f(CW\*(C`x + 1 >= y\*(C'\fR.  This is reported only at the
3148 highest warning level because this simplification applies to many
3149 comparisons, so this warning level will give a very large number of
3150 false positives.
3151 .RE
3152 .RS 4
3153 .RE
3154 .IP "\fB\-Warray\-bounds\fR" 4
3155 .IX Item "-Warray-bounds"
3156 This option is only active when \fB\-ftree\-vrp\fR is active
3157 (default for \-O2 and above). It warns about subscripts to arrays
3158 that are always out of bounds. This warning is enabled by \fB\-Wall\fR.
3159 .IP "\fB\-Wno\-div\-by\-zero\fR" 4
3160 .IX Item "-Wno-div-by-zero"
3161 Do not warn about compile-time integer division by zero.  Floating point
3162 division by zero is not warned about, as it can be a legitimate way of
3163 obtaining infinities and NaNs.
3164 .IP "\fB\-Wsystem\-headers\fR" 4
3165 .IX Item "-Wsystem-headers"
3166 Print warning messages for constructs found in system header files.
3167 Warnings from system headers are normally suppressed, on the assumption
3168 that they usually do not indicate real problems and would only make the
3169 compiler output harder to read.  Using this command line option tells
3170 \&\s-1GCC\s0 to emit warnings from system headers as if they occurred in user
3171 code.  However, note that using \fB\-Wall\fR in conjunction with this
3172 option will \fInot\fR warn about unknown pragmas in system
3173 headers\-\-\-for that, \fB\-Wunknown\-pragmas\fR must also be used.
3174 .IP "\fB\-Wfloat\-equal\fR" 4
3175 .IX Item "-Wfloat-equal"
3176 Warn if floating point values are used in equality comparisons.
3177 .Sp
3178 The idea behind this is that sometimes it is convenient (for the
3179 programmer) to consider floating-point values as approximations to
3180 infinitely precise real numbers.  If you are doing this, then you need
3181 to compute (by analyzing the code, or in some other way) the maximum or
3182 likely maximum error that the computation introduces, and allow for it
3183 when performing comparisons (and when producing output, but that's a
3184 different problem).  In particular, instead of testing for equality, you
3185 would check to see whether the two values have ranges that overlap; and
3186 this is done with the relational operators, so equality comparisons are
3187 probably mistaken.
3188 .IP "\fB\-Wtraditional\fR (C and Objective-C only)" 4
3189 .IX Item "-Wtraditional (C and Objective-C only)"
3190 Warn about certain constructs that behave differently in traditional and
3191 \&\s-1ISO\s0 C.  Also warn about \s-1ISO\s0 C constructs that have no traditional C
3192 equivalent, and/or problematic constructs which should be avoided.
3193 .RS 4
3194 .IP "*" 4
3195 Macro parameters that appear within string literals in the macro body.
3196 In traditional C macro replacement takes place within string literals,
3197 but does not in \s-1ISO\s0 C.
3198 .IP "*" 4
3199 In traditional C, some preprocessor directives did not exist.
3200 Traditional preprocessors would only consider a line to be a directive
3201 if the \fB#\fR appeared in column 1 on the line.  Therefore
3202 \&\fB\-Wtraditional\fR warns about directives that traditional C
3203 understands but would ignore because the \fB#\fR does not appear as the
3204 first character on the line.  It also suggests you hide directives like
3205 \&\fB#pragma\fR not understood by traditional C by indenting them.  Some
3206 traditional implementations would not recognize \fB#elif\fR, so it
3207 suggests avoiding it altogether.
3208 .IP "*" 4
3209 A function-like macro that appears without arguments.
3210 .IP "*" 4
3211 The unary plus operator.
3212 .IP "*" 4
3213 The \fBU\fR integer constant suffix, or the \fBF\fR or \fBL\fR floating point
3214 constant suffixes.  (Traditional C does support the \fBL\fR suffix on integer
3215 constants.)  Note, these suffixes appear in macros defined in the system
3216 headers of most modern systems, e.g. the \fB_MIN\fR/\fB_MAX\fR macros in \f(CW\*(C`<limits.h>\*(C'\fR.
3217 Use of these macros in user code might normally lead to spurious
3218 warnings, however \s-1GCC\s0's integrated preprocessor has enough context to
3219 avoid warning in these cases.
3220 .IP "*" 4
3221 A function declared external in one block and then used after the end of
3222 the block.
3223 .IP "*" 4
3224 A \f(CW\*(C`switch\*(C'\fR statement has an operand of type \f(CW\*(C`long\*(C'\fR.
3225 .IP "*" 4
3226 A non\-\f(CW\*(C`static\*(C'\fR function declaration follows a \f(CW\*(C`static\*(C'\fR one.
3227 This construct is not accepted by some traditional C compilers.
3228 .IP "*" 4
3229 The \s-1ISO\s0 type of an integer constant has a different width or
3230 signedness from its traditional type.  This warning is only issued if
3231 the base of the constant is ten.  I.e. hexadecimal or octal values, which
3232 typically represent bit patterns, are not warned about.
3233 .IP "*" 4
3234 Usage of \s-1ISO\s0 string concatenation is detected.
3235 .IP "*" 4
3236 Initialization of automatic aggregates.
3237 .IP "*" 4
3238 Identifier conflicts with labels.  Traditional C lacks a separate
3239 namespace for labels.
3240 .IP "*" 4
3241 Initialization of unions.  If the initializer is zero, the warning is
3242 omitted.  This is done under the assumption that the zero initializer in
3243 user code appears conditioned on e.g. \f(CW\*(C`_\|_STDC_\|_\*(C'\fR to avoid missing
3244 initializer warnings and relies on default initialization to zero in the
3245 traditional C case.
3246 .IP "*" 4
3247 Conversions by prototypes between fixed/floating point values and vice
3248 versa.  The absence of these prototypes when compiling with traditional
3249 C would cause serious problems.  This is a subset of the possible
3250 conversion warnings, for the full set use \fB\-Wtraditional\-conversion\fR.
3251 .IP "*" 4
3252 Use of \s-1ISO\s0 C style function definitions.  This warning intentionally is
3253 \&\fInot\fR issued for prototype declarations or variadic functions
3254 because these \s-1ISO\s0 C features will appear in your code when using
3255 libiberty's traditional C compatibility macros, \f(CW\*(C`PARAMS\*(C'\fR and
3256 \&\f(CW\*(C`VPARAMS\*(C'\fR.  This warning is also bypassed for nested functions
3257 because that feature is already a \s-1GCC\s0 extension and thus not relevant to
3258 traditional C compatibility.
3259 .RE
3260 .RS 4
3261 .RE
3262 .IP "\fB\-Wtraditional\-conversion\fR (C and Objective-C only)" 4
3263 .IX Item "-Wtraditional-conversion (C and Objective-C only)"
3264 Warn if a prototype causes a type conversion that is different from what
3265 would happen to the same argument in the absence of a prototype.  This
3266 includes conversions of fixed point to floating and vice versa, and
3267 conversions changing the width or signedness of a fixed point argument
3268 except when the same as the default promotion.
3269 .IP "\fB\-Wdeclaration\-after\-statement\fR (C and Objective-C only)" 4
3270 .IX Item "-Wdeclaration-after-statement (C and Objective-C only)"
3271 Warn when a declaration is found after a statement in a block.  This
3272 construct, known from \*(C+, was introduced with \s-1ISO\s0 C99 and is by default
3273 allowed in \s-1GCC\s0.  It is not supported by \s-1ISO\s0 C90 and was not supported by
3274 \&\s-1GCC\s0 versions before \s-1GCC\s0 3.0.  
3275 .IP "\fB\-Wundef\fR" 4
3276 .IX Item "-Wundef"
3277 Warn if an undefined identifier is evaluated in an \fB#if\fR directive.
3278 .IP "\fB\-Wno\-endif\-labels\fR" 4
3279 .IX Item "-Wno-endif-labels"
3280 Do not warn whenever an \fB#else\fR or an \fB#endif\fR are followed by text.
3281 .IP "\fB\-Wshadow\fR" 4
3282 .IX Item "-Wshadow"
3283 Warn whenever a local variable shadows another local variable, parameter or
3284 global variable or whenever a built-in function is shadowed.
3285 .IP "\fB\-Wlarger\-than=\fR\fIlen\fR" 4
3286 .IX Item "-Wlarger-than=len"
3287 Warn whenever an object of larger than \fIlen\fR bytes is defined.
3288 .IP "\fB\-Wframe\-larger\-than=\fR\fIlen\fR" 4
3289 .IX Item "-Wframe-larger-than=len"
3290 Warn if the size of a function frame is larger than \fIlen\fR bytes.
3291 The computation done to determine the stack frame size is approximate
3292 and not conservative.
3293 The actual requirements may be somewhat greater than \fIlen\fR
3294 even if you do not get a warning.  In addition, any space allocated
3295 via \f(CW\*(C`alloca\*(C'\fR, variable-length arrays, or related constructs
3296 is not included by the compiler when determining
3297 whether or not to issue a warning.
3298 .IP "\fB\-Wunsafe\-loop\-optimizations\fR" 4
3299 .IX Item "-Wunsafe-loop-optimizations"
3300 Warn if the loop cannot be optimized because the compiler could not
3301 assume anything on the bounds of the loop indices.  With
3302 \&\fB\-funsafe\-loop\-optimizations\fR warn if the compiler made
3303 such assumptions.
3304 .IP "\fB\-Wno\-pedantic\-ms\-format\fR (MinGW targets only)" 4
3305 .IX Item "-Wno-pedantic-ms-format (MinGW targets only)"
3306 Disables the warnings about non-ISO \f(CW\*(C`printf\*(C'\fR / \f(CW\*(C`scanf\*(C'\fR format
3307 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
3308 depending on the \s-1MS\s0 runtime, when you are using the options \fB\-Wformat\fR
3309 and \fB\-pedantic\fR without gnu\-extensions.
3310 .IP "\fB\-Wpointer\-arith\fR" 4
3311 .IX Item "-Wpointer-arith"
3312 Warn about anything that depends on the \*(L"size of\*(R" a function type or
3313 of \f(CW\*(C`void\*(C'\fR.  \s-1GNU\s0 C assigns these types a size of 1, for
3314 convenience in calculations with \f(CW\*(C`void *\*(C'\fR pointers and pointers
3315 to functions.  In \*(C+, warn also when an arithmetic operation involves
3316 \&\f(CW\*(C`NULL\*(C'\fR.  This warning is also enabled by \fB\-pedantic\fR.
3317 .IP "\fB\-Wtype\-limits\fR" 4
3318 .IX Item "-Wtype-limits"
3319 Warn if a comparison is always true or always false due to the limited
3320 range of the data type, but do not warn for constant expressions.  For
3321 example, warn if an unsigned variable is compared against zero with
3322 \&\fB<\fR or \fB>=\fR.  This warning is also enabled by
3323 \&\fB\-Wextra\fR.
3324 .IP "\fB\-Wbad\-function\-cast\fR (C and Objective-C only)" 4
3325 .IX Item "-Wbad-function-cast (C and Objective-C only)"
3326 Warn whenever a function call is cast to a non-matching type.
3327 For example, warn if \f(CW\*(C`int malloc()\*(C'\fR is cast to \f(CW\*(C`anything *\*(C'\fR.
3328 .IP "\fB\-Wc++\-compat\fR (C and Objective-C only)" 4
3329 .IX Item "-Wc++-compat (C and Objective-C only)"
3330 Warn about \s-1ISO\s0 C constructs that are outside of the common subset of
3331 \&\s-1ISO\s0 C and \s-1ISO\s0 \*(C+, e.g. request for implicit conversion from
3332 \&\f(CW\*(C`void *\*(C'\fR to a pointer to non\-\f(CW\*(C`void\*(C'\fR type.
3333 .IP "\fB\-Wc++0x\-compat\fR (\*(C+ and Objective\-\*(C+ only)" 4
3334 .IX Item "-Wc++0x-compat ( and Objective- only)"
3335 Warn about \*(C+ constructs whose meaning differs between \s-1ISO\s0 \*(C+ 1998 and
3336 \&\s-1ISO\s0 \*(C+ 200x, e.g., identifiers in \s-1ISO\s0 \*(C+ 1998 that will become keywords
3337 in \s-1ISO\s0 \*(C+ 200x.  This warning is enabled by \fB\-Wall\fR.
3338 .IP "\fB\-Wcast\-qual\fR" 4
3339 .IX Item "-Wcast-qual"
3340 Warn whenever a pointer is cast so as to remove a type qualifier from
3341 the target type.  For example, warn if a \f(CW\*(C`const char *\*(C'\fR is cast
3342 to an ordinary \f(CW\*(C`char *\*(C'\fR.
3343 .IP "\fB\-Wcast\-align\fR" 4
3344 .IX Item "-Wcast-align"
3345 Warn whenever a pointer is cast such that the required alignment of the
3346 target is increased.  For example, warn if a \f(CW\*(C`char *\*(C'\fR is cast to
3347 an \f(CW\*(C`int *\*(C'\fR on machines where integers can only be accessed at
3348 two\- or four-byte boundaries.
3349 .IP "\fB\-Wwrite\-strings\fR" 4
3350 .IX Item "-Wwrite-strings"
3351 When compiling C, give string constants the type \f(CW\*(C`const
3352 char[\f(CIlength\f(CW]\*(C'\fR so that copying the address of one into a
3353 non\-\f(CW\*(C`const\*(C'\fR \f(CW\*(C`char *\*(C'\fR pointer will get a warning.  These
3354 warnings will help you find at compile time code that can try to write
3355 into a string constant, but only if you have been very careful about
3356 using \f(CW\*(C`const\*(C'\fR in declarations and prototypes.  Otherwise, it will
3357 just be a nuisance. This is why we did not make \fB\-Wall\fR request
3358 these warnings.
3359 .Sp
3360 When compiling \*(C+, warn about the deprecated conversion from string
3361 literals to \f(CW\*(C`char *\*(C'\fR.  This warning is enabled by default for \*(C+
3362 programs.
3363 .IP "\fB\-Wclobbered\fR" 4
3364 .IX Item "-Wclobbered"
3365 Warn for variables that might be changed by \fBlongjmp\fR or
3366 \&\fBvfork\fR.  This warning is also enabled by \fB\-Wextra\fR.
3367 .IP "\fB\-Wconversion\fR" 4
3368 .IX Item "-Wconversion"
3369 Warn for implicit conversions that may alter a value. This includes
3370 conversions between real and integer, like \f(CW\*(C`abs (x)\*(C'\fR when
3371 \&\f(CW\*(C`x\*(C'\fR is \f(CW\*(C`double\*(C'\fR; conversions between signed and unsigned,
3372 like \f(CW\*(C`unsigned ui = \-1\*(C'\fR; and conversions to smaller types, like
3373 \&\f(CW\*(C`sqrtf (M_PI)\*(C'\fR. Do not warn for explicit casts like \f(CW\*(C`abs
3374 ((int) x)\*(C'\fR and \f(CW\*(C`ui = (unsigned) \-1\*(C'\fR, or if the value is not
3375 changed by the conversion like in \f(CW\*(C`abs (2.0)\*(C'\fR.  Warnings about
3376 conversions between signed and unsigned integers can be disabled by
3377 using \fB\-Wno\-sign\-conversion\fR.
3378 .Sp
3379 For \*(C+, also warn for conversions between \f(CW\*(C`NULL\*(C'\fR and non-pointer
3380 types; confusing overload resolution for user-defined conversions; and
3381 conversions that will never use a type conversion operator:
3382 conversions to \f(CW\*(C`void\*(C'\fR, the same type, a base class or a reference
3383 to them. Warnings about conversions between signed and unsigned
3384 integers are disabled by default in \*(C+ unless
3385 \&\fB\-Wsign\-conversion\fR is explicitly enabled.
3386 .IP "\fB\-Wempty\-body\fR" 4
3387 .IX Item "-Wempty-body"
3388 Warn if an empty body occurs in an \fBif\fR, \fBelse\fR or \fBdo
3389 while\fR statement.  This warning is also enabled by \fB\-Wextra\fR.
3390 .IP "\fB\-Wenum\-compare\fR (\*(C+ and Objective\-\*(C+ only)" 4
3391 .IX Item "-Wenum-compare ( and Objective- only)"
3392 Warn about a comparison between values of different enum types. This
3393 warning is enabled by default.
3394 .IP "\fB\-Wsign\-compare\fR" 4
3395 .IX Item "-Wsign-compare"
3396 Warn when a comparison between signed and unsigned values could produce
3397 an incorrect result when the signed value is converted to unsigned.
3398 This warning is also enabled by \fB\-Wextra\fR; to get the other warnings
3399 of \fB\-Wextra\fR without this warning, use \fB\-Wextra \-Wno\-sign\-compare\fR.
3400 .IP "\fB\-Wsign\-conversion\fR" 4
3401 .IX Item "-Wsign-conversion"
3402 Warn for implicit conversions that may change the sign of an integer
3403 value, like assigning a signed integer expression to an unsigned
3404 integer variable. An explicit cast silences the warning. In C, this
3405 option is enabled also by \fB\-Wconversion\fR.
3406 .IP "\fB\-Waddress\fR" 4
3407 .IX Item "-Waddress"
3408 Warn about suspicious uses of memory addresses. These include using
3409 the address of a function in a conditional expression, such as
3410 \&\f(CW\*(C`void func(void); if (func)\*(C'\fR, and comparisons against the memory
3411 address of a string literal, such as \f(CW\*(C`if (x == "abc")\*(C'\fR.  Such
3412 uses typically indicate a programmer error: the address of a function
3413 always evaluates to true, so their use in a conditional usually
3414 indicate that the programmer forgot the parentheses in a function
3415 call; and comparisons against string literals result in unspecified
3416 behavior and are not portable in C, so they usually indicate that the
3417 programmer intended to use \f(CW\*(C`strcmp\*(C'\fR.  This warning is enabled by
3418 \&\fB\-Wall\fR.
3419 .IP "\fB\-Wlogical\-op\fR" 4
3420 .IX Item "-Wlogical-op"
3421 Warn about suspicious uses of logical operators in expressions.
3422 This includes using logical operators in contexts where a
3423 bit-wise operator is likely to be expected.
3424 .IP "\fB\-Waggregate\-return\fR" 4
3425 .IX Item "-Waggregate-return"
3426 Warn if any functions that return structures or unions are defined or
3427 called.  (In languages where you can return an array, this also elicits
3428 a warning.)
3429 .IP "\fB\-Wno\-attributes\fR" 4
3430 .IX Item "-Wno-attributes"
3431 Do not warn if an unexpected \f(CW\*(C`_\|_attribute_\|_\*(C'\fR is used, such as
3432 unrecognized attributes, function attributes applied to variables,
3433 etc.  This will not stop errors for incorrect use of supported
3434 attributes.
3435 .IP "\fB\-Wno\-builtin\-macro\-redefined\fR" 4
3436 .IX Item "-Wno-builtin-macro-redefined"
3437 Do not warn if certain built-in macros are redefined.  This suppresses
3438 warnings for redefinition of \f(CW\*(C`_\|_TIMESTAMP_\|_\*(C'\fR, \f(CW\*(C`_\|_TIME_\|_\*(C'\fR,
3439 \&\f(CW\*(C`_\|_DATE_\|_\*(C'\fR, \f(CW\*(C`_\|_FILE_\|_\*(C'\fR, and \f(CW\*(C`_\|_BASE_FILE_\|_\*(C'\fR.
3440 .IP "\fB\-Wstrict\-prototypes\fR (C and Objective-C only)" 4
3441 .IX Item "-Wstrict-prototypes (C and Objective-C only)"
3442 Warn if a function is declared or defined without specifying the
3443 argument types.  (An old-style function definition is permitted without
3444 a warning if preceded by a declaration which specifies the argument
3445 types.)
3446 .IP "\fB\-Wold\-style\-declaration\fR (C and Objective-C only)" 4
3447 .IX Item "-Wold-style-declaration (C and Objective-C only)"
3448 Warn for obsolescent usages, according to the C Standard, in a
3449 declaration. For example, warn if storage-class specifiers like
3450 \&\f(CW\*(C`static\*(C'\fR are not the first things in a declaration.  This warning
3451 is also enabled by \fB\-Wextra\fR.
3452 .IP "\fB\-Wold\-style\-definition\fR (C and Objective-C only)" 4
3453 .IX Item "-Wold-style-definition (C and Objective-C only)"
3454 Warn if an old-style function definition is used.  A warning is given
3455 even if there is a previous prototype.
3456 .IP "\fB\-Wmissing\-parameter\-type\fR (C and Objective-C only)" 4
3457 .IX Item "-Wmissing-parameter-type (C and Objective-C only)"
3458 A function parameter is declared without a type specifier in K&R\-style
3459 functions:
3460 .Sp
3461 .Vb 1
3462 \&        void foo(bar) { }
3463 .Ve
3464 .Sp
3465 This warning is also enabled by \fB\-Wextra\fR.
3466 .IP "\fB\-Wmissing\-prototypes\fR (C and Objective-C only)" 4
3467 .IX Item "-Wmissing-prototypes (C and Objective-C only)"
3468 Warn if a global function is defined without a previous prototype
3469 declaration.  This warning is issued even if the definition itself
3470 provides a prototype.  The aim is to detect global functions that fail
3471 to be declared in header files.
3472 .IP "\fB\-Wmissing\-declarations\fR" 4
3473 .IX Item "-Wmissing-declarations"
3474 Warn if a global function is defined without a previous declaration.
3475 Do so even if the definition itself provides a prototype.
3476 Use this option to detect global functions that are not declared in
3477 header files.  In \*(C+, no warnings are issued for function templates,
3478 or for inline functions, or for functions in anonymous namespaces.
3479 .IP "\fB\-Wmissing\-field\-initializers\fR" 4
3480 .IX Item "-Wmissing-field-initializers"
3481 Warn if a structure's initializer has some fields missing.  For
3482 example, the following code would cause such a warning, because
3483 \&\f(CW\*(C`x.h\*(C'\fR is implicitly zero:
3484 .Sp
3485 .Vb 2
3486 \&        struct s { int f, g, h; };
3487 \&        struct s x = { 3, 4 };
3488 .Ve
3489 .Sp
3490 This option does not warn about designated initializers, so the following
3491 modification would not trigger a warning:
3492 .Sp
3493 .Vb 2
3494 \&        struct s { int f, g, h; };
3495 \&        struct s x = { .f = 3, .g = 4 };
3496 .Ve
3497 .Sp
3498 This warning is included in \fB\-Wextra\fR.  To get other \fB\-Wextra\fR
3499 warnings without this one, use \fB\-Wextra \-Wno\-missing\-field\-initializers\fR.
3500 .IP "\fB\-Wmissing\-noreturn\fR" 4
3501 .IX Item "-Wmissing-noreturn"
3502 Warn about functions which might be candidates for attribute \f(CW\*(C`noreturn\*(C'\fR.
3503 Note these are only possible candidates, not absolute ones.  Care should
3504 be taken to manually verify functions actually do not ever return before
3505 adding the \f(CW\*(C`noreturn\*(C'\fR attribute, otherwise subtle code generation
3506 bugs could be introduced.  You will not get a warning for \f(CW\*(C`main\*(C'\fR in
3507 hosted C environments.
3508 .IP "\fB\-Wmissing\-format\-attribute\fR" 4
3509 .IX Item "-Wmissing-format-attribute"
3510 Warn about function pointers which might be candidates for \f(CW\*(C`format\*(C'\fR
3511 attributes.  Note these are only possible candidates, not absolute ones.
3512 \&\s-1GCC\s0 will guess that function pointers with \f(CW\*(C`format\*(C'\fR attributes that
3513 are used in assignment, initialization, parameter passing or return
3514 statements should have a corresponding \f(CW\*(C`format\*(C'\fR attribute in the
3515 resulting type.  I.e. the left-hand side of the assignment or
3516 initialization, the type of the parameter variable, or the return type
3517 of the containing function respectively should also have a \f(CW\*(C`format\*(C'\fR
3518 attribute to avoid the warning.
3519 .Sp
3520 \&\s-1GCC\s0 will also warn about function definitions which might be
3521 candidates for \f(CW\*(C`format\*(C'\fR attributes.  Again, these are only
3522 possible candidates.  \s-1GCC\s0 will guess that \f(CW\*(C`format\*(C'\fR attributes
3523 might be appropriate for any function that calls a function like
3524 \&\f(CW\*(C`vprintf\*(C'\fR or \f(CW\*(C`vscanf\*(C'\fR, but this might not always be the
3525 case, and some functions for which \f(CW\*(C`format\*(C'\fR attributes are
3526 appropriate may not be detected.
3527 .IP "\fB\-Wno\-multichar\fR" 4
3528 .IX Item "-Wno-multichar"
3529 Do not warn if a multicharacter constant (\fB'\s-1FOOF\s0'\fR) is used.
3530 Usually they indicate a typo in the user's code, as they have
3531 implementation-defined values, and should not be used in portable code.
3532 .IP "\fB\-Wnormalized=<none|id|nfc|nfkc>\fR" 4
3533 .IX Item "-Wnormalized=<none|id|nfc|nfkc>"
3534 In \s-1ISO\s0 C and \s-1ISO\s0 \*(C+, two identifiers are different if they are
3535 different sequences of characters.  However, sometimes when characters
3536 outside the basic \s-1ASCII\s0 character set are used, you can have two
3537 different character sequences that look the same.  To avoid confusion,
3538 the \s-1ISO\s0 10646 standard sets out some \fInormalization rules\fR which
3539 when applied ensure that two sequences that look the same are turned into
3540 the same sequence.  \s-1GCC\s0 can warn you if you are using identifiers which
3541 have not been normalized; this option controls that warning.
3542 .Sp
3543 There are four levels of warning that \s-1GCC\s0 supports.  The default is
3544 \&\fB\-Wnormalized=nfc\fR, which warns about any identifier which is
3545 not in the \s-1ISO\s0 10646 \*(L"C\*(R" normalized form, \fI\s-1NFC\s0\fR.  \s-1NFC\s0 is the
3546 recommended form for most uses.
3547 .Sp
3548 Unfortunately, there are some characters which \s-1ISO\s0 C and \s-1ISO\s0 \*(C+ allow
3549 in identifiers that when turned into \s-1NFC\s0 aren't allowable as
3550 identifiers.  That is, there's no way to use these symbols in portable
3551 \&\s-1ISO\s0 C or \*(C+ and have all your identifiers in \s-1NFC\s0.
3552 \&\fB\-Wnormalized=id\fR suppresses the warning for these characters.
3553 It is hoped that future versions of the standards involved will correct
3554 this, which is why this option is not the default.
3555 .Sp
3556 You can switch the warning off for all characters by writing
3557 \&\fB\-Wnormalized=none\fR.  You would only want to do this if you
3558 were using some other normalization scheme (like \*(L"D\*(R"), because
3559 otherwise you can easily create bugs that are literally impossible to see.
3560 .Sp
3561 Some characters in \s-1ISO\s0 10646 have distinct meanings but look identical
3562 in some fonts or display methodologies, especially once formatting has
3563 been applied.  For instance \f(CW\*(C`\eu207F\*(C'\fR, \*(L"\s-1SUPERSCRIPT\s0 \s-1LATIN\s0 \s-1SMALL\s0
3564 \&\s-1LETTER\s0 N\*(R", will display just like a regular \f(CW\*(C`n\*(C'\fR which has been
3565 placed in a superscript.  \s-1ISO\s0 10646 defines the \fI\s-1NFKC\s0\fR
3566 normalization scheme to convert all these into a standard form as
3567 well, and \s-1GCC\s0 will warn if your code is not in \s-1NFKC\s0 if you use
3568 \&\fB\-Wnormalized=nfkc\fR.  This warning is comparable to warning
3569 about every identifier that contains the letter O because it might be
3570 confused with the digit 0, and so is not the default, but may be
3571 useful as a local coding convention if the programming environment is
3572 unable to be fixed to display these characters distinctly.
3573 .IP "\fB\-Wno\-deprecated\fR" 4
3574 .IX Item "-Wno-deprecated"
3575 Do not warn about usage of deprecated features.  
3576 .IP "\fB\-Wno\-deprecated\-declarations\fR" 4
3577 .IX Item "-Wno-deprecated-declarations"
3578 Do not warn about uses of functions,
3579 variables, and types marked as deprecated by using the \f(CW\*(C`deprecated\*(C'\fR
3580 attribute.
3581 .IP "\fB\-Wno\-overflow\fR" 4
3582 .IX Item "-Wno-overflow"
3583 Do not warn about compile-time overflow in constant expressions.
3584 .IP "\fB\-Woverride\-init\fR (C and Objective-C only)" 4
3585 .IX Item "-Woverride-init (C and Objective-C only)"
3586 Warn if an initialized field without side effects is overridden when
3587 using designated initializers.
3588 .Sp
3589 This warning is included in \fB\-Wextra\fR.  To get other
3590 \&\fB\-Wextra\fR warnings without this one, use \fB\-Wextra
3591 \&\-Wno\-override\-init\fR.
3592 .IP "\fB\-Wpacked\fR" 4
3593 .IX Item "-Wpacked"
3594 Warn if a structure is given the packed attribute, but the packed
3595 attribute has no effect on the layout or size of the structure.
3596 Such structures may be mis-aligned for little benefit.  For
3597 instance, in this code, the variable \f(CW\*(C`f.x\*(C'\fR in \f(CW\*(C`struct bar\*(C'\fR
3598 will be misaligned even though \f(CW\*(C`struct bar\*(C'\fR does not itself
3599 have the packed attribute:
3600 .Sp
3601 .Vb 8
3602 \&        struct foo {
3603 \&          int x;
3604 \&          char a, b, c, d;
3605 \&        } __attribute__((packed));
3606 \&        struct bar {
3607 \&          char z;
3608 \&          struct foo f;
3609 \&        };
3610 .Ve
3611 .IP "\fB\-Wpacked\-bitfield\-compat\fR" 4
3612 .IX Item "-Wpacked-bitfield-compat"
3613 The 4.1, 4.2 and 4.3 series of \s-1GCC\s0 ignore the \f(CW\*(C`packed\*(C'\fR attribute
3614 on bit-fields of type \f(CW\*(C`char\*(C'\fR.  This has been fixed in \s-1GCC\s0 4.4 but
3615 the change can lead to differences in the structure layout.  \s-1GCC\s0
3616 informs you when the offset of such a field has changed in \s-1GCC\s0 4.4.
3617 For example there is no longer a 4\-bit padding between field \f(CW\*(C`a\*(C'\fR
3618 and \f(CW\*(C`b\*(C'\fR in this structure:
3619 .Sp
3620 .Vb 5
3621 \&        struct foo
3622 \&        {
3623 \&          char a:4;
3624 \&          char b:8;
3625 \&        } __attribute__ ((packed));
3626 .Ve
3627 .Sp
3628 This warning is enabled by default.  Use
3629 \&\fB\-Wno\-packed\-bitfield\-compat\fR to disable this warning.
3630 .IP "\fB\-Wpadded\fR" 4
3631 .IX Item "-Wpadded"
3632 Warn if padding is included in a structure, either to align an element
3633 of the structure or to align the whole structure.  Sometimes when this
3634 happens it is possible to rearrange the fields of the structure to
3635 reduce the padding and so make the structure smaller.
3636 .IP "\fB\-Wredundant\-decls\fR" 4
3637 .IX Item "-Wredundant-decls"
3638 Warn if anything is declared more than once in the same scope, even in
3639 cases where multiple declaration is valid and changes nothing.
3640 .IP "\fB\-Wnested\-externs\fR (C and Objective-C only)" 4
3641 .IX Item "-Wnested-externs (C and Objective-C only)"
3642 Warn if an \f(CW\*(C`extern\*(C'\fR declaration is encountered within a function.
3643 .IP "\fB\-Wunreachable\-code\fR" 4
3644 .IX Item "-Wunreachable-code"
3645 Warn if the compiler detects that code will never be executed.
3646 .Sp
3647 This option is intended to warn when the compiler detects that at
3648 least a whole line of source code will never be executed, because
3649 some condition is never satisfied or because it is after a
3650 procedure that never returns.
3651 .Sp
3652 It is possible for this option to produce a warning even though there
3653 are circumstances under which part of the affected line can be executed,
3654 so care should be taken when removing apparently-unreachable code.
3655 .Sp
3656 For instance, when a function is inlined, a warning may mean that the
3657 line is unreachable in only one inlined copy of the function.
3658 .Sp
3659 This option is not made part of \fB\-Wall\fR because in a debugging
3660 version of a program there is often substantial code which checks
3661 correct functioning of the program and is, hopefully, unreachable
3662 because the program does work.  Another common use of unreachable
3663 code is to provide behavior which is selectable at compile\-time.
3664 .IP "\fB\-Winline\fR" 4
3665 .IX Item "-Winline"
3666 Warn if a function can not be inlined and it was declared as inline.
3667 Even with this option, the compiler will not warn about failures to
3668 inline functions declared in system headers.
3669 .Sp
3670 The compiler uses a variety of heuristics to determine whether or not
3671 to inline a function.  For example, the compiler takes into account
3672 the size of the function being inlined and the amount of inlining
3673 that has already been done in the current function.  Therefore,
3674 seemingly insignificant changes in the source program can cause the
3675 warnings produced by \fB\-Winline\fR to appear or disappear.
3676 .IP "\fB\-Wno\-invalid\-offsetof\fR (\*(C+ and Objective\-\*(C+ only)" 4
3677 .IX Item "-Wno-invalid-offsetof ( and Objective- only)"
3678 Suppress warnings from applying the \fBoffsetof\fR macro to a non-POD
3679 type.  According to the 1998 \s-1ISO\s0 \*(C+ standard, applying \fBoffsetof\fR
3680 to a non-POD type is undefined.  In existing \*(C+ implementations,
3681 however, \fBoffsetof\fR typically gives meaningful results even when
3682 applied to certain kinds of non-POD types. (Such as a simple
3683 \&\fBstruct\fR that fails to be a \s-1POD\s0 type only by virtue of having a
3684 constructor.)  This flag is for users who are aware that they are
3685 writing nonportable code and who have deliberately chosen to ignore the
3686 warning about it.
3687 .Sp
3688 The restrictions on \fBoffsetof\fR may be relaxed in a future version
3689 of the \*(C+ standard.
3690 .IP "\fB\-Wno\-int\-to\-pointer\-cast\fR (C and Objective-C only)" 4
3691 .IX Item "-Wno-int-to-pointer-cast (C and Objective-C only)"
3692 Suppress warnings from casts to pointer type of an integer of a
3693 different size.
3694 .IP "\fB\-Wno\-pointer\-to\-int\-cast\fR (C and Objective-C only)" 4
3695 .IX Item "-Wno-pointer-to-int-cast (C and Objective-C only)"
3696 Suppress warnings from casts from a pointer to an integer type of a
3697 different size.
3698 .IP "\fB\-Winvalid\-pch\fR" 4
3699 .IX Item "-Winvalid-pch"
3700 Warn if a precompiled header is found in
3701 the search path but can't be used.
3702 .IP "\fB\-Wlong\-long\fR" 4
3703 .IX Item "-Wlong-long"
3704 Warn if \fBlong long\fR type is used.  This is default.  To inhibit
3705 the warning messages, use \fB\-Wno\-long\-long\fR.  Flags
3706 \&\fB\-Wlong\-long\fR and \fB\-Wno\-long\-long\fR are taken into account
3707 only when \fB\-pedantic\fR flag is used.
3708 .IP "\fB\-Wvariadic\-macros\fR" 4
3709 .IX Item "-Wvariadic-macros"
3710 Warn if variadic macros are used in pedantic \s-1ISO\s0 C90 mode, or the \s-1GNU\s0
3711 alternate syntax when in pedantic \s-1ISO\s0 C99 mode.  This is default.
3712 To inhibit the warning messages, use \fB\-Wno\-variadic\-macros\fR.
3713 .IP "\fB\-Wvla\fR" 4
3714 .IX Item "-Wvla"
3715 Warn if variable length array is used in the code.
3716 \&\fB\-Wno\-vla\fR will prevent the \fB\-pedantic\fR warning of
3717 the variable length array.
3718 .IP "\fB\-Wvolatile\-register\-var\fR" 4
3719 .IX Item "-Wvolatile-register-var"
3720 Warn if a register variable is declared volatile.  The volatile
3721 modifier does not inhibit all optimizations that may eliminate reads
3722 and/or writes to register variables.  This warning is enabled by
3723 \&\fB\-Wall\fR.
3724 .IP "\fB\-Wdisabled\-optimization\fR" 4
3725 .IX Item "-Wdisabled-optimization"
3726 Warn if a requested optimization pass is disabled.  This warning does
3727 not generally indicate that there is anything wrong with your code; it
3728 merely indicates that \s-1GCC\s0's optimizers were unable to handle the code
3729 effectively.  Often, the problem is that your code is too big or too
3730 complex; \s-1GCC\s0 will refuse to optimize programs when the optimization
3731 itself is likely to take inordinate amounts of time.
3732 .IP "\fB\-Wpointer\-sign\fR (C and Objective-C only)" 4
3733 .IX Item "-Wpointer-sign (C and Objective-C only)"
3734 Warn for pointer argument passing or assignment with different signedness.
3735 This option is only supported for C and Objective\-C.  It is implied by
3736 \&\fB\-Wall\fR and by \fB\-pedantic\fR, which can be disabled with
3737 \&\fB\-Wno\-pointer\-sign\fR.
3738 .IP "\fB\-Wstack\-protector\fR" 4
3739 .IX Item "-Wstack-protector"
3740 This option is only active when \fB\-fstack\-protector\fR is active.  It
3741 warns about functions that will not be protected against stack smashing.
3742 .IP "\fB\-Wno\-mudflap\fR" 4
3743 .IX Item "-Wno-mudflap"
3744 Suppress warnings about constructs that cannot be instrumented by
3745 \&\fB\-fmudflap\fR.
3746 .IP "\fB\-Woverlength\-strings\fR" 4
3747 .IX Item "-Woverlength-strings"
3748 Warn about string constants which are longer than the \*(L"minimum
3749 maximum\*(R" length specified in the C standard.  Modern compilers
3750 generally allow string constants which are much longer than the
3751 standard's minimum limit, but very portable programs should avoid
3752 using longer strings.
3753 .Sp
3754 The limit applies \fIafter\fR string constant concatenation, and does
3755 not count the trailing \s-1NUL\s0.  In C89, the limit was 509 characters; in
3756 C99, it was raised to 4095.  \*(C+98 does not specify a normative
3757 minimum maximum, so we do not diagnose overlength strings in \*(C+.
3758 .Sp
3759 This option is implied by \fB\-pedantic\fR, and can be disabled with
3760 \&\fB\-Wno\-overlength\-strings\fR.
3761 .Sh "Options for Debugging Your Program or \s-1GCC\s0"
3762 .IX Subsection "Options for Debugging Your Program or GCC"
3763 \&\s-1GCC\s0 has various special options that are used for debugging
3764 either your program or \s-1GCC:\s0
3765 .IP "\fB\-g\fR" 4
3766 .IX Item "-g"
3767 Produce debugging information in the operating system's native format
3768 (stabs, \s-1COFF\s0, \s-1XCOFF\s0, or \s-1DWARF\s0 2).  \s-1GDB\s0 can work with this debugging
3769 information.
3770 .Sp
3771 On most systems that use stabs format, \fB\-g\fR enables use of extra
3772 debugging information that only \s-1GDB\s0 can use; this extra information
3773 makes debugging work better in \s-1GDB\s0 but will probably make other debuggers
3774 crash or
3775 refuse to read the program.  If you want to control for certain whether
3776 to generate the extra information, use \fB\-gstabs+\fR, \fB\-gstabs\fR,
3777 \&\fB\-gxcoff+\fR, \fB\-gxcoff\fR, or \fB\-gvms\fR (see below).
3778 .Sp
3779 \&\s-1GCC\s0 allows you to use \fB\-g\fR with
3780 \&\fB\-O\fR.  The shortcuts taken by optimized code may occasionally
3781 produce surprising results: some variables you declared may not exist
3782 at all; flow of control may briefly move where you did not expect it;
3783 some statements may not be executed because they compute constant
3784 results or their values were already at hand; some statements may
3785 execute in different places because they were moved out of loops.
3786 .Sp
3787 Nevertheless it proves possible to debug optimized output.  This makes
3788 it reasonable to use the optimizer for programs that might have bugs.
3789 .Sp
3790 The following options are useful when \s-1GCC\s0 is generated with the
3791 capability for more than one debugging format.
3792 .IP "\fB\-ggdb\fR" 4
3793 .IX Item "-ggdb"
3794 Produce debugging information for use by \s-1GDB\s0.  This means to use the
3795 most expressive format available (\s-1DWARF\s0 2, stabs, or the native format
3796 if neither of those are supported), including \s-1GDB\s0 extensions if at all
3797 possible.
3798 .IP "\fB\-gstabs\fR" 4
3799 .IX Item "-gstabs"
3800 Produce debugging information in stabs format (if that is supported),
3801 without \s-1GDB\s0 extensions.  This is the format used by \s-1DBX\s0 on most \s-1BSD\s0
3802 systems.  On \s-1MIPS\s0, Alpha and System V Release 4 systems this option
3803 produces stabs debugging output which is not understood by \s-1DBX\s0 or \s-1SDB\s0.
3804 On System V Release 4 systems this option requires the \s-1GNU\s0 assembler.
3805 .IP "\fB\-feliminate\-unused\-debug\-symbols\fR" 4
3806 .IX Item "-feliminate-unused-debug-symbols"
3807 Produce debugging information in stabs format (if that is supported),
3808 for only symbols that are actually used.
3809 .IP "\fB\-femit\-class\-debug\-always\fR" 4
3810 .IX Item "-femit-class-debug-always"
3811 Instead of emitting debugging information for a \*(C+ class in only one
3812 object file, emit it in all object files using the class.  This option
3813 should be used only with debuggers that are unable to handle the way \s-1GCC\s0
3814 normally emits debugging information for classes because using this
3815 option will increase the size of debugging information by as much as a
3816 factor of two.
3817 .IP "\fB\-gstabs+\fR" 4
3818 .IX Item "-gstabs+"
3819 Produce debugging information in stabs format (if that is supported),
3820 using \s-1GNU\s0 extensions understood only by the \s-1GNU\s0 debugger (\s-1GDB\s0).  The
3821 use of these extensions is likely to make other debuggers crash or
3822 refuse to read the program.
3823 .IP "\fB\-gcoff\fR" 4
3824 .IX Item "-gcoff"
3825 Produce debugging information in \s-1COFF\s0 format (if that is supported).
3826 This is the format used by \s-1SDB\s0 on most System V systems prior to
3827 System V Release 4.
3828 .IP "\fB\-gxcoff\fR" 4
3829 .IX Item "-gxcoff"
3830 Produce debugging information in \s-1XCOFF\s0 format (if that is supported).
3831 This is the format used by the \s-1DBX\s0 debugger on \s-1IBM\s0 \s-1RS/6000\s0 systems.
3832 .IP "\fB\-gxcoff+\fR" 4
3833 .IX Item "-gxcoff+"
3834 Produce debugging information in \s-1XCOFF\s0 format (if that is supported),
3835 using \s-1GNU\s0 extensions understood only by the \s-1GNU\s0 debugger (\s-1GDB\s0).  The
3836 use of these extensions is likely to make other debuggers crash or
3837 refuse to read the program, and may cause assemblers other than the \s-1GNU\s0
3838 assembler (\s-1GAS\s0) to fail with an error.
3839 .IP "\fB\-gdwarf\-2\fR" 4
3840 .IX Item "-gdwarf-2"
3841 Produce debugging information in \s-1DWARF\s0 version 2 format (if that is
3842 supported).  This is the format used by \s-1DBX\s0 on \s-1IRIX\s0 6.  With this
3843 option, \s-1GCC\s0 uses features of \s-1DWARF\s0 version 3 when they are useful;
3844 version 3 is upward compatible with version 2, but may still cause
3845 problems for older debuggers.
3846 .IP "\fB\-gdwarf\-4\fR" 4
3847 .IX Item "-gdwarf-4"
3848 Produce debugging information in \s-1DWARF\s0 version 4 format (if that is
3849 supported).  With this option, \s-1GCC\s0 uses features of \s-1DWARF\s0 version 4
3850 when they are useful, including the placement of most type information
3851 in separate comdat sections.  The \s-1DWARF\s0 version 4 format is still a
3852 draft specification, and this option is currently experimental.
3853 .IP "\fB\-gvms\fR" 4
3854 .IX Item "-gvms"
3855 Produce debugging information in \s-1VMS\s0 debug format (if that is
3856 supported).  This is the format used by \s-1DEBUG\s0 on \s-1VMS\s0 systems.
3857 .IP "\fB\-g\fR\fIlevel\fR" 4
3858 .IX Item "-glevel"
3859 .PD 0
3860 .IP "\fB\-ggdb\fR\fIlevel\fR" 4
3861 .IX Item "-ggdblevel"
3862 .IP "\fB\-gstabs\fR\fIlevel\fR" 4
3863 .IX Item "-gstabslevel"
3864 .IP "\fB\-gcoff\fR\fIlevel\fR" 4
3865 .IX Item "-gcofflevel"
3866 .IP "\fB\-gxcoff\fR\fIlevel\fR" 4
3867 .IX Item "-gxcofflevel"
3868 .IP "\fB\-gvms\fR\fIlevel\fR" 4
3869 .IX Item "-gvmslevel"
3870 .PD
3871 Request debugging information and also use \fIlevel\fR to specify how
3872 much information.  The default level is 2.
3873 .Sp
3874 Level 0 produces no debug information at all.  Thus, \fB\-g0\fR negates
3875 \&\fB\-g\fR.
3876 .Sp
3877 Level 1 produces minimal information, enough for making backtraces in
3878 parts of the program that you don't plan to debug.  This includes
3879 descriptions of functions and external variables, but no information
3880 about local variables and no line numbers.
3881 .Sp
3882 Level 3 includes extra information, such as all the macro definitions
3883 present in the program.  Some debuggers support macro expansion when
3884 you use \fB\-g3\fR.
3885 .Sp
3886 \&\fB\-gdwarf\-2\fR does not accept a concatenated debug level, because
3887 \&\s-1GCC\s0 used to support an option \fB\-gdwarf\fR that meant to generate
3888 debug information in version 1 of the \s-1DWARF\s0 format (which is very
3889 different from version 2), and it would have been too confusing.  That
3890 debug format is long obsolete, but the option cannot be changed now.
3891 Instead use an additional \fB\-g\fR\fIlevel\fR option to change the
3892 debug level for \s-1DWARF2\s0.
3893 .IP "\fB\-feliminate\-dwarf2\-dups\fR" 4
3894 .IX Item "-feliminate-dwarf2-dups"
3895 Compress \s-1DWARF2\s0 debugging information by eliminating duplicated
3896 information about each symbol.  This option only makes sense when
3897 generating \s-1DWARF2\s0 debugging information with \fB\-gdwarf\-2\fR.
3898 .IP "\fB\-femit\-struct\-debug\-baseonly\fR" 4
3899 .IX Item "-femit-struct-debug-baseonly"
3900 Emit debug information for struct-like types
3901 only when the base name of the compilation source file
3902 matches the base name of file in which the struct was defined.
3903 .Sp
3904 This option substantially reduces the size of debugging information,
3905 but at significant potential loss in type information to the debugger.
3906 See \fB\-femit\-struct\-debug\-reduced\fR for a less aggressive option.
3907 See \fB\-femit\-struct\-debug\-detailed\fR for more detailed control.
3908 .Sp
3909 This option works only with \s-1DWARF\s0 2.
3910 .IP "\fB\-femit\-struct\-debug\-reduced\fR" 4
3911 .IX Item "-femit-struct-debug-reduced"
3912 Emit debug information for struct-like types
3913 only when the base name of the compilation source file
3914 matches the base name of file in which the type was defined,
3915 unless the struct is a template or defined in a system header.
3916 .Sp
3917 This option significantly reduces the size of debugging information,
3918 with some potential loss in type information to the debugger.
3919 See \fB\-femit\-struct\-debug\-baseonly\fR for a more aggressive option.
3920 See \fB\-femit\-struct\-debug\-detailed\fR for more detailed control.
3921 .Sp
3922 This option works only with \s-1DWARF\s0 2.
3923 .IP "\fB\-femit\-struct\-debug\-detailed\fR[\fB=\fR\fIspec-list\fR]" 4
3924 .IX Item "-femit-struct-debug-detailed[=spec-list]"
3925 Specify the struct-like types
3926 for which the compiler will generate debug information.
3927 The intent is to reduce duplicate struct debug information
3928 between different object files within the same program.
3929 .Sp
3930 This option is a detailed version of
3931 \&\fB\-femit\-struct\-debug\-reduced\fR and \fB\-femit\-struct\-debug\-baseonly\fR,
3932 which will serve for most needs.
3933 .Sp
3934 A specification has the syntax
3935 [\fBdir:\fR|\fBind:\fR][\fBord:\fR|\fBgen:\fR](\fBany\fR|\fBsys\fR|\fBbase\fR|\fBnone\fR)
3936 .Sp
3937 The optional first word limits the specification to
3938 structs that are used directly (\fBdir:\fR) or used indirectly (\fBind:\fR).
3939 A struct type is used directly when it is the type of a variable, member.
3940 Indirect uses arise through pointers to structs.
3941 That is, when use of an incomplete struct would be legal, the use is indirect.
3942 An example is
3943 \&\fBstruct one direct; struct two * indirect;\fR.
3944 .Sp
3945 The optional second word limits the specification to
3946 ordinary structs (\fBord:\fR) or generic structs (\fBgen:\fR).
3947 Generic structs are a bit complicated to explain.
3948 For \*(C+, these are non-explicit specializations of template classes,
3949 or non-template classes within the above.
3950 Other programming languages have generics,
3951 but \fB\-femit\-struct\-debug\-detailed\fR does not yet implement them.
3952 .Sp
3953 The third word specifies the source files for those
3954 structs for which the compiler will emit debug information.
3955 The values \fBnone\fR and \fBany\fR have the normal meaning.
3956 The value \fBbase\fR means that
3957 the base of name of the file in which the type declaration appears
3958 must match the base of the name of the main compilation file.
3959 In practice, this means that
3960 types declared in \fIfoo.c\fR and \fIfoo.h\fR will have debug information,
3961 but types declared in other header will not.
3962 The value \fBsys\fR means those types satisfying \fBbase\fR
3963 or declared in system or compiler headers.
3964 .Sp
3965 You may need to experiment to determine the best settings for your application.
3966 .Sp
3967 The default is \fB\-femit\-struct\-debug\-detailed=all\fR.
3968 .Sp
3969 This option works only with \s-1DWARF\s0 2.
3970 .IP "\fB\-fno\-merge\-debug\-strings\fR" 4
3971 .IX Item "-fno-merge-debug-strings"
3972 Direct the linker to not merge together strings in the debugging
3973 information which are identical in different object files.  Merging is
3974 not supported by all assemblers or linkers.  Merging decreases the size
3975 of the debug information in the output file at the cost of increasing
3976 link processing time.  Merging is enabled by default.
3977 .IP "\fB\-fdebug\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR" 4
3978 .IX Item "-fdebug-prefix-map=old=new"
3979 When compiling files in directory \fI\fIold\fI\fR, record debugging
3980 information describing them as in \fI\fInew\fI\fR instead.
3981 .IP "\fB\-fno\-dwarf2\-cfi\-asm\fR" 4
3982 .IX Item "-fno-dwarf2-cfi-asm"
3983 Emit \s-1DWARF\s0 2 unwind info as compiler generated \f(CW\*(C`.eh_frame\*(C'\fR section
3984 instead of using \s-1GAS\s0 \f(CW\*(C`.cfi_*\*(C'\fR directives.
3985 .IP "\fB\-p\fR" 4
3986 .IX Item "-p"
3987 Generate extra code to write profile information suitable for the
3988 analysis program \fBprof\fR.  You must use this option when compiling
3989 the source files you want data about, and you must also use it when
3990 linking.
3991 .IP "\fB\-pg\fR" 4
3992 .IX Item "-pg"
3993 Generate extra code to write profile information suitable for the
3994 analysis program \fBgprof\fR.  You must use this option when compiling
3995 the source files you want data about, and you must also use it when
3996 linking.
3997 .IP "\fB\-Q\fR" 4
3998 .IX Item "-Q"
3999 Makes the compiler print out each function name as it is compiled, and
4000 print some statistics about each pass when it finishes.
4001 .IP "\fB\-ftime\-report\fR" 4
4002 .IX Item "-ftime-report"
4003 Makes the compiler print some statistics about the time consumed by each
4004 pass when it finishes.
4005 .IP "\fB\-fmem\-report\fR" 4
4006 .IX Item "-fmem-report"
4007 Makes the compiler print some statistics about permanent memory
4008 allocation when it finishes.
4009 .IP "\fB\-fpre\-ipa\-mem\-report\fR" 4
4010 .IX Item "-fpre-ipa-mem-report"
4011 .PD 0
4012 .IP "\fB\-fpost\-ipa\-mem\-report\fR" 4
4013 .IX Item "-fpost-ipa-mem-report"
4014 .PD
4015 Makes the compiler print some statistics about permanent memory
4016 allocation before or after interprocedural optimization.
4017 .IP "\fB\-fprofile\-arcs\fR" 4
4018 .IX Item "-fprofile-arcs"
4019 Add code so that program flow \fIarcs\fR are instrumented.  During
4020 execution the program records how many times each branch and call is
4021 executed and how many times it is taken or returns.  When the compiled
4022 program exits it saves this data to a file called
4023 \&\fI\fIauxname\fI.gcda\fR for each source file.  The data may be used for
4024 profile-directed optimizations (\fB\-fbranch\-probabilities\fR), or for
4025 test coverage analysis (\fB\-ftest\-coverage\fR).  Each object file's
4026 \&\fIauxname\fR is generated from the name of the output file, if
4027 explicitly specified and it is not the final executable, otherwise it is
4028 the basename of the source file.  In both cases any suffix is removed
4029 (e.g. \fIfoo.gcda\fR for input file \fIdir/foo.c\fR, or
4030 \&\fIdir/foo.gcda\fR for output file specified as \fB\-o dir/foo.o\fR).
4031 .IP "\fB\-\-coverage\fR" 4
4032 .IX Item "--coverage"
4033 This option is used to compile and link code instrumented for coverage
4034 analysis.  The option is a synonym for \fB\-fprofile\-arcs\fR
4035 \&\fB\-ftest\-coverage\fR (when compiling) and \fB\-lgcov\fR (when
4036 linking).  See the documentation for those options for more details.
4037 .RS 4
4038 .IP "*" 4
4039 Compile the source files with \fB\-fprofile\-arcs\fR plus optimization
4040 and code generation options.  For test coverage analysis, use the
4041 additional \fB\-ftest\-coverage\fR option.  You do not need to profile
4042 every source file in a program.
4043 .IP "*" 4
4044 Link your object files with \fB\-lgcov\fR or \fB\-fprofile\-arcs\fR
4045 (the latter implies the former).
4046 .IP "*" 4
4047 Run the program on a representative workload to generate the arc profile
4048 information.  This may be repeated any number of times.  You can run
4049 concurrent instances of your program, and provided that the file system
4050 supports locking, the data files will be correctly updated.  Also
4051 \&\f(CW\*(C`fork\*(C'\fR calls are detected and correctly handled (double counting
4052 will not happen).
4053 .IP "*" 4
4054 For profile-directed optimizations, compile the source files again with
4055 the same optimization and code generation options plus
4056 \&\fB\-fbranch\-probabilities\fR.
4057 .IP "*" 4
4058 For test coverage analysis, use \fBgcov\fR to produce human readable
4059 information from the \fI.gcno\fR and \fI.gcda\fR files.  Refer to the
4060 \&\fBgcov\fR documentation for further information.
4061 .RE
4062 .RS 4
4063 .Sp
4064 With \fB\-fprofile\-arcs\fR, for each function of your program \s-1GCC\s0
4065 creates a program flow graph, then finds a spanning tree for the graph.
4066 Only arcs that are not on the spanning tree have to be instrumented: the
4067 compiler adds code to count the number of times that these arcs are
4068 executed.  When an arc is the only exit or only entrance to a block, the
4069 instrumentation code can be added to the block; otherwise, a new basic
4070 block must be created to hold the instrumentation code.
4071 .RE
4072 .IP "\fB\-ftest\-coverage\fR" 4
4073 .IX Item "-ftest-coverage"
4074 Produce a notes file that the \fBgcov\fR code-coverage utility can use to
4075 show program coverage.  Each source file's note file is called
4076 \&\fI\fIauxname\fI.gcno\fR.  Refer to the \fB\-fprofile\-arcs\fR option
4077 above for a description of \fIauxname\fR and instructions on how to
4078 generate test coverage data.  Coverage data will match the source files
4079 more closely, if you do not optimize.
4080 .IP "\fB\-fdbg\-cnt\-list\fR" 4
4081 .IX Item "-fdbg-cnt-list"
4082 Print the name and the counter upperbound for all debug counters.
4083 .IP "\fB\-fdbg\-cnt=\fR\fIcounter-value-list\fR" 4
4084 .IX Item "-fdbg-cnt=counter-value-list"
4085 Set the internal debug counter upperbound. \fIcounter-value-list\fR 
4086 is a comma-separated list of \fIname\fR:\fIvalue\fR pairs
4087 which sets the upperbound of each debug counter \fIname\fR to \fIvalue\fR.
4088 All debug counters have the initial upperbound of \fI\s-1UINT_MAX\s0\fR,
4089 thus \fIdbg_cnt()\fR returns true always unless the upperbound is set by this option.
4090 e.g. With \-fdbg\-cnt=dce:10,tail_call:0
4091 dbg_cnt(dce) will return true only for first 10 invocations
4092 and dbg_cnt(tail_call) will return false always.
4093 .IP "\fB\-d\fR\fIletters\fR" 4
4094 .IX Item "-dletters"
4095 .PD 0
4096 .IP "\fB\-fdump\-rtl\-\fR\fIpass\fR" 4
4097 .IX Item "-fdump-rtl-pass"
4098 .PD
4099 Says to make debugging dumps during compilation at times specified by
4100 \&\fIletters\fR.  This is used for debugging the RTL-based passes of the
4101 compiler.  The file names for most of the dumps are made by appending
4102 a pass number and a word to the \fIdumpname\fR, and the files are
4103 created in the directory of the output file.  \fIdumpname\fR is
4104 generated from the name of the output file, if explicitly specified
4105 and it is not an executable, otherwise it is the basename of the
4106 source file. These switches may have different effects when
4107 \&\fB\-E\fR is used for preprocessing.
4108 .Sp
4109 Debug dumps can be enabled with a \fB\-fdump\-rtl\fR switch or some
4110 \&\fB\-d\fR option \fIletters\fR.  Here are the possible
4111 letters for use in \fIpass\fR and \fIletters\fR, and their meanings:
4112 .RS 4
4113 .IP "\fB\-fdump\-rtl\-alignments\fR" 4
4114 .IX Item "-fdump-rtl-alignments"
4115 Dump after branch alignments have been computed.
4116 .IP "\fB\-fdump\-rtl\-asmcons\fR" 4
4117 .IX Item "-fdump-rtl-asmcons"
4118 Dump after fixing rtl statements that have unsatisfied in/out constraints.
4119 .IP "\fB\-fdump\-rtl\-auto_inc_dec\fR" 4
4120 .IX Item "-fdump-rtl-auto_inc_dec"
4121 Dump after auto-inc-dec discovery.  This pass is only run on
4122 architectures that have auto inc or auto dec instructions.
4123 .IP "\fB\-fdump\-rtl\-barriers\fR" 4
4124 .IX Item "-fdump-rtl-barriers"
4125 Dump after cleaning up the barrier instructions.
4126 .IP "\fB\-fdump\-rtl\-bbpart\fR" 4
4127 .IX Item "-fdump-rtl-bbpart"
4128 Dump after partitioning hot and cold basic blocks.
4129 .IP "\fB\-fdump\-rtl\-bbro\fR" 4
4130 .IX Item "-fdump-rtl-bbro"
4131 Dump after block reordering.
4132 .IP "\fB\-fdump\-rtl\-btl1\fR" 4
4133 .IX Item "-fdump-rtl-btl1"
4134 .PD 0
4135 .IP "\fB\-fdump\-rtl\-btl2\fR" 4
4136 .IX Item "-fdump-rtl-btl2"
4137 .PD
4138 \&\fB\-fdump\-rtl\-btl1\fR and \fB\-fdump\-rtl\-btl2\fR enable dumping
4139 after the two branch
4140 target load optimization passes.
4141 .IP "\fB\-fdump\-rtl\-bypass\fR" 4
4142 .IX Item "-fdump-rtl-bypass"
4143 Dump after jump bypassing and control flow optimizations.
4144 .IP "\fB\-fdump\-rtl\-combine\fR" 4
4145 .IX Item "-fdump-rtl-combine"
4146 Dump after the \s-1RTL\s0 instruction combination pass.
4147 .IP "\fB\-fdump\-rtl\-compgotos\fR" 4
4148 .IX Item "-fdump-rtl-compgotos"
4149 Dump after duplicating the computed gotos.
4150 .IP "\fB\-fdump\-rtl\-ce1\fR" 4
4151 .IX Item "-fdump-rtl-ce1"
4152 .PD 0
4153 .IP "\fB\-fdump\-rtl\-ce2\fR" 4
4154 .IX Item "-fdump-rtl-ce2"
4155 .IP "\fB\-fdump\-rtl\-ce3\fR" 4
4156 .IX Item "-fdump-rtl-ce3"
4157 .PD
4158 \&\fB\-fdump\-rtl\-ce1\fR, \fB\-fdump\-rtl\-ce2\fR, and
4159 \&\fB\-fdump\-rtl\-ce3\fR enable dumping after the three
4160 if conversion passes. 
4161 .IP "\fB\-fdump\-rtl\-cprop_hardreg\fR" 4
4162 .IX Item "-fdump-rtl-cprop_hardreg"
4163 Dump after hard register copy propagation.
4164 .IP "\fB\-fdump\-rtl\-csa\fR" 4
4165 .IX Item "-fdump-rtl-csa"
4166 Dump after combining stack adjustments.
4167 .IP "\fB\-fdump\-rtl\-cse1\fR" 4
4168 .IX Item "-fdump-rtl-cse1"
4169 .PD 0
4170 .IP "\fB\-fdump\-rtl\-cse2\fR" 4
4171 .IX Item "-fdump-rtl-cse2"
4172 .PD
4173 \&\fB\-fdump\-rtl\-cse1\fR and \fB\-fdump\-rtl\-cse2\fR enable dumping after
4174 the two common sub-expression elimination passes.
4175 .IP "\fB\-fdump\-rtl\-dce\fR" 4
4176 .IX Item "-fdump-rtl-dce"
4177 Dump after the standalone dead code elimination passes.
4178 .IP "\fB\-fdump\-rtl\-dbr\fR" 4
4179 .IX Item "-fdump-rtl-dbr"
4180 Dump after delayed branch scheduling.
4181 .IP "\fB\-fdump\-rtl\-dce1\fR" 4
4182 .IX Item "-fdump-rtl-dce1"
4183 .PD 0
4184 .IP "\fB\-fdump\-rtl\-dce2\fR" 4
4185 .IX Item "-fdump-rtl-dce2"
4186 .PD
4187 \&\fB\-fdump\-rtl\-dce1\fR and \fB\-fdump\-rtl\-dce2\fR enable dumping after
4188 the two dead store elimination passes.
4189 .IP "\fB\-fdump\-rtl\-eh\fR" 4
4190 .IX Item "-fdump-rtl-eh"
4191 Dump after finalization of \s-1EH\s0 handling code.
4192 .IP "\fB\-fdump\-rtl\-eh_ranges\fR" 4
4193 .IX Item "-fdump-rtl-eh_ranges"
4194 Dump after conversion of \s-1EH\s0 handling range regions.
4195 .IP "\fB\-fdump\-rtl\-expand\fR" 4
4196 .IX Item "-fdump-rtl-expand"
4197 Dump after \s-1RTL\s0 generation.
4198 .IP "\fB\-fdump\-rtl\-fwprop1\fR" 4
4199 .IX Item "-fdump-rtl-fwprop1"
4200 .PD 0
4201 .IP "\fB\-fdump\-rtl\-fwprop2\fR" 4
4202 .IX Item "-fdump-rtl-fwprop2"
4203 .PD
4204 \&\fB\-fdump\-rtl\-fwprop1\fR and \fB\-fdump\-rtl\-fwprop2\fR enable
4205 dumping after the two forward propagation passes.
4206 .IP "\fB\-fdump\-rtl\-gcse1\fR" 4
4207 .IX Item "-fdump-rtl-gcse1"
4208 .PD 0
4209 .IP "\fB\-fdump\-rtl\-gcse2\fR" 4
4210 .IX Item "-fdump-rtl-gcse2"
4211 .PD
4212 \&\fB\-fdump\-rtl\-gcse1\fR and \fB\-fdump\-rtl\-gcse2\fR enable dumping
4213 after global common subexpression elimination.
4214 .IP "\fB\-fdump\-rtl\-init\-regs\fR" 4
4215 .IX Item "-fdump-rtl-init-regs"
4216 Dump after the initialization of the registers.
4217 .IP "\fB\-fdump\-rtl\-initvals\fR" 4
4218 .IX Item "-fdump-rtl-initvals"
4219 Dump after the computation of the initial value sets.
4220 .IP "\fB\-fdump\-rtl\-into_cfglayout\fR" 4
4221 .IX Item "-fdump-rtl-into_cfglayout"
4222 Dump after converting to cfglayout mode.
4223 .IP "\fB\-fdump\-rtl\-ira\fR" 4
4224 .IX Item "-fdump-rtl-ira"
4225 Dump after iterated register allocation.
4226 .IP "\fB\-fdump\-rtl\-jump\fR" 4
4227 .IX Item "-fdump-rtl-jump"
4228 Dump after the second jump optimization.
4229 .IP "\fB\-fdump\-rtl\-loop2\fR" 4
4230 .IX Item "-fdump-rtl-loop2"
4231 \&\fB\-fdump\-rtl\-loop2\fR enables dumping after the rtl
4232 loop optimization passes.
4233 .IP "\fB\-fdump\-rtl\-mach\fR" 4
4234 .IX Item "-fdump-rtl-mach"
4235 Dump after performing the machine dependent reorganization pass, if that
4236 pass exists.
4237 .IP "\fB\-fdump\-rtl\-mode_sw\fR" 4
4238 .IX Item "-fdump-rtl-mode_sw"
4239 Dump after removing redundant mode switches.
4240 .IP "\fB\-fdump\-rtl\-rnreg\fR" 4
4241 .IX Item "-fdump-rtl-rnreg"
4242 Dump after register renumbering.
4243 .IP "\fB\-fdump\-rtl\-outof_cfglayout\fR" 4
4244 .IX Item "-fdump-rtl-outof_cfglayout"
4245 Dump after converting from cfglayout mode.
4246 .IP "\fB\-fdump\-rtl\-peephole2\fR" 4
4247 .IX Item "-fdump-rtl-peephole2"
4248 Dump after the peephole pass.
4249 .IP "\fB\-fdump\-rtl\-postreload\fR" 4
4250 .IX Item "-fdump-rtl-postreload"
4251 Dump after post-reload optimizations.
4252 .IP "\fB\-fdump\-rtl\-pro_and_epilogue\fR" 4
4253 .IX Item "-fdump-rtl-pro_and_epilogue"
4254 Dump after generating the function pro and epilogues.
4255 .IP "\fB\-fdump\-rtl\-regmove\fR" 4
4256 .IX Item "-fdump-rtl-regmove"
4257 Dump after the register move pass.
4258 .IP "\fB\-fdump\-rtl\-sched1\fR" 4
4259 .IX Item "-fdump-rtl-sched1"
4260 .PD 0
4261 .IP "\fB\-fdump\-rtl\-sched2\fR" 4
4262 .IX Item "-fdump-rtl-sched2"
4263 .PD
4264 \&\fB\-fdump\-rtl\-sched1\fR and \fB\-fdump\-rtl\-sched2\fR enable dumping
4265 after the basic block scheduling passes.
4266 .IP "\fB\-fdump\-rtl\-see\fR" 4
4267 .IX Item "-fdump-rtl-see"
4268 Dump after sign extension elimination.
4269 .IP "\fB\-fdump\-rtl\-seqabstr\fR" 4
4270 .IX Item "-fdump-rtl-seqabstr"
4271 Dump after common sequence discovery. 
4272 .IP "\fB\-fdump\-rtl\-shorten\fR" 4
4273 .IX Item "-fdump-rtl-shorten"
4274 Dump after shortening branches.
4275 .IP "\fB\-fdump\-rtl\-sibling\fR" 4
4276 .IX Item "-fdump-rtl-sibling"
4277 Dump after sibling call optimizations.
4278 .IP "\fB\-fdump\-rtl\-split1\fR" 4
4279 .IX Item "-fdump-rtl-split1"
4280 .PD 0
4281 .IP "\fB\-fdump\-rtl\-split2\fR" 4
4282 .IX Item "-fdump-rtl-split2"
4283 .IP "\fB\-fdump\-rtl\-split3\fR" 4
4284 .IX Item "-fdump-rtl-split3"
4285 .IP "\fB\-fdump\-rtl\-split4\fR" 4
4286 .IX Item "-fdump-rtl-split4"
4287 .IP "\fB\-fdump\-rtl\-split5\fR" 4
4288 .IX Item "-fdump-rtl-split5"
4289 .PD
4290 \&\fB\-fdump\-rtl\-split1\fR, \fB\-fdump\-rtl\-split2\fR,
4291 \&\fB\-fdump\-rtl\-split3\fR, \fB\-fdump\-rtl\-split4\fR and
4292 \&\fB\-fdump\-rtl\-split5\fR enable dumping after five rounds of
4293 instruction splitting.
4294 .IP "\fB\-fdump\-rtl\-sms\fR" 4
4295 .IX Item "-fdump-rtl-sms"
4296 Dump after modulo scheduling.  This pass is only run on some
4297 architectures.
4298 .IP "\fB\-fdump\-rtl\-stack\fR" 4
4299 .IX Item "-fdump-rtl-stack"
4300 Dump after conversion from \s-1GCC\s0's \*(L"flat register file\*(R" registers to the
4301 x87's stack-like registers.  This pass is only run on x86 variants.
4302 .IP "\fB\-fdump\-rtl\-subreg1\fR" 4
4303 .IX Item "-fdump-rtl-subreg1"
4304 .PD 0
4305 .IP "\fB\-fdump\-rtl\-subreg2\fR" 4
4306 .IX Item "-fdump-rtl-subreg2"
4307 .PD
4308 \&\fB\-fdump\-rtl\-subreg1\fR and \fB\-fdump\-rtl\-subreg2\fR enable dumping after
4309 the two subreg expansion passes.
4310 .IP "\fB\-fdump\-rtl\-unshare\fR" 4
4311 .IX Item "-fdump-rtl-unshare"
4312 Dump after all rtl has been unshared.
4313 .IP "\fB\-fdump\-rtl\-vartrack\fR" 4
4314 .IX Item "-fdump-rtl-vartrack"
4315 Dump after variable tracking.
4316 .IP "\fB\-fdump\-rtl\-vregs\fR" 4
4317 .IX Item "-fdump-rtl-vregs"
4318 Dump after converting virtual registers to hard registers.
4319 .IP "\fB\-fdump\-rtl\-web\fR" 4
4320 .IX Item "-fdump-rtl-web"
4321 Dump after live range splitting.
4322 .IP "\fB\-fdump\-rtl\-regclass\fR" 4
4323 .IX Item "-fdump-rtl-regclass"
4324 .PD 0
4325 .IP "\fB\-fdump\-rtl\-subregs_of_mode_init\fR" 4
4326 .IX Item "-fdump-rtl-subregs_of_mode_init"
4327 .IP "\fB\-fdump\-rtl\-subregs_of_mode_finish\fR" 4
4328 .IX Item "-fdump-rtl-subregs_of_mode_finish"
4329 .IP "\fB\-fdump\-rtl\-dfinit\fR" 4
4330 .IX Item "-fdump-rtl-dfinit"
4331 .IP "\fB\-fdump\-rtl\-dfinish\fR" 4
4332 .IX Item "-fdump-rtl-dfinish"
4333 .PD
4334 These dumps are defined but always produce empty files.
4335 .IP "\fB\-fdump\-rtl\-all\fR" 4
4336 .IX Item "-fdump-rtl-all"
4337 Produce all the dumps listed above.
4338 .IP "\fB\-dA\fR" 4
4339 .IX Item "-dA"
4340 Annotate the assembler output with miscellaneous debugging information.
4341 .IP "\fB\-dD\fR" 4
4342 .IX Item "-dD"
4343 Dump all macro definitions, at the end of preprocessing, in addition to
4344 normal output.
4345 .IP "\fB\-dH\fR" 4
4346 .IX Item "-dH"
4347 Produce a core dump whenever an error occurs.
4348 .IP "\fB\-dm\fR" 4
4349 .IX Item "-dm"
4350 Print statistics on memory usage, at the end of the run, to
4351 standard error.
4352 .IP "\fB\-dp\fR" 4
4353 .IX Item "-dp"
4354 Annotate the assembler output with a comment indicating which
4355 pattern and alternative was used.  The length of each instruction is
4356 also printed.
4357 .IP "\fB\-dP\fR" 4
4358 .IX Item "-dP"
4359 Dump the \s-1RTL\s0 in the assembler output as a comment before each instruction.
4360 Also turns on \fB\-dp\fR annotation.
4361 .IP "\fB\-dv\fR" 4
4362 .IX Item "-dv"
4363 For each of the other indicated dump files (\fB\-fdump\-rtl\-\fR\fIpass\fR),
4364 dump a representation of the control flow graph suitable for viewing with \s-1VCG\s0
4365 to \fI\fIfile\fI.\fIpass\fI.vcg\fR.
4366 .IP "\fB\-dx\fR" 4
4367 .IX Item "-dx"
4368 Just generate \s-1RTL\s0 for a function instead of compiling it.  Usually used
4369 with \fB\-fdump\-rtl\-expand\fR.
4370 .IP "\fB\-dy\fR" 4
4371 .IX Item "-dy"
4372 Dump debugging information during parsing, to standard error.
4373 .RE
4374 .RS 4
4375 .RE
4376 .IP "\fB\-fdump\-noaddr\fR" 4
4377 .IX Item "-fdump-noaddr"
4378 When doing debugging dumps, suppress address output.  This makes it more
4379 feasible to use diff on debugging dumps for compiler invocations with
4380 different compiler binaries and/or different
4381 text / bss / data / heap / stack / dso start locations.
4382 .IP "\fB\-fdump\-unnumbered\fR" 4
4383 .IX Item "-fdump-unnumbered"
4384 When doing debugging dumps, suppress instruction numbers and address output.
4385 This makes it more feasible to use diff on debugging dumps for compiler
4386 invocations with different options, in particular with and without
4387 \&\fB\-g\fR.
4388 .IP "\fB\-fdump\-translation\-unit\fR (\*(C+ only)" 4
4389 .IX Item "-fdump-translation-unit ( only)"
4390 .PD 0
4391 .IP "\fB\-fdump\-translation\-unit\-\fR\fIoptions\fR\fB \fR(\*(C+ only)" 4
4392 .IX Item "-fdump-translation-unit-options ( only)"
4393 .PD
4394 Dump a representation of the tree structure for the entire translation
4395 unit to a file.  The file name is made by appending \fI.tu\fR to the
4396 source file name, and the file is created in the same directory as the
4397 output file.  If the \fB\-\fR\fIoptions\fR form is used, \fIoptions\fR
4398 controls the details of the dump as described for the
4399 \&\fB\-fdump\-tree\fR options.
4400 .IP "\fB\-fdump\-class\-hierarchy\fR (\*(C+ only)" 4
4401 .IX Item "-fdump-class-hierarchy ( only)"
4402 .PD 0
4403 .IP "\fB\-fdump\-class\-hierarchy\-\fR\fIoptions\fR\fB \fR(\*(C+ only)" 4
4404 .IX Item "-fdump-class-hierarchy-options ( only)"
4405 .PD
4406 Dump a representation of each class's hierarchy and virtual function
4407 table layout to a file.  The file name is made by appending
4408 \&\fI.class\fR to the source file name, and the file is created in the
4409 same directory as the output file.  If the \fB\-\fR\fIoptions\fR form
4410 is used, \fIoptions\fR controls the details of the dump as described
4411 for the \fB\-fdump\-tree\fR options.
4412 .IP "\fB\-fdump\-ipa\-\fR\fIswitch\fR" 4
4413 .IX Item "-fdump-ipa-switch"
4414 Control the dumping at various stages of inter-procedural analysis
4415 language tree to a file.  The file name is generated by appending a
4416 switch specific suffix to the source file name, and the file is created
4417 in the same directory as the output file.  The following dumps are
4418 possible:
4419 .RS 4
4420 .IP "\fBall\fR" 4
4421 .IX Item "all"
4422 Enables all inter-procedural analysis dumps.
4423 .IP "\fBcgraph\fR" 4
4424 .IX Item "cgraph"
4425 Dumps information about call-graph optimization, unused function removal,
4426 and inlining decisions.
4427 .IP "\fBinline\fR" 4
4428 .IX Item "inline"
4429 Dump after function inlining.
4430 .RE
4431 .RS 4
4432 .RE
4433 .IP "\fB\-fdump\-statistics\-\fR\fIoption\fR" 4
4434 .IX Item "-fdump-statistics-option"
4435 Enable and control dumping of pass statistics in a separate file.  The
4436 file name is generated by appending a suffix ending in
4437 \&\fB.statistics\fR to the source file name, and the file is created in
4438 the same directory as the output file.  If the \fB\-\fR\fIoption\fR
4439 form is used, \fB\-stats\fR will cause counters to be summed over the
4440 whole compilation unit while \fB\-details\fR will dump every event as
4441 the passes generate them.  The default with no option is to sum
4442 counters for each function compiled.
4443 .IP "\fB\-fdump\-tree\-\fR\fIswitch\fR" 4
4444 .IX Item "-fdump-tree-switch"
4445 .PD 0
4446 .IP "\fB\-fdump\-tree\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR" 4
4447 .IX Item "-fdump-tree-switch-options"
4448 .PD
4449 Control the dumping at various stages of processing the intermediate
4450 language tree to a file.  The file name is generated by appending a
4451 switch specific suffix to the source file name, and the file is
4452 created in the same directory as the output file.  If the
4453 \&\fB\-\fR\fIoptions\fR form is used, \fIoptions\fR is a list of
4454 \&\fB\-\fR separated options that control the details of the dump.  Not
4455 all options are applicable to all dumps, those which are not
4456 meaningful will be ignored.  The following options are available
4457 .RS 4
4458 .IP "\fBaddress\fR" 4
4459 .IX Item "address"
4460 Print the address of each node.  Usually this is not meaningful as it
4461 changes according to the environment and source file.  Its primary use
4462 is for tying up a dump file with a debug environment.
4463 .IP "\fBslim\fR" 4
4464 .IX Item "slim"
4465 Inhibit dumping of members of a scope or body of a function merely
4466 because that scope has been reached.  Only dump such items when they
4467 are directly reachable by some other path.  When dumping pretty-printed
4468 trees, this option inhibits dumping the bodies of control structures.
4469 .IP "\fBraw\fR" 4
4470 .IX Item "raw"
4471 Print a raw representation of the tree.  By default, trees are
4472 pretty-printed into a C\-like representation.
4473 .IP "\fBdetails\fR" 4
4474 .IX Item "details"
4475 Enable more detailed dumps (not honored by every dump option).
4476 .IP "\fBstats\fR" 4
4477 .IX Item "stats"
4478 Enable dumping various statistics about the pass (not honored by every dump
4479 option).
4480 .IP "\fBblocks\fR" 4
4481 .IX Item "blocks"
4482 Enable showing basic block boundaries (disabled in raw dumps).
4483 .IP "\fBvops\fR" 4
4484 .IX Item "vops"
4485 Enable showing virtual operands for every statement.
4486 .IP "\fBlineno\fR" 4
4487 .IX Item "lineno"
4488 Enable showing line numbers for statements.
4489 .IP "\fBuid\fR" 4
4490 .IX Item "uid"
4491 Enable showing the unique \s-1ID\s0 (\f(CW\*(C`DECL_UID\*(C'\fR) for each variable.
4492 .IP "\fBverbose\fR" 4
4493 .IX Item "verbose"
4494 Enable showing the tree dump for each statement.
4495 .IP "\fBall\fR" 4
4496 .IX Item "all"
4497 Turn on all options, except \fBraw\fR, \fBslim\fR, \fBverbose\fR
4498 and \fBlineno\fR.
4499 .RE
4500 .RS 4
4501 .Sp
4502 The following tree dumps are possible:
4503 .IP "\fBoriginal\fR" 4
4504 .IX Item "original"
4505 Dump before any tree based optimization, to \fI\fIfile\fI.original\fR.
4506 .IP "\fBoptimized\fR" 4
4507 .IX Item "optimized"
4508 Dump after all tree based optimization, to \fI\fIfile\fI.optimized\fR.
4509 .IP "\fBgimple\fR" 4
4510 .IX Item "gimple"
4511 Dump each function before and after the gimplification pass to a file.  The
4512 file name is made by appending \fI.gimple\fR to the source file name.
4513 .IP "\fBcfg\fR" 4
4514 .IX Item "cfg"
4515 Dump the control flow graph of each function to a file.  The file name is
4516 made by appending \fI.cfg\fR to the source file name.
4517 .IP "\fBvcg\fR" 4
4518 .IX Item "vcg"
4519 Dump the control flow graph of each function to a file in \s-1VCG\s0 format.  The
4520 file name is made by appending \fI.vcg\fR to the source file name.  Note
4521 that if the file contains more than one function, the generated file cannot
4522 be used directly by \s-1VCG\s0.  You will need to cut and paste each function's
4523 graph into its own separate file first.
4524 .IP "\fBch\fR" 4
4525 .IX Item "ch"
4526 Dump each function after copying loop headers.  The file name is made by
4527 appending \fI.ch\fR to the source file name.
4528 .IP "\fBssa\fR" 4
4529 .IX Item "ssa"
4530 Dump \s-1SSA\s0 related information to a file.  The file name is made by appending
4531 \&\fI.ssa\fR to the source file name.
4532 .IP "\fBalias\fR" 4
4533 .IX Item "alias"
4534 Dump aliasing information for each function.  The file name is made by
4535 appending \fI.alias\fR to the source file name.
4536 .IP "\fBccp\fR" 4
4537 .IX Item "ccp"
4538 Dump each function after \s-1CCP\s0.  The file name is made by appending
4539 \&\fI.ccp\fR to the source file name.
4540 .IP "\fBstoreccp\fR" 4
4541 .IX Item "storeccp"
4542 Dump each function after \s-1STORE\-CCP\s0.  The file name is made by appending
4543 \&\fI.storeccp\fR to the source file name.
4544 .IP "\fBpre\fR" 4
4545 .IX Item "pre"
4546 Dump trees after partial redundancy elimination.  The file name is made
4547 by appending \fI.pre\fR to the source file name.
4548 .IP "\fBfre\fR" 4
4549 .IX Item "fre"
4550 Dump trees after full redundancy elimination.  The file name is made
4551 by appending \fI.fre\fR to the source file name.
4552 .IP "\fBcopyprop\fR" 4
4553 .IX Item "copyprop"
4554 Dump trees after copy propagation.  The file name is made
4555 by appending \fI.copyprop\fR to the source file name.
4556 .IP "\fBstore_copyprop\fR" 4
4557 .IX Item "store_copyprop"
4558 Dump trees after store copy\-propagation.  The file name is made
4559 by appending \fI.store_copyprop\fR to the source file name.
4560 .IP "\fBdce\fR" 4
4561 .IX Item "dce"
4562 Dump each function after dead code elimination.  The file name is made by
4563 appending \fI.dce\fR to the source file name.
4564 .IP "\fBmudflap\fR" 4
4565 .IX Item "mudflap"
4566 Dump each function after adding mudflap instrumentation.  The file name is
4567 made by appending \fI.mudflap\fR to the source file name.
4568 .IP "\fBsra\fR" 4
4569 .IX Item "sra"
4570 Dump each function after performing scalar replacement of aggregates.  The
4571 file name is made by appending \fI.sra\fR to the source file name.
4572 .IP "\fBsink\fR" 4
4573 .IX Item "sink"
4574 Dump each function after performing code sinking.  The file name is made
4575 by appending \fI.sink\fR to the source file name.
4576 .IP "\fBdom\fR" 4
4577 .IX Item "dom"
4578 Dump each function after applying dominator tree optimizations.  The file
4579 name is made by appending \fI.dom\fR to the source file name.
4580 .IP "\fBdse\fR" 4
4581 .IX Item "dse"
4582 Dump each function after applying dead store elimination.  The file
4583 name is made by appending \fI.dse\fR to the source file name.
4584 .IP "\fBphiopt\fR" 4
4585 .IX Item "phiopt"
4586 Dump each function after optimizing \s-1PHI\s0 nodes into straightline code.  The file
4587 name is made by appending \fI.phiopt\fR to the source file name.
4588 .IP "\fBforwprop\fR" 4
4589 .IX Item "forwprop"
4590 Dump each function after forward propagating single use variables.  The file
4591 name is made by appending \fI.forwprop\fR to the source file name.
4592 .IP "\fBcopyrename\fR" 4
4593 .IX Item "copyrename"
4594 Dump each function after applying the copy rename optimization.  The file
4595 name is made by appending \fI.copyrename\fR to the source file name.
4596 .IP "\fBnrv\fR" 4
4597 .IX Item "nrv"
4598 Dump each function after applying the named return value optimization on
4599 generic trees.  The file name is made by appending \fI.nrv\fR to the source
4600 file name.
4601 .IP "\fBvect\fR" 4
4602 .IX Item "vect"
4603 Dump each function after applying vectorization of loops.  The file name is
4604 made by appending \fI.vect\fR to the source file name.
4605 .IP "\fBvrp\fR" 4
4606 .IX Item "vrp"
4607 Dump each function after Value Range Propagation (\s-1VRP\s0).  The file name
4608 is made by appending \fI.vrp\fR to the source file name.
4609 .IP "\fBall\fR" 4
4610 .IX Item "all"
4611 Enable all the available tree dumps with the flags provided in this option.
4612 .RE
4613 .RS 4
4614 .RE
4615 .IP "\fB\-ftree\-vectorizer\-verbose=\fR\fIn\fR" 4
4616 .IX Item "-ftree-vectorizer-verbose=n"
4617 This option controls the amount of debugging output the vectorizer prints.
4618 This information is written to standard error, unless
4619 \&\fB\-fdump\-tree\-all\fR or \fB\-fdump\-tree\-vect\fR is specified,
4620 in which case it is output to the usual dump listing file, \fI.vect\fR.
4621 For \fIn\fR=0 no diagnostic information is reported.
4622 If \fIn\fR=1 the vectorizer reports each loop that got vectorized,
4623 and the total number of loops that got vectorized.
4624 If \fIn\fR=2 the vectorizer also reports non-vectorized loops that passed
4625 the first analysis phase (vect_analyze_loop_form) \- i.e. countable,
4626 inner\-most, single\-bb, single\-entry/exit loops.  This is the same verbosity
4627 level that \fB\-fdump\-tree\-vect\-stats\fR uses.
4628 Higher verbosity levels mean either more information dumped for each
4629 reported loop, or same amount of information reported for more loops:
4630 If \fIn\fR=3, alignment related information is added to the reports.
4631 If \fIn\fR=4, data-references related information (e.g. memory dependences,
4632 memory access\-patterns) is added to the reports.
4633 If \fIn\fR=5, the vectorizer reports also non-vectorized inner-most loops
4634 that did not pass the first analysis phase (i.e., may not be countable, or
4635 may have complicated control\-flow).
4636 If \fIn\fR=6, the vectorizer reports also non-vectorized nested loops.
4637 For \fIn\fR=7, all the information the vectorizer generates during its
4638 analysis and transformation is reported.  This is the same verbosity level
4639 that \fB\-fdump\-tree\-vect\-details\fR uses.
4640 .IP "\fB\-frandom\-seed=\fR\fIstring\fR" 4
4641 .IX Item "-frandom-seed=string"
4642 This option provides a seed that \s-1GCC\s0 uses when it would otherwise use
4643 random numbers.  It is used to generate certain symbol names
4644 that have to be different in every compiled file.  It is also used to
4645 place unique stamps in coverage data files and the object files that
4646 produce them.  You can use the \fB\-frandom\-seed\fR option to produce
4647 reproducibly identical object files.
4648 .Sp
4649 The \fIstring\fR should be different for every file you compile.
4650 .IP "\fB\-fsched\-verbose=\fR\fIn\fR" 4
4651 .IX Item "-fsched-verbose=n"
4652 On targets that use instruction scheduling, this option controls the
4653 amount of debugging output the scheduler prints.  This information is
4654 written to standard error, unless \fB\-fdump\-rtl\-sched1\fR or
4655 \&\fB\-fdump\-rtl\-sched2\fR is specified, in which case it is output
4656 to the usual dump listing file, \fI.sched\fR or \fI.sched2\fR
4657 respectively.  However for \fIn\fR greater than nine, the output is
4658 always printed to standard error.
4659 .Sp
4660 For \fIn\fR greater than zero, \fB\-fsched\-verbose\fR outputs the
4661 same information as \fB\-fdump\-rtl\-sched1\fR and \fB\-fdump\-rtl\-sched2\fR.
4662 For \fIn\fR greater than one, it also output basic block probabilities,
4663 detailed ready list information and unit/insn info.  For \fIn\fR greater
4664 than two, it includes \s-1RTL\s0 at abort point, control-flow and regions info.
4665 And for \fIn\fR over four, \fB\-fsched\-verbose\fR also includes
4666 dependence info.
4667 .IP "\fB\-save\-temps\fR" 4
4668 .IX Item "-save-temps"
4669 Store the usual \*(L"temporary\*(R" intermediate files permanently; place them
4670 in the current directory and name them based on the source file.  Thus,
4671 compiling \fIfoo.c\fR with \fB\-c \-save\-temps\fR would produce files
4672 \&\fIfoo.i\fR and \fIfoo.s\fR, as well as \fIfoo.o\fR.  This creates a
4673 preprocessed \fIfoo.i\fR output file even though the compiler now
4674 normally uses an integrated preprocessor.
4675 .Sp
4676 When used in combination with the \fB\-x\fR command line option,
4677 \&\fB\-save\-temps\fR is sensible enough to avoid over writing an
4678 input source file with the same extension as an intermediate file.
4679 The corresponding intermediate file may be obtained by renaming the
4680 source file before using \fB\-save\-temps\fR.
4681 .IP "\fB\-time\fR" 4
4682 .IX Item "-time"
4683 Report the \s-1CPU\s0 time taken by each subprocess in the compilation
4684 sequence.  For C source files, this is the compiler proper and assembler
4685 (plus the linker if linking is done).  The output looks like this:
4686 .Sp
4687 .Vb 2
4688 \&        # cc1 0.12 0.01
4689 \&        # as 0.00 0.01
4690 .Ve
4691 .Sp
4692 The first number on each line is the \*(L"user time\*(R", that is time spent
4693 executing the program itself.  The second number is \*(L"system time\*(R",
4694 time spent executing operating system routines on behalf of the program.
4695 Both numbers are in seconds.
4696 .IP "\fB\-fvar\-tracking\fR" 4
4697 .IX Item "-fvar-tracking"
4698 Run variable tracking pass.  It computes where variables are stored at each
4699 position in code.  Better debugging information is then generated
4700 (if the debugging information format supports this information).
4701 .Sp
4702 It is enabled by default when compiling with optimization (\fB\-Os\fR,
4703 \&\fB\-O\fR, \fB\-O2\fR, ...), debugging information (\fB\-g\fR) and
4704 the debug info format supports it.
4705 .IP "\fB\-print\-file\-name=\fR\fIlibrary\fR" 4
4706 .IX Item "-print-file-name=library"
4707 Print the full absolute name of the library file \fIlibrary\fR that
4708 would be used when linking\-\-\-and don't do anything else.  With this
4709 option, \s-1GCC\s0 does not compile or link anything; it just prints the
4710 file name.
4711 .IP "\fB\-print\-multi\-directory\fR" 4
4712 .IX Item "-print-multi-directory"
4713 Print the directory name corresponding to the multilib selected by any
4714 other switches present in the command line.  This directory is supposed
4715 to exist in \fB\s-1GCC_EXEC_PREFIX\s0\fR.
4716 .IP "\fB\-print\-multi\-lib\fR" 4
4717 .IX Item "-print-multi-lib"
4718 Print the mapping from multilib directory names to compiler switches
4719 that enable them.  The directory name is separated from the switches by
4720 \&\fB;\fR, and each switch starts with an \fB@} instead of the
4721 \&\f(CB@samp\fB{\-\fR, without spaces between multiple switches.  This is supposed to
4722 ease shell\-processing.
4723 .IP "\fB\-print\-prog\-name=\fR\fIprogram\fR" 4
4724 .IX Item "-print-prog-name=program"
4725 Like \fB\-print\-file\-name\fR, but searches for a program such as \fBcpp\fR.
4726 .IP "\fB\-print\-libgcc\-file\-name\fR" 4
4727 .IX Item "-print-libgcc-file-name"
4728 Same as \fB\-print\-file\-name=libgcc.a\fR.
4729 .Sp
4730 This is useful when you use \fB\-nostdlib\fR or \fB\-nodefaultlibs\fR
4731 but you do want to link with \fIlibgcc.a\fR.  You can do
4732 .Sp
4733 .Vb 1
4734 \&        gcc \-nostdlib <files>... `gcc \-print\-libgcc\-file\-name`
4735 .Ve
4736 .IP "\fB\-print\-search\-dirs\fR" 4
4737 .IX Item "-print-search-dirs"
4738 Print the name of the configured installation directory and a list of
4739 program and library directories \fBgcc\fR will search\-\-\-and don't do anything else.
4740 .Sp
4741 This is useful when \fBgcc\fR prints the error message
4742 \&\fBinstallation problem, cannot exec cpp0: No such file or directory\fR.
4743 To resolve this you either need to put \fIcpp0\fR and the other compiler
4744 components where \fBgcc\fR expects to find them, or you can set the environment
4745 variable \fB\s-1GCC_EXEC_PREFIX\s0\fR to the directory where you installed them.
4746 Don't forget the trailing \fB/\fR.
4747 .IP "\fB\-print\-sysroot\fR" 4
4748 .IX Item "-print-sysroot"
4749 Print the target sysroot directory that will be used during
4750 compilation.  This is the target sysroot specified either at configure
4751 time or using the \fB\-\-sysroot\fR option, possibly with an extra
4752 suffix that depends on compilation options.  If no target sysroot is
4753 specified, the option prints nothing.
4754 .IP "\fB\-print\-sysroot\-headers\-suffix\fR" 4
4755 .IX Item "-print-sysroot-headers-suffix"
4756 Print the suffix added to the target sysroot when searching for
4757 headers, or give an error if the compiler is not configured with such
4758 a suffix\-\-\-and don't do anything else.
4759 .IP "\fB\-dumpmachine\fR" 4
4760 .IX Item "-dumpmachine"
4761 Print the compiler's target machine (for example,
4762 \&\fBi686\-pc\-linux\-gnu\fR)\-\-\-and don't do anything else.
4763 .IP "\fB\-dumpversion\fR" 4
4764 .IX Item "-dumpversion"
4765 Print the compiler version (for example, \fB3.0\fR)\-\-\-and don't do
4766 anything else.
4767 .IP "\fB\-dumpspecs\fR" 4
4768 .IX Item "-dumpspecs"
4769 Print the compiler's built-in specs\-\-\-and don't do anything else.  (This
4770 is used when \s-1GCC\s0 itself is being built.)  
4771 .IP "\fB\-feliminate\-unused\-debug\-types\fR" 4
4772 .IX Item "-feliminate-unused-debug-types"
4773 Normally, when producing \s-1DWARF2\s0 output, \s-1GCC\s0 will emit debugging
4774 information for all types declared in a compilation
4775 unit, regardless of whether or not they are actually used
4776 in that compilation unit.  Sometimes this is useful, such as
4777 if, in the debugger, you want to cast a value to a type that is
4778 not actually used in your program (but is declared).  More often,
4779 however, this results in a significant amount of wasted space.
4780 With this option, \s-1GCC\s0 will avoid producing debug symbol output
4781 for types that are nowhere used in the source file being compiled.
4782 .Sh "Options That Control Optimization"
4783 .IX Subsection "Options That Control Optimization"
4784 These options control various sorts of optimizations.
4785 .PP
4786 Without any optimization option, the compiler's goal is to reduce the
4787 cost of compilation and to make debugging produce the expected
4788 results.  Statements are independent: if you stop the program with a
4789 breakpoint between statements, you can then assign a new value to any
4790 variable or change the program counter to any other statement in the
4791 function and get exactly the results you would expect from the source
4792 code.
4793 .PP
4794 Turning on optimization flags makes the compiler attempt to improve
4795 the performance and/or code size at the expense of compilation time
4796 and possibly the ability to debug the program.
4797 .PP
4798 The compiler performs optimization based on the knowledge it has of the
4799 program.  Compiling multiple files at once to a single output file mode allows
4800 the compiler to use information gained from all of the files when compiling
4801 each of them.
4802 .PP
4803 Not all optimizations are controlled directly by a flag.  Only
4804 optimizations that have a flag are listed.
4805 .IP "\fB\-O\fR" 4
4806 .IX Item "-O"
4807 .PD 0
4808 .IP "\fB\-O1\fR" 4
4809 .IX Item "-O1"
4810 .PD
4811 Optimize.  Optimizing compilation takes somewhat more time, and a lot
4812 more memory for a large function.
4813 .Sp
4814 With \fB\-O\fR, the compiler tries to reduce code size and execution
4815 time, without performing any optimizations that take a great deal of
4816 compilation time.
4817 .Sp
4818 \&\fB\-O\fR turns on the following optimization flags:
4819 .Sp
4820 \&\fB\-fauto\-inc\-dec 
4821 \&\-fcprop\-registers 
4822 \&\-fdce 
4823 \&\-fdefer\-pop 
4824 \&\-fdelayed\-branch 
4825 \&\-fdse 
4826 \&\-fguess\-branch\-probability 
4827 \&\-fif\-conversion2 
4828 \&\-fif\-conversion 
4829 \&\-finline\-small\-functions 
4830 \&\-fipa\-pure\-const 
4831 \&\-fipa\-reference 
4832 \&\-fmerge\-constants
4833 \&\-fsplit\-wide\-types 
4834 \&\-ftree\-builtin\-call\-dce 
4835 \&\-ftree\-ccp 
4836 \&\-ftree\-ch 
4837 \&\-ftree\-copyrename 
4838 \&\-ftree\-dce 
4839 \&\-ftree\-dominator\-opts 
4840 \&\-ftree\-dse 
4841 \&\-ftree\-fre 
4842 \&\-ftree\-sra 
4843 \&\-ftree\-ter 
4844 \&\-funit\-at\-a\-time\fR
4845 .Sp
4846 \&\fB\-O\fR also turns on \fB\-fomit\-frame\-pointer\fR on machines
4847 where doing so does not interfere with debugging.
4848 .IP "\fB\-O2\fR" 4
4849 .IX Item "-O2"
4850 Optimize even more.  \s-1GCC\s0 performs nearly all supported optimizations
4851 that do not involve a space-speed tradeoff.
4852 As compared to \fB\-O\fR, this option increases both compilation time
4853 and the performance of the generated code.
4854 .Sp
4855 \&\fB\-O2\fR turns on all optimization flags specified by \fB\-O\fR.  It
4856 also turns on the following optimization flags:
4857 \&\fB\-fthread\-jumps 
4858 \&\-falign\-functions  \-falign\-jumps 
4859 \&\-falign\-loops  \-falign\-labels 
4860 \&\-fcaller\-saves 
4861 \&\-fcrossjumping 
4862 \&\-fcse\-follow\-jumps  \-fcse\-skip\-blocks 
4863 \&\-fdelete\-null\-pointer\-checks 
4864 \&\-fexpensive\-optimizations 
4865 \&\-fgcse  \-fgcse\-lm  
4866 \&\-findirect\-inlining 
4867 \&\-foptimize\-sibling\-calls 
4868 \&\-fpeephole2 
4869 \&\-fregmove 
4870 \&\-freorder\-blocks  \-freorder\-functions 
4871 \&\-frerun\-cse\-after\-loop  
4872 \&\-fsched\-interblock  \-fsched\-spec 
4873 \&\-fschedule\-insns  \-fschedule\-insns2 
4874 \&\-fstrict\-aliasing \-fstrict\-overflow 
4875 \&\-ftree\-switch\-conversion 
4876 \&\-ftree\-pre 
4877 \&\-ftree\-vrp\fR
4878 .Sp
4879 Please note the warning under \fB\-fgcse\fR about
4880 invoking \fB\-O2\fR on programs that use computed gotos.
4881 .IP "\fB\-O3\fR" 4
4882 .IX Item "-O3"
4883 Optimize yet more.  \fB\-O3\fR turns on all optimizations specified
4884 by \fB\-O2\fR and also turns on the \fB\-finline\-functions\fR,
4885 \&\fB\-funswitch\-loops\fR, \fB\-fpredictive\-commoning\fR,
4886 \&\fB\-fgcse\-after\-reload\fR and \fB\-ftree\-vectorize\fR options.
4887 .IP "\fB\-O0\fR" 4
4888 .IX Item "-O0"
4889 Reduce compilation time and make debugging produce the expected
4890 results.  This is the default.
4891 .IP "\fB\-Os\fR" 4
4892 .IX Item "-Os"
4893 Optimize for size.  \fB\-Os\fR enables all \fB\-O2\fR optimizations that
4894 do not typically increase code size.  It also performs further
4895 optimizations designed to reduce code size.
4896 .Sp
4897 \&\fB\-Os\fR disables the following optimization flags:
4898 \&\fB\-falign\-functions  \-falign\-jumps  \-falign\-loops 
4899 \&\-falign\-labels  \-freorder\-blocks  \-freorder\-blocks\-and\-partition 
4900 \&\-fprefetch\-loop\-arrays  \-ftree\-vect\-loop\-version\fR
4901 .Sp
4902 If you use multiple \fB\-O\fR options, with or without level numbers,
4903 the last such option is the one that is effective.
4904 .PP
4905 Options of the form \fB\-f\fR\fIflag\fR specify machine-independent
4906 flags.  Most flags have both positive and negative forms; the negative
4907 form of \fB\-ffoo\fR would be \fB\-fno\-foo\fR.  In the table
4908 below, only one of the forms is listed\-\-\-the one you typically will
4909 use.  You can figure out the other form by either removing \fBno\-\fR
4910 or adding it.
4911 .PP
4912 The following options control specific optimizations.  They are either
4913 activated by \fB\-O\fR options or are related to ones that are.  You
4914 can use the following flags in the rare cases when \*(L"fine\-tuning\*(R" of
4915 optimizations to be performed is desired.
4916 .IP "\fB\-fno\-default\-inline\fR" 4
4917 .IX Item "-fno-default-inline"
4918 Do not make member functions inline by default merely because they are
4919 defined inside the class scope (\*(C+ only).  Otherwise, when you specify
4920 \&\fB\-O\fR, member functions defined inside class scope are compiled
4921 inline by default; i.e., you don't need to add \fBinline\fR in front of
4922 the member function name.
4923 .IP "\fB\-fno\-defer\-pop\fR" 4
4924 .IX Item "-fno-defer-pop"
4925 Always pop the arguments to each function call as soon as that function
4926 returns.  For machines which must pop arguments after a function call,
4927 the compiler normally lets arguments accumulate on the stack for several
4928 function calls and pops them all at once.
4929 .Sp
4930 Disabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
4931 .IP "\fB\-fforward\-propagate\fR" 4
4932 .IX Item "-fforward-propagate"
4933 Perform a forward propagation pass on \s-1RTL\s0.  The pass tries to combine two
4934 instructions and checks if the result can be simplified.  If loop unrolling
4935 is active, two passes are performed and the second is scheduled after
4936 loop unrolling.
4937 .Sp
4938 This option is enabled by default at optimization levels \fB\-O2\fR,
4939 \&\fB\-O3\fR, \fB\-Os\fR.
4940 .IP "\fB\-fomit\-frame\-pointer\fR" 4
4941 .IX Item "-fomit-frame-pointer"
4942 Don't keep the frame pointer in a register for functions that
4943 don't need one.  This avoids the instructions to save, set up and
4944 restore frame pointers; it also makes an extra register available
4945 in many functions.  \fBIt also makes debugging impossible on
4946 some machines.\fR
4947 .Sp
4948 On some machines, such as the \s-1VAX\s0, this flag has no effect, because
4949 the standard calling sequence automatically handles the frame pointer
4950 and nothing is saved by pretending it doesn't exist.  The
4951 machine-description macro \f(CW\*(C`FRAME_POINTER_REQUIRED\*(C'\fR controls
4952 whether a target machine supports this flag.  
4953 .Sp
4954 Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
4955 .IP "\fB\-foptimize\-sibling\-calls\fR" 4
4956 .IX Item "-foptimize-sibling-calls"
4957 Optimize sibling and tail recursive calls.
4958 .Sp
4959 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
4960 .IP "\fB\-fno\-inline\fR" 4
4961 .IX Item "-fno-inline"
4962 Don't pay attention to the \f(CW\*(C`inline\*(C'\fR keyword.  Normally this option
4963 is used to keep the compiler from expanding any functions inline.
4964 Note that if you are not optimizing, no functions can be expanded inline.
4965 .IP "\fB\-finline\-small\-functions\fR" 4
4966 .IX Item "-finline-small-functions"
4967 Integrate functions into their callers when their body is smaller than expected
4968 function call code (so overall size of program gets smaller).  The compiler
4969 heuristically decides which functions are simple enough to be worth integrating
4970 in this way.
4971 .Sp
4972 Enabled at level \fB\-O2\fR.
4973 .IP "\fB\-findirect\-inlining\fR" 4
4974 .IX Item "-findirect-inlining"
4975 Inline also indirect calls that are discovered to be known at compile
4976 time thanks to previous inlining.  This option has any effect only
4977 when inlining itself is turned on by the \fB\-finline\-functions\fR
4978 or \fB\-finline\-small\-functions\fR options.
4979 .Sp
4980 Enabled at level \fB\-O2\fR.
4981 .IP "\fB\-finline\-functions\fR" 4
4982 .IX Item "-finline-functions"
4983 Integrate all simple functions into their callers.  The compiler
4984 heuristically decides which functions are simple enough to be worth
4985 integrating in this way.
4986 .Sp
4987 If all calls to a given function are integrated, and the function is
4988 declared \f(CW\*(C`static\*(C'\fR, then the function is normally not output as
4989 assembler code in its own right.
4990 .Sp
4991 Enabled at level \fB\-O3\fR.
4992 .IP "\fB\-finline\-functions\-called\-once\fR" 4
4993 .IX Item "-finline-functions-called-once"
4994 Consider all \f(CW\*(C`static\*(C'\fR functions called once for inlining into their
4995 caller even if they are not marked \f(CW\*(C`inline\*(C'\fR.  If a call to a given
4996 function is integrated, then the function is not output as assembler code
4997 in its own right.
4998 .Sp
4999 Enabled at levels \fB\-O1\fR, \fB\-O2\fR, \fB\-O3\fR and \fB\-Os\fR.
5000 .IP "\fB\-fearly\-inlining\fR" 4
5001 .IX Item "-fearly-inlining"
5002 Inline functions marked by \f(CW\*(C`always_inline\*(C'\fR and functions whose body seems
5003 smaller than the function call overhead early before doing
5004 \&\fB\-fprofile\-generate\fR instrumentation and real inlining pass.  Doing so
5005 makes profiling significantly cheaper and usually inlining faster on programs
5006 having large chains of nested wrapper functions.
5007 .Sp
5008 Enabled by default.
5009 .IP "\fB\-finline\-limit=\fR\fIn\fR" 4
5010 .IX Item "-finline-limit=n"
5011 By default, \s-1GCC\s0 limits the size of functions that can be inlined.  This flag
5012 allows coarse control of this limit.  \fIn\fR is the size of functions that
5013 can be inlined in number of pseudo instructions.
5014 .Sp
5015 Inlining is actually controlled by a number of parameters, which may be
5016 specified individually by using \fB\-\-param\fR \fIname\fR\fB=\fR\fIvalue\fR.
5017 The \fB\-finline\-limit=\fR\fIn\fR option sets some of these parameters
5018 as follows:
5019 .RS 4
5020 .IP "\fBmax-inline-insns-single\fR" 4
5021 .IX Item "max-inline-insns-single"
5022 is set to \fIn\fR/2.
5023 .IP "\fBmax-inline-insns-auto\fR" 4
5024 .IX Item "max-inline-insns-auto"
5025 is set to \fIn\fR/2.
5026 .RE
5027 .RS 4
5028 .Sp
5029 See below for a documentation of the individual
5030 parameters controlling inlining and for the defaults of these parameters.
5031 .Sp
5032 \&\fINote:\fR there may be no value to \fB\-finline\-limit\fR that results
5033 in default behavior.
5034 .Sp
5035 \&\fINote:\fR pseudo instruction represents, in this particular context, an
5036 abstract measurement of function's size.  In no way does it represent a count
5037 of assembly instructions and as such its exact meaning might change from one
5038 release to an another.
5039 .RE
5040 .IP "\fB\-fkeep\-inline\-functions\fR" 4
5041 .IX Item "-fkeep-inline-functions"
5042 In C, emit \f(CW\*(C`static\*(C'\fR functions that are declared \f(CW\*(C`inline\*(C'\fR
5043 into the object file, even if the function has been inlined into all
5044 of its callers.  This switch does not affect functions using the
5045 \&\f(CW\*(C`extern inline\*(C'\fR extension in \s-1GNU\s0 C89.  In \*(C+, emit any and all
5046 inline functions into the object file.
5047 .IP "\fB\-fkeep\-static\-consts\fR" 4
5048 .IX Item "-fkeep-static-consts"
5049 Emit variables declared \f(CW\*(C`static const\*(C'\fR when optimization isn't turned
5050 on, even if the variables aren't referenced.
5051 .Sp
5052 \&\s-1GCC\s0 enables this option by default.  If you want to force the compiler to
5053 check if the variable was referenced, regardless of whether or not
5054 optimization is turned on, use the \fB\-fno\-keep\-static\-consts\fR option.
5055 .IP "\fB\-fmerge\-constants\fR" 4
5056 .IX Item "-fmerge-constants"
5057 Attempt to merge identical constants (string constants and floating point
5058 constants) across compilation units.
5059 .Sp
5060 This option is the default for optimized compilation if the assembler and
5061 linker support it.  Use \fB\-fno\-merge\-constants\fR to inhibit this
5062 behavior.
5063 .Sp
5064 Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5065 .IP "\fB\-fmerge\-all\-constants\fR" 4
5066 .IX Item "-fmerge-all-constants"
5067 Attempt to merge identical constants and identical variables.
5068 .Sp
5069 This option implies \fB\-fmerge\-constants\fR.  In addition to
5070 \&\fB\-fmerge\-constants\fR this considers e.g. even constant initialized
5071 arrays or initialized constant variables with integral or floating point
5072 types.  Languages like C or \*(C+ require each variable, including multiple
5073 instances of the same variable in recursive calls, to have distinct locations,
5074 so using this option will result in non-conforming
5075 behavior.
5076 .IP "\fB\-fmodulo\-sched\fR" 4
5077 .IX Item "-fmodulo-sched"
5078 Perform swing modulo scheduling immediately before the first scheduling
5079 pass.  This pass looks at innermost loops and reorders their
5080 instructions by overlapping different iterations.
5081 .IP "\fB\-fmodulo\-sched\-allow\-regmoves\fR" 4
5082 .IX Item "-fmodulo-sched-allow-regmoves"
5083 Perform more aggressive \s-1SMS\s0 based modulo scheduling with register moves
5084 allowed.  By setting this flag certain anti-dependences edges will be
5085 deleted which will trigger the generation of reg-moves based on the
5086 life-range analysis.  This option is effective only with
5087 \&\fB\-fmodulo\-sched\fR enabled.
5088 .IP "\fB\-fno\-branch\-count\-reg\fR" 4
5089 .IX Item "-fno-branch-count-reg"
5090 Do not use \*(L"decrement and branch\*(R" instructions on a count register,
5091 but instead generate a sequence of instructions that decrement a
5092 register, compare it against zero, then branch based upon the result.
5093 This option is only meaningful on architectures that support such
5094 instructions, which include x86, PowerPC, \s-1IA\-64\s0 and S/390.
5095 .Sp
5096 The default is \fB\-fbranch\-count\-reg\fR.
5097 .IP "\fB\-fno\-function\-cse\fR" 4
5098 .IX Item "-fno-function-cse"
5099 Do not put function addresses in registers; make each instruction that
5100 calls a constant function contain the function's address explicitly.
5101 .Sp
5102 This option results in less efficient code, but some strange hacks
5103 that alter the assembler output may be confused by the optimizations
5104 performed when this option is not used.
5105 .Sp
5106 The default is \fB\-ffunction\-cse\fR
5107 .IP "\fB\-fno\-zero\-initialized\-in\-bss\fR" 4
5108 .IX Item "-fno-zero-initialized-in-bss"
5109 If the target supports a \s-1BSS\s0 section, \s-1GCC\s0 by default puts variables that
5110 are initialized to zero into \s-1BSS\s0.  This can save space in the resulting
5111 code.
5112 .Sp
5113 This option turns off this behavior because some programs explicitly
5114 rely on variables going to the data section.  E.g., so that the
5115 resulting executable can find the beginning of that section and/or make
5116 assumptions based on that.
5117 .Sp
5118 The default is \fB\-fzero\-initialized\-in\-bss\fR.
5119 .IP "\fB\-fmudflap \-fmudflapth \-fmudflapir\fR" 4
5120 .IX Item "-fmudflap -fmudflapth -fmudflapir"
5121 For front-ends that support it (C and \*(C+), instrument all risky
5122 pointer/array dereferencing operations, some standard library
5123 string/heap functions, and some other associated constructs with
5124 range/validity tests.  Modules so instrumented should be immune to
5125 buffer overflows, invalid heap use, and some other classes of C/\*(C+
5126 programming errors.  The instrumentation relies on a separate runtime
5127 library (\fIlibmudflap\fR), which will be linked into a program if
5128 \&\fB\-fmudflap\fR is given at link time.  Run-time behavior of the
5129 instrumented program is controlled by the \fB\s-1MUDFLAP_OPTIONS\s0\fR
5130 environment variable.  See \f(CW\*(C`env MUDFLAP_OPTIONS=\-help a.out\*(C'\fR
5131 for its options.
5132 .Sp
5133 Use \fB\-fmudflapth\fR instead of \fB\-fmudflap\fR to compile and to
5134 link if your program is multi\-threaded.  Use \fB\-fmudflapir\fR, in
5135 addition to \fB\-fmudflap\fR or \fB\-fmudflapth\fR, if
5136 instrumentation should ignore pointer reads.  This produces less
5137 instrumentation (and therefore faster execution) and still provides
5138 some protection against outright memory corrupting writes, but allows
5139 erroneously read data to propagate within a program.
5140 .IP "\fB\-fthread\-jumps\fR" 4
5141 .IX Item "-fthread-jumps"
5142 Perform optimizations where we check to see if a jump branches to a
5143 location where another comparison subsumed by the first is found.  If
5144 so, the first branch is redirected to either the destination of the
5145 second branch or a point immediately following it, depending on whether
5146 the condition is known to be true or false.
5147 .Sp
5148 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5149 .IP "\fB\-fsplit\-wide\-types\fR" 4
5150 .IX Item "-fsplit-wide-types"
5151 When using a type that occupies multiple registers, such as \f(CW\*(C`long
5152 long\*(C'\fR on a 32\-bit system, split the registers apart and allocate them
5153 independently.  This normally generates better code for those types,
5154 but may make debugging more difficult.
5155 .Sp
5156 Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR,
5157 \&\fB\-Os\fR.
5158 .IP "\fB\-fcse\-follow\-jumps\fR" 4
5159 .IX Item "-fcse-follow-jumps"
5160 In common subexpression elimination (\s-1CSE\s0), scan through jump instructions
5161 when the target of the jump is not reached by any other path.  For
5162 example, when \s-1CSE\s0 encounters an \f(CW\*(C`if\*(C'\fR statement with an
5163 \&\f(CW\*(C`else\*(C'\fR clause, \s-1CSE\s0 will follow the jump when the condition
5164 tested is false.
5165 .Sp
5166 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5167 .IP "\fB\-fcse\-skip\-blocks\fR" 4
5168 .IX Item "-fcse-skip-blocks"
5169 This is similar to \fB\-fcse\-follow\-jumps\fR, but causes \s-1CSE\s0 to
5170 follow jumps which conditionally skip over blocks.  When \s-1CSE\s0
5171 encounters a simple \f(CW\*(C`if\*(C'\fR statement with no else clause,
5172 \&\fB\-fcse\-skip\-blocks\fR causes \s-1CSE\s0 to follow the jump around the
5173 body of the \f(CW\*(C`if\*(C'\fR.
5174 .Sp
5175 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5176 .IP "\fB\-frerun\-cse\-after\-loop\fR" 4
5177 .IX Item "-frerun-cse-after-loop"
5178 Re-run common subexpression elimination after loop optimizations has been
5179 performed.
5180 .Sp
5181 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5182 .IP "\fB\-fgcse\fR" 4
5183 .IX Item "-fgcse"
5184 Perform a global common subexpression elimination pass.
5185 This pass also performs global constant and copy propagation.
5186 .Sp
5187 \&\fINote:\fR When compiling a program using computed gotos, a \s-1GCC\s0
5188 extension, you may get better runtime performance if you disable
5189 the global common subexpression elimination pass by adding
5190 \&\fB\-fno\-gcse\fR to the command line.
5191 .Sp
5192 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5193 .IP "\fB\-fgcse\-lm\fR" 4
5194 .IX Item "-fgcse-lm"
5195 When \fB\-fgcse\-lm\fR is enabled, global common subexpression elimination will
5196 attempt to move loads which are only killed by stores into themselves.  This
5197 allows a loop containing a load/store sequence to be changed to a load outside
5198 the loop, and a copy/store within the loop.
5199 .Sp
5200 Enabled by default when gcse is enabled.
5201 .IP "\fB\-fgcse\-sm\fR" 4
5202 .IX Item "-fgcse-sm"
5203 When \fB\-fgcse\-sm\fR is enabled, a store motion pass is run after
5204 global common subexpression elimination.  This pass will attempt to move
5205 stores out of loops.  When used in conjunction with \fB\-fgcse\-lm\fR,
5206 loops containing a load/store sequence can be changed to a load before
5207 the loop and a store after the loop.
5208 .Sp
5209 Not enabled at any optimization level.
5210 .IP "\fB\-fgcse\-las\fR" 4
5211 .IX Item "-fgcse-las"
5212 When \fB\-fgcse\-las\fR is enabled, the global common subexpression
5213 elimination pass eliminates redundant loads that come after stores to the
5214 same memory location (both partial and full redundancies).
5215 .Sp
5216 Not enabled at any optimization level.
5217 .IP "\fB\-fgcse\-after\-reload\fR" 4
5218 .IX Item "-fgcse-after-reload"
5219 When \fB\-fgcse\-after\-reload\fR is enabled, a redundant load elimination
5220 pass is performed after reload.  The purpose of this pass is to cleanup
5221 redundant spilling.
5222 .IP "\fB\-funsafe\-loop\-optimizations\fR" 4
5223 .IX Item "-funsafe-loop-optimizations"
5224 If given, the loop optimizer will assume that loop indices do not
5225 overflow, and that the loops with nontrivial exit condition are not
5226 infinite.  This enables a wider range of loop optimizations even if
5227 the loop optimizer itself cannot prove that these assumptions are valid.
5228 Using \fB\-Wunsafe\-loop\-optimizations\fR, the compiler will warn you
5229 if it finds this kind of loop.
5230 .IP "\fB\-fcrossjumping\fR" 4
5231 .IX Item "-fcrossjumping"
5232 Perform cross-jumping transformation.  This transformation unifies equivalent code and save code size.  The
5233 resulting code may or may not perform better than without cross\-jumping.
5234 .Sp
5235 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5236 .IP "\fB\-fauto\-inc\-dec\fR" 4
5237 .IX Item "-fauto-inc-dec"
5238 Combine increments or decrements of addresses with memory accesses.
5239 This pass is always skipped on architectures that do not have
5240 instructions to support this.  Enabled by default at \fB\-O\fR and
5241 higher on architectures that support this.
5242 .IP "\fB\-fdce\fR" 4
5243 .IX Item "-fdce"
5244 Perform dead code elimination (\s-1DCE\s0) on \s-1RTL\s0.
5245 Enabled by default at \fB\-O\fR and higher.
5246 .IP "\fB\-fdse\fR" 4
5247 .IX Item "-fdse"
5248 Perform dead store elimination (\s-1DSE\s0) on \s-1RTL\s0.
5249 Enabled by default at \fB\-O\fR and higher.
5250 .IP "\fB\-fif\-conversion\fR" 4
5251 .IX Item "-fif-conversion"
5252 Attempt to transform conditional jumps into branch-less equivalents.  This
5253 include use of conditional moves, min, max, set flags and abs instructions, and
5254 some tricks doable by standard arithmetics.  The use of conditional execution
5255 on chips where it is available is controlled by \f(CW\*(C`if\-conversion2\*(C'\fR.
5256 .Sp
5257 Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5258 .IP "\fB\-fif\-conversion2\fR" 4
5259 .IX Item "-fif-conversion2"
5260 Use conditional execution (where available) to transform conditional jumps into
5261 branch-less equivalents.
5262 .Sp
5263 Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5264 .IP "\fB\-fdelete\-null\-pointer\-checks\fR" 4
5265 .IX Item "-fdelete-null-pointer-checks"
5266 Use global dataflow analysis to identify and eliminate useless checks
5267 for null pointers.  The compiler assumes that dereferencing a null
5268 pointer would have halted the program.  If a pointer is checked after
5269 it has already been dereferenced, it cannot be null.
5270 .Sp
5271 In some environments, this assumption is not true, and programs can
5272 safely dereference null pointers.  Use
5273 \&\fB\-fno\-delete\-null\-pointer\-checks\fR to disable this optimization
5274 for programs which depend on that behavior.
5275 .Sp
5276 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5277 .IP "\fB\-fexpensive\-optimizations\fR" 4
5278 .IX Item "-fexpensive-optimizations"
5279 Perform a number of minor optimizations that are relatively expensive.
5280 .Sp
5281 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5282 .IP "\fB\-foptimize\-register\-move\fR" 4
5283 .IX Item "-foptimize-register-move"
5284 .PD 0
5285 .IP "\fB\-fregmove\fR" 4
5286 .IX Item "-fregmove"
5287 .PD
5288 Attempt to reassign register numbers in move instructions and as
5289 operands of other simple instructions in order to maximize the amount of
5290 register tying.  This is especially helpful on machines with two-operand
5291 instructions.
5292 .Sp
5293 Note \fB\-fregmove\fR and \fB\-foptimize\-register\-move\fR are the same
5294 optimization.
5295 .Sp
5296 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5297 .IP "\fB\-fira\-algorithm=\fR\fIalgorithm\fR" 4
5298 .IX Item "-fira-algorithm=algorithm"
5299 Use specified coloring algorithm for the integrated register
5300 allocator.  The \fIalgorithm\fR argument should be \f(CW\*(C`priority\*(C'\fR or
5301 \&\f(CW\*(C`CB\*(C'\fR.  The first algorithm specifies Chow's priority coloring,
5302 the second one specifies Chaitin-Briggs coloring.  The second
5303 algorithm can be unimplemented for some architectures.  If it is
5304 implemented, it is the default because Chaitin-Briggs coloring as a
5305 rule generates a better code.
5306 .IP "\fB\-fira\-region=\fR\fIregion\fR" 4
5307 .IX Item "-fira-region=region"
5308 Use specified regions for the integrated register allocator.  The
5309 \&\fIregion\fR argument should be one of \f(CW\*(C`all\*(C'\fR, \f(CW\*(C`mixed\*(C'\fR, or
5310 \&\f(CW\*(C`one\*(C'\fR.  The first value means using all loops as register
5311 allocation regions, the second value which is the default means using
5312 all loops except for loops with small register pressure as the
5313 regions, and third one means using all function as a single region.
5314 The first value can give best result for machines with small size and
5315 irregular register set, the third one results in faster and generates
5316 decent code and the smallest size code, and the default value usually
5317 give the best results in most cases and for most architectures.
5318 .IP "\fB\-fira\-coalesce\fR" 4
5319 .IX Item "-fira-coalesce"
5320 Do optimistic register coalescing.  This option might be profitable for
5321 architectures with big regular register files.
5322 .IP "\fB\-fno\-ira\-share\-save\-slots\fR" 4
5323 .IX Item "-fno-ira-share-save-slots"
5324 Switch off sharing stack slots used for saving call used hard
5325 registers living through a call.  Each hard register will get a
5326 separate stack slot and as a result function stack frame will be
5327 bigger.
5328 .IP "\fB\-fno\-ira\-share\-spill\-slots\fR" 4
5329 .IX Item "-fno-ira-share-spill-slots"
5330 Switch off sharing stack slots allocated for pseudo\-registers.  Each
5331 pseudo-register which did not get a hard register will get a separate
5332 stack slot and as a result function stack frame will be bigger.
5333 .IP "\fB\-fira\-verbose=\fR\fIn\fR" 4
5334 .IX Item "-fira-verbose=n"
5335 Set up how verbose dump file for the integrated register allocator
5336 will be.  Default value is 5.  If the value is greater or equal to 10,
5337 the dump file will be stderr as if the value were \fIn\fR minus 10.
5338 .IP "\fB\-fdelayed\-branch\fR" 4
5339 .IX Item "-fdelayed-branch"
5340 If supported for the target machine, attempt to reorder instructions
5341 to exploit instruction slots available after delayed branch
5342 instructions.
5343 .Sp
5344 Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5345 .IP "\fB\-fschedule\-insns\fR" 4
5346 .IX Item "-fschedule-insns"
5347 If supported for the target machine, attempt to reorder instructions to
5348 eliminate execution stalls due to required data being unavailable.  This
5349 helps machines that have slow floating point or memory load instructions
5350 by allowing other instructions to be issued until the result of the load
5351 or floating point instruction is required.
5352 .Sp
5353 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5354 .IP "\fB\-fschedule\-insns2\fR" 4
5355 .IX Item "-fschedule-insns2"
5356 Similar to \fB\-fschedule\-insns\fR, but requests an additional pass of
5357 instruction scheduling after register allocation has been done.  This is
5358 especially useful on machines with a relatively small number of
5359 registers and where memory load instructions take more than one cycle.
5360 .Sp
5361 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5362 .IP "\fB\-fno\-sched\-interblock\fR" 4
5363 .IX Item "-fno-sched-interblock"
5364 Don't schedule instructions across basic blocks.  This is normally
5365 enabled by default when scheduling before register allocation, i.e.
5366 with \fB\-fschedule\-insns\fR or at \fB\-O2\fR or higher.
5367 .IP "\fB\-fno\-sched\-spec\fR" 4
5368 .IX Item "-fno-sched-spec"
5369 Don't allow speculative motion of non-load instructions.  This is normally
5370 enabled by default when scheduling before register allocation, i.e.
5371 with \fB\-fschedule\-insns\fR or at \fB\-O2\fR or higher.
5372 .IP "\fB\-fsched\-spec\-load\fR" 4
5373 .IX Item "-fsched-spec-load"
5374 Allow speculative motion of some load instructions.  This only makes
5375 sense when scheduling before register allocation, i.e. with
5376 \&\fB\-fschedule\-insns\fR or at \fB\-O2\fR or higher.
5377 .IP "\fB\-fsched\-spec\-load\-dangerous\fR" 4
5378 .IX Item "-fsched-spec-load-dangerous"
5379 Allow speculative motion of more load instructions.  This only makes
5380 sense when scheduling before register allocation, i.e. with
5381 \&\fB\-fschedule\-insns\fR or at \fB\-O2\fR or higher.
5382 .IP "\fB\-fsched\-stalled\-insns\fR" 4
5383 .IX Item "-fsched-stalled-insns"
5384 .PD 0
5385 .IP "\fB\-fsched\-stalled\-insns=\fR\fIn\fR" 4
5386 .IX Item "-fsched-stalled-insns=n"
5387 .PD
5388 Define how many insns (if any) can be moved prematurely from the queue
5389 of stalled insns into the ready list, during the second scheduling pass.
5390 \&\fB\-fno\-sched\-stalled\-insns\fR means that no insns will be moved
5391 prematurely, \fB\-fsched\-stalled\-insns=0\fR means there is no limit
5392 on how many queued insns can be moved prematurely.
5393 \&\fB\-fsched\-stalled\-insns\fR without a value is equivalent to
5394 \&\fB\-fsched\-stalled\-insns=1\fR.
5395 .IP "\fB\-fsched\-stalled\-insns\-dep\fR" 4
5396 .IX Item "-fsched-stalled-insns-dep"
5397 .PD 0
5398 .IP "\fB\-fsched\-stalled\-insns\-dep=\fR\fIn\fR" 4
5399 .IX Item "-fsched-stalled-insns-dep=n"
5400 .PD
5401 Define how many insn groups (cycles) will be examined for a dependency
5402 on a stalled insn that is candidate for premature removal from the queue
5403 of stalled insns.  This has an effect only during the second scheduling pass,
5404 and only if \fB\-fsched\-stalled\-insns\fR is used.
5405 \&\fB\-fno\-sched\-stalled\-insns\-dep\fR is equivalent to
5406 \&\fB\-fsched\-stalled\-insns\-dep=0\fR.
5407 \&\fB\-fsched\-stalled\-insns\-dep\fR without a value is equivalent to
5408 \&\fB\-fsched\-stalled\-insns\-dep=1\fR.
5409 .IP "\fB\-fsched2\-use\-superblocks\fR" 4
5410 .IX Item "-fsched2-use-superblocks"
5411 When scheduling after register allocation, do use superblock scheduling
5412 algorithm.  Superblock scheduling allows motion across basic block boundaries
5413 resulting on faster schedules.  This option is experimental, as not all machine
5414 descriptions used by \s-1GCC\s0 model the \s-1CPU\s0 closely enough to avoid unreliable
5415 results from the algorithm.
5416 .Sp
5417 This only makes sense when scheduling after register allocation, i.e. with
5418 \&\fB\-fschedule\-insns2\fR or at \fB\-O2\fR or higher.
5419 .IP "\fB\-fsched2\-use\-traces\fR" 4
5420 .IX Item "-fsched2-use-traces"
5421 Use \fB\-fsched2\-use\-superblocks\fR algorithm when scheduling after register
5422 allocation and additionally perform code duplication in order to increase the
5423 size of superblocks using tracer pass.  See \fB\-ftracer\fR for details on
5424 trace formation.
5425 .Sp
5426 This mode should produce faster but significantly longer programs.  Also
5427 without \fB\-fbranch\-probabilities\fR the traces constructed may not
5428 match the reality and hurt the performance.  This only makes
5429 sense when scheduling after register allocation, i.e. with
5430 \&\fB\-fschedule\-insns2\fR or at \fB\-O2\fR or higher.
5431 .IP "\fB\-fsee\fR" 4
5432 .IX Item "-fsee"
5433 Eliminate redundant sign extension instructions and move the non-redundant
5434 ones to optimal placement using lazy code motion (\s-1LCM\s0).
5435 .IP "\fB\-freschedule\-modulo\-scheduled\-loops\fR" 4
5436 .IX Item "-freschedule-modulo-scheduled-loops"
5437 The modulo scheduling comes before the traditional scheduling, if a loop
5438 was modulo scheduled we may want to prevent the later scheduling passes
5439 from changing its schedule, we use this option to control that.
5440 .IP "\fB\-fselective\-scheduling\fR" 4
5441 .IX Item "-fselective-scheduling"
5442 Schedule instructions using selective scheduling algorithm.  Selective
5443 scheduling runs instead of the first scheduler pass.
5444 .IP "\fB\-fselective\-scheduling2\fR" 4
5445 .IX Item "-fselective-scheduling2"
5446 Schedule instructions using selective scheduling algorithm.  Selective
5447 scheduling runs instead of the second scheduler pass.
5448 .IP "\fB\-fsel\-sched\-pipelining\fR" 4
5449 .IX Item "-fsel-sched-pipelining"
5450 Enable software pipelining of innermost loops during selective scheduling.  
5451 This option has no effect until one of \fB\-fselective\-scheduling\fR or 
5452 \&\fB\-fselective\-scheduling2\fR is turned on.
5453 .IP "\fB\-fsel\-sched\-pipelining\-outer\-loops\fR" 4
5454 .IX Item "-fsel-sched-pipelining-outer-loops"
5455 When pipelining loops during selective scheduling, also pipeline outer loops.
5456 This option has no effect until \fB\-fsel\-sched\-pipelining\fR is turned on.
5457 .IP "\fB\-fcaller\-saves\fR" 4
5458 .IX Item "-fcaller-saves"
5459 Enable values to be allocated in registers that will be clobbered by
5460 function calls, by emitting extra instructions to save and restore the
5461 registers around such calls.  Such allocation is done only when it
5462 seems to result in better code than would otherwise be produced.
5463 .Sp
5464 This option is always enabled by default on certain machines, usually
5465 those which have no call-preserved registers to use instead.
5466 .Sp
5467 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5468 .IP "\fB\-fconserve\-stack\fR" 4
5469 .IX Item "-fconserve-stack"
5470 Attempt to minimize stack usage.  The compiler will attempt to use less
5471 stack space, even if that makes the program slower.  This option
5472 implies setting the \fBlarge-stack-frame\fR parameter to 100
5473 and the \fBlarge-stack-frame-growth\fR parameter to 400.
5474 .IP "\fB\-ftree\-reassoc\fR" 4
5475 .IX Item "-ftree-reassoc"
5476 Perform reassociation on trees.  This flag is enabled by default
5477 at \fB\-O\fR and higher.
5478 .IP "\fB\-ftree\-pre\fR" 4
5479 .IX Item "-ftree-pre"
5480 Perform partial redundancy elimination (\s-1PRE\s0) on trees.  This flag is
5481 enabled by default at \fB\-O2\fR and \fB\-O3\fR.
5482 .IP "\fB\-ftree\-fre\fR" 4
5483 .IX Item "-ftree-fre"
5484 Perform full redundancy elimination (\s-1FRE\s0) on trees.  The difference
5485 between \s-1FRE\s0 and \s-1PRE\s0 is that \s-1FRE\s0 only considers expressions
5486 that are computed on all paths leading to the redundant computation.
5487 This analysis is faster than \s-1PRE\s0, though it exposes fewer redundancies.
5488 This flag is enabled by default at \fB\-O\fR and higher.
5489 .IP "\fB\-ftree\-copy\-prop\fR" 4
5490 .IX Item "-ftree-copy-prop"
5491 Perform copy propagation on trees.  This pass eliminates unnecessary
5492 copy operations.  This flag is enabled by default at \fB\-O\fR and
5493 higher.
5494 .IP "\fB\-fipa\-pure\-const\fR" 4
5495 .IX Item "-fipa-pure-const"
5496 Discover which functions are pure or constant.
5497 Enabled by default at \fB\-O\fR and higher.
5498 .IP "\fB\-fipa\-reference\fR" 4
5499 .IX Item "-fipa-reference"
5500 Discover which static variables do not escape cannot escape the
5501 compilation unit.
5502 Enabled by default at \fB\-O\fR and higher.
5503 .IP "\fB\-fipa\-struct\-reorg\fR" 4
5504 .IX Item "-fipa-struct-reorg"
5505 Perform structure reorganization optimization, that change C\-like structures 
5506 layout in order to better utilize spatial locality.  This transformation is 
5507 affective for programs containing arrays of structures.  Available in two 
5508 compilation modes: profile-based (enabled with \fB\-fprofile\-generate\fR)
5509 or static (which uses built-in heuristics).  Require \fB\-fipa\-type\-escape\fR
5510 to provide the safety of this transformation.  It works only in whole program
5511 mode, so it requires \fB\-fwhole\-program\fR and \fB\-combine\fR to be
5512 enabled.  Structures considered \fBcold\fR by this transformation are not
5513 affected (see \fB\-\-param struct\-reorg\-cold\-struct\-ratio=\fR\fIvalue\fR).
5514 .Sp
5515 With this flag, the program debug info reflects a new structure layout.
5516 .IP "\fB\-fipa\-pta\fR" 4
5517 .IX Item "-fipa-pta"
5518 Perform interprocedural pointer analysis.  This option is experimental
5519 and does not affect generated code.
5520 .IP "\fB\-fipa\-cp\fR" 4
5521 .IX Item "-fipa-cp"
5522 Perform interprocedural constant propagation.
5523 This optimization analyzes the program to determine when values passed
5524 to functions are constants and then optimizes accordingly.  
5525 This optimization can substantially increase performance
5526 if the application has constants passed to functions.
5527 This flag is enabled by default at \fB\-O2\fR, \fB\-Os\fR and \fB\-O3\fR.
5528 .IP "\fB\-fipa\-cp\-clone\fR" 4
5529 .IX Item "-fipa-cp-clone"
5530 Perform function cloning to make interprocedural constant propagation stronger.
5531 When enabled, interprocedural constant propagation will perform function cloning
5532 when externally visible function can be called with constant arguments.
5533 Because this optimization can create multiple copies of functions,
5534 it may significantly increase code size
5535 (see \fB\-\-param ipcp\-unit\-growth=\fR\fIvalue\fR).
5536 This flag is enabled by default at \fB\-O3\fR.
5537 .IP "\fB\-fipa\-matrix\-reorg\fR" 4
5538 .IX Item "-fipa-matrix-reorg"
5539 Perform matrix flattening and transposing.
5540 Matrix flattening tries to replace a m\-dimensional matrix 
5541 with its equivalent n\-dimensional matrix, where n < m.
5542 This reduces the level of indirection needed for accessing the elements
5543 of the matrix. The second optimization is matrix transposing that
5544 attempts to change the order of the matrix's dimensions in order to
5545 improve cache locality.
5546 Both optimizations need the \fB\-fwhole\-program\fR flag. 
5547 Transposing is enabled only if profiling information is available.
5548 .IP "\fB\-ftree\-sink\fR" 4
5549 .IX Item "-ftree-sink"
5550 Perform forward store motion  on trees.  This flag is
5551 enabled by default at \fB\-O\fR and higher.
5552 .IP "\fB\-ftree\-ccp\fR" 4
5553 .IX Item "-ftree-ccp"
5554 Perform sparse conditional constant propagation (\s-1CCP\s0) on trees.  This
5555 pass only operates on local scalar variables and is enabled by default
5556 at \fB\-O\fR and higher.
5557 .IP "\fB\-ftree\-switch\-conversion\fR" 4
5558 .IX Item "-ftree-switch-conversion"
5559 Perform conversion of simple initializations in a switch to
5560 initializations from a scalar array.  This flag is enabled by default
5561 at \fB\-O2\fR and higher.
5562 .IP "\fB\-ftree\-dce\fR" 4
5563 .IX Item "-ftree-dce"
5564 Perform dead code elimination (\s-1DCE\s0) on trees.  This flag is enabled by
5565 default at \fB\-O\fR and higher.
5566 .IP "\fB\-ftree\-builtin\-call\-dce\fR" 4
5567 .IX Item "-ftree-builtin-call-dce"
5568 Perform conditional dead code elimination (\s-1DCE\s0) for calls to builtin functions 
5569 that may set \f(CW\*(C`errno\*(C'\fR but are otherwise side-effect free.  This flag is 
5570 enabled by default at \fB\-O2\fR and higher if \fB\-Os\fR is not also 
5571 specified.
5572 .IP "\fB\-ftree\-dominator\-opts\fR" 4
5573 .IX Item "-ftree-dominator-opts"
5574 Perform a variety of simple scalar cleanups (constant/copy
5575 propagation, redundancy elimination, range propagation and expression
5576 simplification) based on a dominator tree traversal.  This also
5577 performs jump threading (to reduce jumps to jumps). This flag is
5578 enabled by default at \fB\-O\fR and higher.
5579 .IP "\fB\-ftree\-dse\fR" 4
5580 .IX Item "-ftree-dse"
5581 Perform dead store elimination (\s-1DSE\s0) on trees.  A dead store is a store into
5582 a memory location which will later be overwritten by another store without
5583 any intervening loads.  In this case the earlier store can be deleted.  This
5584 flag is enabled by default at \fB\-O\fR and higher.
5585 .IP "\fB\-ftree\-ch\fR" 4
5586 .IX Item "-ftree-ch"
5587 Perform loop header copying on trees.  This is beneficial since it increases
5588 effectiveness of code motion optimizations.  It also saves one jump.  This flag
5589 is enabled by default at \fB\-O\fR and higher.  It is not enabled
5590 for \fB\-Os\fR, since it usually increases code size.
5591 .IP "\fB\-ftree\-loop\-optimize\fR" 4
5592 .IX Item "-ftree-loop-optimize"
5593 Perform loop optimizations on trees.  This flag is enabled by default
5594 at \fB\-O\fR and higher.
5595 .IP "\fB\-ftree\-loop\-linear\fR" 4
5596 .IX Item "-ftree-loop-linear"
5597 Perform linear loop transformations on tree.  This flag can improve cache
5598 performance and allow further loop optimizations to take place.
5599 .IP "\fB\-floop\-interchange\fR" 4
5600 .IX Item "-floop-interchange"
5601 Perform loop interchange transformations on loops.  Interchanging two
5602 nested loops switches the inner and outer loops.  For example, given a
5603 loop like:
5604 .Sp
5605 .Vb 5
5606 \&        DO J = 1, M
5607 \&          DO I = 1, N
5608 \&            A(J, I) = A(J, I) * C
5609 \&          ENDDO
5610 \&        ENDDO
5611 .Ve
5612 .Sp
5613 loop interchange will transform the loop as if the user had written:
5614 .Sp
5615 .Vb 5
5616 \&        DO I = 1, N
5617 \&          DO J = 1, M
5618 \&            A(J, I) = A(J, I) * C
5619 \&          ENDDO
5620 \&        ENDDO
5621 .Ve
5622 .Sp
5623 which can be beneficial when \f(CW\*(C`N\*(C'\fR is larger than the caches,
5624 because in Fortran, the elements of an array are stored in memory
5625 contiguously by column, and the original loop iterates over rows,
5626 potentially creating at each access a cache miss.  This optimization
5627 applies to all the languages supported by \s-1GCC\s0 and is not limited to
5628 Fortran.  To use this code transformation, \s-1GCC\s0 has to be configured
5629 with \fB\-\-with\-ppl\fR and \fB\-\-with\-cloog\fR to enable the
5630 Graphite loop transformation infrastructure.
5631 .IP "\fB\-floop\-strip\-mine\fR" 4
5632 .IX Item "-floop-strip-mine"
5633 Perform loop strip mining transformations on loops.  Strip mining
5634 splits a loop into two nested loops.  The outer loop has strides 
5635 equal to the strip size and the inner loop has strides of the 
5636 original loop within a strip.  For example, given a loop like:
5637 .Sp
5638 .Vb 3
5639 \&        DO I = 1, N
5640 \&          A(I) = A(I) + C
5641 \&        ENDDO
5642 .Ve
5643 .Sp
5644 loop strip mining will transform the loop as if the user had written:
5645 .Sp
5646 .Vb 5
5647 \&        DO II = 1, N, 4
5648 \&          DO I = II, min (II + 3, N)
5649 \&            A(I) = A(I) + C
5650 \&          ENDDO
5651 \&        ENDDO
5652 .Ve
5653 .Sp
5654 This optimization applies to all the languages supported by \s-1GCC\s0 and is
5655 not limited to Fortran.  To use this code transformation, \s-1GCC\s0 has to
5656 be configured with \fB\-\-with\-ppl\fR and \fB\-\-with\-cloog\fR to
5657 enable the Graphite loop transformation infrastructure.
5658 .IP "\fB\-floop\-block\fR" 4
5659 .IX Item "-floop-block"
5660 Perform loop blocking transformations on loops.  Blocking strip mines
5661 each loop in the loop nest such that the memory accesses of the
5662 element loops fit inside caches.  For example, given a loop like:
5663 .Sp
5664 .Vb 5
5665 \&        DO I = 1, N
5666 \&          DO J = 1, M
5667 \&            A(J, I) = B(I) + C(J)
5668 \&          ENDDO
5669 \&        ENDDO
5670 .Ve
5671 .Sp
5672 loop blocking will transform the loop as if the user had written:
5673 .Sp
5674 .Vb 9
5675 \&        DO II = 1, N, 64
5676 \&          DO JJ = 1, M, 64
5677 \&            DO I = II, min (II + 63, N)
5678 \&              DO J = JJ, min (JJ + 63, M)
5679 \&                A(J, I) = B(I) + C(J)
5680 \&              ENDDO
5681 \&            ENDDO
5682 \&          ENDDO
5683 \&        ENDDO
5684 .Ve
5685 .Sp
5686 which can be beneficial when \f(CW\*(C`M\*(C'\fR is larger than the caches,
5687 because the innermost loop will iterate over a smaller amount of data
5688 that can be kept in the caches.  This optimization applies to all the
5689 languages supported by \s-1GCC\s0 and is not limited to Fortran.  To use this
5690 code transformation, \s-1GCC\s0 has to be configured with \fB\-\-with\-ppl\fR
5691 and \fB\-\-with\-cloog\fR to enable the Graphite loop transformation
5692 infrastructure.
5693 .IP "\fB\-fcheck\-data\-deps\fR" 4
5694 .IX Item "-fcheck-data-deps"
5695 Compare the results of several data dependence analyzers.  This option
5696 is used for debugging the data dependence analyzers.
5697 .IP "\fB\-ftree\-loop\-distribution\fR" 4
5698 .IX Item "-ftree-loop-distribution"
5699 Perform loop distribution.  This flag can improve cache performance on
5700 big loop bodies and allow further loop optimizations, like
5701 parallelization or vectorization, to take place.  For example, the loop
5702 .Sp
5703 .Vb 4
5704 \&        DO I = 1, N
5705 \&          A(I) = B(I) + C
5706 \&          D(I) = E(I) * F
5707 \&        ENDDO
5708 .Ve
5709 .Sp
5710 is transformed to
5711 .Sp
5712 .Vb 6
5713 \&        DO I = 1, N
5714 \&           A(I) = B(I) + C
5715 \&        ENDDO
5716 \&        DO I = 1, N
5717 \&           D(I) = E(I) * F
5718 \&        ENDDO
5719 .Ve
5720 .IP "\fB\-ftree\-loop\-im\fR" 4
5721 .IX Item "-ftree-loop-im"
5722 Perform loop invariant motion on trees.  This pass moves only invariants that
5723 would be hard to handle at \s-1RTL\s0 level (function calls, operations that expand to
5724 nontrivial sequences of insns).  With \fB\-funswitch\-loops\fR it also moves
5725 operands of conditions that are invariant out of the loop, so that we can use
5726 just trivial invariantness analysis in loop unswitching.  The pass also includes
5727 store motion.
5728 .IP "\fB\-ftree\-loop\-ivcanon\fR" 4
5729 .IX Item "-ftree-loop-ivcanon"
5730 Create a canonical counter for number of iterations in the loop for that
5731 determining number of iterations requires complicated analysis.  Later
5732 optimizations then may determine the number easily.  Useful especially
5733 in connection with unrolling.
5734 .IP "\fB\-fivopts\fR" 4
5735 .IX Item "-fivopts"
5736 Perform induction variable optimizations (strength reduction, induction
5737 variable merging and induction variable elimination) on trees.
5738 .IP "\fB\-ftree\-parallelize\-loops=n\fR" 4
5739 .IX Item "-ftree-parallelize-loops=n"
5740 Parallelize loops, i.e., split their iteration space to run in n threads.
5741 This is only possible for loops whose iterations are independent
5742 and can be arbitrarily reordered.  The optimization is only
5743 profitable on multiprocessor machines, for loops that are CPU\-intensive,
5744 rather than constrained e.g. by memory bandwidth.  This option
5745 implies \fB\-pthread\fR, and thus is only supported on targets
5746 that have support for \fB\-pthread\fR.
5747 .IP "\fB\-ftree\-sra\fR" 4
5748 .IX Item "-ftree-sra"
5749 Perform scalar replacement of aggregates.  This pass replaces structure
5750 references with scalars to prevent committing structures to memory too
5751 early.  This flag is enabled by default at \fB\-O\fR and higher.
5752 .IP "\fB\-ftree\-copyrename\fR" 4
5753 .IX Item "-ftree-copyrename"
5754 Perform copy renaming on trees.  This pass attempts to rename compiler
5755 temporaries to other variables at copy locations, usually resulting in
5756 variable names which more closely resemble the original variables.  This flag
5757 is enabled by default at \fB\-O\fR and higher.
5758 .IP "\fB\-ftree\-ter\fR" 4
5759 .IX Item "-ftree-ter"
5760 Perform temporary expression replacement during the \s-1SSA\-\s0>normal phase.  Single
5761 use/single def temporaries are replaced at their use location with their
5762 defining expression.  This results in non-GIMPLE code, but gives the expanders
5763 much more complex trees to work on resulting in better \s-1RTL\s0 generation.  This is
5764 enabled by default at \fB\-O\fR and higher.
5765 .IP "\fB\-ftree\-vectorize\fR" 4
5766 .IX Item "-ftree-vectorize"
5767 Perform loop vectorization on trees. This flag is enabled by default at
5768 \&\fB\-O3\fR.
5769 .IP "\fB\-ftree\-vect\-loop\-version\fR" 4
5770 .IX Item "-ftree-vect-loop-version"
5771 Perform loop versioning when doing loop vectorization on trees.  When a loop
5772 appears to be vectorizable except that data alignment or data dependence cannot
5773 be determined at compile time then vectorized and non-vectorized versions of
5774 the loop are generated along with runtime checks for alignment or dependence
5775 to control which version is executed.  This option is enabled by default
5776 except at level \fB\-Os\fR where it is disabled.
5777 .IP "\fB\-fvect\-cost\-model\fR" 4
5778 .IX Item "-fvect-cost-model"
5779 Enable cost model for vectorization.
5780 .IP "\fB\-ftree\-vrp\fR" 4
5781 .IX Item "-ftree-vrp"
5782 Perform Value Range Propagation on trees.  This is similar to the
5783 constant propagation pass, but instead of values, ranges of values are
5784 propagated.  This allows the optimizers to remove unnecessary range
5785 checks like array bound checks and null pointer checks.  This is
5786 enabled by default at \fB\-O2\fR and higher.  Null pointer check
5787 elimination is only done if \fB\-fdelete\-null\-pointer\-checks\fR is
5788 enabled.
5789 .IP "\fB\-ftracer\fR" 4
5790 .IX Item "-ftracer"
5791 Perform tail duplication to enlarge superblock size.  This transformation
5792 simplifies the control flow of the function allowing other optimizations to do
5793 better job.
5794 .IP "\fB\-funroll\-loops\fR" 4
5795 .IX Item "-funroll-loops"
5796 Unroll loops whose number of iterations can be determined at compile
5797 time or upon entry to the loop.  \fB\-funroll\-loops\fR implies
5798 \&\fB\-frerun\-cse\-after\-loop\fR.  This option makes code larger,
5799 and may or may not make it run faster.
5800 .IP "\fB\-funroll\-all\-loops\fR" 4
5801 .IX Item "-funroll-all-loops"
5802 Unroll all loops, even if their number of iterations is uncertain when
5803 the loop is entered.  This usually makes programs run more slowly.
5804 \&\fB\-funroll\-all\-loops\fR implies the same options as
5805 \&\fB\-funroll\-loops\fR,
5806 .IP "\fB\-fsplit\-ivs\-in\-unroller\fR" 4
5807 .IX Item "-fsplit-ivs-in-unroller"
5808 Enables expressing of values of induction variables in later iterations
5809 of the unrolled loop using the value in the first iteration.  This breaks
5810 long dependency chains, thus improving efficiency of the scheduling passes.
5811 .Sp
5812 Combination of \fB\-fweb\fR and \s-1CSE\s0 is often sufficient to obtain the
5813 same effect.  However in cases the loop body is more complicated than
5814 a single basic block, this is not reliable.  It also does not work at all
5815 on some of the architectures due to restrictions in the \s-1CSE\s0 pass.
5816 .Sp
5817 This optimization is enabled by default.
5818 .IP "\fB\-fvariable\-expansion\-in\-unroller\fR" 4
5819 .IX Item "-fvariable-expansion-in-unroller"
5820 With this option, the compiler will create multiple copies of some
5821 local variables when unrolling a loop which can result in superior code.
5822 .IP "\fB\-fpredictive\-commoning\fR" 4
5823 .IX Item "-fpredictive-commoning"
5824 Perform predictive commoning optimization, i.e., reusing computations
5825 (especially memory loads and stores) performed in previous
5826 iterations of loops.
5827 .Sp
5828 This option is enabled at level \fB\-O3\fR.
5829 .IP "\fB\-fprefetch\-loop\-arrays\fR" 4
5830 .IX Item "-fprefetch-loop-arrays"
5831 If supported by the target machine, generate instructions to prefetch
5832 memory to improve the performance of loops that access large arrays.
5833 .Sp
5834 This option may generate better or worse code; results are highly
5835 dependent on the structure of loops within the source code.
5836 .Sp
5837 Disabled at level \fB\-Os\fR.
5838 .IP "\fB\-fno\-peephole\fR" 4
5839 .IX Item "-fno-peephole"
5840 .PD 0
5841 .IP "\fB\-fno\-peephole2\fR" 4
5842 .IX Item "-fno-peephole2"
5843 .PD
5844 Disable any machine-specific peephole optimizations.  The difference
5845 between \fB\-fno\-peephole\fR and \fB\-fno\-peephole2\fR is in how they
5846 are implemented in the compiler; some targets use one, some use the
5847 other, a few use both.
5848 .Sp
5849 \&\fB\-fpeephole\fR is enabled by default.
5850 \&\fB\-fpeephole2\fR enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5851 .IP "\fB\-fno\-guess\-branch\-probability\fR" 4
5852 .IX Item "-fno-guess-branch-probability"
5853 Do not guess branch probabilities using heuristics.
5854 .Sp
5855 \&\s-1GCC\s0 will use heuristics to guess branch probabilities if they are
5856 not provided by profiling feedback (\fB\-fprofile\-arcs\fR).  These
5857 heuristics are based on the control flow graph.  If some branch probabilities
5858 are specified by \fB_\|_builtin_expect\fR, then the heuristics will be
5859 used to guess branch probabilities for the rest of the control flow graph,
5860 taking the \fB_\|_builtin_expect\fR info into account.  The interactions
5861 between the heuristics and \fB_\|_builtin_expect\fR can be complex, and in
5862 some cases, it may be useful to disable the heuristics so that the effects
5863 of \fB_\|_builtin_expect\fR are easier to understand.
5864 .Sp
5865 The default is \fB\-fguess\-branch\-probability\fR at levels
5866 \&\fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5867 .IP "\fB\-freorder\-blocks\fR" 4
5868 .IX Item "-freorder-blocks"
5869 Reorder basic blocks in the compiled function in order to reduce number of
5870 taken branches and improve code locality.
5871 .Sp
5872 Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
5873 .IP "\fB\-freorder\-blocks\-and\-partition\fR" 4
5874 .IX Item "-freorder-blocks-and-partition"
5875 In addition to reordering basic blocks in the compiled function, in order
5876 to reduce number of taken branches, partitions hot and cold basic blocks
5877 into separate sections of the assembly and .o files, to improve
5878 paging and cache locality performance.
5879 .Sp
5880 This optimization is automatically turned off in the presence of
5881 exception handling, for linkonce sections, for functions with a user-defined
5882 section attribute and on any architecture that does not support named
5883 sections.
5884 .IP "\fB\-freorder\-functions\fR" 4
5885 .IX Item "-freorder-functions"
5886 Reorder functions in the object file in order to
5887 improve code locality.  This is implemented by using special
5888 subsections \f(CW\*(C`.text.hot\*(C'\fR for most frequently executed functions and
5889 \&\f(CW\*(C`.text.unlikely\*(C'\fR for unlikely executed functions.  Reordering is done by
5890 the linker so object file format must support named sections and linker must
5891 place them in a reasonable way.
5892 .Sp
5893 Also profile feedback must be available in to make this option effective.  See
5894 \&\fB\-fprofile\-arcs\fR for details.
5895 .Sp
5896 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5897 .IP "\fB\-fstrict\-aliasing\fR" 4
5898 .IX Item "-fstrict-aliasing"
5899 Allows the compiler to assume the strictest aliasing rules applicable to
5900 the language being compiled.  For C (and \*(C+), this activates
5901 optimizations based on the type of expressions.  In particular, an
5902 object of one type is assumed never to reside at the same address as an
5903 object of a different type, unless the types are almost the same.  For
5904 example, an \f(CW\*(C`unsigned int\*(C'\fR can alias an \f(CW\*(C`int\*(C'\fR, but not a
5905 \&\f(CW\*(C`void*\*(C'\fR or a \f(CW\*(C`double\*(C'\fR.  A character type may alias any other
5906 type.
5907 .Sp
5908 Pay special attention to code like this:
5909 .Sp
5910 .Vb 4
5911 \&        union a_union {
5912 \&          int i;
5913 \&          double d;
5914 \&        };
5915 .Ve
5916 .Sp
5917 .Vb 5
5918 \&        int f() {
5919 \&          a_union t;
5920 \&          t.d = 3.0;
5921 \&          return t.i;
5922 \&        }
5923 .Ve
5924 .Sp
5925 The practice of reading from a different union member than the one most
5926 recently written to (called \*(L"type\-punning\*(R") is common.  Even with
5927 \&\fB\-fstrict\-aliasing\fR, type-punning is allowed, provided the memory
5928 is accessed through the union type.  So, the code above will work as
5929 expected.    However, this code might not:
5930 .Sp
5931 .Vb 7
5932 \&        int f() {
5933 \&          a_union t;
5934 \&          int* ip;
5935 \&          t.d = 3.0;
5936 \&          ip = &t.i;
5937 \&          return *ip;
5938 \&        }
5939 .Ve
5940 .Sp
5941 Similarly, access by taking the address, casting the resulting pointer
5942 and dereferencing the result has undefined behavior, even if the cast
5943 uses a union type, e.g.:
5944 .Sp
5945 .Vb 4
5946 \&        int f() {
5947 \&          double d = 3.0;
5948 \&          return ((union a_union *) &d)\->i;
5949 \&        }
5950 .Ve
5951 .Sp
5952 The \fB\-fstrict\-aliasing\fR option is enabled at levels
5953 \&\fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5954 .IP "\fB\-fstrict\-overflow\fR" 4
5955 .IX Item "-fstrict-overflow"
5956 Allow the compiler to assume strict signed overflow rules, depending
5957 on the language being compiled.  For C (and \*(C+) this means that
5958 overflow when doing arithmetic with signed numbers is undefined, which
5959 means that the compiler may assume that it will not happen.  This
5960 permits various optimizations.  For example, the compiler will assume
5961 that an expression like \f(CW\*(C`i + 10 > i\*(C'\fR will always be true for
5962 signed \f(CW\*(C`i\*(C'\fR.  This assumption is only valid if signed overflow is
5963 undefined, as the expression is false if \f(CW\*(C`i + 10\*(C'\fR overflows when
5964 using twos complement arithmetic.  When this option is in effect any
5965 attempt to determine whether an operation on signed numbers will
5966 overflow must be written carefully to not actually involve overflow.
5967 .Sp
5968 This option also allows the compiler to assume strict pointer
5969 semantics: given a pointer to an object, if adding an offset to that
5970 pointer does not produce a pointer to the same object, the addition is
5971 undefined.  This permits the compiler to conclude that \f(CW\*(C`p + u >
5972 p\*(C'\fR is always true for a pointer \f(CW\*(C`p\*(C'\fR and unsigned integer
5973 \&\f(CW\*(C`u\*(C'\fR.  This assumption is only valid because pointer wraparound is
5974 undefined, as the expression is false if \f(CW\*(C`p + u\*(C'\fR overflows using
5975 twos complement arithmetic.
5976 .Sp
5977 See also the \fB\-fwrapv\fR option.  Using \fB\-fwrapv\fR means
5978 that integer signed overflow is fully defined: it wraps.  When
5979 \&\fB\-fwrapv\fR is used, there is no difference between
5980 \&\fB\-fstrict\-overflow\fR and \fB\-fno\-strict\-overflow\fR for
5981 integers.  With \fB\-fwrapv\fR certain types of overflow are
5982 permitted.  For example, if the compiler gets an overflow when doing
5983 arithmetic on constants, the overflowed value can still be used with
5984 \&\fB\-fwrapv\fR, but not otherwise.
5985 .Sp
5986 The \fB\-fstrict\-overflow\fR option is enabled at levels
5987 \&\fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5988 .IP "\fB\-falign\-functions\fR" 4
5989 .IX Item "-falign-functions"
5990 .PD 0
5991 .IP "\fB\-falign\-functions=\fR\fIn\fR" 4
5992 .IX Item "-falign-functions=n"
5993 .PD
5994 Align the start of functions to the next power-of-two greater than
5995 \&\fIn\fR, skipping up to \fIn\fR bytes.  For instance,
5996 \&\fB\-falign\-functions=32\fR aligns functions to the next 32\-byte
5997 boundary, but \fB\-falign\-functions=24\fR would align to the next
5998 32\-byte boundary only if this can be done by skipping 23 bytes or less.
5999 .Sp
6000 \&\fB\-fno\-align\-functions\fR and \fB\-falign\-functions=1\fR are
6001 equivalent and mean that functions will not be aligned.
6002 .Sp
6003 Some assemblers only support this flag when \fIn\fR is a power of two;
6004 in that case, it is rounded up.
6005 .Sp
6006 If \fIn\fR is not specified or is zero, use a machine-dependent default.
6007 .Sp
6008 Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
6009 .IP "\fB\-falign\-labels\fR" 4
6010 .IX Item "-falign-labels"
6011 .PD 0
6012 .IP "\fB\-falign\-labels=\fR\fIn\fR" 4
6013 .IX Item "-falign-labels=n"
6014 .PD
6015 Align all branch targets to a power-of-two boundary, skipping up to
6016 \&\fIn\fR bytes like \fB\-falign\-functions\fR.  This option can easily
6017 make code slower, because it must insert dummy operations for when the
6018 branch target is reached in the usual flow of the code.
6019 .Sp
6020 \&\fB\-fno\-align\-labels\fR and \fB\-falign\-labels=1\fR are
6021 equivalent and mean that labels will not be aligned.
6022 .Sp
6023 If \fB\-falign\-loops\fR or \fB\-falign\-jumps\fR are applicable and
6024 are greater than this value, then their values are used instead.
6025 .Sp
6026 If \fIn\fR is not specified or is zero, use a machine-dependent default
6027 which is very likely to be \fB1\fR, meaning no alignment.
6028 .Sp
6029 Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
6030 .IP "\fB\-falign\-loops\fR" 4
6031 .IX Item "-falign-loops"
6032 .PD 0
6033 .IP "\fB\-falign\-loops=\fR\fIn\fR" 4
6034 .IX Item "-falign-loops=n"
6035 .PD
6036 Align loops to a power-of-two boundary, skipping up to \fIn\fR bytes
6037 like \fB\-falign\-functions\fR.  The hope is that the loop will be
6038 executed many times, which will make up for any execution of the dummy
6039 operations.
6040 .Sp
6041 \&\fB\-fno\-align\-loops\fR and \fB\-falign\-loops=1\fR are
6042 equivalent and mean that loops will not be aligned.
6043 .Sp
6044 If \fIn\fR is not specified or is zero, use a machine-dependent default.
6045 .Sp
6046 Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
6047 .IP "\fB\-falign\-jumps\fR" 4
6048 .IX Item "-falign-jumps"
6049 .PD 0
6050 .IP "\fB\-falign\-jumps=\fR\fIn\fR" 4
6051 .IX Item "-falign-jumps=n"
6052 .PD
6053 Align branch targets to a power-of-two boundary, for branch targets
6054 where the targets can only be reached by jumping, skipping up to \fIn\fR
6055 bytes like \fB\-falign\-functions\fR.  In this case, no dummy operations
6056 need be executed.
6057 .Sp
6058 \&\fB\-fno\-align\-jumps\fR and \fB\-falign\-jumps=1\fR are
6059 equivalent and mean that loops will not be aligned.
6060 .Sp
6061 If \fIn\fR is not specified or is zero, use a machine-dependent default.
6062 .Sp
6063 Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
6064 .IP "\fB\-funit\-at\-a\-time\fR" 4
6065 .IX Item "-funit-at-a-time"
6066 This option is left for compatibility reasons. \fB\-funit\-at\-a\-time\fR
6067 has no effect, while \fB\-fno\-unit\-at\-a\-time\fR implies
6068 \&\fB\-fno\-toplevel\-reorder\fR and \fB\-fno\-section\-anchors\fR.
6069 .Sp
6070 Enabled by default.
6071 .IP "\fB\-fno\-toplevel\-reorder\fR" 4
6072 .IX Item "-fno-toplevel-reorder"
6073 Do not reorder top-level functions, variables, and \f(CW\*(C`asm\*(C'\fR
6074 statements.  Output them in the same order that they appear in the
6075 input file.  When this option is used, unreferenced static variables
6076 will not be removed.  This option is intended to support existing code
6077 which relies on a particular ordering.  For new code, it is better to
6078 use attributes.
6079 .Sp
6080 Enabled at level \fB\-O0\fR.  When disabled explicitly, it also imply
6081 \&\fB\-fno\-section\-anchors\fR that is otherwise enabled at \fB\-O0\fR on some
6082 targets.
6083 .IP "\fB\-fweb\fR" 4
6084 .IX Item "-fweb"
6085 Constructs webs as commonly used for register allocation purposes and assign
6086 each web individual pseudo register.  This allows the register allocation pass
6087 to operate on pseudos directly, but also strengthens several other optimization
6088 passes, such as \s-1CSE\s0, loop optimizer and trivial dead code remover.  It can,
6089 however, make debugging impossible, since variables will no longer stay in a
6090 \&\*(L"home register\*(R".
6091 .Sp
6092 Enabled by default with \fB\-funroll\-loops\fR.
6093 .IP "\fB\-fwhole\-program\fR" 4
6094 .IX Item "-fwhole-program"
6095 Assume that the current compilation unit represents whole program being
6096 compiled.  All public functions and variables with the exception of \f(CW\*(C`main\*(C'\fR
6097 and those merged by attribute \f(CW\*(C`externally_visible\*(C'\fR become static functions
6098 and in a affect gets more aggressively optimized by interprocedural optimizers.
6099 While this option is equivalent to proper use of \f(CW\*(C`static\*(C'\fR keyword for
6100 programs consisting of single file, in combination with option
6101 \&\fB\-\-combine\fR this flag can be used to compile most of smaller scale C
6102 programs since the functions and variables become local for the whole combined
6103 compilation unit, not for the single source file itself.
6104 .Sp
6105 This option is not supported for Fortran programs.
6106 .IP "\fB\-fcprop\-registers\fR" 4
6107 .IX Item "-fcprop-registers"
6108 After register allocation and post-register allocation instruction splitting,
6109 we perform a copy-propagation pass to try to reduce scheduling dependencies
6110 and occasionally eliminate the copy.
6111 .Sp
6112 Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
6113 .IP "\fB\-fprofile\-correction\fR" 4
6114 .IX Item "-fprofile-correction"
6115 Profiles collected using an instrumented binary for multi-threaded programs may
6116 be inconsistent due to missed counter updates. When this option is specified,
6117 \&\s-1GCC\s0 will use heuristics to correct or smooth out such inconsistencies. By
6118 default, \s-1GCC\s0 will emit an error message when an inconsistent profile is detected.
6119 .IP "\fB\-fprofile\-dir=\fR\fIpath\fR" 4
6120 .IX Item "-fprofile-dir=path"
6121 Set the directory to search the profile data files in to \fIpath\fR.
6122 This option affects only the profile data generated by
6123 \&\fB\-fprofile\-generate\fR, \fB\-ftest\-coverage\fR, \fB\-fprofile\-arcs\fR
6124 and used by \fB\-fprofile\-use\fR and \fB\-fbranch\-probabilities\fR 
6125 and its related options.
6126 By default, \s-1GCC\s0 will use the current directory as \fIpath\fR
6127 thus the profile data file will appear in the same directory as the object file.
6128 .IP "\fB\-fprofile\-generate\fR" 4
6129 .IX Item "-fprofile-generate"
6130 .PD 0
6131 .IP "\fB\-fprofile\-generate=\fR\fIpath\fR" 4
6132 .IX Item "-fprofile-generate=path"
6133 .PD
6134 Enable options usually used for instrumenting application to produce
6135 profile useful for later recompilation with profile feedback based
6136 optimization.  You must use \fB\-fprofile\-generate\fR both when
6137 compiling and when linking your program.
6138 .Sp
6139 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.
6140 .Sp
6141 If \fIpath\fR is specified, \s-1GCC\s0 will look at the \fIpath\fR to find
6142 the profile feedback data files. See \fB\-fprofile\-dir\fR.
6143 .IP "\fB\-fprofile\-use\fR" 4
6144 .IX Item "-fprofile-use"
6145 .PD 0
6146 .IP "\fB\-fprofile\-use=\fR\fIpath\fR" 4
6147 .IX Item "-fprofile-use=path"
6148 .PD
6149 Enable profile feedback directed optimizations, and optimizations
6150 generally profitable only with profile feedback available.
6151 .Sp
6152 The following options are enabled: \f(CW\*(C`\-fbranch\-probabilities\*(C'\fR, \f(CW\*(C`\-fvpt\*(C'\fR,
6153 \&\f(CW\*(C`\-funroll\-loops\*(C'\fR, \f(CW\*(C`\-fpeel\-loops\*(C'\fR
6154 .Sp
6155 By default, \s-1GCC\s0 emits an error message if the feedback profiles do not
6156 match the source code.  This error can be turned into a warning by using
6157 \&\fB\-Wcoverage\-mismatch\fR.  Note this may result in poorly optimized
6158 code.
6159 .Sp
6160 If \fIpath\fR is specified, \s-1GCC\s0 will look at the \fIpath\fR to find
6161 the profile feedback data files. See \fB\-fprofile\-dir\fR.
6162 .IP "\fB\-fdyn\-ipa\fR" 4
6163 .IX Item "-fdyn-ipa"
6164 Perform dynamic inter-procedural analysis. This is used in conjunction with
6165 the \fB\-fprofile\-generate\fR and \fB\-fprofile\-use\fR options.
6166 During the \fB\-fprofile\-generate\fR phase, this flag turns on some additional
6167 instrumentation code that enables dynamic call-graph analysis.
6168 During the \fB\-fprofile\-use\fR phase, this flag enables cross-module
6169 optimizations such as inlining.
6170 .PP
6171 The following options control compiler behavior regarding floating
6172 point arithmetic.  These options trade off between speed and
6173 correctness.  All must be specifically enabled.
6174 .IP "\fB\-ffloat\-store\fR" 4
6175 .IX Item "-ffloat-store"
6176 Do not store floating point variables in registers, and inhibit other
6177 options that might change whether a floating point value is taken from a
6178 register or memory.
6179 .Sp
6180 This option prevents undesirable excess precision on machines such as
6181 the 68000 where the floating registers (of the 68881) keep more
6182 precision than a \f(CW\*(C`double\*(C'\fR is supposed to have.  Similarly for the
6183 x86 architecture.  For most programs, the excess precision does only
6184 good, but a few programs rely on the precise definition of \s-1IEEE\s0 floating
6185 point.  Use \fB\-ffloat\-store\fR for such programs, after modifying
6186 them to store all pertinent intermediate computations into variables.
6187 .IP "\fB\-ffast\-math\fR" 4
6188 .IX Item "-ffast-math"
6189 Sets \fB\-fno\-math\-errno\fR, \fB\-funsafe\-math\-optimizations\fR,
6190 \&\fB\-ffinite\-math\-only\fR, \fB\-fno\-rounding\-math\fR,
6191 \&\fB\-fno\-signaling\-nans\fR and \fB\-fcx\-limited\-range\fR.
6192 .Sp
6193 This option causes the preprocessor macro \f(CW\*(C`_\|_FAST_MATH_\|_\*(C'\fR to be defined.
6194 .Sp
6195 This option is not turned on by any \fB\-O\fR option since
6196 it can result in incorrect output for programs which depend on
6197 an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
6198 math functions. It may, however, yield faster code for programs
6199 that do not require the guarantees of these specifications.
6200 .IP "\fB\-fno\-math\-errno\fR" 4
6201 .IX Item "-fno-math-errno"
6202 Do not set \s-1ERRNO\s0 after calling math functions that are executed
6203 with a single instruction, e.g., sqrt.  A program that relies on
6204 \&\s-1IEEE\s0 exceptions for math error handling may want to use this flag
6205 for speed while maintaining \s-1IEEE\s0 arithmetic compatibility.
6206 .Sp
6207 This option is not turned on by any \fB\-O\fR option since
6208 it can result in incorrect output for programs which depend on
6209 an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
6210 math functions. It may, however, yield faster code for programs
6211 that do not require the guarantees of these specifications.
6212 .Sp
6213 The default is \fB\-fmath\-errno\fR.
6214 .Sp
6215 On Darwin systems, the math library never sets \f(CW\*(C`errno\*(C'\fR.  There is
6216 therefore no reason for the compiler to consider the possibility that
6217 it might, and \fB\-fno\-math\-errno\fR is the default.
6218 .IP "\fB\-funsafe\-math\-optimizations\fR" 4
6219 .IX Item "-funsafe-math-optimizations"
6220 Allow optimizations for floating-point arithmetic that (a) assume
6221 that arguments and results are valid and (b) may violate \s-1IEEE\s0 or
6222 \&\s-1ANSI\s0 standards.  When used at link\-time, it may include libraries
6223 or startup files that change the default \s-1FPU\s0 control word or other
6224 similar optimizations.
6225 .Sp
6226 This option is not turned on by any \fB\-O\fR option since
6227 it can result in incorrect output for programs which depend on
6228 an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
6229 math functions. It may, however, yield faster code for programs
6230 that do not require the guarantees of these specifications.
6231 Enables \fB\-fno\-signed\-zeros\fR, \fB\-fno\-trapping\-math\fR,
6232 \&\fB\-fassociative\-math\fR and \fB\-freciprocal\-math\fR.
6233 .Sp
6234 The default is \fB\-fno\-unsafe\-math\-optimizations\fR.
6235 .IP "\fB\-fassociative\-math\fR" 4
6236 .IX Item "-fassociative-math"
6237 Allow re-association of operands in series of floating-point operations.
6238 This violates the \s-1ISO\s0 C and \*(C+ language standard by possibly changing
6239 computation result.  \s-1NOTE:\s0 re-ordering may change the sign of zero as
6240 well as ignore NaNs and inhibit or create underflow or overflow (and
6241 thus cannot be used on a code which relies on rounding behavior like
6242 \&\f(CW\*(C`(x + 2**52) \- 2**52)\*(C'\fR.  May also reorder floating-point comparisons
6243 and thus may not be used when ordered comparisons are required.
6244 This option requires that both \fB\-fno\-signed\-zeros\fR and
6245 \&\fB\-fno\-trapping\-math\fR be in effect.  Moreover, it doesn't make
6246 much sense with \fB\-frounding\-math\fR.
6247 .Sp
6248 The default is \fB\-fno\-associative\-math\fR.
6249 .IP "\fB\-freciprocal\-math\fR" 4
6250 .IX Item "-freciprocal-math"
6251 Allow the reciprocal of a value to be used instead of dividing by
6252 the value if this enables optimizations.  For example \f(CW\*(C`x / y\*(C'\fR
6253 can be replaced with \f(CW\*(C`x * (1/y)\*(C'\fR which is useful if \f(CW\*(C`(1/y)\*(C'\fR
6254 is subject to common subexpression elimination.  Note that this loses
6255 precision and increases the number of flops operating on the value.
6256 .Sp
6257 The default is \fB\-fno\-reciprocal\-math\fR.
6258 .IP "\fB\-ffinite\-math\-only\fR" 4
6259 .IX Item "-ffinite-math-only"
6260 Allow optimizations for floating-point arithmetic that assume
6261 that arguments and results are not NaNs or +\-Infs.
6262 .Sp
6263 This option is not turned on by any \fB\-O\fR option since
6264 it can result in incorrect output for programs which depend on
6265 an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
6266 math functions. It may, however, yield faster code for programs
6267 that do not require the guarantees of these specifications.
6268 .Sp
6269 The default is \fB\-fno\-finite\-math\-only\fR.
6270 .IP "\fB\-fno\-signed\-zeros\fR" 4
6271 .IX Item "-fno-signed-zeros"
6272 Allow optimizations for floating point arithmetic that ignore the
6273 signedness of zero.  \s-1IEEE\s0 arithmetic specifies the behavior of
6274 distinct +0.0 and \-0.0 values, which then prohibits simplification
6275 of expressions such as x+0.0 or 0.0*x (even with \fB\-ffinite\-math\-only\fR).
6276 This option implies that the sign of a zero result isn't significant.
6277 .Sp
6278 The default is \fB\-fsigned\-zeros\fR.
6279 .IP "\fB\-fno\-trapping\-math\fR" 4
6280 .IX Item "-fno-trapping-math"
6281 Compile code assuming that floating-point operations cannot generate
6282 user-visible traps.  These traps include division by zero, overflow,
6283 underflow, inexact result and invalid operation.  This option requires
6284 that \fB\-fno\-signaling\-nans\fR be in effect.  Setting this option may
6285 allow faster code if one relies on \*(L"non\-stop\*(R" \s-1IEEE\s0 arithmetic, for example.
6286 .Sp
6287 This option should never be turned on by any \fB\-O\fR option since
6288 it can result in incorrect output for programs which depend on
6289 an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
6290 math functions.
6291 .Sp
6292 The default is \fB\-ftrapping\-math\fR.
6293 .IP "\fB\-frounding\-math\fR" 4
6294 .IX Item "-frounding-math"
6295 Disable transformations and optimizations that assume default floating
6296 point rounding behavior.  This is round-to-zero for all floating point
6297 to integer conversions, and round-to-nearest for all other arithmetic
6298 truncations.  This option should be specified for programs that change
6299 the \s-1FP\s0 rounding mode dynamically, or that may be executed with a
6300 non-default rounding mode.  This option disables constant folding of
6301 floating point expressions at compile-time (which may be affected by
6302 rounding mode) and arithmetic transformations that are unsafe in the
6303 presence of sign-dependent rounding modes.
6304 .Sp
6305 The default is \fB\-fno\-rounding\-math\fR.
6306 .Sp
6307 This option is experimental and does not currently guarantee to
6308 disable all \s-1GCC\s0 optimizations that are affected by rounding mode.
6309 Future versions of \s-1GCC\s0 may provide finer control of this setting
6310 using C99's \f(CW\*(C`FENV_ACCESS\*(C'\fR pragma.  This command line option
6311 will be used to specify the default state for \f(CW\*(C`FENV_ACCESS\*(C'\fR.
6312 .IP "\fB\-fsignaling\-nans\fR" 4
6313 .IX Item "-fsignaling-nans"
6314 Compile code assuming that \s-1IEEE\s0 signaling NaNs may generate user-visible
6315 traps during floating-point operations.  Setting this option disables
6316 optimizations that may change the number of exceptions visible with
6317 signaling NaNs.  This option implies \fB\-ftrapping\-math\fR.
6318 .Sp
6319 This option causes the preprocessor macro \f(CW\*(C`_\|_SUPPORT_SNAN_\|_\*(C'\fR to
6320 be defined.
6321 .Sp
6322 The default is \fB\-fno\-signaling\-nans\fR.
6323 .Sp
6324 This option is experimental and does not currently guarantee to
6325 disable all \s-1GCC\s0 optimizations that affect signaling NaN behavior.
6326 .IP "\fB\-fsingle\-precision\-constant\fR" 4
6327 .IX Item "-fsingle-precision-constant"
6328 Treat floating point constant as single precision constant instead of
6329 implicitly converting it to double precision constant.
6330 .IP "\fB\-fcx\-limited\-range\fR" 4
6331 .IX Item "-fcx-limited-range"
6332 When enabled, this option states that a range reduction step is not
6333 needed when performing complex division.  Also, there is no checking
6334 whether the result of a complex multiplication or division is \f(CW\*(C`NaN
6335 + I*NaN\*(C'\fR, with an attempt to rescue the situation in that case.  The
6336 default is \fB\-fno\-cx\-limited\-range\fR, but is enabled by
6337 \&\fB\-ffast\-math\fR.
6338 .Sp
6339 This option controls the default setting of the \s-1ISO\s0 C99
6340 \&\f(CW\*(C`CX_LIMITED_RANGE\*(C'\fR pragma.  Nevertheless, the option applies to
6341 all languages.
6342 .IP "\fB\-fcx\-fortran\-rules\fR" 4
6343 .IX Item "-fcx-fortran-rules"
6344 Complex multiplication and division follow Fortran rules.  Range
6345 reduction is done as part of complex division, but there is no checking
6346 whether the result of a complex multiplication or division is \f(CW\*(C`NaN
6347 + I*NaN\*(C'\fR, with an attempt to rescue the situation in that case.
6348 .Sp
6349 The default is \fB\-fno\-cx\-fortran\-rules\fR.
6350 .PP
6351 The following options control optimizations that may improve
6352 performance, but are not enabled by any \fB\-O\fR options.  This
6353 section includes experimental options that may produce broken code.
6354 .IP "\fB\-fbranch\-probabilities\fR" 4
6355 .IX Item "-fbranch-probabilities"
6356 After running a program compiled with \fB\-fprofile\-arcs\fR, you can compile it a second time using
6357 \&\fB\-fbranch\-probabilities\fR, to improve optimizations based on
6358 the number of times each branch was taken.  When the program
6359 compiled with \fB\-fprofile\-arcs\fR exits it saves arc execution
6360 counts to a file called \fI\fIsourcename\fI.gcda\fR for each source
6361 file.  The information in this data file is very dependent on the
6362 structure of the generated code, so you must use the same source code
6363 and the same optimization options for both compilations.
6364 .Sp
6365 With \fB\-fbranch\-probabilities\fR, \s-1GCC\s0 puts a
6366 \&\fB\s-1REG_BR_PROB\s0\fR note on each \fB\s-1JUMP_INSN\s0\fR and \fB\s-1CALL_INSN\s0\fR.
6367 These can be used to improve optimization.  Currently, they are only
6368 used in one place: in \fIreorg.c\fR, instead of guessing which path a
6369 branch is mostly to take, the \fB\s-1REG_BR_PROB\s0\fR values are used to
6370 exactly determine which path is taken more often.
6371 .IP "\fB\-fprofile\-values\fR" 4
6372 .IX Item "-fprofile-values"
6373 If combined with \fB\-fprofile\-arcs\fR, it adds code so that some
6374 data about values of expressions in the program is gathered.
6375 .Sp
6376 With \fB\-fbranch\-probabilities\fR, it reads back the data gathered
6377 from profiling values of expressions and adds \fB\s-1REG_VALUE_PROFILE\s0\fR
6378 notes to instructions for their later usage in optimizations.
6379 .Sp
6380 Enabled with \fB\-fprofile\-generate\fR and \fB\-fprofile\-use\fR.
6381 .IP "\fB\-fvpt\fR" 4
6382 .IX Item "-fvpt"
6383 If combined with \fB\-fprofile\-arcs\fR, it instructs the compiler to add
6384 a code to gather information about values of expressions.
6385 .Sp
6386 With \fB\-fbranch\-probabilities\fR, it reads back the data gathered
6387 and actually performs the optimizations based on them.
6388 Currently the optimizations include specialization of division operation
6389 using the knowledge about the value of the denominator.
6390 .IP "\fB\-frename\-registers\fR" 4
6391 .IX Item "-frename-registers"
6392 Attempt to avoid false dependencies in scheduled code by making use
6393 of registers left over after register allocation.  This optimization
6394 will most benefit processors with lots of registers.  Depending on the
6395 debug information format adopted by the target, however, it can
6396 make debugging impossible, since variables will no longer stay in
6397 a \*(L"home register\*(R".
6398 .Sp
6399 Enabled by default with \fB\-funroll\-loops\fR.
6400 .IP "\fB\-ftracer\fR" 4
6401 .IX Item "-ftracer"
6402 Perform tail duplication to enlarge superblock size.  This transformation
6403 simplifies the control flow of the function allowing other optimizations to do
6404 better job.
6405 .Sp
6406 Enabled with \fB\-fprofile\-use\fR.
6407 .IP "\fB\-funroll\-loops\fR" 4
6408 .IX Item "-funroll-loops"
6409 Unroll loops whose number of iterations can be determined at compile time or
6410 upon entry to the loop.  \fB\-funroll\-loops\fR implies
6411 \&\fB\-frerun\-cse\-after\-loop\fR, \fB\-fweb\fR and \fB\-frename\-registers\fR.
6412 It also turns on complete loop peeling (i.e. complete removal of loops with
6413 small constant number of iterations).  This option makes code larger, and may
6414 or may not make it run faster.
6415 .Sp
6416 Enabled with \fB\-fprofile\-use\fR.
6417 .IP "\fB\-funroll\-all\-loops\fR" 4
6418 .IX Item "-funroll-all-loops"
6419 Unroll all loops, even if their number of iterations is uncertain when
6420 the loop is entered.  This usually makes programs run more slowly.
6421 \&\fB\-funroll\-all\-loops\fR implies the same options as
6422 \&\fB\-funroll\-loops\fR.
6423 .IP "\fB\-fpeel\-loops\fR" 4
6424 .IX Item "-fpeel-loops"
6425 Peels the loops for that there is enough information that they do not
6426 roll much (from profile feedback).  It also turns on complete loop peeling
6427 (i.e. complete removal of loops with small constant number of iterations).
6428 .Sp
6429 Enabled with \fB\-fprofile\-use\fR.
6430 .IP "\fB\-fmove\-loop\-invariants\fR" 4
6431 .IX Item "-fmove-loop-invariants"
6432 Enables the loop invariant motion pass in the \s-1RTL\s0 loop optimizer.  Enabled
6433 at level \fB\-O1\fR
6434 .IP "\fB\-funswitch\-loops\fR" 4
6435 .IX Item "-funswitch-loops"
6436 Move branches with loop invariant conditions out of the loop, with duplicates
6437 of the loop on both branches (modified according to result of the condition).
6438 .IP "\fB\-ffunction\-sections\fR" 4
6439 .IX Item "-ffunction-sections"
6440 .PD 0
6441 .IP "\fB\-fdata\-sections\fR" 4
6442 .IX Item "-fdata-sections"
6443 .PD
6444 Place each function or data item into its own section in the output
6445 file if the target supports arbitrary sections.  The name of the
6446 function or the name of the data item determines the section's name
6447 in the output file.
6448 .Sp
6449 Use these options on systems where the linker can perform optimizations
6450 to improve locality of reference in the instruction space.  Most systems
6451 using the \s-1ELF\s0 object format and \s-1SPARC\s0 processors running Solaris 2 have
6452 linkers with such optimizations.  \s-1AIX\s0 may have these optimizations in
6453 the future.
6454 .Sp
6455 Only use these options when there are significant benefits from doing
6456 so.  When you specify these options, the assembler and linker will
6457 create larger object and executable files and will also be slower.
6458 You will not be able to use \f(CW\*(C`gprof\*(C'\fR on all systems if you
6459 specify this option and you may have problems with debugging if
6460 you specify both this option and \fB\-g\fR.
6461 .IP "\fB\-fbranch\-target\-load\-optimize\fR" 4
6462 .IX Item "-fbranch-target-load-optimize"
6463 Perform branch target register load optimization before prologue / epilogue
6464 threading.
6465 The use of target registers can typically be exposed only during reload,
6466 thus hoisting loads out of loops and doing inter-block scheduling needs
6467 a separate optimization pass.
6468 .IP "\fB\-fbranch\-target\-load\-optimize2\fR" 4
6469 .IX Item "-fbranch-target-load-optimize2"
6470 Perform branch target register load optimization after prologue / epilogue
6471 threading.
6472 .IP "\fB\-fbtr\-bb\-exclusive\fR" 4
6473 .IX Item "-fbtr-bb-exclusive"
6474 When performing branch target register load optimization, don't reuse
6475 branch target registers in within any basic block.
6476 .IP "\fB\-fstack\-protector\fR" 4
6477 .IX Item "-fstack-protector"
6478 Emit extra code to check for buffer overflows, such as stack smashing
6479 attacks.  This is done by adding a guard variable to functions with
6480 vulnerable objects.  This includes functions that call alloca, and
6481 functions with buffers larger than 8 bytes.  The guards are initialized
6482 when a function is entered and then checked when the function exits.
6483 If a guard check fails, an error message is printed and the program exits.
6484 .IP "\fB\-fstack\-protector\-all\fR" 4
6485 .IX Item "-fstack-protector-all"
6486 Like \fB\-fstack\-protector\fR except that all functions are protected.
6487 .IP "\fB\-fsection\-anchors\fR" 4
6488 .IX Item "-fsection-anchors"
6489 Try to reduce the number of symbolic address calculations by using
6490 shared \*(L"anchor\*(R" symbols to address nearby objects.  This transformation
6491 can help to reduce the number of \s-1GOT\s0 entries and \s-1GOT\s0 accesses on some
6492 targets.
6493 .Sp
6494 For example, the implementation of the following function \f(CW\*(C`foo\*(C'\fR:
6495 .Sp
6496 .Vb 2
6497 \&        static int a, b, c;
6498 \&        int foo (void) { return a + b + c; }
6499 .Ve
6500 .Sp
6501 would usually calculate the addresses of all three variables, but if you
6502 compile it with \fB\-fsection\-anchors\fR, it will access the variables
6503 from a common anchor point instead.  The effect is similar to the
6504 following pseudocode (which isn't valid C):
6505 .Sp
6506 .Vb 5
6507 \&        int foo (void)
6508 \&        {
6509 \&          register int *xr = &x;
6510 \&          return xr[&a \- &x] + xr[&b \- &x] + xr[&c \- &x];
6511 \&        }
6512 .Ve
6513 .Sp
6514 Not all targets support this option.
6515 .IP "\fB\-\-param\fR \fIname\fR\fB=\fR\fIvalue\fR" 4
6516 .IX Item "--param name=value"
6517 In some places, \s-1GCC\s0 uses various constants to control the amount of
6518 optimization that is done.  For example, \s-1GCC\s0 will not inline functions
6519 that contain more that a certain number of instructions.  You can
6520 control some of these constants on the command-line using the
6521 \&\fB\-\-param\fR option.
6522 .Sp
6523 The names of specific parameters, and the meaning of the values, are
6524 tied to the internals of the compiler, and are subject to change
6525 without notice in future releases.
6526 .Sp
6527 In each case, the \fIvalue\fR is an integer.  The allowable choices for
6528 \&\fIname\fR are given in the following table:
6529 .RS 4
6530 .IP "\fBsra-max-structure-size\fR" 4
6531 .IX Item "sra-max-structure-size"
6532 The maximum structure size, in bytes, at which the scalar replacement
6533 of aggregates (\s-1SRA\s0) optimization will perform block copies.  The
6534 default value, 0, implies that \s-1GCC\s0 will select the most appropriate
6535 size itself.
6536 .IP "\fBsra-field-structure-ratio\fR" 4
6537 .IX Item "sra-field-structure-ratio"
6538 The threshold ratio (as a percentage) between instantiated fields and
6539 the complete structure size.  We say that if the ratio of the number
6540 of bytes in instantiated fields to the number of bytes in the complete
6541 structure exceeds this parameter, then block copies are not used.  The
6542 default is 75.
6543 .IP "\fBstruct-reorg-cold-struct-ratio\fR" 4
6544 .IX Item "struct-reorg-cold-struct-ratio"
6545 The threshold ratio (as a percentage) between a structure frequency
6546 and the frequency of the hottest structure in the program.  This parameter
6547 is used by struct-reorg optimization enabled by \fB\-fipa\-struct\-reorg\fR.
6548 We say that if the ratio of a structure frequency, calculated by profiling, 
6549 to the hottest structure frequency in the program is less than this 
6550 parameter, then structure reorganization is not applied to this structure.
6551 The default is 10.
6552 .IP "\fBpredictable-branch-cost-outcome\fR" 4
6553 .IX Item "predictable-branch-cost-outcome"
6554 When branch is predicted to be taken with probability lower than this threshold
6555 (in percent), then it is considered well predictable. The default is 10.
6556 .IP "\fBmax-crossjump-edges\fR" 4
6557 .IX Item "max-crossjump-edges"
6558 The maximum number of incoming edges to consider for crossjumping.
6559 The algorithm used by \fB\-fcrossjumping\fR is O(N^2) in
6560 the number of edges incoming to each block.  Increasing values mean
6561 more aggressive optimization, making the compile time increase with
6562 probably small improvement in executable size.
6563 .IP "\fBmin-crossjump-insns\fR" 4
6564 .IX Item "min-crossjump-insns"
6565 The minimum number of instructions which must be matched at the end
6566 of two blocks before crossjumping will be performed on them.  This
6567 value is ignored in the case where all instructions in the block being
6568 crossjumped from are matched.  The default value is 5.
6569 .IP "\fBmax-grow-copy-bb-insns\fR" 4
6570 .IX Item "max-grow-copy-bb-insns"
6571 The maximum code size expansion factor when copying basic blocks
6572 instead of jumping.  The expansion is relative to a jump instruction.
6573 The default value is 8.
6574 .IP "\fBmax-goto-duplication-insns\fR" 4
6575 .IX Item "max-goto-duplication-insns"
6576 The maximum number of instructions to duplicate to a block that jumps
6577 to a computed goto.  To avoid O(N^2) behavior in a number of
6578 passes, \s-1GCC\s0 factors computed gotos early in the compilation process,
6579 and unfactors them as late as possible.  Only computed jumps at the
6580 end of a basic blocks with no more than max-goto-duplication-insns are
6581 unfactored.  The default value is 8.
6582 .IP "\fBmax-delay-slot-insn-search\fR" 4
6583 .IX Item "max-delay-slot-insn-search"
6584 The maximum number of instructions to consider when looking for an
6585 instruction to fill a delay slot.  If more than this arbitrary number of
6586 instructions is searched, the time savings from filling the delay slot
6587 will be minimal so stop searching.  Increasing values mean more
6588 aggressive optimization, making the compile time increase with probably
6589 small improvement in executable run time.
6590 .IP "\fBmax-delay-slot-live-search\fR" 4
6591 .IX Item "max-delay-slot-live-search"
6592 When trying to fill delay slots, the maximum number of instructions to
6593 consider when searching for a block with valid live register
6594 information.  Increasing this arbitrarily chosen value means more
6595 aggressive optimization, increasing the compile time.  This parameter
6596 should be removed when the delay slot code is rewritten to maintain the
6597 control-flow graph.
6598 .IP "\fBmax-gcse-memory\fR" 4
6599 .IX Item "max-gcse-memory"
6600 The approximate maximum amount of memory that will be allocated in
6601 order to perform the global common subexpression elimination
6602 optimization.  If more memory than specified is required, the
6603 optimization will not be done.
6604 .IP "\fBmax-gcse-passes\fR" 4
6605 .IX Item "max-gcse-passes"
6606 The maximum number of passes of \s-1GCSE\s0 to run.  The default is 1.
6607 .IP "\fBmax-pending-list-length\fR" 4
6608 .IX Item "max-pending-list-length"
6609 The maximum number of pending dependencies scheduling will allow
6610 before flushing the current state and starting over.  Large functions
6611 with few branches or calls can create excessively large lists which
6612 needlessly consume memory and resources.
6613 .IP "\fBmax-inline-insns-single\fR" 4
6614 .IX Item "max-inline-insns-single"
6615 Several parameters control the tree inliner used in gcc.
6616 This number sets the maximum number of instructions (counted in \s-1GCC\s0's
6617 internal representation) in a single function that the tree inliner
6618 will consider for inlining.  This only affects functions declared
6619 inline and methods implemented in a class declaration (\*(C+).
6620 The default value is 450.
6621 .IP "\fBmax-inline-insns-auto\fR" 4
6622 .IX Item "max-inline-insns-auto"
6623 When you use \fB\-finline\-functions\fR (included in \fB\-O3\fR),
6624 a lot of functions that would otherwise not be considered for inlining
6625 by the compiler will be investigated.  To those functions, a different
6626 (potentially more restrictive) limit compared to functions declared inline can
6627 be applied.
6628 The default value is 450.
6629 .IP "\fBinline-limit-increase-with-profile\fR" 4
6630 .IX Item "inline-limit-increase-with-profile"
6631 When profile information is available, such as when compiling
6632 with \fB\-fprofile\-use\fR, the maximum function size
6633 limits \fB\-\-param max-inline-insns-single\fR
6634 and \fB\-\-param max-inline-insns-auto\fR are increased by this percentage
6635 amount.  Profile information increases the selectivity and quality of the
6636 inlining decisions, so having a larger set of candidate functions available
6637 for inlining can improve performance.
6638 The default value is 100.
6639 .IP "\fBlarge-function-insns\fR" 4
6640 .IX Item "large-function-insns"
6641 The limit specifying really large functions.  For functions larger than this
6642 limit after inlining, inlining is constrained by
6643 \&\fB\-\-param large-function-growth\fR.  This parameter is useful primarily
6644 to avoid extreme compilation time caused by non-linear algorithms used by the
6645 backend.
6646 The default value is 2700.
6647 .IP "\fBlarge-function-growth\fR" 4
6648 .IX Item "large-function-growth"
6649 Specifies maximal growth of large function caused by inlining in percents.
6650 The default value is 100 which limits large function growth to 2.0 times
6651 the original size.
6652 .IP "\fBlarge-unit-insns\fR" 4
6653 .IX Item "large-unit-insns"
6654 The limit specifying large translation unit.  Growth caused by inlining of
6655 units larger than this limit is limited by \fB\-\-param inline-unit-growth\fR.
6656 For small units this might be too tight (consider unit consisting of function A
6657 that is inline and B that just calls A three time.  If B is small relative to
6658 A, the growth of unit is 300\e% and yet such inlining is very sane.  For very
6659 large units consisting of small inlineable functions however the overall unit
6660 growth limit is needed to avoid exponential explosion of code size.  Thus for
6661 smaller units, the size is increased to \fB\-\-param large-unit-insns\fR
6662 before applying \fB\-\-param inline-unit-growth\fR.  The default is 10000
6663 .IP "\fBinline-unit-growth\fR" 4
6664 .IX Item "inline-unit-growth"
6665 Specifies maximal overall growth of the compilation unit caused by inlining.
6666 The default value is 30 which limits unit growth to 1.3 times the original
6667 size.
6668 .IP "\fBipcp-unit-growth\fR" 4
6669 .IX Item "ipcp-unit-growth"
6670 Specifies maximal overall growth of the compilation unit caused by
6671 interprocedural constant propagation.  The default value is 10 which limits
6672 unit growth to 1.1 times the original size.
6673 .IP "\fBlarge-stack-frame\fR" 4
6674 .IX Item "large-stack-frame"
6675 The limit specifying large stack frames.  While inlining the algorithm is trying
6676 to not grow past this limit too much.  Default value is 256 bytes.
6677 .IP "\fBlarge-stack-frame-growth\fR" 4
6678 .IX Item "large-stack-frame-growth"
6679 Specifies maximal growth of large stack frames caused by inlining in percents.
6680 The default value is 1000 which limits large stack frame growth to 11 times
6681 the original size.
6682 .IP "\fBmax-inline-insns-recursive\fR" 4
6683 .IX Item "max-inline-insns-recursive"
6684 .PD 0
6685 .IP "\fBmax-inline-insns-recursive-auto\fR" 4
6686 .IX Item "max-inline-insns-recursive-auto"
6687 .PD
6688 Specifies maximum number of instructions out-of-line copy of self recursive inline
6689 function can grow into by performing recursive inlining.
6690 .Sp
6691 For functions declared inline \fB\-\-param max-inline-insns-recursive\fR is
6692 taken into account.  For function not declared inline, recursive inlining
6693 happens only when \fB\-finline\-functions\fR (included in \fB\-O3\fR) is
6694 enabled and \fB\-\-param max-inline-insns-recursive-auto\fR is used.  The
6695 default value is 450.
6696 .IP "\fBmax-inline-recursive-depth\fR" 4
6697 .IX Item "max-inline-recursive-depth"
6698 .PD 0
6699 .IP "\fBmax-inline-recursive-depth-auto\fR" 4
6700 .IX Item "max-inline-recursive-depth-auto"
6701 .PD
6702 Specifies maximum recursion depth used by the recursive inlining.
6703 .Sp
6704 For functions declared inline \fB\-\-param max-inline-recursive-depth\fR is
6705 taken into account.  For function not declared inline, recursive inlining
6706 happens only when \fB\-finline\-functions\fR (included in \fB\-O3\fR) is
6707 enabled and \fB\-\-param max-inline-recursive-depth-auto\fR is used.  The
6708 default value is 8.
6709 .IP "\fBmin-inline-recursive-probability\fR" 4
6710 .IX Item "min-inline-recursive-probability"
6711 Recursive inlining is profitable only for function having deep recursion
6712 in average and can hurt for function having little recursion depth by
6713 increasing the prologue size or complexity of function body to other
6714 optimizers.
6715 .Sp
6716 When profile feedback is available (see \fB\-fprofile\-generate\fR) the actual
6717 recursion depth can be guessed from probability that function will recurse via
6718 given call expression.  This parameter limits inlining only to call expression
6719 whose probability exceeds given threshold (in percents).  The default value is
6720 10.
6721 .IP "\fBinline-call-cost\fR" 4
6722 .IX Item "inline-call-cost"
6723 Specify cost of call instruction relative to simple arithmetics operations
6724 (having cost of 1).  Increasing this cost disqualifies inlining of non-leaf
6725 functions and at the same time increases size of leaf function that is believed to
6726 reduce function size by being inlined.  In effect it increases amount of
6727 inlining for code having large abstraction penalty (many functions that just
6728 pass the arguments to other functions) and decrease inlining for code with low
6729 abstraction penalty.  The default value is 12.
6730 .IP "\fBmin-vect-loop-bound\fR" 4
6731 .IX Item "min-vect-loop-bound"
6732 The minimum number of iterations under which a loop will not get vectorized
6733 when \fB\-ftree\-vectorize\fR is used.  The number of iterations after
6734 vectorization needs to be greater than the value specified by this option
6735 to allow vectorization.  The default value is 0.
6736 .IP "\fBmax-unrolled-insns\fR" 4
6737 .IX Item "max-unrolled-insns"
6738 The maximum number of instructions that a loop should have if that loop
6739 is unrolled, and if the loop is unrolled, it determines how many times
6740 the loop code is unrolled.
6741 .IP "\fBmax-average-unrolled-insns\fR" 4
6742 .IX Item "max-average-unrolled-insns"
6743 The maximum number of instructions biased by probabilities of their execution
6744 that a loop should have if that loop is unrolled, and if the loop is unrolled,
6745 it determines how many times the loop code is unrolled.
6746 .IP "\fBmax-unroll-times\fR" 4
6747 .IX Item "max-unroll-times"
6748 The maximum number of unrollings of a single loop.
6749 .IP "\fBmax-peeled-insns\fR" 4
6750 .IX Item "max-peeled-insns"
6751 The maximum number of instructions that a loop should have if that loop
6752 is peeled, and if the loop is peeled, it determines how many times
6753 the loop code is peeled.
6754 .IP "\fBmax-peel-times\fR" 4
6755 .IX Item "max-peel-times"
6756 The maximum number of peelings of a single loop.
6757 .IP "\fBmax-completely-peeled-insns\fR" 4
6758 .IX Item "max-completely-peeled-insns"
6759 .PD 0
6760 .IP "\fBmax-completely-peeled-insns-feedback\fR" 4
6761 .IX Item "max-completely-peeled-insns-feedback"
6762 .PD
6763 The maximum number of insns of a completely peeled loop.
6764 .Sp
6765 The \fBmax-completely-peeled-insns-feedback\fR is used only when profile
6766 feedback is available and the loop is hot. Because of the real profiles, this
6767 value may set to be larger for hot loops.
6768 .IP "\fBmax-once-peeled-insns\fR" 4
6769 .IX Item "max-once-peeled-insns"
6770 .PD 0
6771 .IP "\fBmax-once-peeled-insns-feedback\fR" 4
6772 .IX Item "max-once-peeled-insns-feedback"
6773 .PD
6774 The maximum number of insns of a peeled loop that rolls only once.
6775 The \fBmax-once-peeled-insns-feedback\fR  is used only when profile feedback
6776 is available and the loop is hot. Because of the real profiles, this value
6777 may set to be larger for hot loops.
6778 .IP "\fBmax-completely-peel-times\fR" 4
6779 .IX Item "max-completely-peel-times"
6780 .PD 0
6781 .IP "\fBmax-completely-peel-times-feedback\fR" 4
6782 .IX Item "max-completely-peel-times-feedback"
6783 .PD
6784 The maximum number of iterations of a loop to be suitable for complete peeling.
6785 .Sp
6786 The \fBmax-completely-peel-times-feedback\fR is used only when profile feedback
6787 is available and the loop is hot. Because of the real profiles, this value may
6788 set to be larger for hot loops.
6789 .IP "\fBmax-unswitch-insns\fR" 4
6790 .IX Item "max-unswitch-insns"
6791 The maximum number of insns of an unswitched loop.
6792 .IP "\fBmax-unswitch-level\fR" 4
6793 .IX Item "max-unswitch-level"
6794 The maximum number of branches unswitched in a single loop.
6795 .IP "\fBlim-expensive\fR" 4
6796 .IX Item "lim-expensive"
6797 The minimum cost of an expensive expression in the loop invariant motion.
6798 .IP "\fBiv-consider-all-candidates-bound\fR" 4
6799 .IX Item "iv-consider-all-candidates-bound"
6800 Bound on number of candidates for induction variables below that
6801 all candidates are considered for each use in induction variable
6802 optimizations.  Only the most relevant candidates are considered
6803 if there are more candidates, to avoid quadratic time complexity.
6804 .IP "\fBiv-max-considered-uses\fR" 4
6805 .IX Item "iv-max-considered-uses"
6806 The induction variable optimizations give up on loops that contain more
6807 induction variable uses.
6808 .IP "\fBiv-always-prune-cand-set-bound\fR" 4
6809 .IX Item "iv-always-prune-cand-set-bound"
6810 If number of candidates in the set is smaller than this value,
6811 we always try to remove unnecessary ivs from the set during its
6812 optimization when a new iv is added to the set.
6813 .IP "\fBscev-max-expr-size\fR" 4
6814 .IX Item "scev-max-expr-size"
6815 Bound on size of expressions used in the scalar evolutions analyzer.
6816 Large expressions slow the analyzer.
6817 .IP "\fBomega-max-vars\fR" 4
6818 .IX Item "omega-max-vars"
6819 The maximum number of variables in an Omega constraint system.
6820 The default value is 128.
6821 .IP "\fBomega-max-geqs\fR" 4
6822 .IX Item "omega-max-geqs"
6823 The maximum number of inequalities in an Omega constraint system.
6824 The default value is 256.
6825 .IP "\fBomega-max-eqs\fR" 4
6826 .IX Item "omega-max-eqs"
6827 The maximum number of equalities in an Omega constraint system.
6828 The default value is 128.
6829 .IP "\fBomega-max-wild-cards\fR" 4
6830 .IX Item "omega-max-wild-cards"
6831 The maximum number of wildcard variables that the Omega solver will
6832 be able to insert.  The default value is 18.
6833 .IP "\fBomega-hash-table-size\fR" 4
6834 .IX Item "omega-hash-table-size"
6835 The size of the hash table in the Omega solver.  The default value is
6836 550.
6837 .IP "\fBomega-max-keys\fR" 4
6838 .IX Item "omega-max-keys"
6839 The maximal number of keys used by the Omega solver.  The default
6840 value is 500.
6841 .IP "\fBomega-eliminate-redundant-constraints\fR" 4
6842 .IX Item "omega-eliminate-redundant-constraints"
6843 When set to 1, use expensive methods to eliminate all redundant
6844 constraints.  The default value is 0.
6845 .IP "\fBvect-max-version-for-alignment-checks\fR" 4
6846 .IX Item "vect-max-version-for-alignment-checks"
6847 The maximum number of runtime checks that can be performed when
6848 doing loop versioning for alignment in the vectorizer.  See option
6849 ftree-vect-loop-version for more information.
6850 .IP "\fBvect-max-version-for-alias-checks\fR" 4
6851 .IX Item "vect-max-version-for-alias-checks"
6852 The maximum number of runtime checks that can be performed when
6853 doing loop versioning for alias in the vectorizer.  See option
6854 ftree-vect-loop-version for more information.
6855 .IP "\fBmax-iterations-to-track\fR" 4
6856 .IX Item "max-iterations-to-track"
6857 The maximum number of iterations of a loop the brute force algorithm
6858 for analysis of # of iterations of the loop tries to evaluate.
6859 .IP "\fBhot-bb-count-fraction\fR" 4
6860 .IX Item "hot-bb-count-fraction"
6861 Select fraction of the maximal count of repetitions of basic block in program
6862 given basic block needs to have to be considered hot.
6863 .IP "\fBhot-bb-frequency-fraction\fR" 4
6864 .IX Item "hot-bb-frequency-fraction"
6865 Select fraction of the maximal frequency of executions of basic block in
6866 function given basic block needs to have to be considered hot
6867 .IP "\fBmax-predicted-iterations\fR" 4
6868 .IX Item "max-predicted-iterations"
6869 The maximum number of loop iterations we predict statically.  This is useful
6870 in cases where function contain single loop with known bound and other loop
6871 with unknown.  We predict the known number of iterations correctly, while
6872 the unknown number of iterations average to roughly 10.  This means that the
6873 loop without bounds would appear artificially cold relative to the other one.
6874 .IP "\fBalign-threshold\fR" 4
6875 .IX Item "align-threshold"
6876 Select fraction of the maximal frequency of executions of basic block in
6877 function given basic block will get aligned.
6878 .IP "\fBalign-loop-iterations\fR" 4
6879 .IX Item "align-loop-iterations"
6880 A loop expected to iterate at lest the selected number of iterations will get
6881 aligned.
6882 .IP "\fBtracer-dynamic-coverage\fR" 4
6883 .IX Item "tracer-dynamic-coverage"
6884 .PD 0
6885 .IP "\fBtracer-dynamic-coverage-feedback\fR" 4
6886 .IX Item "tracer-dynamic-coverage-feedback"
6887 .PD
6888 This value is used to limit superblock formation once the given percentage of
6889 executed instructions is covered.  This limits unnecessary code size
6890 expansion.
6891 .Sp
6892 The \fBtracer-dynamic-coverage-feedback\fR is used only when profile
6893 feedback is available.  The real profiles (as opposed to statically estimated
6894 ones) are much less balanced allowing the threshold to be larger value.
6895 .IP "\fBtracer-max-code-growth\fR" 4
6896 .IX Item "tracer-max-code-growth"
6897 Stop tail duplication once code growth has reached given percentage.  This is
6898 rather hokey argument, as most of the duplicates will be eliminated later in
6899 cross jumping, so it may be set to much higher values than is the desired code
6900 growth.
6901 .IP "\fBtracer-min-branch-ratio\fR" 4
6902 .IX Item "tracer-min-branch-ratio"
6903 Stop reverse growth when the reverse probability of best edge is less than this
6904 threshold (in percent).
6905 .IP "\fBtracer-min-branch-ratio\fR" 4
6906 .IX Item "tracer-min-branch-ratio"
6907 .PD 0
6908 .IP "\fBtracer-min-branch-ratio-feedback\fR" 4
6909 .IX Item "tracer-min-branch-ratio-feedback"
6910 .PD
6911 Stop forward growth if the best edge do have probability lower than this
6912 threshold.
6913 .Sp
6914 Similarly to \fBtracer-dynamic-coverage\fR two values are present, one for
6915 compilation for profile feedback and one for compilation without.  The value
6916 for compilation with profile feedback needs to be more conservative (higher) in
6917 order to make tracer effective.
6918 .IP "\fBmax-cse-path-length\fR" 4
6919 .IX Item "max-cse-path-length"
6920 Maximum number of basic blocks on path that cse considers.  The default is 10.
6921 .IP "\fBmax-cse-insns\fR" 4
6922 .IX Item "max-cse-insns"
6923 The maximum instructions \s-1CSE\s0 process before flushing. The default is 1000.
6924 .IP "\fBmax-aliased-vops\fR" 4
6925 .IX Item "max-aliased-vops"
6926 Maximum number of virtual operands per function allowed to represent
6927 aliases before triggering the alias partitioning heuristic.  Alias
6928 partitioning reduces compile times and memory consumption needed for
6929 aliasing at the expense of precision loss in alias information.  The
6930 default value for this parameter is 100 for \-O1, 500 for \-O2 and 1000
6931 for \-O3.
6932 .Sp
6933 Notice that if a function contains more memory statements than the
6934 value of this parameter, it is not really possible to achieve this
6935 reduction.  In this case, the compiler will use the number of memory
6936 statements as the value for \fBmax-aliased-vops\fR.
6937 .IP "\fBavg-aliased-vops\fR" 4
6938 .IX Item "avg-aliased-vops"
6939 Average number of virtual operands per statement allowed to represent
6940 aliases before triggering the alias partitioning heuristic.  This
6941 works in conjunction with \fBmax-aliased-vops\fR.  If a function
6942 contains more than \fBmax-aliased-vops\fR virtual operators, then
6943 memory symbols will be grouped into memory partitions until either the
6944 total number of virtual operators is below \fBmax-aliased-vops\fR
6945 or the average number of virtual operators per memory statement is
6946 below \fBavg-aliased-vops\fR.  The default value for this parameter
6947 is 1 for \-O1 and \-O2, and 3 for \-O3.
6948 .IP "\fBggc-min-expand\fR" 4
6949 .IX Item "ggc-min-expand"
6950 \&\s-1GCC\s0 uses a garbage collector to manage its own memory allocation.  This
6951 parameter specifies the minimum percentage by which the garbage
6952 collector's heap should be allowed to expand between collections.
6953 Tuning this may improve compilation speed; it has no effect on code
6954 generation.
6955 .Sp
6956 The default is 30% + 70% * (\s-1RAM/1GB\s0) with an upper bound of 100% when
6957 \&\s-1RAM\s0 >= 1GB.  If \f(CW\*(C`getrlimit\*(C'\fR is available, the notion of \*(L"\s-1RAM\s0\*(R" is
6958 the smallest of actual \s-1RAM\s0 and \f(CW\*(C`RLIMIT_DATA\*(C'\fR or \f(CW\*(C`RLIMIT_AS\*(C'\fR.  If
6959 \&\s-1GCC\s0 is not able to calculate \s-1RAM\s0 on a particular platform, the lower
6960 bound of 30% is used.  Setting this parameter and
6961 \&\fBggc-min-heapsize\fR to zero causes a full collection to occur at
6962 every opportunity.  This is extremely slow, but can be useful for
6963 debugging.
6964 .IP "\fBggc-min-heapsize\fR" 4
6965 .IX Item "ggc-min-heapsize"
6966 Minimum size of the garbage collector's heap before it begins bothering
6967 to collect garbage.  The first collection occurs after the heap expands
6968 by \fBggc-min-expand\fR% beyond \fBggc-min-heapsize\fR.  Again,
6969 tuning this may improve compilation speed, and has no effect on code
6970 generation.
6971 .Sp
6972 The default is the smaller of \s-1RAM/8\s0, \s-1RLIMIT_RSS\s0, or a limit which
6973 tries to ensure that \s-1RLIMIT_DATA\s0 or \s-1RLIMIT_AS\s0 are not exceeded, but
6974 with a lower bound of 4096 (four megabytes) and an upper bound of
6975 131072 (128 megabytes).  If \s-1GCC\s0 is not able to calculate \s-1RAM\s0 on a
6976 particular platform, the lower bound is used.  Setting this parameter
6977 very large effectively disables garbage collection.  Setting this
6978 parameter and \fBggc-min-expand\fR to zero causes a full collection
6979 to occur at every opportunity.
6980 .IP "\fBmax-reload-search-insns\fR" 4
6981 .IX Item "max-reload-search-insns"
6982 The maximum number of instruction reload should look backward for equivalent
6983 register.  Increasing values mean more aggressive optimization, making the
6984 compile time increase with probably slightly better performance.  The default
6985 value is 100.
6986 .IP "\fBmax-cselib-memory-locations\fR" 4
6987 .IX Item "max-cselib-memory-locations"
6988 The maximum number of memory locations cselib should take into account.
6989 Increasing values mean more aggressive optimization, making the compile time
6990 increase with probably slightly better performance.  The default value is 500.
6991 .IP "\fBreorder-blocks-duplicate\fR" 4
6992 .IX Item "reorder-blocks-duplicate"
6993 .PD 0
6994 .IP "\fBreorder-blocks-duplicate-feedback\fR" 4
6995 .IX Item "reorder-blocks-duplicate-feedback"
6996 .PD
6997 Used by basic block reordering pass to decide whether to use unconditional
6998 branch or duplicate the code on its destination.  Code is duplicated when its
6999 estimated size is smaller than this value multiplied by the estimated size of
7000 unconditional jump in the hot spots of the program.
7001 .Sp
7002 The \fBreorder-block-duplicate-feedback\fR is used only when profile
7003 feedback is available and may be set to higher values than
7004 \&\fBreorder-block-duplicate\fR since information about the hot spots is more
7005 accurate.
7006 .IP "\fBmax-sched-ready-insns\fR" 4
7007 .IX Item "max-sched-ready-insns"
7008 The maximum number of instructions ready to be issued the scheduler should
7009 consider at any given time during the first scheduling pass.  Increasing
7010 values mean more thorough searches, making the compilation time increase
7011 with probably little benefit.  The default value is 100.
7012 .IP "\fBmax-sched-region-blocks\fR" 4
7013 .IX Item "max-sched-region-blocks"
7014 The maximum number of blocks in a region to be considered for
7015 interblock scheduling.  The default value is 10.
7016 .IP "\fBmax-pipeline-region-blocks\fR" 4
7017 .IX Item "max-pipeline-region-blocks"
7018 The maximum number of blocks in a region to be considered for
7019 pipelining in the selective scheduler.  The default value is 15.
7020 .IP "\fBmax-sched-region-insns\fR" 4
7021 .IX Item "max-sched-region-insns"
7022 The maximum number of insns in a region to be considered for
7023 interblock scheduling.  The default value is 100.
7024 .IP "\fBmax-pipeline-region-insns\fR" 4
7025 .IX Item "max-pipeline-region-insns"
7026 The maximum number of insns in a region to be considered for
7027 pipelining in the selective scheduler.  The default value is 200.
7028 .IP "\fBmin-spec-prob\fR" 4
7029 .IX Item "min-spec-prob"
7030 The minimum probability (in percents) of reaching a source block
7031 for interblock speculative scheduling.  The default value is 40.
7032 .IP "\fBmax-sched-extend-regions-iters\fR" 4
7033 .IX Item "max-sched-extend-regions-iters"
7034 The maximum number of iterations through \s-1CFG\s0 to extend regions.
7035 0 \- disable region extension,
7036 N \- do at most N iterations.
7037 The default value is 0.
7038 .IP "\fBmax-sched-insn-conflict-delay\fR" 4
7039 .IX Item "max-sched-insn-conflict-delay"
7040 The maximum conflict delay for an insn to be considered for speculative motion.
7041 The default value is 3.
7042 .IP "\fBsched-spec-prob-cutoff\fR" 4
7043 .IX Item "sched-spec-prob-cutoff"
7044 The minimal probability of speculation success (in percents), so that
7045 speculative insn will be scheduled.
7046 The default value is 40.
7047 .IP "\fBsched-mem-true-dep-cost\fR" 4
7048 .IX Item "sched-mem-true-dep-cost"
7049 Minimal distance (in \s-1CPU\s0 cycles) between store and load targeting same
7050 memory locations.  The default value is 1.
7051 .IP "\fBselsched-max-lookahead\fR" 4
7052 .IX Item "selsched-max-lookahead"
7053 The maximum size of the lookahead window of selective scheduling.  It is a
7054 depth of search for available instructions.
7055 The default value is 50.
7056 .IP "\fBselsched-max-sched-times\fR" 4
7057 .IX Item "selsched-max-sched-times"
7058 The maximum number of times that an instruction will be scheduled during 
7059 selective scheduling.  This is the limit on the number of iterations 
7060 through which the instruction may be pipelined.  The default value is 2.
7061 .IP "\fBselsched-max-insns-to-rename\fR" 4
7062 .IX Item "selsched-max-insns-to-rename"
7063 The maximum number of best instructions in the ready list that are considered
7064 for renaming in the selective scheduler.  The default value is 2.
7065 .IP "\fBmax-last-value-rtl\fR" 4
7066 .IX Item "max-last-value-rtl"
7067 The maximum size measured as number of RTLs that can be recorded in an expression
7068 in combiner for a pseudo register as last known value of that register.  The default
7069 is 10000.
7070 .IP "\fBinteger-share-limit\fR" 4
7071 .IX Item "integer-share-limit"
7072 Small integer constants can use a shared data structure, reducing the
7073 compiler's memory usage and increasing its speed.  This sets the maximum
7074 value of a shared integer constant.  The default value is 256.
7075 .IP "\fBmin-virtual-mappings\fR" 4
7076 .IX Item "min-virtual-mappings"
7077 Specifies the minimum number of virtual mappings in the incremental
7078 \&\s-1SSA\s0 updater that should be registered to trigger the virtual mappings
7079 heuristic defined by virtual\-mappings\-ratio.  The default value is
7080 100.
7081 .IP "\fBvirtual-mappings-ratio\fR" 4
7082 .IX Item "virtual-mappings-ratio"
7083 If the number of virtual mappings is virtual-mappings-ratio bigger
7084 than the number of virtual symbols to be updated, then the incremental
7085 \&\s-1SSA\s0 updater switches to a full update for those symbols.  The default
7086 ratio is 3.
7087 .IP "\fBssp-buffer-size\fR" 4
7088 .IX Item "ssp-buffer-size"
7089 The minimum size of buffers (i.e. arrays) that will receive stack smashing
7090 protection when \fB\-fstack\-protection\fR is used.
7091 .IP "\fBmax-jump-thread-duplication-stmts\fR" 4
7092 .IX Item "max-jump-thread-duplication-stmts"
7093 Maximum number of statements allowed in a block that needs to be
7094 duplicated when threading jumps.
7095 .IP "\fBmax-fields-for-field-sensitive\fR" 4
7096 .IX Item "max-fields-for-field-sensitive"
7097 Maximum number of fields in a structure we will treat in
7098 a field sensitive manner during pointer analysis.  The default is zero
7099 for \-O0, and \-O1 and 100 for \-Os, \-O2, and \-O3.
7100 .IP "\fBprefetch-latency\fR" 4
7101 .IX Item "prefetch-latency"
7102 Estimate on average number of instructions that are executed before
7103 prefetch finishes.  The distance we prefetch ahead is proportional
7104 to this constant.  Increasing this number may also lead to less
7105 streams being prefetched (see \fBsimultaneous-prefetches\fR).
7106 .IP "\fBsimultaneous-prefetches\fR" 4
7107 .IX Item "simultaneous-prefetches"
7108 Maximum number of prefetches that can run at the same time.
7109 .IP "\fBl1\-cache\-line\-size\fR" 4
7110 .IX Item "l1-cache-line-size"
7111 The size of cache line in L1 cache, in bytes.
7112 .IP "\fBl1\-cache\-size\fR" 4
7113 .IX Item "l1-cache-size"
7114 The size of L1 cache, in kilobytes.
7115 .IP "\fBl2\-cache\-size\fR" 4
7116 .IX Item "l2-cache-size"
7117 The size of L2 cache, in kilobytes.
7118 .IP "\fBuse-canonical-types\fR" 4
7119 .IX Item "use-canonical-types"
7120 Whether the compiler should use the \*(L"canonical\*(R" type system.  By
7121 default, this should always be 1, which uses a more efficient internal
7122 mechanism for comparing types in \*(C+ and Objective\-\*(C+.  However, if
7123 bugs in the canonical type system are causing compilation failures,
7124 set this value to 0 to disable canonical types.
7125 .IP "\fBswitch-conversion-max-branch-ratio\fR" 4
7126 .IX Item "switch-conversion-max-branch-ratio"
7127 Switch initialization conversion will refuse to create arrays that are
7128 bigger than \fBswitch-conversion-max-branch-ratio\fR times the number of
7129 branches in the switch.
7130 .IP "\fBmax-partial-antic-length\fR" 4
7131 .IX Item "max-partial-antic-length"
7132 Maximum length of the partial antic set computed during the tree
7133 partial redundancy elimination optimization (\fB\-ftree\-pre\fR) when
7134 optimizing at \fB\-O3\fR and above.  For some sorts of source code
7135 the enhanced partial redundancy elimination optimization can run away,
7136 consuming all of the memory available on the host machine.  This
7137 parameter sets a limit on the length of the sets that are computed,
7138 which prevents the runaway behavior.  Setting a value of 0 for
7139 this parameter will allow an unlimited set length.
7140 .IP "\fBsccvn-max-scc-size\fR" 4
7141 .IX Item "sccvn-max-scc-size"
7142 Maximum size of a strongly connected component (\s-1SCC\s0) during \s-1SCCVN\s0
7143 processing.  If this limit is hit, \s-1SCCVN\s0 processing for the whole
7144 function will not be done and optimizations depending on it will
7145 be disabled.  The default maximum \s-1SCC\s0 size is 10000.
7146 .IP "\fBira-max-loops-num\fR" 4
7147 .IX Item "ira-max-loops-num"
7148 \&\s-1IRA\s0 uses a regional register allocation by default.  If a function
7149 contains loops more than number given by the parameter, only at most
7150 given number of the most frequently executed loops will form regions
7151 for the regional register allocation.  The default value of the
7152 parameter is 100.
7153 .IP "\fBira-max-conflict-table-size\fR" 4
7154 .IX Item "ira-max-conflict-table-size"
7155 Although \s-1IRA\s0 uses a sophisticated algorithm of compression conflict
7156 table, the table can be still big for huge functions.  If the conflict
7157 table for a function could be more than size in \s-1MB\s0 given by the
7158 parameter, the conflict table is not built and faster, simpler, and
7159 lower quality register allocation algorithm will be used.  The
7160 algorithm do not use pseudo-register conflicts.  The default value of
7161 the parameter is 2000.
7162 .IP "\fBloop-invariant-max-bbs-in-loop\fR" 4
7163 .IX Item "loop-invariant-max-bbs-in-loop"
7164 Loop invariant motion can be very expensive, both in compile time and
7165 in amount of needed compile time memory, with very large loops.  Loops
7166 with more basic blocks than this parameter won't have loop invariant
7167 motion optimization performed on them.  The default value of the
7168 parameter is 1000 for \-O1 and 10000 for \-O2 and above.
7169 .IP "\fBctrl-regpre\fR" 4
7170 .IX Item "ctrl-regpre"
7171 This is a switch to turn on live range shrinking optimization.
7172 .IP "\fBctrl-regpre-mode\fR" 4
7173 .IX Item "ctrl-regpre-mode"
7174 This is used as a control knob to enable different transformations in
7175 the live range shrinking phase. Values of 1, 2, and 4 are used to enable
7176 upward motion, downward motion, and tree reshaping transformations
7177  respectively. The values can be bitwise ORed.
7178 .IP "\fBreg-pressure-min-bb-factor\fR" 4
7179 .IX Item "reg-pressure-min-bb-factor"
7180 A performance tuning knob to control register pressure. When the size
7181 (in the number of gimple statements) of a basic block in a loop is
7182 larger than the threshold specified by this parameter multiplied by the
7183 number of available registers, live range shrinking optimization is enabled.
7184 .IP "\fBreg-pressure-min-tree\fR" 4
7185 .IX Item "reg-pressure-min-tree"
7186 The minimal size (number of leaves) of a tree to be reshaped in the Live
7187 Range Shrinking optimization. 
7188 .RE
7189 .RS 4
7190 .RE
7191 .Sh "Options Controlling the Preprocessor"
7192 .IX Subsection "Options Controlling the Preprocessor"
7193 These options control the C preprocessor, which is run on each C source
7194 file before actual compilation.
7195 .PP
7196 If you use the \fB\-E\fR option, nothing is done except preprocessing.
7197 Some of these options make sense only together with \fB\-E\fR because
7198 they cause the preprocessor output to be unsuitable for actual
7199 compilation.
7200 .Sp
7201 .RS 4
7202 You can use \fB\-Wp,\fR\fIoption\fR to bypass the compiler driver
7203 and pass \fIoption\fR directly through to the preprocessor.  If
7204 \&\fIoption\fR contains commas, it is split into multiple options at the
7205 commas.  However, many options are modified, translated or interpreted
7206 by the compiler driver before being passed to the preprocessor, and
7207 \&\fB\-Wp\fR forcibly bypasses this phase.  The preprocessor's direct
7208 interface is undocumented and subject to change, so whenever possible
7209 you should avoid using \fB\-Wp\fR and let the driver handle the
7210 options instead.
7211 .RE
7212 .IP "\fB\-Xpreprocessor\fR \fIoption\fR" 4
7213 .IX Item "-Xpreprocessor option"
7214 Pass \fIoption\fR as an option to the preprocessor.  You can use this to
7215 supply system-specific preprocessor options which \s-1GCC\s0 does not know how to
7216 recognize.
7217 .Sp
7218 If you want to pass an option that takes an argument, you must use
7219 \&\fB\-Xpreprocessor\fR twice, once for the option and once for the argument.
7220 .IP "\fB\-D\fR \fIname\fR" 4
7221 .IX Item "-D name"
7222 Predefine \fIname\fR as a macro, with definition \f(CW1\fR.
7223 .IP "\fB\-D\fR \fIname\fR\fB=\fR\fIdefinition\fR" 4
7224 .IX Item "-D name=definition"
7225 The contents of \fIdefinition\fR are tokenized and processed as if
7226 they appeared during translation phase three in a \fB#define\fR
7227 directive.  In particular, the definition will be truncated by
7228 embedded newline characters.
7229 .Sp
7230 If you are invoking the preprocessor from a shell or shell-like
7231 program you may need to use the shell's quoting syntax to protect
7232 characters such as spaces that have a meaning in the shell syntax.
7233 .Sp
7234 If you wish to define a function-like macro on the command line, write
7235 its argument list with surrounding parentheses before the equals sign
7236 (if any).  Parentheses are meaningful to most shells, so you will need
7237 to quote the option.  With \fBsh\fR and \fBcsh\fR,
7238 \&\fB\-D'\fR\fIname\fR\fB(\fR\fIargs...\fR\fB)=\fR\fIdefinition\fR\fB'\fR works.
7239 .Sp
7240 \&\fB\-D\fR and \fB\-U\fR options are processed in the order they
7241 are given on the command line.  All \fB\-imacros\fR \fIfile\fR and
7242 \&\fB\-include\fR \fIfile\fR options are processed after all
7243 \&\fB\-D\fR and \fB\-U\fR options.
7244 .IP "\fB\-U\fR \fIname\fR" 4
7245 .IX Item "-U name"
7246 Cancel any previous definition of \fIname\fR, either built in or
7247 provided with a \fB\-D\fR option.
7248 .IP "\fB\-undef\fR" 4
7249 .IX Item "-undef"
7250 Do not predefine any system-specific or GCC-specific macros.  The
7251 standard predefined macros remain defined.
7252 .IP "\fB\-I\fR \fIdir\fR" 4
7253 .IX Item "-I dir"
7254 Add the directory \fIdir\fR to the list of directories to be searched
7255 for header files.
7256 Directories named by \fB\-I\fR are searched before the standard
7257 system include directories.  If the directory \fIdir\fR is a standard
7258 system include directory, the option is ignored to ensure that the
7259 default search order for system directories and the special treatment
7260 of system headers are not defeated
7261 \&.
7262 If \fIdir\fR begins with \f(CW\*(C`=\*(C'\fR, then the \f(CW\*(C`=\*(C'\fR will be replaced
7263 by the sysroot prefix; see \fB\-\-sysroot\fR and \fB\-isysroot\fR.
7264 .IP "\fB\-o\fR \fIfile\fR" 4
7265 .IX Item "-o file"
7266 Write output to \fIfile\fR.  This is the same as specifying \fIfile\fR
7267 as the second non-option argument to \fBcpp\fR.  \fBgcc\fR has a
7268 different interpretation of a second non-option argument, so you must
7269 use \fB\-o\fR to specify the output file.
7270 .IP "\fB\-Wall\fR" 4
7271 .IX Item "-Wall"
7272 Turns on all optional warnings which are desirable for normal code.
7273 At present this is \fB\-Wcomment\fR, \fB\-Wtrigraphs\fR,
7274 \&\fB\-Wmultichar\fR and a warning about integer promotion causing a
7275 change of sign in \f(CW\*(C`#if\*(C'\fR expressions.  Note that many of the
7276 preprocessor's warnings are on by default and have no options to
7277 control them.
7278 .IP "\fB\-Wcomment\fR" 4
7279 .IX Item "-Wcomment"
7280 .PD 0
7281 .IP "\fB\-Wcomments\fR" 4
7282 .IX Item "-Wcomments"
7283 .PD
7284 Warn whenever a comment-start sequence \fB/*\fR appears in a \fB/*\fR
7285 comment, or whenever a backslash-newline appears in a \fB//\fR comment.
7286 (Both forms have the same effect.)
7287 .IP "\fB\-Wtrigraphs\fR" 4
7288 .IX Item "-Wtrigraphs"
7289 Most trigraphs in comments cannot affect the meaning of the program.
7290 However, a trigraph that would form an escaped newline (\fB??/\fR at
7291 the end of a line) can, by changing where the comment begins or ends.
7292 Therefore, only trigraphs that would form escaped newlines produce
7293 warnings inside a comment.
7294 .Sp
7295 This option is implied by \fB\-Wall\fR.  If \fB\-Wall\fR is not
7296 given, this option is still enabled unless trigraphs are enabled.  To
7297 get trigraph conversion without warnings, but get the other
7298 \&\fB\-Wall\fR warnings, use \fB\-trigraphs \-Wall \-Wno\-trigraphs\fR.
7299 .IP "\fB\-Wtraditional\fR" 4
7300 .IX Item "-Wtraditional"
7301 Warn about certain constructs that behave differently in traditional and
7302 \&\s-1ISO\s0 C.  Also warn about \s-1ISO\s0 C constructs that have no traditional C
7303 equivalent, and problematic constructs which should be avoided.
7304 .IP "\fB\-Wundef\fR" 4
7305 .IX Item "-Wundef"
7306 Warn whenever an identifier which is not a macro is encountered in an
7307 \&\fB#if\fR directive, outside of \fBdefined\fR.  Such identifiers are
7308 replaced with zero.
7309 .IP "\fB\-Wunused\-macros\fR" 4
7310 .IX Item "-Wunused-macros"
7311 Warn about macros defined in the main file that are unused.  A macro
7312 is \fIused\fR if it is expanded or tested for existence at least once.
7313 The preprocessor will also warn if the macro has not been used at the
7314 time it is redefined or undefined.
7315 .Sp
7316 Built-in macros, macros defined on the command line, and macros
7317 defined in include files are not warned about.
7318 .Sp
7319 \&\fINote:\fR If a macro is actually used, but only used in skipped
7320 conditional blocks, then \s-1CPP\s0 will report it as unused.  To avoid the
7321 warning in such a case, you might improve the scope of the macro's
7322 definition by, for example, moving it into the first skipped block.
7323 Alternatively, you could provide a dummy use with something like:
7324 .Sp
7325 .Vb 2
7326 \&        #if defined the_macro_causing_the_warning
7327 \&        #endif
7328 .Ve
7329 .IP "\fB\-Wendif\-labels\fR" 4
7330 .IX Item "-Wendif-labels"
7331 Warn whenever an \fB#else\fR or an \fB#endif\fR are followed by text.
7332 This usually happens in code of the form
7333 .Sp
7334 .Vb 5
7335 \&        #if FOO
7336 \&        ...
7337 \&        #else FOO
7338 \&        ...
7339 \&        #endif FOO
7340 .Ve
7341 .Sp
7342 The second and third \f(CW\*(C`FOO\*(C'\fR should be in comments, but often are not
7343 in older programs.  This warning is on by default.
7344 .IP "\fB\-Werror\fR" 4
7345 .IX Item "-Werror"
7346 Make all warnings into hard errors.  Source code which triggers warnings
7347 will be rejected.
7348 .IP "\fB\-Wsystem\-headers\fR" 4
7349 .IX Item "-Wsystem-headers"
7350 Issue warnings for code in system headers.  These are normally unhelpful
7351 in finding bugs in your own code, therefore suppressed.  If you are
7352 responsible for the system library, you may want to see them.
7353 .IP "\fB\-w\fR" 4
7354 .IX Item "-w"
7355 Suppress all warnings, including those which \s-1GNU\s0 \s-1CPP\s0 issues by default.
7356 .IP "\fB\-pedantic\fR" 4
7357 .IX Item "-pedantic"
7358 Issue all the mandatory diagnostics listed in the C standard.  Some of
7359 them are left out by default, since they trigger frequently on harmless
7360 code.
7361 .IP "\fB\-pedantic\-errors\fR" 4
7362 .IX Item "-pedantic-errors"
7363 Issue all the mandatory diagnostics, and make all mandatory diagnostics
7364 into errors.  This includes mandatory diagnostics that \s-1GCC\s0 issues
7365 without \fB\-pedantic\fR but treats as warnings.
7366 .IP "\fB\-M\fR" 4
7367 .IX Item "-M"
7368 Instead of outputting the result of preprocessing, output a rule
7369 suitable for \fBmake\fR describing the dependencies of the main
7370 source file.  The preprocessor outputs one \fBmake\fR rule containing
7371 the object file name for that source file, a colon, and the names of all
7372 the included files, including those coming from \fB\-include\fR or
7373 \&\fB\-imacros\fR command line options.
7374 .Sp
7375 Unless specified explicitly (with \fB\-MT\fR or \fB\-MQ\fR), the
7376 object file name consists of the name of the source file with any
7377 suffix replaced with object file suffix and with any leading directory
7378 parts removed.  If there are many included files then the rule is
7379 split into several lines using \fB\e\fR\-newline.  The rule has no
7380 commands.
7381 .Sp
7382 This option does not suppress the preprocessor's debug output, such as
7383 \&\fB\-dM\fR.  To avoid mixing such debug output with the dependency
7384 rules you should explicitly specify the dependency output file with
7385 \&\fB\-MF\fR, or use an environment variable like
7386 \&\fB\s-1DEPENDENCIES_OUTPUT\s0\fR.  Debug output
7387 will still be sent to the regular output stream as normal.
7388 .Sp
7389 Passing \fB\-M\fR to the driver implies \fB\-E\fR, and suppresses
7390 warnings with an implicit \fB\-w\fR.
7391 .IP "\fB\-MM\fR" 4
7392 .IX Item "-MM"
7393 Like \fB\-M\fR but do not mention header files that are found in
7394 system header directories, nor header files that are included,
7395 directly or indirectly, from such a header.
7396 .Sp
7397 This implies that the choice of angle brackets or double quotes in an
7398 \&\fB#include\fR directive does not in itself determine whether that
7399 header will appear in \fB\-MM\fR dependency output.  This is a
7400 slight change in semantics from \s-1GCC\s0 versions 3.0 and earlier.
7401 .IP "\fB\-MF\fR \fIfile\fR" 4
7402 .IX Item "-MF file"
7403 When used with \fB\-M\fR or \fB\-MM\fR, specifies a
7404 file to write the dependencies to.  If no \fB\-MF\fR switch is given
7405 the preprocessor sends the rules to the same place it would have sent
7406 preprocessed output.
7407 .Sp
7408 When used with the driver options \fB\-MD\fR or \fB\-MMD\fR,
7409 \&\fB\-MF\fR overrides the default dependency output file.
7410 .IP "\fB\-MG\fR" 4
7411 .IX Item "-MG"
7412 In conjunction with an option such as \fB\-M\fR requesting
7413 dependency generation, \fB\-MG\fR assumes missing header files are
7414 generated files and adds them to the dependency list without raising
7415 an error.  The dependency filename is taken directly from the
7416 \&\f(CW\*(C`#include\*(C'\fR directive without prepending any path.  \fB\-MG\fR
7417 also suppresses preprocessed output, as a missing header file renders
7418 this useless.
7419 .Sp
7420 This feature is used in automatic updating of makefiles.
7421 .IP "\fB\-MP\fR" 4
7422 .IX Item "-MP"
7423 This option instructs \s-1CPP\s0 to add a phony target for each dependency
7424 other than the main file, causing each to depend on nothing.  These
7425 dummy rules work around errors \fBmake\fR gives if you remove header
7426 files without updating the \fIMakefile\fR to match.
7427 .Sp
7428 This is typical output:
7429 .Sp
7430 .Vb 1
7431 \&        test.o: test.c test.h
7432 .Ve
7433 .Sp
7434 .Vb 1
7435 \&        test.h:
7436 .Ve
7437 .IP "\fB\-MT\fR \fItarget\fR" 4
7438 .IX Item "-MT target"
7439 Change the target of the rule emitted by dependency generation.  By
7440 default \s-1CPP\s0 takes the name of the main input file, deletes any
7441 directory components and any file suffix such as \fB.c\fR, and
7442 appends the platform's usual object suffix.  The result is the target.
7443 .Sp
7444 An \fB\-MT\fR option will set the target to be exactly the string you
7445 specify.  If you want multiple targets, you can specify them as a single
7446 argument to \fB\-MT\fR, or use multiple \fB\-MT\fR options.
7447 .Sp
7448 For example, \fB\-MT\ '$(objpfx)foo.o'\fR might give
7449 .Sp
7450 .Vb 1
7451 \&        $(objpfx)foo.o: foo.c
7452 .Ve
7453 .IP "\fB\-MQ\fR \fItarget\fR" 4
7454 .IX Item "-MQ target"
7455 Same as \fB\-MT\fR, but it quotes any characters which are special to
7456 Make.  \fB\-MQ\ '$(objpfx)foo.o'\fR gives
7457 .Sp
7458 .Vb 1
7459 \&        $$(objpfx)foo.o: foo.c
7460 .Ve
7461 .Sp
7462 The default target is automatically quoted, as if it were given with
7463 \&\fB\-MQ\fR.
7464 .IP "\fB\-MD\fR" 4
7465 .IX Item "-MD"
7466 \&\fB\-MD\fR is equivalent to \fB\-M \-MF\fR \fIfile\fR, except that
7467 \&\fB\-E\fR is not implied.  The driver determines \fIfile\fR based on
7468 whether an \fB\-o\fR option is given.  If it is, the driver uses its
7469 argument but with a suffix of \fI.d\fR, otherwise it takes the name
7470 of the input file, removes any directory components and suffix, and
7471 applies a \fI.d\fR suffix.
7472 .Sp
7473 If \fB\-MD\fR is used in conjunction with \fB\-E\fR, any
7474 \&\fB\-o\fR switch is understood to specify the dependency output file, but if used without \fB\-E\fR, each \fB\-o\fR
7475 is understood to specify a target object file.
7476 .Sp
7477 Since \fB\-E\fR is not implied, \fB\-MD\fR can be used to generate
7478 a dependency output file as a side-effect of the compilation process.
7479 .IP "\fB\-MMD\fR" 4
7480 .IX Item "-MMD"
7481 Like \fB\-MD\fR except mention only user header files, not system
7482 header files.
7483 .IP "\fB\-fpch\-deps\fR" 4
7484 .IX Item "-fpch-deps"
7485 When using precompiled headers, this flag
7486 will cause the dependency-output flags to also list the files from the
7487 precompiled header's dependencies.  If not specified only the
7488 precompiled header would be listed and not the files that were used to
7489 create it because those files are not consulted when a precompiled
7490 header is used.
7491 .IP "\fB\-fpch\-preprocess\fR" 4
7492 .IX Item "-fpch-preprocess"
7493 This option allows use of a precompiled header together with \fB\-E\fR.  It inserts a special \f(CW\*(C`#pragma\*(C'\fR,
7494 \&\f(CW\*(C`#pragma GCC pch_preprocess "<filename>"\*(C'\fR in the output to mark
7495 the place where the precompiled header was found, and its filename.  When
7496 \&\fB\-fpreprocessed\fR is in use, \s-1GCC\s0 recognizes this \f(CW\*(C`#pragma\*(C'\fR and
7497 loads the \s-1PCH\s0.
7498 .Sp
7499 This option is off by default, because the resulting preprocessed output
7500 is only really suitable as input to \s-1GCC\s0.  It is switched on by
7501 \&\fB\-save\-temps\fR.
7502 .Sp
7503 You should not write this \f(CW\*(C`#pragma\*(C'\fR in your own code, but it is
7504 safe to edit the filename if the \s-1PCH\s0 file is available in a different
7505 location.  The filename may be absolute or it may be relative to \s-1GCC\s0's
7506 current directory.
7507 .IP "\fB\-x c\fR" 4
7508 .IX Item "-x c"
7509 .PD 0
7510 .IP "\fB\-x c++\fR" 4
7511 .IX Item "-x c++"
7512 .IP "\fB\-x objective-c\fR" 4
7513 .IX Item "-x objective-c"
7514 .IP "\fB\-x assembler-with-cpp\fR" 4
7515 .IX Item "-x assembler-with-cpp"
7516 .PD
7517 Specify the source language: C, \*(C+, Objective\-C, or assembly.  This has
7518 nothing to do with standards conformance or extensions; it merely
7519 selects which base syntax to expect.  If you give none of these options,
7520 cpp will deduce the language from the extension of the source file:
7521 \&\fB.c\fR, \fB.cc\fR, \fB.m\fR, or \fB.S\fR.  Some other common
7522 extensions for \*(C+ and assembly are also recognized.  If cpp does not
7523 recognize the extension, it will treat the file as C; this is the most
7524 generic mode.
7525 .Sp
7526 \&\fINote:\fR Previous versions of cpp accepted a \fB\-lang\fR option
7527 which selected both the language and the standards conformance level.
7528 This option has been removed, because it conflicts with the \fB\-l\fR
7529 option.
7530 .IP "\fB\-std=\fR\fIstandard\fR" 4
7531 .IX Item "-std=standard"
7532 .PD 0
7533 .IP "\fB\-ansi\fR" 4
7534 .IX Item "-ansi"
7535 .PD
7536 Specify the standard to which the code should conform.  Currently \s-1CPP\s0
7537 knows about C and \*(C+ standards; others may be added in the future.
7538 .Sp
7539 \&\fIstandard\fR
7540 may be one of:
7541 .RS 4
7542 .ie n .IP """iso9899:1990""" 4
7543 .el .IP "\f(CWiso9899:1990\fR" 4
7544 .IX Item "iso9899:1990"
7545 .PD 0
7546 .ie n .IP """c89""" 4
7547 .el .IP "\f(CWc89\fR" 4
7548 .IX Item "c89"
7549 .PD
7550 The \s-1ISO\s0 C standard from 1990.  \fBc89\fR is the customary shorthand for
7551 this version of the standard.
7552 .Sp
7553 The \fB\-ansi\fR option is equivalent to \fB\-std=c89\fR.
7554 .ie n .IP """iso9899:199409""" 4
7555 .el .IP "\f(CWiso9899:199409\fR" 4
7556 .IX Item "iso9899:199409"
7557 The 1990 C standard, as amended in 1994.
7558 .ie n .IP """iso9899:1999""" 4
7559 .el .IP "\f(CWiso9899:1999\fR" 4
7560 .IX Item "iso9899:1999"
7561 .PD 0
7562 .ie n .IP """c99""" 4
7563 .el .IP "\f(CWc99\fR" 4
7564 .IX Item "c99"
7565 .ie n .IP """iso9899:199x""" 4
7566 .el .IP "\f(CWiso9899:199x\fR" 4
7567 .IX Item "iso9899:199x"
7568 .ie n .IP """c9x""" 4
7569 .el .IP "\f(CWc9x\fR" 4
7570 .IX Item "c9x"
7571 .PD
7572 The revised \s-1ISO\s0 C standard, published in December 1999.  Before
7573 publication, this was known as C9X.
7574 .ie n .IP """gnu89""" 4
7575 .el .IP "\f(CWgnu89\fR" 4
7576 .IX Item "gnu89"
7577 The 1990 C standard plus \s-1GNU\s0 extensions.  This is the default.
7578 .ie n .IP """gnu99""" 4
7579 .el .IP "\f(CWgnu99\fR" 4
7580 .IX Item "gnu99"
7581 .PD 0
7582 .ie n .IP """gnu9x""" 4
7583 .el .IP "\f(CWgnu9x\fR" 4
7584 .IX Item "gnu9x"
7585 .PD
7586 The 1999 C standard plus \s-1GNU\s0 extensions.
7587 .ie n .IP """c++98""" 4
7588 .el .IP "\f(CWc++98\fR" 4
7589 .IX Item "c++98"
7590 The 1998 \s-1ISO\s0 \*(C+ standard plus amendments.
7591 .ie n .IP """gnu++98""" 4
7592 .el .IP "\f(CWgnu++98\fR" 4
7593 .IX Item "gnu++98"
7594 The same as \fB\-std=c++98\fR plus \s-1GNU\s0 extensions.  This is the
7595 default for \*(C+ code.
7596 .RE
7597 .RS 4
7598 .RE
7599 .IP "\fB\-I\-\fR" 4
7600 .IX Item "-I-"
7601 Split the include path.  Any directories specified with \fB\-I\fR
7602 options before \fB\-I\-\fR are searched only for headers requested with
7603 \&\f(CW\*(C`#include\ "\f(CIfile\f(CW"\*(C'\fR; they are not searched for
7604 \&\f(CW\*(C`#include\ <\f(CIfile\f(CW>\*(C'\fR.  If additional directories are
7605 specified with \fB\-I\fR options after the \fB\-I\-\fR, those
7606 directories are searched for all \fB#include\fR directives.
7607 .Sp
7608 In addition, \fB\-I\-\fR inhibits the use of the directory of the current
7609 file directory as the first search directory for \f(CW\*(C`#include\ "\f(CIfile\f(CW"\*(C'\fR.
7610 This option has been deprecated.
7611 .IP "\fB\-nostdinc\fR" 4
7612 .IX Item "-nostdinc"
7613 Do not search the standard system directories for header files.
7614 Only the directories you have specified with \fB\-I\fR options
7615 (and the directory of the current file, if appropriate) are searched.
7616 .IP "\fB\-nostdinc++\fR" 4
7617 .IX Item "-nostdinc++"
7618 Do not search for header files in the \*(C+\-specific standard directories,
7619 but do still search the other standard directories.  (This option is
7620 used when building the \*(C+ library.)
7621 .IP "\fB\-include\fR \fIfile\fR" 4
7622 .IX Item "-include file"
7623 Process \fIfile\fR as if \f(CW\*(C`#include "file"\*(C'\fR appeared as the first
7624 line of the primary source file.  However, the first directory searched
7625 for \fIfile\fR is the preprocessor's working directory \fIinstead of\fR
7626 the directory containing the main source file.  If not found there, it
7627 is searched for in the remainder of the \f(CW\*(C`#include "..."\*(C'\fR search
7628 chain as normal.
7629 .Sp
7630 If multiple \fB\-include\fR options are given, the files are included
7631 in the order they appear on the command line.
7632 .IP "\fB\-imacros\fR \fIfile\fR" 4
7633 .IX Item "-imacros file"
7634 Exactly like \fB\-include\fR, except that any output produced by
7635 scanning \fIfile\fR is thrown away.  Macros it defines remain defined.
7636 This allows you to acquire all the macros from a header without also
7637 processing its declarations.
7638 .Sp
7639 All files specified by \fB\-imacros\fR are processed before all files
7640 specified by \fB\-include\fR.
7641 .IP "\fB\-idirafter\fR \fIdir\fR" 4
7642 .IX Item "-idirafter dir"
7643 Search \fIdir\fR for header files, but do it \fIafter\fR all
7644 directories specified with \fB\-I\fR and the standard system directories
7645 have been exhausted.  \fIdir\fR is treated as a system include directory.
7646 If \fIdir\fR begins with \f(CW\*(C`=\*(C'\fR, then the \f(CW\*(C`=\*(C'\fR will be replaced
7647 by the sysroot prefix; see \fB\-\-sysroot\fR and \fB\-isysroot\fR.
7648 .IP "\fB\-iprefix\fR \fIprefix\fR" 4
7649 .IX Item "-iprefix prefix"
7650 Specify \fIprefix\fR as the prefix for subsequent \fB\-iwithprefix\fR
7651 options.  If the prefix represents a directory, you should include the
7652 final \fB/\fR.
7653 .IP "\fB\-iwithprefix\fR \fIdir\fR" 4
7654 .IX Item "-iwithprefix dir"
7655 .PD 0
7656 .IP "\fB\-iwithprefixbefore\fR \fIdir\fR" 4
7657 .IX Item "-iwithprefixbefore dir"
7658 .PD
7659 Append \fIdir\fR to the prefix specified previously with
7660 \&\fB\-iprefix\fR, and add the resulting directory to the include search
7661 path.  \fB\-iwithprefixbefore\fR puts it in the same place \fB\-I\fR
7662 would; \fB\-iwithprefix\fR puts it where \fB\-idirafter\fR would.
7663 .IP "\fB\-isysroot\fR \fIdir\fR" 4
7664 .IX Item "-isysroot dir"
7665 This option is like the \fB\-\-sysroot\fR option, but applies only to
7666 header files.  See the \fB\-\-sysroot\fR option for more information.
7667 .IP "\fB\-imultilib\fR \fIdir\fR" 4
7668 .IX Item "-imultilib dir"
7669 Use \fIdir\fR as a subdirectory of the directory containing
7670 target-specific \*(C+ headers.
7671 .IP "\fB\-isystem\fR \fIdir\fR" 4
7672 .IX Item "-isystem dir"
7673 Search \fIdir\fR for header files, after all directories specified by
7674 \&\fB\-I\fR but before the standard system directories.  Mark it
7675 as a system directory, so that it gets the same special treatment as
7676 is applied to the standard system directories.
7677 If \fIdir\fR begins with \f(CW\*(C`=\*(C'\fR, then the \f(CW\*(C`=\*(C'\fR will be replaced
7678 by the sysroot prefix; see \fB\-\-sysroot\fR and \fB\-isysroot\fR.
7679 .IP "\fB\-iquote\fR \fIdir\fR" 4
7680 .IX Item "-iquote dir"
7681 Search \fIdir\fR only for header files requested with
7682 \&\f(CW\*(C`#include\ "\f(CIfile\f(CW"\*(C'\fR; they are not searched for
7683 \&\f(CW\*(C`#include\ <\f(CIfile\f(CW>\*(C'\fR, before all directories specified by
7684 \&\fB\-I\fR and before the standard system directories.
7685 If \fIdir\fR begins with \f(CW\*(C`=\*(C'\fR, then the \f(CW\*(C`=\*(C'\fR will be replaced
7686 by the sysroot prefix; see \fB\-\-sysroot\fR and \fB\-isysroot\fR.
7687 .IP "\fB\-fdirectives\-only\fR" 4
7688 .IX Item "-fdirectives-only"
7689 When preprocessing, handle directives, but do not expand macros.
7690 .Sp
7691 The option's behavior depends on the \fB\-E\fR and \fB\-fpreprocessed\fR
7692 options.
7693 .Sp
7694 With \fB\-E\fR, preprocessing is limited to the handling of directives
7695 such as \f(CW\*(C`#define\*(C'\fR, \f(CW\*(C`#ifdef\*(C'\fR, and \f(CW\*(C`#error\*(C'\fR.  Other
7696 preprocessor operations, such as macro expansion and trigraph
7697 conversion are not performed.  In addition, the \fB\-dD\fR option is
7698 implicitly enabled.
7699 .Sp
7700 With \fB\-fpreprocessed\fR, predefinition of command line and most
7701 builtin macros is disabled.  Macros such as \f(CW\*(C`_\|_LINE_\|_\*(C'\fR, which are
7702 contextually dependent, are handled normally.  This enables compilation of
7703 files previously preprocessed with \f(CW\*(C`\-E \-fdirectives\-only\*(C'\fR.
7704 .Sp
7705 With both \fB\-E\fR and \fB\-fpreprocessed\fR, the rules for
7706 \&\fB\-fpreprocessed\fR take precedence.  This enables full preprocessing of
7707 files previously preprocessed with \f(CW\*(C`\-E \-fdirectives\-only\*(C'\fR.
7708 .IP "\fB\-fdollars\-in\-identifiers\fR" 4
7709 .IX Item "-fdollars-in-identifiers"
7710 Accept \fB$\fR in identifiers.
7711 .IP "\fB\-fextended\-identifiers\fR" 4
7712 .IX Item "-fextended-identifiers"
7713 Accept universal character names in identifiers.  This option is
7714 experimental; in a future version of \s-1GCC\s0, it will be enabled by
7715 default for C99 and \*(C+.
7716 .IP "\fB\-fpreprocessed\fR" 4
7717 .IX Item "-fpreprocessed"
7718 Indicate to the preprocessor that the input file has already been
7719 preprocessed.  This suppresses things like macro expansion, trigraph
7720 conversion, escaped newline splicing, and processing of most directives.
7721 The preprocessor still recognizes and removes comments, so that you can
7722 pass a file preprocessed with \fB\-C\fR to the compiler without
7723 problems.  In this mode the integrated preprocessor is little more than
7724 a tokenizer for the front ends.
7725 .Sp
7726 \&\fB\-fpreprocessed\fR is implicit if the input file has one of the
7727 extensions \fB.i\fR, \fB.ii\fR or \fB.mi\fR.  These are the
7728 extensions that \s-1GCC\s0 uses for preprocessed files created by
7729 \&\fB\-save\-temps\fR.
7730 .IP "\fB\-ftabstop=\fR\fIwidth\fR" 4
7731 .IX Item "-ftabstop=width"
7732 Set the distance between tab stops.  This helps the preprocessor report
7733 correct column numbers in warnings or errors, even if tabs appear on the
7734 line.  If the value is less than 1 or greater than 100, the option is
7735 ignored.  The default is 8.
7736 .IP "\fB\-fexec\-charset=\fR\fIcharset\fR" 4
7737 .IX Item "-fexec-charset=charset"
7738 Set the execution character set, used for string and character
7739 constants.  The default is \s-1UTF\-8\s0.  \fIcharset\fR can be any encoding
7740 supported by the system's \f(CW\*(C`iconv\*(C'\fR library routine.
7741 .IP "\fB\-fwide\-exec\-charset=\fR\fIcharset\fR" 4
7742 .IX Item "-fwide-exec-charset=charset"
7743 Set the wide execution character set, used for wide string and
7744 character constants.  The default is \s-1UTF\-32\s0 or \s-1UTF\-16\s0, whichever
7745 corresponds to the width of \f(CW\*(C`wchar_t\*(C'\fR.  As with
7746 \&\fB\-fexec\-charset\fR, \fIcharset\fR can be any encoding supported
7747 by the system's \f(CW\*(C`iconv\*(C'\fR library routine; however, you will have
7748 problems with encodings that do not fit exactly in \f(CW\*(C`wchar_t\*(C'\fR.
7749 .IP "\fB\-finput\-charset=\fR\fIcharset\fR" 4
7750 .IX Item "-finput-charset=charset"
7751 Set the input character set, used for translation from the character
7752 set of the input file to the source character set used by \s-1GCC\s0.  If the
7753 locale does not specify, or \s-1GCC\s0 cannot get this information from the
7754 locale, the default is \s-1UTF\-8\s0.  This can be overridden by either the locale
7755 or this command line option.  Currently the command line option takes
7756 precedence if there's a conflict.  \fIcharset\fR can be any encoding
7757 supported by the system's \f(CW\*(C`iconv\*(C'\fR library routine.
7758 .IP "\fB\-fworking\-directory\fR" 4
7759 .IX Item "-fworking-directory"
7760 Enable generation of linemarkers in the preprocessor output that will
7761 let the compiler know the current working directory at the time of
7762 preprocessing.  When this option is enabled, the preprocessor will
7763 emit, after the initial linemarker, a second linemarker with the
7764 current working directory followed by two slashes.  \s-1GCC\s0 will use this
7765 directory, when it's present in the preprocessed input, as the
7766 directory emitted as the current working directory in some debugging
7767 information formats.  This option is implicitly enabled if debugging
7768 information is enabled, but this can be inhibited with the negated
7769 form \fB\-fno\-working\-directory\fR.  If the \fB\-P\fR flag is
7770 present in the command line, this option has no effect, since no
7771 \&\f(CW\*(C`#line\*(C'\fR directives are emitted whatsoever.
7772 .IP "\fB\-fno\-show\-column\fR" 4
7773 .IX Item "-fno-show-column"
7774 Do not print column numbers in diagnostics.  This may be necessary if
7775 diagnostics are being scanned by a program that does not understand the
7776 column numbers, such as \fBdejagnu\fR.
7777 .IP "\fB\-A\fR \fIpredicate\fR\fB=\fR\fIanswer\fR" 4
7778 .IX Item "-A predicate=answer"
7779 Make an assertion with the predicate \fIpredicate\fR and answer
7780 \&\fIanswer\fR.  This form is preferred to the older form \fB\-A\fR
7781 \&\fIpredicate\fR\fB(\fR\fIanswer\fR\fB)\fR, which is still supported, because
7782 it does not use shell special characters.
7783 .IP "\fB\-A \-\fR\fIpredicate\fR\fB=\fR\fIanswer\fR" 4
7784 .IX Item "-A -predicate=answer"
7785 Cancel an assertion with the predicate \fIpredicate\fR and answer
7786 \&\fIanswer\fR.
7787 .IP "\fB\-dCHARS\fR" 4
7788 .IX Item "-dCHARS"
7789 \&\fI\s-1CHARS\s0\fR is a sequence of one or more of the following characters,
7790 and must not be preceded by a space.  Other characters are interpreted
7791 by the compiler proper, or reserved for future versions of \s-1GCC\s0, and so
7792 are silently ignored.  If you specify characters whose behavior
7793 conflicts, the result is undefined.
7794 .RS 4
7795 .IP "\fBM\fR" 4
7796 .IX Item "M"
7797 Instead of the normal output, generate a list of \fB#define\fR
7798 directives for all the macros defined during the execution of the
7799 preprocessor, including predefined macros.  This gives you a way of
7800 finding out what is predefined in your version of the preprocessor.
7801 Assuming you have no file \fIfoo.h\fR, the command
7802 .Sp
7803 .Vb 1
7804 \&        touch foo.h; cpp \-dM foo.h
7805 .Ve
7806 .Sp
7807 will show all the predefined macros.
7808 .Sp
7809 If you use \fB\-dM\fR without the \fB\-E\fR option, \fB\-dM\fR is
7810 interpreted as a synonym for \fB\-fdump\-rtl\-mach\fR.
7811 .IP "\fBD\fR" 4
7812 .IX Item "D"
7813 Like \fBM\fR except in two respects: it does \fInot\fR include the
7814 predefined macros, and it outputs \fIboth\fR the \fB#define\fR
7815 directives and the result of preprocessing.  Both kinds of output go to
7816 the standard output file.
7817 .IP "\fBN\fR" 4
7818 .IX Item "N"
7819 Like \fBD\fR, but emit only the macro names, not their expansions.
7820 .IP "\fBI\fR" 4
7821 .IX Item "I"
7822 Output \fB#include\fR directives in addition to the result of
7823 preprocessing.
7824 .IP "\fBU\fR" 4
7825 .IX Item "U"
7826 Like \fBD\fR except that only macros that are expanded, or whose
7827 definedness is tested in preprocessor directives, are output; the
7828 output is delayed until the use or test of the macro; and
7829 \&\fB#undef\fR directives are also output for macros tested but
7830 undefined at the time.
7831 .RE
7832 .RS 4
7833 .RE
7834 .IP "\fB\-P\fR" 4
7835 .IX Item "-P"
7836 Inhibit generation of linemarkers in the output from the preprocessor.
7837 This might be useful when running the preprocessor on something that is
7838 not C code, and will be sent to a program which might be confused by the
7839 linemarkers.
7840 .IP "\fB\-C\fR" 4
7841 .IX Item "-C"
7842 Do not discard comments.  All comments are passed through to the output
7843 file, except for comments in processed directives, which are deleted
7844 along with the directive.
7845 .Sp
7846 You should be prepared for side effects when using \fB\-C\fR; it
7847 causes the preprocessor to treat comments as tokens in their own right.
7848 For example, comments appearing at the start of what would be a
7849 directive line have the effect of turning that line into an ordinary
7850 source line, since the first token on the line is no longer a \fB#\fR.
7851 .IP "\fB\-CC\fR" 4
7852 .IX Item "-CC"
7853 Do not discard comments, including during macro expansion.  This is
7854 like \fB\-C\fR, except that comments contained within macros are
7855 also passed through to the output file where the macro is expanded.
7856 .Sp
7857 In addition to the side-effects of the \fB\-C\fR option, the
7858 \&\fB\-CC\fR option causes all \*(C+\-style comments inside a macro
7859 to be converted to C\-style comments.  This is to prevent later use
7860 of that macro from inadvertently commenting out the remainder of
7861 the source line.
7862 .Sp
7863 The \fB\-CC\fR option is generally used to support lint comments.
7864 .IP "\fB\-traditional\-cpp\fR" 4
7865 .IX Item "-traditional-cpp"
7866 Try to imitate the behavior of old-fashioned C preprocessors, as
7867 opposed to \s-1ISO\s0 C preprocessors.
7868 .IP "\fB\-trigraphs\fR" 4
7869 .IX Item "-trigraphs"
7870 Process trigraph sequences.
7871 These are three-character sequences, all starting with \fB??\fR, that
7872 are defined by \s-1ISO\s0 C to stand for single characters.  For example,
7873 \&\fB??/\fR stands for \fB\e\fR, so \fB'??/n'\fR is a character
7874 constant for a newline.  By default, \s-1GCC\s0 ignores trigraphs, but in
7875 standard-conforming modes it converts them.  See the \fB\-std\fR and
7876 \&\fB\-ansi\fR options.
7877 .Sp
7878 The nine trigraphs and their replacements are
7879 .Sp
7880 .Vb 2
7881 \&        Trigraph:       ??(  ??)  ??<  ??>  ??=  ??/  ??'  ??!  ??\-
7882 \&        Replacement:      [    ]    {    }    #    \e    ^    |    ~
7883 .Ve
7884 .IP "\fB\-remap\fR" 4
7885 .IX Item "-remap"
7886 Enable special code to work around file systems which only permit very
7887 short file names, such as \s-1MS\-DOS\s0.
7888 .IP "\fB\-\-help\fR" 4
7889 .IX Item "--help"
7890 .PD 0
7891 .IP "\fB\-\-target\-help\fR" 4
7892 .IX Item "--target-help"
7893 .PD
7894 Print text describing all the command line options instead of
7895 preprocessing anything.
7896 .IP "\fB\-v\fR" 4
7897 .IX Item "-v"
7898 Verbose mode.  Print out \s-1GNU\s0 \s-1CPP\s0's version number at the beginning of
7899 execution, and report the final form of the include path.
7900 .IP "\fB\-H\fR" 4
7901 .IX Item "-H"
7902 Print the name of each header file used, in addition to other normal
7903 activities.  Each name is indented to show how deep in the
7904 \&\fB#include\fR stack it is.  Precompiled header files are also
7905 printed, even if they are found to be invalid; an invalid precompiled
7906 header file is printed with \fB...x\fR and a valid one with \fB...!\fR .
7907 .IP "\fB\-version\fR" 4
7908 .IX Item "-version"
7909 .PD 0
7910 .IP "\fB\-\-version\fR" 4
7911 .IX Item "--version"
7912 .PD
7913 Print out \s-1GNU\s0 \s-1CPP\s0's version number.  With one dash, proceed to
7914 preprocess as normal.  With two dashes, exit immediately.
7915 .Sh "Passing Options to the Assembler"
7916 .IX Subsection "Passing Options to the Assembler"
7917 You can pass options to the assembler.
7918 .IP "\fB\-Wa,\fR\fIoption\fR" 4
7919 .IX Item "-Wa,option"
7920 Pass \fIoption\fR as an option to the assembler.  If \fIoption\fR
7921 contains commas, it is split into multiple options at the commas.
7922 .IP "\fB\-Xassembler\fR \fIoption\fR" 4
7923 .IX Item "-Xassembler option"
7924 Pass \fIoption\fR as an option to the assembler.  You can use this to
7925 supply system-specific assembler options which \s-1GCC\s0 does not know how to
7926 recognize.
7927 .Sp
7928 If you want to pass an option that takes an argument, you must use
7929 \&\fB\-Xassembler\fR twice, once for the option and once for the argument.
7930 .Sh "Options for Linking"
7931 .IX Subsection "Options for Linking"
7932 These options come into play when the compiler links object files into
7933 an executable output file.  They are meaningless if the compiler is
7934 not doing a link step.
7935 .IP "\fIobject-file-name\fR" 4
7936 .IX Item "object-file-name"
7937 A file name that does not end in a special recognized suffix is
7938 considered to name an object file or library.  (Object files are
7939 distinguished from libraries by the linker according to the file
7940 contents.)  If linking is done, these object files are used as input
7941 to the linker.
7942 .IP "\fB\-c\fR" 4
7943 .IX Item "-c"
7944 .PD 0
7945 .IP "\fB\-S\fR" 4
7946 .IX Item "-S"
7947 .IP "\fB\-E\fR" 4
7948 .IX Item "-E"
7949 .PD
7950 If any of these options is used, then the linker is not run, and
7951 object file names should not be used as arguments.  
7952 .IP "\fB\-l\fR\fIlibrary\fR" 4
7953 .IX Item "-llibrary"
7954 .PD 0
7955 .IP "\fB\-l\fR \fIlibrary\fR" 4
7956 .IX Item "-l library"
7957 .PD
7958 Search the library named \fIlibrary\fR when linking.  (The second
7959 alternative with the library as a separate argument is only for
7960 \&\s-1POSIX\s0 compliance and is not recommended.)
7961 .Sp
7962 It makes a difference where in the command you write this option; the
7963 linker searches and processes libraries and object files in the order they
7964 are specified.  Thus, \fBfoo.o \-lz bar.o\fR searches library \fBz\fR
7965 after file \fIfoo.o\fR but before \fIbar.o\fR.  If \fIbar.o\fR refers
7966 to functions in \fBz\fR, those functions may not be loaded.
7967 .Sp
7968 The linker searches a standard list of directories for the library,
7969 which is actually a file named \fIlib\fIlibrary\fI.a\fR.  The linker
7970 then uses this file as if it had been specified precisely by name.
7971 .Sp
7972 The directories searched include several standard system directories
7973 plus any that you specify with \fB\-L\fR.
7974 .Sp
7975 Normally the files found this way are library files\-\-\-archive files
7976 whose members are object files.  The linker handles an archive file by
7977 scanning through it for members which define symbols that have so far
7978 been referenced but not defined.  But if the file that is found is an
7979 ordinary object file, it is linked in the usual fashion.  The only
7980 difference between using an \fB\-l\fR option and specifying a file name
7981 is that \fB\-l\fR surrounds \fIlibrary\fR with \fBlib\fR and \fB.a\fR
7982 and searches several directories.
7983 .IP "\fB\-lobjc\fR" 4
7984 .IX Item "-lobjc"
7985 You need this special case of the \fB\-l\fR option in order to
7986 link an Objective-C or Objective\-\*(C+ program.
7987 .IP "\fB\-nostartfiles\fR" 4
7988 .IX Item "-nostartfiles"
7989 Do not use the standard system startup files when linking.
7990 The standard system libraries are used normally, unless \fB\-nostdlib\fR
7991 or \fB\-nodefaultlibs\fR is used.
7992 .IP "\fB\-nodefaultlibs\fR" 4
7993 .IX Item "-nodefaultlibs"
7994 Do not use the standard system libraries when linking.
7995 Only the libraries you specify will be passed to the linker.
7996 The standard startup files are used normally, unless \fB\-nostartfiles\fR
7997 is used.  The compiler may generate calls to \f(CW\*(C`memcmp\*(C'\fR,
7998 \&\f(CW\*(C`memset\*(C'\fR, \f(CW\*(C`memcpy\*(C'\fR and \f(CW\*(C`memmove\*(C'\fR.
7999 These entries are usually resolved by entries in
8000 libc.  These entry points should be supplied through some other
8001 mechanism when this option is specified.
8002 .IP "\fB\-nostdlib\fR" 4
8003 .IX Item "-nostdlib"
8004 Do not use the standard system startup files or libraries when linking.
8005 No startup files and only the libraries you specify will be passed to
8006 the linker.  The compiler may generate calls to \f(CW\*(C`memcmp\*(C'\fR, \f(CW\*(C`memset\*(C'\fR,
8007 \&\f(CW\*(C`memcpy\*(C'\fR and \f(CW\*(C`memmove\*(C'\fR.
8008 These entries are usually resolved by entries in
8009 libc.  These entry points should be supplied through some other
8010 mechanism when this option is specified.
8011 .Sp
8012 One of the standard libraries bypassed by \fB\-nostdlib\fR and
8013 \&\fB\-nodefaultlibs\fR is \fIlibgcc.a\fR, a library of internal subroutines
8014 that \s-1GCC\s0 uses to overcome shortcomings of particular machines, or special
8015 needs for some languages.
8016 .Sp
8017 In most cases, you need \fIlibgcc.a\fR even when you want to avoid
8018 other standard libraries.  In other words, when you specify \fB\-nostdlib\fR
8019 or \fB\-nodefaultlibs\fR you should usually specify \fB\-lgcc\fR as well.
8020 This ensures that you have no unresolved references to internal \s-1GCC\s0
8021 library subroutines.  (For example, \fB_\|_main\fR, used to ensure \*(C+
8022 constructors will be called.)
8023 .IP "\fB\-pie\fR" 4
8024 .IX Item "-pie"
8025 Produce a position independent executable on targets which support it.
8026 For predictable results, you must also specify the same set of options
8027 that were used to generate code (\fB\-fpie\fR, \fB\-fPIE\fR,
8028 or model suboptions) when you specify this option.
8029 .IP "\fB\-rdynamic\fR" 4
8030 .IX Item "-rdynamic"
8031 Pass the flag \fB\-export\-dynamic\fR to the \s-1ELF\s0 linker, on targets
8032 that support it. This instructs the linker to add all symbols, not
8033 only used ones, to the dynamic symbol table. This option is needed
8034 for some uses of \f(CW\*(C`dlopen\*(C'\fR or to allow obtaining backtraces
8035 from within a program.
8036 .IP "\fB\-s\fR" 4
8037 .IX Item "-s"
8038 Remove all symbol table and relocation information from the executable.
8039 .IP "\fB\-static\fR" 4
8040 .IX Item "-static"
8041 On systems that support dynamic linking, this prevents linking with the shared
8042 libraries.  On other systems, this option has no effect.
8043 .IP "\fB\-shared\fR" 4
8044 .IX Item "-shared"
8045 Produce a shared object which can then be linked with other objects to
8046 form an executable.  Not all systems support this option.  For predictable
8047 results, you must also specify the same set of options that were used to
8048 generate code (\fB\-fpic\fR, \fB\-fPIC\fR, or model suboptions)
8049 when you specify this option.[1]
8050 .IP "\fB\-shared\-libgcc\fR" 4
8051 .IX Item "-shared-libgcc"
8052 .PD 0
8053 .IP "\fB\-static\-libgcc\fR" 4
8054 .IX Item "-static-libgcc"
8055 .PD
8056 On systems that provide \fIlibgcc\fR as a shared library, these options
8057 force the use of either the shared or static version respectively.
8058 If no shared version of \fIlibgcc\fR was built when the compiler was
8059 configured, these options have no effect.
8060 .Sp
8061 There are several situations in which an application should use the
8062 shared \fIlibgcc\fR instead of the static version.  The most common
8063 of these is when the application wishes to throw and catch exceptions
8064 across different shared libraries.  In that case, each of the libraries
8065 as well as the application itself should use the shared \fIlibgcc\fR.
8066 .Sp
8067 Therefore, the G++ and \s-1GCJ\s0 drivers automatically add
8068 \&\fB\-shared\-libgcc\fR whenever you build a shared library or a main
8069 executable, because \*(C+ and Java programs typically use exceptions, so
8070 this is the right thing to do.
8071 .Sp
8072 If, instead, you use the \s-1GCC\s0 driver to create shared libraries, you may
8073 find that they will not always be linked with the shared \fIlibgcc\fR.
8074 If \s-1GCC\s0 finds, at its configuration time, that you have a non-GNU linker
8075 or a \s-1GNU\s0 linker that does not support option \fB\-\-eh\-frame\-hdr\fR,
8076 it will link the shared version of \fIlibgcc\fR into shared libraries
8077 by default.  Otherwise, it will take advantage of the linker and optimize
8078 away the linking with the shared version of \fIlibgcc\fR, linking with
8079 the static version of libgcc by default.  This allows exceptions to
8080 propagate through such shared libraries, without incurring relocation
8081 costs at library load time.
8082 .Sp
8083 However, if a library or main executable is supposed to throw or catch
8084 exceptions, you must link it using the G++ or \s-1GCJ\s0 driver, as appropriate
8085 for the languages used in the program, or using the option
8086 \&\fB\-shared\-libgcc\fR, such that it is linked with the shared
8087 \&\fIlibgcc\fR.
8088 .IP "\fB\-symbolic\fR" 4
8089 .IX Item "-symbolic"
8090 Bind references to global symbols when building a shared object.  Warn
8091 about any unresolved references (unless overridden by the link editor
8092 option \fB\-Xlinker \-z \-Xlinker defs\fR).  Only a few systems support
8093 this option.
8094 .IP "\fB\-T\fR \fIscript\fR" 4
8095 .IX Item "-T script"
8096 Use \fIscript\fR as the linker script.  This option is supported by most
8097 systems using the \s-1GNU\s0 linker.  On some targets, such as bare-board
8098 targets without an operating system, the \fB\-T\fR option may be required 
8099 when linking to avoid references to undefined symbols.
8100 .IP "\fB\-Xlinker\fR \fIoption\fR" 4
8101 .IX Item "-Xlinker option"
8102 Pass \fIoption\fR as an option to the linker.  You can use this to
8103 supply system-specific linker options which \s-1GCC\s0 does not know how to
8104 recognize.
8105 .Sp
8106 If you want to pass an option that takes a separate argument, you must use
8107 \&\fB\-Xlinker\fR twice, once for the option and once for the argument.
8108 For example, to pass \fB\-assert definitions\fR, you must write
8109 \&\fB\-Xlinker \-assert \-Xlinker definitions\fR.  It does not work to write
8110 \&\fB\-Xlinker \*(L"\-assert definitions\*(R"\fR, because this passes the entire
8111 string as a single argument, which is not what the linker expects.
8112 .Sp
8113 When using the \s-1GNU\s0 linker, it is usually more convenient to pass 
8114 arguments to linker options using the \fIoption\fR\fB=\fR\fIvalue\fR
8115 syntax than as separate arguments.  For example, you can specify
8116 \&\fB\-Xlinker \-Map=output.map\fR rather than
8117 \&\fB\-Xlinker \-Map \-Xlinker output.map\fR.  Other linkers may not support
8118 this syntax for command-line options.
8119 .IP "\fB\-Wl,\fR\fIoption\fR" 4
8120 .IX Item "-Wl,option"
8121 Pass \fIoption\fR as an option to the linker.  If \fIoption\fR contains
8122 commas, it is split into multiple options at the commas.  You can use this
8123 syntax to pass an argument to the option.  
8124 For example, \fB\-Wl,\-Map,output.map\fR passes \fB\-Map output.map\fR to the
8125 linker.  When using the \s-1GNU\s0 linker, you can also get the same effect with
8126 \&\fB\-Wl,\-Map=output.map\fR.
8127 .IP "\fB\-u\fR \fIsymbol\fR" 4
8128 .IX Item "-u symbol"
8129 Pretend the symbol \fIsymbol\fR is undefined, to force linking of
8130 library modules to define it.  You can use \fB\-u\fR multiple times with
8131 different symbols to force loading of additional library modules.
8132 .Sh "Options for Directory Search"
8133 .IX Subsection "Options for Directory Search"
8134 These options specify directories to search for header files, for
8135 libraries and for parts of the compiler:
8136 .IP "\fB\-I\fR\fIdir\fR" 4
8137 .IX Item "-Idir"
8138 Add the directory \fIdir\fR to the head of the list of directories to be
8139 searched for header files.  This can be used to override a system header
8140 file, substituting your own version, since these directories are
8141 searched before the system header file directories.  However, you should
8142 not use this option to add directories that contain vendor-supplied
8143 system header files (use \fB\-isystem\fR for that).  If you use more than
8144 one \fB\-I\fR option, the directories are scanned in left-to-right
8145 order; the standard system directories come after.
8146 .Sp
8147 If a standard system include directory, or a directory specified with
8148 \&\fB\-isystem\fR, is also specified with \fB\-I\fR, the \fB\-I\fR
8149 option will be ignored.  The directory will still be searched but as a
8150 system directory at its normal position in the system include chain.
8151 This is to ensure that \s-1GCC\s0's procedure to fix buggy system headers and
8152 the ordering for the include_next directive are not inadvertently changed.
8153 If you really need to change the search order for system directories,
8154 use the \fB\-nostdinc\fR and/or \fB\-isystem\fR options.
8155 .IP "\fB\-iquote\fR\fIdir\fR" 4
8156 .IX Item "-iquotedir"
8157 Add the directory \fIdir\fR to the head of the list of directories to
8158 be searched for header files only for the case of \fB#include
8159 "\fR\fIfile\fR\fB"\fR; they are not searched for \fB#include <\fR\fIfile\fR\fB>\fR,
8160 otherwise just like \fB\-I\fR.
8161 .IP "\fB\-L\fR\fIdir\fR" 4
8162 .IX Item "-Ldir"
8163 Add directory \fIdir\fR to the list of directories to be searched
8164 for \fB\-l\fR.
8165 .IP "\fB\-B\fR\fIprefix\fR" 4
8166 .IX Item "-Bprefix"
8167 This option specifies where to find the executables, libraries,
8168 include files, and data files of the compiler itself.
8169 .Sp
8170 The compiler driver program runs one or more of the subprograms
8171 \&\fIcpp\fR, \fIcc1\fR, \fIas\fR and \fIld\fR.  It tries
8172 \&\fIprefix\fR as a prefix for each program it tries to run, both with and
8173 without \fImachine\fR\fB/\fR\fIversion\fR\fB/\fR.
8174 .Sp
8175 For each subprogram to be run, the compiler driver first tries the
8176 \&\fB\-B\fR prefix, if any.  If that name is not found, or if \fB\-B\fR
8177 was not specified, the driver tries two standard prefixes, which are
8178 \&\fI/usr/lib/gcc/\fR and \fI/usr/local/lib/gcc/\fR.  If neither of
8179 those results in a file name that is found, the unmodified program
8180 name is searched for using the directories specified in your
8181 \&\fB\s-1PATH\s0\fR environment variable.
8182 .Sp
8183 The compiler will check to see if the path provided by the \fB\-B\fR
8184 refers to a directory, and if necessary it will add a directory
8185 separator character at the end of the path.
8186 .Sp
8187 \&\fB\-B\fR prefixes that effectively specify directory names also apply
8188 to libraries in the linker, because the compiler translates these
8189 options into \fB\-L\fR options for the linker.  They also apply to
8190 includes files in the preprocessor, because the compiler translates these
8191 options into \fB\-isystem\fR options for the preprocessor.  In this case,
8192 the compiler appends \fBinclude\fR to the prefix.
8193 .Sp
8194 The run-time support file \fIlibgcc.a\fR can also be searched for using
8195 the \fB\-B\fR prefix, if needed.  If it is not found there, the two
8196 standard prefixes above are tried, and that is all.  The file is left
8197 out of the link if it is not found by those means.
8198 .Sp
8199 Another way to specify a prefix much like the \fB\-B\fR prefix is to use
8200 the environment variable \fB\s-1GCC_EXEC_PREFIX\s0\fR.  
8201 .Sp
8202 As a special kludge, if the path provided by \fB\-B\fR is
8203 \&\fI[dir/]stage\fIN\fI/\fR, where \fIN\fR is a number in the range 0 to
8204 9, then it will be replaced by \fI[dir/]include\fR.  This is to help
8205 with boot-strapping the compiler.
8206 .IP "\fB\-specs=\fR\fIfile\fR" 4
8207 .IX Item "-specs=file"
8208 Process \fIfile\fR after the compiler reads in the standard \fIspecs\fR
8209 file, in order to override the defaults that the \fIgcc\fR driver
8210 program uses when determining what switches to pass to \fIcc1\fR,
8211 \&\fIcc1plus\fR, \fIas\fR, \fIld\fR, etc.  More than one
8212 \&\fB\-specs=\fR\fIfile\fR can be specified on the command line, and they
8213 are processed in order, from left to right.
8214 .IP "\fB\-\-sysroot=\fR\fIdir\fR" 4
8215 .IX Item "--sysroot=dir"
8216 Use \fIdir\fR as the logical root directory for headers and libraries.
8217 For example, if the compiler would normally search for headers in
8218 \&\fI/usr/include\fR and libraries in \fI/usr/lib\fR, it will instead
8219 search \fI\fIdir\fI/usr/include\fR and \fI\fIdir\fI/usr/lib\fR.
8220 .Sp
8221 If you use both this option and the \fB\-isysroot\fR option, then
8222 the \fB\-\-sysroot\fR option will apply to libraries, but the
8223 \&\fB\-isysroot\fR option will apply to header files.
8224 .Sp
8225 The \s-1GNU\s0 linker (beginning with version 2.16) has the necessary support
8226 for this option.  If your linker does not support this option, the
8227 header file aspect of \fB\-\-sysroot\fR will still work, but the
8228 library aspect will not.
8229 .IP "\fB\-I\-\fR" 4
8230 .IX Item "-I-"
8231 This option has been deprecated.  Please use \fB\-iquote\fR instead for
8232 \&\fB\-I\fR directories before the \fB\-I\-\fR and remove the \fB\-I\-\fR.
8233 Any directories you specify with \fB\-I\fR options before the \fB\-I\-\fR
8234 option are searched only for the case of \fB#include "\fR\fIfile\fR\fB"\fR;
8235 they are not searched for \fB#include <\fR\fIfile\fR\fB>\fR.
8236 .Sp
8237 If additional directories are specified with \fB\-I\fR options after
8238 the \fB\-I\-\fR, these directories are searched for all \fB#include\fR
8239 directives.  (Ordinarily \fIall\fR \fB\-I\fR directories are used
8240 this way.)
8241 .Sp
8242 In addition, the \fB\-I\-\fR option inhibits the use of the current
8243 directory (where the current input file came from) as the first search
8244 directory for \fB#include "\fR\fIfile\fR\fB"\fR.  There is no way to
8245 override this effect of \fB\-I\-\fR.  With \fB\-I.\fR you can specify
8246 searching the directory which was current when the compiler was
8247 invoked.  That is not exactly the same as what the preprocessor does
8248 by default, but it is often satisfactory.
8249 .Sp
8250 \&\fB\-I\-\fR does not inhibit the use of the standard system directories
8251 for header files.  Thus, \fB\-I\-\fR and \fB\-nostdinc\fR are
8252 independent.
8253 .Sh "Specifying Target Machine and Compiler Version"
8254 .IX Subsection "Specifying Target Machine and Compiler Version"
8255 The usual way to run \s-1GCC\s0 is to run the executable called \fIgcc\fR, or
8256 \&\fI<machine>\-gcc\fR when cross\-compiling, or
8257 \&\fI<machine>\-gcc\-<version>\fR to run a version other than the one that
8258 was installed last.  Sometimes this is inconvenient, so \s-1GCC\s0 provides
8259 options that will switch to another cross-compiler or version.
8260 .IP "\fB\-b\fR \fImachine\fR" 4
8261 .IX Item "-b machine"
8262 The argument \fImachine\fR specifies the target machine for compilation.
8263 .Sp
8264 The value to use for \fImachine\fR is the same as was specified as the
8265 machine type when configuring \s-1GCC\s0 as a cross\-compiler.  For
8266 example, if a cross-compiler was configured with \fBconfigure
8267 arm-elf\fR, meaning to compile for an arm processor with elf binaries,
8268 then you would specify \fB\-b arm-elf\fR to run that cross compiler.
8269 Because there are other options beginning with \fB\-b\fR, the
8270 configuration must contain a hyphen, or \fB\-b\fR alone should be one
8271 argument followed by the configuration in the next argument.
8272 .IP "\fB\-V\fR \fIversion\fR" 4
8273 .IX Item "-V version"
8274 The argument \fIversion\fR specifies which version of \s-1GCC\s0 to run.
8275 This is useful when multiple versions are installed.  For example,
8276 \&\fIversion\fR might be \fB4.0\fR, meaning to run \s-1GCC\s0 version 4.0.
8277 .PP
8278 The \fB\-V\fR and \fB\-b\fR options work by running the
8279 \&\fI<machine>\-gcc\-<version>\fR executable, so there's no real reason to
8280 use them if you can just run that directly.
8281 .Sh "Hardware Models and Configurations"
8282 .IX Subsection "Hardware Models and Configurations"
8283 Earlier we discussed the standard option \fB\-b\fR which chooses among
8284 different installed compilers for completely different target
8285 machines, such as \s-1VAX\s0 vs. 68000 vs. 80386.
8286 .PP
8287 In addition, each of these target machine types can have its own
8288 special options, starting with \fB\-m\fR, to choose among various
8289 hardware models or configurations\-\-\-for example, 68010 vs 68020,
8290 floating coprocessor or none.  A single installed version of the
8291 compiler can compile for any model or configuration, according to the
8292 options specified.
8293 .PP
8294 Some configurations of the compiler also support additional special
8295 options, usually for compatibility with other compilers on the same
8296 platform.
8297 .PP
8298 \fI\s-1ARC\s0 Options\fR
8299 .IX Subsection "ARC Options"
8300 .PP
8301 These options are defined for \s-1ARC\s0 implementations:
8302 .IP "\fB\-EL\fR" 4
8303 .IX Item "-EL"
8304 Compile code for little endian mode.  This is the default.
8305 .IP "\fB\-EB\fR" 4
8306 .IX Item "-EB"
8307 Compile code for big endian mode.
8308 .IP "\fB\-mmangle\-cpu\fR" 4
8309 .IX Item "-mmangle-cpu"
8310 Prepend the name of the cpu to all public symbol names.
8311 In multiple-processor systems, there are many \s-1ARC\s0 variants with different
8312 instruction and register set characteristics.  This flag prevents code
8313 compiled for one cpu to be linked with code compiled for another.
8314 No facility exists for handling variants that are \*(L"almost identical\*(R".
8315 This is an all or nothing option.
8316 .IP "\fB\-mcpu=\fR\fIcpu\fR" 4
8317 .IX Item "-mcpu=cpu"
8318 Compile code for \s-1ARC\s0 variant \fIcpu\fR.
8319 Which variants are supported depend on the configuration.
8320 All variants support \fB\-mcpu=base\fR, this is the default.
8321 .IP "\fB\-mtext=\fR\fItext-section\fR" 4
8322 .IX Item "-mtext=text-section"
8323 .PD 0
8324 .IP "\fB\-mdata=\fR\fIdata-section\fR" 4
8325 .IX Item "-mdata=data-section"
8326 .IP "\fB\-mrodata=\fR\fIreadonly-data-section\fR" 4
8327 .IX Item "-mrodata=readonly-data-section"
8328 .PD
8329 Put functions, data, and readonly data in \fItext-section\fR,
8330 \&\fIdata-section\fR, and \fIreadonly-data-section\fR respectively
8331 by default.  This can be overridden with the \f(CW\*(C`section\*(C'\fR attribute.
8332 .IP "\fB\-mfix\-cortex\-m3\-ldrd\fR" 4
8333 .IX Item "-mfix-cortex-m3-ldrd"
8334 Some Cortex\-M3 cores can cause data corruption when \f(CW\*(C`ldrd\*(C'\fR instructions
8335 with overlapping destination and base registers are used.  This option avoids
8336 generating these instructions.  This option is enabled by default when
8337 \&\fB\-mcpu=cortex\-m3\fR is specified.
8338 .PP
8339 \fI\s-1ARM\s0 Options\fR
8340 .IX Subsection "ARM Options"
8341 .PP
8342 These \fB\-m\fR options are defined for Advanced \s-1RISC\s0 Machines (\s-1ARM\s0)
8343 architectures:
8344 .IP "\fB\-mabi=\fR\fIname\fR" 4
8345 .IX Item "-mabi=name"
8346 Generate code for the specified \s-1ABI\s0.  Permissible values are: \fBapcs-gnu\fR,
8347 \&\fBatpcs\fR, \fBaapcs\fR, \fBaapcs-linux\fR and \fBiwmmxt\fR.
8348 .IP "\fB\-mapcs\-frame\fR" 4
8349 .IX Item "-mapcs-frame"
8350 Generate a stack frame that is compliant with the \s-1ARM\s0 Procedure Call
8351 Standard for all functions, even if this is not strictly necessary for
8352 correct execution of the code.  Specifying \fB\-fomit\-frame\-pointer\fR
8353 with this option will cause the stack frames not to be generated for
8354 leaf functions.  The default is \fB\-mno\-apcs\-frame\fR.
8355 .IP "\fB\-mapcs\fR" 4
8356 .IX Item "-mapcs"
8357 This is a synonym for \fB\-mapcs\-frame\fR.
8358 .IP "\fB\-mthumb\-interwork\fR" 4
8359 .IX Item "-mthumb-interwork"
8360 Generate code which supports calling between the \s-1ARM\s0 and Thumb
8361 instruction sets.  Without this option the two instruction sets cannot
8362 be reliably used inside one program.  The default is
8363 \&\fB\-mno\-thumb\-interwork\fR, since slightly larger code is generated
8364 when \fB\-mthumb\-interwork\fR is specified.
8365 .IP "\fB\-mno\-sched\-prolog\fR" 4
8366 .IX Item "-mno-sched-prolog"
8367 Prevent the reordering of instructions in the function prolog, or the
8368 merging of those instruction with the instructions in the function's
8369 body.  This means that all functions will start with a recognizable set
8370 of instructions (or in fact one of a choice from a small set of
8371 different function prologues), and this information can be used to
8372 locate the start if functions inside an executable piece of code.  The
8373 default is \fB\-msched\-prolog\fR.
8374 .IP "\fB\-mfloat\-abi=\fR\fIname\fR" 4
8375 .IX Item "-mfloat-abi=name"
8376 Specifies which floating-point \s-1ABI\s0 to use.  Permissible values
8377 are: \fBsoft\fR, \fBsoftfp\fR and \fBhard\fR.
8378 .Sp
8379 Specifying \fBsoft\fR causes \s-1GCC\s0 to generate output containing 
8380 library calls for floating-point operations.
8381 \&\fBsoftfp\fR allows the generation of code using hardware floating-point 
8382 instructions, but still uses the soft-float calling conventions.  
8383 \&\fBhard\fR allows generation of floating-point instructions 
8384 and uses FPU-specific calling conventions.
8385 .Sp
8386 Using \fB\-mfloat\-abi=hard\fR with \s-1VFP\s0 coprocessors is not supported.
8387 Use \fB\-mfloat\-abi=softfp\fR with the appropriate \fB\-mfpu\fR option
8388 to allow the compiler to generate code that makes use of the hardware
8389 floating-point capabilities for these CPUs.
8390 .Sp
8391 The default depends on the specific target configuration.  Note that
8392 the hard-float and soft-float ABIs are not link\-compatible; you must
8393 compile your entire program with the same \s-1ABI\s0, and link with a
8394 compatible set of libraries.
8395 .IP "\fB\-mhard\-float\fR" 4
8396 .IX Item "-mhard-float"
8397 Equivalent to \fB\-mfloat\-abi=hard\fR.
8398 .IP "\fB\-msoft\-float\fR" 4
8399 .IX Item "-msoft-float"
8400 Equivalent to \fB\-mfloat\-abi=soft\fR.
8401 .IP "\fB\-mlittle\-endian\fR" 4
8402 .IX Item "-mlittle-endian"
8403 Generate code for a processor running in little-endian mode.  This is
8404 the default for all standard configurations.
8405 .IP "\fB\-mbig\-endian\fR" 4
8406 .IX Item "-mbig-endian"
8407 Generate code for a processor running in big-endian mode; the default is
8408 to compile code for a little-endian processor.
8409 .IP "\fB\-mwords\-little\-endian\fR" 4
8410 .IX Item "-mwords-little-endian"
8411 This option only applies when generating code for big-endian processors.
8412 Generate code for a little-endian word order but a big-endian byte
8413 order.  That is, a byte order of the form \fB32107654\fR.  Note: this
8414 option should only be used if you require compatibility with code for
8415 big-endian \s-1ARM\s0 processors generated by versions of the compiler prior to
8416 2.8.
8417 .IP "\fB\-mcpu=\fR\fIname\fR" 4
8418 .IX Item "-mcpu=name"
8419 This specifies the name of the target \s-1ARM\s0 processor.  \s-1GCC\s0 uses this name
8420 to determine what kind of instructions it can emit when generating
8421 assembly code.  Permissible names are: \fBarm2\fR, \fBarm250\fR,
8422 \&\fBarm3\fR, \fBarm6\fR, \fBarm60\fR, \fBarm600\fR, \fBarm610\fR,
8423 \&\fBarm620\fR, \fBarm7\fR, \fBarm7m\fR, \fBarm7d\fR, \fBarm7dm\fR,
8424 \&\fBarm7di\fR, \fBarm7dmi\fR, \fBarm70\fR, \fBarm700\fR,
8425 \&\fBarm700i\fR, \fBarm710\fR, \fBarm710c\fR, \fBarm7100\fR,
8426 \&\fBarm720\fR,
8427 \&\fBarm7500\fR, \fBarm7500fe\fR, \fBarm7tdmi\fR, \fBarm7tdmi\-s\fR,
8428 \&\fBarm710t\fR, \fBarm720t\fR, \fBarm740t\fR,
8429 \&\fBstrongarm\fR, \fBstrongarm110\fR, \fBstrongarm1100\fR,
8430 \&\fBstrongarm1110\fR,
8431 \&\fBarm8\fR, \fBarm810\fR, \fBarm9\fR, \fBarm9e\fR, \fBarm920\fR,
8432 \&\fBarm920t\fR, \fBarm922t\fR, \fBarm946e\-s\fR, \fBarm966e\-s\fR,
8433 \&\fBarm968e\-s\fR, \fBarm926ej\-s\fR, \fBarm940t\fR, \fBarm9tdmi\fR,
8434 \&\fBarm10tdmi\fR, \fBarm1020t\fR, \fBarm1026ej\-s\fR,
8435 \&\fBarm10e\fR, \fBarm1020e\fR, \fBarm1022e\fR,
8436 \&\fBarm1136j\-s\fR, \fBarm1136jf\-s\fR, \fBmpcore\fR, \fBmpcorenovfp\fR,
8437 \&\fBarm1156t2\-s\fR, \fBarm1176jz\-s\fR, \fBarm1176jzf\-s\fR,
8438 \&\fBcortex\-a8\fR, \fBcortex\-a9\fR,
8439 \&\fBcortex\-r4\fR, \fBcortex\-r4f\fR, \fBcortex\-m3\fR,
8440 \&\fBcortex\-m1\fR,
8441 \&\fBxscale\fR, \fBiwmmxt\fR, \fBiwmmxt2\fR, \fBep9312\fR.
8442 .IP "\fB\-mtune=\fR\fIname\fR" 4
8443 .IX Item "-mtune=name"
8444 This option is very similar to the \fB\-mcpu=\fR option, except that
8445 instead of specifying the actual target processor type, and hence
8446 restricting which instructions can be used, it specifies that \s-1GCC\s0 should
8447 tune the performance of the code as if the target were of the type
8448 specified in this option, but still choosing the instructions that it
8449 will generate based on the cpu specified by a \fB\-mcpu=\fR option.
8450 For some \s-1ARM\s0 implementations better performance can be obtained by using
8451 this option.
8452 .IP "\fB\-march=\fR\fIname\fR" 4
8453 .IX Item "-march=name"
8454 This specifies the name of the target \s-1ARM\s0 architecture.  \s-1GCC\s0 uses this
8455 name to determine what kind of instructions it can emit when generating
8456 assembly code.  This option can be used in conjunction with or instead
8457 of the \fB\-mcpu=\fR option.  Permissible names are: \fBarmv2\fR,
8458 \&\fBarmv2a\fR, \fBarmv3\fR, \fBarmv3m\fR, \fBarmv4\fR, \fBarmv4t\fR,
8459 \&\fBarmv5\fR, \fBarmv5t\fR, \fBarmv5e\fR, \fBarmv5te\fR,
8460 \&\fBarmv6\fR, \fBarmv6j\fR,
8461 \&\fBarmv6t2\fR, \fBarmv6z\fR, \fBarmv6zk\fR, \fBarmv6\-m\fR,
8462 \&\fBarmv7\fR, \fBarmv7\-a\fR, \fBarmv7\-r\fR, \fBarmv7\-m\fR,
8463 \&\fBiwmmxt\fR, \fBiwmmxt2\fR, \fBep9312\fR.
8464 .IP "\fB\-mfpu=\fR\fIname\fR" 4
8465 .IX Item "-mfpu=name"
8466 .PD 0
8467 .IP "\fB\-mfpe=\fR\fInumber\fR" 4
8468 .IX Item "-mfpe=number"
8469 .IP "\fB\-mfp=\fR\fInumber\fR" 4
8470 .IX Item "-mfp=number"
8471 .PD
8472 This specifies what floating point hardware (or hardware emulation) is
8473 available on the target.  Permissible names are: \fBfpa\fR, \fBfpe2\fR,
8474 \&\fBfpe3\fR, \fBmaverick\fR, \fBvfp\fR, \fBvfpv3\fR, \fBvfpv3\-d16\fR and
8475 \&\fBneon\fR.  \fB\-mfp\fR and \fB\-mfpe\fR
8476 are synonyms for \fB\-mfpu\fR=\fBfpe\fR\fInumber\fR, for compatibility
8477 with older versions of \s-1GCC\s0.
8478 .Sp
8479 If \fB\-msoft\-float\fR is specified this specifies the format of
8480 floating point values.
8481 .IP "\fB\-mstructure\-size\-boundary=\fR\fIn\fR" 4
8482 .IX Item "-mstructure-size-boundary=n"
8483 The size of all structures and unions will be rounded up to a multiple
8484 of the number of bits set by this option.  Permissible values are 8, 32
8485 and 64.  The default value varies for different toolchains.  For the \s-1COFF\s0
8486 targeted toolchain the default value is 8.  A value of 64 is only allowed
8487 if the underlying \s-1ABI\s0 supports it.
8488 .Sp
8489 Specifying the larger number can produce faster, more efficient code, but
8490 can also increase the size of the program.  Different values are potentially
8491 incompatible.  Code compiled with one value cannot necessarily expect to
8492 work with code or libraries compiled with another value, if they exchange
8493 information using structures or unions.
8494 .IP "\fB\-mabort\-on\-noreturn\fR" 4
8495 .IX Item "-mabort-on-noreturn"
8496 Generate a call to the function \f(CW\*(C`abort\*(C'\fR at the end of a
8497 \&\f(CW\*(C`noreturn\*(C'\fR function.  It will be executed if the function tries to
8498 return.
8499 .IP "\fB\-mlong\-calls\fR" 4
8500 .IX Item "-mlong-calls"
8501 .PD 0
8502 .IP "\fB\-mno\-long\-calls\fR" 4
8503 .IX Item "-mno-long-calls"
8504 .PD
8505 Tells the compiler to perform function calls by first loading the
8506 address of the function into a register and then performing a subroutine
8507 call on this register.  This switch is needed if the target function
8508 will lie outside of the 64 megabyte addressing range of the offset based
8509 version of subroutine call instruction.
8510 .Sp
8511 Even if this switch is enabled, not all function calls will be turned
8512 into long calls.  The heuristic is that static functions, functions
8513 which have the \fBshort-call\fR attribute, functions that are inside
8514 the scope of a \fB#pragma no_long_calls\fR directive and functions whose
8515 definitions have already been compiled within the current compilation
8516 unit, will not be turned into long calls.  The exception to this rule is
8517 that weak function definitions, functions with the \fBlong-call\fR
8518 attribute or the \fBsection\fR attribute, and functions that are within
8519 the scope of a \fB#pragma long_calls\fR directive, will always be
8520 turned into long calls.
8521 .Sp
8522 This feature is not enabled by default.  Specifying
8523 \&\fB\-mno\-long\-calls\fR will restore the default behavior, as will
8524 placing the function calls within the scope of a \fB#pragma
8525 long_calls_off\fR directive.  Note these switches have no effect on how
8526 the compiler generates code to handle function calls via function
8527 pointers.
8528 .IP "\fB\-msingle\-pic\-base\fR" 4
8529 .IX Item "-msingle-pic-base"
8530 Treat the register used for \s-1PIC\s0 addressing as read\-only, rather than
8531 loading it in the prologue for each function.  The run-time system is
8532 responsible for initializing this register with an appropriate value
8533 before execution begins.
8534 .IP "\fB\-mpic\-register=\fR\fIreg\fR" 4
8535 .IX Item "-mpic-register=reg"
8536 Specify the register to be used for \s-1PIC\s0 addressing.  The default is R10
8537 unless stack-checking is enabled, when R9 is used.
8538 .IP "\fB\-mcirrus\-fix\-invalid\-insns\fR" 4
8539 .IX Item "-mcirrus-fix-invalid-insns"
8540 Insert NOPs into the instruction stream to in order to work around
8541 problems with invalid Maverick instruction combinations.  This option
8542 is only valid if the \fB\-mcpu=ep9312\fR option has been used to
8543 enable generation of instructions for the Cirrus Maverick floating
8544 point co\-processor.  This option is not enabled by default, since the
8545 problem is only present in older Maverick implementations.  The default
8546 can be re-enabled by use of the \fB\-mno\-cirrus\-fix\-invalid\-insns\fR
8547 switch.
8548 .IP "\fB\-mpoke\-function\-name\fR" 4
8549 .IX Item "-mpoke-function-name"
8550 Write the name of each function into the text section, directly
8551 preceding the function prologue.  The generated code is similar to this:
8552 .Sp
8553 .Vb 9
8554 \&             t0
8555 \&                 .ascii "arm_poke_function_name", 0
8556 \&                 .align
8557 \&             t1
8558 \&                 .word 0xff000000 + (t1 \- t0)
8559 \&             arm_poke_function_name
8560 \&                 mov     ip, sp
8561 \&                 stmfd   sp!, {fp, ip, lr, pc}
8562 \&                 sub     fp, ip, #4
8563 .Ve
8564 .Sp
8565 When performing a stack backtrace, code can inspect the value of
8566 \&\f(CW\*(C`pc\*(C'\fR stored at \f(CW\*(C`fp + 0\*(C'\fR.  If the trace function then looks at
8567 location \f(CW\*(C`pc \- 12\*(C'\fR and the top 8 bits are set, then we know that
8568 there is a function name embedded immediately preceding this location
8569 and has length \f(CW\*(C`((pc[\-3]) & 0xff000000)\*(C'\fR.
8570 .IP "\fB\-mthumb\fR" 4
8571 .IX Item "-mthumb"
8572 Generate code for the Thumb instruction set.  The default is to
8573 use the 32\-bit \s-1ARM\s0 instruction set.
8574 This option automatically enables either 16\-bit Thumb\-1 or
8575 mixed 16/32\-bit Thumb\-2 instructions based on the \fB\-mcpu=\fR\fIname\fR
8576 and \fB\-march=\fR\fIname\fR options.
8577 .IP "\fB\-mtpcs\-frame\fR" 4
8578 .IX Item "-mtpcs-frame"
8579 Generate a stack frame that is compliant with the Thumb Procedure Call
8580 Standard for all non-leaf functions.  (A leaf function is one that does
8581 not call any other functions.)  The default is \fB\-mno\-tpcs\-frame\fR.
8582 .IP "\fB\-mtpcs\-leaf\-frame\fR" 4
8583 .IX Item "-mtpcs-leaf-frame"
8584 Generate a stack frame that is compliant with the Thumb Procedure Call
8585 Standard for all leaf functions.  (A leaf function is one that does
8586 not call any other functions.)  The default is \fB\-mno\-apcs\-leaf\-frame\fR.
8587 .IP "\fB\-mcallee\-super\-interworking\fR" 4
8588 .IX Item "-mcallee-super-interworking"
8589 Gives all externally visible functions in the file being compiled an \s-1ARM\s0
8590 instruction set header which switches to Thumb mode before executing the
8591 rest of the function.  This allows these functions to be called from
8592 non-interworking code.
8593 .IP "\fB\-mcaller\-super\-interworking\fR" 4
8594 .IX Item "-mcaller-super-interworking"
8595 Allows calls via function pointers (including virtual functions) to
8596 execute correctly regardless of whether the target code has been
8597 compiled for interworking or not.  There is a small overhead in the cost
8598 of executing a function pointer if this option is enabled.
8599 .IP "\fB\-mtp=\fR\fIname\fR" 4
8600 .IX Item "-mtp=name"
8601 Specify the access model for the thread local storage pointer.  The valid
8602 models are \fBsoft\fR, which generates calls to \f(CW\*(C`_\|_aeabi_read_tp\*(C'\fR,
8603 \&\fBcp15\fR, which fetches the thread pointer from \f(CW\*(C`cp15\*(C'\fR directly
8604 (supported in the arm6k architecture), and \fBauto\fR, which uses the
8605 best available method for the selected processor.  The default setting is
8606 \&\fBauto\fR.
8607 .IP "\fB\-mword\-relocations\fR" 4
8608 .IX Item "-mword-relocations"
8609 Only generate absolute relocations on word sized values (i.e. R_ARM_ABS32).
8610 This is enabled by default on targets (uClinux, SymbianOS) where the runtime
8611 loader imposes this restriction, and when \fB\-fpic\fR or \fB\-fPIC\fR
8612 is specified.
8613 .IP "\fB\-mandroid\fR" 4
8614 .IX Item "-mandroid"
8615 Enable Android specific compilier options.
8616 .Sp
8617 If this option is used, a preprocessor macro \f(CW\*(C`_\|_ANDROID_\|_\*(C'\fR is defined
8618 and has the value 1 during compilation. The option also implies C/\*(C+ options
8619 \&\fB\-fno\-exceptions\fR \fB\-fpic\fR \fB\-mthumb\-interwork\fR
8620 \&\fB\-fno\-short\-enums\fR and \*(C+ option \fB\-fno\-rtti\fR. These implied
8621 options can be overridden. For example \s-1RTTI\s0 in \*(C+ code can still be enabled
8622 with \-frtti even when \-mandroid is also used.
8623 .Sp
8624 Linking options depend on whether a static executable, a dynamic
8625 executable or a shared library is built. When \fB\-static\fR is given,
8626 \&\fB\-mandroid\fR implies linking flag \fB\-Bstatic\fR, start file
8627 \&\fIcrtbegin_static.o\fR and end file \fIcrtend_android.o\fR.
8628 .Sp
8629 When \fB\-shared\fR is given, \fB\-mandroid\fR implies the linking
8630 flag \fB\-Bsymbolic\fR and no start and end files.
8631 .Sp
8632 When none of \fB\-static\fR and \fB\-shared\fR is given, \fB\-mandroid\fR
8633 implies linking flags \fB\-Bdynamic \-dynamic\-linker /system/bin/linker\fR,
8634 start file \fIcrtbegin_dynamic.o\fR and end file \fIcrtend_android.o\fR. The
8635 dynamic linker used can be overriden by another \fB\-dynamic\-linker\fR in
8636 command line.
8637 .Sp
8638 The linking option \fB\-ldl\fR is also added if \fB\-static\fR is not
8639 given.
8640 .Sp
8641 If more than one of \fB\-dynamic\fR, \fB\-static\fR and \fB\-shared\fR
8642 are given, behaviour of \fB\-mandroid\fR is undefined.
8643 .PP
8644 \fI\s-1AVR\s0 Options\fR
8645 .IX Subsection "AVR Options"
8646 .PP
8647 These options are defined for \s-1AVR\s0 implementations:
8648 .IP "\fB\-mmcu=\fR\fImcu\fR" 4
8649 .IX Item "-mmcu=mcu"
8650 Specify \s-1ATMEL\s0 \s-1AVR\s0 instruction set or \s-1MCU\s0 type.
8651 .Sp
8652 Instruction set avr1 is for the minimal \s-1AVR\s0 core, not supported by the C
8653 compiler, only for assembler programs (\s-1MCU\s0 types: at90s1200, attiny10,
8654 attiny11, attiny12, attiny15, attiny28).
8655 .Sp
8656 Instruction set avr2 (default) is for the classic \s-1AVR\s0 core with up to
8657 8K program memory space (\s-1MCU\s0 types: at90s2313, at90s2323, attiny22,
8658 at90s2333, at90s2343, at90s4414, at90s4433, at90s4434, at90s8515,
8659 at90c8534, at90s8535).
8660 .Sp
8661 Instruction set avr3 is for the classic \s-1AVR\s0 core with up to 128K program
8662 memory space (\s-1MCU\s0 types: atmega103, atmega603, at43usb320, at76c711).
8663 .Sp
8664 Instruction set avr4 is for the enhanced \s-1AVR\s0 core with up to 8K program
8665 memory space (\s-1MCU\s0 types: atmega8, atmega83, atmega85).
8666 .Sp
8667 Instruction set avr5 is for the enhanced \s-1AVR\s0 core with up to 128K program
8668 memory space (\s-1MCU\s0 types: atmega16, atmega161, atmega163, atmega32, atmega323,
8669 atmega64, atmega128, at43usb355, at94k).
8670 .IP "\fB\-msize\fR" 4
8671 .IX Item "-msize"
8672 Output instruction sizes to the asm file.
8673 .IP "\fB\-minit\-stack=\fR\fIN\fR" 4
8674 .IX Item "-minit-stack=N"
8675 Specify the initial stack address, which may be a symbol or numeric value,
8676 \&\fB_\|_stack\fR is the default.
8677 .IP "\fB\-mno\-interrupts\fR" 4
8678 .IX Item "-mno-interrupts"
8679 Generated code is not compatible with hardware interrupts.
8680 Code size will be smaller.
8681 .IP "\fB\-mcall\-prologues\fR" 4
8682 .IX Item "-mcall-prologues"
8683 Functions prologues/epilogues expanded as call to appropriate
8684 subroutines.  Code size will be smaller.
8685 .IP "\fB\-mno\-tablejump\fR" 4
8686 .IX Item "-mno-tablejump"
8687 Do not generate tablejump insns which sometimes increase code size.
8688 The option is now deprecated in favor of the equivalent 
8689 \&\fB\-fno\-jump\-tables\fR
8690 .IP "\fB\-mtiny\-stack\fR" 4
8691 .IX Item "-mtiny-stack"
8692 Change only the low 8 bits of the stack pointer.
8693 .IP "\fB\-mint8\fR" 4
8694 .IX Item "-mint8"
8695 Assume int to be 8 bit integer.  This affects the sizes of all types: A
8696 char will be 1 byte, an int will be 1 byte, an long will be 2 bytes
8697 and long long will be 4 bytes.  Please note that this option does not
8698 comply to the C standards, but it will provide you with smaller code
8699 size.
8700 .PP
8701 \fIBlackfin Options\fR
8702 .IX Subsection "Blackfin Options"
8703 .IP "\fB\-mcpu=\fR\fIcpu\fR[\fB\-\fR\fIsirevision\fR]" 4
8704 .IX Item "-mcpu=cpu[-sirevision]"
8705 Specifies the name of the target Blackfin processor.  Currently, \fIcpu\fR
8706 can be one of \fBbf512\fR, \fBbf514\fR, \fBbf516\fR, \fBbf518\fR,
8707 \&\fBbf522\fR, \fBbf523\fR, \fBbf524\fR, \fBbf525\fR, \fBbf526\fR,
8708 \&\fBbf527\fR, \fBbf531\fR, \fBbf532\fR, \fBbf533\fR,
8709 \&\fBbf534\fR, \fBbf536\fR, \fBbf537\fR, \fBbf538\fR, \fBbf539\fR,
8710 \&\fBbf542\fR, \fBbf544\fR, \fBbf547\fR, \fBbf548\fR, \fBbf549\fR,
8711 \&\fBbf561\fR.
8712 The optional \fIsirevision\fR specifies the silicon revision of the target
8713 Blackfin processor.  Any workarounds available for the targeted silicon revision
8714 will be enabled.  If \fIsirevision\fR is \fBnone\fR, no workarounds are enabled.
8715 If \fIsirevision\fR is \fBany\fR, all workarounds for the targeted processor
8716 will be enabled.  The \f(CW\*(C`_\|_SILICON_REVISION_\|_\*(C'\fR macro is defined to two
8717 hexadecimal digits representing the major and minor numbers in the silicon
8718 revision.  If \fIsirevision\fR is \fBnone\fR, the \f(CW\*(C`_\|_SILICON_REVISION_\|_\*(C'\fR
8719 is not defined.  If \fIsirevision\fR is \fBany\fR, the
8720 \&\f(CW\*(C`_\|_SILICON_REVISION_\|_\*(C'\fR is defined to be \f(CW0xffff\fR.
8721 If this optional \fIsirevision\fR is not used, \s-1GCC\s0 assumes the latest known
8722 silicon revision of the targeted Blackfin processor.
8723 .Sp
8724 Support for \fBbf561\fR is incomplete.  For \fBbf561\fR,
8725 Only the processor macro is defined.
8726 Without this option, \fBbf532\fR is used as the processor by default.
8727 The corresponding predefined processor macros for \fIcpu\fR is to
8728 be defined.  And for \fBbfin-elf\fR toolchain, this causes the hardware \s-1BSP\s0
8729 provided by libgloss to be linked in if \fB\-msim\fR is not given.
8730 .IP "\fB\-msim\fR" 4
8731 .IX Item "-msim"
8732 Specifies that the program will be run on the simulator.  This causes
8733 the simulator \s-1BSP\s0 provided by libgloss to be linked in.  This option
8734 has effect only for \fBbfin-elf\fR toolchain.
8735 Certain other options, such as \fB\-mid\-shared\-library\fR and
8736 \&\fB\-mfdpic\fR, imply \fB\-msim\fR.
8737 .IP "\fB\-momit\-leaf\-frame\-pointer\fR" 4
8738 .IX Item "-momit-leaf-frame-pointer"
8739 Don't keep the frame pointer in a register for leaf functions.  This
8740 avoids the instructions to save, set up and restore frame pointers and
8741 makes an extra register available in leaf functions.  The option
8742 \&\fB\-fomit\-frame\-pointer\fR removes the frame pointer for all functions
8743 which might make debugging harder.
8744 .IP "\fB\-mspecld\-anomaly\fR" 4
8745 .IX Item "-mspecld-anomaly"
8746 When enabled, the compiler will ensure that the generated code does not
8747 contain speculative loads after jump instructions. If this option is used,
8748 \&\f(CW\*(C`_\|_WORKAROUND_SPECULATIVE_LOADS\*(C'\fR is defined.
8749 .IP "\fB\-mno\-specld\-anomaly\fR" 4
8750 .IX Item "-mno-specld-anomaly"
8751 Don't generate extra code to prevent speculative loads from occurring.
8752 .IP "\fB\-mcsync\-anomaly\fR" 4
8753 .IX Item "-mcsync-anomaly"
8754 When enabled, the compiler will ensure that the generated code does not
8755 contain \s-1CSYNC\s0 or \s-1SSYNC\s0 instructions too soon after conditional branches.
8756 If this option is used, \f(CW\*(C`_\|_WORKAROUND_SPECULATIVE_SYNCS\*(C'\fR is defined.
8757 .IP "\fB\-mno\-csync\-anomaly\fR" 4
8758 .IX Item "-mno-csync-anomaly"
8759 Don't generate extra code to prevent \s-1CSYNC\s0 or \s-1SSYNC\s0 instructions from
8760 occurring too soon after a conditional branch.
8761 .IP "\fB\-mlow\-64k\fR" 4
8762 .IX Item "-mlow-64k"
8763 When enabled, the compiler is free to take advantage of the knowledge that
8764 the entire program fits into the low 64k of memory.
8765 .IP "\fB\-mno\-low\-64k\fR" 4
8766 .IX Item "-mno-low-64k"
8767 Assume that the program is arbitrarily large.  This is the default.
8768 .IP "\fB\-mstack\-check\-l1\fR" 4
8769 .IX Item "-mstack-check-l1"
8770 Do stack checking using information placed into L1 scratchpad memory by the
8771 uClinux kernel.
8772 .IP "\fB\-mid\-shared\-library\fR" 4
8773 .IX Item "-mid-shared-library"
8774 Generate code that supports shared libraries via the library \s-1ID\s0 method.
8775 This allows for execute in place and shared libraries in an environment
8776 without virtual memory management.  This option implies \fB\-fPIC\fR.
8777 With a \fBbfin-elf\fR target, this option implies \fB\-msim\fR.
8778 .IP "\fB\-mno\-id\-shared\-library\fR" 4
8779 .IX Item "-mno-id-shared-library"
8780 Generate code that doesn't assume \s-1ID\s0 based shared libraries are being used.
8781 This is the default.
8782 .IP "\fB\-mleaf\-id\-shared\-library\fR" 4
8783 .IX Item "-mleaf-id-shared-library"
8784 Generate code that supports shared libraries via the library \s-1ID\s0 method,
8785 but assumes that this library or executable won't link against any other
8786 \&\s-1ID\s0 shared libraries.  That allows the compiler to use faster code for jumps
8787 and calls.
8788 .IP "\fB\-mno\-leaf\-id\-shared\-library\fR" 4
8789 .IX Item "-mno-leaf-id-shared-library"
8790 Do not assume that the code being compiled won't link against any \s-1ID\s0 shared
8791 libraries.  Slower code will be generated for jump and call insns.
8792 .IP "\fB\-mshared\-library\-id=n\fR" 4
8793 .IX Item "-mshared-library-id=n"
8794 Specified the identification number of the \s-1ID\s0 based shared library being
8795 compiled.  Specifying a value of 0 will generate more compact code, specifying
8796 other values will force the allocation of that number to the current
8797 library but is no more space or time efficient than omitting this option.
8798 .IP "\fB\-msep\-data\fR" 4
8799 .IX Item "-msep-data"
8800 Generate code that allows the data segment to be located in a different
8801 area of memory from the text segment.  This allows for execute in place in
8802 an environment without virtual memory management by eliminating relocations
8803 against the text section.
8804 .IP "\fB\-mno\-sep\-data\fR" 4
8805 .IX Item "-mno-sep-data"
8806 Generate code that assumes that the data segment follows the text segment.
8807 This is the default.
8808 .IP "\fB\-mlong\-calls\fR" 4
8809 .IX Item "-mlong-calls"
8810 .PD 0
8811 .IP "\fB\-mno\-long\-calls\fR" 4
8812 .IX Item "-mno-long-calls"
8813 .PD
8814 Tells the compiler to perform function calls by first loading the
8815 address of the function into a register and then performing a subroutine
8816 call on this register.  This switch is needed if the target function
8817 will lie outside of the 24 bit addressing range of the offset based
8818 version of subroutine call instruction.
8819 .Sp
8820 This feature is not enabled by default.  Specifying
8821 \&\fB\-mno\-long\-calls\fR will restore the default behavior.  Note these
8822 switches have no effect on how the compiler generates code to handle
8823 function calls via function pointers.
8824 .IP "\fB\-mfast\-fp\fR" 4
8825 .IX Item "-mfast-fp"
8826 Link with the fast floating-point library. This library relaxes some of
8827 the \s-1IEEE\s0 floating-point standard's rules for checking inputs against
8828 Not-a-Number (\s-1NAN\s0), in the interest of performance.
8829 .IP "\fB\-minline\-plt\fR" 4
8830 .IX Item "-minline-plt"
8831 Enable inlining of \s-1PLT\s0 entries in function calls to functions that are
8832 not known to bind locally.  It has no effect without \fB\-mfdpic\fR.
8833 .IP "\fB\-mmulticore\fR" 4
8834 .IX Item "-mmulticore"
8835 Build standalone application for multicore Blackfin processor. Proper
8836 start files and link scripts will be used to support multicore.
8837 This option defines \f(CW\*(C`_\|_BFIN_MULTICORE\*(C'\fR. It can only be used with
8838 \&\fB\-mcpu=bf561\fR[\fB\-\fR\fIsirevision\fR]. It can be used with
8839 \&\fB\-mcorea\fR or \fB\-mcoreb\fR. If it's used without
8840 \&\fB\-mcorea\fR or \fB\-mcoreb\fR, single application/dual core
8841 programming model is used. In this model, the main function of Core B
8842 should be named as coreb_main. If it's used with \fB\-mcorea\fR or
8843 \&\fB\-mcoreb\fR, one application per core programming model is used.
8844 If this option is not used, single core application programming
8845 model is used.
8846 .IP "\fB\-mcorea\fR" 4
8847 .IX Item "-mcorea"
8848 Build standalone application for Core A of \s-1BF561\s0 when using
8849 one application per core programming model. Proper start files
8850 and link scripts will be used to support Core A. This option
8851 defines \f(CW\*(C`_\|_BFIN_COREA\*(C'\fR. It must be used with \fB\-mmulticore\fR.
8852 .IP "\fB\-mcoreb\fR" 4
8853 .IX Item "-mcoreb"
8854 Build standalone application for Core B of \s-1BF561\s0 when using
8855 one application per core programming model. Proper start files
8856 and link scripts will be used to support Core B. This option
8857 defines \f(CW\*(C`_\|_BFIN_COREB\*(C'\fR. When this option is used, coreb_main
8858 should be used instead of main. It must be used with
8859 \&\fB\-mmulticore\fR. 
8860 .IP "\fB\-msdram\fR" 4
8861 .IX Item "-msdram"
8862 Build standalone application for \s-1SDRAM\s0. Proper start files and
8863 link scripts will be used to put the application into \s-1SDRAM\s0.
8864 Loader should initialize \s-1SDRAM\s0 before loading the application
8865 into \s-1SDRAM\s0. This option defines \f(CW\*(C`_\|_BFIN_SDRAM\*(C'\fR.
8866 .IP "\fB\-micplb\fR" 4
8867 .IX Item "-micplb"
8868 Assume that ICPLBs are enabled at runtime.  This has an effect on certain
8869 anomaly workarounds.  For Linux targets, the default is to assume ICPLBs
8870 are enabled; for standalone applications the default is off.
8871 .PP
8872 \fI\s-1CRIS\s0 Options\fR
8873 .IX Subsection "CRIS Options"
8874 .PP
8875 These options are defined specifically for the \s-1CRIS\s0 ports.
8876 .IP "\fB\-march=\fR\fIarchitecture-type\fR" 4
8877 .IX Item "-march=architecture-type"
8878 .PD 0
8879 .IP "\fB\-mcpu=\fR\fIarchitecture-type\fR" 4
8880 .IX Item "-mcpu=architecture-type"
8881 .PD
8882 Generate code for the specified architecture.  The choices for
8883 \&\fIarchitecture-type\fR are \fBv3\fR, \fBv8\fR and \fBv10\fR for
8884 respectively \s-1ETRAX\s0\ 4, \s-1ETRAX\s0\ 100, and \s-1ETRAX\s0\ 100\ \s-1LX\s0.
8885 Default is \fBv0\fR except for cris\-axis\-linux\-gnu, where the default is
8886 \&\fBv10\fR.
8887 .IP "\fB\-mtune=\fR\fIarchitecture-type\fR" 4
8888 .IX Item "-mtune=architecture-type"
8889 Tune to \fIarchitecture-type\fR everything applicable about the generated
8890 code, except for the \s-1ABI\s0 and the set of available instructions.  The
8891 choices for \fIarchitecture-type\fR are the same as for
8892 \&\fB\-march=\fR\fIarchitecture-type\fR.
8893 .IP "\fB\-mmax\-stack\-frame=\fR\fIn\fR" 4
8894 .IX Item "-mmax-stack-frame=n"
8895 Warn when the stack frame of a function exceeds \fIn\fR bytes.
8896 .IP "\fB\-metrax4\fR" 4
8897 .IX Item "-metrax4"
8898 .PD 0
8899 .IP "\fB\-metrax100\fR" 4
8900 .IX Item "-metrax100"
8901 .PD
8902 The options \fB\-metrax4\fR and \fB\-metrax100\fR are synonyms for
8903 \&\fB\-march=v3\fR and \fB\-march=v8\fR respectively.
8904 .IP "\fB\-mmul\-bug\-workaround\fR" 4
8905 .IX Item "-mmul-bug-workaround"
8906 .PD 0
8907 .IP "\fB\-mno\-mul\-bug\-workaround\fR" 4
8908 .IX Item "-mno-mul-bug-workaround"
8909 .PD
8910 Work around a bug in the \f(CW\*(C`muls\*(C'\fR and \f(CW\*(C`mulu\*(C'\fR instructions for \s-1CPU\s0
8911 models where it applies.  This option is active by default.
8912 .IP "\fB\-mpdebug\fR" 4
8913 .IX Item "-mpdebug"
8914 Enable CRIS-specific verbose debug-related information in the assembly
8915 code.  This option also has the effect to turn off the \fB#NO_APP\fR
8916 formatted-code indicator to the assembler at the beginning of the
8917 assembly file.
8918 .IP "\fB\-mcc\-init\fR" 4
8919 .IX Item "-mcc-init"
8920 Do not use condition-code results from previous instruction; always emit
8921 compare and test instructions before use of condition codes.
8922 .IP "\fB\-mno\-side\-effects\fR" 4
8923 .IX Item "-mno-side-effects"
8924 Do not emit instructions with side-effects in addressing modes other than
8925 post\-increment.
8926 .IP "\fB\-mstack\-align\fR" 4
8927 .IX Item "-mstack-align"
8928 .PD 0
8929 .IP "\fB\-mno\-stack\-align\fR" 4
8930 .IX Item "-mno-stack-align"
8931 .IP "\fB\-mdata\-align\fR" 4
8932 .IX Item "-mdata-align"
8933 .IP "\fB\-mno\-data\-align\fR" 4
8934 .IX Item "-mno-data-align"
8935 .IP "\fB\-mconst\-align\fR" 4
8936 .IX Item "-mconst-align"
8937 .IP "\fB\-mno\-const\-align\fR" 4
8938 .IX Item "-mno-const-align"
8939 .PD
8940 These options (no\-options) arranges (eliminate arrangements) for the
8941 stack\-frame, individual data and constants to be aligned for the maximum
8942 single data access size for the chosen \s-1CPU\s0 model.  The default is to
8943 arrange for 32\-bit alignment.  \s-1ABI\s0 details such as structure layout are
8944 not affected by these options.
8945 .IP "\fB\-m32\-bit\fR" 4
8946 .IX Item "-m32-bit"
8947 .PD 0
8948 .IP "\fB\-m16\-bit\fR" 4
8949 .IX Item "-m16-bit"
8950 .IP "\fB\-m8\-bit\fR" 4
8951 .IX Item "-m8-bit"
8952 .PD
8953 Similar to the stack\- data\- and const-align options above, these options
8954 arrange for stack\-frame, writable data and constants to all be 32\-bit,
8955 16\-bit or 8\-bit aligned.  The default is 32\-bit alignment.
8956 .IP "\fB\-mno\-prologue\-epilogue\fR" 4
8957 .IX Item "-mno-prologue-epilogue"
8958 .PD 0
8959 .IP "\fB\-mprologue\-epilogue\fR" 4
8960 .IX Item "-mprologue-epilogue"
8961 .PD
8962 With \fB\-mno\-prologue\-epilogue\fR, the normal function prologue and
8963 epilogue that sets up the stack-frame are omitted and no return
8964 instructions or return sequences are generated in the code.  Use this
8965 option only together with visual inspection of the compiled code: no
8966 warnings or errors are generated when call-saved registers must be saved,
8967 or storage for local variable needs to be allocated.
8968 .IP "\fB\-mno\-gotplt\fR" 4
8969 .IX Item "-mno-gotplt"
8970 .PD 0
8971 .IP "\fB\-mgotplt\fR" 4
8972 .IX Item "-mgotplt"
8973 .PD
8974 With \fB\-fpic\fR and \fB\-fPIC\fR, don't generate (do generate)
8975 instruction sequences that load addresses for functions from the \s-1PLT\s0 part
8976 of the \s-1GOT\s0 rather than (traditional on other architectures) calls to the
8977 \&\s-1PLT\s0.  The default is \fB\-mgotplt\fR.
8978 .IP "\fB\-melf\fR" 4
8979 .IX Item "-melf"
8980 Legacy no-op option only recognized with the cris-axis-elf and
8981 cris-axis-linux-gnu targets.
8982 .IP "\fB\-mlinux\fR" 4
8983 .IX Item "-mlinux"
8984 Legacy no-op option only recognized with the cris-axis-linux-gnu target.
8985 .IP "\fB\-sim\fR" 4
8986 .IX Item "-sim"
8987 This option, recognized for the cris-axis-elf arranges
8988 to link with input-output functions from a simulator library.  Code,
8989 initialized data and zero-initialized data are allocated consecutively.
8990 .IP "\fB\-sim2\fR" 4
8991 .IX Item "-sim2"
8992 Like \fB\-sim\fR, but pass linker options to locate initialized data at
8993 0x40000000 and zero-initialized data at 0x80000000.
8994 .PP
8995 \fI\s-1CRX\s0 Options\fR
8996 .IX Subsection "CRX Options"
8997 .PP
8998 These options are defined specifically for the \s-1CRX\s0 ports.
8999 .IP "\fB\-mmac\fR" 4
9000 .IX Item "-mmac"
9001 Enable the use of multiply-accumulate instructions. Disabled by default.
9002 .IP "\fB\-mpush\-args\fR" 4
9003 .IX Item "-mpush-args"
9004 Push instructions will be used to pass outgoing arguments when functions
9005 are called. Enabled by default.
9006 .PP
9007 \fIDarwin Options\fR
9008 .IX Subsection "Darwin Options"
9009 .PP
9010 These options are defined for all architectures running the Darwin operating
9011 system.
9012 .PP
9013 \&\s-1FSF\s0 \s-1GCC\s0 on Darwin does not create \*(L"fat\*(R" object files; it will create
9014 an object file for the single architecture that it was built to
9015 target.  Apple's \s-1GCC\s0 on Darwin does create \*(L"fat\*(R" files if multiple
9016 \&\fB\-arch\fR options are used; it does so by running the compiler or
9017 linker multiple times and joining the results together with
9018 \&\fIlipo\fR.
9019 .PP
9020 The subtype of the file created (like \fBppc7400\fR or \fBppc970\fR or
9021 \&\fBi686\fR) is determined by the flags that specify the \s-1ISA\s0
9022 that \s-1GCC\s0 is targetting, like \fB\-mcpu\fR or \fB\-march\fR.  The
9023 \&\fB\-force_cpusubtype_ALL\fR option can be used to override this.
9024 .PP
9025 The Darwin tools vary in their behavior when presented with an \s-1ISA\s0
9026 mismatch.  The assembler, \fIas\fR, will only permit instructions to
9027 be used that are valid for the subtype of the file it is generating,
9028 so you cannot put 64\-bit instructions in an \fBppc750\fR object file.
9029 The linker for shared libraries, \fI/usr/bin/libtool\fR, will fail
9030 and print an error if asked to create a shared library with a less
9031 restrictive subtype than its input files (for instance, trying to put
9032 a \fBppc970\fR object file in a \fBppc7400\fR library).  The linker
9033 for executables, \fIld\fR, will quietly give the executable the most
9034 restrictive subtype of any of its input files.
9035 .IP "\fB\-F\fR\fIdir\fR" 4
9036 .IX Item "-Fdir"
9037 Add the framework directory \fIdir\fR to the head of the list of
9038 directories to be searched for header files.  These directories are
9039 interleaved with those specified by \fB\-I\fR options and are
9040 scanned in a left-to-right order.
9041 .Sp
9042 A framework directory is a directory with frameworks in it.  A
9043 framework is a directory with a \fB\*(L"Headers\*(R"\fR and/or
9044 \&\fB\*(L"PrivateHeaders\*(R"\fR directory contained directly in it that ends
9045 in \fB\*(L".framework\*(R"\fR.  The name of a framework is the name of this
9046 directory excluding the \fB\*(L".framework\*(R"\fR.  Headers associated with
9047 the framework are found in one of those two directories, with
9048 \&\fB\*(L"Headers\*(R"\fR being searched first.  A subframework is a framework
9049 directory that is in a framework's \fB\*(L"Frameworks\*(R"\fR directory.
9050 Includes of subframework headers can only appear in a header of a
9051 framework that contains the subframework, or in a sibling subframework
9052 header.  Two subframeworks are siblings if they occur in the same
9053 framework.  A subframework should not have the same name as a
9054 framework, a warning will be issued if this is violated.  Currently a
9055 subframework cannot have subframeworks, in the future, the mechanism
9056 may be extended to support this.  The standard frameworks can be found
9057 in \fB\*(L"/System/Library/Frameworks\*(R"\fR and
9058 \&\fB\*(L"/Library/Frameworks\*(R"\fR.  An example include looks like
9059 \&\f(CW\*(C`#include <Framework/header.h>\*(C'\fR, where \fBFramework\fR denotes
9060 the name of the framework and header.h is found in the
9061 \&\fB\*(L"PrivateHeaders\*(R"\fR or \fB\*(L"Headers\*(R"\fR directory.
9062 .IP "\fB\-iframework\fR\fIdir\fR" 4
9063 .IX Item "-iframeworkdir"
9064 Like \fB\-F\fR except the directory is a treated as a system
9065 directory.  The main difference between this \fB\-iframework\fR and
9066 \&\fB\-F\fR is that with \fB\-iframework\fR the compiler does not
9067 warn about constructs contained within header files found via
9068 \&\fIdir\fR.  This option is valid only for the C family of languages.
9069 .IP "\fB\-gused\fR" 4
9070 .IX Item "-gused"
9071 Emit debugging information for symbols that are used.  For \s-1STABS\s0
9072 debugging format, this enables \fB\-feliminate\-unused\-debug\-symbols\fR.
9073 This is by default \s-1ON\s0.
9074 .IP "\fB\-gfull\fR" 4
9075 .IX Item "-gfull"
9076 Emit debugging information for all symbols and types.
9077 .IP "\fB\-mmacosx\-version\-min=\fR\fIversion\fR" 4
9078 .IX Item "-mmacosx-version-min=version"
9079 The earliest version of MacOS X that this executable will run on
9080 is \fIversion\fR.  Typical values of \fIversion\fR include \f(CW10.1\fR,
9081 \&\f(CW10.2\fR, and \f(CW10.3.9\fR.
9082 .Sp
9083 If the compiler was built to use the system's headers by default,
9084 then the default for this option is the system version on which the
9085 compiler is running, otherwise the default is to make choices which
9086 are compatible with as many systems and code bases as possible.
9087 .IP "\fB\-mkernel\fR" 4
9088 .IX Item "-mkernel"
9089 Enable kernel development mode.  The \fB\-mkernel\fR option sets
9090 \&\fB\-static\fR, \fB\-fno\-common\fR, \fB\-fno\-cxa\-atexit\fR,
9091 \&\fB\-fno\-exceptions\fR, \fB\-fno\-non\-call\-exceptions\fR,
9092 \&\fB\-fapple\-kext\fR, \fB\-fno\-weak\fR and \fB\-fno\-rtti\fR where
9093 applicable.  This mode also sets \fB\-mno\-altivec\fR,
9094 \&\fB\-msoft\-float\fR, \fB\-fno\-builtin\fR and
9095 \&\fB\-mlong\-branch\fR for PowerPC targets.
9096 .IP "\fB\-mone\-byte\-bool\fR" 4
9097 .IX Item "-mone-byte-bool"
9098 Override the defaults for \fBbool\fR so that \fBsizeof(bool)==1\fR.
9099 By default \fBsizeof(bool)\fR is \fB4\fR when compiling for
9100 Darwin/PowerPC and \fB1\fR when compiling for Darwin/x86, so this
9101 option has no effect on x86.
9102 .Sp
9103 \&\fBWarning:\fR The \fB\-mone\-byte\-bool\fR switch causes \s-1GCC\s0
9104 to generate code that is not binary compatible with code generated
9105 without that switch.  Using this switch may require recompiling all
9106 other modules in a program, including system libraries.  Use this
9107 switch to conform to a non-default data model.
9108 .IP "\fB\-mfix\-and\-continue\fR" 4
9109 .IX Item "-mfix-and-continue"
9110 .PD 0
9111 .IP "\fB\-ffix\-and\-continue\fR" 4
9112 .IX Item "-ffix-and-continue"
9113 .IP "\fB\-findirect\-data\fR" 4
9114 .IX Item "-findirect-data"
9115 .PD
9116 Generate code suitable for fast turn around development.  Needed to
9117 enable gdb to dynamically load \f(CW\*(C`.o\*(C'\fR files into already running
9118 programs.  \fB\-findirect\-data\fR and \fB\-ffix\-and\-continue\fR
9119 are provided for backwards compatibility.
9120 .IP "\fB\-all_load\fR" 4
9121 .IX Item "-all_load"
9122 Loads all members of static archive libraries.
9123 See man \fIld\fR\|(1) for more information.
9124 .IP "\fB\-arch_errors_fatal\fR" 4
9125 .IX Item "-arch_errors_fatal"
9126 Cause the errors having to do with files that have the wrong architecture
9127 to be fatal.
9128 .IP "\fB\-bind_at_load\fR" 4
9129 .IX Item "-bind_at_load"
9130 Causes the output file to be marked such that the dynamic linker will
9131 bind all undefined references when the file is loaded or launched.
9132 .IP "\fB\-bundle\fR" 4
9133 .IX Item "-bundle"
9134 Produce a Mach-o bundle format file.
9135 See man \fIld\fR\|(1) for more information.
9136 .IP "\fB\-bundle_loader\fR \fIexecutable\fR" 4
9137 .IX Item "-bundle_loader executable"
9138 This option specifies the \fIexecutable\fR that will be loading the build
9139 output file being linked.  See man \fIld\fR\|(1) for more information.
9140 .IP "\fB\-dynamiclib\fR" 4
9141 .IX Item "-dynamiclib"
9142 When passed this option, \s-1GCC\s0 will produce a dynamic library instead of
9143 an executable when linking, using the Darwin \fIlibtool\fR command.
9144 .IP "\fB\-force_cpusubtype_ALL\fR" 4
9145 .IX Item "-force_cpusubtype_ALL"
9146 This causes \s-1GCC\s0's output file to have the \fI\s-1ALL\s0\fR subtype, instead of
9147 one controlled by the \fB\-mcpu\fR or \fB\-march\fR option.
9148 .IP "\fB\-allowable_client\fR  \fIclient_name\fR" 4
9149 .IX Item "-allowable_client  client_name"
9150 .PD 0
9151 .IP "\fB\-client_name\fR" 4
9152 .IX Item "-client_name"
9153 .IP "\fB\-compatibility_version\fR" 4
9154 .IX Item "-compatibility_version"
9155 .IP "\fB\-current_version\fR" 4
9156 .IX Item "-current_version"
9157 .IP "\fB\-dead_strip\fR" 4
9158 .IX Item "-dead_strip"
9159 .IP "\fB\-dependency\-file\fR" 4
9160 .IX Item "-dependency-file"
9161 .IP "\fB\-dylib_file\fR" 4
9162 .IX Item "-dylib_file"
9163 .IP "\fB\-dylinker_install_name\fR" 4
9164 .IX Item "-dylinker_install_name"
9165 .IP "\fB\-dynamic\fR" 4
9166 .IX Item "-dynamic"
9167 .IP "\fB\-exported_symbols_list\fR" 4
9168 .IX Item "-exported_symbols_list"
9169 .IP "\fB\-filelist\fR" 4
9170 .IX Item "-filelist"
9171 .IP "\fB\-flat_namespace\fR" 4
9172 .IX Item "-flat_namespace"
9173 .IP "\fB\-force_flat_namespace\fR" 4
9174 .IX Item "-force_flat_namespace"
9175 .IP "\fB\-headerpad_max_install_names\fR" 4
9176 .IX Item "-headerpad_max_install_names"
9177 .IP "\fB\-image_base\fR" 4
9178 .IX Item "-image_base"
9179 .IP "\fB\-init\fR" 4
9180 .IX Item "-init"
9181 .IP "\fB\-install_name\fR" 4
9182 .IX Item "-install_name"
9183 .IP "\fB\-keep_private_externs\fR" 4
9184 .IX Item "-keep_private_externs"
9185 .IP "\fB\-multi_module\fR" 4
9186 .IX Item "-multi_module"
9187 .IP "\fB\-multiply_defined\fR" 4
9188 .IX Item "-multiply_defined"
9189 .IP "\fB\-multiply_defined_unused\fR" 4
9190 .IX Item "-multiply_defined_unused"
9191 .IP "\fB\-noall_load\fR" 4
9192 .IX Item "-noall_load"
9193 .IP "\fB\-no_dead_strip_inits_and_terms\fR" 4
9194 .IX Item "-no_dead_strip_inits_and_terms"
9195 .IP "\fB\-nofixprebinding\fR" 4
9196 .IX Item "-nofixprebinding"
9197 .IP "\fB\-nomultidefs\fR" 4
9198 .IX Item "-nomultidefs"
9199 .IP "\fB\-noprebind\fR" 4
9200 .IX Item "-noprebind"
9201 .IP "\fB\-noseglinkedit\fR" 4
9202 .IX Item "-noseglinkedit"
9203 .IP "\fB\-pagezero_size\fR" 4
9204 .IX Item "-pagezero_size"
9205 .IP "\fB\-prebind\fR" 4
9206 .IX Item "-prebind"
9207 .IP "\fB\-prebind_all_twolevel_modules\fR" 4
9208 .IX Item "-prebind_all_twolevel_modules"
9209 .IP "\fB\-private_bundle\fR" 4
9210 .IX Item "-private_bundle"
9211 .IP "\fB\-read_only_relocs\fR" 4
9212 .IX Item "-read_only_relocs"
9213 .IP "\fB\-sectalign\fR" 4
9214 .IX Item "-sectalign"
9215 .IP "\fB\-sectobjectsymbols\fR" 4
9216 .IX Item "-sectobjectsymbols"
9217 .IP "\fB\-whyload\fR" 4
9218 .IX Item "-whyload"
9219 .IP "\fB\-seg1addr\fR" 4
9220 .IX Item "-seg1addr"
9221 .IP "\fB\-sectcreate\fR" 4
9222 .IX Item "-sectcreate"
9223 .IP "\fB\-sectobjectsymbols\fR" 4
9224 .IX Item "-sectobjectsymbols"
9225 .IP "\fB\-sectorder\fR" 4
9226 .IX Item "-sectorder"
9227 .IP "\fB\-segaddr\fR" 4
9228 .IX Item "-segaddr"
9229 .IP "\fB\-segs_read_only_addr\fR" 4
9230 .IX Item "-segs_read_only_addr"
9231 .IP "\fB\-segs_read_write_addr\fR" 4
9232 .IX Item "-segs_read_write_addr"
9233 .IP "\fB\-seg_addr_table\fR" 4
9234 .IX Item "-seg_addr_table"
9235 .IP "\fB\-seg_addr_table_filename\fR" 4
9236 .IX Item "-seg_addr_table_filename"
9237 .IP "\fB\-seglinkedit\fR" 4
9238 .IX Item "-seglinkedit"
9239 .IP "\fB\-segprot\fR" 4
9240 .IX Item "-segprot"
9241 .IP "\fB\-segs_read_only_addr\fR" 4
9242 .IX Item "-segs_read_only_addr"
9243 .IP "\fB\-segs_read_write_addr\fR" 4
9244 .IX Item "-segs_read_write_addr"
9245 .IP "\fB\-single_module\fR" 4
9246 .IX Item "-single_module"
9247 .IP "\fB\-static\fR" 4
9248 .IX Item "-static"
9249 .IP "\fB\-sub_library\fR" 4
9250 .IX Item "-sub_library"
9251 .IP "\fB\-sub_umbrella\fR" 4
9252 .IX Item "-sub_umbrella"
9253 .IP "\fB\-twolevel_namespace\fR" 4
9254 .IX Item "-twolevel_namespace"
9255 .IP "\fB\-umbrella\fR" 4
9256 .IX Item "-umbrella"
9257 .IP "\fB\-undefined\fR" 4
9258 .IX Item "-undefined"
9259 .IP "\fB\-unexported_symbols_list\fR" 4
9260 .IX Item "-unexported_symbols_list"
9261 .IP "\fB\-weak_reference_mismatches\fR" 4
9262 .IX Item "-weak_reference_mismatches"
9263 .IP "\fB\-whatsloaded\fR" 4
9264 .IX Item "-whatsloaded"
9265 .PD
9266 These options are passed to the Darwin linker.  The Darwin linker man page
9267 describes them in detail.
9268 .PP
9269 \fI\s-1DEC\s0 Alpha Options\fR
9270 .IX Subsection "DEC Alpha Options"
9271 .PP
9272 These \fB\-m\fR options are defined for the \s-1DEC\s0 Alpha implementations:
9273 .IP "\fB\-mno\-soft\-float\fR" 4
9274 .IX Item "-mno-soft-float"
9275 .PD 0
9276 .IP "\fB\-msoft\-float\fR" 4
9277 .IX Item "-msoft-float"
9278 .PD
9279 Use (do not use) the hardware floating-point instructions for
9280 floating-point operations.  When \fB\-msoft\-float\fR is specified,
9281 functions in \fIlibgcc.a\fR will be used to perform floating-point
9282 operations.  Unless they are replaced by routines that emulate the
9283 floating-point operations, or compiled in such a way as to call such
9284 emulations routines, these routines will issue floating-point
9285 operations.   If you are compiling for an Alpha without floating-point
9286 operations, you must ensure that the library is built so as not to call
9287 them.
9288 .Sp
9289 Note that Alpha implementations without floating-point operations are
9290 required to have floating-point registers.
9291 .IP "\fB\-mfp\-reg\fR" 4
9292 .IX Item "-mfp-reg"
9293 .PD 0
9294 .IP "\fB\-mno\-fp\-regs\fR" 4
9295 .IX Item "-mno-fp-regs"
9296 .PD
9297 Generate code that uses (does not use) the floating-point register set.
9298 \&\fB\-mno\-fp\-regs\fR implies \fB\-msoft\-float\fR.  If the floating-point
9299 register set is not used, floating point operands are passed in integer
9300 registers as if they were integers and floating-point results are passed
9301 in \f(CW$0\fR instead of \f(CW$f0\fR.  This is a non-standard calling sequence,
9302 so any function with a floating-point argument or return value called by code
9303 compiled with \fB\-mno\-fp\-regs\fR must also be compiled with that
9304 option.
9305 .Sp
9306 A typical use of this option is building a kernel that does not use,
9307 and hence need not save and restore, any floating-point registers.
9308 .IP "\fB\-mieee\fR" 4
9309 .IX Item "-mieee"
9310 The Alpha architecture implements floating-point hardware optimized for
9311 maximum performance.  It is mostly compliant with the \s-1IEEE\s0 floating
9312 point standard.  However, for full compliance, software assistance is
9313 required.  This option generates code fully \s-1IEEE\s0 compliant code
9314 \&\fIexcept\fR that the \fIinexact-flag\fR is not maintained (see below).
9315 If this option is turned on, the preprocessor macro \f(CW\*(C`_IEEE_FP\*(C'\fR is
9316 defined during compilation.  The resulting code is less efficient but is
9317 able to correctly support denormalized numbers and exceptional \s-1IEEE\s0
9318 values such as not-a-number and plus/minus infinity.  Other Alpha
9319 compilers call this option \fB\-ieee_with_no_inexact\fR.
9320 .IP "\fB\-mieee\-with\-inexact\fR" 4
9321 .IX Item "-mieee-with-inexact"
9322 This is like \fB\-mieee\fR except the generated code also maintains
9323 the \s-1IEEE\s0 \fIinexact-flag\fR.  Turning on this option causes the
9324 generated code to implement fully-compliant \s-1IEEE\s0 math.  In addition to
9325 \&\f(CW\*(C`_IEEE_FP\*(C'\fR, \f(CW\*(C`_IEEE_FP_EXACT\*(C'\fR is defined as a preprocessor
9326 macro.  On some Alpha implementations the resulting code may execute
9327 significantly slower than the code generated by default.  Since there is
9328 very little code that depends on the \fIinexact-flag\fR, you should
9329 normally not specify this option.  Other Alpha compilers call this
9330 option \fB\-ieee_with_inexact\fR.
9331 .IP "\fB\-mfp\-trap\-mode=\fR\fItrap-mode\fR" 4
9332 .IX Item "-mfp-trap-mode=trap-mode"
9333 This option controls what floating-point related traps are enabled.
9334 Other Alpha compilers call this option \fB\-fptm\fR \fItrap-mode\fR.
9335 The trap mode can be set to one of four values:
9336 .RS 4
9337 .IP "\fBn\fR" 4
9338 .IX Item "n"
9339 This is the default (normal) setting.  The only traps that are enabled
9340 are the ones that cannot be disabled in software (e.g., division by zero
9341 trap).
9342 .IP "\fBu\fR" 4
9343 .IX Item "u"
9344 In addition to the traps enabled by \fBn\fR, underflow traps are enabled
9345 as well.
9346 .IP "\fBsu\fR" 4
9347 .IX Item "su"
9348 Like \fBu\fR, but the instructions are marked to be safe for software
9349 completion (see Alpha architecture manual for details).
9350 .IP "\fBsui\fR" 4
9351 .IX Item "sui"
9352 Like \fBsu\fR, but inexact traps are enabled as well.
9353 .RE
9354 .RS 4
9355 .RE
9356 .IP "\fB\-mfp\-rounding\-mode=\fR\fIrounding-mode\fR" 4
9357 .IX Item "-mfp-rounding-mode=rounding-mode"
9358 Selects the \s-1IEEE\s0 rounding mode.  Other Alpha compilers call this option
9359 \&\fB\-fprm\fR \fIrounding-mode\fR.  The \fIrounding-mode\fR can be one
9360 of:
9361 .RS 4
9362 .IP "\fBn\fR" 4
9363 .IX Item "n"
9364 Normal \s-1IEEE\s0 rounding mode.  Floating point numbers are rounded towards
9365 the nearest machine number or towards the even machine number in case
9366 of a tie.
9367 .IP "\fBm\fR" 4
9368 .IX Item "m"
9369 Round towards minus infinity.
9370 .IP "\fBc\fR" 4
9371 .IX Item "c"
9372 Chopped rounding mode.  Floating point numbers are rounded towards zero.
9373 .IP "\fBd\fR" 4
9374 .IX Item "d"
9375 Dynamic rounding mode.  A field in the floating point control register
9376 (\fIfpcr\fR, see Alpha architecture reference manual) controls the
9377 rounding mode in effect.  The C library initializes this register for
9378 rounding towards plus infinity.  Thus, unless your program modifies the
9379 \&\fIfpcr\fR, \fBd\fR corresponds to round towards plus infinity.
9380 .RE
9381 .RS 4
9382 .RE
9383 .IP "\fB\-mtrap\-precision=\fR\fItrap-precision\fR" 4
9384 .IX Item "-mtrap-precision=trap-precision"
9385 In the Alpha architecture, floating point traps are imprecise.  This
9386 means without software assistance it is impossible to recover from a
9387 floating trap and program execution normally needs to be terminated.
9388 \&\s-1GCC\s0 can generate code that can assist operating system trap handlers
9389 in determining the exact location that caused a floating point trap.
9390 Depending on the requirements of an application, different levels of
9391 precisions can be selected:
9392 .RS 4
9393 .IP "\fBp\fR" 4
9394 .IX Item "p"
9395 Program precision.  This option is the default and means a trap handler
9396 can only identify which program caused a floating point exception.
9397 .IP "\fBf\fR" 4
9398 .IX Item "f"
9399 Function precision.  The trap handler can determine the function that
9400 caused a floating point exception.
9401 .IP "\fBi\fR" 4
9402 .IX Item "i"
9403 Instruction precision.  The trap handler can determine the exact
9404 instruction that caused a floating point exception.
9405 .RE
9406 .RS 4
9407 .Sp
9408 Other Alpha compilers provide the equivalent options called
9409 \&\fB\-scope_safe\fR and \fB\-resumption_safe\fR.
9410 .RE
9411 .IP "\fB\-mieee\-conformant\fR" 4
9412 .IX Item "-mieee-conformant"
9413 This option marks the generated code as \s-1IEEE\s0 conformant.  You must not
9414 use this option unless you also specify \fB\-mtrap\-precision=i\fR and either
9415 \&\fB\-mfp\-trap\-mode=su\fR or \fB\-mfp\-trap\-mode=sui\fR.  Its only effect
9416 is to emit the line \fB.eflag 48\fR in the function prologue of the
9417 generated assembly file.  Under \s-1DEC\s0 Unix, this has the effect that
9418 IEEE-conformant math library routines will be linked in.
9419 .IP "\fB\-mbuild\-constants\fR" 4
9420 .IX Item "-mbuild-constants"
9421 Normally \s-1GCC\s0 examines a 32\- or 64\-bit integer constant to
9422 see if it can construct it from smaller constants in two or three
9423 instructions.  If it cannot, it will output the constant as a literal and
9424 generate code to load it from the data segment at runtime.
9425 .Sp
9426 Use this option to require \s-1GCC\s0 to construct \fIall\fR integer constants
9427 using code, even if it takes more instructions (the maximum is six).
9428 .Sp
9429 You would typically use this option to build a shared library dynamic
9430 loader.  Itself a shared library, it must relocate itself in memory
9431 before it can find the variables and constants in its own data segment.
9432 .IP "\fB\-malpha\-as\fR" 4
9433 .IX Item "-malpha-as"
9434 .PD 0
9435 .IP "\fB\-mgas\fR" 4
9436 .IX Item "-mgas"
9437 .PD
9438 Select whether to generate code to be assembled by the vendor-supplied
9439 assembler (\fB\-malpha\-as\fR) or by the \s-1GNU\s0 assembler \fB\-mgas\fR.
9440 .IP "\fB\-mbwx\fR" 4
9441 .IX Item "-mbwx"
9442 .PD 0
9443 .IP "\fB\-mno\-bwx\fR" 4
9444 .IX Item "-mno-bwx"
9445 .IP "\fB\-mcix\fR" 4
9446 .IX Item "-mcix"
9447 .IP "\fB\-mno\-cix\fR" 4
9448 .IX Item "-mno-cix"
9449 .IP "\fB\-mfix\fR" 4
9450 .IX Item "-mfix"
9451 .IP "\fB\-mno\-fix\fR" 4
9452 .IX Item "-mno-fix"
9453 .IP "\fB\-mmax\fR" 4
9454 .IX Item "-mmax"
9455 .IP "\fB\-mno\-max\fR" 4
9456 .IX Item "-mno-max"
9457 .PD
9458 Indicate whether \s-1GCC\s0 should generate code to use the optional \s-1BWX\s0,
9459 \&\s-1CIX\s0, \s-1FIX\s0 and \s-1MAX\s0 instruction sets.  The default is to use the instruction
9460 sets supported by the \s-1CPU\s0 type specified via \fB\-mcpu=\fR option or that
9461 of the \s-1CPU\s0 on which \s-1GCC\s0 was built if none was specified.
9462 .IP "\fB\-mfloat\-vax\fR" 4
9463 .IX Item "-mfloat-vax"
9464 .PD 0
9465 .IP "\fB\-mfloat\-ieee\fR" 4
9466 .IX Item "-mfloat-ieee"
9467 .PD
9468 Generate code that uses (does not use) \s-1VAX\s0 F and G floating point
9469 arithmetic instead of \s-1IEEE\s0 single and double precision.
9470 .IP "\fB\-mexplicit\-relocs\fR" 4
9471 .IX Item "-mexplicit-relocs"
9472 .PD 0
9473 .IP "\fB\-mno\-explicit\-relocs\fR" 4
9474 .IX Item "-mno-explicit-relocs"
9475 .PD
9476 Older Alpha assemblers provided no way to generate symbol relocations
9477 except via assembler macros.  Use of these macros does not allow
9478 optimal instruction scheduling.  \s-1GNU\s0 binutils as of version 2.12
9479 supports a new syntax that allows the compiler to explicitly mark
9480 which relocations should apply to which instructions.  This option
9481 is mostly useful for debugging, as \s-1GCC\s0 detects the capabilities of
9482 the assembler when it is built and sets the default accordingly.
9483 .IP "\fB\-msmall\-data\fR" 4
9484 .IX Item "-msmall-data"
9485 .PD 0
9486 .IP "\fB\-mlarge\-data\fR" 4
9487 .IX Item "-mlarge-data"
9488 .PD
9489 When \fB\-mexplicit\-relocs\fR is in effect, static data is
9490 accessed via \fIgp-relative\fR relocations.  When \fB\-msmall\-data\fR
9491 is used, objects 8 bytes long or smaller are placed in a \fIsmall data area\fR
9492 (the \f(CW\*(C`.sdata\*(C'\fR and \f(CW\*(C`.sbss\*(C'\fR sections) and are accessed via
9493 16\-bit relocations off of the \f(CW$gp\fR register.  This limits the
9494 size of the small data area to 64KB, but allows the variables to be
9495 directly accessed via a single instruction.
9496 .Sp
9497 The default is \fB\-mlarge\-data\fR.  With this option the data area
9498 is limited to just below 2GB.  Programs that require more than 2GB of
9499 data must use \f(CW\*(C`malloc\*(C'\fR or \f(CW\*(C`mmap\*(C'\fR to allocate the data in the
9500 heap instead of in the program's data segment.
9501 .Sp
9502 When generating code for shared libraries, \fB\-fpic\fR implies
9503 \&\fB\-msmall\-data\fR and \fB\-fPIC\fR implies \fB\-mlarge\-data\fR.
9504 .IP "\fB\-msmall\-text\fR" 4
9505 .IX Item "-msmall-text"
9506 .PD 0
9507 .IP "\fB\-mlarge\-text\fR" 4
9508 .IX Item "-mlarge-text"
9509 .PD
9510 When \fB\-msmall\-text\fR is used, the compiler assumes that the
9511 code of the entire program (or shared library) fits in 4MB, and is
9512 thus reachable with a branch instruction.  When \fB\-msmall\-data\fR
9513 is used, the compiler can assume that all local symbols share the
9514 same \f(CW$gp\fR value, and thus reduce the number of instructions
9515 required for a function call from 4 to 1.
9516 .Sp
9517 The default is \fB\-mlarge\-text\fR.
9518 .IP "\fB\-mcpu=\fR\fIcpu_type\fR" 4
9519 .IX Item "-mcpu=cpu_type"
9520 Set the instruction set and instruction scheduling parameters for
9521 machine type \fIcpu_type\fR.  You can specify either the \fB\s-1EV\s0\fR
9522 style name or the corresponding chip number.  \s-1GCC\s0 supports scheduling
9523 parameters for the \s-1EV4\s0, \s-1EV5\s0 and \s-1EV6\s0 family of processors and will
9524 choose the default values for the instruction set from the processor
9525 you specify.  If you do not specify a processor type, \s-1GCC\s0 will default
9526 to the processor on which the compiler was built.
9527 .Sp
9528 Supported values for \fIcpu_type\fR are
9529 .RS 4
9530 .IP "\fBev4\fR" 4
9531 .IX Item "ev4"
9532 .PD 0
9533 .IP "\fBev45\fR" 4
9534 .IX Item "ev45"
9535 .IP "\fB21064\fR" 4
9536 .IX Item "21064"
9537 .PD
9538 Schedules as an \s-1EV4\s0 and has no instruction set extensions.
9539 .IP "\fBev5\fR" 4
9540 .IX Item "ev5"
9541 .PD 0
9542 .IP "\fB21164\fR" 4
9543 .IX Item "21164"
9544 .PD
9545 Schedules as an \s-1EV5\s0 and has no instruction set extensions.
9546 .IP "\fBev56\fR" 4
9547 .IX Item "ev56"
9548 .PD 0
9549 .IP "\fB21164a\fR" 4
9550 .IX Item "21164a"
9551 .PD
9552 Schedules as an \s-1EV5\s0 and supports the \s-1BWX\s0 extension.
9553 .IP "\fBpca56\fR" 4
9554 .IX Item "pca56"
9555 .PD 0
9556 .IP "\fB21164pc\fR" 4
9557 .IX Item "21164pc"
9558 .IP "\fB21164PC\fR" 4
9559 .IX Item "21164PC"
9560 .PD
9561 Schedules as an \s-1EV5\s0 and supports the \s-1BWX\s0 and \s-1MAX\s0 extensions.
9562 .IP "\fBev6\fR" 4
9563 .IX Item "ev6"
9564 .PD 0
9565 .IP "\fB21264\fR" 4
9566 .IX Item "21264"
9567 .PD
9568 Schedules as an \s-1EV6\s0 and supports the \s-1BWX\s0, \s-1FIX\s0, and \s-1MAX\s0 extensions.
9569 .IP "\fBev67\fR" 4
9570 .IX Item "ev67"
9571 .PD 0
9572 .IP "\fB21264a\fR" 4
9573 .IX Item "21264a"
9574 .PD
9575 Schedules as an \s-1EV6\s0 and supports the \s-1BWX\s0, \s-1CIX\s0, \s-1FIX\s0, and \s-1MAX\s0 extensions.
9576 .RE
9577 .RS 4
9578 .Sp
9579 Native Linux/GNU toolchains also support the value \fBnative\fR,
9580 which selects the best architecture option for the host processor.
9581 \&\fB\-mcpu=native\fR has no effect if \s-1GCC\s0 does not recognize
9582 the processor.
9583 .RE
9584 .IP "\fB\-mtune=\fR\fIcpu_type\fR" 4
9585 .IX Item "-mtune=cpu_type"
9586 Set only the instruction scheduling parameters for machine type
9587 \&\fIcpu_type\fR.  The instruction set is not changed.
9588 .Sp
9589 Native Linux/GNU toolchains also support the value \fBnative\fR,
9590 which selects the best architecture option for the host processor.
9591 \&\fB\-mtune=native\fR has no effect if \s-1GCC\s0 does not recognize
9592 the processor.
9593 .IP "\fB\-mmemory\-latency=\fR\fItime\fR" 4
9594 .IX Item "-mmemory-latency=time"
9595 Sets the latency the scheduler should assume for typical memory
9596 references as seen by the application.  This number is highly
9597 dependent on the memory access patterns used by the application
9598 and the size of the external cache on the machine.
9599 .Sp
9600 Valid options for \fItime\fR are
9601 .RS 4
9602 .IP "\fInumber\fR" 4
9603 .IX Item "number"
9604 A decimal number representing clock cycles.
9605 .IP "\fBL1\fR" 4
9606 .IX Item "L1"
9607 .PD 0
9608 .IP "\fBL2\fR" 4
9609 .IX Item "L2"
9610 .IP "\fBL3\fR" 4
9611 .IX Item "L3"
9612 .IP "\fBmain\fR" 4
9613 .IX Item "main"
9614 .PD
9615 The compiler contains estimates of the number of clock cycles for
9616 \&\*(L"typical\*(R" \s-1EV4\s0 & \s-1EV5\s0 hardware for the Level 1, 2 & 3 caches
9617 (also called Dcache, Scache, and Bcache), as well as to main memory.
9618 Note that L3 is only valid for \s-1EV5\s0.
9619 .RE
9620 .RS 4
9621 .RE
9622 .PP
9623 \fI\s-1DEC\s0 Alpha/VMS Options\fR
9624 .IX Subsection "DEC Alpha/VMS Options"
9625 .PP
9626 These \fB\-m\fR options are defined for the \s-1DEC\s0 Alpha/VMS implementations:
9627 .IP "\fB\-mvms\-return\-codes\fR" 4
9628 .IX Item "-mvms-return-codes"
9629 Return \s-1VMS\s0 condition codes from main.  The default is to return \s-1POSIX\s0
9630 style condition (e.g. error) codes.
9631 .PP
9632 \fI\s-1FR30\s0 Options\fR
9633 .IX Subsection "FR30 Options"
9634 .PP
9635 These options are defined specifically for the \s-1FR30\s0 port.
9636 .IP "\fB\-msmall\-model\fR" 4
9637 .IX Item "-msmall-model"
9638 Use the small address space model.  This can produce smaller code, but
9639 it does assume that all symbolic values and addresses will fit into a
9640 20\-bit range.
9641 .IP "\fB\-mno\-lsim\fR" 4
9642 .IX Item "-mno-lsim"
9643 Assume that run-time support has been provided and so there is no need
9644 to include the simulator library (\fIlibsim.a\fR) on the linker
9645 command line.
9646 .PP
9647 \fI\s-1FRV\s0 Options\fR
9648 .IX Subsection "FRV Options"
9649 .IP "\fB\-mgpr\-32\fR" 4
9650 .IX Item "-mgpr-32"
9651 Only use the first 32 general purpose registers.
9652 .IP "\fB\-mgpr\-64\fR" 4
9653 .IX Item "-mgpr-64"
9654 Use all 64 general purpose registers.
9655 .IP "\fB\-mfpr\-32\fR" 4
9656 .IX Item "-mfpr-32"
9657 Use only the first 32 floating point registers.
9658 .IP "\fB\-mfpr\-64\fR" 4
9659 .IX Item "-mfpr-64"
9660 Use all 64 floating point registers
9661 .IP "\fB\-mhard\-float\fR" 4
9662 .IX Item "-mhard-float"
9663 Use hardware instructions for floating point operations.
9664 .IP "\fB\-msoft\-float\fR" 4
9665 .IX Item "-msoft-float"
9666 Use library routines for floating point operations.
9667 .IP "\fB\-malloc\-cc\fR" 4
9668 .IX Item "-malloc-cc"
9669 Dynamically allocate condition code registers.
9670 .IP "\fB\-mfixed\-cc\fR" 4
9671 .IX Item "-mfixed-cc"
9672 Do not try to dynamically allocate condition code registers, only
9673 use \f(CW\*(C`icc0\*(C'\fR and \f(CW\*(C`fcc0\*(C'\fR.
9674 .IP "\fB\-mdword\fR" 4
9675 .IX Item "-mdword"
9676 Change \s-1ABI\s0 to use double word insns.
9677 .IP "\fB\-mno\-dword\fR" 4
9678 .IX Item "-mno-dword"
9679 Do not use double word instructions.
9680 .IP "\fB\-mdouble\fR" 4
9681 .IX Item "-mdouble"
9682 Use floating point double instructions.
9683 .IP "\fB\-mno\-double\fR" 4
9684 .IX Item "-mno-double"
9685 Do not use floating point double instructions.
9686 .IP "\fB\-mmedia\fR" 4
9687 .IX Item "-mmedia"
9688 Use media instructions.
9689 .IP "\fB\-mno\-media\fR" 4
9690 .IX Item "-mno-media"
9691 Do not use media instructions.
9692 .IP "\fB\-mmuladd\fR" 4
9693 .IX Item "-mmuladd"
9694 Use multiply and add/subtract instructions.
9695 .IP "\fB\-mno\-muladd\fR" 4
9696 .IX Item "-mno-muladd"
9697 Do not use multiply and add/subtract instructions.
9698 .IP "\fB\-mfdpic\fR" 4
9699 .IX Item "-mfdpic"
9700 Select the \s-1FDPIC\s0 \s-1ABI\s0, that uses function descriptors to represent
9701 pointers to functions.  Without any PIC/PIE\-related options, it
9702 implies \fB\-fPIE\fR.  With \fB\-fpic\fR or \fB\-fpie\fR, it
9703 assumes \s-1GOT\s0 entries and small data are within a 12\-bit range from the
9704 \&\s-1GOT\s0 base address; with \fB\-fPIC\fR or \fB\-fPIE\fR, \s-1GOT\s0 offsets
9705 are computed with 32 bits.
9706 With a \fBbfin-elf\fR target, this option implies \fB\-msim\fR.
9707 .IP "\fB\-minline\-plt\fR" 4
9708 .IX Item "-minline-plt"
9709 Enable inlining of \s-1PLT\s0 entries in function calls to functions that are
9710 not known to bind locally.  It has no effect without \fB\-mfdpic\fR.
9711 It's enabled by default if optimizing for speed and compiling for
9712 shared libraries (i.e., \fB\-fPIC\fR or \fB\-fpic\fR), or when an
9713 optimization option such as \fB\-O3\fR or above is present in the
9714 command line.
9715 .IP "\fB\-mTLS\fR" 4
9716 .IX Item "-mTLS"
9717 Assume a large \s-1TLS\s0 segment when generating thread-local code.
9718 .IP "\fB\-mtls\fR" 4
9719 .IX Item "-mtls"
9720 Do not assume a large \s-1TLS\s0 segment when generating thread-local code.
9721 .IP "\fB\-mgprel\-ro\fR" 4
9722 .IX Item "-mgprel-ro"
9723 Enable the use of \f(CW\*(C`GPREL\*(C'\fR relocations in the \s-1FDPIC\s0 \s-1ABI\s0 for data
9724 that is known to be in read-only sections.  It's enabled by default,
9725 except for \fB\-fpic\fR or \fB\-fpie\fR: even though it may help
9726 make the global offset table smaller, it trades 1 instruction for 4.
9727 With \fB\-fPIC\fR or \fB\-fPIE\fR, it trades 3 instructions for 4,
9728 one of which may be shared by multiple symbols, and it avoids the need
9729 for a \s-1GOT\s0 entry for the referenced symbol, so it's more likely to be a
9730 win.  If it is not, \fB\-mno\-gprel\-ro\fR can be used to disable it.
9731 .IP "\fB\-multilib\-library\-pic\fR" 4
9732 .IX Item "-multilib-library-pic"
9733 Link with the (library, not \s-1FD\s0) pic libraries.  It's implied by
9734 \&\fB\-mlibrary\-pic\fR, as well as by \fB\-fPIC\fR and
9735 \&\fB\-fpic\fR without \fB\-mfdpic\fR.  You should never have to use
9736 it explicitly.
9737 .IP "\fB\-mlinked\-fp\fR" 4
9738 .IX Item "-mlinked-fp"
9739 Follow the \s-1EABI\s0 requirement of always creating a frame pointer whenever
9740 a stack frame is allocated.  This option is enabled by default and can
9741 be disabled with \fB\-mno\-linked\-fp\fR.
9742 .IP "\fB\-mlong\-calls\fR" 4
9743 .IX Item "-mlong-calls"
9744 Use indirect addressing to call functions outside the current
9745 compilation unit.  This allows the functions to be placed anywhere
9746 within the 32\-bit address space.
9747 .IP "\fB\-malign\-labels\fR" 4
9748 .IX Item "-malign-labels"
9749 Try to align labels to an 8\-byte boundary by inserting nops into the
9750 previous packet.  This option only has an effect when \s-1VLIW\s0 packing
9751 is enabled.  It doesn't create new packets; it merely adds nops to
9752 existing ones.
9753 .IP "\fB\-mlibrary\-pic\fR" 4
9754 .IX Item "-mlibrary-pic"
9755 Generate position-independent \s-1EABI\s0 code.
9756 .IP "\fB\-macc\-4\fR" 4
9757 .IX Item "-macc-4"
9758 Use only the first four media accumulator registers.
9759 .IP "\fB\-macc\-8\fR" 4
9760 .IX Item "-macc-8"
9761 Use all eight media accumulator registers.
9762 .IP "\fB\-mpack\fR" 4
9763 .IX Item "-mpack"
9764 Pack \s-1VLIW\s0 instructions.
9765 .IP "\fB\-mno\-pack\fR" 4
9766 .IX Item "-mno-pack"
9767 Do not pack \s-1VLIW\s0 instructions.
9768 .IP "\fB\-mno\-eflags\fR" 4
9769 .IX Item "-mno-eflags"
9770 Do not mark \s-1ABI\s0 switches in e_flags.
9771 .IP "\fB\-mcond\-move\fR" 4
9772 .IX Item "-mcond-move"
9773 Enable the use of conditional-move instructions (default).
9774 .Sp
9775 This switch is mainly for debugging the compiler and will likely be removed
9776 in a future version.
9777 .IP "\fB\-mno\-cond\-move\fR" 4
9778 .IX Item "-mno-cond-move"
9779 Disable the use of conditional-move instructions.
9780 .Sp
9781 This switch is mainly for debugging the compiler and will likely be removed
9782 in a future version.
9783 .IP "\fB\-mscc\fR" 4
9784 .IX Item "-mscc"
9785 Enable the use of conditional set instructions (default).
9786 .Sp
9787 This switch is mainly for debugging the compiler and will likely be removed
9788 in a future version.
9789 .IP "\fB\-mno\-scc\fR" 4
9790 .IX Item "-mno-scc"
9791 Disable the use of conditional set instructions.
9792 .Sp
9793 This switch is mainly for debugging the compiler and will likely be removed
9794 in a future version.
9795 .IP "\fB\-mcond\-exec\fR" 4
9796 .IX Item "-mcond-exec"
9797 Enable the use of conditional execution (default).
9798 .Sp
9799 This switch is mainly for debugging the compiler and will likely be removed
9800 in a future version.
9801 .IP "\fB\-mno\-cond\-exec\fR" 4
9802 .IX Item "-mno-cond-exec"
9803 Disable the use of conditional execution.
9804 .Sp
9805 This switch is mainly for debugging the compiler and will likely be removed
9806 in a future version.
9807 .IP "\fB\-mvliw\-branch\fR" 4
9808 .IX Item "-mvliw-branch"
9809 Run a pass to pack branches into \s-1VLIW\s0 instructions (default).
9810 .Sp
9811 This switch is mainly for debugging the compiler and will likely be removed
9812 in a future version.
9813 .IP "\fB\-mno\-vliw\-branch\fR" 4
9814 .IX Item "-mno-vliw-branch"
9815 Do not run a pass to pack branches into \s-1VLIW\s0 instructions.
9816 .Sp
9817 This switch is mainly for debugging the compiler and will likely be removed
9818 in a future version.
9819 .IP "\fB\-mmulti\-cond\-exec\fR" 4
9820 .IX Item "-mmulti-cond-exec"
9821 Enable optimization of \f(CW\*(C`&&\*(C'\fR and \f(CW\*(C`||\*(C'\fR in conditional execution
9822 (default).
9823 .Sp
9824 This switch is mainly for debugging the compiler and will likely be removed
9825 in a future version.
9826 .IP "\fB\-mno\-multi\-cond\-exec\fR" 4
9827 .IX Item "-mno-multi-cond-exec"
9828 Disable optimization of \f(CW\*(C`&&\*(C'\fR and \f(CW\*(C`||\*(C'\fR in conditional execution.
9829 .Sp
9830 This switch is mainly for debugging the compiler and will likely be removed
9831 in a future version.
9832 .IP "\fB\-mnested\-cond\-exec\fR" 4
9833 .IX Item "-mnested-cond-exec"
9834 Enable nested conditional execution optimizations (default).
9835 .Sp
9836 This switch is mainly for debugging the compiler and will likely be removed
9837 in a future version.
9838 .IP "\fB\-mno\-nested\-cond\-exec\fR" 4
9839 .IX Item "-mno-nested-cond-exec"
9840 Disable nested conditional execution optimizations.
9841 .Sp
9842 This switch is mainly for debugging the compiler and will likely be removed
9843 in a future version.
9844 .IP "\fB\-moptimize\-membar\fR" 4
9845 .IX Item "-moptimize-membar"
9846 This switch removes redundant \f(CW\*(C`membar\*(C'\fR instructions from the
9847 compiler generated code.  It is enabled by default.
9848 .IP "\fB\-mno\-optimize\-membar\fR" 4
9849 .IX Item "-mno-optimize-membar"
9850 This switch disables the automatic removal of redundant \f(CW\*(C`membar\*(C'\fR
9851 instructions from the generated code.
9852 .IP "\fB\-mtomcat\-stats\fR" 4
9853 .IX Item "-mtomcat-stats"
9854 Cause gas to print out tomcat statistics.
9855 .IP "\fB\-mcpu=\fR\fIcpu\fR" 4
9856 .IX Item "-mcpu=cpu"
9857 Select the processor type for which to generate code.  Possible values are
9858 \&\fBfrv\fR, \fBfr550\fR, \fBtomcat\fR, \fBfr500\fR, \fBfr450\fR,
9859 \&\fBfr405\fR, \fBfr400\fR, \fBfr300\fR and \fBsimple\fR.
9860 .PP
9861 \fIGNU/Linux Options\fR
9862 .IX Subsection "GNU/Linux Options"
9863 .PP
9864 These \fB\-m\fR options are defined for GNU/Linux targets:
9865 .IP "\fB\-mglibc\fR" 4
9866 .IX Item "-mglibc"
9867 Use the \s-1GNU\s0 C library instead of uClibc.  This is the default except
9868 on \fB*\-*\-linux\-*uclibc*\fR targets.
9869 .IP "\fB\-muclibc\fR" 4
9870 .IX Item "-muclibc"
9871 Use uClibc instead of the \s-1GNU\s0 C library.  This is the default on
9872 \&\fB*\-*\-linux\-*uclibc*\fR targets.
9873 .PP
9874 \fIH8/300 Options\fR
9875 .IX Subsection "H8/300 Options"
9876 .PP
9877 These \fB\-m\fR options are defined for the H8/300 implementations:
9878 .IP "\fB\-mrelax\fR" 4
9879 .IX Item "-mrelax"
9880 Shorten some address references at link time, when possible; uses the
9881 linker option \fB\-relax\fR.  
9882 .IP "\fB\-mh\fR" 4
9883 .IX Item "-mh"
9884 Generate code for the H8/300H.
9885 .IP "\fB\-ms\fR" 4
9886 .IX Item "-ms"
9887 Generate code for the H8S.
9888 .IP "\fB\-mn\fR" 4
9889 .IX Item "-mn"
9890 Generate code for the H8S and H8/300H in the normal mode.  This switch
9891 must be used either with \fB\-mh\fR or \fB\-ms\fR.
9892 .IP "\fB\-ms2600\fR" 4
9893 .IX Item "-ms2600"
9894 Generate code for the H8S/2600.  This switch must be used with \fB\-ms\fR.
9895 .IP "\fB\-mint32\fR" 4
9896 .IX Item "-mint32"
9897 Make \f(CW\*(C`int\*(C'\fR data 32 bits by default.
9898 .IP "\fB\-malign\-300\fR" 4
9899 .IX Item "-malign-300"
9900 On the H8/300H and H8S, use the same alignment rules as for the H8/300.
9901 The default for the H8/300H and H8S is to align longs and floats on 4
9902 byte boundaries.
9903 \&\fB\-malign\-300\fR causes them to be aligned on 2 byte boundaries.
9904 This option has no effect on the H8/300.
9905 .PP
9906 \fI\s-1HPPA\s0 Options\fR
9907 .IX Subsection "HPPA Options"
9908 .PP
9909 These \fB\-m\fR options are defined for the \s-1HPPA\s0 family of computers:
9910 .IP "\fB\-march=\fR\fIarchitecture-type\fR" 4
9911 .IX Item "-march=architecture-type"
9912 Generate code for the specified architecture.  The choices for
9913 \&\fIarchitecture-type\fR are \fB1.0\fR for \s-1PA\s0 1.0, \fB1.1\fR for \s-1PA\s0
9914 1.1, and \fB2.0\fR for \s-1PA\s0 2.0 processors.  Refer to
9915 \&\fI/usr/lib/sched.models\fR on an HP-UX system to determine the proper
9916 architecture option for your machine.  Code compiled for lower numbered
9917 architectures will run on higher numbered architectures, but not the
9918 other way around.
9919 .IP "\fB\-mpa\-risc\-1\-0\fR" 4
9920 .IX Item "-mpa-risc-1-0"
9921 .PD 0
9922 .IP "\fB\-mpa\-risc\-1\-1\fR" 4
9923 .IX Item "-mpa-risc-1-1"
9924 .IP "\fB\-mpa\-risc\-2\-0\fR" 4
9925 .IX Item "-mpa-risc-2-0"
9926 .PD
9927 Synonyms for \fB\-march=1.0\fR, \fB\-march=1.1\fR, and \fB\-march=2.0\fR respectively.
9928 .IP "\fB\-mbig\-switch\fR" 4
9929 .IX Item "-mbig-switch"
9930 Generate code suitable for big switch tables.  Use this option only if
9931 the assembler/linker complain about out of range branches within a switch
9932 table.
9933 .IP "\fB\-mjump\-in\-delay\fR" 4
9934 .IX Item "-mjump-in-delay"
9935 Fill delay slots of function calls with unconditional jump instructions
9936 by modifying the return pointer for the function call to be the target
9937 of the conditional jump.
9938 .IP "\fB\-mdisable\-fpregs\fR" 4
9939 .IX Item "-mdisable-fpregs"
9940 Prevent floating point registers from being used in any manner.  This is
9941 necessary for compiling kernels which perform lazy context switching of
9942 floating point registers.  If you use this option and attempt to perform
9943 floating point operations, the compiler will abort.
9944 .IP "\fB\-mdisable\-indexing\fR" 4
9945 .IX Item "-mdisable-indexing"
9946 Prevent the compiler from using indexing address modes.  This avoids some
9947 rather obscure problems when compiling \s-1MIG\s0 generated code under \s-1MACH\s0.
9948 .IP "\fB\-mno\-space\-regs\fR" 4
9949 .IX Item "-mno-space-regs"
9950 Generate code that assumes the target has no space registers.  This allows
9951 \&\s-1GCC\s0 to generate faster indirect calls and use unscaled index address modes.
9952 .Sp
9953 Such code is suitable for level 0 \s-1PA\s0 systems and kernels.
9954 .IP "\fB\-mfast\-indirect\-calls\fR" 4
9955 .IX Item "-mfast-indirect-calls"
9956 Generate code that assumes calls never cross space boundaries.  This
9957 allows \s-1GCC\s0 to emit code which performs faster indirect calls.
9958 .Sp
9959 This option will not work in the presence of shared libraries or nested
9960 functions.
9961 .IP "\fB\-mfixed\-range=\fR\fIregister-range\fR" 4
9962 .IX Item "-mfixed-range=register-range"
9963 Generate code treating the given register range as fixed registers.
9964 A fixed register is one that the register allocator can not use.  This is
9965 useful when compiling kernel code.  A register range is specified as
9966 two registers separated by a dash.  Multiple register ranges can be
9967 specified separated by a comma.
9968 .IP "\fB\-mlong\-load\-store\fR" 4
9969 .IX Item "-mlong-load-store"
9970 Generate 3\-instruction load and store sequences as sometimes required by
9971 the HP-UX 10 linker.  This is equivalent to the \fB+k\fR option to
9972 the \s-1HP\s0 compilers.
9973 .IP "\fB\-mportable\-runtime\fR" 4
9974 .IX Item "-mportable-runtime"
9975 Use the portable calling conventions proposed by \s-1HP\s0 for \s-1ELF\s0 systems.
9976 .IP "\fB\-mgas\fR" 4
9977 .IX Item "-mgas"
9978 Enable the use of assembler directives only \s-1GAS\s0 understands.
9979 .IP "\fB\-mschedule=\fR\fIcpu-type\fR" 4
9980 .IX Item "-mschedule=cpu-type"
9981 Schedule code according to the constraints for the machine type
9982 \&\fIcpu-type\fR.  The choices for \fIcpu-type\fR are \fB700\fR
9983 \&\fB7100\fR, \fB7100LC\fR, \fB7200\fR, \fB7300\fR and \fB8000\fR.  Refer
9984 to \fI/usr/lib/sched.models\fR on an HP-UX system to determine the
9985 proper scheduling option for your machine.  The default scheduling is
9986 \&\fB8000\fR.
9987 .IP "\fB\-mlinker\-opt\fR" 4
9988 .IX Item "-mlinker-opt"
9989 Enable the optimization pass in the HP-UX linker.  Note this makes symbolic
9990 debugging impossible.  It also triggers a bug in the HP-UX 8 and HP-UX 9
9991 linkers in which they give bogus error messages when linking some programs.
9992 .IP "\fB\-msoft\-float\fR" 4
9993 .IX Item "-msoft-float"
9994 Generate output containing library calls for floating point.
9995 \&\fBWarning:\fR the requisite libraries are not available for all \s-1HPPA\s0
9996 targets.  Normally the facilities of the machine's usual C compiler are
9997 used, but this cannot be done directly in cross\-compilation.  You must make
9998 your own arrangements to provide suitable library functions for
9999 cross\-compilation.
10000 .Sp
10001 \&\fB\-msoft\-float\fR changes the calling convention in the output file;
10002 therefore, it is only useful if you compile \fIall\fR of a program with
10003 this option.  In particular, you need to compile \fIlibgcc.a\fR, the
10004 library that comes with \s-1GCC\s0, with \fB\-msoft\-float\fR in order for
10005 this to work.
10006 .IP "\fB\-msio\fR" 4
10007 .IX Item "-msio"
10008 Generate the predefine, \f(CW\*(C`_SIO\*(C'\fR, for server \s-1IO\s0.  The default is
10009 \&\fB\-mwsio\fR.  This generates the predefines, \f(CW\*(C`_\|_hp9000s700\*(C'\fR,
10010 \&\f(CW\*(C`_\|_hp9000s700_\|_\*(C'\fR and \f(CW\*(C`_WSIO\*(C'\fR, for workstation \s-1IO\s0.  These
10011 options are available under HP-UX and \s-1HI\-UX\s0.
10012 .IP "\fB\-mgnu\-ld\fR" 4
10013 .IX Item "-mgnu-ld"
10014 Use \s-1GNU\s0 ld specific options.  This passes \fB\-shared\fR to ld when
10015 building a shared library.  It is the default when \s-1GCC\s0 is configured,
10016 explicitly or implicitly, with the \s-1GNU\s0 linker.  This option does not
10017 have any affect on which ld is called, it only changes what parameters
10018 are passed to that ld.  The ld that is called is determined by the
10019 \&\fB\-\-with\-ld\fR configure option, \s-1GCC\s0's program search path, and
10020 finally by the user's \fB\s-1PATH\s0\fR.  The linker used by \s-1GCC\s0 can be printed
10021 using \fBwhich `gcc \-print\-prog\-name=ld`\fR.  This option is only available
10022 on the 64 bit HP-UX \s-1GCC\s0, i.e. configured with \fBhppa*64*\-*\-hpux*\fR.
10023 .IP "\fB\-mhp\-ld\fR" 4
10024 .IX Item "-mhp-ld"
10025 Use \s-1HP\s0 ld specific options.  This passes \fB\-b\fR to ld when building
10026 a shared library and passes \fB+Accept TypeMismatch\fR to ld on all
10027 links.  It is the default when \s-1GCC\s0 is configured, explicitly or
10028 implicitly, with the \s-1HP\s0 linker.  This option does not have any affect on
10029 which ld is called, it only changes what parameters are passed to that
10030 ld.  The ld that is called is determined by the \fB\-\-with\-ld\fR
10031 configure option, \s-1GCC\s0's program search path, and finally by the user's
10032 \&\fB\s-1PATH\s0\fR.  The linker used by \s-1GCC\s0 can be printed using \fBwhich
10033 `gcc \-print\-prog\-name=ld`\fR.  This option is only available on the 64 bit
10034 HP-UX \s-1GCC\s0, i.e. configured with \fBhppa*64*\-*\-hpux*\fR.
10035 .IP "\fB\-mlong\-calls\fR" 4
10036 .IX Item "-mlong-calls"
10037 Generate code that uses long call sequences.  This ensures that a call
10038 is always able to reach linker generated stubs.  The default is to generate
10039 long calls only when the distance from the call site to the beginning
10040 of the function or translation unit, as the case may be, exceeds a
10041 predefined limit set by the branch type being used.  The limits for
10042 normal calls are 7,600,000 and 240,000 bytes, respectively for the
10043 \&\s-1PA\s0 2.0 and \s-1PA\s0 1.X architectures.  Sibcalls are always limited at
10044 240,000 bytes.
10045 .Sp
10046 Distances are measured from the beginning of functions when using the
10047 \&\fB\-ffunction\-sections\fR option, or when using the \fB\-mgas\fR
10048 and \fB\-mno\-portable\-runtime\fR options together under HP-UX with
10049 the \s-1SOM\s0 linker.
10050 .Sp
10051 It is normally not desirable to use this option as it will degrade
10052 performance.  However, it may be useful in large applications,
10053 particularly when partial linking is used to build the application.
10054 .Sp
10055 The types of long calls used depends on the capabilities of the
10056 assembler and linker, and the type of code being generated.  The
10057 impact on systems that support long absolute calls, and long pic
10058 symbol-difference or pc-relative calls should be relatively small.
10059 However, an indirect call is used on 32\-bit \s-1ELF\s0 systems in pic code
10060 and it is quite long.
10061 .IP "\fB\-munix=\fR\fIunix-std\fR" 4
10062 .IX Item "-munix=unix-std"
10063 Generate compiler predefines and select a startfile for the specified
10064 \&\s-1UNIX\s0 standard.  The choices for \fIunix-std\fR are \fB93\fR, \fB95\fR
10065 and \fB98\fR.  \fB93\fR is supported on all HP-UX versions.  \fB95\fR
10066 is available on HP-UX 10.10 and later.  \fB98\fR is available on HP-UX
10067 11.11 and later.  The default values are \fB93\fR for HP-UX 10.00,
10068 \&\fB95\fR for HP-UX 10.10 though to 11.00, and \fB98\fR for HP-UX 11.11
10069 and later.
10070 .Sp
10071 \&\fB\-munix=93\fR provides the same predefines as \s-1GCC\s0 3.3 and 3.4.
10072 \&\fB\-munix=95\fR provides additional predefines for \f(CW\*(C`XOPEN_UNIX\*(C'\fR
10073 and \f(CW\*(C`_XOPEN_SOURCE_EXTENDED\*(C'\fR, and the startfile \fIunix95.o\fR.
10074 \&\fB\-munix=98\fR provides additional predefines for \f(CW\*(C`_XOPEN_UNIX\*(C'\fR,
10075 \&\f(CW\*(C`_XOPEN_SOURCE_EXTENDED\*(C'\fR, \f(CW\*(C`_INCLUDE_\|_STDC_A1_SOURCE\*(C'\fR and
10076 \&\f(CW\*(C`_INCLUDE_XOPEN_SOURCE_500\*(C'\fR, and the startfile \fIunix98.o\fR.
10077 .Sp
10078 It is \fIimportant\fR to note that this option changes the interfaces
10079 for various library routines.  It also affects the operational behavior
10080 of the C library.  Thus, \fIextreme\fR care is needed in using this
10081 option.
10082 .Sp
10083 Library code that is intended to operate with more than one \s-1UNIX\s0
10084 standard must test, set and restore the variable \fI_\|_xpg4_extended_mask\fR
10085 as appropriate.  Most \s-1GNU\s0 software doesn't provide this capability.
10086 .IP "\fB\-nolibdld\fR" 4
10087 .IX Item "-nolibdld"
10088 Suppress the generation of link options to search libdld.sl when the
10089 \&\fB\-static\fR option is specified on HP-UX 10 and later.
10090 .IP "\fB\-static\fR" 4
10091 .IX Item "-static"
10092 The HP-UX implementation of setlocale in libc has a dependency on
10093 libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
10094 when the \fB\-static\fR option is specified, special link options
10095 are needed to resolve this dependency.
10096 .Sp
10097 On HP-UX 10 and later, the \s-1GCC\s0 driver adds the necessary options to
10098 link with libdld.sl when the \fB\-static\fR option is specified.
10099 This causes the resulting binary to be dynamic.  On the 64\-bit port,
10100 the linkers generate dynamic binaries by default in any case.  The
10101 \&\fB\-nolibdld\fR option can be used to prevent the \s-1GCC\s0 driver from
10102 adding these link options.
10103 .IP "\fB\-threads\fR" 4
10104 .IX Item "-threads"
10105 Add support for multithreading with the \fIdce thread\fR library
10106 under \s-1HP\-UX\s0.  This option sets flags for both the preprocessor and
10107 linker.
10108 .PP
10109 \fIIntel 386 and \s-1AMD\s0 x86\-64 Options\fR
10110 .IX Subsection "Intel 386 and AMD x86-64 Options"
10111 .PP
10112 These \fB\-m\fR options are defined for the i386 and x86\-64 family of
10113 computers:
10114 .IP "\fB\-mtune=\fR\fIcpu-type\fR" 4
10115 .IX Item "-mtune=cpu-type"
10116 Tune to \fIcpu-type\fR everything applicable about the generated code, except
10117 for the \s-1ABI\s0 and the set of available instructions.  The choices for
10118 \&\fIcpu-type\fR are:
10119 .RS 4
10120 .IP "\fIgeneric\fR" 4
10121 .IX Item "generic"
10122 Produce code optimized for the most common \s-1IA32/AMD64/EM64T\s0 processors.
10123 If you know the \s-1CPU\s0 on which your code will run, then you should use
10124 the corresponding \fB\-mtune\fR option instead of
10125 \&\fB\-mtune=generic\fR.  But, if you do not know exactly what \s-1CPU\s0 users
10126 of your application will have, then you should use this option.
10127 .Sp
10128 As new processors are deployed in the marketplace, the behavior of this
10129 option will change.  Therefore, if you upgrade to a newer version of
10130 \&\s-1GCC\s0, the code generated option will change to reflect the processors
10131 that were most common when that version of \s-1GCC\s0 was released.
10132 .Sp
10133 There is no \fB\-march=generic\fR option because \fB\-march\fR
10134 indicates the instruction set the compiler can use, and there is no
10135 generic instruction set applicable to all processors.  In contrast,
10136 \&\fB\-mtune\fR indicates the processor (or, in this case, collection of
10137 processors) for which the code is optimized.
10138 .IP "\fInative\fR" 4
10139 .IX Item "native"
10140 This selects the \s-1CPU\s0 to tune for at compilation time by determining
10141 the processor type of the compiling machine.  Using \fB\-mtune=native\fR
10142 will produce code optimized for the local machine under the constraints
10143 of the selected instruction set.  Using \fB\-march=native\fR will
10144 enable all instruction subsets supported by the local machine (hence
10145 the result might not run on different machines).
10146 .IP "\fIi386\fR" 4
10147 .IX Item "i386"
10148 Original Intel's i386 \s-1CPU\s0.
10149 .IP "\fIi486\fR" 4
10150 .IX Item "i486"
10151 Intel's i486 \s-1CPU\s0.  (No scheduling is implemented for this chip.)
10152 .IP "\fIi586, pentium\fR" 4
10153 .IX Item "i586, pentium"
10154 Intel Pentium \s-1CPU\s0 with no \s-1MMX\s0 support.
10155 .IP "\fIpentium-mmx\fR" 4
10156 .IX Item "pentium-mmx"
10157 Intel PentiumMMX \s-1CPU\s0 based on Pentium core with \s-1MMX\s0 instruction set support.
10158 .IP "\fIpentiumpro\fR" 4
10159 .IX Item "pentiumpro"
10160 Intel PentiumPro \s-1CPU\s0.
10161 .IP "\fIi686\fR" 4
10162 .IX Item "i686"
10163 Same as \f(CW\*(C`generic\*(C'\fR, but when used as \f(CW\*(C`march\*(C'\fR option, PentiumPro
10164 instruction set will be used, so the code will run on all i686 family chips.
10165 .IP "\fIpentium2\fR" 4
10166 .IX Item "pentium2"
10167 Intel Pentium2 \s-1CPU\s0 based on PentiumPro core with \s-1MMX\s0 instruction set support.
10168 .IP "\fIpentium3, pentium3m\fR" 4
10169 .IX Item "pentium3, pentium3m"
10170 Intel Pentium3 \s-1CPU\s0 based on PentiumPro core with \s-1MMX\s0 and \s-1SSE\s0 instruction set
10171 support.
10172 .IP "\fIpentium-m\fR" 4
10173 .IX Item "pentium-m"
10174 Low power version of Intel Pentium3 \s-1CPU\s0 with \s-1MMX\s0, \s-1SSE\s0 and \s-1SSE2\s0 instruction set
10175 support.  Used by Centrino notebooks.
10176 .IP "\fIpentium4, pentium4m\fR" 4
10177 .IX Item "pentium4, pentium4m"
10178 Intel Pentium4 \s-1CPU\s0 with \s-1MMX\s0, \s-1SSE\s0 and \s-1SSE2\s0 instruction set support.
10179 .IP "\fIprescott\fR" 4
10180 .IX Item "prescott"
10181 Improved version of Intel Pentium4 \s-1CPU\s0 with \s-1MMX\s0, \s-1SSE\s0, \s-1SSE2\s0 and \s-1SSE3\s0 instruction
10182 set support.
10183 .IP "\fInocona\fR" 4
10184 .IX Item "nocona"
10185 Improved version of Intel Pentium4 \s-1CPU\s0 with 64\-bit extensions, \s-1MMX\s0, \s-1SSE\s0,
10186 \&\s-1SSE2\s0 and \s-1SSE3\s0 instruction set support.
10187 .IP "\fIcore2\fR" 4
10188 .IX Item "core2"
10189 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
10190 instruction set support.
10191 .IP "\fIk6\fR" 4
10192 .IX Item "k6"
10193 \&\s-1AMD\s0 K6 \s-1CPU\s0 with \s-1MMX\s0 instruction set support.
10194 .IP "\fIk6\-2, k6\-3\fR" 4
10195 .IX Item "k6-2, k6-3"
10196 Improved versions of \s-1AMD\s0 K6 \s-1CPU\s0 with \s-1MMX\s0 and 3dNOW! instruction set support.
10197 .IP "\fIathlon, athlon-tbird\fR" 4
10198 .IX Item "athlon, athlon-tbird"
10199 \&\s-1AMD\s0 Athlon \s-1CPU\s0 with \s-1MMX\s0, 3dNOW!, enhanced 3dNOW! and \s-1SSE\s0 prefetch instructions
10200 support.
10201 .IP "\fIathlon\-4, athlon\-xp, athlon-mp\fR" 4
10202 .IX Item "athlon-4, athlon-xp, athlon-mp"
10203 Improved \s-1AMD\s0 Athlon \s-1CPU\s0 with \s-1MMX\s0, 3dNOW!, enhanced 3dNOW! and full \s-1SSE\s0
10204 instruction set support.
10205 .IP "\fIk8, opteron, athlon64, athlon-fx\fR" 4
10206 .IX Item "k8, opteron, athlon64, athlon-fx"
10207 \&\s-1AMD\s0 K8 core based CPUs with x86\-64 instruction set support.  (This supersets
10208 \&\s-1MMX\s0, \s-1SSE\s0, \s-1SSE2\s0, 3dNOW!, enhanced 3dNOW! and 64\-bit instruction set extensions.)
10209 .IP "\fIk8\-sse3, opteron\-sse3, athlon64\-sse3\fR" 4
10210 .IX Item "k8-sse3, opteron-sse3, athlon64-sse3"
10211 Improved versions of k8, opteron and athlon64 with \s-1SSE3\s0 instruction set support.
10212 .IP "\fIamdfam10, barcelona\fR" 4
10213 .IX Item "amdfam10, barcelona"
10214 \&\s-1AMD\s0 Family 10h core based CPUs with x86\-64 instruction set support.  (This
10215 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
10216 instruction set extensions.)
10217 .IP "\fIwinchip\-c6\fR" 4
10218 .IX Item "winchip-c6"
10219 \&\s-1IDT\s0 Winchip C6 \s-1CPU\s0, dealt in same way as i486 with additional \s-1MMX\s0 instruction
10220 set support.
10221 .IP "\fIwinchip2\fR" 4
10222 .IX Item "winchip2"
10223 \&\s-1IDT\s0 Winchip2 \s-1CPU\s0, dealt in same way as i486 with additional \s-1MMX\s0 and 3dNOW!
10224 instruction set support.
10225 .IP "\fIc3\fR" 4
10226 .IX Item "c3"
10227 Via C3 \s-1CPU\s0 with \s-1MMX\s0 and 3dNOW! instruction set support.  (No scheduling is
10228 implemented for this chip.)
10229 .IP "\fIc3\-2\fR" 4
10230 .IX Item "c3-2"
10231 Via C3\-2 \s-1CPU\s0 with \s-1MMX\s0 and \s-1SSE\s0 instruction set support.  (No scheduling is
10232 implemented for this chip.)
10233 .IP "\fIgeode\fR" 4
10234 .IX Item "geode"
10235 Embedded \s-1AMD\s0 \s-1CPU\s0 with \s-1MMX\s0 and 3dNOW! instruction set support.
10236 .RE
10237 .RS 4
10238 .Sp
10239 While picking a specific \fIcpu-type\fR will schedule things appropriately
10240 for that particular chip, the compiler will not generate any code that
10241 does not run on the i386 without the \fB\-march=\fR\fIcpu-type\fR option
10242 being used.
10243 .RE
10244 .IP "\fB\-march=\fR\fIcpu-type\fR" 4
10245 .IX Item "-march=cpu-type"
10246 Generate instructions for the machine type \fIcpu-type\fR.  The choices
10247 for \fIcpu-type\fR are the same as for \fB\-mtune\fR.  Moreover,
10248 specifying \fB\-march=\fR\fIcpu-type\fR implies \fB\-mtune=\fR\fIcpu-type\fR.
10249 .IP "\fB\-mcpu=\fR\fIcpu-type\fR" 4
10250 .IX Item "-mcpu=cpu-type"
10251 A deprecated synonym for \fB\-mtune\fR.
10252 .IP "\fB\-mfpmath=\fR\fIunit\fR" 4
10253 .IX Item "-mfpmath=unit"
10254 Generate floating point arithmetics for selected unit \fIunit\fR.  The choices
10255 for \fIunit\fR are:
10256 .RS 4
10257 .IP "\fB387\fR" 4
10258 .IX Item "387"
10259 Use the standard 387 floating point coprocessor present majority of chips and
10260 emulated otherwise.  Code compiled with this option will run almost everywhere.
10261 The temporary results are computed in 80bit precision instead of precision
10262 specified by the type resulting in slightly different results compared to most
10263 of other chips.  See \fB\-ffloat\-store\fR for more detailed description.
10264 .Sp
10265 This is the default choice for i386 compiler.
10266 .IP "\fBsse\fR" 4
10267 .IX Item "sse"
10268 Use scalar floating point instructions present in the \s-1SSE\s0 instruction set.
10269 This instruction set is supported by Pentium3 and newer chips, in the \s-1AMD\s0 line
10270 by Athlon\-4, Athlon-xp and Athlon-mp chips.  The earlier version of \s-1SSE\s0
10271 instruction set supports only single precision arithmetics, thus the double and
10272 extended precision arithmetics is still done using 387.  Later version, present
10273 only in Pentium4 and the future \s-1AMD\s0 x86\-64 chips supports double precision
10274 arithmetics too.
10275 .Sp
10276 For the i386 compiler, you need to use \fB\-march=\fR\fIcpu-type\fR, \fB\-msse\fR
10277 or \fB\-msse2\fR switches to enable \s-1SSE\s0 extensions and make this option
10278 effective.  For the x86\-64 compiler, these extensions are enabled by default.
10279 .Sp
10280 The resulting code should be considerably faster in the majority of cases and avoid
10281 the numerical instability problems of 387 code, but may break some existing
10282 code that expects temporaries to be 80bit.
10283 .Sp
10284 This is the default choice for the x86\-64 compiler.
10285 .IP "\fBsse,387\fR" 4
10286 .IX Item "sse,387"
10287 .PD 0
10288 .IP "\fBsse+387\fR" 4
10289 .IX Item "sse+387"
10290 .IP "\fBboth\fR" 4
10291 .IX Item "both"
10292 .PD
10293 Attempt to utilize both instruction sets at once.  This effectively double the
10294 amount of available registers and on chips with separate execution units for
10295 387 and \s-1SSE\s0 the execution resources too.  Use this option with care, as it is
10296 still experimental, because the \s-1GCC\s0 register allocator does not model separate
10297 functional units well resulting in instable performance.
10298 .RE
10299 .RS 4
10300 .RE
10301 .IP "\fB\-masm=\fR\fIdialect\fR" 4
10302 .IX Item "-masm=dialect"
10303 Output asm instructions using selected \fIdialect\fR.  Supported
10304 choices are \fBintel\fR or \fBatt\fR (the default one).  Darwin does
10305 not support \fBintel\fR.
10306 .IP "\fB\-mieee\-fp\fR" 4
10307 .IX Item "-mieee-fp"
10308 .PD 0
10309 .IP "\fB\-mno\-ieee\-fp\fR" 4
10310 .IX Item "-mno-ieee-fp"
10311 .PD
10312 Control whether or not the compiler uses \s-1IEEE\s0 floating point
10313 comparisons.  These handle correctly the case where the result of a
10314 comparison is unordered.
10315 .IP "\fB\-msoft\-float\fR" 4
10316 .IX Item "-msoft-float"
10317 Generate output containing library calls for floating point.
10318 \&\fBWarning:\fR the requisite libraries are not part of \s-1GCC\s0.
10319 Normally the facilities of the machine's usual C compiler are used, but
10320 this can't be done directly in cross\-compilation.  You must make your
10321 own arrangements to provide suitable library functions for
10322 cross\-compilation.
10323 .Sp
10324 On machines where a function returns floating point results in the 80387
10325 register stack, some floating point opcodes may be emitted even if
10326 \&\fB\-msoft\-float\fR is used.
10327 .IP "\fB\-mno\-fp\-ret\-in\-387\fR" 4
10328 .IX Item "-mno-fp-ret-in-387"
10329 Do not use the \s-1FPU\s0 registers for return values of functions.
10330 .Sp
10331 The usual calling convention has functions return values of types
10332 \&\f(CW\*(C`float\*(C'\fR and \f(CW\*(C`double\*(C'\fR in an \s-1FPU\s0 register, even if there
10333 is no \s-1FPU\s0.  The idea is that the operating system should emulate
10334 an \s-1FPU\s0.
10335 .Sp
10336 The option \fB\-mno\-fp\-ret\-in\-387\fR causes such values to be returned
10337 in ordinary \s-1CPU\s0 registers instead.
10338 .IP "\fB\-mno\-fancy\-math\-387\fR" 4
10339 .IX Item "-mno-fancy-math-387"
10340 Some 387 emulators do not support the \f(CW\*(C`sin\*(C'\fR, \f(CW\*(C`cos\*(C'\fR and
10341 \&\f(CW\*(C`sqrt\*(C'\fR instructions for the 387.  Specify this option to avoid
10342 generating those instructions.  This option is the default on FreeBSD,
10343 OpenBSD and NetBSD.  This option is overridden when \fB\-march\fR
10344 indicates that the target cpu will always have an \s-1FPU\s0 and so the
10345 instruction will not need emulation.  As of revision 2.6.1, these
10346 instructions are not generated unless you also use the
10347 \&\fB\-funsafe\-math\-optimizations\fR switch.
10348 .IP "\fB\-malign\-double\fR" 4
10349 .IX Item "-malign-double"
10350 .PD 0
10351 .IP "\fB\-mno\-align\-double\fR" 4
10352 .IX Item "-mno-align-double"
10353 .PD
10354 Control whether \s-1GCC\s0 aligns \f(CW\*(C`double\*(C'\fR, \f(CW\*(C`long double\*(C'\fR, and
10355 \&\f(CW\*(C`long long\*(C'\fR variables on a two word boundary or a one word
10356 boundary.  Aligning \f(CW\*(C`double\*(C'\fR variables on a two word boundary will
10357 produce code that runs somewhat faster on a \fBPentium\fR at the
10358 expense of more memory.
10359 .Sp
10360 On x86\-64, \fB\-malign\-double\fR is enabled by default.
10361 .Sp
10362 \&\fBWarning:\fR if you use the \fB\-malign\-double\fR switch,
10363 structures containing the above types will be aligned differently than
10364 the published application binary interface specifications for the 386
10365 and will not be binary compatible with structures in code compiled
10366 without that switch.
10367 .IP "\fB\-m96bit\-long\-double\fR" 4
10368 .IX Item "-m96bit-long-double"
10369 .PD 0
10370 .IP "\fB\-m128bit\-long\-double\fR" 4
10371 .IX Item "-m128bit-long-double"
10372 .PD
10373 These switches control the size of \f(CW\*(C`long double\*(C'\fR type.  The i386
10374 application binary interface specifies the size to be 96 bits,
10375 so \fB\-m96bit\-long\-double\fR is the default in 32 bit mode.
10376 .Sp
10377 Modern architectures (Pentium and newer) would prefer \f(CW\*(C`long double\*(C'\fR
10378 to be aligned to an 8 or 16 byte boundary.  In arrays or structures
10379 conforming to the \s-1ABI\s0, this would not be possible.  So specifying a
10380 \&\fB\-m128bit\-long\-double\fR will align \f(CW\*(C`long double\*(C'\fR
10381 to a 16 byte boundary by padding the \f(CW\*(C`long double\*(C'\fR with an additional
10382 32 bit zero.
10383 .Sp
10384 In the x86\-64 compiler, \fB\-m128bit\-long\-double\fR is the default choice as
10385 its \s-1ABI\s0 specifies that \f(CW\*(C`long double\*(C'\fR is to be aligned on 16 byte boundary.
10386 .Sp
10387 Notice that neither of these options enable any extra precision over the x87
10388 standard of 80 bits for a \f(CW\*(C`long double\*(C'\fR.
10389 .Sp
10390 \&\fBWarning:\fR if you override the default value for your target \s-1ABI\s0, the
10391 structures and arrays containing \f(CW\*(C`long double\*(C'\fR variables will change
10392 their size as well as function calling convention for function taking
10393 \&\f(CW\*(C`long double\*(C'\fR will be modified.  Hence they will not be binary
10394 compatible with arrays or structures in code compiled without that switch.
10395 .IP "\fB\-mlarge\-data\-threshold=\fR\fInumber\fR" 4
10396 .IX Item "-mlarge-data-threshold=number"
10397 When \fB\-mcmodel=medium\fR is specified, the data greater than
10398 \&\fIthreshold\fR are placed in large data section.  This value must be the
10399 same across all object linked into the binary and defaults to 65535.
10400 .IP "\fB\-mrtd\fR" 4
10401 .IX Item "-mrtd"
10402 Use a different function-calling convention, in which functions that
10403 take a fixed number of arguments return with the \f(CW\*(C`ret\*(C'\fR \fInum\fR
10404 instruction, which pops their arguments while returning.  This saves one
10405 instruction in the caller since there is no need to pop the arguments
10406 there.
10407 .Sp
10408 You can specify that an individual function is called with this calling
10409 sequence with the function attribute \fBstdcall\fR.  You can also
10410 override the \fB\-mrtd\fR option by using the function attribute
10411 \&\fBcdecl\fR.  
10412 .Sp
10413 \&\fBWarning:\fR this calling convention is incompatible with the one
10414 normally used on Unix, so you cannot use it if you need to call
10415 libraries compiled with the Unix compiler.
10416 .Sp
10417 Also, you must provide function prototypes for all functions that
10418 take variable numbers of arguments (including \f(CW\*(C`printf\*(C'\fR);
10419 otherwise incorrect code will be generated for calls to those
10420 functions.
10421 .Sp
10422 In addition, seriously incorrect code will result if you call a
10423 function with too many arguments.  (Normally, extra arguments are
10424 harmlessly ignored.)
10425 .IP "\fB\-mregparm=\fR\fInum\fR" 4
10426 .IX Item "-mregparm=num"
10427 Control how many registers are used to pass integer arguments.  By
10428 default, no registers are used to pass arguments, and at most 3
10429 registers can be used.  You can control this behavior for a specific
10430 function by using the function attribute \fBregparm\fR.
10431 .Sp
10432 \&\fBWarning:\fR if you use this switch, and
10433 \&\fInum\fR is nonzero, then you must build all modules with the same
10434 value, including any libraries.  This includes the system libraries and
10435 startup modules.
10436 .IP "\fB\-msseregparm\fR" 4
10437 .IX Item "-msseregparm"
10438 Use \s-1SSE\s0 register passing conventions for float and double arguments
10439 and return values.  You can control this behavior for a specific
10440 function by using the function attribute \fBsseregparm\fR.
10441 .Sp
10442 \&\fBWarning:\fR if you use this switch then you must build all
10443 modules with the same value, including any libraries.  This includes
10444 the system libraries and startup modules.
10445 .IP "\fB\-mpc32\fR" 4
10446 .IX Item "-mpc32"
10447 .PD 0
10448 .IP "\fB\-mpc64\fR" 4
10449 .IX Item "-mpc64"
10450 .IP "\fB\-mpc80\fR" 4
10451 .IX Item "-mpc80"
10452 .PD
10453 Set 80387 floating-point precision to 32, 64 or 80 bits.  When \fB\-mpc32\fR
10454 is specified, the significands of results of floating-point operations are
10455 rounded to 24 bits (single precision); \fB\-mpc64\fR rounds the
10456 significands of results of floating-point operations to 53 bits (double
10457 precision) and \fB\-mpc80\fR rounds the significands of results of
10458 floating-point operations to 64 bits (extended double precision), which is
10459 the default.  When this option is used, floating-point operations in higher
10460 precisions are not available to the programmer without setting the \s-1FPU\s0
10461 control word explicitly.
10462 .Sp
10463 Setting the rounding of floating-point operations to less than the default
10464 80 bits can speed some programs by 2% or more.  Note that some mathematical
10465 libraries assume that extended precision (80 bit) floating-point operations
10466 are enabled by default; routines in such libraries could suffer significant
10467 loss of accuracy, typically through so-called \*(L"catastrophic cancellation\*(R",
10468 when this option is used to set the precision to less than extended precision. 
10469 .IP "\fB\-mstackrealign\fR" 4
10470 .IX Item "-mstackrealign"
10471 Realign the stack at entry.  On the Intel x86, the \fB\-mstackrealign\fR
10472 option will generate an alternate prologue and epilogue that realigns the
10473 runtime stack if necessary.  This supports mixing legacy codes that keep
10474 a 4\-byte aligned stack with modern codes that keep a 16\-byte stack for
10475 \&\s-1SSE\s0 compatibility.  See also the attribute \f(CW\*(C`force_align_arg_pointer\*(C'\fR,
10476 applicable to individual functions.
10477 .IP "\fB\-mpreferred\-stack\-boundary=\fR\fInum\fR" 4
10478 .IX Item "-mpreferred-stack-boundary=num"
10479 Attempt to keep the stack boundary aligned to a 2 raised to \fInum\fR
10480 byte boundary.  If \fB\-mpreferred\-stack\-boundary\fR is not specified,
10481 the default is 4 (16 bytes or 128 bits).
10482 .IP "\fB\-mincoming\-stack\-boundary=\fR\fInum\fR" 4
10483 .IX Item "-mincoming-stack-boundary=num"
10484 Assume the incoming stack is aligned to a 2 raised to \fInum\fR byte
10485 boundary.  If \fB\-mincoming\-stack\-boundary\fR is not specified,
10486 the one specified by \fB\-mpreferred\-stack\-boundary\fR will be used.
10487 .Sp
10488 On Pentium and PentiumPro, \f(CW\*(C`double\*(C'\fR and \f(CW\*(C`long double\*(C'\fR values
10489 should be aligned to an 8 byte boundary (see \fB\-malign\-double\fR) or
10490 suffer significant run time performance penalties.  On Pentium \s-1III\s0, the
10491 Streaming \s-1SIMD\s0 Extension (\s-1SSE\s0) data type \f(CW\*(C`_\|_m128\*(C'\fR may not work
10492 properly if it is not 16 byte aligned.
10493 .Sp
10494 To ensure proper alignment of this values on the stack, the stack boundary
10495 must be as aligned as that required by any value stored on the stack.
10496 Further, every function must be generated such that it keeps the stack
10497 aligned.  Thus calling a function compiled with a higher preferred
10498 stack boundary from a function compiled with a lower preferred stack
10499 boundary will most likely misalign the stack.  It is recommended that
10500 libraries that use callbacks always use the default setting.
10501 .Sp
10502 This extra alignment does consume extra stack space, and generally
10503 increases code size.  Code that is sensitive to stack space usage, such
10504 as embedded systems and operating system kernels, may want to reduce the
10505 preferred alignment to \fB\-mpreferred\-stack\-boundary=2\fR.
10506 .IP "\fB\-mmmx\fR" 4
10507 .IX Item "-mmmx"
10508 .PD 0
10509 .IP "\fB\-mno\-mmx\fR" 4
10510 .IX Item "-mno-mmx"
10511 .IP "\fB\-msse\fR" 4
10512 .IX Item "-msse"
10513 .IP "\fB\-mno\-sse\fR" 4
10514 .IX Item "-mno-sse"
10515 .IP "\fB\-msse2\fR" 4
10516 .IX Item "-msse2"
10517 .IP "\fB\-mno\-sse2\fR" 4
10518 .IX Item "-mno-sse2"
10519 .IP "\fB\-msse3\fR" 4
10520 .IX Item "-msse3"
10521 .IP "\fB\-mno\-sse3\fR" 4
10522 .IX Item "-mno-sse3"
10523 .IP "\fB\-mssse3\fR" 4
10524 .IX Item "-mssse3"
10525 .IP "\fB\-mno\-ssse3\fR" 4
10526 .IX Item "-mno-ssse3"
10527 .IP "\fB\-msse4.1\fR" 4
10528 .IX Item "-msse4.1"
10529 .IP "\fB\-mno\-sse4.1\fR" 4
10530 .IX Item "-mno-sse4.1"
10531 .IP "\fB\-msse4.2\fR" 4
10532 .IX Item "-msse4.2"
10533 .IP "\fB\-mno\-sse4.2\fR" 4
10534 .IX Item "-mno-sse4.2"
10535 .IP "\fB\-msse4\fR" 4
10536 .IX Item "-msse4"
10537 .IP "\fB\-mno\-sse4\fR" 4
10538 .IX Item "-mno-sse4"
10539 .IP "\fB\-mavx\fR" 4
10540 .IX Item "-mavx"
10541 .IP "\fB\-mno\-avx\fR" 4
10542 .IX Item "-mno-avx"
10543 .IP "\fB\-maes\fR" 4
10544 .IX Item "-maes"
10545 .IP "\fB\-mno\-aes\fR" 4
10546 .IX Item "-mno-aes"
10547 .IP "\fB\-mpclmul\fR" 4
10548 .IX Item "-mpclmul"
10549 .IP "\fB\-mno\-pclmul\fR" 4
10550 .IX Item "-mno-pclmul"
10551 .IP "\fB\-msse4a\fR" 4
10552 .IX Item "-msse4a"
10553 .IP "\fB\-mno\-sse4a\fR" 4
10554 .IX Item "-mno-sse4a"
10555 .IP "\fB\-msse5\fR" 4
10556 .IX Item "-msse5"
10557 .IP "\fB\-mno\-sse5\fR" 4
10558 .IX Item "-mno-sse5"
10559 .IP "\fB\-m3dnow\fR" 4
10560 .IX Item "-m3dnow"
10561 .IP "\fB\-mno\-3dnow\fR" 4
10562 .IX Item "-mno-3dnow"
10563 .IP "\fB\-mpopcnt\fR" 4
10564 .IX Item "-mpopcnt"
10565 .IP "\fB\-mno\-popcnt\fR" 4
10566 .IX Item "-mno-popcnt"
10567 .IP "\fB\-mabm\fR" 4
10568 .IX Item "-mabm"
10569 .IP "\fB\-mno\-abm\fR" 4
10570 .IX Item "-mno-abm"
10571 .PD
10572 These switches enable or disable the use of instructions in the \s-1MMX\s0,
10573 \&\s-1SSE\s0, \s-1SSE2\s0, \s-1SSE3\s0, \s-1SSSE3\s0, \s-1SSE4\s0.1, \s-1AVX\s0, \s-1AES\s0, \s-1PCLMUL\s0, \s-1SSE4A\s0, \s-1SSE5\s0, \s-1ABM\s0 or
10574 3DNow! extended instruction sets.
10575 These extensions are also available as built-in functions: see
10576 \&\fBX86 Built-in Functions\fR, for details of the functions enabled and
10577 disabled by these switches.
10578 .Sp
10579 To have \s-1SSE/SSE2\s0 instructions generated automatically from floating-point
10580 code (as opposed to 387 instructions), see \fB\-mfpmath=sse\fR.
10581 .Sp
10582 \&\s-1GCC\s0 depresses SSEx instructions when \fB\-mavx\fR is used. Instead, it
10583 generates new \s-1AVX\s0 instructions or \s-1AVX\s0 equivalence for all SSEx instructions
10584 when needed.
10585 .Sp
10586 These options will enable \s-1GCC\s0 to use these extended instructions in
10587 generated code, even without \fB\-mfpmath=sse\fR.  Applications which
10588 perform runtime \s-1CPU\s0 detection must compile separate files for each
10589 supported architecture, using the appropriate flags.  In particular,
10590 the file containing the \s-1CPU\s0 detection code should be compiled without
10591 these options.
10592 .IP "\fB\-mcld\fR" 4
10593 .IX Item "-mcld"
10594 This option instructs \s-1GCC\s0 to emit a \f(CW\*(C`cld\*(C'\fR instruction in the prologue
10595 of functions that use string instructions.  String instructions depend on
10596 the \s-1DF\s0 flag to select between autoincrement or autodecrement mode.  While the
10597 \&\s-1ABI\s0 specifies the \s-1DF\s0 flag to be cleared on function entry, some operating
10598 systems violate this specification by not clearing the \s-1DF\s0 flag in their
10599 exception dispatchers.  The exception handler can be invoked with the \s-1DF\s0 flag
10600 set which leads to wrong direction mode, when string instructions are used.
10601 This option can be enabled by default on 32\-bit x86 targets by configuring
10602 \&\s-1GCC\s0 with the \fB\-\-enable\-cld\fR configure option.  Generation of \f(CW\*(C`cld\*(C'\fR
10603 instructions can be suppressed with the \fB\-mno\-cld\fR compiler option
10604 in this case.
10605 .IP "\fB\-mcx16\fR" 4
10606 .IX Item "-mcx16"
10607 This option will enable \s-1GCC\s0 to use \s-1CMPXCHG16B\s0 instruction in generated code.
10608 \&\s-1CMPXCHG16B\s0 allows for atomic operations on 128\-bit double quadword (or oword)
10609 data types.  This is useful for high resolution counters that could be updated
10610 by multiple processors (or cores).  This instruction is generated as part of
10611 atomic built-in functions: see \fBAtomic Builtins\fR for details.
10612 .IP "\fB\-msahf\fR" 4
10613 .IX Item "-msahf"
10614 This option will enable \s-1GCC\s0 to use \s-1SAHF\s0 instruction in generated 64\-bit code.
10615 Early Intel CPUs with Intel 64 lacked \s-1LAHF\s0 and \s-1SAHF\s0 instructions supported
10616 by \s-1AMD64\s0 until introduction of Pentium 4 G1 step in December 2005.  \s-1LAHF\s0 and
10617 \&\s-1SAHF\s0 are load and store instructions, respectively, for certain status flags.
10618 In 64\-bit mode, \s-1SAHF\s0 instruction is used to optimize \f(CW\*(C`fmod\*(C'\fR, \f(CW\*(C`drem\*(C'\fR
10619 or \f(CW\*(C`remainder\*(C'\fR built-in functions: see \fBOther Builtins\fR for details.
10620 .IP "\fB\-mrecip\fR" 4
10621 .IX Item "-mrecip"
10622 This option will enable \s-1GCC\s0 to use \s-1RCPSS\s0 and \s-1RSQRTSS\s0 instructions (and their
10623 vectorized variants \s-1RCPPS\s0 and \s-1RSQRTPS\s0) with an additional Newton-Raphson step
10624 to increase precision instead of \s-1DIVSS\s0 and \s-1SQRTSS\s0 (and their vectorized
10625 variants) for single precision floating point arguments.  These instructions
10626 are generated only when \fB\-funsafe\-math\-optimizations\fR is enabled
10627 together with \fB\-finite\-math\-only\fR and \fB\-fno\-trapping\-math\fR.
10628 Note that while the throughput of the sequence is higher than the throughput
10629 of the non-reciprocal instruction, the precision of the sequence can be
10630 decreased by up to 2 ulp (i.e. the inverse of 1.0 equals 0.99999994).
10631 .IP "\fB\-mveclibabi=\fR\fItype\fR" 4
10632 .IX Item "-mveclibabi=type"
10633 Specifies the \s-1ABI\s0 type to use for vectorizing intrinsics using an
10634 external library.  Supported types are \f(CW\*(C`svml\*(C'\fR for the Intel short
10635 vector math library and \f(CW\*(C`acml\*(C'\fR for the \s-1AMD\s0 math core library style
10636 of interfacing.  \s-1GCC\s0 will currently emit calls to \f(CW\*(C`vmldExp2\*(C'\fR,
10637 \&\f(CW\*(C`vmldLn2\*(C'\fR, \f(CW\*(C`vmldLog102\*(C'\fR, \f(CW\*(C`vmldLog102\*(C'\fR, \f(CW\*(C`vmldPow2\*(C'\fR,
10638 \&\f(CW\*(C`vmldTanh2\*(C'\fR, \f(CW\*(C`vmldTan2\*(C'\fR, \f(CW\*(C`vmldAtan2\*(C'\fR, \f(CW\*(C`vmldAtanh2\*(C'\fR,
10639 \&\f(CW\*(C`vmldCbrt2\*(C'\fR, \f(CW\*(C`vmldSinh2\*(C'\fR, \f(CW\*(C`vmldSin2\*(C'\fR, \f(CW\*(C`vmldAsinh2\*(C'\fR,
10640 \&\f(CW\*(C`vmldAsin2\*(C'\fR, \f(CW\*(C`vmldCosh2\*(C'\fR, \f(CW\*(C`vmldCos2\*(C'\fR, \f(CW\*(C`vmldAcosh2\*(C'\fR,
10641 \&\f(CW\*(C`vmldAcos2\*(C'\fR, \f(CW\*(C`vmlsExp4\*(C'\fR, \f(CW\*(C`vmlsLn4\*(C'\fR, \f(CW\*(C`vmlsLog104\*(C'\fR,
10642 \&\f(CW\*(C`vmlsLog104\*(C'\fR, \f(CW\*(C`vmlsPow4\*(C'\fR, \f(CW\*(C`vmlsTanh4\*(C'\fR, \f(CW\*(C`vmlsTan4\*(C'\fR,
10643 \&\f(CW\*(C`vmlsAtan4\*(C'\fR, \f(CW\*(C`vmlsAtanh4\*(C'\fR, \f(CW\*(C`vmlsCbrt4\*(C'\fR, \f(CW\*(C`vmlsSinh4\*(C'\fR,
10644 \&\f(CW\*(C`vmlsSin4\*(C'\fR, \f(CW\*(C`vmlsAsinh4\*(C'\fR, \f(CW\*(C`vmlsAsin4\*(C'\fR, \f(CW\*(C`vmlsCosh4\*(C'\fR,
10645 \&\f(CW\*(C`vmlsCos4\*(C'\fR, \f(CW\*(C`vmlsAcosh4\*(C'\fR and \f(CW\*(C`vmlsAcos4\*(C'\fR for corresponding
10646 function type when \fB\-mveclibabi=svml\fR is used and \f(CW\*(C`_\|_vrd2_sin\*(C'\fR,
10647 \&\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,
10648 \&\f(CW\*(C`_\|_vrd2_log10\*(C'\fR, \f(CW\*(C`_\|_vrs4_sinf\*(C'\fR, \f(CW\*(C`_\|_vrs4_cosf\*(C'\fR,
10649 \&\f(CW\*(C`_\|_vrs4_expf\*(C'\fR, \f(CW\*(C`_\|_vrs4_logf\*(C'\fR, \f(CW\*(C`_\|_vrs4_log2f\*(C'\fR,
10650 \&\f(CW\*(C`_\|_vrs4_log10f\*(C'\fR and \f(CW\*(C`_\|_vrs4_powf\*(C'\fR for corresponding function type
10651 when \fB\-mveclibabi=acml\fR is used. Both \fB\-ftree\-vectorize\fR and
10652 \&\fB\-funsafe\-math\-optimizations\fR have to be enabled. A \s-1SVML\s0 or \s-1ACML\s0 \s-1ABI\s0
10653 compatible library will have to be specified at link time.
10654 .IP "\fB\-mpush\-args\fR" 4
10655 .IX Item "-mpush-args"
10656 .PD 0
10657 .IP "\fB\-mno\-push\-args\fR" 4
10658 .IX Item "-mno-push-args"
10659 .PD
10660 Use \s-1PUSH\s0 operations to store outgoing parameters.  This method is shorter
10661 and usually equally fast as method using \s-1SUB/MOV\s0 operations and is enabled
10662 by default.  In some cases disabling it may improve performance because of
10663 improved scheduling and reduced dependencies.
10664 .IP "\fB\-maccumulate\-outgoing\-args\fR" 4
10665 .IX Item "-maccumulate-outgoing-args"
10666 If enabled, the maximum amount of space required for outgoing arguments will be
10667 computed in the function prologue.  This is faster on most modern CPUs
10668 because of reduced dependencies, improved scheduling and reduced stack usage
10669 when preferred stack boundary is not equal to 2.  The drawback is a notable
10670 increase in code size.  This switch implies \fB\-mno\-push\-args\fR.
10671 .IP "\fB\-mthreads\fR" 4
10672 .IX Item "-mthreads"
10673 Support thread-safe exception handling on \fBMingw32\fR.  Code that relies
10674 on thread-safe exception handling must compile and link all code with the
10675 \&\fB\-mthreads\fR option.  When compiling, \fB\-mthreads\fR defines
10676 \&\fB\-D_MT\fR; when linking, it links in a special thread helper library
10677 \&\fB\-lmingwthrd\fR which cleans up per thread exception handling data.
10678 .IP "\fB\-mno\-align\-stringops\fR" 4
10679 .IX Item "-mno-align-stringops"
10680 Do not align destination of inlined string operations.  This switch reduces
10681 code size and improves performance in case the destination is already aligned,
10682 but \s-1GCC\s0 doesn't know about it.
10683 .IP "\fB\-minline\-all\-stringops\fR" 4
10684 .IX Item "-minline-all-stringops"
10685 By default \s-1GCC\s0 inlines string operations only when destination is known to be
10686 aligned at least to 4 byte boundary.  This enables more inlining, increase code
10687 size, but may improve performance of code that depends on fast memcpy, strlen
10688 and memset for short lengths.
10689 .IP "\fB\-minline\-stringops\-dynamically\fR" 4
10690 .IX Item "-minline-stringops-dynamically"
10691 For string operation of unknown size, inline runtime checks so for small
10692 blocks inline code is used, while for large blocks library call is used.
10693 .IP "\fB\-minline\-compares\fR" 4
10694 .IX Item "-minline-compares"
10695 This option enables \s-1GCC\s0 to inline calls to memcmp and strcmp.  The
10696 inlined version does a byte-by-byte comparion using a repeat string
10697 operation prefix.
10698 .IP "\fB\-mstringop\-strategy=\fR\fIalg\fR" 4
10699 .IX Item "-mstringop-strategy=alg"
10700 Overwrite internal decision heuristic about particular algorithm to inline
10701 string operation with.  The allowed values are \f(CW\*(C`rep_byte\*(C'\fR,
10702 \&\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
10703 of specified size, \f(CW\*(C`byte_loop\*(C'\fR, \f(CW\*(C`loop\*(C'\fR, \f(CW\*(C`unrolled_loop\*(C'\fR for
10704 expanding inline loop, \f(CW\*(C`libcall\*(C'\fR for always expanding library call.
10705 .IP "\fB\-momit\-leaf\-frame\-pointer\fR" 4
10706 .IX Item "-momit-leaf-frame-pointer"
10707 Don't keep the frame pointer in a register for leaf functions.  This
10708 avoids the instructions to save, set up and restore frame pointers and
10709 makes an extra register available in leaf functions.  The option
10710 \&\fB\-fomit\-frame\-pointer\fR removes the frame pointer for all functions
10711 which might make debugging harder.
10712 .IP "\fB\-mtls\-direct\-seg\-refs\fR" 4
10713 .IX Item "-mtls-direct-seg-refs"
10714 .PD 0
10715 .IP "\fB\-mno\-tls\-direct\-seg\-refs\fR" 4
10716 .IX Item "-mno-tls-direct-seg-refs"
10717 .PD
10718 Controls whether \s-1TLS\s0 variables may be accessed with offsets from the
10719 \&\s-1TLS\s0 segment register (\f(CW%gs\fR for 32\-bit, \f(CW%fs\fR for 64\-bit),
10720 or whether the thread base pointer must be added.  Whether or not this
10721 is legal depends on the operating system, and whether it maps the
10722 segment to cover the entire \s-1TLS\s0 area.
10723 .Sp
10724 For systems that use \s-1GNU\s0 libc, the default is on.
10725 .IP "\fB\-mfused\-madd\fR" 4
10726 .IX Item "-mfused-madd"
10727 .PD 0
10728 .IP "\fB\-mno\-fused\-madd\fR" 4
10729 .IX Item "-mno-fused-madd"
10730 .PD
10731 Enable automatic generation of fused floating point multiply-add instructions
10732 if the \s-1ISA\s0 supports such instructions.  The \-mfused\-madd option is on by
10733 default.  The fused multiply-add instructions have a different
10734 rounding behavior compared to executing a multiply followed by an add.
10735 .IP "\fB\-msse2avx\fR" 4
10736 .IX Item "-msse2avx"
10737 .PD 0
10738 .IP "\fB\-mno\-sse2avx\fR" 4
10739 .IX Item "-mno-sse2avx"
10740 .PD
10741 Specify that the assembler should encode \s-1SSE\s0 instructions with \s-1VEX\s0
10742 prefix.  The option \fB\-mavx\fR turns this on by default.
10743 .PP
10744 These \fB\-m\fR switches are supported in addition to the above
10745 on \s-1AMD\s0 x86\-64 processors in 64\-bit environments.
10746 .IP "\fB\-m32\fR" 4
10747 .IX Item "-m32"
10748 .PD 0
10749 .IP "\fB\-m64\fR" 4
10750 .IX Item "-m64"
10751 .PD
10752 Generate code for a 32\-bit or 64\-bit environment.
10753 The 32\-bit environment sets int, long and pointer to 32 bits and
10754 generates code that runs on any i386 system.
10755 The 64\-bit environment sets int to 32 bits and long and pointer
10756 to 64 bits and generates code for \s-1AMD\s0's x86\-64 architecture. For
10757 darwin only the \-m64 option turns off the \fB\-fno\-pic\fR and
10758 \&\fB\-mdynamic\-no\-pic\fR options.
10759 .IP "\fB\-mno\-red\-zone\fR" 4
10760 .IX Item "-mno-red-zone"
10761 Do not use a so called red zone for x86\-64 code.  The red zone is mandated
10762 by the x86\-64 \s-1ABI\s0, it is a 128\-byte area beyond the location of the
10763 stack pointer that will not be modified by signal or interrupt handlers
10764 and therefore can be used for temporary data without adjusting the stack
10765 pointer.  The flag \fB\-mno\-red\-zone\fR disables this red zone.
10766 .IP "\fB\-mcmodel=small\fR" 4
10767 .IX Item "-mcmodel=small"
10768 Generate code for the small code model: the program and its symbols must
10769 be linked in the lower 2 \s-1GB\s0 of the address space.  Pointers are 64 bits.
10770 Programs can be statically or dynamically linked.  This is the default
10771 code model.
10772 .IP "\fB\-mcmodel=kernel\fR" 4
10773 .IX Item "-mcmodel=kernel"
10774 Generate code for the kernel code model.  The kernel runs in the
10775 negative 2 \s-1GB\s0 of the address space.
10776 This model has to be used for Linux kernel code.
10777 .IP "\fB\-mcmodel=medium\fR" 4
10778 .IX Item "-mcmodel=medium"
10779 Generate code for the medium model: The program is linked in the lower 2
10780 \&\s-1GB\s0 of the address space.  Small symbols are also placed there.  Symbols
10781 with sizes larger than \fB\-mlarge\-data\-threshold\fR are put into
10782 large data or bss sections and can be located above 2GB.  Programs can
10783 be statically or dynamically linked.
10784 .IP "\fB\-mcmodel=large\fR" 4
10785 .IX Item "-mcmodel=large"
10786 Generate code for the large model: This model makes no assumptions
10787 about addresses and sizes of sections.
10788 .PP
10789 \fI\s-1IA\-64\s0 Options\fR
10790 .IX Subsection "IA-64 Options"
10791 .PP
10792 These are the \fB\-m\fR options defined for the Intel \s-1IA\-64\s0 architecture.
10793 .IP "\fB\-mbig\-endian\fR" 4
10794 .IX Item "-mbig-endian"
10795 Generate code for a big endian target.  This is the default for \s-1HP\-UX\s0.
10796 .IP "\fB\-mlittle\-endian\fR" 4
10797 .IX Item "-mlittle-endian"
10798 Generate code for a little endian target.  This is the default for \s-1AIX5\s0
10799 and GNU/Linux.
10800 .IP "\fB\-mgnu\-as\fR" 4
10801 .IX Item "-mgnu-as"
10802 .PD 0
10803 .IP "\fB\-mno\-gnu\-as\fR" 4
10804 .IX Item "-mno-gnu-as"
10805 .PD
10806 Generate (or don't) code for the \s-1GNU\s0 assembler.  This is the default.
10807 .IP "\fB\-mgnu\-ld\fR" 4
10808 .IX Item "-mgnu-ld"
10809 .PD 0
10810 .IP "\fB\-mno\-gnu\-ld\fR" 4
10811 .IX Item "-mno-gnu-ld"
10812 .PD
10813 Generate (or don't) code for the \s-1GNU\s0 linker.  This is the default.
10814 .IP "\fB\-mno\-pic\fR" 4
10815 .IX Item "-mno-pic"
10816 Generate code that does not use a global pointer register.  The result
10817 is not position independent code, and violates the \s-1IA\-64\s0 \s-1ABI\s0.
10818 .IP "\fB\-mvolatile\-asm\-stop\fR" 4
10819 .IX Item "-mvolatile-asm-stop"
10820 .PD 0
10821 .IP "\fB\-mno\-volatile\-asm\-stop\fR" 4
10822 .IX Item "-mno-volatile-asm-stop"
10823 .PD
10824 Generate (or don't) a stop bit immediately before and after volatile asm
10825 statements.
10826 .IP "\fB\-mregister\-names\fR" 4
10827 .IX Item "-mregister-names"
10828 .PD 0
10829 .IP "\fB\-mno\-register\-names\fR" 4
10830 .IX Item "-mno-register-names"
10831 .PD
10832 Generate (or don't) \fBin\fR, \fBloc\fR, and \fBout\fR register names for
10833 the stacked registers.  This may make assembler output more readable.
10834 .IP "\fB\-mno\-sdata\fR" 4
10835 .IX Item "-mno-sdata"
10836 .PD 0
10837 .IP "\fB\-msdata\fR" 4
10838 .IX Item "-msdata"
10839 .PD
10840 Disable (or enable) optimizations that use the small data section.  This may
10841 be useful for working around optimizer bugs.
10842 .IP "\fB\-mconstant\-gp\fR" 4
10843 .IX Item "-mconstant-gp"
10844 Generate code that uses a single constant global pointer value.  This is
10845 useful when compiling kernel code.
10846 .IP "\fB\-mauto\-pic\fR" 4
10847 .IX Item "-mauto-pic"
10848 Generate code that is self\-relocatable.  This implies \fB\-mconstant\-gp\fR.
10849 This is useful when compiling firmware code.
10850 .IP "\fB\-minline\-float\-divide\-min\-latency\fR" 4
10851 .IX Item "-minline-float-divide-min-latency"
10852 Generate code for inline divides of floating point values
10853 using the minimum latency algorithm.
10854 .IP "\fB\-minline\-float\-divide\-max\-throughput\fR" 4
10855 .IX Item "-minline-float-divide-max-throughput"
10856 Generate code for inline divides of floating point values
10857 using the maximum throughput algorithm.
10858 .IP "\fB\-minline\-int\-divide\-min\-latency\fR" 4
10859 .IX Item "-minline-int-divide-min-latency"
10860 Generate code for inline divides of integer values
10861 using the minimum latency algorithm.
10862 .IP "\fB\-minline\-int\-divide\-max\-throughput\fR" 4
10863 .IX Item "-minline-int-divide-max-throughput"
10864 Generate code for inline divides of integer values
10865 using the maximum throughput algorithm.
10866 .IP "\fB\-minline\-sqrt\-min\-latency\fR" 4
10867 .IX Item "-minline-sqrt-min-latency"
10868 Generate code for inline square roots
10869 using the minimum latency algorithm.
10870 .IP "\fB\-minline\-sqrt\-max\-throughput\fR" 4
10871 .IX Item "-minline-sqrt-max-throughput"
10872 Generate code for inline square roots
10873 using the maximum throughput algorithm.
10874 .IP "\fB\-mno\-dwarf2\-asm\fR" 4
10875 .IX Item "-mno-dwarf2-asm"
10876 .PD 0
10877 .IP "\fB\-mdwarf2\-asm\fR" 4
10878 .IX Item "-mdwarf2-asm"
10879 .PD
10880 Don't (or do) generate assembler code for the \s-1DWARF2\s0 line number debugging
10881 info.  This may be useful when not using the \s-1GNU\s0 assembler.
10882 .IP "\fB\-mearly\-stop\-bits\fR" 4
10883 .IX Item "-mearly-stop-bits"
10884 .PD 0
10885 .IP "\fB\-mno\-early\-stop\-bits\fR" 4
10886 .IX Item "-mno-early-stop-bits"
10887 .PD
10888 Allow stop bits to be placed earlier than immediately preceding the
10889 instruction that triggered the stop bit.  This can improve instruction
10890 scheduling, but does not always do so.
10891 .IP "\fB\-mfixed\-range=\fR\fIregister-range\fR" 4
10892 .IX Item "-mfixed-range=register-range"
10893 Generate code treating the given register range as fixed registers.
10894 A fixed register is one that the register allocator can not use.  This is
10895 useful when compiling kernel code.  A register range is specified as
10896 two registers separated by a dash.  Multiple register ranges can be
10897 specified separated by a comma.
10898 .IP "\fB\-mtls\-size=\fR\fItls-size\fR" 4
10899 .IX Item "-mtls-size=tls-size"
10900 Specify bit size of immediate \s-1TLS\s0 offsets.  Valid values are 14, 22, and
10901 64.
10902 .IP "\fB\-mtune=\fR\fIcpu-type\fR" 4
10903 .IX Item "-mtune=cpu-type"
10904 Tune the instruction scheduling for a particular \s-1CPU\s0, Valid values are
10905 itanium, itanium1, merced, itanium2, and mckinley.
10906 .IP "\fB\-mt\fR" 4
10907 .IX Item "-mt"
10908 .PD 0
10909 .IP "\fB\-pthread\fR" 4
10910 .IX Item "-pthread"
10911 .PD
10912 Add support for multithreading using the \s-1POSIX\s0 threads library.  This
10913 option sets flags for both the preprocessor and linker.  It does
10914 not affect the thread safety of object code produced by the compiler or
10915 that of libraries supplied with it.  These are HP-UX specific flags.
10916 .IP "\fB\-milp32\fR" 4
10917 .IX Item "-milp32"
10918 .PD 0
10919 .IP "\fB\-mlp64\fR" 4
10920 .IX Item "-mlp64"
10921 .PD
10922 Generate code for a 32\-bit or 64\-bit environment.
10923 The 32\-bit environment sets int, long and pointer to 32 bits.
10924 The 64\-bit environment sets int to 32 bits and long and pointer
10925 to 64 bits.  These are HP-UX specific flags.
10926 .IP "\fB\-mno\-sched\-br\-data\-spec\fR" 4
10927 .IX Item "-mno-sched-br-data-spec"
10928 .PD 0
10929 .IP "\fB\-msched\-br\-data\-spec\fR" 4
10930 .IX Item "-msched-br-data-spec"
10931 .PD
10932 (Dis/En)able data speculative scheduling before reload.
10933 This will result in generation of the ld.a instructions and
10934 the corresponding check instructions (ld.c / chk.a).
10935 The default is 'disable'.
10936 .IP "\fB\-msched\-ar\-data\-spec\fR" 4
10937 .IX Item "-msched-ar-data-spec"
10938 .PD 0
10939 .IP "\fB\-mno\-sched\-ar\-data\-spec\fR" 4
10940 .IX Item "-mno-sched-ar-data-spec"
10941 .PD
10942 (En/Dis)able data speculative scheduling after reload.
10943 This will result in generation of the ld.a instructions and
10944 the corresponding check instructions (ld.c / chk.a).
10945 The default is 'enable'.
10946 .IP "\fB\-mno\-sched\-control\-spec\fR" 4
10947 .IX Item "-mno-sched-control-spec"
10948 .PD 0
10949 .IP "\fB\-msched\-control\-spec\fR" 4
10950 .IX Item "-msched-control-spec"
10951 .PD
10952 (Dis/En)able control speculative scheduling.  This feature is
10953 available only during region scheduling (i.e. before reload).
10954 This will result in generation of the ld.s instructions and
10955 the corresponding check instructions chk.s .
10956 The default is 'disable'.
10957 .IP "\fB\-msched\-br\-in\-data\-spec\fR" 4
10958 .IX Item "-msched-br-in-data-spec"
10959 .PD 0
10960 .IP "\fB\-mno\-sched\-br\-in\-data\-spec\fR" 4
10961 .IX Item "-mno-sched-br-in-data-spec"
10962 .PD
10963 (En/Dis)able speculative scheduling of the instructions that
10964 are dependent on the data speculative loads before reload.
10965 This is effective only with \fB\-msched\-br\-data\-spec\fR enabled.
10966 The default is 'enable'.
10967 .IP "\fB\-msched\-ar\-in\-data\-spec\fR" 4
10968 .IX Item "-msched-ar-in-data-spec"
10969 .PD 0
10970 .IP "\fB\-mno\-sched\-ar\-in\-data\-spec\fR" 4
10971 .IX Item "-mno-sched-ar-in-data-spec"
10972 .PD
10973 (En/Dis)able speculative scheduling of the instructions that
10974 are dependent on the data speculative loads after reload.
10975 This is effective only with \fB\-msched\-ar\-data\-spec\fR enabled.
10976 The default is 'enable'.
10977 .IP "\fB\-msched\-in\-control\-spec\fR" 4
10978 .IX Item "-msched-in-control-spec"
10979 .PD 0
10980 .IP "\fB\-mno\-sched\-in\-control\-spec\fR" 4
10981 .IX Item "-mno-sched-in-control-spec"
10982 .PD
10983 (En/Dis)able speculative scheduling of the instructions that
10984 are dependent on the control speculative loads.
10985 This is effective only with \fB\-msched\-control\-spec\fR enabled.
10986 The default is 'enable'.
10987 .IP "\fB\-msched\-ldc\fR" 4
10988 .IX Item "-msched-ldc"
10989 .PD 0
10990 .IP "\fB\-mno\-sched\-ldc\fR" 4
10991 .IX Item "-mno-sched-ldc"
10992 .PD
10993 (En/Dis)able use of simple data speculation checks ld.c .
10994 If disabled, only chk.a instructions will be emitted to check
10995 data speculative loads.
10996 The default is 'enable'.
10997 .IP "\fB\-mno\-sched\-control\-ldc\fR" 4
10998 .IX Item "-mno-sched-control-ldc"
10999 .PD 0
11000 .IP "\fB\-msched\-control\-ldc\fR" 4
11001 .IX Item "-msched-control-ldc"
11002 .PD
11003 (Dis/En)able use of ld.c instructions to check control speculative loads.
11004 If enabled, in case of control speculative load with no speculatively
11005 scheduled dependent instructions this load will be emitted as ld.sa and
11006 ld.c will be used to check it.
11007 The default is 'disable'.
11008 .IP "\fB\-mno\-sched\-spec\-verbose\fR" 4
11009 .IX Item "-mno-sched-spec-verbose"
11010 .PD 0
11011 .IP "\fB\-msched\-spec\-verbose\fR" 4
11012 .IX Item "-msched-spec-verbose"
11013 .PD
11014 (Dis/En)able printing of the information about speculative motions.
11015 .IP "\fB\-mno\-sched\-prefer\-non\-data\-spec\-insns\fR" 4
11016 .IX Item "-mno-sched-prefer-non-data-spec-insns"
11017 .PD 0
11018 .IP "\fB\-msched\-prefer\-non\-data\-spec\-insns\fR" 4
11019 .IX Item "-msched-prefer-non-data-spec-insns"
11020 .PD
11021 If enabled, data speculative instructions will be chosen for schedule
11022 only if there are no other choices at the moment.  This will make
11023 the use of the data speculation much more conservative.
11024 The default is 'disable'.
11025 .IP "\fB\-mno\-sched\-prefer\-non\-control\-spec\-insns\fR" 4
11026 .IX Item "-mno-sched-prefer-non-control-spec-insns"
11027 .PD 0
11028 .IP "\fB\-msched\-prefer\-non\-control\-spec\-insns\fR" 4
11029 .IX Item "-msched-prefer-non-control-spec-insns"
11030 .PD
11031 If enabled, control speculative instructions will be chosen for schedule
11032 only if there are no other choices at the moment.  This will make
11033 the use of the control speculation much more conservative.
11034 The default is 'disable'.
11035 .IP "\fB\-mno\-sched\-count\-spec\-in\-critical\-path\fR" 4
11036 .IX Item "-mno-sched-count-spec-in-critical-path"
11037 .PD 0
11038 .IP "\fB\-msched\-count\-spec\-in\-critical\-path\fR" 4
11039 .IX Item "-msched-count-spec-in-critical-path"
11040 .PD
11041 If enabled, speculative dependencies will be considered during
11042 computation of the instructions priorities.  This will make the use of the
11043 speculation a bit more conservative.
11044 The default is 'disable'.
11045 .PP
11046 \fIM32C Options\fR
11047 .IX Subsection "M32C Options"
11048 .IP "\fB\-mcpu=\fR\fIname\fR" 4
11049 .IX Item "-mcpu=name"
11050 Select the \s-1CPU\s0 for which code is generated.  \fIname\fR may be one of
11051 \&\fBr8c\fR for the R8C/Tiny series, \fBm16c\fR for the M16C (up to
11052 /60) series, \fBm32cm\fR for the M16C/80 series, or \fBm32c\fR for
11053 the M32C/80 series.
11054 .IP "\fB\-msim\fR" 4
11055 .IX Item "-msim"
11056 Specifies that the program will be run on the simulator.  This causes
11057 an alternate runtime library to be linked in which supports, for
11058 example, file I/O.  You must not use this option when generating
11059 programs that will run on real hardware; you must provide your own
11060 runtime library for whatever I/O functions are needed.
11061 .IP "\fB\-memregs=\fR\fInumber\fR" 4
11062 .IX Item "-memregs=number"
11063 Specifies the number of memory-based pseudo-registers \s-1GCC\s0 will use
11064 during code generation.  These pseudo-registers will be used like real
11065 registers, so there is a tradeoff between \s-1GCC\s0's ability to fit the
11066 code into available registers, and the performance penalty of using
11067 memory instead of registers.  Note that all modules in a program must
11068 be compiled with the same value for this option.  Because of that, you
11069 must not use this option with the default runtime libraries gcc
11070 builds.
11071 .PP
11072 \fIM32R/D Options\fR
11073 .IX Subsection "M32R/D Options"
11074 .PP
11075 These \fB\-m\fR options are defined for Renesas M32R/D architectures:
11076 .IP "\fB\-m32r2\fR" 4
11077 .IX Item "-m32r2"
11078 Generate code for the M32R/2.
11079 .IP "\fB\-m32rx\fR" 4
11080 .IX Item "-m32rx"
11081 Generate code for the M32R/X.
11082 .IP "\fB\-m32r\fR" 4
11083 .IX Item "-m32r"
11084 Generate code for the M32R.  This is the default.
11085 .IP "\fB\-mmodel=small\fR" 4
11086 .IX Item "-mmodel=small"
11087 Assume all objects live in the lower 16MB of memory (so that their addresses
11088 can be loaded with the \f(CW\*(C`ld24\*(C'\fR instruction), and assume all subroutines
11089 are reachable with the \f(CW\*(C`bl\*(C'\fR instruction.
11090 This is the default.
11091 .Sp
11092 The addressability of a particular object can be set with the
11093 \&\f(CW\*(C`model\*(C'\fR attribute.
11094 .IP "\fB\-mmodel=medium\fR" 4
11095 .IX Item "-mmodel=medium"
11096 Assume objects may be anywhere in the 32\-bit address space (the compiler
11097 will generate \f(CW\*(C`seth/add3\*(C'\fR instructions to load their addresses), and
11098 assume all subroutines are reachable with the \f(CW\*(C`bl\*(C'\fR instruction.
11099 .IP "\fB\-mmodel=large\fR" 4
11100 .IX Item "-mmodel=large"
11101 Assume objects may be anywhere in the 32\-bit address space (the compiler
11102 will generate \f(CW\*(C`seth/add3\*(C'\fR instructions to load their addresses), and
11103 assume subroutines may not be reachable with the \f(CW\*(C`bl\*(C'\fR instruction
11104 (the compiler will generate the much slower \f(CW\*(C`seth/add3/jl\*(C'\fR
11105 instruction sequence).
11106 .IP "\fB\-msdata=none\fR" 4
11107 .IX Item "-msdata=none"
11108 Disable use of the small data area.  Variables will be put into
11109 one of \fB.data\fR, \fBbss\fR, or \fB.rodata\fR (unless the
11110 \&\f(CW\*(C`section\*(C'\fR attribute has been specified).
11111 This is the default.
11112 .Sp
11113 The small data area consists of sections \fB.sdata\fR and \fB.sbss\fR.
11114 Objects may be explicitly put in the small data area with the
11115 \&\f(CW\*(C`section\*(C'\fR attribute using one of these sections.
11116 .IP "\fB\-msdata=sdata\fR" 4
11117 .IX Item "-msdata=sdata"
11118 Put small global and static data in the small data area, but do not
11119 generate special code to reference them.
11120 .IP "\fB\-msdata=use\fR" 4
11121 .IX Item "-msdata=use"
11122 Put small global and static data in the small data area, and generate
11123 special instructions to reference them.
11124 .IP "\fB\-G\fR \fInum\fR" 4
11125 .IX Item "-G num"
11126 Put global and static objects less than or equal to \fInum\fR bytes
11127 into the small data or bss sections instead of the normal data or bss
11128 sections.  The default value of \fInum\fR is 8.
11129 The \fB\-msdata\fR option must be set to one of \fBsdata\fR or \fBuse\fR
11130 for this option to have any effect.
11131 .Sp
11132 All modules should be compiled with the same \fB\-G\fR \fInum\fR value.
11133 Compiling with different values of \fInum\fR may or may not work; if it
11134 doesn't the linker will give an error message\-\-\-incorrect code will not be
11135 generated.
11136 .IP "\fB\-mdebug\fR" 4
11137 .IX Item "-mdebug"
11138 Makes the M32R specific code in the compiler display some statistics
11139 that might help in debugging programs.
11140 .IP "\fB\-malign\-loops\fR" 4
11141 .IX Item "-malign-loops"
11142 Align all loops to a 32\-byte boundary.
11143 .IP "\fB\-mno\-align\-loops\fR" 4
11144 .IX Item "-mno-align-loops"
11145 Do not enforce a 32\-byte alignment for loops.  This is the default.
11146 .IP "\fB\-missue\-rate=\fR\fInumber\fR" 4
11147 .IX Item "-missue-rate=number"
11148 Issue \fInumber\fR instructions per cycle.  \fInumber\fR can only be 1
11149 or 2.
11150 .IP "\fB\-mbranch\-cost=\fR\fInumber\fR" 4
11151 .IX Item "-mbranch-cost=number"
11152 \&\fInumber\fR can only be 1 or 2.  If it is 1 then branches will be
11153 preferred over conditional code, if it is 2, then the opposite will
11154 apply.
11155 .IP "\fB\-mflush\-trap=\fR\fInumber\fR" 4
11156 .IX Item "-mflush-trap=number"
11157 Specifies the trap number to use to flush the cache.  The default is
11158 12.  Valid numbers are between 0 and 15 inclusive.
11159 .IP "\fB\-mno\-flush\-trap\fR" 4
11160 .IX Item "-mno-flush-trap"
11161 Specifies that the cache cannot be flushed by using a trap.
11162 .IP "\fB\-mflush\-func=\fR\fIname\fR" 4
11163 .IX Item "-mflush-func=name"
11164 Specifies the name of the operating system function to call to flush
11165 the cache.  The default is \fI_flush_cache\fR, but a function call
11166 will only be used if a trap is not available.
11167 .IP "\fB\-mno\-flush\-func\fR" 4
11168 .IX Item "-mno-flush-func"
11169 Indicates that there is no \s-1OS\s0 function for flushing the cache.
11170 .PP
11171 \fIM680x0 Options\fR
11172 .IX Subsection "M680x0 Options"
11173 .PP
11174 These are the \fB\-m\fR options defined for M680x0 and ColdFire processors.
11175 The default settings depend on which architecture was selected when
11176 the compiler was configured; the defaults for the most common choices
11177 are given below.
11178 .IP "\fB\-march=\fR\fIarch\fR" 4
11179 .IX Item "-march=arch"
11180 Generate code for a specific M680x0 or ColdFire instruction set
11181 architecture.  Permissible values of \fIarch\fR for M680x0
11182 architectures are: \fB68000\fR, \fB68010\fR, \fB68020\fR,
11183 \&\fB68030\fR, \fB68040\fR, \fB68060\fR and \fBcpu32\fR.  ColdFire
11184 architectures are selected according to Freescale's \s-1ISA\s0 classification
11185 and the permissible values are: \fBisaa\fR, \fBisaaplus\fR,
11186 \&\fBisab\fR and \fBisac\fR.
11187 .Sp
11188 gcc defines a macro \fB_\|_mcf\fR\fIarch\fR\fB_\|_\fR whenever it is generating
11189 code for a ColdFire target.  The \fIarch\fR in this macro is one of the
11190 \&\fB\-march\fR arguments given above.
11191 .Sp
11192 When used together, \fB\-march\fR and \fB\-mtune\fR select code
11193 that runs on a family of similar processors but that is optimized
11194 for a particular microarchitecture.
11195 .IP "\fB\-mcpu=\fR\fIcpu\fR" 4
11196 .IX Item "-mcpu=cpu"
11197 Generate code for a specific M680x0 or ColdFire processor.
11198 The M680x0 \fIcpu\fRs are: \fB68000\fR, \fB68010\fR, \fB68020\fR,
11199 \&\fB68030\fR, \fB68040\fR, \fB68060\fR, \fB68302\fR, \fB68332\fR
11200 and \fBcpu32\fR.  The ColdFire \fIcpu\fRs are given by the table
11201 below, which also classifies the CPUs into families:
11202 .RS 4
11203 .IP "Family : \fB\-mcpu\fR arguments" 4
11204 .IX Item "Family : -mcpu arguments"
11205 .PD 0
11206 .IP "\fB51qe\fR : \fB51qe\fR" 4
11207 .IX Item "51qe : 51qe"
11208 .IP "\fB5206\fR : \fB5202\fR \fB5204\fR \fB5206\fR" 4
11209 .IX Item "5206 : 5202 5204 5206"
11210 .IP "\fB5206e\fR : \fB5206e\fR" 4
11211 .IX Item "5206e : 5206e"
11212 .IP "\fB5208\fR : \fB5207\fR \fB5208\fR" 4
11213 .IX Item "5208 : 5207 5208"
11214 .IP "\fB5211a\fR : \fB5210a\fR \fB5211a\fR" 4
11215 .IX Item "5211a : 5210a 5211a"
11216 .IP "\fB5213\fR : \fB5211\fR \fB5212\fR \fB5213\fR" 4
11217 .IX Item "5213 : 5211 5212 5213"
11218 .IP "\fB5216\fR : \fB5214\fR \fB5216\fR" 4
11219 .IX Item "5216 : 5214 5216"
11220 .IP "\fB52235\fR : \fB52230\fR \fB52231\fR \fB52232\fR \fB52233\fR \fB52234\fR \fB52235\fR" 4
11221 .IX Item "52235 : 52230 52231 52232 52233 52234 52235"
11222 .IP "\fB5225\fR : \fB5224\fR \fB5225\fR" 4
11223 .IX Item "5225 : 5224 5225"
11224 .IP "\fB5235\fR : \fB5232\fR \fB5233\fR \fB5234\fR \fB5235\fR \fB523x\fR" 4
11225 .IX Item "5235 : 5232 5233 5234 5235 523x"
11226 .IP "\fB5249\fR : \fB5249\fR" 4
11227 .IX Item "5249 : 5249"
11228 .IP "\fB5250\fR : \fB5250\fR" 4
11229 .IX Item "5250 : 5250"
11230 .IP "\fB5271\fR : \fB5270\fR \fB5271\fR" 4
11231 .IX Item "5271 : 5270 5271"
11232 .IP "\fB5272\fR : \fB5272\fR" 4
11233 .IX Item "5272 : 5272"
11234 .IP "\fB5275\fR : \fB5274\fR \fB5275\fR" 4
11235 .IX Item "5275 : 5274 5275"
11236 .IP "\fB5282\fR : \fB5280\fR \fB5281\fR \fB5282\fR \fB528x\fR" 4
11237 .IX Item "5282 : 5280 5281 5282 528x"
11238 .IP "\fB5307\fR : \fB5307\fR" 4
11239 .IX Item "5307 : 5307"
11240 .IP "\fB5329\fR : \fB5327\fR \fB5328\fR \fB5329\fR \fB532x\fR" 4
11241 .IX Item "5329 : 5327 5328 5329 532x"
11242 .IP "\fB5373\fR : \fB5372\fR \fB5373\fR \fB537x\fR" 4
11243 .IX Item "5373 : 5372 5373 537x"
11244 .IP "\fB5407\fR : \fB5407\fR" 4
11245 .IX Item "5407 : 5407"
11246 .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
11247 .IX Item "5475 : 5470 5471 5472 5473 5474 5475 547x 5480 5481 5482 5483 5484 5485"
11248 .RE
11249 .RS 4
11250 .PD
11251 .Sp
11252 \&\fB\-mcpu=\fR\fIcpu\fR overrides \fB\-march=\fR\fIarch\fR if
11253 \&\fIarch\fR is compatible with \fIcpu\fR.  Other combinations of
11254 \&\fB\-mcpu\fR and \fB\-march\fR are rejected.
11255 .Sp
11256 gcc defines the macro \fB_\|_mcf_cpu_\fR\fIcpu\fR when ColdFire target
11257 \&\fIcpu\fR is selected.  It also defines \fB_\|_mcf_family_\fR\fIfamily\fR,
11258 where the value of \fIfamily\fR is given by the table above.
11259 .RE
11260 .IP "\fB\-mtune=\fR\fItune\fR" 4
11261 .IX Item "-mtune=tune"
11262 Tune the code for a particular microarchitecture, within the
11263 constraints set by \fB\-march\fR and \fB\-mcpu\fR.
11264 The M680x0 microarchitectures are: \fB68000\fR, \fB68010\fR,
11265 \&\fB68020\fR, \fB68030\fR, \fB68040\fR, \fB68060\fR
11266 and \fBcpu32\fR.  The ColdFire microarchitectures
11267 are: \fBcfv1\fR, \fBcfv2\fR, \fBcfv3\fR, \fBcfv4\fR and \fBcfv4e\fR.
11268 .Sp
11269 You can also use \fB\-mtune=68020\-40\fR for code that needs
11270 to run relatively well on 68020, 68030 and 68040 targets.
11271 \&\fB\-mtune=68020\-60\fR is similar but includes 68060 targets
11272 as well.  These two options select the same tuning decisions as
11273 \&\fB\-m68020\-40\fR and \fB\-m68020\-60\fR respectively.
11274 .Sp
11275 gcc defines the macros \fB_\|_mc\fR\fIarch\fR and \fB_\|_mc\fR\fIarch\fR\fB_\|_\fR
11276 when tuning for 680x0 architecture \fIarch\fR.  It also defines
11277 \&\fBmc\fR\fIarch\fR unless either \fB\-ansi\fR or a non-GNU \fB\-std\fR
11278 option is used.  If gcc is tuning for a range of architectures,
11279 as selected by \fB\-mtune=68020\-40\fR or \fB\-mtune=68020\-60\fR,
11280 it defines the macros for every architecture in the range.
11281 .Sp
11282 gcc also defines the macro \fB_\|_m\fR\fIuarch\fR\fB_\|_\fR when tuning for
11283 ColdFire microarchitecture \fIuarch\fR, where \fIuarch\fR is one
11284 of the arguments given above.
11285 .IP "\fB\-m68000\fR" 4
11286 .IX Item "-m68000"
11287 .PD 0
11288 .IP "\fB\-mc68000\fR" 4
11289 .IX Item "-mc68000"
11290 .PD
11291 Generate output for a 68000.  This is the default
11292 when the compiler is configured for 68000\-based systems.
11293 It is equivalent to \fB\-march=68000\fR.
11294 .Sp
11295 Use this option for microcontrollers with a 68000 or \s-1EC000\s0 core,
11296 including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
11297 .IP "\fB\-m68010\fR" 4
11298 .IX Item "-m68010"
11299 Generate output for a 68010.  This is the default
11300 when the compiler is configured for 68010\-based systems.
11301 It is equivalent to \fB\-march=68010\fR.
11302 .IP "\fB\-m68020\fR" 4
11303 .IX Item "-m68020"
11304 .PD 0
11305 .IP "\fB\-mc68020\fR" 4
11306 .IX Item "-mc68020"
11307 .PD
11308 Generate output for a 68020.  This is the default
11309 when the compiler is configured for 68020\-based systems.
11310 It is equivalent to \fB\-march=68020\fR.
11311 .IP "\fB\-m68030\fR" 4
11312 .IX Item "-m68030"
11313 Generate output for a 68030.  This is the default when the compiler is
11314 configured for 68030\-based systems.  It is equivalent to
11315 \&\fB\-march=68030\fR.
11316 .IP "\fB\-m68040\fR" 4
11317 .IX Item "-m68040"
11318 Generate output for a 68040.  This is the default when the compiler is
11319 configured for 68040\-based systems.  It is equivalent to
11320 \&\fB\-march=68040\fR.
11321 .Sp
11322 This option inhibits the use of 68881/68882 instructions that have to be
11323 emulated by software on the 68040.  Use this option if your 68040 does not
11324 have code to emulate those instructions.
11325 .IP "\fB\-m68060\fR" 4
11326 .IX Item "-m68060"
11327 Generate output for a 68060.  This is the default when the compiler is
11328 configured for 68060\-based systems.  It is equivalent to
11329 \&\fB\-march=68060\fR.
11330 .Sp
11331 This option inhibits the use of 68020 and 68881/68882 instructions that
11332 have to be emulated by software on the 68060.  Use this option if your 68060
11333 does not have code to emulate those instructions.
11334 .IP "\fB\-mcpu32\fR" 4
11335 .IX Item "-mcpu32"
11336 Generate output for a \s-1CPU32\s0.  This is the default
11337 when the compiler is configured for CPU32\-based systems.
11338 It is equivalent to \fB\-march=cpu32\fR.
11339 .Sp
11340 Use this option for microcontrollers with a
11341 \&\s-1CPU32\s0 or \s-1CPU32+\s0 core, including the 68330, 68331, 68332, 68333, 68334,
11342 68336, 68340, 68341, 68349 and 68360.
11343 .IP "\fB\-m5200\fR" 4
11344 .IX Item "-m5200"
11345 Generate output for a 520X ColdFire \s-1CPU\s0.  This is the default
11346 when the compiler is configured for 520X\-based systems.
11347 It is equivalent to \fB\-mcpu=5206\fR, and is now deprecated
11348 in favor of that option.
11349 .Sp
11350 Use this option for microcontroller with a 5200 core, including
11351 the \s-1MCF5202\s0, \s-1MCF5203\s0, \s-1MCF5204\s0 and \s-1MCF5206\s0.
11352 .IP "\fB\-m5206e\fR" 4
11353 .IX Item "-m5206e"
11354 Generate output for a 5206e ColdFire \s-1CPU\s0.  The option is now
11355 deprecated in favor of the equivalent \fB\-mcpu=5206e\fR.
11356 .IP "\fB\-m528x\fR" 4
11357 .IX Item "-m528x"
11358 Generate output for a member of the ColdFire 528X family.
11359 The option is now deprecated in favor of the equivalent
11360 \&\fB\-mcpu=528x\fR.
11361 .IP "\fB\-m5307\fR" 4
11362 .IX Item "-m5307"
11363 Generate output for a ColdFire 5307 \s-1CPU\s0.  The option is now deprecated
11364 in favor of the equivalent \fB\-mcpu=5307\fR.
11365 .IP "\fB\-m5407\fR" 4
11366 .IX Item "-m5407"
11367 Generate output for a ColdFire 5407 \s-1CPU\s0.  The option is now deprecated
11368 in favor of the equivalent \fB\-mcpu=5407\fR.
11369 .IP "\fB\-mcfv4e\fR" 4
11370 .IX Item "-mcfv4e"
11371 Generate output for a ColdFire V4e family \s-1CPU\s0 (e.g. 547x/548x).
11372 This includes use of hardware floating point instructions.
11373 The option is equivalent to \fB\-mcpu=547x\fR, and is now
11374 deprecated in favor of that option.
11375 .IP "\fB\-m68020\-40\fR" 4
11376 .IX Item "-m68020-40"
11377 Generate output for a 68040, without using any of the new instructions.
11378 This results in code which can run relatively efficiently on either a
11379 68020/68881 or a 68030 or a 68040.  The generated code does use the
11380 68881 instructions that are emulated on the 68040.
11381 .Sp
11382 The option is equivalent to \fB\-march=68020\fR \fB\-mtune=68020\-40\fR.
11383 .IP "\fB\-m68020\-60\fR" 4
11384 .IX Item "-m68020-60"
11385 Generate output for a 68060, without using any of the new instructions.
11386 This results in code which can run relatively efficiently on either a
11387 68020/68881 or a 68030 or a 68040.  The generated code does use the
11388 68881 instructions that are emulated on the 68060.
11389 .Sp
11390 The option is equivalent to \fB\-march=68020\fR \fB\-mtune=68020\-60\fR.
11391 .IP "\fB\-mhard\-float\fR" 4
11392 .IX Item "-mhard-float"
11393 .PD 0
11394 .IP "\fB\-m68881\fR" 4
11395 .IX Item "-m68881"
11396 .PD
11397 Generate floating-point instructions.  This is the default for 68020
11398 and above, and for ColdFire devices that have an \s-1FPU\s0.  It defines the
11399 macro \fB_\|_HAVE_68881_\|_\fR on M680x0 targets and \fB_\|_mcffpu_\|_\fR
11400 on ColdFire targets.
11401 .IP "\fB\-msoft\-float\fR" 4
11402 .IX Item "-msoft-float"
11403 Do not generate floating-point instructions; use library calls instead.
11404 This is the default for 68000, 68010, and 68832 targets.  It is also
11405 the default for ColdFire devices that have no \s-1FPU\s0.
11406 .IP "\fB\-mdiv\fR" 4
11407 .IX Item "-mdiv"
11408 .PD 0
11409 .IP "\fB\-mno\-div\fR" 4
11410 .IX Item "-mno-div"
11411 .PD
11412 Generate (do not generate) ColdFire hardware divide and remainder
11413 instructions.  If \fB\-march\fR is used without \fB\-mcpu\fR,
11414 the default is \*(L"on\*(R" for ColdFire architectures and \*(L"off\*(R" for M680x0
11415 architectures.  Otherwise, the default is taken from the target \s-1CPU\s0
11416 (either the default \s-1CPU\s0, or the one specified by \fB\-mcpu\fR).  For
11417 example, the default is \*(L"off\*(R" for \fB\-mcpu=5206\fR and \*(L"on\*(R" for
11418 \&\fB\-mcpu=5206e\fR.
11419 .Sp
11420 gcc defines the macro \fB_\|_mcfhwdiv_\|_\fR when this option is enabled.
11421 .IP "\fB\-mshort\fR" 4
11422 .IX Item "-mshort"
11423 Consider type \f(CW\*(C`int\*(C'\fR to be 16 bits wide, like \f(CW\*(C`short int\*(C'\fR.
11424 Additionally, parameters passed on the stack are also aligned to a
11425 16\-bit boundary even on targets whose \s-1API\s0 mandates promotion to 32\-bit.
11426 .IP "\fB\-mno\-short\fR" 4
11427 .IX Item "-mno-short"
11428 Do not consider type \f(CW\*(C`int\*(C'\fR to be 16 bits wide.  This is the default.
11429 .IP "\fB\-mnobitfield\fR" 4
11430 .IX Item "-mnobitfield"
11431 .PD 0
11432 .IP "\fB\-mno\-bitfield\fR" 4
11433 .IX Item "-mno-bitfield"
11434 .PD
11435 Do not use the bit-field instructions.  The \fB\-m68000\fR, \fB\-mcpu32\fR
11436 and \fB\-m5200\fR options imply \fB\-mnobitfield\fR.
11437 .IP "\fB\-mbitfield\fR" 4
11438 .IX Item "-mbitfield"
11439 Do use the bit-field instructions.  The \fB\-m68020\fR option implies
11440 \&\fB\-mbitfield\fR.  This is the default if you use a configuration
11441 designed for a 68020.
11442 .IP "\fB\-mrtd\fR" 4
11443 .IX Item "-mrtd"
11444 Use a different function-calling convention, in which functions
11445 that take a fixed number of arguments return with the \f(CW\*(C`rtd\*(C'\fR
11446 instruction, which pops their arguments while returning.  This
11447 saves one instruction in the caller since there is no need to pop
11448 the arguments there.
11449 .Sp
11450 This calling convention is incompatible with the one normally
11451 used on Unix, so you cannot use it if you need to call libraries
11452 compiled with the Unix compiler.
11453 .Sp
11454 Also, you must provide function prototypes for all functions that
11455 take variable numbers of arguments (including \f(CW\*(C`printf\*(C'\fR);
11456 otherwise incorrect code will be generated for calls to those
11457 functions.
11458 .Sp
11459 In addition, seriously incorrect code will result if you call a
11460 function with too many arguments.  (Normally, extra arguments are
11461 harmlessly ignored.)
11462 .Sp
11463 The \f(CW\*(C`rtd\*(C'\fR instruction is supported by the 68010, 68020, 68030,
11464 68040, 68060 and \s-1CPU32\s0 processors, but not by the 68000 or 5200.
11465 .IP "\fB\-mno\-rtd\fR" 4
11466 .IX Item "-mno-rtd"
11467 Do not use the calling conventions selected by \fB\-mrtd\fR.
11468 This is the default.
11469 .IP "\fB\-malign\-int\fR" 4
11470 .IX Item "-malign-int"
11471 .PD 0
11472 .IP "\fB\-mno\-align\-int\fR" 4
11473 .IX Item "-mno-align-int"
11474 .PD
11475 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,
11476 \&\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
11477 boundary (\fB\-malign\-int\fR) or a 16\-bit boundary (\fB\-mno\-align\-int\fR).
11478 Aligning variables on 32\-bit boundaries produces code that runs somewhat
11479 faster on processors with 32\-bit busses at the expense of more memory.
11480 .Sp
11481 \&\fBWarning:\fR if you use the \fB\-malign\-int\fR switch, \s-1GCC\s0 will
11482 align structures containing the above types  differently than
11483 most published application binary interface specifications for the m68k.
11484 .IP "\fB\-mpcrel\fR" 4
11485 .IX Item "-mpcrel"
11486 Use the pc-relative addressing mode of the 68000 directly, instead of
11487 using a global offset table.  At present, this option implies \fB\-fpic\fR,
11488 allowing at most a 16\-bit offset for pc-relative addressing.  \fB\-fPIC\fR is
11489 not presently supported with \fB\-mpcrel\fR, though this could be supported for
11490 68020 and higher processors.
11491 .IP "\fB\-mno\-strict\-align\fR" 4
11492 .IX Item "-mno-strict-align"
11493 .PD 0
11494 .IP "\fB\-mstrict\-align\fR" 4
11495 .IX Item "-mstrict-align"
11496 .PD
11497 Do not (do) assume that unaligned memory references will be handled by
11498 the system.
11499 .IP "\fB\-msep\-data\fR" 4
11500 .IX Item "-msep-data"
11501 Generate code that allows the data segment to be located in a different
11502 area of memory from the text segment.  This allows for execute in place in
11503 an environment without virtual memory management.  This option implies
11504 \&\fB\-fPIC\fR.
11505 .IP "\fB\-mno\-sep\-data\fR" 4
11506 .IX Item "-mno-sep-data"
11507 Generate code that assumes that the data segment follows the text segment.
11508 This is the default.
11509 .IP "\fB\-mid\-shared\-library\fR" 4
11510 .IX Item "-mid-shared-library"
11511 Generate code that supports shared libraries via the library \s-1ID\s0 method.
11512 This allows for execute in place and shared libraries in an environment
11513 without virtual memory management.  This option implies \fB\-fPIC\fR.
11514 .IP "\fB\-mno\-id\-shared\-library\fR" 4
11515 .IX Item "-mno-id-shared-library"
11516 Generate code that doesn't assume \s-1ID\s0 based shared libraries are being used.
11517 This is the default.
11518 .IP "\fB\-mshared\-library\-id=n\fR" 4
11519 .IX Item "-mshared-library-id=n"
11520 Specified the identification number of the \s-1ID\s0 based shared library being
11521 compiled.  Specifying a value of 0 will generate more compact code, specifying
11522 other values will force the allocation of that number to the current
11523 library but is no more space or time efficient than omitting this option.
11524 .IP "\fB\-mxgot\fR" 4
11525 .IX Item "-mxgot"
11526 .PD 0
11527 .IP "\fB\-mno\-xgot\fR" 4
11528 .IX Item "-mno-xgot"
11529 .PD
11530 When generating position-independent code for ColdFire, generate code
11531 that works if the \s-1GOT\s0 has more than 8192 entries.  This code is
11532 larger and slower than code generated without this option.  On M680x0
11533 processors, this option is not needed; \fB\-fPIC\fR suffices.
11534 .Sp
11535 \&\s-1GCC\s0 normally uses a single instruction to load values from the \s-1GOT\s0.
11536 While this is relatively efficient, it only works if the \s-1GOT\s0
11537 is smaller than about 64k.  Anything larger causes the linker
11538 to report an error such as:
11539 .Sp
11540 .Vb 1
11541 \&        relocation truncated to fit: R_68K_GOT16O foobar
11542 .Ve
11543 .Sp
11544 If this happens, you should recompile your code with \fB\-mxgot\fR.
11545 It should then work with very large GOTs.  However, code generated with
11546 \&\fB\-mxgot\fR is less efficient, since it takes 4 instructions to fetch
11547 the value of a global symbol.
11548 .Sp
11549 Note that some linkers, including newer versions of the \s-1GNU\s0 linker,
11550 can create multiple GOTs and sort \s-1GOT\s0 entries.  If you have such a linker,
11551 you should only need to use \fB\-mxgot\fR when compiling a single
11552 object file that accesses more than 8192 \s-1GOT\s0 entries.  Very few do.
11553 .Sp
11554 These options have no effect unless \s-1GCC\s0 is generating
11555 position-independent code.
11556 .PP
11557 \fIM68hc1x Options\fR
11558 .IX Subsection "M68hc1x Options"
11559 .PP
11560 These are the \fB\-m\fR options defined for the 68hc11 and 68hc12
11561 microcontrollers.  The default values for these options depends on
11562 which style of microcontroller was selected when the compiler was configured;
11563 the defaults for the most common choices are given below.
11564 .IP "\fB\-m6811\fR" 4
11565 .IX Item "-m6811"
11566 .PD 0
11567 .IP "\fB\-m68hc11\fR" 4
11568 .IX Item "-m68hc11"
11569 .PD
11570 Generate output for a 68HC11.  This is the default
11571 when the compiler is configured for 68HC11\-based systems.
11572 .IP "\fB\-m6812\fR" 4
11573 .IX Item "-m6812"
11574 .PD 0
11575 .IP "\fB\-m68hc12\fR" 4
11576 .IX Item "-m68hc12"
11577 .PD
11578 Generate output for a 68HC12.  This is the default
11579 when the compiler is configured for 68HC12\-based systems.
11580 .IP "\fB\-m68S12\fR" 4
11581 .IX Item "-m68S12"
11582 .PD 0
11583 .IP "\fB\-m68hcs12\fR" 4
11584 .IX Item "-m68hcs12"
11585 .PD
11586 Generate output for a 68HCS12.
11587 .IP "\fB\-mauto\-incdec\fR" 4
11588 .IX Item "-mauto-incdec"
11589 Enable the use of 68HC12 pre and post auto-increment and auto-decrement
11590 addressing modes.
11591 .IP "\fB\-minmax\fR" 4
11592 .IX Item "-minmax"
11593 .PD 0
11594 .IP "\fB\-nominmax\fR" 4
11595 .IX Item "-nominmax"
11596 .PD
11597 Enable the use of 68HC12 min and max instructions.
11598 .IP "\fB\-mlong\-calls\fR" 4
11599 .IX Item "-mlong-calls"
11600 .PD 0
11601 .IP "\fB\-mno\-long\-calls\fR" 4
11602 .IX Item "-mno-long-calls"
11603 .PD
11604 Treat all calls as being far away (near).  If calls are assumed to be
11605 far away, the compiler will use the \f(CW\*(C`call\*(C'\fR instruction to
11606 call a function and the \f(CW\*(C`rtc\*(C'\fR instruction for returning.
11607 .IP "\fB\-mshort\fR" 4
11608 .IX Item "-mshort"
11609 Consider type \f(CW\*(C`int\*(C'\fR to be 16 bits wide, like \f(CW\*(C`short int\*(C'\fR.
11610 .IP "\fB\-msoft\-reg\-count=\fR\fIcount\fR" 4
11611 .IX Item "-msoft-reg-count=count"
11612 Specify the number of pseudo-soft registers which are used for the
11613 code generation.  The maximum number is 32.  Using more pseudo-soft
11614 register may or may not result in better code depending on the program.
11615 The default is 4 for 68HC11 and 2 for 68HC12.
11616 .PP
11617 \fIMCore Options\fR
11618 .IX Subsection "MCore Options"
11619 .PP
11620 These are the \fB\-m\fR options defined for the Motorola M*Core
11621 processors.
11622 .IP "\fB\-mhardlit\fR" 4
11623 .IX Item "-mhardlit"
11624 .PD 0
11625 .IP "\fB\-mno\-hardlit\fR" 4
11626 .IX Item "-mno-hardlit"
11627 .PD
11628 Inline constants into the code stream if it can be done in two
11629 instructions or less.
11630 .IP "\fB\-mdiv\fR" 4
11631 .IX Item "-mdiv"
11632 .PD 0
11633 .IP "\fB\-mno\-div\fR" 4
11634 .IX Item "-mno-div"
11635 .PD
11636 Use the divide instruction.  (Enabled by default).
11637 .IP "\fB\-mrelax\-immediate\fR" 4
11638 .IX Item "-mrelax-immediate"
11639 .PD 0
11640 .IP "\fB\-mno\-relax\-immediate\fR" 4
11641 .IX Item "-mno-relax-immediate"
11642 .PD
11643 Allow arbitrary sized immediates in bit operations.
11644 .IP "\fB\-mwide\-bitfields\fR" 4
11645 .IX Item "-mwide-bitfields"
11646 .PD 0
11647 .IP "\fB\-mno\-wide\-bitfields\fR" 4
11648 .IX Item "-mno-wide-bitfields"
11649 .PD
11650 Always treat bit-fields as int\-sized.
11651 .IP "\fB\-m4byte\-functions\fR" 4
11652 .IX Item "-m4byte-functions"
11653 .PD 0
11654 .IP "\fB\-mno\-4byte\-functions\fR" 4
11655 .IX Item "-mno-4byte-functions"
11656 .PD
11657 Force all functions to be aligned to a four byte boundary.
11658 .IP "\fB\-mcallgraph\-data\fR" 4
11659 .IX Item "-mcallgraph-data"
11660 .PD 0
11661 .IP "\fB\-mno\-callgraph\-data\fR" 4
11662 .IX Item "-mno-callgraph-data"
11663 .PD
11664 Emit callgraph information.
11665 .IP "\fB\-mslow\-bytes\fR" 4
11666 .IX Item "-mslow-bytes"
11667 .PD 0
11668 .IP "\fB\-mno\-slow\-bytes\fR" 4
11669 .IX Item "-mno-slow-bytes"
11670 .PD
11671 Prefer word access when reading byte quantities.
11672 .IP "\fB\-mlittle\-endian\fR" 4
11673 .IX Item "-mlittle-endian"
11674 .PD 0
11675 .IP "\fB\-mbig\-endian\fR" 4
11676 .IX Item "-mbig-endian"
11677 .PD
11678 Generate code for a little endian target.
11679 .IP "\fB\-m210\fR" 4
11680 .IX Item "-m210"
11681 .PD 0
11682 .IP "\fB\-m340\fR" 4
11683 .IX Item "-m340"
11684 .PD
11685 Generate code for the 210 processor.
11686 .IP "\fB\-mno\-lsim\fR" 4
11687 .IX Item "-mno-lsim"
11688 Assume that run-time support has been provided and so omit the
11689 simulator library (\fIlibsim.a)\fR from the linker command line.
11690 .IP "\fB\-mstack\-increment=\fR\fIsize\fR" 4
11691 .IX Item "-mstack-increment=size"
11692 Set the maximum amount for a single stack increment operation.  Large
11693 values can increase the speed of programs which contain functions
11694 that need a large amount of stack space, but they can also trigger a
11695 segmentation fault if the stack is extended too much.  The default
11696 value is 0x1000.
11697 .PP
11698 \fI\s-1MIPS\s0 Options\fR
11699 .IX Subsection "MIPS Options"
11700 .IP "\fB\-EB\fR" 4
11701 .IX Item "-EB"
11702 Generate big-endian code.
11703 .IP "\fB\-EL\fR" 4
11704 .IX Item "-EL"
11705 Generate little-endian code.  This is the default for \fBmips*el\-*\-*\fR
11706 configurations.
11707 .IP "\fB\-march=\fR\fIarch\fR" 4
11708 .IX Item "-march=arch"
11709 Generate code that will run on \fIarch\fR, which can be the name of a
11710 generic \s-1MIPS\s0 \s-1ISA\s0, or the name of a particular processor.
11711 The \s-1ISA\s0 names are:
11712 \&\fBmips1\fR, \fBmips2\fR, \fBmips3\fR, \fBmips4\fR,
11713 \&\fBmips32\fR, \fBmips32r2\fR, \fBmips64\fR and \fBmips64r2\fR.
11714 The processor names are:
11715 \&\fB4kc\fR, \fB4km\fR, \fB4kp\fR, \fB4ksc\fR,
11716 \&\fB4kec\fR, \fB4kem\fR, \fB4kep\fR, \fB4ksd\fR,
11717 \&\fB5kc\fR, \fB5kf\fR,
11718 \&\fB20kc\fR,
11719 \&\fB24kc\fR, \fB24kf2_1\fR, \fB24kf1_1\fR,
11720 \&\fB24kec\fR, \fB24kef2_1\fR, \fB24kef1_1\fR,
11721 \&\fB34kc\fR, \fB34kf2_1\fR, \fB34kf1_1\fR,
11722 \&\fB74kc\fR, \fB74kf2_1\fR, \fB74kf1_1\fR, \fB74kf3_2\fR,
11723 \&\fBloongson2e\fR, \fBloongson2f\fR,
11724 \&\fBm4k\fR,
11725 \&\fBocteon\fR,
11726 \&\fBorion\fR,
11727 \&\fBr2000\fR, \fBr3000\fR, \fBr3900\fR, \fBr4000\fR, \fBr4400\fR,
11728 \&\fBr4600\fR, \fBr4650\fR, \fBr6000\fR, \fBr8000\fR,
11729 \&\fBrm7000\fR, \fBrm9000\fR,
11730 \&\fBr10000\fR, \fBr12000\fR, \fBr14000\fR, \fBr16000\fR,
11731 \&\fBsb1\fR,
11732 \&\fBsr71000\fR,
11733 \&\fBvr4100\fR, \fBvr4111\fR, \fBvr4120\fR, \fBvr4130\fR, \fBvr4300\fR,
11734 \&\fBvr5000\fR, \fBvr5400\fR, \fBvr5500\fR
11735 and \fBxlr\fR.
11736 The special value \fBfrom-abi\fR selects the
11737 most compatible architecture for the selected \s-1ABI\s0 (that is,
11738 \&\fBmips1\fR for 32\-bit ABIs and \fBmips3\fR for 64\-bit ABIs).
11739 .Sp
11740 Native Linux/GNU toolchains also support the value \fBnative\fR,
11741 which selects the best architecture option for the host processor.
11742 \&\fB\-march=native\fR has no effect if \s-1GCC\s0 does not recognize
11743 the processor.
11744 .Sp
11745 In processor names, a final \fB000\fR can be abbreviated as \fBk\fR
11746 (for example, \fB\-march=r2k\fR).  Prefixes are optional, and
11747 \&\fBvr\fR may be written \fBr\fR.
11748 .Sp
11749 Names of the form \fIn\fR\fBf2_1\fR refer to processors with
11750 FPUs clocked at half the rate of the core, names of the form
11751 \&\fIn\fR\fBf1_1\fR refer to processors with FPUs clocked at the same
11752 rate as the core, and names of the form \fIn\fR\fBf3_2\fR refer to
11753 processors with FPUs clocked a ratio of 3:2 with respect to the core.
11754 For compatibility reasons, \fIn\fR\fBf\fR is accepted as a synonym
11755 for \fIn\fR\fBf2_1\fR while \fIn\fR\fBx\fR and \fIb\fR\fBfx\fR are
11756 accepted as synonyms for \fIn\fR\fBf1_1\fR.
11757 .Sp
11758 \&\s-1GCC\s0 defines two macros based on the value of this option.  The first
11759 is \fB_MIPS_ARCH\fR, which gives the name of target architecture, as
11760 a string.  The second has the form \fB_MIPS_ARCH_\fR\fIfoo\fR,
11761 where \fIfoo\fR is the capitalized value of \fB_MIPS_ARCH\fR.
11762 For example, \fB\-march=r2000\fR will set \fB_MIPS_ARCH\fR
11763 to \fB\*(L"r2000\*(R"\fR and define the macro \fB_MIPS_ARCH_R2000\fR.
11764 .Sp
11765 Note that the \fB_MIPS_ARCH\fR macro uses the processor names given
11766 above.  In other words, it will have the full prefix and will not
11767 abbreviate \fB000\fR as \fBk\fR.  In the case of \fBfrom-abi\fR,
11768 the macro names the resolved architecture (either \fB\*(L"mips1\*(R"\fR or
11769 \&\fB\*(L"mips3\*(R"\fR).  It names the default architecture when no
11770 \&\fB\-march\fR option is given.
11771 .IP "\fB\-mtune=\fR\fIarch\fR" 4
11772 .IX Item "-mtune=arch"
11773 Optimize for \fIarch\fR.  Among other things, this option controls
11774 the way instructions are scheduled, and the perceived cost of arithmetic
11775 operations.  The list of \fIarch\fR values is the same as for
11776 \&\fB\-march\fR.
11777 .Sp
11778 When this option is not used, \s-1GCC\s0 will optimize for the processor
11779 specified by \fB\-march\fR.  By using \fB\-march\fR and
11780 \&\fB\-mtune\fR together, it is possible to generate code that will
11781 run on a family of processors, but optimize the code for one
11782 particular member of that family.
11783 .Sp
11784 \&\fB\-mtune\fR defines the macros \fB_MIPS_TUNE\fR and
11785 \&\fB_MIPS_TUNE_\fR\fIfoo\fR, which work in the same way as the
11786 \&\fB\-march\fR ones described above.
11787 .IP "\fB\-mips1\fR" 4
11788 .IX Item "-mips1"
11789 Equivalent to \fB\-march=mips1\fR.
11790 .IP "\fB\-mips2\fR" 4
11791 .IX Item "-mips2"
11792 Equivalent to \fB\-march=mips2\fR.
11793 .IP "\fB\-mips3\fR" 4
11794 .IX Item "-mips3"
11795 Equivalent to \fB\-march=mips3\fR.
11796 .IP "\fB\-mips4\fR" 4
11797 .IX Item "-mips4"
11798 Equivalent to \fB\-march=mips4\fR.
11799 .IP "\fB\-mips32\fR" 4
11800 .IX Item "-mips32"
11801 Equivalent to \fB\-march=mips32\fR.
11802 .IP "\fB\-mips32r2\fR" 4
11803 .IX Item "-mips32r2"
11804 Equivalent to \fB\-march=mips32r2\fR.
11805 .IP "\fB\-mips64\fR" 4
11806 .IX Item "-mips64"
11807 Equivalent to \fB\-march=mips64\fR.
11808 .IP "\fB\-mips64r2\fR" 4
11809 .IX Item "-mips64r2"
11810 Equivalent to \fB\-march=mips64r2\fR.
11811 .IP "\fB\-mips16\fR" 4
11812 .IX Item "-mips16"
11813 .PD 0
11814 .IP "\fB\-mno\-mips16\fR" 4
11815 .IX Item "-mno-mips16"
11816 .PD
11817 Generate (do not generate) \s-1MIPS16\s0 code.  If \s-1GCC\s0 is targetting a
11818 \&\s-1MIPS32\s0 or \s-1MIPS64\s0 architecture, it will make use of the MIPS16e \s-1ASE\s0.
11819 .Sp
11820 \&\s-1MIPS16\s0 code generation can also be controlled on a per-function basis
11821 by means of \f(CW\*(C`mips16\*(C'\fR and \f(CW\*(C`nomips16\*(C'\fR attributes.  
11822 .IP "\fB\-mflip\-mips16\fR" 4
11823 .IX Item "-mflip-mips16"
11824 Generate \s-1MIPS16\s0 code on alternating functions.  This option is provided
11825 for regression testing of mixed MIPS16/non\-MIPS16 code generation, and is
11826 not intended for ordinary use in compiling user code.
11827 .IP "\fB\-minterlink\-mips16\fR" 4
11828 .IX Item "-minterlink-mips16"
11829 .PD 0
11830 .IP "\fB\-mno\-interlink\-mips16\fR" 4
11831 .IX Item "-mno-interlink-mips16"
11832 .PD
11833 Require (do not require) that non\-MIPS16 code be link-compatible with
11834 \&\s-1MIPS16\s0 code.
11835 .Sp
11836 For example, non\-MIPS16 code cannot jump directly to \s-1MIPS16\s0 code;
11837 it must either use a call or an indirect jump.  \fB\-minterlink\-mips16\fR
11838 therefore disables direct jumps unless \s-1GCC\s0 knows that the target of the
11839 jump is not \s-1MIPS16\s0.
11840 .IP "\fB\-mabi=32\fR" 4
11841 .IX Item "-mabi=32"
11842 .PD 0
11843 .IP "\fB\-mabi=o64\fR" 4
11844 .IX Item "-mabi=o64"
11845 .IP "\fB\-mabi=n32\fR" 4
11846 .IX Item "-mabi=n32"
11847 .IP "\fB\-mabi=64\fR" 4
11848 .IX Item "-mabi=64"
11849 .IP "\fB\-mabi=eabi\fR" 4
11850 .IX Item "-mabi=eabi"
11851 .PD
11852 Generate code for the given \s-1ABI\s0.
11853 .Sp
11854 Note that the \s-1EABI\s0 has a 32\-bit and a 64\-bit variant.  \s-1GCC\s0 normally
11855 generates 64\-bit code when you select a 64\-bit architecture, but you
11856 can use \fB\-mgp32\fR to get 32\-bit code instead.
11857 .Sp
11858 For information about the O64 \s-1ABI\s0, see
11859 <\fBhttp://gcc.gnu.org/projects/mipso64\-abi.html\fR>.
11860 .Sp
11861 \&\s-1GCC\s0 supports a variant of the o32 \s-1ABI\s0 in which floating-point registers
11862 are 64 rather than 32 bits wide.  You can select this combination with
11863 \&\fB\-mabi=32\fR \fB\-mfp64\fR.  This \s-1ABI\s0 relies on the \fBmthc1\fR
11864 and \fBmfhc1\fR instructions and is therefore only supported for
11865 \&\s-1MIPS32R2\s0 processors.
11866 .Sp
11867 The register assignments for arguments and return values remain the
11868 same, but each scalar value is passed in a single 64\-bit register
11869 rather than a pair of 32\-bit registers.  For example, scalar
11870 floating-point values are returned in \fB$f0\fR only, not a
11871 \&\fB$f0\fR/\fB$f1\fR pair.  The set of call-saved registers also
11872 remains the same, but all 64 bits are saved.
11873 .IP "\fB\-mabicalls\fR" 4
11874 .IX Item "-mabicalls"
11875 .PD 0
11876 .IP "\fB\-mno\-abicalls\fR" 4
11877 .IX Item "-mno-abicalls"
11878 .PD
11879 Generate (do not generate) code that is suitable for SVR4\-style
11880 dynamic objects.  \fB\-mabicalls\fR is the default for SVR4\-based
11881 systems.
11882 .IP "\fB\-mshared\fR" 4
11883 .IX Item "-mshared"
11884 .PD 0
11885 .IP "\fB\-mno\-shared\fR" 4
11886 .IX Item "-mno-shared"
11887 .PD
11888 Generate (do not generate) code that is fully position\-independent,
11889 and that can therefore be linked into shared libraries.  This option
11890 only affects \fB\-mabicalls\fR.
11891 .Sp
11892 All \fB\-mabicalls\fR code has traditionally been position\-independent,
11893 regardless of options like \fB\-fPIC\fR and \fB\-fpic\fR.  However,
11894 as an extension, the \s-1GNU\s0 toolchain allows executables to use absolute
11895 accesses for locally-binding symbols.  It can also use shorter \s-1GP\s0
11896 initialization sequences and generate direct calls to locally-defined
11897 functions.  This mode is selected by \fB\-mno\-shared\fR.
11898 .Sp
11899 \&\fB\-mno\-shared\fR depends on binutils 2.16 or higher and generates
11900 objects that can only be linked by the \s-1GNU\s0 linker.  However, the option
11901 does not affect the \s-1ABI\s0 of the final executable; it only affects the \s-1ABI\s0
11902 of relocatable objects.  Using \fB\-mno\-shared\fR will generally make
11903 executables both smaller and quicker.
11904 .Sp
11905 \&\fB\-mshared\fR is the default.
11906 .IP "\fB\-mplt\fR" 4
11907 .IX Item "-mplt"
11908 .PD 0
11909 .IP "\fB\-mno\-plt\fR" 4
11910 .IX Item "-mno-plt"
11911 .PD
11912 Assume (do not assume) that the static and dynamic linkers
11913 support PLTs and copy relocations.  This option only affects
11914 \&\fB\-mno\-shared \-mabicalls\fR.  For the n64 \s-1ABI\s0, this option
11915 has no effect without \fB\-msym32\fR.
11916 .Sp
11917 You can make \fB\-mplt\fR the default by configuring
11918 \&\s-1GCC\s0 with \fB\-\-with\-mips\-plt\fR.  The default is
11919 \&\fB\-mno\-plt\fR otherwise.
11920 .IP "\fB\-mxgot\fR" 4
11921 .IX Item "-mxgot"
11922 .PD 0
11923 .IP "\fB\-mno\-xgot\fR" 4
11924 .IX Item "-mno-xgot"
11925 .PD
11926 Lift (do not lift) the usual restrictions on the size of the global
11927 offset table.
11928 .Sp
11929 \&\s-1GCC\s0 normally uses a single instruction to load values from the \s-1GOT\s0.
11930 While this is relatively efficient, it will only work if the \s-1GOT\s0
11931 is smaller than about 64k.  Anything larger will cause the linker
11932 to report an error such as:
11933 .Sp
11934 .Vb 1
11935 \&        relocation truncated to fit: R_MIPS_GOT16 foobar
11936 .Ve
11937 .Sp
11938 If this happens, you should recompile your code with \fB\-mxgot\fR.
11939 It should then work with very large GOTs, although it will also be
11940 less efficient, since it will take three instructions to fetch the
11941 value of a global symbol.
11942 .Sp
11943 Note that some linkers can create multiple GOTs.  If you have such a
11944 linker, you should only need to use \fB\-mxgot\fR when a single object
11945 file accesses more than 64k's worth of \s-1GOT\s0 entries.  Very few do.
11946 .Sp
11947 These options have no effect unless \s-1GCC\s0 is generating position
11948 independent code.
11949 .IP "\fB\-mgp32\fR" 4
11950 .IX Item "-mgp32"
11951 Assume that general-purpose registers are 32 bits wide.
11952 .IP "\fB\-mgp64\fR" 4
11953 .IX Item "-mgp64"
11954 Assume that general-purpose registers are 64 bits wide.
11955 .IP "\fB\-mfp32\fR" 4
11956 .IX Item "-mfp32"
11957 Assume that floating-point registers are 32 bits wide.
11958 .IP "\fB\-mfp64\fR" 4
11959 .IX Item "-mfp64"
11960 Assume that floating-point registers are 64 bits wide.
11961 .IP "\fB\-mhard\-float\fR" 4
11962 .IX Item "-mhard-float"
11963 Use floating-point coprocessor instructions.
11964 .IP "\fB\-msoft\-float\fR" 4
11965 .IX Item "-msoft-float"
11966 Do not use floating-point coprocessor instructions.  Implement
11967 floating-point calculations using library calls instead.
11968 .IP "\fB\-msingle\-float\fR" 4
11969 .IX Item "-msingle-float"
11970 Assume that the floating-point coprocessor only supports single-precision
11971 operations.
11972 .IP "\fB\-mdouble\-float\fR" 4
11973 .IX Item "-mdouble-float"
11974 Assume that the floating-point coprocessor supports double-precision
11975 operations.  This is the default.
11976 .IP "\fB\-mllsc\fR" 4
11977 .IX Item "-mllsc"
11978 .PD 0
11979 .IP "\fB\-mno\-llsc\fR" 4
11980 .IX Item "-mno-llsc"
11981 .PD
11982 Use (do not use) \fBll\fR, \fBsc\fR, and \fBsync\fR instructions to
11983 implement atomic memory built-in functions.  When neither option is
11984 specified, \s-1GCC\s0 will use the instructions if the target architecture
11985 supports them.
11986 .Sp
11987 \&\fB\-mllsc\fR is useful if the runtime environment can emulate the
11988 instructions and \fB\-mno\-llsc\fR can be useful when compiling for
11989 nonstandard ISAs.  You can make either option the default by
11990 configuring \s-1GCC\s0 with \fB\-\-with\-llsc\fR and \fB\-\-without\-llsc\fR
11991 respectively.  \fB\-\-with\-llsc\fR is the default for some
11992 configurations; see the installation documentation for details.
11993 .IP "\fB\-mdsp\fR" 4
11994 .IX Item "-mdsp"
11995 .PD 0
11996 .IP "\fB\-mno\-dsp\fR" 4
11997 .IX Item "-mno-dsp"
11998 .PD
11999 Use (do not use) revision 1 of the \s-1MIPS\s0 \s-1DSP\s0 \s-1ASE\s0.
12000   This option defines the
12001 preprocessor macro \fB_\|_mips_dsp\fR.  It also defines
12002 \&\fB_\|_mips_dsp_rev\fR to 1.
12003 .IP "\fB\-mdspr2\fR" 4
12004 .IX Item "-mdspr2"
12005 .PD 0
12006 .IP "\fB\-mno\-dspr2\fR" 4
12007 .IX Item "-mno-dspr2"
12008 .PD
12009 Use (do not use) revision 2 of the \s-1MIPS\s0 \s-1DSP\s0 \s-1ASE\s0.
12010   This option defines the
12011 preprocessor macros \fB_\|_mips_dsp\fR and \fB_\|_mips_dspr2\fR.
12012 It also defines \fB_\|_mips_dsp_rev\fR to 2.
12013 .IP "\fB\-msmartmips\fR" 4
12014 .IX Item "-msmartmips"
12015 .PD 0
12016 .IP "\fB\-mno\-smartmips\fR" 4
12017 .IX Item "-mno-smartmips"
12018 .PD
12019 Use (do not use) the \s-1MIPS\s0 SmartMIPS \s-1ASE\s0.
12020 .IP "\fB\-mpaired\-single\fR" 4
12021 .IX Item "-mpaired-single"
12022 .PD 0
12023 .IP "\fB\-mno\-paired\-single\fR" 4
12024 .IX Item "-mno-paired-single"
12025 .PD
12026 Use (do not use) paired-single floating-point instructions.
12027   This option requires
12028 hardware floating-point support to be enabled.
12029 .IP "\fB\-mdmx\fR" 4
12030 .IX Item "-mdmx"
12031 .PD 0
12032 .IP "\fB\-mno\-mdmx\fR" 4
12033 .IX Item "-mno-mdmx"
12034 .PD
12035 Use (do not use) \s-1MIPS\s0 Digital Media Extension instructions.
12036 This option can only be used when generating 64\-bit code and requires
12037 hardware floating-point support to be enabled.
12038 .IP "\fB\-mips3d\fR" 4
12039 .IX Item "-mips3d"
12040 .PD 0
12041 .IP "\fB\-mno\-mips3d\fR" 4
12042 .IX Item "-mno-mips3d"
12043 .PD
12044 Use (do not use) the \s-1MIPS\-3D\s0 \s-1ASE\s0.  
12045 The option \fB\-mips3d\fR implies \fB\-mpaired\-single\fR.
12046 .IP "\fB\-mmt\fR" 4
12047 .IX Item "-mmt"
12048 .PD 0
12049 .IP "\fB\-mno\-mt\fR" 4
12050 .IX Item "-mno-mt"
12051 .PD
12052 Use (do not use) \s-1MT\s0 Multithreading instructions.
12053 .IP "\fB\-mlong64\fR" 4
12054 .IX Item "-mlong64"
12055 Force \f(CW\*(C`long\*(C'\fR types to be 64 bits wide.  See \fB\-mlong32\fR for
12056 an explanation of the default and the way that the pointer size is
12057 determined.
12058 .IP "\fB\-mlong32\fR" 4
12059 .IX Item "-mlong32"
12060 Force \f(CW\*(C`long\*(C'\fR, \f(CW\*(C`int\*(C'\fR, and pointer types to be 32 bits wide.
12061 .Sp
12062 The default size of \f(CW\*(C`int\*(C'\fRs, \f(CW\*(C`long\*(C'\fRs and pointers depends on
12063 the \s-1ABI\s0.  All the supported ABIs use 32\-bit \f(CW\*(C`int\*(C'\fRs.  The n64 \s-1ABI\s0
12064 uses 64\-bit \f(CW\*(C`long\*(C'\fRs, as does the 64\-bit \s-1EABI\s0; the others use
12065 32\-bit \f(CW\*(C`long\*(C'\fRs.  Pointers are the same size as \f(CW\*(C`long\*(C'\fRs,
12066 or the same size as integer registers, whichever is smaller.
12067 .IP "\fB\-msym32\fR" 4
12068 .IX Item "-msym32"
12069 .PD 0
12070 .IP "\fB\-mno\-sym32\fR" 4
12071 .IX Item "-mno-sym32"
12072 .PD
12073 Assume (do not assume) that all symbols have 32\-bit values, regardless
12074 of the selected \s-1ABI\s0.  This option is useful in combination with
12075 \&\fB\-mabi=64\fR and \fB\-mno\-abicalls\fR because it allows \s-1GCC\s0
12076 to generate shorter and faster references to symbolic addresses.
12077 .IP "\fB\-G\fR \fInum\fR" 4
12078 .IX Item "-G num"
12079 Put definitions of externally-visible data in a small data section
12080 if that data is no bigger than \fInum\fR bytes.  \s-1GCC\s0 can then access
12081 the data more efficiently; see \fB\-mgpopt\fR for details.
12082 .Sp
12083 The default \fB\-G\fR option depends on the configuration.
12084 .IP "\fB\-mlocal\-sdata\fR" 4
12085 .IX Item "-mlocal-sdata"
12086 .PD 0
12087 .IP "\fB\-mno\-local\-sdata\fR" 4
12088 .IX Item "-mno-local-sdata"
12089 .PD
12090 Extend (do not extend) the \fB\-G\fR behavior to local data too,
12091 such as to static variables in C.  \fB\-mlocal\-sdata\fR is the
12092 default for all configurations.
12093 .Sp
12094 If the linker complains that an application is using too much small data,
12095 you might want to try rebuilding the less performance-critical parts with
12096 \&\fB\-mno\-local\-sdata\fR.  You might also want to build large
12097 libraries with \fB\-mno\-local\-sdata\fR, so that the libraries leave
12098 more room for the main program.
12099 .IP "\fB\-mextern\-sdata\fR" 4
12100 .IX Item "-mextern-sdata"
12101 .PD 0
12102 .IP "\fB\-mno\-extern\-sdata\fR" 4
12103 .IX Item "-mno-extern-sdata"
12104 .PD
12105 Assume (do not assume) that externally-defined data will be in
12106 a small data section if that data is within the \fB\-G\fR limit.
12107 \&\fB\-mextern\-sdata\fR is the default for all configurations.
12108 .Sp
12109 If you compile a module \fIMod\fR with \fB\-mextern\-sdata\fR \fB\-G\fR
12110 \&\fInum\fR \fB\-mgpopt\fR, and \fIMod\fR references a variable \fIVar\fR
12111 that is no bigger than \fInum\fR bytes, you must make sure that \fIVar\fR
12112 is placed in a small data section.  If \fIVar\fR is defined by another
12113 module, you must either compile that module with a high-enough
12114 \&\fB\-G\fR setting or attach a \f(CW\*(C`section\*(C'\fR attribute to \fIVar\fR's
12115 definition.  If \fIVar\fR is common, you must link the application
12116 with a high-enough \fB\-G\fR setting.
12117 .Sp
12118 The easiest way of satisfying these restrictions is to compile
12119 and link every module with the same \fB\-G\fR option.  However,
12120 you may wish to build a library that supports several different
12121 small data limits.  You can do this by compiling the library with
12122 the highest supported \fB\-G\fR setting and additionally using
12123 \&\fB\-mno\-extern\-sdata\fR to stop the library from making assumptions
12124 about externally-defined data.
12125 .IP "\fB\-mgpopt\fR" 4
12126 .IX Item "-mgpopt"
12127 .PD 0
12128 .IP "\fB\-mno\-gpopt\fR" 4
12129 .IX Item "-mno-gpopt"
12130 .PD
12131 Use (do not use) GP-relative accesses for symbols that are known to be
12132 in a small data section; see \fB\-G\fR, \fB\-mlocal\-sdata\fR and
12133 \&\fB\-mextern\-sdata\fR.  \fB\-mgpopt\fR is the default for all
12134 configurations.
12135 .Sp
12136 \&\fB\-mno\-gpopt\fR is useful for cases where the \f(CW$gp\fR register
12137 might not hold the value of \f(CW\*(C`_gp\*(C'\fR.  For example, if the code is
12138 part of a library that might be used in a boot monitor, programs that
12139 call boot monitor routines will pass an unknown value in \f(CW$gp\fR.
12140 (In such situations, the boot monitor itself would usually be compiled
12141 with \fB\-G0\fR.)
12142 .Sp
12143 \&\fB\-mno\-gpopt\fR implies \fB\-mno\-local\-sdata\fR and
12144 \&\fB\-mno\-extern\-sdata\fR.
12145 .IP "\fB\-membedded\-data\fR" 4
12146 .IX Item "-membedded-data"
12147 .PD 0
12148 .IP "\fB\-mno\-embedded\-data\fR" 4
12149 .IX Item "-mno-embedded-data"
12150 .PD
12151 Allocate variables to the read-only data section first if possible, then
12152 next in the small data section if possible, otherwise in data.  This gives
12153 slightly slower code than the default, but reduces the amount of \s-1RAM\s0 required
12154 when executing, and thus may be preferred for some embedded systems.
12155 .IP "\fB\-muninit\-const\-in\-rodata\fR" 4
12156 .IX Item "-muninit-const-in-rodata"
12157 .PD 0
12158 .IP "\fB\-mno\-uninit\-const\-in\-rodata\fR" 4
12159 .IX Item "-mno-uninit-const-in-rodata"
12160 .PD
12161 Put uninitialized \f(CW\*(C`const\*(C'\fR variables in the read-only data section.
12162 This option is only meaningful in conjunction with \fB\-membedded\-data\fR.
12163 .IP "\fB\-mcode\-readable=\fR\fIsetting\fR" 4
12164 .IX Item "-mcode-readable=setting"
12165 Specify whether \s-1GCC\s0 may generate code that reads from executable sections.
12166 There are three possible settings:
12167 .RS 4
12168 .IP "\fB\-mcode\-readable=yes\fR" 4
12169 .IX Item "-mcode-readable=yes"
12170 Instructions may freely access executable sections.  This is the
12171 default setting.
12172 .IP "\fB\-mcode\-readable=pcrel\fR" 4
12173 .IX Item "-mcode-readable=pcrel"
12174 \&\s-1MIPS16\s0 PC-relative load instructions can access executable sections,
12175 but other instructions must not do so.  This option is useful on 4KSc
12176 and 4KSd processors when the code TLBs have the Read Inhibit bit set.
12177 It is also useful on processors that can be configured to have a dual
12178 instruction/data \s-1SRAM\s0 interface and that, like the M4K, automatically
12179 redirect PC-relative loads to the instruction \s-1RAM\s0.
12180 .IP "\fB\-mcode\-readable=no\fR" 4
12181 .IX Item "-mcode-readable=no"
12182 Instructions must not access executable sections.  This option can be
12183 useful on targets that are configured to have a dual instruction/data
12184 \&\s-1SRAM\s0 interface but that (unlike the M4K) do not automatically redirect
12185 PC-relative loads to the instruction \s-1RAM\s0.
12186 .RE
12187 .RS 4
12188 .RE
12189 .IP "\fB\-msplit\-addresses\fR" 4
12190 .IX Item "-msplit-addresses"
12191 .PD 0
12192 .IP "\fB\-mno\-split\-addresses\fR" 4
12193 .IX Item "-mno-split-addresses"
12194 .PD
12195 Enable (disable) use of the \f(CW\*(C`%hi()\*(C'\fR and \f(CW\*(C`%lo()\*(C'\fR assembler
12196 relocation operators.  This option has been superseded by
12197 \&\fB\-mexplicit\-relocs\fR but is retained for backwards compatibility.
12198 .IP "\fB\-mexplicit\-relocs\fR" 4
12199 .IX Item "-mexplicit-relocs"
12200 .PD 0
12201 .IP "\fB\-mno\-explicit\-relocs\fR" 4
12202 .IX Item "-mno-explicit-relocs"
12203 .PD
12204 Use (do not use) assembler relocation operators when dealing with symbolic
12205 addresses.  The alternative, selected by \fB\-mno\-explicit\-relocs\fR,
12206 is to use assembler macros instead.
12207 .Sp
12208 \&\fB\-mexplicit\-relocs\fR is the default if \s-1GCC\s0 was configured
12209 to use an assembler that supports relocation operators.
12210 .IP "\fB\-mcheck\-zero\-division\fR" 4
12211 .IX Item "-mcheck-zero-division"
12212 .PD 0
12213 .IP "\fB\-mno\-check\-zero\-division\fR" 4
12214 .IX Item "-mno-check-zero-division"
12215 .PD
12216 Trap (do not trap) on integer division by zero.
12217 .Sp
12218 The default is \fB\-mcheck\-zero\-division\fR.
12219 .IP "\fB\-mdivide\-traps\fR" 4
12220 .IX Item "-mdivide-traps"
12221 .PD 0
12222 .IP "\fB\-mdivide\-breaks\fR" 4
12223 .IX Item "-mdivide-breaks"
12224 .PD
12225 \&\s-1MIPS\s0 systems check for division by zero by generating either a
12226 conditional trap or a break instruction.  Using traps results in
12227 smaller code, but is only supported on \s-1MIPS\s0 \s-1II\s0 and later.  Also, some
12228 versions of the Linux kernel have a bug that prevents trap from
12229 generating the proper signal (\f(CW\*(C`SIGFPE\*(C'\fR).  Use \fB\-mdivide\-traps\fR to
12230 allow conditional traps on architectures that support them and
12231 \&\fB\-mdivide\-breaks\fR to force the use of breaks.
12232 .Sp
12233 The default is usually \fB\-mdivide\-traps\fR, but this can be
12234 overridden at configure time using \fB\-\-with\-divide=breaks\fR.
12235 Divide-by-zero checks can be completely disabled using
12236 \&\fB\-mno\-check\-zero\-division\fR.
12237 .IP "\fB\-mmemcpy\fR" 4
12238 .IX Item "-mmemcpy"
12239 .PD 0
12240 .IP "\fB\-mno\-memcpy\fR" 4
12241 .IX Item "-mno-memcpy"
12242 .PD
12243 Force (do not force) the use of \f(CW\*(C`memcpy()\*(C'\fR for non-trivial block
12244 moves.  The default is \fB\-mno\-memcpy\fR, which allows \s-1GCC\s0 to inline
12245 most constant-sized copies.
12246 .IP "\fB\-mlong\-calls\fR" 4
12247 .IX Item "-mlong-calls"
12248 .PD 0
12249 .IP "\fB\-mno\-long\-calls\fR" 4
12250 .IX Item "-mno-long-calls"
12251 .PD
12252 Disable (do not disable) use of the \f(CW\*(C`jal\*(C'\fR instruction.  Calling
12253 functions using \f(CW\*(C`jal\*(C'\fR is more efficient but requires the caller
12254 and callee to be in the same 256 megabyte segment.
12255 .Sp
12256 This option has no effect on abicalls code.  The default is
12257 \&\fB\-mno\-long\-calls\fR.
12258 .IP "\fB\-mmad\fR" 4
12259 .IX Item "-mmad"
12260 .PD 0
12261 .IP "\fB\-mno\-mad\fR" 4
12262 .IX Item "-mno-mad"
12263 .PD
12264 Enable (disable) use of the \f(CW\*(C`mad\*(C'\fR, \f(CW\*(C`madu\*(C'\fR and \f(CW\*(C`mul\*(C'\fR
12265 instructions, as provided by the R4650 \s-1ISA\s0.
12266 .IP "\fB\-mfused\-madd\fR" 4
12267 .IX Item "-mfused-madd"
12268 .PD 0
12269 .IP "\fB\-mno\-fused\-madd\fR" 4
12270 .IX Item "-mno-fused-madd"
12271 .PD
12272 Enable (disable) use of the floating point multiply-accumulate
12273 instructions, when they are available.  The default is
12274 \&\fB\-mfused\-madd\fR.
12275 .Sp
12276 When multiply-accumulate instructions are used, the intermediate
12277 product is calculated to infinite precision and is not subject to
12278 the \s-1FCSR\s0 Flush to Zero bit.  This may be undesirable in some
12279 circumstances.
12280 .IP "\fB\-nocpp\fR" 4
12281 .IX Item "-nocpp"
12282 Tell the \s-1MIPS\s0 assembler to not run its preprocessor over user
12283 assembler files (with a \fB.s\fR suffix) when assembling them.
12284 .IP "\fB\-mfix\-r4000\fR" 4
12285 .IX Item "-mfix-r4000"
12286 .PD 0
12287 .IP "\fB\-mno\-fix\-r4000\fR" 4
12288 .IX Item "-mno-fix-r4000"
12289 .PD
12290 Work around certain R4000 \s-1CPU\s0 errata:
12291 .RS 4
12292 .IP "\-" 4
12293 A double-word or a variable shift may give an incorrect result if executed
12294 immediately after starting an integer division.
12295 .IP "\-" 4
12296 A double-word or a variable shift may give an incorrect result if executed
12297 while an integer multiplication is in progress.
12298 .IP "\-" 4
12299 An integer division may give an incorrect result if started in a delay slot
12300 of a taken branch or a jump.
12301 .RE
12302 .RS 4
12303 .RE
12304 .IP "\fB\-mfix\-r4400\fR" 4
12305 .IX Item "-mfix-r4400"
12306 .PD 0
12307 .IP "\fB\-mno\-fix\-r4400\fR" 4
12308 .IX Item "-mno-fix-r4400"
12309 .PD
12310 Work around certain R4400 \s-1CPU\s0 errata:
12311 .RS 4
12312 .IP "\-" 4
12313 A double-word or a variable shift may give an incorrect result if executed
12314 immediately after starting an integer division.
12315 .RE
12316 .RS 4
12317 .RE
12318 .IP "\fB\-mfix\-r10000\fR" 4
12319 .IX Item "-mfix-r10000"
12320 .PD 0
12321 .IP "\fB\-mno\-fix\-r10000\fR" 4
12322 .IX Item "-mno-fix-r10000"
12323 .PD
12324 Work around certain R10000 errata:
12325 .RS 4
12326 .IP "\-" 4
12327 \&\f(CW\*(C`ll\*(C'\fR/\f(CW\*(C`sc\*(C'\fR sequences may not behave atomically on revisions
12328 prior to 3.0.  They may deadlock on revisions 2.6 and earlier.
12329 .RE
12330 .RS 4
12331 .Sp
12332 This option can only be used if the target architecture supports
12333 branch-likely instructions.  \fB\-mfix\-r10000\fR is the default when
12334 \&\fB\-march=r10000\fR is used; \fB\-mno\-fix\-r10000\fR is the default
12335 otherwise.
12336 .RE
12337 .IP "\fB\-mfix\-vr4120\fR" 4
12338 .IX Item "-mfix-vr4120"
12339 .PD 0
12340 .IP "\fB\-mno\-fix\-vr4120\fR" 4
12341 .IX Item "-mno-fix-vr4120"
12342 .PD
12343 Work around certain \s-1VR4120\s0 errata:
12344 .RS 4
12345 .IP "\-" 4
12346 \&\f(CW\*(C`dmultu\*(C'\fR does not always produce the correct result.
12347 .IP "\-" 4
12348 \&\f(CW\*(C`div\*(C'\fR and \f(CW\*(C`ddiv\*(C'\fR do not always produce the correct result if one
12349 of the operands is negative.
12350 .RE
12351 .RS 4
12352 .Sp
12353 The workarounds for the division errata rely on special functions in
12354 \&\fIlibgcc.a\fR.  At present, these functions are only provided by
12355 the \f(CW\*(C`mips64vr*\-elf\*(C'\fR configurations.
12356 .Sp
12357 Other \s-1VR4120\s0 errata require a nop to be inserted between certain pairs of
12358 instructions.  These errata are handled by the assembler, not by \s-1GCC\s0 itself.
12359 .RE
12360 .IP "\fB\-mfix\-vr4130\fR" 4
12361 .IX Item "-mfix-vr4130"
12362 Work around the \s-1VR4130\s0 \f(CW\*(C`mflo\*(C'\fR/\f(CW\*(C`mfhi\*(C'\fR errata.  The
12363 workarounds are implemented by the assembler rather than by \s-1GCC\s0,
12364 although \s-1GCC\s0 will avoid using \f(CW\*(C`mflo\*(C'\fR and \f(CW\*(C`mfhi\*(C'\fR if the
12365 \&\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
12366 instructions are available instead.
12367 .IP "\fB\-mfix\-sb1\fR" 4
12368 .IX Item "-mfix-sb1"
12369 .PD 0
12370 .IP "\fB\-mno\-fix\-sb1\fR" 4
12371 .IX Item "-mno-fix-sb1"
12372 .PD
12373 Work around certain \s-1SB\-1\s0 \s-1CPU\s0 core errata.
12374 (This flag currently works around the \s-1SB\-1\s0 revision 2
12375 \&\*(L"F1\*(R" and \*(L"F2\*(R" floating point errata.)
12376 .IP "\fB\-mr10k\-cache\-barrier=\fR\fIsetting\fR" 4
12377 .IX Item "-mr10k-cache-barrier=setting"
12378 Specify whether \s-1GCC\s0 should insert cache barriers to avoid the
12379 side-effects of speculation on R10K processors.
12380 .Sp
12381 In common with many processors, the R10K tries to predict the outcome
12382 of a conditional branch and speculatively executes instructions from
12383 the \*(L"taken\*(R" branch.  It later aborts these instructions if the
12384 predicted outcome was wrong.  However, on the R10K, even aborted
12385 instructions can have side effects.
12386 .Sp
12387 This problem only affects kernel stores and, depending on the system,
12388 kernel loads.  As an example, a speculatively-executed store may load
12389 the target memory into cache and mark the cache line as dirty, even if
12390 the store itself is later aborted.  If a \s-1DMA\s0 operation writes to the
12391 same area of memory before the \*(L"dirty\*(R" line is flushed, the cached
12392 data will overwrite the DMA-ed data.  See the R10K processor manual
12393 for a full description, including other potential problems.
12394 .Sp
12395 One workaround is to insert cache barrier instructions before every memory
12396 access that might be speculatively executed and that might have side
12397 effects even if aborted.  \fB\-mr10k\-cache\-barrier=\fR\fIsetting\fR
12398 controls \s-1GCC\s0's implementation of this workaround.  It assumes that
12399 aborted accesses to any byte in the following regions will not have
12400 side effects:
12401 .RS 4
12402 .IP "1." 4
12403 the memory occupied by the current function's stack frame;
12404 .IP "2." 4
12405 the memory occupied by an incoming stack argument;
12406 .IP "3." 4
12407 the memory occupied by an object with a link-time-constant address.
12408 .RE
12409 .RS 4
12410 .Sp
12411 It is the kernel's responsibility to ensure that speculative
12412 accesses to these regions are indeed safe.
12413 .Sp
12414 If the input program contains a function declaration such as:
12415 .Sp
12416 .Vb 1
12417 \&        void foo (void);
12418 .Ve
12419 .Sp
12420 then the implementation of \f(CW\*(C`foo\*(C'\fR must allow \f(CW\*(C`j foo\*(C'\fR and
12421 \&\f(CW\*(C`jal foo\*(C'\fR to be executed speculatively.  \s-1GCC\s0 honors this
12422 restriction for functions it compiles itself.  It expects non-GCC
12423 functions (such as hand-written assembly code) to do the same.
12424 .Sp
12425 The option has three forms:
12426 .IP "\fB\-mr10k\-cache\-barrier=load\-store\fR" 4
12427 .IX Item "-mr10k-cache-barrier=load-store"
12428 Insert a cache barrier before a load or store that might be
12429 speculatively executed and that might have side effects even
12430 if aborted.
12431 .IP "\fB\-mr10k\-cache\-barrier=store\fR" 4
12432 .IX Item "-mr10k-cache-barrier=store"
12433 Insert a cache barrier before a store that might be speculatively
12434 executed and that might have side effects even if aborted.
12435 .IP "\fB\-mr10k\-cache\-barrier=none\fR" 4
12436 .IX Item "-mr10k-cache-barrier=none"
12437 Disable the insertion of cache barriers.  This is the default setting.
12438 .RE
12439 .RS 4
12440 .RE
12441 .IP "\fB\-mflush\-func=\fR\fIfunc\fR" 4
12442 .IX Item "-mflush-func=func"
12443 .PD 0
12444 .IP "\fB\-mno\-flush\-func\fR" 4
12445 .IX Item "-mno-flush-func"
12446 .PD
12447 Specifies the function to call to flush the I and D caches, or to not
12448 call any such function.  If called, the function must take the same
12449 arguments as the common \f(CW\*(C`_flush_func()\*(C'\fR, that is, the address of the
12450 memory range for which the cache is being flushed, the size of the
12451 memory range, and the number 3 (to flush both caches).  The default
12452 depends on the target \s-1GCC\s0 was configured for, but commonly is either
12453 \&\fB_flush_func\fR or \fB_\|_cpu_flush\fR.
12454 .IP "\fBmbranch\-cost=\fR\fInum\fR" 4
12455 .IX Item "mbranch-cost=num"
12456 Set the cost of branches to roughly \fInum\fR \*(L"simple\*(R" instructions.
12457 This cost is only a heuristic and is not guaranteed to produce
12458 consistent results across releases.  A zero cost redundantly selects
12459 the default, which is based on the \fB\-mtune\fR setting.
12460 .IP "\fB\-mbranch\-likely\fR" 4
12461 .IX Item "-mbranch-likely"
12462 .PD 0
12463 .IP "\fB\-mno\-branch\-likely\fR" 4
12464 .IX Item "-mno-branch-likely"
12465 .PD
12466 Enable or disable use of Branch Likely instructions, regardless of the
12467 default for the selected architecture.  By default, Branch Likely
12468 instructions may be generated if they are supported by the selected
12469 architecture.  An exception is for the \s-1MIPS32\s0 and \s-1MIPS64\s0 architectures
12470 and processors which implement those architectures; for those, Branch
12471 Likely instructions will not be generated by default because the \s-1MIPS32\s0
12472 and \s-1MIPS64\s0 architectures specifically deprecate their use.
12473 .IP "\fB\-mfp\-exceptions\fR" 4
12474 .IX Item "-mfp-exceptions"
12475 .PD 0
12476 .IP "\fB\-mno\-fp\-exceptions\fR" 4
12477 .IX Item "-mno-fp-exceptions"
12478 .PD
12479 Specifies whether \s-1FP\s0 exceptions are enabled.  This affects how we schedule
12480 \&\s-1FP\s0 instructions for some processors.  The default is that \s-1FP\s0 exceptions are
12481 enabled.
12482 .Sp
12483 For instance, on the \s-1SB\-1\s0, if \s-1FP\s0 exceptions are disabled, and we are emitting
12484 64\-bit code, then we can use both \s-1FP\s0 pipes.  Otherwise, we can only use one
12485 \&\s-1FP\s0 pipe.
12486 .IP "\fB\-mvr4130\-align\fR" 4
12487 .IX Item "-mvr4130-align"
12488 .PD 0
12489 .IP "\fB\-mno\-vr4130\-align\fR" 4
12490 .IX Item "-mno-vr4130-align"
12491 .PD
12492 The \s-1VR4130\s0 pipeline is two-way superscalar, but can only issue two
12493 instructions together if the first one is 8\-byte aligned.  When this
12494 option is enabled, \s-1GCC\s0 will align pairs of instructions that it
12495 thinks should execute in parallel.
12496 .Sp
12497 This option only has an effect when optimizing for the \s-1VR4130\s0.
12498 It normally makes code faster, but at the expense of making it bigger.
12499 It is enabled by default at optimization level \fB\-O3\fR.
12500 .PP
12501 \fI\s-1MMIX\s0 Options\fR
12502 .IX Subsection "MMIX Options"
12503 .PP
12504 These options are defined for the \s-1MMIX:\s0
12505 .IP "\fB\-mlibfuncs\fR" 4
12506 .IX Item "-mlibfuncs"
12507 .PD 0
12508 .IP "\fB\-mno\-libfuncs\fR" 4
12509 .IX Item "-mno-libfuncs"
12510 .PD
12511 Specify that intrinsic library functions are being compiled, passing all
12512 values in registers, no matter the size.
12513 .IP "\fB\-mepsilon\fR" 4
12514 .IX Item "-mepsilon"
12515 .PD 0
12516 .IP "\fB\-mno\-epsilon\fR" 4
12517 .IX Item "-mno-epsilon"
12518 .PD
12519 Generate floating-point comparison instructions that compare with respect
12520 to the \f(CW\*(C`rE\*(C'\fR epsilon register.
12521 .IP "\fB\-mabi=mmixware\fR" 4
12522 .IX Item "-mabi=mmixware"
12523 .PD 0
12524 .IP "\fB\-mabi=gnu\fR" 4
12525 .IX Item "-mabi=gnu"
12526 .PD
12527 Generate code that passes function parameters and return values that (in
12528 the called function) are seen as registers \f(CW$0\fR and up, as opposed to
12529 the \s-1GNU\s0 \s-1ABI\s0 which uses global registers \f(CW$231\fR and up.
12530 .IP "\fB\-mzero\-extend\fR" 4
12531 .IX Item "-mzero-extend"
12532 .PD 0
12533 .IP "\fB\-mno\-zero\-extend\fR" 4
12534 .IX Item "-mno-zero-extend"
12535 .PD
12536 When reading data from memory in sizes shorter than 64 bits, use (do not
12537 use) zero-extending load instructions by default, rather than
12538 sign-extending ones.
12539 .IP "\fB\-mknuthdiv\fR" 4
12540 .IX Item "-mknuthdiv"
12541 .PD 0
12542 .IP "\fB\-mno\-knuthdiv\fR" 4
12543 .IX Item "-mno-knuthdiv"
12544 .PD
12545 Make the result of a division yielding a remainder have the same sign as
12546 the divisor.  With the default, \fB\-mno\-knuthdiv\fR, the sign of the
12547 remainder follows the sign of the dividend.  Both methods are
12548 arithmetically valid, the latter being almost exclusively used.
12549 .IP "\fB\-mtoplevel\-symbols\fR" 4
12550 .IX Item "-mtoplevel-symbols"
12551 .PD 0
12552 .IP "\fB\-mno\-toplevel\-symbols\fR" 4
12553 .IX Item "-mno-toplevel-symbols"
12554 .PD
12555 Prepend (do not prepend) a \fB:\fR to all global symbols, so the assembly
12556 code can be used with the \f(CW\*(C`PREFIX\*(C'\fR assembly directive.
12557 .IP "\fB\-melf\fR" 4
12558 .IX Item "-melf"
12559 Generate an executable in the \s-1ELF\s0 format, rather than the default
12560 \&\fBmmo\fR format used by the \fBmmix\fR simulator.
12561 .IP "\fB\-mbranch\-predict\fR" 4
12562 .IX Item "-mbranch-predict"
12563 .PD 0
12564 .IP "\fB\-mno\-branch\-predict\fR" 4
12565 .IX Item "-mno-branch-predict"
12566 .PD
12567 Use (do not use) the probable-branch instructions, when static branch
12568 prediction indicates a probable branch.
12569 .IP "\fB\-mbase\-addresses\fR" 4
12570 .IX Item "-mbase-addresses"
12571 .PD 0
12572 .IP "\fB\-mno\-base\-addresses\fR" 4
12573 .IX Item "-mno-base-addresses"
12574 .PD
12575 Generate (do not generate) code that uses \fIbase addresses\fR.  Using a
12576 base address automatically generates a request (handled by the assembler
12577 and the linker) for a constant to be set up in a global register.  The
12578 register is used for one or more base address requests within the range 0
12579 to 255 from the value held in the register.  The generally leads to short
12580 and fast code, but the number of different data items that can be
12581 addressed is limited.  This means that a program that uses lots of static
12582 data may require \fB\-mno\-base\-addresses\fR.
12583 .IP "\fB\-msingle\-exit\fR" 4
12584 .IX Item "-msingle-exit"
12585 .PD 0
12586 .IP "\fB\-mno\-single\-exit\fR" 4
12587 .IX Item "-mno-single-exit"
12588 .PD
12589 Force (do not force) generated code to have a single exit point in each
12590 function.
12591 .PP
12592 \fI\s-1MN10300\s0 Options\fR
12593 .IX Subsection "MN10300 Options"
12594 .PP
12595 These \fB\-m\fR options are defined for Matsushita \s-1MN10300\s0 architectures:
12596 .IP "\fB\-mmult\-bug\fR" 4
12597 .IX Item "-mmult-bug"
12598 Generate code to avoid bugs in the multiply instructions for the \s-1MN10300\s0
12599 processors.  This is the default.
12600 .IP "\fB\-mno\-mult\-bug\fR" 4
12601 .IX Item "-mno-mult-bug"
12602 Do not generate code to avoid bugs in the multiply instructions for the
12603 \&\s-1MN10300\s0 processors.
12604 .IP "\fB\-mam33\fR" 4
12605 .IX Item "-mam33"
12606 Generate code which uses features specific to the \s-1AM33\s0 processor.
12607 .IP "\fB\-mno\-am33\fR" 4
12608 .IX Item "-mno-am33"
12609 Do not generate code which uses features specific to the \s-1AM33\s0 processor.  This
12610 is the default.
12611 .IP "\fB\-mreturn\-pointer\-on\-d0\fR" 4
12612 .IX Item "-mreturn-pointer-on-d0"
12613 When generating a function which returns a pointer, return the pointer
12614 in both \f(CW\*(C`a0\*(C'\fR and \f(CW\*(C`d0\*(C'\fR.  Otherwise, the pointer is returned
12615 only in a0, and attempts to call such functions without a prototype
12616 would result in errors.  Note that this option is on by default; use
12617 \&\fB\-mno\-return\-pointer\-on\-d0\fR to disable it.
12618 .IP "\fB\-mno\-crt0\fR" 4
12619 .IX Item "-mno-crt0"
12620 Do not link in the C run-time initialization object file.
12621 .IP "\fB\-mrelax\fR" 4
12622 .IX Item "-mrelax"
12623 Indicate to the linker that it should perform a relaxation optimization pass
12624 to shorten branches, calls and absolute memory addresses.  This option only
12625 has an effect when used on the command line for the final link step.
12626 .Sp
12627 This option makes symbolic debugging impossible.
12628 .PP
12629 \fI\s-1PDP\-11\s0 Options\fR
12630 .IX Subsection "PDP-11 Options"
12631 .PP
12632 These options are defined for the \s-1PDP\-11:\s0
12633 .IP "\fB\-mfpu\fR" 4
12634 .IX Item "-mfpu"
12635 Use hardware \s-1FPP\s0 floating point.  This is the default.  (\s-1FIS\s0 floating
12636 point on the \s-1PDP\-11/40\s0 is not supported.)
12637 .IP "\fB\-msoft\-float\fR" 4
12638 .IX Item "-msoft-float"
12639 Do not use hardware floating point.
12640 .IP "\fB\-mac0\fR" 4
12641 .IX Item "-mac0"
12642 Return floating-point results in ac0 (fr0 in Unix assembler syntax).
12643 .IP "\fB\-mno\-ac0\fR" 4
12644 .IX Item "-mno-ac0"
12645 Return floating-point results in memory.  This is the default.
12646 .IP "\fB\-m40\fR" 4
12647 .IX Item "-m40"
12648 Generate code for a \s-1PDP\-11/40\s0.
12649 .IP "\fB\-m45\fR" 4
12650 .IX Item "-m45"
12651 Generate code for a \s-1PDP\-11/45\s0.  This is the default.
12652 .IP "\fB\-m10\fR" 4
12653 .IX Item "-m10"
12654 Generate code for a \s-1PDP\-11/10\s0.
12655 .IP "\fB\-mbcopy\-builtin\fR" 4
12656 .IX Item "-mbcopy-builtin"
12657 Use inline \f(CW\*(C`movmemhi\*(C'\fR patterns for copying memory.  This is the
12658 default.
12659 .IP "\fB\-mbcopy\fR" 4
12660 .IX Item "-mbcopy"
12661 Do not use inline \f(CW\*(C`movmemhi\*(C'\fR patterns for copying memory.
12662 .IP "\fB\-mint16\fR" 4
12663 .IX Item "-mint16"
12664 .PD 0
12665 .IP "\fB\-mno\-int32\fR" 4
12666 .IX Item "-mno-int32"
12667 .PD
12668 Use 16\-bit \f(CW\*(C`int\*(C'\fR.  This is the default.
12669 .IP "\fB\-mint32\fR" 4
12670 .IX Item "-mint32"
12671 .PD 0
12672 .IP "\fB\-mno\-int16\fR" 4
12673 .IX Item "-mno-int16"
12674 .PD
12675 Use 32\-bit \f(CW\*(C`int\*(C'\fR.
12676 .IP "\fB\-mfloat64\fR" 4
12677 .IX Item "-mfloat64"
12678 .PD 0
12679 .IP "\fB\-mno\-float32\fR" 4
12680 .IX Item "-mno-float32"
12681 .PD
12682 Use 64\-bit \f(CW\*(C`float\*(C'\fR.  This is the default.
12683 .IP "\fB\-mfloat32\fR" 4
12684 .IX Item "-mfloat32"
12685 .PD 0
12686 .IP "\fB\-mno\-float64\fR" 4
12687 .IX Item "-mno-float64"
12688 .PD
12689 Use 32\-bit \f(CW\*(C`float\*(C'\fR.
12690 .IP "\fB\-mabshi\fR" 4
12691 .IX Item "-mabshi"
12692 Use \f(CW\*(C`abshi2\*(C'\fR pattern.  This is the default.
12693 .IP "\fB\-mno\-abshi\fR" 4
12694 .IX Item "-mno-abshi"
12695 Do not use \f(CW\*(C`abshi2\*(C'\fR pattern.
12696 .IP "\fB\-mbranch\-expensive\fR" 4
12697 .IX Item "-mbranch-expensive"
12698 Pretend that branches are expensive.  This is for experimenting with
12699 code generation only.
12700 .IP "\fB\-mbranch\-cheap\fR" 4
12701 .IX Item "-mbranch-cheap"
12702 Do not pretend that branches are expensive.  This is the default.
12703 .IP "\fB\-msplit\fR" 4
12704 .IX Item "-msplit"
12705 Generate code for a system with split I&D.
12706 .IP "\fB\-mno\-split\fR" 4
12707 .IX Item "-mno-split"
12708 Generate code for a system without split I&D.  This is the default.
12709 .IP "\fB\-munix\-asm\fR" 4
12710 .IX Item "-munix-asm"
12711 Use Unix assembler syntax.  This is the default when configured for
12712 \&\fBpdp11\-*\-bsd\fR.
12713 .IP "\fB\-mdec\-asm\fR" 4
12714 .IX Item "-mdec-asm"
12715 Use \s-1DEC\s0 assembler syntax.  This is the default when configured for any
12716 \&\s-1PDP\-11\s0 target other than \fBpdp11\-*\-bsd\fR.
12717 .PP
12718 \fIpicoChip Options\fR
12719 .IX Subsection "picoChip Options"
12720 .PP
12721 These \fB\-m\fR options are defined for picoChip implementations:
12722 .IP "\fB\-mae=\fR\fIae_type\fR" 4
12723 .IX Item "-mae=ae_type"
12724 Set the instruction set, register set, and instruction scheduling
12725 parameters for array element type \fIae_type\fR.  Supported values
12726 for \fIae_type\fR are \fB\s-1ANY\s0\fR, \fB\s-1MUL\s0\fR, and \fB\s-1MAC\s0\fR.
12727 .Sp
12728 \&\fB\-mae=ANY\fR selects a completely generic \s-1AE\s0 type.  Code
12729 generated with this option will run on any of the other \s-1AE\s0 types.  The
12730 code will not be as efficient as it would be if compiled for a specific
12731 \&\s-1AE\s0 type, and some types of operation (e.g., multiplication) will not
12732 work properly on all types of \s-1AE\s0.
12733 .Sp
12734 \&\fB\-mae=MUL\fR selects a \s-1MUL\s0 \s-1AE\s0 type.  This is the most useful \s-1AE\s0 type
12735 for compiled code, and is the default.
12736 .Sp
12737 \&\fB\-mae=MAC\fR selects a DSP-style \s-1MAC\s0 \s-1AE\s0.  Code compiled with this
12738 option may suffer from poor performance of byte (char) manipulation,
12739 since the \s-1DSP\s0 \s-1AE\s0 does not provide hardware support for byte load/stores.
12740 .IP "\fB\-msymbol\-as\-address\fR" 4
12741 .IX Item "-msymbol-as-address"
12742 Enable the compiler to directly use a symbol name as an address in a
12743 load/store instruction, without first loading it into a
12744 register.  Typically, the use of this option will generate larger
12745 programs, which run faster than when the option isn't used.  However, the
12746 results vary from program to program, so it is left as a user option,
12747 rather than being permanently enabled.
12748 .IP "\fB\-mno\-inefficient\-warnings\fR" 4
12749 .IX Item "-mno-inefficient-warnings"
12750 Disables warnings about the generation of inefficient code.  These
12751 warnings can be generated, for example, when compiling code which
12752 performs byte-level memory operations on the \s-1MAC\s0 \s-1AE\s0 type.  The \s-1MAC\s0 \s-1AE\s0 has
12753 no hardware support for byte-level memory operations, so all byte
12754 load/stores must be synthesized from word load/store operations.  This is
12755 inefficient and a warning will be generated indicating to the programmer
12756 that they should rewrite the code to avoid byte operations, or to target
12757 an \s-1AE\s0 type which has the necessary hardware support.  This option enables
12758 the warning to be turned off.
12759 .PP
12760 \fIPowerPC Options\fR
12761 .IX Subsection "PowerPC Options"
12762 .PP
12763 These are listed under 
12764 .PP
12765 \fI\s-1IBM\s0 \s-1RS/6000\s0 and PowerPC Options\fR
12766 .IX Subsection "IBM RS/6000 and PowerPC Options"
12767 .PP
12768 These \fB\-m\fR options are defined for the \s-1IBM\s0 \s-1RS/6000\s0 and PowerPC:
12769 .IP "\fB\-mpower\fR" 4
12770 .IX Item "-mpower"
12771 .PD 0
12772 .IP "\fB\-mno\-power\fR" 4
12773 .IX Item "-mno-power"
12774 .IP "\fB\-mpower2\fR" 4
12775 .IX Item "-mpower2"
12776 .IP "\fB\-mno\-power2\fR" 4
12777 .IX Item "-mno-power2"
12778 .IP "\fB\-mpowerpc\fR" 4
12779 .IX Item "-mpowerpc"
12780 .IP "\fB\-mno\-powerpc\fR" 4
12781 .IX Item "-mno-powerpc"
12782 .IP "\fB\-mpowerpc\-gpopt\fR" 4
12783 .IX Item "-mpowerpc-gpopt"
12784 .IP "\fB\-mno\-powerpc\-gpopt\fR" 4
12785 .IX Item "-mno-powerpc-gpopt"
12786 .IP "\fB\-mpowerpc\-gfxopt\fR" 4
12787 .IX Item "-mpowerpc-gfxopt"
12788 .IP "\fB\-mno\-powerpc\-gfxopt\fR" 4
12789 .IX Item "-mno-powerpc-gfxopt"
12790 .IP "\fB\-mpowerpc64\fR" 4
12791 .IX Item "-mpowerpc64"
12792 .IP "\fB\-mno\-powerpc64\fR" 4
12793 .IX Item "-mno-powerpc64"
12794 .IP "\fB\-mmfcrf\fR" 4
12795 .IX Item "-mmfcrf"
12796 .IP "\fB\-mno\-mfcrf\fR" 4
12797 .IX Item "-mno-mfcrf"
12798 .IP "\fB\-mpopcntb\fR" 4
12799 .IX Item "-mpopcntb"
12800 .IP "\fB\-mno\-popcntb\fR" 4
12801 .IX Item "-mno-popcntb"
12802 .IP "\fB\-mfprnd\fR" 4
12803 .IX Item "-mfprnd"
12804 .IP "\fB\-mno\-fprnd\fR" 4
12805 .IX Item "-mno-fprnd"
12806 .IP "\fB\-mcmpb\fR" 4
12807 .IX Item "-mcmpb"
12808 .IP "\fB\-mno\-cmpb\fR" 4
12809 .IX Item "-mno-cmpb"
12810 .IP "\fB\-mmfpgpr\fR" 4
12811 .IX Item "-mmfpgpr"
12812 .IP "\fB\-mno\-mfpgpr\fR" 4
12813 .IX Item "-mno-mfpgpr"
12814 .IP "\fB\-mhard\-dfp\fR" 4
12815 .IX Item "-mhard-dfp"
12816 .IP "\fB\-mno\-hard\-dfp\fR" 4
12817 .IX Item "-mno-hard-dfp"
12818 .PD
12819 \&\s-1GCC\s0 supports two related instruction set architectures for the
12820 \&\s-1RS/6000\s0 and PowerPC.  The \fI\s-1POWER\s0\fR instruction set are those
12821 instructions supported by the \fBrios\fR chip set used in the original
12822 \&\s-1RS/6000\s0 systems and the \fIPowerPC\fR instruction set is the
12823 architecture of the Freescale MPC5xx, MPC6xx, MPC8xx microprocessors, and
12824 the \s-1IBM\s0 4xx, 6xx, and follow-on microprocessors.
12825 .Sp
12826 Neither architecture is a subset of the other.  However there is a
12827 large common subset of instructions supported by both.  An \s-1MQ\s0
12828 register is included in processors supporting the \s-1POWER\s0 architecture.
12829 .Sp
12830 You use these options to specify which instructions are available on the
12831 processor you are using.  The default value of these options is
12832 determined when configuring \s-1GCC\s0.  Specifying the
12833 \&\fB\-mcpu=\fR\fIcpu_type\fR overrides the specification of these
12834 options.  We recommend you use the \fB\-mcpu=\fR\fIcpu_type\fR option
12835 rather than the options listed above.
12836 .Sp
12837 The \fB\-mpower\fR option allows \s-1GCC\s0 to generate instructions that
12838 are found only in the \s-1POWER\s0 architecture and to use the \s-1MQ\s0 register.
12839 Specifying \fB\-mpower2\fR implies \fB\-power\fR and also allows \s-1GCC\s0
12840 to generate instructions that are present in the \s-1POWER2\s0 architecture but
12841 not the original \s-1POWER\s0 architecture.
12842 .Sp
12843 The \fB\-mpowerpc\fR option allows \s-1GCC\s0 to generate instructions that
12844 are found only in the 32\-bit subset of the PowerPC architecture.
12845 Specifying \fB\-mpowerpc\-gpopt\fR implies \fB\-mpowerpc\fR and also allows
12846 \&\s-1GCC\s0 to use the optional PowerPC architecture instructions in the
12847 General Purpose group, including floating-point square root.  Specifying
12848 \&\fB\-mpowerpc\-gfxopt\fR implies \fB\-mpowerpc\fR and also allows \s-1GCC\s0 to
12849 use the optional PowerPC architecture instructions in the Graphics
12850 group, including floating-point select.
12851 .Sp
12852 The \fB\-mmfcrf\fR option allows \s-1GCC\s0 to generate the move from
12853 condition register field instruction implemented on the \s-1POWER4\s0
12854 processor and other processors that support the PowerPC V2.01
12855 architecture.
12856 The \fB\-mpopcntb\fR option allows \s-1GCC\s0 to generate the popcount and
12857 double precision \s-1FP\s0 reciprocal estimate instruction implemented on the
12858 \&\s-1POWER5\s0 processor and other processors that support the PowerPC V2.02
12859 architecture.
12860 The \fB\-mfprnd\fR option allows \s-1GCC\s0 to generate the \s-1FP\s0 round to
12861 integer instructions implemented on the \s-1POWER5+\s0 processor and other
12862 processors that support the PowerPC V2.03 architecture.
12863 The \fB\-mcmpb\fR option allows \s-1GCC\s0 to generate the compare bytes
12864 instruction implemented on the \s-1POWER6\s0 processor and other processors
12865 that support the PowerPC V2.05 architecture.
12866 The \fB\-mmfpgpr\fR option allows \s-1GCC\s0 to generate the \s-1FP\s0 move to/from
12867 general purpose register instructions implemented on the \s-1POWER6X\s0
12868 processor and other processors that support the extended PowerPC V2.05
12869 architecture.
12870 The \fB\-mhard\-dfp\fR option allows \s-1GCC\s0 to generate the decimal floating
12871 point instructions implemented on some \s-1POWER\s0 processors.
12872 .Sp
12873 The \fB\-mpowerpc64\fR option allows \s-1GCC\s0 to generate the additional
12874 64\-bit instructions that are found in the full PowerPC64 architecture
12875 and to treat GPRs as 64\-bit, doubleword quantities.  \s-1GCC\s0 defaults to
12876 \&\fB\-mno\-powerpc64\fR.
12877 .Sp
12878 If you specify both \fB\-mno\-power\fR and \fB\-mno\-powerpc\fR, \s-1GCC\s0
12879 will use only the instructions in the common subset of both
12880 architectures plus some special \s-1AIX\s0 common-mode calls, and will not use
12881 the \s-1MQ\s0 register.  Specifying both \fB\-mpower\fR and \fB\-mpowerpc\fR
12882 permits \s-1GCC\s0 to use any instruction from either architecture and to
12883 allow use of the \s-1MQ\s0 register; specify this for the Motorola \s-1MPC601\s0.
12884 .IP "\fB\-mnew\-mnemonics\fR" 4
12885 .IX Item "-mnew-mnemonics"
12886 .PD 0
12887 .IP "\fB\-mold\-mnemonics\fR" 4
12888 .IX Item "-mold-mnemonics"
12889 .PD
12890 Select which mnemonics to use in the generated assembler code.  With
12891 \&\fB\-mnew\-mnemonics\fR, \s-1GCC\s0 uses the assembler mnemonics defined for
12892 the PowerPC architecture.  With \fB\-mold\-mnemonics\fR it uses the
12893 assembler mnemonics defined for the \s-1POWER\s0 architecture.  Instructions
12894 defined in only one architecture have only one mnemonic; \s-1GCC\s0 uses that
12895 mnemonic irrespective of which of these options is specified.
12896 .Sp
12897 \&\s-1GCC\s0 defaults to the mnemonics appropriate for the architecture in
12898 use.  Specifying \fB\-mcpu=\fR\fIcpu_type\fR sometimes overrides the
12899 value of these option.  Unless you are building a cross\-compiler, you
12900 should normally not specify either \fB\-mnew\-mnemonics\fR or
12901 \&\fB\-mold\-mnemonics\fR, but should instead accept the default.
12902 .IP "\fB\-mcpu=\fR\fIcpu_type\fR" 4
12903 .IX Item "-mcpu=cpu_type"
12904 Set architecture type, register usage, choice of mnemonics, and
12905 instruction scheduling parameters for machine type \fIcpu_type\fR.
12906 Supported values for \fIcpu_type\fR are \fB401\fR, \fB403\fR,
12907 \&\fB405\fR, \fB405fp\fR, \fB440\fR, \fB440fp\fR, \fB464\fR, \fB464fp\fR,
12908 \&\fB505\fR, \fB601\fR, \fB602\fR, \fB603\fR, \fB603e\fR, \fB604\fR,
12909 \&\fB604e\fR, \fB620\fR, \fB630\fR, \fB740\fR, \fB7400\fR,
12910 \&\fB7450\fR, \fB750\fR, \fB801\fR, \fB821\fR, \fB823\fR,
12911 \&\fB860\fR, \fB970\fR, \fB8540\fR, \fBe300c2\fR, \fBe300c3\fR,
12912 \&\fBe500mc\fR, \fBec603e\fR, \fBG3\fR, \fBG4\fR, \fBG5\fR,
12913 \&\fBpower\fR, \fBpower2\fR, \fBpower3\fR, \fBpower4\fR,
12914 \&\fBpower5\fR, \fBpower5+\fR, \fBpower6\fR, \fBpower6x\fR, \fBpower7\fR
12915 \&\fBcommon\fR, \fBpowerpc\fR, \fBpowerpc64\fR, \fBrios\fR,
12916 \&\fBrios1\fR, \fBrios2\fR, \fBrsc\fR, and \fBrs64\fR.
12917 .Sp
12918 \&\fB\-mcpu=common\fR selects a completely generic processor.  Code
12919 generated under this option will run on any \s-1POWER\s0 or PowerPC processor.
12920 \&\s-1GCC\s0 will use only the instructions in the common subset of both
12921 architectures, and will not use the \s-1MQ\s0 register.  \s-1GCC\s0 assumes a generic
12922 processor model for scheduling purposes.
12923 .Sp
12924 \&\fB\-mcpu=power\fR, \fB\-mcpu=power2\fR, \fB\-mcpu=powerpc\fR, and
12925 \&\fB\-mcpu=powerpc64\fR specify generic \s-1POWER\s0, \s-1POWER2\s0, pure 32\-bit
12926 PowerPC (i.e., not \s-1MPC601\s0), and 64\-bit PowerPC architecture machine
12927 types, with an appropriate, generic processor model assumed for
12928 scheduling purposes.
12929 .Sp
12930 The other options specify a specific processor.  Code generated under
12931 those options will run best on that processor, and may not run at all on
12932 others.
12933 .Sp
12934 The \fB\-mcpu\fR options automatically enable or disable the
12935 following options:
12936 .Sp
12937 \&\fB\-maltivec  \-mfprnd  \-mhard\-float  \-mmfcrf  \-mmultiple 
12938 \&\-mnew\-mnemonics  \-mpopcntb  \-mpower  \-mpower2  \-mpowerpc64 
12939 \&\-mpowerpc\-gpopt  \-mpowerpc\-gfxopt  \-msingle\-float \-mdouble\-float 
12940 \&\-msimple\-fpu \-mstring  \-mmulhw  \-mdlmzb  \-mmfpgpr\fR
12941 .Sp
12942 The particular options set for any particular \s-1CPU\s0 will vary between
12943 compiler versions, depending on what setting seems to produce optimal
12944 code for that \s-1CPU\s0; it doesn't necessarily reflect the actual hardware's
12945 capabilities.  If you wish to set an individual option to a particular
12946 value, you may specify it after the \fB\-mcpu\fR option, like
12947 \&\fB\-mcpu=970 \-mno\-altivec\fR.
12948 .Sp
12949 On \s-1AIX\s0, the \fB\-maltivec\fR and \fB\-mpowerpc64\fR options are
12950 not enabled or disabled by the \fB\-mcpu\fR option at present because
12951 \&\s-1AIX\s0 does not have full support for these options.  You may still
12952 enable or disable them individually if you're sure it'll work in your
12953 environment.
12954 .IP "\fB\-mtune=\fR\fIcpu_type\fR" 4
12955 .IX Item "-mtune=cpu_type"
12956 Set the instruction scheduling parameters for machine type
12957 \&\fIcpu_type\fR, but do not set the architecture type, register usage, or
12958 choice of mnemonics, as \fB\-mcpu=\fR\fIcpu_type\fR would.  The same
12959 values for \fIcpu_type\fR are used for \fB\-mtune\fR as for
12960 \&\fB\-mcpu\fR.  If both are specified, the code generated will use the
12961 architecture, registers, and mnemonics set by \fB\-mcpu\fR, but the
12962 scheduling parameters set by \fB\-mtune\fR.
12963 .IP "\fB\-mswdiv\fR" 4
12964 .IX Item "-mswdiv"
12965 .PD 0
12966 .IP "\fB\-mno\-swdiv\fR" 4
12967 .IX Item "-mno-swdiv"
12968 .PD
12969 Generate code to compute division as reciprocal estimate and iterative
12970 refinement, creating opportunities for increased throughput.  This
12971 feature requires: optional PowerPC Graphics instruction set for single
12972 precision and \s-1FRE\s0 instruction for double precision, assuming divides
12973 cannot generate user-visible traps, and the domain values not include
12974 Infinities, denormals or zero denominator.
12975 .IP "\fB\-maltivec\fR" 4
12976 .IX Item "-maltivec"
12977 .PD 0
12978 .IP "\fB\-mno\-altivec\fR" 4
12979 .IX Item "-mno-altivec"
12980 .PD
12981 Generate code that uses (does not use) AltiVec instructions, and also
12982 enable the use of built-in functions that allow more direct access to
12983 the AltiVec instruction set.  You may also need to set
12984 \&\fB\-mabi=altivec\fR to adjust the current \s-1ABI\s0 with AltiVec \s-1ABI\s0
12985 enhancements.
12986 .IP "\fB\-mvrsave\fR" 4
12987 .IX Item "-mvrsave"
12988 .PD 0
12989 .IP "\fB\-mno\-vrsave\fR" 4
12990 .IX Item "-mno-vrsave"
12991 .PD
12992 Generate \s-1VRSAVE\s0 instructions when generating AltiVec code.
12993 .IP "\fB\-mgen\-cell\-microcode\fR" 4
12994 .IX Item "-mgen-cell-microcode"
12995 Generate Cell microcode instructions
12996 .IP "\fB\-mwarn\-cell\-microcode\fR" 4
12997 .IX Item "-mwarn-cell-microcode"
12998 Warning when a Cell microcode instruction is going to emitted.  An example
12999 of a Cell microcode instruction is a variable shift.
13000 .IP "\fB\-msecure\-plt\fR" 4
13001 .IX Item "-msecure-plt"
13002 Generate code that allows ld and ld.so to build executables and shared
13003 libraries with non-exec .plt and .got sections.  This is a PowerPC
13004 32\-bit \s-1SYSV\s0 \s-1ABI\s0 option.
13005 .IP "\fB\-mbss\-plt\fR" 4
13006 .IX Item "-mbss-plt"
13007 Generate code that uses a \s-1BSS\s0 .plt section that ld.so fills in, and
13008 requires .plt and .got sections that are both writable and executable.
13009 This is a PowerPC 32\-bit \s-1SYSV\s0 \s-1ABI\s0 option.
13010 .IP "\fB\-misel\fR" 4
13011 .IX Item "-misel"
13012 .PD 0
13013 .IP "\fB\-mno\-isel\fR" 4
13014 .IX Item "-mno-isel"
13015 .PD
13016 This switch enables or disables the generation of \s-1ISEL\s0 instructions.
13017 .IP "\fB\-misel=\fR\fIyes/no\fR" 4
13018 .IX Item "-misel=yes/no"
13019 This switch has been deprecated.  Use \fB\-misel\fR and
13020 \&\fB\-mno\-isel\fR instead.
13021 .IP "\fB\-mspe\fR" 4
13022 .IX Item "-mspe"
13023 .PD 0
13024 .IP "\fB\-mno\-spe\fR" 4
13025 .IX Item "-mno-spe"
13026 .PD
13027 This switch enables or disables the generation of \s-1SPE\s0 simd
13028 instructions.
13029 .IP "\fB\-mpaired\fR" 4
13030 .IX Item "-mpaired"
13031 .PD 0
13032 .IP "\fB\-mno\-paired\fR" 4
13033 .IX Item "-mno-paired"
13034 .PD
13035 This switch enables or disables the generation of \s-1PAIRED\s0 simd
13036 instructions.
13037 .IP "\fB\-mspe=\fR\fIyes/no\fR" 4
13038 .IX Item "-mspe=yes/no"
13039 This option has been deprecated.  Use \fB\-mspe\fR and
13040 \&\fB\-mno\-spe\fR instead.
13041 .IP "\fB\-mfloat\-gprs=\fR\fIyes/single/double/no\fR" 4
13042 .IX Item "-mfloat-gprs=yes/single/double/no"
13043 .PD 0
13044 .IP "\fB\-mfloat\-gprs\fR" 4
13045 .IX Item "-mfloat-gprs"
13046 .PD
13047 This switch enables or disables the generation of floating point
13048 operations on the general purpose registers for architectures that
13049 support it.
13050 .Sp
13051 The argument \fIyes\fR or \fIsingle\fR enables the use of
13052 single-precision floating point operations.
13053 .Sp
13054 The argument \fIdouble\fR enables the use of single and
13055 double-precision floating point operations.
13056 .Sp
13057 The argument \fIno\fR disables floating point operations on the
13058 general purpose registers.
13059 .Sp
13060 This option is currently only available on the MPC854x.
13061 .IP "\fB\-m32\fR" 4
13062 .IX Item "-m32"
13063 .PD 0
13064 .IP "\fB\-m64\fR" 4
13065 .IX Item "-m64"
13066 .PD
13067 Generate code for 32\-bit or 64\-bit environments of Darwin and \s-1SVR4\s0
13068 targets (including GNU/Linux).  The 32\-bit environment sets int, long
13069 and pointer to 32 bits and generates code that runs on any PowerPC
13070 variant.  The 64\-bit environment sets int to 32 bits and long and
13071 pointer to 64 bits, and generates code for PowerPC64, as for
13072 \&\fB\-mpowerpc64\fR.
13073 .IP "\fB\-mfull\-toc\fR" 4
13074 .IX Item "-mfull-toc"
13075 .PD 0
13076 .IP "\fB\-mno\-fp\-in\-toc\fR" 4
13077 .IX Item "-mno-fp-in-toc"
13078 .IP "\fB\-mno\-sum\-in\-toc\fR" 4
13079 .IX Item "-mno-sum-in-toc"
13080 .IP "\fB\-mminimal\-toc\fR" 4
13081 .IX Item "-mminimal-toc"
13082 .PD
13083 Modify generation of the \s-1TOC\s0 (Table Of Contents), which is created for
13084 every executable file.  The \fB\-mfull\-toc\fR option is selected by
13085 default.  In that case, \s-1GCC\s0 will allocate at least one \s-1TOC\s0 entry for
13086 each unique non-automatic variable reference in your program.  \s-1GCC\s0
13087 will also place floating-point constants in the \s-1TOC\s0.  However, only
13088 16,384 entries are available in the \s-1TOC\s0.
13089 .Sp
13090 If you receive a linker error message that saying you have overflowed
13091 the available \s-1TOC\s0 space, you can reduce the amount of \s-1TOC\s0 space used
13092 with the \fB\-mno\-fp\-in\-toc\fR and \fB\-mno\-sum\-in\-toc\fR options.
13093 \&\fB\-mno\-fp\-in\-toc\fR prevents \s-1GCC\s0 from putting floating-point
13094 constants in the \s-1TOC\s0 and \fB\-mno\-sum\-in\-toc\fR forces \s-1GCC\s0 to
13095 generate code to calculate the sum of an address and a constant at
13096 run-time instead of putting that sum into the \s-1TOC\s0.  You may specify one
13097 or both of these options.  Each causes \s-1GCC\s0 to produce very slightly
13098 slower and larger code at the expense of conserving \s-1TOC\s0 space.
13099 .Sp
13100 If you still run out of space in the \s-1TOC\s0 even when you specify both of
13101 these options, specify \fB\-mminimal\-toc\fR instead.  This option causes
13102 \&\s-1GCC\s0 to make only one \s-1TOC\s0 entry for every file.  When you specify this
13103 option, \s-1GCC\s0 will produce code that is slower and larger but which
13104 uses extremely little \s-1TOC\s0 space.  You may wish to use this option
13105 only on files that contain less frequently executed code.
13106 .IP "\fB\-maix64\fR" 4
13107 .IX Item "-maix64"
13108 .PD 0
13109 .IP "\fB\-maix32\fR" 4
13110 .IX Item "-maix32"
13111 .PD
13112 Enable 64\-bit \s-1AIX\s0 \s-1ABI\s0 and calling convention: 64\-bit pointers, 64\-bit
13113 \&\f(CW\*(C`long\*(C'\fR type, and the infrastructure needed to support them.
13114 Specifying \fB\-maix64\fR implies \fB\-mpowerpc64\fR and
13115 \&\fB\-mpowerpc\fR, while \fB\-maix32\fR disables the 64\-bit \s-1ABI\s0 and
13116 implies \fB\-mno\-powerpc64\fR.  \s-1GCC\s0 defaults to \fB\-maix32\fR.
13117 .IP "\fB\-mxl\-compat\fR" 4
13118 .IX Item "-mxl-compat"
13119 .PD 0
13120 .IP "\fB\-mno\-xl\-compat\fR" 4
13121 .IX Item "-mno-xl-compat"
13122 .PD
13123 Produce code that conforms more closely to \s-1IBM\s0 \s-1XL\s0 compiler semantics
13124 when using AIX-compatible \s-1ABI\s0.  Pass floating-point arguments to
13125 prototyped functions beyond the register save area (\s-1RSA\s0) on the stack
13126 in addition to argument FPRs.  Do not assume that most significant
13127 double in 128\-bit long double value is properly rounded when comparing
13128 values and converting to double.  Use \s-1XL\s0 symbol names for long double
13129 support routines.
13130 .Sp
13131 The \s-1AIX\s0 calling convention was extended but not initially documented to
13132 handle an obscure K&R C case of calling a function that takes the
13133 address of its arguments with fewer arguments than declared.  \s-1IBM\s0 \s-1XL\s0
13134 compilers access floating point arguments which do not fit in the
13135 \&\s-1RSA\s0 from the stack when a subroutine is compiled without
13136 optimization.  Because always storing floating-point arguments on the
13137 stack is inefficient and rarely needed, this option is not enabled by
13138 default and only is necessary when calling subroutines compiled by \s-1IBM\s0
13139 \&\s-1XL\s0 compilers without optimization.
13140 .IP "\fB\-mpe\fR" 4
13141 .IX Item "-mpe"
13142 Support \fI\s-1IBM\s0 \s-1RS/6000\s0 \s-1SP\s0\fR \fIParallel Environment\fR (\s-1PE\s0).  Link an
13143 application written to use message passing with special startup code to
13144 enable the application to run.  The system must have \s-1PE\s0 installed in the
13145 standard location (\fI/usr/lpp/ppe.poe/\fR), or the \fIspecs\fR file
13146 must be overridden with the \fB\-specs=\fR option to specify the
13147 appropriate directory location.  The Parallel Environment does not
13148 support threads, so the \fB\-mpe\fR option and the \fB\-pthread\fR
13149 option are incompatible.
13150 .IP "\fB\-malign\-natural\fR" 4
13151 .IX Item "-malign-natural"
13152 .PD 0
13153 .IP "\fB\-malign\-power\fR" 4
13154 .IX Item "-malign-power"
13155 .PD
13156 On \s-1AIX\s0, 32\-bit Darwin, and 64\-bit PowerPC GNU/Linux, the option
13157 \&\fB\-malign\-natural\fR overrides the ABI-defined alignment of larger
13158 types, such as floating-point doubles, on their natural size-based boundary.
13159 The option \fB\-malign\-power\fR instructs \s-1GCC\s0 to follow the ABI-specified
13160 alignment rules.  \s-1GCC\s0 defaults to the standard alignment defined in the \s-1ABI\s0.
13161 .Sp
13162 On 64\-bit Darwin, natural alignment is the default, and \fB\-malign\-power\fR
13163 is not supported.
13164 .IP "\fB\-msoft\-float\fR" 4
13165 .IX Item "-msoft-float"
13166 .PD 0
13167 .IP "\fB\-mhard\-float\fR" 4
13168 .IX Item "-mhard-float"
13169 .PD
13170 Generate code that does not use (uses) the floating-point register set.
13171 Software floating point emulation is provided if you use the
13172 \&\fB\-msoft\-float\fR option, and pass the option to \s-1GCC\s0 when linking.
13173 .IP "\fB\-msingle\-float\fR" 4
13174 .IX Item "-msingle-float"
13175 .PD 0
13176 .IP "\fB\-mdouble\-float\fR" 4
13177 .IX Item "-mdouble-float"
13178 .PD
13179 Generate code for single or double-precision floating point operations. 
13180 \&\fB\-mdouble\-float\fR implies \fB\-msingle\-float\fR. 
13181 .IP "\fB\-msimple\-fpu\fR" 4
13182 .IX Item "-msimple-fpu"
13183 Do not generate sqrt and div instructions for hardware floating point unit.
13184 .IP "\fB\-mfpu\fR" 4
13185 .IX Item "-mfpu"
13186 Specify type of floating point unit.  Valid values are \fIsp_lite\fR 
13187 (equivalent to \-msingle\-float \-msimple\-fpu), \fIdp_lite\fR (equivalent
13188 to \-mdouble\-float \-msimple\-fpu), \fIsp_full\fR (equivalent to \-msingle\-float),
13189 and \fIdp_full\fR (equivalent to \-mdouble\-float).
13190 .IP "\fB\-mxilinx\-fpu\fR" 4
13191 .IX Item "-mxilinx-fpu"
13192 Perform optimizations for floating point unit on Xilinx \s-1PPC\s0 405/440.
13193 .IP "\fB\-mmultiple\fR" 4
13194 .IX Item "-mmultiple"
13195 .PD 0
13196 .IP "\fB\-mno\-multiple\fR" 4
13197 .IX Item "-mno-multiple"
13198 .PD
13199 Generate code that uses (does not use) the load multiple word
13200 instructions and the store multiple word instructions.  These
13201 instructions are generated by default on \s-1POWER\s0 systems, and not
13202 generated on PowerPC systems.  Do not use \fB\-mmultiple\fR on little
13203 endian PowerPC systems, since those instructions do not work when the
13204 processor is in little endian mode.  The exceptions are \s-1PPC740\s0 and
13205 \&\s-1PPC750\s0 which permit the instructions usage in little endian mode.
13206 .IP "\fB\-mstring\fR" 4
13207 .IX Item "-mstring"
13208 .PD 0
13209 .IP "\fB\-mno\-string\fR" 4
13210 .IX Item "-mno-string"
13211 .PD
13212 Generate code that uses (does not use) the load string instructions
13213 and the store string word instructions to save multiple registers and
13214 do small block moves.  These instructions are generated by default on
13215 \&\s-1POWER\s0 systems, and not generated on PowerPC systems.  Do not use
13216 \&\fB\-mstring\fR on little endian PowerPC systems, since those
13217 instructions do not work when the processor is in little endian mode.
13218 The exceptions are \s-1PPC740\s0 and \s-1PPC750\s0 which permit the instructions
13219 usage in little endian mode.
13220 .IP "\fB\-mupdate\fR" 4
13221 .IX Item "-mupdate"
13222 .PD 0
13223 .IP "\fB\-mno\-update\fR" 4
13224 .IX Item "-mno-update"
13225 .PD
13226 Generate code that uses (does not use) the load or store instructions
13227 that update the base register to the address of the calculated memory
13228 location.  These instructions are generated by default.  If you use
13229 \&\fB\-mno\-update\fR, there is a small window between the time that the
13230 stack pointer is updated and the address of the previous frame is
13231 stored, which means code that walks the stack frame across interrupts or
13232 signals may get corrupted data.
13233 .IP "\fB\-mavoid\-indexed\-addresses\fR" 4
13234 .IX Item "-mavoid-indexed-addresses"
13235 .PD 0
13236 .IP "\fB\-mno\-avoid\-indexed\-addresses\fR" 4
13237 .IX Item "-mno-avoid-indexed-addresses"
13238 .PD
13239 Generate code that tries to avoid (not avoid) the use of indexed load
13240 or store instructions. These instructions can incur a performance
13241 penalty on Power6 processors in certain situations, such as when
13242 stepping through large arrays that cross a 16M boundary.  This option
13243 is enabled by default when targetting Power6 and disabled otherwise.
13244 .IP "\fB\-mfused\-madd\fR" 4
13245 .IX Item "-mfused-madd"
13246 .PD 0
13247 .IP "\fB\-mno\-fused\-madd\fR" 4
13248 .IX Item "-mno-fused-madd"
13249 .PD
13250 Generate code that uses (does not use) the floating point multiply and
13251 accumulate instructions.  These instructions are generated by default if
13252 hardware floating is used.
13253 .IP "\fB\-mmulhw\fR" 4
13254 .IX Item "-mmulhw"
13255 .PD 0
13256 .IP "\fB\-mno\-mulhw\fR" 4
13257 .IX Item "-mno-mulhw"
13258 .PD
13259 Generate code that uses (does not use) the half-word multiply and
13260 multiply-accumulate instructions on the \s-1IBM\s0 405, 440 and 464 processors.
13261 These instructions are generated by default when targetting those
13262 processors.
13263 .IP "\fB\-mdlmzb\fR" 4
13264 .IX Item "-mdlmzb"
13265 .PD 0
13266 .IP "\fB\-mno\-dlmzb\fR" 4
13267 .IX Item "-mno-dlmzb"
13268 .PD
13269 Generate code that uses (does not use) the string-search \fBdlmzb\fR
13270 instruction on the \s-1IBM\s0 405, 440 and 464 processors.  This instruction is
13271 generated by default when targetting those processors.
13272 .IP "\fB\-mno\-bit\-align\fR" 4
13273 .IX Item "-mno-bit-align"
13274 .PD 0
13275 .IP "\fB\-mbit\-align\fR" 4
13276 .IX Item "-mbit-align"
13277 .PD
13278 On System V.4 and embedded PowerPC systems do not (do) force structures
13279 and unions that contain bit-fields to be aligned to the base type of the
13280 bit\-field.
13281 .Sp
13282 For example, by default a structure containing nothing but 8
13283 \&\f(CW\*(C`unsigned\*(C'\fR bit-fields of length 1 would be aligned to a 4 byte
13284 boundary and have a size of 4 bytes.  By using \fB\-mno\-bit\-align\fR,
13285 the structure would be aligned to a 1 byte boundary and be one byte in
13286 size.
13287 .IP "\fB\-mno\-strict\-align\fR" 4
13288 .IX Item "-mno-strict-align"
13289 .PD 0
13290 .IP "\fB\-mstrict\-align\fR" 4
13291 .IX Item "-mstrict-align"
13292 .PD
13293 On System V.4 and embedded PowerPC systems do not (do) assume that
13294 unaligned memory references will be handled by the system.
13295 .IP "\fB\-mrelocatable\fR" 4
13296 .IX Item "-mrelocatable"
13297 .PD 0
13298 .IP "\fB\-mno\-relocatable\fR" 4
13299 .IX Item "-mno-relocatable"
13300 .PD
13301 On embedded PowerPC systems generate code that allows (does not allow)
13302 the program to be relocated to a different address at runtime.  If you
13303 use \fB\-mrelocatable\fR on any module, all objects linked together must
13304 be compiled with \fB\-mrelocatable\fR or \fB\-mrelocatable\-lib\fR.
13305 .IP "\fB\-mrelocatable\-lib\fR" 4
13306 .IX Item "-mrelocatable-lib"
13307 .PD 0
13308 .IP "\fB\-mno\-relocatable\-lib\fR" 4
13309 .IX Item "-mno-relocatable-lib"
13310 .PD
13311 On embedded PowerPC systems generate code that allows (does not allow)
13312 the program to be relocated to a different address at runtime.  Modules
13313 compiled with \fB\-mrelocatable\-lib\fR can be linked with either modules
13314 compiled without \fB\-mrelocatable\fR and \fB\-mrelocatable\-lib\fR or
13315 with modules compiled with the \fB\-mrelocatable\fR options.
13316 .IP "\fB\-mno\-toc\fR" 4
13317 .IX Item "-mno-toc"
13318 .PD 0
13319 .IP "\fB\-mtoc\fR" 4
13320 .IX Item "-mtoc"
13321 .PD
13322 On System V.4 and embedded PowerPC systems do not (do) assume that
13323 register 2 contains a pointer to a global area pointing to the addresses
13324 used in the program.
13325 .IP "\fB\-mlittle\fR" 4
13326 .IX Item "-mlittle"
13327 .PD 0
13328 .IP "\fB\-mlittle\-endian\fR" 4
13329 .IX Item "-mlittle-endian"
13330 .PD
13331 On System V.4 and embedded PowerPC systems compile code for the
13332 processor in little endian mode.  The \fB\-mlittle\-endian\fR option is
13333 the same as \fB\-mlittle\fR.
13334 .IP "\fB\-mbig\fR" 4
13335 .IX Item "-mbig"
13336 .PD 0
13337 .IP "\fB\-mbig\-endian\fR" 4
13338 .IX Item "-mbig-endian"
13339 .PD
13340 On System V.4 and embedded PowerPC systems compile code for the
13341 processor in big endian mode.  The \fB\-mbig\-endian\fR option is
13342 the same as \fB\-mbig\fR.
13343 .IP "\fB\-mdynamic\-no\-pic\fR" 4
13344 .IX Item "-mdynamic-no-pic"
13345 On Darwin and Mac \s-1OS\s0 X systems, compile code so that it is not
13346 relocatable, but that its external references are relocatable.  The
13347 resulting code is suitable for applications, but not shared
13348 libraries.
13349 .IP "\fB\-mprioritize\-restricted\-insns=\fR\fIpriority\fR" 4
13350 .IX Item "-mprioritize-restricted-insns=priority"
13351 This option controls the priority that is assigned to
13352 dispatch-slot restricted instructions during the second scheduling
13353 pass.  The argument \fIpriority\fR takes the value \fI0/1/2\fR to assign
13354 \&\fIno/highest/second\-highest\fR priority to dispatch slot restricted
13355 instructions.
13356 .IP "\fB\-msched\-costly\-dep=\fR\fIdependence_type\fR" 4
13357 .IX Item "-msched-costly-dep=dependence_type"
13358 This option controls which dependences are considered costly
13359 by the target during instruction scheduling.  The argument
13360 \&\fIdependence_type\fR takes one of the following values:
13361 \&\fIno\fR: no dependence is costly,
13362 \&\fIall\fR: all dependences are costly,
13363 \&\fItrue_store_to_load\fR: a true dependence from store to load is costly,
13364 \&\fIstore_to_load\fR: any dependence from store to load is costly,
13365 \&\fInumber\fR: any dependence which latency >= \fInumber\fR is costly.
13366 .IP "\fB\-minsert\-sched\-nops=\fR\fIscheme\fR" 4
13367 .IX Item "-minsert-sched-nops=scheme"
13368 This option controls which nop insertion scheme will be used during
13369 the second scheduling pass.  The argument \fIscheme\fR takes one of the
13370 following values:
13371 \&\fIno\fR: Don't insert nops.
13372 \&\fIpad\fR: Pad with nops any dispatch group which has vacant issue slots,
13373 according to the scheduler's grouping.
13374 \&\fIregroup_exact\fR: Insert nops to force costly dependent insns into
13375 separate groups.  Insert exactly as many nops as needed to force an insn
13376 to a new group, according to the estimated processor grouping.
13377 \&\fInumber\fR: Insert nops to force costly dependent insns into
13378 separate groups.  Insert \fInumber\fR nops to force an insn to a new group.
13379 .IP "\fB\-mcall\-sysv\fR" 4
13380 .IX Item "-mcall-sysv"
13381 On System V.4 and embedded PowerPC systems compile code using calling
13382 conventions that adheres to the March 1995 draft of the System V
13383 Application Binary Interface, PowerPC processor supplement.  This is the
13384 default unless you configured \s-1GCC\s0 using \fBpowerpc\-*\-eabiaix\fR.
13385 .IP "\fB\-mcall\-sysv\-eabi\fR" 4
13386 .IX Item "-mcall-sysv-eabi"
13387 Specify both \fB\-mcall\-sysv\fR and \fB\-meabi\fR options.
13388 .IP "\fB\-mcall\-sysv\-noeabi\fR" 4
13389 .IX Item "-mcall-sysv-noeabi"
13390 Specify both \fB\-mcall\-sysv\fR and \fB\-mno\-eabi\fR options.
13391 .IP "\fB\-mcall\-solaris\fR" 4
13392 .IX Item "-mcall-solaris"
13393 On System V.4 and embedded PowerPC systems compile code for the Solaris
13394 operating system.
13395 .IP "\fB\-mcall\-linux\fR" 4
13396 .IX Item "-mcall-linux"
13397 On System V.4 and embedded PowerPC systems compile code for the
13398 Linux-based \s-1GNU\s0 system.
13399 .IP "\fB\-mcall\-gnu\fR" 4
13400 .IX Item "-mcall-gnu"
13401 On System V.4 and embedded PowerPC systems compile code for the
13402 Hurd-based \s-1GNU\s0 system.
13403 .IP "\fB\-mcall\-netbsd\fR" 4
13404 .IX Item "-mcall-netbsd"
13405 On System V.4 and embedded PowerPC systems compile code for the
13406 NetBSD operating system.
13407 .IP "\fB\-maix\-struct\-return\fR" 4
13408 .IX Item "-maix-struct-return"
13409 Return all structures in memory (as specified by the \s-1AIX\s0 \s-1ABI\s0).
13410 .IP "\fB\-msvr4\-struct\-return\fR" 4
13411 .IX Item "-msvr4-struct-return"
13412 Return structures smaller than 8 bytes in registers (as specified by the
13413 \&\s-1SVR4\s0 \s-1ABI\s0).
13414 .IP "\fB\-mabi=\fR\fIabi-type\fR" 4
13415 .IX Item "-mabi=abi-type"
13416 Extend the current \s-1ABI\s0 with a particular extension, or remove such extension.
13417 Valid values are \fIaltivec\fR, \fIno-altivec\fR, \fIspe\fR,
13418 \&\fIno-spe\fR, \fIibmlongdouble\fR, \fIieeelongdouble\fR.
13419 .IP "\fB\-mabi=spe\fR" 4
13420 .IX Item "-mabi=spe"
13421 Extend the current \s-1ABI\s0 with \s-1SPE\s0 \s-1ABI\s0 extensions.  This does not change
13422 the default \s-1ABI\s0, instead it adds the \s-1SPE\s0 \s-1ABI\s0 extensions to the current
13423 \&\s-1ABI\s0.
13424 .IP "\fB\-mabi=no\-spe\fR" 4
13425 .IX Item "-mabi=no-spe"
13426 Disable Booke \s-1SPE\s0 \s-1ABI\s0 extensions for the current \s-1ABI\s0.
13427 .IP "\fB\-mabi=ibmlongdouble\fR" 4
13428 .IX Item "-mabi=ibmlongdouble"
13429 Change the current \s-1ABI\s0 to use \s-1IBM\s0 extended precision long double.
13430 This is a PowerPC 32\-bit \s-1SYSV\s0 \s-1ABI\s0 option.
13431 .IP "\fB\-mabi=ieeelongdouble\fR" 4
13432 .IX Item "-mabi=ieeelongdouble"
13433 Change the current \s-1ABI\s0 to use \s-1IEEE\s0 extended precision long double.
13434 This is a PowerPC 32\-bit Linux \s-1ABI\s0 option.
13435 .IP "\fB\-mprototype\fR" 4
13436 .IX Item "-mprototype"
13437 .PD 0
13438 .IP "\fB\-mno\-prototype\fR" 4
13439 .IX Item "-mno-prototype"
13440 .PD
13441 On System V.4 and embedded PowerPC systems assume that all calls to
13442 variable argument functions are properly prototyped.  Otherwise, the
13443 compiler must insert an instruction before every non prototyped call to
13444 set or clear bit 6 of the condition code register (\fI\s-1CR\s0\fR) to
13445 indicate whether floating point values were passed in the floating point
13446 registers in case the function takes a variable arguments.  With
13447 \&\fB\-mprototype\fR, only calls to prototyped variable argument functions
13448 will set or clear the bit.
13449 .IP "\fB\-msim\fR" 4
13450 .IX Item "-msim"
13451 On embedded PowerPC systems, assume that the startup module is called
13452 \&\fIsim\-crt0.o\fR and that the standard C libraries are \fIlibsim.a\fR and
13453 \&\fIlibc.a\fR.  This is the default for \fBpowerpc\-*\-eabisim\fR
13454 configurations.
13455 .IP "\fB\-mmvme\fR" 4
13456 .IX Item "-mmvme"
13457 On embedded PowerPC systems, assume that the startup module is called
13458 \&\fIcrt0.o\fR and the standard C libraries are \fIlibmvme.a\fR and
13459 \&\fIlibc.a\fR.
13460 .IP "\fB\-mads\fR" 4
13461 .IX Item "-mads"
13462 On embedded PowerPC systems, assume that the startup module is called
13463 \&\fIcrt0.o\fR and the standard C libraries are \fIlibads.a\fR and
13464 \&\fIlibc.a\fR.
13465 .IP "\fB\-myellowknife\fR" 4
13466 .IX Item "-myellowknife"
13467 On embedded PowerPC systems, assume that the startup module is called
13468 \&\fIcrt0.o\fR and the standard C libraries are \fIlibyk.a\fR and
13469 \&\fIlibc.a\fR.
13470 .IP "\fB\-mvxworks\fR" 4
13471 .IX Item "-mvxworks"
13472 On System V.4 and embedded PowerPC systems, specify that you are
13473 compiling for a VxWorks system.
13474 .IP "\fB\-memb\fR" 4
13475 .IX Item "-memb"
13476 On embedded PowerPC systems, set the \fI\s-1PPC_EMB\s0\fR bit in the \s-1ELF\s0 flags
13477 header to indicate that \fBeabi\fR extended relocations are used.
13478 .IP "\fB\-meabi\fR" 4
13479 .IX Item "-meabi"
13480 .PD 0
13481 .IP "\fB\-mno\-eabi\fR" 4
13482 .IX Item "-mno-eabi"
13483 .PD
13484 On System V.4 and embedded PowerPC systems do (do not) adhere to the
13485 Embedded Applications Binary Interface (eabi) which is a set of
13486 modifications to the System V.4 specifications.  Selecting \fB\-meabi\fR
13487 means that the stack is aligned to an 8 byte boundary, a function
13488 \&\f(CW\*(C`_\|_eabi\*(C'\fR is called to from \f(CW\*(C`main\*(C'\fR to set up the eabi
13489 environment, and the \fB\-msdata\fR option can use both \f(CW\*(C`r2\*(C'\fR and
13490 \&\f(CW\*(C`r13\*(C'\fR to point to two separate small data areas.  Selecting
13491 \&\fB\-mno\-eabi\fR means that the stack is aligned to a 16 byte boundary,
13492 do not call an initialization function from \f(CW\*(C`main\*(C'\fR, and the
13493 \&\fB\-msdata\fR option will only use \f(CW\*(C`r13\*(C'\fR to point to a single
13494 small data area.  The \fB\-meabi\fR option is on by default if you
13495 configured \s-1GCC\s0 using one of the \fBpowerpc*\-*\-eabi*\fR options.
13496 .IP "\fB\-msdata=eabi\fR" 4
13497 .IX Item "-msdata=eabi"
13498 On System V.4 and embedded PowerPC systems, put small initialized
13499 \&\f(CW\*(C`const\*(C'\fR global and static data in the \fB.sdata2\fR section, which
13500 is pointed to by register \f(CW\*(C`r2\*(C'\fR.  Put small initialized
13501 non\-\f(CW\*(C`const\*(C'\fR global and static data in the \fB.sdata\fR section,
13502 which is pointed to by register \f(CW\*(C`r13\*(C'\fR.  Put small uninitialized
13503 global and static data in the \fB.sbss\fR section, which is adjacent to
13504 the \fB.sdata\fR section.  The \fB\-msdata=eabi\fR option is
13505 incompatible with the \fB\-mrelocatable\fR option.  The
13506 \&\fB\-msdata=eabi\fR option also sets the \fB\-memb\fR option.
13507 .IP "\fB\-msdata=sysv\fR" 4
13508 .IX Item "-msdata=sysv"
13509 On System V.4 and embedded PowerPC systems, put small global and static
13510 data in the \fB.sdata\fR section, which is pointed to by register
13511 \&\f(CW\*(C`r13\*(C'\fR.  Put small uninitialized global and static data in the
13512 \&\fB.sbss\fR section, which is adjacent to the \fB.sdata\fR section.
13513 The \fB\-msdata=sysv\fR option is incompatible with the
13514 \&\fB\-mrelocatable\fR option.
13515 .IP "\fB\-msdata=default\fR" 4
13516 .IX Item "-msdata=default"
13517 .PD 0
13518 .IP "\fB\-msdata\fR" 4
13519 .IX Item "-msdata"
13520 .PD
13521 On System V.4 and embedded PowerPC systems, if \fB\-meabi\fR is used,
13522 compile code the same as \fB\-msdata=eabi\fR, otherwise compile code the
13523 same as \fB\-msdata=sysv\fR.
13524 .IP "\fB\-msdata=data\fR" 4
13525 .IX Item "-msdata=data"
13526 On System V.4 and embedded PowerPC systems, put small global
13527 data in the \fB.sdata\fR section.  Put small uninitialized global
13528 data in the \fB.sbss\fR section.  Do not use register \f(CW\*(C`r13\*(C'\fR
13529 to address small data however.  This is the default behavior unless
13530 other \fB\-msdata\fR options are used.
13531 .IP "\fB\-msdata=none\fR" 4
13532 .IX Item "-msdata=none"
13533 .PD 0
13534 .IP "\fB\-mno\-sdata\fR" 4
13535 .IX Item "-mno-sdata"
13536 .PD
13537 On embedded PowerPC systems, put all initialized global and static data
13538 in the \fB.data\fR section, and all uninitialized data in the
13539 \&\fB.bss\fR section.
13540 .IP "\fB\-G\fR \fInum\fR" 4
13541 .IX Item "-G num"
13542 On embedded PowerPC systems, put global and static items less than or
13543 equal to \fInum\fR bytes into the small data or bss sections instead of
13544 the normal data or bss section.  By default, \fInum\fR is 8.  The
13545 \&\fB\-G\fR \fInum\fR switch is also passed to the linker.
13546 All modules should be compiled with the same \fB\-G\fR \fInum\fR value.
13547 .IP "\fB\-mregnames\fR" 4
13548 .IX Item "-mregnames"
13549 .PD 0
13550 .IP "\fB\-mno\-regnames\fR" 4
13551 .IX Item "-mno-regnames"
13552 .PD
13553 On System V.4 and embedded PowerPC systems do (do not) emit register
13554 names in the assembly language output using symbolic forms.
13555 .IP "\fB\-mlongcall\fR" 4
13556 .IX Item "-mlongcall"
13557 .PD 0
13558 .IP "\fB\-mno\-longcall\fR" 4
13559 .IX Item "-mno-longcall"
13560 .PD
13561 By default assume that all calls are far away so that a longer more
13562 expensive calling sequence is required.  This is required for calls
13563 further than 32 megabytes (33,554,432 bytes) from the current location.
13564 A short call will be generated if the compiler knows
13565 the call cannot be that far away.  This setting can be overridden by
13566 the \f(CW\*(C`shortcall\*(C'\fR function attribute, or by \f(CW\*(C`#pragma
13567 longcall(0)\*(C'\fR.
13568 .Sp
13569 Some linkers are capable of detecting out-of-range calls and generating
13570 glue code on the fly.  On these systems, long calls are unnecessary and
13571 generate slower code.  As of this writing, the \s-1AIX\s0 linker can do this,
13572 as can the \s-1GNU\s0 linker for PowerPC/64.  It is planned to add this feature
13573 to the \s-1GNU\s0 linker for 32\-bit PowerPC systems as well.
13574 .Sp
13575 On Darwin/PPC systems, \f(CW\*(C`#pragma longcall\*(C'\fR will generate \*(L"jbsr
13576 callee, L42\*(R", plus a \*(L"branch island\*(R" (glue code).  The two target
13577 addresses represent the callee and the \*(L"branch island\*(R".  The
13578 Darwin/PPC linker will prefer the first address and generate a \*(L"bl
13579 callee\*(R" if the \s-1PPC\s0 \*(L"bl\*(R" instruction will reach the callee directly;
13580 otherwise, the linker will generate \*(L"bl L42\*(R" to call the \*(L"branch
13581 island\*(R".  The \*(L"branch island\*(R" is appended to the body of the
13582 calling function; it computes the full 32\-bit address of the callee
13583 and jumps to it.
13584 .Sp
13585 On Mach-O (Darwin) systems, this option directs the compiler emit to
13586 the glue for every direct call, and the Darwin linker decides whether
13587 to use or discard it.
13588 .Sp
13589 In the future, we may cause \s-1GCC\s0 to ignore all longcall specifications
13590 when the linker is known to generate glue.
13591 .IP "\fB\-pthread\fR" 4
13592 .IX Item "-pthread"
13593 Adds support for multithreading with the \fIpthreads\fR library.
13594 This option sets flags for both the preprocessor and linker.
13595 .PP
13596 \fIS/390 and zSeries Options\fR
13597 .IX Subsection "S/390 and zSeries Options"
13598 .PP
13599 These are the \fB\-m\fR options defined for the S/390 and zSeries architecture.
13600 .IP "\fB\-mhard\-float\fR" 4
13601 .IX Item "-mhard-float"
13602 .PD 0
13603 .IP "\fB\-msoft\-float\fR" 4
13604 .IX Item "-msoft-float"
13605 .PD
13606 Use (do not use) the hardware floating-point instructions and registers
13607 for floating-point operations.  When \fB\-msoft\-float\fR is specified,
13608 functions in \fIlibgcc.a\fR will be used to perform floating-point
13609 operations.  When \fB\-mhard\-float\fR is specified, the compiler
13610 generates \s-1IEEE\s0 floating-point instructions.  This is the default.
13611 .IP "\fB\-mhard\-dfp\fR" 4
13612 .IX Item "-mhard-dfp"
13613 .PD 0
13614 .IP "\fB\-mno\-hard\-dfp\fR" 4
13615 .IX Item "-mno-hard-dfp"
13616 .PD
13617 Use (do not use) the hardware decimal-floating-point instructions for
13618 decimal-floating-point operations.  When \fB\-mno\-hard\-dfp\fR is
13619 specified, functions in \fIlibgcc.a\fR will be used to perform
13620 decimal-floating-point operations.  When \fB\-mhard\-dfp\fR is
13621 specified, the compiler generates decimal-floating-point hardware
13622 instructions.  This is the default for \fB\-march=z9\-ec\fR or higher.
13623 .IP "\fB\-mlong\-double\-64\fR" 4
13624 .IX Item "-mlong-double-64"
13625 .PD 0
13626 .IP "\fB\-mlong\-double\-128\fR" 4
13627 .IX Item "-mlong-double-128"
13628 .PD
13629 These switches control the size of \f(CW\*(C`long double\*(C'\fR type. A size
13630 of 64bit makes the \f(CW\*(C`long double\*(C'\fR type equivalent to the \f(CW\*(C`double\*(C'\fR
13631 type. This is the default.
13632 .IP "\fB\-mbackchain\fR" 4
13633 .IX Item "-mbackchain"
13634 .PD 0
13635 .IP "\fB\-mno\-backchain\fR" 4
13636 .IX Item "-mno-backchain"
13637 .PD
13638 Store (do not store) the address of the caller's frame as backchain pointer
13639 into the callee's stack frame.
13640 A backchain may be needed to allow debugging using tools that do not understand
13641 \&\s-1DWARF\-2\s0 call frame information.
13642 When \fB\-mno\-packed\-stack\fR is in effect, the backchain pointer is stored
13643 at the bottom of the stack frame; when \fB\-mpacked\-stack\fR is in effect,
13644 the backchain is placed into the topmost word of the 96/160 byte register
13645 save area.
13646 .Sp
13647 In general, code compiled with \fB\-mbackchain\fR is call-compatible with
13648 code compiled with \fB\-mmo\-backchain\fR; however, use of the backchain
13649 for debugging purposes usually requires that the whole binary is built with
13650 \&\fB\-mbackchain\fR.  Note that the combination of \fB\-mbackchain\fR,
13651 \&\fB\-mpacked\-stack\fR and \fB\-mhard\-float\fR is not supported.  In order
13652 to build a linux kernel use \fB\-msoft\-float\fR.
13653 .Sp
13654 The default is to not maintain the backchain.
13655 .IP "\fB\-mpacked\-stack\fR" 4
13656 .IX Item "-mpacked-stack"
13657 .PD 0
13658 .IP "\fB\-mno\-packed\-stack\fR" 4
13659 .IX Item "-mno-packed-stack"
13660 .PD
13661 Use (do not use) the packed stack layout.  When \fB\-mno\-packed\-stack\fR is
13662 specified, the compiler uses the all fields of the 96/160 byte register save
13663 area only for their default purpose; unused fields still take up stack space.
13664 When \fB\-mpacked\-stack\fR is specified, register save slots are densely
13665 packed at the top of the register save area; unused space is reused for other
13666 purposes, allowing for more efficient use of the available stack space.
13667 However, when \fB\-mbackchain\fR is also in effect, the topmost word of
13668 the save area is always used to store the backchain, and the return address
13669 register is always saved two words below the backchain.
13670 .Sp
13671 As long as the stack frame backchain is not used, code generated with
13672 \&\fB\-mpacked\-stack\fR is call-compatible with code generated with
13673 \&\fB\-mno\-packed\-stack\fR.  Note that some non-FSF releases of \s-1GCC\s0 2.95 for
13674 S/390 or zSeries generated code that uses the stack frame backchain at run
13675 time, not just for debugging purposes.  Such code is not call-compatible
13676 with code compiled with \fB\-mpacked\-stack\fR.  Also, note that the
13677 combination of \fB\-mbackchain\fR,
13678 \&\fB\-mpacked\-stack\fR and \fB\-mhard\-float\fR is not supported.  In order
13679 to build a linux kernel use \fB\-msoft\-float\fR.
13680 .Sp
13681 The default is to not use the packed stack layout.
13682 .IP "\fB\-msmall\-exec\fR" 4
13683 .IX Item "-msmall-exec"
13684 .PD 0
13685 .IP "\fB\-mno\-small\-exec\fR" 4
13686 .IX Item "-mno-small-exec"
13687 .PD
13688 Generate (or do not generate) code using the \f(CW\*(C`bras\*(C'\fR instruction
13689 to do subroutine calls.
13690 This only works reliably if the total executable size does not
13691 exceed 64k.  The default is to use the \f(CW\*(C`basr\*(C'\fR instruction instead,
13692 which does not have this limitation.
13693 .IP "\fB\-m64\fR" 4
13694 .IX Item "-m64"
13695 .PD 0
13696 .IP "\fB\-m31\fR" 4
13697 .IX Item "-m31"
13698 .PD
13699 When \fB\-m31\fR is specified, generate code compliant to the
13700 GNU/Linux for S/390 \s-1ABI\s0.  When \fB\-m64\fR is specified, generate
13701 code compliant to the GNU/Linux for zSeries \s-1ABI\s0.  This allows \s-1GCC\s0 in
13702 particular to generate 64\-bit instructions.  For the \fBs390\fR
13703 targets, the default is \fB\-m31\fR, while the \fBs390x\fR
13704 targets default to \fB\-m64\fR.
13705 .IP "\fB\-mzarch\fR" 4
13706 .IX Item "-mzarch"
13707 .PD 0
13708 .IP "\fB\-mesa\fR" 4
13709 .IX Item "-mesa"
13710 .PD
13711 When \fB\-mzarch\fR is specified, generate code using the
13712 instructions available on z/Architecture.
13713 When \fB\-mesa\fR is specified, generate code using the
13714 instructions available on \s-1ESA/390\s0.  Note that \fB\-mesa\fR is
13715 not possible with \fB\-m64\fR.
13716 When generating code compliant to the GNU/Linux for S/390 \s-1ABI\s0,
13717 the default is \fB\-mesa\fR.  When generating code compliant
13718 to the GNU/Linux for zSeries \s-1ABI\s0, the default is \fB\-mzarch\fR.
13719 .IP "\fB\-mmvcle\fR" 4
13720 .IX Item "-mmvcle"
13721 .PD 0
13722 .IP "\fB\-mno\-mvcle\fR" 4
13723 .IX Item "-mno-mvcle"
13724 .PD
13725 Generate (or do not generate) code using the \f(CW\*(C`mvcle\*(C'\fR instruction
13726 to perform block moves.  When \fB\-mno\-mvcle\fR is specified,
13727 use a \f(CW\*(C`mvc\*(C'\fR loop instead.  This is the default unless optimizing for
13728 size.
13729 .IP "\fB\-mdebug\fR" 4
13730 .IX Item "-mdebug"
13731 .PD 0
13732 .IP "\fB\-mno\-debug\fR" 4
13733 .IX Item "-mno-debug"
13734 .PD
13735 Print (or do not print) additional debug information when compiling.
13736 The default is to not print debug information.
13737 .IP "\fB\-march=\fR\fIcpu-type\fR" 4
13738 .IX Item "-march=cpu-type"
13739 Generate code that will run on \fIcpu-type\fR, which is the name of a system
13740 representing a certain processor type.  Possible values for
13741 \&\fIcpu-type\fR are \fBg5\fR, \fBg6\fR, \fBz900\fR, \fBz990\fR,
13742 \&\fBz9\-109\fR, \fBz9\-ec\fR and \fBz10\fR.
13743 When generating code using the instructions available on z/Architecture,
13744 the default is \fB\-march=z900\fR.  Otherwise, the default is
13745 \&\fB\-march=g5\fR.
13746 .IP "\fB\-mtune=\fR\fIcpu-type\fR" 4
13747 .IX Item "-mtune=cpu-type"
13748 Tune to \fIcpu-type\fR everything applicable about the generated code,
13749 except for the \s-1ABI\s0 and the set of available instructions.
13750 The list of \fIcpu-type\fR values is the same as for \fB\-march\fR.
13751 The default is the value used for \fB\-march\fR.
13752 .IP "\fB\-mtpf\-trace\fR" 4
13753 .IX Item "-mtpf-trace"
13754 .PD 0
13755 .IP "\fB\-mno\-tpf\-trace\fR" 4
13756 .IX Item "-mno-tpf-trace"
13757 .PD
13758 Generate code that adds (does not add) in \s-1TPF\s0 \s-1OS\s0 specific branches to trace
13759 routines in the operating system.  This option is off by default, even
13760 when compiling for the \s-1TPF\s0 \s-1OS\s0.
13761 .IP "\fB\-mfused\-madd\fR" 4
13762 .IX Item "-mfused-madd"
13763 .PD 0
13764 .IP "\fB\-mno\-fused\-madd\fR" 4
13765 .IX Item "-mno-fused-madd"
13766 .PD
13767 Generate code that uses (does not use) the floating point multiply and
13768 accumulate instructions.  These instructions are generated by default if
13769 hardware floating point is used.
13770 .IP "\fB\-mwarn\-framesize=\fR\fIframesize\fR" 4
13771 .IX Item "-mwarn-framesize=framesize"
13772 Emit a warning if the current function exceeds the given frame size.  Because
13773 this is a compile time check it doesn't need to be a real problem when the program
13774 runs.  It is intended to identify functions which most probably cause
13775 a stack overflow.  It is useful to be used in an environment with limited stack
13776 size e.g. the linux kernel.
13777 .IP "\fB\-mwarn\-dynamicstack\fR" 4
13778 .IX Item "-mwarn-dynamicstack"
13779 Emit a warning if the function calls alloca or uses dynamically
13780 sized arrays.  This is generally a bad idea with a limited stack size.
13781 .IP "\fB\-mstack\-guard=\fR\fIstack-guard\fR" 4
13782 .IX Item "-mstack-guard=stack-guard"
13783 .PD 0
13784 .IP "\fB\-mstack\-size=\fR\fIstack-size\fR" 4
13785 .IX Item "-mstack-size=stack-size"
13786 .PD
13787 If these options are provided the s390 back end emits additional instructions in
13788 the function prologue which trigger a trap if the stack size is \fIstack-guard\fR
13789 bytes above the \fIstack-size\fR (remember that the stack on s390 grows downward).
13790 If the \fIstack-guard\fR option is omitted the smallest power of 2 larger than
13791 the frame size of the compiled function is chosen.
13792 These options are intended to be used to help debugging stack overflow problems.
13793 The additionally emitted code causes only little overhead and hence can also be
13794 used in production like systems without greater performance degradation.  The given
13795 values have to be exact powers of 2 and \fIstack-size\fR has to be greater than
13796 \&\fIstack-guard\fR without exceeding 64k.
13797 In order to be efficient the extra code makes the assumption that the stack starts
13798 at an address aligned to the value given by \fIstack-size\fR.
13799 The \fIstack-guard\fR option can only be used in conjunction with \fIstack-size\fR.
13800 .PP
13801 \fIScore Options\fR
13802 .IX Subsection "Score Options"
13803 .PP
13804 These options are defined for Score implementations:
13805 .IP "\fB\-meb\fR" 4
13806 .IX Item "-meb"
13807 Compile code for big endian mode.  This is the default.
13808 .IP "\fB\-mel\fR" 4
13809 .IX Item "-mel"
13810 Compile code for little endian mode. 
13811 .IP "\fB\-mnhwloop\fR" 4
13812 .IX Item "-mnhwloop"
13813 Disable generate bcnz instruction.
13814 .IP "\fB\-muls\fR" 4
13815 .IX Item "-muls"
13816 Enable generate unaligned load and store instruction.
13817 .IP "\fB\-mmac\fR" 4
13818 .IX Item "-mmac"
13819 Enable the use of multiply-accumulate instructions. Disabled by default. 
13820 .IP "\fB\-mscore5\fR" 4
13821 .IX Item "-mscore5"
13822 Specify the \s-1SCORE5\s0 as the target architecture.
13823 .IP "\fB\-mscore5u\fR" 4
13824 .IX Item "-mscore5u"
13825 Specify the \s-1SCORE5U\s0 of the target architecture.
13826 .IP "\fB\-mscore7\fR" 4
13827 .IX Item "-mscore7"
13828 Specify the \s-1SCORE7\s0 as the target architecture. This is the default.
13829 .IP "\fB\-mscore7d\fR" 4
13830 .IX Item "-mscore7d"
13831 Specify the \s-1SCORE7D\s0 as the target architecture.
13832 .PP
13833 \fI\s-1SH\s0 Options\fR
13834 .IX Subsection "SH Options"
13835 .PP
13836 These \fB\-m\fR options are defined for the \s-1SH\s0 implementations:
13837 .IP "\fB\-m1\fR" 4
13838 .IX Item "-m1"
13839 Generate code for the \s-1SH1\s0.
13840 .IP "\fB\-m2\fR" 4
13841 .IX Item "-m2"
13842 Generate code for the \s-1SH2\s0.
13843 .IP "\fB\-m2e\fR" 4
13844 .IX Item "-m2e"
13845 Generate code for the SH2e.
13846 .IP "\fB\-m3\fR" 4
13847 .IX Item "-m3"
13848 Generate code for the \s-1SH3\s0.
13849 .IP "\fB\-m3e\fR" 4
13850 .IX Item "-m3e"
13851 Generate code for the SH3e.
13852 .IP "\fB\-m4\-nofpu\fR" 4
13853 .IX Item "-m4-nofpu"
13854 Generate code for the \s-1SH4\s0 without a floating-point unit.
13855 .IP "\fB\-m4\-single\-only\fR" 4
13856 .IX Item "-m4-single-only"
13857 Generate code for the \s-1SH4\s0 with a floating-point unit that only
13858 supports single-precision arithmetic.
13859 .IP "\fB\-m4\-single\fR" 4
13860 .IX Item "-m4-single"
13861 Generate code for the \s-1SH4\s0 assuming the floating-point unit is in
13862 single-precision mode by default.
13863 .IP "\fB\-m4\fR" 4
13864 .IX Item "-m4"
13865 Generate code for the \s-1SH4\s0.
13866 .IP "\fB\-m4a\-nofpu\fR" 4
13867 .IX Item "-m4a-nofpu"
13868 Generate code for the SH4al\-dsp, or for a SH4a in such a way that the
13869 floating-point unit is not used.
13870 .IP "\fB\-m4a\-single\-only\fR" 4
13871 .IX Item "-m4a-single-only"
13872 Generate code for the SH4a, in such a way that no double-precision
13873 floating point operations are used.
13874 .IP "\fB\-m4a\-single\fR" 4
13875 .IX Item "-m4a-single"
13876 Generate code for the SH4a assuming the floating-point unit is in
13877 single-precision mode by default.
13878 .IP "\fB\-m4a\fR" 4
13879 .IX Item "-m4a"
13880 Generate code for the SH4a.
13881 .IP "\fB\-m4al\fR" 4
13882 .IX Item "-m4al"
13883 Same as \fB\-m4a\-nofpu\fR, except that it implicitly passes
13884 \&\fB\-dsp\fR to the assembler.  \s-1GCC\s0 doesn't generate any \s-1DSP\s0
13885 instructions at the moment.
13886 .IP "\fB\-mb\fR" 4
13887 .IX Item "-mb"
13888 Compile code for the processor in big endian mode.
13889 .IP "\fB\-ml\fR" 4
13890 .IX Item "-ml"
13891 Compile code for the processor in little endian mode.
13892 .IP "\fB\-mdalign\fR" 4
13893 .IX Item "-mdalign"
13894 Align doubles at 64\-bit boundaries.  Note that this changes the calling
13895 conventions, and thus some functions from the standard C library will
13896 not work unless you recompile it first with \fB\-mdalign\fR.
13897 .IP "\fB\-mrelax\fR" 4
13898 .IX Item "-mrelax"
13899 Shorten some address references at link time, when possible; uses the
13900 linker option \fB\-relax\fR.
13901 .IP "\fB\-mbigtable\fR" 4
13902 .IX Item "-mbigtable"
13903 Use 32\-bit offsets in \f(CW\*(C`switch\*(C'\fR tables.  The default is to use
13904 16\-bit offsets.
13905 .IP "\fB\-mbitops\fR" 4
13906 .IX Item "-mbitops"
13907 Enable the use of bit manipulation instructions on \s-1SH2A\s0.
13908 .IP "\fB\-mfmovd\fR" 4
13909 .IX Item "-mfmovd"
13910 Enable the use of the instruction \f(CW\*(C`fmovd\*(C'\fR.
13911 .IP "\fB\-mhitachi\fR" 4
13912 .IX Item "-mhitachi"
13913 Comply with the calling conventions defined by Renesas.
13914 .IP "\fB\-mrenesas\fR" 4
13915 .IX Item "-mrenesas"
13916 Comply with the calling conventions defined by Renesas.
13917 .IP "\fB\-mno\-renesas\fR" 4
13918 .IX Item "-mno-renesas"
13919 Comply with the calling conventions defined for \s-1GCC\s0 before the Renesas
13920 conventions were available.  This option is the default for all
13921 targets of the \s-1SH\s0 toolchain except for \fBsh-symbianelf\fR.
13922 .IP "\fB\-mnomacsave\fR" 4
13923 .IX Item "-mnomacsave"
13924 Mark the \f(CW\*(C`MAC\*(C'\fR register as call\-clobbered, even if
13925 \&\fB\-mhitachi\fR is given.
13926 .IP "\fB\-mieee\fR" 4
13927 .IX Item "-mieee"
13928 Increase IEEE-compliance of floating-point code.
13929 At the moment, this is equivalent to \fB\-fno\-finite\-math\-only\fR.
13930 When generating 16 bit \s-1SH\s0 opcodes, getting IEEE-conforming results for
13931 comparisons of NANs / infinities incurs extra overhead in every
13932 floating point comparison, therefore the default is set to
13933 \&\fB\-ffinite\-math\-only\fR.
13934 .IP "\fB\-minline\-ic_invalidate\fR" 4
13935 .IX Item "-minline-ic_invalidate"
13936 Inline code to invalidate instruction cache entries after setting up
13937 nested function trampolines.
13938 This option has no effect if \-musermode is in effect and the selected
13939 code generation option (e.g. \-m4) does not allow the use of the icbi
13940 instruction.
13941 If the selected code generation option does not allow the use of the icbi
13942 instruction, and \-musermode is not in effect, the inlined code will
13943 manipulate the instruction cache address array directly with an associative
13944 write.  This not only requires privileged mode, but it will also
13945 fail if the cache line had been mapped via the \s-1TLB\s0 and has become unmapped.
13946 .IP "\fB\-misize\fR" 4
13947 .IX Item "-misize"
13948 Dump instruction size and location in the assembly code.
13949 .IP "\fB\-mpadstruct\fR" 4
13950 .IX Item "-mpadstruct"
13951 This option is deprecated.  It pads structures to multiple of 4 bytes,
13952 which is incompatible with the \s-1SH\s0 \s-1ABI\s0.
13953 .IP "\fB\-mspace\fR" 4
13954 .IX Item "-mspace"
13955 Optimize for space instead of speed.  Implied by \fB\-Os\fR.
13956 .IP "\fB\-mprefergot\fR" 4
13957 .IX Item "-mprefergot"
13958 When generating position-independent code, emit function calls using
13959 the Global Offset Table instead of the Procedure Linkage Table.
13960 .IP "\fB\-musermode\fR" 4
13961 .IX Item "-musermode"
13962 Don't generate privileged mode only code; implies \-mno\-inline\-ic_invalidate
13963 if the inlined code would not work in user mode.
13964 This is the default when the target is \f(CW\*(C`sh\-*\-linux*\*(C'\fR.
13965 .IP "\fB\-multcost=\fR\fInumber\fR" 4
13966 .IX Item "-multcost=number"
13967 Set the cost to assume for a multiply insn.
13968 .IP "\fB\-mdiv=\fR\fIstrategy\fR" 4
13969 .IX Item "-mdiv=strategy"
13970 Set the division strategy to use for SHmedia code.  \fIstrategy\fR must be
13971 one of: call, call2, fp, inv, inv:minlat, inv20u, inv20l, inv:call,
13972 inv:call2, inv:fp .
13973 \&\*(L"fp\*(R" performs the operation in floating point.  This has a very high latency,
13974 but needs only a few instructions, so it might be a good choice if
13975 your code has enough easily exploitable \s-1ILP\s0 to allow the compiler to
13976 schedule the floating point instructions together with other instructions.
13977 Division by zero causes a floating point exception.
13978 \&\*(L"inv\*(R" uses integer operations to calculate the inverse of the divisor,
13979 and then multiplies the dividend with the inverse.  This strategy allows
13980 cse and hoisting of the inverse calculation.  Division by zero calculates
13981 an unspecified result, but does not trap.
13982 \&\*(L"inv:minlat\*(R" is a variant of \*(L"inv\*(R" where if no cse / hoisting opportunities
13983 have been found, or if the entire operation has been hoisted to the same
13984 place, the last stages of the inverse calculation are intertwined with the
13985 final multiply to reduce the overall latency, at the expense of using a few
13986 more instructions, and thus offering fewer scheduling opportunities with
13987 other code.
13988 \&\*(L"call\*(R" calls a library function that usually implements the inv:minlat
13989 strategy.
13990 This gives high code density for m5\-*media\-nofpu compilations.
13991 \&\*(L"call2\*(R" uses a different entry point of the same library function, where it
13992 assumes that a pointer to a lookup table has already been set up, which
13993 exposes the pointer load to cse / code hoisting optimizations.
13994 \&\*(L"inv:call\*(R", \*(L"inv:call2\*(R" and \*(L"inv:fp\*(R" all use the \*(L"inv\*(R" algorithm for initial
13995 code generation, but if the code stays unoptimized, revert to the \*(L"call\*(R",
13996 \&\*(L"call2\*(R", or \*(L"fp\*(R" strategies, respectively.  Note that the
13997 potentially-trapping side effect of division by zero is carried by a
13998 separate instruction, so it is possible that all the integer instructions
13999 are hoisted out, but the marker for the side effect stays where it is.
14000 A recombination to fp operations or a call is not possible in that case.
14001 \&\*(L"inv20u\*(R" and \*(L"inv20l\*(R" are variants of the \*(L"inv:minlat\*(R" strategy.  In the case
14002 that the inverse calculation was nor separated from the multiply, they speed
14003 up division where the dividend fits into 20 bits (plus sign where applicable),
14004 by inserting a test to skip a number of operations in this case; this test
14005 slows down the case of larger dividends.  inv20u assumes the case of a such
14006 a small dividend to be unlikely, and inv20l assumes it to be likely.
14007 .IP "\fB\-mdivsi3_libfunc=\fR\fIname\fR" 4
14008 .IX Item "-mdivsi3_libfunc=name"
14009 Set the name of the library function used for 32 bit signed division to
14010 \&\fIname\fR.  This only affect the name used in the call and inv:call
14011 division strategies, and the compiler will still expect the same
14012 sets of input/output/clobbered registers as if this option was not present.
14013 .IP "\fB\-mfixed\-range=\fR\fIregister-range\fR" 4
14014 .IX Item "-mfixed-range=register-range"
14015 Generate code treating the given register range as fixed registers.
14016 A fixed register is one that the register allocator can not use.  This is
14017 useful when compiling kernel code.  A register range is specified as
14018 two registers separated by a dash.  Multiple register ranges can be
14019 specified separated by a comma.
14020 .IP "\fB\-madjust\-unroll\fR" 4
14021 .IX Item "-madjust-unroll"
14022 Throttle unrolling to avoid thrashing target registers.
14023 This option only has an effect if the gcc code base supports the
14024 \&\s-1TARGET_ADJUST_UNROLL_MAX\s0 target hook.
14025 .IP "\fB\-mindexed\-addressing\fR" 4
14026 .IX Item "-mindexed-addressing"
14027 Enable the use of the indexed addressing mode for SHmedia32/SHcompact.
14028 This is only safe if the hardware and/or \s-1OS\s0 implement 32 bit wrap-around
14029 semantics for the indexed addressing mode.  The architecture allows the
14030 implementation of processors with 64 bit \s-1MMU\s0, which the \s-1OS\s0 could use to
14031 get 32 bit addressing, but since no current hardware implementation supports
14032 this or any other way to make the indexed addressing mode safe to use in
14033 the 32 bit \s-1ABI\s0, the default is \-mno\-indexed\-addressing.
14034 .IP "\fB\-mgettrcost=\fR\fInumber\fR" 4
14035 .IX Item "-mgettrcost=number"
14036 Set the cost assumed for the gettr instruction to \fInumber\fR.
14037 The default is 2 if \fB\-mpt\-fixed\fR is in effect, 100 otherwise.
14038 .IP "\fB\-mpt\-fixed\fR" 4
14039 .IX Item "-mpt-fixed"
14040 Assume pt* instructions won't trap.  This will generally generate better
14041 scheduled code, but is unsafe on current hardware.  The current architecture
14042 definition says that ptabs and ptrel trap when the target anded with 3 is 3.
14043 This has the unintentional effect of making it unsafe to schedule ptabs /
14044 ptrel before a branch, or hoist it out of a loop.  For example,
14045 _\|_do_global_ctors, a part of libgcc that runs constructors at program
14046 startup, calls functions in a list which is delimited by \-1.  With the
14047 \&\-mpt\-fixed option, the ptabs will be done before testing against \-1.
14048 That means that all the constructors will be run a bit quicker, but when
14049 the loop comes to the end of the list, the program crashes because ptabs
14050 loads \-1 into a target register.  Since this option is unsafe for any
14051 hardware implementing the current architecture specification, the default
14052 is \-mno\-pt\-fixed.  Unless the user specifies a specific cost with
14053 \&\fB\-mgettrcost\fR, \-mno\-pt\-fixed also implies \fB\-mgettrcost=100\fR;
14054 this deters register allocation using target registers for storing
14055 ordinary integers.
14056 .IP "\fB\-minvalid\-symbols\fR" 4
14057 .IX Item "-minvalid-symbols"
14058 Assume symbols might be invalid.  Ordinary function symbols generated by
14059 the compiler will always be valid to load with movi/shori/ptabs or
14060 movi/shori/ptrel, but with assembler and/or linker tricks it is possible
14061 to generate symbols that will cause ptabs / ptrel to trap.
14062 This option is only meaningful when \fB\-mno\-pt\-fixed\fR is in effect.
14063 It will then prevent cross-basic-block cse, hoisting and most scheduling
14064 of symbol loads.  The default is \fB\-mno\-invalid\-symbols\fR.
14065 .PP
14066 \fI\s-1SPARC\s0 Options\fR
14067 .IX Subsection "SPARC Options"
14068 .PP
14069 These \fB\-m\fR options are supported on the \s-1SPARC:\s0
14070 .IP "\fB\-mno\-app\-regs\fR" 4
14071 .IX Item "-mno-app-regs"
14072 .PD 0
14073 .IP "\fB\-mapp\-regs\fR" 4
14074 .IX Item "-mapp-regs"
14075 .PD
14076 Specify \fB\-mapp\-regs\fR to generate output using the global registers
14077 2 through 4, which the \s-1SPARC\s0 \s-1SVR4\s0 \s-1ABI\s0 reserves for applications.  This
14078 is the default.
14079 .Sp
14080 To be fully \s-1SVR4\s0 \s-1ABI\s0 compliant at the cost of some performance loss,
14081 specify \fB\-mno\-app\-regs\fR.  You should compile libraries and system
14082 software with this option.
14083 .IP "\fB\-mfpu\fR" 4
14084 .IX Item "-mfpu"
14085 .PD 0
14086 .IP "\fB\-mhard\-float\fR" 4
14087 .IX Item "-mhard-float"
14088 .PD
14089 Generate output containing floating point instructions.  This is the
14090 default.
14091 .IP "\fB\-mno\-fpu\fR" 4
14092 .IX Item "-mno-fpu"
14093 .PD 0
14094 .IP "\fB\-msoft\-float\fR" 4
14095 .IX Item "-msoft-float"
14096 .PD
14097 Generate output containing library calls for floating point.
14098 \&\fBWarning:\fR the requisite libraries are not available for all \s-1SPARC\s0
14099 targets.  Normally the facilities of the machine's usual C compiler are
14100 used, but this cannot be done directly in cross\-compilation.  You must make
14101 your own arrangements to provide suitable library functions for
14102 cross\-compilation.  The embedded targets \fBsparc\-*\-aout\fR and
14103 \&\fBsparclite\-*\-*\fR do provide software floating point support.
14104 .Sp
14105 \&\fB\-msoft\-float\fR changes the calling convention in the output file;
14106 therefore, it is only useful if you compile \fIall\fR of a program with
14107 this option.  In particular, you need to compile \fIlibgcc.a\fR, the
14108 library that comes with \s-1GCC\s0, with \fB\-msoft\-float\fR in order for
14109 this to work.
14110 .IP "\fB\-mhard\-quad\-float\fR" 4
14111 .IX Item "-mhard-quad-float"
14112 Generate output containing quad-word (long double) floating point
14113 instructions.
14114 .IP "\fB\-msoft\-quad\-float\fR" 4
14115 .IX Item "-msoft-quad-float"
14116 Generate output containing library calls for quad-word (long double)
14117 floating point instructions.  The functions called are those specified
14118 in the \s-1SPARC\s0 \s-1ABI\s0.  This is the default.
14119 .Sp
14120 As of this writing, there are no \s-1SPARC\s0 implementations that have hardware
14121 support for the quad-word floating point instructions.  They all invoke
14122 a trap handler for one of these instructions, and then the trap handler
14123 emulates the effect of the instruction.  Because of the trap handler overhead,
14124 this is much slower than calling the \s-1ABI\s0 library routines.  Thus the
14125 \&\fB\-msoft\-quad\-float\fR option is the default.
14126 .IP "\fB\-mno\-unaligned\-doubles\fR" 4
14127 .IX Item "-mno-unaligned-doubles"
14128 .PD 0
14129 .IP "\fB\-munaligned\-doubles\fR" 4
14130 .IX Item "-munaligned-doubles"
14131 .PD
14132 Assume that doubles have 8 byte alignment.  This is the default.
14133 .Sp
14134 With \fB\-munaligned\-doubles\fR, \s-1GCC\s0 assumes that doubles have 8 byte
14135 alignment only if they are contained in another type, or if they have an
14136 absolute address.  Otherwise, it assumes they have 4 byte alignment.
14137 Specifying this option avoids some rare compatibility problems with code
14138 generated by other compilers.  It is not the default because it results
14139 in a performance loss, especially for floating point code.
14140 .IP "\fB\-mno\-faster\-structs\fR" 4
14141 .IX Item "-mno-faster-structs"
14142 .PD 0
14143 .IP "\fB\-mfaster\-structs\fR" 4
14144 .IX Item "-mfaster-structs"
14145 .PD
14146 With \fB\-mfaster\-structs\fR, the compiler assumes that structures
14147 should have 8 byte alignment.  This enables the use of pairs of
14148 \&\f(CW\*(C`ldd\*(C'\fR and \f(CW\*(C`std\*(C'\fR instructions for copies in structure
14149 assignment, in place of twice as many \f(CW\*(C`ld\*(C'\fR and \f(CW\*(C`st\*(C'\fR pairs.
14150 However, the use of this changed alignment directly violates the \s-1SPARC\s0
14151 \&\s-1ABI\s0.  Thus, it's intended only for use on targets where the developer
14152 acknowledges that their resulting code will not be directly in line with
14153 the rules of the \s-1ABI\s0.
14154 .IP "\fB\-mimpure\-text\fR" 4
14155 .IX Item "-mimpure-text"
14156 \&\fB\-mimpure\-text\fR, used in addition to \fB\-shared\fR, tells
14157 the compiler to not pass \fB\-z text\fR to the linker when linking a
14158 shared object.  Using this option, you can link position-dependent
14159 code into a shared object.
14160 .Sp
14161 \&\fB\-mimpure\-text\fR suppresses the \*(L"relocations remain against
14162 allocatable but non-writable sections\*(R" linker error message.
14163 However, the necessary relocations will trigger copy\-on\-write, and the
14164 shared object is not actually shared across processes.  Instead of
14165 using \fB\-mimpure\-text\fR, you should compile all source code with
14166 \&\fB\-fpic\fR or \fB\-fPIC\fR.
14167 .Sp
14168 This option is only available on SunOS and Solaris.
14169 .IP "\fB\-mcpu=\fR\fIcpu_type\fR" 4
14170 .IX Item "-mcpu=cpu_type"
14171 Set the instruction set, register set, and instruction scheduling parameters
14172 for machine type \fIcpu_type\fR.  Supported values for \fIcpu_type\fR are
14173 \&\fBv7\fR, \fBcypress\fR, \fBv8\fR, \fBsupersparc\fR, \fBsparclite\fR,
14174 \&\fBf930\fR, \fBf934\fR, \fBhypersparc\fR, \fBsparclite86x\fR,
14175 \&\fBsparclet\fR, \fBtsc701\fR, \fBv9\fR, \fBultrasparc\fR,
14176 \&\fBultrasparc3\fR, \fBniagara\fR and \fBniagara2\fR.
14177 .Sp
14178 Default instruction scheduling parameters are used for values that select
14179 an architecture and not an implementation.  These are \fBv7\fR, \fBv8\fR,
14180 \&\fBsparclite\fR, \fBsparclet\fR, \fBv9\fR.
14181 .Sp
14182 Here is a list of each supported architecture and their supported
14183 implementations.
14184 .Sp
14185 .Vb 5
14186 \&            v7:             cypress
14187 \&            v8:             supersparc, hypersparc
14188 \&            sparclite:      f930, f934, sparclite86x
14189 \&            sparclet:       tsc701
14190 \&            v9:             ultrasparc, ultrasparc3, niagara, niagara2
14191 .Ve
14192 .Sp
14193 By default (unless configured otherwise), \s-1GCC\s0 generates code for the V7
14194 variant of the \s-1SPARC\s0 architecture.  With \fB\-mcpu=cypress\fR, the compiler
14195 additionally optimizes it for the Cypress \s-1CY7C602\s0 chip, as used in the
14196 SPARCStation/SPARCServer 3xx series.  This is also appropriate for the older
14197 SPARCStation 1, 2, \s-1IPX\s0 etc.
14198 .Sp
14199 With \fB\-mcpu=v8\fR, \s-1GCC\s0 generates code for the V8 variant of the \s-1SPARC\s0
14200 architecture.  The only difference from V7 code is that the compiler emits
14201 the integer multiply and integer divide instructions which exist in \s-1SPARC\-V8\s0
14202 but not in \s-1SPARC\-V7\s0.  With \fB\-mcpu=supersparc\fR, the compiler additionally
14203 optimizes it for the SuperSPARC chip, as used in the SPARCStation 10, 1000 and
14204 2000 series.
14205 .Sp
14206 With \fB\-mcpu=sparclite\fR, \s-1GCC\s0 generates code for the SPARClite variant of
14207 the \s-1SPARC\s0 architecture.  This adds the integer multiply, integer divide step
14208 and scan (\f(CW\*(C`ffs\*(C'\fR) instructions which exist in SPARClite but not in \s-1SPARC\-V7\s0.
14209 With \fB\-mcpu=f930\fR, the compiler additionally optimizes it for the
14210 Fujitsu \s-1MB86930\s0 chip, which is the original SPARClite, with no \s-1FPU\s0.  With
14211 \&\fB\-mcpu=f934\fR, the compiler additionally optimizes it for the Fujitsu
14212 \&\s-1MB86934\s0 chip, which is the more recent SPARClite with \s-1FPU\s0.
14213 .Sp
14214 With \fB\-mcpu=sparclet\fR, \s-1GCC\s0 generates code for the SPARClet variant of
14215 the \s-1SPARC\s0 architecture.  This adds the integer multiply, multiply/accumulate,
14216 integer divide step and scan (\f(CW\*(C`ffs\*(C'\fR) instructions which exist in SPARClet
14217 but not in \s-1SPARC\-V7\s0.  With \fB\-mcpu=tsc701\fR, the compiler additionally
14218 optimizes it for the \s-1TEMIC\s0 SPARClet chip.
14219 .Sp
14220 With \fB\-mcpu=v9\fR, \s-1GCC\s0 generates code for the V9 variant of the \s-1SPARC\s0
14221 architecture.  This adds 64\-bit integer and floating-point move instructions,
14222 3 additional floating-point condition code registers and conditional move
14223 instructions.  With \fB\-mcpu=ultrasparc\fR, the compiler additionally
14224 optimizes it for the Sun UltraSPARC I/II/IIi chips.  With
14225 \&\fB\-mcpu=ultrasparc3\fR, the compiler additionally optimizes it for the
14226 Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+ chips.  With
14227 \&\fB\-mcpu=niagara\fR, the compiler additionally optimizes it for
14228 Sun UltraSPARC T1 chips.  With \fB\-mcpu=niagara2\fR, the compiler
14229 additionally optimizes it for Sun UltraSPARC T2 chips.
14230 .IP "\fB\-mtune=\fR\fIcpu_type\fR" 4
14231 .IX Item "-mtune=cpu_type"
14232 Set the instruction scheduling parameters for machine type
14233 \&\fIcpu_type\fR, but do not set the instruction set or register set that the
14234 option \fB\-mcpu=\fR\fIcpu_type\fR would.
14235 .Sp
14236 The same values for \fB\-mcpu=\fR\fIcpu_type\fR can be used for
14237 \&\fB\-mtune=\fR\fIcpu_type\fR, but the only useful values are those
14238 that select a particular cpu implementation.  Those are \fBcypress\fR,
14239 \&\fBsupersparc\fR, \fBhypersparc\fR, \fBf930\fR, \fBf934\fR,
14240 \&\fBsparclite86x\fR, \fBtsc701\fR, \fBultrasparc\fR,
14241 \&\fBultrasparc3\fR, \fBniagara\fR, and \fBniagara2\fR.
14242 .IP "\fB\-mv8plus\fR" 4
14243 .IX Item "-mv8plus"
14244 .PD 0
14245 .IP "\fB\-mno\-v8plus\fR" 4
14246 .IX Item "-mno-v8plus"
14247 .PD
14248 With \fB\-mv8plus\fR, \s-1GCC\s0 generates code for the \s-1SPARC\-V8+\s0 \s-1ABI\s0.  The
14249 difference from the V8 \s-1ABI\s0 is that the global and out registers are
14250 considered 64\-bit wide.  This is enabled by default on Solaris in 32\-bit
14251 mode for all \s-1SPARC\-V9\s0 processors.
14252 .IP "\fB\-mvis\fR" 4
14253 .IX Item "-mvis"
14254 .PD 0
14255 .IP "\fB\-mno\-vis\fR" 4
14256 .IX Item "-mno-vis"
14257 .PD
14258 With \fB\-mvis\fR, \s-1GCC\s0 generates code that takes advantage of the UltraSPARC
14259 Visual Instruction Set extensions.  The default is \fB\-mno\-vis\fR.
14260 .PP
14261 These \fB\-m\fR options are supported in addition to the above
14262 on \s-1SPARC\-V9\s0 processors in 64\-bit environments:
14263 .IP "\fB\-mlittle\-endian\fR" 4
14264 .IX Item "-mlittle-endian"
14265 Generate code for a processor running in little-endian mode.  It is only
14266 available for a few configurations and most notably not on Solaris and Linux.
14267 .IP "\fB\-m32\fR" 4
14268 .IX Item "-m32"
14269 .PD 0
14270 .IP "\fB\-m64\fR" 4
14271 .IX Item "-m64"
14272 .PD
14273 Generate code for a 32\-bit or 64\-bit environment.
14274 The 32\-bit environment sets int, long and pointer to 32 bits.
14275 The 64\-bit environment sets int to 32 bits and long and pointer
14276 to 64 bits.
14277 .IP "\fB\-mcmodel=medlow\fR" 4
14278 .IX Item "-mcmodel=medlow"
14279 Generate code for the Medium/Low code model: 64\-bit addresses, programs
14280 must be linked in the low 32 bits of memory.  Programs can be statically
14281 or dynamically linked.
14282 .IP "\fB\-mcmodel=medmid\fR" 4
14283 .IX Item "-mcmodel=medmid"
14284 Generate code for the Medium/Middle code model: 64\-bit addresses, programs
14285 must be linked in the low 44 bits of memory, the text and data segments must
14286 be less than 2GB in size and the data segment must be located within 2GB of
14287 the text segment.
14288 .IP "\fB\-mcmodel=medany\fR" 4
14289 .IX Item "-mcmodel=medany"
14290 Generate code for the Medium/Anywhere code model: 64\-bit addresses, programs
14291 may be linked anywhere in memory, the text and data segments must be less
14292 than 2GB in size and the data segment must be located within 2GB of the
14293 text segment.
14294 .IP "\fB\-mcmodel=embmedany\fR" 4
14295 .IX Item "-mcmodel=embmedany"
14296 Generate code for the Medium/Anywhere code model for embedded systems:
14297 64\-bit addresses, the text and data segments must be less than 2GB in
14298 size, both starting anywhere in memory (determined at link time).  The
14299 global register \f(CW%g4\fR points to the base of the data segment.  Programs
14300 are statically linked and \s-1PIC\s0 is not supported.
14301 .IP "\fB\-mstack\-bias\fR" 4
14302 .IX Item "-mstack-bias"
14303 .PD 0
14304 .IP "\fB\-mno\-stack\-bias\fR" 4
14305 .IX Item "-mno-stack-bias"
14306 .PD
14307 With \fB\-mstack\-bias\fR, \s-1GCC\s0 assumes that the stack pointer, and
14308 frame pointer if present, are offset by \-2047 which must be added back
14309 when making stack frame references.  This is the default in 64\-bit mode.
14310 Otherwise, assume no such offset is present.
14311 .PP
14312 These switches are supported in addition to the above on Solaris:
14313 .IP "\fB\-threads\fR" 4
14314 .IX Item "-threads"
14315 Add support for multithreading using the Solaris threads library.  This
14316 option sets flags for both the preprocessor and linker.  This option does
14317 not affect the thread safety of object code produced by the compiler or
14318 that of libraries supplied with it.
14319 .IP "\fB\-pthreads\fR" 4
14320 .IX Item "-pthreads"
14321 Add support for multithreading using the \s-1POSIX\s0 threads library.  This
14322 option sets flags for both the preprocessor and linker.  This option does
14323 not affect the thread safety of object code produced  by the compiler or
14324 that of libraries supplied with it.
14325 .IP "\fB\-pthread\fR" 4
14326 .IX Item "-pthread"
14327 This is a synonym for \fB\-pthreads\fR.
14328 .PP
14329 \fI\s-1SPU\s0 Options\fR
14330 .IX Subsection "SPU Options"
14331 .PP
14332 These \fB\-m\fR options are supported on the \s-1SPU:\s0
14333 .IP "\fB\-mwarn\-reloc\fR" 4
14334 .IX Item "-mwarn-reloc"
14335 .PD 0
14336 .IP "\fB\-merror\-reloc\fR" 4
14337 .IX Item "-merror-reloc"
14338 .PD
14339 The loader for \s-1SPU\s0 does not handle dynamic relocations.  By default, \s-1GCC\s0
14340 will give an error when it generates code that requires a dynamic
14341 relocation.  \fB\-mno\-error\-reloc\fR disables the error,
14342 \&\fB\-mwarn\-reloc\fR will generate a warning instead.
14343 .IP "\fB\-msafe\-dma\fR" 4
14344 .IX Item "-msafe-dma"
14345 .PD 0
14346 .IP "\fB\-munsafe\-dma\fR" 4
14347 .IX Item "-munsafe-dma"
14348 .PD
14349 Instructions which initiate or test completion of \s-1DMA\s0 must not be
14350 reordered with respect to loads and stores of the memory which is being
14351 accessed.  Users typically address this problem using the volatile
14352 keyword, but that can lead to inefficient code in places where the
14353 memory is known to not change.  Rather than mark the memory as volatile
14354 we treat the \s-1DMA\s0 instructions as potentially effecting all memory.  With
14355 \&\fB\-munsafe\-dma\fR users must use the volatile keyword to protect
14356 memory accesses.
14357 .IP "\fB\-mbranch\-hints\fR" 4
14358 .IX Item "-mbranch-hints"
14359 By default, \s-1GCC\s0 will generate a branch hint instruction to avoid
14360 pipeline stalls for always taken or probably taken branches.  A hint
14361 will not be generated closer than 8 instructions away from its branch.
14362 There is little reason to disable them, except for debugging purposes,
14363 or to make an object a little bit smaller.
14364 .IP "\fB\-msmall\-mem\fR" 4
14365 .IX Item "-msmall-mem"
14366 .PD 0
14367 .IP "\fB\-mlarge\-mem\fR" 4
14368 .IX Item "-mlarge-mem"
14369 .PD
14370 By default, \s-1GCC\s0 generates code assuming that addresses are never larger
14371 than 18 bits.  With \fB\-mlarge\-mem\fR code is generated that assumes
14372 a full 32 bit address.
14373 .IP "\fB\-mstdmain\fR" 4
14374 .IX Item "-mstdmain"
14375 By default, \s-1GCC\s0 links against startup code that assumes the SPU-style
14376 main function interface (which has an unconventional parameter list).
14377 With \fB\-mstdmain\fR, \s-1GCC\s0 will link your program against startup
14378 code that assumes a C99\-style interface to \f(CW\*(C`main\*(C'\fR, including a
14379 local copy of \f(CW\*(C`argv\*(C'\fR strings.
14380 .IP "\fB\-mfixed\-range=\fR\fIregister-range\fR" 4
14381 .IX Item "-mfixed-range=register-range"
14382 Generate code treating the given register range as fixed registers.
14383 A fixed register is one that the register allocator can not use.  This is
14384 useful when compiling kernel code.  A register range is specified as
14385 two registers separated by a dash.  Multiple register ranges can be
14386 specified separated by a comma.
14387 .IP "\fB\-mdual\-nops\fR" 4
14388 .IX Item "-mdual-nops"
14389 .PD 0
14390 .IP "\fB\-mdual\-nops=\fR\fIn\fR" 4
14391 .IX Item "-mdual-nops=n"
14392 .PD
14393 By default, \s-1GCC\s0 will insert nops to increase dual issue when it expects
14394 it to increase performance.  \fIn\fR can be a value from 0 to 10.  A
14395 smaller \fIn\fR will insert fewer nops.  10 is the default, 0 is the
14396 same as \fB\-mno\-dual\-nops\fR.  Disabled with \fB\-Os\fR.
14397 .IP "\fB\-mhint\-max\-nops=\fR\fIn\fR" 4
14398 .IX Item "-mhint-max-nops=n"
14399 Maximum number of nops to insert for a branch hint.  A branch hint must
14400 be at least 8 instructions away from the branch it is effecting.  \s-1GCC\s0
14401 will insert up to \fIn\fR nops to enforce this, otherwise it will not
14402 generate the branch hint.
14403 .IP "\fB\-mhint\-max\-distance=\fR\fIn\fR" 4
14404 .IX Item "-mhint-max-distance=n"
14405 The encoding of the branch hint instruction limits the hint to be within
14406 256 instructions of the branch it is effecting.  By default, \s-1GCC\s0 makes
14407 sure it is within 125. 
14408 .IP "\fB\-msafe\-hints\fR" 4
14409 .IX Item "-msafe-hints"
14410 Work around a hardware bug which causes the \s-1SPU\s0 to stall indefinitely.
14411 By default, \s-1GCC\s0 will insert the \f(CW\*(C`hbrp\*(C'\fR instruction to make sure
14412 this stall won't happen.
14413 .PP
14414 \fIOptions for System V\fR
14415 .IX Subsection "Options for System V"
14416 .PP
14417 These additional options are available on System V Release 4 for
14418 compatibility with other compilers on those systems:
14419 .IP "\fB\-G\fR" 4
14420 .IX Item "-G"
14421 Create a shared object.
14422 It is recommended that \fB\-symbolic\fR or \fB\-shared\fR be used instead.
14423 .IP "\fB\-Qy\fR" 4
14424 .IX Item "-Qy"
14425 Identify the versions of each tool used by the compiler, in a
14426 \&\f(CW\*(C`.ident\*(C'\fR assembler directive in the output.
14427 .IP "\fB\-Qn\fR" 4
14428 .IX Item "-Qn"
14429 Refrain from adding \f(CW\*(C`.ident\*(C'\fR directives to the output file (this is
14430 the default).
14431 .IP "\fB\-YP,\fR\fIdirs\fR" 4
14432 .IX Item "-YP,dirs"
14433 Search the directories \fIdirs\fR, and no others, for libraries
14434 specified with \fB\-l\fR.
14435 .IP "\fB\-Ym,\fR\fIdir\fR" 4
14436 .IX Item "-Ym,dir"
14437 Look in the directory \fIdir\fR to find the M4 preprocessor.
14438 The assembler uses this option.
14439 .PP
14440 \fIV850 Options\fR
14441 .IX Subsection "V850 Options"
14442 .PP
14443 These \fB\-m\fR options are defined for V850 implementations:
14444 .IP "\fB\-mlong\-calls\fR" 4
14445 .IX Item "-mlong-calls"
14446 .PD 0
14447 .IP "\fB\-mno\-long\-calls\fR" 4
14448 .IX Item "-mno-long-calls"
14449 .PD
14450 Treat all calls as being far away (near).  If calls are assumed to be
14451 far away, the compiler will always load the functions address up into a
14452 register, and call indirect through the pointer.
14453 .IP "\fB\-mno\-ep\fR" 4
14454 .IX Item "-mno-ep"
14455 .PD 0
14456 .IP "\fB\-mep\fR" 4
14457 .IX Item "-mep"
14458 .PD
14459 Do not optimize (do optimize) basic blocks that use the same index
14460 pointer 4 or more times to copy pointer into the \f(CW\*(C`ep\*(C'\fR register, and
14461 use the shorter \f(CW\*(C`sld\*(C'\fR and \f(CW\*(C`sst\*(C'\fR instructions.  The \fB\-mep\fR
14462 option is on by default if you optimize.
14463 .IP "\fB\-mno\-prolog\-function\fR" 4
14464 .IX Item "-mno-prolog-function"
14465 .PD 0
14466 .IP "\fB\-mprolog\-function\fR" 4
14467 .IX Item "-mprolog-function"
14468 .PD
14469 Do not use (do use) external functions to save and restore registers
14470 at the prologue and epilogue of a function.  The external functions
14471 are slower, but use less code space if more than one function saves
14472 the same number of registers.  The \fB\-mprolog\-function\fR option
14473 is on by default if you optimize.
14474 .IP "\fB\-mspace\fR" 4
14475 .IX Item "-mspace"
14476 Try to make the code as small as possible.  At present, this just turns
14477 on the \fB\-mep\fR and \fB\-mprolog\-function\fR options.
14478 .IP "\fB\-mtda=\fR\fIn\fR" 4
14479 .IX Item "-mtda=n"
14480 Put static or global variables whose size is \fIn\fR bytes or less into
14481 the tiny data area that register \f(CW\*(C`ep\*(C'\fR points to.  The tiny data
14482 area can hold up to 256 bytes in total (128 bytes for byte references).
14483 .IP "\fB\-msda=\fR\fIn\fR" 4
14484 .IX Item "-msda=n"
14485 Put static or global variables whose size is \fIn\fR bytes or less into
14486 the small data area that register \f(CW\*(C`gp\*(C'\fR points to.  The small data
14487 area can hold up to 64 kilobytes.
14488 .IP "\fB\-mzda=\fR\fIn\fR" 4
14489 .IX Item "-mzda=n"
14490 Put static or global variables whose size is \fIn\fR bytes or less into
14491 the first 32 kilobytes of memory.
14492 .IP "\fB\-mv850\fR" 4
14493 .IX Item "-mv850"
14494 Specify that the target processor is the V850.
14495 .IP "\fB\-mbig\-switch\fR" 4
14496 .IX Item "-mbig-switch"
14497 Generate code suitable for big switch tables.  Use this option only if
14498 the assembler/linker complain about out of range branches within a switch
14499 table.
14500 .IP "\fB\-mapp\-regs\fR" 4
14501 .IX Item "-mapp-regs"
14502 This option will cause r2 and r5 to be used in the code generated by
14503 the compiler.  This setting is the default.
14504 .IP "\fB\-mno\-app\-regs\fR" 4
14505 .IX Item "-mno-app-regs"
14506 This option will cause r2 and r5 to be treated as fixed registers.
14507 .IP "\fB\-mv850e1\fR" 4
14508 .IX Item "-mv850e1"
14509 Specify that the target processor is the V850E1.  The preprocessor
14510 constants \fB_\|_v850e1_\|_\fR and \fB_\|_v850e_\|_\fR will be defined if
14511 this option is used.
14512 .IP "\fB\-mv850e\fR" 4
14513 .IX Item "-mv850e"
14514 Specify that the target processor is the V850E.  The preprocessor
14515 constant \fB_\|_v850e_\|_\fR will be defined if this option is used.
14516 .Sp
14517 If neither \fB\-mv850\fR nor \fB\-mv850e\fR nor \fB\-mv850e1\fR
14518 are defined then a default target processor will be chosen and the
14519 relevant \fB_\|_v850*_\|_\fR preprocessor constant will be defined.
14520 .Sp
14521 The preprocessor constants \fB_\|_v850\fR and \fB_\|_v851_\|_\fR are always
14522 defined, regardless of which processor variant is the target.
14523 .IP "\fB\-mdisable\-callt\fR" 4
14524 .IX Item "-mdisable-callt"
14525 This option will suppress generation of the \s-1CALLT\s0 instruction for the
14526 v850e and v850e1 flavors of the v850 architecture.  The default is
14527 \&\fB\-mno\-disable\-callt\fR which allows the \s-1CALLT\s0 instruction to be used.
14528 .PP
14529 \fI\s-1VAX\s0 Options\fR
14530 .IX Subsection "VAX Options"
14531 .PP
14532 These \fB\-m\fR options are defined for the \s-1VAX:\s0
14533 .IP "\fB\-munix\fR" 4
14534 .IX Item "-munix"
14535 Do not output certain jump instructions (\f(CW\*(C`aobleq\*(C'\fR and so on)
14536 that the Unix assembler for the \s-1VAX\s0 cannot handle across long
14537 ranges.
14538 .IP "\fB\-mgnu\fR" 4
14539 .IX Item "-mgnu"
14540 Do output those jump instructions, on the assumption that you
14541 will assemble with the \s-1GNU\s0 assembler.
14542 .IP "\fB\-mg\fR" 4
14543 .IX Item "-mg"
14544 Output code for g\-format floating point numbers instead of d\-format.
14545 .PP
14546 \fIVxWorks Options\fR
14547 .IX Subsection "VxWorks Options"
14548 .PP
14549 The options in this section are defined for all VxWorks targets.
14550 Options specific to the target hardware are listed with the other
14551 options for that target.
14552 .IP "\fB\-mrtp\fR" 4
14553 .IX Item "-mrtp"
14554 \&\s-1GCC\s0 can generate code for both VxWorks kernels and real time processes
14555 (RTPs).  This option switches from the former to the latter.  It also
14556 defines the preprocessor macro \f(CW\*(C`_\|_RTP_\|_\*(C'\fR.
14557 .IP "\fB\-non\-static\fR" 4
14558 .IX Item "-non-static"
14559 Link an \s-1RTP\s0 executable against shared libraries rather than static
14560 libraries.  The options \fB\-static\fR and \fB\-shared\fR can
14561 also be used for RTPs; \fB\-static\fR
14562 is the default.
14563 .IP "\fB\-Bstatic\fR" 4
14564 .IX Item "-Bstatic"
14565 .PD 0
14566 .IP "\fB\-Bdynamic\fR" 4
14567 .IX Item "-Bdynamic"
14568 .PD
14569 These options are passed down to the linker.  They are defined for
14570 compatibility with Diab.
14571 .IP "\fB\-Xbind\-lazy\fR" 4
14572 .IX Item "-Xbind-lazy"
14573 Enable lazy binding of function calls.  This option is equivalent to
14574 \&\fB\-Wl,\-z,now\fR and is defined for compatibility with Diab.
14575 .IP "\fB\-Xbind\-now\fR" 4
14576 .IX Item "-Xbind-now"
14577 Disable lazy binding of function calls.  This option is the default and
14578 is defined for compatibility with Diab.
14579 .PP
14580 \fIx86\-64 Options\fR
14581 .IX Subsection "x86-64 Options"
14582 .PP
14583 These are listed under 
14584 .PP
14585 \fIi386 and x86\-64 Windows Options\fR
14586 .IX Subsection "i386 and x86-64 Windows Options"
14587 .PP
14588 These additional options are available for Windows targets:
14589 .IP "\fB\-mconsole\fR" 4
14590 .IX Item "-mconsole"
14591 This option is available for Cygwin and MinGW targets.  It
14592 specifies that a console application is to be generated, by
14593 instructing the linker to set the \s-1PE\s0 header subsystem type
14594 required for console applications.
14595 This is the default behaviour for Cygwin and MinGW targets.
14596 .IP "\fB\-mcygwin\fR" 4
14597 .IX Item "-mcygwin"
14598 This option is available for Cygwin targets.  It specifies that
14599 the Cygwin internal interface is to be used for predefined
14600 preprocessor macros, C runtime libraries and related linker
14601 paths and options.  For Cygwin targets this is the default behaviour.
14602 This option is deprecated and will be removed in a future release.
14603 .IP "\fB\-mno\-cygwin\fR" 4
14604 .IX Item "-mno-cygwin"
14605 This option is available for Cygwin targets.  It specifies that
14606 the MinGW internal interface is to be used instead of Cygwin's, by
14607 setting MinGW-related predefined macros and linker paths and default
14608 library options.
14609 This option is deprecated and will be removed in a future release.
14610 .IP "\fB\-mdll\fR" 4
14611 .IX Item "-mdll"
14612 This option is available for Cygwin and MinGW targets.  It
14613 specifies that a \s-1DLL\s0 \- a dynamic link library \- is to be
14614 generated, enabling the selection of the required runtime
14615 startup object and entry point.
14616 .IP "\fB\-mnop\-fun\-dllimport\fR" 4
14617 .IX Item "-mnop-fun-dllimport"
14618 This option is available for Cygwin and MinGW targets.  It
14619 specifies that the dllimport attribute should be ignored.
14620 .IP "\fB\-mthread\fR" 4
14621 .IX Item "-mthread"
14622 This option is available for MinGW targets. It specifies
14623 that MinGW-specific thread support is to be used.
14624 .IP "\fB\-mwin32\fR" 4
14625 .IX Item "-mwin32"
14626 This option is available for Cygwin and MinGW targets.  It
14627 specifies that the typical Windows pre-defined macros are to
14628 be set in the pre\-processor, but does not influence the choice
14629 of runtime library/startup code.
14630 .IP "\fB\-mwindows\fR" 4
14631 .IX Item "-mwindows"
14632 This option is available for Cygwin and MinGW targets.  It
14633 specifies that a \s-1GUI\s0 application is to be generated by
14634 instructing the linker to set the \s-1PE\s0 header subsystem type
14635 appropriately.
14636 .PP
14637 See also under \fBi386 and x86\-64 Options\fR for standard options.
14638 .PP
14639 \fIXstormy16 Options\fR
14640 .IX Subsection "Xstormy16 Options"
14641 .PP
14642 These options are defined for Xstormy16:
14643 .IP "\fB\-msim\fR" 4
14644 .IX Item "-msim"
14645 Choose startup files and linker script suitable for the simulator.
14646 .PP
14647 \fIXtensa Options\fR
14648 .IX Subsection "Xtensa Options"
14649 .PP
14650 These options are supported for Xtensa targets:
14651 .IP "\fB\-mconst16\fR" 4
14652 .IX Item "-mconst16"
14653 .PD 0
14654 .IP "\fB\-mno\-const16\fR" 4
14655 .IX Item "-mno-const16"
14656 .PD
14657 Enable or disable use of \f(CW\*(C`CONST16\*(C'\fR instructions for loading
14658 constant values.  The \f(CW\*(C`CONST16\*(C'\fR instruction is currently not a
14659 standard option from Tensilica.  When enabled, \f(CW\*(C`CONST16\*(C'\fR
14660 instructions are always used in place of the standard \f(CW\*(C`L32R\*(C'\fR
14661 instructions.  The use of \f(CW\*(C`CONST16\*(C'\fR is enabled by default only if
14662 the \f(CW\*(C`L32R\*(C'\fR instruction is not available.
14663 .IP "\fB\-mfused\-madd\fR" 4
14664 .IX Item "-mfused-madd"
14665 .PD 0
14666 .IP "\fB\-mno\-fused\-madd\fR" 4
14667 .IX Item "-mno-fused-madd"
14668 .PD
14669 Enable or disable use of fused multiply/add and multiply/subtract
14670 instructions in the floating-point option.  This has no effect if the
14671 floating-point option is not also enabled.  Disabling fused multiply/add
14672 and multiply/subtract instructions forces the compiler to use separate
14673 instructions for the multiply and add/subtract operations.  This may be
14674 desirable in some cases where strict \s-1IEEE\s0 754\-compliant results are
14675 required: the fused multiply add/subtract instructions do not round the
14676 intermediate result, thereby producing results with \fImore\fR bits of
14677 precision than specified by the \s-1IEEE\s0 standard.  Disabling fused multiply
14678 add/subtract instructions also ensures that the program output is not
14679 sensitive to the compiler's ability to combine multiply and add/subtract
14680 operations.
14681 .IP "\fB\-mserialize\-volatile\fR" 4
14682 .IX Item "-mserialize-volatile"
14683 .PD 0
14684 .IP "\fB\-mno\-serialize\-volatile\fR" 4
14685 .IX Item "-mno-serialize-volatile"
14686 .PD
14687 When this option is enabled, \s-1GCC\s0 inserts \f(CW\*(C`MEMW\*(C'\fR instructions before
14688 \&\f(CW\*(C`volatile\*(C'\fR memory references to guarantee sequential consistency.
14689 The default is \fB\-mserialize\-volatile\fR.  Use
14690 \&\fB\-mno\-serialize\-volatile\fR to omit the \f(CW\*(C`MEMW\*(C'\fR instructions.
14691 .IP "\fB\-mtext\-section\-literals\fR" 4
14692 .IX Item "-mtext-section-literals"
14693 .PD 0
14694 .IP "\fB\-mno\-text\-section\-literals\fR" 4
14695 .IX Item "-mno-text-section-literals"
14696 .PD
14697 Control the treatment of literal pools.  The default is
14698 \&\fB\-mno\-text\-section\-literals\fR, which places literals in a separate
14699 section in the output file.  This allows the literal pool to be placed
14700 in a data \s-1RAM/ROM\s0, and it also allows the linker to combine literal
14701 pools from separate object files to remove redundant literals and
14702 improve code size.  With \fB\-mtext\-section\-literals\fR, the literals
14703 are interspersed in the text section in order to keep them as close as
14704 possible to their references.  This may be necessary for large assembly
14705 files.
14706 .IP "\fB\-mtarget\-align\fR" 4
14707 .IX Item "-mtarget-align"
14708 .PD 0
14709 .IP "\fB\-mno\-target\-align\fR" 4
14710 .IX Item "-mno-target-align"
14711 .PD
14712 When this option is enabled, \s-1GCC\s0 instructs the assembler to
14713 automatically align instructions to reduce branch penalties at the
14714 expense of some code density.  The assembler attempts to widen density
14715 instructions to align branch targets and the instructions following call
14716 instructions.  If there are not enough preceding safe density
14717 instructions to align a target, no widening will be performed.  The
14718 default is \fB\-mtarget\-align\fR.  These options do not affect the
14719 treatment of auto-aligned instructions like \f(CW\*(C`LOOP\*(C'\fR, which the
14720 assembler will always align, either by widening density instructions or
14721 by inserting no-op instructions.
14722 .IP "\fB\-mlongcalls\fR" 4
14723 .IX Item "-mlongcalls"
14724 .PD 0
14725 .IP "\fB\-mno\-longcalls\fR" 4
14726 .IX Item "-mno-longcalls"
14727 .PD
14728 When this option is enabled, \s-1GCC\s0 instructs the assembler to translate
14729 direct calls to indirect calls unless it can determine that the target
14730 of a direct call is in the range allowed by the call instruction.  This
14731 translation typically occurs for calls to functions in other source
14732 files.  Specifically, the assembler translates a direct \f(CW\*(C`CALL\*(C'\fR
14733 instruction into an \f(CW\*(C`L32R\*(C'\fR followed by a \f(CW\*(C`CALLX\*(C'\fR instruction.
14734 The default is \fB\-mno\-longcalls\fR.  This option should be used in
14735 programs where the call target can potentially be out of range.  This
14736 option is implemented in the assembler, not the compiler, so the
14737 assembly code generated by \s-1GCC\s0 will still show direct call
14738 instructions\-\-\-look at the disassembled object code to see the actual
14739 instructions.  Note that the assembler will use an indirect call for
14740 every cross-file call, not just those that really will be out of range.
14741 .PP
14742 \fIzSeries Options\fR
14743 .IX Subsection "zSeries Options"
14744 .PP
14745 These are listed under 
14746 .Sh "Options for Code Generation Conventions"
14747 .IX Subsection "Options for Code Generation Conventions"
14748 These machine-independent options control the interface conventions
14749 used in code generation.
14750 .PP
14751 Most of them have both positive and negative forms; the negative form
14752 of \fB\-ffoo\fR would be \fB\-fno\-foo\fR.  In the table below, only
14753 one of the forms is listed\-\-\-the one which is not the default.  You
14754 can figure out the other form by either removing \fBno\-\fR or adding
14755 it.
14756 .IP "\fB\-fbounds\-check\fR" 4
14757 .IX Item "-fbounds-check"
14758 For front-ends that support it, generate additional code to check that
14759 indices used to access arrays are within the declared range.  This is
14760 currently only supported by the Java and Fortran front\-ends, where
14761 this option defaults to true and false respectively.
14762 .IP "\fB\-ftrapv\fR" 4
14763 .IX Item "-ftrapv"
14764 This option generates traps for signed overflow on addition, subtraction,
14765 multiplication operations.
14766 .IP "\fB\-fwrapv\fR" 4
14767 .IX Item "-fwrapv"
14768 This option instructs the compiler to assume that signed arithmetic
14769 overflow of addition, subtraction and multiplication wraps around
14770 using twos-complement representation.  This flag enables some optimizations
14771 and disables others.  This option is enabled by default for the Java
14772 front\-end, as required by the Java language specification.
14773 .IP "\fB\-fexceptions\fR" 4
14774 .IX Item "-fexceptions"
14775 Enable exception handling.  Generates extra code needed to propagate
14776 exceptions.  For some targets, this implies \s-1GCC\s0 will generate frame
14777 unwind information for all functions, which can produce significant data
14778 size overhead, although it does not affect execution.  If you do not
14779 specify this option, \s-1GCC\s0 will enable it by default for languages like
14780 \&\*(C+ which normally require exception handling, and disable it for
14781 languages like C that do not normally require it.  However, you may need
14782 to enable this option when compiling C code that needs to interoperate
14783 properly with exception handlers written in \*(C+.  You may also wish to
14784 disable this option if you are compiling older \*(C+ programs that don't
14785 use exception handling.
14786 .IP "\fB\-fnon\-call\-exceptions\fR" 4
14787 .IX Item "-fnon-call-exceptions"
14788 Generate code that allows trapping instructions to throw exceptions.
14789 Note that this requires platform-specific runtime support that does
14790 not exist everywhere.  Moreover, it only allows \fItrapping\fR
14791 instructions to throw exceptions, i.e. memory references or floating
14792 point instructions.  It does not allow exceptions to be thrown from
14793 arbitrary signal handlers such as \f(CW\*(C`SIGALRM\*(C'\fR.
14794 .IP "\fB\-funwind\-tables\fR" 4
14795 .IX Item "-funwind-tables"
14796 Similar to \fB\-fexceptions\fR, except that it will just generate any needed
14797 static data, but will not affect the generated code in any other way.
14798 You will normally not enable this option; instead, a language processor
14799 that needs this handling would enable it on your behalf.
14800 .IP "\fB\-fasynchronous\-unwind\-tables\fR" 4
14801 .IX Item "-fasynchronous-unwind-tables"
14802 Generate unwind table in dwarf2 format, if supported by target machine.  The
14803 table is exact at each instruction boundary, so it can be used for stack
14804 unwinding from asynchronous events (such as debugger or garbage collector).
14805 .IP "\fB\-fpcc\-struct\-return\fR" 4
14806 .IX Item "-fpcc-struct-return"
14807 Return \*(L"short\*(R" \f(CW\*(C`struct\*(C'\fR and \f(CW\*(C`union\*(C'\fR values in memory like
14808 longer ones, rather than in registers.  This convention is less
14809 efficient, but it has the advantage of allowing intercallability between
14810 GCC-compiled files and files compiled with other compilers, particularly
14811 the Portable C Compiler (pcc).
14812 .Sp
14813 The precise convention for returning structures in memory depends
14814 on the target configuration macros.
14815 .Sp
14816 Short structures and unions are those whose size and alignment match
14817 that of some integer type.
14818 .Sp
14819 \&\fBWarning:\fR code compiled with the \fB\-fpcc\-struct\-return\fR
14820 switch is not binary compatible with code compiled with the
14821 \&\fB\-freg\-struct\-return\fR switch.
14822 Use it to conform to a non-default application binary interface.
14823 .IP "\fB\-freg\-struct\-return\fR" 4
14824 .IX Item "-freg-struct-return"
14825 Return \f(CW\*(C`struct\*(C'\fR and \f(CW\*(C`union\*(C'\fR values in registers when possible.
14826 This is more efficient for small structures than
14827 \&\fB\-fpcc\-struct\-return\fR.
14828 .Sp
14829 If you specify neither \fB\-fpcc\-struct\-return\fR nor
14830 \&\fB\-freg\-struct\-return\fR, \s-1GCC\s0 defaults to whichever convention is
14831 standard for the target.  If there is no standard convention, \s-1GCC\s0
14832 defaults to \fB\-fpcc\-struct\-return\fR, except on targets where \s-1GCC\s0 is
14833 the principal compiler.  In those cases, we can choose the standard, and
14834 we chose the more efficient register return alternative.
14835 .Sp
14836 \&\fBWarning:\fR code compiled with the \fB\-freg\-struct\-return\fR
14837 switch is not binary compatible with code compiled with the
14838 \&\fB\-fpcc\-struct\-return\fR switch.
14839 Use it to conform to a non-default application binary interface.
14840 .IP "\fB\-fshort\-enums\fR" 4
14841 .IX Item "-fshort-enums"
14842 Allocate to an \f(CW\*(C`enum\*(C'\fR type only as many bytes as it needs for the
14843 declared range of possible values.  Specifically, the \f(CW\*(C`enum\*(C'\fR type
14844 will be equivalent to the smallest integer type which has enough room.
14845 .Sp
14846 \&\fBWarning:\fR the \fB\-fshort\-enums\fR switch causes \s-1GCC\s0 to generate
14847 code that is not binary compatible with code generated without that switch.
14848 Use it to conform to a non-default application binary interface.
14849 .IP "\fB\-fshort\-double\fR" 4
14850 .IX Item "-fshort-double"
14851 Use the same size for \f(CW\*(C`double\*(C'\fR as for \f(CW\*(C`float\*(C'\fR.
14852 .Sp
14853 \&\fBWarning:\fR the \fB\-fshort\-double\fR switch causes \s-1GCC\s0 to generate
14854 code that is not binary compatible with code generated without that switch.
14855 Use it to conform to a non-default application binary interface.
14856 .IP "\fB\-fshort\-wchar\fR" 4
14857 .IX Item "-fshort-wchar"
14858 Override the underlying type for \fBwchar_t\fR to be \fBshort
14859 unsigned int\fR instead of the default for the target.  This option is
14860 useful for building programs to run under \s-1WINE\s0.
14861 .Sp
14862 \&\fBWarning:\fR the \fB\-fshort\-wchar\fR switch causes \s-1GCC\s0 to generate
14863 code that is not binary compatible with code generated without that switch.
14864 Use it to conform to a non-default application binary interface.
14865 .IP "\fB\-fno\-common\fR" 4
14866 .IX Item "-fno-common"
14867 In C code, controls the placement of uninitialized global variables.
14868 Unix C compilers have traditionally permitted multiple definitions of
14869 such variables in different compilation units by placing the variables
14870 in a common block.  
14871 This is the behavior specified by \fB\-fcommon\fR, and is the default 
14872 for \s-1GCC\s0 on most targets.  
14873 On the other hand, this behavior is not required by \s-1ISO\s0 C, and on some
14874 targets may carry a speed or code size penalty on variable references.
14875 The \fB\-fno\-common\fR option specifies that the compiler should place 
14876 uninitialized global variables in the data section of the object file,
14877 rather than generating them as common blocks.
14878 This has the effect that if the same variable is declared 
14879 (without \f(CW\*(C`extern\*(C'\fR) in two different compilations,
14880 you will get a multiple-definition error when you link them.
14881 In this case, you must compile with \fB\-fcommon\fR instead.  
14882 Compiling with \fB\-fno\-common\fR is useful on targets for which 
14883 it provides better performance, or if you wish to verify that the
14884 program will work on other systems which always treat uninitialized
14885 variable declarations this way.
14886 .IP "\fB\-fno\-ident\fR" 4
14887 .IX Item "-fno-ident"
14888 Ignore the \fB#ident\fR directive.
14889 .IP "\fB\-finhibit\-size\-directive\fR" 4
14890 .IX Item "-finhibit-size-directive"
14891 Don't output a \f(CW\*(C`.size\*(C'\fR assembler directive, or anything else that
14892 would cause trouble if the function is split in the middle, and the
14893 two halves are placed at locations far apart in memory.  This option is
14894 used when compiling \fIcrtstuff.c\fR; you should not need to use it
14895 for anything else.
14896 .IP "\fB\-fverbose\-asm\fR" 4
14897 .IX Item "-fverbose-asm"
14898 Put extra commentary information in the generated assembly code to
14899 make it more readable.  This option is generally only of use to those
14900 who actually need to read the generated assembly code (perhaps while
14901 debugging the compiler itself).
14902 .Sp
14903 \&\fB\-fno\-verbose\-asm\fR, the default, causes the
14904 extra information to be omitted and is useful when comparing two assembler
14905 files.
14906 .IP "\fB\-frecord\-gcc\-switches\fR" 4
14907 .IX Item "-frecord-gcc-switches"
14908 This switch causes the command line that was used to invoke the
14909 compiler to be recorded into the object file that is being created.
14910 This switch is only implemented on some targets and the exact format
14911 of the recording is target and binary file format dependent, but it
14912 usually takes the form of a section containing \s-1ASCII\s0 text.  This
14913 switch is related to the \fB\-fverbose\-asm\fR switch, but that
14914 switch only records information in the assembler output file as
14915 comments, so it never reaches the object file.
14916 .IP "\fB\-fpic\fR" 4
14917 .IX Item "-fpic"
14918 Generate position-independent code (\s-1PIC\s0) suitable for use in a shared
14919 library, if supported for the target machine.  Such code accesses all
14920 constant addresses through a global offset table (\s-1GOT\s0).  The dynamic
14921 loader resolves the \s-1GOT\s0 entries when the program starts (the dynamic
14922 loader is not part of \s-1GCC\s0; it is part of the operating system).  If
14923 the \s-1GOT\s0 size for the linked executable exceeds a machine-specific
14924 maximum size, you get an error message from the linker indicating that
14925 \&\fB\-fpic\fR does not work; in that case, recompile with \fB\-fPIC\fR
14926 instead.  (These maximums are 8k on the \s-1SPARC\s0 and 32k
14927 on the m68k and \s-1RS/6000\s0.  The 386 has no such limit.)
14928 .Sp
14929 Position-independent code requires special support, and therefore works
14930 only on certain machines.  For the 386, \s-1GCC\s0 supports \s-1PIC\s0 for System V
14931 but not for the Sun 386i.  Code generated for the \s-1IBM\s0 \s-1RS/6000\s0 is always
14932 position\-independent.
14933 .Sp
14934 When this flag is set, the macros \f(CW\*(C`_\|_pic_\|_\*(C'\fR and \f(CW\*(C`_\|_PIC_\|_\*(C'\fR
14935 are defined to 1.
14936 .IP "\fB\-fPIC\fR" 4
14937 .IX Item "-fPIC"
14938 If supported for the target machine, emit position-independent code,
14939 suitable for dynamic linking and avoiding any limit on the size of the
14940 global offset table.  This option makes a difference on the m68k,
14941 PowerPC and \s-1SPARC\s0.
14942 .Sp
14943 Position-independent code requires special support, and therefore works
14944 only on certain machines.
14945 .Sp
14946 When this flag is set, the macros \f(CW\*(C`_\|_pic_\|_\*(C'\fR and \f(CW\*(C`_\|_PIC_\|_\*(C'\fR
14947 are defined to 2.
14948 .IP "\fB\-fpie\fR" 4
14949 .IX Item "-fpie"
14950 .PD 0
14951 .IP "\fB\-fPIE\fR" 4
14952 .IX Item "-fPIE"
14953 .PD
14954 These options are similar to \fB\-fpic\fR and \fB\-fPIC\fR, but
14955 generated position independent code can be only linked into executables.
14956 Usually these options are used when \fB\-pie\fR \s-1GCC\s0 option will be
14957 used during linking.
14958 .Sp
14959 \&\fB\-fpie\fR and \fB\-fPIE\fR both define the macros
14960 \&\f(CW\*(C`_\|_pie_\|_\*(C'\fR and \f(CW\*(C`_\|_PIE_\|_\*(C'\fR.  The macros have the value 1
14961 for \fB\-fpie\fR and 2 for \fB\-fPIE\fR.
14962 .IP "\fB\-fno\-jump\-tables\fR" 4
14963 .IX Item "-fno-jump-tables"
14964 Do not use jump tables for switch statements even where it would be
14965 more efficient than other code generation strategies.  This option is
14966 of use in conjunction with \fB\-fpic\fR or \fB\-fPIC\fR for
14967 building code which forms part of a dynamic linker and cannot
14968 reference the address of a jump table.  On some targets, jump tables
14969 do not require a \s-1GOT\s0 and this option is not needed.
14970 .IP "\fB\-ffixed\-\fR\fIreg\fR" 4
14971 .IX Item "-ffixed-reg"
14972 Treat the register named \fIreg\fR as a fixed register; generated code
14973 should never refer to it (except perhaps as a stack pointer, frame
14974 pointer or in some other fixed role).
14975 .Sp
14976 \&\fIreg\fR must be the name of a register.  The register names accepted
14977 are machine-specific and are defined in the \f(CW\*(C`REGISTER_NAMES\*(C'\fR
14978 macro in the machine description macro file.
14979 .Sp
14980 This flag does not have a negative form, because it specifies a
14981 three-way choice.
14982 .IP "\fB\-fcall\-used\-\fR\fIreg\fR" 4
14983 .IX Item "-fcall-used-reg"
14984 Treat the register named \fIreg\fR as an allocable register that is
14985 clobbered by function calls.  It may be allocated for temporaries or
14986 variables that do not live across a call.  Functions compiled this way
14987 will not save and restore the register \fIreg\fR.
14988 .Sp
14989 It is an error to used this flag with the frame pointer or stack pointer.
14990 Use of this flag for other registers that have fixed pervasive roles in
14991 the machine's execution model will produce disastrous results.
14992 .Sp
14993 This flag does not have a negative form, because it specifies a
14994 three-way choice.
14995 .IP "\fB\-fcall\-saved\-\fR\fIreg\fR" 4
14996 .IX Item "-fcall-saved-reg"
14997 Treat the register named \fIreg\fR as an allocable register saved by
14998 functions.  It may be allocated even for temporaries or variables that
14999 live across a call.  Functions compiled this way will save and restore
15000 the register \fIreg\fR if they use it.
15001 .Sp
15002 It is an error to used this flag with the frame pointer or stack pointer.
15003 Use of this flag for other registers that have fixed pervasive roles in
15004 the machine's execution model will produce disastrous results.
15005 .Sp
15006 A different sort of disaster will result from the use of this flag for
15007 a register in which function values may be returned.
15008 .Sp
15009 This flag does not have a negative form, because it specifies a
15010 three-way choice.
15011 .IP "\fB\-fpack\-struct[=\fR\fIn\fR\fB]\fR" 4
15012 .IX Item "-fpack-struct[=n]"
15013 Without a value specified, pack all structure members together without
15014 holes.  When a value is specified (which must be a small power of two), pack
15015 structure members according to this value, representing the maximum
15016 alignment (that is, objects with default alignment requirements larger than
15017 this will be output potentially unaligned at the next fitting location.
15018 .Sp
15019 \&\fBWarning:\fR the \fB\-fpack\-struct\fR switch causes \s-1GCC\s0 to generate
15020 code that is not binary compatible with code generated without that switch.
15021 Additionally, it makes the code suboptimal.
15022 Use it to conform to a non-default application binary interface.
15023 .IP "\fB\-finstrument\-functions\fR" 4
15024 .IX Item "-finstrument-functions"
15025 Generate instrumentation calls for entry and exit to functions.  Just
15026 after function entry and just before function exit, the following
15027 profiling functions will be called with the address of the current
15028 function and its call site.  (On some platforms,
15029 \&\f(CW\*(C`_\|_builtin_return_address\*(C'\fR does not work beyond the current
15030 function, so the call site information may not be available to the
15031 profiling functions otherwise.)
15032 .Sp
15033 .Vb 4
15034 \&        void __cyg_profile_func_enter (void *this_fn,
15035 \&                                       void *call_site);
15036 \&        void __cyg_profile_func_exit  (void *this_fn,
15037 \&                                       void *call_site);
15038 .Ve
15039 .Sp
15040 The first argument is the address of the start of the current function,
15041 which may be looked up exactly in the symbol table.
15042 .Sp
15043 This instrumentation is also done for functions expanded inline in other
15044 functions.  The profiling calls will indicate where, conceptually, the
15045 inline function is entered and exited.  This means that addressable
15046 versions of such functions must be available.  If all your uses of a
15047 function are expanded inline, this may mean an additional expansion of
15048 code size.  If you use \fBextern inline\fR in your C code, an
15049 addressable version of such functions must be provided.  (This is
15050 normally the case anyways, but if you get lucky and the optimizer always
15051 expands the functions inline, you might have gotten away without
15052 providing static copies.)
15053 .Sp
15054 A function may be given the attribute \f(CW\*(C`no_instrument_function\*(C'\fR, in
15055 which case this instrumentation will not be done.  This can be used, for
15056 example, for the profiling functions listed above, high-priority
15057 interrupt routines, and any functions from which the profiling functions
15058 cannot safely be called (perhaps signal handlers, if the profiling
15059 routines generate output or allocate memory).
15060 .IP "\fB\-finstrument\-functions\-exclude\-file\-list=\fR\fIfile\fR\fB,\fR\fIfile\fR\fB,...\fR" 4
15061 .IX Item "-finstrument-functions-exclude-file-list=file,file,..."
15062 Set the list of functions that are excluded from instrumentation (see
15063 the description of \f(CW\*(C`\-finstrument\-functions\*(C'\fR).  If the file that
15064 contains a function definition matches with one of \fIfile\fR, then
15065 that function is not instrumented.  The match is done on substrings:
15066 if the \fIfile\fR parameter is a substring of the file name, it is
15067 considered to be a match.
15068 .Sp
15069 For example,
15070 \&\f(CW\*(C`\-finstrument\-functions\-exclude\-file\-list=/bits/stl,include/sys\*(C'\fR
15071 will exclude any inline function defined in files whose pathnames
15072 contain \f(CW\*(C`/bits/stl\*(C'\fR or \f(CW\*(C`include/sys\*(C'\fR.
15073 .Sp
15074 If, for some reason, you want to include letter \f(CW','\fR in one of
15075 \&\fIsym\fR, write \f(CW','\fR. For example,
15076 \&\f(CW\*(C`\-finstrument\-functions\-exclude\-file\-list=',,tmp'\*(C'\fR
15077 (note the single quote surrounding the option).
15078 .IP "\fB\-finstrument\-functions\-exclude\-function\-list=\fR\fIsym\fR\fB,\fR\fIsym\fR\fB,...\fR" 4
15079 .IX Item "-finstrument-functions-exclude-function-list=sym,sym,..."
15080 This is similar to \f(CW\*(C`\-finstrument\-functions\-exclude\-file\-list\*(C'\fR,
15081 but this option sets the list of function names to be excluded from
15082 instrumentation.  The function name to be matched is its user-visible
15083 name, such as \f(CW\*(C`vector<int> blah(const vector<int> &)\*(C'\fR, not the
15084 internal mangled name (e.g., \f(CW\*(C`_Z4blahRSt6vectorIiSaIiEE\*(C'\fR).  The
15085 match is done on substrings: if the \fIsym\fR parameter is a substring
15086 of the function name, it is considered to be a match.
15087 .IP "\fB\-fstack\-check\fR" 4
15088 .IX Item "-fstack-check"
15089 Generate code to verify that you do not go beyond the boundary of the
15090 stack.  You should specify this flag if you are running in an
15091 environment with multiple threads, but only rarely need to specify it in
15092 a single-threaded environment since stack overflow is automatically
15093 detected on nearly all systems if there is only one stack.
15094 .Sp
15095 Note that this switch does not actually cause checking to be done; the
15096 operating system or the language runtime must do that.  The switch causes
15097 generation of code to ensure that they see the stack being extended.
15098 .Sp
15099 You can additionally specify a string parameter: \f(CW\*(C`no\*(C'\fR means no
15100 checking, \f(CW\*(C`generic\*(C'\fR means force the use of old-style checking,
15101 \&\f(CW\*(C`specific\*(C'\fR means use the best checking method and is equivalent
15102 to bare \fB\-fstack\-check\fR.
15103 .Sp
15104 Old-style checking is a generic mechanism that requires no specific
15105 target support in the compiler but comes with the following drawbacks:
15106 .RS 4
15107 .IP "1." 4
15108 Modified allocation strategy for large objects: they will always be
15109 allocated dynamically if their size exceeds a fixed threshold.
15110 .IP "2." 4
15111 Fixed limit on the size of the static frame of functions: when it is
15112 topped by a particular function, stack checking is not reliable and
15113 a warning is issued by the compiler.
15114 .IP "3." 4
15115 Inefficiency: because of both the modified allocation strategy and the
15116 generic implementation, the performances of the code are hampered.
15117 .RE
15118 .RS 4
15119 .Sp
15120 Note that old-style stack checking is also the fallback method for
15121 \&\f(CW\*(C`specific\*(C'\fR if no target support has been added in the compiler.
15122 .RE
15123 .IP "\fB\-fstack\-limit\-register=\fR\fIreg\fR" 4
15124 .IX Item "-fstack-limit-register=reg"
15125 .PD 0
15126 .IP "\fB\-fstack\-limit\-symbol=\fR\fIsym\fR" 4
15127 .IX Item "-fstack-limit-symbol=sym"
15128 .IP "\fB\-fno\-stack\-limit\fR" 4
15129 .IX Item "-fno-stack-limit"
15130 .PD
15131 Generate code to ensure that the stack does not grow beyond a certain value,
15132 either the value of a register or the address of a symbol.  If the stack
15133 would grow beyond the value, a signal is raised.  For most targets,
15134 the signal is raised before the stack overruns the boundary, so
15135 it is possible to catch the signal without taking special precautions.
15136 .Sp
15137 For instance, if the stack starts at absolute address \fB0x80000000\fR
15138 and grows downwards, you can use the flags
15139 \&\fB\-fstack\-limit\-symbol=_\|_stack_limit\fR and
15140 \&\fB\-Wl,\-\-defsym,_\|_stack_limit=0x7ffe0000\fR to enforce a stack limit
15141 of 128KB.  Note that this may only work with the \s-1GNU\s0 linker.
15142 .IP "\fB\-fargument\-alias\fR" 4
15143 .IX Item "-fargument-alias"
15144 .PD 0
15145 .IP "\fB\-fargument\-noalias\fR" 4
15146 .IX Item "-fargument-noalias"
15147 .IP "\fB\-fargument\-noalias\-global\fR" 4
15148 .IX Item "-fargument-noalias-global"
15149 .IP "\fB\-fargument\-noalias\-anything\fR" 4
15150 .IX Item "-fargument-noalias-anything"
15151 .PD
15152 Specify the possible relationships among parameters and between
15153 parameters and global data.
15154 .Sp
15155 \&\fB\-fargument\-alias\fR specifies that arguments (parameters) may
15156 alias each other and may alias global storage.\fB\-fargument\-noalias\fR specifies that arguments do not alias
15157 each other, but may alias global storage.\fB\-fargument\-noalias\-global\fR specifies that arguments do not
15158 alias each other and do not alias global storage.
15159 \&\fB\-fargument\-noalias\-anything\fR specifies that arguments do not
15160 alias any other storage.
15161 .Sp
15162 Each language will automatically use whatever option is required by
15163 the language standard.  You should not need to use these options yourself.
15164 .IP "\fB\-fleading\-underscore\fR" 4
15165 .IX Item "-fleading-underscore"
15166 This option and its counterpart, \fB\-fno\-leading\-underscore\fR, forcibly
15167 change the way C symbols are represented in the object file.  One use
15168 is to help link with legacy assembly code.
15169 .Sp
15170 \&\fBWarning:\fR the \fB\-fleading\-underscore\fR switch causes \s-1GCC\s0 to
15171 generate code that is not binary compatible with code generated without that
15172 switch.  Use it to conform to a non-default application binary interface.
15173 Not all targets provide complete support for this switch.
15174 .IP "\fB\-ftls\-model=\fR\fImodel\fR" 4
15175 .IX Item "-ftls-model=model"
15176 Alter the thread-local storage model to be used.
15177 The \fImodel\fR argument should be one of \f(CW\*(C`global\-dynamic\*(C'\fR,
15178 \&\f(CW\*(C`local\-dynamic\*(C'\fR, \f(CW\*(C`initial\-exec\*(C'\fR or \f(CW\*(C`local\-exec\*(C'\fR.
15179 .Sp
15180 The default without \fB\-fpic\fR is \f(CW\*(C`initial\-exec\*(C'\fR; with
15181 \&\fB\-fpic\fR the default is \f(CW\*(C`global\-dynamic\*(C'\fR.
15182 .IP "\fB\-fvisibility=\fR\fIdefault|internal|hidden|protected\fR" 4
15183 .IX Item "-fvisibility=default|internal|hidden|protected"
15184 Set the default \s-1ELF\s0 image symbol visibility to the specified option\-\-\-all
15185 symbols will be marked with this unless overridden within the code.
15186 Using this feature can very substantially improve linking and
15187 load times of shared object libraries, produce more optimized
15188 code, provide near-perfect \s-1API\s0 export and prevent symbol clashes.
15189 It is \fBstrongly\fR recommended that you use this in any shared objects
15190 you distribute.
15191 .Sp
15192 Despite the nomenclature, \f(CW\*(C`default\*(C'\fR always means public ie;
15193 available to be linked against from outside the shared object.
15194 \&\f(CW\*(C`protected\*(C'\fR and \f(CW\*(C`internal\*(C'\fR are pretty useless in real-world
15195 usage so the only other commonly used option will be \f(CW\*(C`hidden\*(C'\fR.
15196 The default if \fB\-fvisibility\fR isn't specified is
15197 \&\f(CW\*(C`default\*(C'\fR, i.e., make every
15198 symbol public\-\-\-this causes the same behavior as previous versions of
15199 \&\s-1GCC\s0.
15200 .Sp
15201 A good explanation of the benefits offered by ensuring \s-1ELF\s0
15202 symbols have the correct visibility is given by \*(L"How To Write
15203 Shared Libraries\*(R" by Ulrich Drepper (which can be found at
15204 <\fBhttp://people.redhat.com/~drepper/\fR>)\-\-\-however a superior
15205 solution made possible by this option to marking things hidden when
15206 the default is public is to make the default hidden and mark things
15207 public.  This is the norm with \s-1DLL\s0's on Windows and with \fB\-fvisibility=hidden\fR
15208 and \f(CW\*(C`_\|_attribute_\|_ ((visibility("default")))\*(C'\fR instead of
15209 \&\f(CW\*(C`_\|_declspec(dllexport)\*(C'\fR you get almost identical semantics with
15210 identical syntax.  This is a great boon to those working with
15211 cross-platform projects.
15212 .Sp
15213 For those adding visibility support to existing code, you may find
15214 \&\fB#pragma \s-1GCC\s0 visibility\fR of use.  This works by you enclosing
15215 the declarations you wish to set visibility for with (for example)
15216 \&\fB#pragma \s-1GCC\s0 visibility push(hidden)\fR and
15217 \&\fB#pragma \s-1GCC\s0 visibility pop\fR.
15218 Bear in mind that symbol visibility should be viewed \fBas
15219 part of the \s-1API\s0 interface contract\fR and thus all new code should
15220 always specify visibility when it is not the default ie; declarations
15221 only for use within the local \s-1DSO\s0 should \fBalways\fR be marked explicitly
15222 as hidden as so to avoid \s-1PLT\s0 indirection overheads\-\-\-making this
15223 abundantly clear also aids readability and self-documentation of the code.
15224 Note that due to \s-1ISO\s0 \*(C+ specification requirements, operator new and
15225 operator delete must always be of default visibility.
15226 .Sp
15227 Be aware that headers from outside your project, in particular system
15228 headers and headers from any other library you use, may not be
15229 expecting to be compiled with visibility other than the default.  You
15230 may need to explicitly say \fB#pragma \s-1GCC\s0 visibility push(default)\fR
15231 before including any such headers.
15232 .Sp
15233 \&\fBextern\fR declarations are not affected by \fB\-fvisibility\fR, so
15234 a lot of code can be recompiled with \fB\-fvisibility=hidden\fR with
15235 no modifications.  However, this means that calls to \fBextern\fR
15236 functions with no explicit visibility will use the \s-1PLT\s0, so it is more
15237 effective to use \fB_\|_attribute ((visibility))\fR and/or
15238 \&\fB#pragma \s-1GCC\s0 visibility\fR to tell the compiler which \fBextern\fR
15239 declarations should be treated as hidden.
15240 .Sp
15241 Note that \fB\-fvisibility\fR does affect \*(C+ vague linkage
15242 entities. This means that, for instance, an exception class that will
15243 be thrown between DSOs must be explicitly marked with default
15244 visibility so that the \fBtype_info\fR nodes will be unified between
15245 the DSOs.
15246 .Sp
15247 An overview of these techniques, their benefits and how to use them
15248 is at <\fBhttp://gcc.gnu.org/wiki/Visibility\fR>.
15249 .SH "ENVIRONMENT"
15250 .IX Header "ENVIRONMENT"
15251 This section describes several environment variables that affect how \s-1GCC\s0
15252 operates.  Some of them work by specifying directories or prefixes to use
15253 when searching for various kinds of files.  Some are used to specify other
15254 aspects of the compilation environment.
15255 .PP
15256 Note that you can also specify places to search using options such as
15257 \&\fB\-B\fR, \fB\-I\fR and \fB\-L\fR.  These
15258 take precedence over places specified using environment variables, which
15259 in turn take precedence over those specified by the configuration of \s-1GCC\s0.
15260 .IP "\fB\s-1LANG\s0\fR" 4
15261 .IX Item "LANG"
15262 .PD 0
15263 .IP "\fB\s-1LC_CTYPE\s0\fR" 4
15264 .IX Item "LC_CTYPE"
15265 .IP "\fB\s-1LC_MESSAGES\s0\fR" 4
15266 .IX Item "LC_MESSAGES"
15267 .IP "\fB\s-1LC_ALL\s0\fR" 4
15268 .IX Item "LC_ALL"
15269 .PD
15270 These environment variables control the way that \s-1GCC\s0 uses
15271 localization information that allow \s-1GCC\s0 to work with different
15272 national conventions.  \s-1GCC\s0 inspects the locale categories
15273 \&\fB\s-1LC_CTYPE\s0\fR and \fB\s-1LC_MESSAGES\s0\fR if it has been configured to do
15274 so.  These locale categories can be set to any value supported by your
15275 installation.  A typical value is \fBen_GB.UTF\-8\fR for English in the United
15276 Kingdom encoded in \s-1UTF\-8\s0.
15277 .Sp
15278 The \fB\s-1LC_CTYPE\s0\fR environment variable specifies character
15279 classification.  \s-1GCC\s0 uses it to determine the character boundaries in
15280 a string; this is needed for some multibyte encodings that contain quote
15281 and escape characters that would otherwise be interpreted as a string
15282 end or escape.
15283 .Sp
15284 The \fB\s-1LC_MESSAGES\s0\fR environment variable specifies the language to
15285 use in diagnostic messages.
15286 .Sp
15287 If the \fB\s-1LC_ALL\s0\fR environment variable is set, it overrides the value
15288 of \fB\s-1LC_CTYPE\s0\fR and \fB\s-1LC_MESSAGES\s0\fR; otherwise, \fB\s-1LC_CTYPE\s0\fR
15289 and \fB\s-1LC_MESSAGES\s0\fR default to the value of the \fB\s-1LANG\s0\fR
15290 environment variable.  If none of these variables are set, \s-1GCC\s0
15291 defaults to traditional C English behavior.
15292 .IP "\fB\s-1TMPDIR\s0\fR" 4
15293 .IX Item "TMPDIR"
15294 If \fB\s-1TMPDIR\s0\fR is set, it specifies the directory to use for temporary
15295 files.  \s-1GCC\s0 uses temporary files to hold the output of one stage of
15296 compilation which is to be used as input to the next stage: for example,
15297 the output of the preprocessor, which is the input to the compiler
15298 proper.
15299 .IP "\fB\s-1GCC_EXEC_PREFIX\s0\fR" 4
15300 .IX Item "GCC_EXEC_PREFIX"
15301 If \fB\s-1GCC_EXEC_PREFIX\s0\fR is set, it specifies a prefix to use in the
15302 names of the subprograms executed by the compiler.  No slash is added
15303 when this prefix is combined with the name of a subprogram, but you can
15304 specify a prefix that ends with a slash if you wish.
15305 .Sp
15306 If \fB\s-1GCC_EXEC_PREFIX\s0\fR is not set, \s-1GCC\s0 will attempt to figure out
15307 an appropriate prefix to use based on the pathname it was invoked with.
15308 .Sp
15309 If \s-1GCC\s0 cannot find the subprogram using the specified prefix, it
15310 tries looking in the usual places for the subprogram.
15311 .Sp
15312 The default value of \fB\s-1GCC_EXEC_PREFIX\s0\fR is
15313 \&\fI\fIprefix\fI/lib/gcc/\fR where \fIprefix\fR is the prefix to
15314 the installed compiler. In many cases \fIprefix\fR is the value
15315 of \f(CW\*(C`prefix\*(C'\fR when you ran the \fIconfigure\fR script.
15316 .Sp
15317 Other prefixes specified with \fB\-B\fR take precedence over this prefix.
15318 .Sp
15319 This prefix is also used for finding files such as \fIcrt0.o\fR that are
15320 used for linking.
15321 .Sp
15322 In addition, the prefix is used in an unusual way in finding the
15323 directories to search for header files.  For each of the standard
15324 directories whose name normally begins with \fB/usr/local/lib/gcc\fR
15325 (more precisely, with the value of \fB\s-1GCC_INCLUDE_DIR\s0\fR), \s-1GCC\s0 tries
15326 replacing that beginning with the specified prefix to produce an
15327 alternate directory name.  Thus, with \fB\-Bfoo/\fR, \s-1GCC\s0 will search
15328 \&\fIfoo/bar\fR where it would normally search \fI/usr/local/lib/bar\fR.
15329 These alternate directories are searched first; the standard directories
15330 come next. If a standard directory begins with the configured
15331 \&\fIprefix\fR then the value of \fIprefix\fR is replaced by
15332 \&\fB\s-1GCC_EXEC_PREFIX\s0\fR when looking for header files.
15333 .IP "\fB\s-1COMPILER_PATH\s0\fR" 4
15334 .IX Item "COMPILER_PATH"
15335 The value of \fB\s-1COMPILER_PATH\s0\fR is a colon-separated list of
15336 directories, much like \fB\s-1PATH\s0\fR.  \s-1GCC\s0 tries the directories thus
15337 specified when searching for subprograms, if it can't find the
15338 subprograms using \fB\s-1GCC_EXEC_PREFIX\s0\fR.
15339 .IP "\fB\s-1LIBRARY_PATH\s0\fR" 4
15340 .IX Item "LIBRARY_PATH"
15341 The value of \fB\s-1LIBRARY_PATH\s0\fR is a colon-separated list of
15342 directories, much like \fB\s-1PATH\s0\fR.  When configured as a native compiler,
15343 \&\s-1GCC\s0 tries the directories thus specified when searching for special
15344 linker files, if it can't find them using \fB\s-1GCC_EXEC_PREFIX\s0\fR.  Linking
15345 using \s-1GCC\s0 also uses these directories when searching for ordinary
15346 libraries for the \fB\-l\fR option (but directories specified with
15347 \&\fB\-L\fR come first).
15348 .IP "\fB\s-1LANG\s0\fR" 4
15349 .IX Item "LANG"
15350 This variable is used to pass locale information to the compiler.  One way in
15351 which this information is used is to determine the character set to be used
15352 when character literals, string literals and comments are parsed in C and \*(C+.
15353 When the compiler is configured to allow multibyte characters,
15354 the following values for \fB\s-1LANG\s0\fR are recognized:
15355 .RS 4
15356 .IP "\fBC\-JIS\fR" 4
15357 .IX Item "C-JIS"
15358 Recognize \s-1JIS\s0 characters.
15359 .IP "\fBC\-SJIS\fR" 4
15360 .IX Item "C-SJIS"
15361 Recognize \s-1SJIS\s0 characters.
15362 .IP "\fBC\-EUCJP\fR" 4
15363 .IX Item "C-EUCJP"
15364 Recognize \s-1EUCJP\s0 characters.
15365 .RE
15366 .RS 4
15367 .Sp
15368 If \fB\s-1LANG\s0\fR is not defined, or if it has some other value, then the
15369 compiler will use mblen and mbtowc as defined by the default locale to
15370 recognize and translate multibyte characters.
15371 .RE
15372 .PP
15373 Some additional environments variables affect the behavior of the
15374 preprocessor.
15375 .IP "\fB\s-1CPATH\s0\fR" 4
15376 .IX Item "CPATH"
15377 .PD 0
15378 .IP "\fBC_INCLUDE_PATH\fR" 4
15379 .IX Item "C_INCLUDE_PATH"
15380 .IP "\fB\s-1CPLUS_INCLUDE_PATH\s0\fR" 4
15381 .IX Item "CPLUS_INCLUDE_PATH"
15382 .IP "\fB\s-1OBJC_INCLUDE_PATH\s0\fR" 4
15383 .IX Item "OBJC_INCLUDE_PATH"
15384 .PD
15385 Each variable's value is a list of directories separated by a special
15386 character, much like \fB\s-1PATH\s0\fR, in which to look for header files.
15387 The special character, \f(CW\*(C`PATH_SEPARATOR\*(C'\fR, is target-dependent and
15388 determined at \s-1GCC\s0 build time.  For Microsoft Windows-based targets it is a
15389 semicolon, and for almost all other targets it is a colon.
15390 .Sp
15391 \&\fB\s-1CPATH\s0\fR specifies a list of directories to be searched as if
15392 specified with \fB\-I\fR, but after any paths given with \fB\-I\fR
15393 options on the command line.  This environment variable is used
15394 regardless of which language is being preprocessed.
15395 .Sp
15396 The remaining environment variables apply only when preprocessing the
15397 particular language indicated.  Each specifies a list of directories
15398 to be searched as if specified with \fB\-isystem\fR, but after any
15399 paths given with \fB\-isystem\fR options on the command line.
15400 .Sp
15401 In all these variables, an empty element instructs the compiler to
15402 search its current working directory.  Empty elements can appear at the
15403 beginning or end of a path.  For instance, if the value of
15404 \&\fB\s-1CPATH\s0\fR is \f(CW\*(C`:/special/include\*(C'\fR, that has the same
15405 effect as \fB\-I.\ \-I/special/include\fR.
15406 .IP "\fB\s-1DEPENDENCIES_OUTPUT\s0\fR" 4
15407 .IX Item "DEPENDENCIES_OUTPUT"
15408 If this variable is set, its value specifies how to output
15409 dependencies for Make based on the non-system header files processed
15410 by the compiler.  System header files are ignored in the dependency
15411 output.
15412 .Sp
15413 The value of \fB\s-1DEPENDENCIES_OUTPUT\s0\fR can be just a file name, in
15414 which case the Make rules are written to that file, guessing the target
15415 name from the source file name.  Or the value can have the form
15416 \&\fIfile\fR\fB \fR\fItarget\fR, in which case the rules are written to
15417 file \fIfile\fR using \fItarget\fR as the target name.
15418 .Sp
15419 In other words, this environment variable is equivalent to combining
15420 the options \fB\-MM\fR and \fB\-MF\fR,
15421 with an optional \fB\-MT\fR switch too.
15422 .IP "\fB\s-1SUNPRO_DEPENDENCIES\s0\fR" 4
15423 .IX Item "SUNPRO_DEPENDENCIES"
15424 This variable is the same as \fB\s-1DEPENDENCIES_OUTPUT\s0\fR (see above),
15425 except that system header files are not ignored, so it implies
15426 \&\fB\-M\fR rather than \fB\-MM\fR.  However, the dependence on the
15427 main input file is omitted.
15428 .SH "BUGS"
15429 .IX Header "BUGS"
15430 For instructions on reporting bugs, see
15431 <\fBhttp://gcc.gnu.org/bugs.html\fR>.
15432 .SH "FOOTNOTES"
15433 .IX Header "FOOTNOTES"
15434 .IP "1." 4
15435 On some systems, \fBgcc \-shared\fR
15436 needs to build supplementary stub code for constructors to work.  On
15437 multi-libbed systems, \fBgcc \-shared\fR must select the correct support
15438 libraries to link against.  Failing to supply the correct flags may lead
15439 to subtle defects.  Supplying them in cases where they are not necessary
15440 is innocuous.
15441 .SH "SEE ALSO"
15442 .IX Header "SEE ALSO"
15443 \&\fIgpl\fR\|(7), \fIgfdl\fR\|(7), \fIfsf\-funding\fR\|(7),
15444 \&\fIcpp\fR\|(1), \fIgcov\fR\|(1), \fIas\fR\|(1), \fIld\fR\|(1), \fIgdb\fR\|(1), \fIadb\fR\|(1), \fIdbx\fR\|(1), \fIsdb\fR\|(1)
15445 and the Info entries for \fIgcc\fR, \fIcpp\fR, \fIas\fR,
15446 \&\fIld\fR, \fIbinutils\fR and \fIgdb\fR.
15447 .SH "AUTHOR"
15448 .IX Header "AUTHOR"
15449 See the Info entry for \fBgcc\fR, or
15450 <\fBhttp://gcc.gnu.org/onlinedocs/gcc/Contributors.html\fR>,
15451 for contributors to \s-1GCC\s0.
15452 .SH "COPYRIGHT"
15453 .IX Header "COPYRIGHT"
15454 Copyright (c) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
15455 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
15456 Free Software Foundation, Inc.
15457 .PP
15458 Permission is granted to copy, distribute and/or modify this document
15459 under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.2 or
15460 any later version published by the Free Software Foundation; with the
15461 Invariant Sections being \*(L"\s-1GNU\s0 General Public License\*(R" and \*(L"Funding
15462 Free Software\*(R", the Front-Cover texts being (a) (see below), and with
15463 the Back-Cover Texts being (b) (see below).  A copy of the license is
15464 included in the \fIgfdl\fR\|(7) man page.
15465 .PP
15466 (a) The \s-1FSF\s0's Front-Cover Text is:
15467 .PP
15468 .Vb 1
15469 \&     A GNU Manual
15470 .Ve
15471 .PP
15472 (b) The \s-1FSF\s0's Back-Cover Text is:
15473 .PP
15474 .Vb 3
15475 \&     You have freedom to copy and modify this GNU Manual, like GNU
15476 \&     software.  Copies published by the Free Software Foundation raise
15477 \&     funds for GNU development.
15478 .Ve