1GCC(1)                                GNU                               GCC(1)
2
3
4

NAME

6       gcc - GNU project C and C++ compiler
7

SYNOPSIS

9       gcc [-c|-S|-E] [-std=standard]
10           [-g] [-pg] [-Olevel]
11           [-Wwarn...] [-Wpedantic]
12           [-Idir...] [-Ldir...]
13           [-Dmacro[=defn]...] [-Umacro]
14           [-foption...] [-mmachine-option...]
15           [-o outfile] [@file] infile...
16
17       Only the most useful options are listed here; see below for the
18       remainder.  g++ accepts mostly the same options as gcc.
19

DESCRIPTION

21       When you invoke GCC, it normally does preprocessing, compilation,
22       assembly and linking.  The "overall options" allow you to stop this
23       process at an intermediate stage.  For example, the -c option says not
24       to run the linker.  Then the output consists of object files output by
25       the assembler.
26
27       Other options are passed on to one or more stages of processing.  Some
28       options control the preprocessor and others the compiler itself.  Yet
29       other options control the assembler and linker; most of these are not
30       documented here, since you rarely need to use any of them.
31
32       Most of the command-line options that you can use with GCC are useful
33       for C programs; when an option is only useful with another language
34       (usually C++), the explanation says so explicitly.  If the description
35       for a particular option does not mention a source language, you can use
36       that option with all supported languages.
37
38       The usual way to run GCC is to run the executable called gcc, or
39       machine-gcc when cross-compiling, or machine-gcc-version to run a
40       specific version of GCC.  When you compile C++ programs, you should
41       invoke GCC as g++ instead.
42
43       The gcc program accepts options and file names as operands.  Many
44       options have multi-letter names; therefore multiple single-letter
45       options may not be grouped: -dv is very different from -d -v.
46
47       You can mix options and other arguments.  For the most part, the order
48       you use doesn't matter.  Order does matter when you use several options
49       of the same kind; for example, if you specify -L more than once, the
50       directories are searched in the order specified.  Also, the placement
51       of the -l option is significant.
52
53       Many options have long names starting with -f or with -W---for example,
54       -fmove-loop-invariants, -Wformat and so on.  Most of these have both
55       positive and negative forms; the negative form of -ffoo is -fno-foo.
56       This manual documents only one of these two forms, whichever one is not
57       the default.
58

OPTIONS

60   Option Summary
61       Here is a summary of all the options, grouped by type.  Explanations
62       are in the following sections.
63
64       Overall Options
65           -c  -S  -E  -o file  -x language -v  -###  --help[=class[,...]]
66           --target-help  --version -pass-exit-codes  -pipe  -specs=file
67           -wrapper @file  -ffile-prefix-map=old=new -fplugin=file
68           -fplugin-arg-name=arg -fdump-ada-spec[-slim]
69           -fada-spec-parent=unit  -fdump-go-spec=file
70
71       C Language Options
72           -ansi  -std=standard  -fgnu89-inline
73           -fpermitted-flt-eval-methods=standard -aux-info filename
74           -fallow-parameterless-variadic-functions -fno-asm  -fno-builtin
75           -fno-builtin-function  -fgimple -fhosted  -ffreestanding  -fopenacc
76           -fopenmp  -fopenmp-simd -fms-extensions  -fplan9-extensions
77           -fsso-struct=endianness -fallow-single-precision  -fcond-mismatch
78           -flax-vector-conversions -fsigned-bitfields  -fsigned-char
79           -funsigned-bitfields  -funsigned-char
80
81       C++ Language Options
82           -fabi-version=n  -fno-access-control -faligned-new=n
83           -fargs-in-order=n  -fcheck-new -fconstexpr-depth=n
84           -fconstexpr-loop-limit=n -ffriend-injection -fno-elide-constructors
85           -fno-enforce-eh-specs -ffor-scope  -fno-for-scope
86           -fno-gnu-keywords -fno-implicit-templates
87           -fno-implicit-inline-templates -fno-implement-inlines
88           -fms-extensions -fnew-inheriting-ctors -fnew-ttp-matching
89           -fno-nonansi-builtins  -fnothrow-opt  -fno-operator-names
90           -fno-optional-diags  -fpermissive -fno-pretty-templates -frepo
91           -fno-rtti  -fsized-deallocation -ftemplate-backtrace-limit=n
92           -ftemplate-depth=n -fno-threadsafe-statics  -fuse-cxa-atexit
93           -fno-weak  -nostdinc++ -fvisibility-inlines-hidden
94           -fvisibility-ms-compat -fext-numeric-literals -Wabi=n  -Wabi-tag
95           -Wconversion-null  -Wctor-dtor-privacy -Wdelete-non-virtual-dtor
96           -Wliteral-suffix  -Wmultiple-inheritance -Wnamespaces  -Wnarrowing
97           -Wnoexcept  -Wnoexcept-type  -Wclass-memaccess -Wnon-virtual-dtor
98           -Wreorder  -Wregister -Weffc++  -Wstrict-null-sentinel  -Wtemplates
99           -Wno-non-template-friend  -Wold-style-cast -Woverloaded-virtual
100           -Wno-pmf-conversions -Wsign-promo  -Wvirtual-inheritance
101
102       Objective-C and Objective-C++ Language Options
103           -fconstant-string-class=class-name -fgnu-runtime  -fnext-runtime
104           -fno-nil-receivers -fobjc-abi-version=n -fobjc-call-cxx-cdtors
105           -fobjc-direct-dispatch -fobjc-exceptions -fobjc-gc -fobjc-nilcheck
106           -fobjc-std=objc1 -fno-local-ivars
107           -fivar-visibility=[public|protected|private|package]
108           -freplace-objc-classes -fzero-link -gen-decls -Wassign-intercept
109           -Wno-protocol  -Wselector -Wstrict-selector-match
110           -Wundeclared-selector
111
112       Diagnostic Message Formatting Options
113           -fmessage-length=n -fdiagnostics-show-location=[once|every-line]
114           -fdiagnostics-color=[auto|never|always]
115           -fno-diagnostics-show-option  -fno-diagnostics-show-caret
116           -fdiagnostics-parseable-fixits  -fdiagnostics-generate-patch
117           -fdiagnostics-show-template-tree -fno-elide-type -fno-show-column
118
119       Warning Options
120           -fsyntax-only  -fmax-errors=n  -Wpedantic -pedantic-errors -w
121           -Wextra  -Wall  -Waddress  -Waggregate-return  -Waligned-new
122           -Walloc-zero  -Walloc-size-larger-than=n -Walloca
123           -Walloca-larger-than=n -Wno-aggressive-loop-optimizations
124           -Warray-bounds  -Warray-bounds=n -Wno-attributes  -Wbool-compare
125           -Wbool-operation -Wno-builtin-declaration-mismatch
126           -Wno-builtin-macro-redefined  -Wc90-c99-compat  -Wc99-c11-compat
127           -Wc++-compat  -Wc++11-compat  -Wc++14-compat -Wcast-align
128           -Wcast-align=strict  -Wcast-function-type  -Wcast-qual
129           -Wchar-subscripts  -Wchkp  -Wcatch-value  -Wcatch-value=n
130           -Wclobbered  -Wcomment  -Wconditionally-supported -Wconversion
131           -Wcoverage-mismatch  -Wno-cpp  -Wdangling-else  -Wdate-time
132           -Wdelete-incomplete -Wno-deprecated  -Wno-deprecated-declarations
133           -Wno-designated-init -Wdisabled-optimization
134           -Wno-discarded-qualifiers  -Wno-discarded-array-qualifiers
135           -Wno-div-by-zero  -Wdouble-promotion -Wduplicated-branches
136           -Wduplicated-cond -Wempty-body  -Wenum-compare  -Wno-endif-labels
137           -Wexpansion-to-defined -Werror  -Werror=*  -Wextra-semi
138           -Wfatal-errors -Wfloat-equal  -Wformat  -Wformat=2
139           -Wno-format-contains-nul  -Wno-format-extra-args
140           -Wformat-nonliteral -Wformat-overflow=n -Wformat-security
141           -Wformat-signedness  -Wformat-truncation=n -Wformat-y2k
142           -Wframe-address -Wframe-larger-than=len  -Wno-free-nonheap-object
143           -Wjump-misses-init -Wif-not-aligned -Wignored-qualifiers
144           -Wignored-attributes  -Wincompatible-pointer-types -Wimplicit
145           -Wimplicit-fallthrough  -Wimplicit-fallthrough=n
146           -Wimplicit-function-declaration  -Wimplicit-int -Winit-self
147           -Winline  -Wno-int-conversion  -Wint-in-bool-context
148           -Wno-int-to-pointer-cast  -Winvalid-memory-model
149           -Wno-invalid-offsetof -Winvalid-pch  -Wlarger-than=len -Wlogical-op
150           -Wlogical-not-parentheses  -Wlong-long -Wmain
151           -Wmaybe-uninitialized  -Wmemset-elt-size  -Wmemset-transposed-args
152           -Wmisleading-indentation  -Wmissing-attributes -Wmissing-braces
153           -Wmissing-field-initializers  -Wmissing-include-dirs -Wno-multichar
154           -Wmultistatement-macros  -Wnonnull  -Wnonnull-compare
155           -Wnormalized=[none|id|nfc|nfkc] -Wnull-dereference  -Wodr
156           -Wno-overflow  -Wopenmp-simd -Woverride-init-side-effects
157           -Woverlength-strings -Wpacked  -Wpacked-bitfield-compat
158           -Wpacked-not-aligned -Wpadded -Wparentheses
159           -Wno-pedantic-ms-format -Wplacement-new  -Wplacement-new=n
160           -Wpointer-arith  -Wpointer-compare  -Wno-pointer-to-int-cast
161           -Wno-pragmas  -Wredundant-decls  -Wrestrict  -Wno-return-local-addr
162           -Wreturn-type  -Wsequence-point  -Wshadow  -Wno-shadow-ivar
163           -Wshadow=global,  -Wshadow=local,  -Wshadow=compatible-local
164           -Wshift-overflow  -Wshift-overflow=n -Wshift-count-negative
165           -Wshift-count-overflow  -Wshift-negative-value -Wsign-compare
166           -Wsign-conversion  -Wfloat-conversion -Wno-scalar-storage-order
167           -Wsizeof-pointer-div -Wsizeof-pointer-memaccess
168           -Wsizeof-array-argument -Wstack-protector  -Wstack-usage=len
169           -Wstrict-aliasing -Wstrict-aliasing=n  -Wstrict-overflow
170           -Wstrict-overflow=n -Wstringop-overflow=n -Wstringop-truncation
171           -Wsuggest-attribute=[pure|const|noreturn|format|malloc]
172           -Wsuggest-final-types   -Wsuggest-final-methods  -Wsuggest-override
173           -Wmissing-format-attribute  -Wsubobject-linkage -Wswitch
174           -Wswitch-bool  -Wswitch-default  -Wswitch-enum -Wswitch-unreachable
175           -Wsync-nand -Wsystem-headers  -Wtautological-compare  -Wtrampolines
176           -Wtrigraphs -Wtype-limits  -Wundef -Wuninitialized
177           -Wunknown-pragmas -Wunsuffixed-float-constants  -Wunused
178           -Wunused-function -Wunused-label  -Wunused-local-typedefs
179           -Wunused-macros -Wunused-parameter  -Wno-unused-result
180           -Wunused-value  -Wunused-variable -Wunused-const-variable
181           -Wunused-const-variable=n -Wunused-but-set-parameter
182           -Wunused-but-set-variable -Wuseless-cast  -Wvariadic-macros
183           -Wvector-operation-performance -Wvla  -Wvla-larger-than=n
184           -Wvolatile-register-var  -Wwrite-strings
185           -Wzero-as-null-pointer-constant  -Whsa
186
187       C and Objective-C-only Warning Options
188           -Wbad-function-cast  -Wmissing-declarations
189           -Wmissing-parameter-type  -Wmissing-prototypes  -Wnested-externs
190           -Wold-style-declaration  -Wold-style-definition -Wstrict-prototypes
191           -Wtraditional  -Wtraditional-conversion
192           -Wdeclaration-after-statement  -Wpointer-sign
193
194       Debugging Options
195           -g  -glevel  -gdwarf  -gdwarf-version -ggdb  -grecord-gcc-switches
196           -gno-record-gcc-switches -gstabs  -gstabs+  -gstrict-dwarf
197           -gno-strict-dwarf -gas-loc-support  -gno-as-loc-support
198           -gas-locview-support  -gno-as-locview-support -gcolumn-info
199           -gno-column-info -gstatement-frontiers  -gno-statement-frontiers
200           -gvariable-location-views  -gno-variable-location-views
201           -ginternal-reset-location-views  -gno-internal-reset-location-views
202           -ginline-points  -gno-inline-points -gvms  -gxcoff  -gxcoff+
203           -gz[=type] -fdebug-prefix-map=old=new  -fdebug-types-section
204           -fno-eliminate-unused-debug-types -femit-struct-debug-baseonly
205           -femit-struct-debug-reduced -femit-struct-debug-detailed[=spec-
206           list] -feliminate-unused-debug-symbols  -femit-class-debug-always
207           -fno-merge-debug-strings  -fno-dwarf2-cfi-asm -fvar-tracking
208           -fvar-tracking-assignments
209
210       Optimization Options
211           -faggressive-loop-optimizations  -falign-functions[=n]
212           -falign-jumps[=n] -falign-labels[=n]  -falign-loops[=n]
213           -fassociative-math  -fauto-profile  -fauto-profile[=path]
214           -fauto-inc-dec  -fbranch-probabilities
215           -fbranch-target-load-optimize  -fbranch-target-load-optimize2
216           -fbtr-bb-exclusive  -fcaller-saves -fcombine-stack-adjustments
217           -fconserve-stack -fcompare-elim  -fcprop-registers  -fcrossjumping
218           -fcse-follow-jumps  -fcse-skip-blocks  -fcx-fortran-rules
219           -fcx-limited-range -fdata-sections  -fdce  -fdelayed-branch
220           -fdelete-null-pointer-checks  -fdevirtualize
221           -fdevirtualize-speculatively -fdevirtualize-at-ltrans  -fdse
222           -fearly-inlining  -fipa-sra  -fexpensive-optimizations
223           -ffat-lto-objects -ffast-math  -ffinite-math-only  -ffloat-store
224           -fexcess-precision=style -fforward-propagate  -ffp-contract=style
225           -ffunction-sections -fgcse  -fgcse-after-reload  -fgcse-las
226           -fgcse-lm  -fgraphite-identity -fgcse-sm  -fhoist-adjacent-loads
227           -fif-conversion -fif-conversion2  -findirect-inlining
228           -finline-functions  -finline-functions-called-once
229           -finline-limit=n -finline-small-functions  -fipa-cp  -fipa-cp-clone
230           -fipa-bit-cp -fipa-vrp -fipa-pta  -fipa-profile  -fipa-pure-const
231           -fipa-reference  -fipa-icf -fira-algorithm=algorithm
232           -fira-region=region  -fira-hoist-pressure -fira-loop-pressure
233           -fno-ira-share-save-slots -fno-ira-share-spill-slots
234           -fisolate-erroneous-paths-dereference
235           -fisolate-erroneous-paths-attribute -fivopts
236           -fkeep-inline-functions  -fkeep-static-functions
237           -fkeep-static-consts  -flimit-function-alignment
238           -flive-range-shrinkage -floop-block  -floop-interchange
239           -floop-strip-mine -floop-unroll-and-jam  -floop-nest-optimize
240           -floop-parallelize-all  -flra-remat  -flto  -flto-compression-level
241           -flto-partition=alg  -fmerge-all-constants -fmerge-constants
242           -fmodulo-sched  -fmodulo-sched-allow-regmoves
243           -fmove-loop-invariants  -fno-branch-count-reg -fno-defer-pop
244           -fno-fp-int-builtin-inexact  -fno-function-cse
245           -fno-guess-branch-probability  -fno-inline  -fno-math-errno
246           -fno-peephole -fno-peephole2  -fno-printf-return-value
247           -fno-sched-interblock -fno-sched-spec  -fno-signed-zeros
248           -fno-toplevel-reorder  -fno-trapping-math
249           -fno-zero-initialized-in-bss -fomit-frame-pointer
250           -foptimize-sibling-calls -fpartial-inlining  -fpeel-loops
251           -fpredictive-commoning -fprefetch-loop-arrays -fprofile-correction
252           -fprofile-use  -fprofile-use=path  -fprofile-values
253           -fprofile-reorder-functions -freciprocal-math  -free
254           -frename-registers  -freorder-blocks
255           -freorder-blocks-algorithm=algorithm -freorder-blocks-and-partition
256           -freorder-functions -frerun-cse-after-loop
257           -freschedule-modulo-scheduled-loops -frounding-math
258           -fsched2-use-superblocks  -fsched-pressure -fsched-spec-load
259           -fsched-spec-load-dangerous -fsched-stalled-insns-dep[=n]
260           -fsched-stalled-insns[=n] -fsched-group-heuristic
261           -fsched-critical-path-heuristic -fsched-spec-insn-heuristic
262           -fsched-rank-heuristic -fsched-last-insn-heuristic
263           -fsched-dep-count-heuristic -fschedule-fusion -fschedule-insns
264           -fschedule-insns2  -fsection-anchors -fselective-scheduling
265           -fselective-scheduling2 -fsel-sched-pipelining
266           -fsel-sched-pipelining-outer-loops -fsemantic-interposition
267           -fshrink-wrap  -fshrink-wrap-separate -fsignaling-nans
268           -fsingle-precision-constant  -fsplit-ivs-in-unroller  -fsplit-loops
269           -fsplit-paths -fsplit-wide-types  -fssa-backprop  -fssa-phiopt
270           -fstdarg-opt  -fstore-merging  -fstrict-aliasing -fthread-jumps
271           -ftracer  -ftree-bit-ccp -ftree-builtin-call-dce  -ftree-ccp
272           -ftree-ch -ftree-coalesce-vars  -ftree-copy-prop  -ftree-dce
273           -ftree-dominator-opts -ftree-dse  -ftree-forwprop  -ftree-fre
274           -fcode-hoisting -ftree-loop-if-convert  -ftree-loop-im
275           -ftree-phiprop  -ftree-loop-distribution
276           -ftree-loop-distribute-patterns -ftree-loop-ivcanon
277           -ftree-loop-linear  -ftree-loop-optimize -ftree-loop-vectorize
278           -ftree-parallelize-loops=n  -ftree-pre  -ftree-partial-pre
279           -ftree-pta -ftree-reassoc  -ftree-sink  -ftree-slsr  -ftree-sra
280           -ftree-switch-conversion  -ftree-tail-merge -ftree-ter
281           -ftree-vectorize  -ftree-vrp  -funconstrained-commons
282           -funit-at-a-time  -funroll-all-loops  -funroll-loops
283           -funsafe-math-optimizations  -funswitch-loops -fipa-ra
284           -fvariable-expansion-in-unroller  -fvect-cost-model  -fvpt -fweb
285           -fwhole-program  -fwpa  -fuse-linker-plugin --param name=value -O
286           -O0  -O1  -O2  -O3  -Os  -Ofast  -Og
287
288       Program Instrumentation Options
289           -p  -pg  -fprofile-arcs  --coverage  -ftest-coverage
290           -fprofile-abs-path -fprofile-dir=path  -fprofile-generate
291           -fprofile-generate=path -fsanitize=style  -fsanitize-recover
292           -fsanitize-recover=style -fasan-shadow-offset=number
293           -fsanitize-sections=s1,s2,...  -fsanitize-undefined-trap-on-error
294           -fbounds-check -fcheck-pointer-bounds  -fchkp-check-incomplete-type
295           -fchkp-first-field-has-own-bounds  -fchkp-narrow-bounds
296           -fchkp-narrow-to-innermost-array  -fchkp-optimize
297           -fchkp-use-fast-string-functions  -fchkp-use-nochk-string-functions
298           -fchkp-use-static-bounds  -fchkp-use-static-const-bounds
299           -fchkp-treat-zero-dynamic-size-as-infinite  -fchkp-check-read
300           -fchkp-check-read  -fchkp-check-write  -fchkp-store-bounds
301           -fchkp-instrument-calls  -fchkp-instrument-marked-only
302           -fchkp-use-wrappers  -fchkp-flexible-struct-trailing-arrays
303           -fcf-protection=[full|branch|return|none] -fstack-protector
304           -fstack-protector-all  -fstack-protector-strong
305           -fstack-protector-explicit  -fstack-check
306           -fstack-limit-register=reg  -fstack-limit-symbol=sym
307           -fno-stack-limit  -fsplit-stack -fvtable-verify=[std|preinit|none]
308           -fvtv-counts  -fvtv-debug -finstrument-functions
309           -finstrument-functions-exclude-function-list=sym,sym,...
310           -finstrument-functions-exclude-file-list=file,file,...
311
312       Preprocessor Options
313           -Aquestion=answer -A-question[=answer] -C  -CC  -Dmacro[=defn] -dD
314           -dI  -dM  -dN  -dU -fdebug-cpp  -fdirectives-only
315           -fdollars-in-identifiers -fexec-charset=charset
316           -fextended-identifiers -finput-charset=charset
317           -fmacro-prefix-map=old=new -fno-canonical-system-headers
318           -fpch-deps  -fpch-preprocess -fpreprocessed -ftabstop=width
319           -ftrack-macro-expansion -fwide-exec-charset=charset
320           -fworking-directory -H  -imacros file  -include file -M  -MD  -MF
321           -MG  -MM  -MMD  -MP  -MQ  -MT -no-integrated-cpp  -P  -pthread
322           -remap -traditional  -traditional-cpp  -trigraphs -Umacro  -undef
323           -Wp,option  -Xpreprocessor option
324
325       Assembler Options
326           -Wa,option  -Xassembler option
327
328       Linker Options
329           object-file-name  -fuse-ld=linker  -llibrary -nostartfiles
330           -nodefaultlibs  -nostdlib  -pie  -pthread  -rdynamic -s  -static
331           -static-pie -static-libgcc  -static-libstdc++ -static-libasan
332           -static-libtsan  -static-liblsan  -static-libubsan -static-libmpx
333           -static-libmpxwrappers -shared  -shared-libgcc  -symbolic -T script
334           -Wl,option  -Xlinker option -u symbol  -z keyword
335
336       Directory Options
337           -Bprefix  -Idir  -I- -idirafter dir -imacros file  -imultilib dir
338           -iplugindir=dir  -iprefix file -iquote dir  -isysroot dir  -isystem
339           dir -iwithprefix dir  -iwithprefixbefore dir -Ldir
340           -no-canonical-prefixes  --no-sysroot-suffix -nostdinc  -nostdinc++
341           --sysroot=dir
342
343       Code Generation Options
344           -fcall-saved-reg  -fcall-used-reg -ffixed-reg  -fexceptions
345           -fnon-call-exceptions  -fdelete-dead-exceptions  -funwind-tables
346           -fasynchronous-unwind-tables -fno-gnu-unique
347           -finhibit-size-directive  -fno-common  -fno-ident
348           -fpcc-struct-return  -fpic  -fPIC  -fpie  -fPIE  -fno-plt
349           -fno-jump-tables -frecord-gcc-switches -freg-struct-return
350           -fshort-enums  -fshort-wchar -fverbose-asm  -fpack-struct[=n]
351           -fleading-underscore  -ftls-model=model -fstack-reuse=reuse_level
352           -ftrampolines  -ftrapv  -fwrapv
353           -fvisibility=[default|internal|hidden|protected]
354           -fstrict-volatile-bitfields  -fsync-libcalls
355
356       Developer Options
357           -dletters  -dumpspecs  -dumpmachine  -dumpversion -dumpfullversion
358           -fchecking  -fchecking=n  -fdbg-cnt-list -fdbg-cnt=counter-value-
359           list -fdisable-ipa-pass_name -fdisable-rtl-pass_name
360           -fdisable-rtl-pass-name=range-list -fdisable-tree-pass_name
361           -fdisable-tree-pass-name=range-list -fdump-noaddr
362           -fdump-unnumbered  -fdump-unnumbered-links
363           -fdump-class-hierarchy[-n] -fdump-final-insns[=file] -fdump-ipa-all
364           -fdump-ipa-cgraph  -fdump-ipa-inline -fdump-lang-all
365           -fdump-lang-switch -fdump-lang-switch-options
366           -fdump-lang-switch-options=filename -fdump-passes -fdump-rtl-pass
367           -fdump-rtl-pass=filename -fdump-statistics -fdump-tree-all
368           -fdump-tree-switch -fdump-tree-switch-options
369           -fdump-tree-switch-options=filename -fcompare-debug[=opts]
370           -fcompare-debug-second -fenable-kind-pass -fenable-kind-pass=range-
371           list -fira-verbose=n -flto-report  -flto-report-wpa
372           -fmem-report-wpa -fmem-report  -fpre-ipa-mem-report
373           -fpost-ipa-mem-report -fopt-info  -fopt-info-options[=file]
374           -fprofile-report -frandom-seed=string  -fsched-verbose=n
375           -fsel-sched-verbose  -fsel-sched-dump-cfg
376           -fsel-sched-pipelining-verbose -fstats  -fstack-usage
377           -ftime-report  -ftime-report-details
378           -fvar-tracking-assignments-toggle  -gtoggle
379           -print-file-name=library  -print-libgcc-file-name
380           -print-multi-directory  -print-multi-lib  -print-multi-os-directory
381           -print-prog-name=program  -print-search-dirs  -Q -print-sysroot
382           -print-sysroot-headers-suffix -save-temps  -save-temps=cwd
383           -save-temps=obj  -time[=file]
384
385       Machine-Dependent Options
386           AArch64 Options -mabi=name  -mbig-endian  -mlittle-endian
387           -mgeneral-regs-only -mcmodel=tiny  -mcmodel=small  -mcmodel=large
388           -mstrict-align -momit-leaf-frame-pointer -mtls-dialect=desc
389           -mtls-dialect=traditional -mtls-size=size -mfix-cortex-a53-835769
390           -mfix-cortex-a53-843419 -mlow-precision-recip-sqrt
391           -mlow-precision-sqrt  -mlow-precision-div
392           -mpc-relative-literal-loads -msign-return-address=scope -march=name
393           -mcpu=name  -mtune=name -moverride=string  -mverbose-cost-dump
394
395           Adapteva Epiphany Options -mhalf-reg-file  -mprefer-short-insn-regs
396           -mbranch-cost=num  -mcmove  -mnops=num  -msoft-cmpsf -msplit-lohi
397           -mpost-inc  -mpost-modify  -mstack-offset=num -mround-nearest
398           -mlong-calls  -mshort-calls  -msmall16 -mfp-mode=mode
399           -mvect-double  -max-vect-align=num -msplit-vecmove-early
400           -m1reg-reg
401
402           ARC Options -mbarrel-shifter -mjli-always -mcpu=cpu  -mA6  -mARC600
403           -mA7  -mARC700 -mdpfp  -mdpfp-compact  -mdpfp-fast  -mno-dpfp-lrsr
404           -mea  -mno-mpy  -mmul32x16  -mmul64  -matomic -mnorm  -mspfp
405           -mspfp-compact  -mspfp-fast  -msimd  -msoft-float  -mswap -mcrc
406           -mdsp-packa  -mdvbf  -mlock  -mmac-d16  -mmac-24  -mrtsc  -mswape
407           -mtelephony  -mxy  -misize  -mannotate-align  -marclinux
408           -marclinux_prof -mlong-calls  -mmedium-calls  -msdata
409           -mirq-ctrl-saved -mrgf-banked-regs -mlpc-width=width -G num
410           -mvolatile-cache  -mtp-regno=regno -malign-call  -mauto-modify-reg
411           -mbbit-peephole  -mno-brcc -mcase-vector-pcrel  -mcompact-casesi
412           -mno-cond-exec  -mearly-cbranchsi -mexpand-adddi  -mindexed-loads
413           -mlra  -mlra-priority-none -mlra-priority-compact mlra-priority-
414           noncompact  -mno-millicode -mmixed-code  -mq-class  -mRcq  -mRcw
415           -msize-level=level -mtune=cpu  -mmultcost=num
416           -munalign-prob-threshold=probability  -mmpy-option=multo -mdiv-rem
417           -mcode-density  -mll64  -mfpu=fpu -mrf16
418
419           ARM Options -mapcs-frame  -mno-apcs-frame -mabi=name
420           -mapcs-stack-check  -mno-apcs-stack-check -mapcs-reentrant
421           -mno-apcs-reentrant -msched-prolog  -mno-sched-prolog
422           -mlittle-endian  -mbig-endian -mbe8 -mbe32 -mfloat-abi=name
423           -mfp16-format=name -mthumb-interwork  -mno-thumb-interwork
424           -mcpu=name  -march=name  -mfpu=name -mtune=name  -mprint-tune-info
425           -mstructure-size-boundary=n -mabort-on-noreturn -mlong-calls
426           -mno-long-calls -msingle-pic-base  -mno-single-pic-base
427           -mpic-register=reg -mnop-fun-dllimport -mpoke-function-name -mthumb
428           -marm  -mflip-thumb -mtpcs-frame  -mtpcs-leaf-frame
429           -mcaller-super-interworking  -mcallee-super-interworking -mtp=name
430           -mtls-dialect=dialect -mword-relocations -mfix-cortex-m3-ldrd
431           -munaligned-access -mneon-for-64bits -mslow-flash-data
432           -masm-syntax-unified -mrestrict-it -mverbose-cost-dump -mpure-code
433           -mcmse
434
435           AVR Options -mmcu=mcu  -mabsdata  -maccumulate-args
436           -mbranch-cost=cost -mcall-prologues  -mgas-isr-prologues  -mint8
437           -mn_flash=size  -mno-interrupts -mmain-is-OS_task -mrelax  -mrmw
438           -mstrict-X  -mtiny-stack -mfract-convert-truncate -mshort-calls
439           -nodevicelib -Waddr-space-convert  -Wmisspelled-isr
440
441           Blackfin Options -mcpu=cpu[-sirevision] -msim
442           -momit-leaf-frame-pointer  -mno-omit-leaf-frame-pointer
443           -mspecld-anomaly  -mno-specld-anomaly  -mcsync-anomaly
444           -mno-csync-anomaly -mlow-64k  -mno-low64k  -mstack-check-l1
445           -mid-shared-library -mno-id-shared-library  -mshared-library-id=n
446           -mleaf-id-shared-library  -mno-leaf-id-shared-library -msep-data
447           -mno-sep-data  -mlong-calls  -mno-long-calls -mfast-fp
448           -minline-plt  -mmulticore  -mcorea  -mcoreb  -msdram -micplb
449
450           C6X Options -mbig-endian  -mlittle-endian  -march=cpu -msim
451           -msdata=sdata-type
452
453           CRIS Options -mcpu=cpu  -march=cpu  -mtune=cpu -mmax-stack-frame=n
454           -melinux-stacksize=n -metrax4  -metrax100  -mpdebug  -mcc-init
455           -mno-side-effects -mstack-align  -mdata-align  -mconst-align
456           -m32-bit  -m16-bit  -m8-bit  -mno-prologue-epilogue  -mno-gotplt
457           -melf  -maout  -melinux  -mlinux  -sim  -sim2 -mmul-bug-workaround
458           -mno-mul-bug-workaround
459
460           CR16 Options -mmac -mcr16cplus  -mcr16c -msim  -mint32  -mbit-ops
461           -mdata-model=model
462
463           Darwin Options -all_load  -allowable_client  -arch
464           -arch_errors_fatal -arch_only  -bind_at_load  -bundle
465           -bundle_loader -client_name  -compatibility_version
466           -current_version -dead_strip -dependency-file  -dylib_file
467           -dylinker_install_name -dynamic  -dynamiclib
468           -exported_symbols_list -filelist  -flat_namespace
469           -force_cpusubtype_ALL -force_flat_namespace
470           -headerpad_max_install_names -iframework -image_base  -init
471           -install_name  -keep_private_externs -multi_module
472           -multiply_defined  -multiply_defined_unused -noall_load
473           -no_dead_strip_inits_and_terms -nofixprebinding  -nomultidefs
474           -noprebind  -noseglinkedit -pagezero_size  -prebind
475           -prebind_all_twolevel_modules -private_bundle  -read_only_relocs
476           -sectalign -sectobjectsymbols  -whyload  -seg1addr -sectcreate
477           -sectobjectsymbols  -sectorder -segaddr  -segs_read_only_addr
478           -segs_read_write_addr -seg_addr_table  -seg_addr_table_filename
479           -seglinkedit -segprot  -segs_read_only_addr  -segs_read_write_addr
480           -single_module  -static  -sub_library  -sub_umbrella
481           -twolevel_namespace  -umbrella  -undefined -unexported_symbols_list
482           -weak_reference_mismatches -whatsloaded  -F  -gused  -gfull
483           -mmacosx-version-min=version -mkernel  -mone-byte-bool
484
485           DEC Alpha Options -mno-fp-regs  -msoft-float -mieee
486           -mieee-with-inexact  -mieee-conformant -mfp-trap-mode=mode
487           -mfp-rounding-mode=mode -mtrap-precision=mode  -mbuild-constants
488           -mcpu=cpu-type  -mtune=cpu-type -mbwx  -mmax  -mfix  -mcix
489           -mfloat-vax  -mfloat-ieee -mexplicit-relocs  -msmall-data
490           -mlarge-data -msmall-text  -mlarge-text -mmemory-latency=time
491
492           FR30 Options -msmall-model  -mno-lsim
493
494           FT32 Options -msim  -mlra  -mnodiv  -mft32b  -mcompress  -mnopm
495
496           FRV Options -mgpr-32  -mgpr-64  -mfpr-32  -mfpr-64 -mhard-float
497           -msoft-float -malloc-cc  -mfixed-cc  -mdword  -mno-dword -mdouble
498           -mno-double -mmedia  -mno-media  -mmuladd  -mno-muladd -mfdpic
499           -minline-plt  -mgprel-ro  -multilib-library-pic -mlinked-fp
500           -mlong-calls  -malign-labels -mlibrary-pic  -macc-4  -macc-8 -mpack
501           -mno-pack  -mno-eflags  -mcond-move  -mno-cond-move
502           -moptimize-membar  -mno-optimize-membar -mscc  -mno-scc
503           -mcond-exec  -mno-cond-exec -mvliw-branch  -mno-vliw-branch
504           -mmulti-cond-exec  -mno-multi-cond-exec  -mnested-cond-exec
505           -mno-nested-cond-exec  -mtomcat-stats -mTLS  -mtls -mcpu=cpu
506
507           GNU/Linux Options -mglibc  -muclibc  -mmusl  -mbionic  -mandroid
508           -tno-android-cc  -tno-android-ld
509
510           H8/300 Options -mrelax  -mh  -ms  -mn  -mexr  -mno-exr  -mint32
511           -malign-300
512
513           HPPA Options -march=architecture-type -mcaller-copies
514           -mdisable-fpregs  -mdisable-indexing -mfast-indirect-calls  -mgas
515           -mgnu-ld   -mhp-ld -mfixed-range=register-range -mjump-in-delay
516           -mlinker-opt  -mlong-calls -mlong-load-store  -mno-disable-fpregs
517           -mno-disable-indexing  -mno-fast-indirect-calls  -mno-gas
518           -mno-jump-in-delay  -mno-long-load-store -mno-portable-runtime
519           -mno-soft-float -mno-space-regs  -msoft-float  -mpa-risc-1-0
520           -mpa-risc-1-1  -mpa-risc-2-0  -mportable-runtime -mschedule=cpu-
521           type  -mspace-regs  -msio  -mwsio -munix=unix-std  -nolibdld
522           -static  -threads
523
524           IA-64 Options -mbig-endian  -mlittle-endian  -mgnu-as  -mgnu-ld
525           -mno-pic -mvolatile-asm-stop  -mregister-names  -msdata  -mno-sdata
526           -mconstant-gp  -mauto-pic  -mfused-madd
527           -minline-float-divide-min-latency
528           -minline-float-divide-max-throughput -mno-inline-float-divide
529           -minline-int-divide-min-latency -minline-int-divide-max-throughput
530           -mno-inline-int-divide -minline-sqrt-min-latency
531           -minline-sqrt-max-throughput -mno-inline-sqrt -mdwarf2-asm
532           -mearly-stop-bits -mfixed-range=register-range  -mtls-size=tls-size
533           -mtune=cpu-type  -milp32  -mlp64 -msched-br-data-spec
534           -msched-ar-data-spec  -msched-control-spec -msched-br-in-data-spec
535           -msched-ar-in-data-spec  -msched-in-control-spec -msched-spec-ldc
536           -msched-spec-control-ldc -msched-prefer-non-data-spec-insns
537           -msched-prefer-non-control-spec-insns
538           -msched-stop-bits-after-every-cycle
539           -msched-count-spec-in-critical-path
540           -msel-sched-dont-check-control-spec  -msched-fp-mem-deps-zero-cost
541           -msched-max-memory-insns-hard-limit  -msched-max-memory-insns=max-
542           insns
543
544           LM32 Options -mbarrel-shift-enabled  -mdivide-enabled
545           -mmultiply-enabled -msign-extend-enabled  -muser-enabled
546
547           M32R/D Options -m32r2  -m32rx  -m32r -mdebug -malign-loops
548           -mno-align-loops -missue-rate=number -mbranch-cost=number
549           -mmodel=code-size-model-type -msdata=sdata-type -mno-flush-func
550           -mflush-func=name -mno-flush-trap  -mflush-trap=number -G num
551
552           M32C Options -mcpu=cpu  -msim  -memregs=number
553
554           M680x0 Options -march=arch  -mcpu=cpu  -mtune=tune -m68000  -m68020
555           -m68020-40  -m68020-60  -m68030  -m68040 -m68060  -mcpu32  -m5200
556           -m5206e  -m528x  -m5307  -m5407 -mcfv4e  -mbitfield  -mno-bitfield
557           -mc68000  -mc68020 -mnobitfield  -mrtd  -mno-rtd  -mdiv  -mno-div
558           -mshort -mno-short  -mhard-float  -m68881  -msoft-float  -mpcrel
559           -malign-int  -mstrict-align  -msep-data  -mno-sep-data
560           -mshared-library-id=n  -mid-shared-library  -mno-id-shared-library
561           -mxgot  -mno-xgot  -mlong-jump-table-offsets
562
563           MCore Options -mhardlit  -mno-hardlit  -mdiv  -mno-div
564           -mrelax-immediates -mno-relax-immediates  -mwide-bitfields
565           -mno-wide-bitfields -m4byte-functions  -mno-4byte-functions
566           -mcallgraph-data -mno-callgraph-data  -mslow-bytes  -mno-slow-bytes
567           -mno-lsim -mlittle-endian  -mbig-endian  -m210  -m340
568           -mstack-increment
569
570           MeP Options -mabsdiff  -mall-opts  -maverage  -mbased=n  -mbitops
571           -mc=n  -mclip  -mconfig=name  -mcop  -mcop32  -mcop64  -mivc2 -mdc
572           -mdiv  -meb  -mel  -mio-volatile  -ml  -mleadz  -mm  -mminmax
573           -mmult  -mno-opts  -mrepeat  -ms  -msatur  -msdram  -msim
574           -msimnovec  -mtf -mtiny=n
575
576           MicroBlaze Options -msoft-float  -mhard-float  -msmall-divides
577           -mcpu=cpu -mmemcpy  -mxl-soft-mul  -mxl-soft-div  -mxl-barrel-shift
578           -mxl-pattern-compare  -mxl-stack-check  -mxl-gp-opt  -mno-clearbss
579           -mxl-multiply-high  -mxl-float-convert  -mxl-float-sqrt
580           -mbig-endian  -mlittle-endian  -mxl-reorder  -mxl-mode-app-model
581
582           MIPS Options -EL  -EB  -march=arch  -mtune=arch -mips1  -mips2
583           -mips3  -mips4  -mips32  -mips32r2  -mips32r3  -mips32r5 -mips32r6
584           -mips64  -mips64r2  -mips64r3  -mips64r5  -mips64r6 -mips16
585           -mno-mips16  -mflip-mips16 -minterlink-compressed
586           -mno-interlink-compressed -minterlink-mips16  -mno-interlink-mips16
587           -mabi=abi  -mabicalls  -mno-abicalls -mshared  -mno-shared  -mplt
588           -mno-plt  -mxgot  -mno-xgot -mgp32  -mgp64  -mfp32  -mfpxx  -mfp64
589           -mhard-float  -msoft-float -mno-float  -msingle-float
590           -mdouble-float -modd-spreg  -mno-odd-spreg -mabs=mode
591           -mnan=encoding -mdsp  -mno-dsp  -mdspr2  -mno-dspr2 -mmcu
592           -mmno-mcu -meva  -mno-eva -mvirt  -mno-virt -mxpa  -mno-xpa
593           -mmicromips  -mno-micromips -mmsa  -mno-msa -mfpu=fpu-type
594           -msmartmips  -mno-smartmips -mpaired-single  -mno-paired-single
595           -mdmx  -mno-mdmx -mips3d  -mno-mips3d  -mmt  -mno-mt  -mllsc
596           -mno-llsc -mlong64  -mlong32  -msym32  -mno-sym32 -Gnum
597           -mlocal-sdata  -mno-local-sdata -mextern-sdata  -mno-extern-sdata
598           -mgpopt  -mno-gopt -membedded-data  -mno-embedded-data
599           -muninit-const-in-rodata  -mno-uninit-const-in-rodata
600           -mcode-readable=setting -msplit-addresses  -mno-split-addresses
601           -mexplicit-relocs  -mno-explicit-relocs -mcheck-zero-division
602           -mno-check-zero-division -mdivide-traps  -mdivide-breaks
603           -mload-store-pairs  -mno-load-store-pairs -mmemcpy  -mno-memcpy
604           -mlong-calls  -mno-long-calls -mmad  -mno-mad  -mimadd  -mno-imadd
605           -mfused-madd  -mno-fused-madd  -nocpp -mfix-24k  -mno-fix-24k
606           -mfix-r4000  -mno-fix-r4000  -mfix-r4400  -mno-fix-r4400
607           -mfix-r10000  -mno-fix-r10000  -mfix-rm7000  -mno-fix-rm7000
608           -mfix-vr4120  -mno-fix-vr4120 -mfix-vr4130  -mno-fix-vr4130
609           -mfix-sb1  -mno-fix-sb1 -mflush-func=func  -mno-flush-func
610           -mbranch-cost=num  -mbranch-likely  -mno-branch-likely
611           -mcompact-branches=policy -mfp-exceptions  -mno-fp-exceptions
612           -mvr4130-align  -mno-vr4130-align  -msynci  -mno-synci -mlxc1-sxc1
613           -mno-lxc1-sxc1 -mmadd4 -mno-madd4 -mrelax-pic-calls
614           -mno-relax-pic-calls  -mmcount-ra-address -mframe-header-opt
615           -mno-frame-header-opt
616
617           MMIX Options -mlibfuncs  -mno-libfuncs  -mepsilon  -mno-epsilon
618           -mabi=gnu -mabi=mmixware  -mzero-extend  -mknuthdiv
619           -mtoplevel-symbols -melf  -mbranch-predict  -mno-branch-predict
620           -mbase-addresses -mno-base-addresses  -msingle-exit
621           -mno-single-exit
622
623           MN10300 Options -mmult-bug  -mno-mult-bug -mno-am33  -mam33
624           -mam33-2  -mam34 -mtune=cpu-type -mreturn-pointer-on-d0 -mno-crt0
625           -mrelax  -mliw  -msetlb
626
627           Moxie Options -meb  -mel  -mmul.x  -mno-crt0
628
629           MSP430 Options -msim  -masm-hex  -mmcu=  -mcpu=  -mlarge  -msmall
630           -mrelax -mwarn-mcu -mcode-region=  -mdata-region= -msilicon-errata=
631           -msilicon-errata-warn= -mhwmult=  -minrt
632
633           NDS32 Options -mbig-endian  -mlittle-endian -mreduced-regs
634           -mfull-regs -mcmov  -mno-cmov -mext-perf  -mno-ext-perf -mext-perf2
635           -mno-ext-perf2 -mext-string  -mno-ext-string -mv3push  -mno-v3push
636           -m16bit  -mno-16bit -misr-vector-size=num -mcache-block-size=num
637           -march=arch -mcmodel=code-model -mctor-dtor  -mrelax
638
639           Nios II Options -G num  -mgpopt=option  -mgpopt  -mno-gpopt
640           -mgprel-sec=regexp -mr0rel-sec=regexp -mel  -meb -mno-bypass-cache
641           -mbypass-cache -mno-cache-volatile  -mcache-volatile
642           -mno-fast-sw-div  -mfast-sw-div -mhw-mul  -mno-hw-mul  -mhw-mulx
643           -mno-hw-mulx  -mno-hw-div  -mhw-div -mcustom-insn=N
644           -mno-custom-insn -mcustom-fpu-cfg=name -mhal  -msmallc
645           -msys-crt0=name  -msys-lib=name -march=arch  -mbmx  -mno-bmx  -mcdx
646           -mno-cdx
647
648           Nvidia PTX Options -m32  -m64  -mmainkernel  -moptimize
649
650           PDP-11 Options -mfpu  -msoft-float  -mac0  -mno-ac0  -m40  -m45
651           -m10 -mbcopy  -mbcopy-builtin  -mint32  -mno-int16 -mint16
652           -mno-int32  -mfloat32  -mno-float64 -mfloat64  -mno-float32
653           -mabshi  -mno-abshi -mbranch-expensive  -mbranch-cheap -munix-asm
654           -mdec-asm
655
656           picoChip Options -mae=ae_type  -mvliw-lookahead=N
657           -msymbol-as-address  -mno-inefficient-warnings
658
659           PowerPC Options See RS/6000 and PowerPC Options.
660
661           PowerPC SPE Options -mcpu=cpu-type -mtune=cpu-type -mmfcrf
662           -mno-mfcrf  -mpopcntb  -mno-popcntb -mfull-toc   -mminimal-toc
663           -mno-fp-in-toc  -mno-sum-in-toc -m32  -mxl-compat  -mno-xl-compat
664           -malign-power  -malign-natural -msoft-float  -mhard-float
665           -mmultiple  -mno-multiple -msingle-float  -mdouble-float -mupdate
666           -mno-update -mavoid-indexed-addresses  -mno-avoid-indexed-addresses
667           -mstrict-align  -mno-strict-align  -mrelocatable -mno-relocatable
668           -mrelocatable-lib  -mno-relocatable-lib -mtoc  -mno-toc  -mlittle
669           -mlittle-endian  -mbig  -mbig-endian -msingle-pic-base
670           -mprioritize-restricted-insns=priority
671           -msched-costly-dep=dependence_type -minsert-sched-nops=scheme
672           -mcall-sysv  -mcall-netbsd -maix-struct-return
673           -msvr4-struct-return -mabi=abi-type  -msecure-plt  -mbss-plt
674           -mblock-move-inline-limit=num -misel  -mno-isel -misel=yes
675           -misel=no -mspe  -mno-spe -mspe=yes  -mspe=no -mfloat-gprs=yes
676           -mfloat-gprs=no  -mfloat-gprs=single  -mfloat-gprs=double
677           -mprototype  -mno-prototype -msim  -mmvme  -mads  -myellowknife
678           -memb  -msdata -msdata=opt  -mvxworks  -G num -mrecip  -mrecip=opt
679           -mno-recip  -mrecip-precision -mno-recip-precision
680           -mpointers-to-nested-functions  -mno-pointers-to-nested-functions
681           -msave-toc-indirect  -mno-save-toc-indirect -mcompat-align-parm
682           -mno-compat-align-parm -mfloat128  -mno-float128 -mgnu-attribute
683           -mno-gnu-attribute -mstack-protector-guard=guard
684           -mstack-protector-guard-reg=reg
685           -mstack-protector-guard-offset=offset
686
687           RISC-V Options -mbranch-cost=N-instruction -mplt  -mno-plt
688           -mabi=ABI-string -mfdiv  -mno-fdiv -mdiv  -mno-div -march=ISA-
689           string -mtune=processor-string -mpreferred-stack-boundary=num
690           -msmall-data-limit=N-bytes -msave-restore  -mno-save-restore
691           -mstrict-align -mno-strict-align -mcmodel=medlow -mcmodel=medany
692           -mexplicit-relocs  -mno-explicit-relocs -mrelax -mno-relax
693
694           RL78 Options -msim  -mmul=none  -mmul=g13  -mmul=g14  -mallregs
695           -mcpu=g10  -mcpu=g13  -mcpu=g14  -mg10  -mg13  -mg14
696           -m64bit-doubles  -m32bit-doubles  -msave-mduc-in-interrupts
697
698           RS/6000 and PowerPC Options -mcpu=cpu-type -mtune=cpu-type
699           -mcmodel=code-model -mpowerpc64 -maltivec  -mno-altivec
700           -mpowerpc-gpopt  -mno-powerpc-gpopt -mpowerpc-gfxopt
701           -mno-powerpc-gfxopt -mmfcrf  -mno-mfcrf  -mpopcntb  -mno-popcntb
702           -mpopcntd  -mno-popcntd -mfprnd  -mno-fprnd -mcmpb  -mno-cmpb
703           -mmfpgpr  -mno-mfpgpr  -mhard-dfp  -mno-hard-dfp -mfull-toc
704           -mminimal-toc  -mno-fp-in-toc  -mno-sum-in-toc -m64  -m32
705           -mxl-compat  -mno-xl-compat  -mpe -malign-power  -malign-natural
706           -msoft-float  -mhard-float  -mmultiple  -mno-multiple
707           -msingle-float  -mdouble-float  -msimple-fpu -mupdate  -mno-update
708           -mavoid-indexed-addresses  -mno-avoid-indexed-addresses
709           -mfused-madd  -mno-fused-madd  -mbit-align  -mno-bit-align
710           -mstrict-align  -mno-strict-align  -mrelocatable -mno-relocatable
711           -mrelocatable-lib  -mno-relocatable-lib -mtoc  -mno-toc  -mlittle
712           -mlittle-endian  -mbig  -mbig-endian -mdynamic-no-pic  -maltivec
713           -mswdiv  -msingle-pic-base -mprioritize-restricted-insns=priority
714           -msched-costly-dep=dependence_type -minsert-sched-nops=scheme
715           -mcall-aixdesc  -mcall-eabi  -mcall-freebsd -mcall-linux
716           -mcall-netbsd  -mcall-openbsd -mcall-sysv  -mcall-sysv-eabi
717           -mcall-sysv-noeabi -mtraceback=traceback_type -maix-struct-return
718           -msvr4-struct-return -mabi=abi-type  -msecure-plt  -mbss-plt
719           -mblock-move-inline-limit=num -mblock-compare-inline-limit=num
720           -mblock-compare-inline-loop-limit=num
721           -mstring-compare-inline-limit=num -misel  -mno-isel -misel=yes
722           -misel=no -mpaired -mvrsave  -mno-vrsave -mmulhw  -mno-mulhw
723           -mdlmzb  -mno-dlmzb -mprototype  -mno-prototype -msim  -mmvme
724           -mads  -myellowknife  -memb  -msdata -msdata=opt
725           -mreadonly-in-sdata  -mvxworks  -G num -mrecip  -mrecip=opt
726           -mno-recip  -mrecip-precision -mno-recip-precision -mveclibabi=type
727           -mfriz  -mno-friz -mpointers-to-nested-functions
728           -mno-pointers-to-nested-functions -msave-toc-indirect
729           -mno-save-toc-indirect -mpower8-fusion  -mno-mpower8-fusion
730           -mpower8-vector  -mno-power8-vector -mcrypto  -mno-crypto  -mhtm
731           -mno-htm -mquad-memory  -mno-quad-memory -mquad-memory-atomic
732           -mno-quad-memory-atomic -mcompat-align-parm  -mno-compat-align-parm
733           -mfloat128  -mno-float128  -mfloat128-hardware
734           -mno-float128-hardware -mgnu-attribute  -mno-gnu-attribute
735           -mstack-protector-guard=guard -mstack-protector-guard-reg=reg
736           -mstack-protector-guard-offset=offset
737
738           RX Options -m64bit-doubles  -m32bit-doubles  -fpu  -nofpu -mcpu=
739           -mbig-endian-data  -mlittle-endian-data -msmall-data -msim
740           -mno-sim -mas100-syntax  -mno-as100-syntax -mrelax
741           -mmax-constant-size= -mint-register= -mpid -mallow-string-insns
742           -mno-allow-string-insns -mjsr -mno-warn-multiple-fast-interrupts
743           -msave-acc-in-interrupts
744
745           S/390 and zSeries Options -mtune=cpu-type  -march=cpu-type
746           -mhard-float  -msoft-float  -mhard-dfp  -mno-hard-dfp
747           -mlong-double-64  -mlong-double-128 -mbackchain  -mno-backchain
748           -mpacked-stack  -mno-packed-stack -msmall-exec  -mno-small-exec
749           -mmvcle  -mno-mvcle -m64  -m31  -mdebug  -mno-debug  -mesa  -mzarch
750           -mhtm  -mvx  -mzvector -mtpf-trace  -mno-tpf-trace  -mfused-madd
751           -mno-fused-madd -mwarn-framesize  -mwarn-dynamicstack  -mstack-size
752           -mstack-guard -mhotpatch=halfwords,halfwords
753
754           Score Options -meb  -mel -mnhwloop -muls -mmac -mscore5  -mscore5u
755           -mscore7  -mscore7d
756
757           SH Options -m1  -m2  -m2e -m2a-nofpu  -m2a-single-only  -m2a-single
758           -m2a -m3  -m3e -m4-nofpu  -m4-single-only  -m4-single  -m4
759           -m4a-nofpu  -m4a-single-only  -m4a-single  -m4a  -m4al -mb  -ml
760           -mdalign  -mrelax -mbigtable  -mfmovd  -mrenesas  -mno-renesas
761           -mnomacsave -mieee  -mno-ieee  -mbitops  -misize
762           -minline-ic_invalidate  -mpadstruct -mprefergot  -musermode
763           -multcost=number  -mdiv=strategy -mdivsi3_libfunc=name
764           -mfixed-range=register-range -maccumulate-outgoing-args
765           -matomic-model=atomic-model -mbranch-cost=num  -mzdcbranch
766           -mno-zdcbranch -mcbranch-force-delay-slot -mfused-madd
767           -mno-fused-madd  -mfsca  -mno-fsca  -mfsrra  -mno-fsrra
768           -mpretend-cmove  -mtas
769
770           Solaris 2 Options -mclear-hwcap  -mno-clear-hwcap  -mimpure-text
771           -mno-impure-text -pthreads
772
773           SPARC Options -mcpu=cpu-type -mtune=cpu-type -mcmodel=code-model
774           -mmemory-model=mem-model -m32  -m64  -mapp-regs  -mno-app-regs
775           -mfaster-structs  -mno-faster-structs  -mflat  -mno-flat -mfpu
776           -mno-fpu  -mhard-float  -msoft-float -mhard-quad-float
777           -msoft-quad-float -mstack-bias  -mno-stack-bias -mstd-struct-return
778           -mno-std-struct-return -munaligned-doubles  -mno-unaligned-doubles
779           -muser-mode  -mno-user-mode -mv8plus  -mno-v8plus  -mvis  -mno-vis
780           -mvis2  -mno-vis2  -mvis3  -mno-vis3 -mvis4 -mno-vis4 -mvis4b
781           -mno-vis4b -mcbcond  -mno-cbcond  -mfmaf  -mno-fmaf  -mfsmuld
782           -mno-fsmuld -mpopc  -mno-popc  -msubxc  -mno-subxc -mfix-at697f
783           -mfix-ut699  -mfix-ut700  -mfix-gr712rc -mlra  -mno-lra
784
785           SPU Options -mwarn-reloc  -merror-reloc -msafe-dma  -munsafe-dma
786           -mbranch-hints -msmall-mem  -mlarge-mem  -mstdmain
787           -mfixed-range=register-range -mea32  -mea64
788           -maddress-space-conversion  -mno-address-space-conversion
789           -mcache-size=cache-size -matomic-updates  -mno-atomic-updates
790
791           System V Options -Qy  -Qn  -YP,paths  -Ym,dir
792
793           TILE-Gx Options -mcpu=CPU  -m32  -m64  -mbig-endian
794           -mlittle-endian -mcmodel=code-model
795
796           TILEPro Options -mcpu=cpu  -m32
797
798           V850 Options -mlong-calls  -mno-long-calls  -mep  -mno-ep
799           -mprolog-function  -mno-prolog-function  -mspace -mtda=n  -msda=n
800           -mzda=n -mapp-regs  -mno-app-regs -mdisable-callt
801           -mno-disable-callt -mv850e2v3  -mv850e2  -mv850e1  -mv850es -mv850e
802           -mv850  -mv850e3v5 -mloop -mrelax -mlong-jumps -msoft-float
803           -mhard-float -mgcc-abi -mrh850-abi -mbig-switch
804
805           VAX Options -mg  -mgnu  -munix
806
807           Visium Options -mdebug  -msim  -mfpu  -mno-fpu  -mhard-float
808           -msoft-float -mcpu=cpu-type  -mtune=cpu-type  -msv-mode
809           -muser-mode
810
811           VMS Options -mvms-return-codes  -mdebug-main=prefix  -mmalloc64
812           -mpointer-size=size
813
814           VxWorks Options -mrtp  -non-static  -Bstatic  -Bdynamic -Xbind-lazy
815           -Xbind-now
816
817           x86 Options -mtune=cpu-type  -march=cpu-type -mtune-ctrl=feature-
818           list  -mdump-tune-features  -mno-default -mfpmath=unit
819           -masm=dialect  -mno-fancy-math-387 -mno-fp-ret-in-387  -m80387
820           -mhard-float  -msoft-float -mno-wide-multiply  -mrtd
821           -malign-double -mpreferred-stack-boundary=num
822           -mincoming-stack-boundary=num -mcld  -mcx16  -msahf  -mmovbe
823           -mcrc32 -mrecip  -mrecip=opt -mvzeroupper  -mprefer-avx128
824           -mprefer-vector-width=opt -mmmx  -msse  -msse2  -msse3  -mssse3
825           -msse4.1  -msse4.2  -msse4  -mavx -mavx2  -mavx512f  -mavx512pf
826           -mavx512er  -mavx512cd  -mavx512vl -mavx512bw  -mavx512dq
827           -mavx512ifma  -mavx512vbmi  -msha  -maes -mpclmul  -mfsgsbase
828           -mrdrnd  -mf16c  -mfma -mpconfig -mwbnoinvd -mprefetchwt1
829           -mclflushopt  -mclwb  -mxsavec  -mxsaves -msse4a  -m3dnow  -m3dnowa
830           -mpopcnt  -mabm  -mbmi  -mtbm  -mfma4  -mxop -madx  -mlzcnt  -mbmi2
831           -mfxsr  -mxsave  -mxsaveopt  -mrtm  -mlwp  -mmpx -mmwaitx  -mclzero
832           -mpku  -mthreads -mgfni  -mvaes -mshstk -mforce-indirect-call
833           -mavx512vbmi2 -mvpclmulqdq -mavx512bitalg -mmovdiri -mmovdir64b
834           -mavx512vpopcntdq -mavx5124fmaps  -mavx512vnni  -mavx5124vnniw
835           -mprfchw  -mrdpid -mrdseed  -msgx -mms-bitfields
836           -mno-align-stringops  -minline-all-stringops
837           -minline-stringops-dynamically  -mstringop-strategy=alg
838           -mmemcpy-strategy=strategy  -mmemset-strategy=strategy -mpush-args
839           -maccumulate-outgoing-args  -m128bit-long-double
840           -m96bit-long-double  -mlong-double-64  -mlong-double-80
841           -mlong-double-128 -mregparm=num  -msseregparm -mveclibabi=type
842           -mvect8-ret-in-mem -mpc32  -mpc64  -mpc80  -mstackrealign
843           -momit-leaf-frame-pointer  -mno-red-zone  -mno-tls-direct-seg-refs
844           -mcmodel=code-model  -mabi=name  -maddress-mode=mode -m32  -m64
845           -mx32  -m16  -miamcu  -mlarge-data-threshold=num -msse2avx
846           -mfentry  -mrecord-mcount  -mnop-mcount  -m8bit-idiv
847           -mavx256-split-unaligned-load  -mavx256-split-unaligned-store
848           -malign-data=type  -mstack-protector-guard=guard
849           -mstack-protector-guard-reg=reg
850           -mstack-protector-guard-offset=offset
851           -mstack-protector-guard-symbol=symbol -mmitigate-rop
852           -mgeneral-regs-only -mcall-ms2sysv-xlogues -mindirect-branch=choice
853           -mfunction-return=choice -mindirect-branch-register
854
855           x86 Windows Options -mconsole  -mcygwin  -mno-cygwin  -mdll
856           -mnop-fun-dllimport  -mthread -municode  -mwin32  -mwindows
857           -fno-set-stack-executable
858
859           Xstormy16 Options -msim
860
861           Xtensa Options -mconst16  -mno-const16 -mfused-madd
862           -mno-fused-madd -mforce-no-pic -mserialize-volatile
863           -mno-serialize-volatile -mtext-section-literals
864           -mno-text-section-literals -mauto-litpools  -mno-auto-litpools
865           -mtarget-align  -mno-target-align -mlongcalls  -mno-longcalls
866
867           zSeries Options See S/390 and zSeries Options.
868
869   Options Controlling the Kind of Output
870       Compilation can involve up to four stages: preprocessing, compilation
871       proper, assembly and linking, always in that order.  GCC is capable of
872       preprocessing and compiling several files either into several assembler
873       input files, or into one assembler input file; then each assembler
874       input file produces an object file, and linking combines all the object
875       files (those newly compiled, and those specified as input) into an
876       executable file.
877
878       For any given input file, the file name suffix determines what kind of
879       compilation is done:
880
881       file.c
882           C source code that must be preprocessed.
883
884       file.i
885           C source code that should not be preprocessed.
886
887       file.ii
888           C++ source code that should not be preprocessed.
889
890       file.m
891           Objective-C source code.  Note that you must link with the libobjc
892           library to make an Objective-C program work.
893
894       file.mi
895           Objective-C source code that should not be preprocessed.
896
897       file.mm
898       file.M
899           Objective-C++ source code.  Note that you must link with the
900           libobjc library to make an Objective-C++ program work.  Note that
901           .M refers to a literal capital M.
902
903       file.mii
904           Objective-C++ source code that should not be preprocessed.
905
906       file.h
907           C, C++, Objective-C or Objective-C++ header file to be turned into
908           a precompiled header (default), or C, C++ header file to be turned
909           into an Ada spec (via the -fdump-ada-spec switch).
910
911       file.cc
912       file.cp
913       file.cxx
914       file.cpp
915       file.CPP
916       file.c++
917       file.C
918           C++ source code that must be preprocessed.  Note that in .cxx, the
919           last two letters must both be literally x.  Likewise, .C refers to
920           a literal capital C.
921
922       file.mm
923       file.M
924           Objective-C++ source code that must be preprocessed.
925
926       file.mii
927           Objective-C++ source code that should not be preprocessed.
928
929       file.hh
930       file.H
931       file.hp
932       file.hxx
933       file.hpp
934       file.HPP
935       file.h++
936       file.tcc
937           C++ header file to be turned into a precompiled header or Ada spec.
938
939       file.f
940       file.for
941       file.ftn
942           Fixed form Fortran source code that should not be preprocessed.
943
944       file.F
945       file.FOR
946       file.fpp
947       file.FPP
948       file.FTN
949           Fixed form Fortran source code that must be preprocessed (with the
950           traditional preprocessor).
951
952       file.f90
953       file.f95
954       file.f03
955       file.f08
956           Free form Fortran source code that should not be preprocessed.
957
958       file.F90
959       file.F95
960       file.F03
961       file.F08
962           Free form Fortran source code that must be preprocessed (with the
963           traditional preprocessor).
964
965       file.go
966           Go source code.
967
968       file.brig
969           BRIG files (binary representation of HSAIL).
970
971       file.ads
972           Ada source code file that contains a library unit declaration (a
973           declaration of a package, subprogram, or generic, or a generic
974           instantiation), or a library unit renaming declaration (a package,
975           generic, or subprogram renaming declaration).  Such files are also
976           called specs.
977
978       file.adb
979           Ada source code file containing a library unit body (a subprogram
980           or package body).  Such files are also called bodies.
981
982       file.s
983           Assembler code.
984
985       file.S
986       file.sx
987           Assembler code that must be preprocessed.
988
989       other
990           An object file to be fed straight into linking.  Any file name with
991           no recognized suffix is treated this way.
992
993       You can specify the input language explicitly with the -x option:
994
995       -x language
996           Specify explicitly the language for the following input files
997           (rather than letting the compiler choose a default based on the
998           file name suffix).  This option applies to all following input
999           files until the next -x option.  Possible values for language are:
1000
1001                   c  c-header  cpp-output
1002                   c++  c++-header  c++-cpp-output
1003                   objective-c  objective-c-header  objective-c-cpp-output
1004                   objective-c++ objective-c++-header objective-c++-cpp-output
1005                   assembler  assembler-with-cpp
1006                   ada
1007                   f77  f77-cpp-input f95  f95-cpp-input
1008                   go
1009                   brig
1010
1011       -x none
1012           Turn off any specification of a language, so that subsequent files
1013           are handled according to their file name suffixes (as they are if
1014           -x has not been used at all).
1015
1016       If you only want some of the stages of compilation, you can use -x (or
1017       filename suffixes) to tell gcc where to start, and one of the options
1018       -c, -S, or -E to say where gcc is to stop.  Note that some combinations
1019       (for example, -x cpp-output -E) instruct gcc to do nothing at all.
1020
1021       -c  Compile or assemble the source files, but do not link.  The linking
1022           stage simply is not done.  The ultimate output is in the form of an
1023           object file for each source file.
1024
1025           By default, the object file name for a source file is made by
1026           replacing the suffix .c, .i, .s, etc., with .o.
1027
1028           Unrecognized input files, not requiring compilation or assembly,
1029           are ignored.
1030
1031       -S  Stop after the stage of compilation proper; do not assemble.  The
1032           output is in the form of an assembler code file for each non-
1033           assembler input file specified.
1034
1035           By default, the assembler file name for a source file is made by
1036           replacing the suffix .c, .i, etc., with .s.
1037
1038           Input files that don't require compilation are ignored.
1039
1040       -E  Stop after the preprocessing stage; do not run the compiler proper.
1041           The output is in the form of preprocessed source code, which is
1042           sent to the standard output.
1043
1044           Input files that don't require preprocessing are ignored.
1045
1046       -o file
1047           Place output in file file.  This applies to whatever sort of output
1048           is being produced, whether it be an executable file, an object
1049           file, an assembler file or preprocessed C code.
1050
1051           If -o is not specified, the default is to put an executable file in
1052           a.out, the object file for source.suffix in source.o, its assembler
1053           file in source.s, a precompiled header file in source.suffix.gch,
1054           and all preprocessed C source on standard output.
1055
1056       -v  Print (on standard error output) the commands executed to run the
1057           stages of compilation.  Also print the version number of the
1058           compiler driver program and of the preprocessor and the compiler
1059           proper.
1060
1061       -###
1062           Like -v except the commands are not executed and arguments are
1063           quoted unless they contain only alphanumeric characters or "./-_".
1064           This is useful for shell scripts to capture the driver-generated
1065           command lines.
1066
1067       --help
1068           Print (on the standard output) a description of the command-line
1069           options understood by gcc.  If the -v option is also specified then
1070           --help is also passed on to the various processes invoked by gcc,
1071           so that they can display the command-line options they accept.  If
1072           the -Wextra option has also been specified (prior to the --help
1073           option), then command-line options that have no documentation
1074           associated with them are also displayed.
1075
1076       --target-help
1077           Print (on the standard output) a description of target-specific
1078           command-line options for each tool.  For some targets extra target-
1079           specific information may also be printed.
1080
1081       --help={class|[^]qualifier}[,...]
1082           Print (on the standard output) a description of the command-line
1083           options understood by the compiler that fit into all specified
1084           classes and qualifiers.  These are the supported classes:
1085
1086           optimizers
1087               Display all of the optimization options supported by the
1088               compiler.
1089
1090           warnings
1091               Display all of the options controlling warning messages
1092               produced by the compiler.
1093
1094           target
1095               Display target-specific options.  Unlike the --target-help
1096               option however, target-specific options of the linker and
1097               assembler are not displayed.  This is because those tools do
1098               not currently support the extended --help= syntax.
1099
1100           params
1101               Display the values recognized by the --param option.
1102
1103           language
1104               Display the options supported for language, where language is
1105               the name of one of the languages supported in this version of
1106               GCC.
1107
1108           common
1109               Display the options that are common to all languages.
1110
1111           These are the supported qualifiers:
1112
1113           undocumented
1114               Display only those options that are undocumented.
1115
1116           joined
1117               Display options taking an argument that appears after an equal
1118               sign in the same continuous piece of text, such as:
1119               --help=target.
1120
1121           separate
1122               Display options taking an argument that appears as a separate
1123               word following the original option, such as: -o output-file.
1124
1125           Thus for example to display all the undocumented target-specific
1126           switches supported by the compiler, use:
1127
1128                   --help=target,undocumented
1129
1130           The sense of a qualifier can be inverted by prefixing it with the ^
1131           character, so for example to display all binary warning options
1132           (i.e., ones that are either on or off and that do not take an
1133           argument) that have a description, use:
1134
1135                   --help=warnings,^joined,^undocumented
1136
1137           The argument to --help= should not consist solely of inverted
1138           qualifiers.
1139
1140           Combining several classes is possible, although this usually
1141           restricts the output so much that there is nothing to display.  One
1142           case where it does work, however, is when one of the classes is
1143           target.  For example, to display all the target-specific
1144           optimization options, use:
1145
1146                   --help=target,optimizers
1147
1148           The --help= option can be repeated on the command line.  Each
1149           successive use displays its requested class of options, skipping
1150           those that have already been displayed.
1151
1152           If the -Q option appears on the command line before the --help=
1153           option, then the descriptive text displayed by --help= is changed.
1154           Instead of describing the displayed options, an indication is given
1155           as to whether the option is enabled, disabled or set to a specific
1156           value (assuming that the compiler knows this at the point where the
1157           --help= option is used).
1158
1159           Here is a truncated example from the ARM port of gcc:
1160
1161                     % gcc -Q -mabi=2 --help=target -c
1162                     The following options are target specific:
1163                     -mabi=                                2
1164                     -mabort-on-noreturn                   [disabled]
1165                     -mapcs                                [disabled]
1166
1167           The output is sensitive to the effects of previous command-line
1168           options, so for example it is possible to find out which
1169           optimizations are enabled at -O2 by using:
1170
1171                   -Q -O2 --help=optimizers
1172
1173           Alternatively you can discover which binary optimizations are
1174           enabled by -O3 by using:
1175
1176                   gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
1177                   gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
1178                   diff /tmp/O2-opts /tmp/O3-opts | grep enabled
1179
1180       --version
1181           Display the version number and copyrights of the invoked GCC.
1182
1183       -pass-exit-codes
1184           Normally the gcc program exits with the code of 1 if any phase of
1185           the compiler returns a non-success return code.  If you specify
1186           -pass-exit-codes, the gcc program instead returns with the
1187           numerically highest error produced by any phase returning an error
1188           indication.  The C, C++, and Fortran front ends return 4 if an
1189           internal compiler error is encountered.
1190
1191       -pipe
1192           Use pipes rather than temporary files for communication between the
1193           various stages of compilation.  This fails to work on some systems
1194           where the assembler is unable to read from a pipe; but the GNU
1195           assembler has no trouble.
1196
1197       -specs=file
1198           Process file after the compiler reads in the standard specs file,
1199           in order to override the defaults which the gcc driver program uses
1200           when determining what switches to pass to cc1, cc1plus, as, ld,
1201           etc.  More than one -specs=file can be specified on the command
1202           line, and they are processed in order, from left to right.
1203
1204       -wrapper
1205           Invoke all subcommands under a wrapper program.  The name of the
1206           wrapper program and its parameters are passed as a comma separated
1207           list.
1208
1209                   gcc -c t.c -wrapper gdb,--args
1210
1211           This invokes all subprograms of gcc under gdb --args, thus the
1212           invocation of cc1 is gdb --args cc1 ....
1213
1214       -ffile-prefix-map=old=new
1215           When compiling files residing in directory old, record any
1216           references to them in the result of the compilation as if the files
1217           resided in directory new instead.  Specifying this option is
1218           equivalent to specifying all the individual -f*-prefix-map options.
1219           This can be used to make reproducible builds that are location
1220           independent.  See also -fmacro-prefix-map and -fdebug-prefix-map.
1221
1222       -fplugin=name.so
1223           Load the plugin code in file name.so, assumed to be a shared object
1224           to be dlopen'd by the compiler.  The base name of the shared object
1225           file is used to identify the plugin for the purposes of argument
1226           parsing (See -fplugin-arg-name-key=value below).  Each plugin
1227           should define the callback functions specified in the Plugins API.
1228
1229       -fplugin-arg-name-key=value
1230           Define an argument called key with a value of value for the plugin
1231           called name.
1232
1233       -fdump-ada-spec[-slim]
1234           For C and C++ source and include files, generate corresponding Ada
1235           specs.
1236
1237       -fada-spec-parent=unit
1238           In conjunction with -fdump-ada-spec[-slim] above, generate Ada
1239           specs as child units of parent unit.
1240
1241       -fdump-go-spec=file
1242           For input files in any language, generate corresponding Go
1243           declarations in file.  This generates Go "const", "type", "var",
1244           and "func" declarations which may be a useful way to start writing
1245           a Go interface to code written in some other language.
1246
1247       @file
1248           Read command-line options from file.  The options read are inserted
1249           in place of the original @file option.  If file does not exist, or
1250           cannot be read, then the option will be treated literally, and not
1251           removed.
1252
1253           Options in file are separated by whitespace.  A whitespace
1254           character may be included in an option by surrounding the entire
1255           option in either single or double quotes.  Any character (including
1256           a backslash) may be included by prefixing the character to be
1257           included with a backslash.  The file may itself contain additional
1258           @file options; any such options will be processed recursively.
1259
1260   Compiling C++ Programs
1261       C++ source files conventionally use one of the suffixes .C, .cc, .cpp,
1262       .CPP, .c++, .cp, or .cxx; C++ header files often use .hh, .hpp, .H, or
1263       (for shared template code) .tcc; and preprocessed C++ files use the
1264       suffix .ii.  GCC recognizes files with these names and compiles them as
1265       C++ programs even if you call the compiler the same way as for
1266       compiling C programs (usually with the name gcc).
1267
1268       However, the use of gcc does not add the C++ library.  g++ is a program
1269       that calls GCC and automatically specifies linking against the C++
1270       library.  It treats .c, .h and .i files as C++ source files instead of
1271       C source files unless -x is used.  This program is also useful when
1272       precompiling a C header file with a .h extension for use in C++
1273       compilations.  On many systems, g++ is also installed with the name
1274       c++.
1275
1276       When you compile C++ programs, you may specify many of the same
1277       command-line options that you use for compiling programs in any
1278       language; or command-line options meaningful for C and related
1279       languages; or options that are meaningful only for C++ programs.
1280
1281   Options Controlling C Dialect
1282       The following options control the dialect of C (or languages derived
1283       from C, such as C++, Objective-C and Objective-C++) that the compiler
1284       accepts:
1285
1286       -ansi
1287           In C mode, this is equivalent to -std=c90. In C++ mode, it is
1288           equivalent to -std=c++98.
1289
1290           This turns off certain features of GCC that are incompatible with
1291           ISO C90 (when compiling C code), or of standard C++ (when compiling
1292           C++ code), such as the "asm" and "typeof" keywords, and predefined
1293           macros such as "unix" and "vax" that identify the type of system
1294           you are using.  It also enables the undesirable and rarely used ISO
1295           trigraph feature.  For the C compiler, it disables recognition of
1296           C++ style // comments as well as the "inline" keyword.
1297
1298           The alternate keywords "__asm__", "__extension__", "__inline__" and
1299           "__typeof__" continue to work despite -ansi.  You would not want to
1300           use them in an ISO C program, of course, but it is useful to put
1301           them in header files that might be included in compilations done
1302           with -ansi.  Alternate predefined macros such as "__unix__" and
1303           "__vax__" are also available, with or without -ansi.
1304
1305           The -ansi option does not cause non-ISO programs to be rejected
1306           gratuitously.  For that, -Wpedantic is required in addition to
1307           -ansi.
1308
1309           The macro "__STRICT_ANSI__" is predefined when the -ansi option is
1310           used.  Some header files may notice this macro and refrain from
1311           declaring certain functions or defining certain macros that the ISO
1312           standard doesn't call for; this is to avoid interfering with any
1313           programs that might use these names for other things.
1314
1315           Functions that are normally built in but do not have semantics
1316           defined by ISO C (such as "alloca" and "ffs") are not built-in
1317           functions when -ansi is used.
1318
1319       -std=
1320           Determine the language standard.   This option is currently only
1321           supported when compiling C or C++.
1322
1323           The compiler can accept several base standards, such as c90 or
1324           c++98, and GNU dialects of those standards, such as gnu90 or
1325           gnu++98.  When a base standard is specified, the compiler accepts
1326           all programs following that standard plus those using GNU
1327           extensions that do not contradict it.  For example, -std=c90 turns
1328           off certain features of GCC that are incompatible with ISO C90,
1329           such as the "asm" and "typeof" keywords, but not other GNU
1330           extensions that do not have a meaning in ISO C90, such as omitting
1331           the middle term of a "?:" expression. On the other hand, when a GNU
1332           dialect of a standard is specified, all features supported by the
1333           compiler are enabled, even when those features change the meaning
1334           of the base standard.  As a result, some strict-conforming programs
1335           may be rejected.  The particular standard is used by -Wpedantic to
1336           identify which features are GNU extensions given that version of
1337           the standard. For example -std=gnu90 -Wpedantic warns about C++
1338           style // comments, while -std=gnu99 -Wpedantic does not.
1339
1340           A value for this option must be provided; possible values are
1341
1342           c90
1343           c89
1344           iso9899:1990
1345               Support all ISO C90 programs (certain GNU extensions that
1346               conflict with ISO C90 are disabled). Same as -ansi for C code.
1347
1348           iso9899:199409
1349               ISO C90 as modified in amendment 1.
1350
1351           c99
1352           c9x
1353           iso9899:1999
1354           iso9899:199x
1355               ISO C99.  This standard is substantially completely supported,
1356               modulo bugs and floating-point issues (mainly but not entirely
1357               relating to optional C99 features from Annexes F and G).  See
1358               <http://gcc.gnu.org/c99status.html> for more information.  The
1359               names c9x and iso9899:199x are deprecated.
1360
1361           c11
1362           c1x
1363           iso9899:2011
1364               ISO C11, the 2011 revision of the ISO C standard.  This
1365               standard is substantially completely supported, modulo bugs,
1366               floating-point issues (mainly but not entirely relating to
1367               optional C11 features from Annexes F and G) and the optional
1368               Annexes K (Bounds-checking interfaces) and L (Analyzability).
1369               The name c1x is deprecated.
1370
1371           c17
1372           c18
1373           iso9899:2017
1374           iso9899:2018
1375               ISO C17, the 2017 revision of the ISO C standard (expected to
1376               be published in 2018).  This standard is same as C11 except for
1377               corrections of defects (all of which are also applied with
1378               -std=c11) and a new value of "__STDC_VERSION__", and so is
1379               supported to the same extent as C11.
1380
1381           gnu90
1382           gnu89
1383               GNU dialect of ISO C90 (including some C99 features).
1384
1385           gnu99
1386           gnu9x
1387               GNU dialect of ISO C99.  The name gnu9x is deprecated.
1388
1389           gnu11
1390           gnu1x
1391               GNU dialect of ISO C11.  The name gnu1x is deprecated.
1392
1393           gnu17
1394           gnu18
1395               GNU dialect of ISO C17.  This is the default for C code.
1396
1397           c++98
1398           c++03
1399               The 1998 ISO C++ standard plus the 2003 technical corrigendum
1400               and some additional defect reports. Same as -ansi for C++ code.
1401
1402           gnu++98
1403           gnu++03
1404               GNU dialect of -std=c++98.
1405
1406           c++11
1407           c++0x
1408               The 2011 ISO C++ standard plus amendments.  The name c++0x is
1409               deprecated.
1410
1411           gnu++11
1412           gnu++0x
1413               GNU dialect of -std=c++11.  The name gnu++0x is deprecated.
1414
1415           c++14
1416           c++1y
1417               The 2014 ISO C++ standard plus amendments.  The name c++1y is
1418               deprecated.
1419
1420           gnu++14
1421           gnu++1y
1422               GNU dialect of -std=c++14.  This is the default for C++ code.
1423               The name gnu++1y is deprecated.
1424
1425           c++17
1426           c++1z
1427               The 2017 ISO C++ standard plus amendments.  The name c++1z is
1428               deprecated.
1429
1430           gnu++17
1431           gnu++1z
1432               GNU dialect of -std=c++17.  The name gnu++1z is deprecated.
1433
1434           c++2a
1435               The next revision of the ISO C++ standard, tentatively planned
1436               for 2020.  Support is highly experimental, and will almost
1437               certainly change in incompatible ways in future releases.
1438
1439           gnu++2a
1440               GNU dialect of -std=c++2a.  Support is highly experimental, and
1441               will almost certainly change in incompatible ways in future
1442               releases.
1443
1444       -fgnu89-inline
1445           The option -fgnu89-inline tells GCC to use the traditional GNU
1446           semantics for "inline" functions when in C99 mode.
1447
1448           Using this option is roughly equivalent to adding the "gnu_inline"
1449           function attribute to all inline functions.
1450
1451           The option -fno-gnu89-inline explicitly tells GCC to use the C99
1452           semantics for "inline" when in C99 or gnu99 mode (i.e., it
1453           specifies the default behavior).  This option is not supported in
1454           -std=c90 or -std=gnu90 mode.
1455
1456           The preprocessor macros "__GNUC_GNU_INLINE__" and
1457           "__GNUC_STDC_INLINE__" may be used to check which semantics are in
1458           effect for "inline" functions.
1459
1460       -fpermitted-flt-eval-methods=style
1461           ISO/IEC TS 18661-3 defines new permissible values for
1462           "FLT_EVAL_METHOD" that indicate that operations and constants with
1463           a semantic type that is an interchange or extended format should be
1464           evaluated to the precision and range of that type.  These new
1465           values are a superset of those permitted under C99/C11, which does
1466           not specify the meaning of other positive values of
1467           "FLT_EVAL_METHOD".  As such, code conforming to C11 may not have
1468           been written expecting the possibility of the new values.
1469
1470           -fpermitted-flt-eval-methods specifies whether the compiler should
1471           allow only the values of "FLT_EVAL_METHOD" specified in C99/C11, or
1472           the extended set of values specified in ISO/IEC TS 18661-3.
1473
1474           style is either "c11" or "ts-18661-3" as appropriate.
1475
1476           The default when in a standards compliant mode (-std=c11 or
1477           similar) is -fpermitted-flt-eval-methods=c11.  The default when in
1478           a GNU dialect (-std=gnu11 or similar) is
1479           -fpermitted-flt-eval-methods=ts-18661-3.
1480
1481       -aux-info filename
1482           Output to the given filename prototyped declarations for all
1483           functions declared and/or defined in a translation unit, including
1484           those in header files.  This option is silently ignored in any
1485           language other than C.
1486
1487           Besides declarations, the file indicates, in comments, the origin
1488           of each declaration (source file and line), whether the declaration
1489           was implicit, prototyped or unprototyped (I, N for new or O for
1490           old, respectively, in the first character after the line number and
1491           the colon), and whether it came from a declaration or a definition
1492           (C or F, respectively, in the following character).  In the case of
1493           function definitions, a K&R-style list of arguments followed by
1494           their declarations is also provided, inside comments, after the
1495           declaration.
1496
1497       -fallow-parameterless-variadic-functions
1498           Accept variadic functions without named parameters.
1499
1500           Although it is possible to define such a function, this is not very
1501           useful as it is not possible to read the arguments.  This is only
1502           supported for C as this construct is allowed by C++.
1503
1504       -fno-asm
1505           Do not recognize "asm", "inline" or "typeof" as a keyword, so that
1506           code can use these words as identifiers.  You can use the keywords
1507           "__asm__", "__inline__" and "__typeof__" instead.  -ansi implies
1508           -fno-asm.
1509
1510           In C++, this switch only affects the "typeof" keyword, since "asm"
1511           and "inline" are standard keywords.  You may want to use the
1512           -fno-gnu-keywords flag instead, which has the same effect.  In C99
1513           mode (-std=c99 or -std=gnu99), this switch only affects the "asm"
1514           and "typeof" keywords, since "inline" is a standard keyword in ISO
1515           C99.
1516
1517       -fno-builtin
1518       -fno-builtin-function
1519           Don't recognize built-in functions that do not begin with
1520           __builtin_ as prefix.
1521
1522           GCC normally generates special code to handle certain built-in
1523           functions more efficiently; for instance, calls to "alloca" may
1524           become single instructions which adjust the stack directly, and
1525           calls to "memcpy" may become inline copy loops.  The resulting code
1526           is often both smaller and faster, but since the function calls no
1527           longer appear as such, you cannot set a breakpoint on those calls,
1528           nor can you change the behavior of the functions by linking with a
1529           different library.  In addition, when a function is recognized as a
1530           built-in function, GCC may use information about that function to
1531           warn about problems with calls to that function, or to generate
1532           more efficient code, even if the resulting code still contains
1533           calls to that function.  For example, warnings are given with
1534           -Wformat for bad calls to "printf" when "printf" is built in and
1535           "strlen" is known not to modify global memory.
1536
1537           With the -fno-builtin-function option only the built-in function
1538           function is disabled.  function must not begin with __builtin_.  If
1539           a function is named that is not built-in in this version of GCC,
1540           this option is ignored.  There is no corresponding
1541           -fbuiltin-function option; if you wish to enable built-in functions
1542           selectively when using -fno-builtin or -ffreestanding, you may
1543           define macros such as:
1544
1545                   #define abs(n)          __builtin_abs ((n))
1546                   #define strcpy(d, s)    __builtin_strcpy ((d), (s))
1547
1548       -fgimple
1549           Enable parsing of function definitions marked with "__GIMPLE".
1550           This is an experimental feature that allows unit testing of GIMPLE
1551           passes.
1552
1553       -fhosted
1554           Assert that compilation targets a hosted environment.  This implies
1555           -fbuiltin.  A hosted environment is one in which the entire
1556           standard library is available, and in which "main" has a return
1557           type of "int".  Examples are nearly everything except a kernel.
1558           This is equivalent to -fno-freestanding.
1559
1560       -ffreestanding
1561           Assert that compilation targets a freestanding environment.  This
1562           implies -fno-builtin.  A freestanding environment is one in which
1563           the standard library may not exist, and program startup may not
1564           necessarily be at "main".  The most obvious example is an OS
1565           kernel.  This is equivalent to -fno-hosted.
1566
1567       -fopenacc
1568           Enable handling of OpenACC directives "#pragma acc" in C/C++ and
1569           "!$acc" in Fortran.  When -fopenacc is specified, the compiler
1570           generates accelerated code according to the OpenACC Application
1571           Programming Interface v2.0 <https://www.openacc.org>.  This option
1572           implies -pthread, and thus is only supported on targets that have
1573           support for -pthread.
1574
1575       -fopenacc-dim=geom
1576           Specify default compute dimensions for parallel offload regions
1577           that do not explicitly specify.  The geom value is a triple of
1578           ':'-separated sizes, in order 'gang', 'worker' and, 'vector'.  A
1579           size can be omitted, to use a target-specific default value.
1580
1581       -fopenmp
1582           Enable handling of OpenMP directives "#pragma omp" in C/C++ and
1583           "!$omp" in Fortran.  When -fopenmp is specified, the compiler
1584           generates parallel code according to the OpenMP Application Program
1585           Interface v4.5 <http://www.openmp.org/>.  This option implies
1586           -pthread, and thus is only supported on targets that have support
1587           for -pthread. -fopenmp implies -fopenmp-simd.
1588
1589       -fopenmp-simd
1590           Enable handling of OpenMP's SIMD directives with "#pragma omp" in
1591           C/C++ and "!$omp" in Fortran. Other OpenMP directives are ignored.
1592
1593       -fgnu-tm
1594           When the option -fgnu-tm is specified, the compiler generates code
1595           for the Linux variant of Intel's current Transactional Memory ABI
1596           specification document (Revision 1.1, May 6 2009).  This is an
1597           experimental feature whose interface may change in future versions
1598           of GCC, as the official specification changes.  Please note that
1599           not all architectures are supported for this feature.
1600
1601           For more information on GCC's support for transactional memory,
1602
1603           Note that the transactional memory feature is not supported with
1604           non-call exceptions (-fnon-call-exceptions).
1605
1606       -fms-extensions
1607           Accept some non-standard constructs used in Microsoft header files.
1608
1609           In C++ code, this allows member names in structures to be similar
1610           to previous types declarations.
1611
1612                   typedef int UOW;
1613                   struct ABC {
1614                     UOW UOW;
1615                   };
1616
1617           Some cases of unnamed fields in structures and unions are only
1618           accepted with this option.
1619
1620           Note that this option is off for all targets but x86 targets using
1621           ms-abi.
1622
1623       -fplan9-extensions
1624           Accept some non-standard constructs used in Plan 9 code.
1625
1626           This enables -fms-extensions, permits passing pointers to
1627           structures with anonymous fields to functions that expect pointers
1628           to elements of the type of the field, and permits referring to
1629           anonymous fields declared using a typedef.    This is only
1630           supported for C, not C++.
1631
1632       -fcond-mismatch
1633           Allow conditional expressions with mismatched types in the second
1634           and third arguments.  The value of such an expression is void.
1635           This option is not supported for C++.
1636
1637       -flax-vector-conversions
1638           Allow implicit conversions between vectors with differing numbers
1639           of elements and/or incompatible element types.  This option should
1640           not be used for new code.
1641
1642       -funsigned-char
1643           Let the type "char" be unsigned, like "unsigned char".
1644
1645           Each kind of machine has a default for what "char" should be.  It
1646           is either like "unsigned char" by default or like "signed char" by
1647           default.
1648
1649           Ideally, a portable program should always use "signed char" or
1650           "unsigned char" when it depends on the signedness of an object.
1651           But many programs have been written to use plain "char" and expect
1652           it to be signed, or expect it to be unsigned, depending on the
1653           machines they were written for.  This option, and its inverse, let
1654           you make such a program work with the opposite default.
1655
1656           The type "char" is always a distinct type from each of "signed
1657           char" or "unsigned char", even though its behavior is always just
1658           like one of those two.
1659
1660       -fsigned-char
1661           Let the type "char" be signed, like "signed char".
1662
1663           Note that this is equivalent to -fno-unsigned-char, which is the
1664           negative form of -funsigned-char.  Likewise, the option
1665           -fno-signed-char is equivalent to -funsigned-char.
1666
1667       -fsigned-bitfields
1668       -funsigned-bitfields
1669       -fno-signed-bitfields
1670       -fno-unsigned-bitfields
1671           These options control whether a bit-field is signed or unsigned,
1672           when the declaration does not use either "signed" or "unsigned".
1673           By default, such a bit-field is signed, because this is consistent:
1674           the basic integer types such as "int" are signed types.
1675
1676       -fsso-struct=endianness
1677           Set the default scalar storage order of structures and unions to
1678           the specified endianness.  The accepted values are big-endian,
1679           little-endian and native for the native endianness of the target
1680           (the default).  This option is not supported for C++.
1681
1682           Warning: the -fsso-struct switch causes GCC to generate code that
1683           is not binary compatible with code generated without it if the
1684           specified endianness is not the native endianness of the target.
1685
1686   Options Controlling C++ Dialect
1687       This section describes the command-line options that are only
1688       meaningful for C++ programs.  You can also use most of the GNU compiler
1689       options regardless of what language your program is in.  For example,
1690       you might compile a file firstClass.C like this:
1691
1692               g++ -g -fstrict-enums -O -c firstClass.C
1693
1694       In this example, only -fstrict-enums is an option meant only for C++
1695       programs; you can use the other options with any language supported by
1696       GCC.
1697
1698       Some options for compiling C programs, such as -std, are also relevant
1699       for C++ programs.
1700
1701       Here is a list of options that are only for compiling C++ programs:
1702
1703       -fabi-version=n
1704           Use version n of the C++ ABI.  The default is version 0.
1705
1706           Version 0 refers to the version conforming most closely to the C++
1707           ABI specification.  Therefore, the ABI obtained using version 0
1708           will change in different versions of G++ as ABI bugs are fixed.
1709
1710           Version 1 is the version of the C++ ABI that first appeared in G++
1711           3.2.
1712
1713           Version 2 is the version of the C++ ABI that first appeared in G++
1714           3.4, and was the default through G++ 4.9.
1715
1716           Version 3 corrects an error in mangling a constant address as a
1717           template argument.
1718
1719           Version 4, which first appeared in G++ 4.5, implements a standard
1720           mangling for vector types.
1721
1722           Version 5, which first appeared in G++ 4.6, corrects the mangling
1723           of attribute const/volatile on function pointer types, decltype of
1724           a plain decl, and use of a function parameter in the declaration of
1725           another parameter.
1726
1727           Version 6, which first appeared in G++ 4.7, corrects the promotion
1728           behavior of C++11 scoped enums and the mangling of template
1729           argument packs, const/static_cast, prefix ++ and --, and a class
1730           scope function used as a template argument.
1731
1732           Version 7, which first appeared in G++ 4.8, that treats nullptr_t
1733           as a builtin type and corrects the mangling of lambdas in default
1734           argument scope.
1735
1736           Version 8, which first appeared in G++ 4.9, corrects the
1737           substitution behavior of function types with function-cv-
1738           qualifiers.
1739
1740           Version 9, which first appeared in G++ 5.2, corrects the alignment
1741           of "nullptr_t".
1742
1743           Version 10, which first appeared in G++ 6.1, adds mangling of
1744           attributes that affect type identity, such as ia32 calling
1745           convention attributes (e.g. stdcall).
1746
1747           Version 11, which first appeared in G++ 7, corrects the mangling of
1748           sizeof... expressions and operator names.  For multiple entities
1749           with the same name within a function, that are declared in
1750           different scopes, the mangling now changes starting with the
1751           twelfth occurrence.  It also implies -fnew-inheriting-ctors.
1752
1753           Version 12, which first appeared in G++ 8, corrects the calling
1754           conventions for empty classes on the x86_64 target and for classes
1755           with only deleted copy/move constructors.  It accidentally changes
1756           the calling convention for classes with a deleted copy constructor
1757           and a trivial move constructor.
1758
1759           Version 13, which first appeared in G++ 8.2, fixes the accidental
1760           change in version 12.
1761
1762           See also -Wabi.
1763
1764       -fabi-compat-version=n
1765           On targets that support strong aliases, G++ works around mangling
1766           changes by creating an alias with the correct mangled name when
1767           defining a symbol with an incorrect mangled name.  This switch
1768           specifies which ABI version to use for the alias.
1769
1770           With -fabi-version=0 (the default), this defaults to 11 (GCC 7
1771           compatibility).  If another ABI version is explicitly selected,
1772           this defaults to 0.  For compatibility with GCC versions 3.2
1773           through 4.9, use -fabi-compat-version=2.
1774
1775           If this option is not provided but -Wabi=n is, that version is used
1776           for compatibility aliases.  If this option is provided along with
1777           -Wabi (without the version), the version from this option is used
1778           for the warning.
1779
1780       -fno-access-control
1781           Turn off all access checking.  This switch is mainly useful for
1782           working around bugs in the access control code.
1783
1784       -faligned-new
1785           Enable support for C++17 "new" of types that require more alignment
1786           than "void* ::operator new(std::size_t)" provides.  A numeric
1787           argument such as "-faligned-new=32" can be used to specify how much
1788           alignment (in bytes) is provided by that function, but few users
1789           will need to override the default of "alignof(std::max_align_t)".
1790
1791           This flag is enabled by default for -std=c++17.
1792
1793       -fcheck-new
1794           Check that the pointer returned by "operator new" is non-null
1795           before attempting to modify the storage allocated.  This check is
1796           normally unnecessary because the C++ standard specifies that
1797           "operator new" only returns 0 if it is declared "throw()", in which
1798           case the compiler always checks the return value even without this
1799           option.  In all other cases, when "operator new" has a non-empty
1800           exception specification, memory exhaustion is signalled by throwing
1801           "std::bad_alloc".  See also new (nothrow).
1802
1803       -fconcepts
1804           Enable support for the C++ Extensions for Concepts Technical
1805           Specification, ISO 19217 (2015), which allows code like
1806
1807                   template <class T> concept bool Addable = requires (T t) { t + t; };
1808                   template <Addable T> T add (T a, T b) { return a + b; }
1809
1810       -fconstexpr-depth=n
1811           Set the maximum nested evaluation depth for C++11 constexpr
1812           functions to n.  A limit is needed to detect endless recursion
1813           during constant expression evaluation.  The minimum specified by
1814           the standard is 512.
1815
1816       -fconstexpr-loop-limit=n
1817           Set the maximum number of iterations for a loop in C++14 constexpr
1818           functions to n.  A limit is needed to detect infinite loops during
1819           constant expression evaluation.  The default is 262144 (1<<18).
1820
1821       -fdeduce-init-list
1822           Enable deduction of a template type parameter as
1823           "std::initializer_list" from a brace-enclosed initializer list,
1824           i.e.
1825
1826                   template <class T> auto forward(T t) -> decltype (realfn (t))
1827                   {
1828                     return realfn (t);
1829                   }
1830
1831                   void f()
1832                   {
1833                     forward({1,2}); // call forward<std::initializer_list<int>>
1834                   }
1835
1836           This deduction was implemented as a possible extension to the
1837           originally proposed semantics for the C++11 standard, but was not
1838           part of the final standard, so it is disabled by default.  This
1839           option is deprecated, and may be removed in a future version of
1840           G++.
1841
1842       -ffriend-injection
1843           Inject friend functions into the enclosing namespace, so that they
1844           are visible outside the scope of the class in which they are
1845           declared.  Friend functions were documented to work this way in the
1846           old Annotated C++ Reference Manual.  However, in ISO C++ a friend
1847           function that is not declared in an enclosing scope can only be
1848           found using argument dependent lookup.  GCC defaults to the
1849           standard behavior.
1850
1851           This option is deprecated and will be removed.
1852
1853       -fno-elide-constructors
1854           The C++ standard allows an implementation to omit creating a
1855           temporary that is only used to initialize another object of the
1856           same type.  Specifying this option disables that optimization, and
1857           forces G++ to call the copy constructor in all cases.  This option
1858           also causes G++ to call trivial member functions which otherwise
1859           would be expanded inline.
1860
1861           In C++17, the compiler is required to omit these temporaries, but
1862           this option still affects trivial member functions.
1863
1864       -fno-enforce-eh-specs
1865           Don't generate code to check for violation of exception
1866           specifications at run time.  This option violates the C++ standard,
1867           but may be useful for reducing code size in production builds, much
1868           like defining "NDEBUG".  This does not give user code permission to
1869           throw exceptions in violation of the exception specifications; the
1870           compiler still optimizes based on the specifications, so throwing
1871           an unexpected exception results in undefined behavior at run time.
1872
1873       -fextern-tls-init
1874       -fno-extern-tls-init
1875           The C++11 and OpenMP standards allow "thread_local" and
1876           "threadprivate" variables to have dynamic (runtime) initialization.
1877           To support this, any use of such a variable goes through a wrapper
1878           function that performs any necessary initialization.  When the use
1879           and definition of the variable are in the same translation unit,
1880           this overhead can be optimized away, but when the use is in a
1881           different translation unit there is significant overhead even if
1882           the variable doesn't actually need dynamic initialization.  If the
1883           programmer can be sure that no use of the variable in a non-
1884           defining TU needs to trigger dynamic initialization (either because
1885           the variable is statically initialized, or a use of the variable in
1886           the defining TU will be executed before any uses in another TU),
1887           they can avoid this overhead with the -fno-extern-tls-init option.
1888
1889           On targets that support symbol aliases, the default is
1890           -fextern-tls-init.  On targets that do not support symbol aliases,
1891           the default is -fno-extern-tls-init.
1892
1893       -ffor-scope
1894       -fno-for-scope
1895           If -ffor-scope is specified, the scope of variables declared in a
1896           for-init-statement is limited to the "for" loop itself, as
1897           specified by the C++ standard.  If -fno-for-scope is specified, the
1898           scope of variables declared in a for-init-statement extends to the
1899           end of the enclosing scope, as was the case in old versions of G++,
1900           and other (traditional) implementations of C++.
1901
1902           This option is deprecated and the associated non-standard
1903           functionality will be removed.
1904
1905       -fno-gnu-keywords
1906           Do not recognize "typeof" as a keyword, so that code can use this
1907           word as an identifier.  You can use the keyword "__typeof__"
1908           instead.  This option is implied by the strict ISO C++ dialects:
1909           -ansi, -std=c++98, -std=c++11, etc.
1910
1911       -fno-implicit-templates
1912           Never emit code for non-inline templates that are instantiated
1913           implicitly (i.e. by use); only emit code for explicit
1914           instantiations.
1915
1916       -fno-implicit-inline-templates
1917           Don't emit code for implicit instantiations of inline templates,
1918           either.  The default is to handle inlines differently so that
1919           compiles with and without optimization need the same set of
1920           explicit instantiations.
1921
1922       -fno-implement-inlines
1923           To save space, do not emit out-of-line copies of inline functions
1924           controlled by "#pragma implementation".  This causes linker errors
1925           if these functions are not inlined everywhere they are called.
1926
1927       -fms-extensions
1928           Disable Wpedantic warnings about constructs used in MFC, such as
1929           implicit int and getting a pointer to member function via non-
1930           standard syntax.
1931
1932       -fnew-inheriting-ctors
1933           Enable the P0136 adjustment to the semantics of C++11 constructor
1934           inheritance.  This is part of C++17 but also considered to be a
1935           Defect Report against C++11 and C++14.  This flag is enabled by
1936           default unless -fabi-version=10 or lower is specified.
1937
1938       -fnew-ttp-matching
1939           Enable the P0522 resolution to Core issue 150, template template
1940           parameters and default arguments: this allows a template with
1941           default template arguments as an argument for a template template
1942           parameter with fewer template parameters.  This flag is enabled by
1943           default for -std=c++17.
1944
1945       -fno-nonansi-builtins
1946           Disable built-in declarations of functions that are not mandated by
1947           ANSI/ISO C.  These include "ffs", "alloca", "_exit", "index",
1948           "bzero", "conjf", and other related functions.
1949
1950       -fnothrow-opt
1951           Treat a "throw()" exception specification as if it were a
1952           "noexcept" specification to reduce or eliminate the text size
1953           overhead relative to a function with no exception specification.
1954           If the function has local variables of types with non-trivial
1955           destructors, the exception specification actually makes the
1956           function smaller because the EH cleanups for those variables can be
1957           optimized away.  The semantic effect is that an exception thrown
1958           out of a function with such an exception specification results in a
1959           call to "terminate" rather than "unexpected".
1960
1961       -fno-operator-names
1962           Do not treat the operator name keywords "and", "bitand", "bitor",
1963           "compl", "not", "or" and "xor" as synonyms as keywords.
1964
1965       -fno-optional-diags
1966           Disable diagnostics that the standard says a compiler does not need
1967           to issue.  Currently, the only such diagnostic issued by G++ is the
1968           one for a name having multiple meanings within a class.
1969
1970       -fpermissive
1971           Downgrade some diagnostics about nonconformant code from errors to
1972           warnings.  Thus, using -fpermissive allows some nonconforming code
1973           to compile.
1974
1975       -fno-pretty-templates
1976           When an error message refers to a specialization of a function
1977           template, the compiler normally prints the signature of the
1978           template followed by the template arguments and any typedefs or
1979           typenames in the signature (e.g. "void f(T) [with T = int]" rather
1980           than "void f(int)") so that it's clear which template is involved.
1981           When an error message refers to a specialization of a class
1982           template, the compiler omits any template arguments that match the
1983           default template arguments for that template.  If either of these
1984           behaviors make it harder to understand the error message rather
1985           than easier, you can use -fno-pretty-templates to disable them.
1986
1987       -frepo
1988           Enable automatic template instantiation at link time.  This option
1989           also implies -fno-implicit-templates.
1990
1991       -fno-rtti
1992           Disable generation of information about every class with virtual
1993           functions for use by the C++ run-time type identification features
1994           ("dynamic_cast" and "typeid").  If you don't use those parts of the
1995           language, you can save some space by using this flag.  Note that
1996           exception handling uses the same information, but G++ generates it
1997           as needed. The "dynamic_cast" operator can still be used for casts
1998           that do not require run-time type information, i.e. casts to "void
1999           *" or to unambiguous base classes.
2000
2001       -fsized-deallocation
2002           Enable the built-in global declarations
2003
2004                   void operator delete (void *, std::size_t) noexcept;
2005                   void operator delete[] (void *, std::size_t) noexcept;
2006
2007           as introduced in C++14.  This is useful for user-defined
2008           replacement deallocation functions that, for example, use the size
2009           of the object to make deallocation faster.  Enabled by default
2010           under -std=c++14 and above.  The flag -Wsized-deallocation warns
2011           about places that might want to add a definition.
2012
2013       -fstrict-enums
2014           Allow the compiler to optimize using the assumption that a value of
2015           enumerated type can only be one of the values of the enumeration
2016           (as defined in the C++ standard; basically, a value that can be
2017           represented in the minimum number of bits needed to represent all
2018           the enumerators).  This assumption may not be valid if the program
2019           uses a cast to convert an arbitrary integer value to the enumerated
2020           type.
2021
2022       -fstrong-eval-order
2023           Evaluate member access, array subscripting, and shift expressions
2024           in left-to-right order, and evaluate assignment in right-to-left
2025           order, as adopted for C++17.  Enabled by default with -std=c++17.
2026           -fstrong-eval-order=some enables just the ordering of member access
2027           and shift expressions, and is the default without -std=c++17.
2028
2029       -ftemplate-backtrace-limit=n
2030           Set the maximum number of template instantiation notes for a single
2031           warning or error to n.  The default value is 10.
2032
2033       -ftemplate-depth=n
2034           Set the maximum instantiation depth for template classes to n.  A
2035           limit on the template instantiation depth is needed to detect
2036           endless recursions during template class instantiation.  ANSI/ISO
2037           C++ conforming programs must not rely on a maximum depth greater
2038           than 17 (changed to 1024 in C++11).  The default value is 900, as
2039           the compiler can run out of stack space before hitting 1024 in some
2040           situations.
2041
2042       -fno-threadsafe-statics
2043           Do not emit the extra code to use the routines specified in the C++
2044           ABI for thread-safe initialization of local statics.  You can use
2045           this option to reduce code size slightly in code that doesn't need
2046           to be thread-safe.
2047
2048       -fuse-cxa-atexit
2049           Register destructors for objects with static storage duration with
2050           the "__cxa_atexit" function rather than the "atexit" function.
2051           This option is required for fully standards-compliant handling of
2052           static destructors, but only works if your C library supports
2053           "__cxa_atexit".
2054
2055       -fno-use-cxa-get-exception-ptr
2056           Don't use the "__cxa_get_exception_ptr" runtime routine.  This
2057           causes "std::uncaught_exception" to be incorrect, but is necessary
2058           if the runtime routine is not available.
2059
2060       -fvisibility-inlines-hidden
2061           This switch declares that the user does not attempt to compare
2062           pointers to inline functions or methods where the addresses of the
2063           two functions are taken in different shared objects.
2064
2065           The effect of this is that GCC may, effectively, mark inline
2066           methods with "__attribute__ ((visibility ("hidden")))" so that they
2067           do not appear in the export table of a DSO and do not require a PLT
2068           indirection when used within the DSO.  Enabling this option can
2069           have a dramatic effect on load and link times of a DSO as it
2070           massively reduces the size of the dynamic export table when the
2071           library makes heavy use of templates.
2072
2073           The behavior of this switch is not quite the same as marking the
2074           methods as hidden directly, because it does not affect static
2075           variables local to the function or cause the compiler to deduce
2076           that the function is defined in only one shared object.
2077
2078           You may mark a method as having a visibility explicitly to negate
2079           the effect of the switch for that method.  For example, if you do
2080           want to compare pointers to a particular inline method, you might
2081           mark it as having default visibility.  Marking the enclosing class
2082           with explicit visibility has no effect.
2083
2084           Explicitly instantiated inline methods are unaffected by this
2085           option as their linkage might otherwise cross a shared library
2086           boundary.
2087
2088       -fvisibility-ms-compat
2089           This flag attempts to use visibility settings to make GCC's C++
2090           linkage model compatible with that of Microsoft Visual Studio.
2091
2092           The flag makes these changes to GCC's linkage model:
2093
2094           1.  It sets the default visibility to "hidden", like
2095               -fvisibility=hidden.
2096
2097           2.  Types, but not their members, are not hidden by default.
2098
2099           3.  The One Definition Rule is relaxed for types without explicit
2100               visibility specifications that are defined in more than one
2101               shared object: those declarations are permitted if they are
2102               permitted when this option is not used.
2103
2104           In new code it is better to use -fvisibility=hidden and export
2105           those classes that are intended to be externally visible.
2106           Unfortunately it is possible for code to rely, perhaps
2107           accidentally, on the Visual Studio behavior.
2108
2109           Among the consequences of these changes are that static data
2110           members of the same type with the same name but defined in
2111           different shared objects are different, so changing one does not
2112           change the other; and that pointers to function members defined in
2113           different shared objects may not compare equal.  When this flag is
2114           given, it is a violation of the ODR to define types with the same
2115           name differently.
2116
2117       -fno-weak
2118           Do not use weak symbol support, even if it is provided by the
2119           linker.  By default, G++ uses weak symbols if they are available.
2120           This option exists only for testing, and should not be used by end-
2121           users; it results in inferior code and has no benefits.  This
2122           option may be removed in a future release of G++.
2123
2124       -nostdinc++
2125           Do not search for header files in the standard directories specific
2126           to C++, but do still search the other standard directories.  (This
2127           option is used when building the C++ library.)
2128
2129       In addition, these optimization, warning, and code generation options
2130       have meanings only for C++ programs:
2131
2132       -Wabi (C, Objective-C, C++ and Objective-C++ only)
2133           Warn when G++ it generates code that is probably not compatible
2134           with the vendor-neutral C++ ABI.  Since G++ now defaults to
2135           updating the ABI with each major release, normally -Wabi will warn
2136           only if there is a check added later in a release series for an ABI
2137           issue discovered since the initial release.  -Wabi will warn about
2138           more things if an older ABI version is selected (with
2139           -fabi-version=n).
2140
2141           -Wabi can also be used with an explicit version number to warn
2142           about compatibility with a particular -fabi-version level, e.g.
2143           -Wabi=2 to warn about changes relative to -fabi-version=2.
2144
2145           If an explicit version number is provided and -fabi-compat-version
2146           is not specified, the version number from this option is used for
2147           compatibility aliases.  If no explicit version number is provided
2148           with this option, but -fabi-compat-version is specified, that
2149           version number is used for ABI warnings.
2150
2151           Although an effort has been made to warn about all such cases,
2152           there are probably some cases that are not warned about, even
2153           though G++ is generating incompatible code.  There may also be
2154           cases where warnings are emitted even though the code that is
2155           generated is compatible.
2156
2157           You should rewrite your code to avoid these warnings if you are
2158           concerned about the fact that code generated by G++ may not be
2159           binary compatible with code generated by other compilers.
2160
2161           Known incompatibilities in -fabi-version=2 (which was the default
2162           from GCC 3.4 to 4.9) include:
2163
2164           *   A template with a non-type template parameter of reference type
2165               was mangled incorrectly:
2166
2167                       extern int N;
2168                       template <int &> struct S {};
2169                       void n (S<N>) {2}
2170
2171               This was fixed in -fabi-version=3.
2172
2173           *   SIMD vector types declared using "__attribute ((vector_size))"
2174               were mangled in a non-standard way that does not allow for
2175               overloading of functions taking vectors of different sizes.
2176
2177               The mangling was changed in -fabi-version=4.
2178
2179           *   "__attribute ((const))" and "noreturn" were mangled as type
2180               qualifiers, and "decltype" of a plain declaration was folded
2181               away.
2182
2183               These mangling issues were fixed in -fabi-version=5.
2184
2185           *   Scoped enumerators passed as arguments to a variadic function
2186               are promoted like unscoped enumerators, causing "va_arg" to
2187               complain.  On most targets this does not actually affect the
2188               parameter passing ABI, as there is no way to pass an argument
2189               smaller than "int".
2190
2191               Also, the ABI changed the mangling of template argument packs,
2192               "const_cast", "static_cast", prefix increment/decrement, and a
2193               class scope function used as a template argument.
2194
2195               These issues were corrected in -fabi-version=6.
2196
2197           *   Lambdas in default argument scope were mangled incorrectly, and
2198               the ABI changed the mangling of "nullptr_t".
2199
2200               These issues were corrected in -fabi-version=7.
2201
2202           *   When mangling a function type with function-cv-qualifiers, the
2203               un-qualified function type was incorrectly treated as a
2204               substitution candidate.
2205
2206               This was fixed in -fabi-version=8, the default for GCC 5.1.
2207
2208           *   "decltype(nullptr)" incorrectly had an alignment of 1, leading
2209               to unaligned accesses.  Note that this did not affect the ABI
2210               of a function with a "nullptr_t" parameter, as parameters have
2211               a minimum alignment.
2212
2213               This was fixed in -fabi-version=9, the default for GCC 5.2.
2214
2215           *   Target-specific attributes that affect the identity of a type,
2216               such as ia32 calling conventions on a function type (stdcall,
2217               regparm, etc.), did not affect the mangled name, leading to
2218               name collisions when function pointers were used as template
2219               arguments.
2220
2221               This was fixed in -fabi-version=10, the default for GCC 6.1.
2222
2223           It also warns about psABI-related changes.  The known psABI changes
2224           at this point include:
2225
2226           *   For SysV/x86-64, unions with "long double" members are passed
2227               in memory as specified in psABI.  For example:
2228
2229                       union U {
2230                         long double ld;
2231                         int i;
2232                       };
2233
2234               "union U" is always passed in memory.
2235
2236       -Wabi-tag (C++ and Objective-C++ only)
2237           Warn when a type with an ABI tag is used in a context that does not
2238           have that ABI tag.  See C++ Attributes for more information about
2239           ABI tags.
2240
2241       -Wctor-dtor-privacy (C++ and Objective-C++ only)
2242           Warn when a class seems unusable because all the constructors or
2243           destructors in that class are private, and it has neither friends
2244           nor public static member functions.  Also warn if there are no non-
2245           private methods, and there's at least one private member function
2246           that isn't a constructor or destructor.
2247
2248       -Wdelete-non-virtual-dtor (C++ and Objective-C++ only)
2249           Warn when "delete" is used to destroy an instance of a class that
2250           has virtual functions and non-virtual destructor. It is unsafe to
2251           delete an instance of a derived class through a pointer to a base
2252           class if the base class does not have a virtual destructor.  This
2253           warning is enabled by -Wall.
2254
2255       -Wliteral-suffix (C++ and Objective-C++ only)
2256           Warn when a string or character literal is followed by a ud-suffix
2257           which does not begin with an underscore.  As a conforming
2258           extension, GCC treats such suffixes as separate preprocessing
2259           tokens in order to maintain backwards compatibility with code that
2260           uses formatting macros from "<inttypes.h>".  For example:
2261
2262                   #define __STDC_FORMAT_MACROS
2263                   #include <inttypes.h>
2264                   #include <stdio.h>
2265
2266                   int main() {
2267                     int64_t i64 = 123;
2268                     printf("My int64: %" PRId64"\n", i64);
2269                   }
2270
2271           In this case, "PRId64" is treated as a separate preprocessing
2272           token.
2273
2274           Additionally, warn when a user-defined literal operator is declared
2275           with a literal suffix identifier that doesn't begin with an
2276           underscore. Literal suffix identifiers that don't begin with an
2277           underscore are reserved for future standardization.
2278
2279           This warning is enabled by default.
2280
2281       -Wlto-type-mismatch
2282           During the link-time optimization warn about type mismatches in
2283           global declarations from different compilation units.  Requires
2284           -flto to be enabled.  Enabled by default.
2285
2286       -Wno-narrowing (C++ and Objective-C++ only)
2287           For C++11 and later standards, narrowing conversions are diagnosed
2288           by default, as required by the standard.  A narrowing conversion
2289           from a constant produces an error, and a narrowing conversion from
2290           a non-constant produces a warning, but -Wno-narrowing suppresses
2291           the diagnostic.  Note that this does not affect the meaning of
2292           well-formed code; narrowing conversions are still considered ill-
2293           formed in SFINAE contexts.
2294
2295           With -Wnarrowing in C++98, warn when a narrowing conversion
2296           prohibited by C++11 occurs within { }, e.g.
2297
2298                   int i = { 2.2 }; // error: narrowing from double to int
2299
2300           This flag is included in -Wall and -Wc++11-compat.
2301
2302       -Wnoexcept (C++ and Objective-C++ only)
2303           Warn when a noexcept-expression evaluates to false because of a
2304           call to a function that does not have a non-throwing exception
2305           specification (i.e. "throw()" or "noexcept") but is known by the
2306           compiler to never throw an exception.
2307
2308       -Wnoexcept-type (C++ and Objective-C++ only)
2309           Warn if the C++17 feature making "noexcept" part of a function type
2310           changes the mangled name of a symbol relative to C++14.  Enabled by
2311           -Wabi and -Wc++17-compat.
2312
2313           As an example:
2314
2315                   template <class T> void f(T t) { t(); };
2316                   void g() noexcept;
2317                   void h() { f(g); }
2318
2319           In C++14, "f" calls "f<void(*)()>", but in C++17 it calls
2320           "f<void(*)()noexcept>".
2321
2322       -Wclass-memaccess (C++ and Objective-C++ only)
2323           Warn when the destination of a call to a raw memory function such
2324           as "memset" or "memcpy" is an object of class type, and when
2325           writing into such an object might bypass the class non-trivial or
2326           deleted constructor or copy assignment, violate const-correctness
2327           or encapsulation, or corrupt virtual table pointers.  Modifying the
2328           representation of such objects may violate invariants maintained by
2329           member functions of the class.  For example, the call to "memset"
2330           below is undefined because it modifies a non-trivial class object
2331           and is, therefore, diagnosed.  The safe way to either initialize or
2332           clear the storage of objects of such types is by using the
2333           appropriate constructor or assignment operator, if one is
2334           available.
2335
2336                   std::string str = "abc";
2337                   memset (&str, 0, sizeof str);
2338
2339           The -Wclass-memaccess option is enabled by -Wall.  Explicitly
2340           casting the pointer to the class object to "void *" or to a type
2341           that can be safely accessed by the raw memory function suppresses
2342           the warning.
2343
2344       -Wnon-virtual-dtor (C++ and Objective-C++ only)
2345           Warn when a class has virtual functions and an accessible non-
2346           virtual destructor itself or in an accessible polymorphic base
2347           class, in which case it is possible but unsafe to delete an
2348           instance of a derived class through a pointer to the class itself
2349           or base class.  This warning is automatically enabled if -Weffc++
2350           is specified.
2351
2352       -Wregister (C++ and Objective-C++ only)
2353           Warn on uses of the "register" storage class specifier, except when
2354           it is part of the GNU Explicit Register Variables extension.  The
2355           use of the "register" keyword as storage class specifier has been
2356           deprecated in C++11 and removed in C++17.  Enabled by default with
2357           -std=c++17.
2358
2359       -Wreorder (C++ and Objective-C++ only)
2360           Warn when the order of member initializers given in the code does
2361           not match the order in which they must be executed.  For instance:
2362
2363                   struct A {
2364                     int i;
2365                     int j;
2366                     A(): j (0), i (1) { }
2367                   };
2368
2369           The compiler rearranges the member initializers for "i" and "j" to
2370           match the declaration order of the members, emitting a warning to
2371           that effect.  This warning is enabled by -Wall.
2372
2373       -fext-numeric-literals (C++ and Objective-C++ only)
2374           Accept imaginary, fixed-point, or machine-defined literal number
2375           suffixes as GNU extensions.  When this option is turned off these
2376           suffixes are treated as C++11 user-defined literal numeric
2377           suffixes.  This is on by default for all pre-C++11 dialects and all
2378           GNU dialects: -std=c++98, -std=gnu++98, -std=gnu++11, -std=gnu++14.
2379           This option is off by default for ISO C++11 onwards (-std=c++11,
2380           ...).
2381
2382       The following -W... options are not affected by -Wall.
2383
2384       -Weffc++ (C++ and Objective-C++ only)
2385           Warn about violations of the following style guidelines from Scott
2386           Meyers' Effective C++ series of books:
2387
2388           *   Define a copy constructor and an assignment operator for
2389               classes with dynamically-allocated memory.
2390
2391           *   Prefer initialization to assignment in constructors.
2392
2393           *   Have "operator=" return a reference to *this.
2394
2395           *   Don't try to return a reference when you must return an object.
2396
2397           *   Distinguish between prefix and postfix forms of increment and
2398               decrement operators.
2399
2400           *   Never overload "&&", "||", or ",".
2401
2402           This option also enables -Wnon-virtual-dtor, which is also one of
2403           the effective C++ recommendations.  However, the check is extended
2404           to warn about the lack of virtual destructor in accessible non-
2405           polymorphic bases classes too.
2406
2407           When selecting this option, be aware that the standard library
2408           headers do not obey all of these guidelines; use grep -v to filter
2409           out those warnings.
2410
2411       -Wstrict-null-sentinel (C++ and Objective-C++ only)
2412           Warn about the use of an uncasted "NULL" as sentinel.  When
2413           compiling only with GCC this is a valid sentinel, as "NULL" is
2414           defined to "__null".  Although it is a null pointer constant rather
2415           than a null pointer, it is guaranteed to be of the same size as a
2416           pointer.  But this use is not portable across different compilers.
2417
2418       -Wno-non-template-friend (C++ and Objective-C++ only)
2419           Disable warnings when non-template friend functions are declared
2420           within a template.  In very old versions of GCC that predate
2421           implementation of the ISO standard, declarations such as friend int
2422           foo(int), where the name of the friend is an unqualified-id, could
2423           be interpreted as a particular specialization of a template
2424           function; the warning exists to diagnose compatibility problems,
2425           and is enabled by default.
2426
2427       -Wold-style-cast (C++ and Objective-C++ only)
2428           Warn if an old-style (C-style) cast to a non-void type is used
2429           within a C++ program.  The new-style casts ("dynamic_cast",
2430           "static_cast", "reinterpret_cast", and "const_cast") are less
2431           vulnerable to unintended effects and much easier to search for.
2432
2433       -Woverloaded-virtual (C++ and Objective-C++ only)
2434           Warn when a function declaration hides virtual functions from a
2435           base class.  For example, in:
2436
2437                   struct A {
2438                     virtual void f();
2439                   };
2440
2441                   struct B: public A {
2442                     void f(int);
2443                   };
2444
2445           the "A" class version of "f" is hidden in "B", and code like:
2446
2447                   B* b;
2448                   b->f();
2449
2450           fails to compile.
2451
2452       -Wno-pmf-conversions (C++ and Objective-C++ only)
2453           Disable the diagnostic for converting a bound pointer to member
2454           function to a plain pointer.
2455
2456       -Wsign-promo (C++ and Objective-C++ only)
2457           Warn when overload resolution chooses a promotion from unsigned or
2458           enumerated type to a signed type, over a conversion to an unsigned
2459           type of the same size.  Previous versions of G++ tried to preserve
2460           unsignedness, but the standard mandates the current behavior.
2461
2462       -Wtemplates (C++ and Objective-C++ only)
2463           Warn when a primary template declaration is encountered.  Some
2464           coding rules disallow templates, and this may be used to enforce
2465           that rule.  The warning is inactive inside a system header file,
2466           such as the STL, so one can still use the STL.  One may also
2467           instantiate or specialize templates.
2468
2469       -Wmultiple-inheritance (C++ and Objective-C++ only)
2470           Warn when a class is defined with multiple direct base classes.
2471           Some coding rules disallow multiple inheritance, and this may be
2472           used to enforce that rule.  The warning is inactive inside a system
2473           header file, such as the STL, so one can still use the STL.  One
2474           may also define classes that indirectly use multiple inheritance.
2475
2476       -Wvirtual-inheritance
2477           Warn when a class is defined with a virtual direct base class.
2478           Some coding rules disallow multiple inheritance, and this may be
2479           used to enforce that rule.  The warning is inactive inside a system
2480           header file, such as the STL, so one can still use the STL.  One
2481           may also define classes that indirectly use virtual inheritance.
2482
2483       -Wnamespaces
2484           Warn when a namespace definition is opened.  Some coding rules
2485           disallow namespaces, and this may be used to enforce that rule.
2486           The warning is inactive inside a system header file, such as the
2487           STL, so one can still use the STL.  One may also use using
2488           directives and qualified names.
2489
2490       -Wno-terminate (C++ and Objective-C++ only)
2491           Disable the warning about a throw-expression that will immediately
2492           result in a call to "terminate".
2493
2494   Options Controlling Objective-C and Objective-C++ Dialects
2495       (NOTE: This manual does not describe the Objective-C and Objective-C++
2496       languages themselves.
2497
2498       This section describes the command-line options that are only
2499       meaningful for Objective-C and Objective-C++ programs.  You can also
2500       use most of the language-independent GNU compiler options.  For
2501       example, you might compile a file some_class.m like this:
2502
2503               gcc -g -fgnu-runtime -O -c some_class.m
2504
2505       In this example, -fgnu-runtime is an option meant only for Objective-C
2506       and Objective-C++ programs; you can use the other options with any
2507       language supported by GCC.
2508
2509       Note that since Objective-C is an extension of the C language,
2510       Objective-C compilations may also use options specific to the C front-
2511       end (e.g., -Wtraditional).  Similarly, Objective-C++ compilations may
2512       use C++-specific options (e.g., -Wabi).
2513
2514       Here is a list of options that are only for compiling Objective-C and
2515       Objective-C++ programs:
2516
2517       -fconstant-string-class=class-name
2518           Use class-name as the name of the class to instantiate for each
2519           literal string specified with the syntax "@"..."".  The default
2520           class name is "NXConstantString" if the GNU runtime is being used,
2521           and "NSConstantString" if the NeXT runtime is being used (see
2522           below).  The -fconstant-cfstrings option, if also present,
2523           overrides the -fconstant-string-class setting and cause "@"...""
2524           literals to be laid out as constant CoreFoundation strings.
2525
2526       -fgnu-runtime
2527           Generate object code compatible with the standard GNU Objective-C
2528           runtime.  This is the default for most types of systems.
2529
2530       -fnext-runtime
2531           Generate output compatible with the NeXT runtime.  This is the
2532           default for NeXT-based systems, including Darwin and Mac OS X.  The
2533           macro "__NEXT_RUNTIME__" is predefined if (and only if) this option
2534           is used.
2535
2536       -fno-nil-receivers
2537           Assume that all Objective-C message dispatches ("[receiver
2538           message:arg]") in this translation unit ensure that the receiver is
2539           not "nil".  This allows for more efficient entry points in the
2540           runtime to be used.  This option is only available in conjunction
2541           with the NeXT runtime and ABI version 0 or 1.
2542
2543       -fobjc-abi-version=n
2544           Use version n of the Objective-C ABI for the selected runtime.
2545           This option is currently supported only for the NeXT runtime.  In
2546           that case, Version 0 is the traditional (32-bit) ABI without
2547           support for properties and other Objective-C 2.0 additions.
2548           Version 1 is the traditional (32-bit) ABI with support for
2549           properties and other Objective-C 2.0 additions.  Version 2 is the
2550           modern (64-bit) ABI.  If nothing is specified, the default is
2551           Version 0 on 32-bit target machines, and Version 2 on 64-bit target
2552           machines.
2553
2554       -fobjc-call-cxx-cdtors
2555           For each Objective-C class, check if any of its instance variables
2556           is a C++ object with a non-trivial default constructor.  If so,
2557           synthesize a special "- (id) .cxx_construct" instance method which
2558           runs non-trivial default constructors on any such instance
2559           variables, in order, and then return "self".  Similarly, check if
2560           any instance variable is a C++ object with a non-trivial
2561           destructor, and if so, synthesize a special "- (void)
2562           .cxx_destruct" method which runs all such default destructors, in
2563           reverse order.
2564
2565           The "- (id) .cxx_construct" and "- (void) .cxx_destruct" methods
2566           thusly generated only operate on instance variables declared in the
2567           current Objective-C class, and not those inherited from
2568           superclasses.  It is the responsibility of the Objective-C runtime
2569           to invoke all such methods in an object's inheritance hierarchy.
2570           The "- (id) .cxx_construct" methods are invoked by the runtime
2571           immediately after a new object instance is allocated; the "- (void)
2572           .cxx_destruct" methods are invoked immediately before the runtime
2573           deallocates an object instance.
2574
2575           As of this writing, only the NeXT runtime on Mac OS X 10.4 and
2576           later has support for invoking the "- (id) .cxx_construct" and "-
2577           (void) .cxx_destruct" methods.
2578
2579       -fobjc-direct-dispatch
2580           Allow fast jumps to the message dispatcher.  On Darwin this is
2581           accomplished via the comm page.
2582
2583       -fobjc-exceptions
2584           Enable syntactic support for structured exception handling in
2585           Objective-C, similar to what is offered by C++.  This option is
2586           required to use the Objective-C keywords @try, @throw, @catch,
2587           @finally and @synchronized.  This option is available with both the
2588           GNU runtime and the NeXT runtime (but not available in conjunction
2589           with the NeXT runtime on Mac OS X 10.2 and earlier).
2590
2591       -fobjc-gc
2592           Enable garbage collection (GC) in Objective-C and Objective-C++
2593           programs.  This option is only available with the NeXT runtime; the
2594           GNU runtime has a different garbage collection implementation that
2595           does not require special compiler flags.
2596
2597       -fobjc-nilcheck
2598           For the NeXT runtime with version 2 of the ABI, check for a nil
2599           receiver in method invocations before doing the actual method call.
2600           This is the default and can be disabled using -fno-objc-nilcheck.
2601           Class methods and super calls are never checked for nil in this way
2602           no matter what this flag is set to.  Currently this flag does
2603           nothing when the GNU runtime, or an older version of the NeXT
2604           runtime ABI, is used.
2605
2606       -fobjc-std=objc1
2607           Conform to the language syntax of Objective-C 1.0, the language
2608           recognized by GCC 4.0.  This only affects the Objective-C additions
2609           to the C/C++ language; it does not affect conformance to C/C++
2610           standards, which is controlled by the separate C/C++ dialect option
2611           flags.  When this option is used with the Objective-C or
2612           Objective-C++ compiler, any Objective-C syntax that is not
2613           recognized by GCC 4.0 is rejected.  This is useful if you need to
2614           make sure that your Objective-C code can be compiled with older
2615           versions of GCC.
2616
2617       -freplace-objc-classes
2618           Emit a special marker instructing ld(1) not to statically link in
2619           the resulting object file, and allow dyld(1) to load it in at run
2620           time instead.  This is used in conjunction with the Fix-and-
2621           Continue debugging mode, where the object file in question may be
2622           recompiled and dynamically reloaded in the course of program
2623           execution, without the need to restart the program itself.
2624           Currently, Fix-and-Continue functionality is only available in
2625           conjunction with the NeXT runtime on Mac OS X 10.3 and later.
2626
2627       -fzero-link
2628           When compiling for the NeXT runtime, the compiler ordinarily
2629           replaces calls to "objc_getClass("...")" (when the name of the
2630           class is known at compile time) with static class references that
2631           get initialized at load time, which improves run-time performance.
2632           Specifying the -fzero-link flag suppresses this behavior and causes
2633           calls to "objc_getClass("...")"  to be retained.  This is useful in
2634           Zero-Link debugging mode, since it allows for individual class
2635           implementations to be modified during program execution.  The GNU
2636           runtime currently always retains calls to "objc_get_class("...")"
2637           regardless of command-line options.
2638
2639       -fno-local-ivars
2640           By default instance variables in Objective-C can be accessed as if
2641           they were local variables from within the methods of the class
2642           they're declared in.  This can lead to shadowing between instance
2643           variables and other variables declared either locally inside a
2644           class method or globally with the same name.  Specifying the
2645           -fno-local-ivars flag disables this behavior thus avoiding variable
2646           shadowing issues.
2647
2648       -fivar-visibility=[public|protected|private|package]
2649           Set the default instance variable visibility to the specified
2650           option so that instance variables declared outside the scope of any
2651           access modifier directives default to the specified visibility.
2652
2653       -gen-decls
2654           Dump interface declarations for all classes seen in the source file
2655           to a file named sourcename.decl.
2656
2657       -Wassign-intercept (Objective-C and Objective-C++ only)
2658           Warn whenever an Objective-C assignment is being intercepted by the
2659           garbage collector.
2660
2661       -Wno-protocol (Objective-C and Objective-C++ only)
2662           If a class is declared to implement a protocol, a warning is issued
2663           for every method in the protocol that is not implemented by the
2664           class.  The default behavior is to issue a warning for every method
2665           not explicitly implemented in the class, even if a method
2666           implementation is inherited from the superclass.  If you use the
2667           -Wno-protocol option, then methods inherited from the superclass
2668           are considered to be implemented, and no warning is issued for
2669           them.
2670
2671       -Wselector (Objective-C and Objective-C++ only)
2672           Warn if multiple methods of different types for the same selector
2673           are found during compilation.  The check is performed on the list
2674           of methods in the final stage of compilation.  Additionally, a
2675           check is performed for each selector appearing in a
2676           "@selector(...)"  expression, and a corresponding method for that
2677           selector has been found during compilation.  Because these checks
2678           scan the method table only at the end of compilation, these
2679           warnings are not produced if the final stage of compilation is not
2680           reached, for example because an error is found during compilation,
2681           or because the -fsyntax-only option is being used.
2682
2683       -Wstrict-selector-match (Objective-C and Objective-C++ only)
2684           Warn if multiple methods with differing argument and/or return
2685           types are found for a given selector when attempting to send a
2686           message using this selector to a receiver of type "id" or "Class".
2687           When this flag is off (which is the default behavior), the compiler
2688           omits such warnings if any differences found are confined to types
2689           that share the same size and alignment.
2690
2691       -Wundeclared-selector (Objective-C and Objective-C++ only)
2692           Warn if a "@selector(...)" expression referring to an undeclared
2693           selector is found.  A selector is considered undeclared if no
2694           method with that name has been declared before the "@selector(...)"
2695           expression, either explicitly in an @interface or @protocol
2696           declaration, or implicitly in an @implementation section.  This
2697           option always performs its checks as soon as a "@selector(...)"
2698           expression is found, while -Wselector only performs its checks in
2699           the final stage of compilation.  This also enforces the coding
2700           style convention that methods and selectors must be declared before
2701           being used.
2702
2703       -print-objc-runtime-info
2704           Generate C header describing the largest structure that is passed
2705           by value, if any.
2706
2707   Options to Control Diagnostic Messages Formatting
2708       Traditionally, diagnostic messages have been formatted irrespective of
2709       the output device's aspect (e.g. its width, ...).  You can use the
2710       options described below to control the formatting algorithm for
2711       diagnostic messages, e.g. how many characters per line, how often
2712       source location information should be reported.  Note that some
2713       language front ends may not honor these options.
2714
2715       -fmessage-length=n
2716           Try to format error messages so that they fit on lines of about n
2717           characters.  If n is zero, then no line-wrapping is done; each
2718           error message appears on a single line.  This is the default for
2719           all front ends.
2720
2721       -fdiagnostics-show-location=once
2722           Only meaningful in line-wrapping mode.  Instructs the diagnostic
2723           messages reporter to emit source location information once; that
2724           is, in case the message is too long to fit on a single physical
2725           line and has to be wrapped, the source location won't be emitted
2726           (as prefix) again, over and over, in subsequent continuation lines.
2727           This is the default behavior.
2728
2729       -fdiagnostics-show-location=every-line
2730           Only meaningful in line-wrapping mode.  Instructs the diagnostic
2731           messages reporter to emit the same source location information (as
2732           prefix) for physical lines that result from the process of breaking
2733           a message which is too long to fit on a single line.
2734
2735       -fdiagnostics-color[=WHEN]
2736       -fno-diagnostics-color
2737           Use color in diagnostics.  WHEN is never, always, or auto.  The
2738           default depends on how the compiler has been configured, it can be
2739           any of the above WHEN options or also never if GCC_COLORS
2740           environment variable isn't present in the environment, and auto
2741           otherwise.  auto means to use color only when the standard error is
2742           a terminal.  The forms -fdiagnostics-color and
2743           -fno-diagnostics-color are aliases for -fdiagnostics-color=always
2744           and -fdiagnostics-color=never, respectively.
2745
2746           The colors are defined by the environment variable GCC_COLORS.  Its
2747           value is a colon-separated list of capabilities and Select Graphic
2748           Rendition (SGR) substrings. SGR commands are interpreted by the
2749           terminal or terminal emulator.  (See the section in the
2750           documentation of your text terminal for permitted values and their
2751           meanings as character attributes.)  These substring values are
2752           integers in decimal representation and can be concatenated with
2753           semicolons.  Common values to concatenate include 1 for bold, 4 for
2754           underline, 5 for blink, 7 for inverse, 39 for default foreground
2755           color, 30 to 37 for foreground colors, 90 to 97 for 16-color mode
2756           foreground colors, 38;5;0 to 38;5;255 for 88-color and 256-color
2757           modes foreground colors, 49 for default background color, 40 to 47
2758           for background colors, 100 to 107 for 16-color mode background
2759           colors, and 48;5;0 to 48;5;255 for 88-color and 256-color modes
2760           background colors.
2761
2762           The default GCC_COLORS is
2763
2764                   error=01;31:warning=01;35:note=01;36:range1=32:range2=34:locus=01:\
2765                   quote=01:fixit-insert=32:fixit-delete=31:\
2766                   diff-filename=01:diff-hunk=32:diff-delete=31:diff-insert=32:\
2767                   type-diff=01;32
2768
2769           where 01;31 is bold red, 01;35 is bold magenta, 01;36 is bold cyan,
2770           32 is green, 34 is blue, 01 is bold, and 31 is red.  Setting
2771           GCC_COLORS to the empty string disables colors.  Supported
2772           capabilities are as follows.
2773
2774           "error="
2775               SGR substring for error: markers.
2776
2777           "warning="
2778               SGR substring for warning: markers.
2779
2780           "note="
2781               SGR substring for note: markers.
2782
2783           "range1="
2784               SGR substring for first additional range.
2785
2786           "range2="
2787               SGR substring for second additional range.
2788
2789           "locus="
2790               SGR substring for location information, file:line or
2791               file:line:column etc.
2792
2793           "quote="
2794               SGR substring for information printed within quotes.
2795
2796           "fixit-insert="
2797               SGR substring for fix-it hints suggesting text to be inserted
2798               or replaced.
2799
2800           "fixit-delete="
2801               SGR substring for fix-it hints suggesting text to be deleted.
2802
2803           "diff-filename="
2804               SGR substring for filename headers within generated patches.
2805
2806           "diff-hunk="
2807               SGR substring for the starts of hunks within generated patches.
2808
2809           "diff-delete="
2810               SGR substring for deleted lines within generated patches.
2811
2812           "diff-insert="
2813               SGR substring for inserted lines within generated patches.
2814
2815           "type-diff="
2816               SGR substring for highlighting mismatching types within
2817               template arguments in the C++ frontend.
2818
2819       -fno-diagnostics-show-option
2820           By default, each diagnostic emitted includes text indicating the
2821           command-line option that directly controls the diagnostic (if such
2822           an option is known to the diagnostic machinery).  Specifying the
2823           -fno-diagnostics-show-option flag suppresses that behavior.
2824
2825       -fno-diagnostics-show-caret
2826           By default, each diagnostic emitted includes the original source
2827           line and a caret ^ indicating the column.  This option suppresses
2828           this information.  The source line is truncated to n characters, if
2829           the -fmessage-length=n option is given.  When the output is done to
2830           the terminal, the width is limited to the width given by the
2831           COLUMNS environment variable or, if not set, to the terminal width.
2832
2833       -fdiagnostics-parseable-fixits
2834           Emit fix-it hints in a machine-parseable format, suitable for
2835           consumption by IDEs.  For each fix-it, a line will be printed after
2836           the relevant diagnostic, starting with the string "fix-it:".  For
2837           example:
2838
2839                   fix-it:"test.c":{45:3-45:21}:"gtk_widget_show_all"
2840
2841           The location is expressed as a half-open range, expressed as a
2842           count of bytes, starting at byte 1 for the initial column.  In the
2843           above example, bytes 3 through 20 of line 45 of "test.c" are to be
2844           replaced with the given string:
2845
2846                   00000000011111111112222222222
2847                   12345678901234567890123456789
2848                     gtk_widget_showall (dlg);
2849                     ^^^^^^^^^^^^^^^^^^
2850                     gtk_widget_show_all
2851
2852           The filename and replacement string escape backslash as "\\", tab
2853           as "\t", newline as "\n", double quotes as "\"", non-printable
2854           characters as octal (e.g. vertical tab as "\013").
2855
2856           An empty replacement string indicates that the given range is to be
2857           removed.  An empty range (e.g. "45:3-45:3") indicates that the
2858           string is to be inserted at the given position.
2859
2860       -fdiagnostics-generate-patch
2861           Print fix-it hints to stderr in unified diff format, after any
2862           diagnostics are printed.  For example:
2863
2864                   --- test.c
2865                   +++ test.c
2866                   @ -42,5 +42,5 @
2867
2868                    void show_cb(GtkDialog *dlg)
2869                    {
2870                   -  gtk_widget_showall(dlg);
2871                   +  gtk_widget_show_all(dlg);
2872                    }
2873
2874           The diff may or may not be colorized, following the same rules as
2875           for diagnostics (see -fdiagnostics-color).
2876
2877       -fdiagnostics-show-template-tree
2878           In the C++ frontend, when printing diagnostics showing mismatching
2879           template types, such as:
2880
2881                     could not convert 'std::map<int, std::vector<double> >()'
2882                       from 'map<[...],vector<double>>' to 'map<[...],vector<float>>
2883
2884           the -fdiagnostics-show-template-tree flag enables printing a tree-
2885           like structure showing the common and differing parts of the types,
2886           such as:
2887
2888                     map<
2889                       [...],
2890                       vector<
2891                         [double != float]>>
2892
2893           The parts that differ are highlighted with color ("double" and
2894           "float" in this case).
2895
2896       -fno-elide-type
2897           By default when the C++ frontend prints diagnostics showing
2898           mismatching template types, common parts of the types are printed
2899           as "[...]" to simplify the error message.  For example:
2900
2901                     could not convert 'std::map<int, std::vector<double> >()'
2902                       from 'map<[...],vector<double>>' to 'map<[...],vector<float>>
2903
2904           Specifying the -fno-elide-type flag suppresses that behavior.  This
2905           flag also affects the output of the
2906           -fdiagnostics-show-template-tree flag.
2907
2908       -fno-show-column
2909           Do not print column numbers in diagnostics.  This may be necessary
2910           if diagnostics are being scanned by a program that does not
2911           understand the column numbers, such as dejagnu.
2912
2913   Options to Request or Suppress Warnings
2914       Warnings are diagnostic messages that report constructions that are not
2915       inherently erroneous but that are risky or suggest there may have been
2916       an error.
2917
2918       The following language-independent options do not enable specific
2919       warnings but control the kinds of diagnostics produced by GCC.
2920
2921       -fsyntax-only
2922           Check the code for syntax errors, but don't do anything beyond
2923           that.
2924
2925       -fmax-errors=n
2926           Limits the maximum number of error messages to n, at which point
2927           GCC bails out rather than attempting to continue processing the
2928           source code.  If n is 0 (the default), there is no limit on the
2929           number of error messages produced.  If -Wfatal-errors is also
2930           specified, then -Wfatal-errors takes precedence over this option.
2931
2932       -w  Inhibit all warning messages.
2933
2934       -Werror
2935           Make all warnings into errors.
2936
2937       -Werror=
2938           Make the specified warning into an error.  The specifier for a
2939           warning is appended; for example -Werror=switch turns the warnings
2940           controlled by -Wswitch into errors.  This switch takes a negative
2941           form, to be used to negate -Werror for specific warnings; for
2942           example -Wno-error=switch makes -Wswitch warnings not be errors,
2943           even when -Werror is in effect.
2944
2945           The warning message for each controllable warning includes the
2946           option that controls the warning.  That option can then be used
2947           with -Werror= and -Wno-error= as described above.  (Printing of the
2948           option in the warning message can be disabled using the
2949           -fno-diagnostics-show-option flag.)
2950
2951           Note that specifying -Werror=foo automatically implies -Wfoo.
2952           However, -Wno-error=foo does not imply anything.
2953
2954       -Wfatal-errors
2955           This option causes the compiler to abort compilation on the first
2956           error occurred rather than trying to keep going and printing
2957           further error messages.
2958
2959       You can request many specific warnings with options beginning with -W,
2960       for example -Wimplicit to request warnings on implicit declarations.
2961       Each of these specific warning options also has a negative form
2962       beginning -Wno- to turn off warnings; for example, -Wno-implicit.  This
2963       manual lists only one of the two forms, whichever is not the default.
2964       For further language-specific options also refer to C++ Dialect Options
2965       and Objective-C and Objective-C++ Dialect Options.
2966
2967       Some options, such as -Wall and -Wextra, turn on other options, such as
2968       -Wunused, which may turn on further options, such as -Wunused-value.
2969       The combined effect of positive and negative forms is that more
2970       specific options have priority over less specific ones, independently
2971       of their position in the command-line. For options of the same
2972       specificity, the last one takes effect. Options enabled or disabled via
2973       pragmas take effect as if they appeared at the end of the command-line.
2974
2975       When an unrecognized warning option is requested (e.g.,
2976       -Wunknown-warning), GCC emits a diagnostic stating that the option is
2977       not recognized.  However, if the -Wno- form is used, the behavior is
2978       slightly different: no diagnostic is produced for -Wno-unknown-warning
2979       unless other diagnostics are being produced.  This allows the use of
2980       new -Wno- options with old compilers, but if something goes wrong, the
2981       compiler warns that an unrecognized option is present.
2982
2983       -Wpedantic
2984       -pedantic
2985           Issue all the warnings demanded by strict ISO C and ISO C++; reject
2986           all programs that use forbidden extensions, and some other programs
2987           that do not follow ISO C and ISO C++.  For ISO C, follows the
2988           version of the ISO C standard specified by any -std option used.
2989
2990           Valid ISO C and ISO C++ programs should compile properly with or
2991           without this option (though a rare few require -ansi or a -std
2992           option specifying the required version of ISO C).  However, without
2993           this option, certain GNU extensions and traditional C and C++
2994           features are supported as well.  With this option, they are
2995           rejected.
2996
2997           -Wpedantic does not cause warning messages for use of the alternate
2998           keywords whose names begin and end with __.  Pedantic warnings are
2999           also disabled in the expression that follows "__extension__".
3000           However, only system header files should use these escape routes;
3001           application programs should avoid them.
3002
3003           Some users try to use -Wpedantic to check programs for strict ISO C
3004           conformance.  They soon find that it does not do quite what they
3005           want: it finds some non-ISO practices, but not all---only those for
3006           which ISO C requires a diagnostic, and some others for which
3007           diagnostics have been added.
3008
3009           A feature to report any failure to conform to ISO C might be useful
3010           in some instances, but would require considerable additional work
3011           and would be quite different from -Wpedantic.  We don't have plans
3012           to support such a feature in the near future.
3013
3014           Where the standard specified with -std represents a GNU extended
3015           dialect of C, such as gnu90 or gnu99, there is a corresponding base
3016           standard, the version of ISO C on which the GNU extended dialect is
3017           based.  Warnings from -Wpedantic are given where they are required
3018           by the base standard.  (It does not make sense for such warnings to
3019           be given only for features not in the specified GNU C dialect,
3020           since by definition the GNU dialects of C include all features the
3021           compiler supports with the given option, and there would be nothing
3022           to warn about.)
3023
3024       -pedantic-errors
3025           Give an error whenever the base standard (see -Wpedantic) requires
3026           a diagnostic, in some cases where there is undefined behavior at
3027           compile-time and in some other cases that do not prevent
3028           compilation of programs that are valid according to the standard.
3029           This is not equivalent to -Werror=pedantic, since there are errors
3030           enabled by this option and not enabled by the latter and vice
3031           versa.
3032
3033       -Wall
3034           This enables all the warnings about constructions that some users
3035           consider questionable, and that are easy to avoid (or modify to
3036           prevent the warning), even in conjunction with macros.  This also
3037           enables some language-specific warnings described in C++ Dialect
3038           Options and Objective-C and Objective-C++ Dialect Options.
3039
3040           -Wall turns on the following warning flags:
3041
3042           -Waddress -Warray-bounds=1 (only with -O2) -Wbool-compare
3043           -Wbool-operation -Wc++11-compat  -Wc++14-compat -Wcatch-value (C++
3044           and Objective-C++ only) -Wchar-subscripts -Wcomment
3045           -Wduplicate-decl-specifier (C and Objective-C only) -Wenum-compare
3046           (in C/ObjC; this is on by default in C++) -Wformat
3047           -Wint-in-bool-context -Wimplicit (C and Objective-C only)
3048           -Wimplicit-int (C and Objective-C only)
3049           -Wimplicit-function-declaration (C and Objective-C only)
3050           -Winit-self (only for C++) -Wlogical-not-parentheses -Wmain (only
3051           for C/ObjC and unless -ffreestanding) -Wmaybe-uninitialized
3052           -Wmemset-elt-size -Wmemset-transposed-args -Wmisleading-indentation
3053           (only for C/C++) -Wmissing-attributes -Wmissing-braces (only for
3054           C/ObjC) -Wmultistatement-macros -Wnarrowing (only for C++)
3055           -Wnonnull -Wnonnull-compare -Wopenmp-simd -Wparentheses
3056           -Wpointer-sign -Wreorder -Wrestrict -Wreturn-type -Wsequence-point
3057           -Wsign-compare (only in C++) -Wsizeof-pointer-div
3058           -Wsizeof-pointer-memaccess -Wstrict-aliasing -Wstrict-overflow=1
3059           -Wstringop-truncation -Wswitch -Wtautological-compare -Wtrigraphs
3060           -Wuninitialized -Wunknown-pragmas -Wunused-function -Wunused-label
3061           -Wunused-value -Wunused-variable -Wvolatile-register-var
3062
3063           Note that some warning flags are not implied by -Wall.  Some of
3064           them warn about constructions that users generally do not consider
3065           questionable, but which occasionally you might wish to check for;
3066           others warn about constructions that are necessary or hard to avoid
3067           in some cases, and there is no simple way to modify the code to
3068           suppress the warning. Some of them are enabled by -Wextra but many
3069           of them must be enabled individually.
3070
3071       -Wextra
3072           This enables some extra warning flags that are not enabled by
3073           -Wall. (This option used to be called -W.  The older name is still
3074           supported, but the newer name is more descriptive.)
3075
3076           -Wclobbered -Wcast-function-type -Wempty-body -Wignored-qualifiers
3077           -Wimplicit-fallthrough=3 -Wmissing-field-initializers
3078           -Wmissing-parameter-type (C only) -Wold-style-declaration (C only)
3079           -Woverride-init -Wsign-compare (C only) -Wtype-limits
3080           -Wuninitialized -Wshift-negative-value (in C++03 and in C99 and
3081           newer) -Wunused-parameter (only with -Wunused or -Wall)
3082           -Wunused-but-set-parameter (only with -Wunused or -Wall)
3083
3084           The option -Wextra also prints warning messages for the following
3085           cases:
3086
3087           *   A pointer is compared against integer zero with "<", "<=", ">",
3088               or ">=".
3089
3090           *   (C++ only) An enumerator and a non-enumerator both appear in a
3091               conditional expression.
3092
3093           *   (C++ only) Ambiguous virtual bases.
3094
3095           *   (C++ only) Subscripting an array that has been declared
3096               "register".
3097
3098           *   (C++ only) Taking the address of a variable that has been
3099               declared "register".
3100
3101           *   (C++ only) A base class is not initialized in the copy
3102               constructor of a derived class.
3103
3104       -Wchar-subscripts
3105           Warn if an array subscript has type "char".  This is a common cause
3106           of error, as programmers often forget that this type is signed on
3107           some machines.  This warning is enabled by -Wall.
3108
3109       -Wchkp
3110           Warn about an invalid memory access that is found by Pointer Bounds
3111           Checker (-fcheck-pointer-bounds).
3112
3113       -Wno-coverage-mismatch
3114           Warn if feedback profiles do not match when using the -fprofile-use
3115           option.  If a source file is changed between compiling with
3116           -fprofile-gen and with -fprofile-use, the files with the profile
3117           feedback can fail to match the source file and GCC cannot use the
3118           profile feedback information.  By default, this warning is enabled
3119           and is treated as an error.  -Wno-coverage-mismatch can be used to
3120           disable the warning or -Wno-error=coverage-mismatch can be used to
3121           disable the error.  Disabling the error for this warning can result
3122           in poorly optimized code and is useful only in the case of very
3123           minor changes such as bug fixes to an existing code-base.
3124           Completely disabling the warning is not recommended.
3125
3126       -Wno-cpp
3127           (C, Objective-C, C++, Objective-C++ and Fortran only)
3128
3129           Suppress warning messages emitted by "#warning" directives.
3130
3131       -Wdouble-promotion (C, C++, Objective-C and Objective-C++ only)
3132           Give a warning when a value of type "float" is implicitly promoted
3133           to "double".  CPUs with a 32-bit "single-precision" floating-point
3134           unit implement "float" in hardware, but emulate "double" in
3135           software.  On such a machine, doing computations using "double"
3136           values is much more expensive because of the overhead required for
3137           software emulation.
3138
3139           It is easy to accidentally do computations with "double" because
3140           floating-point literals are implicitly of type "double".  For
3141           example, in:
3142
3143                   float area(float radius)
3144                   {
3145                      return 3.14159 * radius * radius;
3146                   }
3147
3148           the compiler performs the entire computation with "double" because
3149           the floating-point literal is a "double".
3150
3151       -Wduplicate-decl-specifier (C and Objective-C only)
3152           Warn if a declaration has duplicate "const", "volatile", "restrict"
3153           or "_Atomic" specifier.  This warning is enabled by -Wall.
3154
3155       -Wformat
3156       -Wformat=n
3157           Check calls to "printf" and "scanf", etc., to make sure that the
3158           arguments supplied have types appropriate to the format string
3159           specified, and that the conversions specified in the format string
3160           make sense.  This includes standard functions, and others specified
3161           by format attributes, in the "printf", "scanf", "strftime" and
3162           "strfmon" (an X/Open extension, not in the C standard) families (or
3163           other target-specific families).  Which functions are checked
3164           without format attributes having been specified depends on the
3165           standard version selected, and such checks of functions without the
3166           attribute specified are disabled by -ffreestanding or -fno-builtin.
3167
3168           The formats are checked against the format features supported by
3169           GNU libc version 2.2.  These include all ISO C90 and C99 features,
3170           as well as features from the Single Unix Specification and some BSD
3171           and GNU extensions.  Other library implementations may not support
3172           all these features; GCC does not support warning about features
3173           that go beyond a particular library's limitations.  However, if
3174           -Wpedantic is used with -Wformat, warnings are given about format
3175           features not in the selected standard version (but not for
3176           "strfmon" formats, since those are not in any version of the C
3177           standard).
3178
3179           -Wformat=1
3180           -Wformat
3181               Option -Wformat is equivalent to -Wformat=1, and -Wno-format is
3182               equivalent to -Wformat=0.  Since -Wformat also checks for null
3183               format arguments for several functions, -Wformat also implies
3184               -Wnonnull.  Some aspects of this level of format checking can
3185               be disabled by the options: -Wno-format-contains-nul,
3186               -Wno-format-extra-args, and -Wno-format-zero-length.  -Wformat
3187               is enabled by -Wall.
3188
3189           -Wno-format-contains-nul
3190               If -Wformat is specified, do not warn about format strings that
3191               contain NUL bytes.
3192
3193           -Wno-format-extra-args
3194               If -Wformat is specified, do not warn about excess arguments to
3195               a "printf" or "scanf" format function.  The C standard
3196               specifies that such arguments are ignored.
3197
3198               Where the unused arguments lie between used arguments that are
3199               specified with $ operand number specifications, normally
3200               warnings are still given, since the implementation could not
3201               know what type to pass to "va_arg" to skip the unused
3202               arguments.  However, in the case of "scanf" formats, this
3203               option suppresses the warning if the unused arguments are all
3204               pointers, since the Single Unix Specification says that such
3205               unused arguments are allowed.
3206
3207           -Wformat-overflow
3208           -Wformat-overflow=level
3209               Warn about calls to formatted input/output functions such as
3210               "sprintf" and "vsprintf" that might overflow the destination
3211               buffer.  When the exact number of bytes written by a format
3212               directive cannot be determined at compile-time it is estimated
3213               based on heuristics that depend on the level argument and on
3214               optimization.  While enabling optimization will in most cases
3215               improve the accuracy of the warning, it may also result in
3216               false positives.
3217
3218               -Wformat-overflow
3219               -Wformat-overflow=1
3220                   Level 1 of -Wformat-overflow enabled by -Wformat employs a
3221                   conservative approach that warns only about calls that most
3222                   likely overflow the buffer.  At this level, numeric
3223                   arguments to format directives with unknown values are
3224                   assumed to have the value of one, and strings of unknown
3225                   length to be empty.  Numeric arguments that are known to be
3226                   bounded to a subrange of their type, or string arguments
3227                   whose output is bounded either by their directive's
3228                   precision or by a finite set of string literals, are
3229                   assumed to take on the value within the range that results
3230                   in the most bytes on output.  For example, the call to
3231                   "sprintf" below is diagnosed because even with both a and b
3232                   equal to zero, the terminating NUL character ('\0')
3233                   appended by the function to the destination buffer will be
3234                   written past its end.  Increasing the size of the buffer by
3235                   a single byte is sufficient to avoid the warning, though it
3236                   may not be sufficient to avoid the overflow.
3237
3238                           void f (int a, int b)
3239                           {
3240                             char buf [13];
3241                             sprintf (buf, "a = %i, b = %i\n", a, b);
3242                           }
3243
3244               -Wformat-overflow=2
3245                   Level 2 warns also about calls that might overflow the
3246                   destination buffer given an argument of sufficient length
3247                   or magnitude.  At level 2, unknown numeric arguments are
3248                   assumed to have the minimum representable value for signed
3249                   types with a precision greater than 1, and the maximum
3250                   representable value otherwise.  Unknown string arguments
3251                   whose length cannot be assumed to be bounded either by the
3252                   directive's precision, or by a finite set of string
3253                   literals they may evaluate to, or the character array they
3254                   may point to, are assumed to be 1 character long.
3255
3256                   At level 2, the call in the example above is again
3257                   diagnosed, but this time because with a equal to a 32-bit
3258                   "INT_MIN" the first %i directive will write some of its
3259                   digits beyond the end of the destination buffer.  To make
3260                   the call safe regardless of the values of the two
3261                   variables, the size of the destination buffer must be
3262                   increased to at least 34 bytes.  GCC includes the minimum
3263                   size of the buffer in an informational note following the
3264                   warning.
3265
3266                   An alternative to increasing the size of the destination
3267                   buffer is to constrain the range of formatted values.  The
3268                   maximum length of string arguments can be bounded by
3269                   specifying the precision in the format directive.  When
3270                   numeric arguments of format directives can be assumed to be
3271                   bounded by less than the precision of their type, choosing
3272                   an appropriate length modifier to the format specifier will
3273                   reduce the required buffer size.  For example, if a and b
3274                   in the example above can be assumed to be within the
3275                   precision of the "short int" type then using either the %hi
3276                   format directive or casting the argument to "short" reduces
3277                   the maximum required size of the buffer to 24 bytes.
3278
3279                           void f (int a, int b)
3280                           {
3281                             char buf [23];
3282                             sprintf (buf, "a = %hi, b = %i\n", a, (short)b);
3283                           }
3284
3285           -Wno-format-zero-length
3286               If -Wformat is specified, do not warn about zero-length
3287               formats.  The C standard specifies that zero-length formats are
3288               allowed.
3289
3290           -Wformat=2
3291               Enable -Wformat plus additional format checks.  Currently
3292               equivalent to -Wformat -Wformat-nonliteral -Wformat-security
3293               -Wformat-y2k.
3294
3295           -Wformat-nonliteral
3296               If -Wformat is specified, also warn if the format string is not
3297               a string literal and so cannot be checked, unless the format
3298               function takes its format arguments as a "va_list".
3299
3300           -Wformat-security
3301               If -Wformat is specified, also warn about uses of format
3302               functions that represent possible security problems.  At
3303               present, this warns about calls to "printf" and "scanf"
3304               functions where the format string is not a string literal and
3305               there are no format arguments, as in "printf (foo);".  This may
3306               be a security hole if the format string came from untrusted
3307               input and contains %n.  (This is currently a subset of what
3308               -Wformat-nonliteral warns about, but in future warnings may be
3309               added to -Wformat-security that are not included in
3310               -Wformat-nonliteral.)
3311
3312           -Wformat-signedness
3313               If -Wformat is specified, also warn if the format string
3314               requires an unsigned argument and the argument is signed and
3315               vice versa.
3316
3317           -Wformat-truncation
3318           -Wformat-truncation=level
3319               Warn about calls to formatted input/output functions such as
3320               "snprintf" and "vsnprintf" that might result in output
3321               truncation.  When the exact number of bytes written by a format
3322               directive cannot be determined at compile-time it is estimated
3323               based on heuristics that depend on the level argument and on
3324               optimization.  While enabling optimization will in most cases
3325               improve the accuracy of the warning, it may also result in
3326               false positives.  Except as noted otherwise, the option uses
3327               the same logic -Wformat-overflow.
3328
3329               -Wformat-truncation
3330               -Wformat-truncation=1
3331                   Level 1 of -Wformat-truncation enabled by -Wformat employs
3332                   a conservative approach that warns only about calls to
3333                   bounded functions whose return value is unused and that
3334                   will most likely result in output truncation.
3335
3336               -Wformat-truncation=2
3337                   Level 2 warns also about calls to bounded functions whose
3338                   return value is used and that might result in truncation
3339                   given an argument of sufficient length or magnitude.
3340
3341           -Wformat-y2k
3342               If -Wformat is specified, also warn about "strftime" formats
3343               that may yield only a two-digit year.
3344
3345       -Wnonnull
3346           Warn about passing a null pointer for arguments marked as requiring
3347           a non-null value by the "nonnull" function attribute.
3348
3349           -Wnonnull is included in -Wall and -Wformat.  It can be disabled
3350           with the -Wno-nonnull option.
3351
3352       -Wnonnull-compare
3353           Warn when comparing an argument marked with the "nonnull" function
3354           attribute against null inside the function.
3355
3356           -Wnonnull-compare is included in -Wall.  It can be disabled with
3357           the -Wno-nonnull-compare option.
3358
3359       -Wnull-dereference
3360           Warn if the compiler detects paths that trigger erroneous or
3361           undefined behavior due to dereferencing a null pointer.  This
3362           option is only active when -fdelete-null-pointer-checks is active,
3363           which is enabled by optimizations in most targets.  The precision
3364           of the warnings depends on the optimization options used.
3365
3366       -Winit-self (C, C++, Objective-C and Objective-C++ only)
3367           Warn about uninitialized variables that are initialized with
3368           themselves.  Note this option can only be used with the
3369           -Wuninitialized option.
3370
3371           For example, GCC warns about "i" being uninitialized in the
3372           following snippet only when -Winit-self has been specified:
3373
3374                   int f()
3375                   {
3376                     int i = i;
3377                     return i;
3378                   }
3379
3380           This warning is enabled by -Wall in C++.
3381
3382       -Wimplicit-int (C and Objective-C only)
3383           Warn when a declaration does not specify a type.  This warning is
3384           enabled by -Wall.
3385
3386       -Wimplicit-function-declaration (C and Objective-C only)
3387           Give a warning whenever a function is used before being declared.
3388           In C99 mode (-std=c99 or -std=gnu99), this warning is enabled by
3389           default and it is made into an error by -pedantic-errors. This
3390           warning is also enabled by -Wall.
3391
3392       -Wimplicit (C and Objective-C only)
3393           Same as -Wimplicit-int and -Wimplicit-function-declaration.  This
3394           warning is enabled by -Wall.
3395
3396       -Wimplicit-fallthrough
3397           -Wimplicit-fallthrough is the same as -Wimplicit-fallthrough=3 and
3398           -Wno-implicit-fallthrough is the same as -Wimplicit-fallthrough=0.
3399
3400       -Wimplicit-fallthrough=n
3401           Warn when a switch case falls through.  For example:
3402
3403                   switch (cond)
3404                     {
3405                     case 1:
3406                       a = 1;
3407                       break;
3408                     case 2:
3409                       a = 2;
3410                     case 3:
3411                       a = 3;
3412                       break;
3413                     }
3414
3415           This warning does not warn when the last statement of a case cannot
3416           fall through, e.g. when there is a return statement or a call to
3417           function declared with the noreturn attribute.
3418           -Wimplicit-fallthrough= also takes into account control flow
3419           statements, such as ifs, and only warns when appropriate.  E.g.
3420
3421                   switch (cond)
3422                     {
3423                     case 1:
3424                       if (i > 3) {
3425                         bar (5);
3426                         break;
3427                       } else if (i < 1) {
3428                         bar (0);
3429                       } else
3430                         return;
3431                     default:
3432                       ...
3433                     }
3434
3435           Since there are occasions where a switch case fall through is
3436           desirable, GCC provides an attribute, "__attribute__
3437           ((fallthrough))", that is to be used along with a null statement to
3438           suppress this warning that would normally occur:
3439
3440                   switch (cond)
3441                     {
3442                     case 1:
3443                       bar (0);
3444                       __attribute__ ((fallthrough));
3445                     default:
3446                       ...
3447                     }
3448
3449           C++17 provides a standard way to suppress the
3450           -Wimplicit-fallthrough warning using "[[fallthrough]];" instead of
3451           the GNU attribute.  In C++11 or C++14 users can use
3452           "[[gnu::fallthrough]];", which is a GNU extension.  Instead of
3453           these attributes, it is also possible to add a fallthrough comment
3454           to silence the warning.  The whole body of the C or C++ style
3455           comment should match the given regular expressions listed below.
3456           The option argument n specifies what kind of comments are accepted:
3457
3458           *<-Wimplicit-fallthrough=0 disables the warning altogether.>
3459           *<-Wimplicit-fallthrough=1 matches ".*" regular>
3460               expression, any comment is used as fallthrough comment.
3461
3462           *<-Wimplicit-fallthrough=2 case insensitively matches>
3463               ".*falls?[ \t-]*thr(ough|u).*" regular expression.
3464
3465           *<-Wimplicit-fallthrough=3 case sensitively matches one of the>
3466               following regular expressions:
3467
3468               *<"-fallthrough">
3469               *<"@fallthrough@">
3470               *<"lint -fallthrough[ \t]*">
3471               *<"[ \t.!]*(ELSE,? |INTENTIONAL(LY)? )?FALL(S |
3472               |-)?THR(OUGH|U)[ \t.!]*(-[^\n\r]*)?">
3473               *<"[ \t.!]*(Else,? |Intentional(ly)? )?Fall((s |
3474               |-)[Tt]|t)hr(ough|u)[ \t.!]*(-[^\n\r]*)?">
3475               *<"[ \t.!]*([Ee]lse,? |[Ii]ntentional(ly)? )?fall(s |
3476               |-)?thr(ough|u)[ \t.!]*(-[^\n\r]*)?">
3477           *<-Wimplicit-fallthrough=4 case sensitively matches one of the>
3478               following regular expressions:
3479
3480               *<"-fallthrough">
3481               *<"@fallthrough@">
3482               *<"lint -fallthrough[ \t]*">
3483               *<"[ \t]*FALLTHR(OUGH|U)[ \t]*">
3484           *<-Wimplicit-fallthrough=5 doesn't recognize any comments as>
3485               fallthrough comments, only attributes disable the warning.
3486
3487           The comment needs to be followed after optional whitespace and
3488           other comments by "case" or "default" keywords or by a user label
3489           that precedes some "case" or "default" label.
3490
3491                   switch (cond)
3492                     {
3493                     case 1:
3494                       bar (0);
3495                       /* FALLTHRU */
3496                     default:
3497                       ...
3498                     }
3499
3500           The -Wimplicit-fallthrough=3 warning is enabled by -Wextra.
3501
3502       -Wif-not-aligned (C, C++, Objective-C and Objective-C++ only)
3503           Control if warning triggered by the "warn_if_not_aligned" attribute
3504           should be issued.  This is enabled by default.  Use
3505           -Wno-if-not-aligned to disable it.
3506
3507       -Wignored-qualifiers (C and C++ only)
3508           Warn if the return type of a function has a type qualifier such as
3509           "const".  For ISO C such a type qualifier has no effect, since the
3510           value returned by a function is not an lvalue.  For C++, the
3511           warning is only emitted for scalar types or "void".  ISO C
3512           prohibits qualified "void" return types on function definitions, so
3513           such return types always receive a warning even without this
3514           option.
3515
3516           This warning is also enabled by -Wextra.
3517
3518       -Wignored-attributes (C and C++ only)
3519           Warn when an attribute is ignored.  This is different from the
3520           -Wattributes option in that it warns whenever the compiler decides
3521           to drop an attribute, not that the attribute is either unknown,
3522           used in a wrong place, etc.  This warning is enabled by default.
3523
3524       -Wmain
3525           Warn if the type of "main" is suspicious.  "main" should be a
3526           function with external linkage, returning int, taking either zero
3527           arguments, two, or three arguments of appropriate types.  This
3528           warning is enabled by default in C++ and is enabled by either -Wall
3529           or -Wpedantic.
3530
3531       -Wmisleading-indentation (C and C++ only)
3532           Warn when the indentation of the code does not reflect the block
3533           structure.  Specifically, a warning is issued for "if", "else",
3534           "while", and "for" clauses with a guarded statement that does not
3535           use braces, followed by an unguarded statement with the same
3536           indentation.
3537
3538           In the following example, the call to "bar" is misleadingly
3539           indented as if it were guarded by the "if" conditional.
3540
3541                     if (some_condition ())
3542                       foo ();
3543                       bar ();  /* Gotcha: this is not guarded by the "if".  */
3544
3545           In the case of mixed tabs and spaces, the warning uses the
3546           -ftabstop= option to determine if the statements line up
3547           (defaulting to 8).
3548
3549           The warning is not issued for code involving multiline preprocessor
3550           logic such as the following example.
3551
3552                     if (flagA)
3553                       foo (0);
3554                   #if SOME_CONDITION_THAT_DOES_NOT_HOLD
3555                     if (flagB)
3556                   #endif
3557                       foo (1);
3558
3559           The warning is not issued after a "#line" directive, since this
3560           typically indicates autogenerated code, and no assumptions can be
3561           made about the layout of the file that the directive references.
3562
3563           This warning is enabled by -Wall in C and C++.
3564
3565       -Wmissing-attributes
3566           Warn when a declaration of a function is missing one or more
3567           attributes that a related function is declared with and whose
3568           absence may adversely affect the correctness or efficiency of
3569           generated code.  For example, in C++, the warning is issued when an
3570           explicit specialization of a primary template declared with
3571           attribute "alloc_align", "alloc_size", "assume_aligned", "format",
3572           "format_arg", "malloc", or "nonnull" is declared without it.
3573           Attributes "deprecated", "error", and "warning" suppress the
3574           warning..
3575
3576           -Wmissing-attributes is enabled by -Wall.
3577
3578           For example, since the declaration of the primary function template
3579           below makes use of both attribute "malloc" and "alloc_size" the
3580           declaration of the explicit specialization of the template is
3581           diagnosed because it is missing one of the attributes.
3582
3583                   template <class T>
3584                   T* __attribute__ ((malloc, alloc_size (1)))
3585                   allocate (size_t);
3586
3587                   template <>
3588                   void* __attribute__ ((malloc))   // missing alloc_size
3589                   allocate<void> (size_t);
3590
3591       -Wmissing-braces
3592           Warn if an aggregate or union initializer is not fully bracketed.
3593           In the following example, the initializer for "a" is not fully
3594           bracketed, but that for "b" is fully bracketed.  This warning is
3595           enabled by -Wall in C.
3596
3597                   int a[2][2] = { 0, 1, 2, 3 };
3598                   int b[2][2] = { { 0, 1 }, { 2, 3 } };
3599
3600           This warning is enabled by -Wall.
3601
3602       -Wmissing-include-dirs (C, C++, Objective-C and Objective-C++ only)
3603           Warn if a user-supplied include directory does not exist.
3604
3605       -Wmultistatement-macros
3606           Warn about unsafe multiple statement macros that appear to be
3607           guarded by a clause such as "if", "else", "for", "switch", or
3608           "while", in which only the first statement is actually guarded
3609           after the macro is expanded.
3610
3611           For example:
3612
3613                   #define DOIT x++; y++
3614                   if (c)
3615                     DOIT;
3616
3617           will increment "y" unconditionally, not just when "c" holds.  The
3618           can usually be fixed by wrapping the macro in a do-while loop:
3619
3620                   #define DOIT do { x++; y++; } while (0)
3621                   if (c)
3622                     DOIT;
3623
3624           This warning is enabled by -Wall in C and C++.
3625
3626       -Wparentheses
3627           Warn if parentheses are omitted in certain contexts, such as when
3628           there is an assignment in a context where a truth value is
3629           expected, or when operators are nested whose precedence people
3630           often get confused about.
3631
3632           Also warn if a comparison like "x<=y<=z" appears; this is
3633           equivalent to "(x<=y ? 1 : 0) <= z", which is a different
3634           interpretation from that of ordinary mathematical notation.
3635
3636           Also warn for dangerous uses of the GNU extension to "?:" with
3637           omitted middle operand. When the condition in the "?": operator is
3638           a boolean expression, the omitted value is always 1.  Often
3639           programmers expect it to be a value computed inside the conditional
3640           expression instead.
3641
3642           For C++ this also warns for some cases of unnecessary parentheses
3643           in declarations, which can indicate an attempt at a function call
3644           instead of a declaration:
3645
3646                   {
3647                     // Declares a local variable called mymutex.
3648                     std::unique_lock<std::mutex> (mymutex);
3649                     // User meant std::unique_lock<std::mutex> lock (mymutex);
3650                   }
3651
3652           This warning is enabled by -Wall.
3653
3654       -Wsequence-point
3655           Warn about code that may have undefined semantics because of
3656           violations of sequence point rules in the C and C++ standards.
3657
3658           The C and C++ standards define the order in which expressions in a
3659           C/C++ program are evaluated in terms of sequence points, which
3660           represent a partial ordering between the execution of parts of the
3661           program: those executed before the sequence point, and those
3662           executed after it.  These occur after the evaluation of a full
3663           expression (one which is not part of a larger expression), after
3664           the evaluation of the first operand of a "&&", "||", "? :" or ","
3665           (comma) operator, before a function is called (but after the
3666           evaluation of its arguments and the expression denoting the called
3667           function), and in certain other places.  Other than as expressed by
3668           the sequence point rules, the order of evaluation of subexpressions
3669           of an expression is not specified.  All these rules describe only a
3670           partial order rather than a total order, since, for example, if two
3671           functions are called within one expression with no sequence point
3672           between them, the order in which the functions are called is not
3673           specified.  However, the standards committee have ruled that
3674           function calls do not overlap.
3675
3676           It is not specified when between sequence points modifications to
3677           the values of objects take effect.  Programs whose behavior depends
3678           on this have undefined behavior; the C and C++ standards specify
3679           that "Between the previous and next sequence point an object shall
3680           have its stored value modified at most once by the evaluation of an
3681           expression.  Furthermore, the prior value shall be read only to
3682           determine the value to be stored.".  If a program breaks these
3683           rules, the results on any particular implementation are entirely
3684           unpredictable.
3685
3686           Examples of code with undefined behavior are "a = a++;", "a[n] =
3687           b[n++]" and "a[i++] = i;".  Some more complicated cases are not
3688           diagnosed by this option, and it may give an occasional false
3689           positive result, but in general it has been found fairly effective
3690           at detecting this sort of problem in programs.
3691
3692           The C++17 standard will define the order of evaluation of operands
3693           in more cases: in particular it requires that the right-hand side
3694           of an assignment be evaluated before the left-hand side, so the
3695           above examples are no longer undefined.  But this warning will
3696           still warn about them, to help people avoid writing code that is
3697           undefined in C and earlier revisions of C++.
3698
3699           The standard is worded confusingly, therefore there is some debate
3700           over the precise meaning of the sequence point rules in subtle
3701           cases.  Links to discussions of the problem, including proposed
3702           formal definitions, may be found on the GCC readings page, at
3703           <http://gcc.gnu.org/readings.html>.
3704
3705           This warning is enabled by -Wall for C and C++.
3706
3707       -Wno-return-local-addr
3708           Do not warn about returning a pointer (or in C++, a reference) to a
3709           variable that goes out of scope after the function returns.
3710
3711       -Wreturn-type
3712           Warn whenever a function is defined with a return type that
3713           defaults to "int".  Also warn about any "return" statement with no
3714           return value in a function whose return type is not "void" (falling
3715           off the end of the function body is considered returning without a
3716           value).
3717
3718           For C only, warn about a "return" statement with an expression in a
3719           function whose return type is "void", unless the expression type is
3720           also "void".  As a GNU extension, the latter case is accepted
3721           without a warning unless -Wpedantic is used.
3722
3723           For C++, a function without return type always produces a
3724           diagnostic message, even when -Wno-return-type is specified.  The
3725           only exceptions are "main" and functions defined in system headers.
3726
3727           This warning is enabled by default for C++ and is enabled by -Wall.
3728
3729       -Wshift-count-negative
3730           Warn if shift count is negative. This warning is enabled by
3731           default.
3732
3733       -Wshift-count-overflow
3734           Warn if shift count >= width of type. This warning is enabled by
3735           default.
3736
3737       -Wshift-negative-value
3738           Warn if left shifting a negative value.  This warning is enabled by
3739           -Wextra in C99 and C++11 modes (and newer).
3740
3741       -Wshift-overflow
3742       -Wshift-overflow=n
3743           Warn about left shift overflows.  This warning is enabled by
3744           default in C99 and C++11 modes (and newer).
3745
3746           -Wshift-overflow=1
3747               This is the warning level of -Wshift-overflow and is enabled by
3748               default in C99 and C++11 modes (and newer).  This warning level
3749               does not warn about left-shifting 1 into the sign bit.
3750               (However, in C, such an overflow is still rejected in contexts
3751               where an integer constant expression is required.)
3752
3753           -Wshift-overflow=2
3754               This warning level also warns about left-shifting 1 into the
3755               sign bit, unless C++14 mode is active.
3756
3757       -Wswitch
3758           Warn whenever a "switch" statement has an index of enumerated type
3759           and lacks a "case" for one or more of the named codes of that
3760           enumeration.  (The presence of a "default" label prevents this
3761           warning.)  "case" labels outside the enumeration range also provoke
3762           warnings when this option is used (even if there is a "default"
3763           label).  This warning is enabled by -Wall.
3764
3765       -Wswitch-default
3766           Warn whenever a "switch" statement does not have a "default" case.
3767
3768       -Wswitch-enum
3769           Warn whenever a "switch" statement has an index of enumerated type
3770           and lacks a "case" for one or more of the named codes of that
3771           enumeration.  "case" labels outside the enumeration range also
3772           provoke warnings when this option is used.  The only difference
3773           between -Wswitch and this option is that this option gives a
3774           warning about an omitted enumeration code even if there is a
3775           "default" label.
3776
3777       -Wswitch-bool
3778           Warn whenever a "switch" statement has an index of boolean type and
3779           the case values are outside the range of a boolean type.  It is
3780           possible to suppress this warning by casting the controlling
3781           expression to a type other than "bool".  For example:
3782
3783                   switch ((int) (a == 4))
3784                     {
3785                     ...
3786                     }
3787
3788           This warning is enabled by default for C and C++ programs.
3789
3790       -Wswitch-unreachable
3791           Warn whenever a "switch" statement contains statements between the
3792           controlling expression and the first case label, which will never
3793           be executed.  For example:
3794
3795                   switch (cond)
3796                     {
3797                      i = 15;
3798                     ...
3799                      case 5:
3800                     ...
3801                     }
3802
3803           -Wswitch-unreachable does not warn if the statement between the
3804           controlling expression and the first case label is just a
3805           declaration:
3806
3807                   switch (cond)
3808                     {
3809                      int i;
3810                     ...
3811                      case 5:
3812                      i = 5;
3813                     ...
3814                     }
3815
3816           This warning is enabled by default for C and C++ programs.
3817
3818       -Wsync-nand (C and C++ only)
3819           Warn when "__sync_fetch_and_nand" and "__sync_nand_and_fetch"
3820           built-in functions are used.  These functions changed semantics in
3821           GCC 4.4.
3822
3823       -Wunused-but-set-parameter
3824           Warn whenever a function parameter is assigned to, but otherwise
3825           unused (aside from its declaration).
3826
3827           To suppress this warning use the "unused" attribute.
3828
3829           This warning is also enabled by -Wunused together with -Wextra.
3830
3831       -Wunused-but-set-variable
3832           Warn whenever a local variable is assigned to, but otherwise unused
3833           (aside from its declaration).  This warning is enabled by -Wall.
3834
3835           To suppress this warning use the "unused" attribute.
3836
3837           This warning is also enabled by -Wunused, which is enabled by
3838           -Wall.
3839
3840       -Wunused-function
3841           Warn whenever a static function is declared but not defined or a
3842           non-inline static function is unused.  This warning is enabled by
3843           -Wall.
3844
3845       -Wunused-label
3846           Warn whenever a label is declared but not used.  This warning is
3847           enabled by -Wall.
3848
3849           To suppress this warning use the "unused" attribute.
3850
3851       -Wunused-local-typedefs (C, Objective-C, C++ and Objective-C++ only)
3852           Warn when a typedef locally defined in a function is not used.
3853           This warning is enabled by -Wall.
3854
3855       -Wunused-parameter
3856           Warn whenever a function parameter is unused aside from its
3857           declaration.
3858
3859           To suppress this warning use the "unused" attribute.
3860
3861       -Wno-unused-result
3862           Do not warn if a caller of a function marked with attribute
3863           "warn_unused_result" does not use its return value. The default is
3864           -Wunused-result.
3865
3866       -Wunused-variable
3867           Warn whenever a local or static variable is unused aside from its
3868           declaration. This option implies -Wunused-const-variable=1 for C,
3869           but not for C++. This warning is enabled by -Wall.
3870
3871           To suppress this warning use the "unused" attribute.
3872
3873       -Wunused-const-variable
3874       -Wunused-const-variable=n
3875           Warn whenever a constant static variable is unused aside from its
3876           declaration.  -Wunused-const-variable=1 is enabled by
3877           -Wunused-variable for C, but not for C++. In C this declares
3878           variable storage, but in C++ this is not an error since const
3879           variables take the place of "#define"s.
3880
3881           To suppress this warning use the "unused" attribute.
3882
3883           -Wunused-const-variable=1
3884               This is the warning level that is enabled by -Wunused-variable
3885               for C.  It warns only about unused static const variables
3886               defined in the main compilation unit, but not about static
3887               const variables declared in any header included.
3888
3889           -Wunused-const-variable=2
3890               This warning level also warns for unused constant static
3891               variables in headers (excluding system headers).  This is the
3892               warning level of -Wunused-const-variable and must be explicitly
3893               requested since in C++ this isn't an error and in C it might be
3894               harder to clean up all headers included.
3895
3896       -Wunused-value
3897           Warn whenever a statement computes a result that is explicitly not
3898           used. To suppress this warning cast the unused expression to
3899           "void". This includes an expression-statement or the left-hand side
3900           of a comma expression that contains no side effects. For example,
3901           an expression such as "x[i,j]" causes a warning, while
3902           "x[(void)i,j]" does not.
3903
3904           This warning is enabled by -Wall.
3905
3906       -Wunused
3907           All the above -Wunused options combined.
3908
3909           In order to get a warning about an unused function parameter, you
3910           must either specify -Wextra -Wunused (note that -Wall implies
3911           -Wunused), or separately specify -Wunused-parameter.
3912
3913       -Wuninitialized
3914           Warn if an automatic variable is used without first being
3915           initialized or if a variable may be clobbered by a "setjmp" call.
3916           In C++, warn if a non-static reference or non-static "const" member
3917           appears in a class without constructors.
3918
3919           If you want to warn about code that uses the uninitialized value of
3920           the variable in its own initializer, use the -Winit-self option.
3921
3922           These warnings occur for individual uninitialized or clobbered
3923           elements of structure, union or array variables as well as for
3924           variables that are uninitialized or clobbered as a whole.  They do
3925           not occur for variables or elements declared "volatile".  Because
3926           these warnings depend on optimization, the exact variables or
3927           elements for which there are warnings depends on the precise
3928           optimization options and version of GCC used.
3929
3930           Note that there may be no warning about a variable that is used
3931           only to compute a value that itself is never used, because such
3932           computations may be deleted by data flow analysis before the
3933           warnings are printed.
3934
3935       -Winvalid-memory-model
3936           Warn for invocations of __atomic Builtins, __sync Builtins, and the
3937           C11 atomic generic functions with a memory consistency argument
3938           that is either invalid for the operation or outside the range of
3939           values of the "memory_order" enumeration.  For example, since the
3940           "__atomic_store" and "__atomic_store_n" built-ins are only defined
3941           for the relaxed, release, and sequentially consistent memory orders
3942           the following code is diagnosed:
3943
3944                   void store (int *i)
3945                   {
3946                     __atomic_store_n (i, 0, memory_order_consume);
3947                   }
3948
3949           -Winvalid-memory-model is enabled by default.
3950
3951       -Wmaybe-uninitialized
3952           For an automatic (i.e. local) variable, if there exists a path from
3953           the function entry to a use of the variable that is initialized,
3954           but there exist some other paths for which the variable is not
3955           initialized, the compiler emits a warning if it cannot prove the
3956           uninitialized paths are not executed at run time.
3957
3958           These warnings are only possible in optimizing compilation, because
3959           otherwise GCC does not keep track of the state of variables.
3960
3961           These warnings are made optional because GCC may not be able to
3962           determine when the code is correct in spite of appearing to have an
3963           error.  Here is one example of how this can happen:
3964
3965                   {
3966                     int x;
3967                     switch (y)
3968                       {
3969                       case 1: x = 1;
3970                         break;
3971                       case 2: x = 4;
3972                         break;
3973                       case 3: x = 5;
3974                       }
3975                     foo (x);
3976                   }
3977
3978           If the value of "y" is always 1, 2 or 3, then "x" is always
3979           initialized, but GCC doesn't know this. To suppress the warning,
3980           you need to provide a default case with assert(0) or similar code.
3981
3982           This option also warns when a non-volatile automatic variable might
3983           be changed by a call to "longjmp".  The compiler sees only the
3984           calls to "setjmp".  It cannot know where "longjmp" will be called;
3985           in fact, a signal handler could call it at any point in the code.
3986           As a result, you may get a warning even when there is in fact no
3987           problem because "longjmp" cannot in fact be called at the place
3988           that would cause a problem.
3989
3990           Some spurious warnings can be avoided if you declare all the
3991           functions you use that never return as "noreturn".
3992
3993           This warning is enabled by -Wall or -Wextra.
3994
3995       -Wunknown-pragmas
3996           Warn when a "#pragma" directive is encountered that is not
3997           understood by GCC.  If this command-line option is used, warnings
3998           are even issued for unknown pragmas in system header files.  This
3999           is not the case if the warnings are only enabled by the -Wall
4000           command-line option.
4001
4002       -Wno-pragmas
4003           Do not warn about misuses of pragmas, such as incorrect parameters,
4004           invalid syntax, or conflicts between pragmas.  See also
4005           -Wunknown-pragmas.
4006
4007       -Wstrict-aliasing
4008           This option is only active when -fstrict-aliasing is active.  It
4009           warns about code that might break the strict aliasing rules that
4010           the compiler is using for optimization.  The warning does not catch
4011           all cases, but does attempt to catch the more common pitfalls.  It
4012           is included in -Wall.  It is equivalent to -Wstrict-aliasing=3
4013
4014       -Wstrict-aliasing=n
4015           This option is only active when -fstrict-aliasing is active.  It
4016           warns about code that might break the strict aliasing rules that
4017           the compiler is using for optimization.  Higher levels correspond
4018           to higher accuracy (fewer false positives).  Higher levels also
4019           correspond to more effort, similar to the way -O works.
4020           -Wstrict-aliasing is equivalent to -Wstrict-aliasing=3.
4021
4022           Level 1: Most aggressive, quick, least accurate.  Possibly useful
4023           when higher levels do not warn but -fstrict-aliasing still breaks
4024           the code, as it has very few false negatives.  However, it has many
4025           false positives.  Warns for all pointer conversions between
4026           possibly incompatible types, even if never dereferenced.  Runs in
4027           the front end only.
4028
4029           Level 2: Aggressive, quick, not too precise.  May still have many
4030           false positives (not as many as level 1 though), and few false
4031           negatives (but possibly more than level 1).  Unlike level 1, it
4032           only warns when an address is taken.  Warns about incomplete types.
4033           Runs in the front end only.
4034
4035           Level 3 (default for -Wstrict-aliasing): Should have very few false
4036           positives and few false negatives.  Slightly slower than levels 1
4037           or 2 when optimization is enabled.  Takes care of the common
4038           pun+dereference pattern in the front end: "*(int*)&some_float".  If
4039           optimization is enabled, it also runs in the back end, where it
4040           deals with multiple statement cases using flow-sensitive points-to
4041           information.  Only warns when the converted pointer is
4042           dereferenced.  Does not warn about incomplete types.
4043
4044       -Wstrict-overflow
4045       -Wstrict-overflow=n
4046           This option is only active when signed overflow is undefined.  It
4047           warns about cases where the compiler optimizes based on the
4048           assumption that signed overflow does not occur.  Note that it does
4049           not warn about all cases where the code might overflow: it only
4050           warns about cases where the compiler implements some optimization.
4051           Thus this warning depends on the optimization level.
4052
4053           An optimization that assumes that signed overflow does not occur is
4054           perfectly safe if the values of the variables involved are such
4055           that overflow never does, in fact, occur.  Therefore this warning
4056           can easily give a false positive: a warning about code that is not
4057           actually a problem.  To help focus on important issues, several
4058           warning levels are defined.  No warnings are issued for the use of
4059           undefined signed overflow when estimating how many iterations a
4060           loop requires, in particular when determining whether a loop will
4061           be executed at all.
4062
4063           -Wstrict-overflow=1
4064               Warn about cases that are both questionable and easy to avoid.
4065               For example the compiler simplifies "x + 1 > x" to 1.  This
4066               level of -Wstrict-overflow is enabled by -Wall; higher levels
4067               are not, and must be explicitly requested.
4068
4069           -Wstrict-overflow=2
4070               Also warn about other cases where a comparison is simplified to
4071               a constant.  For example: "abs (x) >= 0".  This can only be
4072               simplified when signed integer overflow is undefined, because
4073               "abs (INT_MIN)" overflows to "INT_MIN", which is less than
4074               zero.  -Wstrict-overflow (with no level) is the same as
4075               -Wstrict-overflow=2.
4076
4077           -Wstrict-overflow=3
4078               Also warn about other cases where a comparison is simplified.
4079               For example: "x + 1 > 1" is simplified to "x > 0".
4080
4081           -Wstrict-overflow=4
4082               Also warn about other simplifications not covered by the above
4083               cases.  For example: "(x * 10) / 5" is simplified to "x * 2".
4084
4085           -Wstrict-overflow=5
4086               Also warn about cases where the compiler reduces the magnitude
4087               of a constant involved in a comparison.  For example: "x + 2 >
4088               y" is simplified to "x + 1 >= y".  This is reported only at the
4089               highest warning level because this simplification applies to
4090               many comparisons, so this warning level gives a very large
4091               number of false positives.
4092
4093       -Wstringop-overflow
4094       -Wstringop-overflow=type
4095           Warn for calls to string manipulation functions such as "memcpy"
4096           and "strcpy" that are determined to overflow the destination
4097           buffer.  The optional argument is one greater than the type of
4098           Object Size Checking to perform to determine the size of the
4099           destination.  The argument is meaningful only for functions that
4100           operate on character arrays but not for raw memory functions like
4101           "memcpy" which always make use of Object Size type-0.  The option
4102           also warns for calls that specify a size in excess of the largest
4103           possible object or at most "SIZE_MAX / 2" bytes.  The option
4104           produces the best results with optimization enabled but can detect
4105           a small subset of simple buffer overflows even without optimization
4106           in calls to the GCC built-in functions like "__builtin_memcpy" that
4107           correspond to the standard functions.  In any case, the option
4108           warns about just a subset of buffer overflows detected by the
4109           corresponding overflow checking built-ins.  For example, the option
4110           will issue a warning for the "strcpy" call below because it copies
4111           at least 5 characters (the string "blue" including the terminating
4112           NUL) into the buffer of size 4.
4113
4114                   enum Color { blue, purple, yellow };
4115                   const char* f (enum Color clr)
4116                   {
4117                     static char buf [4];
4118                     const char *str;
4119                     switch (clr)
4120                       {
4121                         case blue: str = "blue"; break;
4122                         case purple: str = "purple"; break;
4123                         case yellow: str = "yellow"; break;
4124                       }
4125
4126                     return strcpy (buf, str);   // warning here
4127                   }
4128
4129           Option -Wstringop-overflow=2 is enabled by default.
4130
4131           -Wstringop-overflow
4132           -Wstringop-overflow=1
4133               The -Wstringop-overflow=1 option uses type-zero Object Size
4134               Checking to determine the sizes of destination objects.  This
4135               is the default setting of the option.  At this setting the
4136               option will not warn for writes past the end of subobjects of
4137               larger objects accessed by pointers unless the size of the
4138               largest surrounding object is known.  When the destination may
4139               be one of several objects it is assumed to be the largest one
4140               of them.  On Linux systems, when optimization is enabled at
4141               this setting the option warns for the same code as when the
4142               "_FORTIFY_SOURCE" macro is defined to a non-zero value.
4143
4144           -Wstringop-overflow=2
4145               The -Wstringop-overflow=2 option uses type-one Object Size
4146               Checking to determine the sizes of destination objects.  At
4147               this setting the option will warn about overflows when writing
4148               to members of the largest complete objects whose exact size is
4149               known.  It will, however, not warn for excessive writes to the
4150               same members of unknown objects referenced by pointers since
4151               they may point to arrays containing unknown numbers of
4152               elements.
4153
4154           -Wstringop-overflow=3
4155               The -Wstringop-overflow=3 option uses type-two Object Size
4156               Checking to determine the sizes of destination objects.  At
4157               this setting the option warns about overflowing the smallest
4158               object or data member.  This is the most restrictive setting of
4159               the option that may result in warnings for safe code.
4160
4161           -Wstringop-overflow=4
4162               The -Wstringop-overflow=4 option uses type-three Object Size
4163               Checking to determine the sizes of destination objects.  At
4164               this setting the option will warn about overflowing any data
4165               members, and when the destination is one of several objects it
4166               uses the size of the largest of them to decide whether to issue
4167               a warning.  Similarly to -Wstringop-overflow=3 this setting of
4168               the option may result in warnings for benign code.
4169
4170       -Wstringop-truncation
4171           Warn for calls to bounded string manipulation functions such as
4172           "strncat", "strncpy", and "stpncpy" that may either truncate the
4173           copied string or leave the destination unchanged.
4174
4175           In the following example, the call to "strncat" specifies a bound
4176           that is less than the length of the source string.  As a result,
4177           the copy of the source will be truncated and so the call is
4178           diagnosed.  To avoid the warning use "bufsize - strlen (buf) - 1)"
4179           as the bound.
4180
4181                   void append (char *buf, size_t bufsize)
4182                   {
4183                     strncat (buf, ".txt", 3);
4184                   }
4185
4186           As another example, the following call to "strncpy" results in
4187           copying to "d" just the characters preceding the terminating NUL,
4188           without appending the NUL to the end.  Assuming the result of
4189           "strncpy" is necessarily a NUL-terminated string is a common
4190           mistake, and so the call is diagnosed.  To avoid the warning when
4191           the result is not expected to be NUL-terminated, call "memcpy"
4192           instead.
4193
4194                   void copy (char *d, const char *s)
4195                   {
4196                     strncpy (d, s, strlen (s));
4197                   }
4198
4199           In the following example, the call to "strncpy" specifies the size
4200           of the destination buffer as the bound.  If the length of the
4201           source string is equal to or greater than this size the result of
4202           the copy will not be NUL-terminated.  Therefore, the call is also
4203           diagnosed.  To avoid the warning, specify "sizeof buf - 1" as the
4204           bound and set the last element of the buffer to "NUL".
4205
4206                   void copy (const char *s)
4207                   {
4208                     char buf[80];
4209                     strncpy (buf, s, sizeof buf);
4210                     ...
4211                   }
4212
4213           In situations where a character array is intended to store a
4214           sequence of bytes with no terminating "NUL" such an array may be
4215           annotated with attribute "nonstring" to avoid this warning.  Such
4216           arrays, however, are not suitable arguments to functions that
4217           expect "NUL"-terminated strings.  To help detect accidental misuses
4218           of such arrays GCC issues warnings unless it can prove that the use
4219           is safe.
4220
4221           Option -Wstringop-truncation is enabled by -Wall.
4222
4223       -Wsuggest-attribute=[pure|const|noreturn|format|cold|malloc]
4224           Warn for cases where adding an attribute may be beneficial. The
4225           attributes currently supported are listed below.
4226
4227           -Wsuggest-attribute=pure
4228           -Wsuggest-attribute=const
4229           -Wsuggest-attribute=noreturn
4230           -Wsuggest-attribute=malloc
4231               Warn about functions that might be candidates for attributes
4232               "pure", "const" or "noreturn" or "malloc". The compiler only
4233               warns for functions visible in other compilation units or (in
4234               the case of "pure" and "const") if it cannot prove that the
4235               function returns normally. A function returns normally if it
4236               doesn't contain an infinite loop or return abnormally by
4237               throwing, calling "abort" or trapping.  This analysis requires
4238               option -fipa-pure-const, which is enabled by default at -O and
4239               higher.  Higher optimization levels improve the accuracy of the
4240               analysis.
4241
4242           -Wsuggest-attribute=format
4243           -Wmissing-format-attribute
4244               Warn about function pointers that might be candidates for
4245               "format" attributes.  Note these are only possible candidates,
4246               not absolute ones.  GCC guesses that function pointers with
4247               "format" attributes that are used in assignment,
4248               initialization, parameter passing or return statements should
4249               have a corresponding "format" attribute in the resulting type.
4250               I.e. the left-hand side of the assignment or initialization,
4251               the type of the parameter variable, or the return type of the
4252               containing function respectively should also have a "format"
4253               attribute to avoid the warning.
4254
4255               GCC also warns about function definitions that might be
4256               candidates for "format" attributes.  Again, these are only
4257               possible candidates.  GCC guesses that "format" attributes
4258               might be appropriate for any function that calls a function
4259               like "vprintf" or "vscanf", but this might not always be the
4260               case, and some functions for which "format" attributes are
4261               appropriate may not be detected.
4262
4263           -Wsuggest-attribute=cold
4264               Warn about functions that might be candidates for "cold"
4265               attribute.  This is based on static detection and generally
4266               will only warn about functions which always leads to a call to
4267               another "cold" function such as wrappers of C++ "throw" or
4268               fatal error reporting functions leading to "abort".
4269
4270       -Wsuggest-final-types
4271           Warn about types with virtual methods where code quality would be
4272           improved if the type were declared with the C++11 "final"
4273           specifier, or, if possible, declared in an anonymous namespace.
4274           This allows GCC to more aggressively devirtualize the polymorphic
4275           calls. This warning is more effective with link time optimization,
4276           where the information about the class hierarchy graph is more
4277           complete.
4278
4279       -Wsuggest-final-methods
4280           Warn about virtual methods where code quality would be improved if
4281           the method were declared with the C++11 "final" specifier, or, if
4282           possible, its type were declared in an anonymous namespace or with
4283           the "final" specifier.  This warning is more effective with link-
4284           time optimization, where the information about the class hierarchy
4285           graph is more complete. It is recommended to first consider
4286           suggestions of -Wsuggest-final-types and then rebuild with new
4287           annotations.
4288
4289       -Wsuggest-override
4290           Warn about overriding virtual functions that are not marked with
4291           the override keyword.
4292
4293       -Walloc-zero
4294           Warn about calls to allocation functions decorated with attribute
4295           "alloc_size" that specify zero bytes, including those to the built-
4296           in forms of the functions "aligned_alloc", "alloca", "calloc",
4297           "malloc", and "realloc".  Because the behavior of these functions
4298           when called with a zero size differs among implementations (and in
4299           the case of "realloc" has been deprecated) relying on it may result
4300           in subtle portability bugs and should be avoided.
4301
4302       -Walloc-size-larger-than=n
4303           Warn about calls to functions decorated with attribute "alloc_size"
4304           that attempt to allocate objects larger than the specified number
4305           of bytes, or where the result of the size computation in an integer
4306           type with infinite precision would exceed "SIZE_MAX / 2".  The
4307           option argument n may end in one of the standard suffixes
4308           designating a multiple of bytes such as "kB" and "KiB" for kilobyte
4309           and kibibyte, respectively, "MB" and "MiB" for megabyte and
4310           mebibyte, and so on.  -Walloc-size-larger-than=PTRDIFF_MAX is
4311           enabled by default.  Warnings controlled by the option can be
4312           disabled by specifying n of SIZE_MAX or more.
4313
4314       -Walloca
4315           This option warns on all uses of "alloca" in the source.
4316
4317       -Walloca-larger-than=n
4318           This option warns on calls to "alloca" that are not bounded by a
4319           controlling predicate limiting its argument of integer type to at
4320           most n bytes, or calls to "alloca" where the bound is unknown.
4321           Arguments of non-integer types are considered unbounded even if
4322           they appear to be constrained to the expected range.
4323
4324           For example, a bounded case of "alloca" could be:
4325
4326                   void func (size_t n)
4327                   {
4328                     void *p;
4329                     if (n <= 1000)
4330                       p = alloca (n);
4331                     else
4332                       p = malloc (n);
4333                     f (p);
4334                   }
4335
4336           In the above example, passing "-Walloca-larger-than=1000" would not
4337           issue a warning because the call to "alloca" is known to be at most
4338           1000 bytes.  However, if "-Walloca-larger-than=500" were passed,
4339           the compiler would emit a warning.
4340
4341           Unbounded uses, on the other hand, are uses of "alloca" with no
4342           controlling predicate constraining its integer argument.  For
4343           example:
4344
4345                   void func ()
4346                   {
4347                     void *p = alloca (n);
4348                     f (p);
4349                   }
4350
4351           If "-Walloca-larger-than=500" were passed, the above would trigger
4352           a warning, but this time because of the lack of bounds checking.
4353
4354           Note, that even seemingly correct code involving signed integers
4355           could cause a warning:
4356
4357                   void func (signed int n)
4358                   {
4359                     if (n < 500)
4360                       {
4361                         p = alloca (n);
4362                         f (p);
4363                       }
4364                   }
4365
4366           In the above example, n could be negative, causing a larger than
4367           expected argument to be implicitly cast into the "alloca" call.
4368
4369           This option also warns when "alloca" is used in a loop.
4370
4371           This warning is not enabled by -Wall, and is only active when
4372           -ftree-vrp is active (default for -O2 and above).
4373
4374           See also -Wvla-larger-than=n.
4375
4376       -Warray-bounds
4377       -Warray-bounds=n
4378           This option is only active when -ftree-vrp is active (default for
4379           -O2 and above). It warns about subscripts to arrays that are always
4380           out of bounds. This warning is enabled by -Wall.
4381
4382           -Warray-bounds=1
4383               This is the warning level of -Warray-bounds and is enabled by
4384               -Wall; higher levels are not, and must be explicitly requested.
4385
4386           -Warray-bounds=2
4387               This warning level also warns about out of bounds access for
4388               arrays at the end of a struct and for arrays accessed through
4389               pointers. This warning level may give a larger number of false
4390               positives and is deactivated by default.
4391
4392       -Wattribute-alias
4393           Warn about declarations using the "alias" and similar attributes
4394           whose target is incompatible with the type of the alias.
4395
4396       -Wbool-compare
4397           Warn about boolean expression compared with an integer value
4398           different from "true"/"false".  For instance, the following
4399           comparison is always false:
4400
4401                   int n = 5;
4402                   ...
4403                   if ((n > 1) == 2) { ... }
4404
4405           This warning is enabled by -Wall.
4406
4407       -Wbool-operation
4408           Warn about suspicious operations on expressions of a boolean type.
4409           For instance, bitwise negation of a boolean is very likely a bug in
4410           the program.  For C, this warning also warns about incrementing or
4411           decrementing a boolean, which rarely makes sense.  (In C++,
4412           decrementing a boolean is always invalid.  Incrementing a boolean
4413           is invalid in C++17, and deprecated otherwise.)
4414
4415           This warning is enabled by -Wall.
4416
4417       -Wduplicated-branches
4418           Warn when an if-else has identical branches.  This warning detects
4419           cases like
4420
4421                   if (p != NULL)
4422                     return 0;
4423                   else
4424                     return 0;
4425
4426           It doesn't warn when both branches contain just a null statement.
4427           This warning also warn for conditional operators:
4428
4429                     int i = x ? *p : *p;
4430
4431       -Wduplicated-cond
4432           Warn about duplicated conditions in an if-else-if chain.  For
4433           instance, warn for the following code:
4434
4435                   if (p->q != NULL) { ... }
4436                   else if (p->q != NULL) { ... }
4437
4438       -Wframe-address
4439           Warn when the __builtin_frame_address or __builtin_return_address
4440           is called with an argument greater than 0.  Such calls may return
4441           indeterminate values or crash the program.  The warning is included
4442           in -Wall.
4443
4444       -Wno-discarded-qualifiers (C and Objective-C only)
4445           Do not warn if type qualifiers on pointers are being discarded.
4446           Typically, the compiler warns if a "const char *" variable is
4447           passed to a function that takes a "char *" parameter.  This option
4448           can be used to suppress such a warning.
4449
4450       -Wno-discarded-array-qualifiers (C and Objective-C only)
4451           Do not warn if type qualifiers on arrays which are pointer targets
4452           are being discarded. Typically, the compiler warns if a "const int
4453           (*)[]" variable is passed to a function that takes a "int (*)[]"
4454           parameter.  This option can be used to suppress such a warning.
4455
4456       -Wno-incompatible-pointer-types (C and Objective-C only)
4457           Do not warn when there is a conversion between pointers that have
4458           incompatible types.  This warning is for cases not covered by
4459           -Wno-pointer-sign, which warns for pointer argument passing or
4460           assignment with different signedness.
4461
4462       -Wno-int-conversion (C and Objective-C only)
4463           Do not warn about incompatible integer to pointer and pointer to
4464           integer conversions.  This warning is about implicit conversions;
4465           for explicit conversions the warnings -Wno-int-to-pointer-cast and
4466           -Wno-pointer-to-int-cast may be used.
4467
4468       -Wno-div-by-zero
4469           Do not warn about compile-time integer division by zero.  Floating-
4470           point division by zero is not warned about, as it can be a
4471           legitimate way of obtaining infinities and NaNs.
4472
4473       -Wsystem-headers
4474           Print warning messages for constructs found in system header files.
4475           Warnings from system headers are normally suppressed, on the
4476           assumption that they usually do not indicate real problems and
4477           would only make the compiler output harder to read.  Using this
4478           command-line option tells GCC to emit warnings from system headers
4479           as if they occurred in user code.  However, note that using -Wall
4480           in conjunction with this option does not warn about unknown pragmas
4481           in system headers---for that, -Wunknown-pragmas must also be used.
4482
4483       -Wtautological-compare
4484           Warn if a self-comparison always evaluates to true or false.  This
4485           warning detects various mistakes such as:
4486
4487                   int i = 1;
4488                   ...
4489                   if (i > i) { ... }
4490
4491           This warning also warns about bitwise comparisons that always
4492           evaluate to true or false, for instance:
4493
4494                   if ((a & 16) == 10) { ... }
4495
4496           will always be false.
4497
4498           This warning is enabled by -Wall.
4499
4500       -Wtrampolines
4501           Warn about trampolines generated for pointers to nested functions.
4502           A trampoline is a small piece of data or code that is created at
4503           run time on the stack when the address of a nested function is
4504           taken, and is used to call the nested function indirectly.  For
4505           some targets, it is made up of data only and thus requires no
4506           special treatment.  But, for most targets, it is made up of code
4507           and thus requires the stack to be made executable in order for the
4508           program to work properly.
4509
4510       -Wfloat-equal
4511           Warn if floating-point values are used in equality comparisons.
4512
4513           The idea behind this is that sometimes it is convenient (for the
4514           programmer) to consider floating-point values as approximations to
4515           infinitely precise real numbers.  If you are doing this, then you
4516           need to compute (by analyzing the code, or in some other way) the
4517           maximum or likely maximum error that the computation introduces,
4518           and allow for it when performing comparisons (and when producing
4519           output, but that's a different problem).  In particular, instead of
4520           testing for equality, you should check to see whether the two
4521           values have ranges that overlap; and this is done with the
4522           relational operators, so equality comparisons are probably
4523           mistaken.
4524
4525       -Wtraditional (C and Objective-C only)
4526           Warn about certain constructs that behave differently in
4527           traditional and ISO C.  Also warn about ISO C constructs that have
4528           no traditional C equivalent, and/or problematic constructs that
4529           should be avoided.
4530
4531           *   Macro parameters that appear within string literals in the
4532               macro body.  In traditional C macro replacement takes place
4533               within string literals, but in ISO C it does not.
4534
4535           *   In traditional C, some preprocessor directives did not exist.
4536               Traditional preprocessors only considered a line to be a
4537               directive if the # appeared in column 1 on the line.  Therefore
4538               -Wtraditional warns about directives that traditional C
4539               understands but ignores because the # does not appear as the
4540               first character on the line.  It also suggests you hide
4541               directives like "#pragma" not understood by traditional C by
4542               indenting them.  Some traditional implementations do not
4543               recognize "#elif", so this option suggests avoiding it
4544               altogether.
4545
4546           *   A function-like macro that appears without arguments.
4547
4548           *   The unary plus operator.
4549
4550           *   The U integer constant suffix, or the F or L floating-point
4551               constant suffixes.  (Traditional C does support the L suffix on
4552               integer constants.)  Note, these suffixes appear in macros
4553               defined in the system headers of most modern systems, e.g. the
4554               _MIN/_MAX macros in "<limits.h>".  Use of these macros in user
4555               code might normally lead to spurious warnings, however GCC's
4556               integrated preprocessor has enough context to avoid warning in
4557               these cases.
4558
4559           *   A function declared external in one block and then used after
4560               the end of the block.
4561
4562           *   A "switch" statement has an operand of type "long".
4563
4564           *   A non-"static" function declaration follows a "static" one.
4565               This construct is not accepted by some traditional C compilers.
4566
4567           *   The ISO type of an integer constant has a different width or
4568               signedness from its traditional type.  This warning is only
4569               issued if the base of the constant is ten.  I.e. hexadecimal or
4570               octal values, which typically represent bit patterns, are not
4571               warned about.
4572
4573           *   Usage of ISO string concatenation is detected.
4574
4575           *   Initialization of automatic aggregates.
4576
4577           *   Identifier conflicts with labels.  Traditional C lacks a
4578               separate namespace for labels.
4579
4580           *   Initialization of unions.  If the initializer is zero, the
4581               warning is omitted.  This is done under the assumption that the
4582               zero initializer in user code appears conditioned on e.g.
4583               "__STDC__" to avoid missing initializer warnings and relies on
4584               default initialization to zero in the traditional C case.
4585
4586           *   Conversions by prototypes between fixed/floating-point values
4587               and vice versa.  The absence of these prototypes when compiling
4588               with traditional C causes serious problems.  This is a subset
4589               of the possible conversion warnings; for the full set use
4590               -Wtraditional-conversion.
4591
4592           *   Use of ISO C style function definitions.  This warning
4593               intentionally is not issued for prototype declarations or
4594               variadic functions because these ISO C features appear in your
4595               code when using libiberty's traditional C compatibility macros,
4596               "PARAMS" and "VPARAMS".  This warning is also bypassed for
4597               nested functions because that feature is already a GCC
4598               extension and thus not relevant to traditional C compatibility.
4599
4600       -Wtraditional-conversion (C and Objective-C only)
4601           Warn if a prototype causes a type conversion that is different from
4602           what would happen to the same argument in the absence of a
4603           prototype.  This includes conversions of fixed point to floating
4604           and vice versa, and conversions changing the width or signedness of
4605           a fixed-point argument except when the same as the default
4606           promotion.
4607
4608       -Wdeclaration-after-statement (C and Objective-C only)
4609           Warn when a declaration is found after a statement in a block.
4610           This construct, known from C++, was introduced with ISO C99 and is
4611           by default allowed in GCC.  It is not supported by ISO C90.
4612
4613       -Wshadow
4614           Warn whenever a local variable or type declaration shadows another
4615           variable, parameter, type, class member (in C++), or instance
4616           variable (in Objective-C) or whenever a built-in function is
4617           shadowed. Note that in C++, the compiler warns if a local variable
4618           shadows an explicit typedef, but not if it shadows a
4619           struct/class/enum.  Same as -Wshadow=global.
4620
4621       -Wno-shadow-ivar (Objective-C only)
4622           Do not warn whenever a local variable shadows an instance variable
4623           in an Objective-C method.
4624
4625       -Wshadow=global
4626           The default for -Wshadow. Warns for any (global) shadowing.
4627
4628       -Wshadow=local
4629           Warn when a local variable shadows another local variable or
4630           parameter.  This warning is enabled by -Wshadow=global.
4631
4632       -Wshadow=compatible-local
4633           Warn when a local variable shadows another local variable or
4634           parameter whose type is compatible with that of the shadowing
4635           variable. In C++, type compatibility here means the type of the
4636           shadowing variable can be converted to that of the shadowed
4637           variable. The creation of this flag (in addition to -Wshadow=local)
4638           is based on the idea that when a local variable shadows another one
4639           of incompatible type, it is most likely intentional, not a bug or
4640           typo, as shown in the following example:
4641
4642                   for (SomeIterator i = SomeObj.begin(); i != SomeObj.end(); ++i)
4643                   {
4644                     for (int i = 0; i < N; ++i)
4645                     {
4646                       ...
4647                     }
4648                     ...
4649                   }
4650
4651           Since the two variable "i" in the example above have incompatible
4652           types, enabling only -Wshadow=compatible-local will not emit a
4653           warning.  Because their types are incompatible, if a programmer
4654           accidentally uses one in place of the other, type checking will
4655           catch that and emit an error or warning. So not warning (about
4656           shadowing) in this case will not lead to undetected bugs. Use of
4657           this flag instead of -Wshadow=local can possibly reduce the number
4658           of warnings triggered by intentional shadowing.
4659
4660           This warning is enabled by -Wshadow=local.
4661
4662       -Wlarger-than=len
4663           Warn whenever an object of larger than len bytes is defined.
4664
4665       -Wframe-larger-than=len
4666           Warn if the size of a function frame is larger than len bytes.  The
4667           computation done to determine the stack frame size is approximate
4668           and not conservative.  The actual requirements may be somewhat
4669           greater than len even if you do not get a warning.  In addition,
4670           any space allocated via "alloca", variable-length arrays, or
4671           related constructs is not included by the compiler when determining
4672           whether or not to issue a warning.
4673
4674       -Wno-free-nonheap-object
4675           Do not warn when attempting to free an object that was not
4676           allocated on the heap.
4677
4678       -Wstack-usage=len
4679           Warn if the stack usage of a function might be larger than len
4680           bytes.  The computation done to determine the stack usage is
4681           conservative.  Any space allocated via "alloca", variable-length
4682           arrays, or related constructs is included by the compiler when
4683           determining whether or not to issue a warning.
4684
4685           The message is in keeping with the output of -fstack-usage.
4686
4687           *   If the stack usage is fully static but exceeds the specified
4688               amount, it's:
4689
4690                         warning: stack usage is 1120 bytes
4691
4692           *   If the stack usage is (partly) dynamic but bounded, it's:
4693
4694                         warning: stack usage might be 1648 bytes
4695
4696           *   If the stack usage is (partly) dynamic and not bounded, it's:
4697
4698                         warning: stack usage might be unbounded
4699
4700       -Wno-pedantic-ms-format (MinGW targets only)
4701           When used in combination with -Wformat and -pedantic without GNU
4702           extensions, this option disables the warnings about non-ISO
4703           "printf" / "scanf" format width specifiers "I32", "I64", and "I"
4704           used on Windows targets, which depend on the MS runtime.
4705
4706       -Waligned-new
4707           Warn about a new-expression of a type that requires greater
4708           alignment than the "alignof(std::max_align_t)" but uses an
4709           allocation function without an explicit alignment parameter. This
4710           option is enabled by -Wall.
4711
4712           Normally this only warns about global allocation functions, but
4713           -Waligned-new=all also warns about class member allocation
4714           functions.
4715
4716       -Wplacement-new
4717       -Wplacement-new=n
4718           Warn about placement new expressions with undefined behavior, such
4719           as constructing an object in a buffer that is smaller than the type
4720           of the object.  For example, the placement new expression below is
4721           diagnosed because it attempts to construct an array of 64 integers
4722           in a buffer only 64 bytes large.
4723
4724                   char buf [64];
4725                   new (buf) int[64];
4726
4727           This warning is enabled by default.
4728
4729           -Wplacement-new=1
4730               This is the default warning level of -Wplacement-new.  At this
4731               level the warning is not issued for some strictly undefined
4732               constructs that GCC allows as extensions for compatibility with
4733               legacy code.  For example, the following "new" expression is
4734               not diagnosed at this level even though it has undefined
4735               behavior according to the C++ standard because it writes past
4736               the end of the one-element array.
4737
4738                       struct S { int n, a[1]; };
4739                       S *s = (S *)malloc (sizeof *s + 31 * sizeof s->a[0]);
4740                       new (s->a)int [32]();
4741
4742           -Wplacement-new=2
4743               At this level, in addition to diagnosing all the same
4744               constructs as at level 1, a diagnostic is also issued for
4745               placement new expressions that construct an object in the last
4746               member of structure whose type is an array of a single element
4747               and whose size is less than the size of the object being
4748               constructed.  While the previous example would be diagnosed,
4749               the following construct makes use of the flexible member array
4750               extension to avoid the warning at level 2.
4751
4752                       struct S { int n, a[]; };
4753                       S *s = (S *)malloc (sizeof *s + 32 * sizeof s->a[0]);
4754                       new (s->a)int [32]();
4755
4756       -Wpointer-arith
4757           Warn about anything that depends on the "size of" a function type
4758           or of "void".  GNU C assigns these types a size of 1, for
4759           convenience in calculations with "void *" pointers and pointers to
4760           functions.  In C++, warn also when an arithmetic operation involves
4761           "NULL".  This warning is also enabled by -Wpedantic.
4762
4763       -Wpointer-compare
4764           Warn if a pointer is compared with a zero character constant.  This
4765           usually means that the pointer was meant to be dereferenced.  For
4766           example:
4767
4768                   const char *p = foo ();
4769                   if (p == '\0')
4770                     return 42;
4771
4772           Note that the code above is invalid in C++11.
4773
4774           This warning is enabled by default.
4775
4776       -Wtype-limits
4777           Warn if a comparison is always true or always false due to the
4778           limited range of the data type, but do not warn for constant
4779           expressions.  For example, warn if an unsigned variable is compared
4780           against zero with "<" or ">=".  This warning is also enabled by
4781           -Wextra.
4782
4783       -Wcomment
4784       -Wcomments
4785           Warn whenever a comment-start sequence /* appears in a /* comment,
4786           or whenever a backslash-newline appears in a // comment.  This
4787           warning is enabled by -Wall.
4788
4789       -Wtrigraphs
4790           Warn if any trigraphs are encountered that might change the meaning
4791           of the program.  Trigraphs within comments are not warned about,
4792           except those that would form escaped newlines.
4793
4794           This option is implied by -Wall.  If -Wall is not given, this
4795           option is still enabled unless trigraphs are enabled.  To get
4796           trigraph conversion without warnings, but get the other -Wall
4797           warnings, use -trigraphs -Wall -Wno-trigraphs.
4798
4799       -Wundef
4800           Warn if an undefined identifier is evaluated in an "#if" directive.
4801           Such identifiers are replaced with zero.
4802
4803       -Wexpansion-to-defined
4804           Warn whenever defined is encountered in the expansion of a macro
4805           (including the case where the macro is expanded by an #if
4806           directive).  Such usage is not portable.  This warning is also
4807           enabled by -Wpedantic and -Wextra.
4808
4809       -Wunused-macros
4810           Warn about macros defined in the main file that are unused.  A
4811           macro is used if it is expanded or tested for existence at least
4812           once.  The preprocessor also warns if the macro has not been used
4813           at the time it is redefined or undefined.
4814
4815           Built-in macros, macros defined on the command line, and macros
4816           defined in include files are not warned about.
4817
4818           Note: If a macro is actually used, but only used in skipped
4819           conditional blocks, then the preprocessor reports it as unused.  To
4820           avoid the warning in such a case, you might improve the scope of
4821           the macro's definition by, for example, moving it into the first
4822           skipped block.  Alternatively, you could provide a dummy use with
4823           something like:
4824
4825                   #if defined the_macro_causing_the_warning
4826                   #endif
4827
4828       -Wno-endif-labels
4829           Do not warn whenever an "#else" or an "#endif" are followed by
4830           text.  This sometimes happens in older programs with code of the
4831           form
4832
4833                   #if FOO
4834                   ...
4835                   #else FOO
4836                   ...
4837                   #endif FOO
4838
4839           The second and third "FOO" should be in comments.  This warning is
4840           on by default.
4841
4842       -Wbad-function-cast (C and Objective-C only)
4843           Warn when a function call is cast to a non-matching type.  For
4844           example, warn if a call to a function returning an integer type is
4845           cast to a pointer type.
4846
4847       -Wc90-c99-compat (C and Objective-C only)
4848           Warn about features not present in ISO C90, but present in ISO C99.
4849           For instance, warn about use of variable length arrays, "long long"
4850           type, "bool" type, compound literals, designated initializers, and
4851           so on.  This option is independent of the standards mode.  Warnings
4852           are disabled in the expression that follows "__extension__".
4853
4854       -Wc99-c11-compat (C and Objective-C only)
4855           Warn about features not present in ISO C99, but present in ISO C11.
4856           For instance, warn about use of anonymous structures and unions,
4857           "_Atomic" type qualifier, "_Thread_local" storage-class specifier,
4858           "_Alignas" specifier, "Alignof" operator, "_Generic" keyword, and
4859           so on.  This option is independent of the standards mode.  Warnings
4860           are disabled in the expression that follows "__extension__".
4861
4862       -Wc++-compat (C and Objective-C only)
4863           Warn about ISO C constructs that are outside of the common subset
4864           of ISO C and ISO C++, e.g. request for implicit conversion from
4865           "void *" to a pointer to non-"void" type.
4866
4867       -Wc++11-compat (C++ and Objective-C++ only)
4868           Warn about C++ constructs whose meaning differs between ISO C++
4869           1998 and ISO C++ 2011, e.g., identifiers in ISO C++ 1998 that are
4870           keywords in ISO C++ 2011.  This warning turns on -Wnarrowing and is
4871           enabled by -Wall.
4872
4873       -Wc++14-compat (C++ and Objective-C++ only)
4874           Warn about C++ constructs whose meaning differs between ISO C++
4875           2011 and ISO C++ 2014.  This warning is enabled by -Wall.
4876
4877       -Wc++17-compat (C++ and Objective-C++ only)
4878           Warn about C++ constructs whose meaning differs between ISO C++
4879           2014 and ISO C++ 2017.  This warning is enabled by -Wall.
4880
4881       -Wcast-qual
4882           Warn whenever a pointer is cast so as to remove a type qualifier
4883           from the target type.  For example, warn if a "const char *" is
4884           cast to an ordinary "char *".
4885
4886           Also warn when making a cast that introduces a type qualifier in an
4887           unsafe way.  For example, casting "char **" to "const char **" is
4888           unsafe, as in this example:
4889
4890                     /* p is char ** value.  */
4891                     const char **q = (const char **) p;
4892                     /* Assignment of readonly string to const char * is OK.  */
4893                     *q = "string";
4894                     /* Now char** pointer points to read-only memory.  */
4895                     **p = 'b';
4896
4897       -Wcast-align
4898           Warn whenever a pointer is cast such that the required alignment of
4899           the target is increased.  For example, warn if a "char *" is cast
4900           to an "int *" on machines where integers can only be accessed at
4901           two- or four-byte boundaries.
4902
4903       -Wcast-align=strict
4904           Warn whenever a pointer is cast such that the required alignment of
4905           the target is increased.  For example, warn if a "char *" is cast
4906           to an "int *" regardless of the target machine.
4907
4908       -Wcast-function-type
4909           Warn when a function pointer is cast to an incompatible function
4910           pointer.  In a cast involving function types with a variable
4911           argument list only the types of initial arguments that are provided
4912           are considered.  Any parameter of pointer-type matches any other
4913           pointer-type.  Any benign differences in integral types are
4914           ignored, like "int" vs. "long" on ILP32 targets.  Likewise type
4915           qualifiers are ignored.  The function type "void (*) (void)" is
4916           special and matches everything, which can be used to suppress this
4917           warning.  In a cast involving pointer to member types this warning
4918           warns whenever the type cast is changing the pointer to member
4919           type.  This warning is enabled by -Wextra.
4920
4921       -Wwrite-strings
4922           When compiling C, give string constants the type "const
4923           char[length]" so that copying the address of one into a non-"const"
4924           "char *" pointer produces a warning.  These warnings help you find
4925           at compile time code that can try to write into a string constant,
4926           but only if you have been very careful about using "const" in
4927           declarations and prototypes.  Otherwise, it is just a nuisance.
4928           This is why we did not make -Wall request these warnings.
4929
4930           When compiling C++, warn about the deprecated conversion from
4931           string literals to "char *".  This warning is enabled by default
4932           for C++ programs.
4933
4934       -Wcatch-value
4935       -Wcatch-value=n (C++ and Objective-C++ only)
4936           Warn about catch handlers that do not catch via reference.  With
4937           -Wcatch-value=1 (or -Wcatch-value for short) warn about polymorphic
4938           class types that are caught by value.  With -Wcatch-value=2 warn
4939           about all class types that are caught by value. With
4940           -Wcatch-value=3 warn about all types that are not caught by
4941           reference. -Wcatch-value is enabled by -Wall.
4942
4943       -Wclobbered
4944           Warn for variables that might be changed by "longjmp" or "vfork".
4945           This warning is also enabled by -Wextra.
4946
4947       -Wconditionally-supported (C++ and Objective-C++ only)
4948           Warn for conditionally-supported (C++11 [intro.defs]) constructs.
4949
4950       -Wconversion
4951           Warn for implicit conversions that may alter a value. This includes
4952           conversions between real and integer, like "abs (x)" when "x" is
4953           "double"; conversions between signed and unsigned, like "unsigned
4954           ui = -1"; and conversions to smaller types, like "sqrtf (M_PI)". Do
4955           not warn for explicit casts like "abs ((int) x)" and "ui =
4956           (unsigned) -1", or if the value is not changed by the conversion
4957           like in "abs (2.0)".  Warnings about conversions between signed and
4958           unsigned integers can be disabled by using -Wno-sign-conversion.
4959
4960           For C++, also warn for confusing overload resolution for user-
4961           defined conversions; and conversions that never use a type
4962           conversion operator: conversions to "void", the same type, a base
4963           class or a reference to them. Warnings about conversions between
4964           signed and unsigned integers are disabled by default in C++ unless
4965           -Wsign-conversion is explicitly enabled.
4966
4967       -Wno-conversion-null (C++ and Objective-C++ only)
4968           Do not warn for conversions between "NULL" and non-pointer types.
4969           -Wconversion-null is enabled by default.
4970
4971       -Wzero-as-null-pointer-constant (C++ and Objective-C++ only)
4972           Warn when a literal 0 is used as null pointer constant.  This can
4973           be useful to facilitate the conversion to "nullptr" in C++11.
4974
4975       -Wsubobject-linkage (C++ and Objective-C++ only)
4976           Warn if a class type has a base or a field whose type uses the
4977           anonymous namespace or depends on a type with no linkage.  If a
4978           type A depends on a type B with no or internal linkage, defining it
4979           in multiple translation units would be an ODR violation because the
4980           meaning of B is different in each translation unit.  If A only
4981           appears in a single translation unit, the best way to silence the
4982           warning is to give it internal linkage by putting it in an
4983           anonymous namespace as well.  The compiler doesn't give this
4984           warning for types defined in the main .C file, as those are
4985           unlikely to have multiple definitions.  -Wsubobject-linkage is
4986           enabled by default.
4987
4988       -Wdangling-else
4989           Warn about constructions where there may be confusion to which "if"
4990           statement an "else" branch belongs.  Here is an example of such a
4991           case:
4992
4993                   {
4994                     if (a)
4995                       if (b)
4996                         foo ();
4997                     else
4998                       bar ();
4999                   }
5000
5001           In C/C++, every "else" branch belongs to the innermost possible
5002           "if" statement, which in this example is "if (b)".  This is often
5003           not what the programmer expected, as illustrated in the above
5004           example by indentation the programmer chose.  When there is the
5005           potential for this confusion, GCC issues a warning when this flag
5006           is specified.  To eliminate the warning, add explicit braces around
5007           the innermost "if" statement so there is no way the "else" can
5008           belong to the enclosing "if".  The resulting code looks like this:
5009
5010                   {
5011                     if (a)
5012                       {
5013                         if (b)
5014                           foo ();
5015                         else
5016                           bar ();
5017                       }
5018                   }
5019
5020           This warning is enabled by -Wparentheses.
5021
5022       -Wdate-time
5023           Warn when macros "__TIME__", "__DATE__" or "__TIMESTAMP__" are
5024           encountered as they might prevent bit-wise-identical reproducible
5025           compilations.
5026
5027       -Wdelete-incomplete (C++ and Objective-C++ only)
5028           Warn when deleting a pointer to incomplete type, which may cause
5029           undefined behavior at runtime.  This warning is enabled by default.
5030
5031       -Wuseless-cast (C++ and Objective-C++ only)
5032           Warn when an expression is casted to its own type.
5033
5034       -Wempty-body
5035           Warn if an empty body occurs in an "if", "else" or "do while"
5036           statement.  This warning is also enabled by -Wextra.
5037
5038       -Wenum-compare
5039           Warn about a comparison between values of different enumerated
5040           types.  In C++ enumerated type mismatches in conditional
5041           expressions are also diagnosed and the warning is enabled by
5042           default.  In C this warning is enabled by -Wall.
5043
5044       -Wextra-semi (C++, Objective-C++ only)
5045           Warn about redundant semicolon after in-class function definition.
5046
5047       -Wjump-misses-init (C, Objective-C only)
5048           Warn if a "goto" statement or a "switch" statement jumps forward
5049           across the initialization of a variable, or jumps backward to a
5050           label after the variable has been initialized.  This only warns
5051           about variables that are initialized when they are declared.  This
5052           warning is only supported for C and Objective-C; in C++ this sort
5053           of branch is an error in any case.
5054
5055           -Wjump-misses-init is included in -Wc++-compat.  It can be disabled
5056           with the -Wno-jump-misses-init option.
5057
5058       -Wsign-compare
5059           Warn when a comparison between signed and unsigned values could
5060           produce an incorrect result when the signed value is converted to
5061           unsigned.  In C++, this warning is also enabled by -Wall.  In C, it
5062           is also enabled by -Wextra.
5063
5064       -Wsign-conversion
5065           Warn for implicit conversions that may change the sign of an
5066           integer value, like assigning a signed integer expression to an
5067           unsigned integer variable. An explicit cast silences the warning.
5068           In C, this option is enabled also by -Wconversion.
5069
5070       -Wfloat-conversion
5071           Warn for implicit conversions that reduce the precision of a real
5072           value.  This includes conversions from real to integer, and from
5073           higher precision real to lower precision real values.  This option
5074           is also enabled by -Wconversion.
5075
5076       -Wno-scalar-storage-order
5077           Do not warn on suspicious constructs involving reverse scalar
5078           storage order.
5079
5080       -Wsized-deallocation (C++ and Objective-C++ only)
5081           Warn about a definition of an unsized deallocation function
5082
5083                   void operator delete (void *) noexcept;
5084                   void operator delete[] (void *) noexcept;
5085
5086           without a definition of the corresponding sized deallocation
5087           function
5088
5089                   void operator delete (void *, std::size_t) noexcept;
5090                   void operator delete[] (void *, std::size_t) noexcept;
5091
5092           or vice versa.  Enabled by -Wextra along with -fsized-deallocation.
5093
5094       -Wsizeof-pointer-div
5095           Warn for suspicious divisions of two sizeof expressions that divide
5096           the pointer size by the element size, which is the usual way to
5097           compute the array size but won't work out correctly with pointers.
5098           This warning warns e.g. about "sizeof (ptr) / sizeof (ptr[0])" if
5099           "ptr" is not an array, but a pointer.  This warning is enabled by
5100           -Wall.
5101
5102       -Wsizeof-pointer-memaccess
5103           Warn for suspicious length parameters to certain string and memory
5104           built-in functions if the argument uses "sizeof".  This warning
5105           triggers for example for "memset (ptr, 0, sizeof (ptr));" if "ptr"
5106           is not an array, but a pointer, and suggests a possible fix, or
5107           about "memcpy (&foo, ptr, sizeof (&foo));".
5108           -Wsizeof-pointer-memaccess also warns about calls to bounded string
5109           copy functions like "strncat" or "strncpy" that specify as the
5110           bound a "sizeof" expression of the source array.  For example, in
5111           the following function the call to "strncat" specifies the size of
5112           the source string as the bound.  That is almost certainly a mistake
5113           and so the call is diagnosed.
5114
5115                   void make_file (const char *name)
5116                   {
5117                     char path[PATH_MAX];
5118                     strncpy (path, name, sizeof path - 1);
5119                     strncat (path, ".text", sizeof ".text");
5120                     ...
5121                   }
5122
5123           The -Wsizeof-pointer-memaccess option is enabled by -Wall.
5124
5125       -Wsizeof-array-argument
5126           Warn when the "sizeof" operator is applied to a parameter that is
5127           declared as an array in a function definition.  This warning is
5128           enabled by default for C and C++ programs.
5129
5130       -Wmemset-elt-size
5131           Warn for suspicious calls to the "memset" built-in function, if the
5132           first argument references an array, and the third argument is a
5133           number equal to the number of elements, but not equal to the size
5134           of the array in memory.  This indicates that the user has omitted a
5135           multiplication by the element size.  This warning is enabled by
5136           -Wall.
5137
5138       -Wmemset-transposed-args
5139           Warn for suspicious calls to the "memset" built-in function, if the
5140           second argument is not zero and the third argument is zero.  This
5141           warns e.g.@ about "memset (buf, sizeof buf, 0)" where most probably
5142           "memset (buf, 0, sizeof buf)" was meant instead.  The diagnostics
5143           is only emitted if the third argument is literal zero.  If it is
5144           some expression that is folded to zero, a cast of zero to some
5145           type, etc., it is far less likely that the user has mistakenly
5146           exchanged the arguments and no warning is emitted.  This warning is
5147           enabled by -Wall.
5148
5149       -Waddress
5150           Warn about suspicious uses of memory addresses. These include using
5151           the address of a function in a conditional expression, such as
5152           "void func(void); if (func)", and comparisons against the memory
5153           address of a string literal, such as "if (x == "abc")".  Such uses
5154           typically indicate a programmer error: the address of a function
5155           always evaluates to true, so their use in a conditional usually
5156           indicate that the programmer forgot the parentheses in a function
5157           call; and comparisons against string literals result in unspecified
5158           behavior and are not portable in C, so they usually indicate that
5159           the programmer intended to use "strcmp".  This warning is enabled
5160           by -Wall.
5161
5162       -Wlogical-op
5163           Warn about suspicious uses of logical operators in expressions.
5164           This includes using logical operators in contexts where a bit-wise
5165           operator is likely to be expected.  Also warns when the operands of
5166           a logical operator are the same:
5167
5168                   extern int a;
5169                   if (a < 0 && a < 0) { ... }
5170
5171       -Wlogical-not-parentheses
5172           Warn about logical not used on the left hand side operand of a
5173           comparison.  This option does not warn if the right operand is
5174           considered to be a boolean expression.  Its purpose is to detect
5175           suspicious code like the following:
5176
5177                   int a;
5178                   ...
5179                   if (!a > 1) { ... }
5180
5181           It is possible to suppress the warning by wrapping the LHS into
5182           parentheses:
5183
5184                   if ((!a) > 1) { ... }
5185
5186           This warning is enabled by -Wall.
5187
5188       -Waggregate-return
5189           Warn if any functions that return structures or unions are defined
5190           or called.  (In languages where you can return an array, this also
5191           elicits a warning.)
5192
5193       -Wno-aggressive-loop-optimizations
5194           Warn if in a loop with constant number of iterations the compiler
5195           detects undefined behavior in some statement during one or more of
5196           the iterations.
5197
5198       -Wno-attributes
5199           Do not warn if an unexpected "__attribute__" is used, such as
5200           unrecognized attributes, function attributes applied to variables,
5201           etc.  This does not stop errors for incorrect use of supported
5202           attributes.
5203
5204       -Wno-builtin-declaration-mismatch
5205           Warn if a built-in function is declared with the wrong signature or
5206           as non-function.  This warning is enabled by default.
5207
5208       -Wno-builtin-macro-redefined
5209           Do not warn if certain built-in macros are redefined.  This
5210           suppresses warnings for redefinition of "__TIMESTAMP__",
5211           "__TIME__", "__DATE__", "__FILE__", and "__BASE_FILE__".
5212
5213       -Wstrict-prototypes (C and Objective-C only)
5214           Warn if a function is declared or defined without specifying the
5215           argument types.  (An old-style function definition is permitted
5216           without a warning if preceded by a declaration that specifies the
5217           argument types.)
5218
5219       -Wold-style-declaration (C and Objective-C only)
5220           Warn for obsolescent usages, according to the C Standard, in a
5221           declaration. For example, warn if storage-class specifiers like
5222           "static" are not the first things in a declaration.  This warning
5223           is also enabled by -Wextra.
5224
5225       -Wold-style-definition (C and Objective-C only)
5226           Warn if an old-style function definition is used.  A warning is
5227           given even if there is a previous prototype.
5228
5229       -Wmissing-parameter-type (C and Objective-C only)
5230           A function parameter is declared without a type specifier in
5231           K&R-style functions:
5232
5233                   void foo(bar) { }
5234
5235           This warning is also enabled by -Wextra.
5236
5237       -Wmissing-prototypes (C and Objective-C only)
5238           Warn if a global function is defined without a previous prototype
5239           declaration.  This warning is issued even if the definition itself
5240           provides a prototype.  Use this option to detect global functions
5241           that do not have a matching prototype declaration in a header file.
5242           This option is not valid for C++ because all function declarations
5243           provide prototypes and a non-matching declaration declares an
5244           overload rather than conflict with an earlier declaration.  Use
5245           -Wmissing-declarations to detect missing declarations in C++.
5246
5247       -Wmissing-declarations
5248           Warn if a global function is defined without a previous
5249           declaration.  Do so even if the definition itself provides a
5250           prototype.  Use this option to detect global functions that are not
5251           declared in header files.  In C, no warnings are issued for
5252           functions with previous non-prototype declarations; use
5253           -Wmissing-prototypes to detect missing prototypes.  In C++, no
5254           warnings are issued for function templates, or for inline
5255           functions, or for functions in anonymous namespaces.
5256
5257       -Wmissing-field-initializers
5258           Warn if a structure's initializer has some fields missing.  For
5259           example, the following code causes such a warning, because "x.h" is
5260           implicitly zero:
5261
5262                   struct s { int f, g, h; };
5263                   struct s x = { 3, 4 };
5264
5265           This option does not warn about designated initializers, so the
5266           following modification does not trigger a warning:
5267
5268                   struct s { int f, g, h; };
5269                   struct s x = { .f = 3, .g = 4 };
5270
5271           In C this option does not warn about the universal zero initializer
5272           { 0 }:
5273
5274                   struct s { int f, g, h; };
5275                   struct s x = { 0 };
5276
5277           Likewise, in C++ this option does not warn about the empty { }
5278           initializer, for example:
5279
5280                   struct s { int f, g, h; };
5281                   s x = { };
5282
5283           This warning is included in -Wextra.  To get other -Wextra warnings
5284           without this one, use -Wextra -Wno-missing-field-initializers.
5285
5286       -Wno-multichar
5287           Do not warn if a multicharacter constant ('FOOF') is used.  Usually
5288           they indicate a typo in the user's code, as they have
5289           implementation-defined values, and should not be used in portable
5290           code.
5291
5292       -Wnormalized=[none|id|nfc|nfkc]
5293           In ISO C and ISO C++, two identifiers are different if they are
5294           different sequences of characters.  However, sometimes when
5295           characters outside the basic ASCII character set are used, you can
5296           have two different character sequences that look the same.  To
5297           avoid confusion, the ISO 10646 standard sets out some normalization
5298           rules which when applied ensure that two sequences that look the
5299           same are turned into the same sequence.  GCC can warn you if you
5300           are using identifiers that have not been normalized; this option
5301           controls that warning.
5302
5303           There are four levels of warning supported by GCC.  The default is
5304           -Wnormalized=nfc, which warns about any identifier that is not in
5305           the ISO 10646 "C" normalized form, NFC.  NFC is the recommended
5306           form for most uses.  It is equivalent to -Wnormalized.
5307
5308           Unfortunately, there are some characters allowed in identifiers by
5309           ISO C and ISO C++ that, when turned into NFC, are not allowed in
5310           identifiers.  That is, there's no way to use these symbols in
5311           portable ISO C or C++ and have all your identifiers in NFC.
5312           -Wnormalized=id suppresses the warning for these characters.  It is
5313           hoped that future versions of the standards involved will correct
5314           this, which is why this option is not the default.
5315
5316           You can switch the warning off for all characters by writing
5317           -Wnormalized=none or -Wno-normalized.  You should only do this if
5318           you are using some other normalization scheme (like "D"), because
5319           otherwise you can easily create bugs that are literally impossible
5320           to see.
5321
5322           Some characters in ISO 10646 have distinct meanings but look
5323           identical in some fonts or display methodologies, especially once
5324           formatting has been applied.  For instance "\u207F", "SUPERSCRIPT
5325           LATIN SMALL LETTER N", displays just like a regular "n" that has
5326           been placed in a superscript.  ISO 10646 defines the NFKC
5327           normalization scheme to convert all these into a standard form as
5328           well, and GCC warns if your code is not in NFKC if you use
5329           -Wnormalized=nfkc.  This warning is comparable to warning about
5330           every identifier that contains the letter O because it might be
5331           confused with the digit 0, and so is not the default, but may be
5332           useful as a local coding convention if the programming environment
5333           cannot be fixed to display these characters distinctly.
5334
5335       -Wno-deprecated
5336           Do not warn about usage of deprecated features.
5337
5338       -Wno-deprecated-declarations
5339           Do not warn about uses of functions, variables, and types marked as
5340           deprecated by using the "deprecated" attribute.
5341
5342       -Wno-overflow
5343           Do not warn about compile-time overflow in constant expressions.
5344
5345       -Wno-odr
5346           Warn about One Definition Rule violations during link-time
5347           optimization.  Requires -flto-odr-type-merging to be enabled.
5348           Enabled by default.
5349
5350       -Wopenmp-simd
5351           Warn if the vectorizer cost model overrides the OpenMP simd
5352           directive set by user.  The -fsimd-cost-model=unlimited option can
5353           be used to relax the cost model.
5354
5355       -Woverride-init (C and Objective-C only)
5356           Warn if an initialized field without side effects is overridden
5357           when using designated initializers.
5358
5359           This warning is included in -Wextra.  To get other -Wextra warnings
5360           without this one, use -Wextra -Wno-override-init.
5361
5362       -Woverride-init-side-effects (C and Objective-C only)
5363           Warn if an initialized field with side effects is overridden when
5364           using designated initializers.  This warning is enabled by default.
5365
5366       -Wpacked
5367           Warn if a structure is given the packed attribute, but the packed
5368           attribute has no effect on the layout or size of the structure.
5369           Such structures may be mis-aligned for little benefit.  For
5370           instance, in this code, the variable "f.x" in "struct bar" is
5371           misaligned even though "struct bar" does not itself have the packed
5372           attribute:
5373
5374                   struct foo {
5375                     int x;
5376                     char a, b, c, d;
5377                   } __attribute__((packed));
5378                   struct bar {
5379                     char z;
5380                     struct foo f;
5381                   };
5382
5383       -Wpacked-bitfield-compat
5384           The 4.1, 4.2 and 4.3 series of GCC ignore the "packed" attribute on
5385           bit-fields of type "char".  This has been fixed in GCC 4.4 but the
5386           change can lead to differences in the structure layout.  GCC
5387           informs you when the offset of such a field has changed in GCC 4.4.
5388           For example there is no longer a 4-bit padding between field "a"
5389           and "b" in this structure:
5390
5391                   struct foo
5392                   {
5393                     char a:4;
5394                     char b:8;
5395                   } __attribute__ ((packed));
5396
5397           This warning is enabled by default.  Use
5398           -Wno-packed-bitfield-compat to disable this warning.
5399
5400       -Wpacked-not-aligned (C, C++, Objective-C and Objective-C++ only)
5401           Warn if a structure field with explicitly specified alignment in a
5402           packed struct or union is misaligned.  For example, a warning will
5403           be issued on "struct S", like, "warning: alignment 1 of 'struct S'
5404           is less than 8", in this code:
5405
5406                   struct __attribute__ ((aligned (8))) S8 { char a[8]; };
5407                   struct __attribute__ ((packed)) S {
5408                     struct S8 s8;
5409                   };
5410
5411           This warning is enabled by -Wall.
5412
5413       -Wpadded
5414           Warn if padding is included in a structure, either to align an
5415           element of the structure or to align the whole structure.
5416           Sometimes when this happens it is possible to rearrange the fields
5417           of the structure to reduce the padding and so make the structure
5418           smaller.
5419
5420       -Wredundant-decls
5421           Warn if anything is declared more than once in the same scope, even
5422           in cases where multiple declaration is valid and changes nothing.
5423
5424       -Wno-restrict
5425           Warn when an object referenced by a "restrict"-qualified parameter
5426           (or, in C++, a "__restrict"-qualified parameter) is aliased by
5427           another argument, or when copies between such objects overlap.  For
5428           example, the call to the "strcpy" function below attempts to
5429           truncate the string by replacing its initial characters with the
5430           last four.  However, because the call writes the terminating NUL
5431           into "a[4]", the copies overlap and the call is diagnosed.
5432
5433                   void foo (void)
5434                   {
5435                     char a[] = "abcd1234";
5436                     strcpy (a, a + 4);
5437                     ...
5438                   }
5439
5440           The -Wrestrict option detects some instances of simple overlap even
5441           without optimization but works best at -O2 and above.  It is
5442           included in -Wall.
5443
5444       -Wnested-externs (C and Objective-C only)
5445           Warn if an "extern" declaration is encountered within a function.
5446
5447       -Wno-inherited-variadic-ctor
5448           Suppress warnings about use of C++11 inheriting constructors when
5449           the base class inherited from has a C variadic constructor; the
5450           warning is on by default because the ellipsis is not inherited.
5451
5452       -Winline
5453           Warn if a function that is declared as inline cannot be inlined.
5454           Even with this option, the compiler does not warn about failures to
5455           inline functions declared in system headers.
5456
5457           The compiler uses a variety of heuristics to determine whether or
5458           not to inline a function.  For example, the compiler takes into
5459           account the size of the function being inlined and the amount of
5460           inlining that has already been done in the current function.
5461           Therefore, seemingly insignificant changes in the source program
5462           can cause the warnings produced by -Winline to appear or disappear.
5463
5464       -Wno-invalid-offsetof (C++ and Objective-C++ only)
5465           Suppress warnings from applying the "offsetof" macro to a non-POD
5466           type.  According to the 2014 ISO C++ standard, applying "offsetof"
5467           to a non-standard-layout type is undefined.  In existing C++
5468           implementations, however, "offsetof" typically gives meaningful
5469           results.  This flag is for users who are aware that they are
5470           writing nonportable code and who have deliberately chosen to ignore
5471           the warning about it.
5472
5473           The restrictions on "offsetof" may be relaxed in a future version
5474           of the C++ standard.
5475
5476       -Wint-in-bool-context
5477           Warn for suspicious use of integer values where boolean values are
5478           expected, such as conditional expressions (?:) using non-boolean
5479           integer constants in boolean context, like "if (a <= b ? 2 : 3)".
5480           Or left shifting of signed integers in boolean context, like "for
5481           (a = 0; 1 << a; a++);".  Likewise for all kinds of multiplications
5482           regardless of the data type.  This warning is enabled by -Wall.
5483
5484       -Wno-int-to-pointer-cast
5485           Suppress warnings from casts to pointer type of an integer of a
5486           different size. In C++, casting to a pointer type of smaller size
5487           is an error. Wint-to-pointer-cast is enabled by default.
5488
5489       -Wno-pointer-to-int-cast (C and Objective-C only)
5490           Suppress warnings from casts from a pointer to an integer type of a
5491           different size.
5492
5493       -Winvalid-pch
5494           Warn if a precompiled header is found in the search path but cannot
5495           be used.
5496
5497       -Wlong-long
5498           Warn if "long long" type is used.  This is enabled by either
5499           -Wpedantic or -Wtraditional in ISO C90 and C++98 modes.  To inhibit
5500           the warning messages, use -Wno-long-long.
5501
5502       -Wvariadic-macros
5503           Warn if variadic macros are used in ISO C90 mode, or if the GNU
5504           alternate syntax is used in ISO C99 mode.  This is enabled by
5505           either -Wpedantic or -Wtraditional.  To inhibit the warning
5506           messages, use -Wno-variadic-macros.
5507
5508       -Wvarargs
5509           Warn upon questionable usage of the macros used to handle variable
5510           arguments like "va_start".  This is default.  To inhibit the
5511           warning messages, use -Wno-varargs.
5512
5513       -Wvector-operation-performance
5514           Warn if vector operation is not implemented via SIMD capabilities
5515           of the architecture.  Mainly useful for the performance tuning.
5516           Vector operation can be implemented "piecewise", which means that
5517           the scalar operation is performed on every vector element; "in
5518           parallel", which means that the vector operation is implemented
5519           using scalars of wider type, which normally is more performance
5520           efficient; and "as a single scalar", which means that vector fits
5521           into a scalar type.
5522
5523       -Wno-virtual-move-assign
5524           Suppress warnings about inheriting from a virtual base with a non-
5525           trivial C++11 move assignment operator.  This is dangerous because
5526           if the virtual base is reachable along more than one path, it is
5527           moved multiple times, which can mean both objects end up in the
5528           moved-from state.  If the move assignment operator is written to
5529           avoid moving from a moved-from object, this warning can be
5530           disabled.
5531
5532       -Wvla
5533           Warn if a variable-length array is used in the code.  -Wno-vla
5534           prevents the -Wpedantic warning of the variable-length array.
5535
5536       -Wvla-larger-than=n
5537           If this option is used, the compiler will warn on uses of variable-
5538           length arrays where the size is either unbounded, or bounded by an
5539           argument that can be larger than n bytes.  This is similar to how
5540           -Walloca-larger-than=n works, but with variable-length arrays.
5541
5542           Note that GCC may optimize small variable-length arrays of a known
5543           value into plain arrays, so this warning may not get triggered for
5544           such arrays.
5545
5546           This warning is not enabled by -Wall, and is only active when
5547           -ftree-vrp is active (default for -O2 and above).
5548
5549           See also -Walloca-larger-than=n.
5550
5551       -Wvolatile-register-var
5552           Warn if a register variable is declared volatile.  The volatile
5553           modifier does not inhibit all optimizations that may eliminate
5554           reads and/or writes to register variables.  This warning is enabled
5555           by -Wall.
5556
5557       -Wdisabled-optimization
5558           Warn if a requested optimization pass is disabled.  This warning
5559           does not generally indicate that there is anything wrong with your
5560           code; it merely indicates that GCC's optimizers are unable to
5561           handle the code effectively.  Often, the problem is that your code
5562           is too big or too complex; GCC refuses to optimize programs when
5563           the optimization itself is likely to take inordinate amounts of
5564           time.
5565
5566       -Wpointer-sign (C and Objective-C only)
5567           Warn for pointer argument passing or assignment with different
5568           signedness.  This option is only supported for C and Objective-C.
5569           It is implied by -Wall and by -Wpedantic, which can be disabled
5570           with -Wno-pointer-sign.
5571
5572       -Wstack-protector
5573           This option is only active when -fstack-protector is active.  It
5574           warns about functions that are not protected against stack
5575           smashing.
5576
5577       -Woverlength-strings
5578           Warn about string constants that are longer than the "minimum
5579           maximum" length specified in the C standard.  Modern compilers
5580           generally allow string constants that are much longer than the
5581           standard's minimum limit, but very portable programs should avoid
5582           using longer strings.
5583
5584           The limit applies after string constant concatenation, and does not
5585           count the trailing NUL.  In C90, the limit was 509 characters; in
5586           C99, it was raised to 4095.  C++98 does not specify a normative
5587           minimum maximum, so we do not diagnose overlength strings in C++.
5588
5589           This option is implied by -Wpedantic, and can be disabled with
5590           -Wno-overlength-strings.
5591
5592       -Wunsuffixed-float-constants (C and Objective-C only)
5593           Issue a warning for any floating constant that does not have a
5594           suffix.  When used together with -Wsystem-headers it warns about
5595           such constants in system header files.  This can be useful when
5596           preparing code to use with the "FLOAT_CONST_DECIMAL64" pragma from
5597           the decimal floating-point extension to C99.
5598
5599       -Wno-designated-init (C and Objective-C only)
5600           Suppress warnings when a positional initializer is used to
5601           initialize a structure that has been marked with the
5602           "designated_init" attribute.
5603
5604       -Whsa
5605           Issue a warning when HSAIL cannot be emitted for the compiled
5606           function or OpenMP construct.
5607
5608   Options for Debugging Your Program
5609       To tell GCC to emit extra information for use by a debugger, in almost
5610       all cases you need only to add -g to your other options.
5611
5612       GCC allows you to use -g with -O.  The shortcuts taken by optimized
5613       code may occasionally be surprising: some variables you declared may
5614       not exist at all; flow of control may briefly move where you did not
5615       expect it; some statements may not be executed because they compute
5616       constant results or their values are already at hand; some statements
5617       may execute in different places because they have been moved out of
5618       loops.  Nevertheless it is possible to debug optimized output.  This
5619       makes it reasonable to use the optimizer for programs that might have
5620       bugs.
5621
5622       If you are not using some other optimization option, consider using -Og
5623       with -g.  With no -O option at all, some compiler passes that collect
5624       information useful for debugging do not run at all, so that -Og may
5625       result in a better debugging experience.
5626
5627       -g  Produce debugging information in the operating system's native
5628           format (stabs, COFF, XCOFF, or DWARF).  GDB can work with this
5629           debugging information.
5630
5631           On most systems that use stabs format, -g enables use of extra
5632           debugging information that only GDB can use; this extra information
5633           makes debugging work better in GDB but probably makes other
5634           debuggers crash or refuse to read the program.  If you want to
5635           control for certain whether to generate the extra information, use
5636           -gstabs+, -gstabs, -gxcoff+, -gxcoff, or -gvms (see below).
5637
5638       -ggdb
5639           Produce debugging information for use by GDB.  This means to use
5640           the most expressive format available (DWARF, stabs, or the native
5641           format if neither of those are supported), including GDB extensions
5642           if at all possible.
5643
5644       -gdwarf
5645       -gdwarf-version
5646           Produce debugging information in DWARF format (if that is
5647           supported).  The value of version may be either 2, 3, 4 or 5; the
5648           default version for most targets is 4.  DWARF Version 5 is only
5649           experimental.
5650
5651           Note that with DWARF Version 2, some ports require and always use
5652           some non-conflicting DWARF 3 extensions in the unwind tables.
5653
5654           Version 4 may require GDB 7.0 and -fvar-tracking-assignments for
5655           maximum benefit.
5656
5657           GCC no longer supports DWARF Version 1, which is substantially
5658           different than Version 2 and later.  For historical reasons, some
5659           other DWARF-related options such as -fno-dwarf2-cfi-asm) retain a
5660           reference to DWARF Version 2 in their names, but apply to all
5661           currently-supported versions of DWARF.
5662
5663       -gstabs
5664           Produce debugging information in stabs format (if that is
5665           supported), without GDB extensions.  This is the format used by DBX
5666           on most BSD systems.  On MIPS, Alpha and System V Release 4 systems
5667           this option produces stabs debugging output that is not understood
5668           by DBX.  On System V Release 4 systems this option requires the GNU
5669           assembler.
5670
5671       -gstabs+
5672           Produce debugging information in stabs format (if that is
5673           supported), using GNU extensions understood only by the GNU
5674           debugger (GDB).  The use of these extensions is likely to make
5675           other debuggers crash or refuse to read the program.
5676
5677       -gxcoff
5678           Produce debugging information in XCOFF format (if that is
5679           supported).  This is the format used by the DBX debugger on IBM
5680           RS/6000 systems.
5681
5682       -gxcoff+
5683           Produce debugging information in XCOFF format (if that is
5684           supported), using GNU extensions understood only by the GNU
5685           debugger (GDB).  The use of these extensions is likely to make
5686           other debuggers crash or refuse to read the program, and may cause
5687           assemblers other than the GNU assembler (GAS) to fail with an
5688           error.
5689
5690       -gvms
5691           Produce debugging information in Alpha/VMS debug format (if that is
5692           supported).  This is the format used by DEBUG on Alpha/VMS systems.
5693
5694       -glevel
5695       -ggdblevel
5696       -gstabslevel
5697       -gxcofflevel
5698       -gvmslevel
5699           Request debugging information and also use level to specify how
5700           much information.  The default level is 2.
5701
5702           Level 0 produces no debug information at all.  Thus, -g0 negates
5703           -g.
5704
5705           Level 1 produces minimal information, enough for making backtraces
5706           in parts of the program that you don't plan to debug.  This
5707           includes descriptions of functions and external variables, and line
5708           number tables, but no information about local variables.
5709
5710           Level 3 includes extra information, such as all the macro
5711           definitions present in the program.  Some debuggers support macro
5712           expansion when you use -g3.
5713
5714           -gdwarf does not accept a concatenated debug level, to avoid
5715           confusion with -gdwarf-level.  Instead use an additional -glevel
5716           option to change the debug level for DWARF.
5717
5718       -feliminate-unused-debug-symbols
5719           Produce debugging information in stabs format (if that is
5720           supported), for only symbols that are actually used.
5721
5722       -femit-class-debug-always
5723           Instead of emitting debugging information for a C++ class in only
5724           one object file, emit it in all object files using the class.  This
5725           option should be used only with debuggers that are unable to handle
5726           the way GCC normally emits debugging information for classes
5727           because using this option increases the size of debugging
5728           information by as much as a factor of two.
5729
5730       -fno-merge-debug-strings
5731           Direct the linker to not merge together strings in the debugging
5732           information that are identical in different object files.  Merging
5733           is not supported by all assemblers or linkers.  Merging decreases
5734           the size of the debug information in the output file at the cost of
5735           increasing link processing time.  Merging is enabled by default.
5736
5737       -fdebug-prefix-map=old=new
5738           When compiling files residing in directory old, record debugging
5739           information describing them as if the files resided in directory
5740           new instead.  This can be used to replace a build-time path with an
5741           install-time path in the debug info.  It can also be used to change
5742           an absolute path to a relative path by using . for new.  This can
5743           give more reproducible builds, which are location independent, but
5744           may require an extra command to tell GDB where to find the source
5745           files. See also -ffile-prefix-map.
5746
5747       -fvar-tracking
5748           Run variable tracking pass.  It computes where variables are stored
5749           at each position in code.  Better debugging information is then
5750           generated (if the debugging information format supports this
5751           information).
5752
5753           It is enabled by default when compiling with optimization (-Os, -O,
5754           -O2, ...), debugging information (-g) and the debug info format
5755           supports it.
5756
5757       -fvar-tracking-assignments
5758           Annotate assignments to user variables early in the compilation and
5759           attempt to carry the annotations over throughout the compilation
5760           all the way to the end, in an attempt to improve debug information
5761           while optimizing.  Use of -gdwarf-4 is recommended along with it.
5762
5763           It can be enabled even if var-tracking is disabled, in which case
5764           annotations are created and maintained, but discarded at the end.
5765           By default, this flag is enabled together with -fvar-tracking,
5766           except when selective scheduling is enabled.
5767
5768       -gsplit-dwarf
5769           Separate as much DWARF debugging information as possible into a
5770           separate output file with the extension .dwo.  This option allows
5771           the build system to avoid linking files with debug information.  To
5772           be useful, this option requires a debugger capable of reading .dwo
5773           files.
5774
5775       -gpubnames
5776           Generate DWARF ".debug_pubnames" and ".debug_pubtypes" sections.
5777
5778       -ggnu-pubnames
5779           Generate ".debug_pubnames" and ".debug_pubtypes" sections in a
5780           format suitable for conversion into a GDB index.  This option is
5781           only useful with a linker that can produce GDB index version 7.
5782
5783       -fdebug-types-section
5784           When using DWARF Version 4 or higher, type DIEs can be put into
5785           their own ".debug_types" section instead of making them part of the
5786           ".debug_info" section.  It is more efficient to put them in a
5787           separate comdat sections since the linker can then remove
5788           duplicates.  But not all DWARF consumers support ".debug_types"
5789           sections yet and on some objects ".debug_types" produces larger
5790           instead of smaller debugging information.
5791
5792       -grecord-gcc-switches
5793       -gno-record-gcc-switches
5794           This switch causes the command-line options used to invoke the
5795           compiler that may affect code generation to be appended to the
5796           DW_AT_producer attribute in DWARF debugging information.  The
5797           options are concatenated with spaces separating them from each
5798           other and from the compiler version.  It is enabled by default.
5799           See also -frecord-gcc-switches for another way of storing compiler
5800           options into the object file.
5801
5802       -gstrict-dwarf
5803           Disallow using extensions of later DWARF standard version than
5804           selected with -gdwarf-version.  On most targets using non-
5805           conflicting DWARF extensions from later standard versions is
5806           allowed.
5807
5808       -gno-strict-dwarf
5809           Allow using extensions of later DWARF standard version than
5810           selected with -gdwarf-version.
5811
5812       -gas-loc-support
5813           Inform the compiler that the assembler supports ".loc" directives.
5814           It may then use them for the assembler to generate DWARF2+ line
5815           number tables.
5816
5817           This is generally desirable, because assembler-generated line-
5818           number tables are a lot more compact than those the compiler can
5819           generate itself.
5820
5821           This option will be enabled by default if, at GCC configure time,
5822           the assembler was found to support such directives.
5823
5824       -gno-as-loc-support
5825           Force GCC to generate DWARF2+ line number tables internally, if
5826           DWARF2+ line number tables are to be generated.
5827
5828       gas-locview-support
5829           Inform the compiler that the assembler supports "view" assignment
5830           and reset assertion checking in ".loc" directives.
5831
5832           This option will be enabled by default if, at GCC configure time,
5833           the assembler was found to support them.
5834
5835       gno-as-locview-support
5836           Force GCC to assign view numbers internally, if
5837           -gvariable-location-views are explicitly requested.
5838
5839       -gcolumn-info
5840       -gno-column-info
5841           Emit location column information into DWARF debugging information,
5842           rather than just file and line.  This option is enabled by default.
5843
5844       -gstatement-frontiers
5845       -gno-statement-frontiers
5846           This option causes GCC to create markers in the internal
5847           representation at the beginning of statements, and to keep them
5848           roughly in place throughout compilation, using them to guide the
5849           output of "is_stmt" markers in the line number table.  This is
5850           enabled by default when compiling with optimization (-Os, -O, -O2,
5851           ...), and outputting DWARF 2 debug information at the normal level.
5852
5853       -gvariable-location-views
5854       -gvariable-location-views=incompat5
5855       -gno-variable-location-views
5856           Augment variable location lists with progressive view numbers
5857           implied from the line number table.  This enables debug information
5858           consumers to inspect state at certain points of the program, even
5859           if no instructions associated with the corresponding source
5860           locations are present at that point.  If the assembler lacks
5861           support for view numbers in line number tables, this will cause the
5862           compiler to emit the line number table, which generally makes them
5863           somewhat less compact.  The augmented line number tables and
5864           location lists are fully backward-compatible, so they can be
5865           consumed by debug information consumers that are not aware of these
5866           augmentations, but they won't derive any benefit from them either.
5867
5868           This is enabled by default when outputting DWARF 2 debug
5869           information at the normal level, as long as there is assembler
5870           support, -fvar-tracking-assignments is enabled and -gstrict-dwarf
5871           is not.  When assembler support is not available, this may still be
5872           enabled, but it will force GCC to output internal line number
5873           tables, and if -ginternal-reset-location-views is not enabled, that
5874           will most certainly lead to silently mismatching location views.
5875
5876           There is a proposed representation for view numbers that is not
5877           backward compatible with the location list format introduced in
5878           DWARF 5, that can be enabled with
5879           -gvariable-location-views=incompat5.  This option may be removed in
5880           the future, is only provided as a reference implementation of the
5881           proposed representation.  Debug information consumers are not
5882           expected to support this extended format, and they would be
5883           rendered unable to decode location lists using it.
5884
5885       -ginternal-reset-location-views
5886       -gnointernal-reset-location-views
5887           Attempt to determine location views that can be omitted from
5888           location view lists.  This requires the compiler to have very
5889           accurate insn length estimates, which isn't always the case, and it
5890           may cause incorrect view lists to be generated silently when using
5891           an assembler that does not support location view lists.  The GNU
5892           assembler will flag any such error as a "view number mismatch".
5893           This is only enabled on ports that define a reliable estimation
5894           function.
5895
5896       -ginline-points
5897       -gno-inline-points
5898           Generate extended debug information for inlined functions.
5899           Location view tracking markers are inserted at inlined entry
5900           points, so that address and view numbers can be computed and output
5901           in debug information.  This can be enabled independently of
5902           location views, in which case the view numbers won't be output, but
5903           it can only be enabled along with statement frontiers, and it is
5904           only enabled by default if location views are enabled.
5905
5906       -gz[=type]
5907           Produce compressed debug sections in DWARF format, if that is
5908           supported.  If type is not given, the default type depends on the
5909           capabilities of the assembler and linker used.  type may be one of
5910           none (don't compress debug sections), zlib (use zlib compression in
5911           ELF gABI format), or zlib-gnu (use zlib compression in traditional
5912           GNU format).  If the linker doesn't support writing compressed
5913           debug sections, the option is rejected.  Otherwise, if the
5914           assembler does not support them, -gz is silently ignored when
5915           producing object files.
5916
5917       -femit-struct-debug-baseonly
5918           Emit debug information for struct-like types only when the base
5919           name of the compilation source file matches the base name of file
5920           in which the struct is defined.
5921
5922           This option substantially reduces the size of debugging
5923           information, but at significant potential loss in type information
5924           to the debugger.  See -femit-struct-debug-reduced for a less
5925           aggressive option.  See -femit-struct-debug-detailed for more
5926           detailed control.
5927
5928           This option works only with DWARF debug output.
5929
5930       -femit-struct-debug-reduced
5931           Emit debug information for struct-like types only when the base
5932           name of the compilation source file matches the base name of file
5933           in which the type is defined, unless the struct is a template or
5934           defined in a system header.
5935
5936           This option significantly reduces the size of debugging
5937           information, with some potential loss in type information to the
5938           debugger.  See -femit-struct-debug-baseonly for a more aggressive
5939           option.  See -femit-struct-debug-detailed for more detailed
5940           control.
5941
5942           This option works only with DWARF debug output.
5943
5944       -femit-struct-debug-detailed[=spec-list]
5945           Specify the struct-like types for which the compiler generates
5946           debug information.  The intent is to reduce duplicate struct debug
5947           information between different object files within the same program.
5948
5949           This option is a detailed version of -femit-struct-debug-reduced
5950           and -femit-struct-debug-baseonly, which serves for most needs.
5951
5952           A specification has the
5953           syntax[dir:|ind:][ord:|gen:](any|sys|base|none)
5954
5955           The optional first word limits the specification to structs that
5956           are used directly (dir:) or used indirectly (ind:).  A struct type
5957           is used directly when it is the type of a variable, member.
5958           Indirect uses arise through pointers to structs.  That is, when use
5959           of an incomplete struct is valid, the use is indirect.  An example
5960           is struct one direct; struct two * indirect;.
5961
5962           The optional second word limits the specification to ordinary
5963           structs (ord:) or generic structs (gen:).  Generic structs are a
5964           bit complicated to explain.  For C++, these are non-explicit
5965           specializations of template classes, or non-template classes within
5966           the above.  Other programming languages have generics, but
5967           -femit-struct-debug-detailed does not yet implement them.
5968
5969           The third word specifies the source files for those structs for
5970           which the compiler should emit debug information.  The values none
5971           and any have the normal meaning.  The value base means that the
5972           base of name of the file in which the type declaration appears must
5973           match the base of the name of the main compilation file.  In
5974           practice, this means that when compiling foo.c, debug information
5975           is generated for types declared in that file and foo.h, but not
5976           other header files.  The value sys means those types satisfying
5977           base or declared in system or compiler headers.
5978
5979           You may need to experiment to determine the best settings for your
5980           application.
5981
5982           The default is -femit-struct-debug-detailed=all.
5983
5984           This option works only with DWARF debug output.
5985
5986       -fno-dwarf2-cfi-asm
5987           Emit DWARF unwind info as compiler generated ".eh_frame" section
5988           instead of using GAS ".cfi_*" directives.
5989
5990       -fno-eliminate-unused-debug-types
5991           Normally, when producing DWARF output, GCC avoids producing debug
5992           symbol output for types that are nowhere used in the source file
5993           being compiled.  Sometimes it is useful to have GCC emit debugging
5994           information for all types declared in a compilation unit,
5995           regardless of whether or not they are actually used in that
5996           compilation unit, for example if, in the debugger, you want to cast
5997           a value to a type that is not actually used in your program (but is
5998           declared).  More often, however, this results in a significant
5999           amount of wasted space.
6000
6001   Options That Control Optimization
6002       These options control various sorts of optimizations.
6003
6004       Without any optimization option, the compiler's goal is to reduce the
6005       cost of compilation and to make debugging produce the expected results.
6006       Statements are independent: if you stop the program with a breakpoint
6007       between statements, you can then assign a new value to any variable or
6008       change the program counter to any other statement in the function and
6009       get exactly the results you expect from the source code.
6010
6011       Turning on optimization flags makes the compiler attempt to improve the
6012       performance and/or code size at the expense of compilation time and
6013       possibly the ability to debug the program.
6014
6015       The compiler performs optimization based on the knowledge it has of the
6016       program.  Compiling multiple files at once to a single output file mode
6017       allows the compiler to use information gained from all of the files
6018       when compiling each of them.
6019
6020       Not all optimizations are controlled directly by a flag.  Only
6021       optimizations that have a flag are listed in this section.
6022
6023       Most optimizations are only enabled if an -O level is set on the
6024       command line.  Otherwise they are disabled, even if individual
6025       optimization flags are specified.
6026
6027       Depending on the target and how GCC was configured, a slightly
6028       different set of optimizations may be enabled at each -O level than
6029       those listed here.  You can invoke GCC with -Q --help=optimizers to
6030       find out the exact set of optimizations that are enabled at each level.
6031
6032       -O
6033       -O1 Optimize.  Optimizing compilation takes somewhat more time, and a
6034           lot more memory for a large function.
6035
6036           With -O, the compiler tries to reduce code size and execution time,
6037           without performing any optimizations that take a great deal of
6038           compilation time.
6039
6040           -O turns on the following optimization flags:
6041
6042           -fauto-inc-dec -fbranch-count-reg -fcombine-stack-adjustments
6043           -fcompare-elim -fcprop-registers -fdce -fdefer-pop -fdelayed-branch
6044           -fdse -fforward-propagate -fguess-branch-probability
6045           -fif-conversion2 -fif-conversion -finline-functions-called-once
6046           -fipa-pure-const -fipa-profile -fipa-reference -fmerge-constants
6047           -fmove-loop-invariants -fomit-frame-pointer -freorder-blocks
6048           -fshrink-wrap -fshrink-wrap-separate -fsplit-wide-types
6049           -fssa-backprop -fssa-phiopt -ftree-bit-ccp -ftree-ccp -ftree-ch
6050           -ftree-coalesce-vars -ftree-copy-prop -ftree-dce
6051           -ftree-dominator-opts -ftree-dse -ftree-forwprop -ftree-fre
6052           -ftree-phiprop -ftree-sink -ftree-slsr -ftree-sra -ftree-pta
6053           -ftree-ter -funit-at-a-time
6054
6055       -O2 Optimize even more.  GCC performs nearly all supported
6056           optimizations that do not involve a space-speed tradeoff.  As
6057           compared to -O, this option increases both compilation time and the
6058           performance of the generated code.
6059
6060           -O2 turns on all optimization flags specified by -O.  It also turns
6061           on the following optimization flags: -fthread-jumps
6062           -falign-functions  -falign-jumps -falign-loops  -falign-labels
6063           -fcaller-saves -fcrossjumping -fcse-follow-jumps  -fcse-skip-blocks
6064           -fdelete-null-pointer-checks -fdevirtualize
6065           -fdevirtualize-speculatively -fexpensive-optimizations -fgcse
6066           -fgcse-lm -fhoist-adjacent-loads -finline-small-functions
6067           -findirect-inlining -fipa-cp -fipa-bit-cp -fipa-vrp -fipa-sra
6068           -fipa-icf -fisolate-erroneous-paths-dereference -flra-remat
6069           -foptimize-sibling-calls -foptimize-strlen -fpartial-inlining
6070           -fpeephole2 -freorder-blocks-algorithm=stc
6071           -freorder-blocks-and-partition -freorder-functions
6072           -frerun-cse-after-loop -fsched-interblock  -fsched-spec
6073           -fschedule-insns  -fschedule-insns2 -fstore-merging
6074           -fstrict-aliasing -ftree-builtin-call-dce -ftree-switch-conversion
6075           -ftree-tail-merge -fcode-hoisting -ftree-pre -ftree-vrp -fipa-ra
6076
6077           Please note the warning under -fgcse about invoking -O2 on programs
6078           that use computed gotos.
6079
6080       -O3 Optimize yet more.  -O3 turns on all optimizations specified by -O2
6081           and also turns on the following optimization flags:
6082           -finline-functions -funswitch-loops -fpredictive-commoning
6083           -fgcse-after-reload -ftree-loop-vectorize -ftree-loop-distribution
6084           -ftree-loop-distribute-patterns -floop-interchange
6085           -floop-unroll-and-jam -fsplit-paths -ftree-slp-vectorize
6086           -fvect-cost-model -ftree-partial-pre -fpeel-loops -fipa-cp-clone
6087
6088       -O0 Reduce compilation time and make debugging produce the expected
6089           results.  This is the default.
6090
6091       -Os Optimize for size.  -Os enables all -O2 optimizations that do not
6092           typically increase code size.
6093
6094           -Os disables the following optimization flags: -falign-functions
6095           -falign-jumps  -falign-loops -falign-labels  -freorder-blocks
6096           -freorder-blocks-algorithm=stc -freorder-blocks-and-partition
6097           -fprefetch-loop-arrays
6098
6099           It also enables -finline-functions, causes the compiler to tune for
6100           code size rather than execution speed, and performs further
6101           optimizations designed to reduce code size.
6102
6103       -Ofast
6104           Disregard strict standards compliance.  -Ofast enables all -O3
6105           optimizations.  It also enables optimizations that are not valid
6106           for all standard-compliant programs.  It turns on -ffast-math and
6107           the Fortran-specific -fstack-arrays, unless -fmax-stack-var-size is
6108           specified, and -fno-protect-parens.
6109
6110       -Og Optimize debugging experience.  -Og enables optimizations that do
6111           not interfere with debugging. It should be the optimization level
6112           of choice for the standard edit-compile-debug cycle, offering a
6113           reasonable level of optimization while maintaining fast compilation
6114           and a good debugging experience.
6115
6116       If you use multiple -O options, with or without level numbers, the last
6117       such option is the one that is effective.
6118
6119       Options of the form -fflag specify machine-independent flags.  Most
6120       flags have both positive and negative forms; the negative form of -ffoo
6121       is -fno-foo.  In the table below, only one of the forms is listed---the
6122       one you typically use.  You can figure out the other form by either
6123       removing no- or adding it.
6124
6125       The following options control specific optimizations.  They are either
6126       activated by -O options or are related to ones that are.  You can use
6127       the following flags in the rare cases when "fine-tuning" of
6128       optimizations to be performed is desired.
6129
6130       -fno-defer-pop
6131           Always pop the arguments to each function call as soon as that
6132           function returns.  For machines that must pop arguments after a
6133           function call, the compiler normally lets arguments accumulate on
6134           the stack for several function calls and pops them all at once.
6135
6136           Disabled at levels -O, -O2, -O3, -Os.
6137
6138       -fforward-propagate
6139           Perform a forward propagation pass on RTL.  The pass tries to
6140           combine two instructions and checks if the result can be
6141           simplified.  If loop unrolling is active, two passes are performed
6142           and the second is scheduled after loop unrolling.
6143
6144           This option is enabled by default at optimization levels -O, -O2,
6145           -O3, -Os.
6146
6147       -ffp-contract=style
6148           -ffp-contract=off disables floating-point expression contraction.
6149           -ffp-contract=fast enables floating-point expression contraction
6150           such as forming of fused multiply-add operations if the target has
6151           native support for them.  -ffp-contract=on enables floating-point
6152           expression contraction if allowed by the language standard.  This
6153           is currently not implemented and treated equal to
6154           -ffp-contract=off.
6155
6156           The default is -ffp-contract=fast.
6157
6158       -fomit-frame-pointer
6159           Omit the frame pointer in functions that don't need one.  This
6160           avoids the instructions to save, set up and restore the frame
6161           pointer; on many targets it also makes an extra register available.
6162
6163           On some targets this flag has no effect because the standard
6164           calling sequence always uses a frame pointer, so it cannot be
6165           omitted.
6166
6167           Note that -fno-omit-frame-pointer doesn't guarantee the frame
6168           pointer is used in all functions.  Several targets always omit the
6169           frame pointer in leaf functions.
6170
6171           Enabled by default at -O and higher.
6172
6173       -foptimize-sibling-calls
6174           Optimize sibling and tail recursive calls.
6175
6176           Enabled at levels -O2, -O3, -Os.
6177
6178       -foptimize-strlen
6179           Optimize various standard C string functions (e.g. "strlen",
6180           "strchr" or "strcpy") and their "_FORTIFY_SOURCE" counterparts into
6181           faster alternatives.
6182
6183           Enabled at levels -O2, -O3.
6184
6185       -fno-inline
6186           Do not expand any functions inline apart from those marked with the
6187           "always_inline" attribute.  This is the default when not
6188           optimizing.
6189
6190           Single functions can be exempted from inlining by marking them with
6191           the "noinline" attribute.
6192
6193       -finline-small-functions
6194           Integrate functions into their callers when their body is smaller
6195           than expected function call code (so overall size of program gets
6196           smaller).  The compiler heuristically decides which functions are
6197           simple enough to be worth integrating in this way.  This inlining
6198           applies to all functions, even those not declared inline.
6199
6200           Enabled at levels -O2, -O3, -Os.
6201
6202       -findirect-inlining
6203           Inline also indirect calls that are discovered to be known at
6204           compile time thanks to previous inlining.  This option has any
6205           effect only when inlining itself is turned on by the
6206           -finline-functions or -finline-small-functions options.
6207
6208           Enabled at levels -O3, -Os.  Also enabled by -fprofile-use and
6209           -fauto-profile.
6210
6211       -finline-functions
6212           Consider all functions for inlining, even if they are not declared
6213           inline.  The compiler heuristically decides which functions are
6214           worth integrating in this way.
6215
6216           If all calls to a given function are integrated, and the function
6217           is declared "static", then the function is normally not output as
6218           assembler code in its own right.
6219
6220           Enabled at levels -O2, -O3, -Os.
6221
6222       -finline-functions-called-once
6223           Consider all "static" functions called once for inlining into their
6224           caller even if they are not marked "inline".  If a call to a given
6225           function is integrated, then the function is not output as
6226           assembler code in its own right.
6227
6228           Enabled at levels -O1, -O2, -O3 and -Os.
6229
6230       -fearly-inlining
6231           Inline functions marked by "always_inline" and functions whose body
6232           seems smaller than the function call overhead early before doing
6233           -fprofile-generate instrumentation and real inlining pass.  Doing
6234           so makes profiling significantly cheaper and usually inlining
6235           faster on programs having large chains of nested wrapper functions.
6236
6237           Enabled by default.
6238
6239       -fipa-sra
6240           Perform interprocedural scalar replacement of aggregates, removal
6241           of unused parameters and replacement of parameters passed by
6242           reference by parameters passed by value.
6243
6244           Enabled at levels -O2, -O3 and -Os.
6245
6246       -finline-limit=n
6247           By default, GCC limits the size of functions that can be inlined.
6248           This flag allows coarse control of this limit.  n is the size of
6249           functions that can be inlined in number of pseudo instructions.
6250
6251           Inlining is actually controlled by a number of parameters, which
6252           may be specified individually by using --param name=value.  The
6253           -finline-limit=n option sets some of these parameters as follows:
6254
6255           max-inline-insns-single
6256               is set to n/2.
6257
6258           max-inline-insns-auto
6259               is set to n/2.
6260
6261           See below for a documentation of the individual parameters
6262           controlling inlining and for the defaults of these parameters.
6263
6264           Note: there may be no value to -finline-limit that results in
6265           default behavior.
6266
6267           Note: pseudo instruction represents, in this particular context, an
6268           abstract measurement of function's size.  In no way does it
6269           represent a count of assembly instructions and as such its exact
6270           meaning might change from one release to an another.
6271
6272       -fno-keep-inline-dllexport
6273           This is a more fine-grained version of -fkeep-inline-functions,
6274           which applies only to functions that are declared using the
6275           "dllexport" attribute or declspec.
6276
6277       -fkeep-inline-functions
6278           In C, emit "static" functions that are declared "inline" into the
6279           object file, even if the function has been inlined into all of its
6280           callers.  This switch does not affect functions using the "extern
6281           inline" extension in GNU C90.  In C++, emit any and all inline
6282           functions into the object file.
6283
6284       -fkeep-static-functions
6285           Emit "static" functions into the object file, even if the function
6286           is never used.
6287
6288       -fkeep-static-consts
6289           Emit variables declared "static const" when optimization isn't
6290           turned on, even if the variables aren't referenced.
6291
6292           GCC enables this option by default.  If you want to force the
6293           compiler to check if a variable is referenced, regardless of
6294           whether or not optimization is turned on, use the
6295           -fno-keep-static-consts option.
6296
6297       -fmerge-constants
6298           Attempt to merge identical constants (string constants and
6299           floating-point constants) across compilation units.
6300
6301           This option is the default for optimized compilation if the
6302           assembler and linker support it.  Use -fno-merge-constants to
6303           inhibit this behavior.
6304
6305           Enabled at levels -O, -O2, -O3, -Os.
6306
6307       -fmerge-all-constants
6308           Attempt to merge identical constants and identical variables.
6309
6310           This option implies -fmerge-constants.  In addition to
6311           -fmerge-constants this considers e.g. even constant initialized
6312           arrays or initialized constant variables with integral or floating-
6313           point types.  Languages like C or C++ require each variable,
6314           including multiple instances of the same variable in recursive
6315           calls, to have distinct locations, so using this option results in
6316           non-conforming behavior.
6317
6318       -fmodulo-sched
6319           Perform swing modulo scheduling immediately before the first
6320           scheduling pass.  This pass looks at innermost loops and reorders
6321           their instructions by overlapping different iterations.
6322
6323       -fmodulo-sched-allow-regmoves
6324           Perform more aggressive SMS-based modulo scheduling with register
6325           moves allowed.  By setting this flag certain anti-dependences edges
6326           are deleted, which triggers the generation of reg-moves based on
6327           the life-range analysis.  This option is effective only with
6328           -fmodulo-sched enabled.
6329
6330       -fno-branch-count-reg
6331           Avoid running a pass scanning for opportunities to use "decrement
6332           and branch" instructions on a count register instead of generating
6333           sequences of instructions that decrement a register, compare it
6334           against zero, and then branch based upon the result.  This option
6335           is only meaningful on architectures that support such instructions,
6336           which include x86, PowerPC, IA-64 and S/390.  Note that the
6337           -fno-branch-count-reg option doesn't remove the decrement and
6338           branch instructions from the generated instruction stream
6339           introduced by other optimization passes.
6340
6341           Enabled by default at -O1 and higher.
6342
6343           The default is -fbranch-count-reg.
6344
6345       -fno-function-cse
6346           Do not put function addresses in registers; make each instruction
6347           that calls a constant function contain the function's address
6348           explicitly.
6349
6350           This option results in less efficient code, but some strange hacks
6351           that alter the assembler output may be confused by the
6352           optimizations performed when this option is not used.
6353
6354           The default is -ffunction-cse
6355
6356       -fno-zero-initialized-in-bss
6357           If the target supports a BSS section, GCC by default puts variables
6358           that are initialized to zero into BSS.  This can save space in the
6359           resulting code.
6360
6361           This option turns off this behavior because some programs
6362           explicitly rely on variables going to the data section---e.g., so
6363           that the resulting executable can find the beginning of that
6364           section and/or make assumptions based on that.
6365
6366           The default is -fzero-initialized-in-bss.
6367
6368       -fthread-jumps
6369           Perform optimizations that check to see if a jump branches to a
6370           location where another comparison subsumed by the first is found.
6371           If so, the first branch is redirected to either the destination of
6372           the second branch or a point immediately following it, depending on
6373           whether the condition is known to be true or false.
6374
6375           Enabled at levels -O2, -O3, -Os.
6376
6377       -fsplit-wide-types
6378           When using a type that occupies multiple registers, such as "long
6379           long" on a 32-bit system, split the registers apart and allocate
6380           them independently.  This normally generates better code for those
6381           types, but may make debugging more difficult.
6382
6383           Enabled at levels -O, -O2, -O3, -Os.
6384
6385       -fcse-follow-jumps
6386           In common subexpression elimination (CSE), scan through jump
6387           instructions when the target of the jump is not reached by any
6388           other path.  For example, when CSE encounters an "if" statement
6389           with an "else" clause, CSE follows the jump when the condition
6390           tested is false.
6391
6392           Enabled at levels -O2, -O3, -Os.
6393
6394       -fcse-skip-blocks
6395           This is similar to -fcse-follow-jumps, but causes CSE to follow
6396           jumps that conditionally skip over blocks.  When CSE encounters a
6397           simple "if" statement with no else clause, -fcse-skip-blocks causes
6398           CSE to follow the jump around the body of the "if".
6399
6400           Enabled at levels -O2, -O3, -Os.
6401
6402       -frerun-cse-after-loop
6403           Re-run common subexpression elimination after loop optimizations
6404           are performed.
6405
6406           Enabled at levels -O2, -O3, -Os.
6407
6408       -fgcse
6409           Perform a global common subexpression elimination pass.  This pass
6410           also performs global constant and copy propagation.
6411
6412           Note: When compiling a program using computed gotos, a GCC
6413           extension, you may get better run-time performance if you disable
6414           the global common subexpression elimination pass by adding
6415           -fno-gcse to the command line.
6416
6417           Enabled at levels -O2, -O3, -Os.
6418
6419       -fgcse-lm
6420           When -fgcse-lm is enabled, global common subexpression elimination
6421           attempts to move loads that are only killed by stores into
6422           themselves.  This allows a loop containing a load/store sequence to
6423           be changed to a load outside the loop, and a copy/store within the
6424           loop.
6425
6426           Enabled by default when -fgcse is enabled.
6427
6428       -fgcse-sm
6429           When -fgcse-sm is enabled, a store motion pass is run after global
6430           common subexpression elimination.  This pass attempts to move
6431           stores out of loops.  When used in conjunction with -fgcse-lm,
6432           loops containing a load/store sequence can be changed to a load
6433           before the loop and a store after the loop.
6434
6435           Not enabled at any optimization level.
6436
6437       -fgcse-las
6438           When -fgcse-las is enabled, the global common subexpression
6439           elimination pass eliminates redundant loads that come after stores
6440           to the same memory location (both partial and full redundancies).
6441
6442           Not enabled at any optimization level.
6443
6444       -fgcse-after-reload
6445           When -fgcse-after-reload is enabled, a redundant load elimination
6446           pass is performed after reload.  The purpose of this pass is to
6447           clean up redundant spilling.
6448
6449       -faggressive-loop-optimizations
6450           This option tells the loop optimizer to use language constraints to
6451           derive bounds for the number of iterations of a loop.  This assumes
6452           that loop code does not invoke undefined behavior by for example
6453           causing signed integer overflows or out-of-bound array accesses.
6454           The bounds for the number of iterations of a loop are used to guide
6455           loop unrolling and peeling and loop exit test optimizations.  This
6456           option is enabled by default.
6457
6458       -funconstrained-commons
6459           This option tells the compiler that variables declared in common
6460           blocks (e.g. Fortran) may later be overridden with longer trailing
6461           arrays. This prevents certain optimizations that depend on knowing
6462           the array bounds.
6463
6464       -fcrossjumping
6465           Perform cross-jumping transformation.  This transformation unifies
6466           equivalent code and saves code size.  The resulting code may or may
6467           not perform better than without cross-jumping.
6468
6469           Enabled at levels -O2, -O3, -Os.
6470
6471       -fauto-inc-dec
6472           Combine increments or decrements of addresses with memory accesses.
6473           This pass is always skipped on architectures that do not have
6474           instructions to support this.  Enabled by default at -O and higher
6475           on architectures that support this.
6476
6477       -fdce
6478           Perform dead code elimination (DCE) on RTL.  Enabled by default at
6479           -O and higher.
6480
6481       -fdse
6482           Perform dead store elimination (DSE) on RTL.  Enabled by default at
6483           -O and higher.
6484
6485       -fif-conversion
6486           Attempt to transform conditional jumps into branch-less
6487           equivalents.  This includes use of conditional moves, min, max, set
6488           flags and abs instructions, and some tricks doable by standard
6489           arithmetics.  The use of conditional execution on chips where it is
6490           available is controlled by -fif-conversion2.
6491
6492           Enabled at levels -O, -O2, -O3, -Os.
6493
6494       -fif-conversion2
6495           Use conditional execution (where available) to transform
6496           conditional jumps into branch-less equivalents.
6497
6498           Enabled at levels -O, -O2, -O3, -Os.
6499
6500       -fdeclone-ctor-dtor
6501           The C++ ABI requires multiple entry points for constructors and
6502           destructors: one for a base subobject, one for a complete object,
6503           and one for a virtual destructor that calls operator delete
6504           afterwards.  For a hierarchy with virtual bases, the base and
6505           complete variants are clones, which means two copies of the
6506           function.  With this option, the base and complete variants are
6507           changed to be thunks that call a common implementation.
6508
6509           Enabled by -Os.
6510
6511       -fdelete-null-pointer-checks
6512           Assume that programs cannot safely dereference null pointers, and
6513           that no code or data element resides at address zero.  This option
6514           enables simple constant folding optimizations at all optimization
6515           levels.  In addition, other optimization passes in GCC use this
6516           flag to control global dataflow analyses that eliminate useless
6517           checks for null pointers; these assume that a memory access to
6518           address zero always results in a trap, so that if a pointer is
6519           checked after it has already been dereferenced, it cannot be null.
6520
6521           Note however that in some environments this assumption is not true.
6522           Use -fno-delete-null-pointer-checks to disable this optimization
6523           for programs that depend on that behavior.
6524
6525           This option is enabled by default on most targets.  On Nios II ELF,
6526           it defaults to off.  On AVR, CR16, and MSP430, this option is
6527           completely disabled.
6528
6529           Passes that use the dataflow information are enabled independently
6530           at different optimization levels.
6531
6532       -fdevirtualize
6533           Attempt to convert calls to virtual functions to direct calls.
6534           This is done both within a procedure and interprocedurally as part
6535           of indirect inlining (-findirect-inlining) and interprocedural
6536           constant propagation (-fipa-cp).  Enabled at levels -O2, -O3, -Os.
6537
6538       -fdevirtualize-speculatively
6539           Attempt to convert calls to virtual functions to speculative direct
6540           calls.  Based on the analysis of the type inheritance graph,
6541           determine for a given call the set of likely targets. If the set is
6542           small, preferably of size 1, change the call into a conditional
6543           deciding between direct and indirect calls.  The speculative calls
6544           enable more optimizations, such as inlining.  When they seem
6545           useless after further optimization, they are converted back into
6546           original form.
6547
6548       -fdevirtualize-at-ltrans
6549           Stream extra information needed for aggressive devirtualization
6550           when running the link-time optimizer in local transformation mode.
6551           This option enables more devirtualization but significantly
6552           increases the size of streamed data. For this reason it is disabled
6553           by default.
6554
6555       -fexpensive-optimizations
6556           Perform a number of minor optimizations that are relatively
6557           expensive.
6558
6559           Enabled at levels -O2, -O3, -Os.
6560
6561       -free
6562           Attempt to remove redundant extension instructions.  This is
6563           especially helpful for the x86-64 architecture, which implicitly
6564           zero-extends in 64-bit registers after writing to their lower
6565           32-bit half.
6566
6567           Enabled for Alpha, AArch64 and x86 at levels -O2, -O3, -Os.
6568
6569       -fno-lifetime-dse
6570           In C++ the value of an object is only affected by changes within
6571           its lifetime: when the constructor begins, the object has an
6572           indeterminate value, and any changes during the lifetime of the
6573           object are dead when the object is destroyed.  Normally dead store
6574           elimination will take advantage of this; if your code relies on the
6575           value of the object storage persisting beyond the lifetime of the
6576           object, you can use this flag to disable this optimization.  To
6577           preserve stores before the constructor starts (e.g. because your
6578           operator new clears the object storage) but still treat the object
6579           as dead after the destructor you, can use -flifetime-dse=1.  The
6580           default behavior can be explicitly selected with -flifetime-dse=2.
6581           -flifetime-dse=0 is equivalent to -fno-lifetime-dse.
6582
6583       -flive-range-shrinkage
6584           Attempt to decrease register pressure through register live range
6585           shrinkage.  This is helpful for fast processors with small or
6586           moderate size register sets.
6587
6588       -fira-algorithm=algorithm
6589           Use the specified coloring algorithm for the integrated register
6590           allocator.  The algorithm argument can be priority, which specifies
6591           Chow's priority coloring, or CB, which specifies Chaitin-Briggs
6592           coloring.  Chaitin-Briggs coloring is not implemented for all
6593           architectures, but for those targets that do support it, it is the
6594           default because it generates better code.
6595
6596       -fira-region=region
6597           Use specified regions for the integrated register allocator.  The
6598           region argument should be one of the following:
6599
6600           all Use all loops as register allocation regions.  This can give
6601               the best results for machines with a small and/or irregular
6602               register set.
6603
6604           mixed
6605               Use all loops except for loops with small register pressure as
6606               the regions.  This value usually gives the best results in most
6607               cases and for most architectures, and is enabled by default
6608               when compiling with optimization for speed (-O, -O2, ...).
6609
6610           one Use all functions as a single region.  This typically results
6611               in the smallest code size, and is enabled by default for -Os or
6612               -O0.
6613
6614       -fira-hoist-pressure
6615           Use IRA to evaluate register pressure in the code hoisting pass for
6616           decisions to hoist expressions.  This option usually results in
6617           smaller code, but it can slow the compiler down.
6618
6619           This option is enabled at level -Os for all targets.
6620
6621       -fira-loop-pressure
6622           Use IRA to evaluate register pressure in loops for decisions to
6623           move loop invariants.  This option usually results in generation of
6624           faster and smaller code on machines with large register files (>=
6625           32 registers), but it can slow the compiler down.
6626
6627           This option is enabled at level -O3 for some targets.
6628
6629       -fno-ira-share-save-slots
6630           Disable sharing of stack slots used for saving call-used hard
6631           registers living through a call.  Each hard register gets a
6632           separate stack slot, and as a result function stack frames are
6633           larger.
6634
6635       -fno-ira-share-spill-slots
6636           Disable sharing of stack slots allocated for pseudo-registers.
6637           Each pseudo-register that does not get a hard register gets a
6638           separate stack slot, and as a result function stack frames are
6639           larger.
6640
6641       -flra-remat
6642           Enable CFG-sensitive rematerialization in LRA.  Instead of loading
6643           values of spilled pseudos, LRA tries to rematerialize (recalculate)
6644           values if it is profitable.
6645
6646           Enabled at levels -O2, -O3, -Os.
6647
6648       -fdelayed-branch
6649           If supported for the target machine, attempt to reorder
6650           instructions to exploit instruction slots available after delayed
6651           branch instructions.
6652
6653           Enabled at levels -O, -O2, -O3, -Os.
6654
6655       -fschedule-insns
6656           If supported for the target machine, attempt to reorder
6657           instructions to eliminate execution stalls due to required data
6658           being unavailable.  This helps machines that have slow floating
6659           point or memory load instructions by allowing other instructions to
6660           be issued until the result of the load or floating-point
6661           instruction is required.
6662
6663           Enabled at levels -O2, -O3.
6664
6665       -fschedule-insns2
6666           Similar to -fschedule-insns, but requests an additional pass of
6667           instruction scheduling after register allocation has been done.
6668           This is especially useful on machines with a relatively small
6669           number of registers and where memory load instructions take more
6670           than one cycle.
6671
6672           Enabled at levels -O2, -O3, -Os.
6673
6674       -fno-sched-interblock
6675           Don't schedule instructions across basic blocks.  This is normally
6676           enabled by default when scheduling before register allocation, i.e.
6677           with -fschedule-insns or at -O2 or higher.
6678
6679       -fno-sched-spec
6680           Don't allow speculative motion of non-load instructions.  This is
6681           normally enabled by default when scheduling before register
6682           allocation, i.e.  with -fschedule-insns or at -O2 or higher.
6683
6684       -fsched-pressure
6685           Enable register pressure sensitive insn scheduling before register
6686           allocation.  This only makes sense when scheduling before register
6687           allocation is enabled, i.e. with -fschedule-insns or at -O2 or
6688           higher.  Usage of this option can improve the generated code and
6689           decrease its size by preventing register pressure increase above
6690           the number of available hard registers and subsequent spills in
6691           register allocation.
6692
6693       -fsched-spec-load
6694           Allow speculative motion of some load instructions.  This only
6695           makes sense when scheduling before register allocation, i.e. with
6696           -fschedule-insns or at -O2 or higher.
6697
6698       -fsched-spec-load-dangerous
6699           Allow speculative motion of more load instructions.  This only
6700           makes sense when scheduling before register allocation, i.e. with
6701           -fschedule-insns or at -O2 or higher.
6702
6703       -fsched-stalled-insns
6704       -fsched-stalled-insns=n
6705           Define how many insns (if any) can be moved prematurely from the
6706           queue of stalled insns into the ready list during the second
6707           scheduling pass.  -fno-sched-stalled-insns means that no insns are
6708           moved prematurely, -fsched-stalled-insns=0 means there is no limit
6709           on how many queued insns can be moved prematurely.
6710           -fsched-stalled-insns without a value is equivalent to
6711           -fsched-stalled-insns=1.
6712
6713       -fsched-stalled-insns-dep
6714       -fsched-stalled-insns-dep=n
6715           Define how many insn groups (cycles) are examined for a dependency
6716           on a stalled insn that is a candidate for premature removal from
6717           the queue of stalled insns.  This has an effect only during the
6718           second scheduling pass, and only if -fsched-stalled-insns is used.
6719           -fno-sched-stalled-insns-dep is equivalent to
6720           -fsched-stalled-insns-dep=0.  -fsched-stalled-insns-dep without a
6721           value is equivalent to -fsched-stalled-insns-dep=1.
6722
6723       -fsched2-use-superblocks
6724           When scheduling after register allocation, use superblock
6725           scheduling.  This allows motion across basic block boundaries,
6726           resulting in faster schedules.  This option is experimental, as not
6727           all machine descriptions used by GCC model the CPU closely enough
6728           to avoid unreliable results from the algorithm.
6729
6730           This only makes sense when scheduling after register allocation,
6731           i.e. with -fschedule-insns2 or at -O2 or higher.
6732
6733       -fsched-group-heuristic
6734           Enable the group heuristic in the scheduler.  This heuristic favors
6735           the instruction that belongs to a schedule group.  This is enabled
6736           by default when scheduling is enabled, i.e. with -fschedule-insns
6737           or -fschedule-insns2 or at -O2 or higher.
6738
6739       -fsched-critical-path-heuristic
6740           Enable the critical-path heuristic in the scheduler.  This
6741           heuristic favors instructions on the critical path.  This is
6742           enabled by default when scheduling is enabled, i.e. with
6743           -fschedule-insns or -fschedule-insns2 or at -O2 or higher.
6744
6745       -fsched-spec-insn-heuristic
6746           Enable the speculative instruction heuristic in the scheduler.
6747           This heuristic favors speculative instructions with greater
6748           dependency weakness.  This is enabled by default when scheduling is
6749           enabled, i.e.  with -fschedule-insns or -fschedule-insns2 or at -O2
6750           or higher.
6751
6752       -fsched-rank-heuristic
6753           Enable the rank heuristic in the scheduler.  This heuristic favors
6754           the instruction belonging to a basic block with greater size or
6755           frequency.  This is enabled by default when scheduling is enabled,
6756           i.e.  with -fschedule-insns or -fschedule-insns2 or at -O2 or
6757           higher.
6758
6759       -fsched-last-insn-heuristic
6760           Enable the last-instruction heuristic in the scheduler.  This
6761           heuristic favors the instruction that is less dependent on the last
6762           instruction scheduled.  This is enabled by default when scheduling
6763           is enabled, i.e. with -fschedule-insns or -fschedule-insns2 or at
6764           -O2 or higher.
6765
6766       -fsched-dep-count-heuristic
6767           Enable the dependent-count heuristic in the scheduler.  This
6768           heuristic favors the instruction that has more instructions
6769           depending on it.  This is enabled by default when scheduling is
6770           enabled, i.e.  with -fschedule-insns or -fschedule-insns2 or at -O2
6771           or higher.
6772
6773       -freschedule-modulo-scheduled-loops
6774           Modulo scheduling is performed before traditional scheduling.  If a
6775           loop is modulo scheduled, later scheduling passes may change its
6776           schedule.  Use this option to control that behavior.
6777
6778       -fselective-scheduling
6779           Schedule instructions using selective scheduling algorithm.
6780           Selective scheduling runs instead of the first scheduler pass.
6781
6782       -fselective-scheduling2
6783           Schedule instructions using selective scheduling algorithm.
6784           Selective scheduling runs instead of the second scheduler pass.
6785
6786       -fsel-sched-pipelining
6787           Enable software pipelining of innermost loops during selective
6788           scheduling.  This option has no effect unless one of
6789           -fselective-scheduling or -fselective-scheduling2 is turned on.
6790
6791       -fsel-sched-pipelining-outer-loops
6792           When pipelining loops during selective scheduling, also pipeline
6793           outer loops.  This option has no effect unless
6794           -fsel-sched-pipelining is turned on.
6795
6796       -fsemantic-interposition
6797           Some object formats, like ELF, allow interposing of symbols by the
6798           dynamic linker.  This means that for symbols exported from the DSO,
6799           the compiler cannot perform interprocedural propagation, inlining
6800           and other optimizations in anticipation that the function or
6801           variable in question may change. While this feature is useful, for
6802           example, to rewrite memory allocation functions by a debugging
6803           implementation, it is expensive in the terms of code quality.  With
6804           -fno-semantic-interposition the compiler assumes that if
6805           interposition happens for functions the overwriting function will
6806           have precisely the same semantics (and side effects).  Similarly if
6807           interposition happens for variables, the constructor of the
6808           variable will be the same. The flag has no effect for functions
6809           explicitly declared inline (where it is never allowed for
6810           interposition to change semantics) and for symbols explicitly
6811           declared weak.
6812
6813       -fshrink-wrap
6814           Emit function prologues only before parts of the function that need
6815           it, rather than at the top of the function.  This flag is enabled
6816           by default at -O and higher.
6817
6818       -fshrink-wrap-separate
6819           Shrink-wrap separate parts of the prologue and epilogue separately,
6820           so that those parts are only executed when needed.  This option is
6821           on by default, but has no effect unless -fshrink-wrap is also
6822           turned on and the target supports this.
6823
6824       -fcaller-saves
6825           Enable allocation of values to registers that are clobbered by
6826           function calls, by emitting extra instructions to save and restore
6827           the registers around such calls.  Such allocation is done only when
6828           it seems to result in better code.
6829
6830           This option is always enabled by default on certain machines,
6831           usually those which have no call-preserved registers to use
6832           instead.
6833
6834           Enabled at levels -O2, -O3, -Os.
6835
6836       -fcombine-stack-adjustments
6837           Tracks stack adjustments (pushes and pops) and stack memory
6838           references and then tries to find ways to combine them.
6839
6840           Enabled by default at -O1 and higher.
6841
6842       -fipa-ra
6843           Use caller save registers for allocation if those registers are not
6844           used by any called function.  In that case it is not necessary to
6845           save and restore them around calls.  This is only possible if
6846           called functions are part of same compilation unit as current
6847           function and they are compiled before it.
6848
6849           Enabled at levels -O2, -O3, -Os, however the option is disabled if
6850           generated code will be instrumented for profiling (-p, or -pg) or
6851           if callee's register usage cannot be known exactly (this happens on
6852           targets that do not expose prologues and epilogues in RTL).
6853
6854       -fconserve-stack
6855           Attempt to minimize stack usage.  The compiler attempts to use less
6856           stack space, even if that makes the program slower.  This option
6857           implies setting the large-stack-frame parameter to 100 and the
6858           large-stack-frame-growth parameter to 400.
6859
6860       -ftree-reassoc
6861           Perform reassociation on trees.  This flag is enabled by default at
6862           -O and higher.
6863
6864       -fcode-hoisting
6865           Perform code hoisting.  Code hoisting tries to move the evaluation
6866           of expressions executed on all paths to the function exit as early
6867           as possible.  This is especially useful as a code size
6868           optimization, but it often helps for code speed as well.  This flag
6869           is enabled by default at -O2 and higher.
6870
6871       -ftree-pre
6872           Perform partial redundancy elimination (PRE) on trees.  This flag
6873           is enabled by default at -O2 and -O3.
6874
6875       -ftree-partial-pre
6876           Make partial redundancy elimination (PRE) more aggressive.  This
6877           flag is enabled by default at -O3.
6878
6879       -ftree-forwprop
6880           Perform forward propagation on trees.  This flag is enabled by
6881           default at -O and higher.
6882
6883       -ftree-fre
6884           Perform full redundancy elimination (FRE) on trees.  The difference
6885           between FRE and PRE is that FRE only considers expressions that are
6886           computed on all paths leading to the redundant computation.  This
6887           analysis is faster than PRE, though it exposes fewer redundancies.
6888           This flag is enabled by default at -O and higher.
6889
6890       -ftree-phiprop
6891           Perform hoisting of loads from conditional pointers on trees.  This
6892           pass is enabled by default at -O and higher.
6893
6894       -fhoist-adjacent-loads
6895           Speculatively hoist loads from both branches of an if-then-else if
6896           the loads are from adjacent locations in the same structure and the
6897           target architecture has a conditional move instruction.  This flag
6898           is enabled by default at -O2 and higher.
6899
6900       -ftree-copy-prop
6901           Perform copy propagation on trees.  This pass eliminates
6902           unnecessary copy operations.  This flag is enabled by default at -O
6903           and higher.
6904
6905       -fipa-pure-const
6906           Discover which functions are pure or constant.  Enabled by default
6907           at -O and higher.
6908
6909       -fipa-reference
6910           Discover which static variables do not escape the compilation unit.
6911           Enabled by default at -O and higher.
6912
6913       -fipa-pta
6914           Perform interprocedural pointer analysis and interprocedural
6915           modification and reference analysis.  This option can cause
6916           excessive memory and compile-time usage on large compilation units.
6917           It is not enabled by default at any optimization level.
6918
6919       -fipa-profile
6920           Perform interprocedural profile propagation.  The functions called
6921           only from cold functions are marked as cold. Also functions
6922           executed once (such as "cold", "noreturn", static constructors or
6923           destructors) are identified. Cold functions and loop less parts of
6924           functions executed once are then optimized for size.  Enabled by
6925           default at -O and higher.
6926
6927       -fipa-cp
6928           Perform interprocedural constant propagation.  This optimization
6929           analyzes the program to determine when values passed to functions
6930           are constants and then optimizes accordingly.  This optimization
6931           can substantially increase performance if the application has
6932           constants passed to functions.  This flag is enabled by default at
6933           -O2, -Os and -O3.
6934
6935       -fipa-cp-clone
6936           Perform function cloning to make interprocedural constant
6937           propagation stronger.  When enabled, interprocedural constant
6938           propagation performs function cloning when externally visible
6939           function can be called with constant arguments.  Because this
6940           optimization can create multiple copies of functions, it may
6941           significantly increase code size (see --param
6942           ipcp-unit-growth=value).  This flag is enabled by default at -O3.
6943
6944       -fipa-bit-cp
6945           When enabled, perform interprocedural bitwise constant propagation.
6946           This flag is enabled by default at -O2. It requires that -fipa-cp
6947           is enabled.
6948
6949       -fipa-vrp
6950           When enabled, perform interprocedural propagation of value ranges.
6951           This flag is enabled by default at -O2. It requires that -fipa-cp
6952           is enabled.
6953
6954       -fipa-icf
6955           Perform Identical Code Folding for functions and read-only
6956           variables.  The optimization reduces code size and may disturb
6957           unwind stacks by replacing a function by equivalent one with a
6958           different name. The optimization works more effectively with link-
6959           time optimization enabled.
6960
6961           Nevertheless the behavior is similar to Gold Linker ICF
6962           optimization, GCC ICF works on different levels and thus the
6963           optimizations are not same - there are equivalences that are found
6964           only by GCC and equivalences found only by Gold.
6965
6966           This flag is enabled by default at -O2 and -Os.
6967
6968       -fisolate-erroneous-paths-dereference
6969           Detect paths that trigger erroneous or undefined behavior due to
6970           dereferencing a null pointer.  Isolate those paths from the main
6971           control flow and turn the statement with erroneous or undefined
6972           behavior into a trap.  This flag is enabled by default at -O2 and
6973           higher and depends on -fdelete-null-pointer-checks also being
6974           enabled.
6975
6976       -fisolate-erroneous-paths-attribute
6977           Detect paths that trigger erroneous or undefined behavior due to a
6978           null value being used in a way forbidden by a "returns_nonnull" or
6979           "nonnull" attribute.  Isolate those paths from the main control
6980           flow and turn the statement with erroneous or undefined behavior
6981           into a trap.  This is not currently enabled, but may be enabled by
6982           -O2 in the future.
6983
6984       -ftree-sink
6985           Perform forward store motion on trees.  This flag is enabled by
6986           default at -O and higher.
6987
6988       -ftree-bit-ccp
6989           Perform sparse conditional bit constant propagation on trees and
6990           propagate pointer alignment information.  This pass only operates
6991           on local scalar variables and is enabled by default at -O and
6992           higher.  It requires that -ftree-ccp is enabled.
6993
6994       -ftree-ccp
6995           Perform sparse conditional constant propagation (CCP) on trees.
6996           This pass only operates on local scalar variables and is enabled by
6997           default at -O and higher.
6998
6999       -fssa-backprop
7000           Propagate information about uses of a value up the definition chain
7001           in order to simplify the definitions.  For example, this pass
7002           strips sign operations if the sign of a value never matters.  The
7003           flag is enabled by default at -O and higher.
7004
7005       -fssa-phiopt
7006           Perform pattern matching on SSA PHI nodes to optimize conditional
7007           code.  This pass is enabled by default at -O and higher.
7008
7009       -ftree-switch-conversion
7010           Perform conversion of simple initializations in a switch to
7011           initializations from a scalar array.  This flag is enabled by
7012           default at -O2 and higher.
7013
7014       -ftree-tail-merge
7015           Look for identical code sequences.  When found, replace one with a
7016           jump to the other.  This optimization is known as tail merging or
7017           cross jumping.  This flag is enabled by default at -O2 and higher.
7018           The compilation time in this pass can be limited using max-tail-
7019           merge-comparisons parameter and max-tail-merge-iterations
7020           parameter.
7021
7022       -ftree-dce
7023           Perform dead code elimination (DCE) on trees.  This flag is enabled
7024           by default at -O and higher.
7025
7026       -ftree-builtin-call-dce
7027           Perform conditional dead code elimination (DCE) for calls to built-
7028           in functions that may set "errno" but are otherwise free of side
7029           effects.  This flag is enabled by default at -O2 and higher if -Os
7030           is not also specified.
7031
7032       -ftree-dominator-opts
7033           Perform a variety of simple scalar cleanups (constant/copy
7034           propagation, redundancy elimination, range propagation and
7035           expression simplification) based on a dominator tree traversal.
7036           This also performs jump threading (to reduce jumps to jumps). This
7037           flag is enabled by default at -O and higher.
7038
7039       -ftree-dse
7040           Perform dead store elimination (DSE) on trees.  A dead store is a
7041           store into a memory location that is later overwritten by another
7042           store without any intervening loads.  In this case the earlier
7043           store can be deleted.  This flag is enabled by default at -O and
7044           higher.
7045
7046       -ftree-ch
7047           Perform loop header copying on trees.  This is beneficial since it
7048           increases effectiveness of code motion optimizations.  It also
7049           saves one jump.  This flag is enabled by default at -O and higher.
7050           It is not enabled for -Os, since it usually increases code size.
7051
7052       -ftree-loop-optimize
7053           Perform loop optimizations on trees.  This flag is enabled by
7054           default at -O and higher.
7055
7056       -ftree-loop-linear
7057       -floop-strip-mine
7058       -floop-block
7059           Perform loop nest optimizations.  Same as -floop-nest-optimize.  To
7060           use this code transformation, GCC has to be configured with
7061           --with-isl to enable the Graphite loop transformation
7062           infrastructure.
7063
7064       -fgraphite-identity
7065           Enable the identity transformation for graphite.  For every SCoP we
7066           generate the polyhedral representation and transform it back to
7067           gimple.  Using -fgraphite-identity we can check the costs or
7068           benefits of the GIMPLE -> GRAPHITE -> GIMPLE transformation.  Some
7069           minimal optimizations are also performed by the code generator isl,
7070           like index splitting and dead code elimination in loops.
7071
7072       -floop-nest-optimize
7073           Enable the isl based loop nest optimizer.  This is a generic loop
7074           nest optimizer based on the Pluto optimization algorithms.  It
7075           calculates a loop structure optimized for data-locality and
7076           parallelism.  This option is experimental.
7077
7078       -floop-parallelize-all
7079           Use the Graphite data dependence analysis to identify loops that
7080           can be parallelized.  Parallelize all the loops that can be
7081           analyzed to not contain loop carried dependences without checking
7082           that it is profitable to parallelize the loops.
7083
7084       -ftree-coalesce-vars
7085           While transforming the program out of the SSA representation,
7086           attempt to reduce copying by coalescing versions of different user-
7087           defined variables, instead of just compiler temporaries.  This may
7088           severely limit the ability to debug an optimized program compiled
7089           with -fno-var-tracking-assignments.  In the negated form, this flag
7090           prevents SSA coalescing of user variables.  This option is enabled
7091           by default if optimization is enabled, and it does very little
7092           otherwise.
7093
7094       -ftree-loop-if-convert
7095           Attempt to transform conditional jumps in the innermost loops to
7096           branch-less equivalents.  The intent is to remove control-flow from
7097           the innermost loops in order to improve the ability of the
7098           vectorization pass to handle these loops.  This is enabled by
7099           default if vectorization is enabled.
7100
7101       -ftree-loop-distribution
7102           Perform loop distribution.  This flag can improve cache performance
7103           on big loop bodies and allow further loop optimizations, like
7104           parallelization or vectorization, to take place.  For example, the
7105           loop
7106
7107                   DO I = 1, N
7108                     A(I) = B(I) + C
7109                     D(I) = E(I) * F
7110                   ENDDO
7111
7112           is transformed to
7113
7114                   DO I = 1, N
7115                      A(I) = B(I) + C
7116                   ENDDO
7117                   DO I = 1, N
7118                      D(I) = E(I) * F
7119                   ENDDO
7120
7121       -ftree-loop-distribute-patterns
7122           Perform loop distribution of patterns that can be code generated
7123           with calls to a library.  This flag is enabled by default at -O3.
7124
7125           This pass distributes the initialization loops and generates a call
7126           to memset zero.  For example, the loop
7127
7128                   DO I = 1, N
7129                     A(I) = 0
7130                     B(I) = A(I) + I
7131                   ENDDO
7132
7133           is transformed to
7134
7135                   DO I = 1, N
7136                      A(I) = 0
7137                   ENDDO
7138                   DO I = 1, N
7139                      B(I) = A(I) + I
7140                   ENDDO
7141
7142           and the initialization loop is transformed into a call to memset
7143           zero.
7144
7145       -floop-interchange
7146           Perform loop interchange outside of graphite.  This flag can
7147           improve cache performance on loop nest and allow further loop
7148           optimizations, like vectorization, to take place.  For example, the
7149           loop
7150
7151                   for (int i = 0; i < N; i++)
7152                     for (int j = 0; j < N; j++)
7153                       for (int k = 0; k < N; k++)
7154                         c[i][j] = c[i][j] + a[i][k]*b[k][j];
7155
7156           is transformed to
7157
7158                   for (int i = 0; i < N; i++)
7159                     for (int k = 0; k < N; k++)
7160                       for (int j = 0; j < N; j++)
7161                         c[i][j] = c[i][j] + a[i][k]*b[k][j];
7162
7163           This flag is enabled by default at -O3.
7164
7165       -floop-unroll-and-jam
7166           Apply unroll and jam transformations on feasible loops.  In a loop
7167           nest this unrolls the outer loop by some factor and fuses the
7168           resulting multiple inner loops.  This flag is enabled by default at
7169           -O3.
7170
7171       -ftree-loop-im
7172           Perform loop invariant motion on trees.  This pass moves only
7173           invariants that are hard to handle at RTL level (function calls,
7174           operations that expand to nontrivial sequences of insns).  With
7175           -funswitch-loops it also moves operands of conditions that are
7176           invariant out of the loop, so that we can use just trivial
7177           invariantness analysis in loop unswitching.  The pass also includes
7178           store motion.
7179
7180       -ftree-loop-ivcanon
7181           Create a canonical counter for number of iterations in loops for
7182           which determining number of iterations requires complicated
7183           analysis.  Later optimizations then may determine the number
7184           easily.  Useful especially in connection with unrolling.
7185
7186       -fivopts
7187           Perform induction variable optimizations (strength reduction,
7188           induction variable merging and induction variable elimination) on
7189           trees.
7190
7191       -ftree-parallelize-loops=n
7192           Parallelize loops, i.e., split their iteration space to run in n
7193           threads.  This is only possible for loops whose iterations are
7194           independent and can be arbitrarily reordered.  The optimization is
7195           only profitable on multiprocessor machines, for loops that are CPU-
7196           intensive, rather than constrained e.g. by memory bandwidth.  This
7197           option implies -pthread, and thus is only supported on targets that
7198           have support for -pthread.
7199
7200       -ftree-pta
7201           Perform function-local points-to analysis on trees.  This flag is
7202           enabled by default at -O and higher.
7203
7204       -ftree-sra
7205           Perform scalar replacement of aggregates.  This pass replaces
7206           structure references with scalars to prevent committing structures
7207           to memory too early.  This flag is enabled by default at -O and
7208           higher.
7209
7210       -fstore-merging
7211           Perform merging of narrow stores to consecutive memory addresses.
7212           This pass merges contiguous stores of immediate values narrower
7213           than a word into fewer wider stores to reduce the number of
7214           instructions.  This is enabled by default at -O2 and higher as well
7215           as -Os.
7216
7217       -ftree-ter
7218           Perform temporary expression replacement during the SSA->normal
7219           phase.  Single use/single def temporaries are replaced at their use
7220           location with their defining expression.  This results in non-
7221           GIMPLE code, but gives the expanders much more complex trees to
7222           work on resulting in better RTL generation.  This is enabled by
7223           default at -O and higher.
7224
7225       -ftree-slsr
7226           Perform straight-line strength reduction on trees.  This recognizes
7227           related expressions involving multiplications and replaces them by
7228           less expensive calculations when possible.  This is enabled by
7229           default at -O and higher.
7230
7231       -ftree-vectorize
7232           Perform vectorization on trees. This flag enables
7233           -ftree-loop-vectorize and -ftree-slp-vectorize if not explicitly
7234           specified.
7235
7236       -ftree-loop-vectorize
7237           Perform loop vectorization on trees. This flag is enabled by
7238           default at -O3 and when -ftree-vectorize is enabled.
7239
7240       -ftree-slp-vectorize
7241           Perform basic block vectorization on trees. This flag is enabled by
7242           default at -O3 and when -ftree-vectorize is enabled.
7243
7244       -fvect-cost-model=model
7245           Alter the cost model used for vectorization.  The model argument
7246           should be one of unlimited, dynamic or cheap.  With the unlimited
7247           model the vectorized code-path is assumed to be profitable while
7248           with the dynamic model a runtime check guards the vectorized code-
7249           path to enable it only for iteration counts that will likely
7250           execute faster than when executing the original scalar loop.  The
7251           cheap model disables vectorization of loops where doing so would be
7252           cost prohibitive for example due to required runtime checks for
7253           data dependence or alignment but otherwise is equal to the dynamic
7254           model.  The default cost model depends on other optimization flags
7255           and is either dynamic or cheap.
7256
7257       -fsimd-cost-model=model
7258           Alter the cost model used for vectorization of loops marked with
7259           the OpenMP simd directive.  The model argument should be one of
7260           unlimited, dynamic, cheap.  All values of model have the same
7261           meaning as described in -fvect-cost-model and by default a cost
7262           model defined with -fvect-cost-model is used.
7263
7264       -ftree-vrp
7265           Perform Value Range Propagation on trees.  This is similar to the
7266           constant propagation pass, but instead of values, ranges of values
7267           are propagated.  This allows the optimizers to remove unnecessary
7268           range checks like array bound checks and null pointer checks.  This
7269           is enabled by default at -O2 and higher.  Null pointer check
7270           elimination is only done if -fdelete-null-pointer-checks is
7271           enabled.
7272
7273       -fsplit-paths
7274           Split paths leading to loop backedges.  This can improve dead code
7275           elimination and common subexpression elimination.  This is enabled
7276           by default at -O2 and above.
7277
7278       -fsplit-ivs-in-unroller
7279           Enables expression of values of induction variables in later
7280           iterations of the unrolled loop using the value in the first
7281           iteration.  This breaks long dependency chains, thus improving
7282           efficiency of the scheduling passes.
7283
7284           A combination of -fweb and CSE is often sufficient to obtain the
7285           same effect.  However, that is not reliable in cases where the loop
7286           body is more complicated than a single basic block.  It also does
7287           not work at all on some architectures due to restrictions in the
7288           CSE pass.
7289
7290           This optimization is enabled by default.
7291
7292       -fvariable-expansion-in-unroller
7293           With this option, the compiler creates multiple copies of some
7294           local variables when unrolling a loop, which can result in superior
7295           code.
7296
7297       -fpartial-inlining
7298           Inline parts of functions.  This option has any effect only when
7299           inlining itself is turned on by the -finline-functions or
7300           -finline-small-functions options.
7301
7302           Enabled at levels -O2, -O3, -Os.
7303
7304       -fpredictive-commoning
7305           Perform predictive commoning optimization, i.e., reusing
7306           computations (especially memory loads and stores) performed in
7307           previous iterations of loops.
7308
7309           This option is enabled at level -O3.
7310
7311       -fprefetch-loop-arrays
7312           If supported by the target machine, generate instructions to
7313           prefetch memory to improve the performance of loops that access
7314           large arrays.
7315
7316           This option may generate better or worse code; results are highly
7317           dependent on the structure of loops within the source code.
7318
7319           Disabled at level -Os.
7320
7321       -fno-printf-return-value
7322           Do not substitute constants for known return value of formatted
7323           output functions such as "sprintf", "snprintf", "vsprintf", and
7324           "vsnprintf" (but not "printf" of "fprintf").  This transformation
7325           allows GCC to optimize or even eliminate branches based on the
7326           known return value of these functions called with arguments that
7327           are either constant, or whose values are known to be in a range
7328           that makes determining the exact return value possible.  For
7329           example, when -fprintf-return-value is in effect, both the branch
7330           and the body of the "if" statement (but not the call to "snprint")
7331           can be optimized away when "i" is a 32-bit or smaller integer
7332           because the return value is guaranteed to be at most 8.
7333
7334                   char buf[9];
7335                   if (snprintf (buf, "%08x", i) >= sizeof buf)
7336                     ...
7337
7338           The -fprintf-return-value option relies on other optimizations and
7339           yields best results with -O2 and above.  It works in tandem with
7340           the -Wformat-overflow and -Wformat-truncation options.  The
7341           -fprintf-return-value option is enabled by default.
7342
7343       -fno-peephole
7344       -fno-peephole2
7345           Disable any machine-specific peephole optimizations.  The
7346           difference between -fno-peephole and -fno-peephole2 is in how they
7347           are implemented in the compiler; some targets use one, some use the
7348           other, a few use both.
7349
7350           -fpeephole is enabled by default.  -fpeephole2 enabled at levels
7351           -O2, -O3, -Os.
7352
7353       -fno-guess-branch-probability
7354           Do not guess branch probabilities using heuristics.
7355
7356           GCC uses heuristics to guess branch probabilities if they are not
7357           provided by profiling feedback (-fprofile-arcs).  These heuristics
7358           are based on the control flow graph.  If some branch probabilities
7359           are specified by "__builtin_expect", then the heuristics are used
7360           to guess branch probabilities for the rest of the control flow
7361           graph, taking the "__builtin_expect" info into account.  The
7362           interactions between the heuristics and "__builtin_expect" can be
7363           complex, and in some cases, it may be useful to disable the
7364           heuristics so that the effects of "__builtin_expect" are easier to
7365           understand.
7366
7367           The default is -fguess-branch-probability at levels -O, -O2, -O3,
7368           -Os.
7369
7370       -freorder-blocks
7371           Reorder basic blocks in the compiled function in order to reduce
7372           number of taken branches and improve code locality.
7373
7374           Enabled at levels -O, -O2, -O3, -Os.
7375
7376       -freorder-blocks-algorithm=algorithm
7377           Use the specified algorithm for basic block reordering.  The
7378           algorithm argument can be simple, which does not increase code size
7379           (except sometimes due to secondary effects like alignment), or stc,
7380           the "software trace cache" algorithm, which tries to put all often
7381           executed code together, minimizing the number of branches executed
7382           by making extra copies of code.
7383
7384           The default is simple at levels -O, -Os, and stc at levels -O2,
7385           -O3.
7386
7387       -freorder-blocks-and-partition
7388           In addition to reordering basic blocks in the compiled function, in
7389           order to reduce number of taken branches, partitions hot and cold
7390           basic blocks into separate sections of the assembly and .o files,
7391           to improve paging and cache locality performance.
7392
7393           This optimization is automatically turned off in the presence of
7394           exception handling or unwind tables (on targets using
7395           setjump/longjump or target specific scheme), for linkonce sections,
7396           for functions with a user-defined section attribute and on any
7397           architecture that does not support named sections.  When
7398           -fsplit-stack is used this option is not enabled by default (to
7399           avoid linker errors), but may be enabled explicitly (if using a
7400           working linker).
7401
7402           Enabled for x86 at levels -O2, -O3, -Os.
7403
7404       -freorder-functions
7405           Reorder functions in the object file in order to improve code
7406           locality.  This is implemented by using special subsections
7407           ".text.hot" for most frequently executed functions and
7408           ".text.unlikely" for unlikely executed functions.  Reordering is
7409           done by the linker so object file format must support named
7410           sections and linker must place them in a reasonable way.
7411
7412           Also profile feedback must be available to make this option
7413           effective.  See -fprofile-arcs for details.
7414
7415           Enabled at levels -O2, -O3, -Os.
7416
7417       -fstrict-aliasing
7418           Allow the compiler to assume the strictest aliasing rules
7419           applicable to the language being compiled.  For C (and C++), this
7420           activates optimizations based on the type of expressions.  In
7421           particular, an object of one type is assumed never to reside at the
7422           same address as an object of a different type, unless the types are
7423           almost the same.  For example, an "unsigned int" can alias an
7424           "int", but not a "void*" or a "double".  A character type may alias
7425           any other type.
7426
7427           Pay special attention to code like this:
7428
7429                   union a_union {
7430                     int i;
7431                     double d;
7432                   };
7433
7434                   int f() {
7435                     union a_union t;
7436                     t.d = 3.0;
7437                     return t.i;
7438                   }
7439
7440           The practice of reading from a different union member than the one
7441           most recently written to (called "type-punning") is common.  Even
7442           with -fstrict-aliasing, type-punning is allowed, provided the
7443           memory is accessed through the union type.  So, the code above
7444           works as expected.    However, this code might not:
7445
7446                   int f() {
7447                     union a_union t;
7448                     int* ip;
7449                     t.d = 3.0;
7450                     ip = &t.i;
7451                     return *ip;
7452                   }
7453
7454           Similarly, access by taking the address, casting the resulting
7455           pointer and dereferencing the result has undefined behavior, even
7456           if the cast uses a union type, e.g.:
7457
7458                   int f() {
7459                     double d = 3.0;
7460                     return ((union a_union *) &d)->i;
7461                   }
7462
7463           The -fstrict-aliasing option is enabled at levels -O2, -O3, -Os.
7464
7465       -falign-functions
7466       -falign-functions=n
7467           Align the start of functions to the next power-of-two greater than
7468           n, skipping up to n bytes.  For instance, -falign-functions=32
7469           aligns functions to the next 32-byte boundary, but
7470           -falign-functions=24 aligns to the next 32-byte boundary only if
7471           this can be done by skipping 23 bytes or less.
7472
7473           -fno-align-functions and -falign-functions=1 are equivalent and
7474           mean that functions are not aligned.
7475
7476           Some assemblers only support this flag when n is a power of two; in
7477           that case, it is rounded up.
7478
7479           If n is not specified or is zero, use a machine-dependent default.
7480           The maximum allowed n option value is 65536.
7481
7482           Enabled at levels -O2, -O3.
7483
7484       -flimit-function-alignment
7485           If this option is enabled, the compiler tries to avoid
7486           unnecessarily overaligning functions. It attempts to instruct the
7487           assembler to align by the amount specified by -falign-functions,
7488           but not to skip more bytes than the size of the function.
7489
7490       -falign-labels
7491       -falign-labels=n
7492           Align all branch targets to a power-of-two boundary, skipping up to
7493           n bytes like -falign-functions.  This option can easily make code
7494           slower, because it must insert dummy operations for when the branch
7495           target is reached in the usual flow of the code.
7496
7497           -fno-align-labels and -falign-labels=1 are equivalent and mean that
7498           labels are not aligned.
7499
7500           If -falign-loops or -falign-jumps are applicable and are greater
7501           than this value, then their values are used instead.
7502
7503           If n is not specified or is zero, use a machine-dependent default
7504           which is very likely to be 1, meaning no alignment.  The maximum
7505           allowed n option value is 65536.
7506
7507           Enabled at levels -O2, -O3.
7508
7509       -falign-loops
7510       -falign-loops=n
7511           Align loops to a power-of-two boundary, skipping up to n bytes like
7512           -falign-functions.  If the loops are executed many times, this
7513           makes up for any execution of the dummy operations.
7514
7515           -fno-align-loops and -falign-loops=1 are equivalent and mean that
7516           loops are not aligned.  The maximum allowed n option value is
7517           65536.
7518
7519           If n is not specified or is zero, use a machine-dependent default.
7520
7521           Enabled at levels -O2, -O3.
7522
7523       -falign-jumps
7524       -falign-jumps=n
7525           Align branch targets to a power-of-two boundary, for branch targets
7526           where the targets can only be reached by jumping, skipping up to n
7527           bytes like -falign-functions.  In this case, no dummy operations
7528           need be executed.
7529
7530           -fno-align-jumps and -falign-jumps=1 are equivalent and mean that
7531           loops are not aligned.
7532
7533           If n is not specified or is zero, use a machine-dependent default.
7534           The maximum allowed n option value is 65536.
7535
7536           Enabled at levels -O2, -O3.
7537
7538       -funit-at-a-time
7539           This option is left for compatibility reasons. -funit-at-a-time has
7540           no effect, while -fno-unit-at-a-time implies -fno-toplevel-reorder
7541           and -fno-section-anchors.
7542
7543           Enabled by default.
7544
7545       -fno-toplevel-reorder
7546           Do not reorder top-level functions, variables, and "asm"
7547           statements.  Output them in the same order that they appear in the
7548           input file.  When this option is used, unreferenced static
7549           variables are not removed.  This option is intended to support
7550           existing code that relies on a particular ordering.  For new code,
7551           it is better to use attributes when possible.
7552
7553           Enabled at level -O0.  When disabled explicitly, it also implies
7554           -fno-section-anchors, which is otherwise enabled at -O0 on some
7555           targets.
7556
7557       -fweb
7558           Constructs webs as commonly used for register allocation purposes
7559           and assign each web individual pseudo register.  This allows the
7560           register allocation pass to operate on pseudos directly, but also
7561           strengthens several other optimization passes, such as CSE, loop
7562           optimizer and trivial dead code remover.  It can, however, make
7563           debugging impossible, since variables no longer stay in a "home
7564           register".
7565
7566           Enabled by default with -funroll-loops.
7567
7568       -fwhole-program
7569           Assume that the current compilation unit represents the whole
7570           program being compiled.  All public functions and variables with
7571           the exception of "main" and those merged by attribute
7572           "externally_visible" become static functions and in effect are
7573           optimized more aggressively by interprocedural optimizers.
7574
7575           This option should not be used in combination with -flto.  Instead
7576           relying on a linker plugin should provide safer and more precise
7577           information.
7578
7579       -flto[=n]
7580           This option runs the standard link-time optimizer.  When invoked
7581           with source code, it generates GIMPLE (one of GCC's internal
7582           representations) and writes it to special ELF sections in the
7583           object file.  When the object files are linked together, all the
7584           function bodies are read from these ELF sections and instantiated
7585           as if they had been part of the same translation unit.
7586
7587           To use the link-time optimizer, -flto and optimization options
7588           should be specified at compile time and during the final link.  It
7589           is recommended that you compile all the files participating in the
7590           same link with the same options and also specify those options at
7591           link time.  For example:
7592
7593                   gcc -c -O2 -flto foo.c
7594                   gcc -c -O2 -flto bar.c
7595                   gcc -o myprog -flto -O2 foo.o bar.o
7596
7597           The first two invocations to GCC save a bytecode representation of
7598           GIMPLE into special ELF sections inside foo.o and bar.o.  The final
7599           invocation reads the GIMPLE bytecode from foo.o and bar.o, merges
7600           the two files into a single internal image, and compiles the result
7601           as usual.  Since both foo.o and bar.o are merged into a single
7602           image, this causes all the interprocedural analyses and
7603           optimizations in GCC to work across the two files as if they were a
7604           single one.  This means, for example, that the inliner is able to
7605           inline functions in bar.o into functions in foo.o and vice-versa.
7606
7607           Another (simpler) way to enable link-time optimization is:
7608
7609                   gcc -o myprog -flto -O2 foo.c bar.c
7610
7611           The above generates bytecode for foo.c and bar.c, merges them
7612           together into a single GIMPLE representation and optimizes them as
7613           usual to produce myprog.
7614
7615           The only important thing to keep in mind is that to enable link-
7616           time optimizations you need to use the GCC driver to perform the
7617           link step.  GCC then automatically performs link-time optimization
7618           if any of the objects involved were compiled with the -flto
7619           command-line option.  You generally should specify the optimization
7620           options to be used for link-time optimization though GCC tries to
7621           be clever at guessing an optimization level to use from the options
7622           used at compile time if you fail to specify one at link time.  You
7623           can always override the automatic decision to do link-time
7624           optimization by passing -fno-lto to the link command.
7625
7626           To make whole program optimization effective, it is necessary to
7627           make certain whole program assumptions.  The compiler needs to know
7628           what functions and variables can be accessed by libraries and
7629           runtime outside of the link-time optimized unit.  When supported by
7630           the linker, the linker plugin (see -fuse-linker-plugin) passes
7631           information to the compiler about used and externally visible
7632           symbols.  When the linker plugin is not available, -fwhole-program
7633           should be used to allow the compiler to make these assumptions,
7634           which leads to more aggressive optimization decisions.
7635
7636           When -fuse-linker-plugin is not enabled, when a file is compiled
7637           with -flto, the generated object file is larger than a regular
7638           object file because it contains GIMPLE bytecodes and the usual
7639           final code (see -ffat-lto-objects.  This means that object files
7640           with LTO information can be linked as normal object files; if
7641           -fno-lto is passed to the linker, no interprocedural optimizations
7642           are applied.  Note that when -fno-fat-lto-objects is enabled the
7643           compile stage is faster but you cannot perform a regular, non-LTO
7644           link on them.
7645
7646           Additionally, the optimization flags used to compile individual
7647           files are not necessarily related to those used at link time.  For
7648           instance,
7649
7650                   gcc -c -O0 -ffat-lto-objects -flto foo.c
7651                   gcc -c -O0 -ffat-lto-objects -flto bar.c
7652                   gcc -o myprog -O3 foo.o bar.o
7653
7654           This produces individual object files with unoptimized assembler
7655           code, but the resulting binary myprog is optimized at -O3.  If,
7656           instead, the final binary is generated with -fno-lto, then myprog
7657           is not optimized.
7658
7659           When producing the final binary, GCC only applies link-time
7660           optimizations to those files that contain bytecode.  Therefore, you
7661           can mix and match object files and libraries with GIMPLE bytecodes
7662           and final object code.  GCC automatically selects which files to
7663           optimize in LTO mode and which files to link without further
7664           processing.
7665
7666           There are some code generation flags preserved by GCC when
7667           generating bytecodes, as they need to be used during the final link
7668           stage.  Generally options specified at link time override those
7669           specified at compile time.
7670
7671           If you do not specify an optimization level option -O at link time,
7672           then GCC uses the highest optimization level used when compiling
7673           the object files.
7674
7675           Currently, the following options and their settings are taken from
7676           the first object file that explicitly specifies them: -fPIC, -fpic,
7677           -fpie, -fcommon, -fexceptions, -fnon-call-exceptions, -fgnu-tm and
7678           all the -m target flags.
7679
7680           Certain ABI-changing flags are required to match in all compilation
7681           units, and trying to override this at link time with a conflicting
7682           value is ignored.  This includes options such as
7683           -freg-struct-return and -fpcc-struct-return.
7684
7685           Other options such as -ffp-contract, -fno-strict-overflow, -fwrapv,
7686           -fno-trapv or -fno-strict-aliasing are passed through to the link
7687           stage and merged conservatively for conflicting translation units.
7688           Specifically -fno-strict-overflow, -fwrapv and -fno-trapv take
7689           precedence; and for example -ffp-contract=off takes precedence over
7690           -ffp-contract=fast.  You can override them at link time.
7691
7692           If LTO encounters objects with C linkage declared with incompatible
7693           types in separate translation units to be linked together
7694           (undefined behavior according to ISO C99 6.2.7), a non-fatal
7695           diagnostic may be issued.  The behavior is still undefined at run
7696           time.  Similar diagnostics may be raised for other languages.
7697
7698           Another feature of LTO is that it is possible to apply
7699           interprocedural optimizations on files written in different
7700           languages:
7701
7702                   gcc -c -flto foo.c
7703                   g++ -c -flto bar.cc
7704                   gfortran -c -flto baz.f90
7705                   g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran
7706
7707           Notice that the final link is done with g++ to get the C++ runtime
7708           libraries and -lgfortran is added to get the Fortran runtime
7709           libraries.  In general, when mixing languages in LTO mode, you
7710           should use the same link command options as when mixing languages
7711           in a regular (non-LTO) compilation.
7712
7713           If object files containing GIMPLE bytecode are stored in a library
7714           archive, say libfoo.a, it is possible to extract and use them in an
7715           LTO link if you are using a linker with plugin support.  To create
7716           static libraries suitable for LTO, use gcc-ar and gcc-ranlib
7717           instead of ar and ranlib; to show the symbols of object files with
7718           GIMPLE bytecode, use gcc-nm.  Those commands require that ar,
7719           ranlib and nm have been compiled with plugin support.  At link
7720           time, use the flag -fuse-linker-plugin to ensure that the library
7721           participates in the LTO optimization process:
7722
7723                   gcc -o myprog -O2 -flto -fuse-linker-plugin a.o b.o -lfoo
7724
7725           With the linker plugin enabled, the linker extracts the needed
7726           GIMPLE files from libfoo.a and passes them on to the running GCC to
7727           make them part of the aggregated GIMPLE image to be optimized.
7728
7729           If you are not using a linker with plugin support and/or do not
7730           enable the linker plugin, then the objects inside libfoo.a are
7731           extracted and linked as usual, but they do not participate in the
7732           LTO optimization process.  In order to make a static library
7733           suitable for both LTO optimization and usual linkage, compile its
7734           object files with -flto -ffat-lto-objects.
7735
7736           Link-time optimizations do not require the presence of the whole
7737           program to operate.  If the program does not require any symbols to
7738           be exported, it is possible to combine -flto and -fwhole-program to
7739           allow the interprocedural optimizers to use more aggressive
7740           assumptions which may lead to improved optimization opportunities.
7741           Use of -fwhole-program is not needed when linker plugin is active
7742           (see -fuse-linker-plugin).
7743
7744           The current implementation of LTO makes no attempt to generate
7745           bytecode that is portable between different types of hosts.  The
7746           bytecode files are versioned and there is a strict version check,
7747           so bytecode files generated in one version of GCC do not work with
7748           an older or newer version of GCC.
7749
7750           Link-time optimization does not work well with generation of
7751           debugging information on systems other than those using a
7752           combination of ELF and DWARF.
7753
7754           If you specify the optional n, the optimization and code generation
7755           done at link time is executed in parallel using n parallel jobs by
7756           utilizing an installed make program.  The environment variable MAKE
7757           may be used to override the program used.  The default value for n
7758           is 1.
7759
7760           You can also specify -flto=jobserver to use GNU make's job server
7761           mode to determine the number of parallel jobs. This is useful when
7762           the Makefile calling GCC is already executing in parallel.  You
7763           must prepend a + to the command recipe in the parent Makefile for
7764           this to work.  This option likely only works if MAKE is GNU make.
7765
7766       -flto-partition=alg
7767           Specify the partitioning algorithm used by the link-time optimizer.
7768           The value is either 1to1 to specify a partitioning mirroring the
7769           original source files or balanced to specify partitioning into
7770           equally sized chunks (whenever possible) or max to create new
7771           partition for every symbol where possible.  Specifying none as an
7772           algorithm disables partitioning and streaming completely.  The
7773           default value is balanced. While 1to1 can be used as an workaround
7774           for various code ordering issues, the max partitioning is intended
7775           for internal testing only.  The value one specifies that exactly
7776           one partition should be used while the value none bypasses
7777           partitioning and executes the link-time optimization step directly
7778           from the WPA phase.
7779
7780       -flto-odr-type-merging
7781           Enable streaming of mangled types names of C++ types and their
7782           unification at link time.  This increases size of LTO object files,
7783           but enables diagnostics about One Definition Rule violations.
7784
7785       -flto-compression-level=n
7786           This option specifies the level of compression used for
7787           intermediate language written to LTO object files, and is only
7788           meaningful in conjunction with LTO mode (-flto).  Valid values are
7789           0 (no compression) to 9 (maximum compression).  Values outside this
7790           range are clamped to either 0 or 9.  If the option is not given, a
7791           default balanced compression setting is used.
7792
7793       -fuse-linker-plugin
7794           Enables the use of a linker plugin during link-time optimization.
7795           This option relies on plugin support in the linker, which is
7796           available in gold or in GNU ld 2.21 or newer.
7797
7798           This option enables the extraction of object files with GIMPLE
7799           bytecode out of library archives. This improves the quality of
7800           optimization by exposing more code to the link-time optimizer.
7801           This information specifies what symbols can be accessed externally
7802           (by non-LTO object or during dynamic linking).  Resulting code
7803           quality improvements on binaries (and shared libraries that use
7804           hidden visibility) are similar to -fwhole-program.  See -flto for a
7805           description of the effect of this flag and how to use it.
7806
7807           This option is enabled by default when LTO support in GCC is
7808           enabled and GCC was configured for use with a linker supporting
7809           plugins (GNU ld 2.21 or newer or gold).
7810
7811       -ffat-lto-objects
7812           Fat LTO objects are object files that contain both the intermediate
7813           language and the object code. This makes them usable for both LTO
7814           linking and normal linking. This option is effective only when
7815           compiling with -flto and is ignored at link time.
7816
7817           -fno-fat-lto-objects improves compilation time over plain LTO, but
7818           requires the complete toolchain to be aware of LTO. It requires a
7819           linker with linker plugin support for basic functionality.
7820           Additionally, nm, ar and ranlib need to support linker plugins to
7821           allow a full-featured build environment (capable of building static
7822           libraries etc).  GCC provides the gcc-ar, gcc-nm, gcc-ranlib
7823           wrappers to pass the right options to these tools. With non fat LTO
7824           makefiles need to be modified to use them.
7825
7826           Note that modern binutils provide plugin auto-load mechanism.
7827           Installing the linker plugin into $libdir/bfd-plugins has the same
7828           effect as usage of the command wrappers (gcc-ar, gcc-nm and gcc-
7829           ranlib).
7830
7831           The default is -fno-fat-lto-objects on targets with linker plugin
7832           support.
7833
7834       -fcompare-elim
7835           After register allocation and post-register allocation instruction
7836           splitting, identify arithmetic instructions that compute processor
7837           flags similar to a comparison operation based on that arithmetic.
7838           If possible, eliminate the explicit comparison operation.
7839
7840           This pass only applies to certain targets that cannot explicitly
7841           represent the comparison operation before register allocation is
7842           complete.
7843
7844           Enabled at levels -O, -O2, -O3, -Os.
7845
7846       -fcprop-registers
7847           After register allocation and post-register allocation instruction
7848           splitting, perform a copy-propagation pass to try to reduce
7849           scheduling dependencies and occasionally eliminate the copy.
7850
7851           Enabled at levels -O, -O2, -O3, -Os.
7852
7853       -fprofile-correction
7854           Profiles collected using an instrumented binary for multi-threaded
7855           programs may be inconsistent due to missed counter updates. When
7856           this option is specified, GCC uses heuristics to correct or smooth
7857           out such inconsistencies. By default, GCC emits an error message
7858           when an inconsistent profile is detected.
7859
7860       -fprofile-use
7861       -fprofile-use=path
7862           Enable profile feedback-directed optimizations, and the following
7863           optimizations which are generally profitable only with profile
7864           feedback available: -fbranch-probabilities, -fvpt, -funroll-loops,
7865           -fpeel-loops, -ftracer, -ftree-vectorize, and ftree-loop-
7866           distribute-patterns.
7867
7868           Before you can use this option, you must first generate profiling
7869           information.
7870
7871           By default, GCC emits an error message if the feedback profiles do
7872           not match the source code.  This error can be turned into a warning
7873           by using -Wcoverage-mismatch.  Note this may result in poorly
7874           optimized code.
7875
7876           If path is specified, GCC looks at the path to find the profile
7877           feedback data files. See -fprofile-dir.
7878
7879       -fauto-profile
7880       -fauto-profile=path
7881           Enable sampling-based feedback-directed optimizations, and the
7882           following optimizations which are generally profitable only with
7883           profile feedback available: -fbranch-probabilities, -fvpt,
7884           -funroll-loops, -fpeel-loops, -ftracer, -ftree-vectorize,
7885           -finline-functions, -fipa-cp, -fipa-cp-clone,
7886           -fpredictive-commoning, -funswitch-loops, -fgcse-after-reload, and
7887           -ftree-loop-distribute-patterns.
7888
7889           path is the name of a file containing AutoFDO profile information.
7890           If omitted, it defaults to fbdata.afdo in the current directory.
7891
7892           Producing an AutoFDO profile data file requires running your
7893           program with the perf utility on a supported GNU/Linux target
7894           system.  For more information, see <https://perf.wiki.kernel.org/>.
7895
7896           E.g.
7897
7898                   perf record -e br_inst_retired:near_taken -b -o perf.data \
7899                       -- your_program
7900
7901           Then use the create_gcov tool to convert the raw profile data to a
7902           format that can be used by GCC.  You must also supply the
7903           unstripped binary for your program to this tool.  See
7904           <https://github.com/google/autofdo>.
7905
7906           E.g.
7907
7908                   create_gcov --binary=your_program.unstripped --profile=perf.data \
7909                       --gcov=profile.afdo
7910
7911       The following options control compiler behavior regarding floating-
7912       point arithmetic.  These options trade off between speed and
7913       correctness.  All must be specifically enabled.
7914
7915       -ffloat-store
7916           Do not store floating-point variables in registers, and inhibit
7917           other options that might change whether a floating-point value is
7918           taken from a register or memory.
7919
7920           This option prevents undesirable excess precision on machines such
7921           as the 68000 where the floating registers (of the 68881) keep more
7922           precision than a "double" is supposed to have.  Similarly for the
7923           x86 architecture.  For most programs, the excess precision does
7924           only good, but a few programs rely on the precise definition of
7925           IEEE floating point.  Use -ffloat-store for such programs, after
7926           modifying them to store all pertinent intermediate computations
7927           into variables.
7928
7929       -fexcess-precision=style
7930           This option allows further control over excess precision on
7931           machines where floating-point operations occur in a format with
7932           more precision or range than the IEEE standard and interchange
7933           floating-point types.  By default, -fexcess-precision=fast is in
7934           effect; this means that operations may be carried out in a wider
7935           precision than the types specified in the source if that would
7936           result in faster code, and it is unpredictable when rounding to the
7937           types specified in the source code takes place.  When compiling C,
7938           if -fexcess-precision=standard is specified then excess precision
7939           follows the rules specified in ISO C99; in particular, both casts
7940           and assignments cause values to be rounded to their semantic types
7941           (whereas -ffloat-store only affects assignments).  This option is
7942           enabled by default for C if a strict conformance option such as
7943           -std=c99 is used.  -ffast-math enables -fexcess-precision=fast by
7944           default regardless of whether a strict conformance option is used.
7945
7946           -fexcess-precision=standard is not implemented for languages other
7947           than C.  On the x86, it has no effect if -mfpmath=sse or
7948           -mfpmath=sse+387 is specified; in the former case, IEEE semantics
7949           apply without excess precision, and in the latter, rounding is
7950           unpredictable.
7951
7952       -ffast-math
7953           Sets the options -fno-math-errno, -funsafe-math-optimizations,
7954           -ffinite-math-only, -fno-rounding-math, -fno-signaling-nans,
7955           -fcx-limited-range and -fexcess-precision=fast.
7956
7957           This option causes the preprocessor macro "__FAST_MATH__" to be
7958           defined.
7959
7960           This option is not turned on by any -O option besides -Ofast since
7961           it can result in incorrect output for programs that depend on an
7962           exact implementation of IEEE or ISO rules/specifications for math
7963           functions. It may, however, yield faster code for programs that do
7964           not require the guarantees of these specifications.
7965
7966       -fno-math-errno
7967           Do not set "errno" after calling math functions that are executed
7968           with a single instruction, e.g., "sqrt".  A program that relies on
7969           IEEE exceptions for math error handling may want to use this flag
7970           for speed while maintaining IEEE arithmetic compatibility.
7971
7972           This option is not turned on by any -O option since it can result
7973           in incorrect output for programs that depend on an exact
7974           implementation of IEEE or ISO rules/specifications for math
7975           functions. It may, however, yield faster code for programs that do
7976           not require the guarantees of these specifications.
7977
7978           The default is -fmath-errno.
7979
7980           On Darwin systems, the math library never sets "errno".  There is
7981           therefore no reason for the compiler to consider the possibility
7982           that it might, and -fno-math-errno is the default.
7983
7984       -funsafe-math-optimizations
7985           Allow optimizations for floating-point arithmetic that (a) assume
7986           that arguments and results are valid and (b) may violate IEEE or
7987           ANSI standards.  When used at link time, it may include libraries
7988           or startup files that change the default FPU control word or other
7989           similar optimizations.
7990
7991           This option is not turned on by any -O option since it can result
7992           in incorrect output for programs that depend on an exact
7993           implementation of IEEE or ISO rules/specifications for math
7994           functions. It may, however, yield faster code for programs that do
7995           not require the guarantees of these specifications.  Enables
7996           -fno-signed-zeros, -fno-trapping-math, -fassociative-math and
7997           -freciprocal-math.
7998
7999           The default is -fno-unsafe-math-optimizations.
8000
8001       -fassociative-math
8002           Allow re-association of operands in series of floating-point
8003           operations.  This violates the ISO C and C++ language standard by
8004           possibly changing computation result.  NOTE: re-ordering may change
8005           the sign of zero as well as ignore NaNs and inhibit or create
8006           underflow or overflow (and thus cannot be used on code that relies
8007           on rounding behavior like "(x + 2**52) - 2**52".  May also reorder
8008           floating-point comparisons and thus may not be used when ordered
8009           comparisons are required.  This option requires that both
8010           -fno-signed-zeros and -fno-trapping-math be in effect.  Moreover,
8011           it doesn't make much sense with -frounding-math. For Fortran the
8012           option is automatically enabled when both -fno-signed-zeros and
8013           -fno-trapping-math are in effect.
8014
8015           The default is -fno-associative-math.
8016
8017       -freciprocal-math
8018           Allow the reciprocal of a value to be used instead of dividing by
8019           the value if this enables optimizations.  For example "x / y" can
8020           be replaced with "x * (1/y)", which is useful if "(1/y)" is subject
8021           to common subexpression elimination.  Note that this loses
8022           precision and increases the number of flops operating on the value.
8023
8024           The default is -fno-reciprocal-math.
8025
8026       -ffinite-math-only
8027           Allow optimizations for floating-point arithmetic that assume that
8028           arguments and results are not NaNs or +-Infs.
8029
8030           This option is not turned on by any -O option since it can result
8031           in incorrect output for programs that depend on an exact
8032           implementation of IEEE or ISO rules/specifications for math
8033           functions. It may, however, yield faster code for programs that do
8034           not require the guarantees of these specifications.
8035
8036           The default is -fno-finite-math-only.
8037
8038       -fno-signed-zeros
8039           Allow optimizations for floating-point arithmetic that ignore the
8040           signedness of zero.  IEEE arithmetic specifies the behavior of
8041           distinct +0.0 and -0.0 values, which then prohibits simplification
8042           of expressions such as x+0.0 or 0.0*x (even with
8043           -ffinite-math-only).  This option implies that the sign of a zero
8044           result isn't significant.
8045
8046           The default is -fsigned-zeros.
8047
8048       -fno-trapping-math
8049           Compile code assuming that floating-point operations cannot
8050           generate user-visible traps.  These traps include division by zero,
8051           overflow, underflow, inexact result and invalid operation.  This
8052           option requires that -fno-signaling-nans be in effect.  Setting
8053           this option may allow faster code if one relies on "non-stop" IEEE
8054           arithmetic, for example.
8055
8056           This option should never be turned on by any -O option since it can
8057           result in incorrect output for programs that depend on an exact
8058           implementation of IEEE or ISO rules/specifications for math
8059           functions.
8060
8061           The default is -ftrapping-math.
8062
8063       -frounding-math
8064           Disable transformations and optimizations that assume default
8065           floating-point rounding behavior.  This is round-to-zero for all
8066           floating point to integer conversions, and round-to-nearest for all
8067           other arithmetic truncations.  This option should be specified for
8068           programs that change the FP rounding mode dynamically, or that may
8069           be executed with a non-default rounding mode.  This option disables
8070           constant folding of floating-point expressions at compile time
8071           (which may be affected by rounding mode) and arithmetic
8072           transformations that are unsafe in the presence of sign-dependent
8073           rounding modes.
8074
8075           The default is -fno-rounding-math.
8076
8077           This option is experimental and does not currently guarantee to
8078           disable all GCC optimizations that are affected by rounding mode.
8079           Future versions of GCC may provide finer control of this setting
8080           using C99's "FENV_ACCESS" pragma.  This command-line option will be
8081           used to specify the default state for "FENV_ACCESS".
8082
8083       -fsignaling-nans
8084           Compile code assuming that IEEE signaling NaNs may generate user-
8085           visible traps during floating-point operations.  Setting this
8086           option disables optimizations that may change the number of
8087           exceptions visible with signaling NaNs.  This option implies
8088           -ftrapping-math.
8089
8090           This option causes the preprocessor macro "__SUPPORT_SNAN__" to be
8091           defined.
8092
8093           The default is -fno-signaling-nans.
8094
8095           This option is experimental and does not currently guarantee to
8096           disable all GCC optimizations that affect signaling NaN behavior.
8097
8098       -fno-fp-int-builtin-inexact
8099           Do not allow the built-in functions "ceil", "floor", "round" and
8100           "trunc", and their "float" and "long double" variants, to generate
8101           code that raises the "inexact" floating-point exception for
8102           noninteger arguments.  ISO C99 and C11 allow these functions to
8103           raise the "inexact" exception, but ISO/IEC TS 18661-1:2014, the C
8104           bindings to IEEE 754-2008, does not allow these functions to do so.
8105
8106           The default is -ffp-int-builtin-inexact, allowing the exception to
8107           be raised.  This option does nothing unless -ftrapping-math is in
8108           effect.
8109
8110           Even if -fno-fp-int-builtin-inexact is used, if the functions
8111           generate a call to a library function then the "inexact" exception
8112           may be raised if the library implementation does not follow TS
8113           18661.
8114
8115       -fsingle-precision-constant
8116           Treat floating-point constants as single precision instead of
8117           implicitly converting them to double-precision constants.
8118
8119       -fcx-limited-range
8120           When enabled, this option states that a range reduction step is not
8121           needed when performing complex division.  Also, there is no
8122           checking whether the result of a complex multiplication or division
8123           is "NaN + I*NaN", with an attempt to rescue the situation in that
8124           case.  The default is -fno-cx-limited-range, but is enabled by
8125           -ffast-math.
8126
8127           This option controls the default setting of the ISO C99
8128           "CX_LIMITED_RANGE" pragma.  Nevertheless, the option applies to all
8129           languages.
8130
8131       -fcx-fortran-rules
8132           Complex multiplication and division follow Fortran rules.  Range
8133           reduction is done as part of complex division, but there is no
8134           checking whether the result of a complex multiplication or division
8135           is "NaN + I*NaN", with an attempt to rescue the situation in that
8136           case.
8137
8138           The default is -fno-cx-fortran-rules.
8139
8140       The following options control optimizations that may improve
8141       performance, but are not enabled by any -O options.  This section
8142       includes experimental options that may produce broken code.
8143
8144       -fbranch-probabilities
8145           After running a program compiled with -fprofile-arcs, you can
8146           compile it a second time using -fbranch-probabilities, to improve
8147           optimizations based on the number of times each branch was taken.
8148           When a program compiled with -fprofile-arcs exits, it saves arc
8149           execution counts to a file called sourcename.gcda for each source
8150           file.  The information in this data file is very dependent on the
8151           structure of the generated code, so you must use the same source
8152           code and the same optimization options for both compilations.
8153
8154           With -fbranch-probabilities, GCC puts a REG_BR_PROB note on each
8155           JUMP_INSN and CALL_INSN.  These can be used to improve
8156           optimization.  Currently, they are only used in one place: in
8157           reorg.c, instead of guessing which path a branch is most likely to
8158           take, the REG_BR_PROB values are used to exactly determine which
8159           path is taken more often.
8160
8161       -fprofile-values
8162           If combined with -fprofile-arcs, it adds code so that some data
8163           about values of expressions in the program is gathered.
8164
8165           With -fbranch-probabilities, it reads back the data gathered from
8166           profiling values of expressions for usage in optimizations.
8167
8168           Enabled with -fprofile-generate and -fprofile-use.
8169
8170       -fprofile-reorder-functions
8171           Function reordering based on profile instrumentation collects first
8172           time of execution of a function and orders these functions in
8173           ascending order.
8174
8175           Enabled with -fprofile-use.
8176
8177       -fvpt
8178           If combined with -fprofile-arcs, this option instructs the compiler
8179           to add code to gather information about values of expressions.
8180
8181           With -fbranch-probabilities, it reads back the data gathered and
8182           actually performs the optimizations based on them.  Currently the
8183           optimizations include specialization of division operations using
8184           the knowledge about the value of the denominator.
8185
8186       -frename-registers
8187           Attempt to avoid false dependencies in scheduled code by making use
8188           of registers left over after register allocation.  This
8189           optimization most benefits processors with lots of registers.
8190           Depending on the debug information format adopted by the target,
8191           however, it can make debugging impossible, since variables no
8192           longer stay in a "home register".
8193
8194           Enabled by default with -funroll-loops.
8195
8196       -fschedule-fusion
8197           Performs a target dependent pass over the instruction stream to
8198           schedule instructions of same type together because target machine
8199           can execute them more efficiently if they are adjacent to each
8200           other in the instruction flow.
8201
8202           Enabled at levels -O2, -O3, -Os.
8203
8204       -ftracer
8205           Perform tail duplication to enlarge superblock size.  This
8206           transformation simplifies the control flow of the function allowing
8207           other optimizations to do a better job.
8208
8209           Enabled with -fprofile-use.
8210
8211       -funroll-loops
8212           Unroll loops whose number of iterations can be determined at
8213           compile time or upon entry to the loop.  -funroll-loops implies
8214           -frerun-cse-after-loop, -fweb and -frename-registers.  It also
8215           turns on complete loop peeling (i.e. complete removal of loops with
8216           a small constant number of iterations).  This option makes code
8217           larger, and may or may not make it run faster.
8218
8219           Enabled with -fprofile-use.
8220
8221       -funroll-all-loops
8222           Unroll all loops, even if their number of iterations is uncertain
8223           when the loop is entered.  This usually makes programs run more
8224           slowly.  -funroll-all-loops implies the same options as
8225           -funroll-loops.
8226
8227       -fpeel-loops
8228           Peels loops for which there is enough information that they do not
8229           roll much (from profile feedback or static analysis).  It also
8230           turns on complete loop peeling (i.e. complete removal of loops with
8231           small constant number of iterations).
8232
8233           Enabled with -O3 and/or -fprofile-use.
8234
8235       -fmove-loop-invariants
8236           Enables the loop invariant motion pass in the RTL loop optimizer.
8237           Enabled at level -O1
8238
8239       -fsplit-loops
8240           Split a loop into two if it contains a condition that's always true
8241           for one side of the iteration space and false for the other.
8242
8243       -funswitch-loops
8244           Move branches with loop invariant conditions out of the loop, with
8245           duplicates of the loop on both branches (modified according to
8246           result of the condition).
8247
8248       -ffunction-sections
8249       -fdata-sections
8250           Place each function or data item into its own section in the output
8251           file if the target supports arbitrary sections.  The name of the
8252           function or the name of the data item determines the section's name
8253           in the output file.
8254
8255           Use these options on systems where the linker can perform
8256           optimizations to improve locality of reference in the instruction
8257           space.  Most systems using the ELF object format have linkers with
8258           such optimizations.  On AIX, the linker rearranges sections
8259           (CSECTs) based on the call graph.  The performance impact varies.
8260
8261           Together with a linker garbage collection (linker --gc-sections
8262           option) these options may lead to smaller statically-linked
8263           executables (after stripping).
8264
8265           On ELF/DWARF systems these options do not degenerate the quality of
8266           the debug information.  There could be issues with other object
8267           files/debug info formats.
8268
8269           Only use these options when there are significant benefits from
8270           doing so.  When you specify these options, the assembler and linker
8271           create larger object and executable files and are also slower.
8272           These options affect code generation.  They prevent optimizations
8273           by the compiler and assembler using relative locations inside a
8274           translation unit since the locations are unknown until link time.
8275           An example of such an optimization is relaxing calls to short call
8276           instructions.
8277
8278       -fbranch-target-load-optimize
8279           Perform branch target register load optimization before prologue /
8280           epilogue threading.  The use of target registers can typically be
8281           exposed only during reload, thus hoisting loads out of loops and
8282           doing inter-block scheduling needs a separate optimization pass.
8283
8284       -fbranch-target-load-optimize2
8285           Perform branch target register load optimization after prologue /
8286           epilogue threading.
8287
8288       -fbtr-bb-exclusive
8289           When performing branch target register load optimization, don't
8290           reuse branch target registers within any basic block.
8291
8292       -fstdarg-opt
8293           Optimize the prologue of variadic argument functions with respect
8294           to usage of those arguments.
8295
8296       -fsection-anchors
8297           Try to reduce the number of symbolic address calculations by using
8298           shared "anchor" symbols to address nearby objects.  This
8299           transformation can help to reduce the number of GOT entries and GOT
8300           accesses on some targets.
8301
8302           For example, the implementation of the following function "foo":
8303
8304                   static int a, b, c;
8305                   int foo (void) { return a + b + c; }
8306
8307           usually calculates the addresses of all three variables, but if you
8308           compile it with -fsection-anchors, it accesses the variables from a
8309           common anchor point instead.  The effect is similar to the
8310           following pseudocode (which isn't valid C):
8311
8312                   int foo (void)
8313                   {
8314                     register int *xr = &x;
8315                     return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
8316                   }
8317
8318           Not all targets support this option.
8319
8320       --param name=value
8321           In some places, GCC uses various constants to control the amount of
8322           optimization that is done.  For example, GCC does not inline
8323           functions that contain more than a certain number of instructions.
8324           You can control some of these constants on the command line using
8325           the --param option.
8326
8327           The names of specific parameters, and the meaning of the values,
8328           are tied to the internals of the compiler, and are subject to
8329           change without notice in future releases.
8330
8331           In each case, the value is an integer.  The allowable choices for
8332           name are:
8333
8334           predictable-branch-outcome
8335               When branch is predicted to be taken with probability lower
8336               than this threshold (in percent), then it is considered well
8337               predictable. The default is 10.
8338
8339           max-rtl-if-conversion-insns
8340               RTL if-conversion tries to remove conditional branches around a
8341               block and replace them with conditionally executed
8342               instructions.  This parameter gives the maximum number of
8343               instructions in a block which should be considered for if-
8344               conversion.  The default is 10, though the compiler will also
8345               use other heuristics to decide whether if-conversion is likely
8346               to be profitable.
8347
8348           max-rtl-if-conversion-predictable-cost
8349           max-rtl-if-conversion-unpredictable-cost
8350               RTL if-conversion will try to remove conditional branches
8351               around a block and replace them with conditionally executed
8352               instructions.  These parameters give the maximum permissible
8353               cost for the sequence that would be generated by if-conversion
8354               depending on whether the branch is statically determined to be
8355               predictable or not.  The units for this parameter are the same
8356               as those for the GCC internal seq_cost metric.  The compiler
8357               will try to provide a reasonable default for this parameter
8358               using the BRANCH_COST target macro.
8359
8360           max-crossjump-edges
8361               The maximum number of incoming edges to consider for cross-
8362               jumping.  The algorithm used by -fcrossjumping is O(N^2) in the
8363               number of edges incoming to each block.  Increasing values mean
8364               more aggressive optimization, making the compilation time
8365               increase with probably small improvement in executable size.
8366
8367           min-crossjump-insns
8368               The minimum number of instructions that must be matched at the
8369               end of two blocks before cross-jumping is performed on them.
8370               This value is ignored in the case where all instructions in the
8371               block being cross-jumped from are matched.  The default value
8372               is 5.
8373
8374           max-grow-copy-bb-insns
8375               The maximum code size expansion factor when copying basic
8376               blocks instead of jumping.  The expansion is relative to a jump
8377               instruction.  The default value is 8.
8378
8379           max-goto-duplication-insns
8380               The maximum number of instructions to duplicate to a block that
8381               jumps to a computed goto.  To avoid O(N^2) behavior in a number
8382               of passes, GCC factors computed gotos early in the compilation
8383               process, and unfactors them as late as possible.  Only computed
8384               jumps at the end of a basic blocks with no more than max-goto-
8385               duplication-insns are unfactored.  The default value is 8.
8386
8387           max-delay-slot-insn-search
8388               The maximum number of instructions to consider when looking for
8389               an instruction to fill a delay slot.  If more than this
8390               arbitrary number of instructions are searched, the time savings
8391               from filling the delay slot are minimal, so stop searching.
8392               Increasing values mean more aggressive optimization, making the
8393               compilation time increase with probably small improvement in
8394               execution time.
8395
8396           max-delay-slot-live-search
8397               When trying to fill delay slots, the maximum number of
8398               instructions to consider when searching for a block with valid
8399               live register information.  Increasing this arbitrarily chosen
8400               value means more aggressive optimization, increasing the
8401               compilation time.  This parameter should be removed when the
8402               delay slot code is rewritten to maintain the control-flow
8403               graph.
8404
8405           max-gcse-memory
8406               The approximate maximum amount of memory that can be allocated
8407               in order to perform the global common subexpression elimination
8408               optimization.  If more memory than specified is required, the
8409               optimization is not done.
8410
8411           max-gcse-insertion-ratio
8412               If the ratio of expression insertions to deletions is larger
8413               than this value for any expression, then RTL PRE inserts or
8414               removes the expression and thus leaves partially redundant
8415               computations in the instruction stream.  The default value is
8416               20.
8417
8418           max-pending-list-length
8419               The maximum number of pending dependencies scheduling allows
8420               before flushing the current state and starting over.  Large
8421               functions with few branches or calls can create excessively
8422               large lists which needlessly consume memory and resources.
8423
8424           max-modulo-backtrack-attempts
8425               The maximum number of backtrack attempts the scheduler should
8426               make when modulo scheduling a loop.  Larger values can
8427               exponentially increase compilation time.
8428
8429           max-inline-insns-single
8430               Several parameters control the tree inliner used in GCC.  This
8431               number sets the maximum number of instructions (counted in
8432               GCC's internal representation) in a single function that the
8433               tree inliner considers for inlining.  This only affects
8434               functions declared inline and methods implemented in a class
8435               declaration (C++).  The default value is 400.
8436
8437           max-inline-insns-auto
8438               When you use -finline-functions (included in -O3), a lot of
8439               functions that would otherwise not be considered for inlining
8440               by the compiler are investigated.  To those functions, a
8441               different (more restrictive) limit compared to functions
8442               declared inline can be applied.  The default value is 30.
8443
8444           inline-min-speedup
8445               When estimated performance improvement of caller + callee
8446               runtime exceeds this threshold (in percent), the function can
8447               be inlined regardless of the limit on --param max-inline-insns-
8448               single and --param max-inline-insns-auto.  The default value is
8449               15.
8450
8451           large-function-insns
8452               The limit specifying really large functions.  For functions
8453               larger than this limit after inlining, inlining is constrained
8454               by --param large-function-growth.  This parameter is useful
8455               primarily to avoid extreme compilation time caused by non-
8456               linear algorithms used by the back end.  The default value is
8457               2700.
8458
8459           large-function-growth
8460               Specifies maximal growth of large function caused by inlining
8461               in percents.  The default value is 100 which limits large
8462               function growth to 2.0 times the original size.
8463
8464           large-unit-insns
8465               The limit specifying large translation unit.  Growth caused by
8466               inlining of units larger than this limit is limited by --param
8467               inline-unit-growth.  For small units this might be too tight.
8468               For example, consider a unit consisting of function A that is
8469               inline and B that just calls A three times.  If B is small
8470               relative to A, the growth of unit is 300\% and yet such
8471               inlining is very sane.  For very large units consisting of
8472               small inlineable functions, however, the overall unit growth
8473               limit is needed to avoid exponential explosion of code size.
8474               Thus for smaller units, the size is increased to --param large-
8475               unit-insns before applying --param inline-unit-growth.  The
8476               default is 10000.
8477
8478           inline-unit-growth
8479               Specifies maximal overall growth of the compilation unit caused
8480               by inlining.  The default value is 20 which limits unit growth
8481               to 1.2 times the original size. Cold functions (either marked
8482               cold via an attribute or by profile feedback) are not accounted
8483               into the unit size.
8484
8485           ipcp-unit-growth
8486               Specifies maximal overall growth of the compilation unit caused
8487               by interprocedural constant propagation.  The default value is
8488               10 which limits unit growth to 1.1 times the original size.
8489
8490           large-stack-frame
8491               The limit specifying large stack frames.  While inlining the
8492               algorithm is trying to not grow past this limit too much.  The
8493               default value is 256 bytes.
8494
8495           large-stack-frame-growth
8496               Specifies maximal growth of large stack frames caused by
8497               inlining in percents.  The default value is 1000 which limits
8498               large stack frame growth to 11 times the original size.
8499
8500           max-inline-insns-recursive
8501           max-inline-insns-recursive-auto
8502               Specifies the maximum number of instructions an out-of-line
8503               copy of a self-recursive inline function can grow into by
8504               performing recursive inlining.
8505
8506               --param max-inline-insns-recursive applies to functions
8507               declared inline.  For functions not declared inline, recursive
8508               inlining happens only when -finline-functions (included in -O3)
8509               is enabled; --param max-inline-insns-recursive-auto applies
8510               instead.  The default value is 450.
8511
8512           max-inline-recursive-depth
8513           max-inline-recursive-depth-auto
8514               Specifies the maximum recursion depth used for recursive
8515               inlining.
8516
8517               --param max-inline-recursive-depth applies to functions
8518               declared inline.  For functions not declared inline, recursive
8519               inlining happens only when -finline-functions (included in -O3)
8520               is enabled; --param max-inline-recursive-depth-auto applies
8521               instead.  The default value is 8.
8522
8523           min-inline-recursive-probability
8524               Recursive inlining is profitable only for function having deep
8525               recursion in average and can hurt for function having little
8526               recursion depth by increasing the prologue size or complexity
8527               of function body to other optimizers.
8528
8529               When profile feedback is available (see -fprofile-generate) the
8530               actual recursion depth can be guessed from the probability that
8531               function recurses via a given call expression.  This parameter
8532               limits inlining only to call expressions whose probability
8533               exceeds the given threshold (in percents).  The default value
8534               is 10.
8535
8536           early-inlining-insns
8537               Specify growth that the early inliner can make.  In effect it
8538               increases the amount of inlining for code having a large
8539               abstraction penalty.  The default value is 14.
8540
8541           max-early-inliner-iterations
8542               Limit of iterations of the early inliner.  This basically
8543               bounds the number of nested indirect calls the early inliner
8544               can resolve.  Deeper chains are still handled by late inlining.
8545
8546           comdat-sharing-probability
8547               Probability (in percent) that C++ inline function with comdat
8548               visibility are shared across multiple compilation units.  The
8549               default value is 20.
8550
8551           profile-func-internal-id
8552               A parameter to control whether to use function internal id in
8553               profile database lookup. If the value is 0, the compiler uses
8554               an id that is based on function assembler name and filename,
8555               which makes old profile data more tolerant to source changes
8556               such as function reordering etc.  The default value is 0.
8557
8558           min-vect-loop-bound
8559               The minimum number of iterations under which loops are not
8560               vectorized when -ftree-vectorize is used.  The number of
8561               iterations after vectorization needs to be greater than the
8562               value specified by this option to allow vectorization.  The
8563               default value is 0.
8564
8565           gcse-cost-distance-ratio
8566               Scaling factor in calculation of maximum distance an expression
8567               can be moved by GCSE optimizations.  This is currently
8568               supported only in the code hoisting pass.  The bigger the
8569               ratio, the more aggressive code hoisting is with simple
8570               expressions, i.e., the expressions that have cost less than
8571               gcse-unrestricted-cost.  Specifying 0 disables hoisting of
8572               simple expressions.  The default value is 10.
8573
8574           gcse-unrestricted-cost
8575               Cost, roughly measured as the cost of a single typical machine
8576               instruction, at which GCSE optimizations do not constrain the
8577               distance an expression can travel.  This is currently supported
8578               only in the code hoisting pass.  The lesser the cost, the more
8579               aggressive code hoisting is.  Specifying 0 allows all
8580               expressions to travel unrestricted distances.  The default
8581               value is 3.
8582
8583           max-hoist-depth
8584               The depth of search in the dominator tree for expressions to
8585               hoist.  This is used to avoid quadratic behavior in hoisting
8586               algorithm.  The value of 0 does not limit on the search, but
8587               may slow down compilation of huge functions.  The default value
8588               is 30.
8589
8590           max-tail-merge-comparisons
8591               The maximum amount of similar bbs to compare a bb with.  This
8592               is used to avoid quadratic behavior in tree tail merging.  The
8593               default value is 10.
8594
8595           max-tail-merge-iterations
8596               The maximum amount of iterations of the pass over the function.
8597               This is used to limit compilation time in tree tail merging.
8598               The default value is 2.
8599
8600           store-merging-allow-unaligned
8601               Allow the store merging pass to introduce unaligned stores if
8602               it is legal to do so.  The default value is 1.
8603
8604           max-stores-to-merge
8605               The maximum number of stores to attempt to merge into wider
8606               stores in the store merging pass.  The minimum value is 2 and
8607               the default is 64.
8608
8609           max-unrolled-insns
8610               The maximum number of instructions that a loop may have to be
8611               unrolled.  If a loop is unrolled, this parameter also
8612               determines how many times the loop code is unrolled.
8613
8614           max-average-unrolled-insns
8615               The maximum number of instructions biased by probabilities of
8616               their execution that a loop may have to be unrolled.  If a loop
8617               is unrolled, this parameter also determines how many times the
8618               loop code is unrolled.
8619
8620           max-unroll-times
8621               The maximum number of unrollings of a single loop.
8622
8623           max-peeled-insns
8624               The maximum number of instructions that a loop may have to be
8625               peeled.  If a loop is peeled, this parameter also determines
8626               how many times the loop code is peeled.
8627
8628           max-peel-times
8629               The maximum number of peelings of a single loop.
8630
8631           max-peel-branches
8632               The maximum number of branches on the hot path through the
8633               peeled sequence.
8634
8635           max-completely-peeled-insns
8636               The maximum number of insns of a completely peeled loop.
8637
8638           max-completely-peel-times
8639               The maximum number of iterations of a loop to be suitable for
8640               complete peeling.
8641
8642           max-completely-peel-loop-nest-depth
8643               The maximum depth of a loop nest suitable for complete peeling.
8644
8645           max-unswitch-insns
8646               The maximum number of insns of an unswitched loop.
8647
8648           max-unswitch-level
8649               The maximum number of branches unswitched in a single loop.
8650
8651           max-loop-headers-insns
8652               The maximum number of insns in loop header duplicated by the
8653               copy loop headers pass.
8654
8655           lim-expensive
8656               The minimum cost of an expensive expression in the loop
8657               invariant motion.
8658
8659           iv-consider-all-candidates-bound
8660               Bound on number of candidates for induction variables, below
8661               which all candidates are considered for each use in induction
8662               variable optimizations.  If there are more candidates than
8663               this, only the most relevant ones are considered to avoid
8664               quadratic time complexity.
8665
8666           iv-max-considered-uses
8667               The induction variable optimizations give up on loops that
8668               contain more induction variable uses.
8669
8670           iv-always-prune-cand-set-bound
8671               If the number of candidates in the set is smaller than this
8672               value, always try to remove unnecessary ivs from the set when
8673               adding a new one.
8674
8675           avg-loop-niter
8676               Average number of iterations of a loop.
8677
8678           dse-max-object-size
8679               Maximum size (in bytes) of objects tracked bytewise by dead
8680               store elimination.  Larger values may result in larger
8681               compilation times.
8682
8683           scev-max-expr-size
8684               Bound on size of expressions used in the scalar evolutions
8685               analyzer.  Large expressions slow the analyzer.
8686
8687           scev-max-expr-complexity
8688               Bound on the complexity of the expressions in the scalar
8689               evolutions analyzer.  Complex expressions slow the analyzer.
8690
8691           max-tree-if-conversion-phi-args
8692               Maximum number of arguments in a PHI supported by TREE if
8693               conversion unless the loop is marked with simd pragma.
8694
8695           vect-max-version-for-alignment-checks
8696               The maximum number of run-time checks that can be performed
8697               when doing loop versioning for alignment in the vectorizer.
8698
8699           vect-max-version-for-alias-checks
8700               The maximum number of run-time checks that can be performed
8701               when doing loop versioning for alias in the vectorizer.
8702
8703           vect-max-peeling-for-alignment
8704               The maximum number of loop peels to enhance access alignment
8705               for vectorizer. Value -1 means no limit.
8706
8707           max-iterations-to-track
8708               The maximum number of iterations of a loop the brute-force
8709               algorithm for analysis of the number of iterations of the loop
8710               tries to evaluate.
8711
8712           hot-bb-count-ws-permille
8713               A basic block profile count is considered hot if it contributes
8714               to the given permillage (i.e. 0...1000) of the entire profiled
8715               execution.
8716
8717           hot-bb-frequency-fraction
8718               Select fraction of the entry block frequency of executions of
8719               basic block in function given basic block needs to have to be
8720               considered hot.
8721
8722           max-predicted-iterations
8723               The maximum number of loop iterations we predict statically.
8724               This is useful in cases where a function contains a single loop
8725               with known bound and another loop with unknown bound.  The
8726               known number of iterations is predicted correctly, while the
8727               unknown number of iterations average to roughly 10.  This means
8728               that the loop without bounds appears artificially cold relative
8729               to the other one.
8730
8731           builtin-expect-probability
8732               Control the probability of the expression having the specified
8733               value. This parameter takes a percentage (i.e. 0 ... 100) as
8734               input.  The default probability of 90 is obtained empirically.
8735
8736           align-threshold
8737               Select fraction of the maximal frequency of executions of a
8738               basic block in a function to align the basic block.
8739
8740           align-loop-iterations
8741               A loop expected to iterate at least the selected number of
8742               iterations is aligned.
8743
8744           tracer-dynamic-coverage
8745           tracer-dynamic-coverage-feedback
8746               This value is used to limit superblock formation once the given
8747               percentage of executed instructions is covered.  This limits
8748               unnecessary code size expansion.
8749
8750               The tracer-dynamic-coverage-feedback parameter is used only
8751               when profile feedback is available.  The real profiles (as
8752               opposed to statically estimated ones) are much less balanced
8753               allowing the threshold to be larger value.
8754
8755           tracer-max-code-growth
8756               Stop tail duplication once code growth has reached given
8757               percentage.  This is a rather artificial limit, as most of the
8758               duplicates are eliminated later in cross jumping, so it may be
8759               set to much higher values than is the desired code growth.
8760
8761           tracer-min-branch-ratio
8762               Stop reverse growth when the reverse probability of best edge
8763               is less than this threshold (in percent).
8764
8765           tracer-min-branch-probability
8766           tracer-min-branch-probability-feedback
8767               Stop forward growth if the best edge has probability lower than
8768               this threshold.
8769
8770               Similarly to tracer-dynamic-coverage two parameters are
8771               provided.  tracer-min-branch-probability-feedback is used for
8772               compilation with profile feedback and tracer-min-branch-
8773               probability compilation without.  The value for compilation
8774               with profile feedback needs to be more conservative (higher) in
8775               order to make tracer effective.
8776
8777           stack-clash-protection-guard-size
8778               Specify the size of the operating system provided stack guard
8779               as 2 raised to num bytes.  The default value is 12 (4096
8780               bytes).  Acceptable values are between 12 and 30.  Higher
8781               values may reduce the number of explicit probes, but a value
8782               larger than the operating system provided guard will leave code
8783               vulnerable to stack clash style attacks.
8784
8785           stack-clash-protection-probe-interval
8786               Stack clash protection involves probing stack space as it is
8787               allocated.  This param controls the maximum distance between
8788               probes into the stack as 2 raised to num bytes.  Acceptable
8789               values are between 10 and 16 and defaults to 12.  Higher values
8790               may reduce the number of explicit probes, but a value larger
8791               than the operating system provided guard will leave code
8792               vulnerable to stack clash style attacks.
8793
8794           max-cse-path-length
8795               The maximum number of basic blocks on path that CSE considers.
8796               The default is 10.
8797
8798           max-cse-insns
8799               The maximum number of instructions CSE processes before
8800               flushing.  The default is 1000.
8801
8802           ggc-min-expand
8803               GCC uses a garbage collector to manage its own memory
8804               allocation.  This parameter specifies the minimum percentage by
8805               which the garbage collector's heap should be allowed to expand
8806               between collections.  Tuning this may improve compilation
8807               speed; it has no effect on code generation.
8808
8809               The default is 30% + 70% * (RAM/1GB) with an upper bound of
8810               100% when RAM >= 1GB.  If "getrlimit" is available, the notion
8811               of "RAM" is the smallest of actual RAM and "RLIMIT_DATA" or
8812               "RLIMIT_AS".  If GCC is not able to calculate RAM on a
8813               particular platform, the lower bound of 30% is used.  Setting
8814               this parameter and ggc-min-heapsize to zero causes a full
8815               collection to occur at every opportunity.  This is extremely
8816               slow, but can be useful for debugging.
8817
8818           ggc-min-heapsize
8819               Minimum size of the garbage collector's heap before it begins
8820               bothering to collect garbage.  The first collection occurs
8821               after the heap expands by ggc-min-expand% beyond ggc-min-
8822               heapsize.  Again, tuning this may improve compilation speed,
8823               and has no effect on code generation.
8824
8825               The default is the smaller of RAM/8, RLIMIT_RSS, or a limit
8826               that tries to ensure that RLIMIT_DATA or RLIMIT_AS are not
8827               exceeded, but with a lower bound of 4096 (four megabytes) and
8828               an upper bound of 131072 (128 megabytes).  If GCC is not able
8829               to calculate RAM on a particular platform, the lower bound is
8830               used.  Setting this parameter very large effectively disables
8831               garbage collection.  Setting this parameter and ggc-min-expand
8832               to zero causes a full collection to occur at every opportunity.
8833
8834           max-reload-search-insns
8835               The maximum number of instruction reload should look backward
8836               for equivalent register.  Increasing values mean more
8837               aggressive optimization, making the compilation time increase
8838               with probably slightly better performance.  The default value
8839               is 100.
8840
8841           max-cselib-memory-locations
8842               The maximum number of memory locations cselib should take into
8843               account.  Increasing values mean more aggressive optimization,
8844               making the compilation time increase with probably slightly
8845               better performance.  The default value is 500.
8846
8847           max-sched-ready-insns
8848               The maximum number of instructions ready to be issued the
8849               scheduler should consider at any given time during the first
8850               scheduling pass.  Increasing values mean more thorough
8851               searches, making the compilation time increase with probably
8852               little benefit.  The default value is 100.
8853
8854           max-sched-region-blocks
8855               The maximum number of blocks in a region to be considered for
8856               interblock scheduling.  The default value is 10.
8857
8858           max-pipeline-region-blocks
8859               The maximum number of blocks in a region to be considered for
8860               pipelining in the selective scheduler.  The default value is
8861               15.
8862
8863           max-sched-region-insns
8864               The maximum number of insns in a region to be considered for
8865               interblock scheduling.  The default value is 100.
8866
8867           max-pipeline-region-insns
8868               The maximum number of insns in a region to be considered for
8869               pipelining in the selective scheduler.  The default value is
8870               200.
8871
8872           min-spec-prob
8873               The minimum probability (in percents) of reaching a source
8874               block for interblock speculative scheduling.  The default value
8875               is 40.
8876
8877           max-sched-extend-regions-iters
8878               The maximum number of iterations through CFG to extend regions.
8879               A value of 0 (the default) disables region extensions.
8880
8881           max-sched-insn-conflict-delay
8882               The maximum conflict delay for an insn to be considered for
8883               speculative motion.  The default value is 3.
8884
8885           sched-spec-prob-cutoff
8886               The minimal probability of speculation success (in percents),
8887               so that speculative insns are scheduled.  The default value is
8888               40.
8889
8890           sched-state-edge-prob-cutoff
8891               The minimum probability an edge must have for the scheduler to
8892               save its state across it.  The default value is 10.
8893
8894           sched-mem-true-dep-cost
8895               Minimal distance (in CPU cycles) between store and load
8896               targeting same memory locations.  The default value is 1.
8897
8898           selsched-max-lookahead
8899               The maximum size of the lookahead window of selective
8900               scheduling.  It is a depth of search for available
8901               instructions.  The default value is 50.
8902
8903           selsched-max-sched-times
8904               The maximum number of times that an instruction is scheduled
8905               during selective scheduling.  This is the limit on the number
8906               of iterations through which the instruction may be pipelined.
8907               The default value is 2.
8908
8909           selsched-insns-to-rename
8910               The maximum number of best instructions in the ready list that
8911               are considered for renaming in the selective scheduler.  The
8912               default value is 2.
8913
8914           sms-min-sc
8915               The minimum value of stage count that swing modulo scheduler
8916               generates.  The default value is 2.
8917
8918           max-last-value-rtl
8919               The maximum size measured as number of RTLs that can be
8920               recorded in an expression in combiner for a pseudo register as
8921               last known value of that register.  The default is 10000.
8922
8923           max-combine-insns
8924               The maximum number of instructions the RTL combiner tries to
8925               combine.  The default value is 2 at -Og and 4 otherwise.
8926
8927           integer-share-limit
8928               Small integer constants can use a shared data structure,
8929               reducing the compiler's memory usage and increasing its speed.
8930               This sets the maximum value of a shared integer constant.  The
8931               default value is 256.
8932
8933           ssp-buffer-size
8934               The minimum size of buffers (i.e. arrays) that receive stack
8935               smashing protection when -fstack-protection is used.
8936
8937           min-size-for-stack-sharing
8938               The minimum size of variables taking part in stack slot sharing
8939               when not optimizing. The default value is 32.
8940
8941           max-jump-thread-duplication-stmts
8942               Maximum number of statements allowed in a block that needs to
8943               be duplicated when threading jumps.
8944
8945           max-fields-for-field-sensitive
8946               Maximum number of fields in a structure treated in a field
8947               sensitive manner during pointer analysis.  The default is zero
8948               for -O0 and -O1, and 100 for -Os, -O2, and -O3.
8949
8950           prefetch-latency
8951               Estimate on average number of instructions that are executed
8952               before prefetch finishes.  The distance prefetched ahead is
8953               proportional to this constant.  Increasing this number may also
8954               lead to less streams being prefetched (see simultaneous-
8955               prefetches).
8956
8957           simultaneous-prefetches
8958               Maximum number of prefetches that can run at the same time.
8959
8960           l1-cache-line-size
8961               The size of cache line in L1 cache, in bytes.
8962
8963           l1-cache-size
8964               The size of L1 cache, in kilobytes.
8965
8966           l2-cache-size
8967               The size of L2 cache, in kilobytes.
8968
8969           loop-interchange-max-num-stmts
8970               The maximum number of stmts in a loop to be interchanged.
8971
8972           loop-interchange-stride-ratio
8973               The minimum ratio between stride of two loops for interchange
8974               to be profitable.
8975
8976           min-insn-to-prefetch-ratio
8977               The minimum ratio between the number of instructions and the
8978               number of prefetches to enable prefetching in a loop.
8979
8980           prefetch-min-insn-to-mem-ratio
8981               The minimum ratio between the number of instructions and the
8982               number of memory references to enable prefetching in a loop.
8983
8984           use-canonical-types
8985               Whether the compiler should use the "canonical" type system.
8986               By default, this should always be 1, which uses a more
8987               efficient internal mechanism for comparing types in C++ and
8988               Objective-C++.  However, if bugs in the canonical type system
8989               are causing compilation failures, set this value to 0 to
8990               disable canonical types.
8991
8992           switch-conversion-max-branch-ratio
8993               Switch initialization conversion refuses to create arrays that
8994               are bigger than switch-conversion-max-branch-ratio times the
8995               number of branches in the switch.
8996
8997           max-partial-antic-length
8998               Maximum length of the partial antic set computed during the
8999               tree partial redundancy elimination optimization (-ftree-pre)
9000               when optimizing at -O3 and above.  For some sorts of source
9001               code the enhanced partial redundancy elimination optimization
9002               can run away, consuming all of the memory available on the host
9003               machine.  This parameter sets a limit on the length of the sets
9004               that are computed, which prevents the runaway behavior.
9005               Setting a value of 0 for this parameter allows an unlimited set
9006               length.
9007
9008           sccvn-max-scc-size
9009               Maximum size of a strongly connected component (SCC) during
9010               SCCVN processing.  If this limit is hit, SCCVN processing for
9011               the whole function is not done and optimizations depending on
9012               it are disabled.  The default maximum SCC size is 10000.
9013
9014           sccvn-max-alias-queries-per-access
9015               Maximum number of alias-oracle queries we perform when looking
9016               for redundancies for loads and stores.  If this limit is hit
9017               the search is aborted and the load or store is not considered
9018               redundant.  The number of queries is algorithmically limited to
9019               the number of stores on all paths from the load to the function
9020               entry.  The default maximum number of queries is 1000.
9021
9022           ira-max-loops-num
9023               IRA uses regional register allocation by default.  If a
9024               function contains more loops than the number given by this
9025               parameter, only at most the given number of the most
9026               frequently-executed loops form regions for regional register
9027               allocation.  The default value of the parameter is 100.
9028
9029           ira-max-conflict-table-size
9030               Although IRA uses a sophisticated algorithm to compress the
9031               conflict table, the table can still require excessive amounts
9032               of memory for huge functions.  If the conflict table for a
9033               function could be more than the size in MB given by this
9034               parameter, the register allocator instead uses a faster,
9035               simpler, and lower-quality algorithm that does not require
9036               building a pseudo-register conflict table.  The default value
9037               of the parameter is 2000.
9038
9039           ira-loop-reserved-regs
9040               IRA can be used to evaluate more accurate register pressure in
9041               loops for decisions to move loop invariants (see -O3).  The
9042               number of available registers reserved for some other purposes
9043               is given by this parameter.  The default value of the parameter
9044               is 2, which is the minimal number of registers needed by
9045               typical instructions.  This value is the best found from
9046               numerous experiments.
9047
9048           lra-inheritance-ebb-probability-cutoff
9049               LRA tries to reuse values reloaded in registers in subsequent
9050               insns.  This optimization is called inheritance.  EBB is used
9051               as a region to do this optimization.  The parameter defines a
9052               minimal fall-through edge probability in percentage used to add
9053               BB to inheritance EBB in LRA.  The default value of the
9054               parameter is 40.  The value was chosen from numerous runs of
9055               SPEC2000 on x86-64.
9056
9057           loop-invariant-max-bbs-in-loop
9058               Loop invariant motion can be very expensive, both in
9059               compilation time and in amount of needed compile-time memory,
9060               with very large loops.  Loops with more basic blocks than this
9061               parameter won't have loop invariant motion optimization
9062               performed on them.  The default value of the parameter is 1000
9063               for -O1 and 10000 for -O2 and above.
9064
9065           loop-max-datarefs-for-datadeps
9066               Building data dependencies is expensive for very large loops.
9067               This parameter limits the number of data references in loops
9068               that are considered for data dependence analysis.  These large
9069               loops are no handled by the optimizations using loop data
9070               dependencies.  The default value is 1000.
9071
9072           max-vartrack-size
9073               Sets a maximum number of hash table slots to use during
9074               variable tracking dataflow analysis of any function.  If this
9075               limit is exceeded with variable tracking at assignments
9076               enabled, analysis for that function is retried without it,
9077               after removing all debug insns from the function.  If the limit
9078               is exceeded even without debug insns, var tracking analysis is
9079               completely disabled for the function.  Setting the parameter to
9080               zero makes it unlimited.
9081
9082           max-vartrack-expr-depth
9083               Sets a maximum number of recursion levels when attempting to
9084               map variable names or debug temporaries to value expressions.
9085               This trades compilation time for more complete debug
9086               information.  If this is set too low, value expressions that
9087               are available and could be represented in debug information may
9088               end up not being used; setting this higher may enable the
9089               compiler to find more complex debug expressions, but compile
9090               time and memory use may grow.  The default is 12.
9091
9092           max-debug-marker-count
9093               Sets a threshold on the number of debug markers (e.g. begin
9094               stmt markers) to avoid complexity explosion at inlining or
9095               expanding to RTL.  If a function has more such gimple stmts
9096               than the set limit, such stmts will be dropped from the inlined
9097               copy of a function, and from its RTL expansion.  The default is
9098               100000.
9099
9100           min-nondebug-insn-uid
9101               Use uids starting at this parameter for nondebug insns.  The
9102               range below the parameter is reserved exclusively for debug
9103               insns created by -fvar-tracking-assignments, but debug insns
9104               may get (non-overlapping) uids above it if the reserved range
9105               is exhausted.
9106
9107           ipa-sra-ptr-growth-factor
9108               IPA-SRA replaces a pointer to an aggregate with one or more new
9109               parameters only when their cumulative size is less or equal to
9110               ipa-sra-ptr-growth-factor times the size of the original
9111               pointer parameter.
9112
9113           sra-max-scalarization-size-Ospeed
9114           sra-max-scalarization-size-Osize
9115               The two Scalar Reduction of Aggregates passes (SRA and IPA-SRA)
9116               aim to replace scalar parts of aggregates with uses of
9117               independent scalar variables.  These parameters control the
9118               maximum size, in storage units, of aggregate which is
9119               considered for replacement when compiling for speed (sra-max-
9120               scalarization-size-Ospeed) or size (sra-max-scalarization-size-
9121               Osize) respectively.
9122
9123           tm-max-aggregate-size
9124               When making copies of thread-local variables in a transaction,
9125               this parameter specifies the size in bytes after which
9126               variables are saved with the logging functions as opposed to
9127               save/restore code sequence pairs.  This option only applies
9128               when using -fgnu-tm.
9129
9130           graphite-max-nb-scop-params
9131               To avoid exponential effects in the Graphite loop transforms,
9132               the number of parameters in a Static Control Part (SCoP) is
9133               bounded.  The default value is 10 parameters, a value of zero
9134               can be used to lift the bound.  A variable whose value is
9135               unknown at compilation time and defined outside a SCoP is a
9136               parameter of the SCoP.
9137
9138           loop-block-tile-size
9139               Loop blocking or strip mining transforms, enabled with
9140               -floop-block or -floop-strip-mine, strip mine each loop in the
9141               loop nest by a given number of iterations.  The strip length
9142               can be changed using the loop-block-tile-size parameter.  The
9143               default value is 51 iterations.
9144
9145           loop-unroll-jam-size
9146               Specify the unroll factor for the -floop-unroll-and-jam option.
9147               The default value is 4.
9148
9149           loop-unroll-jam-depth
9150               Specify the dimension to be unrolled (counting from the most
9151               inner loop) for the  -floop-unroll-and-jam.  The default value
9152               is 2.
9153
9154           ipa-cp-value-list-size
9155               IPA-CP attempts to track all possible values and types passed
9156               to a function's parameter in order to propagate them and
9157               perform devirtualization.  ipa-cp-value-list-size is the
9158               maximum number of values and types it stores per one formal
9159               parameter of a function.
9160
9161           ipa-cp-eval-threshold
9162               IPA-CP calculates its own score of cloning profitability
9163               heuristics and performs those cloning opportunities with scores
9164               that exceed ipa-cp-eval-threshold.
9165
9166           ipa-cp-recursion-penalty
9167               Percentage penalty the recursive functions will receive when
9168               they are evaluated for cloning.
9169
9170           ipa-cp-single-call-penalty
9171               Percentage penalty functions containing a single call to
9172               another function will receive when they are evaluated for
9173               cloning.
9174
9175           ipa-max-agg-items
9176               IPA-CP is also capable to propagate a number of scalar values
9177               passed in an aggregate. ipa-max-agg-items controls the maximum
9178               number of such values per one parameter.
9179
9180           ipa-cp-loop-hint-bonus
9181               When IPA-CP determines that a cloning candidate would make the
9182               number of iterations of a loop known, it adds a bonus of ipa-
9183               cp-loop-hint-bonus to the profitability score of the candidate.
9184
9185           ipa-cp-array-index-hint-bonus
9186               When IPA-CP determines that a cloning candidate would make the
9187               index of an array access known, it adds a bonus of ipa-cp-
9188               array-index-hint-bonus to the profitability score of the
9189               candidate.
9190
9191           ipa-max-aa-steps
9192               During its analysis of function bodies, IPA-CP employs alias
9193               analysis in order to track values pointed to by function
9194               parameters.  In order not spend too much time analyzing huge
9195               functions, it gives up and consider all memory clobbered after
9196               examining ipa-max-aa-steps statements modifying memory.
9197
9198           lto-partitions
9199               Specify desired number of partitions produced during WHOPR
9200               compilation.  The number of partitions should exceed the number
9201               of CPUs used for compilation.  The default value is 32.
9202
9203           lto-min-partition
9204               Size of minimal partition for WHOPR (in estimated
9205               instructions).  This prevents expenses of splitting very small
9206               programs into too many partitions.
9207
9208           lto-max-partition
9209               Size of max partition for WHOPR (in estimated instructions).
9210               to provide an upper bound for individual size of partition.
9211               Meant to be used only with balanced partitioning.
9212
9213           cxx-max-namespaces-for-diagnostic-help
9214               The maximum number of namespaces to consult for suggestions
9215               when C++ name lookup fails for an identifier.  The default is
9216               1000.
9217
9218           sink-frequency-threshold
9219               The maximum relative execution frequency (in percents) of the
9220               target block relative to a statement's original block to allow
9221               statement sinking of a statement.  Larger numbers result in
9222               more aggressive statement sinking.  The default value is 75.  A
9223               small positive adjustment is applied for statements with memory
9224               operands as those are even more profitable so sink.
9225
9226           max-stores-to-sink
9227               The maximum number of conditional store pairs that can be sunk.
9228               Set to 0 if either vectorization (-ftree-vectorize) or if-
9229               conversion (-ftree-loop-if-convert) is disabled.  The default
9230               is 2.
9231
9232           allow-store-data-races
9233               Allow optimizers to introduce new data races on stores.  Set to
9234               1 to allow, otherwise to 0.  This option is enabled by default
9235               at optimization level -Ofast.
9236
9237           case-values-threshold
9238               The smallest number of different values for which it is best to
9239               use a jump-table instead of a tree of conditional branches.  If
9240               the value is 0, use the default for the machine.  The default
9241               is 0.
9242
9243           tree-reassoc-width
9244               Set the maximum number of instructions executed in parallel in
9245               reassociated tree. This parameter overrides target dependent
9246               heuristics used by default if has non zero value.
9247
9248           sched-pressure-algorithm
9249               Choose between the two available implementations of
9250               -fsched-pressure.  Algorithm 1 is the original implementation
9251               and is the more likely to prevent instructions from being
9252               reordered.  Algorithm 2 was designed to be a compromise between
9253               the relatively conservative approach taken by algorithm 1 and
9254               the rather aggressive approach taken by the default scheduler.
9255               It relies more heavily on having a regular register file and
9256               accurate register pressure classes.  See haifa-sched.c in the
9257               GCC sources for more details.
9258
9259               The default choice depends on the target.
9260
9261           max-slsr-cand-scan
9262               Set the maximum number of existing candidates that are
9263               considered when seeking a basis for a new straight-line
9264               strength reduction candidate.
9265
9266           asan-globals
9267               Enable buffer overflow detection for global objects.  This kind
9268               of protection is enabled by default if you are using
9269               -fsanitize=address option.  To disable global objects
9270               protection use --param asan-globals=0.
9271
9272           asan-stack
9273               Enable buffer overflow detection for stack objects.  This kind
9274               of protection is enabled by default when using
9275               -fsanitize=address.  To disable stack protection use --param
9276               asan-stack=0 option.
9277
9278           asan-instrument-reads
9279               Enable buffer overflow detection for memory reads.  This kind
9280               of protection is enabled by default when using
9281               -fsanitize=address.  To disable memory reads protection use
9282               --param asan-instrument-reads=0.
9283
9284           asan-instrument-writes
9285               Enable buffer overflow detection for memory writes.  This kind
9286               of protection is enabled by default when using
9287               -fsanitize=address.  To disable memory writes protection use
9288               --param asan-instrument-writes=0 option.
9289
9290           asan-memintrin
9291               Enable detection for built-in functions.  This kind of
9292               protection is enabled by default when using -fsanitize=address.
9293               To disable built-in functions protection use --param
9294               asan-memintrin=0.
9295
9296           asan-use-after-return
9297               Enable detection of use-after-return.  This kind of protection
9298               is enabled by default when using the -fsanitize=address option.
9299               To disable it use --param asan-use-after-return=0.
9300
9301               Note: By default the check is disabled at run time.  To enable
9302               it, add "detect_stack_use_after_return=1" to the environment
9303               variable ASAN_OPTIONS.
9304
9305           asan-instrumentation-with-call-threshold
9306               If number of memory accesses in function being instrumented is
9307               greater or equal to this number, use callbacks instead of
9308               inline checks.  E.g. to disable inline code use --param
9309               asan-instrumentation-with-call-threshold=0.
9310
9311           use-after-scope-direct-emission-threshold
9312               If the size of a local variable in bytes is smaller or equal to
9313               this number, directly poison (or unpoison) shadow memory
9314               instead of using run-time callbacks.  The default value is 256.
9315
9316           chkp-max-ctor-size
9317               Static constructors generated by Pointer Bounds Checker may
9318               become very large and significantly increase compile time at
9319               optimization level -O1 and higher.  This parameter is a maximum
9320               number of statements in a single generated constructor.
9321               Default value is 5000.
9322
9323           max-fsm-thread-path-insns
9324               Maximum number of instructions to copy when duplicating blocks
9325               on a finite state automaton jump thread path.  The default is
9326               100.
9327
9328           max-fsm-thread-length
9329               Maximum number of basic blocks on a finite state automaton jump
9330               thread path.  The default is 10.
9331
9332           max-fsm-thread-paths
9333               Maximum number of new jump thread paths to create for a finite
9334               state automaton.  The default is 50.
9335
9336           parloops-chunk-size
9337               Chunk size of omp schedule for loops parallelized by parloops.
9338               The default is 0.
9339
9340           parloops-schedule
9341               Schedule type of omp schedule for loops parallelized by
9342               parloops (static, dynamic, guided, auto, runtime).  The default
9343               is static.
9344
9345           parloops-min-per-thread
9346               The minimum number of iterations per thread of an innermost
9347               parallelized loop for which the parallelized variant is
9348               prefered over the single threaded one.  The default is 100.
9349               Note that for a parallelized loop nest the minimum number of
9350               iterations of the outermost loop per thread is two.
9351
9352           max-ssa-name-query-depth
9353               Maximum depth of recursion when querying properties of SSA
9354               names in things like fold routines.  One level of recursion
9355               corresponds to following a use-def chain.
9356
9357           hsa-gen-debug-stores
9358               Enable emission of special debug stores within HSA kernels
9359               which are then read and reported by libgomp plugin.  Generation
9360               of these stores is disabled by default, use --param
9361               hsa-gen-debug-stores=1 to enable it.
9362
9363           max-speculative-devirt-maydefs
9364               The maximum number of may-defs we analyze when looking for a
9365               must-def specifying the dynamic type of an object that invokes
9366               a virtual call we may be able to devirtualize speculatively.
9367
9368           max-vrp-switch-assertions
9369               The maximum number of assertions to add along the default edge
9370               of a switch statement during VRP.  The default is 10.
9371
9372           unroll-jam-min-percent
9373               The minimum percentage of memory references that must be
9374               optimized away for the unroll-and-jam transformation to be
9375               considered profitable.
9376
9377           unroll-jam-max-unroll
9378               The maximum number of times the outer loop should be unrolled
9379               by the unroll-and-jam transformation.
9380
9381   Program Instrumentation Options
9382       GCC supports a number of command-line options that control adding run-
9383       time instrumentation to the code it normally generates.  For example,
9384       one purpose of instrumentation is collect profiling statistics for use
9385       in finding program hot spots, code coverage analysis, or profile-guided
9386       optimizations.  Another class of program instrumentation is adding run-
9387       time checking to detect programming errors like invalid pointer
9388       dereferences or out-of-bounds array accesses, as well as deliberately
9389       hostile attacks such as stack smashing or C++ vtable hijacking.  There
9390       is also a general hook which can be used to implement other forms of
9391       tracing or function-level instrumentation for debug or program analysis
9392       purposes.
9393
9394       -p  Generate extra code to write profile information suitable for the
9395           analysis program prof.  You must use this option when compiling the
9396           source files you want data about, and you must also use it when
9397           linking.
9398
9399       -pg Generate extra code to write profile information suitable for the
9400           analysis program gprof.  You must use this option when compiling
9401           the source files you want data about, and you must also use it when
9402           linking.
9403
9404       -fprofile-arcs
9405           Add code so that program flow arcs are instrumented.  During
9406           execution the program records how many times each branch and call
9407           is executed and how many times it is taken or returns.  On targets
9408           that support constructors with priority support, profiling properly
9409           handles constructors, destructors and C++ constructors (and
9410           destructors) of classes which are used as a type of a global
9411           variable.
9412
9413           When the compiled program exits it saves this data to a file called
9414           auxname.gcda for each source file.  The data may be used for
9415           profile-directed optimizations (-fbranch-probabilities), or for
9416           test coverage analysis (-ftest-coverage).  Each object file's
9417           auxname is generated from the name of the output file, if
9418           explicitly specified and it is not the final executable, otherwise
9419           it is the basename of the source file.  In both cases any suffix is
9420           removed (e.g. foo.gcda for input file dir/foo.c, or dir/foo.gcda
9421           for output file specified as -o dir/foo.o).
9422
9423       --coverage
9424           This option is used to compile and link code instrumented for
9425           coverage analysis.  The option is a synonym for -fprofile-arcs
9426           -ftest-coverage (when compiling) and -lgcov (when linking).  See
9427           the documentation for those options for more details.
9428
9429           *   Compile the source files with -fprofile-arcs plus optimization
9430               and code generation options.  For test coverage analysis, use
9431               the additional -ftest-coverage option.  You do not need to
9432               profile every source file in a program.
9433
9434           *   Compile the source files additionally with -fprofile-abs-path
9435               to create absolute path names in the .gcno files.  This allows
9436               gcov to find the correct sources in projects where compilations
9437               occur with different working directories.
9438
9439           *   Link your object files with -lgcov or -fprofile-arcs (the
9440               latter implies the former).
9441
9442           *   Run the program on a representative workload to generate the
9443               arc profile information.  This may be repeated any number of
9444               times.  You can run concurrent instances of your program, and
9445               provided that the file system supports locking, the data files
9446               will be correctly updated.  Unless a strict ISO C dialect
9447               option is in effect, "fork" calls are detected and correctly
9448               handled without double counting.
9449
9450           *   For profile-directed optimizations, compile the source files
9451               again with the same optimization and code generation options
9452               plus -fbranch-probabilities.
9453
9454           *   For test coverage analysis, use gcov to produce human readable
9455               information from the .gcno and .gcda files.  Refer to the gcov
9456               documentation for further information.
9457
9458           With -fprofile-arcs, for each function of your program GCC creates
9459           a program flow graph, then finds a spanning tree for the graph.
9460           Only arcs that are not on the spanning tree have to be
9461           instrumented: the compiler adds code to count the number of times
9462           that these arcs are executed.  When an arc is the only exit or only
9463           entrance to a block, the instrumentation code can be added to the
9464           block; otherwise, a new basic block must be created to hold the
9465           instrumentation code.
9466
9467       -ftest-coverage
9468           Produce a notes file that the gcov code-coverage utility can use to
9469           show program coverage.  Each source file's note file is called
9470           auxname.gcno.  Refer to the -fprofile-arcs option above for a
9471           description of auxname and instructions on how to generate test
9472           coverage data.  Coverage data matches the source files more closely
9473           if you do not optimize.
9474
9475       -fprofile-abs-path
9476           Automatically convert relative source file names to absolute path
9477           names in the .gcno files.  This allows gcov to find the correct
9478           sources in projects where compilations occur with different working
9479           directories.
9480
9481       -fprofile-dir=path
9482           Set the directory to search for the profile data files in to path.
9483           This option affects only the profile data generated by
9484           -fprofile-generate, -ftest-coverage, -fprofile-arcs and used by
9485           -fprofile-use and -fbranch-probabilities and its related options.
9486           Both absolute and relative paths can be used.  By default, GCC uses
9487           the current directory as path, thus the profile data file appears
9488           in the same directory as the object file.
9489
9490       -fprofile-generate
9491       -fprofile-generate=path
9492           Enable options usually used for instrumenting application to
9493           produce profile useful for later recompilation with profile
9494           feedback based optimization.  You must use -fprofile-generate both
9495           when compiling and when linking your program.
9496
9497           The following options are enabled: -fprofile-arcs,
9498           -fprofile-values, -fvpt.
9499
9500           If path is specified, GCC looks at the path to find the profile
9501           feedback data files. See -fprofile-dir.
9502
9503           To optimize the program based on the collected profile information,
9504           use -fprofile-use.
9505
9506       -fprofile-update=method
9507           Alter the update method for an application instrumented for profile
9508           feedback based optimization.  The method argument should be one of
9509           single, atomic or prefer-atomic.  The first one is useful for
9510           single-threaded applications, while the second one prevents profile
9511           corruption by emitting thread-safe code.
9512
9513           Warning: When an application does not properly join all threads (or
9514           creates an detached thread), a profile file can be still corrupted.
9515
9516           Using prefer-atomic would be transformed either to atomic, when
9517           supported by a target, or to single otherwise.  The GCC driver
9518           automatically selects prefer-atomic when -pthread is present in the
9519           command line.
9520
9521       -fsanitize=address
9522           Enable AddressSanitizer, a fast memory error detector.  Memory
9523           access instructions are instrumented to detect out-of-bounds and
9524           use-after-free bugs.  The option enables
9525           -fsanitize-address-use-after-scope.  See
9526           <https://github.com/google/sanitizers/wiki/AddressSanitizer> for
9527           more details.  The run-time behavior can be influenced using the
9528           ASAN_OPTIONS environment variable.  When set to "help=1", the
9529           available options are shown at startup of the instrumented program.
9530           See
9531           <https://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run-time-flags>
9532           for a list of supported options.  The option cannot be combined
9533           with -fsanitize=thread and/or -fcheck-pointer-bounds.
9534
9535       -fsanitize=kernel-address
9536           Enable AddressSanitizer for Linux kernel.  See
9537           <https://github.com/google/kasan/wiki> for more details.  The
9538           option cannot be combined with -fcheck-pointer-bounds.
9539
9540       -fsanitize=pointer-compare
9541           Instrument comparison operation (<, <=, >, >=) with pointer
9542           operands.  The option must be combined with either
9543           -fsanitize=kernel-address or -fsanitize=address The option cannot
9544           be combined with -fsanitize=thread and/or -fcheck-pointer-bounds.
9545           Note: By default the check is disabled at run time.  To enable it,
9546           add "detect_invalid_pointer_pairs=2" to the environment variable
9547           ASAN_OPTIONS. Using "detect_invalid_pointer_pairs=1" detects
9548           invalid operation only when both pointers are non-null.
9549
9550       -fsanitize=pointer-subtract
9551           Instrument subtraction with pointer operands.  The option must be
9552           combined with either -fsanitize=kernel-address or
9553           -fsanitize=address The option cannot be combined with
9554           -fsanitize=thread and/or -fcheck-pointer-bounds.  Note: By default
9555           the check is disabled at run time.  To enable it, add
9556           "detect_invalid_pointer_pairs=2" to the environment variable
9557           ASAN_OPTIONS. Using "detect_invalid_pointer_pairs=1" detects
9558           invalid operation only when both pointers are non-null.
9559
9560       -fsanitize=thread
9561           Enable ThreadSanitizer, a fast data race detector.  Memory access
9562           instructions are instrumented to detect data race bugs.  See
9563           <https://github.com/google/sanitizers/wiki#threadsanitizer> for
9564           more details. The run-time behavior can be influenced using the
9565           TSAN_OPTIONS environment variable; see
9566           <https://github.com/google/sanitizers/wiki/ThreadSanitizerFlags>
9567           for a list of supported options.  The option cannot be combined
9568           with -fsanitize=address, -fsanitize=leak and/or
9569           -fcheck-pointer-bounds.
9570
9571           Note that sanitized atomic builtins cannot throw exceptions when
9572           operating on invalid memory addresses with non-call exceptions
9573           (-fnon-call-exceptions).
9574
9575       -fsanitize=leak
9576           Enable LeakSanitizer, a memory leak detector.  This option only
9577           matters for linking of executables and the executable is linked
9578           against a library that overrides "malloc" and other allocator
9579           functions.  See
9580           <https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer>
9581           for more details.  The run-time behavior can be influenced using
9582           the LSAN_OPTIONS environment variable.  The option cannot be
9583           combined with -fsanitize=thread.
9584
9585       -fsanitize=undefined
9586           Enable UndefinedBehaviorSanitizer, a fast undefined behavior
9587           detector.  Various computations are instrumented to detect
9588           undefined behavior at runtime.  Current suboptions are:
9589
9590           -fsanitize=shift
9591               This option enables checking that the result of a shift
9592               operation is not undefined.  Note that what exactly is
9593               considered undefined differs slightly between C and C++, as
9594               well as between ISO C90 and C99, etc.  This option has two
9595               suboptions, -fsanitize=shift-base and
9596               -fsanitize=shift-exponent.
9597
9598           -fsanitize=shift-exponent
9599               This option enables checking that the second argument of a
9600               shift operation is not negative and is smaller than the
9601               precision of the promoted first argument.
9602
9603           -fsanitize=shift-base
9604               If the second argument of a shift operation is within range,
9605               check that the result of a shift operation is not undefined.
9606               Note that what exactly is considered undefined differs slightly
9607               between C and C++, as well as between ISO C90 and C99, etc.
9608
9609           -fsanitize=integer-divide-by-zero
9610               Detect integer division by zero as well as "INT_MIN / -1"
9611               division.
9612
9613           -fsanitize=unreachable
9614               With this option, the compiler turns the
9615               "__builtin_unreachable" call into a diagnostics message call
9616               instead.  When reaching the "__builtin_unreachable" call, the
9617               behavior is undefined.
9618
9619           -fsanitize=vla-bound
9620               This option instructs the compiler to check that the size of a
9621               variable length array is positive.
9622
9623           -fsanitize=null
9624               This option enables pointer checking.  Particularly, the
9625               application built with this option turned on will issue an
9626               error message when it tries to dereference a NULL pointer, or
9627               if a reference (possibly an rvalue reference) is bound to a
9628               NULL pointer, or if a method is invoked on an object pointed by
9629               a NULL pointer.
9630
9631           -fsanitize=return
9632               This option enables return statement checking.  Programs built
9633               with this option turned on will issue an error message when the
9634               end of a non-void function is reached without actually
9635               returning a value.  This option works in C++ only.
9636
9637           -fsanitize=signed-integer-overflow
9638               This option enables signed integer overflow checking.  We check
9639               that the result of "+", "*", and both unary and binary "-" does
9640               not overflow in the signed arithmetics.  Note, integer
9641               promotion rules must be taken into account.  That is, the
9642               following is not an overflow:
9643
9644                       signed char a = SCHAR_MAX;
9645                       a++;
9646
9647           -fsanitize=bounds
9648               This option enables instrumentation of array bounds.  Various
9649               out of bounds accesses are detected.  Flexible array members,
9650               flexible array member-like arrays, and initializers of
9651               variables with static storage are not instrumented.  The option
9652               cannot be combined with -fcheck-pointer-bounds.
9653
9654           -fsanitize=bounds-strict
9655               This option enables strict instrumentation of array bounds.
9656               Most out of bounds accesses are detected, including flexible
9657               array members and flexible array member-like arrays.
9658               Initializers of variables with static storage are not
9659               instrumented.  The option cannot be combined with
9660               -fcheck-pointer-bounds.
9661
9662           -fsanitize=alignment
9663               This option enables checking of alignment of pointers when they
9664               are dereferenced, or when a reference is bound to
9665               insufficiently aligned target, or when a method or constructor
9666               is invoked on insufficiently aligned object.
9667
9668           -fsanitize=object-size
9669               This option enables instrumentation of memory references using
9670               the "__builtin_object_size" function.  Various out of bounds
9671               pointer accesses are detected.
9672
9673           -fsanitize=float-divide-by-zero
9674               Detect floating-point division by zero.  Unlike other similar
9675               options, -fsanitize=float-divide-by-zero is not enabled by
9676               -fsanitize=undefined, since floating-point division by zero can
9677               be a legitimate way of obtaining infinities and NaNs.
9678
9679           -fsanitize=float-cast-overflow
9680               This option enables floating-point type to integer conversion
9681               checking.  We check that the result of the conversion does not
9682               overflow.  Unlike other similar options,
9683               -fsanitize=float-cast-overflow is not enabled by
9684               -fsanitize=undefined.  This option does not work well with
9685               "FE_INVALID" exceptions enabled.
9686
9687           -fsanitize=nonnull-attribute
9688               This option enables instrumentation of calls, checking whether
9689               null values are not passed to arguments marked as requiring a
9690               non-null value by the "nonnull" function attribute.
9691
9692           -fsanitize=returns-nonnull-attribute
9693               This option enables instrumentation of return statements in
9694               functions marked with "returns_nonnull" function attribute, to
9695               detect returning of null values from such functions.
9696
9697           -fsanitize=bool
9698               This option enables instrumentation of loads from bool.  If a
9699               value other than 0/1 is loaded, a run-time error is issued.
9700
9701           -fsanitize=enum
9702               This option enables instrumentation of loads from an enum type.
9703               If a value outside the range of values for the enum type is
9704               loaded, a run-time error is issued.
9705
9706           -fsanitize=vptr
9707               This option enables instrumentation of C++ member function
9708               calls, member accesses and some conversions between pointers to
9709               base and derived classes, to verify the referenced object has
9710               the correct dynamic type.
9711
9712           -fsanitize=pointer-overflow
9713               This option enables instrumentation of pointer arithmetics.  If
9714               the pointer arithmetics overflows, a run-time error is issued.
9715
9716           -fsanitize=builtin
9717               This option enables instrumentation of arguments to selected
9718               builtin functions.  If an invalid value is passed to such
9719               arguments, a run-time error is issued.  E.g. passing 0 as the
9720               argument to "__builtin_ctz" or "__builtin_clz" invokes
9721               undefined behavior and is diagnosed by this option.
9722
9723           While -ftrapv causes traps for signed overflows to be emitted,
9724           -fsanitize=undefined gives a diagnostic message.  This currently
9725           works only for the C family of languages.
9726
9727       -fno-sanitize=all
9728           This option disables all previously enabled sanitizers.
9729           -fsanitize=all is not allowed, as some sanitizers cannot be used
9730           together.
9731
9732       -fasan-shadow-offset=number
9733           This option forces GCC to use custom shadow offset in
9734           AddressSanitizer checks.  It is useful for experimenting with
9735           different shadow memory layouts in Kernel AddressSanitizer.
9736
9737       -fsanitize-sections=s1,s2,...
9738           Sanitize global variables in selected user-defined sections.  si
9739           may contain wildcards.
9740
9741       -fsanitize-recover[=opts]
9742           -fsanitize-recover= controls error recovery mode for sanitizers
9743           mentioned in comma-separated list of opts.  Enabling this option
9744           for a sanitizer component causes it to attempt to continue running
9745           the program as if no error happened.  This means multiple runtime
9746           errors can be reported in a single program run, and the exit code
9747           of the program may indicate success even when errors have been
9748           reported.  The -fno-sanitize-recover= option can be used to alter
9749           this behavior: only the first detected error is reported and
9750           program then exits with a non-zero exit code.
9751
9752           Currently this feature only works for -fsanitize=undefined (and its
9753           suboptions except for -fsanitize=unreachable and
9754           -fsanitize=return), -fsanitize=float-cast-overflow,
9755           -fsanitize=float-divide-by-zero, -fsanitize=bounds-strict,
9756           -fsanitize=kernel-address and -fsanitize=address.  For these
9757           sanitizers error recovery is turned on by default, except
9758           -fsanitize=address, for which this feature is experimental.
9759           -fsanitize-recover=all and -fno-sanitize-recover=all is also
9760           accepted, the former enables recovery for all sanitizers that
9761           support it, the latter disables recovery for all sanitizers that
9762           support it.
9763
9764           Even if a recovery mode is turned on the compiler side, it needs to
9765           be also enabled on the runtime library side, otherwise the failures
9766           are still fatal.  The runtime library defaults to "halt_on_error=0"
9767           for ThreadSanitizer and UndefinedBehaviorSanitizer, while default
9768           value for AddressSanitizer is "halt_on_error=1". This can be
9769           overridden through setting the "halt_on_error" flag in the
9770           corresponding environment variable.
9771
9772           Syntax without an explicit opts parameter is deprecated.  It is
9773           equivalent to specifying an opts list of:
9774
9775                   undefined,float-cast-overflow,float-divide-by-zero,bounds-strict
9776
9777       -fsanitize-address-use-after-scope
9778           Enable sanitization of local variables to detect use-after-scope
9779           bugs.  The option sets -fstack-reuse to none.
9780
9781       -fsanitize-undefined-trap-on-error
9782           The -fsanitize-undefined-trap-on-error option instructs the
9783           compiler to report undefined behavior using "__builtin_trap" rather
9784           than a "libubsan" library routine.  The advantage of this is that
9785           the "libubsan" library is not needed and is not linked in, so this
9786           is usable even in freestanding environments.
9787
9788       -fsanitize-coverage=trace-pc
9789           Enable coverage-guided fuzzing code instrumentation.  Inserts a
9790           call to "__sanitizer_cov_trace_pc" into every basic block.
9791
9792       -fsanitize-coverage=trace-cmp
9793           Enable dataflow guided fuzzing code instrumentation.  Inserts a
9794           call to "__sanitizer_cov_trace_cmp1", "__sanitizer_cov_trace_cmp2",
9795           "__sanitizer_cov_trace_cmp4" or "__sanitizer_cov_trace_cmp8" for
9796           integral comparison with both operands variable or
9797           "__sanitizer_cov_trace_const_cmp1",
9798           "__sanitizer_cov_trace_const_cmp2",
9799           "__sanitizer_cov_trace_const_cmp4" or
9800           "__sanitizer_cov_trace_const_cmp8" for integral comparison with one
9801           operand constant, "__sanitizer_cov_trace_cmpf" or
9802           "__sanitizer_cov_trace_cmpd" for float or double comparisons and
9803           "__sanitizer_cov_trace_switch" for switch statements.
9804
9805       -fbounds-check
9806           For front ends that support it, generate additional code to check
9807           that indices used to access arrays are within the declared range.
9808           This is currently only supported by the Fortran front end, where
9809           this option defaults to false.
9810
9811       -fcheck-pointer-bounds
9812           Enable Pointer Bounds Checker instrumentation.  Each memory
9813           reference is instrumented with checks of the pointer used for
9814           memory access against bounds associated with that pointer.
9815
9816           Currently there is only an implementation for Intel MPX available,
9817           thus x86 GNU/Linux target and -mmpx are required to enable this
9818           feature.  MPX-based instrumentation requires a runtime library to
9819           enable MPX in hardware and handle bounds violation signals.  By
9820           default when -fcheck-pointer-bounds and -mmpx options are used to
9821           link a program, the GCC driver links against the libmpx and
9822           libmpxwrappers libraries.  Bounds checking on calls to dynamic
9823           libraries requires a linker with -z bndplt support; if GCC was
9824           configured with a linker without support for this option (including
9825           the Gold linker and older versions of ld), a warning is given if
9826           you link with -mmpx without also specifying -static, since the
9827           overall effectiveness of the bounds checking protection is reduced.
9828           See also -static-libmpxwrappers.
9829
9830           MPX-based instrumentation may be used for debugging and also may be
9831           included in production code to increase program security.
9832           Depending on usage, you may have different requirements for the
9833           runtime library.  The current version of the MPX runtime library is
9834           more oriented for use as a debugging tool.  MPX runtime library
9835           usage implies -lpthread.  See also -static-libmpx.  The runtime
9836           library  behavior can be influenced using various CHKP_RT_*
9837           environment variables.  See
9838           <https://gcc.gnu.org/wiki/Intel%20MPX%20support%20in%20the%20GCC%20compiler>
9839           for more details.
9840
9841           Generated instrumentation may be controlled by various -fchkp-*
9842           options and by the "bnd_variable_size" structure field attribute
9843           and "bnd_legacy", and "bnd_instrument" function attributes.  GCC
9844           also provides a number of built-in functions for controlling the
9845           Pointer Bounds Checker.
9846
9847       -fchkp-check-incomplete-type
9848           Generate pointer bounds checks for variables with incomplete type.
9849           Enabled by default.
9850
9851       -fchkp-narrow-bounds
9852           Controls bounds used by Pointer Bounds Checker for pointers to
9853           object fields.  If narrowing is enabled then field bounds are used.
9854           Otherwise object bounds are used.  See also
9855           -fchkp-narrow-to-innermost-array and
9856           -fchkp-first-field-has-own-bounds.  Enabled by default.
9857
9858       -fchkp-first-field-has-own-bounds
9859           Forces Pointer Bounds Checker to use narrowed bounds for the
9860           address of the first field in the structure.  By default a pointer
9861           to the first field has the same bounds as a pointer to the whole
9862           structure.
9863
9864       -fchkp-flexible-struct-trailing-arrays
9865           Forces Pointer Bounds Checker to treat all trailing arrays in
9866           structures as possibly flexible.  By default only array fields with
9867           zero length or that are marked with attribute bnd_variable_size are
9868           treated as flexible.
9869
9870       -fchkp-narrow-to-innermost-array
9871           Forces Pointer Bounds Checker to use bounds of the innermost arrays
9872           in case of nested static array access.  By default this option is
9873           disabled and bounds of the outermost array are used.
9874
9875       -fchkp-optimize
9876           Enables Pointer Bounds Checker optimizations.  Enabled by default
9877           at optimization levels -O, -O2, -O3.
9878
9879       -fchkp-use-fast-string-functions
9880           Enables use of *_nobnd versions of string functions (not copying
9881           bounds) by Pointer Bounds Checker.  Disabled by default.
9882
9883       -fchkp-use-nochk-string-functions
9884           Enables use of *_nochk versions of string functions (not checking
9885           bounds) by Pointer Bounds Checker.  Disabled by default.
9886
9887       -fchkp-use-static-bounds
9888           Allow Pointer Bounds Checker to generate static bounds holding
9889           bounds of static variables.  Enabled by default.
9890
9891       -fchkp-use-static-const-bounds
9892           Use statically-initialized bounds for constant bounds instead of
9893           generating them each time they are required.  By default enabled
9894           when -fchkp-use-static-bounds is enabled.
9895
9896       -fchkp-treat-zero-dynamic-size-as-infinite
9897           With this option, objects with incomplete type whose dynamically-
9898           obtained size is zero are treated as having infinite size instead
9899           by Pointer Bounds Checker.  This option may be helpful if a program
9900           is linked with a library missing size information for some symbols.
9901           Disabled by default.
9902
9903       -fchkp-check-read
9904           Instructs Pointer Bounds Checker to generate checks for all read
9905           accesses to memory.  Enabled by default.
9906
9907       -fchkp-check-write
9908           Instructs Pointer Bounds Checker to generate checks for all write
9909           accesses to memory.  Enabled by default.
9910
9911       -fchkp-store-bounds
9912           Instructs Pointer Bounds Checker to generate bounds stores for
9913           pointer writes.  Enabled by default.
9914
9915       -fchkp-instrument-calls
9916           Instructs Pointer Bounds Checker to pass pointer bounds to calls.
9917           Enabled by default.
9918
9919       -fchkp-instrument-marked-only
9920           Instructs Pointer Bounds Checker to instrument only functions
9921           marked with the "bnd_instrument" attribute.  Disabled by default.
9922
9923       -fchkp-use-wrappers
9924           Allows Pointer Bounds Checker to replace calls to built-in
9925           functions with calls to wrapper functions.  When
9926           -fchkp-use-wrappers is used to link a program, the GCC driver
9927           automatically links against libmpxwrappers.  See also
9928           -static-libmpxwrappers.  Enabled by default.
9929
9930       -fcf-protection=[full|branch|return|none]
9931           Enable code instrumentation of control-flow transfers to increase
9932           program security by checking that target addresses of control-flow
9933           transfer instructions (such as indirect function call, function
9934           return, indirect jump) are valid.  This prevents diverting the flow
9935           of control to an unexpected target.  This is intended to protect
9936           against such threats as Return-oriented Programming (ROP), and
9937           similarly call/jmp-oriented programming (COP/JOP).
9938
9939           The value "branch" tells the compiler to implement checking of
9940           validity of control-flow transfer at the point of indirect branch
9941           instructions, i.e. call/jmp instructions.  The value "return"
9942           implements checking of validity at the point of returning from a
9943           function.  The value "full" is an alias for specifying both
9944           "branch" and "return". The value "none" turns off instrumentation.
9945
9946           The macro "__CET__" is defined when -fcf-protection is used.  The
9947           first bit of "__CET__" is set to 1 for the value "branch" and the
9948           second bit of "__CET__" is set to 1 for the "return".
9949
9950           You can also use the "nocf_check" attribute to identify which
9951           functions and calls should be skipped from instrumentation.
9952
9953           Currently the x86 GNU/Linux target provides an implementation based
9954           on Intel Control-flow Enforcement Technology (CET).
9955
9956       -fstack-protector
9957           Emit extra code to check for buffer overflows, such as stack
9958           smashing attacks.  This is done by adding a guard variable to
9959           functions with vulnerable objects.  This includes functions that
9960           call "alloca", and functions with buffers larger than 8 bytes.  The
9961           guards are initialized when a function is entered and then checked
9962           when the function exits.  If a guard check fails, an error message
9963           is printed and the program exits.
9964
9965       -fstack-protector-all
9966           Like -fstack-protector except that all functions are protected.
9967
9968       -fstack-protector-strong
9969           Like -fstack-protector but includes additional functions to be
9970           protected --- those that have local array definitions, or have
9971           references to local frame addresses.
9972
9973       -fstack-protector-explicit
9974           Like -fstack-protector but only protects those functions which have
9975           the "stack_protect" attribute.
9976
9977       -fstack-check
9978           Generate code to verify that you do not go beyond the boundary of
9979           the stack.  You should specify this flag if you are running in an
9980           environment with multiple threads, but you only rarely need to
9981           specify it in a single-threaded environment since stack overflow is
9982           automatically detected on nearly all systems if there is only one
9983           stack.
9984
9985           Note that this switch does not actually cause checking to be done;
9986           the operating system or the language runtime must do that.  The
9987           switch causes generation of code to ensure that they see the stack
9988           being extended.
9989
9990           You can additionally specify a string parameter: no means no
9991           checking, generic means force the use of old-style checking,
9992           specific means use the best checking method and is equivalent to
9993           bare -fstack-check.
9994
9995           Old-style checking is a generic mechanism that requires no specific
9996           target support in the compiler but comes with the following
9997           drawbacks:
9998
9999           1.  Modified allocation strategy for large objects: they are always
10000               allocated dynamically if their size exceeds a fixed threshold.
10001               Note this may change the semantics of some code.
10002
10003           2.  Fixed limit on the size of the static frame of functions: when
10004               it is topped by a particular function, stack checking is not
10005               reliable and a warning is issued by the compiler.
10006
10007           3.  Inefficiency: because of both the modified allocation strategy
10008               and the generic implementation, code performance is hampered.
10009
10010           Note that old-style stack checking is also the fallback method for
10011           specific if no target support has been added in the compiler.
10012
10013           -fstack-check= is designed for Ada's needs to detect infinite
10014           recursion and stack overflows.  specific is an excellent choice
10015           when compiling Ada code.  It is not generally sufficient to protect
10016           against stack-clash attacks.  To protect against those you want
10017           -fstack-clash-protection.
10018
10019       -fstack-clash-protection
10020           Generate code to prevent stack clash style attacks.  When this
10021           option is enabled, the compiler will only allocate one page of
10022           stack space at a time and each page is accessed immediately after
10023           allocation.  Thus, it prevents allocations from jumping over any
10024           stack guard page provided by the operating system.
10025
10026           Most targets do not fully support stack clash protection.  However,
10027           on those targets -fstack-clash-protection will protect dynamic
10028           stack allocations.  -fstack-clash-protection may also provide
10029           limited protection for static stack allocations if the target
10030           supports -fstack-check=specific.
10031
10032       -fstack-limit-register=reg
10033       -fstack-limit-symbol=sym
10034       -fno-stack-limit
10035           Generate code to ensure that the stack does not grow beyond a
10036           certain value, either the value of a register or the address of a
10037           symbol.  If a larger stack is required, a signal is raised at run
10038           time.  For most targets, the signal is raised before the stack
10039           overruns the boundary, so it is possible to catch the signal
10040           without taking special precautions.
10041
10042           For instance, if the stack starts at absolute address 0x80000000
10043           and grows downwards, you can use the flags
10044           -fstack-limit-symbol=__stack_limit and
10045           -Wl,--defsym,__stack_limit=0x7ffe0000 to enforce a stack limit of
10046           128KB.  Note that this may only work with the GNU linker.
10047
10048           You can locally override stack limit checking by using the
10049           "no_stack_limit" function attribute.
10050
10051       -fsplit-stack
10052           Generate code to automatically split the stack before it overflows.
10053           The resulting program has a discontiguous stack which can only
10054           overflow if the program is unable to allocate any more memory.
10055           This is most useful when running threaded programs, as it is no
10056           longer necessary to calculate a good stack size to use for each
10057           thread.  This is currently only implemented for the x86 targets
10058           running GNU/Linux.
10059
10060           When code compiled with -fsplit-stack calls code compiled without
10061           -fsplit-stack, there may not be much stack space available for the
10062           latter code to run.  If compiling all code, including library code,
10063           with -fsplit-stack is not an option, then the linker can fix up
10064           these calls so that the code compiled without -fsplit-stack always
10065           has a large stack.  Support for this is implemented in the gold
10066           linker in GNU binutils release 2.21 and later.
10067
10068       -fvtable-verify=[std|preinit|none]
10069           This option is only available when compiling C++ code.  It turns on
10070           (or off, if using -fvtable-verify=none) the security feature that
10071           verifies at run time, for every virtual call, that the vtable
10072           pointer through which the call is made is valid for the type of the
10073           object, and has not been corrupted or overwritten.  If an invalid
10074           vtable pointer is detected at run time, an error is reported and
10075           execution of the program is immediately halted.
10076
10077           This option causes run-time data structures to be built at program
10078           startup, which are used for verifying the vtable pointers.  The
10079           options std and preinit control the timing of when these data
10080           structures are built.  In both cases the data structures are built
10081           before execution reaches "main".  Using -fvtable-verify=std causes
10082           the data structures to be built after shared libraries have been
10083           loaded and initialized.  -fvtable-verify=preinit causes them to be
10084           built before shared libraries have been loaded and initialized.
10085
10086           If this option appears multiple times in the command line with
10087           different values specified, none takes highest priority over both
10088           std and preinit; preinit takes priority over std.
10089
10090       -fvtv-debug
10091           When used in conjunction with -fvtable-verify=std or
10092           -fvtable-verify=preinit, causes debug versions of the runtime
10093           functions for the vtable verification feature to be called.  This
10094           flag also causes the compiler to log information about which vtable
10095           pointers it finds for each class.  This information is written to a
10096           file named vtv_set_ptr_data.log in the directory named by the
10097           environment variable VTV_LOGS_DIR if that is defined or the current
10098           working directory otherwise.
10099
10100           Note:  This feature appends data to the log file. If you want a
10101           fresh log file, be sure to delete any existing one.
10102
10103       -fvtv-counts
10104           This is a debugging flag.  When used in conjunction with
10105           -fvtable-verify=std or -fvtable-verify=preinit, this causes the
10106           compiler to keep track of the total number of virtual calls it
10107           encounters and the number of verifications it inserts.  It also
10108           counts the number of calls to certain run-time library functions
10109           that it inserts and logs this information for each compilation
10110           unit.  The compiler writes this information to a file named
10111           vtv_count_data.log in the directory named by the environment
10112           variable VTV_LOGS_DIR if that is defined or the current working
10113           directory otherwise.  It also counts the size of the vtable pointer
10114           sets for each class, and writes this information to
10115           vtv_class_set_sizes.log in the same directory.
10116
10117           Note:  This feature appends data to the log files.  To get fresh
10118           log files, be sure to delete any existing ones.
10119
10120       -finstrument-functions
10121           Generate instrumentation calls for entry and exit to functions.
10122           Just after function entry and just before function exit, the
10123           following profiling functions are called with the address of the
10124           current function and its call site.  (On some platforms,
10125           "__builtin_return_address" does not work beyond the current
10126           function, so the call site information may not be available to the
10127           profiling functions otherwise.)
10128
10129                   void __cyg_profile_func_enter (void *this_fn,
10130                                                  void *call_site);
10131                   void __cyg_profile_func_exit  (void *this_fn,
10132                                                  void *call_site);
10133
10134           The first argument is the address of the start of the current
10135           function, which may be looked up exactly in the symbol table.
10136
10137           This instrumentation is also done for functions expanded inline in
10138           other functions.  The profiling calls indicate where, conceptually,
10139           the inline function is entered and exited.  This means that
10140           addressable versions of such functions must be available.  If all
10141           your uses of a function are expanded inline, this may mean an
10142           additional expansion of code size.  If you use "extern inline" in
10143           your C code, an addressable version of such functions must be
10144           provided.  (This is normally the case anyway, but if you get lucky
10145           and the optimizer always expands the functions inline, you might
10146           have gotten away without providing static copies.)
10147
10148           A function may be given the attribute "no_instrument_function", in
10149           which case this instrumentation is not done.  This can be used, for
10150           example, for the profiling functions listed above, high-priority
10151           interrupt routines, and any functions from which the profiling
10152           functions cannot safely be called (perhaps signal handlers, if the
10153           profiling routines generate output or allocate memory).
10154
10155       -finstrument-functions-exclude-file-list=file,file,...
10156           Set the list of functions that are excluded from instrumentation
10157           (see the description of -finstrument-functions).  If the file that
10158           contains a function definition matches with one of file, then that
10159           function is not instrumented.  The match is done on substrings: if
10160           the file parameter is a substring of the file name, it is
10161           considered to be a match.
10162
10163           For example:
10164
10165                   -finstrument-functions-exclude-file-list=/bits/stl,include/sys
10166
10167           excludes any inline function defined in files whose pathnames
10168           contain /bits/stl or include/sys.
10169
10170           If, for some reason, you want to include letter , in one of sym,
10171           write ,. For example,
10172           -finstrument-functions-exclude-file-list=',,tmp' (note the single
10173           quote surrounding the option).
10174
10175       -finstrument-functions-exclude-function-list=sym,sym,...
10176           This is similar to -finstrument-functions-exclude-file-list, but
10177           this option sets the list of function names to be excluded from
10178           instrumentation.  The function name to be matched is its user-
10179           visible name, such as "vector<int> blah(const vector<int> &)", not
10180           the internal mangled name (e.g., "_Z4blahRSt6vectorIiSaIiEE").  The
10181           match is done on substrings: if the sym parameter is a substring of
10182           the function name, it is considered to be a match.  For C99 and C++
10183           extended identifiers, the function name must be given in UTF-8, not
10184           using universal character names.
10185
10186       -fpatchable-function-entry=N[,M]
10187           Generate N NOPs right at the beginning of each function, with the
10188           function entry point before the Mth NOP.  If M is omitted, it
10189           defaults to 0 so the function entry points to the address just at
10190           the first NOP.  The NOP instructions reserve extra space which can
10191           be used to patch in any desired instrumentation at run time,
10192           provided that the code segment is writable.  The amount of space is
10193           controllable indirectly via the number of NOPs; the NOP instruction
10194           used corresponds to the instruction emitted by the internal GCC
10195           back-end interface "gen_nop".  This behavior is target-specific and
10196           may also depend on the architecture variant and/or other
10197           compilation options.
10198
10199           For run-time identification, the starting addresses of these areas,
10200           which correspond to their respective function entries minus M, are
10201           additionally collected in the "__patchable_function_entries"
10202           section of the resulting binary.
10203
10204           Note that the value of "__attribute__ ((patchable_function_entry
10205           (N,M)))" takes precedence over command-line option
10206           -fpatchable-function-entry=N,M.  This can be used to increase the
10207           area size or to remove it completely on a single function.  If
10208           "N=0", no pad location is recorded.
10209
10210           The NOP instructions are inserted at---and maybe before, depending
10211           on M---the function entry address, even before the prologue.
10212
10213   Options Controlling the Preprocessor
10214       These options control the C preprocessor, which is run on each C source
10215       file before actual compilation.
10216
10217       If you use the -E option, nothing is done except preprocessing.  Some
10218       of these options make sense only together with -E because they cause
10219       the preprocessor output to be unsuitable for actual compilation.
10220
10221       In addition to the options listed here, there are a number of options
10222       to control search paths for include files documented in Directory
10223       Options.  Options to control preprocessor diagnostics are listed in
10224       Warning Options.
10225
10226       -D name
10227           Predefine name as a macro, with definition 1.
10228
10229       -D name=definition
10230           The contents of definition are tokenized and processed as if they
10231           appeared during translation phase three in a #define directive.  In
10232           particular, the definition is truncated by embedded newline
10233           characters.
10234
10235           If you are invoking the preprocessor from a shell or shell-like
10236           program you may need to use the shell's quoting syntax to protect
10237           characters such as spaces that have a meaning in the shell syntax.
10238
10239           If you wish to define a function-like macro on the command line,
10240           write its argument list with surrounding parentheses before the
10241           equals sign (if any).  Parentheses are meaningful to most shells,
10242           so you should quote the option.  With sh and csh,
10243           -D'name(args...)=definition' works.
10244
10245           -D and -U options are processed in the order they are given on the
10246           command line.  All -imacros file and -include file options are
10247           processed after all -D and -U options.
10248
10249       -U name
10250           Cancel any previous definition of name, either built in or provided
10251           with a -D option.
10252
10253       -include file
10254           Process file as if "#include "file"" appeared as the first line of
10255           the primary source file.  However, the first directory searched for
10256           file is the preprocessor's working directory instead of the
10257           directory containing the main source file.  If not found there, it
10258           is searched for in the remainder of the "#include "..."" search
10259           chain as normal.
10260
10261           If multiple -include options are given, the files are included in
10262           the order they appear on the command line.
10263
10264       -imacros file
10265           Exactly like -include, except that any output produced by scanning
10266           file is thrown away.  Macros it defines remain defined.  This
10267           allows you to acquire all the macros from a header without also
10268           processing its declarations.
10269
10270           All files specified by -imacros are processed before all files
10271           specified by -include.
10272
10273       -undef
10274           Do not predefine any system-specific or GCC-specific macros.  The
10275           standard predefined macros remain defined.
10276
10277       -pthread
10278           Define additional macros required for using the POSIX threads
10279           library.  You should use this option consistently for both
10280           compilation and linking.  This option is supported on GNU/Linux
10281           targets, most other Unix derivatives, and also on x86 Cygwin and
10282           MinGW targets.
10283
10284       -M  Instead of outputting the result of preprocessing, output a rule
10285           suitable for make describing the dependencies of the main source
10286           file.  The preprocessor outputs one make rule containing the object
10287           file name for that source file, a colon, and the names of all the
10288           included files, including those coming from -include or -imacros
10289           command-line options.
10290
10291           Unless specified explicitly (with -MT or -MQ), the object file name
10292           consists of the name of the source file with any suffix replaced
10293           with object file suffix and with any leading directory parts
10294           removed.  If there are many included files then the rule is split
10295           into several lines using \-newline.  The rule has no commands.
10296
10297           This option does not suppress the preprocessor's debug output, such
10298           as -dM.  To avoid mixing such debug output with the dependency
10299           rules you should explicitly specify the dependency output file with
10300           -MF, or use an environment variable like DEPENDENCIES_OUTPUT.
10301           Debug output is still sent to the regular output stream as normal.
10302
10303           Passing -M to the driver implies -E, and suppresses warnings with
10304           an implicit -w.
10305
10306       -MM Like -M but do not mention header files that are found in system
10307           header directories, nor header files that are included, directly or
10308           indirectly, from such a header.
10309
10310           This implies that the choice of angle brackets or double quotes in
10311           an #include directive does not in itself determine whether that
10312           header appears in -MM dependency output.
10313
10314       -MF file
10315           When used with -M or -MM, specifies a file to write the
10316           dependencies to.  If no -MF switch is given the preprocessor sends
10317           the rules to the same place it would send preprocessed output.
10318
10319           When used with the driver options -MD or -MMD, -MF overrides the
10320           default dependency output file.
10321
10322           If file is -, then the dependencies are written to stdout.
10323
10324       -MG In conjunction with an option such as -M requesting dependency
10325           generation, -MG assumes missing header files are generated files
10326           and adds them to the dependency list without raising an error.  The
10327           dependency filename is taken directly from the "#include" directive
10328           without prepending any path.  -MG also suppresses preprocessed
10329           output, as a missing header file renders this useless.
10330
10331           This feature is used in automatic updating of makefiles.
10332
10333       -MP This option instructs CPP to add a phony target for each dependency
10334           other than the main file, causing each to depend on nothing.  These
10335           dummy rules work around errors make gives if you remove header
10336           files without updating the Makefile to match.
10337
10338           This is typical output:
10339
10340                   test.o: test.c test.h
10341
10342                   test.h:
10343
10344       -MT target
10345           Change the target of the rule emitted by dependency generation.  By
10346           default CPP takes the name of the main input file, deletes any
10347           directory components and any file suffix such as .c, and appends
10348           the platform's usual object suffix.  The result is the target.
10349
10350           An -MT option sets the target to be exactly the string you specify.
10351           If you want multiple targets, you can specify them as a single
10352           argument to -MT, or use multiple -MT options.
10353
10354           For example, -MT '$(objpfx)foo.o' might give
10355
10356                   $(objpfx)foo.o: foo.c
10357
10358       -MQ target
10359           Same as -MT, but it quotes any characters which are special to
10360           Make.  -MQ '$(objpfx)foo.o' gives
10361
10362                   $$(objpfx)foo.o: foo.c
10363
10364           The default target is automatically quoted, as if it were given
10365           with -MQ.
10366
10367       -MD -MD is equivalent to -M -MF file, except that -E is not implied.
10368           The driver determines file based on whether an -o option is given.
10369           If it is, the driver uses its argument but with a suffix of .d,
10370           otherwise it takes the name of the input file, removes any
10371           directory components and suffix, and applies a .d suffix.
10372
10373           If -MD is used in conjunction with -E, any -o switch is understood
10374           to specify the dependency output file, but if used without -E, each
10375           -o is understood to specify a target object file.
10376
10377           Since -E is not implied, -MD can be used to generate a dependency
10378           output file as a side effect of the compilation process.
10379
10380       -MMD
10381           Like -MD except mention only user header files, not system header
10382           files.
10383
10384       -fpreprocessed
10385           Indicate to the preprocessor that the input file has already been
10386           preprocessed.  This suppresses things like macro expansion,
10387           trigraph conversion, escaped newline splicing, and processing of
10388           most directives.  The preprocessor still recognizes and removes
10389           comments, so that you can pass a file preprocessed with -C to the
10390           compiler without problems.  In this mode the integrated
10391           preprocessor is little more than a tokenizer for the front ends.
10392
10393           -fpreprocessed is implicit if the input file has one of the
10394           extensions .i, .ii or .mi.  These are the extensions that GCC uses
10395           for preprocessed files created by -save-temps.
10396
10397       -fdirectives-only
10398           When preprocessing, handle directives, but do not expand macros.
10399
10400           The option's behavior depends on the -E and -fpreprocessed options.
10401
10402           With -E, preprocessing is limited to the handling of directives
10403           such as "#define", "#ifdef", and "#error".  Other preprocessor
10404           operations, such as macro expansion and trigraph conversion are not
10405           performed.  In addition, the -dD option is implicitly enabled.
10406
10407           With -fpreprocessed, predefinition of command line and most builtin
10408           macros is disabled.  Macros such as "__LINE__", which are
10409           contextually dependent, are handled normally.  This enables
10410           compilation of files previously preprocessed with "-E
10411           -fdirectives-only".
10412
10413           With both -E and -fpreprocessed, the rules for -fpreprocessed take
10414           precedence.  This enables full preprocessing of files previously
10415           preprocessed with "-E -fdirectives-only".
10416
10417       -fdollars-in-identifiers
10418           Accept $ in identifiers.
10419
10420       -fextended-identifiers
10421           Accept universal character names in identifiers.  This option is
10422           enabled by default for C99 (and later C standard versions) and C++.
10423
10424       -fno-canonical-system-headers
10425           When preprocessing, do not shorten system header paths with
10426           canonicalization.
10427
10428       -ftabstop=width
10429           Set the distance between tab stops.  This helps the preprocessor
10430           report correct column numbers in warnings or errors, even if tabs
10431           appear on the line.  If the value is less than 1 or greater than
10432           100, the option is ignored.  The default is 8.
10433
10434       -ftrack-macro-expansion[=level]
10435           Track locations of tokens across macro expansions. This allows the
10436           compiler to emit diagnostic about the current macro expansion stack
10437           when a compilation error occurs in a macro expansion. Using this
10438           option makes the preprocessor and the compiler consume more memory.
10439           The level parameter can be used to choose the level of precision of
10440           token location tracking thus decreasing the memory consumption if
10441           necessary. Value 0 of level de-activates this option. Value 1
10442           tracks tokens locations in a degraded mode for the sake of minimal
10443           memory overhead. In this mode all tokens resulting from the
10444           expansion of an argument of a function-like macro have the same
10445           location. Value 2 tracks tokens locations completely. This value is
10446           the most memory hungry.  When this option is given no argument, the
10447           default parameter value is 2.
10448
10449           Note that "-ftrack-macro-expansion=2" is activated by default.
10450
10451       -fmacro-prefix-map=old=new
10452           When preprocessing files residing in directory old, expand the
10453           "__FILE__" and "__BASE_FILE__" macros as if the files resided in
10454           directory new instead.  This can be used to change an absolute path
10455           to a relative path by using . for new which can result in more
10456           reproducible builds that are location independent.  This option
10457           also affects "__builtin_FILE()" during compilation.  See also
10458           -ffile-prefix-map.
10459
10460       -fexec-charset=charset
10461           Set the execution character set, used for string and character
10462           constants.  The default is UTF-8.  charset can be any encoding
10463           supported by the system's "iconv" library routine.
10464
10465       -fwide-exec-charset=charset
10466           Set the wide execution character set, used for wide string and
10467           character constants.  The default is UTF-32 or UTF-16, whichever
10468           corresponds to the width of "wchar_t".  As with -fexec-charset,
10469           charset can be any encoding supported by the system's "iconv"
10470           library routine; however, you will have problems with encodings
10471           that do not fit exactly in "wchar_t".
10472
10473       -finput-charset=charset
10474           Set the input character set, used for translation from the
10475           character set of the input file to the source character set used by
10476           GCC.  If the locale does not specify, or GCC cannot get this
10477           information from the locale, the default is UTF-8.  This can be
10478           overridden by either the locale or this command-line option.
10479           Currently the command-line option takes precedence if there's a
10480           conflict.  charset can be any encoding supported by the system's
10481           "iconv" library routine.
10482
10483       -fpch-deps
10484           When using precompiled headers, this flag causes the dependency-
10485           output flags to also list the files from the precompiled header's
10486           dependencies.  If not specified, only the precompiled header are
10487           listed and not the files that were used to create it, because those
10488           files are not consulted when a precompiled header is used.
10489
10490       -fpch-preprocess
10491           This option allows use of a precompiled header together with -E.
10492           It inserts a special "#pragma", "#pragma GCC pch_preprocess
10493           "filename"" in the output to mark the place where the precompiled
10494           header was found, and its filename.  When -fpreprocessed is in use,
10495           GCC recognizes this "#pragma" and loads the PCH.
10496
10497           This option is off by default, because the resulting preprocessed
10498           output is only really suitable as input to GCC.  It is switched on
10499           by -save-temps.
10500
10501           You should not write this "#pragma" in your own code, but it is
10502           safe to edit the filename if the PCH file is available in a
10503           different location.  The filename may be absolute or it may be
10504           relative to GCC's current directory.
10505
10506       -fworking-directory
10507           Enable generation of linemarkers in the preprocessor output that
10508           let the compiler know the current working directory at the time of
10509           preprocessing.  When this option is enabled, the preprocessor
10510           emits, after the initial linemarker, a second linemarker with the
10511           current working directory followed by two slashes.  GCC uses this
10512           directory, when it's present in the preprocessed input, as the
10513           directory emitted as the current working directory in some
10514           debugging information formats.  This option is implicitly enabled
10515           if debugging information is enabled, but this can be inhibited with
10516           the negated form -fno-working-directory.  If the -P flag is present
10517           in the command line, this option has no effect, since no "#line"
10518           directives are emitted whatsoever.
10519
10520       -A predicate=answer
10521           Make an assertion with the predicate predicate and answer answer.
10522           This form is preferred to the older form -A predicate(answer),
10523           which is still supported, because it does not use shell special
10524           characters.
10525
10526       -A -predicate=answer
10527           Cancel an assertion with the predicate predicate and answer answer.
10528
10529       -C  Do not discard comments.  All comments are passed through to the
10530           output file, except for comments in processed directives, which are
10531           deleted along with the directive.
10532
10533           You should be prepared for side effects when using -C; it causes
10534           the preprocessor to treat comments as tokens in their own right.
10535           For example, comments appearing at the start of what would be a
10536           directive line have the effect of turning that line into an
10537           ordinary source line, since the first token on the line is no
10538           longer a #.
10539
10540       -CC Do not discard comments, including during macro expansion.  This is
10541           like -C, except that comments contained within macros are also
10542           passed through to the output file where the macro is expanded.
10543
10544           In addition to the side effects of the -C option, the -CC option
10545           causes all C++-style comments inside a macro to be converted to
10546           C-style comments.  This is to prevent later use of that macro from
10547           inadvertently commenting out the remainder of the source line.
10548
10549           The -CC option is generally used to support lint comments.
10550
10551       -P  Inhibit generation of linemarkers in the output from the
10552           preprocessor.  This might be useful when running the preprocessor
10553           on something that is not C code, and will be sent to a program
10554           which might be confused by the linemarkers.
10555
10556       -traditional
10557       -traditional-cpp
10558           Try to imitate the behavior of pre-standard C preprocessors, as
10559           opposed to ISO C preprocessors.  See the GNU CPP manual for
10560           details.
10561
10562           Note that GCC does not otherwise attempt to emulate a pre-standard
10563           C compiler, and these options are only supported with the -E
10564           switch, or when invoking CPP explicitly.
10565
10566       -trigraphs
10567           Support ISO C trigraphs.  These are three-character sequences, all
10568           starting with ??, that are defined by ISO C to stand for single
10569           characters.  For example, ??/ stands for \, so '??/n' is a
10570           character constant for a newline.
10571
10572           The nine trigraphs and their replacements are
10573
10574                   Trigraph:       ??(  ??)  ??<  ??>  ??=  ??/  ??'  ??!  ??-
10575                   Replacement:      [    ]    {    }    #    \    ^    |    ~
10576
10577           By default, GCC ignores trigraphs, but in standard-conforming modes
10578           it converts them.  See the -std and -ansi options.
10579
10580       -remap
10581           Enable special code to work around file systems which only permit
10582           very short file names, such as MS-DOS.
10583
10584       -H  Print the name of each header file used, in addition to other
10585           normal activities.  Each name is indented to show how deep in the
10586           #include stack it is.  Precompiled header files are also printed,
10587           even if they are found to be invalid; an invalid precompiled header
10588           file is printed with ...x and a valid one with ...! .
10589
10590       -dletters
10591           Says to make debugging dumps during compilation as specified by
10592           letters.  The flags documented here are those relevant to the
10593           preprocessor.  Other letters are interpreted by the compiler
10594           proper, or reserved for future versions of GCC, and so are silently
10595           ignored.  If you specify letters whose behavior conflicts, the
10596           result is undefined.
10597
10598           -dM Instead of the normal output, generate a list of #define
10599               directives for all the macros defined during the execution of
10600               the preprocessor, including predefined macros.  This gives you
10601               a way of finding out what is predefined in your version of the
10602               preprocessor.  Assuming you have no file foo.h, the command
10603
10604                       touch foo.h; cpp -dM foo.h
10605
10606               shows all the predefined macros.
10607
10608               If you use -dM without the -E option, -dM is interpreted as a
10609               synonym for -fdump-rtl-mach.
10610
10611           -dD Like -dM except in two respects: it does not include the
10612               predefined macros, and it outputs both the #define directives
10613               and the result of preprocessing.  Both kinds of output go to
10614               the standard output file.
10615
10616           -dN Like -dD, but emit only the macro names, not their expansions.
10617
10618           -dI Output #include directives in addition to the result of
10619               preprocessing.
10620
10621           -dU Like -dD except that only macros that are expanded, or whose
10622               definedness is tested in preprocessor directives, are output;
10623               the output is delayed until the use or test of the macro; and
10624               #undef directives are also output for macros tested but
10625               undefined at the time.
10626
10627       -fdebug-cpp
10628           This option is only useful for debugging GCC.  When used from CPP
10629           or with -E, it dumps debugging information about location maps.
10630           Every token in the output is preceded by the dump of the map its
10631           location belongs to.
10632
10633           When used from GCC without -E, this option has no effect.
10634
10635       -Wp,option
10636           You can use -Wp,option to bypass the compiler driver and pass
10637           option directly through to the preprocessor.  If option contains
10638           commas, it is split into multiple options at the commas.  However,
10639           many options are modified, translated or interpreted by the
10640           compiler driver before being passed to the preprocessor, and -Wp
10641           forcibly bypasses this phase.  The preprocessor's direct interface
10642           is undocumented and subject to change, so whenever possible you
10643           should avoid using -Wp and let the driver handle the options
10644           instead.
10645
10646       -Xpreprocessor option
10647           Pass option as an option to the preprocessor.  You can use this to
10648           supply system-specific preprocessor options that GCC does not
10649           recognize.
10650
10651           If you want to pass an option that takes an argument, you must use
10652           -Xpreprocessor twice, once for the option and once for the
10653           argument.
10654
10655       -no-integrated-cpp
10656           Perform preprocessing as a separate pass before compilation.  By
10657           default, GCC performs preprocessing as an integrated part of input
10658           tokenization and parsing.  If this option is provided, the
10659           appropriate language front end (cc1, cc1plus, or cc1obj for C, C++,
10660           and Objective-C, respectively) is instead invoked twice, once for
10661           preprocessing only and once for actual compilation of the
10662           preprocessed input.  This option may be useful in conjunction with
10663           the -B or -wrapper options to specify an alternate preprocessor or
10664           perform additional processing of the program source between normal
10665           preprocessing and compilation.
10666
10667   Passing Options to the Assembler
10668       You can pass options to the assembler.
10669
10670       -Wa,option
10671           Pass option as an option to the assembler.  If option contains
10672           commas, it is split into multiple options at the commas.
10673
10674       -Xassembler option
10675           Pass option as an option to the assembler.  You can use this to
10676           supply system-specific assembler options that GCC does not
10677           recognize.
10678
10679           If you want to pass an option that takes an argument, you must use
10680           -Xassembler twice, once for the option and once for the argument.
10681
10682   Options for Linking
10683       These options come into play when the compiler links object files into
10684       an executable output file.  They are meaningless if the compiler is not
10685       doing a link step.
10686
10687       object-file-name
10688           A file name that does not end in a special recognized suffix is
10689           considered to name an object file or library.  (Object files are
10690           distinguished from libraries by the linker according to the file
10691           contents.)  If linking is done, these object files are used as
10692           input to the linker.
10693
10694       -c
10695       -S
10696       -E  If any of these options is used, then the linker is not run, and
10697           object file names should not be used as arguments.
10698
10699       -fuse-ld=bfd
10700           Use the bfd linker instead of the default linker.
10701
10702       -fuse-ld=gold
10703           Use the gold linker instead of the default linker.
10704
10705       -llibrary
10706       -l library
10707           Search the library named library when linking.  (The second
10708           alternative with the library as a separate argument is only for
10709           POSIX compliance and is not recommended.)
10710
10711           It makes a difference where in the command you write this option;
10712           the linker searches and processes libraries and object files in the
10713           order they are specified.  Thus, foo.o -lz bar.o searches library z
10714           after file foo.o but before bar.o.  If bar.o refers to functions in
10715           z, those functions may not be loaded.
10716
10717           The linker searches a standard list of directories for the library,
10718           which is actually a file named liblibrary.a.  The linker then uses
10719           this file as if it had been specified precisely by name.
10720
10721           The directories searched include several standard system
10722           directories plus any that you specify with -L.
10723
10724           Normally the files found this way are library files---archive files
10725           whose members are object files.  The linker handles an archive file
10726           by scanning through it for members which define symbols that have
10727           so far been referenced but not defined.  But if the file that is
10728           found is an ordinary object file, it is linked in the usual
10729           fashion.  The only difference between using an -l option and
10730           specifying a file name is that -l surrounds library with lib and .a
10731           and searches several directories.
10732
10733       -lobjc
10734           You need this special case of the -l option in order to link an
10735           Objective-C or Objective-C++ program.
10736
10737       -nostartfiles
10738           Do not use the standard system startup files when linking.  The
10739           standard system libraries are used normally, unless -nostdlib or
10740           -nodefaultlibs is used.
10741
10742       -nodefaultlibs
10743           Do not use the standard system libraries when linking.  Only the
10744           libraries you specify are passed to the linker, and options
10745           specifying linkage of the system libraries, such as -static-libgcc
10746           or -shared-libgcc, are ignored.  The standard startup files are
10747           used normally, unless -nostartfiles is used.
10748
10749           The compiler may generate calls to "memcmp", "memset", "memcpy" and
10750           "memmove".  These entries are usually resolved by entries in libc.
10751           These entry points should be supplied through some other mechanism
10752           when this option is specified.
10753
10754       -nostdlib
10755           Do not use the standard system startup files or libraries when
10756           linking.  No startup files and only the libraries you specify are
10757           passed to the linker, and options specifying linkage of the system
10758           libraries, such as -static-libgcc or -shared-libgcc, are ignored.
10759
10760           The compiler may generate calls to "memcmp", "memset", "memcpy" and
10761           "memmove".  These entries are usually resolved by entries in libc.
10762           These entry points should be supplied through some other mechanism
10763           when this option is specified.
10764
10765           One of the standard libraries bypassed by -nostdlib and
10766           -nodefaultlibs is libgcc.a, a library of internal subroutines which
10767           GCC uses to overcome shortcomings of particular machines, or
10768           special needs for some languages.
10769
10770           In most cases, you need libgcc.a even when you want to avoid other
10771           standard libraries.  In other words, when you specify -nostdlib or
10772           -nodefaultlibs you should usually specify -lgcc as well.  This
10773           ensures that you have no unresolved references to internal GCC
10774           library subroutines.  (An example of such an internal subroutine is
10775           "__main", used to ensure C++ constructors are called.)
10776
10777       -pie
10778           Produce a dynamically linked position independent executable on
10779           targets that support it.  For predictable results, you must also
10780           specify the same set of options used for compilation (-fpie, -fPIE,
10781           or model suboptions) when you specify this linker option.
10782
10783       -no-pie
10784           Don't produce a dynamically linked position independent executable.
10785
10786       -static-pie
10787           Produce a static position independent executable on targets that
10788           support it.  A static position independent executable is similar to
10789           a static executable, but can be loaded at any address without a
10790           dynamic linker.  For predictable results, you must also specify the
10791           same set of options used for compilation (-fpie, -fPIE, or model
10792           suboptions) when you specify this linker option.
10793
10794       -pthread
10795           Link with the POSIX threads library.  This option is supported on
10796           GNU/Linux targets, most other Unix derivatives, and also on x86
10797           Cygwin and MinGW targets.  On some targets this option also sets
10798           flags for the preprocessor, so it should be used consistently for
10799           both compilation and linking.
10800
10801       -rdynamic
10802           Pass the flag -export-dynamic to the ELF linker, on targets that
10803           support it. This instructs the linker to add all symbols, not only
10804           used ones, to the dynamic symbol table. This option is needed for
10805           some uses of "dlopen" or to allow obtaining backtraces from within
10806           a program.
10807
10808       -s  Remove all symbol table and relocation information from the
10809           executable.
10810
10811       -static
10812           On systems that support dynamic linking, this overrides -pie and
10813           prevents linking with the shared libraries.  On other systems, this
10814           option has no effect.
10815
10816       -shared
10817           Produce a shared object which can then be linked with other objects
10818           to form an executable.  Not all systems support this option.  For
10819           predictable results, you must also specify the same set of options
10820           used for compilation (-fpic, -fPIC, or model suboptions) when you
10821           specify this linker option.[1]
10822
10823       -shared-libgcc
10824       -static-libgcc
10825           On systems that provide libgcc as a shared library, these options
10826           force the use of either the shared or static version, respectively.
10827           If no shared version of libgcc was built when the compiler was
10828           configured, these options have no effect.
10829
10830           There are several situations in which an application should use the
10831           shared libgcc instead of the static version.  The most common of
10832           these is when the application wishes to throw and catch exceptions
10833           across different shared libraries.  In that case, each of the
10834           libraries as well as the application itself should use the shared
10835           libgcc.
10836
10837           Therefore, the G++ driver automatically adds -shared-libgcc
10838           whenever you build a shared library or a main executable, because
10839           C++ programs typically use exceptions, so this is the right thing
10840           to do.
10841
10842           If, instead, you use the GCC driver to create shared libraries, you
10843           may find that they are not always linked with the shared libgcc.
10844           If GCC finds, at its configuration time, that you have a non-GNU
10845           linker or a GNU linker that does not support option --eh-frame-hdr,
10846           it links the shared version of libgcc into shared libraries by
10847           default.  Otherwise, it takes advantage of the linker and optimizes
10848           away the linking with the shared version of libgcc, linking with
10849           the static version of libgcc by default.  This allows exceptions to
10850           propagate through such shared libraries, without incurring
10851           relocation costs at library load time.
10852
10853           However, if a library or main executable is supposed to throw or
10854           catch exceptions, you must link it using the G++ driver, or using
10855           the option -shared-libgcc, such that it is linked with the shared
10856           libgcc.
10857
10858       -static-libasan
10859           When the -fsanitize=address option is used to link a program, the
10860           GCC driver automatically links against libasan.  If libasan is
10861           available as a shared library, and the -static option is not used,
10862           then this links against the shared version of libasan.  The
10863           -static-libasan option directs the GCC driver to link libasan
10864           statically, without necessarily linking other libraries statically.
10865
10866       -static-libtsan
10867           When the -fsanitize=thread option is used to link a program, the
10868           GCC driver automatically links against libtsan.  If libtsan is
10869           available as a shared library, and the -static option is not used,
10870           then this links against the shared version of libtsan.  The
10871           -static-libtsan option directs the GCC driver to link libtsan
10872           statically, without necessarily linking other libraries statically.
10873
10874       -static-liblsan
10875           When the -fsanitize=leak option is used to link a program, the GCC
10876           driver automatically links against liblsan.  If liblsan is
10877           available as a shared library, and the -static option is not used,
10878           then this links against the shared version of liblsan.  The
10879           -static-liblsan option directs the GCC driver to link liblsan
10880           statically, without necessarily linking other libraries statically.
10881
10882       -static-libubsan
10883           When the -fsanitize=undefined option is used to link a program, the
10884           GCC driver automatically links against libubsan.  If libubsan is
10885           available as a shared library, and the -static option is not used,
10886           then this links against the shared version of libubsan.  The
10887           -static-libubsan option directs the GCC driver to link libubsan
10888           statically, without necessarily linking other libraries statically.
10889
10890       -static-libmpx
10891           When the -fcheck-pointer bounds and -mmpx options are used to link
10892           a program, the GCC driver automatically links against libmpx.  If
10893           libmpx is available as a shared library, and the -static option is
10894           not used, then this links against the shared version of libmpx.
10895           The -static-libmpx option directs the GCC driver to link libmpx
10896           statically, without necessarily linking other libraries statically.
10897
10898       -static-libmpxwrappers
10899           When the -fcheck-pointer bounds and -mmpx options are used to link
10900           a program without also using -fno-chkp-use-wrappers, the GCC driver
10901           automatically links against libmpxwrappers.  If libmpxwrappers is
10902           available as a shared library, and the -static option is not used,
10903           then this links against the shared version of libmpxwrappers.  The
10904           -static-libmpxwrappers option directs the GCC driver to link
10905           libmpxwrappers statically, without necessarily linking other
10906           libraries statically.
10907
10908       -static-libstdc++
10909           When the g++ program is used to link a C++ program, it normally
10910           automatically links against libstdc++.  If libstdc++ is available
10911           as a shared library, and the -static option is not used, then this
10912           links against the shared version of libstdc++.  That is normally
10913           fine.  However, it is sometimes useful to freeze the version of
10914           libstdc++ used by the program without going all the way to a fully
10915           static link.  The -static-libstdc++ option directs the g++ driver
10916           to link libstdc++ statically, without necessarily linking other
10917           libraries statically.
10918
10919       -symbolic
10920           Bind references to global symbols when building a shared object.
10921           Warn about any unresolved references (unless overridden by the link
10922           editor option -Xlinker -z -Xlinker defs).  Only a few systems
10923           support this option.
10924
10925       -T script
10926           Use script as the linker script.  This option is supported by most
10927           systems using the GNU linker.  On some targets, such as bare-board
10928           targets without an operating system, the -T option may be required
10929           when linking to avoid references to undefined symbols.
10930
10931       -Xlinker option
10932           Pass option as an option to the linker.  You can use this to supply
10933           system-specific linker options that GCC does not recognize.
10934
10935           If you want to pass an option that takes a separate argument, you
10936           must use -Xlinker twice, once for the option and once for the
10937           argument.  For example, to pass -assert definitions, you must write
10938           -Xlinker -assert -Xlinker definitions.  It does not work to write
10939           -Xlinker "-assert definitions", because this passes the entire
10940           string as a single argument, which is not what the linker expects.
10941
10942           When using the GNU linker, it is usually more convenient to pass
10943           arguments to linker options using the option=value syntax than as
10944           separate arguments.  For example, you can specify -Xlinker
10945           -Map=output.map rather than -Xlinker -Map -Xlinker output.map.
10946           Other linkers may not support this syntax for command-line options.
10947
10948       -Wl,option
10949           Pass option as an option to the linker.  If option contains commas,
10950           it is split into multiple options at the commas.  You can use this
10951           syntax to pass an argument to the option.  For example,
10952           -Wl,-Map,output.map passes -Map output.map to the linker.  When
10953           using the GNU linker, you can also get the same effect with
10954           -Wl,-Map=output.map.
10955
10956       -u symbol
10957           Pretend the symbol symbol is undefined, to force linking of library
10958           modules to define it.  You can use -u multiple times with different
10959           symbols to force loading of additional library modules.
10960
10961       -z keyword
10962           -z is passed directly on to the linker along with the keyword
10963           keyword. See the section in the documentation of your linker for
10964           permitted values and their meanings.
10965
10966   Options for Directory Search
10967       These options specify directories to search for header files, for
10968       libraries and for parts of the compiler:
10969
10970       -I dir
10971       -iquote dir
10972       -isystem dir
10973       -idirafter dir
10974           Add the directory dir to the list of directories to be searched for
10975           header files during preprocessing.  If dir begins with = or
10976           $SYSROOT, then the = or $SYSROOT is replaced by the sysroot prefix;
10977           see --sysroot and -isysroot.
10978
10979           Directories specified with -iquote apply only to the quote form of
10980           the directive, "#include "file"".  Directories specified with -I,
10981           -isystem, or -idirafter apply to lookup for both the
10982           "#include "file"" and "#include <file>" directives.
10983
10984           You can specify any number or combination of these options on the
10985           command line to search for header files in several directories.
10986           The lookup order is as follows:
10987
10988           1.  For the quote form of the include directive, the directory of
10989               the current file is searched first.
10990
10991           2.  For the quote form of the include directive, the directories
10992               specified by -iquote options are searched in left-to-right
10993               order, as they appear on the command line.
10994
10995           3.  Directories specified with -I options are scanned in left-to-
10996               right order.
10997
10998           4.  Directories specified with -isystem options are scanned in
10999               left-to-right order.
11000
11001           5.  Standard system directories are scanned.
11002
11003           6.  Directories specified with -idirafter options are scanned in
11004               left-to-right order.
11005
11006           You can use -I to override a system header file, substituting your
11007           own version, since these directories are searched before the
11008           standard system header file directories.  However, you should not
11009           use this option to add directories that contain vendor-supplied
11010           system header files; use -isystem for that.
11011
11012           The -isystem and -idirafter options also mark the directory as a
11013           system directory, so that it gets the same special treatment that
11014           is applied to the standard system directories.
11015
11016           If a standard system include directory, or a directory specified
11017           with -isystem, is also specified with -I, the -I option is ignored.
11018           The directory is still searched but as a system directory at its
11019           normal position in the system include chain.  This is to ensure
11020           that GCC's procedure to fix buggy system headers and the ordering
11021           for the "#include_next" directive are not inadvertently changed.
11022           If you really need to change the search order for system
11023           directories, use the -nostdinc and/or -isystem options.
11024
11025       -I- Split the include path.  This option has been deprecated.  Please
11026           use -iquote instead for -I directories before the -I- and remove
11027           the -I- option.
11028
11029           Any directories specified with -I options before -I- are searched
11030           only for headers requested with "#include "file""; they are not
11031           searched for "#include <file>".  If additional directories are
11032           specified with -I options after the -I-, those directories are
11033           searched for all #include directives.
11034
11035           In addition, -I- inhibits the use of the directory of the current
11036           file directory as the first search directory for "#include "file"".
11037           There is no way to override this effect of -I-.
11038
11039       -iprefix prefix
11040           Specify prefix as the prefix for subsequent -iwithprefix options.
11041           If the prefix represents a directory, you should include the final
11042           /.
11043
11044       -iwithprefix dir
11045       -iwithprefixbefore dir
11046           Append dir to the prefix specified previously with -iprefix, and
11047           add the resulting directory to the include search path.
11048           -iwithprefixbefore puts it in the same place -I would; -iwithprefix
11049           puts it where -idirafter would.
11050
11051       -isysroot dir
11052           This option is like the --sysroot option, but applies only to
11053           header files (except for Darwin targets, where it applies to both
11054           header files and libraries).  See the --sysroot option for more
11055           information.
11056
11057       -imultilib dir
11058           Use dir as a subdirectory of the directory containing target-
11059           specific C++ headers.
11060
11061       -nostdinc
11062           Do not search the standard system directories for header files.
11063           Only the directories explicitly specified with -I, -iquote,
11064           -isystem, and/or -idirafter options (and the directory of the
11065           current file, if appropriate) are searched.
11066
11067       -nostdinc++
11068           Do not search for header files in the C++-specific standard
11069           directories, but do still search the other standard directories.
11070           (This option is used when building the C++ library.)
11071
11072       -iplugindir=dir
11073           Set the directory to search for plugins that are passed by
11074           -fplugin=name instead of -fplugin=path/name.so.  This option is not
11075           meant to be used by the user, but only passed by the driver.
11076
11077       -Ldir
11078           Add directory dir to the list of directories to be searched for -l.
11079
11080       -Bprefix
11081           This option specifies where to find the executables, libraries,
11082           include files, and data files of the compiler itself.
11083
11084           The compiler driver program runs one or more of the subprograms
11085           cpp, cc1, as and ld.  It tries prefix as a prefix for each program
11086           it tries to run, both with and without machine/version/ for the
11087           corresponding target machine and compiler version.
11088
11089           For each subprogram to be run, the compiler driver first tries the
11090           -B prefix, if any.  If that name is not found, or if -B is not
11091           specified, the driver tries two standard prefixes, /usr/lib/gcc/
11092           and /usr/local/lib/gcc/.  If neither of those results in a file
11093           name that is found, the unmodified program name is searched for
11094           using the directories specified in your PATH environment variable.
11095
11096           The compiler checks to see if the path provided by -B refers to a
11097           directory, and if necessary it adds a directory separator character
11098           at the end of the path.
11099
11100           -B prefixes that effectively specify directory names also apply to
11101           libraries in the linker, because the compiler translates these
11102           options into -L options for the linker.  They also apply to include
11103           files in the preprocessor, because the compiler translates these
11104           options into -isystem options for the preprocessor.  In this case,
11105           the compiler appends include to the prefix.
11106
11107           The runtime support file libgcc.a can also be searched for using
11108           the -B prefix, if needed.  If it is not found there, the two
11109           standard prefixes above are tried, and that is all.  The file is
11110           left out of the link if it is not found by those means.
11111
11112           Another way to specify a prefix much like the -B prefix is to use
11113           the environment variable GCC_EXEC_PREFIX.
11114
11115           As a special kludge, if the path provided by -B is [dir/]stageN/,
11116           where N is a number in the range 0 to 9, then it is replaced by
11117           [dir/]include.  This is to help with boot-strapping the compiler.
11118
11119       -no-canonical-prefixes
11120           Do not expand any symbolic links, resolve references to /../ or
11121           /./, or make the path absolute when generating a relative prefix.
11122
11123       --sysroot=dir
11124           Use dir as the logical root directory for headers and libraries.
11125           For example, if the compiler normally searches for headers in
11126           /usr/include and libraries in /usr/lib, it instead searches
11127           dir/usr/include and dir/usr/lib.
11128
11129           If you use both this option and the -isysroot option, then the
11130           --sysroot option applies to libraries, but the -isysroot option
11131           applies to header files.
11132
11133           The GNU linker (beginning with version 2.16) has the necessary
11134           support for this option.  If your linker does not support this
11135           option, the header file aspect of --sysroot still works, but the
11136           library aspect does not.
11137
11138       --no-sysroot-suffix
11139           For some targets, a suffix is added to the root directory specified
11140           with --sysroot, depending on the other options used, so that
11141           headers may for example be found in dir/suffix/usr/include instead
11142           of dir/usr/include.  This option disables the addition of such a
11143           suffix.
11144
11145   Options for Code Generation Conventions
11146       These machine-independent options control the interface conventions
11147       used in code generation.
11148
11149       Most of them have both positive and negative forms; the negative form
11150       of -ffoo is -fno-foo.  In the table below, only one of the forms is
11151       listed---the one that is not the default.  You can figure out the other
11152       form by either removing no- or adding it.
11153
11154       -fstack-reuse=reuse-level
11155           This option controls stack space reuse for user declared local/auto
11156           variables and compiler generated temporaries.  reuse_level can be
11157           all, named_vars, or none. all enables stack reuse for all local
11158           variables and temporaries, named_vars enables the reuse only for
11159           user defined local variables with names, and none disables stack
11160           reuse completely. The default value is all. The option is needed
11161           when the program extends the lifetime of a scoped local variable or
11162           a compiler generated temporary beyond the end point defined by the
11163           language.  When a lifetime of a variable ends, and if the variable
11164           lives in memory, the optimizing compiler has the freedom to reuse
11165           its stack space with other temporaries or scoped local variables
11166           whose live range does not overlap with it. Legacy code extending
11167           local lifetime is likely to break with the stack reuse
11168           optimization.
11169
11170           For example,
11171
11172                      int *p;
11173                      {
11174                        int local1;
11175
11176                        p = &local1;
11177                        local1 = 10;
11178                        ....
11179                      }
11180                      {
11181                         int local2;
11182                         local2 = 20;
11183                         ...
11184                      }
11185
11186                      if (*p == 10)  // out of scope use of local1
11187                        {
11188
11189                        }
11190
11191           Another example:
11192
11193                      struct A
11194                      {
11195                          A(int k) : i(k), j(k) { }
11196                          int i;
11197                          int j;
11198                      };
11199
11200                      A *ap;
11201
11202                      void foo(const A& ar)
11203                      {
11204                         ap = &ar;
11205                      }
11206
11207                      void bar()
11208                      {
11209                         foo(A(10)); // temp object's lifetime ends when foo returns
11210
11211                         {
11212                           A a(20);
11213                           ....
11214                         }
11215                         ap->i+= 10;  // ap references out of scope temp whose space
11216                                      // is reused with a. What is the value of ap->i?
11217                      }
11218
11219           The lifetime of a compiler generated temporary is well defined by
11220           the C++ standard. When a lifetime of a temporary ends, and if the
11221           temporary lives in memory, the optimizing compiler has the freedom
11222           to reuse its stack space with other temporaries or scoped local
11223           variables whose live range does not overlap with it. However some
11224           of the legacy code relies on the behavior of older compilers in
11225           which temporaries' stack space is not reused, the aggressive stack
11226           reuse can lead to runtime errors. This option is used to control
11227           the temporary stack reuse optimization.
11228
11229       -ftrapv
11230           This option generates traps for signed overflow on addition,
11231           subtraction, multiplication operations.  The options -ftrapv and
11232           -fwrapv override each other, so using -ftrapv -fwrapv on the
11233           command-line results in -fwrapv being effective.  Note that only
11234           active options override, so using -ftrapv -fwrapv -fno-wrapv on the
11235           command-line results in -ftrapv being effective.
11236
11237       -fwrapv
11238           This option instructs the compiler to assume that signed arithmetic
11239           overflow of addition, subtraction and multiplication wraps around
11240           using twos-complement representation.  This flag enables some
11241           optimizations and disables others.  The options -ftrapv and -fwrapv
11242           override each other, so using -ftrapv -fwrapv on the command-line
11243           results in -fwrapv being effective.  Note that only active options
11244           override, so using -ftrapv -fwrapv -fno-wrapv on the command-line
11245           results in -ftrapv being effective.
11246
11247       -fwrapv-pointer
11248           This option instructs the compiler to assume that pointer
11249           arithmetic overflow on addition and subtraction wraps around using
11250           twos-complement representation.  This flag disables some
11251           optimizations which assume pointer overflow is invalid.
11252
11253       -fstrict-overflow
11254           This option implies -fno-wrapv -fno-wrapv-pointer and when negated
11255           implies -fwrapv -fwrapv-pointer.
11256
11257       -fexceptions
11258           Enable exception handling.  Generates extra code needed to
11259           propagate exceptions.  For some targets, this implies GCC generates
11260           frame unwind information for all functions, which can produce
11261           significant data size overhead, although it does not affect
11262           execution.  If you do not specify this option, GCC enables it by
11263           default for languages like C++ that normally require exception
11264           handling, and disables it for languages like C that do not normally
11265           require it.  However, you may need to enable this option when
11266           compiling C code that needs to interoperate properly with exception
11267           handlers written in C++.  You may also wish to disable this option
11268           if you are compiling older C++ programs that don't use exception
11269           handling.
11270
11271       -fnon-call-exceptions
11272           Generate code that allows trapping instructions to throw
11273           exceptions.  Note that this requires platform-specific runtime
11274           support that does not exist everywhere.  Moreover, it only allows
11275           trapping instructions to throw exceptions, i.e. memory references
11276           or floating-point instructions.  It does not allow exceptions to be
11277           thrown from arbitrary signal handlers such as "SIGALRM".
11278
11279       -fdelete-dead-exceptions
11280           Consider that instructions that may throw exceptions but don't
11281           otherwise contribute to the execution of the program can be
11282           optimized away.  This option is enabled by default for the Ada
11283           front end, as permitted by the Ada language specification.
11284           Optimization passes that cause dead exceptions to be removed are
11285           enabled independently at different optimization levels.
11286
11287       -funwind-tables
11288           Similar to -fexceptions, except that it just generates any needed
11289           static data, but does not affect the generated code in any other
11290           way.  You normally do not need to enable this option; instead, a
11291           language processor that needs this handling enables it on your
11292           behalf.
11293
11294       -fasynchronous-unwind-tables
11295           Generate unwind table in DWARF format, if supported by target
11296           machine.  The table is exact at each instruction boundary, so it
11297           can be used for stack unwinding from asynchronous events (such as
11298           debugger or garbage collector).
11299
11300       -fno-gnu-unique
11301           On systems with recent GNU assembler and C library, the C++
11302           compiler uses the "STB_GNU_UNIQUE" binding to make sure that
11303           definitions of template static data members and static local
11304           variables in inline functions are unique even in the presence of
11305           "RTLD_LOCAL"; this is necessary to avoid problems with a library
11306           used by two different "RTLD_LOCAL" plugins depending on a
11307           definition in one of them and therefore disagreeing with the other
11308           one about the binding of the symbol.  But this causes "dlclose" to
11309           be ignored for affected DSOs; if your program relies on
11310           reinitialization of a DSO via "dlclose" and "dlopen", you can use
11311           -fno-gnu-unique.
11312
11313       -fpcc-struct-return
11314           Return "short" "struct" and "union" values in memory like longer
11315           ones, rather than in registers.  This convention is less efficient,
11316           but it has the advantage of allowing intercallability between GCC-
11317           compiled files and files compiled with other compilers,
11318           particularly the Portable C Compiler (pcc).
11319
11320           The precise convention for returning structures in memory depends
11321           on the target configuration macros.
11322
11323           Short structures and unions are those whose size and alignment
11324           match that of some integer type.
11325
11326           Warning: code compiled with the -fpcc-struct-return switch is not
11327           binary compatible with code compiled with the -freg-struct-return
11328           switch.  Use it to conform to a non-default application binary
11329           interface.
11330
11331       -freg-struct-return
11332           Return "struct" and "union" values in registers when possible.
11333           This is more efficient for small structures than
11334           -fpcc-struct-return.
11335
11336           If you specify neither -fpcc-struct-return nor -freg-struct-return,
11337           GCC defaults to whichever convention is standard for the target.
11338           If there is no standard convention, GCC defaults to
11339           -fpcc-struct-return, except on targets where GCC is the principal
11340           compiler.  In those cases, we can choose the standard, and we chose
11341           the more efficient register return alternative.
11342
11343           Warning: code compiled with the -freg-struct-return switch is not
11344           binary compatible with code compiled with the -fpcc-struct-return
11345           switch.  Use it to conform to a non-default application binary
11346           interface.
11347
11348       -fshort-enums
11349           Allocate to an "enum" type only as many bytes as it needs for the
11350           declared range of possible values.  Specifically, the "enum" type
11351           is equivalent to the smallest integer type that has enough room.
11352
11353           Warning: the -fshort-enums switch causes GCC to generate code that
11354           is not binary compatible with code generated without that switch.
11355           Use it to conform to a non-default application binary interface.
11356
11357       -fshort-wchar
11358           Override the underlying type for "wchar_t" to be "short unsigned
11359           int" instead of the default for the target.  This option is useful
11360           for building programs to run under WINE.
11361
11362           Warning: the -fshort-wchar switch causes GCC to generate code that
11363           is not binary compatible with code generated without that switch.
11364           Use it to conform to a non-default application binary interface.
11365
11366       -fno-common
11367           In C code, this option controls the placement of global variables
11368           defined without an initializer, known as tentative definitions in
11369           the C standard.  Tentative definitions are distinct from
11370           declarations of a variable with the "extern" keyword, which do not
11371           allocate storage.
11372
11373           Unix C compilers have traditionally allocated storage for
11374           uninitialized global variables in a common block.  This allows the
11375           linker to resolve all tentative definitions of the same variable in
11376           different compilation units to the same object, or to a non-
11377           tentative definition.  This is the behavior specified by -fcommon,
11378           and is the default for GCC on most targets.  On the other hand,
11379           this behavior is not required by ISO C, and on some targets may
11380           carry a speed or code size penalty on variable references.
11381
11382           The -fno-common option specifies that the compiler should instead
11383           place uninitialized global variables in the data section of the
11384           object file.  This inhibits the merging of tentative definitions by
11385           the linker so you get a multiple-definition error if the same
11386           variable is defined in more than one compilation unit.  Compiling
11387           with -fno-common is useful on targets for which it provides better
11388           performance, or if you wish to verify that the program will work on
11389           other systems that always treat uninitialized variable definitions
11390           this way.
11391
11392       -fno-ident
11393           Ignore the "#ident" directive.
11394
11395       -finhibit-size-directive
11396           Don't output a ".size" assembler directive, or anything else that
11397           would cause trouble if the function is split in the middle, and the
11398           two halves are placed at locations far apart in memory.  This
11399           option is used when compiling crtstuff.c; you should not need to
11400           use it for anything else.
11401
11402       -fverbose-asm
11403           Put extra commentary information in the generated assembly code to
11404           make it more readable.  This option is generally only of use to
11405           those who actually need to read the generated assembly code
11406           (perhaps while debugging the compiler itself).
11407
11408           -fno-verbose-asm, the default, causes the extra information to be
11409           omitted and is useful when comparing two assembler files.
11410
11411           The added comments include:
11412
11413           *   information on the compiler version and command-line options,
11414
11415           *   the source code lines associated with the assembly
11416               instructions, in the form FILENAME:LINENUMBER:CONTENT OF LINE,
11417
11418           *   hints on which high-level expressions correspond to the various
11419               assembly instruction operands.
11420
11421           For example, given this C source file:
11422
11423                   int test (int n)
11424                   {
11425                     int i;
11426                     int total = 0;
11427
11428                     for (i = 0; i < n; i++)
11429                       total += i * i;
11430
11431                     return total;
11432                   }
11433
11434           compiling to (x86_64) assembly via -S and emitting the result
11435           direct to stdout via -o -
11436
11437                   gcc -S test.c -fverbose-asm -Os -o -
11438
11439           gives output similar to this:
11440
11441                           .file   "test.c"
11442                   # GNU C11 (GCC) version 7.0.0 20160809 (experimental) (x86_64-pc-linux-gnu)
11443                     [...snip...]
11444                   # options passed:
11445                     [...snip...]
11446
11447                           .text
11448                           .globl  test
11449                           .type   test, @function
11450                   test:
11451                   .LFB0:
11452                           .cfi_startproc
11453                   # test.c:4:   int total = 0;
11454                           xorl    %eax, %eax      # <retval>
11455                   # test.c:6:   for (i = 0; i < n; i++)
11456                           xorl    %edx, %edx      # i
11457                   .L2:
11458                   # test.c:6:   for (i = 0; i < n; i++)
11459                           cmpl    %edi, %edx      # n, i
11460                           jge     .L5     #,
11461                   # test.c:7:     total += i * i;
11462                           movl    %edx, %ecx      # i, tmp92
11463                           imull   %edx, %ecx      # i, tmp92
11464                   # test.c:6:   for (i = 0; i < n; i++)
11465                           incl    %edx    # i
11466                   # test.c:7:     total += i * i;
11467                           addl    %ecx, %eax      # tmp92, <retval>
11468                           jmp     .L2     #
11469                   .L5:
11470                   # test.c:10: }
11471                           ret
11472                           .cfi_endproc
11473                   .LFE0:
11474                           .size   test, .-test
11475                           .ident  "GCC: (GNU) 7.0.0 20160809 (experimental)"
11476                           .section        .note.GNU-stack,"",@progbits
11477
11478           The comments are intended for humans rather than machines and hence
11479           the precise format of the comments is subject to change.
11480
11481       -frecord-gcc-switches
11482           This switch causes the command line used to invoke the compiler to
11483           be recorded into the object file that is being created.  This
11484           switch is only implemented on some targets and the exact format of
11485           the recording is target and binary file format dependent, but it
11486           usually takes the form of a section containing ASCII text.  This
11487           switch is related to the -fverbose-asm switch, but that switch only
11488           records information in the assembler output file as comments, so it
11489           never reaches the object file.  See also -grecord-gcc-switches for
11490           another way of storing compiler options into the object file.
11491
11492       -fpic
11493           Generate position-independent code (PIC) suitable for use in a
11494           shared library, if supported for the target machine.  Such code
11495           accesses all constant addresses through a global offset table
11496           (GOT).  The dynamic loader resolves the GOT entries when the
11497           program starts (the dynamic loader is not part of GCC; it is part
11498           of the operating system).  If the GOT size for the linked
11499           executable exceeds a machine-specific maximum size, you get an
11500           error message from the linker indicating that -fpic does not work;
11501           in that case, recompile with -fPIC instead.  (These maximums are 8k
11502           on the SPARC, 28k on AArch64 and 32k on the m68k and RS/6000.  The
11503           x86 has no such limit.)
11504
11505           Position-independent code requires special support, and therefore
11506           works only on certain machines.  For the x86, GCC supports PIC for
11507           System V but not for the Sun 386i.  Code generated for the IBM
11508           RS/6000 is always position-independent.
11509
11510           When this flag is set, the macros "__pic__" and "__PIC__" are
11511           defined to 1.
11512
11513       -fPIC
11514           If supported for the target machine, emit position-independent
11515           code, suitable for dynamic linking and avoiding any limit on the
11516           size of the global offset table.  This option makes a difference on
11517           AArch64, m68k, PowerPC and SPARC.
11518
11519           Position-independent code requires special support, and therefore
11520           works only on certain machines.
11521
11522           When this flag is set, the macros "__pic__" and "__PIC__" are
11523           defined to 2.
11524
11525       -fpie
11526       -fPIE
11527           These options are similar to -fpic and -fPIC, but generated
11528           position independent code can be only linked into executables.
11529           Usually these options are used when -pie GCC option is used during
11530           linking.
11531
11532           -fpie and -fPIE both define the macros "__pie__" and "__PIE__".
11533           The macros have the value 1 for -fpie and 2 for -fPIE.
11534
11535       -fno-plt
11536           Do not use the PLT for external function calls in position-
11537           independent code.  Instead, load the callee address at call sites
11538           from the GOT and branch to it.  This leads to more efficient code
11539           by eliminating PLT stubs and exposing GOT loads to optimizations.
11540           On architectures such as 32-bit x86 where PLT stubs expect the GOT
11541           pointer in a specific register, this gives more register allocation
11542           freedom to the compiler.  Lazy binding requires use of the PLT;
11543           with -fno-plt all external symbols are resolved at load time.
11544
11545           Alternatively, the function attribute "noplt" can be used to avoid
11546           calls through the PLT for specific external functions.
11547
11548           In position-dependent code, a few targets also convert calls to
11549           functions that are marked to not use the PLT to use the GOT
11550           instead.
11551
11552       -fno-jump-tables
11553           Do not use jump tables for switch statements even where it would be
11554           more efficient than other code generation strategies.  This option
11555           is of use in conjunction with -fpic or -fPIC for building code that
11556           forms part of a dynamic linker and cannot reference the address of
11557           a jump table.  On some targets, jump tables do not require a GOT
11558           and this option is not needed.
11559
11560       -ffixed-reg
11561           Treat the register named reg as a fixed register; generated code
11562           should never refer to it (except perhaps as a stack pointer, frame
11563           pointer or in some other fixed role).
11564
11565           reg must be the name of a register.  The register names accepted
11566           are machine-specific and are defined in the "REGISTER_NAMES" macro
11567           in the machine description macro file.
11568
11569           This flag does not have a negative form, because it specifies a
11570           three-way choice.
11571
11572       -fcall-used-reg
11573           Treat the register named reg as an allocable register that is
11574           clobbered by function calls.  It may be allocated for temporaries
11575           or variables that do not live across a call.  Functions compiled
11576           this way do not save and restore the register reg.
11577
11578           It is an error to use this flag with the frame pointer or stack
11579           pointer.  Use of this flag for other registers that have fixed
11580           pervasive roles in the machine's execution model produces
11581           disastrous results.
11582
11583           This flag does not have a negative form, because it specifies a
11584           three-way choice.
11585
11586       -fcall-saved-reg
11587           Treat the register named reg as an allocable register saved by
11588           functions.  It may be allocated even for temporaries or variables
11589           that live across a call.  Functions compiled this way save and
11590           restore the register reg if they use it.
11591
11592           It is an error to use this flag with the frame pointer or stack
11593           pointer.  Use of this flag for other registers that have fixed
11594           pervasive roles in the machine's execution model produces
11595           disastrous results.
11596
11597           A different sort of disaster results from the use of this flag for
11598           a register in which function values may be returned.
11599
11600           This flag does not have a negative form, because it specifies a
11601           three-way choice.
11602
11603       -fpack-struct[=n]
11604           Without a value specified, pack all structure members together
11605           without holes.  When a value is specified (which must be a small
11606           power of two), pack structure members according to this value,
11607           representing the maximum alignment (that is, objects with default
11608           alignment requirements larger than this are output potentially
11609           unaligned at the next fitting location.
11610
11611           Warning: the -fpack-struct switch causes GCC to generate code that
11612           is not binary compatible with code generated without that switch.
11613           Additionally, it makes the code suboptimal.  Use it to conform to a
11614           non-default application binary interface.
11615
11616       -fleading-underscore
11617           This option and its counterpart, -fno-leading-underscore, forcibly
11618           change the way C symbols are represented in the object file.  One
11619           use is to help link with legacy assembly code.
11620
11621           Warning: the -fleading-underscore switch causes GCC to generate
11622           code that is not binary compatible with code generated without that
11623           switch.  Use it to conform to a non-default application binary
11624           interface.  Not all targets provide complete support for this
11625           switch.
11626
11627       -ftls-model=model
11628           Alter the thread-local storage model to be used.  The model
11629           argument should be one of global-dynamic, local-dynamic, initial-
11630           exec or local-exec.  Note that the choice is subject to
11631           optimization: the compiler may use a more efficient model for
11632           symbols not visible outside of the translation unit, or if -fpic is
11633           not given on the command line.
11634
11635           The default without -fpic is initial-exec; with -fpic the default
11636           is global-dynamic.
11637
11638       -ftrampolines
11639           For targets that normally need trampolines for nested functions,
11640           always generate them instead of using descriptors.  Otherwise, for
11641           targets that do not need them, like for example HP-PA or IA-64, do
11642           nothing.
11643
11644           A trampoline is a small piece of code that is created at run time
11645           on the stack when the address of a nested function is taken, and is
11646           used to call the nested function indirectly.  Therefore, it
11647           requires the stack to be made executable in order for the program
11648           to work properly.
11649
11650           -fno-trampolines is enabled by default on a language by language
11651           basis to let the compiler avoid generating them, if it computes
11652           that this is safe, and replace them with descriptors.  Descriptors
11653           are made up of data only, but the generated code must be prepared
11654           to deal with them.  As of this writing, -fno-trampolines is enabled
11655           by default only for Ada.
11656
11657           Moreover, code compiled with -ftrampolines and code compiled with
11658           -fno-trampolines are not binary compatible if nested functions are
11659           present.  This option must therefore be used on a program-wide
11660           basis and be manipulated with extreme care.
11661
11662       -fvisibility=[default|internal|hidden|protected]
11663           Set the default ELF image symbol visibility to the specified
11664           option---all symbols are marked with this unless overridden within
11665           the code.  Using this feature can very substantially improve
11666           linking and load times of shared object libraries, produce more
11667           optimized code, provide near-perfect API export and prevent symbol
11668           clashes.  It is strongly recommended that you use this in any
11669           shared objects you distribute.
11670
11671           Despite the nomenclature, default always means public; i.e.,
11672           available to be linked against from outside the shared object.
11673           protected and internal are pretty useless in real-world usage so
11674           the only other commonly used option is hidden.  The default if
11675           -fvisibility isn't specified is default, i.e., make every symbol
11676           public.
11677
11678           A good explanation of the benefits offered by ensuring ELF symbols
11679           have the correct visibility is given by "How To Write Shared
11680           Libraries" by Ulrich Drepper (which can be found at
11681           <https://www.akkadia.org/drepper/>)---however a superior solution
11682           made possible by this option to marking things hidden when the
11683           default is public is to make the default hidden and mark things
11684           public.  This is the norm with DLLs on Windows and with
11685           -fvisibility=hidden and "__attribute__ ((visibility("default")))"
11686           instead of "__declspec(dllexport)" you get almost identical
11687           semantics with identical syntax.  This is a great boon to those
11688           working with cross-platform projects.
11689
11690           For those adding visibility support to existing code, you may find
11691           "#pragma GCC visibility" of use.  This works by you enclosing the
11692           declarations you wish to set visibility for with (for example)
11693           "#pragma GCC visibility push(hidden)" and "#pragma GCC visibility
11694           pop".  Bear in mind that symbol visibility should be viewed as part
11695           of the API interface contract and thus all new code should always
11696           specify visibility when it is not the default; i.e., declarations
11697           only for use within the local DSO should always be marked
11698           explicitly as hidden as so to avoid PLT indirection
11699           overheads---making this abundantly clear also aids readability and
11700           self-documentation of the code.  Note that due to ISO C++
11701           specification requirements, "operator new" and "operator delete"
11702           must always be of default visibility.
11703
11704           Be aware that headers from outside your project, in particular
11705           system headers and headers from any other library you use, may not
11706           be expecting to be compiled with visibility other than the default.
11707           You may need to explicitly say "#pragma GCC visibility
11708           push(default)" before including any such headers.
11709
11710           "extern" declarations are not affected by -fvisibility, so a lot of
11711           code can be recompiled with -fvisibility=hidden with no
11712           modifications.  However, this means that calls to "extern"
11713           functions with no explicit visibility use the PLT, so it is more
11714           effective to use "__attribute ((visibility))" and/or "#pragma GCC
11715           visibility" to tell the compiler which "extern" declarations should
11716           be treated as hidden.
11717
11718           Note that -fvisibility does affect C++ vague linkage entities. This
11719           means that, for instance, an exception class that is be thrown
11720           between DSOs must be explicitly marked with default visibility so
11721           that the type_info nodes are unified between the DSOs.
11722
11723           An overview of these techniques, their benefits and how to use them
11724           is at <http://gcc.gnu.org/wiki/Visibility>.
11725
11726       -fstrict-volatile-bitfields
11727           This option should be used if accesses to volatile bit-fields (or
11728           other structure fields, although the compiler usually honors those
11729           types anyway) should use a single access of the width of the
11730           field's type, aligned to a natural alignment if possible.  For
11731           example, targets with memory-mapped peripheral registers might
11732           require all such accesses to be 16 bits wide; with this flag you
11733           can declare all peripheral bit-fields as "unsigned short" (assuming
11734           short is 16 bits on these targets) to force GCC to use 16-bit
11735           accesses instead of, perhaps, a more efficient 32-bit access.
11736
11737           If this option is disabled, the compiler uses the most efficient
11738           instruction.  In the previous example, that might be a 32-bit load
11739           instruction, even though that accesses bytes that do not contain
11740           any portion of the bit-field, or memory-mapped registers unrelated
11741           to the one being updated.
11742
11743           In some cases, such as when the "packed" attribute is applied to a
11744           structure field, it may not be possible to access the field with a
11745           single read or write that is correctly aligned for the target
11746           machine.  In this case GCC falls back to generating multiple
11747           accesses rather than code that will fault or truncate the result at
11748           run time.
11749
11750           Note:  Due to restrictions of the C/C++11 memory model, write
11751           accesses are not allowed to touch non bit-field members.  It is
11752           therefore recommended to define all bits of the field's type as
11753           bit-field members.
11754
11755           The default value of this option is determined by the application
11756           binary interface for the target processor.
11757
11758       -fsync-libcalls
11759           This option controls whether any out-of-line instance of the
11760           "__sync" family of functions may be used to implement the C++11
11761           "__atomic" family of functions.
11762
11763           The default value of this option is enabled, thus the only useful
11764           form of the option is -fno-sync-libcalls.  This option is used in
11765           the implementation of the libatomic runtime library.
11766
11767   GCC Developer Options
11768       This section describes command-line options that are primarily of
11769       interest to GCC developers, including options to support compiler
11770       testing and investigation of compiler bugs and compile-time performance
11771       problems.  This includes options that produce debug dumps at various
11772       points in the compilation; that print statistics such as memory use and
11773       execution time; and that print information about GCC's configuration,
11774       such as where it searches for libraries.  You should rarely need to use
11775       any of these options for ordinary compilation and linking tasks.
11776
11777       -dletters
11778       -fdump-rtl-pass
11779       -fdump-rtl-pass=filename
11780           Says to make debugging dumps during compilation at times specified
11781           by letters.  This is used for debugging the RTL-based passes of the
11782           compiler.  The file names for most of the dumps are made by
11783           appending a pass number and a word to the dumpname, and the files
11784           are created in the directory of the output file.  In case of
11785           =filename option, the dump is output on the given file instead of
11786           the pass numbered dump files.  Note that the pass number is
11787           assigned as passes are registered into the pass manager.  Most
11788           passes are registered in the order that they will execute and for
11789           these passes the number corresponds to the pass execution order.
11790           However, passes registered by plugins, passes specific to
11791           compilation targets, or passes that are otherwise registered after
11792           all the other passes are numbered higher than a pass named "final",
11793           even if they are executed earlier.  dumpname is generated from the
11794           name of the output file if explicitly specified and not an
11795           executable, otherwise it is the basename of the source file.
11796
11797           Some -dletters switches have different meaning when -E is used for
11798           preprocessing.
11799
11800           Debug dumps can be enabled with a -fdump-rtl switch or some -d
11801           option letters.  Here are the possible letters for use in pass and
11802           letters, and their meanings:
11803
11804           -fdump-rtl-alignments
11805               Dump after branch alignments have been computed.
11806
11807           -fdump-rtl-asmcons
11808               Dump after fixing rtl statements that have unsatisfied in/out
11809               constraints.
11810
11811           -fdump-rtl-auto_inc_dec
11812               Dump after auto-inc-dec discovery.  This pass is only run on
11813               architectures that have auto inc or auto dec instructions.
11814
11815           -fdump-rtl-barriers
11816               Dump after cleaning up the barrier instructions.
11817
11818           -fdump-rtl-bbpart
11819               Dump after partitioning hot and cold basic blocks.
11820
11821           -fdump-rtl-bbro
11822               Dump after block reordering.
11823
11824           -fdump-rtl-btl1
11825           -fdump-rtl-btl2
11826               -fdump-rtl-btl1 and -fdump-rtl-btl2 enable dumping after the
11827               two branch target load optimization passes.
11828
11829           -fdump-rtl-bypass
11830               Dump after jump bypassing and control flow optimizations.
11831
11832           -fdump-rtl-combine
11833               Dump after the RTL instruction combination pass.
11834
11835           -fdump-rtl-compgotos
11836               Dump after duplicating the computed gotos.
11837
11838           -fdump-rtl-ce1
11839           -fdump-rtl-ce2
11840           -fdump-rtl-ce3
11841               -fdump-rtl-ce1, -fdump-rtl-ce2, and -fdump-rtl-ce3 enable
11842               dumping after the three if conversion passes.
11843
11844           -fdump-rtl-cprop_hardreg
11845               Dump after hard register copy propagation.
11846
11847           -fdump-rtl-csa
11848               Dump after combining stack adjustments.
11849
11850           -fdump-rtl-cse1
11851           -fdump-rtl-cse2
11852               -fdump-rtl-cse1 and -fdump-rtl-cse2 enable dumping after the
11853               two common subexpression elimination passes.
11854
11855           -fdump-rtl-dce
11856               Dump after the standalone dead code elimination passes.
11857
11858           -fdump-rtl-dbr
11859               Dump after delayed branch scheduling.
11860
11861           -fdump-rtl-dce1
11862           -fdump-rtl-dce2
11863               -fdump-rtl-dce1 and -fdump-rtl-dce2 enable dumping after the
11864               two dead store elimination passes.
11865
11866           -fdump-rtl-eh
11867               Dump after finalization of EH handling code.
11868
11869           -fdump-rtl-eh_ranges
11870               Dump after conversion of EH handling range regions.
11871
11872           -fdump-rtl-expand
11873               Dump after RTL generation.
11874
11875           -fdump-rtl-fwprop1
11876           -fdump-rtl-fwprop2
11877               -fdump-rtl-fwprop1 and -fdump-rtl-fwprop2 enable dumping after
11878               the two forward propagation passes.
11879
11880           -fdump-rtl-gcse1
11881           -fdump-rtl-gcse2
11882               -fdump-rtl-gcse1 and -fdump-rtl-gcse2 enable dumping after
11883               global common subexpression elimination.
11884
11885           -fdump-rtl-init-regs
11886               Dump after the initialization of the registers.
11887
11888           -fdump-rtl-initvals
11889               Dump after the computation of the initial value sets.
11890
11891           -fdump-rtl-into_cfglayout
11892               Dump after converting to cfglayout mode.
11893
11894           -fdump-rtl-ira
11895               Dump after iterated register allocation.
11896
11897           -fdump-rtl-jump
11898               Dump after the second jump optimization.
11899
11900           -fdump-rtl-loop2
11901               -fdump-rtl-loop2 enables dumping after the rtl loop
11902               optimization passes.
11903
11904           -fdump-rtl-mach
11905               Dump after performing the machine dependent reorganization
11906               pass, if that pass exists.
11907
11908           -fdump-rtl-mode_sw
11909               Dump after removing redundant mode switches.
11910
11911           -fdump-rtl-rnreg
11912               Dump after register renumbering.
11913
11914           -fdump-rtl-outof_cfglayout
11915               Dump after converting from cfglayout mode.
11916
11917           -fdump-rtl-peephole2
11918               Dump after the peephole pass.
11919
11920           -fdump-rtl-postreload
11921               Dump after post-reload optimizations.
11922
11923           -fdump-rtl-pro_and_epilogue
11924               Dump after generating the function prologues and epilogues.
11925
11926           -fdump-rtl-sched1
11927           -fdump-rtl-sched2
11928               -fdump-rtl-sched1 and -fdump-rtl-sched2 enable dumping after
11929               the basic block scheduling passes.
11930
11931           -fdump-rtl-ree
11932               Dump after sign/zero extension elimination.
11933
11934           -fdump-rtl-seqabstr
11935               Dump after common sequence discovery.
11936
11937           -fdump-rtl-shorten
11938               Dump after shortening branches.
11939
11940           -fdump-rtl-sibling
11941               Dump after sibling call optimizations.
11942
11943           -fdump-rtl-split1
11944           -fdump-rtl-split2
11945           -fdump-rtl-split3
11946           -fdump-rtl-split4
11947           -fdump-rtl-split5
11948               These options enable dumping after five rounds of instruction
11949               splitting.
11950
11951           -fdump-rtl-sms
11952               Dump after modulo scheduling.  This pass is only run on some
11953               architectures.
11954
11955           -fdump-rtl-stack
11956               Dump after conversion from GCC's "flat register file" registers
11957               to the x87's stack-like registers.  This pass is only run on
11958               x86 variants.
11959
11960           -fdump-rtl-subreg1
11961           -fdump-rtl-subreg2
11962               -fdump-rtl-subreg1 and -fdump-rtl-subreg2 enable dumping after
11963               the two subreg expansion passes.
11964
11965           -fdump-rtl-unshare
11966               Dump after all rtl has been unshared.
11967
11968           -fdump-rtl-vartrack
11969               Dump after variable tracking.
11970
11971           -fdump-rtl-vregs
11972               Dump after converting virtual registers to hard registers.
11973
11974           -fdump-rtl-web
11975               Dump after live range splitting.
11976
11977           -fdump-rtl-regclass
11978           -fdump-rtl-subregs_of_mode_init
11979           -fdump-rtl-subregs_of_mode_finish
11980           -fdump-rtl-dfinit
11981           -fdump-rtl-dfinish
11982               These dumps are defined but always produce empty files.
11983
11984           -da
11985           -fdump-rtl-all
11986               Produce all the dumps listed above.
11987
11988           -dA Annotate the assembler output with miscellaneous debugging
11989               information.
11990
11991           -dD Dump all macro definitions, at the end of preprocessing, in
11992               addition to normal output.
11993
11994           -dH Produce a core dump whenever an error occurs.
11995
11996           -dp Annotate the assembler output with a comment indicating which
11997               pattern and alternative is used.  The length and cost of each
11998               instruction are also printed.
11999
12000           -dP Dump the RTL in the assembler output as a comment before each
12001               instruction.  Also turns on -dp annotation.
12002
12003           -dx Just generate RTL for a function instead of compiling it.
12004               Usually used with -fdump-rtl-expand.
12005
12006       -fdump-noaddr
12007           When doing debugging dumps, suppress address output.  This makes it
12008           more feasible to use diff on debugging dumps for compiler
12009           invocations with different compiler binaries and/or different text
12010           / bss / data / heap / stack / dso start locations.
12011
12012       -freport-bug
12013           Collect and dump debug information into a temporary file if an
12014           internal compiler error (ICE) occurs.
12015
12016       -fdump-unnumbered
12017           When doing debugging dumps, suppress instruction numbers and
12018           address output.  This makes it more feasible to use diff on
12019           debugging dumps for compiler invocations with different options, in
12020           particular with and without -g.
12021
12022       -fdump-unnumbered-links
12023           When doing debugging dumps (see -d option above), suppress
12024           instruction numbers for the links to the previous and next
12025           instructions in a sequence.
12026
12027       -fdump-ipa-switch
12028           Control the dumping at various stages of inter-procedural analysis
12029           language tree to a file.  The file name is generated by appending a
12030           switch specific suffix to the source file name, and the file is
12031           created in the same directory as the output file.  The following
12032           dumps are possible:
12033
12034           all Enables all inter-procedural analysis dumps.
12035
12036           cgraph
12037               Dumps information about call-graph optimization, unused
12038               function removal, and inlining decisions.
12039
12040           inline
12041               Dump after function inlining.
12042
12043       -fdump-lang-all
12044       -fdump-lang-switch
12045       -fdump-lang-switch-options
12046       -fdump-lang-switch-options=filename
12047           Control the dumping of language-specific information.  The options
12048           and filename portions behave as described in the -fdump-tree
12049           option.  The following switch values are accepted:
12050
12051           all Enable all language-specific dumps.
12052
12053           class
12054               Dump class hierarchy information.  Virtual table information is
12055               emitted unless 'slim' is specified.  This option is applicable
12056               to C++ only.
12057
12058           raw Dump the raw internal tree data.  This option is applicable to
12059               C++ only.
12060
12061       -fdump-passes
12062           Print on stderr the list of optimization passes that are turned on
12063           and off by the current command-line options.
12064
12065       -fdump-statistics-option
12066           Enable and control dumping of pass statistics in a separate file.
12067           The file name is generated by appending a suffix ending in
12068           .statistics to the source file name, and the file is created in the
12069           same directory as the output file.  If the -option form is used,
12070           -stats causes counters to be summed over the whole compilation unit
12071           while -details dumps every event as the passes generate them.  The
12072           default with no option is to sum counters for each function
12073           compiled.
12074
12075       -fdump-tree-all
12076       -fdump-tree-switch
12077       -fdump-tree-switch-options
12078       -fdump-tree-switch-options=filename
12079           Control the dumping at various stages of processing the
12080           intermediate language tree to a file.  The file name is generated
12081           by appending a switch-specific suffix to the source file name, and
12082           the file is created in the same directory as the output file. In
12083           case of =filename option, the dump is output on the given file
12084           instead of the auto named dump files.  If the -options form is
12085           used, options is a list of - separated options which control the
12086           details of the dump.  Not all options are applicable to all dumps;
12087           those that are not meaningful are ignored.  The following options
12088           are available
12089
12090           address
12091               Print the address of each node.  Usually this is not meaningful
12092               as it changes according to the environment and source file.
12093               Its primary use is for tying up a dump file with a debug
12094               environment.
12095
12096           asmname
12097               If "DECL_ASSEMBLER_NAME" has been set for a given decl, use
12098               that in the dump instead of "DECL_NAME".  Its primary use is
12099               ease of use working backward from mangled names in the assembly
12100               file.
12101
12102           slim
12103               When dumping front-end intermediate representations, inhibit
12104               dumping of members of a scope or body of a function merely
12105               because that scope has been reached.  Only dump such items when
12106               they are directly reachable by some other path.
12107
12108               When dumping pretty-printed trees, this option inhibits dumping
12109               the bodies of control structures.
12110
12111               When dumping RTL, print the RTL in slim (condensed) form
12112               instead of the default LISP-like representation.
12113
12114           raw Print a raw representation of the tree.  By default, trees are
12115               pretty-printed into a C-like representation.
12116
12117           details
12118               Enable more detailed dumps (not honored by every dump option).
12119               Also include information from the optimization passes.
12120
12121           stats
12122               Enable dumping various statistics about the pass (not honored
12123               by every dump option).
12124
12125           blocks
12126               Enable showing basic block boundaries (disabled in raw dumps).
12127
12128           graph
12129               For each of the other indicated dump files (-fdump-rtl-pass),
12130               dump a representation of the control flow graph suitable for
12131               viewing with GraphViz to file.passid.pass.dot.  Each function
12132               in the file is pretty-printed as a subgraph, so that GraphViz
12133               can render them all in a single plot.
12134
12135               This option currently only works for RTL dumps, and the RTL is
12136               always dumped in slim form.
12137
12138           vops
12139               Enable showing virtual operands for every statement.
12140
12141           lineno
12142               Enable showing line numbers for statements.
12143
12144           uid Enable showing the unique ID ("DECL_UID") for each variable.
12145
12146           verbose
12147               Enable showing the tree dump for each statement.
12148
12149           eh  Enable showing the EH region number holding each statement.
12150
12151           scev
12152               Enable showing scalar evolution analysis details.
12153
12154           optimized
12155               Enable showing optimization information (only available in
12156               certain passes).
12157
12158           missed
12159               Enable showing missed optimization information (only available
12160               in certain passes).
12161
12162           note
12163               Enable other detailed optimization information (only available
12164               in certain passes).
12165
12166           =filename
12167               Instead of an auto named dump file, output into the given file
12168               name. The file names stdout and stderr are treated specially
12169               and are considered already open standard streams. For example,
12170
12171                       gcc -O2 -ftree-vectorize -fdump-tree-vect-blocks=foo.dump
12172                            -fdump-tree-pre=/dev/stderr file.c
12173
12174               outputs vectorizer dump into foo.dump, while the PRE dump is
12175               output on to stderr. If two conflicting dump filenames are
12176               given for the same pass, then the latter option overrides the
12177               earlier one.
12178
12179           all Turn on all options, except raw, slim, verbose and lineno.
12180
12181           optall
12182               Turn on all optimization options, i.e., optimized, missed, and
12183               note.
12184
12185           To determine what tree dumps are available or find the dump for a
12186           pass of interest follow the steps below.
12187
12188           1.  Invoke GCC with -fdump-passes and in the stderr output look for
12189               a code that corresponds to the pass you are interested in.  For
12190               example, the codes "tree-evrp", "tree-vrp1", and "tree-vrp2"
12191               correspond to the three Value Range Propagation passes.  The
12192               number at the end distinguishes distinct invocations of the
12193               same pass.
12194
12195           2.  To enable the creation of the dump file, append the pass code
12196               to the -fdump- option prefix and invoke GCC with it.  For
12197               example, to enable the dump from the Early Value Range
12198               Propagation pass, invoke GCC with the -fdump-tree-evrp option.
12199               Optionally, you may specify the name of the dump file.  If you
12200               don't specify one, GCC creates as described below.
12201
12202           3.  Find the pass dump in a file whose name is composed of three
12203               components separated by a period: the name of the source file
12204               GCC was invoked to compile, a numeric suffix indicating the
12205               pass number followed by the letter t for tree passes (and the
12206               letter r for RTL passes), and finally the pass code.  For
12207               example, the Early VRP pass dump might be in a file named
12208               myfile.c.038t.evrp in the current working directory.  Note that
12209               the numeric codes are not stable and may change from one
12210               version of GCC to another.
12211
12212       -fopt-info
12213       -fopt-info-options
12214       -fopt-info-options=filename
12215           Controls optimization dumps from various optimization passes. If
12216           the -options form is used, options is a list of - separated option
12217           keywords to select the dump details and optimizations.
12218
12219           The options can be divided into two groups: options describing the
12220           verbosity of the dump, and options describing which optimizations
12221           should be included. The options from both the groups can be freely
12222           mixed as they are non-overlapping. However, in case of any
12223           conflicts, the later options override the earlier options on the
12224           command line.
12225
12226           The following options control the dump verbosity:
12227
12228           optimized
12229               Print information when an optimization is successfully applied.
12230               It is up to a pass to decide which information is relevant. For
12231               example, the vectorizer passes print the source location of
12232               loops which are successfully vectorized.
12233
12234           missed
12235               Print information about missed optimizations. Individual passes
12236               control which information to include in the output.
12237
12238           note
12239               Print verbose information about optimizations, such as certain
12240               transformations, more detailed messages about decisions etc.
12241
12242           all Print detailed optimization information. This includes
12243               optimized, missed, and note.
12244
12245           One or more of the following option keywords can be used to
12246           describe a group of optimizations:
12247
12248           ipa Enable dumps from all interprocedural optimizations.
12249
12250           loop
12251               Enable dumps from all loop optimizations.
12252
12253           inline
12254               Enable dumps from all inlining optimizations.
12255
12256           omp Enable dumps from all OMP (Offloading and Multi Processing)
12257               optimizations.
12258
12259           vec Enable dumps from all vectorization optimizations.
12260
12261           optall
12262               Enable dumps from all optimizations. This is a superset of the
12263               optimization groups listed above.
12264
12265           If options is omitted, it defaults to optimized-optall, which means
12266           to dump all info about successful optimizations from all the
12267           passes.
12268
12269           If the filename is provided, then the dumps from all the applicable
12270           optimizations are concatenated into the filename.  Otherwise the
12271           dump is output onto stderr. Though multiple -fopt-info options are
12272           accepted, only one of them can include a filename. If other
12273           filenames are provided then all but the first such option are
12274           ignored.
12275
12276           Note that the output filename is overwritten in case of multiple
12277           translation units. If a combined output from multiple translation
12278           units is desired, stderr should be used instead.
12279
12280           In the following example, the optimization info is output to
12281           stderr:
12282
12283                   gcc -O3 -fopt-info
12284
12285           This example:
12286
12287                   gcc -O3 -fopt-info-missed=missed.all
12288
12289           outputs missed optimization report from all the passes into
12290           missed.all, and this one:
12291
12292                   gcc -O2 -ftree-vectorize -fopt-info-vec-missed
12293
12294           prints information about missed optimization opportunities from
12295           vectorization passes on stderr.  Note that -fopt-info-vec-missed is
12296           equivalent to -fopt-info-missed-vec.  The order of the optimization
12297           group names and message types listed after -fopt-info does not
12298           matter.
12299
12300           As another example,
12301
12302                   gcc -O3 -fopt-info-inline-optimized-missed=inline.txt
12303
12304           outputs information about missed optimizations as well as optimized
12305           locations from all the inlining passes into inline.txt.
12306
12307           Finally, consider:
12308
12309                   gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt
12310
12311           Here the two output filenames vec.miss and loop.opt are in conflict
12312           since only one output file is allowed. In this case, only the first
12313           option takes effect and the subsequent options are ignored. Thus
12314           only vec.miss is produced which contains dumps from the vectorizer
12315           about missed opportunities.
12316
12317       -fsched-verbose=n
12318           On targets that use instruction scheduling, this option controls
12319           the amount of debugging output the scheduler prints to the dump
12320           files.
12321
12322           For n greater than zero, -fsched-verbose outputs the same
12323           information as -fdump-rtl-sched1 and -fdump-rtl-sched2.  For n
12324           greater than one, it also output basic block probabilities,
12325           detailed ready list information and unit/insn info.  For n greater
12326           than two, it includes RTL at abort point, control-flow and regions
12327           info.  And for n over four, -fsched-verbose also includes
12328           dependence info.
12329
12330       -fenable-kind-pass
12331       -fdisable-kind-pass=range-list
12332           This is a set of options that are used to explicitly disable/enable
12333           optimization passes.  These options are intended for use for
12334           debugging GCC.  Compiler users should use regular options for
12335           enabling/disabling passes instead.
12336
12337           -fdisable-ipa-pass
12338               Disable IPA pass pass. pass is the pass name.  If the same pass
12339               is statically invoked in the compiler multiple times, the pass
12340               name should be appended with a sequential number starting from
12341               1.
12342
12343           -fdisable-rtl-pass
12344           -fdisable-rtl-pass=range-list
12345               Disable RTL pass pass.  pass is the pass name.  If the same
12346               pass is statically invoked in the compiler multiple times, the
12347               pass name should be appended with a sequential number starting
12348               from 1.  range-list is a comma-separated list of function
12349               ranges or assembler names.  Each range is a number pair
12350               separated by a colon.  The range is inclusive in both ends.  If
12351               the range is trivial, the number pair can be simplified as a
12352               single number.  If the function's call graph node's uid falls
12353               within one of the specified ranges, the pass is disabled for
12354               that function.  The uid is shown in the function header of a
12355               dump file, and the pass names can be dumped by using option
12356               -fdump-passes.
12357
12358           -fdisable-tree-pass
12359           -fdisable-tree-pass=range-list
12360               Disable tree pass pass.  See -fdisable-rtl for the description
12361               of option arguments.
12362
12363           -fenable-ipa-pass
12364               Enable IPA pass pass.  pass is the pass name.  If the same pass
12365               is statically invoked in the compiler multiple times, the pass
12366               name should be appended with a sequential number starting from
12367               1.
12368
12369           -fenable-rtl-pass
12370           -fenable-rtl-pass=range-list
12371               Enable RTL pass pass.  See -fdisable-rtl for option argument
12372               description and examples.
12373
12374           -fenable-tree-pass
12375           -fenable-tree-pass=range-list
12376               Enable tree pass pass.  See -fdisable-rtl for the description
12377               of option arguments.
12378
12379           Here are some examples showing uses of these options.
12380
12381                   # disable ccp1 for all functions
12382                      -fdisable-tree-ccp1
12383                   # disable complete unroll for function whose cgraph node uid is 1
12384                      -fenable-tree-cunroll=1
12385                   # disable gcse2 for functions at the following ranges [1,1],
12386                   # [300,400], and [400,1000]
12387                   # disable gcse2 for functions foo and foo2
12388                      -fdisable-rtl-gcse2=foo,foo2
12389                   # disable early inlining
12390                      -fdisable-tree-einline
12391                   # disable ipa inlining
12392                      -fdisable-ipa-inline
12393                   # enable tree full unroll
12394                      -fenable-tree-unroll
12395
12396       -fchecking
12397       -fchecking=n
12398           Enable internal consistency checking.  The default depends on the
12399           compiler configuration.  -fchecking=2 enables further internal
12400           consistency checking that might affect code generation.
12401
12402       -frandom-seed=string
12403           This option provides a seed that GCC uses in place of random
12404           numbers in generating certain symbol names that have to be
12405           different in every compiled file.  It is also used to place unique
12406           stamps in coverage data files and the object files that produce
12407           them.  You can use the -frandom-seed option to produce reproducibly
12408           identical object files.
12409
12410           The string can either be a number (decimal, octal or hex) or an
12411           arbitrary string (in which case it's converted to a number by
12412           computing CRC32).
12413
12414           The string should be different for every file you compile.
12415
12416       -save-temps
12417       -save-temps=cwd
12418           Store the usual "temporary" intermediate files permanently; place
12419           them in the current directory and name them based on the source
12420           file.  Thus, compiling foo.c with -c -save-temps produces files
12421           foo.i and foo.s, as well as foo.o.  This creates a preprocessed
12422           foo.i output file even though the compiler now normally uses an
12423           integrated preprocessor.
12424
12425           When used in combination with the -x command-line option,
12426           -save-temps is sensible enough to avoid over writing an input
12427           source file with the same extension as an intermediate file.  The
12428           corresponding intermediate file may be obtained by renaming the
12429           source file before using -save-temps.
12430
12431           If you invoke GCC in parallel, compiling several different source
12432           files that share a common base name in different subdirectories or
12433           the same source file compiled for multiple output destinations, it
12434           is likely that the different parallel compilers will interfere with
12435           each other, and overwrite the temporary files.  For instance:
12436
12437                   gcc -save-temps -o outdir1/foo.o indir1/foo.c&
12438                   gcc -save-temps -o outdir2/foo.o indir2/foo.c&
12439
12440           may result in foo.i and foo.o being written to simultaneously by
12441           both compilers.
12442
12443       -save-temps=obj
12444           Store the usual "temporary" intermediate files permanently.  If the
12445           -o option is used, the temporary files are based on the object
12446           file.  If the -o option is not used, the -save-temps=obj switch
12447           behaves like -save-temps.
12448
12449           For example:
12450
12451                   gcc -save-temps=obj -c foo.c
12452                   gcc -save-temps=obj -c bar.c -o dir/xbar.o
12453                   gcc -save-temps=obj foobar.c -o dir2/yfoobar
12454
12455           creates foo.i, foo.s, dir/xbar.i, dir/xbar.s, dir2/yfoobar.i,
12456           dir2/yfoobar.s, and dir2/yfoobar.o.
12457
12458       -time[=file]
12459           Report the CPU time taken by each subprocess in the compilation
12460           sequence.  For C source files, this is the compiler proper and
12461           assembler (plus the linker if linking is done).
12462
12463           Without the specification of an output file, the output looks like
12464           this:
12465
12466                   # cc1 0.12 0.01
12467                   # as 0.00 0.01
12468
12469           The first number on each line is the "user time", that is time
12470           spent executing the program itself.  The second number is "system
12471           time", time spent executing operating system routines on behalf of
12472           the program.  Both numbers are in seconds.
12473
12474           With the specification of an output file, the output is appended to
12475           the named file, and it looks like this:
12476
12477                   0.12 0.01 cc1 <options>
12478                   0.00 0.01 as <options>
12479
12480           The "user time" and the "system time" are moved before the program
12481           name, and the options passed to the program are displayed, so that
12482           one can later tell what file was being compiled, and with which
12483           options.
12484
12485       -fdump-final-insns[=file]
12486           Dump the final internal representation (RTL) to file.  If the
12487           optional argument is omitted (or if file is "."), the name of the
12488           dump file is determined by appending ".gkd" to the compilation
12489           output file name.
12490
12491       -fcompare-debug[=opts]
12492           If no error occurs during compilation, run the compiler a second
12493           time, adding opts and -fcompare-debug-second to the arguments
12494           passed to the second compilation.  Dump the final internal
12495           representation in both compilations, and print an error if they
12496           differ.
12497
12498           If the equal sign is omitted, the default -gtoggle is used.
12499
12500           The environment variable GCC_COMPARE_DEBUG, if defined, non-empty
12501           and nonzero, implicitly enables -fcompare-debug.  If
12502           GCC_COMPARE_DEBUG is defined to a string starting with a dash, then
12503           it is used for opts, otherwise the default -gtoggle is used.
12504
12505           -fcompare-debug=, with the equal sign but without opts, is
12506           equivalent to -fno-compare-debug, which disables the dumping of the
12507           final representation and the second compilation, preventing even
12508           GCC_COMPARE_DEBUG from taking effect.
12509
12510           To verify full coverage during -fcompare-debug testing, set
12511           GCC_COMPARE_DEBUG to say -fcompare-debug-not-overridden, which GCC
12512           rejects as an invalid option in any actual compilation (rather than
12513           preprocessing, assembly or linking).  To get just a warning,
12514           setting GCC_COMPARE_DEBUG to -w%n-fcompare-debug not overridden
12515           will do.
12516
12517       -fcompare-debug-second
12518           This option is implicitly passed to the compiler for the second
12519           compilation requested by -fcompare-debug, along with options to
12520           silence warnings, and omitting other options that would cause the
12521           compiler to produce output to files or to standard output as a side
12522           effect.  Dump files and preserved temporary files are renamed so as
12523           to contain the ".gk" additional extension during the second
12524           compilation, to avoid overwriting those generated by the first.
12525
12526           When this option is passed to the compiler driver, it causes the
12527           first compilation to be skipped, which makes it useful for little
12528           other than debugging the compiler proper.
12529
12530       -gtoggle
12531           Turn off generation of debug info, if leaving out this option
12532           generates it, or turn it on at level 2 otherwise.  The position of
12533           this argument in the command line does not matter; it takes effect
12534           after all other options are processed, and it does so only once, no
12535           matter how many times it is given.  This is mainly intended to be
12536           used with -fcompare-debug.
12537
12538       -fvar-tracking-assignments-toggle
12539           Toggle -fvar-tracking-assignments, in the same way that -gtoggle
12540           toggles -g.
12541
12542       -Q  Makes the compiler print out each function name as it is compiled,
12543           and print some statistics about each pass when it finishes.
12544
12545       -ftime-report
12546           Makes the compiler print some statistics about the time consumed by
12547           each pass when it finishes.
12548
12549       -ftime-report-details
12550           Record the time consumed by infrastructure parts separately for
12551           each pass.
12552
12553       -fira-verbose=n
12554           Control the verbosity of the dump file for the integrated register
12555           allocator.  The default value is 5.  If the value n is greater or
12556           equal to 10, the dump output is sent to stderr using the same
12557           format as n minus 10.
12558
12559       -flto-report
12560           Prints a report with internal details on the workings of the link-
12561           time optimizer.  The contents of this report vary from version to
12562           version.  It is meant to be useful to GCC developers when
12563           processing object files in LTO mode (via -flto).
12564
12565           Disabled by default.
12566
12567       -flto-report-wpa
12568           Like -flto-report, but only print for the WPA phase of Link Time
12569           Optimization.
12570
12571       -fmem-report
12572           Makes the compiler print some statistics about permanent memory
12573           allocation when it finishes.
12574
12575       -fmem-report-wpa
12576           Makes the compiler print some statistics about permanent memory
12577           allocation for the WPA phase only.
12578
12579       -fpre-ipa-mem-report
12580       -fpost-ipa-mem-report
12581           Makes the compiler print some statistics about permanent memory
12582           allocation before or after interprocedural optimization.
12583
12584       -fprofile-report
12585           Makes the compiler print some statistics about consistency of the
12586           (estimated) profile and effect of individual passes.
12587
12588       -fstack-usage
12589           Makes the compiler output stack usage information for the program,
12590           on a per-function basis.  The filename for the dump is made by
12591           appending .su to the auxname.  auxname is generated from the name
12592           of the output file, if explicitly specified and it is not an
12593           executable, otherwise it is the basename of the source file.  An
12594           entry is made up of three fields:
12595
12596           *   The name of the function.
12597
12598           *   A number of bytes.
12599
12600           *   One or more qualifiers: "static", "dynamic", "bounded".
12601
12602           The qualifier "static" means that the function manipulates the
12603           stack statically: a fixed number of bytes are allocated for the
12604           frame on function entry and released on function exit; no stack
12605           adjustments are otherwise made in the function.  The second field
12606           is this fixed number of bytes.
12607
12608           The qualifier "dynamic" means that the function manipulates the
12609           stack dynamically: in addition to the static allocation described
12610           above, stack adjustments are made in the body of the function, for
12611           example to push/pop arguments around function calls.  If the
12612           qualifier "bounded" is also present, the amount of these
12613           adjustments is bounded at compile time and the second field is an
12614           upper bound of the total amount of stack used by the function.  If
12615           it is not present, the amount of these adjustments is not bounded
12616           at compile time and the second field only represents the bounded
12617           part.
12618
12619       -fstats
12620           Emit statistics about front-end processing at the end of the
12621           compilation.  This option is supported only by the C++ front end,
12622           and the information is generally only useful to the G++ development
12623           team.
12624
12625       -fdbg-cnt-list
12626           Print the name and the counter upper bound for all debug counters.
12627
12628       -fdbg-cnt=counter-value-list
12629           Set the internal debug counter upper bound.  counter-value-list is
12630           a comma-separated list of name:value pairs which sets the upper
12631           bound of each debug counter name to value.  All debug counters have
12632           the initial upper bound of "UINT_MAX"; thus "dbg_cnt" returns true
12633           always unless the upper bound is set by this option.  For example,
12634           with -fdbg-cnt=dce:10,tail_call:0, "dbg_cnt(dce)" returns true only
12635           for first 10 invocations.
12636
12637       -print-file-name=library
12638           Print the full absolute name of the library file library that would
12639           be used when linking---and don't do anything else.  With this
12640           option, GCC does not compile or link anything; it just prints the
12641           file name.
12642
12643       -print-multi-directory
12644           Print the directory name corresponding to the multilib selected by
12645           any other switches present in the command line.  This directory is
12646           supposed to exist in GCC_EXEC_PREFIX.
12647
12648       -print-multi-lib
12649           Print the mapping from multilib directory names to compiler
12650           switches that enable them.  The directory name is separated from
12651           the switches by ;, and each switch starts with an @ instead of the
12652           -, without spaces between multiple switches.  This is supposed to
12653           ease shell processing.
12654
12655       -print-multi-os-directory
12656           Print the path to OS libraries for the selected multilib, relative
12657           to some lib subdirectory.  If OS libraries are present in the lib
12658           subdirectory and no multilibs are used, this is usually just ., if
12659           OS libraries are present in libsuffix sibling directories this
12660           prints e.g. ../lib64, ../lib or ../lib32, or if OS libraries are
12661           present in lib/subdir subdirectories it prints e.g. amd64, sparcv9
12662           or ev6.
12663
12664       -print-multiarch
12665           Print the path to OS libraries for the selected multiarch, relative
12666           to some lib subdirectory.
12667
12668       -print-prog-name=program
12669           Like -print-file-name, but searches for a program such as cpp.
12670
12671       -print-libgcc-file-name
12672           Same as -print-file-name=libgcc.a.
12673
12674           This is useful when you use -nostdlib or -nodefaultlibs but you do
12675           want to link with libgcc.a.  You can do:
12676
12677                   gcc -nostdlib <files>... `gcc -print-libgcc-file-name`
12678
12679       -print-search-dirs
12680           Print the name of the configured installation directory and a list
12681           of program and library directories gcc searches---and don't do
12682           anything else.
12683
12684           This is useful when gcc prints the error message installation
12685           problem, cannot exec cpp0: No such file or directory.  To resolve
12686           this you either need to put cpp0 and the other compiler components
12687           where gcc expects to find them, or you can set the environment
12688           variable GCC_EXEC_PREFIX to the directory where you installed them.
12689           Don't forget the trailing /.
12690
12691       -print-sysroot
12692           Print the target sysroot directory that is used during compilation.
12693           This is the target sysroot specified either at configure time or
12694           using the --sysroot option, possibly with an extra suffix that
12695           depends on compilation options.  If no target sysroot is specified,
12696           the option prints nothing.
12697
12698       -print-sysroot-headers-suffix
12699           Print the suffix added to the target sysroot when searching for
12700           headers, or give an error if the compiler is not configured with
12701           such a suffix---and don't do anything else.
12702
12703       -dumpmachine
12704           Print the compiler's target machine (for example,
12705           i686-pc-linux-gnu)---and don't do anything else.
12706
12707       -dumpversion
12708           Print the compiler version (for example, 3.0, 6.3.0 or 7)---and
12709           don't do anything else.  This is the compiler version used in
12710           filesystem paths, specs, can be depending on how the compiler has
12711           been configured just a single number (major version), two numbers
12712           separated by dot (major and minor version) or three numbers
12713           separated by dots (major, minor and patchlevel version).
12714
12715       -dumpfullversion
12716           Print the full compiler version, always 3 numbers separated by
12717           dots, major, minor and patchlevel version.
12718
12719       -dumpspecs
12720           Print the compiler's built-in specs---and don't do anything else.
12721           (This is used when GCC itself is being built.)
12722
12723   Machine-Dependent Options
12724       Each target machine supported by GCC can have its own options---for
12725       example, to allow you to compile for a particular processor variant or
12726       ABI, or to control optimizations specific to that machine.  By
12727       convention, the names of machine-specific options start with -m.
12728
12729       Some configurations of the compiler also support additional target-
12730       specific options, usually for compatibility with other compilers on the
12731       same platform.
12732
12733   AArch64 Options
12734       These options are defined for AArch64 implementations:
12735
12736       -mabi=name
12737           Generate code for the specified data model.  Permissible values are
12738           ilp32 for SysV-like data model where int, long int and pointers are
12739           32 bits, and lp64 for SysV-like data model where int is 32 bits,
12740           but long int and pointers are 64 bits.
12741
12742           The default depends on the specific target configuration.  Note
12743           that the LP64 and ILP32 ABIs are not link-compatible; you must
12744           compile your entire program with the same ABI, and link with a
12745           compatible set of libraries.
12746
12747       -mbig-endian
12748           Generate big-endian code.  This is the default when GCC is
12749           configured for an aarch64_be-*-* target.
12750
12751       -mgeneral-regs-only
12752           Generate code which uses only the general-purpose registers.  This
12753           will prevent the compiler from using floating-point and Advanced
12754           SIMD registers but will not impose any restrictions on the
12755           assembler.
12756
12757       -mlittle-endian
12758           Generate little-endian code.  This is the default when GCC is
12759           configured for an aarch64-*-* but not an aarch64_be-*-* target.
12760
12761       -mcmodel=tiny
12762           Generate code for the tiny code model.  The program and its
12763           statically defined symbols must be within 1MB of each other.
12764           Programs can be statically or dynamically linked.
12765
12766       -mcmodel=small
12767           Generate code for the small code model.  The program and its
12768           statically defined symbols must be within 4GB of each other.
12769           Programs can be statically or dynamically linked.  This is the
12770           default code model.
12771
12772       -mcmodel=large
12773           Generate code for the large code model.  This makes no assumptions
12774           about addresses and sizes of sections.  Programs can be statically
12775           linked only.
12776
12777       -mstrict-align
12778           Avoid generating memory accesses that may not be aligned on a
12779           natural object boundary as described in the architecture
12780           specification.
12781
12782       -momit-leaf-frame-pointer
12783       -mno-omit-leaf-frame-pointer
12784           Omit or keep the frame pointer in leaf functions.  The former
12785           behavior is the default.
12786
12787       -mtls-dialect=desc
12788           Use TLS descriptors as the thread-local storage mechanism for
12789           dynamic accesses of TLS variables.  This is the default.
12790
12791       -mtls-dialect=traditional
12792           Use traditional TLS as the thread-local storage mechanism for
12793           dynamic accesses of TLS variables.
12794
12795       -mtls-size=size
12796           Specify bit size of immediate TLS offsets.  Valid values are 12,
12797           24, 32, 48.  This option requires binutils 2.26 or newer.
12798
12799       -mfix-cortex-a53-835769
12800       -mno-fix-cortex-a53-835769
12801           Enable or disable the workaround for the ARM Cortex-A53 erratum
12802           number 835769.  This involves inserting a NOP instruction between
12803           memory instructions and 64-bit integer multiply-accumulate
12804           instructions.
12805
12806       -mfix-cortex-a53-843419
12807       -mno-fix-cortex-a53-843419
12808           Enable or disable the workaround for the ARM Cortex-A53 erratum
12809           number 843419.  This erratum workaround is made at link time and
12810           this will only pass the corresponding flag to the linker.
12811
12812       -mlow-precision-recip-sqrt
12813       -mno-low-precision-recip-sqrt
12814           Enable or disable the reciprocal square root approximation.  This
12815           option only has an effect if -ffast-math or
12816           -funsafe-math-optimizations is used as well.  Enabling this reduces
12817           precision of reciprocal square root results to about 16 bits for
12818           single precision and to 32 bits for double precision.
12819
12820       -mlow-precision-sqrt
12821       -mno-low-precision-sqrt
12822           Enable or disable the square root approximation.  This option only
12823           has an effect if -ffast-math or -funsafe-math-optimizations is used
12824           as well.  Enabling this reduces precision of square root results to
12825           about 16 bits for single precision and to 32 bits for double
12826           precision.  If enabled, it implies -mlow-precision-recip-sqrt.
12827
12828       -mlow-precision-div
12829       -mno-low-precision-div
12830           Enable or disable the division approximation.  This option only has
12831           an effect if -ffast-math or -funsafe-math-optimizations is used as
12832           well.  Enabling this reduces precision of division results to about
12833           16 bits for single precision and to 32 bits for double precision.
12834
12835       -march=name
12836           Specify the name of the target architecture and, optionally, one or
12837           more feature modifiers.  This option has the form
12838           -march=arch{+[no]feature}*.
12839
12840           The permissible values for arch are armv8-a, armv8.1-a, armv8.2-a,
12841           armv8.3-a or armv8.4-a or native.
12842
12843           The value armv8.4-a implies armv8.3-a and enables compiler support
12844           for the ARMv8.4-A architecture extensions.
12845
12846           The value armv8.3-a implies armv8.2-a and enables compiler support
12847           for the ARMv8.3-A architecture extensions.
12848
12849           The value armv8.2-a implies armv8.1-a and enables compiler support
12850           for the ARMv8.2-A architecture extensions.
12851
12852           The value armv8.1-a implies armv8-a and enables compiler support
12853           for the ARMv8.1-A architecture extension.  In particular, it
12854           enables the +crc, +lse, and +rdma features.
12855
12856           The value native is available on native AArch64 GNU/Linux and
12857           causes the compiler to pick the architecture of the host system.
12858           This option has no effect if the compiler is unable to recognize
12859           the architecture of the host system,
12860
12861           The permissible values for feature are listed in the sub-section on
12862           aarch64-feature-modifiers,,-march and -mcpu Feature Modifiers.
12863           Where conflicting feature modifiers are specified, the right-most
12864           feature is used.
12865
12866           GCC uses name to determine what kind of instructions it can emit
12867           when generating assembly code.  If -march is specified without
12868           either of -mtune or -mcpu also being specified, the code is tuned
12869           to perform well across a range of target processors implementing
12870           the target architecture.
12871
12872       -mtune=name
12873           Specify the name of the target processor for which GCC should tune
12874           the performance of the code.  Permissible values for this option
12875           are: generic, cortex-a35, cortex-a53, cortex-a55, cortex-a57,
12876           cortex-a72, cortex-a73, cortex-a75, exynos-m1, falkor, qdf24xx,
12877           saphira, xgene1, vulcan, thunderx, thunderxt88, thunderxt88p1,
12878           thunderxt81, thunderxt83, thunderx2t99, cortex-a57.cortex-a53,
12879           cortex-a72.cortex-a53, cortex-a73.cortex-a35,
12880           cortex-a73.cortex-a53, cortex-a75.cortex-a55, native.
12881
12882           The values cortex-a57.cortex-a53, cortex-a72.cortex-a53,
12883           cortex-a73.cortex-a35, cortex-a73.cortex-a53, cortex-a75.cortex-a55
12884           specify that GCC should tune for a big.LITTLE system.
12885
12886           Additionally on native AArch64 GNU/Linux systems the value native
12887           tunes performance to the host system.  This option has no effect if
12888           the compiler is unable to recognize the processor of the host
12889           system.
12890
12891           Where none of -mtune=, -mcpu= or -march= are specified, the code is
12892           tuned to perform well across a range of target processors.
12893
12894           This option cannot be suffixed by feature modifiers.
12895
12896       -mcpu=name
12897           Specify the name of the target processor, optionally suffixed by
12898           one or more feature modifiers.  This option has the form
12899           -mcpu=cpu{+[no]feature}*, where the permissible values for cpu are
12900           the same as those available for -mtune.  The permissible values for
12901           feature are documented in the sub-section on
12902           aarch64-feature-modifiers,,-march and -mcpu Feature Modifiers.
12903           Where conflicting feature modifiers are specified, the right-most
12904           feature is used.
12905
12906           GCC uses name to determine what kind of instructions it can emit
12907           when generating assembly code (as if by -march) and to determine
12908           the target processor for which to tune for performance (as if by
12909           -mtune).  Where this option is used in conjunction with -march or
12910           -mtune, those options take precedence over the appropriate part of
12911           this option.
12912
12913       -moverride=string
12914           Override tuning decisions made by the back-end in response to a
12915           -mtune= switch.  The syntax, semantics, and accepted values for
12916           string in this option are not guaranteed to be consistent across
12917           releases.
12918
12919           This option is only intended to be useful when developing GCC.
12920
12921       -mverbose-cost-dump
12922           Enable verbose cost model dumping in the debug dump files.  This
12923           option is provided for use in debugging the compiler.
12924
12925       -mpc-relative-literal-loads
12926       -mno-pc-relative-literal-loads
12927           Enable or disable PC-relative literal loads.  With this option
12928           literal pools are accessed using a single instruction and emitted
12929           after each function.  This limits the maximum size of functions to
12930           1MB.  This is enabled by default for -mcmodel=tiny.
12931
12932       -msign-return-address=scope
12933           Select the function scope on which return address signing will be
12934           applied.  Permissible values are none, which disables return
12935           address signing, non-leaf, which enables pointer signing for
12936           functions which are not leaf functions, and all, which enables
12937           pointer signing for all functions.  The default value is none.
12938
12939       -msve-vector-bits=bits
12940           Specify the number of bits in an SVE vector register.  This option
12941           only has an effect when SVE is enabled.
12942
12943           GCC supports two forms of SVE code generation: "vector-length
12944           agnostic" output that works with any size of vector register and
12945           "vector-length specific" output that allows GCC to make assumptions
12946           about the vector length when it is useful for optimization reasons.
12947           The possible values of bits are: scalable, 128, 256, 512, 1024 and
12948           2048.  Specifying scalable selects vector-length agnostic output.
12949           At present -msve-vector-bits=128 also generates vector-length
12950           agnostic output.  All other values generate vector-length specific
12951           code.  The behavior of these values may change in future releases
12952           and no value except scalable should be relied on for producing code
12953           that is portable across different hardware SVE vector lengths.
12954
12955           The default is -msve-vector-bits=scalable, which produces vector-
12956           length agnostic code.
12957
12958       -march and -mcpu Feature Modifiers
12959
12960       Feature modifiers used with -march and -mcpu can be any of the
12961       following and their inverses nofeature:
12962
12963       crc Enable CRC extension.  This is on by default for -march=armv8.1-a.
12964
12965       crypto
12966           Enable Crypto extension.  This also enables Advanced SIMD and
12967           floating-point instructions.
12968
12969       fp  Enable floating-point instructions.  This is on by default for all
12970           possible values for options -march and -mcpu.
12971
12972       simd
12973           Enable Advanced SIMD instructions.  This also enables floating-
12974           point instructions.  This is on by default for all possible values
12975           for options -march and -mcpu.
12976
12977       sve Enable Scalable Vector Extension instructions.  This also enables
12978           Advanced SIMD and floating-point instructions.
12979
12980       lse Enable Large System Extension instructions.  This is on by default
12981           for -march=armv8.1-a.
12982
12983       rdma
12984           Enable Round Double Multiply Accumulate instructions.  This is on
12985           by default for -march=armv8.1-a.
12986
12987       fp16
12988           Enable FP16 extension.  This also enables floating-point
12989           instructions.
12990
12991       fp16fml
12992           Enable FP16 fmla extension.  This also enables FP16 extensions and
12993           floating-point instructions. This option is enabled by default for
12994           -march=armv8.4-a. Use of this option with architectures prior to
12995           Armv8.2-A is not supported.
12996
12997       rcpc
12998           Enable the RcPc extension.  This does not change code generation
12999           from GCC, but is passed on to the assembler, enabling inline asm
13000           statements to use instructions from the RcPc extension.
13001
13002       dotprod
13003           Enable the Dot Product extension.  This also enables Advanced SIMD
13004           instructions.
13005
13006       aes Enable the Armv8-a aes and pmull crypto extension.  This also
13007           enables Advanced SIMD instructions.
13008
13009       sha2
13010           Enable the Armv8-a sha2 crypto extension.  This also enables
13011           Advanced SIMD instructions.
13012
13013       sha3
13014           Enable the sha512 and sha3 crypto extension.  This also enables
13015           Advanced SIMD instructions. Use of this option with architectures
13016           prior to Armv8.2-A is not supported.
13017
13018       sm4 Enable the sm3 and sm4 crypto extension.  This also enables
13019           Advanced SIMD instructions.  Use of this option with architectures
13020           prior to Armv8.2-A is not supported.
13021
13022       Feature crypto implies aes, sha2, and simd, which implies fp.
13023       Conversely, nofp implies nosimd, which implies nocrypto, noaes and
13024       nosha2.
13025
13026   Adapteva Epiphany Options
13027       These -m options are defined for Adapteva Epiphany:
13028
13029       -mhalf-reg-file
13030           Don't allocate any register in the range "r32"..."r63".  That
13031           allows code to run on hardware variants that lack these registers.
13032
13033       -mprefer-short-insn-regs
13034           Preferentially allocate registers that allow short instruction
13035           generation.  This can result in increased instruction count, so
13036           this may either reduce or increase overall code size.
13037
13038       -mbranch-cost=num
13039           Set the cost of branches to roughly num "simple" instructions.
13040           This cost is only a heuristic and is not guaranteed to produce
13041           consistent results across releases.
13042
13043       -mcmove
13044           Enable the generation of conditional moves.
13045
13046       -mnops=num
13047           Emit num NOPs before every other generated instruction.
13048
13049       -mno-soft-cmpsf
13050           For single-precision floating-point comparisons, emit an "fsub"
13051           instruction and test the flags.  This is faster than a software
13052           comparison, but can get incorrect results in the presence of NaNs,
13053           or when two different small numbers are compared such that their
13054           difference is calculated as zero.  The default is -msoft-cmpsf,
13055           which uses slower, but IEEE-compliant, software comparisons.
13056
13057       -mstack-offset=num
13058           Set the offset between the top of the stack and the stack pointer.
13059           E.g., a value of 8 means that the eight bytes in the range
13060           "sp+0...sp+7" can be used by leaf functions without stack
13061           allocation.  Values other than 8 or 16 are untested and unlikely to
13062           work.  Note also that this option changes the ABI; compiling a
13063           program with a different stack offset than the libraries have been
13064           compiled with generally does not work.  This option can be useful
13065           if you want to evaluate if a different stack offset would give you
13066           better code, but to actually use a different stack offset to build
13067           working programs, it is recommended to configure the toolchain with
13068           the appropriate --with-stack-offset=num option.
13069
13070       -mno-round-nearest
13071           Make the scheduler assume that the rounding mode has been set to
13072           truncating.  The default is -mround-nearest.
13073
13074       -mlong-calls
13075           If not otherwise specified by an attribute, assume all calls might
13076           be beyond the offset range of the "b" / "bl" instructions, and
13077           therefore load the function address into a register before
13078           performing a (otherwise direct) call.  This is the default.
13079
13080       -mshort-calls
13081           If not otherwise specified by an attribute, assume all direct calls
13082           are in the range of the "b" / "bl" instructions, so use these
13083           instructions for direct calls.  The default is -mlong-calls.
13084
13085       -msmall16
13086           Assume addresses can be loaded as 16-bit unsigned values.  This
13087           does not apply to function addresses for which -mlong-calls
13088           semantics are in effect.
13089
13090       -mfp-mode=mode
13091           Set the prevailing mode of the floating-point unit.  This
13092           determines the floating-point mode that is provided and expected at
13093           function call and return time.  Making this mode match the mode you
13094           predominantly need at function start can make your programs smaller
13095           and faster by avoiding unnecessary mode switches.
13096
13097           mode can be set to one the following values:
13098
13099           caller
13100               Any mode at function entry is valid, and retained or restored
13101               when the function returns, and when it calls other functions.
13102               This mode is useful for compiling libraries or other
13103               compilation units you might want to incorporate into different
13104               programs with different prevailing FPU modes, and the
13105               convenience of being able to use a single object file outweighs
13106               the size and speed overhead for any extra mode switching that
13107               might be needed, compared with what would be needed with a more
13108               specific choice of prevailing FPU mode.
13109
13110           truncate
13111               This is the mode used for floating-point calculations with
13112               truncating (i.e. round towards zero) rounding mode.  That
13113               includes conversion from floating point to integer.
13114
13115           round-nearest
13116               This is the mode used for floating-point calculations with
13117               round-to-nearest-or-even rounding mode.
13118
13119           int This is the mode used to perform integer calculations in the
13120               FPU, e.g.  integer multiply, or integer multiply-and-
13121               accumulate.
13122
13123           The default is -mfp-mode=caller
13124
13125       -mnosplit-lohi
13126       -mno-postinc
13127       -mno-postmodify
13128           Code generation tweaks that disable, respectively, splitting of
13129           32-bit loads, generation of post-increment addresses, and
13130           generation of post-modify addresses.  The defaults are msplit-lohi,
13131           -mpost-inc, and -mpost-modify.
13132
13133       -mnovect-double
13134           Change the preferred SIMD mode to SImode.  The default is
13135           -mvect-double, which uses DImode as preferred SIMD mode.
13136
13137       -max-vect-align=num
13138           The maximum alignment for SIMD vector mode types.  num may be 4 or
13139           8.  The default is 8.  Note that this is an ABI change, even though
13140           many library function interfaces are unaffected if they don't use
13141           SIMD vector modes in places that affect size and/or alignment of
13142           relevant types.
13143
13144       -msplit-vecmove-early
13145           Split vector moves into single word moves before reload.  In theory
13146           this can give better register allocation, but so far the reverse
13147           seems to be generally the case.
13148
13149       -m1reg-reg
13150           Specify a register to hold the constant -1, which makes loading
13151           small negative constants and certain bitmasks faster.  Allowable
13152           values for reg are r43 and r63, which specify use of that register
13153           as a fixed register, and none, which means that no register is used
13154           for this purpose.  The default is -m1reg-none.
13155
13156   ARC Options
13157       The following options control the architecture variant for which code
13158       is being compiled:
13159
13160       -mbarrel-shifter
13161           Generate instructions supported by barrel shifter.  This is the
13162           default unless -mcpu=ARC601 or -mcpu=ARCEM is in effect.
13163
13164       -mjli-always
13165           Force to call a function using jli_s instruction.  This option is
13166           valid only for ARCv2 architecture.
13167
13168       -mcpu=cpu
13169           Set architecture type, register usage, and instruction scheduling
13170           parameters for cpu.  There are also shortcut alias options
13171           available for backward compatibility and convenience.  Supported
13172           values for cpu are
13173
13174           arc600
13175               Compile for ARC600.  Aliases: -mA6, -mARC600.
13176
13177           arc601
13178               Compile for ARC601.  Alias: -mARC601.
13179
13180           arc700
13181               Compile for ARC700.  Aliases: -mA7, -mARC700.  This is the
13182               default when configured with --with-cpu=arc700.
13183
13184           arcem
13185               Compile for ARC EM.
13186
13187           archs
13188               Compile for ARC HS.
13189
13190           em  Compile for ARC EM CPU with no hardware extensions.
13191
13192           em4 Compile for ARC EM4 CPU.
13193
13194           em4_dmips
13195               Compile for ARC EM4 DMIPS CPU.
13196
13197           em4_fpus
13198               Compile for ARC EM4 DMIPS CPU with the single-precision
13199               floating-point extension.
13200
13201           em4_fpuda
13202               Compile for ARC EM4 DMIPS CPU with single-precision floating-
13203               point and double assist instructions.
13204
13205           hs  Compile for ARC HS CPU with no hardware extensions except the
13206               atomic instructions.
13207
13208           hs34
13209               Compile for ARC HS34 CPU.
13210
13211           hs38
13212               Compile for ARC HS38 CPU.
13213
13214           hs38_linux
13215               Compile for ARC HS38 CPU with all hardware extensions on.
13216
13217           arc600_norm
13218               Compile for ARC 600 CPU with "norm" instructions enabled.
13219
13220           arc600_mul32x16
13221               Compile for ARC 600 CPU with "norm" and 32x16-bit multiply
13222               instructions enabled.
13223
13224           arc600_mul64
13225               Compile for ARC 600 CPU with "norm" and "mul64"-family
13226               instructions enabled.
13227
13228           arc601_norm
13229               Compile for ARC 601 CPU with "norm" instructions enabled.
13230
13231           arc601_mul32x16
13232               Compile for ARC 601 CPU with "norm" and 32x16-bit multiply
13233               instructions enabled.
13234
13235           arc601_mul64
13236               Compile for ARC 601 CPU with "norm" and "mul64"-family
13237               instructions enabled.
13238
13239           nps400
13240               Compile for ARC 700 on NPS400 chip.
13241
13242           em_mini
13243               Compile for ARC EM minimalist configuration featuring reduced
13244               register set.
13245
13246       -mdpfp
13247       -mdpfp-compact
13248           Generate double-precision FPX instructions, tuned for the compact
13249           implementation.
13250
13251       -mdpfp-fast
13252           Generate double-precision FPX instructions, tuned for the fast
13253           implementation.
13254
13255       -mno-dpfp-lrsr
13256           Disable "lr" and "sr" instructions from using FPX extension aux
13257           registers.
13258
13259       -mea
13260           Generate extended arithmetic instructions.  Currently only "divaw",
13261           "adds", "subs", and "sat16" are supported.  This is always enabled
13262           for -mcpu=ARC700.
13263
13264       -mno-mpy
13265           Do not generate "mpy"-family instructions for ARC700.  This option
13266           is deprecated.
13267
13268       -mmul32x16
13269           Generate 32x16-bit multiply and multiply-accumulate instructions.
13270
13271       -mmul64
13272           Generate "mul64" and "mulu64" instructions.  Only valid for
13273           -mcpu=ARC600.
13274
13275       -mnorm
13276           Generate "norm" instructions.  This is the default if -mcpu=ARC700
13277           is in effect.
13278
13279       -mspfp
13280       -mspfp-compact
13281           Generate single-precision FPX instructions, tuned for the compact
13282           implementation.
13283
13284       -mspfp-fast
13285           Generate single-precision FPX instructions, tuned for the fast
13286           implementation.
13287
13288       -msimd
13289           Enable generation of ARC SIMD instructions via target-specific
13290           builtins.  Only valid for -mcpu=ARC700.
13291
13292       -msoft-float
13293           This option ignored; it is provided for compatibility purposes
13294           only.  Software floating-point code is emitted by default, and this
13295           default can overridden by FPX options; -mspfp, -mspfp-compact, or
13296           -mspfp-fast for single precision, and -mdpfp, -mdpfp-compact, or
13297           -mdpfp-fast for double precision.
13298
13299       -mswap
13300           Generate "swap" instructions.
13301
13302       -matomic
13303           This enables use of the locked load/store conditional extension to
13304           implement atomic memory built-in functions.  Not available for ARC
13305           6xx or ARC EM cores.
13306
13307       -mdiv-rem
13308           Enable "div" and "rem" instructions for ARCv2 cores.
13309
13310       -mcode-density
13311           Enable code density instructions for ARC EM.  This option is on by
13312           default for ARC HS.
13313
13314       -mll64
13315           Enable double load/store operations for ARC HS cores.
13316
13317       -mtp-regno=regno
13318           Specify thread pointer register number.
13319
13320       -mmpy-option=multo
13321           Compile ARCv2 code with a multiplier design option.  You can
13322           specify the option using either a string or numeric value for
13323           multo.  wlh1 is the default value.  The recognized values are:
13324
13325           0
13326           none
13327               No multiplier available.
13328
13329           1
13330           w   16x16 multiplier, fully pipelined.  The following instructions
13331               are enabled: "mpyw" and "mpyuw".
13332
13333           2
13334           wlh1
13335               32x32 multiplier, fully pipelined (1 stage).  The following
13336               instructions are additionally enabled: "mpy", "mpyu", "mpym",
13337               "mpymu", and "mpy_s".
13338
13339           3
13340           wlh2
13341               32x32 multiplier, fully pipelined (2 stages).  The following
13342               instructions are additionally enabled: "mpy", "mpyu", "mpym",
13343               "mpymu", and "mpy_s".
13344
13345           4
13346           wlh3
13347               Two 16x16 multipliers, blocking, sequential.  The following
13348               instructions are additionally enabled: "mpy", "mpyu", "mpym",
13349               "mpymu", and "mpy_s".
13350
13351           5
13352           wlh4
13353               One 16x16 multiplier, blocking, sequential.  The following
13354               instructions are additionally enabled: "mpy", "mpyu", "mpym",
13355               "mpymu", and "mpy_s".
13356
13357           6
13358           wlh5
13359               One 32x4 multiplier, blocking, sequential.  The following
13360               instructions are additionally enabled: "mpy", "mpyu", "mpym",
13361               "mpymu", and "mpy_s".
13362
13363           7
13364           plus_dmpy
13365               ARC HS SIMD support.
13366
13367           8
13368           plus_macd
13369               ARC HS SIMD support.
13370
13371           9
13372           plus_qmacw
13373               ARC HS SIMD support.
13374
13375           This option is only available for ARCv2 cores.
13376
13377       -mfpu=fpu
13378           Enables support for specific floating-point hardware extensions for
13379           ARCv2 cores.  Supported values for fpu are:
13380
13381           fpus
13382               Enables support for single-precision floating-point hardware
13383               extensions.
13384
13385           fpud
13386               Enables support for double-precision floating-point hardware
13387               extensions.  The single-precision floating-point extension is
13388               also enabled.  Not available for ARC EM.
13389
13390           fpuda
13391               Enables support for double-precision floating-point hardware
13392               extensions using double-precision assist instructions.  The
13393               single-precision floating-point extension is also enabled.
13394               This option is only available for ARC EM.
13395
13396           fpuda_div
13397               Enables support for double-precision floating-point hardware
13398               extensions using double-precision assist instructions.  The
13399               single-precision floating-point, square-root, and divide
13400               extensions are also enabled.  This option is only available for
13401               ARC EM.
13402
13403           fpuda_fma
13404               Enables support for double-precision floating-point hardware
13405               extensions using double-precision assist instructions.  The
13406               single-precision floating-point and fused multiply and add
13407               hardware extensions are also enabled.  This option is only
13408               available for ARC EM.
13409
13410           fpuda_all
13411               Enables support for double-precision floating-point hardware
13412               extensions using double-precision assist instructions.  All
13413               single-precision floating-point hardware extensions are also
13414               enabled.  This option is only available for ARC EM.
13415
13416           fpus_div
13417               Enables support for single-precision floating-point, square-
13418               root and divide hardware extensions.
13419
13420           fpud_div
13421               Enables support for double-precision floating-point, square-
13422               root and divide hardware extensions.  This option includes
13423               option fpus_div. Not available for ARC EM.
13424
13425           fpus_fma
13426               Enables support for single-precision floating-point and fused
13427               multiply and add hardware extensions.
13428
13429           fpud_fma
13430               Enables support for double-precision floating-point and fused
13431               multiply and add hardware extensions.  This option includes
13432               option fpus_fma.  Not available for ARC EM.
13433
13434           fpus_all
13435               Enables support for all single-precision floating-point
13436               hardware extensions.
13437
13438           fpud_all
13439               Enables support for all single- and double-precision floating-
13440               point hardware extensions.  Not available for ARC EM.
13441
13442       -mirq-ctrl-saved=register-range, blink, lp_count
13443           Specifies general-purposes registers that the processor
13444           automatically saves/restores on interrupt entry and exit.
13445           register-range is specified as two registers separated by a dash.
13446           The register range always starts with "r0", the upper limit is "fp"
13447           register.  blink and lp_count are optional.  This option is only
13448           valid for ARC EM and ARC HS cores.
13449
13450       -mrgf-banked-regs=number
13451           Specifies the number of registers replicated in second register
13452           bank on entry to fast interrupt.  Fast interrupts are interrupts
13453           with the highest priority level P0.  These interrupts save only PC
13454           and STATUS32 registers to avoid memory transactions during
13455           interrupt entry and exit sequences.  Use this option when you are
13456           using fast interrupts in an ARC V2 family processor.  Permitted
13457           values are 4, 8, 16, and 32.
13458
13459       -mlpc-width=width
13460           Specify the width of the "lp_count" register.  Valid values for
13461           width are 8, 16, 20, 24, 28 and 32 bits.  The default width is
13462           fixed to 32 bits.  If the width is less than 32, the compiler does
13463           not attempt to transform loops in your program to use the zero-
13464           delay loop mechanism unless it is known that the "lp_count"
13465           register can hold the required loop-counter value.  Depending on
13466           the width specified, the compiler and run-time library might
13467           continue to use the loop mechanism for various needs.  This option
13468           defines macro "__ARC_LPC_WIDTH__" with the value of width.
13469
13470       -mrf16
13471           This option instructs the compiler to generate code for a 16-entry
13472           register file.  This option defines the "__ARC_RF16__" preprocessor
13473           macro.
13474
13475       The following options are passed through to the assembler, and also
13476       define preprocessor macro symbols.
13477
13478       -mdsp-packa
13479           Passed down to the assembler to enable the DSP Pack A extensions.
13480           Also sets the preprocessor symbol "__Xdsp_packa".  This option is
13481           deprecated.
13482
13483       -mdvbf
13484           Passed down to the assembler to enable the dual Viterbi butterfly
13485           extension.  Also sets the preprocessor symbol "__Xdvbf".  This
13486           option is deprecated.
13487
13488       -mlock
13489           Passed down to the assembler to enable the locked load/store
13490           conditional extension.  Also sets the preprocessor symbol
13491           "__Xlock".
13492
13493       -mmac-d16
13494           Passed down to the assembler.  Also sets the preprocessor symbol
13495           "__Xxmac_d16".  This option is deprecated.
13496
13497       -mmac-24
13498           Passed down to the assembler.  Also sets the preprocessor symbol
13499           "__Xxmac_24".  This option is deprecated.
13500
13501       -mrtsc
13502           Passed down to the assembler to enable the 64-bit time-stamp
13503           counter extension instruction.  Also sets the preprocessor symbol
13504           "__Xrtsc".  This option is deprecated.
13505
13506       -mswape
13507           Passed down to the assembler to enable the swap byte ordering
13508           extension instruction.  Also sets the preprocessor symbol
13509           "__Xswape".
13510
13511       -mtelephony
13512           Passed down to the assembler to enable dual- and single-operand
13513           instructions for telephony.  Also sets the preprocessor symbol
13514           "__Xtelephony".  This option is deprecated.
13515
13516       -mxy
13517           Passed down to the assembler to enable the XY memory extension.
13518           Also sets the preprocessor symbol "__Xxy".
13519
13520       The following options control how the assembly code is annotated:
13521
13522       -misize
13523           Annotate assembler instructions with estimated addresses.
13524
13525       -mannotate-align
13526           Explain what alignment considerations lead to the decision to make
13527           an instruction short or long.
13528
13529       The following options are passed through to the linker:
13530
13531       -marclinux
13532           Passed through to the linker, to specify use of the "arclinux"
13533           emulation.  This option is enabled by default in tool chains built
13534           for "arc-linux-uclibc" and "arceb-linux-uclibc" targets when
13535           profiling is not requested.
13536
13537       -marclinux_prof
13538           Passed through to the linker, to specify use of the "arclinux_prof"
13539           emulation.  This option is enabled by default in tool chains built
13540           for "arc-linux-uclibc" and "arceb-linux-uclibc" targets when
13541           profiling is requested.
13542
13543       The following options control the semantics of generated code:
13544
13545       -mlong-calls
13546           Generate calls as register indirect calls, thus providing access to
13547           the full 32-bit address range.
13548
13549       -mmedium-calls
13550           Don't use less than 25-bit addressing range for calls, which is the
13551           offset available for an unconditional branch-and-link instruction.
13552           Conditional execution of function calls is suppressed, to allow use
13553           of the 25-bit range, rather than the 21-bit range with conditional
13554           branch-and-link.  This is the default for tool chains built for
13555           "arc-linux-uclibc" and "arceb-linux-uclibc" targets.
13556
13557       -G num
13558           Put definitions of externally-visible data in a small data section
13559           if that data is no bigger than num bytes.  The default value of num
13560           is 4 for any ARC configuration, or 8 when we have double load/store
13561           operations.
13562
13563       -mno-sdata
13564           Do not generate sdata references.  This is the default for tool
13565           chains built for "arc-linux-uclibc" and "arceb-linux-uclibc"
13566           targets.
13567
13568       -mvolatile-cache
13569           Use ordinarily cached memory accesses for volatile references.
13570           This is the default.
13571
13572       -mno-volatile-cache
13573           Enable cache bypass for volatile references.
13574
13575       The following options fine tune code generation:
13576
13577       -malign-call
13578           Do alignment optimizations for call instructions.
13579
13580       -mauto-modify-reg
13581           Enable the use of pre/post modify with register displacement.
13582
13583       -mbbit-peephole
13584           Enable bbit peephole2.
13585
13586       -mno-brcc
13587           This option disables a target-specific pass in arc_reorg to
13588           generate compare-and-branch ("brcc") instructions.  It has no
13589           effect on generation of these instructions driven by the combiner
13590           pass.
13591
13592       -mcase-vector-pcrel
13593           Use PC-relative switch case tables to enable case table shortening.
13594           This is the default for -Os.
13595
13596       -mcompact-casesi
13597           Enable compact "casesi" pattern.  This is the default for -Os, and
13598           only available for ARCv1 cores.
13599
13600       -mno-cond-exec
13601           Disable the ARCompact-specific pass to generate conditional
13602           execution instructions.
13603
13604           Due to delay slot scheduling and interactions between operand
13605           numbers, literal sizes, instruction lengths, and the support for
13606           conditional execution, the target-independent pass to generate
13607           conditional execution is often lacking, so the ARC port has kept a
13608           special pass around that tries to find more conditional execution
13609           generation opportunities after register allocation, branch
13610           shortening, and delay slot scheduling have been done.  This pass
13611           generally, but not always, improves performance and code size, at
13612           the cost of extra compilation time, which is why there is an option
13613           to switch it off.  If you have a problem with call instructions
13614           exceeding their allowable offset range because they are
13615           conditionalized, you should consider using -mmedium-calls instead.
13616
13617       -mearly-cbranchsi
13618           Enable pre-reload use of the "cbranchsi" pattern.
13619
13620       -mexpand-adddi
13621           Expand "adddi3" and "subdi3" at RTL generation time into "add.f",
13622           "adc" etc.  This option is deprecated.
13623
13624       -mindexed-loads
13625           Enable the use of indexed loads.  This can be problematic because
13626           some optimizers then assume that indexed stores exist, which is not
13627           the case.
13628
13629       -mlra
13630           Enable Local Register Allocation.  This is still experimental for
13631           ARC, so by default the compiler uses standard reload (i.e.
13632           -mno-lra).
13633
13634       -mlra-priority-none
13635           Don't indicate any priority for target registers.
13636
13637       -mlra-priority-compact
13638           Indicate target register priority for r0..r3 / r12..r15.
13639
13640       -mlra-priority-noncompact
13641           Reduce target register priority for r0..r3 / r12..r15.
13642
13643       -mno-millicode
13644           When optimizing for size (using -Os), prologues and epilogues that
13645           have to save or restore a large number of registers are often
13646           shortened by using call to a special function in libgcc; this is
13647           referred to as a millicode call.  As these calls can pose
13648           performance issues, and/or cause linking issues when linking in a
13649           nonstandard way, this option is provided to turn off millicode call
13650           generation.
13651
13652       -mmixed-code
13653           Tweak register allocation to help 16-bit instruction generation.
13654           This generally has the effect of decreasing the average instruction
13655           size while increasing the instruction count.
13656
13657       -mq-class
13658           Enable q instruction alternatives.  This is the default for -Os.
13659
13660       -mRcq
13661           Enable Rcq constraint handling.  Most short code generation depends
13662           on this.  This is the default.
13663
13664       -mRcw
13665           Enable Rcw constraint handling.  Most ccfsm condexec mostly depends
13666           on this.  This is the default.
13667
13668       -msize-level=level
13669           Fine-tune size optimization with regards to instruction lengths and
13670           alignment.  The recognized values for level are:
13671
13672           0   No size optimization.  This level is deprecated and treated
13673               like 1.
13674
13675           1   Short instructions are used opportunistically.
13676
13677           2   In addition, alignment of loops and of code after barriers are
13678               dropped.
13679
13680           3   In addition, optional data alignment is dropped, and the option
13681               Os is enabled.
13682
13683           This defaults to 3 when -Os is in effect.  Otherwise, the behavior
13684           when this is not set is equivalent to level 1.
13685
13686       -mtune=cpu
13687           Set instruction scheduling parameters for cpu, overriding any
13688           implied by -mcpu=.
13689
13690           Supported values for cpu are
13691
13692           ARC600
13693               Tune for ARC600 CPU.
13694
13695           ARC601
13696               Tune for ARC601 CPU.
13697
13698           ARC700
13699               Tune for ARC700 CPU with standard multiplier block.
13700
13701           ARC700-xmac
13702               Tune for ARC700 CPU with XMAC block.
13703
13704           ARC725D
13705               Tune for ARC725D CPU.
13706
13707           ARC750D
13708               Tune for ARC750D CPU.
13709
13710       -mmultcost=num
13711           Cost to assume for a multiply instruction, with 4 being equal to a
13712           normal instruction.
13713
13714       -munalign-prob-threshold=probability
13715           Set probability threshold for unaligning branches.  When tuning for
13716           ARC700 and optimizing for speed, branches without filled delay slot
13717           are preferably emitted unaligned and long, unless profiling
13718           indicates that the probability for the branch to be taken is below
13719           probability.  The default is (REG_BR_PROB_BASE/2), i.e. 5000.
13720
13721       The following options are maintained for backward compatibility, but
13722       are now deprecated and will be removed in a future release:
13723
13724       -margonaut
13725           Obsolete FPX.
13726
13727       -mbig-endian
13728       -EB Compile code for big-endian targets.  Use of these options is now
13729           deprecated.  Big-endian code is supported by configuring GCC to
13730           build "arceb-elf32" and "arceb-linux-uclibc" targets, for which big
13731           endian is the default.
13732
13733       -mlittle-endian
13734       -EL Compile code for little-endian targets.  Use of these options is
13735           now deprecated.  Little-endian code is supported by configuring GCC
13736           to build "arc-elf32" and "arc-linux-uclibc" targets, for which
13737           little endian is the default.
13738
13739       -mbarrel_shifter
13740           Replaced by -mbarrel-shifter.
13741
13742       -mdpfp_compact
13743           Replaced by -mdpfp-compact.
13744
13745       -mdpfp_fast
13746           Replaced by -mdpfp-fast.
13747
13748       -mdsp_packa
13749           Replaced by -mdsp-packa.
13750
13751       -mEA
13752           Replaced by -mea.
13753
13754       -mmac_24
13755           Replaced by -mmac-24.
13756
13757       -mmac_d16
13758           Replaced by -mmac-d16.
13759
13760       -mspfp_compact
13761           Replaced by -mspfp-compact.
13762
13763       -mspfp_fast
13764           Replaced by -mspfp-fast.
13765
13766       -mtune=cpu
13767           Values arc600, arc601, arc700 and arc700-xmac for cpu are replaced
13768           by ARC600, ARC601, ARC700 and ARC700-xmac respectively.
13769
13770       -multcost=num
13771           Replaced by -mmultcost.
13772
13773   ARM Options
13774       These -m options are defined for the ARM port:
13775
13776       -mabi=name
13777           Generate code for the specified ABI.  Permissible values are: apcs-
13778           gnu, atpcs, aapcs, aapcs-linux and iwmmxt.
13779
13780       -mapcs-frame
13781           Generate a stack frame that is compliant with the ARM Procedure
13782           Call Standard for all functions, even if this is not strictly
13783           necessary for correct execution of the code.  Specifying
13784           -fomit-frame-pointer with this option causes the stack frames not
13785           to be generated for leaf functions.  The default is
13786           -mno-apcs-frame.  This option is deprecated.
13787
13788       -mapcs
13789           This is a synonym for -mapcs-frame and is deprecated.
13790
13791       -mthumb-interwork
13792           Generate code that supports calling between the ARM and Thumb
13793           instruction sets.  Without this option, on pre-v5 architectures,
13794           the two instruction sets cannot be reliably used inside one
13795           program.  The default is -mno-thumb-interwork, since slightly
13796           larger code is generated when -mthumb-interwork is specified.  In
13797           AAPCS configurations this option is meaningless.
13798
13799       -mno-sched-prolog
13800           Prevent the reordering of instructions in the function prologue, or
13801           the merging of those instruction with the instructions in the
13802           function's body.  This means that all functions start with a
13803           recognizable set of instructions (or in fact one of a choice from a
13804           small set of different function prologues), and this information
13805           can be used to locate the start of functions inside an executable
13806           piece of code.  The default is -msched-prolog.
13807
13808       -mfloat-abi=name
13809           Specifies which floating-point ABI to use.  Permissible values are:
13810           soft, softfp and hard.
13811
13812           Specifying soft causes GCC to generate output containing library
13813           calls for floating-point operations.  softfp allows the generation
13814           of code using hardware floating-point instructions, but still uses
13815           the soft-float calling conventions.  hard allows generation of
13816           floating-point instructions and uses FPU-specific calling
13817           conventions.
13818
13819           The default depends on the specific target configuration.  Note
13820           that the hard-float and soft-float ABIs are not link-compatible;
13821           you must compile your entire program with the same ABI, and link
13822           with a compatible set of libraries.
13823
13824       -mlittle-endian
13825           Generate code for a processor running in little-endian mode.  This
13826           is the default for all standard configurations.
13827
13828       -mbig-endian
13829           Generate code for a processor running in big-endian mode; the
13830           default is to compile code for a little-endian processor.
13831
13832       -mbe8
13833       -mbe32
13834           When linking a big-endian image select between BE8 and BE32
13835           formats.  The option has no effect for little-endian images and is
13836           ignored.  The default is dependent on the selected target
13837           architecture.  For ARMv6 and later architectures the default is
13838           BE8, for older architectures the default is BE32.  BE32 format has
13839           been deprecated by ARM.
13840
13841       -march=name[+extension...]
13842           This specifies the name of the target ARM architecture.  GCC uses
13843           this name to determine what kind of instructions it can emit when
13844           generating assembly code.  This option can be used in conjunction
13845           with or instead of the -mcpu= option.
13846
13847           Permissible names are: armv4t, armv5t, armv5te, armv6, armv6j,
13848           armv6k, armv6kz, armv6t2, armv6z, armv6zk, armv7, armv7-a, armv7ve,
13849           armv8-a, armv8.1-a, armv8.2-a, armv8.3-a, armv8.4-a, armv7-r,
13850           armv8-r, armv6-m, armv6s-m, armv7-m, armv7e-m, armv8-m.base,
13851           armv8-m.main, iwmmxt and iwmmxt2.
13852
13853           Additionally, the following architectures, which lack support for
13854           the Thumb execution state, are recognized but support is
13855           deprecated: armv2, armv2a, armv3, armv3m, armv4, armv5 and armv5e.
13856
13857           Many of the architectures support extensions.  These can be added
13858           by appending +extension to the architecture name.  Extension
13859           options are processed in order and capabilities accumulate.  An
13860           extension will also enable any necessary base extensions upon which
13861           it depends.  For example, the +crypto extension will always enable
13862           the +simd extension.  The exception to the additive construction is
13863           for extensions that are prefixed with +no...: these extensions
13864           disable the specified option and any other extensions that may
13865           depend on the presence of that extension.
13866
13867           For example, -march=armv7-a+simd+nofp+vfpv4 is equivalent to
13868           writing -march=armv7-a+vfpv4 since the +simd option is entirely
13869           disabled by the +nofp option that follows it.
13870
13871           Most extension names are generically named, but have an effect that
13872           is dependent upon the architecture to which it is applied.  For
13873           example, the +simd option can be applied to both armv7-a and
13874           armv8-a architectures, but will enable the original ARMv7-A
13875           Advanced SIMD (Neon) extensions for armv7-a and the ARMv8-A variant
13876           for armv8-a.
13877
13878           The table below lists the supported extensions for each
13879           architecture.  Architectures not mentioned do not support any
13880           extensions.
13881
13882           armv5e
13883           armv5te
13884           armv6
13885           armv6j
13886           armv6k
13887           armv6kz
13888           armv6t2
13889           armv6z
13890           armv6zk
13891               +fp The VFPv2 floating-point instructions.  The extension
13892                   +vfpv2 can be used as an alias for this extension.
13893
13894               +nofp
13895                   Disable the floating-point instructions.
13896
13897           armv7
13898               The common subset of the ARMv7-A, ARMv7-R and ARMv7-M
13899               architectures.
13900
13901               +fp The VFPv3 floating-point instructions, with 16 double-
13902                   precision registers.  The extension +vfpv3-d16 can be used
13903                   as an alias for this extension.  Note that floating-point
13904                   is not supported by the base ARMv7-M architecture, but is
13905                   compatible with both the ARMv7-A and ARMv7-R architectures.
13906
13907               +nofp
13908                   Disable the floating-point instructions.
13909
13910           armv7-a
13911               +mp The multiprocessing extension.
13912
13913               +sec
13914                   The security extension.
13915
13916               +fp The VFPv3 floating-point instructions, with 16 double-
13917                   precision registers.  The extension +vfpv3-d16 can be used
13918                   as an alias for this extension.
13919
13920               +simd
13921                   The Advanced SIMD (Neon) v1 and the VFPv3 floating-point
13922                   instructions.  The extensions +neon and +neon-vfpv3 can be
13923                   used as aliases for this extension.
13924
13925               +vfpv3
13926                   The VFPv3 floating-point instructions, with 32 double-
13927                   precision registers.
13928
13929               +vfpv3-d16-fp16
13930                   The VFPv3 floating-point instructions, with 16 double-
13931                   precision registers and the half-precision floating-point
13932                   conversion operations.
13933
13934               +vfpv3-fp16
13935                   The VFPv3 floating-point instructions, with 32 double-
13936                   precision registers and the half-precision floating-point
13937                   conversion operations.
13938
13939               +vfpv4-d16
13940                   The VFPv4 floating-point instructions, with 16 double-
13941                   precision registers.
13942
13943               +vfpv4
13944                   The VFPv4 floating-point instructions, with 32 double-
13945                   precision registers.
13946
13947               +neon-fp16
13948                   The Advanced SIMD (Neon) v1 and the VFPv3 floating-point
13949                   instructions, with the half-precision floating-point
13950                   conversion operations.
13951
13952               +neon-vfpv4
13953                   The Advanced SIMD (Neon) v2 and the VFPv4 floating-point
13954                   instructions.
13955
13956               +nosimd
13957                   Disable the Advanced SIMD instructions (does not disable
13958                   floating point).
13959
13960               +nofp
13961                   Disable the floating-point and Advanced SIMD instructions.
13962
13963           armv7ve
13964               The extended version of the ARMv7-A architecture with support
13965               for virtualization.
13966
13967               +fp The VFPv4 floating-point instructions, with 16 double-
13968                   precision registers.  The extension +vfpv4-d16 can be used
13969                   as an alias for this extension.
13970
13971               +simd
13972                   The Advanced SIMD (Neon) v2 and the VFPv4 floating-point
13973                   instructions.  The extension +neon-vfpv4 can be used as an
13974                   alias for this extension.
13975
13976               +vfpv3-d16
13977                   The VFPv3 floating-point instructions, with 16 double-
13978                   precision registers.
13979
13980               +vfpv3
13981                   The VFPv3 floating-point instructions, with 32 double-
13982                   precision registers.
13983
13984               +vfpv3-d16-fp16
13985                   The VFPv3 floating-point instructions, with 16 double-
13986                   precision registers and the half-precision floating-point
13987                   conversion operations.
13988
13989               +vfpv3-fp16
13990                   The VFPv3 floating-point instructions, with 32 double-
13991                   precision registers and the half-precision floating-point
13992                   conversion operations.
13993
13994               +vfpv4-d16
13995                   The VFPv4 floating-point instructions, with 16 double-
13996                   precision registers.
13997
13998               +vfpv4
13999                   The VFPv4 floating-point instructions, with 32 double-
14000                   precision registers.
14001
14002               +neon
14003                   The Advanced SIMD (Neon) v1 and the VFPv3 floating-point
14004                   instructions.  The extension +neon-vfpv3 can be used as an
14005                   alias for this extension.
14006
14007               +neon-fp16
14008                   The Advanced SIMD (Neon) v1 and the VFPv3 floating-point
14009                   instructions, with the half-precision floating-point
14010                   conversion operations.
14011
14012               +nosimd
14013                   Disable the Advanced SIMD instructions (does not disable
14014                   floating point).
14015
14016               +nofp
14017                   Disable the floating-point and Advanced SIMD instructions.
14018
14019           armv8-a
14020               +crc
14021                   The Cyclic Redundancy Check (CRC) instructions.
14022
14023               +simd
14024                   The ARMv8-A Advanced SIMD and floating-point instructions.
14025
14026               +crypto
14027                   The cryptographic instructions.
14028
14029               +nocrypto
14030                   Disable the cryptographic instructions.
14031
14032               +nofp
14033                   Disable the floating-point, Advanced SIMD and cryptographic
14034                   instructions.
14035
14036           armv8.1-a
14037               +simd
14038                   The ARMv8.1-A Advanced SIMD and floating-point
14039                   instructions.
14040
14041               +crypto
14042                   The cryptographic instructions.  This also enables the
14043                   Advanced SIMD and floating-point instructions.
14044
14045               +nocrypto
14046                   Disable the cryptographic instructions.
14047
14048               +nofp
14049                   Disable the floating-point, Advanced SIMD and cryptographic
14050                   instructions.
14051
14052           armv8.2-a
14053           armv8.3-a
14054               +fp16
14055                   The half-precision floating-point data processing
14056                   instructions.  This also enables the Advanced SIMD and
14057                   floating-point instructions.
14058
14059               +fp16fml
14060                   The half-precision floating-point fmla extension.  This
14061                   also enables the half-precision floating-point extension
14062                   and Advanced SIMD and floating-point instructions.
14063
14064               +simd
14065                   The ARMv8.1-A Advanced SIMD and floating-point
14066                   instructions.
14067
14068               +crypto
14069                   The cryptographic instructions.  This also enables the
14070                   Advanced SIMD and floating-point instructions.
14071
14072               +dotprod
14073                   Enable the Dot Product extension.  This also enables
14074                   Advanced SIMD instructions.
14075
14076               +nocrypto
14077                   Disable the cryptographic extension.
14078
14079               +nofp
14080                   Disable the floating-point, Advanced SIMD and cryptographic
14081                   instructions.
14082
14083           armv8.4-a
14084               +fp16
14085                   The half-precision floating-point data processing
14086                   instructions.  This also enables the Advanced SIMD and
14087                   floating-point instructions as well as the Dot Product
14088                   extension and the half-precision floating-point fmla
14089                   extension.
14090
14091               +simd
14092                   The ARMv8.3-A Advanced SIMD and floating-point instructions
14093                   as well as the Dot Product extension.
14094
14095               +crypto
14096                   The cryptographic instructions.  This also enables the
14097                   Advanced SIMD and floating-point instructions as well as
14098                   the Dot Product extension.
14099
14100               +nocrypto
14101                   Disable the cryptographic extension.
14102
14103               +nofp
14104                   Disable the floating-point, Advanced SIMD and cryptographic
14105                   instructions.
14106
14107           armv7-r
14108               +fp.sp
14109                   The single-precision VFPv3 floating-point instructions.
14110                   The extension +vfpv3xd can be used as an alias for this
14111                   extension.
14112
14113               +fp The VFPv3 floating-point instructions with 16 double-
14114                   precision registers.  The extension +vfpv3-d16 can be used
14115                   as an alias for this extension.
14116
14117               +vfpv3xd-d16-fp16
14118                   The single-precision VFPv3 floating-point instructions with
14119                   16 double-precision registers and the half-precision
14120                   floating-point conversion operations.
14121
14122               +vfpv3-d16-fp16
14123                   The VFPv3 floating-point instructions, with 16 double-
14124                   precision registers and the half-precision floating-point
14125                   conversion operations.
14126
14127               +nofp
14128                   Disable the floating-point extension.
14129
14130               +idiv
14131                   The ARM-state integer division instructions.
14132
14133               +noidiv
14134                   Disable the ARM-state integer division extension.
14135
14136           armv7e-m
14137               +fp The single-precision VFPv4 floating-point instructions.
14138
14139               +fpv5
14140                   The single-precision FPv5 floating-point instructions.
14141
14142               +fp.dp
14143                   The single- and double-precision FPv5 floating-point
14144                   instructions.
14145
14146               +nofp
14147                   Disable the floating-point extensions.
14148
14149           armv8-m.main
14150               +dsp
14151                   The DSP instructions.
14152
14153               +nodsp
14154                   Disable the DSP extension.
14155
14156               +fp The single-precision floating-point instructions.
14157
14158               +fp.dp
14159                   The single- and double-precision floating-point
14160                   instructions.
14161
14162               +nofp
14163                   Disable the floating-point extension.
14164
14165           armv8-r
14166               +crc
14167                   The Cyclic Redundancy Check (CRC) instructions.
14168
14169               +fp.sp
14170                   The single-precision FPv5 floating-point instructions.
14171
14172               +simd
14173                   The ARMv8-A Advanced SIMD and floating-point instructions.
14174
14175               +crypto
14176                   The cryptographic instructions.
14177
14178               +nocrypto
14179                   Disable the cryptographic instructions.
14180
14181               +nofp
14182                   Disable the floating-point, Advanced SIMD and cryptographic
14183                   instructions.
14184
14185           -march=native causes the compiler to auto-detect the architecture
14186           of the build computer.  At present, this feature is only supported
14187           on GNU/Linux, and not all architectures are recognized.  If the
14188           auto-detect is unsuccessful the option has no effect.
14189
14190       -mtune=name
14191           This option specifies the name of the target ARM processor for
14192           which GCC should tune the performance of the code.  For some ARM
14193           implementations better performance can be obtained by using this
14194           option.  Permissible names are: arm2, arm250, arm3, arm6, arm60,
14195           arm600, arm610, arm620, arm7, arm7m, arm7d, arm7dm, arm7di,
14196           arm7dmi, arm70, arm700, arm700i, arm710, arm710c, arm7100, arm720,
14197           arm7500, arm7500fe, arm7tdmi, arm7tdmi-s, arm710t, arm720t,
14198           arm740t, strongarm, strongarm110, strongarm1100, strongarm1110,
14199           arm8, arm810, arm9, arm9e, arm920, arm920t, arm922t, arm946e-s,
14200           arm966e-s, arm968e-s, arm926ej-s, arm940t, arm9tdmi, arm10tdmi,
14201           arm1020t, arm1026ej-s, arm10e, arm1020e, arm1022e, arm1136j-s,
14202           arm1136jf-s, mpcore, mpcorenovfp, arm1156t2-s, arm1156t2f-s,
14203           arm1176jz-s, arm1176jzf-s, generic-armv7-a, cortex-a5, cortex-a7,
14204           cortex-a8, cortex-a9, cortex-a12, cortex-a15, cortex-a17,
14205           cortex-a32, cortex-a35, cortex-a53, cortex-a55, cortex-a57,
14206           cortex-a72, cortex-a73, cortex-a75, cortex-r4, cortex-r4f,
14207           cortex-r5, cortex-r7, cortex-r8, cortex-r52, cortex-m33,
14208           cortex-m23, cortex-m7, cortex-m4, cortex-m3, cortex-m1, cortex-m0,
14209           cortex-m0plus, cortex-m1.small-multiply, cortex-m0.small-multiply,
14210           cortex-m0plus.small-multiply, exynos-m1, marvell-pj4, xscale,
14211           iwmmxt, iwmmxt2, ep9312, fa526, fa626, fa606te, fa626te, fmp626,
14212           fa726te, xgene1.
14213
14214           Additionally, this option can specify that GCC should tune the
14215           performance of the code for a big.LITTLE system.  Permissible names
14216           are: cortex-a15.cortex-a7, cortex-a17.cortex-a7,
14217           cortex-a57.cortex-a53, cortex-a72.cortex-a53,
14218           cortex-a72.cortex-a35, cortex-a73.cortex-a53,
14219           cortex-a75.cortex-a55.
14220
14221           -mtune=generic-arch specifies that GCC should tune the performance
14222           for a blend of processors within architecture arch.  The aim is to
14223           generate code that run well on the current most popular processors,
14224           balancing between optimizations that benefit some CPUs in the
14225           range, and avoiding performance pitfalls of other CPUs.  The
14226           effects of this option may change in future GCC versions as CPU
14227           models come and go.
14228
14229           -mtune permits the same extension options as -mcpu, but the
14230           extension options do not affect the tuning of the generated code.
14231
14232           -mtune=native causes the compiler to auto-detect the CPU of the
14233           build computer.  At present, this feature is only supported on
14234           GNU/Linux, and not all architectures are recognized.  If the auto-
14235           detect is unsuccessful the option has no effect.
14236
14237       -mcpu=name[+extension...]
14238           This specifies the name of the target ARM processor.  GCC uses this
14239           name to derive the name of the target ARM architecture (as if
14240           specified by -march) and the ARM processor type for which to tune
14241           for performance (as if specified by -mtune).  Where this option is
14242           used in conjunction with -march or -mtune, those options take
14243           precedence over the appropriate part of this option.
14244
14245           Many of the supported CPUs implement optional architectural
14246           extensions.  Where this is so the architectural extensions are
14247           normally enabled by default.  If implementations that lack the
14248           extension exist, then the extension syntax can be used to disable
14249           those extensions that have been omitted.  For floating-point and
14250           Advanced SIMD (Neon) instructions, the settings of the options
14251           -mfloat-abi and -mfpu must also be considered: floating-point and
14252           Advanced SIMD instructions will only be used if -mfloat-abi is not
14253           set to soft; and any setting of -mfpu other than auto will override
14254           the available floating-point and SIMD extension instructions.
14255
14256           For example, cortex-a9 can be found in three major configurations:
14257           integer only, with just a floating-point unit or with floating-
14258           point and Advanced SIMD.  The default is to enable all the
14259           instructions, but the extensions +nosimd and +nofp can be used to
14260           disable just the SIMD or both the SIMD and floating-point
14261           instructions respectively.
14262
14263           Permissible names for this option are the same as those for -mtune.
14264
14265           The following extension options are common to the listed CPUs:
14266
14267           +nodsp
14268               Disable the DSP instructions on cortex-m33.
14269
14270           +nofp
14271               Disables the floating-point instructions on arm9e, arm946e-s,
14272               arm966e-s, arm968e-s, arm10e, arm1020e, arm1022e, arm926ej-s,
14273               arm1026ej-s, cortex-r5, cortex-r7, cortex-r8, cortex-m4,
14274               cortex-m7 and cortex-m33.  Disables the floating-point and SIMD
14275               instructions on generic-armv7-a, cortex-a5, cortex-a7,
14276               cortex-a8, cortex-a9, cortex-a12, cortex-a15, cortex-a17,
14277               cortex-a15.cortex-a7, cortex-a17.cortex-a7, cortex-a32,
14278               cortex-a35, cortex-a53 and cortex-a55.
14279
14280           +nofp.dp
14281               Disables the double-precision component of the floating-point
14282               instructions on cortex-r5, cortex-r7, cortex-r8, cortex-r52 and
14283               cortex-m7.
14284
14285           +nosimd
14286               Disables the SIMD (but not floating-point) instructions on
14287               generic-armv7-a, cortex-a5, cortex-a7 and cortex-a9.
14288
14289           +crypto
14290               Enables the cryptographic instructions on cortex-a32,
14291               cortex-a35, cortex-a53, cortex-a55, cortex-a57, cortex-a72,
14292               cortex-a73, cortex-a75, exynos-m1, xgene1,
14293               cortex-a57.cortex-a53, cortex-a72.cortex-a53,
14294               cortex-a73.cortex-a35, cortex-a73.cortex-a53 and
14295               cortex-a75.cortex-a55.
14296
14297           Additionally the generic-armv7-a pseudo target defaults to VFPv3
14298           with 16 double-precision registers.  It supports the following
14299           extension options: mp, sec, vfpv3-d16, vfpv3, vfpv3-d16-fp16,
14300           vfpv3-fp16, vfpv4-d16, vfpv4, neon, neon-vfpv3, neon-fp16,
14301           neon-vfpv4.  The meanings are the same as for the extensions to
14302           -march=armv7-a.
14303
14304           -mcpu=generic-arch is also permissible, and is equivalent to
14305           -march=arch -mtune=generic-arch.  See -mtune for more information.
14306
14307           -mcpu=native causes the compiler to auto-detect the CPU of the
14308           build computer.  At present, this feature is only supported on
14309           GNU/Linux, and not all architectures are recognized.  If the auto-
14310           detect is unsuccessful the option has no effect.
14311
14312       -mfpu=name
14313           This specifies what floating-point hardware (or hardware emulation)
14314           is available on the target.  Permissible names are: auto, vfpv2,
14315           vfpv3, vfpv3-fp16, vfpv3-d16, vfpv3-d16-fp16, vfpv3xd,
14316           vfpv3xd-fp16, neon-vfpv3, neon-fp16, vfpv4, vfpv4-d16, fpv4-sp-d16,
14317           neon-vfpv4, fpv5-d16, fpv5-sp-d16, fp-armv8, neon-fp-armv8 and
14318           crypto-neon-fp-armv8.  Note that neon is an alias for neon-vfpv3
14319           and vfp is an alias for vfpv2.
14320
14321           The setting auto is the default and is special.  It causes the
14322           compiler to select the floating-point and Advanced SIMD
14323           instructions based on the settings of -mcpu and -march.
14324
14325           If the selected floating-point hardware includes the NEON extension
14326           (e.g. -mfpu=neon), note that floating-point operations are not
14327           generated by GCC's auto-vectorization pass unless
14328           -funsafe-math-optimizations is also specified.  This is because
14329           NEON hardware does not fully implement the IEEE 754 standard for
14330           floating-point arithmetic (in particular denormal values are
14331           treated as zero), so the use of NEON instructions may lead to a
14332           loss of precision.
14333
14334           You can also set the fpu name at function level by using the
14335           "target("fpu=")" function attributes or pragmas.
14336
14337       -mfp16-format=name
14338           Specify the format of the "__fp16" half-precision floating-point
14339           type.  Permissible names are none, ieee, and alternative; the
14340           default is none, in which case the "__fp16" type is not defined.
14341
14342       -mstructure-size-boundary=n
14343           The sizes of all structures and unions are rounded up to a multiple
14344           of the number of bits set by this option.  Permissible values are
14345           8, 32 and 64.  The default value varies for different toolchains.
14346           For the COFF targeted toolchain the default value is 8.  A value of
14347           64 is only allowed if the underlying ABI supports it.
14348
14349           Specifying a larger number can produce faster, more efficient code,
14350           but can also increase the size of the program.  Different values
14351           are potentially incompatible.  Code compiled with one value cannot
14352           necessarily expect to work with code or libraries compiled with
14353           another value, if they exchange information using structures or
14354           unions.
14355
14356           This option is deprecated.
14357
14358       -mabort-on-noreturn
14359           Generate a call to the function "abort" at the end of a "noreturn"
14360           function.  It is executed if the function tries to return.
14361
14362       -mlong-calls
14363       -mno-long-calls
14364           Tells the compiler to perform function calls by first loading the
14365           address of the function into a register and then performing a
14366           subroutine call on this register.  This switch is needed if the
14367           target function lies outside of the 64-megabyte addressing range of
14368           the offset-based version of subroutine call instruction.
14369
14370           Even if this switch is enabled, not all function calls are turned
14371           into long calls.  The heuristic is that static functions, functions
14372           that have the "short_call" attribute, functions that are inside the
14373           scope of a "#pragma no_long_calls" directive, and functions whose
14374           definitions have already been compiled within the current
14375           compilation unit are not turned into long calls.  The exceptions to
14376           this rule are that weak function definitions, functions with the
14377           "long_call" attribute or the "section" attribute, and functions
14378           that are within the scope of a "#pragma long_calls" directive are
14379           always turned into long calls.
14380
14381           This feature is not enabled by default.  Specifying -mno-long-calls
14382           restores the default behavior, as does placing the function calls
14383           within the scope of a "#pragma long_calls_off" directive.  Note
14384           these switches have no effect on how the compiler generates code to
14385           handle function calls via function pointers.
14386
14387       -msingle-pic-base
14388           Treat the register used for PIC addressing as read-only, rather
14389           than loading it in the prologue for each function.  The runtime
14390           system is responsible for initializing this register with an
14391           appropriate value before execution begins.
14392
14393       -mpic-register=reg
14394           Specify the register to be used for PIC addressing.  For standard
14395           PIC base case, the default is any suitable register determined by
14396           compiler.  For single PIC base case, the default is R9 if target is
14397           EABI based or stack-checking is enabled, otherwise the default is
14398           R10.
14399
14400       -mpic-data-is-text-relative
14401           Assume that the displacement between the text and data segments is
14402           fixed at static link time.  This permits using PC-relative
14403           addressing operations to access data known to be in the data
14404           segment.  For non-VxWorks RTP targets, this option is enabled by
14405           default.  When disabled on such targets, it will enable
14406           -msingle-pic-base by default.
14407
14408       -mpoke-function-name
14409           Write the name of each function into the text section, directly
14410           preceding the function prologue.  The generated code is similar to
14411           this:
14412
14413                        t0
14414                            .ascii "arm_poke_function_name", 0
14415                            .align
14416                        t1
14417                            .word 0xff000000 + (t1 - t0)
14418                        arm_poke_function_name
14419                            mov     ip, sp
14420                            stmfd   sp!, {fp, ip, lr, pc}
14421                            sub     fp, ip, #4
14422
14423           When performing a stack backtrace, code can inspect the value of
14424           "pc" stored at "fp + 0".  If the trace function then looks at
14425           location "pc - 12" and the top 8 bits are set, then we know that
14426           there is a function name embedded immediately preceding this
14427           location and has length "((pc[-3]) & 0xff000000)".
14428
14429       -mthumb
14430       -marm
14431           Select between generating code that executes in ARM and Thumb
14432           states.  The default for most configurations is to generate code
14433           that executes in ARM state, but the default can be changed by
14434           configuring GCC with the --with-mode=state configure option.
14435
14436           You can also override the ARM and Thumb mode for each function by
14437           using the "target("thumb")" and "target("arm")" function attributes
14438           or pragmas.
14439
14440       -mflip-thumb
14441           Switch ARM/Thumb modes on alternating functions.  This option is
14442           provided for regression testing of mixed Thumb/ARM code generation,
14443           and is not intended for ordinary use in compiling code.
14444
14445       -mtpcs-frame
14446           Generate a stack frame that is compliant with the Thumb Procedure
14447           Call Standard for all non-leaf functions.  (A leaf function is one
14448           that does not call any other functions.)  The default is
14449           -mno-tpcs-frame.
14450
14451       -mtpcs-leaf-frame
14452           Generate a stack frame that is compliant with the Thumb Procedure
14453           Call Standard for all leaf functions.  (A leaf function is one that
14454           does not call any other functions.)  The default is
14455           -mno-apcs-leaf-frame.
14456
14457       -mcallee-super-interworking
14458           Gives all externally visible functions in the file being compiled
14459           an ARM instruction set header which switches to Thumb mode before
14460           executing the rest of the function.  This allows these functions to
14461           be called from non-interworking code.  This option is not valid in
14462           AAPCS configurations because interworking is enabled by default.
14463
14464       -mcaller-super-interworking
14465           Allows calls via function pointers (including virtual functions) to
14466           execute correctly regardless of whether the target code has been
14467           compiled for interworking or not.  There is a small overhead in the
14468           cost of executing a function pointer if this option is enabled.
14469           This option is not valid in AAPCS configurations because
14470           interworking is enabled by default.
14471
14472       -mtp=name
14473           Specify the access model for the thread local storage pointer.  The
14474           valid models are soft, which generates calls to "__aeabi_read_tp",
14475           cp15, which fetches the thread pointer from "cp15" directly
14476           (supported in the arm6k architecture), and auto, which uses the
14477           best available method for the selected processor.  The default
14478           setting is auto.
14479
14480       -mtls-dialect=dialect
14481           Specify the dialect to use for accessing thread local storage.  Two
14482           dialects are supported---gnu and gnu2.  The gnu dialect selects the
14483           original GNU scheme for supporting local and global dynamic TLS
14484           models.  The gnu2 dialect selects the GNU descriptor scheme, which
14485           provides better performance for shared libraries.  The GNU
14486           descriptor scheme is compatible with the original scheme, but does
14487           require new assembler, linker and library support.  Initial and
14488           local exec TLS models are unaffected by this option and always use
14489           the original scheme.
14490
14491       -mword-relocations
14492           Only generate absolute relocations on word-sized values (i.e.
14493           R_ARM_ABS32).  This is enabled by default on targets (uClinux,
14494           SymbianOS) where the runtime loader imposes this restriction, and
14495           when -fpic or -fPIC is specified.
14496
14497       -mfix-cortex-m3-ldrd
14498           Some Cortex-M3 cores can cause data corruption when "ldrd"
14499           instructions with overlapping destination and base registers are
14500           used.  This option avoids generating these instructions.  This
14501           option is enabled by default when -mcpu=cortex-m3 is specified.
14502
14503       -munaligned-access
14504       -mno-unaligned-access
14505           Enables (or disables) reading and writing of 16- and 32- bit values
14506           from addresses that are not 16- or 32- bit aligned.  By default
14507           unaligned access is disabled for all pre-ARMv6, all ARMv6-M and for
14508           ARMv8-M Baseline architectures, and enabled for all other
14509           architectures.  If unaligned access is not enabled then words in
14510           packed data structures are accessed a byte at a time.
14511
14512           The ARM attribute "Tag_CPU_unaligned_access" is set in the
14513           generated object file to either true or false, depending upon the
14514           setting of this option.  If unaligned access is enabled then the
14515           preprocessor symbol "__ARM_FEATURE_UNALIGNED" is also defined.
14516
14517       -mneon-for-64bits
14518           Enables using Neon to handle scalar 64-bits operations. This is
14519           disabled by default since the cost of moving data from core
14520           registers to Neon is high.
14521
14522       -mslow-flash-data
14523           Assume loading data from flash is slower than fetching instruction.
14524           Therefore literal load is minimized for better performance.  This
14525           option is only supported when compiling for ARMv7 M-profile and off
14526           by default.
14527
14528       -masm-syntax-unified
14529           Assume inline assembler is using unified asm syntax.  The default
14530           is currently off which implies divided syntax.  This option has no
14531           impact on Thumb2. However, this may change in future releases of
14532           GCC.  Divided syntax should be considered deprecated.
14533
14534       -mrestrict-it
14535           Restricts generation of IT blocks to conform to the rules of
14536           ARMv8-A.  IT blocks can only contain a single 16-bit instruction
14537           from a select set of instructions. This option is on by default for
14538           ARMv8-A Thumb mode.
14539
14540       -mprint-tune-info
14541           Print CPU tuning information as comment in assembler file.  This is
14542           an option used only for regression testing of the compiler and not
14543           intended for ordinary use in compiling code.  This option is
14544           disabled by default.
14545
14546       -mverbose-cost-dump
14547           Enable verbose cost model dumping in the debug dump files.  This
14548           option is provided for use in debugging the compiler.
14549
14550       -mpure-code
14551           Do not allow constant data to be placed in code sections.
14552           Additionally, when compiling for ELF object format give all text
14553           sections the ELF processor-specific section attribute
14554           "SHF_ARM_PURECODE".  This option is only available when generating
14555           non-pic code for M-profile targets with the MOVT instruction.
14556
14557       -mcmse
14558           Generate secure code as per the "ARMv8-M Security Extensions:
14559           Requirements on Development Tools Engineering Specification", which
14560           can be found on
14561           <http://infocenter.arm.com/help/topic/com.arm.doc.ecm0359818/ECM0359818_armv8m_security_extensions_reqs_on_dev_tools_1_0.pdf>.
14562
14563   AVR Options
14564       These options are defined for AVR implementations:
14565
14566       -mmcu=mcu
14567           Specify Atmel AVR instruction set architectures (ISA) or MCU type.
14568
14569           The default for this option is@tie{}avr2.
14570
14571           GCC supports the following AVR devices and ISAs:
14572
14573           "avr2"
14574               "Classic" devices with up to 8@tie{}KiB of program memory.
14575               mcu@tie{}= "attiny22", "attiny26", "at90c8534", "at90s2313",
14576               "at90s2323", "at90s2333", "at90s2343", "at90s4414",
14577               "at90s4433", "at90s4434", "at90s8515", "at90s8535".
14578
14579           "avr25"
14580               "Classic" devices with up to 8@tie{}KiB of program memory and
14581               with the "MOVW" instruction.  mcu@tie{}= "ata5272", "ata6616c",
14582               "attiny13", "attiny13a", "attiny2313", "attiny2313a",
14583               "attiny24", "attiny24a", "attiny25", "attiny261", "attiny261a",
14584               "attiny43u", "attiny4313", "attiny44", "attiny44a",
14585               "attiny441", "attiny45", "attiny461", "attiny461a", "attiny48",
14586               "attiny828", "attiny84", "attiny84a", "attiny841", "attiny85",
14587               "attiny861", "attiny861a", "attiny87", "attiny88", "at86rf401".
14588
14589           "avr3"
14590               "Classic" devices with 16@tie{}KiB up to 64@tie{}KiB of
14591               program memory.  mcu@tie{}= "at43usb355", "at76c711".
14592
14593           "avr31"
14594               "Classic" devices with 128@tie{}KiB of program memory.
14595               mcu@tie{}= "atmega103", "at43usb320".
14596
14597           "avr35"
14598               "Classic" devices with 16@tie{}KiB up to 64@tie{}KiB of program
14599               memory and with the "MOVW" instruction.  mcu@tie{}= "ata5505",
14600               "ata6617c", "ata664251", "atmega16u2", "atmega32u2",
14601               "atmega8u2", "attiny1634", "attiny167", "at90usb162",
14602               "at90usb82".
14603
14604           "avr4"
14605               "Enhanced" devices with up to 8@tie{}KiB of program memory.
14606               mcu@tie{}= "ata6285", "ata6286", "ata6289", "ata6612c",
14607               "atmega48", "atmega48a", "atmega48p", "atmega48pa",
14608               "atmega48pb", "atmega8", "atmega8a", "atmega8hva",
14609               "atmega8515", "atmega8535", "atmega88", "atmega88a",
14610               "atmega88p", "atmega88pa", "atmega88pb", "at90pwm1",
14611               "at90pwm2", "at90pwm2b", "at90pwm3", "at90pwm3b", "at90pwm81".
14612
14613           "avr5"
14614               "Enhanced" devices with 16@tie{}KiB up to 64@tie{}KiB of
14615               program memory.  mcu@tie{}= "ata5702m322", "ata5782",
14616               "ata5790", "ata5790n", "ata5791", "ata5795", "ata5831",
14617               "ata6613c", "ata6614q", "ata8210", "ata8510", "atmega16",
14618               "atmega16a", "atmega16hva", "atmega16hva2", "atmega16hvb",
14619               "atmega16hvbrevb", "atmega16m1", "atmega16u4", "atmega161",
14620               "atmega162", "atmega163", "atmega164a", "atmega164p",
14621               "atmega164pa", "atmega165", "atmega165a", "atmega165p",
14622               "atmega165pa", "atmega168", "atmega168a", "atmega168p",
14623               "atmega168pa", "atmega168pb", "atmega169", "atmega169a",
14624               "atmega169p", "atmega169pa", "atmega32", "atmega32a",
14625               "atmega32c1", "atmega32hvb", "atmega32hvbrevb", "atmega32m1",
14626               "atmega32u4", "atmega32u6", "atmega323", "atmega324a",
14627               "atmega324p", "atmega324pa", "atmega325", "atmega325a",
14628               "atmega325p", "atmega325pa", "atmega3250", "atmega3250a",
14629               "atmega3250p", "atmega3250pa", "atmega328", "atmega328p",
14630               "atmega328pb", "atmega329", "atmega329a", "atmega329p",
14631               "atmega329pa", "atmega3290", "atmega3290a", "atmega3290p",
14632               "atmega3290pa", "atmega406", "atmega64", "atmega64a",
14633               "atmega64c1", "atmega64hve", "atmega64hve2", "atmega64m1",
14634               "atmega64rfr2", "atmega640", "atmega644", "atmega644a",
14635               "atmega644p", "atmega644pa", "atmega644rfr2", "atmega645",
14636               "atmega645a", "atmega645p", "atmega6450", "atmega6450a",
14637               "atmega6450p", "atmega649", "atmega649a", "atmega649p",
14638               "atmega6490", "atmega6490a", "atmega6490p", "at90can32",
14639               "at90can64", "at90pwm161", "at90pwm216", "at90pwm316",
14640               "at90scr100", "at90usb646", "at90usb647", "at94k", "m3000".
14641
14642           "avr51"
14643               "Enhanced" devices with 128@tie{}KiB of program memory.
14644               mcu@tie{}= "atmega128", "atmega128a", "atmega128rfa1",
14645               "atmega128rfr2", "atmega1280", "atmega1281", "atmega1284",
14646               "atmega1284p", "atmega1284rfr2", "at90can128", "at90usb1286",
14647               "at90usb1287".
14648
14649           "avr6"
14650               "Enhanced" devices with 3-byte PC, i.e. with more than
14651               128@tie{}KiB of program memory.  mcu@tie{}= "atmega256rfr2",
14652               "atmega2560", "atmega2561", "atmega2564rfr2".
14653
14654           "avrxmega2"
14655               "XMEGA" devices with more than 8@tie{}KiB and up to 64@tie{}KiB
14656               of program memory.  mcu@tie{}= "atxmega16a4", "atxmega16a4u",
14657               "atxmega16c4", "atxmega16d4", "atxmega16e5", "atxmega32a4",
14658               "atxmega32a4u", "atxmega32c3", "atxmega32c4", "atxmega32d3",
14659               "atxmega32d4", "atxmega32e5", "atxmega8e5".
14660
14661           "avrxmega3"
14662               "XMEGA" devices with up to 64@tie{}KiB of combined program
14663               memory and RAM, and with program memory visible in the RAM
14664               address space.  mcu@tie{}= "attiny1614", "attiny1616",
14665               "attiny1617", "attiny212", "attiny214", "attiny3214",
14666               "attiny3216", "attiny3217", "attiny412", "attiny414",
14667               "attiny416", "attiny417", "attiny814", "attiny816",
14668               "attiny817".
14669
14670           "avrxmega4"
14671               "XMEGA" devices with more than 64@tie{}KiB and up to
14672               128@tie{}KiB of program memory.  mcu@tie{}= "atxmega64a3",
14673               "atxmega64a3u", "atxmega64a4u", "atxmega64b1", "atxmega64b3",
14674               "atxmega64c3", "atxmega64d3", "atxmega64d4".
14675
14676           "avrxmega5"
14677               "XMEGA" devices with more than 64@tie{}KiB and up to
14678               128@tie{}KiB of program memory and more than 64@tie{}KiB of
14679               RAM.  mcu@tie{}= "atxmega64a1", "atxmega64a1u".
14680
14681           "avrxmega6"
14682               "XMEGA" devices with more than 128@tie{}KiB of program memory.
14683               mcu@tie{}= "atxmega128a3", "atxmega128a3u", "atxmega128b1",
14684               "atxmega128b3", "atxmega128c3", "atxmega128d3", "atxmega128d4",
14685               "atxmega192a3", "atxmega192a3u", "atxmega192c3",
14686               "atxmega192d3", "atxmega256a3", "atxmega256a3b",
14687               "atxmega256a3bu", "atxmega256a3u", "atxmega256c3",
14688               "atxmega256d3", "atxmega384c3", "atxmega384d3".
14689
14690           "avrxmega7"
14691               "XMEGA" devices with more than 128@tie{}KiB of program memory
14692               and more than 64@tie{}KiB of RAM.  mcu@tie{}= "atxmega128a1",
14693               "atxmega128a1u", "atxmega128a4u".
14694
14695           "avrtiny"
14696               "TINY" Tiny core devices with 512@tie{}B up to 4@tie{}KiB of
14697               program memory.  mcu@tie{}= "attiny10", "attiny20", "attiny4",
14698               "attiny40", "attiny5", "attiny9".
14699
14700           "avr1"
14701               This ISA is implemented by the minimal AVR core and supported
14702               for assembler only.  mcu@tie{}= "attiny11", "attiny12",
14703               "attiny15", "attiny28", "at90s1200".
14704
14705       -mabsdata
14706           Assume that all data in static storage can be accessed by LDS / STS
14707           instructions.  This option has only an effect on reduced Tiny
14708           devices like ATtiny40.  See also the "absdata" AVR Variable
14709           Attributes,variable attribute.
14710
14711       -maccumulate-args
14712           Accumulate outgoing function arguments and acquire/release the
14713           needed stack space for outgoing function arguments once in function
14714           prologue/epilogue.  Without this option, outgoing arguments are
14715           pushed before calling a function and popped afterwards.
14716
14717           Popping the arguments after the function call can be expensive on
14718           AVR so that accumulating the stack space might lead to smaller
14719           executables because arguments need not be removed from the stack
14720           after such a function call.
14721
14722           This option can lead to reduced code size for functions that
14723           perform several calls to functions that get their arguments on the
14724           stack like calls to printf-like functions.
14725
14726       -mbranch-cost=cost
14727           Set the branch costs for conditional branch instructions to cost.
14728           Reasonable values for cost are small, non-negative integers. The
14729           default branch cost is 0.
14730
14731       -mcall-prologues
14732           Functions prologues/epilogues are expanded as calls to appropriate
14733           subroutines.  Code size is smaller.
14734
14735       -mgas-isr-prologues
14736           Interrupt service routines (ISRs) may use the "__gcc_isr" pseudo
14737           instruction supported by GNU Binutils.  If this option is on, the
14738           feature can still be disabled for individual ISRs by means of the
14739           AVR Function Attributes,,"no_gccisr" function attribute.  This
14740           feature is activated per default if optimization is on (but not
14741           with -Og, @pxref{Optimize Options}), and if GNU Binutils support
14742           PR21683 ("https://sourceware.org/PR21683").
14743
14744       -mint8
14745           Assume "int" to be 8-bit integer.  This affects the sizes of all
14746           types: a "char" is 1 byte, an "int" is 1 byte, a "long" is 2 bytes,
14747           and "long long" is 4 bytes.  Please note that this option does not
14748           conform to the C standards, but it results in smaller code size.
14749
14750       -mmain-is-OS_task
14751           Do not save registers in "main".  The effect is the same like
14752           attaching attribute AVR Function Attributes,,"OS_task" to "main".
14753           It is activated per default if optimization is on.
14754
14755       -mn-flash=num
14756           Assume that the flash memory has a size of num times 64@tie{}KiB.
14757
14758       -mno-interrupts
14759           Generated code is not compatible with hardware interrupts.  Code
14760           size is smaller.
14761
14762       -mrelax
14763           Try to replace "CALL" resp. "JMP" instruction by the shorter
14764           "RCALL" resp. "RJMP" instruction if applicable.  Setting -mrelax
14765           just adds the --mlink-relax option to the assembler's command line
14766           and the --relax option to the linker's command line.
14767
14768           Jump relaxing is performed by the linker because jump offsets are
14769           not known before code is located. Therefore, the assembler code
14770           generated by the compiler is the same, but the instructions in the
14771           executable may differ from instructions in the assembler code.
14772
14773           Relaxing must be turned on if linker stubs are needed, see the
14774           section on "EIND" and linker stubs below.
14775
14776       -mrmw
14777           Assume that the device supports the Read-Modify-Write instructions
14778           "XCH", "LAC", "LAS" and "LAT".
14779
14780       -mshort-calls
14781           Assume that "RJMP" and "RCALL" can target the whole program memory.
14782
14783           This option is used internally for multilib selection.  It is not
14784           an optimization option, and you don't need to set it by hand.
14785
14786       -msp8
14787           Treat the stack pointer register as an 8-bit register, i.e. assume
14788           the high byte of the stack pointer is zero.  In general, you don't
14789           need to set this option by hand.
14790
14791           This option is used internally by the compiler to select and build
14792           multilibs for architectures "avr2" and "avr25".  These
14793           architectures mix devices with and without "SPH".  For any setting
14794           other than -mmcu=avr2 or -mmcu=avr25 the compiler driver adds or
14795           removes this option from the compiler proper's command line,
14796           because the compiler then knows if the device or architecture has
14797           an 8-bit stack pointer and thus no "SPH" register or not.
14798
14799       -mstrict-X
14800           Use address register "X" in a way proposed by the hardware.  This
14801           means that "X" is only used in indirect, post-increment or pre-
14802           decrement addressing.
14803
14804           Without this option, the "X" register may be used in the same way
14805           as "Y" or "Z" which then is emulated by additional instructions.
14806           For example, loading a value with "X+const" addressing with a small
14807           non-negative "const < 64" to a register Rn is performed as
14808
14809                   adiw r26, const   ; X += const
14810                   ld   <Rn>, X        ; <Rn> = *X
14811                   sbiw r26, const   ; X -= const
14812
14813       -mtiny-stack
14814           Only change the lower 8@tie{}bits of the stack pointer.
14815
14816       -mfract-convert-truncate
14817           Allow to use truncation instead of rounding towards zero for
14818           fractional fixed-point types.
14819
14820       -nodevicelib
14821           Don't link against AVR-LibC's device specific library "lib<mcu>.a".
14822
14823       -Waddr-space-convert
14824           Warn about conversions between address spaces in the case where the
14825           resulting address space is not contained in the incoming address
14826           space.
14827
14828       -Wmisspelled-isr
14829           Warn if the ISR is misspelled, i.e. without __vector prefix.
14830           Enabled by default.
14831
14832       "EIND" and Devices with More Than 128 Ki Bytes of Flash
14833
14834       Pointers in the implementation are 16@tie{}bits wide.  The address of a
14835       function or label is represented as word address so that indirect jumps
14836       and calls can target any code address in the range of 64@tie{}Ki words.
14837
14838       In order to facilitate indirect jump on devices with more than
14839       128@tie{}Ki bytes of program memory space, there is a special function
14840       register called "EIND" that serves as most significant part of the
14841       target address when "EICALL" or "EIJMP" instructions are used.
14842
14843       Indirect jumps and calls on these devices are handled as follows by the
14844       compiler and are subject to some limitations:
14845
14846       *   The compiler never sets "EIND".
14847
14848       *   The compiler uses "EIND" implicitly in "EICALL"/"EIJMP"
14849           instructions or might read "EIND" directly in order to emulate an
14850           indirect call/jump by means of a "RET" instruction.
14851
14852       *   The compiler assumes that "EIND" never changes during the startup
14853           code or during the application. In particular, "EIND" is not
14854           saved/restored in function or interrupt service routine
14855           prologue/epilogue.
14856
14857       *   For indirect calls to functions and computed goto, the linker
14858           generates stubs. Stubs are jump pads sometimes also called
14859           trampolines. Thus, the indirect call/jump jumps to such a stub.
14860           The stub contains a direct jump to the desired address.
14861
14862       *   Linker relaxation must be turned on so that the linker generates
14863           the stubs correctly in all situations. See the compiler option
14864           -mrelax and the linker option --relax.  There are corner cases
14865           where the linker is supposed to generate stubs but aborts without
14866           relaxation and without a helpful error message.
14867
14868       *   The default linker script is arranged for code with "EIND = 0".  If
14869           code is supposed to work for a setup with "EIND != 0", a custom
14870           linker script has to be used in order to place the sections whose
14871           name start with ".trampolines" into the segment where "EIND" points
14872           to.
14873
14874       *   The startup code from libgcc never sets "EIND".  Notice that
14875           startup code is a blend of code from libgcc and AVR-LibC.  For the
14876           impact of AVR-LibC on "EIND", see the AVR-LibC user manual
14877           ("http://nongnu.org/avr-libc/user-manual/").
14878
14879       *   It is legitimate for user-specific startup code to set up "EIND"
14880           early, for example by means of initialization code located in
14881           section ".init3". Such code runs prior to general startup code that
14882           initializes RAM and calls constructors, but after the bit of
14883           startup code from AVR-LibC that sets "EIND" to the segment where
14884           the vector table is located.
14885
14886                   #include <avr/io.h>
14887
14888                   static void
14889                   __attribute__((section(".init3"),naked,used,no_instrument_function))
14890                   init3_set_eind (void)
14891                   {
14892                     __asm volatile ("ldi r24,pm_hh8(__trampolines_start)\n\t"
14893                                     "out %i0,r24" :: "n" (&EIND) : "r24","memory");
14894                   }
14895
14896           The "__trampolines_start" symbol is defined in the linker script.
14897
14898       *   Stubs are generated automatically by the linker if the following
14899           two conditions are met:
14900
14901           -<The address of a label is taken by means of the "gs" modifier>
14902               (short for generate stubs) like so:
14903
14904                       LDI r24, lo8(gs(<func>))
14905                       LDI r25, hi8(gs(<func>))
14906
14907           -<The final location of that label is in a code segment>
14908               outside the segment where the stubs are located.
14909
14910       *   The compiler emits such "gs" modifiers for code labels in the
14911           following situations:
14912
14913           -<Taking address of a function or code label.>
14914           -<Computed goto.>
14915           -<If prologue-save function is used, see -mcall-prologues>
14916               command-line option.
14917
14918           -<Switch/case dispatch tables. If you do not want such dispatch>
14919               tables you can specify the -fno-jump-tables command-line
14920               option.
14921
14922           -<C and C++ constructors/destructors called during
14923           startup/shutdown.>
14924           -<If the tools hit a "gs()" modifier explained above.>
14925       *   Jumping to non-symbolic addresses like so is not supported:
14926
14927                   int main (void)
14928                   {
14929                       /* Call function at word address 0x2 */
14930                       return ((int(*)(void)) 0x2)();
14931                   }
14932
14933           Instead, a stub has to be set up, i.e. the function has to be
14934           called through a symbol ("func_4" in the example):
14935
14936                   int main (void)
14937                   {
14938                       extern int func_4 (void);
14939
14940                       /* Call function at byte address 0x4 */
14941                       return func_4();
14942                   }
14943
14944           and the application be linked with -Wl,--defsym,func_4=0x4.
14945           Alternatively, "func_4" can be defined in the linker script.
14946
14947       Handling of the "RAMPD", "RAMPX", "RAMPY" and "RAMPZ" Special Function
14948       Registers
14949
14950       Some AVR devices support memories larger than the 64@tie{}KiB range
14951       that can be accessed with 16-bit pointers.  To access memory locations
14952       outside this 64@tie{}KiB range, the content of a "RAMP" register is
14953       used as high part of the address: The "X", "Y", "Z" address register is
14954       concatenated with the "RAMPX", "RAMPY", "RAMPZ" special function
14955       register, respectively, to get a wide address. Similarly, "RAMPD" is
14956       used together with direct addressing.
14957
14958       *   The startup code initializes the "RAMP" special function registers
14959           with zero.
14960
14961       *   If a AVR Named Address Spaces,named address space other than
14962           generic or "__flash" is used, then "RAMPZ" is set as needed before
14963           the operation.
14964
14965       *   If the device supports RAM larger than 64@tie{}KiB and the compiler
14966           needs to change "RAMPZ" to accomplish an operation, "RAMPZ" is
14967           reset to zero after the operation.
14968
14969       *   If the device comes with a specific "RAMP" register, the ISR
14970           prologue/epilogue saves/restores that SFR and initializes it with
14971           zero in case the ISR code might (implicitly) use it.
14972
14973       *   RAM larger than 64@tie{}KiB is not supported by GCC for AVR
14974           targets.  If you use inline assembler to read from locations
14975           outside the 16-bit address range and change one of the "RAMP"
14976           registers, you must reset it to zero after the access.
14977
14978       AVR Built-in Macros
14979
14980       GCC defines several built-in macros so that the user code can test for
14981       the presence or absence of features.  Almost any of the following
14982       built-in macros are deduced from device capabilities and thus triggered
14983       by the -mmcu= command-line option.
14984
14985       For even more AVR-specific built-in macros see AVR Named Address Spaces
14986       and AVR Built-in Functions.
14987
14988       "__AVR_ARCH__"
14989           Build-in macro that resolves to a decimal number that identifies
14990           the architecture and depends on the -mmcu=mcu option.  Possible
14991           values are:
14992
14993           2, 25, 3, 31, 35, 4, 5, 51, 6
14994
14995           for mcu="avr2", "avr25", "avr3", "avr31", "avr35", "avr4", "avr5",
14996           "avr51", "avr6",
14997
14998           respectively and
14999
15000           100, 102, 103, 104, 105, 106, 107
15001
15002           for mcu="avrtiny", "avrxmega2", "avrxmega3", "avrxmega4",
15003           "avrxmega5", "avrxmega6", "avrxmega7", respectively.  If mcu
15004           specifies a device, this built-in macro is set accordingly. For
15005           example, with -mmcu=atmega8 the macro is defined to 4.
15006
15007       "__AVR_Device__"
15008           Setting -mmcu=device defines this built-in macro which reflects the
15009           device's name. For example, -mmcu=atmega8 defines the built-in
15010           macro "__AVR_ATmega8__", -mmcu=attiny261a defines
15011           "__AVR_ATtiny261A__", etc.
15012
15013           The built-in macros' names follow the scheme "__AVR_Device__" where
15014           Device is the device name as from the AVR user manual. The
15015           difference between Device in the built-in macro and device in
15016           -mmcu=device is that the latter is always lowercase.
15017
15018           If device is not a device but only a core architecture like avr51,
15019           this macro is not defined.
15020
15021       "__AVR_DEVICE_NAME__"
15022           Setting -mmcu=device defines this built-in macro to the device's
15023           name. For example, with -mmcu=atmega8 the macro is defined to
15024           "atmega8".
15025
15026           If device is not a device but only a core architecture like avr51,
15027           this macro is not defined.
15028
15029       "__AVR_XMEGA__"
15030           The device / architecture belongs to the XMEGA family of devices.
15031
15032       "__AVR_HAVE_ELPM__"
15033           The device has the "ELPM" instruction.
15034
15035       "__AVR_HAVE_ELPMX__"
15036           The device has the "ELPM Rn,Z" and "ELPM Rn,Z+" instructions.
15037
15038       "__AVR_HAVE_MOVW__"
15039           The device has the "MOVW" instruction to perform 16-bit register-
15040           register moves.
15041
15042       "__AVR_HAVE_LPMX__"
15043           The device has the "LPM Rn,Z" and "LPM Rn,Z+" instructions.
15044
15045       "__AVR_HAVE_MUL__"
15046           The device has a hardware multiplier.
15047
15048       "__AVR_HAVE_JMP_CALL__"
15049           The device has the "JMP" and "CALL" instructions.  This is the case
15050           for devices with more than 8@tie{}KiB of program memory.
15051
15052       "__AVR_HAVE_EIJMP_EICALL__"
15053       "__AVR_3_BYTE_PC__"
15054           The device has the "EIJMP" and "EICALL" instructions.  This is the
15055           case for devices with more than 128@tie{}KiB of program memory.
15056           This also means that the program counter (PC) is 3@tie{}bytes wide.
15057
15058       "__AVR_2_BYTE_PC__"
15059           The program counter (PC) is 2@tie{}bytes wide. This is the case for
15060           devices with up to 128@tie{}KiB of program memory.
15061
15062       "__AVR_HAVE_8BIT_SP__"
15063       "__AVR_HAVE_16BIT_SP__"
15064           The stack pointer (SP) register is treated as 8-bit respectively
15065           16-bit register by the compiler.  The definition of these macros is
15066           affected by -mtiny-stack.
15067
15068       "__AVR_HAVE_SPH__"
15069       "__AVR_SP8__"
15070           The device has the SPH (high part of stack pointer) special
15071           function register or has an 8-bit stack pointer, respectively.  The
15072           definition of these macros is affected by -mmcu= and in the cases
15073           of -mmcu=avr2 and -mmcu=avr25 also by -msp8.
15074
15075       "__AVR_HAVE_RAMPD__"
15076       "__AVR_HAVE_RAMPX__"
15077       "__AVR_HAVE_RAMPY__"
15078       "__AVR_HAVE_RAMPZ__"
15079           The device has the "RAMPD", "RAMPX", "RAMPY", "RAMPZ" special
15080           function register, respectively.
15081
15082       "__NO_INTERRUPTS__"
15083           This macro reflects the -mno-interrupts command-line option.
15084
15085       "__AVR_ERRATA_SKIP__"
15086       "__AVR_ERRATA_SKIP_JMP_CALL__"
15087           Some AVR devices (AT90S8515, ATmega103) must not skip 32-bit
15088           instructions because of a hardware erratum.  Skip instructions are
15089           "SBRS", "SBRC", "SBIS", "SBIC" and "CPSE".  The second macro is
15090           only defined if "__AVR_HAVE_JMP_CALL__" is also set.
15091
15092       "__AVR_ISA_RMW__"
15093           The device has Read-Modify-Write instructions (XCH, LAC, LAS and
15094           LAT).
15095
15096       "__AVR_SFR_OFFSET__=offset"
15097           Instructions that can address I/O special function registers
15098           directly like "IN", "OUT", "SBI", etc. may use a different address
15099           as if addressed by an instruction to access RAM like "LD" or "STS".
15100           This offset depends on the device architecture and has to be
15101           subtracted from the RAM address in order to get the respective
15102           I/O@tie{}address.
15103
15104       "__AVR_SHORT_CALLS__"
15105           The -mshort-calls command line option is set.
15106
15107       "__AVR_PM_BASE_ADDRESS__=addr"
15108           Some devices support reading from flash memory by means of "LD*"
15109           instructions.  The flash memory is seen in the data address space
15110           at an offset of "__AVR_PM_BASE_ADDRESS__".  If this macro is not
15111           defined, this feature is not available.  If defined, the address
15112           space is linear and there is no need to put ".rodata" into RAM.
15113           This is handled by the default linker description file, and is
15114           currently available for "avrtiny" and "avrxmega3".  Even more
15115           convenient, there is no need to use address spaces like "__flash"
15116           or features like attribute "progmem" and "pgm_read_*".
15117
15118       "__WITH_AVRLIBC__"
15119           The compiler is configured to be used together with AVR-Libc.  See
15120           the --with-avrlibc configure option.
15121
15122   Blackfin Options
15123       -mcpu=cpu[-sirevision]
15124           Specifies the name of the target Blackfin processor.  Currently,
15125           cpu can be one of bf512, bf514, bf516, bf518, bf522, bf523, bf524,
15126           bf525, bf526, bf527, bf531, bf532, bf533, bf534, bf536, bf537,
15127           bf538, bf539, bf542, bf544, bf547, bf548, bf549, bf542m, bf544m,
15128           bf547m, bf548m, bf549m, bf561, bf592.
15129
15130           The optional sirevision specifies the silicon revision of the
15131           target Blackfin processor.  Any workarounds available for the
15132           targeted silicon revision are enabled.  If sirevision is none, no
15133           workarounds are enabled.  If sirevision is any, all workarounds for
15134           the targeted processor are enabled.  The "__SILICON_REVISION__"
15135           macro is defined to two hexadecimal digits representing the major
15136           and minor numbers in the silicon revision.  If sirevision is none,
15137           the "__SILICON_REVISION__" is not defined.  If sirevision is any,
15138           the "__SILICON_REVISION__" is defined to be 0xffff.  If this
15139           optional sirevision is not used, GCC assumes the latest known
15140           silicon revision of the targeted Blackfin processor.
15141
15142           GCC defines a preprocessor macro for the specified cpu.  For the
15143           bfin-elf toolchain, this option causes the hardware BSP provided by
15144           libgloss to be linked in if -msim is not given.
15145
15146           Without this option, bf532 is used as the processor by default.
15147
15148           Note that support for bf561 is incomplete.  For bf561, only the
15149           preprocessor macro is defined.
15150
15151       -msim
15152           Specifies that the program will be run on the simulator.  This
15153           causes the simulator BSP provided by libgloss to be linked in.
15154           This option has effect only for bfin-elf toolchain.  Certain other
15155           options, such as -mid-shared-library and -mfdpic, imply -msim.
15156
15157       -momit-leaf-frame-pointer
15158           Don't keep the frame pointer in a register for leaf functions.
15159           This avoids the instructions to save, set up and restore frame
15160           pointers and makes an extra register available in leaf functions.
15161
15162       -mspecld-anomaly
15163           When enabled, the compiler ensures that the generated code does not
15164           contain speculative loads after jump instructions. If this option
15165           is used, "__WORKAROUND_SPECULATIVE_LOADS" is defined.
15166
15167       -mno-specld-anomaly
15168           Don't generate extra code to prevent speculative loads from
15169           occurring.
15170
15171       -mcsync-anomaly
15172           When enabled, the compiler ensures that the generated code does not
15173           contain CSYNC or SSYNC instructions too soon after conditional
15174           branches.  If this option is used, "__WORKAROUND_SPECULATIVE_SYNCS"
15175           is defined.
15176
15177       -mno-csync-anomaly
15178           Don't generate extra code to prevent CSYNC or SSYNC instructions
15179           from occurring too soon after a conditional branch.
15180
15181       -mlow-64k
15182           When enabled, the compiler is free to take advantage of the
15183           knowledge that the entire program fits into the low 64k of memory.
15184
15185       -mno-low-64k
15186           Assume that the program is arbitrarily large.  This is the default.
15187
15188       -mstack-check-l1
15189           Do stack checking using information placed into L1 scratchpad
15190           memory by the uClinux kernel.
15191
15192       -mid-shared-library
15193           Generate code that supports shared libraries via the library ID
15194           method.  This allows for execute in place and shared libraries in
15195           an environment without virtual memory management.  This option
15196           implies -fPIC.  With a bfin-elf target, this option implies -msim.
15197
15198       -mno-id-shared-library
15199           Generate code that doesn't assume ID-based shared libraries are
15200           being used.  This is the default.
15201
15202       -mleaf-id-shared-library
15203           Generate code that supports shared libraries via the library ID
15204           method, but assumes that this library or executable won't link
15205           against any other ID shared libraries.  That allows the compiler to
15206           use faster code for jumps and calls.
15207
15208       -mno-leaf-id-shared-library
15209           Do not assume that the code being compiled won't link against any
15210           ID shared libraries.  Slower code is generated for jump and call
15211           insns.
15212
15213       -mshared-library-id=n
15214           Specifies the identification number of the ID-based shared library
15215           being compiled.  Specifying a value of 0 generates more compact
15216           code; specifying other values forces the allocation of that number
15217           to the current library but is no more space- or time-efficient than
15218           omitting this option.
15219
15220       -msep-data
15221           Generate code that allows the data segment to be located in a
15222           different area of memory from the text segment.  This allows for
15223           execute in place in an environment without virtual memory
15224           management by eliminating relocations against the text section.
15225
15226       -mno-sep-data
15227           Generate code that assumes that the data segment follows the text
15228           segment.  This is the default.
15229
15230       -mlong-calls
15231       -mno-long-calls
15232           Tells the compiler to perform function calls by first loading the
15233           address of the function into a register and then performing a
15234           subroutine call on this register.  This switch is needed if the
15235           target function lies outside of the 24-bit addressing range of the
15236           offset-based version of subroutine call instruction.
15237
15238           This feature is not enabled by default.  Specifying -mno-long-calls
15239           restores the default behavior.  Note these switches have no effect
15240           on how the compiler generates code to handle function calls via
15241           function pointers.
15242
15243       -mfast-fp
15244           Link with the fast floating-point library. This library relaxes
15245           some of the IEEE floating-point standard's rules for checking
15246           inputs against Not-a-Number (NAN), in the interest of performance.
15247
15248       -minline-plt
15249           Enable inlining of PLT entries in function calls to functions that
15250           are not known to bind locally.  It has no effect without -mfdpic.
15251
15252       -mmulticore
15253           Build a standalone application for multicore Blackfin processors.
15254           This option causes proper start files and link scripts supporting
15255           multicore to be used, and defines the macro "__BFIN_MULTICORE".  It
15256           can only be used with -mcpu=bf561[-sirevision].
15257
15258           This option can be used with -mcorea or -mcoreb, which selects the
15259           one-application-per-core programming model.  Without -mcorea or
15260           -mcoreb, the single-application/dual-core programming model is
15261           used. In this model, the main function of Core B should be named as
15262           "coreb_main".
15263
15264           If this option is not used, the single-core application programming
15265           model is used.
15266
15267       -mcorea
15268           Build a standalone application for Core A of BF561 when using the
15269           one-application-per-core programming model. Proper start files and
15270           link scripts are used to support Core A, and the macro
15271           "__BFIN_COREA" is defined.  This option can only be used in
15272           conjunction with -mmulticore.
15273
15274       -mcoreb
15275           Build a standalone application for Core B of BF561 when using the
15276           one-application-per-core programming model. Proper start files and
15277           link scripts are used to support Core B, and the macro
15278           "__BFIN_COREB" is defined. When this option is used, "coreb_main"
15279           should be used instead of "main".  This option can only be used in
15280           conjunction with -mmulticore.
15281
15282       -msdram
15283           Build a standalone application for SDRAM. Proper start files and
15284           link scripts are used to put the application into SDRAM, and the
15285           macro "__BFIN_SDRAM" is defined.  The loader should initialize
15286           SDRAM before loading the application.
15287
15288       -micplb
15289           Assume that ICPLBs are enabled at run time.  This has an effect on
15290           certain anomaly workarounds.  For Linux targets, the default is to
15291           assume ICPLBs are enabled; for standalone applications the default
15292           is off.
15293
15294   C6X Options
15295       -march=name
15296           This specifies the name of the target architecture.  GCC uses this
15297           name to determine what kind of instructions it can emit when
15298           generating assembly code.  Permissible names are: c62x, c64x,
15299           c64x+, c67x, c67x+, c674x.
15300
15301       -mbig-endian
15302           Generate code for a big-endian target.
15303
15304       -mlittle-endian
15305           Generate code for a little-endian target.  This is the default.
15306
15307       -msim
15308           Choose startup files and linker script suitable for the simulator.
15309
15310       -msdata=default
15311           Put small global and static data in the ".neardata" section, which
15312           is pointed to by register "B14".  Put small uninitialized global
15313           and static data in the ".bss" section, which is adjacent to the
15314           ".neardata" section.  Put small read-only data into the ".rodata"
15315           section.  The corresponding sections used for large pieces of data
15316           are ".fardata", ".far" and ".const".
15317
15318       -msdata=all
15319           Put all data, not just small objects, into the sections reserved
15320           for small data, and use addressing relative to the "B14" register
15321           to access them.
15322
15323       -msdata=none
15324           Make no use of the sections reserved for small data, and use
15325           absolute addresses to access all data.  Put all initialized global
15326           and static data in the ".fardata" section, and all uninitialized
15327           data in the ".far" section.  Put all constant data into the
15328           ".const" section.
15329
15330   CRIS Options
15331       These options are defined specifically for the CRIS ports.
15332
15333       -march=architecture-type
15334       -mcpu=architecture-type
15335           Generate code for the specified architecture.  The choices for
15336           architecture-type are v3, v8 and v10 for respectively ETRAX 4,
15337           ETRAX 100, and ETRAX 100 LX.  Default is v0 except for cris-axis-
15338           linux-gnu, where the default is v10.
15339
15340       -mtune=architecture-type
15341           Tune to architecture-type everything applicable about the generated
15342           code, except for the ABI and the set of available instructions.
15343           The choices for architecture-type are the same as for
15344           -march=architecture-type.
15345
15346       -mmax-stack-frame=n
15347           Warn when the stack frame of a function exceeds n bytes.
15348
15349       -metrax4
15350       -metrax100
15351           The options -metrax4 and -metrax100 are synonyms for -march=v3 and
15352           -march=v8 respectively.
15353
15354       -mmul-bug-workaround
15355       -mno-mul-bug-workaround
15356           Work around a bug in the "muls" and "mulu" instructions for CPU
15357           models where it applies.  This option is active by default.
15358
15359       -mpdebug
15360           Enable CRIS-specific verbose debug-related information in the
15361           assembly code.  This option also has the effect of turning off the
15362           #NO_APP formatted-code indicator to the assembler at the beginning
15363           of the assembly file.
15364
15365       -mcc-init
15366           Do not use condition-code results from previous instruction; always
15367           emit compare and test instructions before use of condition codes.
15368
15369       -mno-side-effects
15370           Do not emit instructions with side effects in addressing modes
15371           other than post-increment.
15372
15373       -mstack-align
15374       -mno-stack-align
15375       -mdata-align
15376       -mno-data-align
15377       -mconst-align
15378       -mno-const-align
15379           These options (no- options) arrange (eliminate arrangements) for
15380           the stack frame, individual data and constants to be aligned for
15381           the maximum single data access size for the chosen CPU model.  The
15382           default is to arrange for 32-bit alignment.  ABI details such as
15383           structure layout are not affected by these options.
15384
15385       -m32-bit
15386       -m16-bit
15387       -m8-bit
15388           Similar to the stack- data- and const-align options above, these
15389           options arrange for stack frame, writable data and constants to all
15390           be 32-bit, 16-bit or 8-bit aligned.  The default is 32-bit
15391           alignment.
15392
15393       -mno-prologue-epilogue
15394       -mprologue-epilogue
15395           With -mno-prologue-epilogue, the normal function prologue and
15396           epilogue which set up the stack frame are omitted and no return
15397           instructions or return sequences are generated in the code.  Use
15398           this option only together with visual inspection of the compiled
15399           code: no warnings or errors are generated when call-saved registers
15400           must be saved, or storage for local variables needs to be
15401           allocated.
15402
15403       -mno-gotplt
15404       -mgotplt
15405           With -fpic and -fPIC, don't generate (do generate) instruction
15406           sequences that load addresses for functions from the PLT part of
15407           the GOT rather than (traditional on other architectures) calls to
15408           the PLT.  The default is -mgotplt.
15409
15410       -melf
15411           Legacy no-op option only recognized with the cris-axis-elf and
15412           cris-axis-linux-gnu targets.
15413
15414       -mlinux
15415           Legacy no-op option only recognized with the cris-axis-linux-gnu
15416           target.
15417
15418       -sim
15419           This option, recognized for the cris-axis-elf, arranges to link
15420           with input-output functions from a simulator library.  Code,
15421           initialized data and zero-initialized data are allocated
15422           consecutively.
15423
15424       -sim2
15425           Like -sim, but pass linker options to locate initialized data at
15426           0x40000000 and zero-initialized data at 0x80000000.
15427
15428   CR16 Options
15429       These options are defined specifically for the CR16 ports.
15430
15431       -mmac
15432           Enable the use of multiply-accumulate instructions. Disabled by
15433           default.
15434
15435       -mcr16cplus
15436       -mcr16c
15437           Generate code for CR16C or CR16C+ architecture. CR16C+ architecture
15438           is default.
15439
15440       -msim
15441           Links the library libsim.a which is in compatible with simulator.
15442           Applicable to ELF compiler only.
15443
15444       -mint32
15445           Choose integer type as 32-bit wide.
15446
15447       -mbit-ops
15448           Generates "sbit"/"cbit" instructions for bit manipulations.
15449
15450       -mdata-model=model
15451           Choose a data model. The choices for model are near, far or medium.
15452           medium is default.  However, far is not valid with -mcr16c, as the
15453           CR16C architecture does not support the far data model.
15454
15455   Darwin Options
15456       These options are defined for all architectures running the Darwin
15457       operating system.
15458
15459       FSF GCC on Darwin does not create "fat" object files; it creates an
15460       object file for the single architecture that GCC was built to target.
15461       Apple's GCC on Darwin does create "fat" files if multiple -arch options
15462       are used; it does so by running the compiler or linker multiple times
15463       and joining the results together with lipo.
15464
15465       The subtype of the file created (like ppc7400 or ppc970 or i686) is
15466       determined by the flags that specify the ISA that GCC is targeting,
15467       like -mcpu or -march.  The -force_cpusubtype_ALL option can be used to
15468       override this.
15469
15470       The Darwin tools vary in their behavior when presented with an ISA
15471       mismatch.  The assembler, as, only permits instructions to be used that
15472       are valid for the subtype of the file it is generating, so you cannot
15473       put 64-bit instructions in a ppc750 object file.  The linker for shared
15474       libraries, /usr/bin/libtool, fails and prints an error if asked to
15475       create a shared library with a less restrictive subtype than its input
15476       files (for instance, trying to put a ppc970 object file in a ppc7400
15477       library).  The linker for executables, ld, quietly gives the executable
15478       the most restrictive subtype of any of its input files.
15479
15480       -Fdir
15481           Add the framework directory dir to the head of the list of
15482           directories to be searched for header files.  These directories are
15483           interleaved with those specified by -I options and are scanned in a
15484           left-to-right order.
15485
15486           A framework directory is a directory with frameworks in it.  A
15487           framework is a directory with a Headers and/or PrivateHeaders
15488           directory contained directly in it that ends in .framework.  The
15489           name of a framework is the name of this directory excluding the
15490           .framework.  Headers associated with the framework are found in one
15491           of those two directories, with Headers being searched first.  A
15492           subframework is a framework directory that is in a framework's
15493           Frameworks directory.  Includes of subframework headers can only
15494           appear in a header of a framework that contains the subframework,
15495           or in a sibling subframework header.  Two subframeworks are
15496           siblings if they occur in the same framework.  A subframework
15497           should not have the same name as a framework; a warning is issued
15498           if this is violated.  Currently a subframework cannot have
15499           subframeworks; in the future, the mechanism may be extended to
15500           support this.  The standard frameworks can be found in
15501           /System/Library/Frameworks and /Library/Frameworks.  An example
15502           include looks like "#include <Framework/header.h>", where Framework
15503           denotes the name of the framework and header.h is found in the
15504           PrivateHeaders or Headers directory.
15505
15506       -iframeworkdir
15507           Like -F except the directory is a treated as a system directory.
15508           The main difference between this -iframework and -F is that with
15509           -iframework the compiler does not warn about constructs contained
15510           within header files found via dir.  This option is valid only for
15511           the C family of languages.
15512
15513       -gused
15514           Emit debugging information for symbols that are used.  For stabs
15515           debugging format, this enables -feliminate-unused-debug-symbols.
15516           This is by default ON.
15517
15518       -gfull
15519           Emit debugging information for all symbols and types.
15520
15521       -mmacosx-version-min=version
15522           The earliest version of MacOS X that this executable will run on is
15523           version.  Typical values of version include 10.1, 10.2, and 10.3.9.
15524
15525           If the compiler was built to use the system's headers by default,
15526           then the default for this option is the system version on which the
15527           compiler is running, otherwise the default is to make choices that
15528           are compatible with as many systems and code bases as possible.
15529
15530       -mkernel
15531           Enable kernel development mode.  The -mkernel option sets -static,
15532           -fno-common, -fno-use-cxa-atexit, -fno-exceptions,
15533           -fno-non-call-exceptions, -fapple-kext, -fno-weak and -fno-rtti
15534           where applicable.  This mode also sets -mno-altivec, -msoft-float,
15535           -fno-builtin and -mlong-branch for PowerPC targets.
15536
15537       -mone-byte-bool
15538           Override the defaults for "bool" so that "sizeof(bool)==1".  By
15539           default "sizeof(bool)" is 4 when compiling for Darwin/PowerPC and 1
15540           when compiling for Darwin/x86, so this option has no effect on x86.
15541
15542           Warning: The -mone-byte-bool switch causes GCC to generate code
15543           that is not binary compatible with code generated without that
15544           switch.  Using this switch may require recompiling all other
15545           modules in a program, including system libraries.  Use this switch
15546           to conform to a non-default data model.
15547
15548       -mfix-and-continue
15549       -ffix-and-continue
15550       -findirect-data
15551           Generate code suitable for fast turnaround development, such as to
15552           allow GDB to dynamically load .o files into already-running
15553           programs.  -findirect-data and -ffix-and-continue are provided for
15554           backwards compatibility.
15555
15556       -all_load
15557           Loads all members of static archive libraries.  See man ld(1) for
15558           more information.
15559
15560       -arch_errors_fatal
15561           Cause the errors having to do with files that have the wrong
15562           architecture to be fatal.
15563
15564       -bind_at_load
15565           Causes the output file to be marked such that the dynamic linker
15566           will bind all undefined references when the file is loaded or
15567           launched.
15568
15569       -bundle
15570           Produce a Mach-o bundle format file.  See man ld(1) for more
15571           information.
15572
15573       -bundle_loader executable
15574           This option specifies the executable that will load the build
15575           output file being linked.  See man ld(1) for more information.
15576
15577       -dynamiclib
15578           When passed this option, GCC produces a dynamic library instead of
15579           an executable when linking, using the Darwin libtool command.
15580
15581       -force_cpusubtype_ALL
15582           This causes GCC's output file to have the ALL subtype, instead of
15583           one controlled by the -mcpu or -march option.
15584
15585       -allowable_client  client_name
15586       -client_name
15587       -compatibility_version
15588       -current_version
15589       -dead_strip
15590       -dependency-file
15591       -dylib_file
15592       -dylinker_install_name
15593       -dynamic
15594       -exported_symbols_list
15595       -filelist
15596       -flat_namespace
15597       -force_flat_namespace
15598       -headerpad_max_install_names
15599       -image_base
15600       -init
15601       -install_name
15602       -keep_private_externs
15603       -multi_module
15604       -multiply_defined
15605       -multiply_defined_unused
15606       -noall_load
15607       -no_dead_strip_inits_and_terms
15608       -nofixprebinding
15609       -nomultidefs
15610       -noprebind
15611       -noseglinkedit
15612       -pagezero_size
15613       -prebind
15614       -prebind_all_twolevel_modules
15615       -private_bundle
15616       -read_only_relocs
15617       -sectalign
15618       -sectobjectsymbols
15619       -whyload
15620       -seg1addr
15621       -sectcreate
15622       -sectobjectsymbols
15623       -sectorder
15624       -segaddr
15625       -segs_read_only_addr
15626       -segs_read_write_addr
15627       -seg_addr_table
15628       -seg_addr_table_filename
15629       -seglinkedit
15630       -segprot
15631       -segs_read_only_addr
15632       -segs_read_write_addr
15633       -single_module
15634       -static
15635       -sub_library
15636       -sub_umbrella
15637       -twolevel_namespace
15638       -umbrella
15639       -undefined
15640       -unexported_symbols_list
15641       -weak_reference_mismatches
15642       -whatsloaded
15643           These options are passed to the Darwin linker.  The Darwin linker
15644           man page describes them in detail.
15645
15646   DEC Alpha Options
15647       These -m options are defined for the DEC Alpha implementations:
15648
15649       -mno-soft-float
15650       -msoft-float
15651           Use (do not use) the hardware floating-point instructions for
15652           floating-point operations.  When -msoft-float is specified,
15653           functions in libgcc.a are used to perform floating-point
15654           operations.  Unless they are replaced by routines that emulate the
15655           floating-point operations, or compiled in such a way as to call
15656           such emulations routines, these routines issue floating-point
15657           operations.   If you are compiling for an Alpha without floating-
15658           point operations, you must ensure that the library is built so as
15659           not to call them.
15660
15661           Note that Alpha implementations without floating-point operations
15662           are required to have floating-point registers.
15663
15664       -mfp-reg
15665       -mno-fp-regs
15666           Generate code that uses (does not use) the floating-point register
15667           set.  -mno-fp-regs implies -msoft-float.  If the floating-point
15668           register set is not used, floating-point operands are passed in
15669           integer registers as if they were integers and floating-point
15670           results are passed in $0 instead of $f0.  This is a non-standard
15671           calling sequence, so any function with a floating-point argument or
15672           return value called by code compiled with -mno-fp-regs must also be
15673           compiled with that option.
15674
15675           A typical use of this option is building a kernel that does not
15676           use, and hence need not save and restore, any floating-point
15677           registers.
15678
15679       -mieee
15680           The Alpha architecture implements floating-point hardware optimized
15681           for maximum performance.  It is mostly compliant with the IEEE
15682           floating-point standard.  However, for full compliance, software
15683           assistance is required.  This option generates code fully IEEE-
15684           compliant code except that the inexact-flag is not maintained (see
15685           below).  If this option is turned on, the preprocessor macro
15686           "_IEEE_FP" is defined during compilation.  The resulting code is
15687           less efficient but is able to correctly support denormalized
15688           numbers and exceptional IEEE values such as not-a-number and
15689           plus/minus infinity.  Other Alpha compilers call this option
15690           -ieee_with_no_inexact.
15691
15692       -mieee-with-inexact
15693           This is like -mieee except the generated code also maintains the
15694           IEEE inexact-flag.  Turning on this option causes the generated
15695           code to implement fully-compliant IEEE math.  In addition to
15696           "_IEEE_FP", "_IEEE_FP_EXACT" is defined as a preprocessor macro.
15697           On some Alpha implementations the resulting code may execute
15698           significantly slower than the code generated by default.  Since
15699           there is very little code that depends on the inexact-flag, you
15700           should normally not specify this option.  Other Alpha compilers
15701           call this option -ieee_with_inexact.
15702
15703       -mfp-trap-mode=trap-mode
15704           This option controls what floating-point related traps are enabled.
15705           Other Alpha compilers call this option -fptm trap-mode.  The trap
15706           mode can be set to one of four values:
15707
15708           n   This is the default (normal) setting.  The only traps that are
15709               enabled are the ones that cannot be disabled in software (e.g.,
15710               division by zero trap).
15711
15712           u   In addition to the traps enabled by n, underflow traps are
15713               enabled as well.
15714
15715           su  Like u, but the instructions are marked to be safe for software
15716               completion (see Alpha architecture manual for details).
15717
15718           sui Like su, but inexact traps are enabled as well.
15719
15720       -mfp-rounding-mode=rounding-mode
15721           Selects the IEEE rounding mode.  Other Alpha compilers call this
15722           option -fprm rounding-mode.  The rounding-mode can be one of:
15723
15724           n   Normal IEEE rounding mode.  Floating-point numbers are rounded
15725               towards the nearest machine number or towards the even machine
15726               number in case of a tie.
15727
15728           m   Round towards minus infinity.
15729
15730           c   Chopped rounding mode.  Floating-point numbers are rounded
15731               towards zero.
15732
15733           d   Dynamic rounding mode.  A field in the floating-point control
15734               register (fpcr, see Alpha architecture reference manual)
15735               controls the rounding mode in effect.  The C library
15736               initializes this register for rounding towards plus infinity.
15737               Thus, unless your program modifies the fpcr, d corresponds to
15738               round towards plus infinity.
15739
15740       -mtrap-precision=trap-precision
15741           In the Alpha architecture, floating-point traps are imprecise.
15742           This means without software assistance it is impossible to recover
15743           from a floating trap and program execution normally needs to be
15744           terminated.  GCC can generate code that can assist operating system
15745           trap handlers in determining the exact location that caused a
15746           floating-point trap.  Depending on the requirements of an
15747           application, different levels of precisions can be selected:
15748
15749           p   Program precision.  This option is the default and means a trap
15750               handler can only identify which program caused a floating-point
15751               exception.
15752
15753           f   Function precision.  The trap handler can determine the
15754               function that caused a floating-point exception.
15755
15756           i   Instruction precision.  The trap handler can determine the
15757               exact instruction that caused a floating-point exception.
15758
15759           Other Alpha compilers provide the equivalent options called
15760           -scope_safe and -resumption_safe.
15761
15762       -mieee-conformant
15763           This option marks the generated code as IEEE conformant.  You must
15764           not use this option unless you also specify -mtrap-precision=i and
15765           either -mfp-trap-mode=su or -mfp-trap-mode=sui.  Its only effect is
15766           to emit the line .eflag 48 in the function prologue of the
15767           generated assembly file.
15768
15769       -mbuild-constants
15770           Normally GCC examines a 32- or 64-bit integer constant to see if it
15771           can construct it from smaller constants in two or three
15772           instructions.  If it cannot, it outputs the constant as a literal
15773           and generates code to load it from the data segment at run time.
15774
15775           Use this option to require GCC to construct all integer constants
15776           using code, even if it takes more instructions (the maximum is
15777           six).
15778
15779           You typically use this option to build a shared library dynamic
15780           loader.  Itself a shared library, it must relocate itself in memory
15781           before it can find the variables and constants in its own data
15782           segment.
15783
15784       -mbwx
15785       -mno-bwx
15786       -mcix
15787       -mno-cix
15788       -mfix
15789       -mno-fix
15790       -mmax
15791       -mno-max
15792           Indicate whether GCC should generate code to use the optional BWX,
15793           CIX, FIX and MAX instruction sets.  The default is to use the
15794           instruction sets supported by the CPU type specified via -mcpu=
15795           option or that of the CPU on which GCC was built if none is
15796           specified.
15797
15798       -mfloat-vax
15799       -mfloat-ieee
15800           Generate code that uses (does not use) VAX F and G floating-point
15801           arithmetic instead of IEEE single and double precision.
15802
15803       -mexplicit-relocs
15804       -mno-explicit-relocs
15805           Older Alpha assemblers provided no way to generate symbol
15806           relocations except via assembler macros.  Use of these macros does
15807           not allow optimal instruction scheduling.  GNU binutils as of
15808           version 2.12 supports a new syntax that allows the compiler to
15809           explicitly mark which relocations should apply to which
15810           instructions.  This option is mostly useful for debugging, as GCC
15811           detects the capabilities of the assembler when it is built and sets
15812           the default accordingly.
15813
15814       -msmall-data
15815       -mlarge-data
15816           When -mexplicit-relocs is in effect, static data is accessed via
15817           gp-relative relocations.  When -msmall-data is used, objects 8
15818           bytes long or smaller are placed in a small data area (the ".sdata"
15819           and ".sbss" sections) and are accessed via 16-bit relocations off
15820           of the $gp register.  This limits the size of the small data area
15821           to 64KB, but allows the variables to be directly accessed via a
15822           single instruction.
15823
15824           The default is -mlarge-data.  With this option the data area is
15825           limited to just below 2GB.  Programs that require more than 2GB of
15826           data must use "malloc" or "mmap" to allocate the data in the heap
15827           instead of in the program's data segment.
15828
15829           When generating code for shared libraries, -fpic implies
15830           -msmall-data and -fPIC implies -mlarge-data.
15831
15832       -msmall-text
15833       -mlarge-text
15834           When -msmall-text is used, the compiler assumes that the code of
15835           the entire program (or shared library) fits in 4MB, and is thus
15836           reachable with a branch instruction.  When -msmall-data is used,
15837           the compiler can assume that all local symbols share the same $gp
15838           value, and thus reduce the number of instructions required for a
15839           function call from 4 to 1.
15840
15841           The default is -mlarge-text.
15842
15843       -mcpu=cpu_type
15844           Set the instruction set and instruction scheduling parameters for
15845           machine type cpu_type.  You can specify either the EV style name or
15846           the corresponding chip number.  GCC supports scheduling parameters
15847           for the EV4, EV5 and EV6 family of processors and chooses the
15848           default values for the instruction set from the processor you
15849           specify.  If you do not specify a processor type, GCC defaults to
15850           the processor on which the compiler was built.
15851
15852           Supported values for cpu_type are
15853
15854           ev4
15855           ev45
15856           21064
15857               Schedules as an EV4 and has no instruction set extensions.
15858
15859           ev5
15860           21164
15861               Schedules as an EV5 and has no instruction set extensions.
15862
15863           ev56
15864           21164a
15865               Schedules as an EV5 and supports the BWX extension.
15866
15867           pca56
15868           21164pc
15869           21164PC
15870               Schedules as an EV5 and supports the BWX and MAX extensions.
15871
15872           ev6
15873           21264
15874               Schedules as an EV6 and supports the BWX, FIX, and MAX
15875               extensions.
15876
15877           ev67
15878           21264a
15879               Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX
15880               extensions.
15881
15882           Native toolchains also support the value native, which selects the
15883           best architecture option for the host processor.  -mcpu=native has
15884           no effect if GCC does not recognize the processor.
15885
15886       -mtune=cpu_type
15887           Set only the instruction scheduling parameters for machine type
15888           cpu_type.  The instruction set is not changed.
15889
15890           Native toolchains also support the value native, which selects the
15891           best architecture option for the host processor.  -mtune=native has
15892           no effect if GCC does not recognize the processor.
15893
15894       -mmemory-latency=time
15895           Sets the latency the scheduler should assume for typical memory
15896           references as seen by the application.  This number is highly
15897           dependent on the memory access patterns used by the application and
15898           the size of the external cache on the machine.
15899
15900           Valid options for time are
15901
15902           number
15903               A decimal number representing clock cycles.
15904
15905           L1
15906           L2
15907           L3
15908           main
15909               The compiler contains estimates of the number of clock cycles
15910               for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches
15911               (also called Dcache, Scache, and Bcache), as well as to main
15912               memory.  Note that L3 is only valid for EV5.
15913
15914   FR30 Options
15915       These options are defined specifically for the FR30 port.
15916
15917       -msmall-model
15918           Use the small address space model.  This can produce smaller code,
15919           but it does assume that all symbolic values and addresses fit into
15920           a 20-bit range.
15921
15922       -mno-lsim
15923           Assume that runtime support has been provided and so there is no
15924           need to include the simulator library (libsim.a) on the linker
15925           command line.
15926
15927   FT32 Options
15928       These options are defined specifically for the FT32 port.
15929
15930       -msim
15931           Specifies that the program will be run on the simulator.  This
15932           causes an alternate runtime startup and library to be linked.  You
15933           must not use this option when generating programs that will run on
15934           real hardware; you must provide your own runtime library for
15935           whatever I/O functions are needed.
15936
15937       -mlra
15938           Enable Local Register Allocation.  This is still experimental for
15939           FT32, so by default the compiler uses standard reload.
15940
15941       -mnodiv
15942           Do not use div and mod instructions.
15943
15944       -mft32b
15945           Enable use of the extended instructions of the FT32B processor.
15946
15947       -mcompress
15948           Compress all code using the Ft32B code compression scheme.
15949
15950       -mnopm
15951           Do not generate code that reads program memory.
15952
15953   FRV Options
15954       -mgpr-32
15955           Only use the first 32 general-purpose registers.
15956
15957       -mgpr-64
15958           Use all 64 general-purpose registers.
15959
15960       -mfpr-32
15961           Use only the first 32 floating-point registers.
15962
15963       -mfpr-64
15964           Use all 64 floating-point registers.
15965
15966       -mhard-float
15967           Use hardware instructions for floating-point operations.
15968
15969       -msoft-float
15970           Use library routines for floating-point operations.
15971
15972       -malloc-cc
15973           Dynamically allocate condition code registers.
15974
15975       -mfixed-cc
15976           Do not try to dynamically allocate condition code registers, only
15977           use "icc0" and "fcc0".
15978
15979       -mdword
15980           Change ABI to use double word insns.
15981
15982       -mno-dword
15983           Do not use double word instructions.
15984
15985       -mdouble
15986           Use floating-point double instructions.
15987
15988       -mno-double
15989           Do not use floating-point double instructions.
15990
15991       -mmedia
15992           Use media instructions.
15993
15994       -mno-media
15995           Do not use media instructions.
15996
15997       -mmuladd
15998           Use multiply and add/subtract instructions.
15999
16000       -mno-muladd
16001           Do not use multiply and add/subtract instructions.
16002
16003       -mfdpic
16004           Select the FDPIC ABI, which uses function descriptors to represent
16005           pointers to functions.  Without any PIC/PIE-related options, it
16006           implies -fPIE.  With -fpic or -fpie, it assumes GOT entries and
16007           small data are within a 12-bit range from the GOT base address;
16008           with -fPIC or -fPIE, GOT offsets are computed with 32 bits.  With a
16009           bfin-elf target, this option implies -msim.
16010
16011       -minline-plt
16012           Enable inlining of PLT entries in function calls to functions that
16013           are not known to bind locally.  It has no effect without -mfdpic.
16014           It's enabled by default if optimizing for speed and compiling for
16015           shared libraries (i.e., -fPIC or -fpic), or when an optimization
16016           option such as -O3 or above is present in the command line.
16017
16018       -mTLS
16019           Assume a large TLS segment when generating thread-local code.
16020
16021       -mtls
16022           Do not assume a large TLS segment when generating thread-local
16023           code.
16024
16025       -mgprel-ro
16026           Enable the use of "GPREL" relocations in the FDPIC ABI for data
16027           that is known to be in read-only sections.  It's enabled by
16028           default, except for -fpic or -fpie: even though it may help make
16029           the global offset table smaller, it trades 1 instruction for 4.
16030           With -fPIC or -fPIE, it trades 3 instructions for 4, one of which
16031           may be shared by multiple symbols, and it avoids the need for a GOT
16032           entry for the referenced symbol, so it's more likely to be a win.
16033           If it is not, -mno-gprel-ro can be used to disable it.
16034
16035       -multilib-library-pic
16036           Link with the (library, not FD) pic libraries.  It's implied by
16037           -mlibrary-pic, as well as by -fPIC and -fpic without -mfdpic.  You
16038           should never have to use it explicitly.
16039
16040       -mlinked-fp
16041           Follow the EABI requirement of always creating a frame pointer
16042           whenever a stack frame is allocated.  This option is enabled by
16043           default and can be disabled with -mno-linked-fp.
16044
16045       -mlong-calls
16046           Use indirect addressing to call functions outside the current
16047           compilation unit.  This allows the functions to be placed anywhere
16048           within the 32-bit address space.
16049
16050       -malign-labels
16051           Try to align labels to an 8-byte boundary by inserting NOPs into
16052           the previous packet.  This option only has an effect when VLIW
16053           packing is enabled.  It doesn't create new packets; it merely adds
16054           NOPs to existing ones.
16055
16056       -mlibrary-pic
16057           Generate position-independent EABI code.
16058
16059       -macc-4
16060           Use only the first four media accumulator registers.
16061
16062       -macc-8
16063           Use all eight media accumulator registers.
16064
16065       -mpack
16066           Pack VLIW instructions.
16067
16068       -mno-pack
16069           Do not pack VLIW instructions.
16070
16071       -mno-eflags
16072           Do not mark ABI switches in e_flags.
16073
16074       -mcond-move
16075           Enable the use of conditional-move instructions (default).
16076
16077           This switch is mainly for debugging the compiler and will likely be
16078           removed in a future version.
16079
16080       -mno-cond-move
16081           Disable the use of conditional-move instructions.
16082
16083           This switch is mainly for debugging the compiler and will likely be
16084           removed in a future version.
16085
16086       -mscc
16087           Enable the use of conditional set instructions (default).
16088
16089           This switch is mainly for debugging the compiler and will likely be
16090           removed in a future version.
16091
16092       -mno-scc
16093           Disable the use of conditional set instructions.
16094
16095           This switch is mainly for debugging the compiler and will likely be
16096           removed in a future version.
16097
16098       -mcond-exec
16099           Enable the use of conditional execution (default).
16100
16101           This switch is mainly for debugging the compiler and will likely be
16102           removed in a future version.
16103
16104       -mno-cond-exec
16105           Disable the use of conditional execution.
16106
16107           This switch is mainly for debugging the compiler and will likely be
16108           removed in a future version.
16109
16110       -mvliw-branch
16111           Run a pass to pack branches into VLIW instructions (default).
16112
16113           This switch is mainly for debugging the compiler and will likely be
16114           removed in a future version.
16115
16116       -mno-vliw-branch
16117           Do not run a pass to pack branches into VLIW instructions.
16118
16119           This switch is mainly for debugging the compiler and will likely be
16120           removed in a future version.
16121
16122       -mmulti-cond-exec
16123           Enable optimization of "&&" and "||" in conditional execution
16124           (default).
16125
16126           This switch is mainly for debugging the compiler and will likely be
16127           removed in a future version.
16128
16129       -mno-multi-cond-exec
16130           Disable optimization of "&&" and "||" in conditional execution.
16131
16132           This switch is mainly for debugging the compiler and will likely be
16133           removed in a future version.
16134
16135       -mnested-cond-exec
16136           Enable nested conditional execution optimizations (default).
16137
16138           This switch is mainly for debugging the compiler and will likely be
16139           removed in a future version.
16140
16141       -mno-nested-cond-exec
16142           Disable nested conditional execution optimizations.
16143
16144           This switch is mainly for debugging the compiler and will likely be
16145           removed in a future version.
16146
16147       -moptimize-membar
16148           This switch removes redundant "membar" instructions from the
16149           compiler-generated code.  It is enabled by default.
16150
16151       -mno-optimize-membar
16152           This switch disables the automatic removal of redundant "membar"
16153           instructions from the generated code.
16154
16155       -mtomcat-stats
16156           Cause gas to print out tomcat statistics.
16157
16158       -mcpu=cpu
16159           Select the processor type for which to generate code.  Possible
16160           values are frv, fr550, tomcat, fr500, fr450, fr405, fr400, fr300
16161           and simple.
16162
16163   GNU/Linux Options
16164       These -m options are defined for GNU/Linux targets:
16165
16166       -mglibc
16167           Use the GNU C library.  This is the default except on
16168           *-*-linux-*uclibc*, *-*-linux-*musl* and *-*-linux-*android*
16169           targets.
16170
16171       -muclibc
16172           Use uClibc C library.  This is the default on *-*-linux-*uclibc*
16173           targets.
16174
16175       -mmusl
16176           Use the musl C library.  This is the default on *-*-linux-*musl*
16177           targets.
16178
16179       -mbionic
16180           Use Bionic C library.  This is the default on *-*-linux-*android*
16181           targets.
16182
16183       -mandroid
16184           Compile code compatible with Android platform.  This is the default
16185           on *-*-linux-*android* targets.
16186
16187           When compiling, this option enables -mbionic, -fPIC,
16188           -fno-exceptions and -fno-rtti by default.  When linking, this
16189           option makes the GCC driver pass Android-specific options to the
16190           linker.  Finally, this option causes the preprocessor macro
16191           "__ANDROID__" to be defined.
16192
16193       -tno-android-cc
16194           Disable compilation effects of -mandroid, i.e., do not enable
16195           -mbionic, -fPIC, -fno-exceptions and -fno-rtti by default.
16196
16197       -tno-android-ld
16198           Disable linking effects of -mandroid, i.e., pass standard Linux
16199           linking options to the linker.
16200
16201   H8/300 Options
16202       These -m options are defined for the H8/300 implementations:
16203
16204       -mrelax
16205           Shorten some address references at link time, when possible; uses
16206           the linker option -relax.
16207
16208       -mh Generate code for the H8/300H.
16209
16210       -ms Generate code for the H8S.
16211
16212       -mn Generate code for the H8S and H8/300H in the normal mode.  This
16213           switch must be used either with -mh or -ms.
16214
16215       -ms2600
16216           Generate code for the H8S/2600.  This switch must be used with -ms.
16217
16218       -mexr
16219           Extended registers are stored on stack before execution of function
16220           with monitor attribute. Default option is -mexr.  This option is
16221           valid only for H8S targets.
16222
16223       -mno-exr
16224           Extended registers are not stored on stack before execution of
16225           function with monitor attribute. Default option is -mno-exr.  This
16226           option is valid only for H8S targets.
16227
16228       -mint32
16229           Make "int" data 32 bits by default.
16230
16231       -malign-300
16232           On the H8/300H and H8S, use the same alignment rules as for the
16233           H8/300.  The default for the H8/300H and H8S is to align longs and
16234           floats on 4-byte boundaries.  -malign-300 causes them to be aligned
16235           on 2-byte boundaries.  This option has no effect on the H8/300.
16236
16237   HPPA Options
16238       These -m options are defined for the HPPA family of computers:
16239
16240       -march=architecture-type
16241           Generate code for the specified architecture.  The choices for
16242           architecture-type are 1.0 for PA 1.0, 1.1 for PA 1.1, and 2.0 for
16243           PA 2.0 processors.  Refer to /usr/lib/sched.models on an HP-UX
16244           system to determine the proper architecture option for your
16245           machine.  Code compiled for lower numbered architectures runs on
16246           higher numbered architectures, but not the other way around.
16247
16248       -mpa-risc-1-0
16249       -mpa-risc-1-1
16250       -mpa-risc-2-0
16251           Synonyms for -march=1.0, -march=1.1, and -march=2.0 respectively.
16252
16253       -mcaller-copies
16254           The caller copies function arguments passed by hidden reference.
16255           This option should be used with care as it is not compatible with
16256           the default 32-bit runtime.  However, only aggregates larger than
16257           eight bytes are passed by hidden reference and the option provides
16258           better compatibility with OpenMP.
16259
16260       -mjump-in-delay
16261           This option is ignored and provided for compatibility purposes
16262           only.
16263
16264       -mdisable-fpregs
16265           Prevent floating-point registers from being used in any manner.
16266           This is necessary for compiling kernels that perform lazy context
16267           switching of floating-point registers.  If you use this option and
16268           attempt to perform floating-point operations, the compiler aborts.
16269
16270       -mdisable-indexing
16271           Prevent the compiler from using indexing address modes.  This
16272           avoids some rather obscure problems when compiling MIG generated
16273           code under MACH.
16274
16275       -mno-space-regs
16276           Generate code that assumes the target has no space registers.  This
16277           allows GCC to generate faster indirect calls and use unscaled index
16278           address modes.
16279
16280           Such code is suitable for level 0 PA systems and kernels.
16281
16282       -mfast-indirect-calls
16283           Generate code that assumes calls never cross space boundaries.
16284           This allows GCC to emit code that performs faster indirect calls.
16285
16286           This option does not work in the presence of shared libraries or
16287           nested functions.
16288
16289       -mfixed-range=register-range
16290           Generate code treating the given register range as fixed registers.
16291           A fixed register is one that the register allocator cannot use.
16292           This is useful when compiling kernel code.  A register range is
16293           specified as two registers separated by a dash.  Multiple register
16294           ranges can be specified separated by a comma.
16295
16296       -mlong-load-store
16297           Generate 3-instruction load and store sequences as sometimes
16298           required by the HP-UX 10 linker.  This is equivalent to the +k
16299           option to the HP compilers.
16300
16301       -mportable-runtime
16302           Use the portable calling conventions proposed by HP for ELF
16303           systems.
16304
16305       -mgas
16306           Enable the use of assembler directives only GAS understands.
16307
16308       -mschedule=cpu-type
16309           Schedule code according to the constraints for the machine type
16310           cpu-type.  The choices for cpu-type are 700 7100, 7100LC, 7200,
16311           7300 and 8000.  Refer to /usr/lib/sched.models on an HP-UX system
16312           to determine the proper scheduling option for your machine.  The
16313           default scheduling is 8000.
16314
16315       -mlinker-opt
16316           Enable the optimization pass in the HP-UX linker.  Note this makes
16317           symbolic debugging impossible.  It also triggers a bug in the HP-UX
16318           8 and HP-UX 9 linkers in which they give bogus error messages when
16319           linking some programs.
16320
16321       -msoft-float
16322           Generate output containing library calls for floating point.
16323           Warning: the requisite libraries are not available for all HPPA
16324           targets.  Normally the facilities of the machine's usual C compiler
16325           are used, but this cannot be done directly in cross-compilation.
16326           You must make your own arrangements to provide suitable library
16327           functions for cross-compilation.
16328
16329           -msoft-float changes the calling convention in the output file;
16330           therefore, it is only useful if you compile all of a program with
16331           this option.  In particular, you need to compile libgcc.a, the
16332           library that comes with GCC, with -msoft-float in order for this to
16333           work.
16334
16335       -msio
16336           Generate the predefine, "_SIO", for server IO.  The default is
16337           -mwsio.  This generates the predefines, "__hp9000s700",
16338           "__hp9000s700__" and "_WSIO", for workstation IO.  These options
16339           are available under HP-UX and HI-UX.
16340
16341       -mgnu-ld
16342           Use options specific to GNU ld.  This passes -shared to ld when
16343           building a shared library.  It is the default when GCC is
16344           configured, explicitly or implicitly, with the GNU linker.  This
16345           option does not affect which ld is called; it only changes what
16346           parameters are passed to that ld.  The ld that is called is
16347           determined by the --with-ld configure option, GCC's program search
16348           path, and finally by the user's PATH.  The linker used by GCC can
16349           be printed using which `gcc -print-prog-name=ld`.  This option is
16350           only available on the 64-bit HP-UX GCC, i.e. configured with
16351           hppa*64*-*-hpux*.
16352
16353       -mhp-ld
16354           Use options specific to HP ld.  This passes -b to ld when building
16355           a shared library and passes +Accept TypeMismatch to ld on all
16356           links.  It is the default when GCC is configured, explicitly or
16357           implicitly, with the HP linker.  This option does not affect which
16358           ld is called; it only changes what parameters are passed to that
16359           ld.  The ld that is called is determined by the --with-ld configure
16360           option, GCC's program search path, and finally by the user's PATH.
16361           The linker used by GCC can be printed using which `gcc
16362           -print-prog-name=ld`.  This option is only available on the 64-bit
16363           HP-UX GCC, i.e. configured with hppa*64*-*-hpux*.
16364
16365       -mlong-calls
16366           Generate code that uses long call sequences.  This ensures that a
16367           call is always able to reach linker generated stubs.  The default
16368           is to generate long calls only when the distance from the call site
16369           to the beginning of the function or translation unit, as the case
16370           may be, exceeds a predefined limit set by the branch type being
16371           used.  The limits for normal calls are 7,600,000 and 240,000 bytes,
16372           respectively for the PA 2.0 and PA 1.X architectures.  Sibcalls are
16373           always limited at 240,000 bytes.
16374
16375           Distances are measured from the beginning of functions when using
16376           the -ffunction-sections option, or when using the -mgas and
16377           -mno-portable-runtime options together under HP-UX with the SOM
16378           linker.
16379
16380           It is normally not desirable to use this option as it degrades
16381           performance.  However, it may be useful in large applications,
16382           particularly when partial linking is used to build the application.
16383
16384           The types of long calls used depends on the capabilities of the
16385           assembler and linker, and the type of code being generated.  The
16386           impact on systems that support long absolute calls, and long pic
16387           symbol-difference or pc-relative calls should be relatively small.
16388           However, an indirect call is used on 32-bit ELF systems in pic code
16389           and it is quite long.
16390
16391       -munix=unix-std
16392           Generate compiler predefines and select a startfile for the
16393           specified UNIX standard.  The choices for unix-std are 93, 95 and
16394           98.  93 is supported on all HP-UX versions.  95 is available on HP-
16395           UX 10.10 and later.  98 is available on HP-UX 11.11 and later.  The
16396           default values are 93 for HP-UX 10.00, 95 for HP-UX 10.10 though to
16397           11.00, and 98 for HP-UX 11.11 and later.
16398
16399           -munix=93 provides the same predefines as GCC 3.3 and 3.4.
16400           -munix=95 provides additional predefines for "XOPEN_UNIX" and
16401           "_XOPEN_SOURCE_EXTENDED", and the startfile unix95.o.  -munix=98
16402           provides additional predefines for "_XOPEN_UNIX",
16403           "_XOPEN_SOURCE_EXTENDED", "_INCLUDE__STDC_A1_SOURCE" and
16404           "_INCLUDE_XOPEN_SOURCE_500", and the startfile unix98.o.
16405
16406           It is important to note that this option changes the interfaces for
16407           various library routines.  It also affects the operational behavior
16408           of the C library.  Thus, extreme care is needed in using this
16409           option.
16410
16411           Library code that is intended to operate with more than one UNIX
16412           standard must test, set and restore the variable
16413           "__xpg4_extended_mask" as appropriate.  Most GNU software doesn't
16414           provide this capability.
16415
16416       -nolibdld
16417           Suppress the generation of link options to search libdld.sl when
16418           the -static option is specified on HP-UX 10 and later.
16419
16420       -static
16421           The HP-UX implementation of setlocale in libc has a dependency on
16422           libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
16423           when the -static option is specified, special link options are
16424           needed to resolve this dependency.
16425
16426           On HP-UX 10 and later, the GCC driver adds the necessary options to
16427           link with libdld.sl when the -static option is specified.  This
16428           causes the resulting binary to be dynamic.  On the 64-bit port, the
16429           linkers generate dynamic binaries by default in any case.  The
16430           -nolibdld option can be used to prevent the GCC driver from adding
16431           these link options.
16432
16433       -threads
16434           Add support for multithreading with the dce thread library under
16435           HP-UX.  This option sets flags for both the preprocessor and
16436           linker.
16437
16438   IA-64 Options
16439       These are the -m options defined for the Intel IA-64 architecture.
16440
16441       -mbig-endian
16442           Generate code for a big-endian target.  This is the default for HP-
16443           UX.
16444
16445       -mlittle-endian
16446           Generate code for a little-endian target.  This is the default for
16447           AIX5 and GNU/Linux.
16448
16449       -mgnu-as
16450       -mno-gnu-as
16451           Generate (or don't) code for the GNU assembler.  This is the
16452           default.
16453
16454       -mgnu-ld
16455       -mno-gnu-ld
16456           Generate (or don't) code for the GNU linker.  This is the default.
16457
16458       -mno-pic
16459           Generate code that does not use a global pointer register.  The
16460           result is not position independent code, and violates the IA-64
16461           ABI.
16462
16463       -mvolatile-asm-stop
16464       -mno-volatile-asm-stop
16465           Generate (or don't) a stop bit immediately before and after
16466           volatile asm statements.
16467
16468       -mregister-names
16469       -mno-register-names
16470           Generate (or don't) in, loc, and out register names for the stacked
16471           registers.  This may make assembler output more readable.
16472
16473       -mno-sdata
16474       -msdata
16475           Disable (or enable) optimizations that use the small data section.
16476           This may be useful for working around optimizer bugs.
16477
16478       -mconstant-gp
16479           Generate code that uses a single constant global pointer value.
16480           This is useful when compiling kernel code.
16481
16482       -mauto-pic
16483           Generate code that is self-relocatable.  This implies
16484           -mconstant-gp.  This is useful when compiling firmware code.
16485
16486       -minline-float-divide-min-latency
16487           Generate code for inline divides of floating-point values using the
16488           minimum latency algorithm.
16489
16490       -minline-float-divide-max-throughput
16491           Generate code for inline divides of floating-point values using the
16492           maximum throughput algorithm.
16493
16494       -mno-inline-float-divide
16495           Do not generate inline code for divides of floating-point values.
16496
16497       -minline-int-divide-min-latency
16498           Generate code for inline divides of integer values using the
16499           minimum latency algorithm.
16500
16501       -minline-int-divide-max-throughput
16502           Generate code for inline divides of integer values using the
16503           maximum throughput algorithm.
16504
16505       -mno-inline-int-divide
16506           Do not generate inline code for divides of integer values.
16507
16508       -minline-sqrt-min-latency
16509           Generate code for inline square roots using the minimum latency
16510           algorithm.
16511
16512       -minline-sqrt-max-throughput
16513           Generate code for inline square roots using the maximum throughput
16514           algorithm.
16515
16516       -mno-inline-sqrt
16517           Do not generate inline code for "sqrt".
16518
16519       -mfused-madd
16520       -mno-fused-madd
16521           Do (don't) generate code that uses the fused multiply/add or
16522           multiply/subtract instructions.  The default is to use these
16523           instructions.
16524
16525       -mno-dwarf2-asm
16526       -mdwarf2-asm
16527           Don't (or do) generate assembler code for the DWARF line number
16528           debugging info.  This may be useful when not using the GNU
16529           assembler.
16530
16531       -mearly-stop-bits
16532       -mno-early-stop-bits
16533           Allow stop bits to be placed earlier than immediately preceding the
16534           instruction that triggered the stop bit.  This can improve
16535           instruction scheduling, but does not always do so.
16536
16537       -mfixed-range=register-range
16538           Generate code treating the given register range as fixed registers.
16539           A fixed register is one that the register allocator cannot use.
16540           This is useful when compiling kernel code.  A register range is
16541           specified as two registers separated by a dash.  Multiple register
16542           ranges can be specified separated by a comma.
16543
16544       -mtls-size=tls-size
16545           Specify bit size of immediate TLS offsets.  Valid values are 14,
16546           22, and 64.
16547
16548       -mtune=cpu-type
16549           Tune the instruction scheduling for a particular CPU, Valid values
16550           are itanium, itanium1, merced, itanium2, and mckinley.
16551
16552       -milp32
16553       -mlp64
16554           Generate code for a 32-bit or 64-bit environment.  The 32-bit
16555           environment sets int, long and pointer to 32 bits.  The 64-bit
16556           environment sets int to 32 bits and long and pointer to 64 bits.
16557           These are HP-UX specific flags.
16558
16559       -mno-sched-br-data-spec
16560       -msched-br-data-spec
16561           (Dis/En)able data speculative scheduling before reload.  This
16562           results in generation of "ld.a" instructions and the corresponding
16563           check instructions ("ld.c" / "chk.a").  The default setting is
16564           disabled.
16565
16566       -msched-ar-data-spec
16567       -mno-sched-ar-data-spec
16568           (En/Dis)able data speculative scheduling after reload.  This
16569           results in generation of "ld.a" instructions and the corresponding
16570           check instructions ("ld.c" / "chk.a").  The default setting is
16571           enabled.
16572
16573       -mno-sched-control-spec
16574       -msched-control-spec
16575           (Dis/En)able control speculative scheduling.  This feature is
16576           available only during region scheduling (i.e. before reload).  This
16577           results in generation of the "ld.s" instructions and the
16578           corresponding check instructions "chk.s".  The default setting is
16579           disabled.
16580
16581       -msched-br-in-data-spec
16582       -mno-sched-br-in-data-spec
16583           (En/Dis)able speculative scheduling of the instructions that are
16584           dependent on the data speculative loads before reload.  This is
16585           effective only with -msched-br-data-spec enabled.  The default
16586           setting is enabled.
16587
16588       -msched-ar-in-data-spec
16589       -mno-sched-ar-in-data-spec
16590           (En/Dis)able speculative scheduling of the instructions that are
16591           dependent on the data speculative loads after reload.  This is
16592           effective only with -msched-ar-data-spec enabled.  The default
16593           setting is enabled.
16594
16595       -msched-in-control-spec
16596       -mno-sched-in-control-spec
16597           (En/Dis)able speculative scheduling of the instructions that are
16598           dependent on the control speculative loads.  This is effective only
16599           with -msched-control-spec enabled.  The default setting is enabled.
16600
16601       -mno-sched-prefer-non-data-spec-insns
16602       -msched-prefer-non-data-spec-insns
16603           If enabled, data-speculative instructions are chosen for schedule
16604           only if there are no other choices at the moment.  This makes the
16605           use of the data speculation much more conservative.  The default
16606           setting is disabled.
16607
16608       -mno-sched-prefer-non-control-spec-insns
16609       -msched-prefer-non-control-spec-insns
16610           If enabled, control-speculative instructions are chosen for
16611           schedule only if there are no other choices at the moment.  This
16612           makes the use of the control speculation much more conservative.
16613           The default setting is disabled.
16614
16615       -mno-sched-count-spec-in-critical-path
16616       -msched-count-spec-in-critical-path
16617           If enabled, speculative dependencies are considered during
16618           computation of the instructions priorities.  This makes the use of
16619           the speculation a bit more conservative.  The default setting is
16620           disabled.
16621
16622       -msched-spec-ldc
16623           Use a simple data speculation check.  This option is on by default.
16624
16625       -msched-control-spec-ldc
16626           Use a simple check for control speculation.  This option is on by
16627           default.
16628
16629       -msched-stop-bits-after-every-cycle
16630           Place a stop bit after every cycle when scheduling.  This option is
16631           on by default.
16632
16633       -msched-fp-mem-deps-zero-cost
16634           Assume that floating-point stores and loads are not likely to cause
16635           a conflict when placed into the same instruction group.  This
16636           option is disabled by default.
16637
16638       -msel-sched-dont-check-control-spec
16639           Generate checks for control speculation in selective scheduling.
16640           This flag is disabled by default.
16641
16642       -msched-max-memory-insns=max-insns
16643           Limit on the number of memory insns per instruction group, giving
16644           lower priority to subsequent memory insns attempting to schedule in
16645           the same instruction group. Frequently useful to prevent cache bank
16646           conflicts.  The default value is 1.
16647
16648       -msched-max-memory-insns-hard-limit
16649           Makes the limit specified by msched-max-memory-insns a hard limit,
16650           disallowing more than that number in an instruction group.
16651           Otherwise, the limit is "soft", meaning that non-memory operations
16652           are preferred when the limit is reached, but memory operations may
16653           still be scheduled.
16654
16655   LM32 Options
16656       These -m options are defined for the LatticeMico32 architecture:
16657
16658       -mbarrel-shift-enabled
16659           Enable barrel-shift instructions.
16660
16661       -mdivide-enabled
16662           Enable divide and modulus instructions.
16663
16664       -mmultiply-enabled
16665           Enable multiply instructions.
16666
16667       -msign-extend-enabled
16668           Enable sign extend instructions.
16669
16670       -muser-enabled
16671           Enable user-defined instructions.
16672
16673   M32C Options
16674       -mcpu=name
16675           Select the CPU for which code is generated.  name may be one of r8c
16676           for the R8C/Tiny series, m16c for the M16C (up to /60) series,
16677           m32cm for the M16C/80 series, or m32c for the M32C/80 series.
16678
16679       -msim
16680           Specifies that the program will be run on the simulator.  This
16681           causes an alternate runtime library to be linked in which supports,
16682           for example, file I/O.  You must not use this option when
16683           generating programs that will run on real hardware; you must
16684           provide your own runtime library for whatever I/O functions are
16685           needed.
16686
16687       -memregs=number
16688           Specifies the number of memory-based pseudo-registers GCC uses
16689           during code generation.  These pseudo-registers are used like real
16690           registers, so there is a tradeoff between GCC's ability to fit the
16691           code into available registers, and the performance penalty of using
16692           memory instead of registers.  Note that all modules in a program
16693           must be compiled with the same value for this option.  Because of
16694           that, you must not use this option with GCC's default runtime
16695           libraries.
16696
16697   M32R/D Options
16698       These -m options are defined for Renesas M32R/D architectures:
16699
16700       -m32r2
16701           Generate code for the M32R/2.
16702
16703       -m32rx
16704           Generate code for the M32R/X.
16705
16706       -m32r
16707           Generate code for the M32R.  This is the default.
16708
16709       -mmodel=small
16710           Assume all objects live in the lower 16MB of memory (so that their
16711           addresses can be loaded with the "ld24" instruction), and assume
16712           all subroutines are reachable with the "bl" instruction.  This is
16713           the default.
16714
16715           The addressability of a particular object can be set with the
16716           "model" attribute.
16717
16718       -mmodel=medium
16719           Assume objects may be anywhere in the 32-bit address space (the
16720           compiler generates "seth/add3" instructions to load their
16721           addresses), and assume all subroutines are reachable with the "bl"
16722           instruction.
16723
16724       -mmodel=large
16725           Assume objects may be anywhere in the 32-bit address space (the
16726           compiler generates "seth/add3" instructions to load their
16727           addresses), and assume subroutines may not be reachable with the
16728           "bl" instruction (the compiler generates the much slower
16729           "seth/add3/jl" instruction sequence).
16730
16731       -msdata=none
16732           Disable use of the small data area.  Variables are put into one of
16733           ".data", ".bss", or ".rodata" (unless the "section" attribute has
16734           been specified).  This is the default.
16735
16736           The small data area consists of sections ".sdata" and ".sbss".
16737           Objects may be explicitly put in the small data area with the
16738           "section" attribute using one of these sections.
16739
16740       -msdata=sdata
16741           Put small global and static data in the small data area, but do not
16742           generate special code to reference them.
16743
16744       -msdata=use
16745           Put small global and static data in the small data area, and
16746           generate special instructions to reference them.
16747
16748       -G num
16749           Put global and static objects less than or equal to num bytes into
16750           the small data or BSS sections instead of the normal data or BSS
16751           sections.  The default value of num is 8.  The -msdata option must
16752           be set to one of sdata or use for this option to have any effect.
16753
16754           All modules should be compiled with the same -G num value.
16755           Compiling with different values of num may or may not work; if it
16756           doesn't the linker gives an error message---incorrect code is not
16757           generated.
16758
16759       -mdebug
16760           Makes the M32R-specific code in the compiler display some
16761           statistics that might help in debugging programs.
16762
16763       -malign-loops
16764           Align all loops to a 32-byte boundary.
16765
16766       -mno-align-loops
16767           Do not enforce a 32-byte alignment for loops.  This is the default.
16768
16769       -missue-rate=number
16770           Issue number instructions per cycle.  number can only be 1 or 2.
16771
16772       -mbranch-cost=number
16773           number can only be 1 or 2.  If it is 1 then branches are preferred
16774           over conditional code, if it is 2, then the opposite applies.
16775
16776       -mflush-trap=number
16777           Specifies the trap number to use to flush the cache.  The default
16778           is 12.  Valid numbers are between 0 and 15 inclusive.
16779
16780       -mno-flush-trap
16781           Specifies that the cache cannot be flushed by using a trap.
16782
16783       -mflush-func=name
16784           Specifies the name of the operating system function to call to
16785           flush the cache.  The default is _flush_cache, but a function call
16786           is only used if a trap is not available.
16787
16788       -mno-flush-func
16789           Indicates that there is no OS function for flushing the cache.
16790
16791   M680x0 Options
16792       These are the -m options defined for M680x0 and ColdFire processors.
16793       The default settings depend on which architecture was selected when the
16794       compiler was configured; the defaults for the most common choices are
16795       given below.
16796
16797       -march=arch
16798           Generate code for a specific M680x0 or ColdFire instruction set
16799           architecture.  Permissible values of arch for M680x0 architectures
16800           are: 68000, 68010, 68020, 68030, 68040, 68060 and cpu32.  ColdFire
16801           architectures are selected according to Freescale's ISA
16802           classification and the permissible values are: isaa, isaaplus, isab
16803           and isac.
16804
16805           GCC defines a macro "__mcfarch__" whenever it is generating code
16806           for a ColdFire target.  The arch in this macro is one of the -march
16807           arguments given above.
16808
16809           When used together, -march and -mtune select code that runs on a
16810           family of similar processors but that is optimized for a particular
16811           microarchitecture.
16812
16813       -mcpu=cpu
16814           Generate code for a specific M680x0 or ColdFire processor.  The
16815           M680x0 cpus are: 68000, 68010, 68020, 68030, 68040, 68060, 68302,
16816           68332 and cpu32.  The ColdFire cpus are given by the table below,
16817           which also classifies the CPUs into families:
16818
16819           Family : -mcpu arguments
16820           51 : 51 51ac 51ag 51cn 51em 51je 51jf 51jg 51jm 51mm 51qe 51qm
16821           5206 : 5202 5204 5206
16822           5206e : 5206e
16823           5208 : 5207 5208
16824           5211a : 5210a 5211a
16825           5213 : 5211 5212 5213
16826           5216 : 5214 5216
16827           52235 : 52230 52231 52232 52233 52234 52235
16828           5225 : 5224 5225
16829           52259 : 52252 52254 52255 52256 52258 52259
16830           5235 : 5232 5233 5234 5235 523x
16831           5249 : 5249
16832           5250 : 5250
16833           5271 : 5270 5271
16834           5272 : 5272
16835           5275 : 5274 5275
16836           5282 : 5280 5281 5282 528x
16837           53017 : 53011 53012 53013 53014 53015 53016 53017
16838           5307 : 5307
16839           5329 : 5327 5328 5329 532x
16840           5373 : 5372 5373 537x
16841           5407 : 5407
16842           5475 : 5470 5471 5472 5473 5474 5475 547x 5480 5481 5482 5483 5484
16843           5485
16844
16845           -mcpu=cpu overrides -march=arch if arch is compatible with cpu.
16846           Other combinations of -mcpu and -march are rejected.
16847
16848           GCC defines the macro "__mcf_cpu_cpu" when ColdFire target cpu is
16849           selected.  It also defines "__mcf_family_family", where the value
16850           of family is given by the table above.
16851
16852       -mtune=tune
16853           Tune the code for a particular microarchitecture within the
16854           constraints set by -march and -mcpu.  The M680x0 microarchitectures
16855           are: 68000, 68010, 68020, 68030, 68040, 68060 and cpu32.  The
16856           ColdFire microarchitectures are: cfv1, cfv2, cfv3, cfv4 and cfv4e.
16857
16858           You can also use -mtune=68020-40 for code that needs to run
16859           relatively well on 68020, 68030 and 68040 targets.  -mtune=68020-60
16860           is similar but includes 68060 targets as well.  These two options
16861           select the same tuning decisions as -m68020-40 and -m68020-60
16862           respectively.
16863
16864           GCC defines the macros "__mcarch" and "__mcarch__" when tuning for
16865           680x0 architecture arch.  It also defines "mcarch" unless either
16866           -ansi or a non-GNU -std option is used.  If GCC is tuning for a
16867           range of architectures, as selected by -mtune=68020-40 or
16868           -mtune=68020-60, it defines the macros for every architecture in
16869           the range.
16870
16871           GCC also defines the macro "__muarch__" when tuning for ColdFire
16872           microarchitecture uarch, where uarch is one of the arguments given
16873           above.
16874
16875       -m68000
16876       -mc68000
16877           Generate output for a 68000.  This is the default when the compiler
16878           is configured for 68000-based systems.  It is equivalent to
16879           -march=68000.
16880
16881           Use this option for microcontrollers with a 68000 or EC000 core,
16882           including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
16883
16884       -m68010
16885           Generate output for a 68010.  This is the default when the compiler
16886           is configured for 68010-based systems.  It is equivalent to
16887           -march=68010.
16888
16889       -m68020
16890       -mc68020
16891           Generate output for a 68020.  This is the default when the compiler
16892           is configured for 68020-based systems.  It is equivalent to
16893           -march=68020.
16894
16895       -m68030
16896           Generate output for a 68030.  This is the default when the compiler
16897           is configured for 68030-based systems.  It is equivalent to
16898           -march=68030.
16899
16900       -m68040
16901           Generate output for a 68040.  This is the default when the compiler
16902           is configured for 68040-based systems.  It is equivalent to
16903           -march=68040.
16904
16905           This option inhibits the use of 68881/68882 instructions that have
16906           to be emulated by software on the 68040.  Use this option if your
16907           68040 does not have code to emulate those instructions.
16908
16909       -m68060
16910           Generate output for a 68060.  This is the default when the compiler
16911           is configured for 68060-based systems.  It is equivalent to
16912           -march=68060.
16913
16914           This option inhibits the use of 68020 and 68881/68882 instructions
16915           that have to be emulated by software on the 68060.  Use this option
16916           if your 68060 does not have code to emulate those instructions.
16917
16918       -mcpu32
16919           Generate output for a CPU32.  This is the default when the compiler
16920           is configured for CPU32-based systems.  It is equivalent to
16921           -march=cpu32.
16922
16923           Use this option for microcontrollers with a CPU32 or CPU32+ core,
16924           including the 68330, 68331, 68332, 68333, 68334, 68336, 68340,
16925           68341, 68349 and 68360.
16926
16927       -m5200
16928           Generate output for a 520X ColdFire CPU.  This is the default when
16929           the compiler is configured for 520X-based systems.  It is
16930           equivalent to -mcpu=5206, and is now deprecated in favor of that
16931           option.
16932
16933           Use this option for microcontroller with a 5200 core, including the
16934           MCF5202, MCF5203, MCF5204 and MCF5206.
16935
16936       -m5206e
16937           Generate output for a 5206e ColdFire CPU.  The option is now
16938           deprecated in favor of the equivalent -mcpu=5206e.
16939
16940       -m528x
16941           Generate output for a member of the ColdFire 528X family.  The
16942           option is now deprecated in favor of the equivalent -mcpu=528x.
16943
16944       -m5307
16945           Generate output for a ColdFire 5307 CPU.  The option is now
16946           deprecated in favor of the equivalent -mcpu=5307.
16947
16948       -m5407
16949           Generate output for a ColdFire 5407 CPU.  The option is now
16950           deprecated in favor of the equivalent -mcpu=5407.
16951
16952       -mcfv4e
16953           Generate output for a ColdFire V4e family CPU (e.g. 547x/548x).
16954           This includes use of hardware floating-point instructions.  The
16955           option is equivalent to -mcpu=547x, and is now deprecated in favor
16956           of that option.
16957
16958       -m68020-40
16959           Generate output for a 68040, without using any of the new
16960           instructions.  This results in code that can run relatively
16961           efficiently on either a 68020/68881 or a 68030 or a 68040.  The
16962           generated code does use the 68881 instructions that are emulated on
16963           the 68040.
16964
16965           The option is equivalent to -march=68020 -mtune=68020-40.
16966
16967       -m68020-60
16968           Generate output for a 68060, without using any of the new
16969           instructions.  This results in code that can run relatively
16970           efficiently on either a 68020/68881 or a 68030 or a 68040.  The
16971           generated code does use the 68881 instructions that are emulated on
16972           the 68060.
16973
16974           The option is equivalent to -march=68020 -mtune=68020-60.
16975
16976       -mhard-float
16977       -m68881
16978           Generate floating-point instructions.  This is the default for
16979           68020 and above, and for ColdFire devices that have an FPU.  It
16980           defines the macro "__HAVE_68881__" on M680x0 targets and
16981           "__mcffpu__" on ColdFire targets.
16982
16983       -msoft-float
16984           Do not generate floating-point instructions; use library calls
16985           instead.  This is the default for 68000, 68010, and 68832 targets.
16986           It is also the default for ColdFire devices that have no FPU.
16987
16988       -mdiv
16989       -mno-div
16990           Generate (do not generate) ColdFire hardware divide and remainder
16991           instructions.  If -march is used without -mcpu, the default is "on"
16992           for ColdFire architectures and "off" for M680x0 architectures.
16993           Otherwise, the default is taken from the target CPU (either the
16994           default CPU, or the one specified by -mcpu).  For example, the
16995           default is "off" for -mcpu=5206 and "on" for -mcpu=5206e.
16996
16997           GCC defines the macro "__mcfhwdiv__" when this option is enabled.
16998
16999       -mshort
17000           Consider type "int" to be 16 bits wide, like "short int".
17001           Additionally, parameters passed on the stack are also aligned to a
17002           16-bit boundary even on targets whose API mandates promotion to
17003           32-bit.
17004
17005       -mno-short
17006           Do not consider type "int" to be 16 bits wide.  This is the
17007           default.
17008
17009       -mnobitfield
17010       -mno-bitfield
17011           Do not use the bit-field instructions.  The -m68000, -mcpu32 and
17012           -m5200 options imply -mnobitfield.
17013
17014       -mbitfield
17015           Do use the bit-field instructions.  The -m68020 option implies
17016           -mbitfield.  This is the default if you use a configuration
17017           designed for a 68020.
17018
17019       -mrtd
17020           Use a different function-calling convention, in which functions
17021           that take a fixed number of arguments return with the "rtd"
17022           instruction, which pops their arguments while returning.  This
17023           saves one instruction in the caller since there is no need to pop
17024           the arguments there.
17025
17026           This calling convention is incompatible with the one normally used
17027           on Unix, so you cannot use it if you need to call libraries
17028           compiled with the Unix compiler.
17029
17030           Also, you must provide function prototypes for all functions that
17031           take variable numbers of arguments (including "printf"); otherwise
17032           incorrect code is generated for calls to those functions.
17033
17034           In addition, seriously incorrect code results if you call a
17035           function with too many arguments.  (Normally, extra arguments are
17036           harmlessly ignored.)
17037
17038           The "rtd" instruction is supported by the 68010, 68020, 68030,
17039           68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
17040
17041       -mno-rtd
17042           Do not use the calling conventions selected by -mrtd.  This is the
17043           default.
17044
17045       -malign-int
17046       -mno-align-int
17047           Control whether GCC aligns "int", "long", "long long", "float",
17048           "double", and "long double" variables on a 32-bit boundary
17049           (-malign-int) or a 16-bit boundary (-mno-align-int).  Aligning
17050           variables on 32-bit boundaries produces code that runs somewhat
17051           faster on processors with 32-bit busses at the expense of more
17052           memory.
17053
17054           Warning: if you use the -malign-int switch, GCC aligns structures
17055           containing the above types differently than most published
17056           application binary interface specifications for the m68k.
17057
17058       -mpcrel
17059           Use the pc-relative addressing mode of the 68000 directly, instead
17060           of using a global offset table.  At present, this option implies
17061           -fpic, allowing at most a 16-bit offset for pc-relative addressing.
17062           -fPIC is not presently supported with -mpcrel, though this could be
17063           supported for 68020 and higher processors.
17064
17065       -mno-strict-align
17066       -mstrict-align
17067           Do not (do) assume that unaligned memory references are handled by
17068           the system.
17069
17070       -msep-data
17071           Generate code that allows the data segment to be located in a
17072           different area of memory from the text segment.  This allows for
17073           execute-in-place in an environment without virtual memory
17074           management.  This option implies -fPIC.
17075
17076       -mno-sep-data
17077           Generate code that assumes that the data segment follows the text
17078           segment.  This is the default.
17079
17080       -mid-shared-library
17081           Generate code that supports shared libraries via the library ID
17082           method.  This allows for execute-in-place and shared libraries in
17083           an environment without virtual memory management.  This option
17084           implies -fPIC.
17085
17086       -mno-id-shared-library
17087           Generate code that doesn't assume ID-based shared libraries are
17088           being used.  This is the default.
17089
17090       -mshared-library-id=n
17091           Specifies the identification number of the ID-based shared library
17092           being compiled.  Specifying a value of 0 generates more compact
17093           code; specifying other values forces the allocation of that number
17094           to the current library, but is no more space- or time-efficient
17095           than omitting this option.
17096
17097       -mxgot
17098       -mno-xgot
17099           When generating position-independent code for ColdFire, generate
17100           code that works if the GOT has more than 8192 entries.  This code
17101           is larger and slower than code generated without this option.  On
17102           M680x0 processors, this option is not needed; -fPIC suffices.
17103
17104           GCC normally uses a single instruction to load values from the GOT.
17105           While this is relatively efficient, it only works if the GOT is
17106           smaller than about 64k.  Anything larger causes the linker to
17107           report an error such as:
17108
17109                   relocation truncated to fit: R_68K_GOT16O foobar
17110
17111           If this happens, you should recompile your code with -mxgot.  It
17112           should then work with very large GOTs.  However, code generated
17113           with -mxgot is less efficient, since it takes 4 instructions to
17114           fetch the value of a global symbol.
17115
17116           Note that some linkers, including newer versions of the GNU linker,
17117           can create multiple GOTs and sort GOT entries.  If you have such a
17118           linker, you should only need to use -mxgot when compiling a single
17119           object file that accesses more than 8192 GOT entries.  Very few do.
17120
17121           These options have no effect unless GCC is generating position-
17122           independent code.
17123
17124       -mlong-jump-table-offsets
17125           Use 32-bit offsets in "switch" tables.  The default is to use
17126           16-bit offsets.
17127
17128   MCore Options
17129       These are the -m options defined for the Motorola M*Core processors.
17130
17131       -mhardlit
17132       -mno-hardlit
17133           Inline constants into the code stream if it can be done in two
17134           instructions or less.
17135
17136       -mdiv
17137       -mno-div
17138           Use the divide instruction.  (Enabled by default).
17139
17140       -mrelax-immediate
17141       -mno-relax-immediate
17142           Allow arbitrary-sized immediates in bit operations.
17143
17144       -mwide-bitfields
17145       -mno-wide-bitfields
17146           Always treat bit-fields as "int"-sized.
17147
17148       -m4byte-functions
17149       -mno-4byte-functions
17150           Force all functions to be aligned to a 4-byte boundary.
17151
17152       -mcallgraph-data
17153       -mno-callgraph-data
17154           Emit callgraph information.
17155
17156       -mslow-bytes
17157       -mno-slow-bytes
17158           Prefer word access when reading byte quantities.
17159
17160       -mlittle-endian
17161       -mbig-endian
17162           Generate code for a little-endian target.
17163
17164       -m210
17165       -m340
17166           Generate code for the 210 processor.
17167
17168       -mno-lsim
17169           Assume that runtime support has been provided and so omit the
17170           simulator library (libsim.a) from the linker command line.
17171
17172       -mstack-increment=size
17173           Set the maximum amount for a single stack increment operation.
17174           Large values can increase the speed of programs that contain
17175           functions that need a large amount of stack space, but they can
17176           also trigger a segmentation fault if the stack is extended too
17177           much.  The default value is 0x1000.
17178
17179   MeP Options
17180       -mabsdiff
17181           Enables the "abs" instruction, which is the absolute difference
17182           between two registers.
17183
17184       -mall-opts
17185           Enables all the optional instructions---average, multiply, divide,
17186           bit operations, leading zero, absolute difference, min/max, clip,
17187           and saturation.
17188
17189       -maverage
17190           Enables the "ave" instruction, which computes the average of two
17191           registers.
17192
17193       -mbased=n
17194           Variables of size n bytes or smaller are placed in the ".based"
17195           section by default.  Based variables use the $tp register as a base
17196           register, and there is a 128-byte limit to the ".based" section.
17197
17198       -mbitops
17199           Enables the bit operation instructions---bit test ("btstm"), set
17200           ("bsetm"), clear ("bclrm"), invert ("bnotm"), and test-and-set
17201           ("tas").
17202
17203       -mc=name
17204           Selects which section constant data is placed in.  name may be
17205           tiny, near, or far.
17206
17207       -mclip
17208           Enables the "clip" instruction.  Note that -mclip is not useful
17209           unless you also provide -mminmax.
17210
17211       -mconfig=name
17212           Selects one of the built-in core configurations.  Each MeP chip has
17213           one or more modules in it; each module has a core CPU and a variety
17214           of coprocessors, optional instructions, and peripherals.  The
17215           "MeP-Integrator" tool, not part of GCC, provides these
17216           configurations through this option; using this option is the same
17217           as using all the corresponding command-line options.  The default
17218           configuration is default.
17219
17220       -mcop
17221           Enables the coprocessor instructions.  By default, this is a 32-bit
17222           coprocessor.  Note that the coprocessor is normally enabled via the
17223           -mconfig= option.
17224
17225       -mcop32
17226           Enables the 32-bit coprocessor's instructions.
17227
17228       -mcop64
17229           Enables the 64-bit coprocessor's instructions.
17230
17231       -mivc2
17232           Enables IVC2 scheduling.  IVC2 is a 64-bit VLIW coprocessor.
17233
17234       -mdc
17235           Causes constant variables to be placed in the ".near" section.
17236
17237       -mdiv
17238           Enables the "div" and "divu" instructions.
17239
17240       -meb
17241           Generate big-endian code.
17242
17243       -mel
17244           Generate little-endian code.
17245
17246       -mio-volatile
17247           Tells the compiler that any variable marked with the "io" attribute
17248           is to be considered volatile.
17249
17250       -ml Causes variables to be assigned to the ".far" section by default.
17251
17252       -mleadz
17253           Enables the "leadz" (leading zero) instruction.
17254
17255       -mm Causes variables to be assigned to the ".near" section by default.
17256
17257       -mminmax
17258           Enables the "min" and "max" instructions.
17259
17260       -mmult
17261           Enables the multiplication and multiply-accumulate instructions.
17262
17263       -mno-opts
17264           Disables all the optional instructions enabled by -mall-opts.
17265
17266       -mrepeat
17267           Enables the "repeat" and "erepeat" instructions, used for low-
17268           overhead looping.
17269
17270       -ms Causes all variables to default to the ".tiny" section.  Note that
17271           there is a 65536-byte limit to this section.  Accesses to these
17272           variables use the %gp base register.
17273
17274       -msatur
17275           Enables the saturation instructions.  Note that the compiler does
17276           not currently generate these itself, but this option is included
17277           for compatibility with other tools, like "as".
17278
17279       -msdram
17280           Link the SDRAM-based runtime instead of the default ROM-based
17281           runtime.
17282
17283       -msim
17284           Link the simulator run-time libraries.
17285
17286       -msimnovec
17287           Link the simulator runtime libraries, excluding built-in support
17288           for reset and exception vectors and tables.
17289
17290       -mtf
17291           Causes all functions to default to the ".far" section.  Without
17292           this option, functions default to the ".near" section.
17293
17294       -mtiny=n
17295           Variables that are n bytes or smaller are allocated to the ".tiny"
17296           section.  These variables use the $gp base register.  The default
17297           for this option is 4, but note that there's a 65536-byte limit to
17298           the ".tiny" section.
17299
17300   MicroBlaze Options
17301       -msoft-float
17302           Use software emulation for floating point (default).
17303
17304       -mhard-float
17305           Use hardware floating-point instructions.
17306
17307       -mmemcpy
17308           Do not optimize block moves, use "memcpy".
17309
17310       -mno-clearbss
17311           This option is deprecated.  Use -fno-zero-initialized-in-bss
17312           instead.
17313
17314       -mcpu=cpu-type
17315           Use features of, and schedule code for, the given CPU.  Supported
17316           values are in the format vX.YY.Z, where X is a major version, YY is
17317           the minor version, and Z is compatibility code.  Example values are
17318           v3.00.a, v4.00.b, v5.00.a, v5.00.b, v6.00.a.
17319
17320       -mxl-soft-mul
17321           Use software multiply emulation (default).
17322
17323       -mxl-soft-div
17324           Use software emulation for divides (default).
17325
17326       -mxl-barrel-shift
17327           Use the hardware barrel shifter.
17328
17329       -mxl-pattern-compare
17330           Use pattern compare instructions.
17331
17332       -msmall-divides
17333           Use table lookup optimization for small signed integer divisions.
17334
17335       -mxl-stack-check
17336           This option is deprecated.  Use -fstack-check instead.
17337
17338       -mxl-gp-opt
17339           Use GP-relative ".sdata"/".sbss" sections.
17340
17341       -mxl-multiply-high
17342           Use multiply high instructions for high part of 32x32 multiply.
17343
17344       -mxl-float-convert
17345           Use hardware floating-point conversion instructions.
17346
17347       -mxl-float-sqrt
17348           Use hardware floating-point square root instruction.
17349
17350       -mbig-endian
17351           Generate code for a big-endian target.
17352
17353       -mlittle-endian
17354           Generate code for a little-endian target.
17355
17356       -mxl-reorder
17357           Use reorder instructions (swap and byte reversed load/store).
17358
17359       -mxl-mode-app-model
17360           Select application model app-model.  Valid models are
17361
17362           executable
17363               normal executable (default), uses startup code crt0.o.
17364
17365           xmdstub
17366               for use with Xilinx Microprocessor Debugger (XMD) based
17367               software intrusive debug agent called xmdstub. This uses
17368               startup file crt1.o and sets the start address of the program
17369               to 0x800.
17370
17371           bootstrap
17372               for applications that are loaded using a bootloader.  This
17373               model uses startup file crt2.o which does not contain a
17374               processor reset vector handler. This is suitable for
17375               transferring control on a processor reset to the bootloader
17376               rather than the application.
17377
17378           novectors
17379               for applications that do not require any of the MicroBlaze
17380               vectors. This option may be useful for applications running
17381               within a monitoring application. This model uses crt3.o as a
17382               startup file.
17383
17384           Option -xl-mode-app-model is a deprecated alias for -mxl-mode-app-
17385           model.
17386
17387   MIPS Options
17388       -EB Generate big-endian code.
17389
17390       -EL Generate little-endian code.  This is the default for mips*el-*-*
17391           configurations.
17392
17393       -march=arch
17394           Generate code that runs on arch, which can be the name of a generic
17395           MIPS ISA, or the name of a particular processor.  The ISA names
17396           are: mips1, mips2, mips3, mips4, mips32, mips32r2, mips32r3,
17397           mips32r5, mips32r6, mips64, mips64r2, mips64r3, mips64r5 and
17398           mips64r6.  The processor names are: 4kc, 4km, 4kp, 4ksc, 4kec,
17399           4kem, 4kep, 4ksd, 5kc, 5kf, 20kc, 24kc, 24kf2_1, 24kf1_1, 24kec,
17400           24kef2_1, 24kef1_1, 34kc, 34kf2_1, 34kf1_1, 34kn, 74kc, 74kf2_1,
17401           74kf1_1, 74kf3_2, 1004kc, 1004kf2_1, 1004kf1_1, i6400, interaptiv,
17402           loongson2e, loongson2f, loongson3a, m4k, m14k, m14kc, m14ke,
17403           m14kec, m5100, m5101, octeon, octeon+, octeon2, octeon3, orion,
17404           p5600, r2000, r3000, r3900, r4000, r4400, r4600, r4650, r4700,
17405           r6000, r8000, rm7000, rm9000, r10000, r12000, r14000, r16000, sb1,
17406           sr71000, vr4100, vr4111, vr4120, vr4130, vr4300, vr5000, vr5400,
17407           vr5500, xlr and xlp.  The special value from-abi selects the most
17408           compatible architecture for the selected ABI (that is, mips1 for
17409           32-bit ABIs and mips3 for 64-bit ABIs).
17410
17411           The native Linux/GNU toolchain also supports the value native,
17412           which selects the best architecture option for the host processor.
17413           -march=native has no effect if GCC does not recognize the
17414           processor.
17415
17416           In processor names, a final 000 can be abbreviated as k (for
17417           example, -march=r2k).  Prefixes are optional, and vr may be written
17418           r.
17419
17420           Names of the form nf2_1 refer to processors with FPUs clocked at
17421           half the rate of the core, names of the form nf1_1 refer to
17422           processors with FPUs clocked at the same rate as the core, and
17423           names of the form nf3_2 refer to processors with FPUs clocked a
17424           ratio of 3:2 with respect to the core.  For compatibility reasons,
17425           nf is accepted as a synonym for nf2_1 while nx and bfx are accepted
17426           as synonyms for nf1_1.
17427
17428           GCC defines two macros based on the value of this option.  The
17429           first is "_MIPS_ARCH", which gives the name of target architecture,
17430           as a string.  The second has the form "_MIPS_ARCH_foo", where foo
17431           is the capitalized value of "_MIPS_ARCH".  For example,
17432           -march=r2000 sets "_MIPS_ARCH" to "r2000" and defines the macro
17433           "_MIPS_ARCH_R2000".
17434
17435           Note that the "_MIPS_ARCH" macro uses the processor names given
17436           above.  In other words, it has the full prefix and does not
17437           abbreviate 000 as k.  In the case of from-abi, the macro names the
17438           resolved architecture (either "mips1" or "mips3").  It names the
17439           default architecture when no -march option is given.
17440
17441       -mtune=arch
17442           Optimize for arch.  Among other things, this option controls the
17443           way instructions are scheduled, and the perceived cost of
17444           arithmetic operations.  The list of arch values is the same as for
17445           -march.
17446
17447           When this option is not used, GCC optimizes for the processor
17448           specified by -march.  By using -march and -mtune together, it is
17449           possible to generate code that runs on a family of processors, but
17450           optimize the code for one particular member of that family.
17451
17452           -mtune defines the macros "_MIPS_TUNE" and "_MIPS_TUNE_foo", which
17453           work in the same way as the -march ones described above.
17454
17455       -mips1
17456           Equivalent to -march=mips1.
17457
17458       -mips2
17459           Equivalent to -march=mips2.
17460
17461       -mips3
17462           Equivalent to -march=mips3.
17463
17464       -mips4
17465           Equivalent to -march=mips4.
17466
17467       -mips32
17468           Equivalent to -march=mips32.
17469
17470       -mips32r3
17471           Equivalent to -march=mips32r3.
17472
17473       -mips32r5
17474           Equivalent to -march=mips32r5.
17475
17476       -mips32r6
17477           Equivalent to -march=mips32r6.
17478
17479       -mips64
17480           Equivalent to -march=mips64.
17481
17482       -mips64r2
17483           Equivalent to -march=mips64r2.
17484
17485       -mips64r3
17486           Equivalent to -march=mips64r3.
17487
17488       -mips64r5
17489           Equivalent to -march=mips64r5.
17490
17491       -mips64r6
17492           Equivalent to -march=mips64r6.
17493
17494       -mips16
17495       -mno-mips16
17496           Generate (do not generate) MIPS16 code.  If GCC is targeting a
17497           MIPS32 or MIPS64 architecture, it makes use of the MIPS16e ASE.
17498
17499           MIPS16 code generation can also be controlled on a per-function
17500           basis by means of "mips16" and "nomips16" attributes.
17501
17502       -mflip-mips16
17503           Generate MIPS16 code on alternating functions.  This option is
17504           provided for regression testing of mixed MIPS16/non-MIPS16 code
17505           generation, and is not intended for ordinary use in compiling user
17506           code.
17507
17508       -minterlink-compressed
17509       -mno-interlink-compressed
17510           Require (do not require) that code using the standard
17511           (uncompressed) MIPS ISA be link-compatible with MIPS16 and
17512           microMIPS code, and vice versa.
17513
17514           For example, code using the standard ISA encoding cannot jump
17515           directly to MIPS16 or microMIPS code; it must either use a call or
17516           an indirect jump.  -minterlink-compressed therefore disables direct
17517           jumps unless GCC knows that the target of the jump is not
17518           compressed.
17519
17520       -minterlink-mips16
17521       -mno-interlink-mips16
17522           Aliases of -minterlink-compressed and -mno-interlink-compressed.
17523           These options predate the microMIPS ASE and are retained for
17524           backwards compatibility.
17525
17526       -mabi=32
17527       -mabi=o64
17528       -mabi=n32
17529       -mabi=64
17530       -mabi=eabi
17531           Generate code for the given ABI.
17532
17533           Note that the EABI has a 32-bit and a 64-bit variant.  GCC normally
17534           generates 64-bit code when you select a 64-bit architecture, but
17535           you can use -mgp32 to get 32-bit code instead.
17536
17537           For information about the O64 ABI, see
17538           <http://gcc.gnu.org/projects/mipso64-abi.html>.
17539
17540           GCC supports a variant of the o32 ABI in which floating-point
17541           registers are 64 rather than 32 bits wide.  You can select this
17542           combination with -mabi=32 -mfp64.  This ABI relies on the "mthc1"
17543           and "mfhc1" instructions and is therefore only supported for
17544           MIPS32R2, MIPS32R3 and MIPS32R5 processors.
17545
17546           The register assignments for arguments and return values remain the
17547           same, but each scalar value is passed in a single 64-bit register
17548           rather than a pair of 32-bit registers.  For example, scalar
17549           floating-point values are returned in $f0 only, not a $f0/$f1 pair.
17550           The set of call-saved registers also remains the same in that the
17551           even-numbered double-precision registers are saved.
17552
17553           Two additional variants of the o32 ABI are supported to enable a
17554           transition from 32-bit to 64-bit registers.  These are FPXX
17555           (-mfpxx) and FP64A (-mfp64 -mno-odd-spreg).  The FPXX extension
17556           mandates that all code must execute correctly when run using 32-bit
17557           or 64-bit registers.  The code can be interlinked with either FP32
17558           or FP64, but not both.  The FP64A extension is similar to the FP64
17559           extension but forbids the use of odd-numbered single-precision
17560           registers.  This can be used in conjunction with the "FRE" mode of
17561           FPUs in MIPS32R5 processors and allows both FP32 and FP64A code to
17562           interlink and run in the same process without changing FPU modes.
17563
17564       -mabicalls
17565       -mno-abicalls
17566           Generate (do not generate) code that is suitable for SVR4-style
17567           dynamic objects.  -mabicalls is the default for SVR4-based systems.
17568
17569       -mshared
17570       -mno-shared
17571           Generate (do not generate) code that is fully position-independent,
17572           and that can therefore be linked into shared libraries.  This
17573           option only affects -mabicalls.
17574
17575           All -mabicalls code has traditionally been position-independent,
17576           regardless of options like -fPIC and -fpic.  However, as an
17577           extension, the GNU toolchain allows executables to use absolute
17578           accesses for locally-binding symbols.  It can also use shorter GP
17579           initialization sequences and generate direct calls to locally-
17580           defined functions.  This mode is selected by -mno-shared.
17581
17582           -mno-shared depends on binutils 2.16 or higher and generates
17583           objects that can only be linked by the GNU linker.  However, the
17584           option does not affect the ABI of the final executable; it only
17585           affects the ABI of relocatable objects.  Using -mno-shared
17586           generally makes executables both smaller and quicker.
17587
17588           -mshared is the default.
17589
17590       -mplt
17591       -mno-plt
17592           Assume (do not assume) that the static and dynamic linkers support
17593           PLTs and copy relocations.  This option only affects -mno-shared
17594           -mabicalls.  For the n64 ABI, this option has no effect without
17595           -msym32.
17596
17597           You can make -mplt the default by configuring GCC with
17598           --with-mips-plt.  The default is -mno-plt otherwise.
17599
17600       -mxgot
17601       -mno-xgot
17602           Lift (do not lift) the usual restrictions on the size of the global
17603           offset table.
17604
17605           GCC normally uses a single instruction to load values from the GOT.
17606           While this is relatively efficient, it only works if the GOT is
17607           smaller than about 64k.  Anything larger causes the linker to
17608           report an error such as:
17609
17610                   relocation truncated to fit: R_MIPS_GOT16 foobar
17611
17612           If this happens, you should recompile your code with -mxgot.  This
17613           works with very large GOTs, although the code is also less
17614           efficient, since it takes three instructions to fetch the value of
17615           a global symbol.
17616
17617           Note that some linkers can create multiple GOTs.  If you have such
17618           a linker, you should only need to use -mxgot when a single object
17619           file accesses more than 64k's worth of GOT entries.  Very few do.
17620
17621           These options have no effect unless GCC is generating position
17622           independent code.
17623
17624       -mgp32
17625           Assume that general-purpose registers are 32 bits wide.
17626
17627       -mgp64
17628           Assume that general-purpose registers are 64 bits wide.
17629
17630       -mfp32
17631           Assume that floating-point registers are 32 bits wide.
17632
17633       -mfp64
17634           Assume that floating-point registers are 64 bits wide.
17635
17636       -mfpxx
17637           Do not assume the width of floating-point registers.
17638
17639       -mhard-float
17640           Use floating-point coprocessor instructions.
17641
17642       -msoft-float
17643           Do not use floating-point coprocessor instructions.  Implement
17644           floating-point calculations using library calls instead.
17645
17646       -mno-float
17647           Equivalent to -msoft-float, but additionally asserts that the
17648           program being compiled does not perform any floating-point
17649           operations.  This option is presently supported only by some bare-
17650           metal MIPS configurations, where it may select a special set of
17651           libraries that lack all floating-point support (including, for
17652           example, the floating-point "printf" formats).  If code compiled
17653           with -mno-float accidentally contains floating-point operations, it
17654           is likely to suffer a link-time or run-time failure.
17655
17656       -msingle-float
17657           Assume that the floating-point coprocessor only supports single-
17658           precision operations.
17659
17660       -mdouble-float
17661           Assume that the floating-point coprocessor supports double-
17662           precision operations.  This is the default.
17663
17664       -modd-spreg
17665       -mno-odd-spreg
17666           Enable the use of odd-numbered single-precision floating-point
17667           registers for the o32 ABI.  This is the default for processors that
17668           are known to support these registers.  When using the o32 FPXX ABI,
17669           -mno-odd-spreg is set by default.
17670
17671       -mabs=2008
17672       -mabs=legacy
17673           These options control the treatment of the special not-a-number
17674           (NaN) IEEE 754 floating-point data with the "abs.fmt" and "neg.fmt"
17675           machine instructions.
17676
17677           By default or when -mabs=legacy is used the legacy treatment is
17678           selected.  In this case these instructions are considered
17679           arithmetic and avoided where correct operation is required and the
17680           input operand might be a NaN.  A longer sequence of instructions
17681           that manipulate the sign bit of floating-point datum manually is
17682           used instead unless the -ffinite-math-only option has also been
17683           specified.
17684
17685           The -mabs=2008 option selects the IEEE 754-2008 treatment.  In this
17686           case these instructions are considered non-arithmetic and therefore
17687           operating correctly in all cases, including in particular where the
17688           input operand is a NaN.  These instructions are therefore always
17689           used for the respective operations.
17690
17691       -mnan=2008
17692       -mnan=legacy
17693           These options control the encoding of the special not-a-number
17694           (NaN) IEEE 754 floating-point data.
17695
17696           The -mnan=legacy option selects the legacy encoding.  In this case
17697           quiet NaNs (qNaNs) are denoted by the first bit of their trailing
17698           significand field being 0, whereas signaling NaNs (sNaNs) are
17699           denoted by the first bit of their trailing significand field being
17700           1.
17701
17702           The -mnan=2008 option selects the IEEE 754-2008 encoding.  In this
17703           case qNaNs are denoted by the first bit of their trailing
17704           significand field being 1, whereas sNaNs are denoted by the first
17705           bit of their trailing significand field being 0.
17706
17707           The default is -mnan=legacy unless GCC has been configured with
17708           --with-nan=2008.
17709
17710       -mllsc
17711       -mno-llsc
17712           Use (do not use) ll, sc, and sync instructions to implement atomic
17713           memory built-in functions.  When neither option is specified, GCC
17714           uses the instructions if the target architecture supports them.
17715
17716           -mllsc is useful if the runtime environment can emulate the
17717           instructions and -mno-llsc can be useful when compiling for
17718           nonstandard ISAs.  You can make either option the default by
17719           configuring GCC with --with-llsc and --without-llsc respectively.
17720           --with-llsc is the default for some configurations; see the
17721           installation documentation for details.
17722
17723       -mdsp
17724       -mno-dsp
17725           Use (do not use) revision 1 of the MIPS DSP ASE.
17726             This option defines the preprocessor macro "__mips_dsp".  It also
17727           defines "__mips_dsp_rev" to 1.
17728
17729       -mdspr2
17730       -mno-dspr2
17731           Use (do not use) revision 2 of the MIPS DSP ASE.
17732             This option defines the preprocessor macros "__mips_dsp" and
17733           "__mips_dspr2".  It also defines "__mips_dsp_rev" to 2.
17734
17735       -msmartmips
17736       -mno-smartmips
17737           Use (do not use) the MIPS SmartMIPS ASE.
17738
17739       -mpaired-single
17740       -mno-paired-single
17741           Use (do not use) paired-single floating-point instructions.
17742             This option requires hardware floating-point support to be
17743           enabled.
17744
17745       -mdmx
17746       -mno-mdmx
17747           Use (do not use) MIPS Digital Media Extension instructions.  This
17748           option can only be used when generating 64-bit code and requires
17749           hardware floating-point support to be enabled.
17750
17751       -mips3d
17752       -mno-mips3d
17753           Use (do not use) the MIPS-3D ASE.  The option -mips3d implies
17754           -mpaired-single.
17755
17756       -mmicromips
17757       -mno-micromips
17758           Generate (do not generate) microMIPS code.
17759
17760           MicroMIPS code generation can also be controlled on a per-function
17761           basis by means of "micromips" and "nomicromips" attributes.
17762
17763       -mmt
17764       -mno-mt
17765           Use (do not use) MT Multithreading instructions.
17766
17767       -mmcu
17768       -mno-mcu
17769           Use (do not use) the MIPS MCU ASE instructions.
17770
17771       -meva
17772       -mno-eva
17773           Use (do not use) the MIPS Enhanced Virtual Addressing instructions.
17774
17775       -mvirt
17776       -mno-virt
17777           Use (do not use) the MIPS Virtualization (VZ) instructions.
17778
17779       -mxpa
17780       -mno-xpa
17781           Use (do not use) the MIPS eXtended Physical Address (XPA)
17782           instructions.
17783
17784       -mlong64
17785           Force "long" types to be 64 bits wide.  See -mlong32 for an
17786           explanation of the default and the way that the pointer size is
17787           determined.
17788
17789       -mlong32
17790           Force "long", "int", and pointer types to be 32 bits wide.
17791
17792           The default size of "int"s, "long"s and pointers depends on the
17793           ABI.  All the supported ABIs use 32-bit "int"s.  The n64 ABI uses
17794           64-bit "long"s, as does the 64-bit EABI; the others use 32-bit
17795           "long"s.  Pointers are the same size as "long"s, or the same size
17796           as integer registers, whichever is smaller.
17797
17798       -msym32
17799       -mno-sym32
17800           Assume (do not assume) that all symbols have 32-bit values,
17801           regardless of the selected ABI.  This option is useful in
17802           combination with -mabi=64 and -mno-abicalls because it allows GCC
17803           to generate shorter and faster references to symbolic addresses.
17804
17805       -G num
17806           Put definitions of externally-visible data in a small data section
17807           if that data is no bigger than num bytes.  GCC can then generate
17808           more efficient accesses to the data; see -mgpopt for details.
17809
17810           The default -G option depends on the configuration.
17811
17812       -mlocal-sdata
17813       -mno-local-sdata
17814           Extend (do not extend) the -G behavior to local data too, such as
17815           to static variables in C.  -mlocal-sdata is the default for all
17816           configurations.
17817
17818           If the linker complains that an application is using too much small
17819           data, you might want to try rebuilding the less performance-
17820           critical parts with -mno-local-sdata.  You might also want to build
17821           large libraries with -mno-local-sdata, so that the libraries leave
17822           more room for the main program.
17823
17824       -mextern-sdata
17825       -mno-extern-sdata
17826           Assume (do not assume) that externally-defined data is in a small
17827           data section if the size of that data is within the -G limit.
17828           -mextern-sdata is the default for all configurations.
17829
17830           If you compile a module Mod with -mextern-sdata -G num -mgpopt, and
17831           Mod references a variable Var that is no bigger than num bytes, you
17832           must make sure that Var is placed in a small data section.  If Var
17833           is defined by another module, you must either compile that module
17834           with a high-enough -G setting or attach a "section" attribute to
17835           Var's definition.  If Var is common, you must link the application
17836           with a high-enough -G setting.
17837
17838           The easiest way of satisfying these restrictions is to compile and
17839           link every module with the same -G option.  However, you may wish
17840           to build a library that supports several different small data
17841           limits.  You can do this by compiling the library with the highest
17842           supported -G setting and additionally using -mno-extern-sdata to
17843           stop the library from making assumptions about externally-defined
17844           data.
17845
17846       -mgpopt
17847       -mno-gpopt
17848           Use (do not use) GP-relative accesses for symbols that are known to
17849           be in a small data section; see -G, -mlocal-sdata and
17850           -mextern-sdata.  -mgpopt is the default for all configurations.
17851
17852           -mno-gpopt is useful for cases where the $gp register might not
17853           hold the value of "_gp".  For example, if the code is part of a
17854           library that might be used in a boot monitor, programs that call
17855           boot monitor routines pass an unknown value in $gp.  (In such
17856           situations, the boot monitor itself is usually compiled with -G0.)
17857
17858           -mno-gpopt implies -mno-local-sdata and -mno-extern-sdata.
17859
17860       -membedded-data
17861       -mno-embedded-data
17862           Allocate variables to the read-only data section first if possible,
17863           then next in the small data section if possible, otherwise in data.
17864           This gives slightly slower code than the default, but reduces the
17865           amount of RAM required when executing, and thus may be preferred
17866           for some embedded systems.
17867
17868       -muninit-const-in-rodata
17869       -mno-uninit-const-in-rodata
17870           Put uninitialized "const" variables in the read-only data section.
17871           This option is only meaningful in conjunction with -membedded-data.
17872
17873       -mcode-readable=setting
17874           Specify whether GCC may generate code that reads from executable
17875           sections.  There are three possible settings:
17876
17877           -mcode-readable=yes
17878               Instructions may freely access executable sections.  This is
17879               the default setting.
17880
17881           -mcode-readable=pcrel
17882               MIPS16 PC-relative load instructions can access executable
17883               sections, but other instructions must not do so.  This option
17884               is useful on 4KSc and 4KSd processors when the code TLBs have
17885               the Read Inhibit bit set.  It is also useful on processors that
17886               can be configured to have a dual instruction/data SRAM
17887               interface and that, like the M4K, automatically redirect PC-
17888               relative loads to the instruction RAM.
17889
17890           -mcode-readable=no
17891               Instructions must not access executable sections.  This option
17892               can be useful on targets that are configured to have a dual
17893               instruction/data SRAM interface but that (unlike the M4K) do
17894               not automatically redirect PC-relative loads to the instruction
17895               RAM.
17896
17897       -msplit-addresses
17898       -mno-split-addresses
17899           Enable (disable) use of the "%hi()" and "%lo()" assembler
17900           relocation operators.  This option has been superseded by
17901           -mexplicit-relocs but is retained for backwards compatibility.
17902
17903       -mexplicit-relocs
17904       -mno-explicit-relocs
17905           Use (do not use) assembler relocation operators when dealing with
17906           symbolic addresses.  The alternative, selected by
17907           -mno-explicit-relocs, is to use assembler macros instead.
17908
17909           -mexplicit-relocs is the default if GCC was configured to use an
17910           assembler that supports relocation operators.
17911
17912       -mcheck-zero-division
17913       -mno-check-zero-division
17914           Trap (do not trap) on integer division by zero.
17915
17916           The default is -mcheck-zero-division.
17917
17918       -mdivide-traps
17919       -mdivide-breaks
17920           MIPS systems check for division by zero by generating either a
17921           conditional trap or a break instruction.  Using traps results in
17922           smaller code, but is only supported on MIPS II and later.  Also,
17923           some versions of the Linux kernel have a bug that prevents trap
17924           from generating the proper signal ("SIGFPE").  Use -mdivide-traps
17925           to allow conditional traps on architectures that support them and
17926           -mdivide-breaks to force the use of breaks.
17927
17928           The default is usually -mdivide-traps, but this can be overridden
17929           at configure time using --with-divide=breaks.  Divide-by-zero
17930           checks can be completely disabled using -mno-check-zero-division.
17931
17932       -mload-store-pairs
17933       -mno-load-store-pairs
17934           Enable (disable) an optimization that pairs consecutive load or
17935           store instructions to enable load/store bonding.  This option is
17936           enabled by default but only takes effect when the selected
17937           architecture is known to support bonding.
17938
17939       -mmemcpy
17940       -mno-memcpy
17941           Force (do not force) the use of "memcpy" for non-trivial block
17942           moves.  The default is -mno-memcpy, which allows GCC to inline most
17943           constant-sized copies.
17944
17945       -mlong-calls
17946       -mno-long-calls
17947           Disable (do not disable) use of the "jal" instruction.  Calling
17948           functions using "jal" is more efficient but requires the caller and
17949           callee to be in the same 256 megabyte segment.
17950
17951           This option has no effect on abicalls code.  The default is
17952           -mno-long-calls.
17953
17954       -mmad
17955       -mno-mad
17956           Enable (disable) use of the "mad", "madu" and "mul" instructions,
17957           as provided by the R4650 ISA.
17958
17959       -mimadd
17960       -mno-imadd
17961           Enable (disable) use of the "madd" and "msub" integer instructions.
17962           The default is -mimadd on architectures that support "madd" and
17963           "msub" except for the 74k architecture where it was found to
17964           generate slower code.
17965
17966       -mfused-madd
17967       -mno-fused-madd
17968           Enable (disable) use of the floating-point multiply-accumulate
17969           instructions, when they are available.  The default is
17970           -mfused-madd.
17971
17972           On the R8000 CPU when multiply-accumulate instructions are used,
17973           the intermediate product is calculated to infinite precision and is
17974           not subject to the FCSR Flush to Zero bit.  This may be undesirable
17975           in some circumstances.  On other processors the result is
17976           numerically identical to the equivalent computation using separate
17977           multiply, add, subtract and negate instructions.
17978
17979       -nocpp
17980           Tell the MIPS assembler to not run its preprocessor over user
17981           assembler files (with a .s suffix) when assembling them.
17982
17983       -mfix-24k
17984       -mno-fix-24k
17985           Work around the 24K E48 (lost data on stores during refill) errata.
17986           The workarounds are implemented by the assembler rather than by
17987           GCC.
17988
17989       -mfix-r4000
17990       -mno-fix-r4000
17991           Work around certain R4000 CPU errata:
17992
17993           -   A double-word or a variable shift may give an incorrect result
17994               if executed immediately after starting an integer division.
17995
17996           -   A double-word or a variable shift may give an incorrect result
17997               if executed while an integer multiplication is in progress.
17998
17999           -   An integer division may give an incorrect result if started in
18000               a delay slot of a taken branch or a jump.
18001
18002       -mfix-r4400
18003       -mno-fix-r4400
18004           Work around certain R4400 CPU errata:
18005
18006           -   A double-word or a variable shift may give an incorrect result
18007               if executed immediately after starting an integer division.
18008
18009       -mfix-r10000
18010       -mno-fix-r10000
18011           Work around certain R10000 errata:
18012
18013           -   "ll"/"sc" sequences may not behave atomically on revisions
18014               prior to 3.0.  They may deadlock on revisions 2.6 and earlier.
18015
18016           This option can only be used if the target architecture supports
18017           branch-likely instructions.  -mfix-r10000 is the default when
18018           -march=r10000 is used; -mno-fix-r10000 is the default otherwise.
18019
18020       -mfix-rm7000
18021       -mno-fix-rm7000
18022           Work around the RM7000 "dmult"/"dmultu" errata.  The workarounds
18023           are implemented by the assembler rather than by GCC.
18024
18025       -mfix-vr4120
18026       -mno-fix-vr4120
18027           Work around certain VR4120 errata:
18028
18029           -   "dmultu" does not always produce the correct result.
18030
18031           -   "div" and "ddiv" do not always produce the correct result if
18032               one of the operands is negative.
18033
18034           The workarounds for the division errata rely on special functions
18035           in libgcc.a.  At present, these functions are only provided by the
18036           "mips64vr*-elf" configurations.
18037
18038           Other VR4120 errata require a NOP to be inserted between certain
18039           pairs of instructions.  These errata are handled by the assembler,
18040           not by GCC itself.
18041
18042       -mfix-vr4130
18043           Work around the VR4130 "mflo"/"mfhi" errata.  The workarounds are
18044           implemented by the assembler rather than by GCC, although GCC
18045           avoids using "mflo" and "mfhi" if the VR4130 "macc", "macchi",
18046           "dmacc" and "dmacchi" instructions are available instead.
18047
18048       -mfix-sb1
18049       -mno-fix-sb1
18050           Work around certain SB-1 CPU core errata.  (This flag currently
18051           works around the SB-1 revision 2 "F1" and "F2" floating-point
18052           errata.)
18053
18054       -mr10k-cache-barrier=setting
18055           Specify whether GCC should insert cache barriers to avoid the side
18056           effects of speculation on R10K processors.
18057
18058           In common with many processors, the R10K tries to predict the
18059           outcome of a conditional branch and speculatively executes
18060           instructions from the "taken" branch.  It later aborts these
18061           instructions if the predicted outcome is wrong.  However, on the
18062           R10K, even aborted instructions can have side effects.
18063
18064           This problem only affects kernel stores and, depending on the
18065           system, kernel loads.  As an example, a speculatively-executed
18066           store may load the target memory into cache and mark the cache line
18067           as dirty, even if the store itself is later aborted.  If a DMA
18068           operation writes to the same area of memory before the "dirty" line
18069           is flushed, the cached data overwrites the DMA-ed data.  See the
18070           R10K processor manual for a full description, including other
18071           potential problems.
18072
18073           One workaround is to insert cache barrier instructions before every
18074           memory access that might be speculatively executed and that might
18075           have side effects even if aborted.  -mr10k-cache-barrier=setting
18076           controls GCC's implementation of this workaround.  It assumes that
18077           aborted accesses to any byte in the following regions does not have
18078           side effects:
18079
18080           1.  the memory occupied by the current function's stack frame;
18081
18082           2.  the memory occupied by an incoming stack argument;
18083
18084           3.  the memory occupied by an object with a link-time-constant
18085               address.
18086
18087           It is the kernel's responsibility to ensure that speculative
18088           accesses to these regions are indeed safe.
18089
18090           If the input program contains a function declaration such as:
18091
18092                   void foo (void);
18093
18094           then the implementation of "foo" must allow "j foo" and "jal foo"
18095           to be executed speculatively.  GCC honors this restriction for
18096           functions it compiles itself.  It expects non-GCC functions (such
18097           as hand-written assembly code) to do the same.
18098
18099           The option has three forms:
18100
18101           -mr10k-cache-barrier=load-store
18102               Insert a cache barrier before a load or store that might be
18103               speculatively executed and that might have side effects even if
18104               aborted.
18105
18106           -mr10k-cache-barrier=store
18107               Insert a cache barrier before a store that might be
18108               speculatively executed and that might have side effects even if
18109               aborted.
18110
18111           -mr10k-cache-barrier=none
18112               Disable the insertion of cache barriers.  This is the default
18113               setting.
18114
18115       -mflush-func=func
18116       -mno-flush-func
18117           Specifies the function to call to flush the I and D caches, or to
18118           not call any such function.  If called, the function must take the
18119           same arguments as the common "_flush_func", that is, the address of
18120           the memory range for which the cache is being flushed, the size of
18121           the memory range, and the number 3 (to flush both caches).  The
18122           default depends on the target GCC was configured for, but commonly
18123           is either "_flush_func" or "__cpu_flush".
18124
18125       mbranch-cost=num
18126           Set the cost of branches to roughly num "simple" instructions.
18127           This cost is only a heuristic and is not guaranteed to produce
18128           consistent results across releases.  A zero cost redundantly
18129           selects the default, which is based on the -mtune setting.
18130
18131       -mbranch-likely
18132       -mno-branch-likely
18133           Enable or disable use of Branch Likely instructions, regardless of
18134           the default for the selected architecture.  By default, Branch
18135           Likely instructions may be generated if they are supported by the
18136           selected architecture.  An exception is for the MIPS32 and MIPS64
18137           architectures and processors that implement those architectures;
18138           for those, Branch Likely instructions are not be generated by
18139           default because the MIPS32 and MIPS64 architectures specifically
18140           deprecate their use.
18141
18142       -mcompact-branches=never
18143       -mcompact-branches=optimal
18144       -mcompact-branches=always
18145           These options control which form of branches will be generated.
18146           The default is -mcompact-branches=optimal.
18147
18148           The -mcompact-branches=never option ensures that compact branch
18149           instructions will never be generated.
18150
18151           The -mcompact-branches=always option ensures that a compact branch
18152           instruction will be generated if available.  If a compact branch
18153           instruction is not available, a delay slot form of the branch will
18154           be used instead.
18155
18156           This option is supported from MIPS Release 6 onwards.
18157
18158           The -mcompact-branches=optimal option will cause a delay slot
18159           branch to be used if one is available in the current ISA and the
18160           delay slot is successfully filled.  If the delay slot is not
18161           filled, a compact branch will be chosen if one is available.
18162
18163       -mfp-exceptions
18164       -mno-fp-exceptions
18165           Specifies whether FP exceptions are enabled.  This affects how FP
18166           instructions are scheduled for some processors.  The default is
18167           that FP exceptions are enabled.
18168
18169           For instance, on the SB-1, if FP exceptions are disabled, and we
18170           are emitting 64-bit code, then we can use both FP pipes.
18171           Otherwise, we can only use one FP pipe.
18172
18173       -mvr4130-align
18174       -mno-vr4130-align
18175           The VR4130 pipeline is two-way superscalar, but can only issue two
18176           instructions together if the first one is 8-byte aligned.  When
18177           this option is enabled, GCC aligns pairs of instructions that it
18178           thinks should execute in parallel.
18179
18180           This option only has an effect when optimizing for the VR4130.  It
18181           normally makes code faster, but at the expense of making it bigger.
18182           It is enabled by default at optimization level -O3.
18183
18184       -msynci
18185       -mno-synci
18186           Enable (disable) generation of "synci" instructions on
18187           architectures that support it.  The "synci" instructions (if
18188           enabled) are generated when "__builtin___clear_cache" is compiled.
18189
18190           This option defaults to -mno-synci, but the default can be
18191           overridden by configuring GCC with --with-synci.
18192
18193           When compiling code for single processor systems, it is generally
18194           safe to use "synci".  However, on many multi-core (SMP) systems, it
18195           does not invalidate the instruction caches on all cores and may
18196           lead to undefined behavior.
18197
18198       -mrelax-pic-calls
18199       -mno-relax-pic-calls
18200           Try to turn PIC calls that are normally dispatched via register $25
18201           into direct calls.  This is only possible if the linker can resolve
18202           the destination at link time and if the destination is within range
18203           for a direct call.
18204
18205           -mrelax-pic-calls is the default if GCC was configured to use an
18206           assembler and a linker that support the ".reloc" assembly directive
18207           and -mexplicit-relocs is in effect.  With -mno-explicit-relocs,
18208           this optimization can be performed by the assembler and the linker
18209           alone without help from the compiler.
18210
18211       -mmcount-ra-address
18212       -mno-mcount-ra-address
18213           Emit (do not emit) code that allows "_mcount" to modify the calling
18214           function's return address.  When enabled, this option extends the
18215           usual "_mcount" interface with a new ra-address parameter, which
18216           has type "intptr_t *" and is passed in register $12.  "_mcount" can
18217           then modify the return address by doing both of the following:
18218
18219           *   Returning the new address in register $31.
18220
18221           *   Storing the new address in "*ra-address", if ra-address is
18222               nonnull.
18223
18224           The default is -mno-mcount-ra-address.
18225
18226       -mframe-header-opt
18227       -mno-frame-header-opt
18228           Enable (disable) frame header optimization in the o32 ABI.  When
18229           using the o32 ABI, calling functions will allocate 16 bytes on the
18230           stack for the called function to write out register arguments.
18231           When enabled, this optimization will suppress the allocation of the
18232           frame header if it can be determined that it is unused.
18233
18234           This optimization is off by default at all optimization levels.
18235
18236       -mlxc1-sxc1
18237       -mno-lxc1-sxc1
18238           When applicable, enable (disable) the generation of "lwxc1",
18239           "swxc1", "ldxc1", "sdxc1" instructions.  Enabled by default.
18240
18241       -mmadd4
18242       -mno-madd4
18243           When applicable, enable (disable) the generation of 4-operand
18244           "madd.s", "madd.d" and related instructions.  Enabled by default.
18245
18246   MMIX Options
18247       These options are defined for the MMIX:
18248
18249       -mlibfuncs
18250       -mno-libfuncs
18251           Specify that intrinsic library functions are being compiled,
18252           passing all values in registers, no matter the size.
18253
18254       -mepsilon
18255       -mno-epsilon
18256           Generate floating-point comparison instructions that compare with
18257           respect to the "rE" epsilon register.
18258
18259       -mabi=mmixware
18260       -mabi=gnu
18261           Generate code that passes function parameters and return values
18262           that (in the called function) are seen as registers $0 and up, as
18263           opposed to the GNU ABI which uses global registers $231 and up.
18264
18265       -mzero-extend
18266       -mno-zero-extend
18267           When reading data from memory in sizes shorter than 64 bits, use
18268           (do not use) zero-extending load instructions by default, rather
18269           than sign-extending ones.
18270
18271       -mknuthdiv
18272       -mno-knuthdiv
18273           Make the result of a division yielding a remainder have the same
18274           sign as the divisor.  With the default, -mno-knuthdiv, the sign of
18275           the remainder follows the sign of the dividend.  Both methods are
18276           arithmetically valid, the latter being almost exclusively used.
18277
18278       -mtoplevel-symbols
18279       -mno-toplevel-symbols
18280           Prepend (do not prepend) a : to all global symbols, so the assembly
18281           code can be used with the "PREFIX" assembly directive.
18282
18283       -melf
18284           Generate an executable in the ELF format, rather than the default
18285           mmo format used by the mmix simulator.
18286
18287       -mbranch-predict
18288       -mno-branch-predict
18289           Use (do not use) the probable-branch instructions, when static
18290           branch prediction indicates a probable branch.
18291
18292       -mbase-addresses
18293       -mno-base-addresses
18294           Generate (do not generate) code that uses base addresses.  Using a
18295           base address automatically generates a request (handled by the
18296           assembler and the linker) for a constant to be set up in a global
18297           register.  The register is used for one or more base address
18298           requests within the range 0 to 255 from the value held in the
18299           register.  The generally leads to short and fast code, but the
18300           number of different data items that can be addressed is limited.
18301           This means that a program that uses lots of static data may require
18302           -mno-base-addresses.
18303
18304       -msingle-exit
18305       -mno-single-exit
18306           Force (do not force) generated code to have a single exit point in
18307           each function.
18308
18309   MN10300 Options
18310       These -m options are defined for Matsushita MN10300 architectures:
18311
18312       -mmult-bug
18313           Generate code to avoid bugs in the multiply instructions for the
18314           MN10300 processors.  This is the default.
18315
18316       -mno-mult-bug
18317           Do not generate code to avoid bugs in the multiply instructions for
18318           the MN10300 processors.
18319
18320       -mam33
18321           Generate code using features specific to the AM33 processor.
18322
18323       -mno-am33
18324           Do not generate code using features specific to the AM33 processor.
18325           This is the default.
18326
18327       -mam33-2
18328           Generate code using features specific to the AM33/2.0 processor.
18329
18330       -mam34
18331           Generate code using features specific to the AM34 processor.
18332
18333       -mtune=cpu-type
18334           Use the timing characteristics of the indicated CPU type when
18335           scheduling instructions.  This does not change the targeted
18336           processor type.  The CPU type must be one of mn10300, am33, am33-2
18337           or am34.
18338
18339       -mreturn-pointer-on-d0
18340           When generating a function that returns a pointer, return the
18341           pointer in both "a0" and "d0".  Otherwise, the pointer is returned
18342           only in "a0", and attempts to call such functions without a
18343           prototype result in errors.  Note that this option is on by
18344           default; use -mno-return-pointer-on-d0 to disable it.
18345
18346       -mno-crt0
18347           Do not link in the C run-time initialization object file.
18348
18349       -mrelax
18350           Indicate to the linker that it should perform a relaxation
18351           optimization pass to shorten branches, calls and absolute memory
18352           addresses.  This option only has an effect when used on the command
18353           line for the final link step.
18354
18355           This option makes symbolic debugging impossible.
18356
18357       -mliw
18358           Allow the compiler to generate Long Instruction Word instructions
18359           if the target is the AM33 or later.  This is the default.  This
18360           option defines the preprocessor macro "__LIW__".
18361
18362       -mnoliw
18363           Do not allow the compiler to generate Long Instruction Word
18364           instructions.  This option defines the preprocessor macro
18365           "__NO_LIW__".
18366
18367       -msetlb
18368           Allow the compiler to generate the SETLB and Lcc instructions if
18369           the target is the AM33 or later.  This is the default.  This option
18370           defines the preprocessor macro "__SETLB__".
18371
18372       -mnosetlb
18373           Do not allow the compiler to generate SETLB or Lcc instructions.
18374           This option defines the preprocessor macro "__NO_SETLB__".
18375
18376   Moxie Options
18377       -meb
18378           Generate big-endian code.  This is the default for moxie-*-*
18379           configurations.
18380
18381       -mel
18382           Generate little-endian code.
18383
18384       -mmul.x
18385           Generate mul.x and umul.x instructions.  This is the default for
18386           moxiebox-*-* configurations.
18387
18388       -mno-crt0
18389           Do not link in the C run-time initialization object file.
18390
18391   MSP430 Options
18392       These options are defined for the MSP430:
18393
18394       -masm-hex
18395           Force assembly output to always use hex constants.  Normally such
18396           constants are signed decimals, but this option is available for
18397           testsuite and/or aesthetic purposes.
18398
18399       -mmcu=
18400           Select the MCU to target.  This is used to create a C preprocessor
18401           symbol based upon the MCU name, converted to upper case and pre-
18402           and post-fixed with __.  This in turn is used by the msp430.h
18403           header file to select an MCU-specific supplementary header file.
18404
18405           The option also sets the ISA to use.  If the MCU name is one that
18406           is known to only support the 430 ISA then that is selected,
18407           otherwise the 430X ISA is selected.  A generic MCU name of msp430
18408           can also be used to select the 430 ISA.  Similarly the generic
18409           msp430x MCU name selects the 430X ISA.
18410
18411           In addition an MCU-specific linker script is added to the linker
18412           command line.  The script's name is the name of the MCU with .ld
18413           appended.  Thus specifying -mmcu=xxx on the gcc command line
18414           defines the C preprocessor symbol "__XXX__" and cause the linker to
18415           search for a script called xxx.ld.
18416
18417           This option is also passed on to the assembler.
18418
18419       -mwarn-mcu
18420       -mno-warn-mcu
18421           This option enables or disables warnings about conflicts between
18422           the MCU name specified by the -mmcu option and the ISA set by the
18423           -mcpu option and/or the hardware multiply support set by the
18424           -mhwmult option.  It also toggles warnings about unrecognized MCU
18425           names.  This option is on by default.
18426
18427       -mcpu=
18428           Specifies the ISA to use.  Accepted values are msp430, msp430x and
18429           msp430xv2.  This option is deprecated.  The -mmcu= option should be
18430           used to select the ISA.
18431
18432       -msim
18433           Link to the simulator runtime libraries and linker script.
18434           Overrides any scripts that would be selected by the -mmcu= option.
18435
18436       -mlarge
18437           Use large-model addressing (20-bit pointers, 32-bit "size_t").
18438
18439       -msmall
18440           Use small-model addressing (16-bit pointers, 16-bit "size_t").
18441
18442       -mrelax
18443           This option is passed to the assembler and linker, and allows the
18444           linker to perform certain optimizations that cannot be done until
18445           the final link.
18446
18447       mhwmult=
18448           Describes the type of hardware multiply supported by the target.
18449           Accepted values are none for no hardware multiply, 16bit for the
18450           original 16-bit-only multiply supported by early MCUs.  32bit for
18451           the 16/32-bit multiply supported by later MCUs and f5series for the
18452           16/32-bit multiply supported by F5-series MCUs.  A value of auto
18453           can also be given.  This tells GCC to deduce the hardware multiply
18454           support based upon the MCU name provided by the -mmcu option.  If
18455           no -mmcu option is specified or if the MCU name is not recognized
18456           then no hardware multiply support is assumed.  "auto" is the
18457           default setting.
18458
18459           Hardware multiplies are normally performed by calling a library
18460           routine.  This saves space in the generated code.  When compiling
18461           at -O3 or higher however the hardware multiplier is invoked inline.
18462           This makes for bigger, but faster code.
18463
18464           The hardware multiply routines disable interrupts whilst running
18465           and restore the previous interrupt state when they finish.  This
18466           makes them safe to use inside interrupt handlers as well as in
18467           normal code.
18468
18469       -minrt
18470           Enable the use of a minimum runtime environment - no static
18471           initializers or constructors.  This is intended for memory-
18472           constrained devices.  The compiler includes special symbols in some
18473           objects that tell the linker and runtime which code fragments are
18474           required.
18475
18476       -mcode-region=
18477       -mdata-region=
18478           These options tell the compiler where to place functions and data
18479           that do not have one of the "lower", "upper", "either" or "section"
18480           attributes.  Possible values are "lower", "upper", "either" or
18481           "any".  The first three behave like the corresponding attribute.
18482           The fourth possible value - "any" - is the default.  It leaves
18483           placement entirely up to the linker script and how it assigns the
18484           standard sections (".text", ".data", etc) to the memory regions.
18485
18486       -msilicon-errata=
18487           This option passes on a request to assembler to enable the fixes
18488           for the named silicon errata.
18489
18490       -msilicon-errata-warn=
18491           This option passes on a request to the assembler to enable warning
18492           messages when a silicon errata might need to be applied.
18493
18494   NDS32 Options
18495       These options are defined for NDS32 implementations:
18496
18497       -mbig-endian
18498           Generate code in big-endian mode.
18499
18500       -mlittle-endian
18501           Generate code in little-endian mode.
18502
18503       -mreduced-regs
18504           Use reduced-set registers for register allocation.
18505
18506       -mfull-regs
18507           Use full-set registers for register allocation.
18508
18509       -mcmov
18510           Generate conditional move instructions.
18511
18512       -mno-cmov
18513           Do not generate conditional move instructions.
18514
18515       -mext-perf
18516           Generate performance extension instructions.
18517
18518       -mno-ext-perf
18519           Do not generate performance extension instructions.
18520
18521       -mext-perf2
18522           Generate performance extension 2 instructions.
18523
18524       -mno-ext-perf2
18525           Do not generate performance extension 2 instructions.
18526
18527       -mext-string
18528           Generate string extension instructions.
18529
18530       -mno-ext-string
18531           Do not generate string extension instructions.
18532
18533       -mv3push
18534           Generate v3 push25/pop25 instructions.
18535
18536       -mno-v3push
18537           Do not generate v3 push25/pop25 instructions.
18538
18539       -m16-bit
18540           Generate 16-bit instructions.
18541
18542       -mno-16-bit
18543           Do not generate 16-bit instructions.
18544
18545       -misr-vector-size=num
18546           Specify the size of each interrupt vector, which must be 4 or 16.
18547
18548       -mcache-block-size=num
18549           Specify the size of each cache block, which must be a power of 2
18550           between 4 and 512.
18551
18552       -march=arch
18553           Specify the name of the target architecture.
18554
18555       -mcmodel=code-model
18556           Set the code model to one of
18557
18558           small
18559               All the data and read-only data segments must be within 512KB
18560               addressing space.  The text segment must be within 16MB
18561               addressing space.
18562
18563           medium
18564               The data segment must be within 512KB while the read-only data
18565               segment can be within 4GB addressing space.  The text segment
18566               should be still within 16MB addressing space.
18567
18568           large
18569               All the text and data segments can be within 4GB addressing
18570               space.
18571
18572       -mctor-dtor
18573           Enable constructor/destructor feature.
18574
18575       -mrelax
18576           Guide linker to relax instructions.
18577
18578   Nios II Options
18579       These are the options defined for the Altera Nios II processor.
18580
18581       -G num
18582           Put global and static objects less than or equal to num bytes into
18583           the small data or BSS sections instead of the normal data or BSS
18584           sections.  The default value of num is 8.
18585
18586       -mgpopt=option
18587       -mgpopt
18588       -mno-gpopt
18589           Generate (do not generate) GP-relative accesses.  The following
18590           option names are recognized:
18591
18592           none
18593               Do not generate GP-relative accesses.
18594
18595           local
18596               Generate GP-relative accesses for small data objects that are
18597               not external, weak, or uninitialized common symbols.  Also use
18598               GP-relative addressing for objects that have been explicitly
18599               placed in a small data section via a "section" attribute.
18600
18601           global
18602               As for local, but also generate GP-relative accesses for small
18603               data objects that are external, weak, or common.  If you use
18604               this option, you must ensure that all parts of your program
18605               (including libraries) are compiled with the same -G setting.
18606
18607           data
18608               Generate GP-relative accesses for all data objects in the
18609               program.  If you use this option, the entire data and BSS
18610               segments of your program must fit in 64K of memory and you must
18611               use an appropriate linker script to allocate them within the
18612               addressable range of the global pointer.
18613
18614           all Generate GP-relative addresses for function pointers as well as
18615               data pointers.  If you use this option, the entire text, data,
18616               and BSS segments of your program must fit in 64K of memory and
18617               you must use an appropriate linker script to allocate them
18618               within the addressable range of the global pointer.
18619
18620           -mgpopt is equivalent to -mgpopt=local, and -mno-gpopt is
18621           equivalent to -mgpopt=none.
18622
18623           The default is -mgpopt except when -fpic or -fPIC is specified to
18624           generate position-independent code.  Note that the Nios II ABI does
18625           not permit GP-relative accesses from shared libraries.
18626
18627           You may need to specify -mno-gpopt explicitly when building
18628           programs that include large amounts of small data, including large
18629           GOT data sections.  In this case, the 16-bit offset for GP-relative
18630           addressing may not be large enough to allow access to the entire
18631           small data section.
18632
18633       -mgprel-sec=regexp
18634           This option specifies additional section names that can be accessed
18635           via GP-relative addressing.  It is most useful in conjunction with
18636           "section" attributes on variable declarations and a custom linker
18637           script.  The regexp is a POSIX Extended Regular Expression.
18638
18639           This option does not affect the behavior of the -G option, and the
18640           specified sections are in addition to the standard ".sdata" and
18641           ".sbss" small-data sections that are recognized by -mgpopt.
18642
18643       -mr0rel-sec=regexp
18644           This option specifies names of sections that can be accessed via a
18645           16-bit offset from "r0"; that is, in the low 32K or high 32K of the
18646           32-bit address space.  It is most useful in conjunction with
18647           "section" attributes on variable declarations and a custom linker
18648           script.  The regexp is a POSIX Extended Regular Expression.
18649
18650           In contrast to the use of GP-relative addressing for small data,
18651           zero-based addressing is never generated by default and there are
18652           no conventional section names used in standard linker scripts for
18653           sections in the low or high areas of memory.
18654
18655       -mel
18656       -meb
18657           Generate little-endian (default) or big-endian (experimental) code,
18658           respectively.
18659
18660       -march=arch
18661           This specifies the name of the target Nios II architecture.  GCC
18662           uses this name to determine what kind of instructions it can emit
18663           when generating assembly code.  Permissible names are: r1, r2.
18664
18665           The preprocessor macro "__nios2_arch__" is available to programs,
18666           with value 1 or 2, indicating the targeted ISA level.
18667
18668       -mbypass-cache
18669       -mno-bypass-cache
18670           Force all load and store instructions to always bypass cache by
18671           using I/O variants of the instructions. The default is not to
18672           bypass the cache.
18673
18674       -mno-cache-volatile
18675       -mcache-volatile
18676           Volatile memory access bypass the cache using the I/O variants of
18677           the load and store instructions. The default is not to bypass the
18678           cache.
18679
18680       -mno-fast-sw-div
18681       -mfast-sw-div
18682           Do not use table-based fast divide for small numbers. The default
18683           is to use the fast divide at -O3 and above.
18684
18685       -mno-hw-mul
18686       -mhw-mul
18687       -mno-hw-mulx
18688       -mhw-mulx
18689       -mno-hw-div
18690       -mhw-div
18691           Enable or disable emitting "mul", "mulx" and "div" family of
18692           instructions by the compiler. The default is to emit "mul" and not
18693           emit "div" and "mulx".
18694
18695       -mbmx
18696       -mno-bmx
18697       -mcdx
18698       -mno-cdx
18699           Enable or disable generation of Nios II R2 BMX (bit manipulation)
18700           and CDX (code density) instructions.  Enabling these instructions
18701           also requires -march=r2.  Since these instructions are optional
18702           extensions to the R2 architecture, the default is not to emit them.
18703
18704       -mcustom-insn=N
18705       -mno-custom-insn
18706           Each -mcustom-insn=N option enables use of a custom instruction
18707           with encoding N when generating code that uses insn.  For example,
18708           -mcustom-fadds=253 generates custom instruction 253 for single-
18709           precision floating-point add operations instead of the default
18710           behavior of using a library call.
18711
18712           The following values of insn are supported.  Except as otherwise
18713           noted, floating-point operations are expected to be implemented
18714           with normal IEEE 754 semantics and correspond directly to the C
18715           operators or the equivalent GCC built-in functions.
18716
18717           Single-precision floating point:
18718
18719           fadds, fsubs, fdivs, fmuls
18720               Binary arithmetic operations.
18721
18722           fnegs
18723               Unary negation.
18724
18725           fabss
18726               Unary absolute value.
18727
18728           fcmpeqs, fcmpges, fcmpgts, fcmples, fcmplts, fcmpnes
18729               Comparison operations.
18730
18731           fmins, fmaxs
18732               Floating-point minimum and maximum.  These instructions are
18733               only generated if -ffinite-math-only is specified.
18734
18735           fsqrts
18736               Unary square root operation.
18737
18738           fcoss, fsins, ftans, fatans, fexps, flogs
18739               Floating-point trigonometric and exponential functions.  These
18740               instructions are only generated if -funsafe-math-optimizations
18741               is also specified.
18742
18743           Double-precision floating point:
18744
18745           faddd, fsubd, fdivd, fmuld
18746               Binary arithmetic operations.
18747
18748           fnegd
18749               Unary negation.
18750
18751           fabsd
18752               Unary absolute value.
18753
18754           fcmpeqd, fcmpged, fcmpgtd, fcmpled, fcmpltd, fcmpned
18755               Comparison operations.
18756
18757           fmind, fmaxd
18758               Double-precision minimum and maximum.  These instructions are
18759               only generated if -ffinite-math-only is specified.
18760
18761           fsqrtd
18762               Unary square root operation.
18763
18764           fcosd, fsind, ftand, fatand, fexpd, flogd
18765               Double-precision trigonometric and exponential functions.
18766               These instructions are only generated if
18767               -funsafe-math-optimizations is also specified.
18768
18769           Conversions:
18770
18771           fextsd
18772               Conversion from single precision to double precision.
18773
18774           ftruncds
18775               Conversion from double precision to single precision.
18776
18777           fixsi, fixsu, fixdi, fixdu
18778               Conversion from floating point to signed or unsigned integer
18779               types, with truncation towards zero.
18780
18781           round
18782               Conversion from single-precision floating point to signed
18783               integer, rounding to the nearest integer and ties away from
18784               zero.  This corresponds to the "__builtin_lroundf" function
18785               when -fno-math-errno is used.
18786
18787           floatis, floatus, floatid, floatud
18788               Conversion from signed or unsigned integer types to floating-
18789               point types.
18790
18791           In addition, all of the following transfer instructions for
18792           internal registers X and Y must be provided to use any of the
18793           double-precision floating-point instructions.  Custom instructions
18794           taking two double-precision source operands expect the first
18795           operand in the 64-bit register X.  The other operand (or only
18796           operand of a unary operation) is given to the custom arithmetic
18797           instruction with the least significant half in source register src1
18798           and the most significant half in src2.  A custom instruction that
18799           returns a double-precision result returns the most significant 32
18800           bits in the destination register and the other half in 32-bit
18801           register Y.  GCC automatically generates the necessary code
18802           sequences to write register X and/or read register Y when double-
18803           precision floating-point instructions are used.
18804
18805           fwrx
18806               Write src1 into the least significant half of X and src2 into
18807               the most significant half of X.
18808
18809           fwry
18810               Write src1 into Y.
18811
18812           frdxhi, frdxlo
18813               Read the most or least (respectively) significant half of X and
18814               store it in dest.
18815
18816           frdy
18817               Read the value of Y and store it into dest.
18818
18819           Note that you can gain more local control over generation of Nios
18820           II custom instructions by using the "target("custom-insn=N")" and
18821           "target("no-custom-insn")" function attributes or pragmas.
18822
18823       -mcustom-fpu-cfg=name
18824           This option enables a predefined, named set of custom instruction
18825           encodings (see -mcustom-insn above).  Currently, the following sets
18826           are defined:
18827
18828           -mcustom-fpu-cfg=60-1 is equivalent to: -mcustom-fmuls=252
18829           -mcustom-fadds=253 -mcustom-fsubs=254 -fsingle-precision-constant
18830
18831           -mcustom-fpu-cfg=60-2 is equivalent to: -mcustom-fmuls=252
18832           -mcustom-fadds=253 -mcustom-fsubs=254 -mcustom-fdivs=255
18833           -fsingle-precision-constant
18834
18835           -mcustom-fpu-cfg=72-3 is equivalent to: -mcustom-floatus=243
18836           -mcustom-fixsi=244 -mcustom-floatis=245 -mcustom-fcmpgts=246
18837           -mcustom-fcmples=249 -mcustom-fcmpeqs=250 -mcustom-fcmpnes=251
18838           -mcustom-fmuls=252 -mcustom-fadds=253 -mcustom-fsubs=254
18839           -mcustom-fdivs=255 -fsingle-precision-constant
18840
18841           Custom instruction assignments given by individual -mcustom-insn=
18842           options override those given by -mcustom-fpu-cfg=, regardless of
18843           the order of the options on the command line.
18844
18845           Note that you can gain more local control over selection of a FPU
18846           configuration by using the "target("custom-fpu-cfg=name")" function
18847           attribute or pragma.
18848
18849       These additional -m options are available for the Altera Nios II ELF
18850       (bare-metal) target:
18851
18852       -mhal
18853           Link with HAL BSP.  This suppresses linking with the GCC-provided C
18854           runtime startup and termination code, and is typically used in
18855           conjunction with -msys-crt0= to specify the location of the
18856           alternate startup code provided by the HAL BSP.
18857
18858       -msmallc
18859           Link with a limited version of the C library, -lsmallc, rather than
18860           Newlib.
18861
18862       -msys-crt0=startfile
18863           startfile is the file name of the startfile (crt0) to use when
18864           linking.  This option is only useful in conjunction with -mhal.
18865
18866       -msys-lib=systemlib
18867           systemlib is the library name of the library that provides low-
18868           level system calls required by the C library, e.g. "read" and
18869           "write".  This option is typically used to link with a library
18870           provided by a HAL BSP.
18871
18872   Nvidia PTX Options
18873       These options are defined for Nvidia PTX:
18874
18875       -m32
18876       -m64
18877           Generate code for 32-bit or 64-bit ABI.
18878
18879       -mmainkernel
18880           Link in code for a __main kernel.  This is for stand-alone instead
18881           of offloading execution.
18882
18883       -moptimize
18884           Apply partitioned execution optimizations.  This is the default
18885           when any level of optimization is selected.
18886
18887       -msoft-stack
18888           Generate code that does not use ".local" memory directly for stack
18889           storage. Instead, a per-warp stack pointer is maintained
18890           explicitly. This enables variable-length stack allocation (with
18891           variable-length arrays or "alloca"), and when global memory is used
18892           for underlying storage, makes it possible to access automatic
18893           variables from other threads, or with atomic instructions. This
18894           code generation variant is used for OpenMP offloading, but the
18895           option is exposed on its own for the purpose of testing the
18896           compiler; to generate code suitable for linking into programs using
18897           OpenMP offloading, use option -mgomp.
18898
18899       -muniform-simt
18900           Switch to code generation variant that allows to execute all
18901           threads in each warp, while maintaining memory state and side
18902           effects as if only one thread in each warp was active outside of
18903           OpenMP SIMD regions.  All atomic operations and calls to runtime
18904           (malloc, free, vprintf) are conditionally executed (iff current
18905           lane index equals the master lane index), and the register being
18906           assigned is copied via a shuffle instruction from the master lane.
18907           Outside of SIMD regions lane 0 is the master; inside, each thread
18908           sees itself as the master.  Shared memory array "int __nvptx_uni[]"
18909           stores all-zeros or all-ones bitmasks for each warp, indicating
18910           current mode (0 outside of SIMD regions).  Each thread can bitwise-
18911           and the bitmask at position "tid.y" with current lane index to
18912           compute the master lane index.
18913
18914       -mgomp
18915           Generate code for use in OpenMP offloading: enables -msoft-stack
18916           and -muniform-simt options, and selects corresponding multilib
18917           variant.
18918
18919   PDP-11 Options
18920       These options are defined for the PDP-11:
18921
18922       -mfpu
18923           Use hardware FPP floating point.  This is the default.  (FIS
18924           floating point on the PDP-11/40 is not supported.)
18925
18926       -msoft-float
18927           Do not use hardware floating point.
18928
18929       -mac0
18930           Return floating-point results in ac0 (fr0 in Unix assembler
18931           syntax).
18932
18933       -mno-ac0
18934           Return floating-point results in memory.  This is the default.
18935
18936       -m40
18937           Generate code for a PDP-11/40.
18938
18939       -m45
18940           Generate code for a PDP-11/45.  This is the default.
18941
18942       -m10
18943           Generate code for a PDP-11/10.
18944
18945       -mbcopy-builtin
18946           Use inline "movmemhi" patterns for copying memory.  This is the
18947           default.
18948
18949       -mbcopy
18950           Do not use inline "movmemhi" patterns for copying memory.
18951
18952       -mint16
18953       -mno-int32
18954           Use 16-bit "int".  This is the default.
18955
18956       -mint32
18957       -mno-int16
18958           Use 32-bit "int".
18959
18960       -mfloat64
18961       -mno-float32
18962           Use 64-bit "float".  This is the default.
18963
18964       -mfloat32
18965       -mno-float64
18966           Use 32-bit "float".
18967
18968       -mabshi
18969           Use "abshi2" pattern.  This is the default.
18970
18971       -mno-abshi
18972           Do not use "abshi2" pattern.
18973
18974       -mbranch-expensive
18975           Pretend that branches are expensive.  This is for experimenting
18976           with code generation only.
18977
18978       -mbranch-cheap
18979           Do not pretend that branches are expensive.  This is the default.
18980
18981       -munix-asm
18982           Use Unix assembler syntax.  This is the default when configured for
18983           pdp11-*-bsd.
18984
18985       -mdec-asm
18986           Use DEC assembler syntax.  This is the default when configured for
18987           any PDP-11 target other than pdp11-*-bsd.
18988
18989   picoChip Options
18990       These -m options are defined for picoChip implementations:
18991
18992       -mae=ae_type
18993           Set the instruction set, register set, and instruction scheduling
18994           parameters for array element type ae_type.  Supported values for
18995           ae_type are ANY, MUL, and MAC.
18996
18997           -mae=ANY selects a completely generic AE type.  Code generated with
18998           this option runs on any of the other AE types.  The code is not as
18999           efficient as it would be if compiled for a specific AE type, and
19000           some types of operation (e.g., multiplication) do not work properly
19001           on all types of AE.
19002
19003           -mae=MUL selects a MUL AE type.  This is the most useful AE type
19004           for compiled code, and is the default.
19005
19006           -mae=MAC selects a DSP-style MAC AE.  Code compiled with this
19007           option may suffer from poor performance of byte (char)
19008           manipulation, since the DSP AE does not provide hardware support
19009           for byte load/stores.
19010
19011       -msymbol-as-address
19012           Enable the compiler to directly use a symbol name as an address in
19013           a load/store instruction, without first loading it into a register.
19014           Typically, the use of this option generates larger programs, which
19015           run faster than when the option isn't used.  However, the results
19016           vary from program to program, so it is left as a user option,
19017           rather than being permanently enabled.
19018
19019       -mno-inefficient-warnings
19020           Disables warnings about the generation of inefficient code.  These
19021           warnings can be generated, for example, when compiling code that
19022           performs byte-level memory operations on the MAC AE type.  The MAC
19023           AE has no hardware support for byte-level memory operations, so all
19024           byte load/stores must be synthesized from word load/store
19025           operations.  This is inefficient and a warning is generated to
19026           indicate that you should rewrite the code to avoid byte operations,
19027           or to target an AE type that has the necessary hardware support.
19028           This option disables these warnings.
19029
19030   PowerPC Options
19031       These are listed under
19032
19033   PowerPC SPE Options
19034       These -m options are defined for PowerPC SPE:
19035
19036       -mmfcrf
19037       -mno-mfcrf
19038       -mpopcntb
19039       -mno-popcntb
19040           You use these options to specify which instructions are available
19041           on the processor you are using.  The default value of these options
19042           is determined when configuring GCC.  Specifying the -mcpu=cpu_type
19043           overrides the specification of these options.  We recommend you use
19044           the -mcpu=cpu_type option rather than the options listed above.
19045
19046           The -mmfcrf option allows GCC to generate the move from condition
19047           register field instruction implemented on the POWER4 processor and
19048           other processors that support the PowerPC V2.01 architecture.  The
19049           -mpopcntb option allows GCC to generate the popcount and double-
19050           precision FP reciprocal estimate instruction implemented on the
19051           POWER5 processor and other processors that support the PowerPC
19052           V2.02 architecture.
19053
19054       -mcpu=cpu_type
19055           Set architecture type, register usage, and instruction scheduling
19056           parameters for machine type cpu_type.  Supported values for
19057           cpu_type are 8540, 8548, and native.
19058
19059           -mcpu=powerpc specifies pure 32-bit PowerPC (either endian), with
19060           an appropriate, generic processor model assumed for scheduling
19061           purposes.
19062
19063           Specifying native as cpu type detects and selects the architecture
19064           option that corresponds to the host processor of the system
19065           performing the compilation.  -mcpu=native has no effect if GCC does
19066           not recognize the processor.
19067
19068           The other options specify a specific processor.  Code generated
19069           under those options runs best on that processor, and may not run at
19070           all on others.
19071
19072           The -mcpu options automatically enable or disable the following
19073           options:
19074
19075           -mhard-float  -mmfcrf  -mmultiple -mpopcntb -mpopcntd
19076           -msingle-float -mdouble-float -mfloat128
19077
19078           The particular options set for any particular CPU varies between
19079           compiler versions, depending on what setting seems to produce
19080           optimal code for that CPU; it doesn't necessarily reflect the
19081           actual hardware's capabilities.  If you wish to set an individual
19082           option to a particular value, you may specify it after the -mcpu
19083           option, like -mcpu=8548.
19084
19085       -mtune=cpu_type
19086           Set the instruction scheduling parameters for machine type
19087           cpu_type, but do not set the architecture type or register usage,
19088           as -mcpu=cpu_type does.  The same values for cpu_type are used for
19089           -mtune as for -mcpu.  If both are specified, the code generated
19090           uses the architecture and registers set by -mcpu, but the
19091           scheduling parameters set by -mtune.
19092
19093       -msecure-plt
19094           Generate code that allows ld and ld.so to build executables and
19095           shared libraries with non-executable ".plt" and ".got" sections.
19096           This is a PowerPC 32-bit SYSV ABI option.
19097
19098       -mbss-plt
19099           Generate code that uses a BSS ".plt" section that ld.so fills in,
19100           and requires ".plt" and ".got" sections that are both writable and
19101           executable.  This is a PowerPC 32-bit SYSV ABI option.
19102
19103       -misel
19104       -mno-isel
19105           This switch enables or disables the generation of ISEL
19106           instructions.
19107
19108       -misel=yes/no
19109           This switch has been deprecated.  Use -misel and -mno-isel instead.
19110
19111       -mspe
19112       -mno-spe
19113           This switch enables or disables the generation of SPE simd
19114           instructions.
19115
19116       -mspe=yes/no
19117           This option has been deprecated.  Use -mspe and -mno-spe instead.
19118
19119       -mfloat128
19120       -mno-float128
19121           Enable/disable the __float128 keyword for IEEE 128-bit floating
19122           point and use either software emulation for IEEE 128-bit floating
19123           point or hardware instructions.
19124
19125       -mfloat-gprs=yes/single/double/no
19126       -mfloat-gprs
19127           This switch enables or disables the generation of floating-point
19128           operations on the general-purpose registers for architectures that
19129           support it.
19130
19131           The argument yes or single enables the use of single-precision
19132           floating-point operations.
19133
19134           The argument double enables the use of single and double-precision
19135           floating-point operations.
19136
19137           The argument no disables floating-point operations on the general-
19138           purpose registers.
19139
19140           This option is currently only available on the MPC854x.
19141
19142       -mfull-toc
19143       -mno-fp-in-toc
19144       -mno-sum-in-toc
19145       -mminimal-toc
19146           Modify generation of the TOC (Table Of Contents), which is created
19147           for every executable file.  The -mfull-toc option is selected by
19148           default.  In that case, GCC allocates at least one TOC entry for
19149           each unique non-automatic variable reference in your program.  GCC
19150           also places floating-point constants in the TOC.  However, only
19151           16,384 entries are available in the TOC.
19152
19153           If you receive a linker error message that saying you have
19154           overflowed the available TOC space, you can reduce the amount of
19155           TOC space used with the -mno-fp-in-toc and -mno-sum-in-toc options.
19156           -mno-fp-in-toc prevents GCC from putting floating-point constants
19157           in the TOC and -mno-sum-in-toc forces GCC to generate code to
19158           calculate the sum of an address and a constant at run time instead
19159           of putting that sum into the TOC.  You may specify one or both of
19160           these options.  Each causes GCC to produce very slightly slower and
19161           larger code at the expense of conserving TOC space.
19162
19163           If you still run out of space in the TOC even when you specify both
19164           of these options, specify -mminimal-toc instead.  This option
19165           causes GCC to make only one TOC entry for every file.  When you
19166           specify this option, GCC produces code that is slower and larger
19167           but which uses extremely little TOC space.  You may wish to use
19168           this option only on files that contain less frequently-executed
19169           code.
19170
19171       -maix32
19172           Disables the 64-bit ABI.  GCC defaults to -maix32.
19173
19174       -mxl-compat
19175       -mno-xl-compat
19176           Produce code that conforms more closely to IBM XL compiler
19177           semantics when using AIX-compatible ABI.  Pass floating-point
19178           arguments to prototyped functions beyond the register save area
19179           (RSA) on the stack in addition to argument FPRs.  Do not assume
19180           that most significant double in 128-bit long double value is
19181           properly rounded when comparing values and converting to double.
19182           Use XL symbol names for long double support routines.
19183
19184           The AIX calling convention was extended but not initially
19185           documented to handle an obscure K&R C case of calling a function
19186           that takes the address of its arguments with fewer arguments than
19187           declared.  IBM XL compilers access floating-point arguments that do
19188           not fit in the RSA from the stack when a subroutine is compiled
19189           without optimization.  Because always storing floating-point
19190           arguments on the stack is inefficient and rarely needed, this
19191           option is not enabled by default and only is necessary when calling
19192           subroutines compiled by IBM XL compilers without optimization.
19193
19194       -malign-natural
19195       -malign-power
19196           On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
19197           -malign-natural overrides the ABI-defined alignment of larger
19198           types, such as floating-point doubles, on their natural size-based
19199           boundary.  The option -malign-power instructs GCC to follow the
19200           ABI-specified alignment rules.  GCC defaults to the standard
19201           alignment defined in the ABI.
19202
19203           On 64-bit Darwin, natural alignment is the default, and
19204           -malign-power is not supported.
19205
19206       -msoft-float
19207       -mhard-float
19208           Generate code that does not use (uses) the floating-point register
19209           set.  Software floating-point emulation is provided if you use the
19210           -msoft-float option, and pass the option to GCC when linking.
19211
19212       -msingle-float
19213       -mdouble-float
19214           Generate code for single- or double-precision floating-point
19215           operations.  -mdouble-float implies -msingle-float.
19216
19217       -mmultiple
19218       -mno-multiple
19219           Generate code that uses (does not use) the load multiple word
19220           instructions and the store multiple word instructions.  These
19221           instructions are generated by default on POWER systems, and not
19222           generated on PowerPC systems.  Do not use -mmultiple on little-
19223           endian PowerPC systems, since those instructions do not work when
19224           the processor is in little-endian mode.  The exceptions are PPC740
19225           and PPC750 which permit these instructions in little-endian mode.
19226
19227       -mupdate
19228       -mno-update
19229           Generate code that uses (does not use) the load or store
19230           instructions that update the base register to the address of the
19231           calculated memory location.  These instructions are generated by
19232           default.  If you use -mno-update, there is a small window between
19233           the time that the stack pointer is updated and the address of the
19234           previous frame is stored, which means code that walks the stack
19235           frame across interrupts or signals may get corrupted data.
19236
19237       -mavoid-indexed-addresses
19238       -mno-avoid-indexed-addresses
19239           Generate code that tries to avoid (not avoid) the use of indexed
19240           load or store instructions. These instructions can incur a
19241           performance penalty on Power6 processors in certain situations,
19242           such as when stepping through large arrays that cross a 16M
19243           boundary.  This option is enabled by default when targeting Power6
19244           and disabled otherwise.
19245
19246       -mfused-madd
19247       -mno-fused-madd
19248           Generate code that uses (does not use) the floating-point multiply
19249           and accumulate instructions.  These instructions are generated by
19250           default if hardware floating point is used.  The machine-dependent
19251           -mfused-madd option is now mapped to the machine-independent
19252           -ffp-contract=fast option, and -mno-fused-madd is mapped to
19253           -ffp-contract=off.
19254
19255       -mno-strict-align
19256       -mstrict-align
19257           On System V.4 and embedded PowerPC systems do not (do) assume that
19258           unaligned memory references are handled by the system.
19259
19260       -mrelocatable
19261       -mno-relocatable
19262           Generate code that allows (does not allow) a static executable to
19263           be relocated to a different address at run time.  A simple embedded
19264           PowerPC system loader should relocate the entire contents of
19265           ".got2" and 4-byte locations listed in the ".fixup" section, a
19266           table of 32-bit addresses generated by this option.  For this to
19267           work, all objects linked together must be compiled with
19268           -mrelocatable or -mrelocatable-lib.  -mrelocatable code aligns the
19269           stack to an 8-byte boundary.
19270
19271       -mrelocatable-lib
19272       -mno-relocatable-lib
19273           Like -mrelocatable, -mrelocatable-lib generates a ".fixup" section
19274           to allow static executables to be relocated at run time, but
19275           -mrelocatable-lib does not use the smaller stack alignment of
19276           -mrelocatable.  Objects compiled with -mrelocatable-lib may be
19277           linked with objects compiled with any combination of the
19278           -mrelocatable options.
19279
19280       -mno-toc
19281       -mtoc
19282           On System V.4 and embedded PowerPC systems do not (do) assume that
19283           register 2 contains a pointer to a global area pointing to the
19284           addresses used in the program.
19285
19286       -mlittle
19287       -mlittle-endian
19288           On System V.4 and embedded PowerPC systems compile code for the
19289           processor in little-endian mode.  The -mlittle-endian option is the
19290           same as -mlittle.
19291
19292       -mbig
19293       -mbig-endian
19294           On System V.4 and embedded PowerPC systems compile code for the
19295           processor in big-endian mode.  The -mbig-endian option is the same
19296           as -mbig.
19297
19298       -mdynamic-no-pic
19299           On Darwin and Mac OS X systems, compile code so that it is not
19300           relocatable, but that its external references are relocatable.  The
19301           resulting code is suitable for applications, but not shared
19302           libraries.
19303
19304       -msingle-pic-base
19305           Treat the register used for PIC addressing as read-only, rather
19306           than loading it in the prologue for each function.  The runtime
19307           system is responsible for initializing this register with an
19308           appropriate value before execution begins.
19309
19310       -mprioritize-restricted-insns=priority
19311           This option controls the priority that is assigned to dispatch-slot
19312           restricted instructions during the second scheduling pass.  The
19313           argument priority takes the value 0, 1, or 2 to assign no, highest,
19314           or second-highest (respectively) priority to dispatch-slot
19315           restricted instructions.
19316
19317       -msched-costly-dep=dependence_type
19318           This option controls which dependences are considered costly by the
19319           target during instruction scheduling.  The argument dependence_type
19320           takes one of the following values:
19321
19322           no  No dependence is costly.
19323
19324           all All dependences are costly.
19325
19326           true_store_to_load
19327               A true dependence from store to load is costly.
19328
19329           store_to_load
19330               Any dependence from store to load is costly.
19331
19332           number
19333               Any dependence for which the latency is greater than or equal
19334               to number is costly.
19335
19336       -minsert-sched-nops=scheme
19337           This option controls which NOP insertion scheme is used during the
19338           second scheduling pass.  The argument scheme takes one of the
19339           following values:
19340
19341           no  Don't insert NOPs.
19342
19343           pad Pad with NOPs any dispatch group that has vacant issue slots,
19344               according to the scheduler's grouping.
19345
19346           regroup_exact
19347               Insert NOPs to force costly dependent insns into separate
19348               groups.  Insert exactly as many NOPs as needed to force an insn
19349               to a new group, according to the estimated processor grouping.
19350
19351           number
19352               Insert NOPs to force costly dependent insns into separate
19353               groups.  Insert number NOPs to force an insn to a new group.
19354
19355       -mcall-sysv
19356           On System V.4 and embedded PowerPC systems compile code using
19357           calling conventions that adhere to the March 1995 draft of the
19358           System V Application Binary Interface, PowerPC processor
19359           supplement.  This is the default unless you configured GCC using
19360           powerpc-*-eabiaix.
19361
19362       -mcall-sysv-eabi
19363       -mcall-eabi
19364           Specify both -mcall-sysv and -meabi options.
19365
19366       -mcall-sysv-noeabi
19367           Specify both -mcall-sysv and -mno-eabi options.
19368
19369       -mcall-aixdesc
19370           On System V.4 and embedded PowerPC systems compile code for the AIX
19371           operating system.
19372
19373       -mcall-linux
19374           On System V.4 and embedded PowerPC systems compile code for the
19375           Linux-based GNU system.
19376
19377       -mcall-freebsd
19378           On System V.4 and embedded PowerPC systems compile code for the
19379           FreeBSD operating system.
19380
19381       -mcall-netbsd
19382           On System V.4 and embedded PowerPC systems compile code for the
19383           NetBSD operating system.
19384
19385       -mcall-openbsd
19386           On System V.4 and embedded PowerPC systems compile code for the
19387           OpenBSD operating system.
19388
19389       -maix-struct-return
19390           Return all structures in memory (as specified by the AIX ABI).
19391
19392       -msvr4-struct-return
19393           Return structures smaller than 8 bytes in registers (as specified
19394           by the SVR4 ABI).
19395
19396       -mabi=abi-type
19397           Extend the current ABI with a particular extension, or remove such
19398           extension.  Valid values are altivec, no-altivec, spe, no-spe,
19399           ibmlongdouble, ieeelongdouble, elfv1, elfv2.
19400
19401       -mabi=spe
19402           Extend the current ABI with SPE ABI extensions.  This does not
19403           change the default ABI, instead it adds the SPE ABI extensions to
19404           the current ABI.
19405
19406       -mabi=no-spe
19407           Disable Book-E SPE ABI extensions for the current ABI.
19408
19409       -mabi=ibmlongdouble
19410           Change the current ABI to use IBM extended-precision long double.
19411           This is not likely to work if your system defaults to using IEEE
19412           extended-precision long double.  If you change the long double type
19413           from IEEE extended-precision, the compiler will issue a warning
19414           unless you use the -Wno-psabi option.  Requires -mlong-double-128
19415           to be enabled.
19416
19417       -mabi=ieeelongdouble
19418           Change the current ABI to use IEEE extended-precision long double.
19419           This is not likely to work if your system defaults to using IBM
19420           extended-precision long double.  If you change the long double type
19421           from IBM extended-precision, the compiler will issue a warning
19422           unless you use the -Wno-psabi option.  Requires -mlong-double-128
19423           to be enabled.
19424
19425       -mabi=elfv1
19426           Change the current ABI to use the ELFv1 ABI.  This is the default
19427           ABI for big-endian PowerPC 64-bit Linux.  Overriding the default
19428           ABI requires special system support and is likely to fail in
19429           spectacular ways.
19430
19431       -mabi=elfv2
19432           Change the current ABI to use the ELFv2 ABI.  This is the default
19433           ABI for little-endian PowerPC 64-bit Linux.  Overriding the default
19434           ABI requires special system support and is likely to fail in
19435           spectacular ways.
19436
19437       -mgnu-attribute
19438       -mno-gnu-attribute
19439           Emit .gnu_attribute assembly directives to set tag/value pairs in a
19440           .gnu.attributes section that specify ABI variations in function
19441           parameters or return values.
19442
19443       -mprototype
19444       -mno-prototype
19445           On System V.4 and embedded PowerPC systems assume that all calls to
19446           variable argument functions are properly prototyped.  Otherwise,
19447           the compiler must insert an instruction before every non-prototyped
19448           call to set or clear bit 6 of the condition code register ("CR") to
19449           indicate whether floating-point values are passed in the floating-
19450           point registers in case the function takes variable arguments.
19451           With -mprototype, only calls to prototyped variable argument
19452           functions set or clear the bit.
19453
19454       -msim
19455           On embedded PowerPC systems, assume that the startup module is
19456           called sim-crt0.o and that the standard C libraries are libsim.a
19457           and libc.a.  This is the default for powerpc-*-eabisim
19458           configurations.
19459
19460       -mmvme
19461           On embedded PowerPC systems, assume that the startup module is
19462           called crt0.o and the standard C libraries are libmvme.a and
19463           libc.a.
19464
19465       -mads
19466           On embedded PowerPC systems, assume that the startup module is
19467           called crt0.o and the standard C libraries are libads.a and libc.a.
19468
19469       -myellowknife
19470           On embedded PowerPC systems, assume that the startup module is
19471           called crt0.o and the standard C libraries are libyk.a and libc.a.
19472
19473       -mvxworks
19474           On System V.4 and embedded PowerPC systems, specify that you are
19475           compiling for a VxWorks system.
19476
19477       -memb
19478           On embedded PowerPC systems, set the "PPC_EMB" bit in the ELF flags
19479           header to indicate that eabi extended relocations are used.
19480
19481       -meabi
19482       -mno-eabi
19483           On System V.4 and embedded PowerPC systems do (do not) adhere to
19484           the Embedded Applications Binary Interface (EABI), which is a set
19485           of modifications to the System V.4 specifications.  Selecting
19486           -meabi means that the stack is aligned to an 8-byte boundary, a
19487           function "__eabi" is called from "main" to set up the EABI
19488           environment, and the -msdata option can use both "r2" and "r13" to
19489           point to two separate small data areas.  Selecting -mno-eabi means
19490           that the stack is aligned to a 16-byte boundary, no EABI
19491           initialization function is called from "main", and the -msdata
19492           option only uses "r13" to point to a single small data area.  The
19493           -meabi option is on by default if you configured GCC using one of
19494           the powerpc*-*-eabi* options.
19495
19496       -msdata=eabi
19497           On System V.4 and embedded PowerPC systems, put small initialized
19498           "const" global and static data in the ".sdata2" section, which is
19499           pointed to by register "r2".  Put small initialized non-"const"
19500           global and static data in the ".sdata" section, which is pointed to
19501           by register "r13".  Put small uninitialized global and static data
19502           in the ".sbss" section, which is adjacent to the ".sdata" section.
19503           The -msdata=eabi option is incompatible with the -mrelocatable
19504           option.  The -msdata=eabi option also sets the -memb option.
19505
19506       -msdata=sysv
19507           On System V.4 and embedded PowerPC systems, put small global and
19508           static data in the ".sdata" section, which is pointed to by
19509           register "r13".  Put small uninitialized global and static data in
19510           the ".sbss" section, which is adjacent to the ".sdata" section.
19511           The -msdata=sysv option is incompatible with the -mrelocatable
19512           option.
19513
19514       -msdata=default
19515       -msdata
19516           On System V.4 and embedded PowerPC systems, if -meabi is used,
19517           compile code the same as -msdata=eabi, otherwise compile code the
19518           same as -msdata=sysv.
19519
19520       -msdata=data
19521           On System V.4 and embedded PowerPC systems, put small global data
19522           in the ".sdata" section.  Put small uninitialized global data in
19523           the ".sbss" section.  Do not use register "r13" to address small
19524           data however.  This is the default behavior unless other -msdata
19525           options are used.
19526
19527       -msdata=none
19528       -mno-sdata
19529           On embedded PowerPC systems, put all initialized global and static
19530           data in the ".data" section, and all uninitialized data in the
19531           ".bss" section.
19532
19533       -mblock-move-inline-limit=num
19534           Inline all block moves (such as calls to "memcpy" or structure
19535           copies) less than or equal to num bytes.  The minimum value for num
19536           is 32 bytes on 32-bit targets and 64 bytes on 64-bit targets.  The
19537           default value is target-specific.
19538
19539       -G num
19540           On embedded PowerPC systems, put global and static items less than
19541           or equal to num bytes into the small data or BSS sections instead
19542           of the normal data or BSS section.  By default, num is 8.  The -G
19543           num switch is also passed to the linker.  All modules should be
19544           compiled with the same -G num value.
19545
19546       -mregnames
19547       -mno-regnames
19548           On System V.4 and embedded PowerPC systems do (do not) emit
19549           register names in the assembly language output using symbolic
19550           forms.
19551
19552       -mlongcall
19553       -mno-longcall
19554           By default assume that all calls are far away so that a longer and
19555           more expensive calling sequence is required.  This is required for
19556           calls farther than 32 megabytes (33,554,432 bytes) from the current
19557           location.  A short call is generated if the compiler knows the call
19558           cannot be that far away.  This setting can be overridden by the
19559           "shortcall" function attribute, or by "#pragma longcall(0)".
19560
19561           Some linkers are capable of detecting out-of-range calls and
19562           generating glue code on the fly.  On these systems, long calls are
19563           unnecessary and generate slower code.  As of this writing, the AIX
19564           linker can do this, as can the GNU linker for PowerPC/64.  It is
19565           planned to add this feature to the GNU linker for 32-bit PowerPC
19566           systems as well.
19567
19568           In the future, GCC may ignore all longcall specifications when the
19569           linker is known to generate glue.
19570
19571       -mtls-markers
19572       -mno-tls-markers
19573           Mark (do not mark) calls to "__tls_get_addr" with a relocation
19574           specifying the function argument.  The relocation allows the linker
19575           to reliably associate function call with argument setup
19576           instructions for TLS optimization, which in turn allows GCC to
19577           better schedule the sequence.
19578
19579       -mrecip
19580       -mno-recip
19581           This option enables use of the reciprocal estimate and reciprocal
19582           square root estimate instructions with additional Newton-Raphson
19583           steps to increase precision instead of doing a divide or square
19584           root and divide for floating-point arguments.  You should use the
19585           -ffast-math option when using -mrecip (or at least
19586           -funsafe-math-optimizations, -ffinite-math-only, -freciprocal-math
19587           and -fno-trapping-math).  Note that while the throughput of the
19588           sequence is generally higher than the throughput of the non-
19589           reciprocal instruction, the precision of the sequence can be
19590           decreased by up to 2 ulp (i.e. the inverse of 1.0 equals
19591           0.99999994) for reciprocal square roots.
19592
19593       -mrecip=opt
19594           This option controls which reciprocal estimate instructions may be
19595           used.  opt is a comma-separated list of options, which may be
19596           preceded by a "!" to invert the option:
19597
19598           all Enable all estimate instructions.
19599
19600           default
19601               Enable the default instructions, equivalent to -mrecip.
19602
19603           none
19604               Disable all estimate instructions, equivalent to -mno-recip.
19605
19606           div Enable the reciprocal approximation instructions for both
19607               single and double precision.
19608
19609           divf
19610               Enable the single-precision reciprocal approximation
19611               instructions.
19612
19613           divd
19614               Enable the double-precision reciprocal approximation
19615               instructions.
19616
19617           rsqrt
19618               Enable the reciprocal square root approximation instructions
19619               for both single and double precision.
19620
19621           rsqrtf
19622               Enable the single-precision reciprocal square root
19623               approximation instructions.
19624
19625           rsqrtd
19626               Enable the double-precision reciprocal square root
19627               approximation instructions.
19628
19629           So, for example, -mrecip=all,!rsqrtd enables all of the reciprocal
19630           estimate instructions, except for the "FRSQRTE", "XSRSQRTEDP", and
19631           "XVRSQRTEDP" instructions which handle the double-precision
19632           reciprocal square root calculations.
19633
19634       -mrecip-precision
19635       -mno-recip-precision
19636           Assume (do not assume) that the reciprocal estimate instructions
19637           provide higher-precision estimates than is mandated by the PowerPC
19638           ABI.  Selecting -mcpu=power6, -mcpu=power7 or -mcpu=power8
19639           automatically selects -mrecip-precision.  The double-precision
19640           square root estimate instructions are not generated by default on
19641           low-precision machines, since they do not provide an estimate that
19642           converges after three steps.
19643
19644       -mpointers-to-nested-functions
19645       -mno-pointers-to-nested-functions
19646           Generate (do not generate) code to load up the static chain
19647           register ("r11") when calling through a pointer on AIX and 64-bit
19648           Linux systems where a function pointer points to a 3-word
19649           descriptor giving the function address, TOC value to be loaded in
19650           register "r2", and static chain value to be loaded in register
19651           "r11".  The -mpointers-to-nested-functions is on by default.  You
19652           cannot call through pointers to nested functions or pointers to
19653           functions compiled in other languages that use the static chain if
19654           you use -mno-pointers-to-nested-functions.
19655
19656       -msave-toc-indirect
19657       -mno-save-toc-indirect
19658           Generate (do not generate) code to save the TOC value in the
19659           reserved stack location in the function prologue if the function
19660           calls through a pointer on AIX and 64-bit Linux systems.  If the
19661           TOC value is not saved in the prologue, it is saved just before the
19662           call through the pointer.  The -mno-save-toc-indirect option is the
19663           default.
19664
19665       -mcompat-align-parm
19666       -mno-compat-align-parm
19667           Generate (do not generate) code to pass structure parameters with a
19668           maximum alignment of 64 bits, for compatibility with older versions
19669           of GCC.
19670
19671           Older versions of GCC (prior to 4.9.0) incorrectly did not align a
19672           structure parameter on a 128-bit boundary when that structure
19673           contained a member requiring 128-bit alignment.  This is corrected
19674           in more recent versions of GCC.  This option may be used to
19675           generate code that is compatible with functions compiled with older
19676           versions of GCC.
19677
19678           The -mno-compat-align-parm option is the default.
19679
19680       -mstack-protector-guard=guard
19681       -mstack-protector-guard-reg=reg
19682       -mstack-protector-guard-offset=offset
19683       -mstack-protector-guard-symbol=symbol
19684           Generate stack protection code using canary at guard.  Supported
19685           locations are global for global canary or tls for per-thread canary
19686           in the TLS block (the default with GNU libc version 2.4 or later).
19687
19688           With the latter choice the options -mstack-protector-guard-reg=reg
19689           and -mstack-protector-guard-offset=offset furthermore specify which
19690           register to use as base register for reading the canary, and from
19691           what offset from that base register. The default for those is as
19692           specified in the relevant ABI.
19693           -mstack-protector-guard-symbol=symbol overrides the offset with a
19694           symbol reference to a canary in the TLS block.
19695
19696   RISC-V Options
19697       These command-line options are defined for RISC-V targets:
19698
19699       -mbranch-cost=n
19700           Set the cost of branches to roughly n instructions.
19701
19702       -mplt
19703       -mno-plt
19704           When generating PIC code, do or don't allow the use of PLTs.
19705           Ignored for non-PIC.  The default is -mplt.
19706
19707       -mabi=ABI-string
19708           Specify integer and floating-point calling convention.  ABI-string
19709           contains two parts: the size of integer types and the registers
19710           used for floating-point types.  For example -march=rv64ifd
19711           -mabi=lp64d means that long and pointers are 64-bit (implicitly
19712           defining int to be 32-bit), and that floating-point values up to 64
19713           bits wide are passed in F registers.  Contrast this with
19714           -march=rv64ifd -mabi=lp64f, which still allows the compiler to
19715           generate code that uses the F and D extensions but only allows
19716           floating-point values up to 32 bits long to be passed in registers;
19717           or -march=rv64ifd -mabi=lp64, in which no floating-point arguments
19718           will be passed in registers.
19719
19720           The default for this argument is system dependent, users who want a
19721           specific calling convention should specify one explicitly.  The
19722           valid calling conventions are: ilp32, ilp32f, ilp32d, lp64, lp64f,
19723           and lp64d.  Some calling conventions are impossible to implement on
19724           some ISAs: for example, -march=rv32if -mabi=ilp32d is invalid
19725           because the ABI requires 64-bit values be passed in F registers,
19726           but F registers are only 32 bits wide.
19727
19728       -mfdiv
19729       -mno-fdiv
19730           Do or don't use hardware floating-point divide and square root
19731           instructions.  This requires the F or D extensions for floating-
19732           point registers.  The default is to use them if the specified
19733           architecture has these instructions.
19734
19735       -mdiv
19736       -mno-div
19737           Do or don't use hardware instructions for integer division.  This
19738           requires the M extension.  The default is to use them if the
19739           specified architecture has these instructions.
19740
19741       -march=ISA-string
19742           Generate code for given RISC-V ISA (e.g. rv64im).  ISA strings must
19743           be lower-case.  Examples include rv64i, rv32g, and rv32imaf.
19744
19745       -mtune=processor-string
19746           Optimize the output for the given processor, specified by
19747           microarchitecture name.
19748
19749       -mpreferred-stack-boundary=num
19750           Attempt to keep the stack boundary aligned to a 2 raised to num
19751           byte boundary.  If -mpreferred-stack-boundary is not specified, the
19752           default is 4 (16 bytes or 128-bits).
19753
19754           Warning: If you use this switch, then you must build all modules
19755           with the same value, including any libraries.  This includes the
19756           system libraries and startup modules.
19757
19758       -msmall-data-limit=n
19759           Put global and static data smaller than n bytes into a special
19760           section (on some targets).
19761
19762       -msave-restore
19763       -mno-save-restore
19764           Do or don't use smaller but slower prologue and epilogue code that
19765           uses library function calls.  The default is to use fast inline
19766           prologues and epilogues.
19767
19768       -mstrict-align
19769       -mno-strict-align
19770           Do not or do generate unaligned memory accesses.  The default is
19771           set depending on whether the processor we are optimizing for
19772           supports fast unaligned access or not.
19773
19774       -mcmodel=medlow
19775           Generate code for the medium-low code model. The program and its
19776           statically defined symbols must lie within a single 2 GiB address
19777           range and must lie between absolute addresses -2 GiB and +2 GiB.
19778           Programs can be statically or dynamically linked. This is the
19779           default code model.
19780
19781       -mcmodel=medany
19782           Generate code for the medium-any code model. The program and its
19783           statically defined symbols must be within any single 2 GiB address
19784           range. Programs can be statically or dynamically linked.
19785
19786       -mexplicit-relocs
19787       -mno-exlicit-relocs
19788           Use or do not use assembler relocation operators when dealing with
19789           symbolic addresses.  The alternative is to use assembler macros
19790           instead, which may limit optimization.
19791
19792       -mrelax
19793       -mno-relax
19794           Take advantage of linker relaxations to reduce the number of
19795           instructions required to materialize symbol addresses. The default
19796           is to take advantage of linker relaxations.
19797
19798   RL78 Options
19799       -msim
19800           Links in additional target libraries to support operation within a
19801           simulator.
19802
19803       -mmul=none
19804       -mmul=g10
19805       -mmul=g13
19806       -mmul=g14
19807       -mmul=rl78
19808           Specifies the type of hardware multiplication and division support
19809           to be used.  The simplest is "none", which uses software for both
19810           multiplication and division.  This is the default.  The "g13" value
19811           is for the hardware multiply/divide peripheral found on the
19812           RL78/G13 (S2 core) targets.  The "g14" value selects the use of the
19813           multiplication and division instructions supported by the RL78/G14
19814           (S3 core) parts.  The value "rl78" is an alias for "g14" and the
19815           value "mg10" is an alias for "none".
19816
19817           In addition a C preprocessor macro is defined, based upon the
19818           setting of this option.  Possible values are: "__RL78_MUL_NONE__",
19819           "__RL78_MUL_G13__" or "__RL78_MUL_G14__".
19820
19821       -mcpu=g10
19822       -mcpu=g13
19823       -mcpu=g14
19824       -mcpu=rl78
19825           Specifies the RL78 core to target.  The default is the G14 core,
19826           also known as an S3 core or just RL78.  The G13 or S2 core does not
19827           have multiply or divide instructions, instead it uses a hardware
19828           peripheral for these operations.  The G10 or S1 core does not have
19829           register banks, so it uses a different calling convention.
19830
19831           If this option is set it also selects the type of hardware multiply
19832           support to use, unless this is overridden by an explicit -mmul=none
19833           option on the command line.  Thus specifying -mcpu=g13 enables the
19834           use of the G13 hardware multiply peripheral and specifying
19835           -mcpu=g10 disables the use of hardware multiplications altogether.
19836
19837           Note, although the RL78/G14 core is the default target, specifying
19838           -mcpu=g14 or -mcpu=rl78 on the command line does change the
19839           behavior of the toolchain since it also enables G14 hardware
19840           multiply support.  If these options are not specified on the
19841           command line then software multiplication routines will be used
19842           even though the code targets the RL78 core.  This is for backwards
19843           compatibility with older toolchains which did not have hardware
19844           multiply and divide support.
19845
19846           In addition a C preprocessor macro is defined, based upon the
19847           setting of this option.  Possible values are: "__RL78_G10__",
19848           "__RL78_G13__" or "__RL78_G14__".
19849
19850       -mg10
19851       -mg13
19852       -mg14
19853       -mrl78
19854           These are aliases for the corresponding -mcpu= option.  They are
19855           provided for backwards compatibility.
19856
19857       -mallregs
19858           Allow the compiler to use all of the available registers.  By
19859           default registers "r24..r31" are reserved for use in interrupt
19860           handlers.  With this option enabled these registers can be used in
19861           ordinary functions as well.
19862
19863       -m64bit-doubles
19864       -m32bit-doubles
19865           Make the "double" data type be 64 bits (-m64bit-doubles) or 32 bits
19866           (-m32bit-doubles) in size.  The default is -m32bit-doubles.
19867
19868       -msave-mduc-in-interrupts
19869       -mno-save-mduc-in-interrupts
19870           Specifies that interrupt handler functions should preserve the MDUC
19871           registers.  This is only necessary if normal code might use the
19872           MDUC registers, for example because it performs multiplication and
19873           division operations.  The default is to ignore the MDUC registers
19874           as this makes the interrupt handlers faster.  The target option
19875           -mg13 needs to be passed for this to work as this feature is only
19876           available on the G13 target (S2 core).  The MDUC registers will
19877           only be saved if the interrupt handler performs a multiplication or
19878           division operation or it calls another function.
19879
19880   IBM RS/6000 and PowerPC Options
19881       These -m options are defined for the IBM RS/6000 and PowerPC:
19882
19883       -mpowerpc-gpopt
19884       -mno-powerpc-gpopt
19885       -mpowerpc-gfxopt
19886       -mno-powerpc-gfxopt
19887       -mpowerpc64
19888       -mno-powerpc64
19889       -mmfcrf
19890       -mno-mfcrf
19891       -mpopcntb
19892       -mno-popcntb
19893       -mpopcntd
19894       -mno-popcntd
19895       -mfprnd
19896       -mno-fprnd
19897       -mcmpb
19898       -mno-cmpb
19899       -mmfpgpr
19900       -mno-mfpgpr
19901       -mhard-dfp
19902       -mno-hard-dfp
19903           You use these options to specify which instructions are available
19904           on the processor you are using.  The default value of these options
19905           is determined when configuring GCC.  Specifying the -mcpu=cpu_type
19906           overrides the specification of these options.  We recommend you use
19907           the -mcpu=cpu_type option rather than the options listed above.
19908
19909           Specifying -mpowerpc-gpopt allows GCC to use the optional PowerPC
19910           architecture instructions in the General Purpose group, including
19911           floating-point square root.  Specifying -mpowerpc-gfxopt allows GCC
19912           to use the optional PowerPC architecture instructions in the
19913           Graphics group, including floating-point select.
19914
19915           The -mmfcrf option allows GCC to generate the move from condition
19916           register field instruction implemented on the POWER4 processor and
19917           other processors that support the PowerPC V2.01 architecture.  The
19918           -mpopcntb option allows GCC to generate the popcount and double-
19919           precision FP reciprocal estimate instruction implemented on the
19920           POWER5 processor and other processors that support the PowerPC
19921           V2.02 architecture.  The -mpopcntd option allows GCC to generate
19922           the popcount instruction implemented on the POWER7 processor and
19923           other processors that support the PowerPC V2.06 architecture.  The
19924           -mfprnd option allows GCC to generate the FP round to integer
19925           instructions implemented on the POWER5+ processor and other
19926           processors that support the PowerPC V2.03 architecture.  The -mcmpb
19927           option allows GCC to generate the compare bytes instruction
19928           implemented on the POWER6 processor and other processors that
19929           support the PowerPC V2.05 architecture.  The -mmfpgpr option allows
19930           GCC to generate the FP move to/from general-purpose register
19931           instructions implemented on the POWER6X processor and other
19932           processors that support the extended PowerPC V2.05 architecture.
19933           The -mhard-dfp option allows GCC to generate the decimal floating-
19934           point instructions implemented on some POWER processors.
19935
19936           The -mpowerpc64 option allows GCC to generate the additional 64-bit
19937           instructions that are found in the full PowerPC64 architecture and
19938           to treat GPRs as 64-bit, doubleword quantities.  GCC defaults to
19939           -mno-powerpc64.
19940
19941       -mcpu=cpu_type
19942           Set architecture type, register usage, and instruction scheduling
19943           parameters for machine type cpu_type.  Supported values for
19944           cpu_type are 401, 403, 405, 405fp, 440, 440fp, 464, 464fp, 476,
19945           476fp, 505, 601, 602, 603, 603e, 604, 604e, 620, 630, 740, 7400,
19946           7450, 750, 801, 821, 823, 860, 970, 8540, a2, e300c2, e300c3,
19947           e500mc, e500mc64, e5500, e6500, ec603e, G3, G4, G5, titan, power3,
19948           power4, power5, power5+, power6, power6x, power7, power8, power9,
19949           powerpc, powerpc64, powerpc64le, rs64, and native.
19950
19951           -mcpu=powerpc, -mcpu=powerpc64, and -mcpu=powerpc64le specify pure
19952           32-bit PowerPC (either endian), 64-bit big endian PowerPC and
19953           64-bit little endian PowerPC architecture machine types, with an
19954           appropriate, generic processor model assumed for scheduling
19955           purposes.
19956
19957           Specifying native as cpu type detects and selects the architecture
19958           option that corresponds to the host processor of the system
19959           performing the compilation.  -mcpu=native has no effect if GCC does
19960           not recognize the processor.
19961
19962           The other options specify a specific processor.  Code generated
19963           under those options runs best on that processor, and may not run at
19964           all on others.
19965
19966           The -mcpu options automatically enable or disable the following
19967           options:
19968
19969           -maltivec  -mfprnd  -mhard-float  -mmfcrf  -mmultiple -mpopcntb
19970           -mpopcntd  -mpowerpc64 -mpowerpc-gpopt  -mpowerpc-gfxopt
19971           -msingle-float -mdouble-float -msimple-fpu  -mmulhw  -mdlmzb
19972           -mmfpgpr -mvsx -mcrypto -mhtm -mpower8-fusion -mpower8-vector
19973           -mquad-memory -mquad-memory-atomic -mfloat128 -mfloat128-hardware
19974
19975           The particular options set for any particular CPU varies between
19976           compiler versions, depending on what setting seems to produce
19977           optimal code for that CPU; it doesn't necessarily reflect the
19978           actual hardware's capabilities.  If you wish to set an individual
19979           option to a particular value, you may specify it after the -mcpu
19980           option, like -mcpu=970 -mno-altivec.
19981
19982           On AIX, the -maltivec and -mpowerpc64 options are not enabled or
19983           disabled by the -mcpu option at present because AIX does not have
19984           full support for these options.  You may still enable or disable
19985           them individually if you're sure it'll work in your environment.
19986
19987       -mtune=cpu_type
19988           Set the instruction scheduling parameters for machine type
19989           cpu_type, but do not set the architecture type or register usage,
19990           as -mcpu=cpu_type does.  The same values for cpu_type are used for
19991           -mtune as for -mcpu.  If both are specified, the code generated
19992           uses the architecture and registers set by -mcpu, but the
19993           scheduling parameters set by -mtune.
19994
19995       -mcmodel=small
19996           Generate PowerPC64 code for the small model: The TOC is limited to
19997           64k.
19998
19999       -mcmodel=medium
20000           Generate PowerPC64 code for the medium model: The TOC and other
20001           static data may be up to a total of 4G in size.  This is the
20002           default for 64-bit Linux.
20003
20004       -mcmodel=large
20005           Generate PowerPC64 code for the large model: The TOC may be up to
20006           4G in size.  Other data and code is only limited by the 64-bit
20007           address space.
20008
20009       -maltivec
20010       -mno-altivec
20011           Generate code that uses (does not use) AltiVec instructions, and
20012           also enable the use of built-in functions that allow more direct
20013           access to the AltiVec instruction set.  You may also need to set
20014           -mabi=altivec to adjust the current ABI with AltiVec ABI
20015           enhancements.
20016
20017           When -maltivec is used, rather than -maltivec=le or -maltivec=be,
20018           the element order for AltiVec intrinsics such as "vec_splat",
20019           "vec_extract", and "vec_insert" match array element order
20020           corresponding to the endianness of the target.  That is, element
20021           zero identifies the leftmost element in a vector register when
20022           targeting a big-endian platform, and identifies the rightmost
20023           element in a vector register when targeting a little-endian
20024           platform.
20025
20026       -maltivec=be
20027           Generate AltiVec instructions using big-endian element order,
20028           regardless of whether the target is big- or little-endian.  This is
20029           the default when targeting a big-endian platform.  Using this
20030           option is currently deprecated.  Support for this feature will be
20031           removed in GCC 9.
20032
20033           The element order is used to interpret element numbers in AltiVec
20034           intrinsics such as "vec_splat", "vec_extract", and "vec_insert".
20035           By default, these match array element order corresponding to the
20036           endianness for the target.
20037
20038       -maltivec=le
20039           Generate AltiVec instructions using little-endian element order,
20040           regardless of whether the target is big- or little-endian.  This is
20041           the default when targeting a little-endian platform.  This option
20042           is currently ignored when targeting a big-endian platform.
20043
20044           The element order is used to interpret element numbers in AltiVec
20045           intrinsics such as "vec_splat", "vec_extract", and "vec_insert".
20046           By default, these match array element order corresponding to the
20047           endianness for the target.
20048
20049       -mvrsave
20050       -mno-vrsave
20051           Generate VRSAVE instructions when generating AltiVec code.
20052
20053       -msecure-plt
20054           Generate code that allows ld and ld.so to build executables and
20055           shared libraries with non-executable ".plt" and ".got" sections.
20056           This is a PowerPC 32-bit SYSV ABI option.
20057
20058       -mbss-plt
20059           Generate code that uses a BSS ".plt" section that ld.so fills in,
20060           and requires ".plt" and ".got" sections that are both writable and
20061           executable.  This is a PowerPC 32-bit SYSV ABI option.
20062
20063       -misel
20064       -mno-isel
20065           This switch enables or disables the generation of ISEL
20066           instructions.
20067
20068       -misel=yes/no
20069           This switch has been deprecated.  Use -misel and -mno-isel instead.
20070
20071       -mpaired
20072       -mno-paired
20073           This switch enables or disables the generation of PAIRED simd
20074           instructions.
20075
20076       -mvsx
20077       -mno-vsx
20078           Generate code that uses (does not use) vector/scalar (VSX)
20079           instructions, and also enable the use of built-in functions that
20080           allow more direct access to the VSX instruction set.
20081
20082       -mcrypto
20083       -mno-crypto
20084           Enable the use (disable) of the built-in functions that allow
20085           direct access to the cryptographic instructions that were added in
20086           version 2.07 of the PowerPC ISA.
20087
20088       -mhtm
20089       -mno-htm
20090           Enable (disable) the use of the built-in functions that allow
20091           direct access to the Hardware Transactional Memory (HTM)
20092           instructions that were added in version 2.07 of the PowerPC ISA.
20093
20094       -mpower8-fusion
20095       -mno-power8-fusion
20096           Generate code that keeps (does not keeps) some integer operations
20097           adjacent so that the instructions can be fused together on power8
20098           and later processors.
20099
20100       -mpower8-vector
20101       -mno-power8-vector
20102           Generate code that uses (does not use) the vector and scalar
20103           instructions that were added in version 2.07 of the PowerPC ISA.
20104           Also enable the use of built-in functions that allow more direct
20105           access to the vector instructions.
20106
20107       -mquad-memory
20108       -mno-quad-memory
20109           Generate code that uses (does not use) the non-atomic quad word
20110           memory instructions.  The -mquad-memory option requires use of
20111           64-bit mode.
20112
20113       -mquad-memory-atomic
20114       -mno-quad-memory-atomic
20115           Generate code that uses (does not use) the atomic quad word memory
20116           instructions.  The -mquad-memory-atomic option requires use of
20117           64-bit mode.
20118
20119       -mfloat128
20120       -mno-float128
20121           Enable/disable the __float128 keyword for IEEE 128-bit floating
20122           point and use either software emulation for IEEE 128-bit floating
20123           point or hardware instructions.
20124
20125           The VSX instruction set (-mvsx, -mcpu=power7, -mcpu=power8), or
20126           -mcpu=power9 must be enabled to use the IEEE 128-bit floating point
20127           support.  The IEEE 128-bit floating point support only works on
20128           PowerPC Linux systems.
20129
20130           The default for -mfloat128 is enabled on PowerPC Linux systems
20131           using the VSX instruction set, and disabled on other systems.
20132
20133           If you use the ISA 3.0 instruction set (-mpower9-vector or
20134           -mcpu=power9) on a 64-bit system, the IEEE 128-bit floating point
20135           support will also enable the generation of ISA 3.0 IEEE 128-bit
20136           floating point instructions.  Otherwise, if you do not specify to
20137           generate ISA 3.0 instructions or you are targeting a 32-bit big
20138           endian system, IEEE 128-bit floating point will be done with
20139           software emulation.
20140
20141       -mfloat128-hardware
20142       -mno-float128-hardware
20143           Enable/disable using ISA 3.0 hardware instructions to support the
20144           __float128 data type.
20145
20146           The default for -mfloat128-hardware is enabled on PowerPC Linux
20147           systems using the ISA 3.0 instruction set, and disabled on other
20148           systems.
20149
20150       -m32
20151       -m64
20152           Generate code for 32-bit or 64-bit environments of Darwin and SVR4
20153           targets (including GNU/Linux).  The 32-bit environment sets int,
20154           long and pointer to 32 bits and generates code that runs on any
20155           PowerPC variant.  The 64-bit environment sets int to 32 bits and
20156           long and pointer to 64 bits, and generates code for PowerPC64, as
20157           for -mpowerpc64.
20158
20159       -mfull-toc
20160       -mno-fp-in-toc
20161       -mno-sum-in-toc
20162       -mminimal-toc
20163           Modify generation of the TOC (Table Of Contents), which is created
20164           for every executable file.  The -mfull-toc option is selected by
20165           default.  In that case, GCC allocates at least one TOC entry for
20166           each unique non-automatic variable reference in your program.  GCC
20167           also places floating-point constants in the TOC.  However, only
20168           16,384 entries are available in the TOC.
20169
20170           If you receive a linker error message that saying you have
20171           overflowed the available TOC space, you can reduce the amount of
20172           TOC space used with the -mno-fp-in-toc and -mno-sum-in-toc options.
20173           -mno-fp-in-toc prevents GCC from putting floating-point constants
20174           in the TOC and -mno-sum-in-toc forces GCC to generate code to
20175           calculate the sum of an address and a constant at run time instead
20176           of putting that sum into the TOC.  You may specify one or both of
20177           these options.  Each causes GCC to produce very slightly slower and
20178           larger code at the expense of conserving TOC space.
20179
20180           If you still run out of space in the TOC even when you specify both
20181           of these options, specify -mminimal-toc instead.  This option
20182           causes GCC to make only one TOC entry for every file.  When you
20183           specify this option, GCC produces code that is slower and larger
20184           but which uses extremely little TOC space.  You may wish to use
20185           this option only on files that contain less frequently-executed
20186           code.
20187
20188       -maix64
20189       -maix32
20190           Enable 64-bit AIX ABI and calling convention: 64-bit pointers,
20191           64-bit "long" type, and the infrastructure needed to support them.
20192           Specifying -maix64 implies -mpowerpc64, while -maix32 disables the
20193           64-bit ABI and implies -mno-powerpc64.  GCC defaults to -maix32.
20194
20195       -mxl-compat
20196       -mno-xl-compat
20197           Produce code that conforms more closely to IBM XL compiler
20198           semantics when using AIX-compatible ABI.  Pass floating-point
20199           arguments to prototyped functions beyond the register save area
20200           (RSA) on the stack in addition to argument FPRs.  Do not assume
20201           that most significant double in 128-bit long double value is
20202           properly rounded when comparing values and converting to double.
20203           Use XL symbol names for long double support routines.
20204
20205           The AIX calling convention was extended but not initially
20206           documented to handle an obscure K&R C case of calling a function
20207           that takes the address of its arguments with fewer arguments than
20208           declared.  IBM XL compilers access floating-point arguments that do
20209           not fit in the RSA from the stack when a subroutine is compiled
20210           without optimization.  Because always storing floating-point
20211           arguments on the stack is inefficient and rarely needed, this
20212           option is not enabled by default and only is necessary when calling
20213           subroutines compiled by IBM XL compilers without optimization.
20214
20215       -mpe
20216           Support IBM RS/6000 SP Parallel Environment (PE).  Link an
20217           application written to use message passing with special startup
20218           code to enable the application to run.  The system must have PE
20219           installed in the standard location (/usr/lpp/ppe.poe/), or the
20220           specs file must be overridden with the -specs= option to specify
20221           the appropriate directory location.  The Parallel Environment does
20222           not support threads, so the -mpe option and the -pthread option are
20223           incompatible.
20224
20225       -malign-natural
20226       -malign-power
20227           On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
20228           -malign-natural overrides the ABI-defined alignment of larger
20229           types, such as floating-point doubles, on their natural size-based
20230           boundary.  The option -malign-power instructs GCC to follow the
20231           ABI-specified alignment rules.  GCC defaults to the standard
20232           alignment defined in the ABI.
20233
20234           On 64-bit Darwin, natural alignment is the default, and
20235           -malign-power is not supported.
20236
20237       -msoft-float
20238       -mhard-float
20239           Generate code that does not use (uses) the floating-point register
20240           set.  Software floating-point emulation is provided if you use the
20241           -msoft-float option, and pass the option to GCC when linking.
20242
20243       -msingle-float
20244       -mdouble-float
20245           Generate code for single- or double-precision floating-point
20246           operations.  -mdouble-float implies -msingle-float.
20247
20248       -msimple-fpu
20249           Do not generate "sqrt" and "div" instructions for hardware
20250           floating-point unit.
20251
20252       -mfpu=name
20253           Specify type of floating-point unit.  Valid values for name are
20254           sp_lite (equivalent to -msingle-float -msimple-fpu), dp_lite
20255           (equivalent to -mdouble-float -msimple-fpu), sp_full (equivalent to
20256           -msingle-float), and dp_full (equivalent to -mdouble-float).
20257
20258       -mxilinx-fpu
20259           Perform optimizations for the floating-point unit on Xilinx PPC
20260           405/440.
20261
20262       -mmultiple
20263       -mno-multiple
20264           Generate code that uses (does not use) the load multiple word
20265           instructions and the store multiple word instructions.  These
20266           instructions are generated by default on POWER systems, and not
20267           generated on PowerPC systems.  Do not use -mmultiple on little-
20268           endian PowerPC systems, since those instructions do not work when
20269           the processor is in little-endian mode.  The exceptions are PPC740
20270           and PPC750 which permit these instructions in little-endian mode.
20271
20272       -mupdate
20273       -mno-update
20274           Generate code that uses (does not use) the load or store
20275           instructions that update the base register to the address of the
20276           calculated memory location.  These instructions are generated by
20277           default.  If you use -mno-update, there is a small window between
20278           the time that the stack pointer is updated and the address of the
20279           previous frame is stored, which means code that walks the stack
20280           frame across interrupts or signals may get corrupted data.
20281
20282       -mavoid-indexed-addresses
20283       -mno-avoid-indexed-addresses
20284           Generate code that tries to avoid (not avoid) the use of indexed
20285           load or store instructions. These instructions can incur a
20286           performance penalty on Power6 processors in certain situations,
20287           such as when stepping through large arrays that cross a 16M
20288           boundary.  This option is enabled by default when targeting Power6
20289           and disabled otherwise.
20290
20291       -mfused-madd
20292       -mno-fused-madd
20293           Generate code that uses (does not use) the floating-point multiply
20294           and accumulate instructions.  These instructions are generated by
20295           default if hardware floating point is used.  The machine-dependent
20296           -mfused-madd option is now mapped to the machine-independent
20297           -ffp-contract=fast option, and -mno-fused-madd is mapped to
20298           -ffp-contract=off.
20299
20300       -mmulhw
20301       -mno-mulhw
20302           Generate code that uses (does not use) the half-word multiply and
20303           multiply-accumulate instructions on the IBM 405, 440, 464 and 476
20304           processors.  These instructions are generated by default when
20305           targeting those processors.
20306
20307       -mdlmzb
20308       -mno-dlmzb
20309           Generate code that uses (does not use) the string-search dlmzb
20310           instruction on the IBM 405, 440, 464 and 476 processors.  This
20311           instruction is generated by default when targeting those
20312           processors.
20313
20314       -mno-bit-align
20315       -mbit-align
20316           On System V.4 and embedded PowerPC systems do not (do) force
20317           structures and unions that contain bit-fields to be aligned to the
20318           base type of the bit-field.
20319
20320           For example, by default a structure containing nothing but 8
20321           "unsigned" bit-fields of length 1 is aligned to a 4-byte boundary
20322           and has a size of 4 bytes.  By using -mno-bit-align, the structure
20323           is aligned to a 1-byte boundary and is 1 byte in size.
20324
20325       -mno-strict-align
20326       -mstrict-align
20327           On System V.4 and embedded PowerPC systems do not (do) assume that
20328           unaligned memory references are handled by the system.
20329
20330       -mrelocatable
20331       -mno-relocatable
20332           Generate code that allows (does not allow) a static executable to
20333           be relocated to a different address at run time.  A simple embedded
20334           PowerPC system loader should relocate the entire contents of
20335           ".got2" and 4-byte locations listed in the ".fixup" section, a
20336           table of 32-bit addresses generated by this option.  For this to
20337           work, all objects linked together must be compiled with
20338           -mrelocatable or -mrelocatable-lib.  -mrelocatable code aligns the
20339           stack to an 8-byte boundary.
20340
20341       -mrelocatable-lib
20342       -mno-relocatable-lib
20343           Like -mrelocatable, -mrelocatable-lib generates a ".fixup" section
20344           to allow static executables to be relocated at run time, but
20345           -mrelocatable-lib does not use the smaller stack alignment of
20346           -mrelocatable.  Objects compiled with -mrelocatable-lib may be
20347           linked with objects compiled with any combination of the
20348           -mrelocatable options.
20349
20350       -mno-toc
20351       -mtoc
20352           On System V.4 and embedded PowerPC systems do not (do) assume that
20353           register 2 contains a pointer to a global area pointing to the
20354           addresses used in the program.
20355
20356       -mlittle
20357       -mlittle-endian
20358           On System V.4 and embedded PowerPC systems compile code for the
20359           processor in little-endian mode.  The -mlittle-endian option is the
20360           same as -mlittle.
20361
20362       -mbig
20363       -mbig-endian
20364           On System V.4 and embedded PowerPC systems compile code for the
20365           processor in big-endian mode.  The -mbig-endian option is the same
20366           as -mbig.
20367
20368       -mdynamic-no-pic
20369           On Darwin and Mac OS X systems, compile code so that it is not
20370           relocatable, but that its external references are relocatable.  The
20371           resulting code is suitable for applications, but not shared
20372           libraries.
20373
20374       -msingle-pic-base
20375           Treat the register used for PIC addressing as read-only, rather
20376           than loading it in the prologue for each function.  The runtime
20377           system is responsible for initializing this register with an
20378           appropriate value before execution begins.
20379
20380       -mprioritize-restricted-insns=priority
20381           This option controls the priority that is assigned to dispatch-slot
20382           restricted instructions during the second scheduling pass.  The
20383           argument priority takes the value 0, 1, or 2 to assign no, highest,
20384           or second-highest (respectively) priority to dispatch-slot
20385           restricted instructions.
20386
20387       -msched-costly-dep=dependence_type
20388           This option controls which dependences are considered costly by the
20389           target during instruction scheduling.  The argument dependence_type
20390           takes one of the following values:
20391
20392           no  No dependence is costly.
20393
20394           all All dependences are costly.
20395
20396           true_store_to_load
20397               A true dependence from store to load is costly.
20398
20399           store_to_load
20400               Any dependence from store to load is costly.
20401
20402           number
20403               Any dependence for which the latency is greater than or equal
20404               to number is costly.
20405
20406       -minsert-sched-nops=scheme
20407           This option controls which NOP insertion scheme is used during the
20408           second scheduling pass.  The argument scheme takes one of the
20409           following values:
20410
20411           no  Don't insert NOPs.
20412
20413           pad Pad with NOPs any dispatch group that has vacant issue slots,
20414               according to the scheduler's grouping.
20415
20416           regroup_exact
20417               Insert NOPs to force costly dependent insns into separate
20418               groups.  Insert exactly as many NOPs as needed to force an insn
20419               to a new group, according to the estimated processor grouping.
20420
20421           number
20422               Insert NOPs to force costly dependent insns into separate
20423               groups.  Insert number NOPs to force an insn to a new group.
20424
20425       -mcall-sysv
20426           On System V.4 and embedded PowerPC systems compile code using
20427           calling conventions that adhere to the March 1995 draft of the
20428           System V Application Binary Interface, PowerPC processor
20429           supplement.  This is the default unless you configured GCC using
20430           powerpc-*-eabiaix.
20431
20432       -mcall-sysv-eabi
20433       -mcall-eabi
20434           Specify both -mcall-sysv and -meabi options.
20435
20436       -mcall-sysv-noeabi
20437           Specify both -mcall-sysv and -mno-eabi options.
20438
20439       -mcall-aixdesc
20440           On System V.4 and embedded PowerPC systems compile code for the AIX
20441           operating system.
20442
20443       -mcall-linux
20444           On System V.4 and embedded PowerPC systems compile code for the
20445           Linux-based GNU system.
20446
20447       -mcall-freebsd
20448           On System V.4 and embedded PowerPC systems compile code for the
20449           FreeBSD operating system.
20450
20451       -mcall-netbsd
20452           On System V.4 and embedded PowerPC systems compile code for the
20453           NetBSD operating system.
20454
20455       -mcall-openbsd
20456           On System V.4 and embedded PowerPC systems compile code for the
20457           OpenBSD operating system.
20458
20459       -mtraceback=traceback_type
20460           Select the type of traceback table. Valid values for traceback_type
20461           are full, part, and no.
20462
20463       -maix-struct-return
20464           Return all structures in memory (as specified by the AIX ABI).
20465
20466       -msvr4-struct-return
20467           Return structures smaller than 8 bytes in registers (as specified
20468           by the SVR4 ABI).
20469
20470       -mabi=abi-type
20471           Extend the current ABI with a particular extension, or remove such
20472           extension.  Valid values are altivec, no-altivec, spe, no-spe,
20473           ibmlongdouble, ieeelongdouble, elfv1, elfv2.
20474
20475       -mabi=ibmlongdouble
20476           Change the current ABI to use IBM extended-precision long double.
20477           This is not likely to work if your system defaults to using IEEE
20478           extended-precision long double.  If you change the long double type
20479           from IEEE extended-precision, the compiler will issue a warning
20480           unless you use the -Wno-psabi option.  Requires -mlong-double-128
20481           to be enabled.
20482
20483       -mabi=ieeelongdouble
20484           Change the current ABI to use IEEE extended-precision long double.
20485           This is not likely to work if your system defaults to using IBM
20486           extended-precision long double.  If you change the long double type
20487           from IBM extended-precision, the compiler will issue a warning
20488           unless you use the -Wno-psabi option.  Requires -mlong-double-128
20489           to be enabled.
20490
20491       -mabi=elfv1
20492           Change the current ABI to use the ELFv1 ABI.  This is the default
20493           ABI for big-endian PowerPC 64-bit Linux.  Overriding the default
20494           ABI requires special system support and is likely to fail in
20495           spectacular ways.
20496
20497       -mabi=elfv2
20498           Change the current ABI to use the ELFv2 ABI.  This is the default
20499           ABI for little-endian PowerPC 64-bit Linux.  Overriding the default
20500           ABI requires special system support and is likely to fail in
20501           spectacular ways.
20502
20503       -mgnu-attribute
20504       -mno-gnu-attribute
20505           Emit .gnu_attribute assembly directives to set tag/value pairs in a
20506           .gnu.attributes section that specify ABI variations in function
20507           parameters or return values.
20508
20509       -mprototype
20510       -mno-prototype
20511           On System V.4 and embedded PowerPC systems assume that all calls to
20512           variable argument functions are properly prototyped.  Otherwise,
20513           the compiler must insert an instruction before every non-prototyped
20514           call to set or clear bit 6 of the condition code register ("CR") to
20515           indicate whether floating-point values are passed in the floating-
20516           point registers in case the function takes variable arguments.
20517           With -mprototype, only calls to prototyped variable argument
20518           functions set or clear the bit.
20519
20520       -msim
20521           On embedded PowerPC systems, assume that the startup module is
20522           called sim-crt0.o and that the standard C libraries are libsim.a
20523           and libc.a.  This is the default for powerpc-*-eabisim
20524           configurations.
20525
20526       -mmvme
20527           On embedded PowerPC systems, assume that the startup module is
20528           called crt0.o and the standard C libraries are libmvme.a and
20529           libc.a.
20530
20531       -mads
20532           On embedded PowerPC systems, assume that the startup module is
20533           called crt0.o and the standard C libraries are libads.a and libc.a.
20534
20535       -myellowknife
20536           On embedded PowerPC systems, assume that the startup module is
20537           called crt0.o and the standard C libraries are libyk.a and libc.a.
20538
20539       -mvxworks
20540           On System V.4 and embedded PowerPC systems, specify that you are
20541           compiling for a VxWorks system.
20542
20543       -memb
20544           On embedded PowerPC systems, set the "PPC_EMB" bit in the ELF flags
20545           header to indicate that eabi extended relocations are used.
20546
20547       -meabi
20548       -mno-eabi
20549           On System V.4 and embedded PowerPC systems do (do not) adhere to
20550           the Embedded Applications Binary Interface (EABI), which is a set
20551           of modifications to the System V.4 specifications.  Selecting
20552           -meabi means that the stack is aligned to an 8-byte boundary, a
20553           function "__eabi" is called from "main" to set up the EABI
20554           environment, and the -msdata option can use both "r2" and "r13" to
20555           point to two separate small data areas.  Selecting -mno-eabi means
20556           that the stack is aligned to a 16-byte boundary, no EABI
20557           initialization function is called from "main", and the -msdata
20558           option only uses "r13" to point to a single small data area.  The
20559           -meabi option is on by default if you configured GCC using one of
20560           the powerpc*-*-eabi* options.
20561
20562       -msdata=eabi
20563           On System V.4 and embedded PowerPC systems, put small initialized
20564           "const" global and static data in the ".sdata2" section, which is
20565           pointed to by register "r2".  Put small initialized non-"const"
20566           global and static data in the ".sdata" section, which is pointed to
20567           by register "r13".  Put small uninitialized global and static data
20568           in the ".sbss" section, which is adjacent to the ".sdata" section.
20569           The -msdata=eabi option is incompatible with the -mrelocatable
20570           option.  The -msdata=eabi option also sets the -memb option.
20571
20572       -msdata=sysv
20573           On System V.4 and embedded PowerPC systems, put small global and
20574           static data in the ".sdata" section, which is pointed to by
20575           register "r13".  Put small uninitialized global and static data in
20576           the ".sbss" section, which is adjacent to the ".sdata" section.
20577           The -msdata=sysv option is incompatible with the -mrelocatable
20578           option.
20579
20580       -msdata=default
20581       -msdata
20582           On System V.4 and embedded PowerPC systems, if -meabi is used,
20583           compile code the same as -msdata=eabi, otherwise compile code the
20584           same as -msdata=sysv.
20585
20586       -msdata=data
20587           On System V.4 and embedded PowerPC systems, put small global data
20588           in the ".sdata" section.  Put small uninitialized global data in
20589           the ".sbss" section.  Do not use register "r13" to address small
20590           data however.  This is the default behavior unless other -msdata
20591           options are used.
20592
20593       -msdata=none
20594       -mno-sdata
20595           On embedded PowerPC systems, put all initialized global and static
20596           data in the ".data" section, and all uninitialized data in the
20597           ".bss" section.
20598
20599       -mreadonly-in-sdata
20600       -mreadonly-in-sdata
20601           Put read-only objects in the ".sdata" section as well.  This is the
20602           default.
20603
20604       -mblock-move-inline-limit=num
20605           Inline all block moves (such as calls to "memcpy" or structure
20606           copies) less than or equal to num bytes.  The minimum value for num
20607           is 32 bytes on 32-bit targets and 64 bytes on 64-bit targets.  The
20608           default value is target-specific.
20609
20610       -mblock-compare-inline-limit=num
20611           Generate non-looping inline code for all block compares (such as
20612           calls to "memcmp" or structure compares) less than or equal to num
20613           bytes. If num is 0, all inline expansion (non-loop and loop) of
20614           block compare is disabled. The default value is target-specific.
20615
20616       -mblock-compare-inline-loop-limit=num
20617           Generate an inline expansion using loop code for all block compares
20618           that are less than or equal to num bytes, but greater than the
20619           limit for non-loop inline block compare expansion. If the block
20620           length is not constant, at most num bytes will be compared before
20621           "memcmp" is called to compare the remainder of the block. The
20622           default value is target-specific.
20623
20624       -mstring-compare-inline-limit=num
20625           Generate at most num pairs of load instructions to compare the
20626           string inline. If the difference or end of string is not found at
20627           the end of the inline compare a call to "strcmp" or "strncmp" will
20628           take care of the rest of the comparison. The default is 8 pairs of
20629           loads, which will compare 64 bytes on a 64-bit target and 32 bytes
20630           on a 32-bit target.
20631
20632       -G num
20633           On embedded PowerPC systems, put global and static items less than
20634           or equal to num bytes into the small data or BSS sections instead
20635           of the normal data or BSS section.  By default, num is 8.  The -G
20636           num switch is also passed to the linker.  All modules should be
20637           compiled with the same -G num value.
20638
20639       -mregnames
20640       -mno-regnames
20641           On System V.4 and embedded PowerPC systems do (do not) emit
20642           register names in the assembly language output using symbolic
20643           forms.
20644
20645       -mlongcall
20646       -mno-longcall
20647           By default assume that all calls are far away so that a longer and
20648           more expensive calling sequence is required.  This is required for
20649           calls farther than 32 megabytes (33,554,432 bytes) from the current
20650           location.  A short call is generated if the compiler knows the call
20651           cannot be that far away.  This setting can be overridden by the
20652           "shortcall" function attribute, or by "#pragma longcall(0)".
20653
20654           Some linkers are capable of detecting out-of-range calls and
20655           generating glue code on the fly.  On these systems, long calls are
20656           unnecessary and generate slower code.  As of this writing, the AIX
20657           linker can do this, as can the GNU linker for PowerPC/64.  It is
20658           planned to add this feature to the GNU linker for 32-bit PowerPC
20659           systems as well.
20660
20661           On Darwin/PPC systems, "#pragma longcall" generates "jbsr callee,
20662           L42", plus a branch island (glue code).  The two target addresses
20663           represent the callee and the branch island.  The Darwin/PPC linker
20664           prefers the first address and generates a "bl callee" if the PPC
20665           "bl" instruction reaches the callee directly; otherwise, the linker
20666           generates "bl L42" to call the branch island.  The branch island is
20667           appended to the body of the calling function; it computes the full
20668           32-bit address of the callee and jumps to it.
20669
20670           On Mach-O (Darwin) systems, this option directs the compiler emit
20671           to the glue for every direct call, and the Darwin linker decides
20672           whether to use or discard it.
20673
20674           In the future, GCC may ignore all longcall specifications when the
20675           linker is known to generate glue.
20676
20677       -mtls-markers
20678       -mno-tls-markers
20679           Mark (do not mark) calls to "__tls_get_addr" with a relocation
20680           specifying the function argument.  The relocation allows the linker
20681           to reliably associate function call with argument setup
20682           instructions for TLS optimization, which in turn allows GCC to
20683           better schedule the sequence.
20684
20685       -mrecip
20686       -mno-recip
20687           This option enables use of the reciprocal estimate and reciprocal
20688           square root estimate instructions with additional Newton-Raphson
20689           steps to increase precision instead of doing a divide or square
20690           root and divide for floating-point arguments.  You should use the
20691           -ffast-math option when using -mrecip (or at least
20692           -funsafe-math-optimizations, -ffinite-math-only, -freciprocal-math
20693           and -fno-trapping-math).  Note that while the throughput of the
20694           sequence is generally higher than the throughput of the non-
20695           reciprocal instruction, the precision of the sequence can be
20696           decreased by up to 2 ulp (i.e. the inverse of 1.0 equals
20697           0.99999994) for reciprocal square roots.
20698
20699       -mrecip=opt
20700           This option controls which reciprocal estimate instructions may be
20701           used.  opt is a comma-separated list of options, which may be
20702           preceded by a "!" to invert the option:
20703
20704           all Enable all estimate instructions.
20705
20706           default
20707               Enable the default instructions, equivalent to -mrecip.
20708
20709           none
20710               Disable all estimate instructions, equivalent to -mno-recip.
20711
20712           div Enable the reciprocal approximation instructions for both
20713               single and double precision.
20714
20715           divf
20716               Enable the single-precision reciprocal approximation
20717               instructions.
20718
20719           divd
20720               Enable the double-precision reciprocal approximation
20721               instructions.
20722
20723           rsqrt
20724               Enable the reciprocal square root approximation instructions
20725               for both single and double precision.
20726
20727           rsqrtf
20728               Enable the single-precision reciprocal square root
20729               approximation instructions.
20730
20731           rsqrtd
20732               Enable the double-precision reciprocal square root
20733               approximation instructions.
20734
20735           So, for example, -mrecip=all,!rsqrtd enables all of the reciprocal
20736           estimate instructions, except for the "FRSQRTE", "XSRSQRTEDP", and
20737           "XVRSQRTEDP" instructions which handle the double-precision
20738           reciprocal square root calculations.
20739
20740       -mrecip-precision
20741       -mno-recip-precision
20742           Assume (do not assume) that the reciprocal estimate instructions
20743           provide higher-precision estimates than is mandated by the PowerPC
20744           ABI.  Selecting -mcpu=power6, -mcpu=power7 or -mcpu=power8
20745           automatically selects -mrecip-precision.  The double-precision
20746           square root estimate instructions are not generated by default on
20747           low-precision machines, since they do not provide an estimate that
20748           converges after three steps.
20749
20750       -mveclibabi=type
20751           Specifies the ABI type to use for vectorizing intrinsics using an
20752           external library.  The only type supported at present is mass,
20753           which specifies to use IBM's Mathematical Acceleration Subsystem
20754           (MASS) libraries for vectorizing intrinsics using external
20755           libraries.  GCC currently emits calls to "acosd2", "acosf4",
20756           "acoshd2", "acoshf4", "asind2", "asinf4", "asinhd2", "asinhf4",
20757           "atan2d2", "atan2f4", "atand2", "atanf4", "atanhd2", "atanhf4",
20758           "cbrtd2", "cbrtf4", "cosd2", "cosf4", "coshd2", "coshf4", "erfcd2",
20759           "erfcf4", "erfd2", "erff4", "exp2d2", "exp2f4", "expd2", "expf4",
20760           "expm1d2", "expm1f4", "hypotd2", "hypotf4", "lgammad2", "lgammaf4",
20761           "log10d2", "log10f4", "log1pd2", "log1pf4", "log2d2", "log2f4",
20762           "logd2", "logf4", "powd2", "powf4", "sind2", "sinf4", "sinhd2",
20763           "sinhf4", "sqrtd2", "sqrtf4", "tand2", "tanf4", "tanhd2", and
20764           "tanhf4" when generating code for power7.  Both -ftree-vectorize
20765           and -funsafe-math-optimizations must also be enabled.  The MASS
20766           libraries must be specified at link time.
20767
20768       -mfriz
20769       -mno-friz
20770           Generate (do not generate) the "friz" instruction when the
20771           -funsafe-math-optimizations option is used to optimize rounding of
20772           floating-point values to 64-bit integer and back to floating point.
20773           The "friz" instruction does not return the same value if the
20774           floating-point number is too large to fit in an integer.
20775
20776       -mpointers-to-nested-functions
20777       -mno-pointers-to-nested-functions
20778           Generate (do not generate) code to load up the static chain
20779           register ("r11") when calling through a pointer on AIX and 64-bit
20780           Linux systems where a function pointer points to a 3-word
20781           descriptor giving the function address, TOC value to be loaded in
20782           register "r2", and static chain value to be loaded in register
20783           "r11".  The -mpointers-to-nested-functions is on by default.  You
20784           cannot call through pointers to nested functions or pointers to
20785           functions compiled in other languages that use the static chain if
20786           you use -mno-pointers-to-nested-functions.
20787
20788       -msave-toc-indirect
20789       -mno-save-toc-indirect
20790           Generate (do not generate) code to save the TOC value in the
20791           reserved stack location in the function prologue if the function
20792           calls through a pointer on AIX and 64-bit Linux systems.  If the
20793           TOC value is not saved in the prologue, it is saved just before the
20794           call through the pointer.  The -mno-save-toc-indirect option is the
20795           default.
20796
20797       -mcompat-align-parm
20798       -mno-compat-align-parm
20799           Generate (do not generate) code to pass structure parameters with a
20800           maximum alignment of 64 bits, for compatibility with older versions
20801           of GCC.
20802
20803           Older versions of GCC (prior to 4.9.0) incorrectly did not align a
20804           structure parameter on a 128-bit boundary when that structure
20805           contained a member requiring 128-bit alignment.  This is corrected
20806           in more recent versions of GCC.  This option may be used to
20807           generate code that is compatible with functions compiled with older
20808           versions of GCC.
20809
20810           The -mno-compat-align-parm option is the default.
20811
20812       -mstack-protector-guard=guard
20813       -mstack-protector-guard-reg=reg
20814       -mstack-protector-guard-offset=offset
20815       -mstack-protector-guard-symbol=symbol
20816           Generate stack protection code using canary at guard.  Supported
20817           locations are global for global canary or tls for per-thread canary
20818           in the TLS block (the default with GNU libc version 2.4 or later).
20819
20820           With the latter choice the options -mstack-protector-guard-reg=reg
20821           and -mstack-protector-guard-offset=offset furthermore specify which
20822           register to use as base register for reading the canary, and from
20823           what offset from that base register. The default for those is as
20824           specified in the relevant ABI.
20825           -mstack-protector-guard-symbol=symbol overrides the offset with a
20826           symbol reference to a canary in the TLS block.
20827
20828   RX Options
20829       These command-line options are defined for RX targets:
20830
20831       -m64bit-doubles
20832       -m32bit-doubles
20833           Make the "double" data type be 64 bits (-m64bit-doubles) or 32 bits
20834           (-m32bit-doubles) in size.  The default is -m32bit-doubles.  Note
20835           RX floating-point hardware only works on 32-bit values, which is
20836           why the default is -m32bit-doubles.
20837
20838       -fpu
20839       -nofpu
20840           Enables (-fpu) or disables (-nofpu) the use of RX floating-point
20841           hardware.  The default is enabled for the RX600 series and disabled
20842           for the RX200 series.
20843
20844           Floating-point instructions are only generated for 32-bit floating-
20845           point values, however, so the FPU hardware is not used for doubles
20846           if the -m64bit-doubles option is used.
20847
20848           Note If the -fpu option is enabled then -funsafe-math-optimizations
20849           is also enabled automatically.  This is because the RX FPU
20850           instructions are themselves unsafe.
20851
20852       -mcpu=name
20853           Selects the type of RX CPU to be targeted.  Currently three types
20854           are supported, the generic RX600 and RX200 series hardware and the
20855           specific RX610 CPU.  The default is RX600.
20856
20857           The only difference between RX600 and RX610 is that the RX610 does
20858           not support the "MVTIPL" instruction.
20859
20860           The RX200 series does not have a hardware floating-point unit and
20861           so -nofpu is enabled by default when this type is selected.
20862
20863       -mbig-endian-data
20864       -mlittle-endian-data
20865           Store data (but not code) in the big-endian format.  The default is
20866           -mlittle-endian-data, i.e. to store data in the little-endian
20867           format.
20868
20869       -msmall-data-limit=N
20870           Specifies the maximum size in bytes of global and static variables
20871           which can be placed into the small data area.  Using the small data
20872           area can lead to smaller and faster code, but the size of area is
20873           limited and it is up to the programmer to ensure that the area does
20874           not overflow.  Also when the small data area is used one of the
20875           RX's registers (usually "r13") is reserved for use pointing to this
20876           area, so it is no longer available for use by the compiler.  This
20877           could result in slower and/or larger code if variables are pushed
20878           onto the stack instead of being held in this register.
20879
20880           Note, common variables (variables that have not been initialized)
20881           and constants are not placed into the small data area as they are
20882           assigned to other sections in the output executable.
20883
20884           The default value is zero, which disables this feature.  Note, this
20885           feature is not enabled by default with higher optimization levels
20886           (-O2 etc) because of the potentially detrimental effects of
20887           reserving a register.  It is up to the programmer to experiment and
20888           discover whether this feature is of benefit to their program.  See
20889           the description of the -mpid option for a description of how the
20890           actual register to hold the small data area pointer is chosen.
20891
20892       -msim
20893       -mno-sim
20894           Use the simulator runtime.  The default is to use the libgloss
20895           board-specific runtime.
20896
20897       -mas100-syntax
20898       -mno-as100-syntax
20899           When generating assembler output use a syntax that is compatible
20900           with Renesas's AS100 assembler.  This syntax can also be handled by
20901           the GAS assembler, but it has some restrictions so it is not
20902           generated by default.
20903
20904       -mmax-constant-size=N
20905           Specifies the maximum size, in bytes, of a constant that can be
20906           used as an operand in a RX instruction.  Although the RX
20907           instruction set does allow constants of up to 4 bytes in length to
20908           be used in instructions, a longer value equates to a longer
20909           instruction.  Thus in some circumstances it can be beneficial to
20910           restrict the size of constants that are used in instructions.
20911           Constants that are too big are instead placed into a constant pool
20912           and referenced via register indirection.
20913
20914           The value N can be between 0 and 4.  A value of 0 (the default) or
20915           4 means that constants of any size are allowed.
20916
20917       -mrelax
20918           Enable linker relaxation.  Linker relaxation is a process whereby
20919           the linker attempts to reduce the size of a program by finding
20920           shorter versions of various instructions.  Disabled by default.
20921
20922       -mint-register=N
20923           Specify the number of registers to reserve for fast interrupt
20924           handler functions.  The value N can be between 0 and 4.  A value of
20925           1 means that register "r13" is reserved for the exclusive use of
20926           fast interrupt handlers.  A value of 2 reserves "r13" and "r12".  A
20927           value of 3 reserves "r13", "r12" and "r11", and a value of 4
20928           reserves "r13" through "r10".  A value of 0, the default, does not
20929           reserve any registers.
20930
20931       -msave-acc-in-interrupts
20932           Specifies that interrupt handler functions should preserve the
20933           accumulator register.  This is only necessary if normal code might
20934           use the accumulator register, for example because it performs
20935           64-bit multiplications.  The default is to ignore the accumulator
20936           as this makes the interrupt handlers faster.
20937
20938       -mpid
20939       -mno-pid
20940           Enables the generation of position independent data.  When enabled
20941           any access to constant data is done via an offset from a base
20942           address held in a register.  This allows the location of constant
20943           data to be determined at run time without requiring the executable
20944           to be relocated, which is a benefit to embedded applications with
20945           tight memory constraints.  Data that can be modified is not
20946           affected by this option.
20947
20948           Note, using this feature reserves a register, usually "r13", for
20949           the constant data base address.  This can result in slower and/or
20950           larger code, especially in complicated functions.
20951
20952           The actual register chosen to hold the constant data base address
20953           depends upon whether the -msmall-data-limit and/or the
20954           -mint-register command-line options are enabled.  Starting with
20955           register "r13" and proceeding downwards, registers are allocated
20956           first to satisfy the requirements of -mint-register, then -mpid and
20957           finally -msmall-data-limit.  Thus it is possible for the small data
20958           area register to be "r8" if both -mint-register=4 and -mpid are
20959           specified on the command line.
20960
20961           By default this feature is not enabled.  The default can be
20962           restored via the -mno-pid command-line option.
20963
20964       -mno-warn-multiple-fast-interrupts
20965       -mwarn-multiple-fast-interrupts
20966           Prevents GCC from issuing a warning message if it finds more than
20967           one fast interrupt handler when it is compiling a file.  The
20968           default is to issue a warning for each extra fast interrupt handler
20969           found, as the RX only supports one such interrupt.
20970
20971       -mallow-string-insns
20972       -mno-allow-string-insns
20973           Enables or disables the use of the string manipulation instructions
20974           "SMOVF", "SCMPU", "SMOVB", "SMOVU", "SUNTIL" "SWHILE" and also the
20975           "RMPA" instruction.  These instructions may prefetch data, which is
20976           not safe to do if accessing an I/O register.  (See section 12.2.7
20977           of the RX62N Group User's Manual for more information).
20978
20979           The default is to allow these instructions, but it is not possible
20980           for GCC to reliably detect all circumstances where a string
20981           instruction might be used to access an I/O register, so their use
20982           cannot be disabled automatically.  Instead it is reliant upon the
20983           programmer to use the -mno-allow-string-insns option if their
20984           program accesses I/O space.
20985
20986           When the instructions are enabled GCC defines the C preprocessor
20987           symbol "__RX_ALLOW_STRING_INSNS__", otherwise it defines the symbol
20988           "__RX_DISALLOW_STRING_INSNS__".
20989
20990       -mjsr
20991       -mno-jsr
20992           Use only (or not only) "JSR" instructions to access functions.
20993           This option can be used when code size exceeds the range of "BSR"
20994           instructions.  Note that -mno-jsr does not mean to not use "JSR"
20995           but instead means that any type of branch may be used.
20996
20997       Note: The generic GCC command-line option -ffixed-reg has special
20998       significance to the RX port when used with the "interrupt" function
20999       attribute.  This attribute indicates a function intended to process
21000       fast interrupts.  GCC ensures that it only uses the registers "r10",
21001       "r11", "r12" and/or "r13" and only provided that the normal use of the
21002       corresponding registers have been restricted via the -ffixed-reg or
21003       -mint-register command-line options.
21004
21005   S/390 and zSeries Options
21006       These are the -m options defined for the S/390 and zSeries
21007       architecture.
21008
21009       -mhard-float
21010       -msoft-float
21011           Use (do not use) the hardware floating-point instructions and
21012           registers for floating-point operations.  When -msoft-float is
21013           specified, functions in libgcc.a are used to perform floating-point
21014           operations.  When -mhard-float is specified, the compiler generates
21015           IEEE floating-point instructions.  This is the default.
21016
21017       -mhard-dfp
21018       -mno-hard-dfp
21019           Use (do not use) the hardware decimal-floating-point instructions
21020           for decimal-floating-point operations.  When -mno-hard-dfp is
21021           specified, functions in libgcc.a are used to perform decimal-
21022           floating-point operations.  When -mhard-dfp is specified, the
21023           compiler generates decimal-floating-point hardware instructions.
21024           This is the default for -march=z9-ec or higher.
21025
21026       -mlong-double-64
21027       -mlong-double-128
21028           These switches control the size of "long double" type. A size of 64
21029           bits makes the "long double" type equivalent to the "double" type.
21030           This is the default.
21031
21032       -mbackchain
21033       -mno-backchain
21034           Store (do not store) the address of the caller's frame as backchain
21035           pointer into the callee's stack frame.  A backchain may be needed
21036           to allow debugging using tools that do not understand DWARF call
21037           frame information.  When -mno-packed-stack is in effect, the
21038           backchain pointer is stored at the bottom of the stack frame; when
21039           -mpacked-stack is in effect, the backchain is placed into the
21040           topmost word of the 96/160 byte register save area.
21041
21042           In general, code compiled with -mbackchain is call-compatible with
21043           code compiled with -mmo-backchain; however, use of the backchain
21044           for debugging purposes usually requires that the whole binary is
21045           built with -mbackchain.  Note that the combination of -mbackchain,
21046           -mpacked-stack and -mhard-float is not supported.  In order to
21047           build a linux kernel use -msoft-float.
21048
21049           The default is to not maintain the backchain.
21050
21051       -mpacked-stack
21052       -mno-packed-stack
21053           Use (do not use) the packed stack layout.  When -mno-packed-stack
21054           is specified, the compiler uses the all fields of the 96/160 byte
21055           register save area only for their default purpose; unused fields
21056           still take up stack space.  When -mpacked-stack is specified,
21057           register save slots are densely packed at the top of the register
21058           save area; unused space is reused for other purposes, allowing for
21059           more efficient use of the available stack space.  However, when
21060           -mbackchain is also in effect, the topmost word of the save area is
21061           always used to store the backchain, and the return address register
21062           is always saved two words below the backchain.
21063
21064           As long as the stack frame backchain is not used, code generated
21065           with -mpacked-stack is call-compatible with code generated with
21066           -mno-packed-stack.  Note that some non-FSF releases of GCC 2.95 for
21067           S/390 or zSeries generated code that uses the stack frame backchain
21068           at run time, not just for debugging purposes.  Such code is not
21069           call-compatible with code compiled with -mpacked-stack.  Also, note
21070           that the combination of -mbackchain, -mpacked-stack and
21071           -mhard-float is not supported.  In order to build a linux kernel
21072           use -msoft-float.
21073
21074           The default is to not use the packed stack layout.
21075
21076       -msmall-exec
21077       -mno-small-exec
21078           Generate (or do not generate) code using the "bras" instruction to
21079           do subroutine calls.  This only works reliably if the total
21080           executable size does not exceed 64k.  The default is to use the
21081           "basr" instruction instead, which does not have this limitation.
21082
21083       -m64
21084       -m31
21085           When -m31 is specified, generate code compliant to the GNU/Linux
21086           for S/390 ABI.  When -m64 is specified, generate code compliant to
21087           the GNU/Linux for zSeries ABI.  This allows GCC in particular to
21088           generate 64-bit instructions.  For the s390 targets, the default is
21089           -m31, while the s390x targets default to -m64.
21090
21091       -mzarch
21092       -mesa
21093           When -mzarch is specified, generate code using the instructions
21094           available on z/Architecture.  When -mesa is specified, generate
21095           code using the instructions available on ESA/390.  Note that -mesa
21096           is not possible with -m64.  When generating code compliant to the
21097           GNU/Linux for S/390 ABI, the default is -mesa.  When generating
21098           code compliant to the GNU/Linux for zSeries ABI, the default is
21099           -mzarch.
21100
21101       -mhtm
21102       -mno-htm
21103           The -mhtm option enables a set of builtins making use of
21104           instructions available with the transactional execution facility
21105           introduced with the IBM zEnterprise EC12 machine generation S/390
21106           System z Built-in Functions.  -mhtm is enabled by default when
21107           using -march=zEC12.
21108
21109       -mvx
21110       -mno-vx
21111           When -mvx is specified, generate code using the instructions
21112           available with the vector extension facility introduced with the
21113           IBM z13 machine generation.  This option changes the ABI for some
21114           vector type values with regard to alignment and calling
21115           conventions.  In case vector type values are being used in an ABI-
21116           relevant context a GAS .gnu_attribute command will be added to mark
21117           the resulting binary with the ABI used.  -mvx is enabled by default
21118           when using -march=z13.
21119
21120       -mzvector
21121       -mno-zvector
21122           The -mzvector option enables vector language extensions and
21123           builtins using instructions available with the vector extension
21124           facility introduced with the IBM z13 machine generation.  This
21125           option adds support for vector to be used as a keyword to define
21126           vector type variables and arguments.  vector is only available when
21127           GNU extensions are enabled.  It will not be expanded when
21128           requesting strict standard compliance e.g. with -std=c99.  In
21129           addition to the GCC low-level builtins -mzvector enables a set of
21130           builtins added for compatibility with AltiVec-style implementations
21131           like Power and Cell.  In order to make use of these builtins the
21132           header file vecintrin.h needs to be included.  -mzvector is
21133           disabled by default.
21134
21135       -mmvcle
21136       -mno-mvcle
21137           Generate (or do not generate) code using the "mvcle" instruction to
21138           perform block moves.  When -mno-mvcle is specified, use a "mvc"
21139           loop instead.  This is the default unless optimizing for size.
21140
21141       -mdebug
21142       -mno-debug
21143           Print (or do not print) additional debug information when
21144           compiling.  The default is to not print debug information.
21145
21146       -march=cpu-type
21147           Generate code that runs on cpu-type, which is the name of a system
21148           representing a certain processor type.  Possible values for cpu-
21149           type are z900/arch5, z990/arch6, z9-109, z9-ec/arch7, z10/arch8,
21150           z196/arch9, zEC12, z13/arch11, z14/arch12, and native.
21151
21152           The default is -march=z900.  g5/arch3 and g6 are deprecated and
21153           will be removed with future releases.
21154
21155           Specifying native as cpu type can be used to select the best
21156           architecture option for the host processor.  -march=native has no
21157           effect if GCC does not recognize the processor.
21158
21159       -mtune=cpu-type
21160           Tune to cpu-type everything applicable about the generated code,
21161           except for the ABI and the set of available instructions.  The list
21162           of cpu-type values is the same as for -march.  The default is the
21163           value used for -march.
21164
21165       -mtpf-trace
21166       -mno-tpf-trace
21167           Generate code that adds (does not add) in TPF OS specific branches
21168           to trace routines in the operating system.  This option is off by
21169           default, even when compiling for the TPF OS.
21170
21171       -mfused-madd
21172       -mno-fused-madd
21173           Generate code that uses (does not use) the floating-point multiply
21174           and accumulate instructions.  These instructions are generated by
21175           default if hardware floating point is used.
21176
21177       -mwarn-framesize=framesize
21178           Emit a warning if the current function exceeds the given frame
21179           size.  Because this is a compile-time check it doesn't need to be a
21180           real problem when the program runs.  It is intended to identify
21181           functions that most probably cause a stack overflow.  It is useful
21182           to be used in an environment with limited stack size e.g. the linux
21183           kernel.
21184
21185       -mwarn-dynamicstack
21186           Emit a warning if the function calls "alloca" or uses dynamically-
21187           sized arrays.  This is generally a bad idea with a limited stack
21188           size.
21189
21190       -mstack-guard=stack-guard
21191       -mstack-size=stack-size
21192           If these options are provided the S/390 back end emits additional
21193           instructions in the function prologue that trigger a trap if the
21194           stack size is stack-guard bytes above the stack-size (remember that
21195           the stack on S/390 grows downward).  If the stack-guard option is
21196           omitted the smallest power of 2 larger than the frame size of the
21197           compiled function is chosen.  These options are intended to be used
21198           to help debugging stack overflow problems.  The additionally
21199           emitted code causes only little overhead and hence can also be used
21200           in production-like systems without greater performance degradation.
21201           The given values have to be exact powers of 2 and stack-size has to
21202           be greater than stack-guard without exceeding 64k.  In order to be
21203           efficient the extra code makes the assumption that the stack starts
21204           at an address aligned to the value given by stack-size.  The stack-
21205           guard option can only be used in conjunction with stack-size.
21206
21207       -mhotpatch=pre-halfwords,post-halfwords
21208           If the hotpatch option is enabled, a "hot-patching" function
21209           prologue is generated for all functions in the compilation unit.
21210           The funtion label is prepended with the given number of two-byte
21211           NOP instructions (pre-halfwords, maximum 1000000).  After the
21212           label, 2 * post-halfwords bytes are appended, using the largest NOP
21213           like instructions the architecture allows (maximum 1000000).
21214
21215           If both arguments are zero, hotpatching is disabled.
21216
21217           This option can be overridden for individual functions with the
21218           "hotpatch" attribute.
21219
21220   Score Options
21221       These options are defined for Score implementations:
21222
21223       -meb
21224           Compile code for big-endian mode.  This is the default.
21225
21226       -mel
21227           Compile code for little-endian mode.
21228
21229       -mnhwloop
21230           Disable generation of "bcnz" instructions.
21231
21232       -muls
21233           Enable generation of unaligned load and store instructions.
21234
21235       -mmac
21236           Enable the use of multiply-accumulate instructions. Disabled by
21237           default.
21238
21239       -mscore5
21240           Specify the SCORE5 as the target architecture.
21241
21242       -mscore5u
21243           Specify the SCORE5U of the target architecture.
21244
21245       -mscore7
21246           Specify the SCORE7 as the target architecture. This is the default.
21247
21248       -mscore7d
21249           Specify the SCORE7D as the target architecture.
21250
21251   SH Options
21252       These -m options are defined for the SH implementations:
21253
21254       -m1 Generate code for the SH1.
21255
21256       -m2 Generate code for the SH2.
21257
21258       -m2e
21259           Generate code for the SH2e.
21260
21261       -m2a-nofpu
21262           Generate code for the SH2a without FPU, or for a SH2a-FPU in such a
21263           way that the floating-point unit is not used.
21264
21265       -m2a-single-only
21266           Generate code for the SH2a-FPU, in such a way that no double-
21267           precision floating-point operations are used.
21268
21269       -m2a-single
21270           Generate code for the SH2a-FPU assuming the floating-point unit is
21271           in single-precision mode by default.
21272
21273       -m2a
21274           Generate code for the SH2a-FPU assuming the floating-point unit is
21275           in double-precision mode by default.
21276
21277       -m3 Generate code for the SH3.
21278
21279       -m3e
21280           Generate code for the SH3e.
21281
21282       -m4-nofpu
21283           Generate code for the SH4 without a floating-point unit.
21284
21285       -m4-single-only
21286           Generate code for the SH4 with a floating-point unit that only
21287           supports single-precision arithmetic.
21288
21289       -m4-single
21290           Generate code for the SH4 assuming the floating-point unit is in
21291           single-precision mode by default.
21292
21293       -m4 Generate code for the SH4.
21294
21295       -m4-100
21296           Generate code for SH4-100.
21297
21298       -m4-100-nofpu
21299           Generate code for SH4-100 in such a way that the floating-point
21300           unit is not used.
21301
21302       -m4-100-single
21303           Generate code for SH4-100 assuming the floating-point unit is in
21304           single-precision mode by default.
21305
21306       -m4-100-single-only
21307           Generate code for SH4-100 in such a way that no double-precision
21308           floating-point operations are used.
21309
21310       -m4-200
21311           Generate code for SH4-200.
21312
21313       -m4-200-nofpu
21314           Generate code for SH4-200 without in such a way that the floating-
21315           point unit is not used.
21316
21317       -m4-200-single
21318           Generate code for SH4-200 assuming the floating-point unit is in
21319           single-precision mode by default.
21320
21321       -m4-200-single-only
21322           Generate code for SH4-200 in such a way that no double-precision
21323           floating-point operations are used.
21324
21325       -m4-300
21326           Generate code for SH4-300.
21327
21328       -m4-300-nofpu
21329           Generate code for SH4-300 without in such a way that the floating-
21330           point unit is not used.
21331
21332       -m4-300-single
21333           Generate code for SH4-300 in such a way that no double-precision
21334           floating-point operations are used.
21335
21336       -m4-300-single-only
21337           Generate code for SH4-300 in such a way that no double-precision
21338           floating-point operations are used.
21339
21340       -m4-340
21341           Generate code for SH4-340 (no MMU, no FPU).
21342
21343       -m4-500
21344           Generate code for SH4-500 (no FPU).  Passes -isa=sh4-nofpu to the
21345           assembler.
21346
21347       -m4a-nofpu
21348           Generate code for the SH4al-dsp, or for a SH4a in such a way that
21349           the floating-point unit is not used.
21350
21351       -m4a-single-only
21352           Generate code for the SH4a, in such a way that no double-precision
21353           floating-point operations are used.
21354
21355       -m4a-single
21356           Generate code for the SH4a assuming the floating-point unit is in
21357           single-precision mode by default.
21358
21359       -m4a
21360           Generate code for the SH4a.
21361
21362       -m4al
21363           Same as -m4a-nofpu, except that it implicitly passes -dsp to the
21364           assembler.  GCC doesn't generate any DSP instructions at the
21365           moment.
21366
21367       -mb Compile code for the processor in big-endian mode.
21368
21369       -ml Compile code for the processor in little-endian mode.
21370
21371       -mdalign
21372           Align doubles at 64-bit boundaries.  Note that this changes the
21373           calling conventions, and thus some functions from the standard C
21374           library do not work unless you recompile it first with -mdalign.
21375
21376       -mrelax
21377           Shorten some address references at link time, when possible; uses
21378           the linker option -relax.
21379
21380       -mbigtable
21381           Use 32-bit offsets in "switch" tables.  The default is to use
21382           16-bit offsets.
21383
21384       -mbitops
21385           Enable the use of bit manipulation instructions on SH2A.
21386
21387       -mfmovd
21388           Enable the use of the instruction "fmovd".  Check -mdalign for
21389           alignment constraints.
21390
21391       -mrenesas
21392           Comply with the calling conventions defined by Renesas.
21393
21394       -mno-renesas
21395           Comply with the calling conventions defined for GCC before the
21396           Renesas conventions were available.  This option is the default for
21397           all targets of the SH toolchain.
21398
21399       -mnomacsave
21400           Mark the "MAC" register as call-clobbered, even if -mrenesas is
21401           given.
21402
21403       -mieee
21404       -mno-ieee
21405           Control the IEEE compliance of floating-point comparisons, which
21406           affects the handling of cases where the result of a comparison is
21407           unordered.  By default -mieee is implicitly enabled.  If
21408           -ffinite-math-only is enabled -mno-ieee is implicitly set, which
21409           results in faster floating-point greater-equal and less-equal
21410           comparisons.  The implicit settings can be overridden by specifying
21411           either -mieee or -mno-ieee.
21412
21413       -minline-ic_invalidate
21414           Inline code to invalidate instruction cache entries after setting
21415           up nested function trampolines.  This option has no effect if
21416           -musermode is in effect and the selected code generation option
21417           (e.g. -m4) does not allow the use of the "icbi" instruction.  If
21418           the selected code generation option does not allow the use of the
21419           "icbi" instruction, and -musermode is not in effect, the inlined
21420           code manipulates the instruction cache address array directly with
21421           an associative write.  This not only requires privileged mode at
21422           run time, but it also fails if the cache line had been mapped via
21423           the TLB and has become unmapped.
21424
21425       -misize
21426           Dump instruction size and location in the assembly code.
21427
21428       -mpadstruct
21429           This option is deprecated.  It pads structures to multiple of 4
21430           bytes, which is incompatible with the SH ABI.
21431
21432       -matomic-model=model
21433           Sets the model of atomic operations and additional parameters as a
21434           comma separated list.  For details on the atomic built-in functions
21435           see __atomic Builtins.  The following models and parameters are
21436           supported:
21437
21438           none
21439               Disable compiler generated atomic sequences and emit library
21440               calls for atomic operations.  This is the default if the target
21441               is not "sh*-*-linux*".
21442
21443           soft-gusa
21444               Generate GNU/Linux compatible gUSA software atomic sequences
21445               for the atomic built-in functions.  The generated atomic
21446               sequences require additional support from the
21447               interrupt/exception handling code of the system and are only
21448               suitable for SH3* and SH4* single-core systems.  This option is
21449               enabled by default when the target is "sh*-*-linux*" and SH3*
21450               or SH4*.  When the target is SH4A, this option also partially
21451               utilizes the hardware atomic instructions "movli.l" and
21452               "movco.l" to create more efficient code, unless strict is
21453               specified.
21454
21455           soft-tcb
21456               Generate software atomic sequences that use a variable in the
21457               thread control block.  This is a variation of the gUSA
21458               sequences which can also be used on SH1* and SH2* targets.  The
21459               generated atomic sequences require additional support from the
21460               interrupt/exception handling code of the system and are only
21461               suitable for single-core systems.  When using this model, the
21462               gbr-offset= parameter has to be specified as well.
21463
21464           soft-imask
21465               Generate software atomic sequences that temporarily disable
21466               interrupts by setting "SR.IMASK = 1111".  This model works only
21467               when the program runs in privileged mode and is only suitable
21468               for single-core systems.  Additional support from the
21469               interrupt/exception handling code of the system is not
21470               required.  This model is enabled by default when the target is
21471               "sh*-*-linux*" and SH1* or SH2*.
21472
21473           hard-llcs
21474               Generate hardware atomic sequences using the "movli.l" and
21475               "movco.l" instructions only.  This is only available on SH4A
21476               and is suitable for multi-core systems.  Since the hardware
21477               instructions support only 32 bit atomic variables access to 8
21478               or 16 bit variables is emulated with 32 bit accesses.  Code
21479               compiled with this option is also compatible with other
21480               software atomic model interrupt/exception handling systems if
21481               executed on an SH4A system.  Additional support from the
21482               interrupt/exception handling code of the system is not required
21483               for this model.
21484
21485           gbr-offset=
21486               This parameter specifies the offset in bytes of the variable in
21487               the thread control block structure that should be used by the
21488               generated atomic sequences when the soft-tcb model has been
21489               selected.  For other models this parameter is ignored.  The
21490               specified value must be an integer multiple of four and in the
21491               range 0-1020.
21492
21493           strict
21494               This parameter prevents mixed usage of multiple atomic models,
21495               even if they are compatible, and makes the compiler generate
21496               atomic sequences of the specified model only.
21497
21498       -mtas
21499           Generate the "tas.b" opcode for "__atomic_test_and_set".  Notice
21500           that depending on the particular hardware and software
21501           configuration this can degrade overall performance due to the
21502           operand cache line flushes that are implied by the "tas.b"
21503           instruction.  On multi-core SH4A processors the "tas.b" instruction
21504           must be used with caution since it can result in data corruption
21505           for certain cache configurations.
21506
21507       -mprefergot
21508           When generating position-independent code, emit function calls
21509           using the Global Offset Table instead of the Procedure Linkage
21510           Table.
21511
21512       -musermode
21513       -mno-usermode
21514           Don't allow (allow) the compiler generating privileged mode code.
21515           Specifying -musermode also implies -mno-inline-ic_invalidate if the
21516           inlined code would not work in user mode.  -musermode is the
21517           default when the target is "sh*-*-linux*".  If the target is SH1*
21518           or SH2* -musermode has no effect, since there is no user mode.
21519
21520       -multcost=number
21521           Set the cost to assume for a multiply insn.
21522
21523       -mdiv=strategy
21524           Set the division strategy to be used for integer division
21525           operations.  strategy can be one of:
21526
21527           call-div1
21528               Calls a library function that uses the single-step division
21529               instruction "div1" to perform the operation.  Division by zero
21530               calculates an unspecified result and does not trap.  This is
21531               the default except for SH4, SH2A and SHcompact.
21532
21533           call-fp
21534               Calls a library function that performs the operation in double
21535               precision floating point.  Division by zero causes a floating-
21536               point exception.  This is the default for SHcompact with FPU.
21537               Specifying this for targets that do not have a double precision
21538               FPU defaults to "call-div1".
21539
21540           call-table
21541               Calls a library function that uses a lookup table for small
21542               divisors and the "div1" instruction with case distinction for
21543               larger divisors.  Division by zero calculates an unspecified
21544               result and does not trap.  This is the default for SH4.
21545               Specifying this for targets that do not have dynamic shift
21546               instructions defaults to "call-div1".
21547
21548           When a division strategy has not been specified the default
21549           strategy is selected based on the current target.  For SH2A the
21550           default strategy is to use the "divs" and "divu" instructions
21551           instead of library function calls.
21552
21553       -maccumulate-outgoing-args
21554           Reserve space once for outgoing arguments in the function prologue
21555           rather than around each call.  Generally beneficial for performance
21556           and size.  Also needed for unwinding to avoid changing the stack
21557           frame around conditional code.
21558
21559       -mdivsi3_libfunc=name
21560           Set the name of the library function used for 32-bit signed
21561           division to name.  This only affects the name used in the call
21562           division strategies, and the compiler still expects the same sets
21563           of input/output/clobbered registers as if this option were not
21564           present.
21565
21566       -mfixed-range=register-range
21567           Generate code treating the given register range as fixed registers.
21568           A fixed register is one that the register allocator can not use.
21569           This is useful when compiling kernel code.  A register range is
21570           specified as two registers separated by a dash.  Multiple register
21571           ranges can be specified separated by a comma.
21572
21573       -mbranch-cost=num
21574           Assume num to be the cost for a branch instruction.  Higher numbers
21575           make the compiler try to generate more branch-free code if
21576           possible.  If not specified the value is selected depending on the
21577           processor type that is being compiled for.
21578
21579       -mzdcbranch
21580       -mno-zdcbranch
21581           Assume (do not assume) that zero displacement conditional branch
21582           instructions "bt" and "bf" are fast.  If -mzdcbranch is specified,
21583           the compiler prefers zero displacement branch code sequences.  This
21584           is enabled by default when generating code for SH4 and SH4A.  It
21585           can be explicitly disabled by specifying -mno-zdcbranch.
21586
21587       -mcbranch-force-delay-slot
21588           Force the usage of delay slots for conditional branches, which
21589           stuffs the delay slot with a "nop" if a suitable instruction cannot
21590           be found.  By default this option is disabled.  It can be enabled
21591           to work around hardware bugs as found in the original SH7055.
21592
21593       -mfused-madd
21594       -mno-fused-madd
21595           Generate code that uses (does not use) the floating-point multiply
21596           and accumulate instructions.  These instructions are generated by
21597           default if hardware floating point is used.  The machine-dependent
21598           -mfused-madd option is now mapped to the machine-independent
21599           -ffp-contract=fast option, and -mno-fused-madd is mapped to
21600           -ffp-contract=off.
21601
21602       -mfsca
21603       -mno-fsca
21604           Allow or disallow the compiler to emit the "fsca" instruction for
21605           sine and cosine approximations.  The option -mfsca must be used in
21606           combination with -funsafe-math-optimizations.  It is enabled by
21607           default when generating code for SH4A.  Using -mno-fsca disables
21608           sine and cosine approximations even if -funsafe-math-optimizations
21609           is in effect.
21610
21611       -mfsrra
21612       -mno-fsrra
21613           Allow or disallow the compiler to emit the "fsrra" instruction for
21614           reciprocal square root approximations.  The option -mfsrra must be
21615           used in combination with -funsafe-math-optimizations and
21616           -ffinite-math-only.  It is enabled by default when generating code
21617           for SH4A.  Using -mno-fsrra disables reciprocal square root
21618           approximations even if -funsafe-math-optimizations and
21619           -ffinite-math-only are in effect.
21620
21621       -mpretend-cmove
21622           Prefer zero-displacement conditional branches for conditional move
21623           instruction patterns.  This can result in faster code on the SH4
21624           processor.
21625
21626       -mfdpic
21627           Generate code using the FDPIC ABI.
21628
21629   Solaris 2 Options
21630       These -m options are supported on Solaris 2:
21631
21632       -mclear-hwcap
21633           -mclear-hwcap tells the compiler to remove the hardware
21634           capabilities generated by the Solaris assembler.  This is only
21635           necessary when object files use ISA extensions not supported by the
21636           current machine, but check at runtime whether or not to use them.
21637
21638       -mimpure-text
21639           -mimpure-text, used in addition to -shared, tells the compiler to
21640           not pass -z text to the linker when linking a shared object.  Using
21641           this option, you can link position-dependent code into a shared
21642           object.
21643
21644           -mimpure-text suppresses the "relocations remain against
21645           allocatable but non-writable sections" linker error message.
21646           However, the necessary relocations trigger copy-on-write, and the
21647           shared object is not actually shared across processes.  Instead of
21648           using -mimpure-text, you should compile all source code with -fpic
21649           or -fPIC.
21650
21651       These switches are supported in addition to the above on Solaris 2:
21652
21653       -pthreads
21654           This is a synonym for -pthread.
21655
21656   SPARC Options
21657       These -m options are supported on the SPARC:
21658
21659       -mno-app-regs
21660       -mapp-regs
21661           Specify -mapp-regs to generate output using the global registers 2
21662           through 4, which the SPARC SVR4 ABI reserves for applications.
21663           Like the global register 1, each global register 2 through 4 is
21664           then treated as an allocable register that is clobbered by function
21665           calls.  This is the default.
21666
21667           To be fully SVR4 ABI-compliant at the cost of some performance
21668           loss, specify -mno-app-regs.  You should compile libraries and
21669           system software with this option.
21670
21671       -mflat
21672       -mno-flat
21673           With -mflat, the compiler does not generate save/restore
21674           instructions and uses a "flat" or single register window model.
21675           This model is compatible with the regular register window model.
21676           The local registers and the input registers (0--5) are still
21677           treated as "call-saved" registers and are saved on the stack as
21678           needed.
21679
21680           With -mno-flat (the default), the compiler generates save/restore
21681           instructions (except for leaf functions).  This is the normal
21682           operating mode.
21683
21684       -mfpu
21685       -mhard-float
21686           Generate output containing floating-point instructions.  This is
21687           the default.
21688
21689       -mno-fpu
21690       -msoft-float
21691           Generate output containing library calls for floating point.
21692           Warning: the requisite libraries are not available for all SPARC
21693           targets.  Normally the facilities of the machine's usual C compiler
21694           are used, but this cannot be done directly in cross-compilation.
21695           You must make your own arrangements to provide suitable library
21696           functions for cross-compilation.  The embedded targets sparc-*-aout
21697           and sparclite-*-* do provide software floating-point support.
21698
21699           -msoft-float changes the calling convention in the output file;
21700           therefore, it is only useful if you compile all of a program with
21701           this option.  In particular, you need to compile libgcc.a, the
21702           library that comes with GCC, with -msoft-float in order for this to
21703           work.
21704
21705       -mhard-quad-float
21706           Generate output containing quad-word (long double) floating-point
21707           instructions.
21708
21709       -msoft-quad-float
21710           Generate output containing library calls for quad-word (long
21711           double) floating-point instructions.  The functions called are
21712           those specified in the SPARC ABI.  This is the default.
21713
21714           As of this writing, there are no SPARC implementations that have
21715           hardware support for the quad-word floating-point instructions.
21716           They all invoke a trap handler for one of these instructions, and
21717           then the trap handler emulates the effect of the instruction.
21718           Because of the trap handler overhead, this is much slower than
21719           calling the ABI library routines.  Thus the -msoft-quad-float
21720           option is the default.
21721
21722       -mno-unaligned-doubles
21723       -munaligned-doubles
21724           Assume that doubles have 8-byte alignment.  This is the default.
21725
21726           With -munaligned-doubles, GCC assumes that doubles have 8-byte
21727           alignment only if they are contained in another type, or if they
21728           have an absolute address.  Otherwise, it assumes they have 4-byte
21729           alignment.  Specifying this option avoids some rare compatibility
21730           problems with code generated by other compilers.  It is not the
21731           default because it results in a performance loss, especially for
21732           floating-point code.
21733
21734       -muser-mode
21735       -mno-user-mode
21736           Do not generate code that can only run in supervisor mode.  This is
21737           relevant only for the "casa" instruction emitted for the LEON3
21738           processor.  This is the default.
21739
21740       -mfaster-structs
21741       -mno-faster-structs
21742           With -mfaster-structs, the compiler assumes that structures should
21743           have 8-byte alignment.  This enables the use of pairs of "ldd" and
21744           "std" instructions for copies in structure assignment, in place of
21745           twice as many "ld" and "st" pairs.  However, the use of this
21746           changed alignment directly violates the SPARC ABI.  Thus, it's
21747           intended only for use on targets where the developer acknowledges
21748           that their resulting code is not directly in line with the rules of
21749           the ABI.
21750
21751       -mstd-struct-return
21752       -mno-std-struct-return
21753           With -mstd-struct-return, the compiler generates checking code in
21754           functions returning structures or unions to detect size mismatches
21755           between the two sides of function calls, as per the 32-bit ABI.
21756
21757           The default is -mno-std-struct-return.  This option has no effect
21758           in 64-bit mode.
21759
21760       -mlra
21761       -mno-lra
21762           Enable Local Register Allocation.  This is the default for SPARC
21763           since GCC 7 so -mno-lra needs to be passed to get old Reload.
21764
21765       -mcpu=cpu_type
21766           Set the instruction set, register set, and instruction scheduling
21767           parameters for machine type cpu_type.  Supported values for
21768           cpu_type are v7, cypress, v8, supersparc, hypersparc, leon, leon3,
21769           leon3v7, sparclite, f930, f934, sparclite86x, sparclet, tsc701, v9,
21770           ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4,
21771           niagara7 and m8.
21772
21773           Native Solaris and GNU/Linux toolchains also support the value
21774           native, which selects the best architecture option for the host
21775           processor.  -mcpu=native has no effect if GCC does not recognize
21776           the processor.
21777
21778           Default instruction scheduling parameters are used for values that
21779           select an architecture and not an implementation.  These are v7,
21780           v8, sparclite, sparclet, v9.
21781
21782           Here is a list of each supported architecture and their supported
21783           implementations.
21784
21785           v7  cypress, leon3v7
21786
21787           v8  supersparc, hypersparc, leon, leon3
21788
21789           sparclite
21790               f930, f934, sparclite86x
21791
21792           sparclet
21793               tsc701
21794
21795           v9  ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4,
21796               niagara7, m8
21797
21798           By default (unless configured otherwise), GCC generates code for
21799           the V7 variant of the SPARC architecture.  With -mcpu=cypress, the
21800           compiler additionally optimizes it for the Cypress CY7C602 chip, as
21801           used in the SPARCStation/SPARCServer 3xx series.  This is also
21802           appropriate for the older SPARCStation 1, 2, IPX etc.
21803
21804           With -mcpu=v8, GCC generates code for the V8 variant of the SPARC
21805           architecture.  The only difference from V7 code is that the
21806           compiler emits the integer multiply and integer divide instructions
21807           which exist in SPARC-V8 but not in SPARC-V7.  With
21808           -mcpu=supersparc, the compiler additionally optimizes it for the
21809           SuperSPARC chip, as used in the SPARCStation 10, 1000 and 2000
21810           series.
21811
21812           With -mcpu=sparclite, GCC generates code for the SPARClite variant
21813           of the SPARC architecture.  This adds the integer multiply, integer
21814           divide step and scan ("ffs") instructions which exist in SPARClite
21815           but not in SPARC-V7.  With -mcpu=f930, the compiler additionally
21816           optimizes it for the Fujitsu MB86930 chip, which is the original
21817           SPARClite, with no FPU.  With -mcpu=f934, the compiler additionally
21818           optimizes it for the Fujitsu MB86934 chip, which is the more recent
21819           SPARClite with FPU.
21820
21821           With -mcpu=sparclet, GCC generates code for the SPARClet variant of
21822           the SPARC architecture.  This adds the integer multiply,
21823           multiply/accumulate, integer divide step and scan ("ffs")
21824           instructions which exist in SPARClet but not in SPARC-V7.  With
21825           -mcpu=tsc701, the compiler additionally optimizes it for the TEMIC
21826           SPARClet chip.
21827
21828           With -mcpu=v9, GCC generates code for the V9 variant of the SPARC
21829           architecture.  This adds 64-bit integer and floating-point move
21830           instructions, 3 additional floating-point condition code registers
21831           and conditional move instructions.  With -mcpu=ultrasparc, the
21832           compiler additionally optimizes it for the Sun UltraSPARC I/II/IIi
21833           chips.  With -mcpu=ultrasparc3, the compiler additionally optimizes
21834           it for the Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+ chips.  With
21835           -mcpu=niagara, the compiler additionally optimizes it for Sun
21836           UltraSPARC T1 chips.  With -mcpu=niagara2, the compiler
21837           additionally optimizes it for Sun UltraSPARC T2 chips. With
21838           -mcpu=niagara3, the compiler additionally optimizes it for Sun
21839           UltraSPARC T3 chips.  With -mcpu=niagara4, the compiler
21840           additionally optimizes it for Sun UltraSPARC T4 chips.  With
21841           -mcpu=niagara7, the compiler additionally optimizes it for Oracle
21842           SPARC M7 chips.  With -mcpu=m8, the compiler additionally optimizes
21843           it for Oracle M8 chips.
21844
21845       -mtune=cpu_type
21846           Set the instruction scheduling parameters for machine type
21847           cpu_type, but do not set the instruction set or register set that
21848           the option -mcpu=cpu_type does.
21849
21850           The same values for -mcpu=cpu_type can be used for -mtune=cpu_type,
21851           but the only useful values are those that select a particular CPU
21852           implementation.  Those are cypress, supersparc, hypersparc, leon,
21853           leon3, leon3v7, f930, f934, sparclite86x, tsc701, ultrasparc,
21854           ultrasparc3, niagara, niagara2, niagara3, niagara4, niagara7 and
21855           m8.  With native Solaris and GNU/Linux toolchains, native can also
21856           be used.
21857
21858       -mv8plus
21859       -mno-v8plus
21860           With -mv8plus, GCC generates code for the SPARC-V8+ ABI.  The
21861           difference from the V8 ABI is that the global and out registers are
21862           considered 64 bits wide.  This is enabled by default on Solaris in
21863           32-bit mode for all SPARC-V9 processors.
21864
21865       -mvis
21866       -mno-vis
21867           With -mvis, GCC generates code that takes advantage of the
21868           UltraSPARC Visual Instruction Set extensions.  The default is
21869           -mno-vis.
21870
21871       -mvis2
21872       -mno-vis2
21873           With -mvis2, GCC generates code that takes advantage of version 2.0
21874           of the UltraSPARC Visual Instruction Set extensions.  The default
21875           is -mvis2 when targeting a cpu that supports such instructions,
21876           such as UltraSPARC-III and later.  Setting -mvis2 also sets -mvis.
21877
21878       -mvis3
21879       -mno-vis3
21880           With -mvis3, GCC generates code that takes advantage of version 3.0
21881           of the UltraSPARC Visual Instruction Set extensions.  The default
21882           is -mvis3 when targeting a cpu that supports such instructions,
21883           such as niagara-3 and later.  Setting -mvis3 also sets -mvis2 and
21884           -mvis.
21885
21886       -mvis4
21887       -mno-vis4
21888           With -mvis4, GCC generates code that takes advantage of version 4.0
21889           of the UltraSPARC Visual Instruction Set extensions.  The default
21890           is -mvis4 when targeting a cpu that supports such instructions,
21891           such as niagara-7 and later.  Setting -mvis4 also sets -mvis3,
21892           -mvis2 and -mvis.
21893
21894       -mvis4b
21895       -mno-vis4b
21896           With -mvis4b, GCC generates code that takes advantage of version
21897           4.0 of the UltraSPARC Visual Instruction Set extensions, plus the
21898           additional VIS instructions introduced in the Oracle SPARC
21899           Architecture 2017.  The default is -mvis4b when targeting a cpu
21900           that supports such instructions, such as m8 and later.  Setting
21901           -mvis4b also sets -mvis4, -mvis3, -mvis2 and -mvis.
21902
21903       -mcbcond
21904       -mno-cbcond
21905           With -mcbcond, GCC generates code that takes advantage of the
21906           UltraSPARC Compare-and-Branch-on-Condition instructions.  The
21907           default is -mcbcond when targeting a CPU that supports such
21908           instructions, such as Niagara-4 and later.
21909
21910       -mfmaf
21911       -mno-fmaf
21912           With -mfmaf, GCC generates code that takes advantage of the
21913           UltraSPARC Fused Multiply-Add Floating-point instructions.  The
21914           default is -mfmaf when targeting a CPU that supports such
21915           instructions, such as Niagara-3 and later.
21916
21917       -mfsmuld
21918       -mno-fsmuld
21919           With -mfsmuld, GCC generates code that takes advantage of the
21920           Floating-point Multiply Single to Double (FsMULd) instruction.  The
21921           default is -mfsmuld when targeting a CPU supporting the
21922           architecture versions V8 or V9 with FPU except -mcpu=leon.
21923
21924       -mpopc
21925       -mno-popc
21926           With -mpopc, GCC generates code that takes advantage of the
21927           UltraSPARC Population Count instruction.  The default is -mpopc
21928           when targeting a CPU that supports such an instruction, such as
21929           Niagara-2 and later.
21930
21931       -msubxc
21932       -mno-subxc
21933           With -msubxc, GCC generates code that takes advantage of the
21934           UltraSPARC Subtract-Extended-with-Carry instruction.  The default
21935           is -msubxc when targeting a CPU that supports such an instruction,
21936           such as Niagara-7 and later.
21937
21938       -mfix-at697f
21939           Enable the documented workaround for the single erratum of the
21940           Atmel AT697F processor (which corresponds to erratum #13 of the
21941           AT697E processor).
21942
21943       -mfix-ut699
21944           Enable the documented workarounds for the floating-point errata and
21945           the data cache nullify errata of the UT699 processor.
21946
21947       -mfix-ut700
21948           Enable the documented workaround for the back-to-back store errata
21949           of the UT699E/UT700 processor.
21950
21951       -mfix-gr712rc
21952           Enable the documented workaround for the back-to-back store errata
21953           of the GR712RC processor.
21954
21955       These -m options are supported in addition to the above on SPARC-V9
21956       processors in 64-bit environments:
21957
21958       -m32
21959       -m64
21960           Generate code for a 32-bit or 64-bit environment.  The 32-bit
21961           environment sets int, long and pointer to 32 bits.  The 64-bit
21962           environment sets int to 32 bits and long and pointer to 64 bits.
21963
21964       -mcmodel=which
21965           Set the code model to one of
21966
21967           medlow
21968               The Medium/Low code model: 64-bit addresses, programs must be
21969               linked in the low 32 bits of memory.  Programs can be
21970               statically or dynamically linked.
21971
21972           medmid
21973               The Medium/Middle code model: 64-bit addresses, programs must
21974               be linked in the low 44 bits of memory, the text and data
21975               segments must be less than 2GB in size and the data segment
21976               must be located within 2GB of the text segment.
21977
21978           medany
21979               The Medium/Anywhere code model: 64-bit addresses, programs may
21980               be linked anywhere in memory, the text and data segments must
21981               be less than 2GB in size and the data segment must be located
21982               within 2GB of the text segment.
21983
21984           embmedany
21985               The Medium/Anywhere code model for embedded systems: 64-bit
21986               addresses, the text and data segments must be less than 2GB in
21987               size, both starting anywhere in memory (determined at link
21988               time).  The global register %g4 points to the base of the data
21989               segment.  Programs are statically linked and PIC is not
21990               supported.
21991
21992       -mmemory-model=mem-model
21993           Set the memory model in force on the processor to one of
21994
21995           default
21996               The default memory model for the processor and operating
21997               system.
21998
21999           rmo Relaxed Memory Order
22000
22001           pso Partial Store Order
22002
22003           tso Total Store Order
22004
22005           sc  Sequential Consistency
22006
22007           These memory models are formally defined in Appendix D of the
22008           SPARC-V9 architecture manual, as set in the processor's "PSTATE.MM"
22009           field.
22010
22011       -mstack-bias
22012       -mno-stack-bias
22013           With -mstack-bias, GCC assumes that the stack pointer, and frame
22014           pointer if present, are offset by -2047 which must be added back
22015           when making stack frame references.  This is the default in 64-bit
22016           mode.  Otherwise, assume no such offset is present.
22017
22018   SPU Options
22019       These -m options are supported on the SPU:
22020
22021       -mwarn-reloc
22022       -merror-reloc
22023           The loader for SPU does not handle dynamic relocations.  By
22024           default, GCC gives an error when it generates code that requires a
22025           dynamic relocation.  -mno-error-reloc disables the error,
22026           -mwarn-reloc generates a warning instead.
22027
22028       -msafe-dma
22029       -munsafe-dma
22030           Instructions that initiate or test completion of DMA must not be
22031           reordered with respect to loads and stores of the memory that is
22032           being accessed.  With -munsafe-dma you must use the "volatile"
22033           keyword to protect memory accesses, but that can lead to
22034           inefficient code in places where the memory is known to not change.
22035           Rather than mark the memory as volatile, you can use -msafe-dma to
22036           tell the compiler to treat the DMA instructions as potentially
22037           affecting all memory.
22038
22039       -mbranch-hints
22040           By default, GCC generates a branch hint instruction to avoid
22041           pipeline stalls for always-taken or probably-taken branches.  A
22042           hint is not generated closer than 8 instructions away from its
22043           branch.  There is little reason to disable them, except for
22044           debugging purposes, or to make an object a little bit smaller.
22045
22046       -msmall-mem
22047       -mlarge-mem
22048           By default, GCC generates code assuming that addresses are never
22049           larger than 18 bits.  With -mlarge-mem code is generated that
22050           assumes a full 32-bit address.
22051
22052       -mstdmain
22053           By default, GCC links against startup code that assumes the SPU-
22054           style main function interface (which has an unconventional
22055           parameter list).  With -mstdmain, GCC links your program against
22056           startup code that assumes a C99-style interface to "main",
22057           including a local copy of "argv" strings.
22058
22059       -mfixed-range=register-range
22060           Generate code treating the given register range as fixed registers.
22061           A fixed register is one that the register allocator cannot use.
22062           This is useful when compiling kernel code.  A register range is
22063           specified as two registers separated by a dash.  Multiple register
22064           ranges can be specified separated by a comma.
22065
22066       -mea32
22067       -mea64
22068           Compile code assuming that pointers to the PPU address space
22069           accessed via the "__ea" named address space qualifier are either 32
22070           or 64 bits wide.  The default is 32 bits.  As this is an ABI-
22071           changing option, all object code in an executable must be compiled
22072           with the same setting.
22073
22074       -maddress-space-conversion
22075       -mno-address-space-conversion
22076           Allow/disallow treating the "__ea" address space as superset of the
22077           generic address space.  This enables explicit type casts between
22078           "__ea" and generic pointer as well as implicit conversions of
22079           generic pointers to "__ea" pointers.  The default is to allow
22080           address space pointer conversions.
22081
22082       -mcache-size=cache-size
22083           This option controls the version of libgcc that the compiler links
22084           to an executable and selects a software-managed cache for accessing
22085           variables in the "__ea" address space with a particular cache size.
22086           Possible options for cache-size are 8, 16, 32, 64 and 128.  The
22087           default cache size is 64KB.
22088
22089       -matomic-updates
22090       -mno-atomic-updates
22091           This option controls the version of libgcc that the compiler links
22092           to an executable and selects whether atomic updates to the
22093           software-managed cache of PPU-side variables are used.  If you use
22094           atomic updates, changes to a PPU variable from SPU code using the
22095           "__ea" named address space qualifier do not interfere with changes
22096           to other PPU variables residing in the same cache line from PPU
22097           code.  If you do not use atomic updates, such interference may
22098           occur; however, writing back cache lines is more efficient.  The
22099           default behavior is to use atomic updates.
22100
22101       -mdual-nops
22102       -mdual-nops=n
22103           By default, GCC inserts NOPs to increase dual issue when it expects
22104           it to increase performance.  n can be a value from 0 to 10.  A
22105           smaller n inserts fewer NOPs.  10 is the default, 0 is the same as
22106           -mno-dual-nops.  Disabled with -Os.
22107
22108       -mhint-max-nops=n
22109           Maximum number of NOPs to insert for a branch hint.  A branch hint
22110           must be at least 8 instructions away from the branch it is
22111           affecting.  GCC inserts up to n NOPs to enforce this, otherwise it
22112           does not generate the branch hint.
22113
22114       -mhint-max-distance=n
22115           The encoding of the branch hint instruction limits the hint to be
22116           within 256 instructions of the branch it is affecting.  By default,
22117           GCC makes sure it is within 125.
22118
22119       -msafe-hints
22120           Work around a hardware bug that causes the SPU to stall
22121           indefinitely.  By default, GCC inserts the "hbrp" instruction to
22122           make sure this stall won't happen.
22123
22124   Options for System V
22125       These additional options are available on System V Release 4 for
22126       compatibility with other compilers on those systems:
22127
22128       -G  Create a shared object.  It is recommended that -symbolic or
22129           -shared be used instead.
22130
22131       -Qy Identify the versions of each tool used by the compiler, in a
22132           ".ident" assembler directive in the output.
22133
22134       -Qn Refrain from adding ".ident" directives to the output file (this is
22135           the default).
22136
22137       -YP,dirs
22138           Search the directories dirs, and no others, for libraries specified
22139           with -l.
22140
22141       -Ym,dir
22142           Look in the directory dir to find the M4 preprocessor.  The
22143           assembler uses this option.
22144
22145   TILE-Gx Options
22146       These -m options are supported on the TILE-Gx:
22147
22148       -mcmodel=small
22149           Generate code for the small model.  The distance for direct calls
22150           is limited to 500M in either direction.  PC-relative addresses are
22151           32 bits.  Absolute addresses support the full address range.
22152
22153       -mcmodel=large
22154           Generate code for the large model.  There is no limitation on call
22155           distance, pc-relative addresses, or absolute addresses.
22156
22157       -mcpu=name
22158           Selects the type of CPU to be targeted.  Currently the only
22159           supported type is tilegx.
22160
22161       -m32
22162       -m64
22163           Generate code for a 32-bit or 64-bit environment.  The 32-bit
22164           environment sets int, long, and pointer to 32 bits.  The 64-bit
22165           environment sets int to 32 bits and long and pointer to 64 bits.
22166
22167       -mbig-endian
22168       -mlittle-endian
22169           Generate code in big/little endian mode, respectively.
22170
22171   TILEPro Options
22172       These -m options are supported on the TILEPro:
22173
22174       -mcpu=name
22175           Selects the type of CPU to be targeted.  Currently the only
22176           supported type is tilepro.
22177
22178       -m32
22179           Generate code for a 32-bit environment, which sets int, long, and
22180           pointer to 32 bits.  This is the only supported behavior so the
22181           flag is essentially ignored.
22182
22183   V850 Options
22184       These -m options are defined for V850 implementations:
22185
22186       -mlong-calls
22187       -mno-long-calls
22188           Treat all calls as being far away (near).  If calls are assumed to
22189           be far away, the compiler always loads the function's address into
22190           a register, and calls indirect through the pointer.
22191
22192       -mno-ep
22193       -mep
22194           Do not optimize (do optimize) basic blocks that use the same index
22195           pointer 4 or more times to copy pointer into the "ep" register, and
22196           use the shorter "sld" and "sst" instructions.  The -mep option is
22197           on by default if you optimize.
22198
22199       -mno-prolog-function
22200       -mprolog-function
22201           Do not use (do use) external functions to save and restore
22202           registers at the prologue and epilogue of a function.  The external
22203           functions are slower, but use less code space if more than one
22204           function saves the same number of registers.  The -mprolog-function
22205           option is on by default if you optimize.
22206
22207       -mspace
22208           Try to make the code as small as possible.  At present, this just
22209           turns on the -mep and -mprolog-function options.
22210
22211       -mtda=n
22212           Put static or global variables whose size is n bytes or less into
22213           the tiny data area that register "ep" points to.  The tiny data
22214           area can hold up to 256 bytes in total (128 bytes for byte
22215           references).
22216
22217       -msda=n
22218           Put static or global variables whose size is n bytes or less into
22219           the small data area that register "gp" points to.  The small data
22220           area can hold up to 64 kilobytes.
22221
22222       -mzda=n
22223           Put static or global variables whose size is n bytes or less into
22224           the first 32 kilobytes of memory.
22225
22226       -mv850
22227           Specify that the target processor is the V850.
22228
22229       -mv850e3v5
22230           Specify that the target processor is the V850E3V5.  The
22231           preprocessor constant "__v850e3v5__" is defined if this option is
22232           used.
22233
22234       -mv850e2v4
22235           Specify that the target processor is the V850E3V5.  This is an
22236           alias for the -mv850e3v5 option.
22237
22238       -mv850e2v3
22239           Specify that the target processor is the V850E2V3.  The
22240           preprocessor constant "__v850e2v3__" is defined if this option is
22241           used.
22242
22243       -mv850e2
22244           Specify that the target processor is the V850E2.  The preprocessor
22245           constant "__v850e2__" is defined if this option is used.
22246
22247       -mv850e1
22248           Specify that the target processor is the V850E1.  The preprocessor
22249           constants "__v850e1__" and "__v850e__" are defined if this option
22250           is used.
22251
22252       -mv850es
22253           Specify that the target processor is the V850ES.  This is an alias
22254           for the -mv850e1 option.
22255
22256       -mv850e
22257           Specify that the target processor is the V850E.  The preprocessor
22258           constant "__v850e__" is defined if this option is used.
22259
22260           If neither -mv850 nor -mv850e nor -mv850e1 nor -mv850e2 nor
22261           -mv850e2v3 nor -mv850e3v5 are defined then a default target
22262           processor is chosen and the relevant __v850*__ preprocessor
22263           constant is defined.
22264
22265           The preprocessor constants "__v850" and "__v851__" are always
22266           defined, regardless of which processor variant is the target.
22267
22268       -mdisable-callt
22269       -mno-disable-callt
22270           This option suppresses generation of the "CALLT" instruction for
22271           the v850e, v850e1, v850e2, v850e2v3 and v850e3v5 flavors of the
22272           v850 architecture.
22273
22274           This option is enabled by default when the RH850 ABI is in use (see
22275           -mrh850-abi), and disabled by default when the GCC ABI is in use.
22276           If "CALLT" instructions are being generated then the C preprocessor
22277           symbol "__V850_CALLT__" is defined.
22278
22279       -mrelax
22280       -mno-relax
22281           Pass on (or do not pass on) the -mrelax command-line option to the
22282           assembler.
22283
22284       -mlong-jumps
22285       -mno-long-jumps
22286           Disable (or re-enable) the generation of PC-relative jump
22287           instructions.
22288
22289       -msoft-float
22290       -mhard-float
22291           Disable (or re-enable) the generation of hardware floating point
22292           instructions.  This option is only significant when the target
22293           architecture is V850E2V3 or higher.  If hardware floating point
22294           instructions are being generated then the C preprocessor symbol
22295           "__FPU_OK__" is defined, otherwise the symbol "__NO_FPU__" is
22296           defined.
22297
22298       -mloop
22299           Enables the use of the e3v5 LOOP instruction.  The use of this
22300           instruction is not enabled by default when the e3v5 architecture is
22301           selected because its use is still experimental.
22302
22303       -mrh850-abi
22304       -mghs
22305           Enables support for the RH850 version of the V850 ABI.  This is the
22306           default.  With this version of the ABI the following rules apply:
22307
22308           *   Integer sized structures and unions are returned via a memory
22309               pointer rather than a register.
22310
22311           *   Large structures and unions (more than 8 bytes in size) are
22312               passed by value.
22313
22314           *   Functions are aligned to 16-bit boundaries.
22315
22316           *   The -m8byte-align command-line option is supported.
22317
22318           *   The -mdisable-callt command-line option is enabled by default.
22319               The -mno-disable-callt command-line option is not supported.
22320
22321           When this version of the ABI is enabled the C preprocessor symbol
22322           "__V850_RH850_ABI__" is defined.
22323
22324       -mgcc-abi
22325           Enables support for the old GCC version of the V850 ABI.  With this
22326           version of the ABI the following rules apply:
22327
22328           *   Integer sized structures and unions are returned in register
22329               "r10".
22330
22331           *   Large structures and unions (more than 8 bytes in size) are
22332               passed by reference.
22333
22334           *   Functions are aligned to 32-bit boundaries, unless optimizing
22335               for size.
22336
22337           *   The -m8byte-align command-line option is not supported.
22338
22339           *   The -mdisable-callt command-line option is supported but not
22340               enabled by default.
22341
22342           When this version of the ABI is enabled the C preprocessor symbol
22343           "__V850_GCC_ABI__" is defined.
22344
22345       -m8byte-align
22346       -mno-8byte-align
22347           Enables support for "double" and "long long" types to be aligned on
22348           8-byte boundaries.  The default is to restrict the alignment of all
22349           objects to at most 4-bytes.  When -m8byte-align is in effect the C
22350           preprocessor symbol "__V850_8BYTE_ALIGN__" is defined.
22351
22352       -mbig-switch
22353           Generate code suitable for big switch tables.  Use this option only
22354           if the assembler/linker complain about out of range branches within
22355           a switch table.
22356
22357       -mapp-regs
22358           This option causes r2 and r5 to be used in the code generated by
22359           the compiler.  This setting is the default.
22360
22361       -mno-app-regs
22362           This option causes r2 and r5 to be treated as fixed registers.
22363
22364   VAX Options
22365       These -m options are defined for the VAX:
22366
22367       -munix
22368           Do not output certain jump instructions ("aobleq" and so on) that
22369           the Unix assembler for the VAX cannot handle across long ranges.
22370
22371       -mgnu
22372           Do output those jump instructions, on the assumption that the GNU
22373           assembler is being used.
22374
22375       -mg Output code for G-format floating-point numbers instead of
22376           D-format.
22377
22378   Visium Options
22379       -mdebug
22380           A program which performs file I/O and is destined to run on an MCM
22381           target should be linked with this option.  It causes the libraries
22382           libc.a and libdebug.a to be linked.  The program should be run on
22383           the target under the control of the GDB remote debugging stub.
22384
22385       -msim
22386           A program which performs file I/O and is destined to run on the
22387           simulator should be linked with option.  This causes libraries
22388           libc.a and libsim.a to be linked.
22389
22390       -mfpu
22391       -mhard-float
22392           Generate code containing floating-point instructions.  This is the
22393           default.
22394
22395       -mno-fpu
22396       -msoft-float
22397           Generate code containing library calls for floating-point.
22398
22399           -msoft-float changes the calling convention in the output file;
22400           therefore, it is only useful if you compile all of a program with
22401           this option.  In particular, you need to compile libgcc.a, the
22402           library that comes with GCC, with -msoft-float in order for this to
22403           work.
22404
22405       -mcpu=cpu_type
22406           Set the instruction set, register set, and instruction scheduling
22407           parameters for machine type cpu_type.  Supported values for
22408           cpu_type are mcm, gr5 and gr6.
22409
22410           mcm is a synonym of gr5 present for backward compatibility.
22411
22412           By default (unless configured otherwise), GCC generates code for
22413           the GR5 variant of the Visium architecture.
22414
22415           With -mcpu=gr6, GCC generates code for the GR6 variant of the
22416           Visium architecture.  The only difference from GR5 code is that the
22417           compiler will generate block move instructions.
22418
22419       -mtune=cpu_type
22420           Set the instruction scheduling parameters for machine type
22421           cpu_type, but do not set the instruction set or register set that
22422           the option -mcpu=cpu_type would.
22423
22424       -msv-mode
22425           Generate code for the supervisor mode, where there are no
22426           restrictions on the access to general registers.  This is the
22427           default.
22428
22429       -muser-mode
22430           Generate code for the user mode, where the access to some general
22431           registers is forbidden: on the GR5, registers r24 to r31 cannot be
22432           accessed in this mode; on the GR6, only registers r29 to r31 are
22433           affected.
22434
22435   VMS Options
22436       These -m options are defined for the VMS implementations:
22437
22438       -mvms-return-codes
22439           Return VMS condition codes from "main". The default is to return
22440           POSIX-style condition (e.g. error) codes.
22441
22442       -mdebug-main=prefix
22443           Flag the first routine whose name starts with prefix as the main
22444           routine for the debugger.
22445
22446       -mmalloc64
22447           Default to 64-bit memory allocation routines.
22448
22449       -mpointer-size=size
22450           Set the default size of pointers. Possible options for size are 32
22451           or short for 32 bit pointers, 64 or long for 64 bit pointers, and
22452           no for supporting only 32 bit pointers.  The later option disables
22453           "pragma pointer_size".
22454
22455   VxWorks Options
22456       The options in this section are defined for all VxWorks targets.
22457       Options specific to the target hardware are listed with the other
22458       options for that target.
22459
22460       -mrtp
22461           GCC can generate code for both VxWorks kernels and real time
22462           processes (RTPs).  This option switches from the former to the
22463           latter.  It also defines the preprocessor macro "__RTP__".
22464
22465       -non-static
22466           Link an RTP executable against shared libraries rather than static
22467           libraries.  The options -static and -shared can also be used for
22468           RTPs; -static is the default.
22469
22470       -Bstatic
22471       -Bdynamic
22472           These options are passed down to the linker.  They are defined for
22473           compatibility with Diab.
22474
22475       -Xbind-lazy
22476           Enable lazy binding of function calls.  This option is equivalent
22477           to -Wl,-z,now and is defined for compatibility with Diab.
22478
22479       -Xbind-now
22480           Disable lazy binding of function calls.  This option is the default
22481           and is defined for compatibility with Diab.
22482
22483   x86 Options
22484       These -m options are defined for the x86 family of computers.
22485
22486       -march=cpu-type
22487           Generate instructions for the machine type cpu-type.  In contrast
22488           to -mtune=cpu-type, which merely tunes the generated code for the
22489           specified cpu-type, -march=cpu-type allows GCC to generate code
22490           that may not run at all on processors other than the one indicated.
22491           Specifying -march=cpu-type implies -mtune=cpu-type.
22492
22493           The choices for cpu-type are:
22494
22495           native
22496               This selects the CPU to generate code for at compilation time
22497               by determining the processor type of the compiling machine.
22498               Using -march=native enables all instruction subsets supported
22499               by the local machine (hence the result might not run on
22500               different machines).  Using -mtune=native produces code
22501               optimized for the local machine under the constraints of the
22502               selected instruction set.
22503
22504           x86-64
22505               A generic CPU with 64-bit extensions.
22506
22507           i386
22508               Original Intel i386 CPU.
22509
22510           i486
22511               Intel i486 CPU.  (No scheduling is implemented for this chip.)
22512
22513           i586
22514           pentium
22515               Intel Pentium CPU with no MMX support.
22516
22517           lakemont
22518               Intel Lakemont MCU, based on Intel Pentium CPU.
22519
22520           pentium-mmx
22521               Intel Pentium MMX CPU, based on Pentium core with MMX
22522               instruction set support.
22523
22524           pentiumpro
22525               Intel Pentium Pro CPU.
22526
22527           i686
22528               When used with -march, the Pentium Pro instruction set is used,
22529               so the code runs on all i686 family chips.  When used with
22530               -mtune, it has the same meaning as generic.
22531
22532           pentium2
22533               Intel Pentium II CPU, based on Pentium Pro core with MMX
22534               instruction set support.
22535
22536           pentium3
22537           pentium3m
22538               Intel Pentium III CPU, based on Pentium Pro core with MMX and
22539               SSE instruction set support.
22540
22541           pentium-m
22542               Intel Pentium M; low-power version of Intel Pentium III CPU
22543               with MMX, SSE and SSE2 instruction set support.  Used by
22544               Centrino notebooks.
22545
22546           pentium4
22547           pentium4m
22548               Intel Pentium 4 CPU with MMX, SSE and SSE2 instruction set
22549               support.
22550
22551           prescott
22552               Improved version of Intel Pentium 4 CPU with MMX, SSE, SSE2 and
22553               SSE3 instruction set support.
22554
22555           nocona
22556               Improved version of Intel Pentium 4 CPU with 64-bit extensions,
22557               MMX, SSE, SSE2 and SSE3 instruction set support.
22558
22559           core2
22560               Intel Core 2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3
22561               and SSSE3 instruction set support.
22562
22563           nehalem
22564               Intel Nehalem CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3,
22565               SSSE3, SSE4.1, SSE4.2 and POPCNT instruction set support.
22566
22567           westmere
22568               Intel Westmere CPU with 64-bit extensions, MMX, SSE, SSE2,
22569               SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES and PCLMUL instruction
22570               set support.
22571
22572           sandybridge
22573               Intel Sandy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2,
22574               SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AES and PCLMUL
22575               instruction set support.
22576
22577           ivybridge
22578               Intel Ivy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2,
22579               SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AES, PCLMUL,
22580               FSGSBASE, RDRND and F16C instruction set support.
22581
22582           haswell
22583               Intel Haswell CPU with 64-bit extensions, MOVBE, MMX, SSE,
22584               SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES,
22585               PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2 and F16C instruction
22586               set support.
22587
22588           broadwell
22589               Intel Broadwell CPU with 64-bit extensions, MOVBE, MMX, SSE,
22590               SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES,
22591               PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX and
22592               PREFETCHW instruction set support.
22593
22594           skylake
22595               Intel Skylake CPU with 64-bit extensions, MOVBE, MMX, SSE,
22596               SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES,
22597               PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX,
22598               PREFETCHW, CLFLUSHOPT, XSAVEC and XSAVES instruction set
22599               support.
22600
22601           bonnell
22602               Intel Bonnell CPU with 64-bit extensions, MOVBE, MMX, SSE,
22603               SSE2, SSE3 and SSSE3 instruction set support.
22604
22605           silvermont
22606               Intel Silvermont CPU with 64-bit extensions, MOVBE, MMX, SSE,
22607               SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PCLMUL and
22608               RDRND instruction set support.
22609
22610           knl Intel Knight's Landing CPU with 64-bit extensions, MOVBE, MMX,
22611               SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES,
22612               PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX,
22613               PREFETCHW, AVX512F, AVX512PF, AVX512ER and AVX512CD instruction
22614               set support.
22615
22616           knm Intel Knights Mill CPU with 64-bit extensions, MOVBE, MMX, SSE,
22617               SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES,
22618               PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX,
22619               PREFETCHW, AVX512F, AVX512PF, AVX512ER, AVX512CD, AVX5124VNNIW,
22620               AVX5124FMAPS and AVX512VPOPCNTDQ instruction set support.
22621
22622           skylake-avx512
22623               Intel Skylake Server CPU with 64-bit extensions, MOVBE, MMX,
22624               SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2,
22625               AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED,
22626               ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, CLWB,
22627               AVX512VL, AVX512BW, AVX512DQ and AVX512CD instruction set
22628               support.
22629
22630           cannonlake
22631               Intel Cannonlake Server CPU with 64-bit extensions, MOVBE, MMX,
22632               SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2,
22633               AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED,
22634               ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, AVX512VL,
22635               AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI, AVX512IFMA, SHA and
22636               UMIP instruction set support.
22637
22638           icelake-client
22639               Intel Icelake Client CPU with 64-bit extensions, MOVBE, MMX,
22640               SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2,
22641               AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED,
22642               ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, AVX512VL,
22643               AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI, AVX512IFMA, SHA,
22644               CLWB, UMIP, RDPID, GFNI, AVX512VBMI2, AVX512VPOPCNTDQ,
22645               AVX512BITALG, AVX512VNNI, VPCLMULQDQ, VAES instruction set
22646               support.
22647
22648           icelake-server
22649               Intel Icelake Server CPU with 64-bit extensions, MOVBE, MMX,
22650               SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2,
22651               AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED,
22652               ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, AVX512VL,
22653               AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI, AVX512IFMA, SHA,
22654               CLWB, UMIP, RDPID, GFNI, AVX512VBMI2, AVX512VPOPCNTDQ,
22655               AVX512BITALG, AVX512VNNI, VPCLMULQDQ, VAES, PCONFIG and
22656               WBNOINVD instruction set support.
22657
22658           k6  AMD K6 CPU with MMX instruction set support.
22659
22660           k6-2
22661           k6-3
22662               Improved versions of AMD K6 CPU with MMX and 3DNow! instruction
22663               set support.
22664
22665           athlon
22666           athlon-tbird
22667               AMD Athlon CPU with MMX, 3dNOW!, enhanced 3DNow! and SSE
22668               prefetch instructions support.
22669
22670           athlon-4
22671           athlon-xp
22672           athlon-mp
22673               Improved AMD Athlon CPU with MMX, 3DNow!, enhanced 3DNow! and
22674               full SSE instruction set support.
22675
22676           k8
22677           opteron
22678           athlon64
22679           athlon-fx
22680               Processors based on the AMD K8 core with x86-64 instruction set
22681               support, including the AMD Opteron, Athlon 64, and Athlon 64 FX
22682               processors.  (This supersets MMX, SSE, SSE2, 3DNow!, enhanced
22683               3DNow! and 64-bit instruction set extensions.)
22684
22685           k8-sse3
22686           opteron-sse3
22687           athlon64-sse3
22688               Improved versions of AMD K8 cores with SSE3 instruction set
22689               support.
22690
22691           amdfam10
22692           barcelona
22693               CPUs based on AMD Family 10h cores with x86-64 instruction set
22694               support.  (This supersets MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!,
22695               enhanced 3DNow!, ABM and 64-bit instruction set extensions.)
22696
22697           bdver1
22698               CPUs based on AMD Family 15h cores with x86-64 instruction set
22699               support.  (This supersets FMA4, AVX, XOP, LWP, AES, PCL_MUL,
22700               CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM
22701               and 64-bit instruction set extensions.)
22702
22703           bdver2
22704               AMD Family 15h core based CPUs with x86-64 instruction set
22705               support.  (This supersets BMI, TBM, F16C, FMA, FMA4, AVX, XOP,
22706               LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3,
22707               SSE4.1, SSE4.2, ABM and 64-bit instruction set extensions.)
22708
22709           bdver3
22710               AMD Family 15h core based CPUs with x86-64 instruction set
22711               support.  (This supersets BMI, TBM, F16C, FMA, FMA4, FSGSBASE,
22712               AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A,
22713               SSSE3, SSE4.1, SSE4.2, ABM and 64-bit instruction set
22714               extensions.
22715
22716           bdver4
22717               AMD Family 15h core based CPUs with x86-64 instruction set
22718               support.  (This supersets BMI, BMI2, TBM, F16C, FMA, FMA4,
22719               FSGSBASE, AVX, AVX2, XOP, LWP, AES, PCL_MUL, CX16, MOVBE, MMX,
22720               SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and 64-bit
22721               instruction set extensions.
22722
22723           znver1
22724               AMD Family 17h core based CPUs with x86-64 instruction set
22725               support.  (This supersets BMI, BMI2, F16C, FMA, FSGSBASE, AVX,
22726               AVX2, ADCX, RDSEED, MWAITX, SHA, CLZERO, AES, PCL_MUL, CX16,
22727               MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM,
22728               XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, and 64-bit instruction set
22729               extensions.
22730
22731           btver1
22732               CPUs based on AMD Family 14h cores with x86-64 instruction set
22733               support.  (This supersets MMX, SSE, SSE2, SSE3, SSSE3, SSE4A,
22734               CX16, ABM and 64-bit instruction set extensions.)
22735
22736           btver2
22737               CPUs based on AMD Family 16h cores with x86-64 instruction set
22738               support. This includes MOVBE, F16C, BMI, AVX, PCL_MUL, AES,
22739               SSE4.2, SSE4.1, CX16, ABM, SSE4A, SSSE3, SSE3, SSE2, SSE, MMX
22740               and 64-bit instruction set extensions.
22741
22742           winchip-c6
22743               IDT WinChip C6 CPU, dealt in same way as i486 with additional
22744               MMX instruction set support.
22745
22746           winchip2
22747               IDT WinChip 2 CPU, dealt in same way as i486 with additional
22748               MMX and 3DNow!  instruction set support.
22749
22750           c3  VIA C3 CPU with MMX and 3DNow! instruction set support.  (No
22751               scheduling is implemented for this chip.)
22752
22753           c3-2
22754               VIA C3-2 (Nehemiah/C5XL) CPU with MMX and SSE instruction set
22755               support.  (No scheduling is implemented for this chip.)
22756
22757           c7  VIA C7 (Esther) CPU with MMX, SSE, SSE2 and SSE3 instruction
22758               set support.  (No scheduling is implemented for this chip.)
22759
22760           samuel-2
22761               VIA Eden Samuel 2 CPU with MMX and 3DNow! instruction set
22762               support.  (No scheduling is implemented for this chip.)
22763
22764           nehemiah
22765               VIA Eden Nehemiah CPU with MMX and SSE instruction set support.
22766               (No scheduling is implemented for this chip.)
22767
22768           esther
22769               VIA Eden Esther CPU with MMX, SSE, SSE2 and SSE3 instruction
22770               set support.  (No scheduling is implemented for this chip.)
22771
22772           eden-x2
22773               VIA Eden X2 CPU with x86-64, MMX, SSE, SSE2 and SSE3
22774               instruction set support.  (No scheduling is implemented for
22775               this chip.)
22776
22777           eden-x4
22778               VIA Eden X4 CPU with x86-64, MMX, SSE, SSE2, SSE3, SSSE3,
22779               SSE4.1, SSE4.2, AVX and AVX2 instruction set support.  (No
22780               scheduling is implemented for this chip.)
22781
22782           nano
22783               Generic VIA Nano CPU with x86-64, MMX, SSE, SSE2, SSE3 and
22784               SSSE3 instruction set support.  (No scheduling is implemented
22785               for this chip.)
22786
22787           nano-1000
22788               VIA Nano 1xxx CPU with x86-64, MMX, SSE, SSE2, SSE3 and SSSE3
22789               instruction set support.  (No scheduling is implemented for
22790               this chip.)
22791
22792           nano-2000
22793               VIA Nano 2xxx CPU with x86-64, MMX, SSE, SSE2, SSE3 and SSSE3
22794               instruction set support.  (No scheduling is implemented for
22795               this chip.)
22796
22797           nano-3000
22798               VIA Nano 3xxx CPU with x86-64, MMX, SSE, SSE2, SSE3, SSSE3 and
22799               SSE4.1 instruction set support.  (No scheduling is implemented
22800               for this chip.)
22801
22802           nano-x2
22803               VIA Nano Dual Core CPU with x86-64, MMX, SSE, SSE2, SSE3, SSSE3
22804               and SSE4.1 instruction set support.  (No scheduling is
22805               implemented for this chip.)
22806
22807           nano-x4
22808               VIA Nano Quad Core CPU with x86-64, MMX, SSE, SSE2, SSE3, SSSE3
22809               and SSE4.1 instruction set support.  (No scheduling is
22810               implemented for this chip.)
22811
22812           geode
22813               AMD Geode embedded processor with MMX and 3DNow! instruction
22814               set support.
22815
22816       -mtune=cpu-type
22817           Tune to cpu-type everything applicable about the generated code,
22818           except for the ABI and the set of available instructions.  While
22819           picking a specific cpu-type schedules things appropriately for that
22820           particular chip, the compiler does not generate any code that
22821           cannot run on the default machine type unless you use a -march=cpu-
22822           type option.  For example, if GCC is configured for
22823           i686-pc-linux-gnu then -mtune=pentium4 generates code that is tuned
22824           for Pentium 4 but still runs on i686 machines.
22825
22826           The choices for cpu-type are the same as for -march.  In addition,
22827           -mtune supports 2 extra choices for cpu-type:
22828
22829           generic
22830               Produce code optimized for the most common IA32/AMD64/EM64T
22831               processors.  If you know the CPU on which your code will run,
22832               then you should use the corresponding -mtune or -march option
22833               instead of -mtune=generic.  But, if you do not know exactly
22834               what CPU users of your application will have, then you should
22835               use this option.
22836
22837               As new processors are deployed in the marketplace, the behavior
22838               of this option will change.  Therefore, if you upgrade to a
22839               newer version of GCC, code generation controlled by this option
22840               will change to reflect the processors that are most common at
22841               the time that version of GCC is released.
22842
22843               There is no -march=generic option because -march indicates the
22844               instruction set the compiler can use, and there is no generic
22845               instruction set applicable to all processors.  In contrast,
22846               -mtune indicates the processor (or, in this case, collection of
22847               processors) for which the code is optimized.
22848
22849           intel
22850               Produce code optimized for the most current Intel processors,
22851               which are Haswell and Silvermont for this version of GCC.  If
22852               you know the CPU on which your code will run, then you should
22853               use the corresponding -mtune or -march option instead of
22854               -mtune=intel.  But, if you want your application performs
22855               better on both Haswell and Silvermont, then you should use this
22856               option.
22857
22858               As new Intel processors are deployed in the marketplace, the
22859               behavior of this option will change.  Therefore, if you upgrade
22860               to a newer version of GCC, code generation controlled by this
22861               option will change to reflect the most current Intel processors
22862               at the time that version of GCC is released.
22863
22864               There is no -march=intel option because -march indicates the
22865               instruction set the compiler can use, and there is no common
22866               instruction set applicable to all processors.  In contrast,
22867               -mtune indicates the processor (or, in this case, collection of
22868               processors) for which the code is optimized.
22869
22870       -mcpu=cpu-type
22871           A deprecated synonym for -mtune.
22872
22873       -mfpmath=unit
22874           Generate floating-point arithmetic for selected unit unit.  The
22875           choices for unit are:
22876
22877           387 Use the standard 387 floating-point coprocessor present on the
22878               majority of chips and emulated otherwise.  Code compiled with
22879               this option runs almost everywhere.  The temporary results are
22880               computed in 80-bit precision instead of the precision specified
22881               by the type, resulting in slightly different results compared
22882               to most of other chips.  See -ffloat-store for more detailed
22883               description.
22884
22885               This is the default choice for non-Darwin x86-32 targets.
22886
22887           sse Use scalar floating-point instructions present in the SSE
22888               instruction set.  This instruction set is supported by Pentium
22889               III and newer chips, and in the AMD line by Athlon-4, Athlon XP
22890               and Athlon MP chips.  The earlier version of the SSE
22891               instruction set supports only single-precision arithmetic, thus
22892               the double and extended-precision arithmetic are still done
22893               using 387.  A later version, present only in Pentium 4 and AMD
22894               x86-64 chips, supports double-precision arithmetic too.
22895
22896               For the x86-32 compiler, you must use -march=cpu-type, -msse or
22897               -msse2 switches to enable SSE extensions and make this option
22898               effective.  For the x86-64 compiler, these extensions are
22899               enabled by default.
22900
22901               The resulting code should be considerably faster in the
22902               majority of cases and avoid the numerical instability problems
22903               of 387 code, but may break some existing code that expects
22904               temporaries to be 80 bits.
22905
22906               This is the default choice for the x86-64 compiler, Darwin
22907               x86-32 targets, and the default choice for x86-32 targets with
22908               the SSE2 instruction set when -ffast-math is enabled.
22909
22910           sse,387
22911           sse+387
22912           both
22913               Attempt to utilize both instruction sets at once.  This
22914               effectively doubles the amount of available registers, and on
22915               chips with separate execution units for 387 and SSE the
22916               execution resources too.  Use this option with care, as it is
22917               still experimental, because the GCC register allocator does not
22918               model separate functional units well, resulting in unstable
22919               performance.
22920
22921       -masm=dialect
22922           Output assembly instructions using selected dialect.  Also affects
22923           which dialect is used for basic "asm" and extended "asm". Supported
22924           choices (in dialect order) are att or intel. The default is att.
22925           Darwin does not support intel.
22926
22927       -mieee-fp
22928       -mno-ieee-fp
22929           Control whether or not the compiler uses IEEE floating-point
22930           comparisons.  These correctly handle the case where the result of a
22931           comparison is unordered.
22932
22933       -m80387
22934       -mhard-float
22935           Generate output containing 80387 instructions for floating point.
22936
22937       -mno-80387
22938       -msoft-float
22939           Generate output containing library calls for floating point.
22940
22941           Warning: the requisite libraries are not part of GCC.  Normally the
22942           facilities of the machine's usual C compiler are used, but this
22943           cannot be done directly in cross-compilation.  You must make your
22944           own arrangements to provide suitable library functions for cross-
22945           compilation.
22946
22947           On machines where a function returns floating-point results in the
22948           80387 register stack, some floating-point opcodes may be emitted
22949           even if -msoft-float is used.
22950
22951       -mno-fp-ret-in-387
22952           Do not use the FPU registers for return values of functions.
22953
22954           The usual calling convention has functions return values of types
22955           "float" and "double" in an FPU register, even if there is no FPU.
22956           The idea is that the operating system should emulate an FPU.
22957
22958           The option -mno-fp-ret-in-387 causes such values to be returned in
22959           ordinary CPU registers instead.
22960
22961       -mno-fancy-math-387
22962           Some 387 emulators do not support the "sin", "cos" and "sqrt"
22963           instructions for the 387.  Specify this option to avoid generating
22964           those instructions.  This option is the default on OpenBSD and
22965           NetBSD.  This option is overridden when -march indicates that the
22966           target CPU always has an FPU and so the instruction does not need
22967           emulation.  These instructions are not generated unless you also
22968           use the -funsafe-math-optimizations switch.
22969
22970       -malign-double
22971       -mno-align-double
22972           Control whether GCC aligns "double", "long double", and "long long"
22973           variables on a two-word boundary or a one-word boundary.  Aligning
22974           "double" variables on a two-word boundary produces code that runs
22975           somewhat faster on a Pentium at the expense of more memory.
22976
22977           On x86-64, -malign-double is enabled by default.
22978
22979           Warning: if you use the -malign-double switch, structures
22980           containing the above types are aligned differently than the
22981           published application binary interface specifications for the
22982           x86-32 and are not binary compatible with structures in code
22983           compiled without that switch.
22984
22985       -m96bit-long-double
22986       -m128bit-long-double
22987           These switches control the size of "long double" type.  The x86-32
22988           application binary interface specifies the size to be 96 bits, so
22989           -m96bit-long-double is the default in 32-bit mode.
22990
22991           Modern architectures (Pentium and newer) prefer "long double" to be
22992           aligned to an 8- or 16-byte boundary.  In arrays or structures
22993           conforming to the ABI, this is not possible.  So specifying
22994           -m128bit-long-double aligns "long double" to a 16-byte boundary by
22995           padding the "long double" with an additional 32-bit zero.
22996
22997           In the x86-64 compiler, -m128bit-long-double is the default choice
22998           as its ABI specifies that "long double" is aligned on 16-byte
22999           boundary.
23000
23001           Notice that neither of these options enable any extra precision
23002           over the x87 standard of 80 bits for a "long double".
23003
23004           Warning: if you override the default value for your target ABI,
23005           this changes the size of structures and arrays containing "long
23006           double" variables, as well as modifying the function calling
23007           convention for functions taking "long double".  Hence they are not
23008           binary-compatible with code compiled without that switch.
23009
23010       -mlong-double-64
23011       -mlong-double-80
23012       -mlong-double-128
23013           These switches control the size of "long double" type. A size of 64
23014           bits makes the "long double" type equivalent to the "double" type.
23015           This is the default for 32-bit Bionic C library.  A size of 128
23016           bits makes the "long double" type equivalent to the "__float128"
23017           type. This is the default for 64-bit Bionic C library.
23018
23019           Warning: if you override the default value for your target ABI,
23020           this changes the size of structures and arrays containing "long
23021           double" variables, as well as modifying the function calling
23022           convention for functions taking "long double".  Hence they are not
23023           binary-compatible with code compiled without that switch.
23024
23025       -malign-data=type
23026           Control how GCC aligns variables.  Supported values for type are
23027           compat uses increased alignment value compatible uses GCC 4.8 and
23028           earlier, abi uses alignment value as specified by the psABI, and
23029           cacheline uses increased alignment value to match the cache line
23030           size.  compat is the default.
23031
23032       -mlarge-data-threshold=threshold
23033           When -mcmodel=medium is specified, data objects larger than
23034           threshold are placed in the large data section.  This value must be
23035           the same across all objects linked into the binary, and defaults to
23036           65535.
23037
23038       -mrtd
23039           Use a different function-calling convention, in which functions
23040           that take a fixed number of arguments return with the "ret num"
23041           instruction, which pops their arguments while returning.  This
23042           saves one instruction in the caller since there is no need to pop
23043           the arguments there.
23044
23045           You can specify that an individual function is called with this
23046           calling sequence with the function attribute "stdcall".  You can
23047           also override the -mrtd option by using the function attribute
23048           "cdecl".
23049
23050           Warning: this calling convention is incompatible with the one
23051           normally used on Unix, so you cannot use it if you need to call
23052           libraries compiled with the Unix compiler.
23053
23054           Also, you must provide function prototypes for all functions that
23055           take variable numbers of arguments (including "printf"); otherwise
23056           incorrect code is generated for calls to those functions.
23057
23058           In addition, seriously incorrect code results if you call a
23059           function with too many arguments.  (Normally, extra arguments are
23060           harmlessly ignored.)
23061
23062       -mregparm=num
23063           Control how many registers are used to pass integer arguments.  By
23064           default, no registers are used to pass arguments, and at most 3
23065           registers can be used.  You can control this behavior for a
23066           specific function by using the function attribute "regparm".
23067
23068           Warning: if you use this switch, and num is nonzero, then you must
23069           build all modules with the same value, including any libraries.
23070           This includes the system libraries and startup modules.
23071
23072       -msseregparm
23073           Use SSE register passing conventions for float and double arguments
23074           and return values.  You can control this behavior for a specific
23075           function by using the function attribute "sseregparm".
23076
23077           Warning: if you use this switch then you must build all modules
23078           with the same value, including any libraries.  This includes the
23079           system libraries and startup modules.
23080
23081       -mvect8-ret-in-mem
23082           Return 8-byte vectors in memory instead of MMX registers.  This is
23083           the default on Solaris@tie{}8 and 9 and VxWorks to match the ABI of
23084           the Sun Studio compilers until version 12.  Later compiler versions
23085           (starting with Studio 12 Update@tie{}1) follow the ABI used by
23086           other x86 targets, which is the default on Solaris@tie{}10 and
23087           later.  Only use this option if you need to remain compatible with
23088           existing code produced by those previous compiler versions or older
23089           versions of GCC.
23090
23091       -mpc32
23092       -mpc64
23093       -mpc80
23094           Set 80387 floating-point precision to 32, 64 or 80 bits.  When
23095           -mpc32 is specified, the significands of results of floating-point
23096           operations are rounded to 24 bits (single precision); -mpc64 rounds
23097           the significands of results of floating-point operations to 53 bits
23098           (double precision) and -mpc80 rounds the significands of results of
23099           floating-point operations to 64 bits (extended double precision),
23100           which is the default.  When this option is used, floating-point
23101           operations in higher precisions are not available to the programmer
23102           without setting the FPU control word explicitly.
23103
23104           Setting the rounding of floating-point operations to less than the
23105           default 80 bits can speed some programs by 2% or more.  Note that
23106           some mathematical libraries assume that extended-precision (80-bit)
23107           floating-point operations are enabled by default; routines in such
23108           libraries could suffer significant loss of accuracy, typically
23109           through so-called "catastrophic cancellation", when this option is
23110           used to set the precision to less than extended precision.
23111
23112       -mstackrealign
23113           Realign the stack at entry.  On the x86, the -mstackrealign option
23114           generates an alternate prologue and epilogue that realigns the run-
23115           time stack if necessary.  This supports mixing legacy codes that
23116           keep 4-byte stack alignment with modern codes that keep 16-byte
23117           stack alignment for SSE compatibility.  See also the attribute
23118           "force_align_arg_pointer", applicable to individual functions.
23119
23120       -mpreferred-stack-boundary=num
23121           Attempt to keep the stack boundary aligned to a 2 raised to num
23122           byte boundary.  If -mpreferred-stack-boundary is not specified, the
23123           default is 4 (16 bytes or 128 bits).
23124
23125           Warning: When generating code for the x86-64 architecture with SSE
23126           extensions disabled, -mpreferred-stack-boundary=3 can be used to
23127           keep the stack boundary aligned to 8 byte boundary.  Since x86-64
23128           ABI require 16 byte stack alignment, this is ABI incompatible and
23129           intended to be used in controlled environment where stack space is
23130           important limitation.  This option leads to wrong code when
23131           functions compiled with 16 byte stack alignment (such as functions
23132           from a standard library) are called with misaligned stack.  In this
23133           case, SSE instructions may lead to misaligned memory access traps.
23134           In addition, variable arguments are handled incorrectly for 16 byte
23135           aligned objects (including x87 long double and __int128), leading
23136           to wrong results.  You must build all modules with
23137           -mpreferred-stack-boundary=3, including any libraries.  This
23138           includes the system libraries and startup modules.
23139
23140       -mincoming-stack-boundary=num
23141           Assume the incoming stack is aligned to a 2 raised to num byte
23142           boundary.  If -mincoming-stack-boundary is not specified, the one
23143           specified by -mpreferred-stack-boundary is used.
23144
23145           On Pentium and Pentium Pro, "double" and "long double" values
23146           should be aligned to an 8-byte boundary (see -malign-double) or
23147           suffer significant run time performance penalties.  On Pentium III,
23148           the Streaming SIMD Extension (SSE) data type "__m128" may not work
23149           properly if it is not 16-byte aligned.
23150
23151           To ensure proper alignment of this values on the stack, the stack
23152           boundary must be as aligned as that required by any value stored on
23153           the stack.  Further, every function must be generated such that it
23154           keeps the stack aligned.  Thus calling a function compiled with a
23155           higher preferred stack boundary from a function compiled with a
23156           lower preferred stack boundary most likely misaligns the stack.  It
23157           is recommended that libraries that use callbacks always use the
23158           default setting.
23159
23160           This extra alignment does consume extra stack space, and generally
23161           increases code size.  Code that is sensitive to stack space usage,
23162           such as embedded systems and operating system kernels, may want to
23163           reduce the preferred alignment to -mpreferred-stack-boundary=2.
23164
23165       -mmmx
23166       -msse
23167       -msse2
23168       -msse3
23169       -mssse3
23170       -msse4
23171       -msse4a
23172       -msse4.1
23173       -msse4.2
23174       -mavx
23175       -mavx2
23176       -mavx512f
23177       -mavx512pf
23178       -mavx512er
23179       -mavx512cd
23180       -mavx512vl
23181       -mavx512bw
23182       -mavx512dq
23183       -mavx512ifma
23184       -mavx512vbmi
23185       -msha
23186       -maes
23187       -mpclmul
23188       -mclflushopt
23189       -mclwb
23190       -mfsgsbase
23191       -mrdrnd
23192       -mf16c
23193       -mfma
23194       -mpconfig
23195       -mwbnoinvd
23196       -mfma4
23197       -mprfchw
23198       -mrdpid
23199       -mprefetchwt1
23200       -mrdseed
23201       -msgx
23202       -mxop
23203       -mlwp
23204       -m3dnow
23205       -m3dnowa
23206       -mpopcnt
23207       -mabm
23208       -madx
23209       -mbmi
23210       -mbmi2
23211       -mlzcnt
23212       -mfxsr
23213       -mxsave
23214       -mxsaveopt
23215       -mxsavec
23216       -mxsaves
23217       -mrtm
23218       -mhle
23219       -mtbm
23220       -mmpx
23221       -mmwaitx
23222       -mclzero
23223       -mpku
23224       -mavx512vbmi2
23225       -mgfni
23226       -mvaes
23227       -mvpclmulqdq
23228       -mavx512bitalg
23229       -mmovdiri
23230       -mmovdir64b
23231       -mavx512vpopcntdq
23232       -mavx5124fmaps
23233       -mavx512vnni
23234       -mavx5124vnniw
23235           These switches enable the use of instructions in the MMX, SSE,
23236           SSE2, SSE3, SSSE3, SSE4, SSE4A, SSE4.1, SSE4.2, AVX, AVX2, AVX512F,
23237           AVX512PF, AVX512ER, AVX512CD, AVX512VL, AVX512BW, AVX512DQ,
23238           AVX512IFMA, AVX512VBMI, SHA, AES, PCLMUL, CLFLUSHOPT, CLWB,
23239           FSGSBASE, RDRND, F16C, FMA, PCONFIG, WBNOINVD, FMA4, PREFETCHW,
23240           RDPID, PREFETCHWT1, RDSEED, SGX, XOP, LWP, 3DNow!, enhanced 3DNow!,
23241           POPCNT, ABM, ADX, BMI, BMI2, LZCNT, FXSR, XSAVE, XSAVEOPT, XSAVEC,
23242           XSAVES, RTM, HLE, TBM, MPX, MWAITX, CLZERO, PKU, AVX512VBMI2, GFNI,
23243           VAES, VPCLMULQDQ, AVX512BITALG, MOVDIRI, MOVDIR64B,
23244           AVX512VPOPCNTDQ, AVX5124FMAPS, AVX512VNNI, or AVX5124VNNIW extended
23245           instruction sets.  Each has a corresponding -mno- option to disable
23246           use of these instructions.
23247
23248           These extensions are also available as built-in functions: see x86
23249           Built-in Functions, for details of the functions enabled and
23250           disabled by these switches.
23251
23252           To generate SSE/SSE2 instructions automatically from floating-point
23253           code (as opposed to 387 instructions), see -mfpmath=sse.
23254
23255           GCC depresses SSEx instructions when -mavx is used. Instead, it
23256           generates new AVX instructions or AVX equivalence for all SSEx
23257           instructions when needed.
23258
23259           These options enable GCC to use these extended instructions in
23260           generated code, even without -mfpmath=sse.  Applications that
23261           perform run-time CPU detection must compile separate files for each
23262           supported architecture, using the appropriate flags.  In
23263           particular, the file containing the CPU detection code should be
23264           compiled without these options.
23265
23266       -mdump-tune-features
23267           This option instructs GCC to dump the names of the x86 performance
23268           tuning features and default settings. The names can be used in
23269           -mtune-ctrl=feature-list.
23270
23271       -mtune-ctrl=feature-list
23272           This option is used to do fine grain control of x86 code generation
23273           features.  feature-list is a comma separated list of feature names.
23274           See also -mdump-tune-features. When specified, the feature is
23275           turned on if it is not preceded with ^, otherwise, it is turned
23276           off.  -mtune-ctrl=feature-list is intended to be used by GCC
23277           developers. Using it may lead to code paths not covered by testing
23278           and can potentially result in compiler ICEs or runtime errors.
23279
23280       -mno-default
23281           This option instructs GCC to turn off all tunable features. See
23282           also -mtune-ctrl=feature-list and -mdump-tune-features.
23283
23284       -mcld
23285           This option instructs GCC to emit a "cld" instruction in the
23286           prologue of functions that use string instructions.  String
23287           instructions depend on the DF flag to select between autoincrement
23288           or autodecrement mode.  While the ABI specifies the DF flag to be
23289           cleared on function entry, some operating systems violate this
23290           specification by not clearing the DF flag in their exception
23291           dispatchers.  The exception handler can be invoked with the DF flag
23292           set, which leads to wrong direction mode when string instructions
23293           are used.  This option can be enabled by default on 32-bit x86
23294           targets by configuring GCC with the --enable-cld configure option.
23295           Generation of "cld" instructions can be suppressed with the
23296           -mno-cld compiler option in this case.
23297
23298       -mvzeroupper
23299           This option instructs GCC to emit a "vzeroupper" instruction before
23300           a transfer of control flow out of the function to minimize the AVX
23301           to SSE transition penalty as well as remove unnecessary "zeroupper"
23302           intrinsics.
23303
23304       -mprefer-avx128
23305           This option instructs GCC to use 128-bit AVX instructions instead
23306           of 256-bit AVX instructions in the auto-vectorizer.
23307
23308       -mprefer-vector-width=opt
23309           This option instructs GCC to use opt-bit vector width in
23310           instructions instead of default on the selected platform.
23311
23312           none
23313               No extra limitations applied to GCC other than defined by the
23314               selected platform.
23315
23316           128 Prefer 128-bit vector width for instructions.
23317
23318           256 Prefer 256-bit vector width for instructions.
23319
23320           512 Prefer 512-bit vector width for instructions.
23321
23322       -mcx16
23323           This option enables GCC to generate "CMPXCHG16B" instructions in
23324           64-bit code to implement compare-and-exchange operations on 16-byte
23325           aligned 128-bit objects.  This is useful for atomic updates of data
23326           structures exceeding one machine word in size.  The compiler uses
23327           this instruction to implement __sync Builtins.  However, for
23328           __atomic Builtins operating on 128-bit integers, a library call is
23329           always used.
23330
23331       -msahf
23332           This option enables generation of "SAHF" instructions in 64-bit
23333           code.  Early Intel Pentium 4 CPUs with Intel 64 support, prior to
23334           the introduction of Pentium 4 G1 step in December 2005, lacked the
23335           "LAHF" and "SAHF" instructions which are supported by AMD64.  These
23336           are load and store instructions, respectively, for certain status
23337           flags.  In 64-bit mode, the "SAHF" instruction is used to optimize
23338           "fmod", "drem", and "remainder" built-in functions; see Other
23339           Builtins for details.
23340
23341       -mmovbe
23342           This option enables use of the "movbe" instruction to implement
23343           "__builtin_bswap32" and "__builtin_bswap64".
23344
23345       -mshstk
23346           The -mshstk option enables shadow stack built-in functions from x86
23347           Control-flow Enforcement Technology (CET).
23348
23349       -mcrc32
23350           This option enables built-in functions "__builtin_ia32_crc32qi",
23351           "__builtin_ia32_crc32hi", "__builtin_ia32_crc32si" and
23352           "__builtin_ia32_crc32di" to generate the "crc32" machine
23353           instruction.
23354
23355       -mrecip
23356           This option enables use of "RCPSS" and "RSQRTSS" instructions (and
23357           their vectorized variants "RCPPS" and "RSQRTPS") with an additional
23358           Newton-Raphson step to increase precision instead of "DIVSS" and
23359           "SQRTSS" (and their vectorized variants) for single-precision
23360           floating-point arguments.  These instructions are generated only
23361           when -funsafe-math-optimizations is enabled together with
23362           -ffinite-math-only and -fno-trapping-math.  Note that while the
23363           throughput of the sequence is higher than the throughput of the
23364           non-reciprocal instruction, the precision of the sequence can be
23365           decreased by up to 2 ulp (i.e. the inverse of 1.0 equals
23366           0.99999994).
23367
23368           Note that GCC implements "1.0f/sqrtf(x)" in terms of "RSQRTSS" (or
23369           "RSQRTPS") already with -ffast-math (or the above option
23370           combination), and doesn't need -mrecip.
23371
23372           Also note that GCC emits the above sequence with additional Newton-
23373           Raphson step for vectorized single-float division and vectorized
23374           "sqrtf(x)" already with -ffast-math (or the above option
23375           combination), and doesn't need -mrecip.
23376
23377       -mrecip=opt
23378           This option controls which reciprocal estimate instructions may be
23379           used.  opt is a comma-separated list of options, which may be
23380           preceded by a ! to invert the option:
23381
23382           all Enable all estimate instructions.
23383
23384           default
23385               Enable the default instructions, equivalent to -mrecip.
23386
23387           none
23388               Disable all estimate instructions, equivalent to -mno-recip.
23389
23390           div Enable the approximation for scalar division.
23391
23392           vec-div
23393               Enable the approximation for vectorized division.
23394
23395           sqrt
23396               Enable the approximation for scalar square root.
23397
23398           vec-sqrt
23399               Enable the approximation for vectorized square root.
23400
23401           So, for example, -mrecip=all,!sqrt enables all of the reciprocal
23402           approximations, except for square root.
23403
23404       -mveclibabi=type
23405           Specifies the ABI type to use for vectorizing intrinsics using an
23406           external library.  Supported values for type are svml for the Intel
23407           short vector math library and acml for the AMD math core library.
23408           To use this option, both -ftree-vectorize and
23409           -funsafe-math-optimizations have to be enabled, and an SVML or ACML
23410           ABI-compatible library must be specified at link time.
23411
23412           GCC currently emits calls to "vmldExp2", "vmldLn2", "vmldLog102",
23413           "vmldPow2", "vmldTanh2", "vmldTan2", "vmldAtan2", "vmldAtanh2",
23414           "vmldCbrt2", "vmldSinh2", "vmldSin2", "vmldAsinh2", "vmldAsin2",
23415           "vmldCosh2", "vmldCos2", "vmldAcosh2", "vmldAcos2", "vmlsExp4",
23416           "vmlsLn4", "vmlsLog104", "vmlsPow4", "vmlsTanh4", "vmlsTan4",
23417           "vmlsAtan4", "vmlsAtanh4", "vmlsCbrt4", "vmlsSinh4", "vmlsSin4",
23418           "vmlsAsinh4", "vmlsAsin4", "vmlsCosh4", "vmlsCos4", "vmlsAcosh4"
23419           and "vmlsAcos4" for corresponding function type when
23420           -mveclibabi=svml is used, and "__vrd2_sin", "__vrd2_cos",
23421           "__vrd2_exp", "__vrd2_log", "__vrd2_log2", "__vrd2_log10",
23422           "__vrs4_sinf", "__vrs4_cosf", "__vrs4_expf", "__vrs4_logf",
23423           "__vrs4_log2f", "__vrs4_log10f" and "__vrs4_powf" for the
23424           corresponding function type when -mveclibabi=acml is used.
23425
23426       -mabi=name
23427           Generate code for the specified calling convention.  Permissible
23428           values are sysv for the ABI used on GNU/Linux and other systems,
23429           and ms for the Microsoft ABI.  The default is to use the Microsoft
23430           ABI when targeting Microsoft Windows and the SysV ABI on all other
23431           systems.  You can control this behavior for specific functions by
23432           using the function attributes "ms_abi" and "sysv_abi".
23433
23434       -mforce-indirect-call
23435           Force all calls to functions to be indirect. This is useful when
23436           using Intel Processor Trace where it generates more precise timing
23437           information for function calls.
23438
23439       -mcall-ms2sysv-xlogues
23440           Due to differences in 64-bit ABIs, any Microsoft ABI function that
23441           calls a System V ABI function must consider RSI, RDI and XMM6-15 as
23442           clobbered.  By default, the code for saving and restoring these
23443           registers is emitted inline, resulting in fairly lengthy prologues
23444           and epilogues.  Using -mcall-ms2sysv-xlogues emits prologues and
23445           epilogues that use stubs in the static portion of libgcc to perform
23446           these saves and restores, thus reducing function size at the cost
23447           of a few extra instructions.
23448
23449       -mtls-dialect=type
23450           Generate code to access thread-local storage using the gnu or gnu2
23451           conventions.  gnu is the conservative default; gnu2 is more
23452           efficient, but it may add compile- and run-time requirements that
23453           cannot be satisfied on all systems.
23454
23455       -mpush-args
23456       -mno-push-args
23457           Use PUSH operations to store outgoing parameters.  This method is
23458           shorter and usually equally fast as method using SUB/MOV operations
23459           and is enabled by default.  In some cases disabling it may improve
23460           performance because of improved scheduling and reduced
23461           dependencies.
23462
23463       -maccumulate-outgoing-args
23464           If enabled, the maximum amount of space required for outgoing
23465           arguments is computed in the function prologue.  This is faster on
23466           most modern CPUs because of reduced dependencies, improved
23467           scheduling and reduced stack usage when the preferred stack
23468           boundary is not equal to 2.  The drawback is a notable increase in
23469           code size.  This switch implies -mno-push-args.
23470
23471       -mthreads
23472           Support thread-safe exception handling on MinGW.  Programs that
23473           rely on thread-safe exception handling must compile and link all
23474           code with the -mthreads option.  When compiling, -mthreads defines
23475           -D_MT; when linking, it links in a special thread helper library
23476           -lmingwthrd which cleans up per-thread exception-handling data.
23477
23478       -mms-bitfields
23479       -mno-ms-bitfields
23480           Enable/disable bit-field layout compatible with the native
23481           Microsoft Windows compiler.
23482
23483           If "packed" is used on a structure, or if bit-fields are used, it
23484           may be that the Microsoft ABI lays out the structure differently
23485           than the way GCC normally does.  Particularly when moving packed
23486           data between functions compiled with GCC and the native Microsoft
23487           compiler (either via function call or as data in a file), it may be
23488           necessary to access either format.
23489
23490           This option is enabled by default for Microsoft Windows targets.
23491           This behavior can also be controlled locally by use of variable or
23492           type attributes.  For more information, see x86 Variable Attributes
23493           and x86 Type Attributes.
23494
23495           The Microsoft structure layout algorithm is fairly simple with the
23496           exception of the bit-field packing.  The padding and alignment of
23497           members of structures and whether a bit-field can straddle a
23498           storage-unit boundary are determine by these rules:
23499
23500           1. Structure members are stored sequentially in the order in which
23501           they are
23502               declared: the first member has the lowest memory address and
23503               the last member the highest.
23504
23505           2. Every data object has an alignment requirement.  The alignment
23506           requirement
23507               for all data except structures, unions, and arrays is either
23508               the size of the object or the current packing size (specified
23509               with either the "aligned" attribute or the "pack" pragma),
23510               whichever is less.  For structures, unions, and arrays, the
23511               alignment requirement is the largest alignment requirement of
23512               its members.  Every object is allocated an offset so that:
23513
23514                       offset % alignment_requirement == 0
23515
23516           3. Adjacent bit-fields are packed into the same 1-, 2-, or 4-byte
23517           allocation
23518               unit if the integral types are the same size and if the next
23519               bit-field fits into the current allocation unit without
23520               crossing the boundary imposed by the common alignment
23521               requirements of the bit-fields.
23522
23523           MSVC interprets zero-length bit-fields in the following ways:
23524
23525           1. If a zero-length bit-field is inserted between two bit-fields
23526           that
23527               are normally coalesced, the bit-fields are not coalesced.
23528
23529               For example:
23530
23531                       struct
23532                        {
23533                          unsigned long bf_1 : 12;
23534                          unsigned long : 0;
23535                          unsigned long bf_2 : 12;
23536                        } t1;
23537
23538               The size of "t1" is 8 bytes with the zero-length bit-field.  If
23539               the zero-length bit-field were removed, "t1"'s size would be 4
23540               bytes.
23541
23542           2. If a zero-length bit-field is inserted after a bit-field, "foo",
23543           and the
23544               alignment of the zero-length bit-field is greater than the
23545               member that follows it, "bar", "bar" is aligned as the type of
23546               the zero-length bit-field.
23547
23548               For example:
23549
23550                       struct
23551                        {
23552                          char foo : 4;
23553                          short : 0;
23554                          char bar;
23555                        } t2;
23556
23557                       struct
23558                        {
23559                          char foo : 4;
23560                          short : 0;
23561                          double bar;
23562                        } t3;
23563
23564               For "t2", "bar" is placed at offset 2, rather than offset 1.
23565               Accordingly, the size of "t2" is 4.  For "t3", the zero-length
23566               bit-field does not affect the alignment of "bar" or, as a
23567               result, the size of the structure.
23568
23569               Taking this into account, it is important to note the
23570               following:
23571
23572               1. If a zero-length bit-field follows a normal bit-field, the
23573               type of the
23574                   zero-length bit-field may affect the alignment of the
23575                   structure as whole. For example, "t2" has a size of 4
23576                   bytes, since the zero-length bit-field follows a normal
23577                   bit-field, and is of type short.
23578
23579               2. Even if a zero-length bit-field is not followed by a normal
23580               bit-field, it may
23581                   still affect the alignment of the structure:
23582
23583                           struct
23584                            {
23585                              char foo : 6;
23586                              long : 0;
23587                            } t4;
23588
23589                   Here, "t4" takes up 4 bytes.
23590
23591           3. Zero-length bit-fields following non-bit-field members are
23592           ignored:
23593                       struct
23594                        {
23595                          char foo;
23596                          long : 0;
23597                          char bar;
23598                        } t5;
23599
23600               Here, "t5" takes up 2 bytes.
23601
23602       -mno-align-stringops
23603           Do not align the destination of inlined string operations.  This
23604           switch reduces code size and improves performance in case the
23605           destination is already aligned, but GCC doesn't know about it.
23606
23607       -minline-all-stringops
23608           By default GCC inlines string operations only when the destination
23609           is known to be aligned to least a 4-byte boundary.  This enables
23610           more inlining and increases code size, but may improve performance
23611           of code that depends on fast "memcpy", "strlen", and "memset" for
23612           short lengths.
23613
23614       -minline-stringops-dynamically
23615           For string operations of unknown size, use run-time checks with
23616           inline code for small blocks and a library call for large blocks.
23617
23618       -mstringop-strategy=alg
23619           Override the internal decision heuristic for the particular
23620           algorithm to use for inlining string operations.  The allowed
23621           values for alg are:
23622
23623           rep_byte
23624           rep_4byte
23625           rep_8byte
23626               Expand using i386 "rep" prefix of the specified size.
23627
23628           byte_loop
23629           loop
23630           unrolled_loop
23631               Expand into an inline loop.
23632
23633           libcall
23634               Always use a library call.
23635
23636       -mmemcpy-strategy=strategy
23637           Override the internal decision heuristic to decide if
23638           "__builtin_memcpy" should be inlined and what inline algorithm to
23639           use when the expected size of the copy operation is known. strategy
23640           is a comma-separated list of alg:max_size:dest_align triplets.  alg
23641           is specified in -mstringop-strategy, max_size specifies the max
23642           byte size with which inline algorithm alg is allowed.  For the last
23643           triplet, the max_size must be "-1". The max_size of the triplets in
23644           the list must be specified in increasing order.  The minimal byte
23645           size for alg is 0 for the first triplet and "max_size + 1" of the
23646           preceding range.
23647
23648       -mmemset-strategy=strategy
23649           The option is similar to -mmemcpy-strategy= except that it is to
23650           control "__builtin_memset" expansion.
23651
23652       -momit-leaf-frame-pointer
23653           Don't keep the frame pointer in a register for leaf functions.
23654           This avoids the instructions to save, set up, and restore frame
23655           pointers and makes an extra register available in leaf functions.
23656           The option -fomit-leaf-frame-pointer removes the frame pointer for
23657           leaf functions, which might make debugging harder.
23658
23659       -mtls-direct-seg-refs
23660       -mno-tls-direct-seg-refs
23661           Controls whether TLS variables may be accessed with offsets from
23662           the TLS segment register (%gs for 32-bit, %fs for 64-bit), or
23663           whether the thread base pointer must be added.  Whether or not this
23664           is valid depends on the operating system, and whether it maps the
23665           segment to cover the entire TLS area.
23666
23667           For systems that use the GNU C Library, the default is on.
23668
23669       -msse2avx
23670       -mno-sse2avx
23671           Specify that the assembler should encode SSE instructions with VEX
23672           prefix.  The option -mavx turns this on by default.
23673
23674       -mfentry
23675       -mno-fentry
23676           If profiling is active (-pg), put the profiling counter call before
23677           the prologue.  Note: On x86 architectures the attribute
23678           "ms_hook_prologue" isn't possible at the moment for -mfentry and
23679           -pg.
23680
23681       -mrecord-mcount
23682       -mno-record-mcount
23683           If profiling is active (-pg), generate a __mcount_loc section that
23684           contains pointers to each profiling call. This is useful for
23685           automatically patching and out calls.
23686
23687       -mnop-mcount
23688       -mno-nop-mcount
23689           If profiling is active (-pg), generate the calls to the profiling
23690           functions as NOPs. This is useful when they should be patched in
23691           later dynamically. This is likely only useful together with
23692           -mrecord-mcount.
23693
23694       -mskip-rax-setup
23695       -mno-skip-rax-setup
23696           When generating code for the x86-64 architecture with SSE
23697           extensions disabled, -mskip-rax-setup can be used to skip setting
23698           up RAX register when there are no variable arguments passed in
23699           vector registers.
23700
23701           Warning: Since RAX register is used to avoid unnecessarily saving
23702           vector registers on stack when passing variable arguments, the
23703           impacts of this option are callees may waste some stack space,
23704           misbehave or jump to a random location.  GCC 4.4 or newer don't
23705           have those issues, regardless the RAX register value.
23706
23707       -m8bit-idiv
23708       -mno-8bit-idiv
23709           On some processors, like Intel Atom, 8-bit unsigned integer divide
23710           is much faster than 32-bit/64-bit integer divide.  This option
23711           generates a run-time check.  If both dividend and divisor are
23712           within range of 0 to 255, 8-bit unsigned integer divide is used
23713           instead of 32-bit/64-bit integer divide.
23714
23715       -mavx256-split-unaligned-load
23716       -mavx256-split-unaligned-store
23717           Split 32-byte AVX unaligned load and store.
23718
23719       -mstack-protector-guard=guard
23720       -mstack-protector-guard-reg=reg
23721       -mstack-protector-guard-offset=offset
23722           Generate stack protection code using canary at guard.  Supported
23723           locations are global for global canary or tls for per-thread canary
23724           in the TLS block (the default).  This option has effect only when
23725           -fstack-protector or -fstack-protector-all is specified.
23726
23727           With the latter choice the options -mstack-protector-guard-reg=reg
23728           and -mstack-protector-guard-offset=offset furthermore specify which
23729           segment register (%fs or %gs) to use as base register for reading
23730           the canary, and from what offset from that base register.  The
23731           default for those is as specified in the relevant ABI.
23732
23733       -mmitigate-rop
23734           Try to avoid generating code sequences that contain unintended
23735           return opcodes, to mitigate against certain forms of attack. At the
23736           moment, this option is limited in what it can do and should not be
23737           relied on to provide serious protection.
23738
23739       -mgeneral-regs-only
23740           Generate code that uses only the general-purpose registers.  This
23741           prevents the compiler from using floating-point, vector, mask and
23742           bound registers.
23743
23744       -mindirect-branch=choice
23745           Convert indirect call and jump with choice.  The default is keep,
23746           which keeps indirect call and jump unmodified.  thunk converts
23747           indirect call and jump to call and return thunk.  thunk-inline
23748           converts indirect call and jump to inlined call and return thunk.
23749           thunk-extern converts indirect call and jump to external call and
23750           return thunk provided in a separate object file.  You can control
23751           this behavior for a specific function by using the function
23752           attribute "indirect_branch".
23753
23754           Note that -mcmodel=large is incompatible with
23755           -mindirect-branch=thunk and -mindirect-branch=thunk-extern since
23756           the thunk function may not be reachable in the large code model.
23757
23758           Note that -mindirect-branch=thunk-extern is incompatible with
23759           -fcf-protection=branch and -fcheck-pointer-bounds since the
23760           external thunk can not be modified to disable control-flow check.
23761
23762       -mfunction-return=choice
23763           Convert function return with choice.  The default is keep, which
23764           keeps function return unmodified.  thunk converts function return
23765           to call and return thunk.  thunk-inline converts function return to
23766           inlined call and return thunk.  thunk-extern converts function
23767           return to external call and return thunk provided in a separate
23768           object file.  You can control this behavior for a specific function
23769           by using the function attribute "function_return".
23770
23771           Note that -mcmodel=large is incompatible with
23772           -mfunction-return=thunk and -mfunction-return=thunk-extern since
23773           the thunk function may not be reachable in the large code model.
23774
23775       -mindirect-branch-register
23776           Force indirect call and jump via register.
23777
23778       These -m switches are supported in addition to the above on x86-64
23779       processors in 64-bit environments.
23780
23781       -m32
23782       -m64
23783       -mx32
23784       -m16
23785       -miamcu
23786           Generate code for a 16-bit, 32-bit or 64-bit environment.  The -m32
23787           option sets "int", "long", and pointer types to 32 bits, and
23788           generates code that runs on any i386 system.
23789
23790           The -m64 option sets "int" to 32 bits and "long" and pointer types
23791           to 64 bits, and generates code for the x86-64 architecture.  For
23792           Darwin only the -m64 option also turns off the -fno-pic and
23793           -mdynamic-no-pic options.
23794
23795           The -mx32 option sets "int", "long", and pointer types to 32 bits,
23796           and generates code for the x86-64 architecture.
23797
23798           The -m16 option is the same as -m32, except for that it outputs the
23799           ".code16gcc" assembly directive at the beginning of the assembly
23800           output so that the binary can run in 16-bit mode.
23801
23802           The -miamcu option generates code which conforms to Intel MCU
23803           psABI.  It requires the -m32 option to be turned on.
23804
23805       -mno-red-zone
23806           Do not use a so-called "red zone" for x86-64 code.  The red zone is
23807           mandated by the x86-64 ABI; it is a 128-byte area beyond the
23808           location of the stack pointer that is not modified by signal or
23809           interrupt handlers and therefore can be used for temporary data
23810           without adjusting the stack pointer.  The flag -mno-red-zone
23811           disables this red zone.
23812
23813       -mcmodel=small
23814           Generate code for the small code model: the program and its symbols
23815           must be linked in the lower 2 GB of the address space.  Pointers
23816           are 64 bits.  Programs can be statically or dynamically linked.
23817           This is the default code model.
23818
23819       -mcmodel=kernel
23820           Generate code for the kernel code model.  The kernel runs in the
23821           negative 2 GB of the address space.  This model has to be used for
23822           Linux kernel code.
23823
23824       -mcmodel=medium
23825           Generate code for the medium model: the program is linked in the
23826           lower 2 GB of the address space.  Small symbols are also placed
23827           there.  Symbols with sizes larger than -mlarge-data-threshold are
23828           put into large data or BSS sections and can be located above 2GB.
23829           Programs can be statically or dynamically linked.
23830
23831       -mcmodel=large
23832           Generate code for the large model.  This model makes no assumptions
23833           about addresses and sizes of sections.
23834
23835       -maddress-mode=long
23836           Generate code for long address mode.  This is only supported for
23837           64-bit and x32 environments.  It is the default address mode for
23838           64-bit environments.
23839
23840       -maddress-mode=short
23841           Generate code for short address mode.  This is only supported for
23842           32-bit and x32 environments.  It is the default address mode for
23843           32-bit and x32 environments.
23844
23845   x86 Windows Options
23846       These additional options are available for Microsoft Windows targets:
23847
23848       -mconsole
23849           This option specifies that a console application is to be
23850           generated, by instructing the linker to set the PE header subsystem
23851           type required for console applications.  This option is available
23852           for Cygwin and MinGW targets and is enabled by default on those
23853           targets.
23854
23855       -mdll
23856           This option is available for Cygwin and MinGW targets.  It
23857           specifies that a DLL---a dynamic link library---is to be generated,
23858           enabling the selection of the required runtime startup object and
23859           entry point.
23860
23861       -mnop-fun-dllimport
23862           This option is available for Cygwin and MinGW targets.  It
23863           specifies that the "dllimport" attribute should be ignored.
23864
23865       -mthread
23866           This option is available for MinGW targets. It specifies that
23867           MinGW-specific thread support is to be used.
23868
23869       -municode
23870           This option is available for MinGW-w64 targets.  It causes the
23871           "UNICODE" preprocessor macro to be predefined, and chooses Unicode-
23872           capable runtime startup code.
23873
23874       -mwin32
23875           This option is available for Cygwin and MinGW targets.  It
23876           specifies that the typical Microsoft Windows predefined macros are
23877           to be set in the pre-processor, but does not influence the choice
23878           of runtime library/startup code.
23879
23880       -mwindows
23881           This option is available for Cygwin and MinGW targets.  It
23882           specifies that a GUI application is to be generated by instructing
23883           the linker to set the PE header subsystem type appropriately.
23884
23885       -fno-set-stack-executable
23886           This option is available for MinGW targets. It specifies that the
23887           executable flag for the stack used by nested functions isn't set.
23888           This is necessary for binaries running in kernel mode of Microsoft
23889           Windows, as there the User32 API, which is used to set executable
23890           privileges, isn't available.
23891
23892       -fwritable-relocated-rdata
23893           This option is available for MinGW and Cygwin targets.  It
23894           specifies that relocated-data in read-only section is put into the
23895           ".data" section.  This is a necessary for older runtimes not
23896           supporting modification of ".rdata" sections for pseudo-relocation.
23897
23898       -mpe-aligned-commons
23899           This option is available for Cygwin and MinGW targets.  It
23900           specifies that the GNU extension to the PE file format that permits
23901           the correct alignment of COMMON variables should be used when
23902           generating code.  It is enabled by default if GCC detects that the
23903           target assembler found during configuration supports the feature.
23904
23905       See also under x86 Options for standard options.
23906
23907   Xstormy16 Options
23908       These options are defined for Xstormy16:
23909
23910       -msim
23911           Choose startup files and linker script suitable for the simulator.
23912
23913   Xtensa Options
23914       These options are supported for Xtensa targets:
23915
23916       -mconst16
23917       -mno-const16
23918           Enable or disable use of "CONST16" instructions for loading
23919           constant values.  The "CONST16" instruction is currently not a
23920           standard option from Tensilica.  When enabled, "CONST16"
23921           instructions are always used in place of the standard "L32R"
23922           instructions.  The use of "CONST16" is enabled by default only if
23923           the "L32R" instruction is not available.
23924
23925       -mfused-madd
23926       -mno-fused-madd
23927           Enable or disable use of fused multiply/add and multiply/subtract
23928           instructions in the floating-point option.  This has no effect if
23929           the floating-point option is not also enabled.  Disabling fused
23930           multiply/add and multiply/subtract instructions forces the compiler
23931           to use separate instructions for the multiply and add/subtract
23932           operations.  This may be desirable in some cases where strict IEEE
23933           754-compliant results are required: the fused multiply add/subtract
23934           instructions do not round the intermediate result, thereby
23935           producing results with more bits of precision than specified by the
23936           IEEE standard.  Disabling fused multiply add/subtract instructions
23937           also ensures that the program output is not sensitive to the
23938           compiler's ability to combine multiply and add/subtract operations.
23939
23940       -mserialize-volatile
23941       -mno-serialize-volatile
23942           When this option is enabled, GCC inserts "MEMW" instructions before
23943           "volatile" memory references to guarantee sequential consistency.
23944           The default is -mserialize-volatile.  Use -mno-serialize-volatile
23945           to omit the "MEMW" instructions.
23946
23947       -mforce-no-pic
23948           For targets, like GNU/Linux, where all user-mode Xtensa code must
23949           be position-independent code (PIC), this option disables PIC for
23950           compiling kernel code.
23951
23952       -mtext-section-literals
23953       -mno-text-section-literals
23954           These options control the treatment of literal pools.  The default
23955           is -mno-text-section-literals, which places literals in a separate
23956           section in the output file.  This allows the literal pool to be
23957           placed in a data RAM/ROM, and it also allows the linker to combine
23958           literal pools from separate object files to remove redundant
23959           literals and improve code size.  With -mtext-section-literals, the
23960           literals are interspersed in the text section in order to keep them
23961           as close as possible to their references.  This may be necessary
23962           for large assembly files.  Literals for each function are placed
23963           right before that function.
23964
23965       -mauto-litpools
23966       -mno-auto-litpools
23967           These options control the treatment of literal pools.  The default
23968           is -mno-auto-litpools, which places literals in a separate section
23969           in the output file unless -mtext-section-literals is used.  With
23970           -mauto-litpools the literals are interspersed in the text section
23971           by the assembler.  Compiler does not produce explicit ".literal"
23972           directives and loads literals into registers with "MOVI"
23973           instructions instead of "L32R" to let the assembler do relaxation
23974           and place literals as necessary.  This option allows assembler to
23975           create several literal pools per function and assemble very big
23976           functions, which may not be possible with -mtext-section-literals.
23977
23978       -mtarget-align
23979       -mno-target-align
23980           When this option is enabled, GCC instructs the assembler to
23981           automatically align instructions to reduce branch penalties at the
23982           expense of some code density.  The assembler attempts to widen
23983           density instructions to align branch targets and the instructions
23984           following call instructions.  If there are not enough preceding
23985           safe density instructions to align a target, no widening is
23986           performed.  The default is -mtarget-align.  These options do not
23987           affect the treatment of auto-aligned instructions like "LOOP",
23988           which the assembler always aligns, either by widening density
23989           instructions or by inserting NOP instructions.
23990
23991       -mlongcalls
23992       -mno-longcalls
23993           When this option is enabled, GCC instructs the assembler to
23994           translate direct calls to indirect calls unless it can determine
23995           that the target of a direct call is in the range allowed by the
23996           call instruction.  This translation typically occurs for calls to
23997           functions in other source files.  Specifically, the assembler
23998           translates a direct "CALL" instruction into an "L32R" followed by a
23999           "CALLX" instruction.  The default is -mno-longcalls.  This option
24000           should be used in programs where the call target can potentially be
24001           out of range.  This option is implemented in the assembler, not the
24002           compiler, so the assembly code generated by GCC still shows direct
24003           call instructions---look at the disassembled object code to see the
24004           actual instructions.  Note that the assembler uses an indirect call
24005           for every cross-file call, not just those that really are out of
24006           range.
24007
24008   zSeries Options
24009       These are listed under
24010

ENVIRONMENT

24012       This section describes several environment variables that affect how
24013       GCC operates.  Some of them work by specifying directories or prefixes
24014       to use when searching for various kinds of files.  Some are used to
24015       specify other aspects of the compilation environment.
24016
24017       Note that you can also specify places to search using options such as
24018       -B, -I and -L.  These take precedence over places specified using
24019       environment variables, which in turn take precedence over those
24020       specified by the configuration of GCC.
24021
24022       LANG
24023       LC_CTYPE
24024       LC_MESSAGES
24025       LC_ALL
24026           These environment variables control the way that GCC uses
24027           localization information which allows GCC to work with different
24028           national conventions.  GCC inspects the locale categories LC_CTYPE
24029           and LC_MESSAGES if it has been configured to do so.  These locale
24030           categories can be set to any value supported by your installation.
24031           A typical value is en_GB.UTF-8 for English in the United Kingdom
24032           encoded in UTF-8.
24033
24034           The LC_CTYPE environment variable specifies character
24035           classification.  GCC uses it to determine the character boundaries
24036           in a string; this is needed for some multibyte encodings that
24037           contain quote and escape characters that are otherwise interpreted
24038           as a string end or escape.
24039
24040           The LC_MESSAGES environment variable specifies the language to use
24041           in diagnostic messages.
24042
24043           If the LC_ALL environment variable is set, it overrides the value
24044           of LC_CTYPE and LC_MESSAGES; otherwise, LC_CTYPE and LC_MESSAGES
24045           default to the value of the LANG environment variable.  If none of
24046           these variables are set, GCC defaults to traditional C English
24047           behavior.
24048
24049       TMPDIR
24050           If TMPDIR is set, it specifies the directory to use for temporary
24051           files.  GCC uses temporary files to hold the output of one stage of
24052           compilation which is to be used as input to the next stage: for
24053           example, the output of the preprocessor, which is the input to the
24054           compiler proper.
24055
24056       GCC_COMPARE_DEBUG
24057           Setting GCC_COMPARE_DEBUG is nearly equivalent to passing
24058           -fcompare-debug to the compiler driver.  See the documentation of
24059           this option for more details.
24060
24061       GCC_EXEC_PREFIX
24062           If GCC_EXEC_PREFIX is set, it specifies a prefix to use in the
24063           names of the subprograms executed by the compiler.  No slash is
24064           added when this prefix is combined with the name of a subprogram,
24065           but you can specify a prefix that ends with a slash if you wish.
24066
24067           If GCC_EXEC_PREFIX is not set, GCC attempts to figure out an
24068           appropriate prefix to use based on the pathname it is invoked with.
24069
24070           If GCC cannot find the subprogram using the specified prefix, it
24071           tries looking in the usual places for the subprogram.
24072
24073           The default value of GCC_EXEC_PREFIX is prefix/lib/gcc/ where
24074           prefix is the prefix to the installed compiler. In many cases
24075           prefix is the value of "prefix" when you ran the configure script.
24076
24077           Other prefixes specified with -B take precedence over this prefix.
24078
24079           This prefix is also used for finding files such as crt0.o that are
24080           used for linking.
24081
24082           In addition, the prefix is used in an unusual way in finding the
24083           directories to search for header files.  For each of the standard
24084           directories whose name normally begins with /usr/local/lib/gcc
24085           (more precisely, with the value of GCC_INCLUDE_DIR), GCC tries
24086           replacing that beginning with the specified prefix to produce an
24087           alternate directory name.  Thus, with -Bfoo/, GCC searches foo/bar
24088           just before it searches the standard directory /usr/local/lib/bar.
24089           If a standard directory begins with the configured prefix then the
24090           value of prefix is replaced by GCC_EXEC_PREFIX when looking for
24091           header files.
24092
24093       COMPILER_PATH
24094           The value of COMPILER_PATH is a colon-separated list of
24095           directories, much like PATH.  GCC tries the directories thus
24096           specified when searching for subprograms, if it cannot find the
24097           subprograms using GCC_EXEC_PREFIX.
24098
24099       LIBRARY_PATH
24100           The value of LIBRARY_PATH is a colon-separated list of directories,
24101           much like PATH.  When configured as a native compiler, GCC tries
24102           the directories thus specified when searching for special linker
24103           files, if it cannot find them using GCC_EXEC_PREFIX.  Linking using
24104           GCC also uses these directories when searching for ordinary
24105           libraries for the -l option (but directories specified with -L come
24106           first).
24107
24108       LANG
24109           This variable is used to pass locale information to the compiler.
24110           One way in which this information is used is to determine the
24111           character set to be used when character literals, string literals
24112           and comments are parsed in C and C++.  When the compiler is
24113           configured to allow multibyte characters, the following values for
24114           LANG are recognized:
24115
24116           C-JIS
24117               Recognize JIS characters.
24118
24119           C-SJIS
24120               Recognize SJIS characters.
24121
24122           C-EUCJP
24123               Recognize EUCJP characters.
24124
24125           If LANG is not defined, or if it has some other value, then the
24126           compiler uses "mblen" and "mbtowc" as defined by the default locale
24127           to recognize and translate multibyte characters.
24128
24129       Some additional environment variables affect the behavior of the
24130       preprocessor.
24131
24132       CPATH
24133       C_INCLUDE_PATH
24134       CPLUS_INCLUDE_PATH
24135       OBJC_INCLUDE_PATH
24136           Each variable's value is a list of directories separated by a
24137           special character, much like PATH, in which to look for header
24138           files.  The special character, "PATH_SEPARATOR", is target-
24139           dependent and determined at GCC build time.  For Microsoft Windows-
24140           based targets it is a semicolon, and for almost all other targets
24141           it is a colon.
24142
24143           CPATH specifies a list of directories to be searched as if
24144           specified with -I, but after any paths given with -I options on the
24145           command line.  This environment variable is used regardless of
24146           which language is being preprocessed.
24147
24148           The remaining environment variables apply only when preprocessing
24149           the particular language indicated.  Each specifies a list of
24150           directories to be searched as if specified with -isystem, but after
24151           any paths given with -isystem options on the command line.
24152
24153           In all these variables, an empty element instructs the compiler to
24154           search its current working directory.  Empty elements can appear at
24155           the beginning or end of a path.  For instance, if the value of
24156           CPATH is ":/special/include", that has the same effect as
24157           -I. -I/special/include.
24158
24159       DEPENDENCIES_OUTPUT
24160           If this variable is set, its value specifies how to output
24161           dependencies for Make based on the non-system header files
24162           processed by the compiler.  System header files are ignored in the
24163           dependency output.
24164
24165           The value of DEPENDENCIES_OUTPUT can be just a file name, in which
24166           case the Make rules are written to that file, guessing the target
24167           name from the source file name.  Or the value can have the form
24168           file target, in which case the rules are written to file file using
24169           target as the target name.
24170
24171           In other words, this environment variable is equivalent to
24172           combining the options -MM and -MF, with an optional -MT switch too.
24173
24174       SUNPRO_DEPENDENCIES
24175           This variable is the same as DEPENDENCIES_OUTPUT (see above),
24176           except that system header files are not ignored, so it implies -M
24177           rather than -MM.  However, the dependence on the main input file is
24178           omitted.
24179
24180       SOURCE_DATE_EPOCH
24181           If this variable is set, its value specifies a UNIX timestamp to be
24182           used in replacement of the current date and time in the "__DATE__"
24183           and "__TIME__" macros, so that the embedded timestamps become
24184           reproducible.
24185
24186           The value of SOURCE_DATE_EPOCH must be a UNIX timestamp, defined as
24187           the number of seconds (excluding leap seconds) since 01 Jan 1970
24188           00:00:00 represented in ASCII; identical to the output of
24189           @command{date +%s} on GNU/Linux and other systems that support the
24190           %s extension in the "date" command.
24191
24192           The value should be a known timestamp such as the last modification
24193           time of the source or package and it should be set by the build
24194           process.
24195

BUGS

24197       For instructions on reporting bugs, see
24198       <http://bugzilla.redhat.com/bugzilla>.
24199

FOOTNOTES

24201       1.  On some systems, gcc -shared needs to build supplementary stub code
24202           for constructors to work.  On multi-libbed systems, gcc -shared
24203           must select the correct support libraries to link against.  Failing
24204           to supply the correct flags may lead to subtle defects.  Supplying
24205           them in cases where they are not necessary is innocuous.
24206

SEE ALSO

24208       gpl(7), gfdl(7), fsf-funding(7), cpp(1), gcov(1), as(1), ld(1), gdb(1),
24209       dbx(1) and the Info entries for gcc, cpp, as, ld, binutils and gdb.
24210

AUTHOR

24212       See the Info entry for gcc, or
24213       <http://gcc.gnu.org/onlinedocs/gcc/Contributors.html>, for contributors
24214       to GCC.
24215
24217       Copyright (c) 1988-2018 Free Software Foundation, Inc.
24218
24219       Permission is granted to copy, distribute and/or modify this document
24220       under the terms of the GNU Free Documentation License, Version 1.3 or
24221       any later version published by the Free Software Foundation; with the
24222       Invariant Sections being "GNU General Public License" and "Funding Free
24223       Software", the Front-Cover texts being (a) (see below), and with the
24224       Back-Cover Texts being (b) (see below).  A copy of the license is
24225       included in the gfdl(7) man page.
24226
24227       (a) The FSF's Front-Cover Text is:
24228
24229            A GNU Manual
24230
24231       (b) The FSF's Back-Cover Text is:
24232
24233            You have freedom to copy and modify this GNU Manual, like GNU
24234            software.  Copies published by the Free Software Foundation raise
24235            funds for GNU development.
24236
24237
24238
24239gcc-8                             2019-02-23                            GCC(1)
Impressum