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
12735       These options are defined for AArch64 implementations:
12736
12737       -mabi=name
12738           Generate code for the specified data model.  Permissible values are
12739           ilp32 for SysV-like data model where int, long int and pointers are
12740           32 bits, and lp64 for SysV-like data model where int is 32 bits,
12741           but long int and pointers are 64 bits.
12742
12743           The default depends on the specific target configuration.  Note
12744           that the LP64 and ILP32 ABIs are not link-compatible; you must
12745           compile your entire program with the same ABI, and link with a
12746           compatible set of libraries.
12747
12748       -mbig-endian
12749           Generate big-endian code.  This is the default when GCC is
12750           configured for an aarch64_be-*-* target.
12751
12752       -mgeneral-regs-only
12753           Generate code which uses only the general-purpose registers.  This
12754           will prevent the compiler from using floating-point and Advanced
12755           SIMD registers but will not impose any restrictions on the
12756           assembler.
12757
12758       -mlittle-endian
12759           Generate little-endian code.  This is the default when GCC is
12760           configured for an aarch64-*-* but not an aarch64_be-*-* target.
12761
12762       -mcmodel=tiny
12763           Generate code for the tiny code model.  The program and its
12764           statically defined symbols must be within 1MB of each other.
12765           Programs can be statically or dynamically linked.
12766
12767       -mcmodel=small
12768           Generate code for the small code model.  The program and its
12769           statically defined symbols must be within 4GB of each other.
12770           Programs can be statically or dynamically linked.  This is the
12771           default code model.
12772
12773       -mcmodel=large
12774           Generate code for the large code model.  This makes no assumptions
12775           about addresses and sizes of sections.  Programs can be statically
12776           linked only.
12777
12778       -mstrict-align
12779           Avoid generating memory accesses that may not be aligned on a
12780           natural object boundary as described in the architecture
12781           specification.
12782
12783       -momit-leaf-frame-pointer
12784       -mno-omit-leaf-frame-pointer
12785           Omit or keep the frame pointer in leaf functions.  The former
12786           behavior is the default.
12787
12788       -mtls-dialect=desc
12789           Use TLS descriptors as the thread-local storage mechanism for
12790           dynamic accesses of TLS variables.  This is the default.
12791
12792       -mtls-dialect=traditional
12793           Use traditional TLS as the thread-local storage mechanism for
12794           dynamic accesses of TLS variables.
12795
12796       -mtls-size=size
12797           Specify bit size of immediate TLS offsets.  Valid values are 12,
12798           24, 32, 48.  This option requires binutils 2.26 or newer.
12799
12800       -mfix-cortex-a53-835769
12801       -mno-fix-cortex-a53-835769
12802           Enable or disable the workaround for the ARM Cortex-A53 erratum
12803           number 835769.  This involves inserting a NOP instruction between
12804           memory instructions and 64-bit integer multiply-accumulate
12805           instructions.
12806
12807       -mfix-cortex-a53-843419
12808       -mno-fix-cortex-a53-843419
12809           Enable or disable the workaround for the ARM Cortex-A53 erratum
12810           number 843419.  This erratum workaround is made at link time and
12811           this will only pass the corresponding flag to the linker.
12812
12813       -mlow-precision-recip-sqrt
12814       -mno-low-precision-recip-sqrt
12815           Enable or disable the reciprocal square root approximation.  This
12816           option only has an effect if -ffast-math or
12817           -funsafe-math-optimizations is used as well.  Enabling this reduces
12818           precision of reciprocal square root results to about 16 bits for
12819           single precision and to 32 bits for double precision.
12820
12821       -mlow-precision-sqrt
12822       -mno-low-precision-sqrt
12823           Enable or disable the square root approximation.  This option only
12824           has an effect if -ffast-math or -funsafe-math-optimizations is used
12825           as well.  Enabling this reduces precision of square root results to
12826           about 16 bits for single precision and to 32 bits for double
12827           precision.  If enabled, it implies -mlow-precision-recip-sqrt.
12828
12829       -mlow-precision-div
12830       -mno-low-precision-div
12831           Enable or disable the division approximation.  This option only has
12832           an effect if -ffast-math or -funsafe-math-optimizations is used as
12833           well.  Enabling this reduces precision of division results to about
12834           16 bits for single precision and to 32 bits for double precision.
12835
12836       -march=name
12837           Specify the name of the target architecture and, optionally, one or
12838           more feature modifiers.  This option has the form
12839           -march=arch{+[no]feature}*.
12840
12841           The permissible values for arch are armv8-a, armv8.1-a, armv8.2-a,
12842           armv8.3-a or armv8.4-a or native.
12843
12844           The value armv8.4-a implies armv8.3-a and enables compiler support
12845           for the ARMv8.4-A architecture extensions.
12846
12847           The value armv8.3-a implies armv8.2-a and enables compiler support
12848           for the ARMv8.3-A architecture extensions.
12849
12850           The value armv8.2-a implies armv8.1-a and enables compiler support
12851           for the ARMv8.2-A architecture extensions.
12852
12853           The value armv8.1-a implies armv8-a and enables compiler support
12854           for the ARMv8.1-A architecture extension.  In particular, it
12855           enables the +crc, +lse, and +rdma features.
12856
12857           The value native is available on native AArch64 GNU/Linux and
12858           causes the compiler to pick the architecture of the host system.
12859           This option has no effect if the compiler is unable to recognize
12860           the architecture of the host system,
12861
12862           The permissible values for feature are listed in the sub-section on
12863           aarch64-feature-modifiers,,-march and -mcpu Feature Modifiers.
12864           Where conflicting feature modifiers are specified, the right-most
12865           feature is used.
12866
12867           GCC uses name to determine what kind of instructions it can emit
12868           when generating assembly code.  If -march is specified without
12869           either of -mtune or -mcpu also being specified, the code is tuned
12870           to perform well across a range of target processors implementing
12871           the target architecture.
12872
12873       -mtune=name
12874           Specify the name of the target processor for which GCC should tune
12875           the performance of the code.  Permissible values for this option
12876           are: generic, cortex-a35, cortex-a53, cortex-a55, cortex-a57,
12877           cortex-a72, cortex-a73, cortex-a75, exynos-m1, falkor, qdf24xx,
12878           saphira, xgene1, vulcan, thunderx, thunderxt88, thunderxt88p1,
12879           thunderxt81, thunderxt83, thunderx2t99, cortex-a57.cortex-a53,
12880           cortex-a72.cortex-a53, cortex-a73.cortex-a35,
12881           cortex-a73.cortex-a53, cortex-a75.cortex-a55, native.
12882
12883           The values cortex-a57.cortex-a53, cortex-a72.cortex-a53,
12884           cortex-a73.cortex-a35, cortex-a73.cortex-a53, cortex-a75.cortex-a55
12885           specify that GCC should tune for a big.LITTLE system.
12886
12887           Additionally on native AArch64 GNU/Linux systems the value native
12888           tunes performance to the host system.  This option has no effect if
12889           the compiler is unable to recognize the processor of the host
12890           system.
12891
12892           Where none of -mtune=, -mcpu= or -march= are specified, the code is
12893           tuned to perform well across a range of target processors.
12894
12895           This option cannot be suffixed by feature modifiers.
12896
12897       -mcpu=name
12898           Specify the name of the target processor, optionally suffixed by
12899           one or more feature modifiers.  This option has the form
12900           -mcpu=cpu{+[no]feature}*, where the permissible values for cpu are
12901           the same as those available for -mtune.  The permissible values for
12902           feature are documented in the sub-section on
12903           aarch64-feature-modifiers,,-march and -mcpu Feature Modifiers.
12904           Where conflicting feature modifiers are specified, the right-most
12905           feature is used.
12906
12907           GCC uses name to determine what kind of instructions it can emit
12908           when generating assembly code (as if by -march) and to determine
12909           the target processor for which to tune for performance (as if by
12910           -mtune).  Where this option is used in conjunction with -march or
12911           -mtune, those options take precedence over the appropriate part of
12912           this option.
12913
12914       -moverride=string
12915           Override tuning decisions made by the back-end in response to a
12916           -mtune= switch.  The syntax, semantics, and accepted values for
12917           string in this option are not guaranteed to be consistent across
12918           releases.
12919
12920           This option is only intended to be useful when developing GCC.
12921
12922       -mverbose-cost-dump
12923           Enable verbose cost model dumping in the debug dump files.  This
12924           option is provided for use in debugging the compiler.
12925
12926       -mpc-relative-literal-loads
12927       -mno-pc-relative-literal-loads
12928           Enable or disable PC-relative literal loads.  With this option
12929           literal pools are accessed using a single instruction and emitted
12930           after each function.  This limits the maximum size of functions to
12931           1MB.  This is enabled by default for -mcmodel=tiny.
12932
12933       -msign-return-address=scope
12934           Select the function scope on which return address signing will be
12935           applied.  Permissible values are none, which disables return
12936           address signing, non-leaf, which enables pointer signing for
12937           functions which are not leaf functions, and all, which enables
12938           pointer signing for all functions.  The default value is none.
12939
12940       -msve-vector-bits=bits
12941           Specify the number of bits in an SVE vector register.  This option
12942           only has an effect when SVE is enabled.
12943
12944           GCC supports two forms of SVE code generation: "vector-length
12945           agnostic" output that works with any size of vector register and
12946           "vector-length specific" output that allows GCC to make assumptions
12947           about the vector length when it is useful for optimization reasons.
12948           The possible values of bits are: scalable, 128, 256, 512, 1024 and
12949           2048.  Specifying scalable selects vector-length agnostic output.
12950           At present -msve-vector-bits=128 also generates vector-length
12951           agnostic output.  All other values generate vector-length specific
12952           code.  The behavior of these values may change in future releases
12953           and no value except scalable should be relied on for producing code
12954           that is portable across different hardware SVE vector lengths.
12955
12956           The default is -msve-vector-bits=scalable, which produces vector-
12957           length agnostic code.
12958
12959       -march and -mcpu Feature Modifiers
12960
12961       Feature modifiers used with -march and -mcpu can be any of the
12962       following and their inverses nofeature:
12963
12964       crc Enable CRC extension.  This is on by default for -march=armv8.1-a.
12965
12966       crypto
12967           Enable Crypto extension.  This also enables Advanced SIMD and
12968           floating-point instructions.
12969
12970       fp  Enable floating-point instructions.  This is on by default for all
12971           possible values for options -march and -mcpu.
12972
12973       simd
12974           Enable Advanced SIMD instructions.  This also enables floating-
12975           point instructions.  This is on by default for all possible values
12976           for options -march and -mcpu.
12977
12978       sve Enable Scalable Vector Extension instructions.  This also enables
12979           Advanced SIMD and floating-point instructions.
12980
12981       lse Enable Large System Extension instructions.  This is on by default
12982           for -march=armv8.1-a.
12983
12984       rdma
12985           Enable Round Double Multiply Accumulate instructions.  This is on
12986           by default for -march=armv8.1-a.
12987
12988       fp16
12989           Enable FP16 extension.  This also enables floating-point
12990           instructions.
12991
12992       fp16fml
12993           Enable FP16 fmla extension.  This also enables FP16 extensions and
12994           floating-point instructions. This option is enabled by default for
12995           -march=armv8.4-a. Use of this option with architectures prior to
12996           Armv8.2-A is not supported.
12997
12998       rcpc
12999           Enable the RcPc extension.  This does not change code generation
13000           from GCC, but is passed on to the assembler, enabling inline asm
13001           statements to use instructions from the RcPc extension.
13002
13003       dotprod
13004           Enable the Dot Product extension.  This also enables Advanced SIMD
13005           instructions.
13006
13007       aes Enable the Armv8-a aes and pmull crypto extension.  This also
13008           enables Advanced SIMD instructions.
13009
13010       sha2
13011           Enable the Armv8-a sha2 crypto extension.  This also enables
13012           Advanced SIMD instructions.
13013
13014       sha3
13015           Enable the sha512 and sha3 crypto extension.  This also enables
13016           Advanced SIMD instructions. Use of this option with architectures
13017           prior to Armv8.2-A is not supported.
13018
13019       sm4 Enable the sm3 and sm4 crypto extension.  This also enables
13020           Advanced SIMD instructions.  Use of this option with architectures
13021           prior to Armv8.2-A is not supported.
13022
13023       Feature crypto implies aes, sha2, and simd, which implies fp.
13024       Conversely, nofp implies nosimd, which implies nocrypto, noaes and
13025       nosha2.
13026
13027       Adapteva Epiphany Options
13028
13029       These -m options are defined for Adapteva Epiphany:
13030
13031       -mhalf-reg-file
13032           Don't allocate any register in the range "r32"..."r63".  That
13033           allows code to run on hardware variants that lack these registers.
13034
13035       -mprefer-short-insn-regs
13036           Preferentially allocate registers that allow short instruction
13037           generation.  This can result in increased instruction count, so
13038           this may either reduce or increase overall code size.
13039
13040       -mbranch-cost=num
13041           Set the cost of branches to roughly num "simple" instructions.
13042           This cost is only a heuristic and is not guaranteed to produce
13043           consistent results across releases.
13044
13045       -mcmove
13046           Enable the generation of conditional moves.
13047
13048       -mnops=num
13049           Emit num NOPs before every other generated instruction.
13050
13051       -mno-soft-cmpsf
13052           For single-precision floating-point comparisons, emit an "fsub"
13053           instruction and test the flags.  This is faster than a software
13054           comparison, but can get incorrect results in the presence of NaNs,
13055           or when two different small numbers are compared such that their
13056           difference is calculated as zero.  The default is -msoft-cmpsf,
13057           which uses slower, but IEEE-compliant, software comparisons.
13058
13059       -mstack-offset=num
13060           Set the offset between the top of the stack and the stack pointer.
13061           E.g., a value of 8 means that the eight bytes in the range
13062           "sp+0...sp+7" can be used by leaf functions without stack
13063           allocation.  Values other than 8 or 16 are untested and unlikely to
13064           work.  Note also that this option changes the ABI; compiling a
13065           program with a different stack offset than the libraries have been
13066           compiled with generally does not work.  This option can be useful
13067           if you want to evaluate if a different stack offset would give you
13068           better code, but to actually use a different stack offset to build
13069           working programs, it is recommended to configure the toolchain with
13070           the appropriate --with-stack-offset=num option.
13071
13072       -mno-round-nearest
13073           Make the scheduler assume that the rounding mode has been set to
13074           truncating.  The default is -mround-nearest.
13075
13076       -mlong-calls
13077           If not otherwise specified by an attribute, assume all calls might
13078           be beyond the offset range of the "b" / "bl" instructions, and
13079           therefore load the function address into a register before
13080           performing a (otherwise direct) call.  This is the default.
13081
13082       -mshort-calls
13083           If not otherwise specified by an attribute, assume all direct calls
13084           are in the range of the "b" / "bl" instructions, so use these
13085           instructions for direct calls.  The default is -mlong-calls.
13086
13087       -msmall16
13088           Assume addresses can be loaded as 16-bit unsigned values.  This
13089           does not apply to function addresses for which -mlong-calls
13090           semantics are in effect.
13091
13092       -mfp-mode=mode
13093           Set the prevailing mode of the floating-point unit.  This
13094           determines the floating-point mode that is provided and expected at
13095           function call and return time.  Making this mode match the mode you
13096           predominantly need at function start can make your programs smaller
13097           and faster by avoiding unnecessary mode switches.
13098
13099           mode can be set to one the following values:
13100
13101           caller
13102               Any mode at function entry is valid, and retained or restored
13103               when the function returns, and when it calls other functions.
13104               This mode is useful for compiling libraries or other
13105               compilation units you might want to incorporate into different
13106               programs with different prevailing FPU modes, and the
13107               convenience of being able to use a single object file outweighs
13108               the size and speed overhead for any extra mode switching that
13109               might be needed, compared with what would be needed with a more
13110               specific choice of prevailing FPU mode.
13111
13112           truncate
13113               This is the mode used for floating-point calculations with
13114               truncating (i.e. round towards zero) rounding mode.  That
13115               includes conversion from floating point to integer.
13116
13117           round-nearest
13118               This is the mode used for floating-point calculations with
13119               round-to-nearest-or-even rounding mode.
13120
13121           int This is the mode used to perform integer calculations in the
13122               FPU, e.g.  integer multiply, or integer multiply-and-
13123               accumulate.
13124
13125           The default is -mfp-mode=caller
13126
13127       -mnosplit-lohi
13128       -mno-postinc
13129       -mno-postmodify
13130           Code generation tweaks that disable, respectively, splitting of
13131           32-bit loads, generation of post-increment addresses, and
13132           generation of post-modify addresses.  The defaults are msplit-lohi,
13133           -mpost-inc, and -mpost-modify.
13134
13135       -mnovect-double
13136           Change the preferred SIMD mode to SImode.  The default is
13137           -mvect-double, which uses DImode as preferred SIMD mode.
13138
13139       -max-vect-align=num
13140           The maximum alignment for SIMD vector mode types.  num may be 4 or
13141           8.  The default is 8.  Note that this is an ABI change, even though
13142           many library function interfaces are unaffected if they don't use
13143           SIMD vector modes in places that affect size and/or alignment of
13144           relevant types.
13145
13146       -msplit-vecmove-early
13147           Split vector moves into single word moves before reload.  In theory
13148           this can give better register allocation, but so far the reverse
13149           seems to be generally the case.
13150
13151       -m1reg-reg
13152           Specify a register to hold the constant -1, which makes loading
13153           small negative constants and certain bitmasks faster.  Allowable
13154           values for reg are r43 and r63, which specify use of that register
13155           as a fixed register, and none, which means that no register is used
13156           for this purpose.  The default is -m1reg-none.
13157
13158       ARC Options
13159
13160       The following options control the architecture variant for which code
13161       is being compiled:
13162
13163       -mbarrel-shifter
13164           Generate instructions supported by barrel shifter.  This is the
13165           default unless -mcpu=ARC601 or -mcpu=ARCEM is in effect.
13166
13167       -mjli-always
13168           Force to call a function using jli_s instruction.  This option is
13169           valid only for ARCv2 architecture.
13170
13171       -mcpu=cpu
13172           Set architecture type, register usage, and instruction scheduling
13173           parameters for cpu.  There are also shortcut alias options
13174           available for backward compatibility and convenience.  Supported
13175           values for cpu are
13176
13177           arc600
13178               Compile for ARC600.  Aliases: -mA6, -mARC600.
13179
13180           arc601
13181               Compile for ARC601.  Alias: -mARC601.
13182
13183           arc700
13184               Compile for ARC700.  Aliases: -mA7, -mARC700.  This is the
13185               default when configured with --with-cpu=arc700.
13186
13187           arcem
13188               Compile for ARC EM.
13189
13190           archs
13191               Compile for ARC HS.
13192
13193           em  Compile for ARC EM CPU with no hardware extensions.
13194
13195           em4 Compile for ARC EM4 CPU.
13196
13197           em4_dmips
13198               Compile for ARC EM4 DMIPS CPU.
13199
13200           em4_fpus
13201               Compile for ARC EM4 DMIPS CPU with the single-precision
13202               floating-point extension.
13203
13204           em4_fpuda
13205               Compile for ARC EM4 DMIPS CPU with single-precision floating-
13206               point and double assist instructions.
13207
13208           hs  Compile for ARC HS CPU with no hardware extensions except the
13209               atomic instructions.
13210
13211           hs34
13212               Compile for ARC HS34 CPU.
13213
13214           hs38
13215               Compile for ARC HS38 CPU.
13216
13217           hs38_linux
13218               Compile for ARC HS38 CPU with all hardware extensions on.
13219
13220           arc600_norm
13221               Compile for ARC 600 CPU with "norm" instructions enabled.
13222
13223           arc600_mul32x16
13224               Compile for ARC 600 CPU with "norm" and 32x16-bit multiply
13225               instructions enabled.
13226
13227           arc600_mul64
13228               Compile for ARC 600 CPU with "norm" and "mul64"-family
13229               instructions enabled.
13230
13231           arc601_norm
13232               Compile for ARC 601 CPU with "norm" instructions enabled.
13233
13234           arc601_mul32x16
13235               Compile for ARC 601 CPU with "norm" and 32x16-bit multiply
13236               instructions enabled.
13237
13238           arc601_mul64
13239               Compile for ARC 601 CPU with "norm" and "mul64"-family
13240               instructions enabled.
13241
13242           nps400
13243               Compile for ARC 700 on NPS400 chip.
13244
13245           em_mini
13246               Compile for ARC EM minimalist configuration featuring reduced
13247               register set.
13248
13249       -mdpfp
13250       -mdpfp-compact
13251           Generate double-precision FPX instructions, tuned for the compact
13252           implementation.
13253
13254       -mdpfp-fast
13255           Generate double-precision FPX instructions, tuned for the fast
13256           implementation.
13257
13258       -mno-dpfp-lrsr
13259           Disable "lr" and "sr" instructions from using FPX extension aux
13260           registers.
13261
13262       -mea
13263           Generate extended arithmetic instructions.  Currently only "divaw",
13264           "adds", "subs", and "sat16" are supported.  This is always enabled
13265           for -mcpu=ARC700.
13266
13267       -mno-mpy
13268           Do not generate "mpy"-family instructions for ARC700.  This option
13269           is deprecated.
13270
13271       -mmul32x16
13272           Generate 32x16-bit multiply and multiply-accumulate instructions.
13273
13274       -mmul64
13275           Generate "mul64" and "mulu64" instructions.  Only valid for
13276           -mcpu=ARC600.
13277
13278       -mnorm
13279           Generate "norm" instructions.  This is the default if -mcpu=ARC700
13280           is in effect.
13281
13282       -mspfp
13283       -mspfp-compact
13284           Generate single-precision FPX instructions, tuned for the compact
13285           implementation.
13286
13287       -mspfp-fast
13288           Generate single-precision FPX instructions, tuned for the fast
13289           implementation.
13290
13291       -msimd
13292           Enable generation of ARC SIMD instructions via target-specific
13293           builtins.  Only valid for -mcpu=ARC700.
13294
13295       -msoft-float
13296           This option ignored; it is provided for compatibility purposes
13297           only.  Software floating-point code is emitted by default, and this
13298           default can overridden by FPX options; -mspfp, -mspfp-compact, or
13299           -mspfp-fast for single precision, and -mdpfp, -mdpfp-compact, or
13300           -mdpfp-fast for double precision.
13301
13302       -mswap
13303           Generate "swap" instructions.
13304
13305       -matomic
13306           This enables use of the locked load/store conditional extension to
13307           implement atomic memory built-in functions.  Not available for ARC
13308           6xx or ARC EM cores.
13309
13310       -mdiv-rem
13311           Enable "div" and "rem" instructions for ARCv2 cores.
13312
13313       -mcode-density
13314           Enable code density instructions for ARC EM.  This option is on by
13315           default for ARC HS.
13316
13317       -mll64
13318           Enable double load/store operations for ARC HS cores.
13319
13320       -mtp-regno=regno
13321           Specify thread pointer register number.
13322
13323       -mmpy-option=multo
13324           Compile ARCv2 code with a multiplier design option.  You can
13325           specify the option using either a string or numeric value for
13326           multo.  wlh1 is the default value.  The recognized values are:
13327
13328           0
13329           none
13330               No multiplier available.
13331
13332           1
13333           w   16x16 multiplier, fully pipelined.  The following instructions
13334               are enabled: "mpyw" and "mpyuw".
13335
13336           2
13337           wlh1
13338               32x32 multiplier, fully pipelined (1 stage).  The following
13339               instructions are additionally enabled: "mpy", "mpyu", "mpym",
13340               "mpymu", and "mpy_s".
13341
13342           3
13343           wlh2
13344               32x32 multiplier, fully pipelined (2 stages).  The following
13345               instructions are additionally enabled: "mpy", "mpyu", "mpym",
13346               "mpymu", and "mpy_s".
13347
13348           4
13349           wlh3
13350               Two 16x16 multipliers, blocking, sequential.  The following
13351               instructions are additionally enabled: "mpy", "mpyu", "mpym",
13352               "mpymu", and "mpy_s".
13353
13354           5
13355           wlh4
13356               One 16x16 multiplier, blocking, sequential.  The following
13357               instructions are additionally enabled: "mpy", "mpyu", "mpym",
13358               "mpymu", and "mpy_s".
13359
13360           6
13361           wlh5
13362               One 32x4 multiplier, blocking, sequential.  The following
13363               instructions are additionally enabled: "mpy", "mpyu", "mpym",
13364               "mpymu", and "mpy_s".
13365
13366           7
13367           plus_dmpy
13368               ARC HS SIMD support.
13369
13370           8
13371           plus_macd
13372               ARC HS SIMD support.
13373
13374           9
13375           plus_qmacw
13376               ARC HS SIMD support.
13377
13378           This option is only available for ARCv2 cores.
13379
13380       -mfpu=fpu
13381           Enables support for specific floating-point hardware extensions for
13382           ARCv2 cores.  Supported values for fpu are:
13383
13384           fpus
13385               Enables support for single-precision floating-point hardware
13386               extensions.
13387
13388           fpud
13389               Enables support for double-precision floating-point hardware
13390               extensions.  The single-precision floating-point extension is
13391               also enabled.  Not available for ARC EM.
13392
13393           fpuda
13394               Enables support for double-precision floating-point hardware
13395               extensions using double-precision assist instructions.  The
13396               single-precision floating-point extension is also enabled.
13397               This option is only available for ARC EM.
13398
13399           fpuda_div
13400               Enables support for double-precision floating-point hardware
13401               extensions using double-precision assist instructions.  The
13402               single-precision floating-point, square-root, and divide
13403               extensions are also enabled.  This option is only available for
13404               ARC EM.
13405
13406           fpuda_fma
13407               Enables support for double-precision floating-point hardware
13408               extensions using double-precision assist instructions.  The
13409               single-precision floating-point and fused multiply and add
13410               hardware extensions are also enabled.  This option is only
13411               available for ARC EM.
13412
13413           fpuda_all
13414               Enables support for double-precision floating-point hardware
13415               extensions using double-precision assist instructions.  All
13416               single-precision floating-point hardware extensions are also
13417               enabled.  This option is only available for ARC EM.
13418
13419           fpus_div
13420               Enables support for single-precision floating-point, square-
13421               root and divide hardware extensions.
13422
13423           fpud_div
13424               Enables support for double-precision floating-point, square-
13425               root and divide hardware extensions.  This option includes
13426               option fpus_div. Not available for ARC EM.
13427
13428           fpus_fma
13429               Enables support for single-precision floating-point and fused
13430               multiply and add hardware extensions.
13431
13432           fpud_fma
13433               Enables support for double-precision floating-point and fused
13434               multiply and add hardware extensions.  This option includes
13435               option fpus_fma.  Not available for ARC EM.
13436
13437           fpus_all
13438               Enables support for all single-precision floating-point
13439               hardware extensions.
13440
13441           fpud_all
13442               Enables support for all single- and double-precision floating-
13443               point hardware extensions.  Not available for ARC EM.
13444
13445       -mirq-ctrl-saved=register-range, blink, lp_count
13446           Specifies general-purposes registers that the processor
13447           automatically saves/restores on interrupt entry and exit.
13448           register-range is specified as two registers separated by a dash.
13449           The register range always starts with "r0", the upper limit is "fp"
13450           register.  blink and lp_count are optional.  This option is only
13451           valid for ARC EM and ARC HS cores.
13452
13453       -mrgf-banked-regs=number
13454           Specifies the number of registers replicated in second register
13455           bank on entry to fast interrupt.  Fast interrupts are interrupts
13456           with the highest priority level P0.  These interrupts save only PC
13457           and STATUS32 registers to avoid memory transactions during
13458           interrupt entry and exit sequences.  Use this option when you are
13459           using fast interrupts in an ARC V2 family processor.  Permitted
13460           values are 4, 8, 16, and 32.
13461
13462       -mlpc-width=width
13463           Specify the width of the "lp_count" register.  Valid values for
13464           width are 8, 16, 20, 24, 28 and 32 bits.  The default width is
13465           fixed to 32 bits.  If the width is less than 32, the compiler does
13466           not attempt to transform loops in your program to use the zero-
13467           delay loop mechanism unless it is known that the "lp_count"
13468           register can hold the required loop-counter value.  Depending on
13469           the width specified, the compiler and run-time library might
13470           continue to use the loop mechanism for various needs.  This option
13471           defines macro "__ARC_LPC_WIDTH__" with the value of width.
13472
13473       -mrf16
13474           This option instructs the compiler to generate code for a 16-entry
13475           register file.  This option defines the "__ARC_RF16__" preprocessor
13476           macro.
13477
13478       The following options are passed through to the assembler, and also
13479       define preprocessor macro symbols.
13480
13481       -mdsp-packa
13482           Passed down to the assembler to enable the DSP Pack A extensions.
13483           Also sets the preprocessor symbol "__Xdsp_packa".  This option is
13484           deprecated.
13485
13486       -mdvbf
13487           Passed down to the assembler to enable the dual Viterbi butterfly
13488           extension.  Also sets the preprocessor symbol "__Xdvbf".  This
13489           option is deprecated.
13490
13491       -mlock
13492           Passed down to the assembler to enable the locked load/store
13493           conditional extension.  Also sets the preprocessor symbol
13494           "__Xlock".
13495
13496       -mmac-d16
13497           Passed down to the assembler.  Also sets the preprocessor symbol
13498           "__Xxmac_d16".  This option is deprecated.
13499
13500       -mmac-24
13501           Passed down to the assembler.  Also sets the preprocessor symbol
13502           "__Xxmac_24".  This option is deprecated.
13503
13504       -mrtsc
13505           Passed down to the assembler to enable the 64-bit time-stamp
13506           counter extension instruction.  Also sets the preprocessor symbol
13507           "__Xrtsc".  This option is deprecated.
13508
13509       -mswape
13510           Passed down to the assembler to enable the swap byte ordering
13511           extension instruction.  Also sets the preprocessor symbol
13512           "__Xswape".
13513
13514       -mtelephony
13515           Passed down to the assembler to enable dual- and single-operand
13516           instructions for telephony.  Also sets the preprocessor symbol
13517           "__Xtelephony".  This option is deprecated.
13518
13519       -mxy
13520           Passed down to the assembler to enable the XY memory extension.
13521           Also sets the preprocessor symbol "__Xxy".
13522
13523       The following options control how the assembly code is annotated:
13524
13525       -misize
13526           Annotate assembler instructions with estimated addresses.
13527
13528       -mannotate-align
13529           Explain what alignment considerations lead to the decision to make
13530           an instruction short or long.
13531
13532       The following options are passed through to the linker:
13533
13534       -marclinux
13535           Passed through to the linker, to specify use of the "arclinux"
13536           emulation.  This option is enabled by default in tool chains built
13537           for "arc-linux-uclibc" and "arceb-linux-uclibc" targets when
13538           profiling is not requested.
13539
13540       -marclinux_prof
13541           Passed through to the linker, to specify use of the "arclinux_prof"
13542           emulation.  This option is enabled by default in tool chains built
13543           for "arc-linux-uclibc" and "arceb-linux-uclibc" targets when
13544           profiling is requested.
13545
13546       The following options control the semantics of generated code:
13547
13548       -mlong-calls
13549           Generate calls as register indirect calls, thus providing access to
13550           the full 32-bit address range.
13551
13552       -mmedium-calls
13553           Don't use less than 25-bit addressing range for calls, which is the
13554           offset available for an unconditional branch-and-link instruction.
13555           Conditional execution of function calls is suppressed, to allow use
13556           of the 25-bit range, rather than the 21-bit range with conditional
13557           branch-and-link.  This is the default for tool chains built for
13558           "arc-linux-uclibc" and "arceb-linux-uclibc" targets.
13559
13560       -G num
13561           Put definitions of externally-visible data in a small data section
13562           if that data is no bigger than num bytes.  The default value of num
13563           is 4 for any ARC configuration, or 8 when we have double load/store
13564           operations.
13565
13566       -mno-sdata
13567           Do not generate sdata references.  This is the default for tool
13568           chains built for "arc-linux-uclibc" and "arceb-linux-uclibc"
13569           targets.
13570
13571       -mvolatile-cache
13572           Use ordinarily cached memory accesses for volatile references.
13573           This is the default.
13574
13575       -mno-volatile-cache
13576           Enable cache bypass for volatile references.
13577
13578       The following options fine tune code generation:
13579
13580       -malign-call
13581           Do alignment optimizations for call instructions.
13582
13583       -mauto-modify-reg
13584           Enable the use of pre/post modify with register displacement.
13585
13586       -mbbit-peephole
13587           Enable bbit peephole2.
13588
13589       -mno-brcc
13590           This option disables a target-specific pass in arc_reorg to
13591           generate compare-and-branch ("brcc") instructions.  It has no
13592           effect on generation of these instructions driven by the combiner
13593           pass.
13594
13595       -mcase-vector-pcrel
13596           Use PC-relative switch case tables to enable case table shortening.
13597           This is the default for -Os.
13598
13599       -mcompact-casesi
13600           Enable compact "casesi" pattern.  This is the default for -Os, and
13601           only available for ARCv1 cores.
13602
13603       -mno-cond-exec
13604           Disable the ARCompact-specific pass to generate conditional
13605           execution instructions.
13606
13607           Due to delay slot scheduling and interactions between operand
13608           numbers, literal sizes, instruction lengths, and the support for
13609           conditional execution, the target-independent pass to generate
13610           conditional execution is often lacking, so the ARC port has kept a
13611           special pass around that tries to find more conditional execution
13612           generation opportunities after register allocation, branch
13613           shortening, and delay slot scheduling have been done.  This pass
13614           generally, but not always, improves performance and code size, at
13615           the cost of extra compilation time, which is why there is an option
13616           to switch it off.  If you have a problem with call instructions
13617           exceeding their allowable offset range because they are
13618           conditionalized, you should consider using -mmedium-calls instead.
13619
13620       -mearly-cbranchsi
13621           Enable pre-reload use of the "cbranchsi" pattern.
13622
13623       -mexpand-adddi
13624           Expand "adddi3" and "subdi3" at RTL generation time into "add.f",
13625           "adc" etc.  This option is deprecated.
13626
13627       -mindexed-loads
13628           Enable the use of indexed loads.  This can be problematic because
13629           some optimizers then assume that indexed stores exist, which is not
13630           the case.
13631
13632       -mlra
13633           Enable Local Register Allocation.  This is still experimental for
13634           ARC, so by default the compiler uses standard reload (i.e.
13635           -mno-lra).
13636
13637       -mlra-priority-none
13638           Don't indicate any priority for target registers.
13639
13640       -mlra-priority-compact
13641           Indicate target register priority for r0..r3 / r12..r15.
13642
13643       -mlra-priority-noncompact
13644           Reduce target register priority for r0..r3 / r12..r15.
13645
13646       -mno-millicode
13647           When optimizing for size (using -Os), prologues and epilogues that
13648           have to save or restore a large number of registers are often
13649           shortened by using call to a special function in libgcc; this is
13650           referred to as a millicode call.  As these calls can pose
13651           performance issues, and/or cause linking issues when linking in a
13652           nonstandard way, this option is provided to turn off millicode call
13653           generation.
13654
13655       -mmixed-code
13656           Tweak register allocation to help 16-bit instruction generation.
13657           This generally has the effect of decreasing the average instruction
13658           size while increasing the instruction count.
13659
13660       -mq-class
13661           Enable q instruction alternatives.  This is the default for -Os.
13662
13663       -mRcq
13664           Enable Rcq constraint handling.  Most short code generation depends
13665           on this.  This is the default.
13666
13667       -mRcw
13668           Enable Rcw constraint handling.  Most ccfsm condexec mostly depends
13669           on this.  This is the default.
13670
13671       -msize-level=level
13672           Fine-tune size optimization with regards to instruction lengths and
13673           alignment.  The recognized values for level are:
13674
13675           0   No size optimization.  This level is deprecated and treated
13676               like 1.
13677
13678           1   Short instructions are used opportunistically.
13679
13680           2   In addition, alignment of loops and of code after barriers are
13681               dropped.
13682
13683           3   In addition, optional data alignment is dropped, and the option
13684               Os is enabled.
13685
13686           This defaults to 3 when -Os is in effect.  Otherwise, the behavior
13687           when this is not set is equivalent to level 1.
13688
13689       -mtune=cpu
13690           Set instruction scheduling parameters for cpu, overriding any
13691           implied by -mcpu=.
13692
13693           Supported values for cpu are
13694
13695           ARC600
13696               Tune for ARC600 CPU.
13697
13698           ARC601
13699               Tune for ARC601 CPU.
13700
13701           ARC700
13702               Tune for ARC700 CPU with standard multiplier block.
13703
13704           ARC700-xmac
13705               Tune for ARC700 CPU with XMAC block.
13706
13707           ARC725D
13708               Tune for ARC725D CPU.
13709
13710           ARC750D
13711               Tune for ARC750D CPU.
13712
13713       -mmultcost=num
13714           Cost to assume for a multiply instruction, with 4 being equal to a
13715           normal instruction.
13716
13717       -munalign-prob-threshold=probability
13718           Set probability threshold for unaligning branches.  When tuning for
13719           ARC700 and optimizing for speed, branches without filled delay slot
13720           are preferably emitted unaligned and long, unless profiling
13721           indicates that the probability for the branch to be taken is below
13722           probability.  The default is (REG_BR_PROB_BASE/2), i.e. 5000.
13723
13724       The following options are maintained for backward compatibility, but
13725       are now deprecated and will be removed in a future release:
13726
13727       -margonaut
13728           Obsolete FPX.
13729
13730       -mbig-endian
13731       -EB Compile code for big-endian targets.  Use of these options is now
13732           deprecated.  Big-endian code is supported by configuring GCC to
13733           build "arceb-elf32" and "arceb-linux-uclibc" targets, for which big
13734           endian is the default.
13735
13736       -mlittle-endian
13737       -EL Compile code for little-endian targets.  Use of these options is
13738           now deprecated.  Little-endian code is supported by configuring GCC
13739           to build "arc-elf32" and "arc-linux-uclibc" targets, for which
13740           little endian is the default.
13741
13742       -mbarrel_shifter
13743           Replaced by -mbarrel-shifter.
13744
13745       -mdpfp_compact
13746           Replaced by -mdpfp-compact.
13747
13748       -mdpfp_fast
13749           Replaced by -mdpfp-fast.
13750
13751       -mdsp_packa
13752           Replaced by -mdsp-packa.
13753
13754       -mEA
13755           Replaced by -mea.
13756
13757       -mmac_24
13758           Replaced by -mmac-24.
13759
13760       -mmac_d16
13761           Replaced by -mmac-d16.
13762
13763       -mspfp_compact
13764           Replaced by -mspfp-compact.
13765
13766       -mspfp_fast
13767           Replaced by -mspfp-fast.
13768
13769       -mtune=cpu
13770           Values arc600, arc601, arc700 and arc700-xmac for cpu are replaced
13771           by ARC600, ARC601, ARC700 and ARC700-xmac respectively.
13772
13773       -multcost=num
13774           Replaced by -mmultcost.
13775
13776       ARM Options
13777
13778       These -m options are defined for the ARM port:
13779
13780       -mabi=name
13781           Generate code for the specified ABI.  Permissible values are: apcs-
13782           gnu, atpcs, aapcs, aapcs-linux and iwmmxt.
13783
13784       -mapcs-frame
13785           Generate a stack frame that is compliant with the ARM Procedure
13786           Call Standard for all functions, even if this is not strictly
13787           necessary for correct execution of the code.  Specifying
13788           -fomit-frame-pointer with this option causes the stack frames not
13789           to be generated for leaf functions.  The default is
13790           -mno-apcs-frame.  This option is deprecated.
13791
13792       -mapcs
13793           This is a synonym for -mapcs-frame and is deprecated.
13794
13795       -mthumb-interwork
13796           Generate code that supports calling between the ARM and Thumb
13797           instruction sets.  Without this option, on pre-v5 architectures,
13798           the two instruction sets cannot be reliably used inside one
13799           program.  The default is -mno-thumb-interwork, since slightly
13800           larger code is generated when -mthumb-interwork is specified.  In
13801           AAPCS configurations this option is meaningless.
13802
13803       -mno-sched-prolog
13804           Prevent the reordering of instructions in the function prologue, or
13805           the merging of those instruction with the instructions in the
13806           function's body.  This means that all functions start with a
13807           recognizable set of instructions (or in fact one of a choice from a
13808           small set of different function prologues), and this information
13809           can be used to locate the start of functions inside an executable
13810           piece of code.  The default is -msched-prolog.
13811
13812       -mfloat-abi=name
13813           Specifies which floating-point ABI to use.  Permissible values are:
13814           soft, softfp and hard.
13815
13816           Specifying soft causes GCC to generate output containing library
13817           calls for floating-point operations.  softfp allows the generation
13818           of code using hardware floating-point instructions, but still uses
13819           the soft-float calling conventions.  hard allows generation of
13820           floating-point instructions and uses FPU-specific calling
13821           conventions.
13822
13823           The default depends on the specific target configuration.  Note
13824           that the hard-float and soft-float ABIs are not link-compatible;
13825           you must compile your entire program with the same ABI, and link
13826           with a compatible set of libraries.
13827
13828       -mlittle-endian
13829           Generate code for a processor running in little-endian mode.  This
13830           is the default for all standard configurations.
13831
13832       -mbig-endian
13833           Generate code for a processor running in big-endian mode; the
13834           default is to compile code for a little-endian processor.
13835
13836       -mbe8
13837       -mbe32
13838           When linking a big-endian image select between BE8 and BE32
13839           formats.  The option has no effect for little-endian images and is
13840           ignored.  The default is dependent on the selected target
13841           architecture.  For ARMv6 and later architectures the default is
13842           BE8, for older architectures the default is BE32.  BE32 format has
13843           been deprecated by ARM.
13844
13845       -march=name[+extension...]
13846           This specifies the name of the target ARM architecture.  GCC uses
13847           this name to determine what kind of instructions it can emit when
13848           generating assembly code.  This option can be used in conjunction
13849           with or instead of the -mcpu= option.
13850
13851           Permissible names are: armv4t, armv5t, armv5te, armv6, armv6j,
13852           armv6k, armv6kz, armv6t2, armv6z, armv6zk, armv7, armv7-a, armv7ve,
13853           armv8-a, armv8.1-a, armv8.2-a, armv8.3-a, armv8.4-a, armv7-r,
13854           armv8-r, armv6-m, armv6s-m, armv7-m, armv7e-m, armv8-m.base,
13855           armv8-m.main, iwmmxt and iwmmxt2.
13856
13857           Additionally, the following architectures, which lack support for
13858           the Thumb execution state, are recognized but support is
13859           deprecated: armv2, armv2a, armv3, armv3m, armv4, armv5 and armv5e.
13860
13861           Many of the architectures support extensions.  These can be added
13862           by appending +extension to the architecture name.  Extension
13863           options are processed in order and capabilities accumulate.  An
13864           extension will also enable any necessary base extensions upon which
13865           it depends.  For example, the +crypto extension will always enable
13866           the +simd extension.  The exception to the additive construction is
13867           for extensions that are prefixed with +no...: these extensions
13868           disable the specified option and any other extensions that may
13869           depend on the presence of that extension.
13870
13871           For example, -march=armv7-a+simd+nofp+vfpv4 is equivalent to
13872           writing -march=armv7-a+vfpv4 since the +simd option is entirely
13873           disabled by the +nofp option that follows it.
13874
13875           Most extension names are generically named, but have an effect that
13876           is dependent upon the architecture to which it is applied.  For
13877           example, the +simd option can be applied to both armv7-a and
13878           armv8-a architectures, but will enable the original ARMv7-A
13879           Advanced SIMD (Neon) extensions for armv7-a and the ARMv8-A variant
13880           for armv8-a.
13881
13882           The table below lists the supported extensions for each
13883           architecture.  Architectures not mentioned do not support any
13884           extensions.
13885
13886           armv5e
13887           armv5te
13888           armv6
13889           armv6j
13890           armv6k
13891           armv6kz
13892           armv6t2
13893           armv6z
13894           armv6zk
13895               +fp The VFPv2 floating-point instructions.  The extension
13896                   +vfpv2 can be used as an alias for this extension.
13897
13898               +nofp
13899                   Disable the floating-point instructions.
13900
13901           armv7
13902               The common subset of the ARMv7-A, ARMv7-R and ARMv7-M
13903               architectures.
13904
13905               +fp The VFPv3 floating-point instructions, with 16 double-
13906                   precision registers.  The extension +vfpv3-d16 can be used
13907                   as an alias for this extension.  Note that floating-point
13908                   is not supported by the base ARMv7-M architecture, but is
13909                   compatible with both the ARMv7-A and ARMv7-R architectures.
13910
13911               +nofp
13912                   Disable the floating-point instructions.
13913
13914           armv7-a
13915               +mp The multiprocessing extension.
13916
13917               +sec
13918                   The security extension.
13919
13920               +fp The VFPv3 floating-point instructions, with 16 double-
13921                   precision registers.  The extension +vfpv3-d16 can be used
13922                   as an alias for this extension.
13923
13924               +simd
13925                   The Advanced SIMD (Neon) v1 and the VFPv3 floating-point
13926                   instructions.  The extensions +neon and +neon-vfpv3 can be
13927                   used as aliases for this extension.
13928
13929               +vfpv3
13930                   The VFPv3 floating-point instructions, with 32 double-
13931                   precision registers.
13932
13933               +vfpv3-d16-fp16
13934                   The VFPv3 floating-point instructions, with 16 double-
13935                   precision registers and the half-precision floating-point
13936                   conversion operations.
13937
13938               +vfpv3-fp16
13939                   The VFPv3 floating-point instructions, with 32 double-
13940                   precision registers and the half-precision floating-point
13941                   conversion operations.
13942
13943               +vfpv4-d16
13944                   The VFPv4 floating-point instructions, with 16 double-
13945                   precision registers.
13946
13947               +vfpv4
13948                   The VFPv4 floating-point instructions, with 32 double-
13949                   precision registers.
13950
13951               +neon-fp16
13952                   The Advanced SIMD (Neon) v1 and the VFPv3 floating-point
13953                   instructions, with the half-precision floating-point
13954                   conversion operations.
13955
13956               +neon-vfpv4
13957                   The Advanced SIMD (Neon) v2 and the VFPv4 floating-point
13958                   instructions.
13959
13960               +nosimd
13961                   Disable the Advanced SIMD instructions (does not disable
13962                   floating point).
13963
13964               +nofp
13965                   Disable the floating-point and Advanced SIMD instructions.
13966
13967           armv7ve
13968               The extended version of the ARMv7-A architecture with support
13969               for virtualization.
13970
13971               +fp The VFPv4 floating-point instructions, with 16 double-
13972                   precision registers.  The extension +vfpv4-d16 can be used
13973                   as an alias for this extension.
13974
13975               +simd
13976                   The Advanced SIMD (Neon) v2 and the VFPv4 floating-point
13977                   instructions.  The extension +neon-vfpv4 can be used as an
13978                   alias for this extension.
13979
13980               +vfpv3-d16
13981                   The VFPv3 floating-point instructions, with 16 double-
13982                   precision registers.
13983
13984               +vfpv3
13985                   The VFPv3 floating-point instructions, with 32 double-
13986                   precision registers.
13987
13988               +vfpv3-d16-fp16
13989                   The VFPv3 floating-point instructions, with 16 double-
13990                   precision registers and the half-precision floating-point
13991                   conversion operations.
13992
13993               +vfpv3-fp16
13994                   The VFPv3 floating-point instructions, with 32 double-
13995                   precision registers and the half-precision floating-point
13996                   conversion operations.
13997
13998               +vfpv4-d16
13999                   The VFPv4 floating-point instructions, with 16 double-
14000                   precision registers.
14001
14002               +vfpv4
14003                   The VFPv4 floating-point instructions, with 32 double-
14004                   precision registers.
14005
14006               +neon
14007                   The Advanced SIMD (Neon) v1 and the VFPv3 floating-point
14008                   instructions.  The extension +neon-vfpv3 can be used as an
14009                   alias for this extension.
14010
14011               +neon-fp16
14012                   The Advanced SIMD (Neon) v1 and the VFPv3 floating-point
14013                   instructions, with the half-precision floating-point
14014                   conversion operations.
14015
14016               +nosimd
14017                   Disable the Advanced SIMD instructions (does not disable
14018                   floating point).
14019
14020               +nofp
14021                   Disable the floating-point and Advanced SIMD instructions.
14022
14023           armv8-a
14024               +crc
14025                   The Cyclic Redundancy Check (CRC) instructions.
14026
14027               +simd
14028                   The ARMv8-A Advanced SIMD and floating-point instructions.
14029
14030               +crypto
14031                   The cryptographic instructions.
14032
14033               +nocrypto
14034                   Disable the cryptographic instructions.
14035
14036               +nofp
14037                   Disable the floating-point, Advanced SIMD and cryptographic
14038                   instructions.
14039
14040           armv8.1-a
14041               +simd
14042                   The ARMv8.1-A Advanced SIMD and floating-point
14043                   instructions.
14044
14045               +crypto
14046                   The cryptographic instructions.  This also enables the
14047                   Advanced SIMD and floating-point instructions.
14048
14049               +nocrypto
14050                   Disable the cryptographic instructions.
14051
14052               +nofp
14053                   Disable the floating-point, Advanced SIMD and cryptographic
14054                   instructions.
14055
14056           armv8.2-a
14057           armv8.3-a
14058               +fp16
14059                   The half-precision floating-point data processing
14060                   instructions.  This also enables the Advanced SIMD and
14061                   floating-point instructions.
14062
14063               +fp16fml
14064                   The half-precision floating-point fmla extension.  This
14065                   also enables the half-precision floating-point extension
14066                   and Advanced SIMD and floating-point instructions.
14067
14068               +simd
14069                   The ARMv8.1-A Advanced SIMD and floating-point
14070                   instructions.
14071
14072               +crypto
14073                   The cryptographic instructions.  This also enables the
14074                   Advanced SIMD and floating-point instructions.
14075
14076               +dotprod
14077                   Enable the Dot Product extension.  This also enables
14078                   Advanced SIMD instructions.
14079
14080               +nocrypto
14081                   Disable the cryptographic extension.
14082
14083               +nofp
14084                   Disable the floating-point, Advanced SIMD and cryptographic
14085                   instructions.
14086
14087           armv8.4-a
14088               +fp16
14089                   The half-precision floating-point data processing
14090                   instructions.  This also enables the Advanced SIMD and
14091                   floating-point instructions as well as the Dot Product
14092                   extension and the half-precision floating-point fmla
14093                   extension.
14094
14095               +simd
14096                   The ARMv8.3-A Advanced SIMD and floating-point instructions
14097                   as well as the Dot Product extension.
14098
14099               +crypto
14100                   The cryptographic instructions.  This also enables the
14101                   Advanced SIMD and floating-point instructions as well as
14102                   the Dot Product extension.
14103
14104               +nocrypto
14105                   Disable the cryptographic extension.
14106
14107               +nofp
14108                   Disable the floating-point, Advanced SIMD and cryptographic
14109                   instructions.
14110
14111           armv7-r
14112               +fp.sp
14113                   The single-precision VFPv3 floating-point instructions.
14114                   The extension +vfpv3xd can be used as an alias for this
14115                   extension.
14116
14117               +fp The VFPv3 floating-point instructions with 16 double-
14118                   precision registers.  The extension +vfpv3-d16 can be used
14119                   as an alias for this extension.
14120
14121               +vfpv3xd-d16-fp16
14122                   The single-precision VFPv3 floating-point instructions with
14123                   16 double-precision registers and the half-precision
14124                   floating-point conversion operations.
14125
14126               +vfpv3-d16-fp16
14127                   The VFPv3 floating-point instructions, with 16 double-
14128                   precision registers and the half-precision floating-point
14129                   conversion operations.
14130
14131               +nofp
14132                   Disable the floating-point extension.
14133
14134               +idiv
14135                   The ARM-state integer division instructions.
14136
14137               +noidiv
14138                   Disable the ARM-state integer division extension.
14139
14140           armv7e-m
14141               +fp The single-precision VFPv4 floating-point instructions.
14142
14143               +fpv5
14144                   The single-precision FPv5 floating-point instructions.
14145
14146               +fp.dp
14147                   The single- and double-precision FPv5 floating-point
14148                   instructions.
14149
14150               +nofp
14151                   Disable the floating-point extensions.
14152
14153           armv8-m.main
14154               +dsp
14155                   The DSP instructions.
14156
14157               +nodsp
14158                   Disable the DSP extension.
14159
14160               +fp The single-precision floating-point instructions.
14161
14162               +fp.dp
14163                   The single- and double-precision floating-point
14164                   instructions.
14165
14166               +nofp
14167                   Disable the floating-point extension.
14168
14169           armv8-r
14170               +crc
14171                   The Cyclic Redundancy Check (CRC) instructions.
14172
14173               +fp.sp
14174                   The single-precision FPv5 floating-point instructions.
14175
14176               +simd
14177                   The ARMv8-A Advanced SIMD and floating-point instructions.
14178
14179               +crypto
14180                   The cryptographic instructions.
14181
14182               +nocrypto
14183                   Disable the cryptographic instructions.
14184
14185               +nofp
14186                   Disable the floating-point, Advanced SIMD and cryptographic
14187                   instructions.
14188
14189           -march=native causes the compiler to auto-detect the architecture
14190           of the build computer.  At present, this feature is only supported
14191           on GNU/Linux, and not all architectures are recognized.  If the
14192           auto-detect is unsuccessful the option has no effect.
14193
14194       -mtune=name
14195           This option specifies the name of the target ARM processor for
14196           which GCC should tune the performance of the code.  For some ARM
14197           implementations better performance can be obtained by using this
14198           option.  Permissible names are: arm2, arm250, arm3, arm6, arm60,
14199           arm600, arm610, arm620, arm7, arm7m, arm7d, arm7dm, arm7di,
14200           arm7dmi, arm70, arm700, arm700i, arm710, arm710c, arm7100, arm720,
14201           arm7500, arm7500fe, arm7tdmi, arm7tdmi-s, arm710t, arm720t,
14202           arm740t, strongarm, strongarm110, strongarm1100, strongarm1110,
14203           arm8, arm810, arm9, arm9e, arm920, arm920t, arm922t, arm946e-s,
14204           arm966e-s, arm968e-s, arm926ej-s, arm940t, arm9tdmi, arm10tdmi,
14205           arm1020t, arm1026ej-s, arm10e, arm1020e, arm1022e, arm1136j-s,
14206           arm1136jf-s, mpcore, mpcorenovfp, arm1156t2-s, arm1156t2f-s,
14207           arm1176jz-s, arm1176jzf-s, generic-armv7-a, cortex-a5, cortex-a7,
14208           cortex-a8, cortex-a9, cortex-a12, cortex-a15, cortex-a17,
14209           cortex-a32, cortex-a35, cortex-a53, cortex-a55, cortex-a57,
14210           cortex-a72, cortex-a73, cortex-a75, cortex-r4, cortex-r4f,
14211           cortex-r5, cortex-r7, cortex-r8, cortex-r52, cortex-m33,
14212           cortex-m23, cortex-m7, cortex-m4, cortex-m3, cortex-m1, cortex-m0,
14213           cortex-m0plus, cortex-m1.small-multiply, cortex-m0.small-multiply,
14214           cortex-m0plus.small-multiply, exynos-m1, marvell-pj4, xscale,
14215           iwmmxt, iwmmxt2, ep9312, fa526, fa626, fa606te, fa626te, fmp626,
14216           fa726te, xgene1.
14217
14218           Additionally, this option can specify that GCC should tune the
14219           performance of the code for a big.LITTLE system.  Permissible names
14220           are: cortex-a15.cortex-a7, cortex-a17.cortex-a7,
14221           cortex-a57.cortex-a53, cortex-a72.cortex-a53,
14222           cortex-a72.cortex-a35, cortex-a73.cortex-a53,
14223           cortex-a75.cortex-a55.
14224
14225           -mtune=generic-arch specifies that GCC should tune the performance
14226           for a blend of processors within architecture arch.  The aim is to
14227           generate code that run well on the current most popular processors,
14228           balancing between optimizations that benefit some CPUs in the
14229           range, and avoiding performance pitfalls of other CPUs.  The
14230           effects of this option may change in future GCC versions as CPU
14231           models come and go.
14232
14233           -mtune permits the same extension options as -mcpu, but the
14234           extension options do not affect the tuning of the generated code.
14235
14236           -mtune=native causes the compiler to auto-detect the CPU of the
14237           build computer.  At present, this feature is only supported on
14238           GNU/Linux, and not all architectures are recognized.  If the auto-
14239           detect is unsuccessful the option has no effect.
14240
14241       -mcpu=name[+extension...]
14242           This specifies the name of the target ARM processor.  GCC uses this
14243           name to derive the name of the target ARM architecture (as if
14244           specified by -march) and the ARM processor type for which to tune
14245           for performance (as if specified by -mtune).  Where this option is
14246           used in conjunction with -march or -mtune, those options take
14247           precedence over the appropriate part of this option.
14248
14249           Many of the supported CPUs implement optional architectural
14250           extensions.  Where this is so the architectural extensions are
14251           normally enabled by default.  If implementations that lack the
14252           extension exist, then the extension syntax can be used to disable
14253           those extensions that have been omitted.  For floating-point and
14254           Advanced SIMD (Neon) instructions, the settings of the options
14255           -mfloat-abi and -mfpu must also be considered: floating-point and
14256           Advanced SIMD instructions will only be used if -mfloat-abi is not
14257           set to soft; and any setting of -mfpu other than auto will override
14258           the available floating-point and SIMD extension instructions.
14259
14260           For example, cortex-a9 can be found in three major configurations:
14261           integer only, with just a floating-point unit or with floating-
14262           point and Advanced SIMD.  The default is to enable all the
14263           instructions, but the extensions +nosimd and +nofp can be used to
14264           disable just the SIMD or both the SIMD and floating-point
14265           instructions respectively.
14266
14267           Permissible names for this option are the same as those for -mtune.
14268
14269           The following extension options are common to the listed CPUs:
14270
14271           +nodsp
14272               Disable the DSP instructions on cortex-m33.
14273
14274           +nofp
14275               Disables the floating-point instructions on arm9e, arm946e-s,
14276               arm966e-s, arm968e-s, arm10e, arm1020e, arm1022e, arm926ej-s,
14277               arm1026ej-s, cortex-r5, cortex-r7, cortex-r8, cortex-m4,
14278               cortex-m7 and cortex-m33.  Disables the floating-point and SIMD
14279               instructions on generic-armv7-a, cortex-a5, cortex-a7,
14280               cortex-a8, cortex-a9, cortex-a12, cortex-a15, cortex-a17,
14281               cortex-a15.cortex-a7, cortex-a17.cortex-a7, cortex-a32,
14282               cortex-a35, cortex-a53 and cortex-a55.
14283
14284           +nofp.dp
14285               Disables the double-precision component of the floating-point
14286               instructions on cortex-r5, cortex-r7, cortex-r8, cortex-r52 and
14287               cortex-m7.
14288
14289           +nosimd
14290               Disables the SIMD (but not floating-point) instructions on
14291               generic-armv7-a, cortex-a5, cortex-a7 and cortex-a9.
14292
14293           +crypto
14294               Enables the cryptographic instructions on cortex-a32,
14295               cortex-a35, cortex-a53, cortex-a55, cortex-a57, cortex-a72,
14296               cortex-a73, cortex-a75, exynos-m1, xgene1,
14297               cortex-a57.cortex-a53, cortex-a72.cortex-a53,
14298               cortex-a73.cortex-a35, cortex-a73.cortex-a53 and
14299               cortex-a75.cortex-a55.
14300
14301           Additionally the generic-armv7-a pseudo target defaults to VFPv3
14302           with 16 double-precision registers.  It supports the following
14303           extension options: mp, sec, vfpv3-d16, vfpv3, vfpv3-d16-fp16,
14304           vfpv3-fp16, vfpv4-d16, vfpv4, neon, neon-vfpv3, neon-fp16,
14305           neon-vfpv4.  The meanings are the same as for the extensions to
14306           -march=armv7-a.
14307
14308           -mcpu=generic-arch is also permissible, and is equivalent to
14309           -march=arch -mtune=generic-arch.  See -mtune for more information.
14310
14311           -mcpu=native causes the compiler to auto-detect the CPU of the
14312           build computer.  At present, this feature is only supported on
14313           GNU/Linux, and not all architectures are recognized.  If the auto-
14314           detect is unsuccessful the option has no effect.
14315
14316       -mfpu=name
14317           This specifies what floating-point hardware (or hardware emulation)
14318           is available on the target.  Permissible names are: auto, vfpv2,
14319           vfpv3, vfpv3-fp16, vfpv3-d16, vfpv3-d16-fp16, vfpv3xd,
14320           vfpv3xd-fp16, neon-vfpv3, neon-fp16, vfpv4, vfpv4-d16, fpv4-sp-d16,
14321           neon-vfpv4, fpv5-d16, fpv5-sp-d16, fp-armv8, neon-fp-armv8 and
14322           crypto-neon-fp-armv8.  Note that neon is an alias for neon-vfpv3
14323           and vfp is an alias for vfpv2.
14324
14325           The setting auto is the default and is special.  It causes the
14326           compiler to select the floating-point and Advanced SIMD
14327           instructions based on the settings of -mcpu and -march.
14328
14329           If the selected floating-point hardware includes the NEON extension
14330           (e.g. -mfpu=neon), note that floating-point operations are not
14331           generated by GCC's auto-vectorization pass unless
14332           -funsafe-math-optimizations is also specified.  This is because
14333           NEON hardware does not fully implement the IEEE 754 standard for
14334           floating-point arithmetic (in particular denormal values are
14335           treated as zero), so the use of NEON instructions may lead to a
14336           loss of precision.
14337
14338           You can also set the fpu name at function level by using the
14339           "target("fpu=")" function attributes or pragmas.
14340
14341       -mfp16-format=name
14342           Specify the format of the "__fp16" half-precision floating-point
14343           type.  Permissible names are none, ieee, and alternative; the
14344           default is none, in which case the "__fp16" type is not defined.
14345
14346       -mstructure-size-boundary=n
14347           The sizes of all structures and unions are rounded up to a multiple
14348           of the number of bits set by this option.  Permissible values are
14349           8, 32 and 64.  The default value varies for different toolchains.
14350           For the COFF targeted toolchain the default value is 8.  A value of
14351           64 is only allowed if the underlying ABI supports it.
14352
14353           Specifying a larger number can produce faster, more efficient code,
14354           but can also increase the size of the program.  Different values
14355           are potentially incompatible.  Code compiled with one value cannot
14356           necessarily expect to work with code or libraries compiled with
14357           another value, if they exchange information using structures or
14358           unions.
14359
14360           This option is deprecated.
14361
14362       -mabort-on-noreturn
14363           Generate a call to the function "abort" at the end of a "noreturn"
14364           function.  It is executed if the function tries to return.
14365
14366       -mlong-calls
14367       -mno-long-calls
14368           Tells the compiler to perform function calls by first loading the
14369           address of the function into a register and then performing a
14370           subroutine call on this register.  This switch is needed if the
14371           target function lies outside of the 64-megabyte addressing range of
14372           the offset-based version of subroutine call instruction.
14373
14374           Even if this switch is enabled, not all function calls are turned
14375           into long calls.  The heuristic is that static functions, functions
14376           that have the "short_call" attribute, functions that are inside the
14377           scope of a "#pragma no_long_calls" directive, and functions whose
14378           definitions have already been compiled within the current
14379           compilation unit are not turned into long calls.  The exceptions to
14380           this rule are that weak function definitions, functions with the
14381           "long_call" attribute or the "section" attribute, and functions
14382           that are within the scope of a "#pragma long_calls" directive are
14383           always turned into long calls.
14384
14385           This feature is not enabled by default.  Specifying -mno-long-calls
14386           restores the default behavior, as does placing the function calls
14387           within the scope of a "#pragma long_calls_off" directive.  Note
14388           these switches have no effect on how the compiler generates code to
14389           handle function calls via function pointers.
14390
14391       -msingle-pic-base
14392           Treat the register used for PIC addressing as read-only, rather
14393           than loading it in the prologue for each function.  The runtime
14394           system is responsible for initializing this register with an
14395           appropriate value before execution begins.
14396
14397       -mpic-register=reg
14398           Specify the register to be used for PIC addressing.  For standard
14399           PIC base case, the default is any suitable register determined by
14400           compiler.  For single PIC base case, the default is R9 if target is
14401           EABI based or stack-checking is enabled, otherwise the default is
14402           R10.
14403
14404       -mpic-data-is-text-relative
14405           Assume that the displacement between the text and data segments is
14406           fixed at static link time.  This permits using PC-relative
14407           addressing operations to access data known to be in the data
14408           segment.  For non-VxWorks RTP targets, this option is enabled by
14409           default.  When disabled on such targets, it will enable
14410           -msingle-pic-base by default.
14411
14412       -mpoke-function-name
14413           Write the name of each function into the text section, directly
14414           preceding the function prologue.  The generated code is similar to
14415           this:
14416
14417                        t0
14418                            .ascii "arm_poke_function_name", 0
14419                            .align
14420                        t1
14421                            .word 0xff000000 + (t1 - t0)
14422                        arm_poke_function_name
14423                            mov     ip, sp
14424                            stmfd   sp!, {fp, ip, lr, pc}
14425                            sub     fp, ip, #4
14426
14427           When performing a stack backtrace, code can inspect the value of
14428           "pc" stored at "fp + 0".  If the trace function then looks at
14429           location "pc - 12" and the top 8 bits are set, then we know that
14430           there is a function name embedded immediately preceding this
14431           location and has length "((pc[-3]) & 0xff000000)".
14432
14433       -mthumb
14434       -marm
14435           Select between generating code that executes in ARM and Thumb
14436           states.  The default for most configurations is to generate code
14437           that executes in ARM state, but the default can be changed by
14438           configuring GCC with the --with-mode=state configure option.
14439
14440           You can also override the ARM and Thumb mode for each function by
14441           using the "target("thumb")" and "target("arm")" function attributes
14442           or pragmas.
14443
14444       -mflip-thumb
14445           Switch ARM/Thumb modes on alternating functions.  This option is
14446           provided for regression testing of mixed Thumb/ARM code generation,
14447           and is not intended for ordinary use in compiling code.
14448
14449       -mtpcs-frame
14450           Generate a stack frame that is compliant with the Thumb Procedure
14451           Call Standard for all non-leaf functions.  (A leaf function is one
14452           that does not call any other functions.)  The default is
14453           -mno-tpcs-frame.
14454
14455       -mtpcs-leaf-frame
14456           Generate a stack frame that is compliant with the Thumb Procedure
14457           Call Standard for all leaf functions.  (A leaf function is one that
14458           does not call any other functions.)  The default is
14459           -mno-apcs-leaf-frame.
14460
14461       -mcallee-super-interworking
14462           Gives all externally visible functions in the file being compiled
14463           an ARM instruction set header which switches to Thumb mode before
14464           executing the rest of the function.  This allows these functions to
14465           be called from non-interworking code.  This option is not valid in
14466           AAPCS configurations because interworking is enabled by default.
14467
14468       -mcaller-super-interworking
14469           Allows calls via function pointers (including virtual functions) to
14470           execute correctly regardless of whether the target code has been
14471           compiled for interworking or not.  There is a small overhead in the
14472           cost of executing a function pointer if this option is enabled.
14473           This option is not valid in AAPCS configurations because
14474           interworking is enabled by default.
14475
14476       -mtp=name
14477           Specify the access model for the thread local storage pointer.  The
14478           valid models are soft, which generates calls to "__aeabi_read_tp",
14479           cp15, which fetches the thread pointer from "cp15" directly
14480           (supported in the arm6k architecture), and auto, which uses the
14481           best available method for the selected processor.  The default
14482           setting is auto.
14483
14484       -mtls-dialect=dialect
14485           Specify the dialect to use for accessing thread local storage.  Two
14486           dialects are supported---gnu and gnu2.  The gnu dialect selects the
14487           original GNU scheme for supporting local and global dynamic TLS
14488           models.  The gnu2 dialect selects the GNU descriptor scheme, which
14489           provides better performance for shared libraries.  The GNU
14490           descriptor scheme is compatible with the original scheme, but does
14491           require new assembler, linker and library support.  Initial and
14492           local exec TLS models are unaffected by this option and always use
14493           the original scheme.
14494
14495       -mword-relocations
14496           Only generate absolute relocations on word-sized values (i.e.
14497           R_ARM_ABS32).  This is enabled by default on targets (uClinux,
14498           SymbianOS) where the runtime loader imposes this restriction, and
14499           when -fpic or -fPIC is specified.
14500
14501       -mfix-cortex-m3-ldrd
14502           Some Cortex-M3 cores can cause data corruption when "ldrd"
14503           instructions with overlapping destination and base registers are
14504           used.  This option avoids generating these instructions.  This
14505           option is enabled by default when -mcpu=cortex-m3 is specified.
14506
14507       -munaligned-access
14508       -mno-unaligned-access
14509           Enables (or disables) reading and writing of 16- and 32- bit values
14510           from addresses that are not 16- or 32- bit aligned.  By default
14511           unaligned access is disabled for all pre-ARMv6, all ARMv6-M and for
14512           ARMv8-M Baseline architectures, and enabled for all other
14513           architectures.  If unaligned access is not enabled then words in
14514           packed data structures are accessed a byte at a time.
14515
14516           The ARM attribute "Tag_CPU_unaligned_access" is set in the
14517           generated object file to either true or false, depending upon the
14518           setting of this option.  If unaligned access is enabled then the
14519           preprocessor symbol "__ARM_FEATURE_UNALIGNED" is also defined.
14520
14521       -mneon-for-64bits
14522           Enables using Neon to handle scalar 64-bits operations. This is
14523           disabled by default since the cost of moving data from core
14524           registers to Neon is high.
14525
14526       -mslow-flash-data
14527           Assume loading data from flash is slower than fetching instruction.
14528           Therefore literal load is minimized for better performance.  This
14529           option is only supported when compiling for ARMv7 M-profile and off
14530           by default.
14531
14532       -masm-syntax-unified
14533           Assume inline assembler is using unified asm syntax.  The default
14534           is currently off which implies divided syntax.  This option has no
14535           impact on Thumb2. However, this may change in future releases of
14536           GCC.  Divided syntax should be considered deprecated.
14537
14538       -mrestrict-it
14539           Restricts generation of IT blocks to conform to the rules of
14540           ARMv8-A.  IT blocks can only contain a single 16-bit instruction
14541           from a select set of instructions. This option is on by default for
14542           ARMv8-A Thumb mode.
14543
14544       -mprint-tune-info
14545           Print CPU tuning information as comment in assembler file.  This is
14546           an option used only for regression testing of the compiler and not
14547           intended for ordinary use in compiling code.  This option is
14548           disabled by default.
14549
14550       -mverbose-cost-dump
14551           Enable verbose cost model dumping in the debug dump files.  This
14552           option is provided for use in debugging the compiler.
14553
14554       -mpure-code
14555           Do not allow constant data to be placed in code sections.
14556           Additionally, when compiling for ELF object format give all text
14557           sections the ELF processor-specific section attribute
14558           "SHF_ARM_PURECODE".  This option is only available when generating
14559           non-pic code for M-profile targets with the MOVT instruction.
14560
14561       -mcmse
14562           Generate secure code as per the "ARMv8-M Security Extensions:
14563           Requirements on Development Tools Engineering Specification", which
14564           can be found on
14565           <http://infocenter.arm.com/help/topic/com.arm.doc.ecm0359818/ECM0359818_armv8m_security_extensions_reqs_on_dev_tools_1_0.pdf>.
14566
14567       AVR Options
14568
14569       These options are defined for AVR implementations:
14570
14571       -mmcu=mcu
14572           Specify Atmel AVR instruction set architectures (ISA) or MCU type.
14573
14574           The default for this option is@tie{}avr2.
14575
14576           GCC supports the following AVR devices and ISAs:
14577
14578           "avr2"
14579               "Classic" devices with up to 8@tie{}KiB of program memory.
14580               mcu@tie{}= "attiny22", "attiny26", "at90c8534", "at90s2313",
14581               "at90s2323", "at90s2333", "at90s2343", "at90s4414",
14582               "at90s4433", "at90s4434", "at90s8515", "at90s8535".
14583
14584           "avr25"
14585               "Classic" devices with up to 8@tie{}KiB of program memory and
14586               with the "MOVW" instruction.  mcu@tie{}= "ata5272", "ata6616c",
14587               "attiny13", "attiny13a", "attiny2313", "attiny2313a",
14588               "attiny24", "attiny24a", "attiny25", "attiny261", "attiny261a",
14589               "attiny43u", "attiny4313", "attiny44", "attiny44a",
14590               "attiny441", "attiny45", "attiny461", "attiny461a", "attiny48",
14591               "attiny828", "attiny84", "attiny84a", "attiny841", "attiny85",
14592               "attiny861", "attiny861a", "attiny87", "attiny88", "at86rf401".
14593
14594           "avr3"
14595               "Classic" devices with 16@tie{}KiB up to 64@tie{}KiB of
14596               program memory.  mcu@tie{}= "at43usb355", "at76c711".
14597
14598           "avr31"
14599               "Classic" devices with 128@tie{}KiB of program memory.
14600               mcu@tie{}= "atmega103", "at43usb320".
14601
14602           "avr35"
14603               "Classic" devices with 16@tie{}KiB up to 64@tie{}KiB of program
14604               memory and with the "MOVW" instruction.  mcu@tie{}= "ata5505",
14605               "ata6617c", "ata664251", "atmega16u2", "atmega32u2",
14606               "atmega8u2", "attiny1634", "attiny167", "at90usb162",
14607               "at90usb82".
14608
14609           "avr4"
14610               "Enhanced" devices with up to 8@tie{}KiB of program memory.
14611               mcu@tie{}= "ata6285", "ata6286", "ata6289", "ata6612c",
14612               "atmega48", "atmega48a", "atmega48p", "atmega48pa",
14613               "atmega48pb", "atmega8", "atmega8a", "atmega8hva",
14614               "atmega8515", "atmega8535", "atmega88", "atmega88a",
14615               "atmega88p", "atmega88pa", "atmega88pb", "at90pwm1",
14616               "at90pwm2", "at90pwm2b", "at90pwm3", "at90pwm3b", "at90pwm81".
14617
14618           "avr5"
14619               "Enhanced" devices with 16@tie{}KiB up to 64@tie{}KiB of
14620               program memory.  mcu@tie{}= "ata5702m322", "ata5782",
14621               "ata5790", "ata5790n", "ata5791", "ata5795", "ata5831",
14622               "ata6613c", "ata6614q", "ata8210", "ata8510", "atmega16",
14623               "atmega16a", "atmega16hva", "atmega16hva2", "atmega16hvb",
14624               "atmega16hvbrevb", "atmega16m1", "atmega16u4", "atmega161",
14625               "atmega162", "atmega163", "atmega164a", "atmega164p",
14626               "atmega164pa", "atmega165", "atmega165a", "atmega165p",
14627               "atmega165pa", "atmega168", "atmega168a", "atmega168p",
14628               "atmega168pa", "atmega168pb", "atmega169", "atmega169a",
14629               "atmega169p", "atmega169pa", "atmega32", "atmega32a",
14630               "atmega32c1", "atmega32hvb", "atmega32hvbrevb", "atmega32m1",
14631               "atmega32u4", "atmega32u6", "atmega323", "atmega324a",
14632               "atmega324p", "atmega324pa", "atmega325", "atmega325a",
14633               "atmega325p", "atmega325pa", "atmega3250", "atmega3250a",
14634               "atmega3250p", "atmega3250pa", "atmega328", "atmega328p",
14635               "atmega328pb", "atmega329", "atmega329a", "atmega329p",
14636               "atmega329pa", "atmega3290", "atmega3290a", "atmega3290p",
14637               "atmega3290pa", "atmega406", "atmega64", "atmega64a",
14638               "atmega64c1", "atmega64hve", "atmega64hve2", "atmega64m1",
14639               "atmega64rfr2", "atmega640", "atmega644", "atmega644a",
14640               "atmega644p", "atmega644pa", "atmega644rfr2", "atmega645",
14641               "atmega645a", "atmega645p", "atmega6450", "atmega6450a",
14642               "atmega6450p", "atmega649", "atmega649a", "atmega649p",
14643               "atmega6490", "atmega6490a", "atmega6490p", "at90can32",
14644               "at90can64", "at90pwm161", "at90pwm216", "at90pwm316",
14645               "at90scr100", "at90usb646", "at90usb647", "at94k", "m3000".
14646
14647           "avr51"
14648               "Enhanced" devices with 128@tie{}KiB of program memory.
14649               mcu@tie{}= "atmega128", "atmega128a", "atmega128rfa1",
14650               "atmega128rfr2", "atmega1280", "atmega1281", "atmega1284",
14651               "atmega1284p", "atmega1284rfr2", "at90can128", "at90usb1286",
14652               "at90usb1287".
14653
14654           "avr6"
14655               "Enhanced" devices with 3-byte PC, i.e. with more than
14656               128@tie{}KiB of program memory.  mcu@tie{}= "atmega256rfr2",
14657               "atmega2560", "atmega2561", "atmega2564rfr2".
14658
14659           "avrxmega2"
14660               "XMEGA" devices with more than 8@tie{}KiB and up to 64@tie{}KiB
14661               of program memory.  mcu@tie{}= "atxmega16a4", "atxmega16a4u",
14662               "atxmega16c4", "atxmega16d4", "atxmega16e5", "atxmega32a4",
14663               "atxmega32a4u", "atxmega32c3", "atxmega32c4", "atxmega32d3",
14664               "atxmega32d4", "atxmega32e5", "atxmega8e5".
14665
14666           "avrxmega3"
14667               "XMEGA" devices with up to 64@tie{}KiB of combined program
14668               memory and RAM, and with program memory visible in the RAM
14669               address space.  mcu@tie{}= "attiny1614", "attiny1616",
14670               "attiny1617", "attiny212", "attiny214", "attiny3214",
14671               "attiny3216", "attiny3217", "attiny412", "attiny414",
14672               "attiny416", "attiny417", "attiny814", "attiny816",
14673               "attiny817".
14674
14675           "avrxmega4"
14676               "XMEGA" devices with more than 64@tie{}KiB and up to
14677               128@tie{}KiB of program memory.  mcu@tie{}= "atxmega64a3",
14678               "atxmega64a3u", "atxmega64a4u", "atxmega64b1", "atxmega64b3",
14679               "atxmega64c3", "atxmega64d3", "atxmega64d4".
14680
14681           "avrxmega5"
14682               "XMEGA" devices with more than 64@tie{}KiB and up to
14683               128@tie{}KiB of program memory and more than 64@tie{}KiB of
14684               RAM.  mcu@tie{}= "atxmega64a1", "atxmega64a1u".
14685
14686           "avrxmega6"
14687               "XMEGA" devices with more than 128@tie{}KiB of program memory.
14688               mcu@tie{}= "atxmega128a3", "atxmega128a3u", "atxmega128b1",
14689               "atxmega128b3", "atxmega128c3", "atxmega128d3", "atxmega128d4",
14690               "atxmega192a3", "atxmega192a3u", "atxmega192c3",
14691               "atxmega192d3", "atxmega256a3", "atxmega256a3b",
14692               "atxmega256a3bu", "atxmega256a3u", "atxmega256c3",
14693               "atxmega256d3", "atxmega384c3", "atxmega384d3".
14694
14695           "avrxmega7"
14696               "XMEGA" devices with more than 128@tie{}KiB of program memory
14697               and more than 64@tie{}KiB of RAM.  mcu@tie{}= "atxmega128a1",
14698               "atxmega128a1u", "atxmega128a4u".
14699
14700           "avrtiny"
14701               "TINY" Tiny core devices with 512@tie{}B up to 4@tie{}KiB of
14702               program memory.  mcu@tie{}= "attiny10", "attiny20", "attiny4",
14703               "attiny40", "attiny5", "attiny9".
14704
14705           "avr1"
14706               This ISA is implemented by the minimal AVR core and supported
14707               for assembler only.  mcu@tie{}= "attiny11", "attiny12",
14708               "attiny15", "attiny28", "at90s1200".
14709
14710       -mabsdata
14711           Assume that all data in static storage can be accessed by LDS / STS
14712           instructions.  This option has only an effect on reduced Tiny
14713           devices like ATtiny40.  See also the "absdata" AVR Variable
14714           Attributes,variable attribute.
14715
14716       -maccumulate-args
14717           Accumulate outgoing function arguments and acquire/release the
14718           needed stack space for outgoing function arguments once in function
14719           prologue/epilogue.  Without this option, outgoing arguments are
14720           pushed before calling a function and popped afterwards.
14721
14722           Popping the arguments after the function call can be expensive on
14723           AVR so that accumulating the stack space might lead to smaller
14724           executables because arguments need not be removed from the stack
14725           after such a function call.
14726
14727           This option can lead to reduced code size for functions that
14728           perform several calls to functions that get their arguments on the
14729           stack like calls to printf-like functions.
14730
14731       -mbranch-cost=cost
14732           Set the branch costs for conditional branch instructions to cost.
14733           Reasonable values for cost are small, non-negative integers. The
14734           default branch cost is 0.
14735
14736       -mcall-prologues
14737           Functions prologues/epilogues are expanded as calls to appropriate
14738           subroutines.  Code size is smaller.
14739
14740       -mgas-isr-prologues
14741           Interrupt service routines (ISRs) may use the "__gcc_isr" pseudo
14742           instruction supported by GNU Binutils.  If this option is on, the
14743           feature can still be disabled for individual ISRs by means of the
14744           AVR Function Attributes,,"no_gccisr" function attribute.  This
14745           feature is activated per default if optimization is on (but not
14746           with -Og, @pxref{Optimize Options}), and if GNU Binutils support
14747           PR21683 ("https://sourceware.org/PR21683").
14748
14749       -mint8
14750           Assume "int" to be 8-bit integer.  This affects the sizes of all
14751           types: a "char" is 1 byte, an "int" is 1 byte, a "long" is 2 bytes,
14752           and "long long" is 4 bytes.  Please note that this option does not
14753           conform to the C standards, but it results in smaller code size.
14754
14755       -mmain-is-OS_task
14756           Do not save registers in "main".  The effect is the same like
14757           attaching attribute AVR Function Attributes,,"OS_task" to "main".
14758           It is activated per default if optimization is on.
14759
14760       -mn-flash=num
14761           Assume that the flash memory has a size of num times 64@tie{}KiB.
14762
14763       -mno-interrupts
14764           Generated code is not compatible with hardware interrupts.  Code
14765           size is smaller.
14766
14767       -mrelax
14768           Try to replace "CALL" resp. "JMP" instruction by the shorter
14769           "RCALL" resp. "RJMP" instruction if applicable.  Setting -mrelax
14770           just adds the --mlink-relax option to the assembler's command line
14771           and the --relax option to the linker's command line.
14772
14773           Jump relaxing is performed by the linker because jump offsets are
14774           not known before code is located. Therefore, the assembler code
14775           generated by the compiler is the same, but the instructions in the
14776           executable may differ from instructions in the assembler code.
14777
14778           Relaxing must be turned on if linker stubs are needed, see the
14779           section on "EIND" and linker stubs below.
14780
14781       -mrmw
14782           Assume that the device supports the Read-Modify-Write instructions
14783           "XCH", "LAC", "LAS" and "LAT".
14784
14785       -mshort-calls
14786           Assume that "RJMP" and "RCALL" can target the whole program memory.
14787
14788           This option is used internally for multilib selection.  It is not
14789           an optimization option, and you don't need to set it by hand.
14790
14791       -msp8
14792           Treat the stack pointer register as an 8-bit register, i.e. assume
14793           the high byte of the stack pointer is zero.  In general, you don't
14794           need to set this option by hand.
14795
14796           This option is used internally by the compiler to select and build
14797           multilibs for architectures "avr2" and "avr25".  These
14798           architectures mix devices with and without "SPH".  For any setting
14799           other than -mmcu=avr2 or -mmcu=avr25 the compiler driver adds or
14800           removes this option from the compiler proper's command line,
14801           because the compiler then knows if the device or architecture has
14802           an 8-bit stack pointer and thus no "SPH" register or not.
14803
14804       -mstrict-X
14805           Use address register "X" in a way proposed by the hardware.  This
14806           means that "X" is only used in indirect, post-increment or pre-
14807           decrement addressing.
14808
14809           Without this option, the "X" register may be used in the same way
14810           as "Y" or "Z" which then is emulated by additional instructions.
14811           For example, loading a value with "X+const" addressing with a small
14812           non-negative "const < 64" to a register Rn is performed as
14813
14814                   adiw r26, const   ; X += const
14815                   ld   <Rn>, X        ; <Rn> = *X
14816                   sbiw r26, const   ; X -= const
14817
14818       -mtiny-stack
14819           Only change the lower 8@tie{}bits of the stack pointer.
14820
14821       -mfract-convert-truncate
14822           Allow to use truncation instead of rounding towards zero for
14823           fractional fixed-point types.
14824
14825       -nodevicelib
14826           Don't link against AVR-LibC's device specific library "lib<mcu>.a".
14827
14828       -Waddr-space-convert
14829           Warn about conversions between address spaces in the case where the
14830           resulting address space is not contained in the incoming address
14831           space.
14832
14833       -Wmisspelled-isr
14834           Warn if the ISR is misspelled, i.e. without __vector prefix.
14835           Enabled by default.
14836
14837       "EIND" and Devices with More Than 128 Ki Bytes of Flash
14838
14839       Pointers in the implementation are 16@tie{}bits wide.  The address of a
14840       function or label is represented as word address so that indirect jumps
14841       and calls can target any code address in the range of 64@tie{}Ki words.
14842
14843       In order to facilitate indirect jump on devices with more than
14844       128@tie{}Ki bytes of program memory space, there is a special function
14845       register called "EIND" that serves as most significant part of the
14846       target address when "EICALL" or "EIJMP" instructions are used.
14847
14848       Indirect jumps and calls on these devices are handled as follows by the
14849       compiler and are subject to some limitations:
14850
14851       *   The compiler never sets "EIND".
14852
14853       *   The compiler uses "EIND" implicitly in "EICALL"/"EIJMP"
14854           instructions or might read "EIND" directly in order to emulate an
14855           indirect call/jump by means of a "RET" instruction.
14856
14857       *   The compiler assumes that "EIND" never changes during the startup
14858           code or during the application. In particular, "EIND" is not
14859           saved/restored in function or interrupt service routine
14860           prologue/epilogue.
14861
14862       *   For indirect calls to functions and computed goto, the linker
14863           generates stubs. Stubs are jump pads sometimes also called
14864           trampolines. Thus, the indirect call/jump jumps to such a stub.
14865           The stub contains a direct jump to the desired address.
14866
14867       *   Linker relaxation must be turned on so that the linker generates
14868           the stubs correctly in all situations. See the compiler option
14869           -mrelax and the linker option --relax.  There are corner cases
14870           where the linker is supposed to generate stubs but aborts without
14871           relaxation and without a helpful error message.
14872
14873       *   The default linker script is arranged for code with "EIND = 0".  If
14874           code is supposed to work for a setup with "EIND != 0", a custom
14875           linker script has to be used in order to place the sections whose
14876           name start with ".trampolines" into the segment where "EIND" points
14877           to.
14878
14879       *   The startup code from libgcc never sets "EIND".  Notice that
14880           startup code is a blend of code from libgcc and AVR-LibC.  For the
14881           impact of AVR-LibC on "EIND", see the AVR-LibC user manual
14882           ("http://nongnu.org/avr-libc/user-manual/").
14883
14884       *   It is legitimate for user-specific startup code to set up "EIND"
14885           early, for example by means of initialization code located in
14886           section ".init3". Such code runs prior to general startup code that
14887           initializes RAM and calls constructors, but after the bit of
14888           startup code from AVR-LibC that sets "EIND" to the segment where
14889           the vector table is located.
14890
14891                   #include <avr/io.h>
14892
14893                   static void
14894                   __attribute__((section(".init3"),naked,used,no_instrument_function))
14895                   init3_set_eind (void)
14896                   {
14897                     __asm volatile ("ldi r24,pm_hh8(__trampolines_start)\n\t"
14898                                     "out %i0,r24" :: "n" (&EIND) : "r24","memory");
14899                   }
14900
14901           The "__trampolines_start" symbol is defined in the linker script.
14902
14903       *   Stubs are generated automatically by the linker if the following
14904           two conditions are met:
14905
14906           -<The address of a label is taken by means of the "gs" modifier>
14907               (short for generate stubs) like so:
14908
14909                       LDI r24, lo8(gs(<func>))
14910                       LDI r25, hi8(gs(<func>))
14911
14912           -<The final location of that label is in a code segment>
14913               outside the segment where the stubs are located.
14914
14915       *   The compiler emits such "gs" modifiers for code labels in the
14916           following situations:
14917
14918           -<Taking address of a function or code label.>
14919           -<Computed goto.>
14920           -<If prologue-save function is used, see -mcall-prologues>
14921               command-line option.
14922
14923           -<Switch/case dispatch tables. If you do not want such dispatch>
14924               tables you can specify the -fno-jump-tables command-line
14925               option.
14926
14927           -<C and C++ constructors/destructors called during
14928           startup/shutdown.>
14929           -<If the tools hit a "gs()" modifier explained above.>
14930       *   Jumping to non-symbolic addresses like so is not supported:
14931
14932                   int main (void)
14933                   {
14934                       /* Call function at word address 0x2 */
14935                       return ((int(*)(void)) 0x2)();
14936                   }
14937
14938           Instead, a stub has to be set up, i.e. the function has to be
14939           called through a symbol ("func_4" in the example):
14940
14941                   int main (void)
14942                   {
14943                       extern int func_4 (void);
14944
14945                       /* Call function at byte address 0x4 */
14946                       return func_4();
14947                   }
14948
14949           and the application be linked with -Wl,--defsym,func_4=0x4.
14950           Alternatively, "func_4" can be defined in the linker script.
14951
14952       Handling of the "RAMPD", "RAMPX", "RAMPY" and "RAMPZ" Special Function
14953       Registers
14954
14955       Some AVR devices support memories larger than the 64@tie{}KiB range
14956       that can be accessed with 16-bit pointers.  To access memory locations
14957       outside this 64@tie{}KiB range, the content of a "RAMP" register is
14958       used as high part of the address: The "X", "Y", "Z" address register is
14959       concatenated with the "RAMPX", "RAMPY", "RAMPZ" special function
14960       register, respectively, to get a wide address. Similarly, "RAMPD" is
14961       used together with direct addressing.
14962
14963       *   The startup code initializes the "RAMP" special function registers
14964           with zero.
14965
14966       *   If a AVR Named Address Spaces,named address space other than
14967           generic or "__flash" is used, then "RAMPZ" is set as needed before
14968           the operation.
14969
14970       *   If the device supports RAM larger than 64@tie{}KiB and the compiler
14971           needs to change "RAMPZ" to accomplish an operation, "RAMPZ" is
14972           reset to zero after the operation.
14973
14974       *   If the device comes with a specific "RAMP" register, the ISR
14975           prologue/epilogue saves/restores that SFR and initializes it with
14976           zero in case the ISR code might (implicitly) use it.
14977
14978       *   RAM larger than 64@tie{}KiB is not supported by GCC for AVR
14979           targets.  If you use inline assembler to read from locations
14980           outside the 16-bit address range and change one of the "RAMP"
14981           registers, you must reset it to zero after the access.
14982
14983       AVR Built-in Macros
14984
14985       GCC defines several built-in macros so that the user code can test for
14986       the presence or absence of features.  Almost any of the following
14987       built-in macros are deduced from device capabilities and thus triggered
14988       by the -mmcu= command-line option.
14989
14990       For even more AVR-specific built-in macros see AVR Named Address Spaces
14991       and AVR Built-in Functions.
14992
14993       "__AVR_ARCH__"
14994           Build-in macro that resolves to a decimal number that identifies
14995           the architecture and depends on the -mmcu=mcu option.  Possible
14996           values are:
14997
14998           2, 25, 3, 31, 35, 4, 5, 51, 6
14999
15000           for mcu="avr2", "avr25", "avr3", "avr31", "avr35", "avr4", "avr5",
15001           "avr51", "avr6",
15002
15003           respectively and
15004
15005           100, 102, 103, 104, 105, 106, 107
15006
15007           for mcu="avrtiny", "avrxmega2", "avrxmega3", "avrxmega4",
15008           "avrxmega5", "avrxmega6", "avrxmega7", respectively.  If mcu
15009           specifies a device, this built-in macro is set accordingly. For
15010           example, with -mmcu=atmega8 the macro is defined to 4.
15011
15012       "__AVR_Device__"
15013           Setting -mmcu=device defines this built-in macro which reflects the
15014           device's name. For example, -mmcu=atmega8 defines the built-in
15015           macro "__AVR_ATmega8__", -mmcu=attiny261a defines
15016           "__AVR_ATtiny261A__", etc.
15017
15018           The built-in macros' names follow the scheme "__AVR_Device__" where
15019           Device is the device name as from the AVR user manual. The
15020           difference between Device in the built-in macro and device in
15021           -mmcu=device is that the latter is always lowercase.
15022
15023           If device is not a device but only a core architecture like avr51,
15024           this macro is not defined.
15025
15026       "__AVR_DEVICE_NAME__"
15027           Setting -mmcu=device defines this built-in macro to the device's
15028           name. For example, with -mmcu=atmega8 the macro is defined to
15029           "atmega8".
15030
15031           If device is not a device but only a core architecture like avr51,
15032           this macro is not defined.
15033
15034       "__AVR_XMEGA__"
15035           The device / architecture belongs to the XMEGA family of devices.
15036
15037       "__AVR_HAVE_ELPM__"
15038           The device has the "ELPM" instruction.
15039
15040       "__AVR_HAVE_ELPMX__"
15041           The device has the "ELPM Rn,Z" and "ELPM Rn,Z+" instructions.
15042
15043       "__AVR_HAVE_MOVW__"
15044           The device has the "MOVW" instruction to perform 16-bit register-
15045           register moves.
15046
15047       "__AVR_HAVE_LPMX__"
15048           The device has the "LPM Rn,Z" and "LPM Rn,Z+" instructions.
15049
15050       "__AVR_HAVE_MUL__"
15051           The device has a hardware multiplier.
15052
15053       "__AVR_HAVE_JMP_CALL__"
15054           The device has the "JMP" and "CALL" instructions.  This is the case
15055           for devices with more than 8@tie{}KiB of program memory.
15056
15057       "__AVR_HAVE_EIJMP_EICALL__"
15058       "__AVR_3_BYTE_PC__"
15059           The device has the "EIJMP" and "EICALL" instructions.  This is the
15060           case for devices with more than 128@tie{}KiB of program memory.
15061           This also means that the program counter (PC) is 3@tie{}bytes wide.
15062
15063       "__AVR_2_BYTE_PC__"
15064           The program counter (PC) is 2@tie{}bytes wide. This is the case for
15065           devices with up to 128@tie{}KiB of program memory.
15066
15067       "__AVR_HAVE_8BIT_SP__"
15068       "__AVR_HAVE_16BIT_SP__"
15069           The stack pointer (SP) register is treated as 8-bit respectively
15070           16-bit register by the compiler.  The definition of these macros is
15071           affected by -mtiny-stack.
15072
15073       "__AVR_HAVE_SPH__"
15074       "__AVR_SP8__"
15075           The device has the SPH (high part of stack pointer) special
15076           function register or has an 8-bit stack pointer, respectively.  The
15077           definition of these macros is affected by -mmcu= and in the cases
15078           of -mmcu=avr2 and -mmcu=avr25 also by -msp8.
15079
15080       "__AVR_HAVE_RAMPD__"
15081       "__AVR_HAVE_RAMPX__"
15082       "__AVR_HAVE_RAMPY__"
15083       "__AVR_HAVE_RAMPZ__"
15084           The device has the "RAMPD", "RAMPX", "RAMPY", "RAMPZ" special
15085           function register, respectively.
15086
15087       "__NO_INTERRUPTS__"
15088           This macro reflects the -mno-interrupts command-line option.
15089
15090       "__AVR_ERRATA_SKIP__"
15091       "__AVR_ERRATA_SKIP_JMP_CALL__"
15092           Some AVR devices (AT90S8515, ATmega103) must not skip 32-bit
15093           instructions because of a hardware erratum.  Skip instructions are
15094           "SBRS", "SBRC", "SBIS", "SBIC" and "CPSE".  The second macro is
15095           only defined if "__AVR_HAVE_JMP_CALL__" is also set.
15096
15097       "__AVR_ISA_RMW__"
15098           The device has Read-Modify-Write instructions (XCH, LAC, LAS and
15099           LAT).
15100
15101       "__AVR_SFR_OFFSET__=offset"
15102           Instructions that can address I/O special function registers
15103           directly like "IN", "OUT", "SBI", etc. may use a different address
15104           as if addressed by an instruction to access RAM like "LD" or "STS".
15105           This offset depends on the device architecture and has to be
15106           subtracted from the RAM address in order to get the respective
15107           I/O@tie{}address.
15108
15109       "__AVR_SHORT_CALLS__"
15110           The -mshort-calls command line option is set.
15111
15112       "__AVR_PM_BASE_ADDRESS__=addr"
15113           Some devices support reading from flash memory by means of "LD*"
15114           instructions.  The flash memory is seen in the data address space
15115           at an offset of "__AVR_PM_BASE_ADDRESS__".  If this macro is not
15116           defined, this feature is not available.  If defined, the address
15117           space is linear and there is no need to put ".rodata" into RAM.
15118           This is handled by the default linker description file, and is
15119           currently available for "avrtiny" and "avrxmega3".  Even more
15120           convenient, there is no need to use address spaces like "__flash"
15121           or features like attribute "progmem" and "pgm_read_*".
15122
15123       "__WITH_AVRLIBC__"
15124           The compiler is configured to be used together with AVR-Libc.  See
15125           the --with-avrlibc configure option.
15126
15127       Blackfin Options
15128
15129       -mcpu=cpu[-sirevision]
15130           Specifies the name of the target Blackfin processor.  Currently,
15131           cpu can be one of bf512, bf514, bf516, bf518, bf522, bf523, bf524,
15132           bf525, bf526, bf527, bf531, bf532, bf533, bf534, bf536, bf537,
15133           bf538, bf539, bf542, bf544, bf547, bf548, bf549, bf542m, bf544m,
15134           bf547m, bf548m, bf549m, bf561, bf592.
15135
15136           The optional sirevision specifies the silicon revision of the
15137           target Blackfin processor.  Any workarounds available for the
15138           targeted silicon revision are enabled.  If sirevision is none, no
15139           workarounds are enabled.  If sirevision is any, all workarounds for
15140           the targeted processor are enabled.  The "__SILICON_REVISION__"
15141           macro is defined to two hexadecimal digits representing the major
15142           and minor numbers in the silicon revision.  If sirevision is none,
15143           the "__SILICON_REVISION__" is not defined.  If sirevision is any,
15144           the "__SILICON_REVISION__" is defined to be 0xffff.  If this
15145           optional sirevision is not used, GCC assumes the latest known
15146           silicon revision of the targeted Blackfin processor.
15147
15148           GCC defines a preprocessor macro for the specified cpu.  For the
15149           bfin-elf toolchain, this option causes the hardware BSP provided by
15150           libgloss to be linked in if -msim is not given.
15151
15152           Without this option, bf532 is used as the processor by default.
15153
15154           Note that support for bf561 is incomplete.  For bf561, only the
15155           preprocessor macro is defined.
15156
15157       -msim
15158           Specifies that the program will be run on the simulator.  This
15159           causes the simulator BSP provided by libgloss to be linked in.
15160           This option has effect only for bfin-elf toolchain.  Certain other
15161           options, such as -mid-shared-library and -mfdpic, imply -msim.
15162
15163       -momit-leaf-frame-pointer
15164           Don't keep the frame pointer in a register for leaf functions.
15165           This avoids the instructions to save, set up and restore frame
15166           pointers and makes an extra register available in leaf functions.
15167
15168       -mspecld-anomaly
15169           When enabled, the compiler ensures that the generated code does not
15170           contain speculative loads after jump instructions. If this option
15171           is used, "__WORKAROUND_SPECULATIVE_LOADS" is defined.
15172
15173       -mno-specld-anomaly
15174           Don't generate extra code to prevent speculative loads from
15175           occurring.
15176
15177       -mcsync-anomaly
15178           When enabled, the compiler ensures that the generated code does not
15179           contain CSYNC or SSYNC instructions too soon after conditional
15180           branches.  If this option is used, "__WORKAROUND_SPECULATIVE_SYNCS"
15181           is defined.
15182
15183       -mno-csync-anomaly
15184           Don't generate extra code to prevent CSYNC or SSYNC instructions
15185           from occurring too soon after a conditional branch.
15186
15187       -mlow-64k
15188           When enabled, the compiler is free to take advantage of the
15189           knowledge that the entire program fits into the low 64k of memory.
15190
15191       -mno-low-64k
15192           Assume that the program is arbitrarily large.  This is the default.
15193
15194       -mstack-check-l1
15195           Do stack checking using information placed into L1 scratchpad
15196           memory by the uClinux kernel.
15197
15198       -mid-shared-library
15199           Generate code that supports shared libraries via the library ID
15200           method.  This allows for execute in place and shared libraries in
15201           an environment without virtual memory management.  This option
15202           implies -fPIC.  With a bfin-elf target, this option implies -msim.
15203
15204       -mno-id-shared-library
15205           Generate code that doesn't assume ID-based shared libraries are
15206           being used.  This is the default.
15207
15208       -mleaf-id-shared-library
15209           Generate code that supports shared libraries via the library ID
15210           method, but assumes that this library or executable won't link
15211           against any other ID shared libraries.  That allows the compiler to
15212           use faster code for jumps and calls.
15213
15214       -mno-leaf-id-shared-library
15215           Do not assume that the code being compiled won't link against any
15216           ID shared libraries.  Slower code is generated for jump and call
15217           insns.
15218
15219       -mshared-library-id=n
15220           Specifies the identification number of the ID-based shared library
15221           being compiled.  Specifying a value of 0 generates more compact
15222           code; specifying other values forces the allocation of that number
15223           to the current library but is no more space- or time-efficient than
15224           omitting this option.
15225
15226       -msep-data
15227           Generate code that allows the data segment to be located in a
15228           different area of memory from the text segment.  This allows for
15229           execute in place in an environment without virtual memory
15230           management by eliminating relocations against the text section.
15231
15232       -mno-sep-data
15233           Generate code that assumes that the data segment follows the text
15234           segment.  This is the default.
15235
15236       -mlong-calls
15237       -mno-long-calls
15238           Tells the compiler to perform function calls by first loading the
15239           address of the function into a register and then performing a
15240           subroutine call on this register.  This switch is needed if the
15241           target function lies outside of the 24-bit addressing range of the
15242           offset-based version of subroutine call instruction.
15243
15244           This feature is not enabled by default.  Specifying -mno-long-calls
15245           restores the default behavior.  Note these switches have no effect
15246           on how the compiler generates code to handle function calls via
15247           function pointers.
15248
15249       -mfast-fp
15250           Link with the fast floating-point library. This library relaxes
15251           some of the IEEE floating-point standard's rules for checking
15252           inputs against Not-a-Number (NAN), in the interest of performance.
15253
15254       -minline-plt
15255           Enable inlining of PLT entries in function calls to functions that
15256           are not known to bind locally.  It has no effect without -mfdpic.
15257
15258       -mmulticore
15259           Build a standalone application for multicore Blackfin processors.
15260           This option causes proper start files and link scripts supporting
15261           multicore to be used, and defines the macro "__BFIN_MULTICORE".  It
15262           can only be used with -mcpu=bf561[-sirevision].
15263
15264           This option can be used with -mcorea or -mcoreb, which selects the
15265           one-application-per-core programming model.  Without -mcorea or
15266           -mcoreb, the single-application/dual-core programming model is
15267           used. In this model, the main function of Core B should be named as
15268           "coreb_main".
15269
15270           If this option is not used, the single-core application programming
15271           model is used.
15272
15273       -mcorea
15274           Build a standalone application for Core A of BF561 when using the
15275           one-application-per-core programming model. Proper start files and
15276           link scripts are used to support Core A, and the macro
15277           "__BFIN_COREA" is defined.  This option can only be used in
15278           conjunction with -mmulticore.
15279
15280       -mcoreb
15281           Build a standalone application for Core B of BF561 when using the
15282           one-application-per-core programming model. Proper start files and
15283           link scripts are used to support Core B, and the macro
15284           "__BFIN_COREB" is defined. When this option is used, "coreb_main"
15285           should be used instead of "main".  This option can only be used in
15286           conjunction with -mmulticore.
15287
15288       -msdram
15289           Build a standalone application for SDRAM. Proper start files and
15290           link scripts are used to put the application into SDRAM, and the
15291           macro "__BFIN_SDRAM" is defined.  The loader should initialize
15292           SDRAM before loading the application.
15293
15294       -micplb
15295           Assume that ICPLBs are enabled at run time.  This has an effect on
15296           certain anomaly workarounds.  For Linux targets, the default is to
15297           assume ICPLBs are enabled; for standalone applications the default
15298           is off.
15299
15300       C6X Options
15301
15302       -march=name
15303           This specifies the name of the target architecture.  GCC uses this
15304           name to determine what kind of instructions it can emit when
15305           generating assembly code.  Permissible names are: c62x, c64x,
15306           c64x+, c67x, c67x+, c674x.
15307
15308       -mbig-endian
15309           Generate code for a big-endian target.
15310
15311       -mlittle-endian
15312           Generate code for a little-endian target.  This is the default.
15313
15314       -msim
15315           Choose startup files and linker script suitable for the simulator.
15316
15317       -msdata=default
15318           Put small global and static data in the ".neardata" section, which
15319           is pointed to by register "B14".  Put small uninitialized global
15320           and static data in the ".bss" section, which is adjacent to the
15321           ".neardata" section.  Put small read-only data into the ".rodata"
15322           section.  The corresponding sections used for large pieces of data
15323           are ".fardata", ".far" and ".const".
15324
15325       -msdata=all
15326           Put all data, not just small objects, into the sections reserved
15327           for small data, and use addressing relative to the "B14" register
15328           to access them.
15329
15330       -msdata=none
15331           Make no use of the sections reserved for small data, and use
15332           absolute addresses to access all data.  Put all initialized global
15333           and static data in the ".fardata" section, and all uninitialized
15334           data in the ".far" section.  Put all constant data into the
15335           ".const" section.
15336
15337       CRIS Options
15338
15339       These options are defined specifically for the CRIS ports.
15340
15341       -march=architecture-type
15342       -mcpu=architecture-type
15343           Generate code for the specified architecture.  The choices for
15344           architecture-type are v3, v8 and v10 for respectively ETRAX 4,
15345           ETRAX 100, and ETRAX 100 LX.  Default is v0 except for cris-axis-
15346           linux-gnu, where the default is v10.
15347
15348       -mtune=architecture-type
15349           Tune to architecture-type everything applicable about the generated
15350           code, except for the ABI and the set of available instructions.
15351           The choices for architecture-type are the same as for
15352           -march=architecture-type.
15353
15354       -mmax-stack-frame=n
15355           Warn when the stack frame of a function exceeds n bytes.
15356
15357       -metrax4
15358       -metrax100
15359           The options -metrax4 and -metrax100 are synonyms for -march=v3 and
15360           -march=v8 respectively.
15361
15362       -mmul-bug-workaround
15363       -mno-mul-bug-workaround
15364           Work around a bug in the "muls" and "mulu" instructions for CPU
15365           models where it applies.  This option is active by default.
15366
15367       -mpdebug
15368           Enable CRIS-specific verbose debug-related information in the
15369           assembly code.  This option also has the effect of turning off the
15370           #NO_APP formatted-code indicator to the assembler at the beginning
15371           of the assembly file.
15372
15373       -mcc-init
15374           Do not use condition-code results from previous instruction; always
15375           emit compare and test instructions before use of condition codes.
15376
15377       -mno-side-effects
15378           Do not emit instructions with side effects in addressing modes
15379           other than post-increment.
15380
15381       -mstack-align
15382       -mno-stack-align
15383       -mdata-align
15384       -mno-data-align
15385       -mconst-align
15386       -mno-const-align
15387           These options (no- options) arrange (eliminate arrangements) for
15388           the stack frame, individual data and constants to be aligned for
15389           the maximum single data access size for the chosen CPU model.  The
15390           default is to arrange for 32-bit alignment.  ABI details such as
15391           structure layout are not affected by these options.
15392
15393       -m32-bit
15394       -m16-bit
15395       -m8-bit
15396           Similar to the stack- data- and const-align options above, these
15397           options arrange for stack frame, writable data and constants to all
15398           be 32-bit, 16-bit or 8-bit aligned.  The default is 32-bit
15399           alignment.
15400
15401       -mno-prologue-epilogue
15402       -mprologue-epilogue
15403           With -mno-prologue-epilogue, the normal function prologue and
15404           epilogue which set up the stack frame are omitted and no return
15405           instructions or return sequences are generated in the code.  Use
15406           this option only together with visual inspection of the compiled
15407           code: no warnings or errors are generated when call-saved registers
15408           must be saved, or storage for local variables needs to be
15409           allocated.
15410
15411       -mno-gotplt
15412       -mgotplt
15413           With -fpic and -fPIC, don't generate (do generate) instruction
15414           sequences that load addresses for functions from the PLT part of
15415           the GOT rather than (traditional on other architectures) calls to
15416           the PLT.  The default is -mgotplt.
15417
15418       -melf
15419           Legacy no-op option only recognized with the cris-axis-elf and
15420           cris-axis-linux-gnu targets.
15421
15422       -mlinux
15423           Legacy no-op option only recognized with the cris-axis-linux-gnu
15424           target.
15425
15426       -sim
15427           This option, recognized for the cris-axis-elf, arranges to link
15428           with input-output functions from a simulator library.  Code,
15429           initialized data and zero-initialized data are allocated
15430           consecutively.
15431
15432       -sim2
15433           Like -sim, but pass linker options to locate initialized data at
15434           0x40000000 and zero-initialized data at 0x80000000.
15435
15436       CR16 Options
15437
15438       These options are defined specifically for the CR16 ports.
15439
15440       -mmac
15441           Enable the use of multiply-accumulate instructions. Disabled by
15442           default.
15443
15444       -mcr16cplus
15445       -mcr16c
15446           Generate code for CR16C or CR16C+ architecture. CR16C+ architecture
15447           is default.
15448
15449       -msim
15450           Links the library libsim.a which is in compatible with simulator.
15451           Applicable to ELF compiler only.
15452
15453       -mint32
15454           Choose integer type as 32-bit wide.
15455
15456       -mbit-ops
15457           Generates "sbit"/"cbit" instructions for bit manipulations.
15458
15459       -mdata-model=model
15460           Choose a data model. The choices for model are near, far or medium.
15461           medium is default.  However, far is not valid with -mcr16c, as the
15462           CR16C architecture does not support the far data model.
15463
15464       Darwin Options
15465
15466       These options are defined for all architectures running the Darwin
15467       operating system.
15468
15469       FSF GCC on Darwin does not create "fat" object files; it creates an
15470       object file for the single architecture that GCC was built to target.
15471       Apple's GCC on Darwin does create "fat" files if multiple -arch options
15472       are used; it does so by running the compiler or linker multiple times
15473       and joining the results together with lipo.
15474
15475       The subtype of the file created (like ppc7400 or ppc970 or i686) is
15476       determined by the flags that specify the ISA that GCC is targeting,
15477       like -mcpu or -march.  The -force_cpusubtype_ALL option can be used to
15478       override this.
15479
15480       The Darwin tools vary in their behavior when presented with an ISA
15481       mismatch.  The assembler, as, only permits instructions to be used that
15482       are valid for the subtype of the file it is generating, so you cannot
15483       put 64-bit instructions in a ppc750 object file.  The linker for shared
15484       libraries, /usr/bin/libtool, fails and prints an error if asked to
15485       create a shared library with a less restrictive subtype than its input
15486       files (for instance, trying to put a ppc970 object file in a ppc7400
15487       library).  The linker for executables, ld, quietly gives the executable
15488       the most restrictive subtype of any of its input files.
15489
15490       -Fdir
15491           Add the framework directory dir to the head of the list of
15492           directories to be searched for header files.  These directories are
15493           interleaved with those specified by -I options and are scanned in a
15494           left-to-right order.
15495
15496           A framework directory is a directory with frameworks in it.  A
15497           framework is a directory with a Headers and/or PrivateHeaders
15498           directory contained directly in it that ends in .framework.  The
15499           name of a framework is the name of this directory excluding the
15500           .framework.  Headers associated with the framework are found in one
15501           of those two directories, with Headers being searched first.  A
15502           subframework is a framework directory that is in a framework's
15503           Frameworks directory.  Includes of subframework headers can only
15504           appear in a header of a framework that contains the subframework,
15505           or in a sibling subframework header.  Two subframeworks are
15506           siblings if they occur in the same framework.  A subframework
15507           should not have the same name as a framework; a warning is issued
15508           if this is violated.  Currently a subframework cannot have
15509           subframeworks; in the future, the mechanism may be extended to
15510           support this.  The standard frameworks can be found in
15511           /System/Library/Frameworks and /Library/Frameworks.  An example
15512           include looks like "#include <Framework/header.h>", where Framework
15513           denotes the name of the framework and header.h is found in the
15514           PrivateHeaders or Headers directory.
15515
15516       -iframeworkdir
15517           Like -F except the directory is a treated as a system directory.
15518           The main difference between this -iframework and -F is that with
15519           -iframework the compiler does not warn about constructs contained
15520           within header files found via dir.  This option is valid only for
15521           the C family of languages.
15522
15523       -gused
15524           Emit debugging information for symbols that are used.  For stabs
15525           debugging format, this enables -feliminate-unused-debug-symbols.
15526           This is by default ON.
15527
15528       -gfull
15529           Emit debugging information for all symbols and types.
15530
15531       -mmacosx-version-min=version
15532           The earliest version of MacOS X that this executable will run on is
15533           version.  Typical values of version include 10.1, 10.2, and 10.3.9.
15534
15535           If the compiler was built to use the system's headers by default,
15536           then the default for this option is the system version on which the
15537           compiler is running, otherwise the default is to make choices that
15538           are compatible with as many systems and code bases as possible.
15539
15540       -mkernel
15541           Enable kernel development mode.  The -mkernel option sets -static,
15542           -fno-common, -fno-use-cxa-atexit, -fno-exceptions,
15543           -fno-non-call-exceptions, -fapple-kext, -fno-weak and -fno-rtti
15544           where applicable.  This mode also sets -mno-altivec, -msoft-float,
15545           -fno-builtin and -mlong-branch for PowerPC targets.
15546
15547       -mone-byte-bool
15548           Override the defaults for "bool" so that "sizeof(bool)==1".  By
15549           default "sizeof(bool)" is 4 when compiling for Darwin/PowerPC and 1
15550           when compiling for Darwin/x86, so this option has no effect on x86.
15551
15552           Warning: The -mone-byte-bool switch causes GCC to generate code
15553           that is not binary compatible with code generated without that
15554           switch.  Using this switch may require recompiling all other
15555           modules in a program, including system libraries.  Use this switch
15556           to conform to a non-default data model.
15557
15558       -mfix-and-continue
15559       -ffix-and-continue
15560       -findirect-data
15561           Generate code suitable for fast turnaround development, such as to
15562           allow GDB to dynamically load .o files into already-running
15563           programs.  -findirect-data and -ffix-and-continue are provided for
15564           backwards compatibility.
15565
15566       -all_load
15567           Loads all members of static archive libraries.  See man ld(1) for
15568           more information.
15569
15570       -arch_errors_fatal
15571           Cause the errors having to do with files that have the wrong
15572           architecture to be fatal.
15573
15574       -bind_at_load
15575           Causes the output file to be marked such that the dynamic linker
15576           will bind all undefined references when the file is loaded or
15577           launched.
15578
15579       -bundle
15580           Produce a Mach-o bundle format file.  See man ld(1) for more
15581           information.
15582
15583       -bundle_loader executable
15584           This option specifies the executable that will load the build
15585           output file being linked.  See man ld(1) for more information.
15586
15587       -dynamiclib
15588           When passed this option, GCC produces a dynamic library instead of
15589           an executable when linking, using the Darwin libtool command.
15590
15591       -force_cpusubtype_ALL
15592           This causes GCC's output file to have the ALL subtype, instead of
15593           one controlled by the -mcpu or -march option.
15594
15595       -allowable_client  client_name
15596       -client_name
15597       -compatibility_version
15598       -current_version
15599       -dead_strip
15600       -dependency-file
15601       -dylib_file
15602       -dylinker_install_name
15603       -dynamic
15604       -exported_symbols_list
15605       -filelist
15606       -flat_namespace
15607       -force_flat_namespace
15608       -headerpad_max_install_names
15609       -image_base
15610       -init
15611       -install_name
15612       -keep_private_externs
15613       -multi_module
15614       -multiply_defined
15615       -multiply_defined_unused
15616       -noall_load
15617       -no_dead_strip_inits_and_terms
15618       -nofixprebinding
15619       -nomultidefs
15620       -noprebind
15621       -noseglinkedit
15622       -pagezero_size
15623       -prebind
15624       -prebind_all_twolevel_modules
15625       -private_bundle
15626       -read_only_relocs
15627       -sectalign
15628       -sectobjectsymbols
15629       -whyload
15630       -seg1addr
15631       -sectcreate
15632       -sectobjectsymbols
15633       -sectorder
15634       -segaddr
15635       -segs_read_only_addr
15636       -segs_read_write_addr
15637       -seg_addr_table
15638       -seg_addr_table_filename
15639       -seglinkedit
15640       -segprot
15641       -segs_read_only_addr
15642       -segs_read_write_addr
15643       -single_module
15644       -static
15645       -sub_library
15646       -sub_umbrella
15647       -twolevel_namespace
15648       -umbrella
15649       -undefined
15650       -unexported_symbols_list
15651       -weak_reference_mismatches
15652       -whatsloaded
15653           These options are passed to the Darwin linker.  The Darwin linker
15654           man page describes them in detail.
15655
15656       DEC Alpha Options
15657
15658       These -m options are defined for the DEC Alpha implementations:
15659
15660       -mno-soft-float
15661       -msoft-float
15662           Use (do not use) the hardware floating-point instructions for
15663           floating-point operations.  When -msoft-float is specified,
15664           functions in libgcc.a are used to perform floating-point
15665           operations.  Unless they are replaced by routines that emulate the
15666           floating-point operations, or compiled in such a way as to call
15667           such emulations routines, these routines issue floating-point
15668           operations.   If you are compiling for an Alpha without floating-
15669           point operations, you must ensure that the library is built so as
15670           not to call them.
15671
15672           Note that Alpha implementations without floating-point operations
15673           are required to have floating-point registers.
15674
15675       -mfp-reg
15676       -mno-fp-regs
15677           Generate code that uses (does not use) the floating-point register
15678           set.  -mno-fp-regs implies -msoft-float.  If the floating-point
15679           register set is not used, floating-point operands are passed in
15680           integer registers as if they were integers and floating-point
15681           results are passed in $0 instead of $f0.  This is a non-standard
15682           calling sequence, so any function with a floating-point argument or
15683           return value called by code compiled with -mno-fp-regs must also be
15684           compiled with that option.
15685
15686           A typical use of this option is building a kernel that does not
15687           use, and hence need not save and restore, any floating-point
15688           registers.
15689
15690       -mieee
15691           The Alpha architecture implements floating-point hardware optimized
15692           for maximum performance.  It is mostly compliant with the IEEE
15693           floating-point standard.  However, for full compliance, software
15694           assistance is required.  This option generates code fully IEEE-
15695           compliant code except that the inexact-flag is not maintained (see
15696           below).  If this option is turned on, the preprocessor macro
15697           "_IEEE_FP" is defined during compilation.  The resulting code is
15698           less efficient but is able to correctly support denormalized
15699           numbers and exceptional IEEE values such as not-a-number and
15700           plus/minus infinity.  Other Alpha compilers call this option
15701           -ieee_with_no_inexact.
15702
15703       -mieee-with-inexact
15704           This is like -mieee except the generated code also maintains the
15705           IEEE inexact-flag.  Turning on this option causes the generated
15706           code to implement fully-compliant IEEE math.  In addition to
15707           "_IEEE_FP", "_IEEE_FP_EXACT" is defined as a preprocessor macro.
15708           On some Alpha implementations the resulting code may execute
15709           significantly slower than the code generated by default.  Since
15710           there is very little code that depends on the inexact-flag, you
15711           should normally not specify this option.  Other Alpha compilers
15712           call this option -ieee_with_inexact.
15713
15714       -mfp-trap-mode=trap-mode
15715           This option controls what floating-point related traps are enabled.
15716           Other Alpha compilers call this option -fptm trap-mode.  The trap
15717           mode can be set to one of four values:
15718
15719           n   This is the default (normal) setting.  The only traps that are
15720               enabled are the ones that cannot be disabled in software (e.g.,
15721               division by zero trap).
15722
15723           u   In addition to the traps enabled by n, underflow traps are
15724               enabled as well.
15725
15726           su  Like u, but the instructions are marked to be safe for software
15727               completion (see Alpha architecture manual for details).
15728
15729           sui Like su, but inexact traps are enabled as well.
15730
15731       -mfp-rounding-mode=rounding-mode
15732           Selects the IEEE rounding mode.  Other Alpha compilers call this
15733           option -fprm rounding-mode.  The rounding-mode can be one of:
15734
15735           n   Normal IEEE rounding mode.  Floating-point numbers are rounded
15736               towards the nearest machine number or towards the even machine
15737               number in case of a tie.
15738
15739           m   Round towards minus infinity.
15740
15741           c   Chopped rounding mode.  Floating-point numbers are rounded
15742               towards zero.
15743
15744           d   Dynamic rounding mode.  A field in the floating-point control
15745               register (fpcr, see Alpha architecture reference manual)
15746               controls the rounding mode in effect.  The C library
15747               initializes this register for rounding towards plus infinity.
15748               Thus, unless your program modifies the fpcr, d corresponds to
15749               round towards plus infinity.
15750
15751       -mtrap-precision=trap-precision
15752           In the Alpha architecture, floating-point traps are imprecise.
15753           This means without software assistance it is impossible to recover
15754           from a floating trap and program execution normally needs to be
15755           terminated.  GCC can generate code that can assist operating system
15756           trap handlers in determining the exact location that caused a
15757           floating-point trap.  Depending on the requirements of an
15758           application, different levels of precisions can be selected:
15759
15760           p   Program precision.  This option is the default and means a trap
15761               handler can only identify which program caused a floating-point
15762               exception.
15763
15764           f   Function precision.  The trap handler can determine the
15765               function that caused a floating-point exception.
15766
15767           i   Instruction precision.  The trap handler can determine the
15768               exact instruction that caused a floating-point exception.
15769
15770           Other Alpha compilers provide the equivalent options called
15771           -scope_safe and -resumption_safe.
15772
15773       -mieee-conformant
15774           This option marks the generated code as IEEE conformant.  You must
15775           not use this option unless you also specify -mtrap-precision=i and
15776           either -mfp-trap-mode=su or -mfp-trap-mode=sui.  Its only effect is
15777           to emit the line .eflag 48 in the function prologue of the
15778           generated assembly file.
15779
15780       -mbuild-constants
15781           Normally GCC examines a 32- or 64-bit integer constant to see if it
15782           can construct it from smaller constants in two or three
15783           instructions.  If it cannot, it outputs the constant as a literal
15784           and generates code to load it from the data segment at run time.
15785
15786           Use this option to require GCC to construct all integer constants
15787           using code, even if it takes more instructions (the maximum is
15788           six).
15789
15790           You typically use this option to build a shared library dynamic
15791           loader.  Itself a shared library, it must relocate itself in memory
15792           before it can find the variables and constants in its own data
15793           segment.
15794
15795       -mbwx
15796       -mno-bwx
15797       -mcix
15798       -mno-cix
15799       -mfix
15800       -mno-fix
15801       -mmax
15802       -mno-max
15803           Indicate whether GCC should generate code to use the optional BWX,
15804           CIX, FIX and MAX instruction sets.  The default is to use the
15805           instruction sets supported by the CPU type specified via -mcpu=
15806           option or that of the CPU on which GCC was built if none is
15807           specified.
15808
15809       -mfloat-vax
15810       -mfloat-ieee
15811           Generate code that uses (does not use) VAX F and G floating-point
15812           arithmetic instead of IEEE single and double precision.
15813
15814       -mexplicit-relocs
15815       -mno-explicit-relocs
15816           Older Alpha assemblers provided no way to generate symbol
15817           relocations except via assembler macros.  Use of these macros does
15818           not allow optimal instruction scheduling.  GNU binutils as of
15819           version 2.12 supports a new syntax that allows the compiler to
15820           explicitly mark which relocations should apply to which
15821           instructions.  This option is mostly useful for debugging, as GCC
15822           detects the capabilities of the assembler when it is built and sets
15823           the default accordingly.
15824
15825       -msmall-data
15826       -mlarge-data
15827           When -mexplicit-relocs is in effect, static data is accessed via
15828           gp-relative relocations.  When -msmall-data is used, objects 8
15829           bytes long or smaller are placed in a small data area (the ".sdata"
15830           and ".sbss" sections) and are accessed via 16-bit relocations off
15831           of the $gp register.  This limits the size of the small data area
15832           to 64KB, but allows the variables to be directly accessed via a
15833           single instruction.
15834
15835           The default is -mlarge-data.  With this option the data area is
15836           limited to just below 2GB.  Programs that require more than 2GB of
15837           data must use "malloc" or "mmap" to allocate the data in the heap
15838           instead of in the program's data segment.
15839
15840           When generating code for shared libraries, -fpic implies
15841           -msmall-data and -fPIC implies -mlarge-data.
15842
15843       -msmall-text
15844       -mlarge-text
15845           When -msmall-text is used, the compiler assumes that the code of
15846           the entire program (or shared library) fits in 4MB, and is thus
15847           reachable with a branch instruction.  When -msmall-data is used,
15848           the compiler can assume that all local symbols share the same $gp
15849           value, and thus reduce the number of instructions required for a
15850           function call from 4 to 1.
15851
15852           The default is -mlarge-text.
15853
15854       -mcpu=cpu_type
15855           Set the instruction set and instruction scheduling parameters for
15856           machine type cpu_type.  You can specify either the EV style name or
15857           the corresponding chip number.  GCC supports scheduling parameters
15858           for the EV4, EV5 and EV6 family of processors and chooses the
15859           default values for the instruction set from the processor you
15860           specify.  If you do not specify a processor type, GCC defaults to
15861           the processor on which the compiler was built.
15862
15863           Supported values for cpu_type are
15864
15865           ev4
15866           ev45
15867           21064
15868               Schedules as an EV4 and has no instruction set extensions.
15869
15870           ev5
15871           21164
15872               Schedules as an EV5 and has no instruction set extensions.
15873
15874           ev56
15875           21164a
15876               Schedules as an EV5 and supports the BWX extension.
15877
15878           pca56
15879           21164pc
15880           21164PC
15881               Schedules as an EV5 and supports the BWX and MAX extensions.
15882
15883           ev6
15884           21264
15885               Schedules as an EV6 and supports the BWX, FIX, and MAX
15886               extensions.
15887
15888           ev67
15889           21264a
15890               Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX
15891               extensions.
15892
15893           Native toolchains also support the value native, which selects the
15894           best architecture option for the host processor.  -mcpu=native has
15895           no effect if GCC does not recognize the processor.
15896
15897       -mtune=cpu_type
15898           Set only the instruction scheduling parameters for machine type
15899           cpu_type.  The instruction set is not changed.
15900
15901           Native toolchains also support the value native, which selects the
15902           best architecture option for the host processor.  -mtune=native has
15903           no effect if GCC does not recognize the processor.
15904
15905       -mmemory-latency=time
15906           Sets the latency the scheduler should assume for typical memory
15907           references as seen by the application.  This number is highly
15908           dependent on the memory access patterns used by the application and
15909           the size of the external cache on the machine.
15910
15911           Valid options for time are
15912
15913           number
15914               A decimal number representing clock cycles.
15915
15916           L1
15917           L2
15918           L3
15919           main
15920               The compiler contains estimates of the number of clock cycles
15921               for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches
15922               (also called Dcache, Scache, and Bcache), as well as to main
15923               memory.  Note that L3 is only valid for EV5.
15924
15925       FR30 Options
15926
15927       These options are defined specifically for the FR30 port.
15928
15929       -msmall-model
15930           Use the small address space model.  This can produce smaller code,
15931           but it does assume that all symbolic values and addresses fit into
15932           a 20-bit range.
15933
15934       -mno-lsim
15935           Assume that runtime support has been provided and so there is no
15936           need to include the simulator library (libsim.a) on the linker
15937           command line.
15938
15939       FT32 Options
15940
15941       These options are defined specifically for the FT32 port.
15942
15943       -msim
15944           Specifies that the program will be run on the simulator.  This
15945           causes an alternate runtime startup and library to be linked.  You
15946           must not use this option when generating programs that will run on
15947           real hardware; you must provide your own runtime library for
15948           whatever I/O functions are needed.
15949
15950       -mlra
15951           Enable Local Register Allocation.  This is still experimental for
15952           FT32, so by default the compiler uses standard reload.
15953
15954       -mnodiv
15955           Do not use div and mod instructions.
15956
15957       -mft32b
15958           Enable use of the extended instructions of the FT32B processor.
15959
15960       -mcompress
15961           Compress all code using the Ft32B code compression scheme.
15962
15963       -mnopm
15964           Do not generate code that reads program memory.
15965
15966       FRV Options
15967
15968       -mgpr-32
15969           Only use the first 32 general-purpose registers.
15970
15971       -mgpr-64
15972           Use all 64 general-purpose registers.
15973
15974       -mfpr-32
15975           Use only the first 32 floating-point registers.
15976
15977       -mfpr-64
15978           Use all 64 floating-point registers.
15979
15980       -mhard-float
15981           Use hardware instructions for floating-point operations.
15982
15983       -msoft-float
15984           Use library routines for floating-point operations.
15985
15986       -malloc-cc
15987           Dynamically allocate condition code registers.
15988
15989       -mfixed-cc
15990           Do not try to dynamically allocate condition code registers, only
15991           use "icc0" and "fcc0".
15992
15993       -mdword
15994           Change ABI to use double word insns.
15995
15996       -mno-dword
15997           Do not use double word instructions.
15998
15999       -mdouble
16000           Use floating-point double instructions.
16001
16002       -mno-double
16003           Do not use floating-point double instructions.
16004
16005       -mmedia
16006           Use media instructions.
16007
16008       -mno-media
16009           Do not use media instructions.
16010
16011       -mmuladd
16012           Use multiply and add/subtract instructions.
16013
16014       -mno-muladd
16015           Do not use multiply and add/subtract instructions.
16016
16017       -mfdpic
16018           Select the FDPIC ABI, which uses function descriptors to represent
16019           pointers to functions.  Without any PIC/PIE-related options, it
16020           implies -fPIE.  With -fpic or -fpie, it assumes GOT entries and
16021           small data are within a 12-bit range from the GOT base address;
16022           with -fPIC or -fPIE, GOT offsets are computed with 32 bits.  With a
16023           bfin-elf target, this option implies -msim.
16024
16025       -minline-plt
16026           Enable inlining of PLT entries in function calls to functions that
16027           are not known to bind locally.  It has no effect without -mfdpic.
16028           It's enabled by default if optimizing for speed and compiling for
16029           shared libraries (i.e., -fPIC or -fpic), or when an optimization
16030           option such as -O3 or above is present in the command line.
16031
16032       -mTLS
16033           Assume a large TLS segment when generating thread-local code.
16034
16035       -mtls
16036           Do not assume a large TLS segment when generating thread-local
16037           code.
16038
16039       -mgprel-ro
16040           Enable the use of "GPREL" relocations in the FDPIC ABI for data
16041           that is known to be in read-only sections.  It's enabled by
16042           default, except for -fpic or -fpie: even though it may help make
16043           the global offset table smaller, it trades 1 instruction for 4.
16044           With -fPIC or -fPIE, it trades 3 instructions for 4, one of which
16045           may be shared by multiple symbols, and it avoids the need for a GOT
16046           entry for the referenced symbol, so it's more likely to be a win.
16047           If it is not, -mno-gprel-ro can be used to disable it.
16048
16049       -multilib-library-pic
16050           Link with the (library, not FD) pic libraries.  It's implied by
16051           -mlibrary-pic, as well as by -fPIC and -fpic without -mfdpic.  You
16052           should never have to use it explicitly.
16053
16054       -mlinked-fp
16055           Follow the EABI requirement of always creating a frame pointer
16056           whenever a stack frame is allocated.  This option is enabled by
16057           default and can be disabled with -mno-linked-fp.
16058
16059       -mlong-calls
16060           Use indirect addressing to call functions outside the current
16061           compilation unit.  This allows the functions to be placed anywhere
16062           within the 32-bit address space.
16063
16064       -malign-labels
16065           Try to align labels to an 8-byte boundary by inserting NOPs into
16066           the previous packet.  This option only has an effect when VLIW
16067           packing is enabled.  It doesn't create new packets; it merely adds
16068           NOPs to existing ones.
16069
16070       -mlibrary-pic
16071           Generate position-independent EABI code.
16072
16073       -macc-4
16074           Use only the first four media accumulator registers.
16075
16076       -macc-8
16077           Use all eight media accumulator registers.
16078
16079       -mpack
16080           Pack VLIW instructions.
16081
16082       -mno-pack
16083           Do not pack VLIW instructions.
16084
16085       -mno-eflags
16086           Do not mark ABI switches in e_flags.
16087
16088       -mcond-move
16089           Enable the use of conditional-move instructions (default).
16090
16091           This switch is mainly for debugging the compiler and will likely be
16092           removed in a future version.
16093
16094       -mno-cond-move
16095           Disable the use of conditional-move instructions.
16096
16097           This switch is mainly for debugging the compiler and will likely be
16098           removed in a future version.
16099
16100       -mscc
16101           Enable the use of conditional set instructions (default).
16102
16103           This switch is mainly for debugging the compiler and will likely be
16104           removed in a future version.
16105
16106       -mno-scc
16107           Disable the use of conditional set instructions.
16108
16109           This switch is mainly for debugging the compiler and will likely be
16110           removed in a future version.
16111
16112       -mcond-exec
16113           Enable the use of conditional execution (default).
16114
16115           This switch is mainly for debugging the compiler and will likely be
16116           removed in a future version.
16117
16118       -mno-cond-exec
16119           Disable the use of conditional execution.
16120
16121           This switch is mainly for debugging the compiler and will likely be
16122           removed in a future version.
16123
16124       -mvliw-branch
16125           Run a pass to pack branches into VLIW instructions (default).
16126
16127           This switch is mainly for debugging the compiler and will likely be
16128           removed in a future version.
16129
16130       -mno-vliw-branch
16131           Do not run a pass to pack branches into VLIW instructions.
16132
16133           This switch is mainly for debugging the compiler and will likely be
16134           removed in a future version.
16135
16136       -mmulti-cond-exec
16137           Enable optimization of "&&" and "||" in conditional execution
16138           (default).
16139
16140           This switch is mainly for debugging the compiler and will likely be
16141           removed in a future version.
16142
16143       -mno-multi-cond-exec
16144           Disable optimization of "&&" and "||" in conditional execution.
16145
16146           This switch is mainly for debugging the compiler and will likely be
16147           removed in a future version.
16148
16149       -mnested-cond-exec
16150           Enable nested conditional execution optimizations (default).
16151
16152           This switch is mainly for debugging the compiler and will likely be
16153           removed in a future version.
16154
16155       -mno-nested-cond-exec
16156           Disable nested conditional execution optimizations.
16157
16158           This switch is mainly for debugging the compiler and will likely be
16159           removed in a future version.
16160
16161       -moptimize-membar
16162           This switch removes redundant "membar" instructions from the
16163           compiler-generated code.  It is enabled by default.
16164
16165       -mno-optimize-membar
16166           This switch disables the automatic removal of redundant "membar"
16167           instructions from the generated code.
16168
16169       -mtomcat-stats
16170           Cause gas to print out tomcat statistics.
16171
16172       -mcpu=cpu
16173           Select the processor type for which to generate code.  Possible
16174           values are frv, fr550, tomcat, fr500, fr450, fr405, fr400, fr300
16175           and simple.
16176
16177       GNU/Linux Options
16178
16179       These -m options are defined for GNU/Linux targets:
16180
16181       -mglibc
16182           Use the GNU C library.  This is the default except on
16183           *-*-linux-*uclibc*, *-*-linux-*musl* and *-*-linux-*android*
16184           targets.
16185
16186       -muclibc
16187           Use uClibc C library.  This is the default on *-*-linux-*uclibc*
16188           targets.
16189
16190       -mmusl
16191           Use the musl C library.  This is the default on *-*-linux-*musl*
16192           targets.
16193
16194       -mbionic
16195           Use Bionic C library.  This is the default on *-*-linux-*android*
16196           targets.
16197
16198       -mandroid
16199           Compile code compatible with Android platform.  This is the default
16200           on *-*-linux-*android* targets.
16201
16202           When compiling, this option enables -mbionic, -fPIC,
16203           -fno-exceptions and -fno-rtti by default.  When linking, this
16204           option makes the GCC driver pass Android-specific options to the
16205           linker.  Finally, this option causes the preprocessor macro
16206           "__ANDROID__" to be defined.
16207
16208       -tno-android-cc
16209           Disable compilation effects of -mandroid, i.e., do not enable
16210           -mbionic, -fPIC, -fno-exceptions and -fno-rtti by default.
16211
16212       -tno-android-ld
16213           Disable linking effects of -mandroid, i.e., pass standard Linux
16214           linking options to the linker.
16215
16216       H8/300 Options
16217
16218       These -m options are defined for the H8/300 implementations:
16219
16220       -mrelax
16221           Shorten some address references at link time, when possible; uses
16222           the linker option -relax.
16223
16224       -mh Generate code for the H8/300H.
16225
16226       -ms Generate code for the H8S.
16227
16228       -mn Generate code for the H8S and H8/300H in the normal mode.  This
16229           switch must be used either with -mh or -ms.
16230
16231       -ms2600
16232           Generate code for the H8S/2600.  This switch must be used with -ms.
16233
16234       -mexr
16235           Extended registers are stored on stack before execution of function
16236           with monitor attribute. Default option is -mexr.  This option is
16237           valid only for H8S targets.
16238
16239       -mno-exr
16240           Extended registers are not stored on stack before execution of
16241           function with monitor attribute. Default option is -mno-exr.  This
16242           option is valid only for H8S targets.
16243
16244       -mint32
16245           Make "int" data 32 bits by default.
16246
16247       -malign-300
16248           On the H8/300H and H8S, use the same alignment rules as for the
16249           H8/300.  The default for the H8/300H and H8S is to align longs and
16250           floats on 4-byte boundaries.  -malign-300 causes them to be aligned
16251           on 2-byte boundaries.  This option has no effect on the H8/300.
16252
16253       HPPA Options
16254
16255       These -m options are defined for the HPPA family of computers:
16256
16257       -march=architecture-type
16258           Generate code for the specified architecture.  The choices for
16259           architecture-type are 1.0 for PA 1.0, 1.1 for PA 1.1, and 2.0 for
16260           PA 2.0 processors.  Refer to /usr/lib/sched.models on an HP-UX
16261           system to determine the proper architecture option for your
16262           machine.  Code compiled for lower numbered architectures runs on
16263           higher numbered architectures, but not the other way around.
16264
16265       -mpa-risc-1-0
16266       -mpa-risc-1-1
16267       -mpa-risc-2-0
16268           Synonyms for -march=1.0, -march=1.1, and -march=2.0 respectively.
16269
16270       -mcaller-copies
16271           The caller copies function arguments passed by hidden reference.
16272           This option should be used with care as it is not compatible with
16273           the default 32-bit runtime.  However, only aggregates larger than
16274           eight bytes are passed by hidden reference and the option provides
16275           better compatibility with OpenMP.
16276
16277       -mjump-in-delay
16278           This option is ignored and provided for compatibility purposes
16279           only.
16280
16281       -mdisable-fpregs
16282           Prevent floating-point registers from being used in any manner.
16283           This is necessary for compiling kernels that perform lazy context
16284           switching of floating-point registers.  If you use this option and
16285           attempt to perform floating-point operations, the compiler aborts.
16286
16287       -mdisable-indexing
16288           Prevent the compiler from using indexing address modes.  This
16289           avoids some rather obscure problems when compiling MIG generated
16290           code under MACH.
16291
16292       -mno-space-regs
16293           Generate code that assumes the target has no space registers.  This
16294           allows GCC to generate faster indirect calls and use unscaled index
16295           address modes.
16296
16297           Such code is suitable for level 0 PA systems and kernels.
16298
16299       -mfast-indirect-calls
16300           Generate code that assumes calls never cross space boundaries.
16301           This allows GCC to emit code that performs faster indirect calls.
16302
16303           This option does not work in the presence of shared libraries or
16304           nested functions.
16305
16306       -mfixed-range=register-range
16307           Generate code treating the given register range as fixed registers.
16308           A fixed register is one that the register allocator cannot use.
16309           This is useful when compiling kernel code.  A register range is
16310           specified as two registers separated by a dash.  Multiple register
16311           ranges can be specified separated by a comma.
16312
16313       -mlong-load-store
16314           Generate 3-instruction load and store sequences as sometimes
16315           required by the HP-UX 10 linker.  This is equivalent to the +k
16316           option to the HP compilers.
16317
16318       -mportable-runtime
16319           Use the portable calling conventions proposed by HP for ELF
16320           systems.
16321
16322       -mgas
16323           Enable the use of assembler directives only GAS understands.
16324
16325       -mschedule=cpu-type
16326           Schedule code according to the constraints for the machine type
16327           cpu-type.  The choices for cpu-type are 700 7100, 7100LC, 7200,
16328           7300 and 8000.  Refer to /usr/lib/sched.models on an HP-UX system
16329           to determine the proper scheduling option for your machine.  The
16330           default scheduling is 8000.
16331
16332       -mlinker-opt
16333           Enable the optimization pass in the HP-UX linker.  Note this makes
16334           symbolic debugging impossible.  It also triggers a bug in the HP-UX
16335           8 and HP-UX 9 linkers in which they give bogus error messages when
16336           linking some programs.
16337
16338       -msoft-float
16339           Generate output containing library calls for floating point.
16340           Warning: the requisite libraries are not available for all HPPA
16341           targets.  Normally the facilities of the machine's usual C compiler
16342           are used, but this cannot be done directly in cross-compilation.
16343           You must make your own arrangements to provide suitable library
16344           functions for cross-compilation.
16345
16346           -msoft-float changes the calling convention in the output file;
16347           therefore, it is only useful if you compile all of a program with
16348           this option.  In particular, you need to compile libgcc.a, the
16349           library that comes with GCC, with -msoft-float in order for this to
16350           work.
16351
16352       -msio
16353           Generate the predefine, "_SIO", for server IO.  The default is
16354           -mwsio.  This generates the predefines, "__hp9000s700",
16355           "__hp9000s700__" and "_WSIO", for workstation IO.  These options
16356           are available under HP-UX and HI-UX.
16357
16358       -mgnu-ld
16359           Use options specific to GNU ld.  This passes -shared to ld when
16360           building a shared library.  It is the default when GCC is
16361           configured, explicitly or implicitly, with the GNU linker.  This
16362           option does not affect which ld is called; it only changes what
16363           parameters are passed to that ld.  The ld that is called is
16364           determined by the --with-ld configure option, GCC's program search
16365           path, and finally by the user's PATH.  The linker used by GCC can
16366           be printed using which `gcc -print-prog-name=ld`.  This option is
16367           only available on the 64-bit HP-UX GCC, i.e. configured with
16368           hppa*64*-*-hpux*.
16369
16370       -mhp-ld
16371           Use options specific to HP ld.  This passes -b to ld when building
16372           a shared library and passes +Accept TypeMismatch to ld on all
16373           links.  It is the default when GCC is configured, explicitly or
16374           implicitly, with the HP linker.  This option does not affect which
16375           ld is called; it only changes what parameters are passed to that
16376           ld.  The ld that is called is determined by the --with-ld configure
16377           option, GCC's program search path, and finally by the user's PATH.
16378           The linker used by GCC can be printed using which `gcc
16379           -print-prog-name=ld`.  This option is only available on the 64-bit
16380           HP-UX GCC, i.e. configured with hppa*64*-*-hpux*.
16381
16382       -mlong-calls
16383           Generate code that uses long call sequences.  This ensures that a
16384           call is always able to reach linker generated stubs.  The default
16385           is to generate long calls only when the distance from the call site
16386           to the beginning of the function or translation unit, as the case
16387           may be, exceeds a predefined limit set by the branch type being
16388           used.  The limits for normal calls are 7,600,000 and 240,000 bytes,
16389           respectively for the PA 2.0 and PA 1.X architectures.  Sibcalls are
16390           always limited at 240,000 bytes.
16391
16392           Distances are measured from the beginning of functions when using
16393           the -ffunction-sections option, or when using the -mgas and
16394           -mno-portable-runtime options together under HP-UX with the SOM
16395           linker.
16396
16397           It is normally not desirable to use this option as it degrades
16398           performance.  However, it may be useful in large applications,
16399           particularly when partial linking is used to build the application.
16400
16401           The types of long calls used depends on the capabilities of the
16402           assembler and linker, and the type of code being generated.  The
16403           impact on systems that support long absolute calls, and long pic
16404           symbol-difference or pc-relative calls should be relatively small.
16405           However, an indirect call is used on 32-bit ELF systems in pic code
16406           and it is quite long.
16407
16408       -munix=unix-std
16409           Generate compiler predefines and select a startfile for the
16410           specified UNIX standard.  The choices for unix-std are 93, 95 and
16411           98.  93 is supported on all HP-UX versions.  95 is available on HP-
16412           UX 10.10 and later.  98 is available on HP-UX 11.11 and later.  The
16413           default values are 93 for HP-UX 10.00, 95 for HP-UX 10.10 though to
16414           11.00, and 98 for HP-UX 11.11 and later.
16415
16416           -munix=93 provides the same predefines as GCC 3.3 and 3.4.
16417           -munix=95 provides additional predefines for "XOPEN_UNIX" and
16418           "_XOPEN_SOURCE_EXTENDED", and the startfile unix95.o.  -munix=98
16419           provides additional predefines for "_XOPEN_UNIX",
16420           "_XOPEN_SOURCE_EXTENDED", "_INCLUDE__STDC_A1_SOURCE" and
16421           "_INCLUDE_XOPEN_SOURCE_500", and the startfile unix98.o.
16422
16423           It is important to note that this option changes the interfaces for
16424           various library routines.  It also affects the operational behavior
16425           of the C library.  Thus, extreme care is needed in using this
16426           option.
16427
16428           Library code that is intended to operate with more than one UNIX
16429           standard must test, set and restore the variable
16430           "__xpg4_extended_mask" as appropriate.  Most GNU software doesn't
16431           provide this capability.
16432
16433       -nolibdld
16434           Suppress the generation of link options to search libdld.sl when
16435           the -static option is specified on HP-UX 10 and later.
16436
16437       -static
16438           The HP-UX implementation of setlocale in libc has a dependency on
16439           libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
16440           when the -static option is specified, special link options are
16441           needed to resolve this dependency.
16442
16443           On HP-UX 10 and later, the GCC driver adds the necessary options to
16444           link with libdld.sl when the -static option is specified.  This
16445           causes the resulting binary to be dynamic.  On the 64-bit port, the
16446           linkers generate dynamic binaries by default in any case.  The
16447           -nolibdld option can be used to prevent the GCC driver from adding
16448           these link options.
16449
16450       -threads
16451           Add support for multithreading with the dce thread library under
16452           HP-UX.  This option sets flags for both the preprocessor and
16453           linker.
16454
16455       IA-64 Options
16456
16457       These are the -m options defined for the Intel IA-64 architecture.
16458
16459       -mbig-endian
16460           Generate code for a big-endian target.  This is the default for HP-
16461           UX.
16462
16463       -mlittle-endian
16464           Generate code for a little-endian target.  This is the default for
16465           AIX5 and GNU/Linux.
16466
16467       -mgnu-as
16468       -mno-gnu-as
16469           Generate (or don't) code for the GNU assembler.  This is the
16470           default.
16471
16472       -mgnu-ld
16473       -mno-gnu-ld
16474           Generate (or don't) code for the GNU linker.  This is the default.
16475
16476       -mno-pic
16477           Generate code that does not use a global pointer register.  The
16478           result is not position independent code, and violates the IA-64
16479           ABI.
16480
16481       -mvolatile-asm-stop
16482       -mno-volatile-asm-stop
16483           Generate (or don't) a stop bit immediately before and after
16484           volatile asm statements.
16485
16486       -mregister-names
16487       -mno-register-names
16488           Generate (or don't) in, loc, and out register names for the stacked
16489           registers.  This may make assembler output more readable.
16490
16491       -mno-sdata
16492       -msdata
16493           Disable (or enable) optimizations that use the small data section.
16494           This may be useful for working around optimizer bugs.
16495
16496       -mconstant-gp
16497           Generate code that uses a single constant global pointer value.
16498           This is useful when compiling kernel code.
16499
16500       -mauto-pic
16501           Generate code that is self-relocatable.  This implies
16502           -mconstant-gp.  This is useful when compiling firmware code.
16503
16504       -minline-float-divide-min-latency
16505           Generate code for inline divides of floating-point values using the
16506           minimum latency algorithm.
16507
16508       -minline-float-divide-max-throughput
16509           Generate code for inline divides of floating-point values using the
16510           maximum throughput algorithm.
16511
16512       -mno-inline-float-divide
16513           Do not generate inline code for divides of floating-point values.
16514
16515       -minline-int-divide-min-latency
16516           Generate code for inline divides of integer values using the
16517           minimum latency algorithm.
16518
16519       -minline-int-divide-max-throughput
16520           Generate code for inline divides of integer values using the
16521           maximum throughput algorithm.
16522
16523       -mno-inline-int-divide
16524           Do not generate inline code for divides of integer values.
16525
16526       -minline-sqrt-min-latency
16527           Generate code for inline square roots using the minimum latency
16528           algorithm.
16529
16530       -minline-sqrt-max-throughput
16531           Generate code for inline square roots using the maximum throughput
16532           algorithm.
16533
16534       -mno-inline-sqrt
16535           Do not generate inline code for "sqrt".
16536
16537       -mfused-madd
16538       -mno-fused-madd
16539           Do (don't) generate code that uses the fused multiply/add or
16540           multiply/subtract instructions.  The default is to use these
16541           instructions.
16542
16543       -mno-dwarf2-asm
16544       -mdwarf2-asm
16545           Don't (or do) generate assembler code for the DWARF line number
16546           debugging info.  This may be useful when not using the GNU
16547           assembler.
16548
16549       -mearly-stop-bits
16550       -mno-early-stop-bits
16551           Allow stop bits to be placed earlier than immediately preceding the
16552           instruction that triggered the stop bit.  This can improve
16553           instruction scheduling, but does not always do so.
16554
16555       -mfixed-range=register-range
16556           Generate code treating the given register range as fixed registers.
16557           A fixed register is one that the register allocator cannot use.
16558           This is useful when compiling kernel code.  A register range is
16559           specified as two registers separated by a dash.  Multiple register
16560           ranges can be specified separated by a comma.
16561
16562       -mtls-size=tls-size
16563           Specify bit size of immediate TLS offsets.  Valid values are 14,
16564           22, and 64.
16565
16566       -mtune=cpu-type
16567           Tune the instruction scheduling for a particular CPU, Valid values
16568           are itanium, itanium1, merced, itanium2, and mckinley.
16569
16570       -milp32
16571       -mlp64
16572           Generate code for a 32-bit or 64-bit environment.  The 32-bit
16573           environment sets int, long and pointer to 32 bits.  The 64-bit
16574           environment sets int to 32 bits and long and pointer to 64 bits.
16575           These are HP-UX specific flags.
16576
16577       -mno-sched-br-data-spec
16578       -msched-br-data-spec
16579           (Dis/En)able data speculative scheduling before reload.  This
16580           results in generation of "ld.a" instructions and the corresponding
16581           check instructions ("ld.c" / "chk.a").  The default setting is
16582           disabled.
16583
16584       -msched-ar-data-spec
16585       -mno-sched-ar-data-spec
16586           (En/Dis)able data speculative scheduling after reload.  This
16587           results in generation of "ld.a" instructions and the corresponding
16588           check instructions ("ld.c" / "chk.a").  The default setting is
16589           enabled.
16590
16591       -mno-sched-control-spec
16592       -msched-control-spec
16593           (Dis/En)able control speculative scheduling.  This feature is
16594           available only during region scheduling (i.e. before reload).  This
16595           results in generation of the "ld.s" instructions and the
16596           corresponding check instructions "chk.s".  The default setting is
16597           disabled.
16598
16599       -msched-br-in-data-spec
16600       -mno-sched-br-in-data-spec
16601           (En/Dis)able speculative scheduling of the instructions that are
16602           dependent on the data speculative loads before reload.  This is
16603           effective only with -msched-br-data-spec enabled.  The default
16604           setting is enabled.
16605
16606       -msched-ar-in-data-spec
16607       -mno-sched-ar-in-data-spec
16608           (En/Dis)able speculative scheduling of the instructions that are
16609           dependent on the data speculative loads after reload.  This is
16610           effective only with -msched-ar-data-spec enabled.  The default
16611           setting is enabled.
16612
16613       -msched-in-control-spec
16614       -mno-sched-in-control-spec
16615           (En/Dis)able speculative scheduling of the instructions that are
16616           dependent on the control speculative loads.  This is effective only
16617           with -msched-control-spec enabled.  The default setting is enabled.
16618
16619       -mno-sched-prefer-non-data-spec-insns
16620       -msched-prefer-non-data-spec-insns
16621           If enabled, data-speculative instructions are chosen for schedule
16622           only if there are no other choices at the moment.  This makes the
16623           use of the data speculation much more conservative.  The default
16624           setting is disabled.
16625
16626       -mno-sched-prefer-non-control-spec-insns
16627       -msched-prefer-non-control-spec-insns
16628           If enabled, control-speculative instructions are chosen for
16629           schedule only if there are no other choices at the moment.  This
16630           makes the use of the control speculation much more conservative.
16631           The default setting is disabled.
16632
16633       -mno-sched-count-spec-in-critical-path
16634       -msched-count-spec-in-critical-path
16635           If enabled, speculative dependencies are considered during
16636           computation of the instructions priorities.  This makes the use of
16637           the speculation a bit more conservative.  The default setting is
16638           disabled.
16639
16640       -msched-spec-ldc
16641           Use a simple data speculation check.  This option is on by default.
16642
16643       -msched-control-spec-ldc
16644           Use a simple check for control speculation.  This option is on by
16645           default.
16646
16647       -msched-stop-bits-after-every-cycle
16648           Place a stop bit after every cycle when scheduling.  This option is
16649           on by default.
16650
16651       -msched-fp-mem-deps-zero-cost
16652           Assume that floating-point stores and loads are not likely to cause
16653           a conflict when placed into the same instruction group.  This
16654           option is disabled by default.
16655
16656       -msel-sched-dont-check-control-spec
16657           Generate checks for control speculation in selective scheduling.
16658           This flag is disabled by default.
16659
16660       -msched-max-memory-insns=max-insns
16661           Limit on the number of memory insns per instruction group, giving
16662           lower priority to subsequent memory insns attempting to schedule in
16663           the same instruction group. Frequently useful to prevent cache bank
16664           conflicts.  The default value is 1.
16665
16666       -msched-max-memory-insns-hard-limit
16667           Makes the limit specified by msched-max-memory-insns a hard limit,
16668           disallowing more than that number in an instruction group.
16669           Otherwise, the limit is "soft", meaning that non-memory operations
16670           are preferred when the limit is reached, but memory operations may
16671           still be scheduled.
16672
16673       LM32 Options
16674
16675       These -m options are defined for the LatticeMico32 architecture:
16676
16677       -mbarrel-shift-enabled
16678           Enable barrel-shift instructions.
16679
16680       -mdivide-enabled
16681           Enable divide and modulus instructions.
16682
16683       -mmultiply-enabled
16684           Enable multiply instructions.
16685
16686       -msign-extend-enabled
16687           Enable sign extend instructions.
16688
16689       -muser-enabled
16690           Enable user-defined instructions.
16691
16692       M32C Options
16693
16694       -mcpu=name
16695           Select the CPU for which code is generated.  name may be one of r8c
16696           for the R8C/Tiny series, m16c for the M16C (up to /60) series,
16697           m32cm for the M16C/80 series, or m32c for the M32C/80 series.
16698
16699       -msim
16700           Specifies that the program will be run on the simulator.  This
16701           causes an alternate runtime library to be linked in which supports,
16702           for example, file I/O.  You must not use this option when
16703           generating programs that will run on real hardware; you must
16704           provide your own runtime library for whatever I/O functions are
16705           needed.
16706
16707       -memregs=number
16708           Specifies the number of memory-based pseudo-registers GCC uses
16709           during code generation.  These pseudo-registers are used like real
16710           registers, so there is a tradeoff between GCC's ability to fit the
16711           code into available registers, and the performance penalty of using
16712           memory instead of registers.  Note that all modules in a program
16713           must be compiled with the same value for this option.  Because of
16714           that, you must not use this option with GCC's default runtime
16715           libraries.
16716
16717       M32R/D Options
16718
16719       These -m options are defined for Renesas M32R/D architectures:
16720
16721       -m32r2
16722           Generate code for the M32R/2.
16723
16724       -m32rx
16725           Generate code for the M32R/X.
16726
16727       -m32r
16728           Generate code for the M32R.  This is the default.
16729
16730       -mmodel=small
16731           Assume all objects live in the lower 16MB of memory (so that their
16732           addresses can be loaded with the "ld24" instruction), and assume
16733           all subroutines are reachable with the "bl" instruction.  This is
16734           the default.
16735
16736           The addressability of a particular object can be set with the
16737           "model" attribute.
16738
16739       -mmodel=medium
16740           Assume objects may be anywhere in the 32-bit address space (the
16741           compiler generates "seth/add3" instructions to load their
16742           addresses), and assume all subroutines are reachable with the "bl"
16743           instruction.
16744
16745       -mmodel=large
16746           Assume objects may be anywhere in the 32-bit address space (the
16747           compiler generates "seth/add3" instructions to load their
16748           addresses), and assume subroutines may not be reachable with the
16749           "bl" instruction (the compiler generates the much slower
16750           "seth/add3/jl" instruction sequence).
16751
16752       -msdata=none
16753           Disable use of the small data area.  Variables are put into one of
16754           ".data", ".bss", or ".rodata" (unless the "section" attribute has
16755           been specified).  This is the default.
16756
16757           The small data area consists of sections ".sdata" and ".sbss".
16758           Objects may be explicitly put in the small data area with the
16759           "section" attribute using one of these sections.
16760
16761       -msdata=sdata
16762           Put small global and static data in the small data area, but do not
16763           generate special code to reference them.
16764
16765       -msdata=use
16766           Put small global and static data in the small data area, and
16767           generate special instructions to reference them.
16768
16769       -G num
16770           Put global and static objects less than or equal to num bytes into
16771           the small data or BSS sections instead of the normal data or BSS
16772           sections.  The default value of num is 8.  The -msdata option must
16773           be set to one of sdata or use for this option to have any effect.
16774
16775           All modules should be compiled with the same -G num value.
16776           Compiling with different values of num may or may not work; if it
16777           doesn't the linker gives an error message---incorrect code is not
16778           generated.
16779
16780       -mdebug
16781           Makes the M32R-specific code in the compiler display some
16782           statistics that might help in debugging programs.
16783
16784       -malign-loops
16785           Align all loops to a 32-byte boundary.
16786
16787       -mno-align-loops
16788           Do not enforce a 32-byte alignment for loops.  This is the default.
16789
16790       -missue-rate=number
16791           Issue number instructions per cycle.  number can only be 1 or 2.
16792
16793       -mbranch-cost=number
16794           number can only be 1 or 2.  If it is 1 then branches are preferred
16795           over conditional code, if it is 2, then the opposite applies.
16796
16797       -mflush-trap=number
16798           Specifies the trap number to use to flush the cache.  The default
16799           is 12.  Valid numbers are between 0 and 15 inclusive.
16800
16801       -mno-flush-trap
16802           Specifies that the cache cannot be flushed by using a trap.
16803
16804       -mflush-func=name
16805           Specifies the name of the operating system function to call to
16806           flush the cache.  The default is _flush_cache, but a function call
16807           is only used if a trap is not available.
16808
16809       -mno-flush-func
16810           Indicates that there is no OS function for flushing the cache.
16811
16812       M680x0 Options
16813
16814       These are the -m options defined for M680x0 and ColdFire processors.
16815       The default settings depend on which architecture was selected when the
16816       compiler was configured; the defaults for the most common choices are
16817       given below.
16818
16819       -march=arch
16820           Generate code for a specific M680x0 or ColdFire instruction set
16821           architecture.  Permissible values of arch for M680x0 architectures
16822           are: 68000, 68010, 68020, 68030, 68040, 68060 and cpu32.  ColdFire
16823           architectures are selected according to Freescale's ISA
16824           classification and the permissible values are: isaa, isaaplus, isab
16825           and isac.
16826
16827           GCC defines a macro "__mcfarch__" whenever it is generating code
16828           for a ColdFire target.  The arch in this macro is one of the -march
16829           arguments given above.
16830
16831           When used together, -march and -mtune select code that runs on a
16832           family of similar processors but that is optimized for a particular
16833           microarchitecture.
16834
16835       -mcpu=cpu
16836           Generate code for a specific M680x0 or ColdFire processor.  The
16837           M680x0 cpus are: 68000, 68010, 68020, 68030, 68040, 68060, 68302,
16838           68332 and cpu32.  The ColdFire cpus are given by the table below,
16839           which also classifies the CPUs into families:
16840
16841           Family : -mcpu arguments
16842           51 : 51 51ac 51ag 51cn 51em 51je 51jf 51jg 51jm 51mm 51qe 51qm
16843           5206 : 5202 5204 5206
16844           5206e : 5206e
16845           5208 : 5207 5208
16846           5211a : 5210a 5211a
16847           5213 : 5211 5212 5213
16848           5216 : 5214 5216
16849           52235 : 52230 52231 52232 52233 52234 52235
16850           5225 : 5224 5225
16851           52259 : 52252 52254 52255 52256 52258 52259
16852           5235 : 5232 5233 5234 5235 523x
16853           5249 : 5249
16854           5250 : 5250
16855           5271 : 5270 5271
16856           5272 : 5272
16857           5275 : 5274 5275
16858           5282 : 5280 5281 5282 528x
16859           53017 : 53011 53012 53013 53014 53015 53016 53017
16860           5307 : 5307
16861           5329 : 5327 5328 5329 532x
16862           5373 : 5372 5373 537x
16863           5407 : 5407
16864           5475 : 5470 5471 5472 5473 5474 5475 547x 5480 5481 5482 5483 5484
16865           5485
16866
16867           -mcpu=cpu overrides -march=arch if arch is compatible with cpu.
16868           Other combinations of -mcpu and -march are rejected.
16869
16870           GCC defines the macro "__mcf_cpu_cpu" when ColdFire target cpu is
16871           selected.  It also defines "__mcf_family_family", where the value
16872           of family is given by the table above.
16873
16874       -mtune=tune
16875           Tune the code for a particular microarchitecture within the
16876           constraints set by -march and -mcpu.  The M680x0 microarchitectures
16877           are: 68000, 68010, 68020, 68030, 68040, 68060 and cpu32.  The
16878           ColdFire microarchitectures are: cfv1, cfv2, cfv3, cfv4 and cfv4e.
16879
16880           You can also use -mtune=68020-40 for code that needs to run
16881           relatively well on 68020, 68030 and 68040 targets.  -mtune=68020-60
16882           is similar but includes 68060 targets as well.  These two options
16883           select the same tuning decisions as -m68020-40 and -m68020-60
16884           respectively.
16885
16886           GCC defines the macros "__mcarch" and "__mcarch__" when tuning for
16887           680x0 architecture arch.  It also defines "mcarch" unless either
16888           -ansi or a non-GNU -std option is used.  If GCC is tuning for a
16889           range of architectures, as selected by -mtune=68020-40 or
16890           -mtune=68020-60, it defines the macros for every architecture in
16891           the range.
16892
16893           GCC also defines the macro "__muarch__" when tuning for ColdFire
16894           microarchitecture uarch, where uarch is one of the arguments given
16895           above.
16896
16897       -m68000
16898       -mc68000
16899           Generate output for a 68000.  This is the default when the compiler
16900           is configured for 68000-based systems.  It is equivalent to
16901           -march=68000.
16902
16903           Use this option for microcontrollers with a 68000 or EC000 core,
16904           including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
16905
16906       -m68010
16907           Generate output for a 68010.  This is the default when the compiler
16908           is configured for 68010-based systems.  It is equivalent to
16909           -march=68010.
16910
16911       -m68020
16912       -mc68020
16913           Generate output for a 68020.  This is the default when the compiler
16914           is configured for 68020-based systems.  It is equivalent to
16915           -march=68020.
16916
16917       -m68030
16918           Generate output for a 68030.  This is the default when the compiler
16919           is configured for 68030-based systems.  It is equivalent to
16920           -march=68030.
16921
16922       -m68040
16923           Generate output for a 68040.  This is the default when the compiler
16924           is configured for 68040-based systems.  It is equivalent to
16925           -march=68040.
16926
16927           This option inhibits the use of 68881/68882 instructions that have
16928           to be emulated by software on the 68040.  Use this option if your
16929           68040 does not have code to emulate those instructions.
16930
16931       -m68060
16932           Generate output for a 68060.  This is the default when the compiler
16933           is configured for 68060-based systems.  It is equivalent to
16934           -march=68060.
16935
16936           This option inhibits the use of 68020 and 68881/68882 instructions
16937           that have to be emulated by software on the 68060.  Use this option
16938           if your 68060 does not have code to emulate those instructions.
16939
16940       -mcpu32
16941           Generate output for a CPU32.  This is the default when the compiler
16942           is configured for CPU32-based systems.  It is equivalent to
16943           -march=cpu32.
16944
16945           Use this option for microcontrollers with a CPU32 or CPU32+ core,
16946           including the 68330, 68331, 68332, 68333, 68334, 68336, 68340,
16947           68341, 68349 and 68360.
16948
16949       -m5200
16950           Generate output for a 520X ColdFire CPU.  This is the default when
16951           the compiler is configured for 520X-based systems.  It is
16952           equivalent to -mcpu=5206, and is now deprecated in favor of that
16953           option.
16954
16955           Use this option for microcontroller with a 5200 core, including the
16956           MCF5202, MCF5203, MCF5204 and MCF5206.
16957
16958       -m5206e
16959           Generate output for a 5206e ColdFire CPU.  The option is now
16960           deprecated in favor of the equivalent -mcpu=5206e.
16961
16962       -m528x
16963           Generate output for a member of the ColdFire 528X family.  The
16964           option is now deprecated in favor of the equivalent -mcpu=528x.
16965
16966       -m5307
16967           Generate output for a ColdFire 5307 CPU.  The option is now
16968           deprecated in favor of the equivalent -mcpu=5307.
16969
16970       -m5407
16971           Generate output for a ColdFire 5407 CPU.  The option is now
16972           deprecated in favor of the equivalent -mcpu=5407.
16973
16974       -mcfv4e
16975           Generate output for a ColdFire V4e family CPU (e.g. 547x/548x).
16976           This includes use of hardware floating-point instructions.  The
16977           option is equivalent to -mcpu=547x, and is now deprecated in favor
16978           of that option.
16979
16980       -m68020-40
16981           Generate output for a 68040, without using any of the new
16982           instructions.  This results in code that can run relatively
16983           efficiently on either a 68020/68881 or a 68030 or a 68040.  The
16984           generated code does use the 68881 instructions that are emulated on
16985           the 68040.
16986
16987           The option is equivalent to -march=68020 -mtune=68020-40.
16988
16989       -m68020-60
16990           Generate output for a 68060, without using any of the new
16991           instructions.  This results in code that can run relatively
16992           efficiently on either a 68020/68881 or a 68030 or a 68040.  The
16993           generated code does use the 68881 instructions that are emulated on
16994           the 68060.
16995
16996           The option is equivalent to -march=68020 -mtune=68020-60.
16997
16998       -mhard-float
16999       -m68881
17000           Generate floating-point instructions.  This is the default for
17001           68020 and above, and for ColdFire devices that have an FPU.  It
17002           defines the macro "__HAVE_68881__" on M680x0 targets and
17003           "__mcffpu__" on ColdFire targets.
17004
17005       -msoft-float
17006           Do not generate floating-point instructions; use library calls
17007           instead.  This is the default for 68000, 68010, and 68832 targets.
17008           It is also the default for ColdFire devices that have no FPU.
17009
17010       -mdiv
17011       -mno-div
17012           Generate (do not generate) ColdFire hardware divide and remainder
17013           instructions.  If -march is used without -mcpu, the default is "on"
17014           for ColdFire architectures and "off" for M680x0 architectures.
17015           Otherwise, the default is taken from the target CPU (either the
17016           default CPU, or the one specified by -mcpu).  For example, the
17017           default is "off" for -mcpu=5206 and "on" for -mcpu=5206e.
17018
17019           GCC defines the macro "__mcfhwdiv__" when this option is enabled.
17020
17021       -mshort
17022           Consider type "int" to be 16 bits wide, like "short int".
17023           Additionally, parameters passed on the stack are also aligned to a
17024           16-bit boundary even on targets whose API mandates promotion to
17025           32-bit.
17026
17027       -mno-short
17028           Do not consider type "int" to be 16 bits wide.  This is the
17029           default.
17030
17031       -mnobitfield
17032       -mno-bitfield
17033           Do not use the bit-field instructions.  The -m68000, -mcpu32 and
17034           -m5200 options imply -mnobitfield.
17035
17036       -mbitfield
17037           Do use the bit-field instructions.  The -m68020 option implies
17038           -mbitfield.  This is the default if you use a configuration
17039           designed for a 68020.
17040
17041       -mrtd
17042           Use a different function-calling convention, in which functions
17043           that take a fixed number of arguments return with the "rtd"
17044           instruction, which pops their arguments while returning.  This
17045           saves one instruction in the caller since there is no need to pop
17046           the arguments there.
17047
17048           This calling convention is incompatible with the one normally used
17049           on Unix, so you cannot use it if you need to call libraries
17050           compiled with the Unix compiler.
17051
17052           Also, you must provide function prototypes for all functions that
17053           take variable numbers of arguments (including "printf"); otherwise
17054           incorrect code is generated for calls to those functions.
17055
17056           In addition, seriously incorrect code results if you call a
17057           function with too many arguments.  (Normally, extra arguments are
17058           harmlessly ignored.)
17059
17060           The "rtd" instruction is supported by the 68010, 68020, 68030,
17061           68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
17062
17063       -mno-rtd
17064           Do not use the calling conventions selected by -mrtd.  This is the
17065           default.
17066
17067       -malign-int
17068       -mno-align-int
17069           Control whether GCC aligns "int", "long", "long long", "float",
17070           "double", and "long double" variables on a 32-bit boundary
17071           (-malign-int) or a 16-bit boundary (-mno-align-int).  Aligning
17072           variables on 32-bit boundaries produces code that runs somewhat
17073           faster on processors with 32-bit busses at the expense of more
17074           memory.
17075
17076           Warning: if you use the -malign-int switch, GCC aligns structures
17077           containing the above types differently than most published
17078           application binary interface specifications for the m68k.
17079
17080       -mpcrel
17081           Use the pc-relative addressing mode of the 68000 directly, instead
17082           of using a global offset table.  At present, this option implies
17083           -fpic, allowing at most a 16-bit offset for pc-relative addressing.
17084           -fPIC is not presently supported with -mpcrel, though this could be
17085           supported for 68020 and higher processors.
17086
17087       -mno-strict-align
17088       -mstrict-align
17089           Do not (do) assume that unaligned memory references are handled by
17090           the system.
17091
17092       -msep-data
17093           Generate code that allows the data segment to be located in a
17094           different area of memory from the text segment.  This allows for
17095           execute-in-place in an environment without virtual memory
17096           management.  This option implies -fPIC.
17097
17098       -mno-sep-data
17099           Generate code that assumes that the data segment follows the text
17100           segment.  This is the default.
17101
17102       -mid-shared-library
17103           Generate code that supports shared libraries via the library ID
17104           method.  This allows for execute-in-place and shared libraries in
17105           an environment without virtual memory management.  This option
17106           implies -fPIC.
17107
17108       -mno-id-shared-library
17109           Generate code that doesn't assume ID-based shared libraries are
17110           being used.  This is the default.
17111
17112       -mshared-library-id=n
17113           Specifies the identification number of the ID-based shared library
17114           being compiled.  Specifying a value of 0 generates more compact
17115           code; specifying other values forces the allocation of that number
17116           to the current library, but is no more space- or time-efficient
17117           than omitting this option.
17118
17119       -mxgot
17120       -mno-xgot
17121           When generating position-independent code for ColdFire, generate
17122           code that works if the GOT has more than 8192 entries.  This code
17123           is larger and slower than code generated without this option.  On
17124           M680x0 processors, this option is not needed; -fPIC suffices.
17125
17126           GCC normally uses a single instruction to load values from the GOT.
17127           While this is relatively efficient, it only works if the GOT is
17128           smaller than about 64k.  Anything larger causes the linker to
17129           report an error such as:
17130
17131                   relocation truncated to fit: R_68K_GOT16O foobar
17132
17133           If this happens, you should recompile your code with -mxgot.  It
17134           should then work with very large GOTs.  However, code generated
17135           with -mxgot is less efficient, since it takes 4 instructions to
17136           fetch the value of a global symbol.
17137
17138           Note that some linkers, including newer versions of the GNU linker,
17139           can create multiple GOTs and sort GOT entries.  If you have such a
17140           linker, you should only need to use -mxgot when compiling a single
17141           object file that accesses more than 8192 GOT entries.  Very few do.
17142
17143           These options have no effect unless GCC is generating position-
17144           independent code.
17145
17146       -mlong-jump-table-offsets
17147           Use 32-bit offsets in "switch" tables.  The default is to use
17148           16-bit offsets.
17149
17150       MCore Options
17151
17152       These are the -m options defined for the Motorola M*Core processors.
17153
17154       -mhardlit
17155       -mno-hardlit
17156           Inline constants into the code stream if it can be done in two
17157           instructions or less.
17158
17159       -mdiv
17160       -mno-div
17161           Use the divide instruction.  (Enabled by default).
17162
17163       -mrelax-immediate
17164       -mno-relax-immediate
17165           Allow arbitrary-sized immediates in bit operations.
17166
17167       -mwide-bitfields
17168       -mno-wide-bitfields
17169           Always treat bit-fields as "int"-sized.
17170
17171       -m4byte-functions
17172       -mno-4byte-functions
17173           Force all functions to be aligned to a 4-byte boundary.
17174
17175       -mcallgraph-data
17176       -mno-callgraph-data
17177           Emit callgraph information.
17178
17179       -mslow-bytes
17180       -mno-slow-bytes
17181           Prefer word access when reading byte quantities.
17182
17183       -mlittle-endian
17184       -mbig-endian
17185           Generate code for a little-endian target.
17186
17187       -m210
17188       -m340
17189           Generate code for the 210 processor.
17190
17191       -mno-lsim
17192           Assume that runtime support has been provided and so omit the
17193           simulator library (libsim.a) from the linker command line.
17194
17195       -mstack-increment=size
17196           Set the maximum amount for a single stack increment operation.
17197           Large values can increase the speed of programs that contain
17198           functions that need a large amount of stack space, but they can
17199           also trigger a segmentation fault if the stack is extended too
17200           much.  The default value is 0x1000.
17201
17202       MeP Options
17203
17204       -mabsdiff
17205           Enables the "abs" instruction, which is the absolute difference
17206           between two registers.
17207
17208       -mall-opts
17209           Enables all the optional instructions---average, multiply, divide,
17210           bit operations, leading zero, absolute difference, min/max, clip,
17211           and saturation.
17212
17213       -maverage
17214           Enables the "ave" instruction, which computes the average of two
17215           registers.
17216
17217       -mbased=n
17218           Variables of size n bytes or smaller are placed in the ".based"
17219           section by default.  Based variables use the $tp register as a base
17220           register, and there is a 128-byte limit to the ".based" section.
17221
17222       -mbitops
17223           Enables the bit operation instructions---bit test ("btstm"), set
17224           ("bsetm"), clear ("bclrm"), invert ("bnotm"), and test-and-set
17225           ("tas").
17226
17227       -mc=name
17228           Selects which section constant data is placed in.  name may be
17229           tiny, near, or far.
17230
17231       -mclip
17232           Enables the "clip" instruction.  Note that -mclip is not useful
17233           unless you also provide -mminmax.
17234
17235       -mconfig=name
17236           Selects one of the built-in core configurations.  Each MeP chip has
17237           one or more modules in it; each module has a core CPU and a variety
17238           of coprocessors, optional instructions, and peripherals.  The
17239           "MeP-Integrator" tool, not part of GCC, provides these
17240           configurations through this option; using this option is the same
17241           as using all the corresponding command-line options.  The default
17242           configuration is default.
17243
17244       -mcop
17245           Enables the coprocessor instructions.  By default, this is a 32-bit
17246           coprocessor.  Note that the coprocessor is normally enabled via the
17247           -mconfig= option.
17248
17249       -mcop32
17250           Enables the 32-bit coprocessor's instructions.
17251
17252       -mcop64
17253           Enables the 64-bit coprocessor's instructions.
17254
17255       -mivc2
17256           Enables IVC2 scheduling.  IVC2 is a 64-bit VLIW coprocessor.
17257
17258       -mdc
17259           Causes constant variables to be placed in the ".near" section.
17260
17261       -mdiv
17262           Enables the "div" and "divu" instructions.
17263
17264       -meb
17265           Generate big-endian code.
17266
17267       -mel
17268           Generate little-endian code.
17269
17270       -mio-volatile
17271           Tells the compiler that any variable marked with the "io" attribute
17272           is to be considered volatile.
17273
17274       -ml Causes variables to be assigned to the ".far" section by default.
17275
17276       -mleadz
17277           Enables the "leadz" (leading zero) instruction.
17278
17279       -mm Causes variables to be assigned to the ".near" section by default.
17280
17281       -mminmax
17282           Enables the "min" and "max" instructions.
17283
17284       -mmult
17285           Enables the multiplication and multiply-accumulate instructions.
17286
17287       -mno-opts
17288           Disables all the optional instructions enabled by -mall-opts.
17289
17290       -mrepeat
17291           Enables the "repeat" and "erepeat" instructions, used for low-
17292           overhead looping.
17293
17294       -ms Causes all variables to default to the ".tiny" section.  Note that
17295           there is a 65536-byte limit to this section.  Accesses to these
17296           variables use the %gp base register.
17297
17298       -msatur
17299           Enables the saturation instructions.  Note that the compiler does
17300           not currently generate these itself, but this option is included
17301           for compatibility with other tools, like "as".
17302
17303       -msdram
17304           Link the SDRAM-based runtime instead of the default ROM-based
17305           runtime.
17306
17307       -msim
17308           Link the simulator run-time libraries.
17309
17310       -msimnovec
17311           Link the simulator runtime libraries, excluding built-in support
17312           for reset and exception vectors and tables.
17313
17314       -mtf
17315           Causes all functions to default to the ".far" section.  Without
17316           this option, functions default to the ".near" section.
17317
17318       -mtiny=n
17319           Variables that are n bytes or smaller are allocated to the ".tiny"
17320           section.  These variables use the $gp base register.  The default
17321           for this option is 4, but note that there's a 65536-byte limit to
17322           the ".tiny" section.
17323
17324       MicroBlaze Options
17325
17326       -msoft-float
17327           Use software emulation for floating point (default).
17328
17329       -mhard-float
17330           Use hardware floating-point instructions.
17331
17332       -mmemcpy
17333           Do not optimize block moves, use "memcpy".
17334
17335       -mno-clearbss
17336           This option is deprecated.  Use -fno-zero-initialized-in-bss
17337           instead.
17338
17339       -mcpu=cpu-type
17340           Use features of, and schedule code for, the given CPU.  Supported
17341           values are in the format vX.YY.Z, where X is a major version, YY is
17342           the minor version, and Z is compatibility code.  Example values are
17343           v3.00.a, v4.00.b, v5.00.a, v5.00.b, v6.00.a.
17344
17345       -mxl-soft-mul
17346           Use software multiply emulation (default).
17347
17348       -mxl-soft-div
17349           Use software emulation for divides (default).
17350
17351       -mxl-barrel-shift
17352           Use the hardware barrel shifter.
17353
17354       -mxl-pattern-compare
17355           Use pattern compare instructions.
17356
17357       -msmall-divides
17358           Use table lookup optimization for small signed integer divisions.
17359
17360       -mxl-stack-check
17361           This option is deprecated.  Use -fstack-check instead.
17362
17363       -mxl-gp-opt
17364           Use GP-relative ".sdata"/".sbss" sections.
17365
17366       -mxl-multiply-high
17367           Use multiply high instructions for high part of 32x32 multiply.
17368
17369       -mxl-float-convert
17370           Use hardware floating-point conversion instructions.
17371
17372       -mxl-float-sqrt
17373           Use hardware floating-point square root instruction.
17374
17375       -mbig-endian
17376           Generate code for a big-endian target.
17377
17378       -mlittle-endian
17379           Generate code for a little-endian target.
17380
17381       -mxl-reorder
17382           Use reorder instructions (swap and byte reversed load/store).
17383
17384       -mxl-mode-app-model
17385           Select application model app-model.  Valid models are
17386
17387           executable
17388               normal executable (default), uses startup code crt0.o.
17389
17390           xmdstub
17391               for use with Xilinx Microprocessor Debugger (XMD) based
17392               software intrusive debug agent called xmdstub. This uses
17393               startup file crt1.o and sets the start address of the program
17394               to 0x800.
17395
17396           bootstrap
17397               for applications that are loaded using a bootloader.  This
17398               model uses startup file crt2.o which does not contain a
17399               processor reset vector handler. This is suitable for
17400               transferring control on a processor reset to the bootloader
17401               rather than the application.
17402
17403           novectors
17404               for applications that do not require any of the MicroBlaze
17405               vectors. This option may be useful for applications running
17406               within a monitoring application. This model uses crt3.o as a
17407               startup file.
17408
17409           Option -xl-mode-app-model is a deprecated alias for -mxl-mode-app-
17410           model.
17411
17412       MIPS Options
17413
17414       -EB Generate big-endian code.
17415
17416       -EL Generate little-endian code.  This is the default for mips*el-*-*
17417           configurations.
17418
17419       -march=arch
17420           Generate code that runs on arch, which can be the name of a generic
17421           MIPS ISA, or the name of a particular processor.  The ISA names
17422           are: mips1, mips2, mips3, mips4, mips32, mips32r2, mips32r3,
17423           mips32r5, mips32r6, mips64, mips64r2, mips64r3, mips64r5 and
17424           mips64r6.  The processor names are: 4kc, 4km, 4kp, 4ksc, 4kec,
17425           4kem, 4kep, 4ksd, 5kc, 5kf, 20kc, 24kc, 24kf2_1, 24kf1_1, 24kec,
17426           24kef2_1, 24kef1_1, 34kc, 34kf2_1, 34kf1_1, 34kn, 74kc, 74kf2_1,
17427           74kf1_1, 74kf3_2, 1004kc, 1004kf2_1, 1004kf1_1, i6400, interaptiv,
17428           loongson2e, loongson2f, loongson3a, m4k, m14k, m14kc, m14ke,
17429           m14kec, m5100, m5101, octeon, octeon+, octeon2, octeon3, orion,
17430           p5600, r2000, r3000, r3900, r4000, r4400, r4600, r4650, r4700,
17431           r6000, r8000, rm7000, rm9000, r10000, r12000, r14000, r16000, sb1,
17432           sr71000, vr4100, vr4111, vr4120, vr4130, vr4300, vr5000, vr5400,
17433           vr5500, xlr and xlp.  The special value from-abi selects the most
17434           compatible architecture for the selected ABI (that is, mips1 for
17435           32-bit ABIs and mips3 for 64-bit ABIs).
17436
17437           The native Linux/GNU toolchain also supports the value native,
17438           which selects the best architecture option for the host processor.
17439           -march=native has no effect if GCC does not recognize the
17440           processor.
17441
17442           In processor names, a final 000 can be abbreviated as k (for
17443           example, -march=r2k).  Prefixes are optional, and vr may be written
17444           r.
17445
17446           Names of the form nf2_1 refer to processors with FPUs clocked at
17447           half the rate of the core, names of the form nf1_1 refer to
17448           processors with FPUs clocked at the same rate as the core, and
17449           names of the form nf3_2 refer to processors with FPUs clocked a
17450           ratio of 3:2 with respect to the core.  For compatibility reasons,
17451           nf is accepted as a synonym for nf2_1 while nx and bfx are accepted
17452           as synonyms for nf1_1.
17453
17454           GCC defines two macros based on the value of this option.  The
17455           first is "_MIPS_ARCH", which gives the name of target architecture,
17456           as a string.  The second has the form "_MIPS_ARCH_foo", where foo
17457           is the capitalized value of "_MIPS_ARCH".  For example,
17458           -march=r2000 sets "_MIPS_ARCH" to "r2000" and defines the macro
17459           "_MIPS_ARCH_R2000".
17460
17461           Note that the "_MIPS_ARCH" macro uses the processor names given
17462           above.  In other words, it has the full prefix and does not
17463           abbreviate 000 as k.  In the case of from-abi, the macro names the
17464           resolved architecture (either "mips1" or "mips3").  It names the
17465           default architecture when no -march option is given.
17466
17467       -mtune=arch
17468           Optimize for arch.  Among other things, this option controls the
17469           way instructions are scheduled, and the perceived cost of
17470           arithmetic operations.  The list of arch values is the same as for
17471           -march.
17472
17473           When this option is not used, GCC optimizes for the processor
17474           specified by -march.  By using -march and -mtune together, it is
17475           possible to generate code that runs on a family of processors, but
17476           optimize the code for one particular member of that family.
17477
17478           -mtune defines the macros "_MIPS_TUNE" and "_MIPS_TUNE_foo", which
17479           work in the same way as the -march ones described above.
17480
17481       -mips1
17482           Equivalent to -march=mips1.
17483
17484       -mips2
17485           Equivalent to -march=mips2.
17486
17487       -mips3
17488           Equivalent to -march=mips3.
17489
17490       -mips4
17491           Equivalent to -march=mips4.
17492
17493       -mips32
17494           Equivalent to -march=mips32.
17495
17496       -mips32r3
17497           Equivalent to -march=mips32r3.
17498
17499       -mips32r5
17500           Equivalent to -march=mips32r5.
17501
17502       -mips32r6
17503           Equivalent to -march=mips32r6.
17504
17505       -mips64
17506           Equivalent to -march=mips64.
17507
17508       -mips64r2
17509           Equivalent to -march=mips64r2.
17510
17511       -mips64r3
17512           Equivalent to -march=mips64r3.
17513
17514       -mips64r5
17515           Equivalent to -march=mips64r5.
17516
17517       -mips64r6
17518           Equivalent to -march=mips64r6.
17519
17520       -mips16
17521       -mno-mips16
17522           Generate (do not generate) MIPS16 code.  If GCC is targeting a
17523           MIPS32 or MIPS64 architecture, it makes use of the MIPS16e ASE.
17524
17525           MIPS16 code generation can also be controlled on a per-function
17526           basis by means of "mips16" and "nomips16" attributes.
17527
17528       -mflip-mips16
17529           Generate MIPS16 code on alternating functions.  This option is
17530           provided for regression testing of mixed MIPS16/non-MIPS16 code
17531           generation, and is not intended for ordinary use in compiling user
17532           code.
17533
17534       -minterlink-compressed
17535       -mno-interlink-compressed
17536           Require (do not require) that code using the standard
17537           (uncompressed) MIPS ISA be link-compatible with MIPS16 and
17538           microMIPS code, and vice versa.
17539
17540           For example, code using the standard ISA encoding cannot jump
17541           directly to MIPS16 or microMIPS code; it must either use a call or
17542           an indirect jump.  -minterlink-compressed therefore disables direct
17543           jumps unless GCC knows that the target of the jump is not
17544           compressed.
17545
17546       -minterlink-mips16
17547       -mno-interlink-mips16
17548           Aliases of -minterlink-compressed and -mno-interlink-compressed.
17549           These options predate the microMIPS ASE and are retained for
17550           backwards compatibility.
17551
17552       -mabi=32
17553       -mabi=o64
17554       -mabi=n32
17555       -mabi=64
17556       -mabi=eabi
17557           Generate code for the given ABI.
17558
17559           Note that the EABI has a 32-bit and a 64-bit variant.  GCC normally
17560           generates 64-bit code when you select a 64-bit architecture, but
17561           you can use -mgp32 to get 32-bit code instead.
17562
17563           For information about the O64 ABI, see
17564           <http://gcc.gnu.org/projects/mipso64-abi.html>.
17565
17566           GCC supports a variant of the o32 ABI in which floating-point
17567           registers are 64 rather than 32 bits wide.  You can select this
17568           combination with -mabi=32 -mfp64.  This ABI relies on the "mthc1"
17569           and "mfhc1" instructions and is therefore only supported for
17570           MIPS32R2, MIPS32R3 and MIPS32R5 processors.
17571
17572           The register assignments for arguments and return values remain the
17573           same, but each scalar value is passed in a single 64-bit register
17574           rather than a pair of 32-bit registers.  For example, scalar
17575           floating-point values are returned in $f0 only, not a $f0/$f1 pair.
17576           The set of call-saved registers also remains the same in that the
17577           even-numbered double-precision registers are saved.
17578
17579           Two additional variants of the o32 ABI are supported to enable a
17580           transition from 32-bit to 64-bit registers.  These are FPXX
17581           (-mfpxx) and FP64A (-mfp64 -mno-odd-spreg).  The FPXX extension
17582           mandates that all code must execute correctly when run using 32-bit
17583           or 64-bit registers.  The code can be interlinked with either FP32
17584           or FP64, but not both.  The FP64A extension is similar to the FP64
17585           extension but forbids the use of odd-numbered single-precision
17586           registers.  This can be used in conjunction with the "FRE" mode of
17587           FPUs in MIPS32R5 processors and allows both FP32 and FP64A code to
17588           interlink and run in the same process without changing FPU modes.
17589
17590       -mabicalls
17591       -mno-abicalls
17592           Generate (do not generate) code that is suitable for SVR4-style
17593           dynamic objects.  -mabicalls is the default for SVR4-based systems.
17594
17595       -mshared
17596       -mno-shared
17597           Generate (do not generate) code that is fully position-independent,
17598           and that can therefore be linked into shared libraries.  This
17599           option only affects -mabicalls.
17600
17601           All -mabicalls code has traditionally been position-independent,
17602           regardless of options like -fPIC and -fpic.  However, as an
17603           extension, the GNU toolchain allows executables to use absolute
17604           accesses for locally-binding symbols.  It can also use shorter GP
17605           initialization sequences and generate direct calls to locally-
17606           defined functions.  This mode is selected by -mno-shared.
17607
17608           -mno-shared depends on binutils 2.16 or higher and generates
17609           objects that can only be linked by the GNU linker.  However, the
17610           option does not affect the ABI of the final executable; it only
17611           affects the ABI of relocatable objects.  Using -mno-shared
17612           generally makes executables both smaller and quicker.
17613
17614           -mshared is the default.
17615
17616       -mplt
17617       -mno-plt
17618           Assume (do not assume) that the static and dynamic linkers support
17619           PLTs and copy relocations.  This option only affects -mno-shared
17620           -mabicalls.  For the n64 ABI, this option has no effect without
17621           -msym32.
17622
17623           You can make -mplt the default by configuring GCC with
17624           --with-mips-plt.  The default is -mno-plt otherwise.
17625
17626       -mxgot
17627       -mno-xgot
17628           Lift (do not lift) the usual restrictions on the size of the global
17629           offset table.
17630
17631           GCC normally uses a single instruction to load values from the GOT.
17632           While this is relatively efficient, it only works if the GOT is
17633           smaller than about 64k.  Anything larger causes the linker to
17634           report an error such as:
17635
17636                   relocation truncated to fit: R_MIPS_GOT16 foobar
17637
17638           If this happens, you should recompile your code with -mxgot.  This
17639           works with very large GOTs, although the code is also less
17640           efficient, since it takes three instructions to fetch the value of
17641           a global symbol.
17642
17643           Note that some linkers can create multiple GOTs.  If you have such
17644           a linker, you should only need to use -mxgot when a single object
17645           file accesses more than 64k's worth of GOT entries.  Very few do.
17646
17647           These options have no effect unless GCC is generating position
17648           independent code.
17649
17650       -mgp32
17651           Assume that general-purpose registers are 32 bits wide.
17652
17653       -mgp64
17654           Assume that general-purpose registers are 64 bits wide.
17655
17656       -mfp32
17657           Assume that floating-point registers are 32 bits wide.
17658
17659       -mfp64
17660           Assume that floating-point registers are 64 bits wide.
17661
17662       -mfpxx
17663           Do not assume the width of floating-point registers.
17664
17665       -mhard-float
17666           Use floating-point coprocessor instructions.
17667
17668       -msoft-float
17669           Do not use floating-point coprocessor instructions.  Implement
17670           floating-point calculations using library calls instead.
17671
17672       -mno-float
17673           Equivalent to -msoft-float, but additionally asserts that the
17674           program being compiled does not perform any floating-point
17675           operations.  This option is presently supported only by some bare-
17676           metal MIPS configurations, where it may select a special set of
17677           libraries that lack all floating-point support (including, for
17678           example, the floating-point "printf" formats).  If code compiled
17679           with -mno-float accidentally contains floating-point operations, it
17680           is likely to suffer a link-time or run-time failure.
17681
17682       -msingle-float
17683           Assume that the floating-point coprocessor only supports single-
17684           precision operations.
17685
17686       -mdouble-float
17687           Assume that the floating-point coprocessor supports double-
17688           precision operations.  This is the default.
17689
17690       -modd-spreg
17691       -mno-odd-spreg
17692           Enable the use of odd-numbered single-precision floating-point
17693           registers for the o32 ABI.  This is the default for processors that
17694           are known to support these registers.  When using the o32 FPXX ABI,
17695           -mno-odd-spreg is set by default.
17696
17697       -mabs=2008
17698       -mabs=legacy
17699           These options control the treatment of the special not-a-number
17700           (NaN) IEEE 754 floating-point data with the "abs.fmt" and "neg.fmt"
17701           machine instructions.
17702
17703           By default or when -mabs=legacy is used the legacy treatment is
17704           selected.  In this case these instructions are considered
17705           arithmetic and avoided where correct operation is required and the
17706           input operand might be a NaN.  A longer sequence of instructions
17707           that manipulate the sign bit of floating-point datum manually is
17708           used instead unless the -ffinite-math-only option has also been
17709           specified.
17710
17711           The -mabs=2008 option selects the IEEE 754-2008 treatment.  In this
17712           case these instructions are considered non-arithmetic and therefore
17713           operating correctly in all cases, including in particular where the
17714           input operand is a NaN.  These instructions are therefore always
17715           used for the respective operations.
17716
17717       -mnan=2008
17718       -mnan=legacy
17719           These options control the encoding of the special not-a-number
17720           (NaN) IEEE 754 floating-point data.
17721
17722           The -mnan=legacy option selects the legacy encoding.  In this case
17723           quiet NaNs (qNaNs) are denoted by the first bit of their trailing
17724           significand field being 0, whereas signaling NaNs (sNaNs) are
17725           denoted by the first bit of their trailing significand field being
17726           1.
17727
17728           The -mnan=2008 option selects the IEEE 754-2008 encoding.  In this
17729           case qNaNs are denoted by the first bit of their trailing
17730           significand field being 1, whereas sNaNs are denoted by the first
17731           bit of their trailing significand field being 0.
17732
17733           The default is -mnan=legacy unless GCC has been configured with
17734           --with-nan=2008.
17735
17736       -mllsc
17737       -mno-llsc
17738           Use (do not use) ll, sc, and sync instructions to implement atomic
17739           memory built-in functions.  When neither option is specified, GCC
17740           uses the instructions if the target architecture supports them.
17741
17742           -mllsc is useful if the runtime environment can emulate the
17743           instructions and -mno-llsc can be useful when compiling for
17744           nonstandard ISAs.  You can make either option the default by
17745           configuring GCC with --with-llsc and --without-llsc respectively.
17746           --with-llsc is the default for some configurations; see the
17747           installation documentation for details.
17748
17749       -mdsp
17750       -mno-dsp
17751           Use (do not use) revision 1 of the MIPS DSP ASE.
17752             This option defines the preprocessor macro "__mips_dsp".  It also
17753           defines "__mips_dsp_rev" to 1.
17754
17755       -mdspr2
17756       -mno-dspr2
17757           Use (do not use) revision 2 of the MIPS DSP ASE.
17758             This option defines the preprocessor macros "__mips_dsp" and
17759           "__mips_dspr2".  It also defines "__mips_dsp_rev" to 2.
17760
17761       -msmartmips
17762       -mno-smartmips
17763           Use (do not use) the MIPS SmartMIPS ASE.
17764
17765       -mpaired-single
17766       -mno-paired-single
17767           Use (do not use) paired-single floating-point instructions.
17768             This option requires hardware floating-point support to be
17769           enabled.
17770
17771       -mdmx
17772       -mno-mdmx
17773           Use (do not use) MIPS Digital Media Extension instructions.  This
17774           option can only be used when generating 64-bit code and requires
17775           hardware floating-point support to be enabled.
17776
17777       -mips3d
17778       -mno-mips3d
17779           Use (do not use) the MIPS-3D ASE.  The option -mips3d implies
17780           -mpaired-single.
17781
17782       -mmicromips
17783       -mno-micromips
17784           Generate (do not generate) microMIPS code.
17785
17786           MicroMIPS code generation can also be controlled on a per-function
17787           basis by means of "micromips" and "nomicromips" attributes.
17788
17789       -mmt
17790       -mno-mt
17791           Use (do not use) MT Multithreading instructions.
17792
17793       -mmcu
17794       -mno-mcu
17795           Use (do not use) the MIPS MCU ASE instructions.
17796
17797       -meva
17798       -mno-eva
17799           Use (do not use) the MIPS Enhanced Virtual Addressing instructions.
17800
17801       -mvirt
17802       -mno-virt
17803           Use (do not use) the MIPS Virtualization (VZ) instructions.
17804
17805       -mxpa
17806       -mno-xpa
17807           Use (do not use) the MIPS eXtended Physical Address (XPA)
17808           instructions.
17809
17810       -mlong64
17811           Force "long" types to be 64 bits wide.  See -mlong32 for an
17812           explanation of the default and the way that the pointer size is
17813           determined.
17814
17815       -mlong32
17816           Force "long", "int", and pointer types to be 32 bits wide.
17817
17818           The default size of "int"s, "long"s and pointers depends on the
17819           ABI.  All the supported ABIs use 32-bit "int"s.  The n64 ABI uses
17820           64-bit "long"s, as does the 64-bit EABI; the others use 32-bit
17821           "long"s.  Pointers are the same size as "long"s, or the same size
17822           as integer registers, whichever is smaller.
17823
17824       -msym32
17825       -mno-sym32
17826           Assume (do not assume) that all symbols have 32-bit values,
17827           regardless of the selected ABI.  This option is useful in
17828           combination with -mabi=64 and -mno-abicalls because it allows GCC
17829           to generate shorter and faster references to symbolic addresses.
17830
17831       -G num
17832           Put definitions of externally-visible data in a small data section
17833           if that data is no bigger than num bytes.  GCC can then generate
17834           more efficient accesses to the data; see -mgpopt for details.
17835
17836           The default -G option depends on the configuration.
17837
17838       -mlocal-sdata
17839       -mno-local-sdata
17840           Extend (do not extend) the -G behavior to local data too, such as
17841           to static variables in C.  -mlocal-sdata is the default for all
17842           configurations.
17843
17844           If the linker complains that an application is using too much small
17845           data, you might want to try rebuilding the less performance-
17846           critical parts with -mno-local-sdata.  You might also want to build
17847           large libraries with -mno-local-sdata, so that the libraries leave
17848           more room for the main program.
17849
17850       -mextern-sdata
17851       -mno-extern-sdata
17852           Assume (do not assume) that externally-defined data is in a small
17853           data section if the size of that data is within the -G limit.
17854           -mextern-sdata is the default for all configurations.
17855
17856           If you compile a module Mod with -mextern-sdata -G num -mgpopt, and
17857           Mod references a variable Var that is no bigger than num bytes, you
17858           must make sure that Var is placed in a small data section.  If Var
17859           is defined by another module, you must either compile that module
17860           with a high-enough -G setting or attach a "section" attribute to
17861           Var's definition.  If Var is common, you must link the application
17862           with a high-enough -G setting.
17863
17864           The easiest way of satisfying these restrictions is to compile and
17865           link every module with the same -G option.  However, you may wish
17866           to build a library that supports several different small data
17867           limits.  You can do this by compiling the library with the highest
17868           supported -G setting and additionally using -mno-extern-sdata to
17869           stop the library from making assumptions about externally-defined
17870           data.
17871
17872       -mgpopt
17873       -mno-gpopt
17874           Use (do not use) GP-relative accesses for symbols that are known to
17875           be in a small data section; see -G, -mlocal-sdata and
17876           -mextern-sdata.  -mgpopt is the default for all configurations.
17877
17878           -mno-gpopt is useful for cases where the $gp register might not
17879           hold the value of "_gp".  For example, if the code is part of a
17880           library that might be used in a boot monitor, programs that call
17881           boot monitor routines pass an unknown value in $gp.  (In such
17882           situations, the boot monitor itself is usually compiled with -G0.)
17883
17884           -mno-gpopt implies -mno-local-sdata and -mno-extern-sdata.
17885
17886       -membedded-data
17887       -mno-embedded-data
17888           Allocate variables to the read-only data section first if possible,
17889           then next in the small data section if possible, otherwise in data.
17890           This gives slightly slower code than the default, but reduces the
17891           amount of RAM required when executing, and thus may be preferred
17892           for some embedded systems.
17893
17894       -muninit-const-in-rodata
17895       -mno-uninit-const-in-rodata
17896           Put uninitialized "const" variables in the read-only data section.
17897           This option is only meaningful in conjunction with -membedded-data.
17898
17899       -mcode-readable=setting
17900           Specify whether GCC may generate code that reads from executable
17901           sections.  There are three possible settings:
17902
17903           -mcode-readable=yes
17904               Instructions may freely access executable sections.  This is
17905               the default setting.
17906
17907           -mcode-readable=pcrel
17908               MIPS16 PC-relative load instructions can access executable
17909               sections, but other instructions must not do so.  This option
17910               is useful on 4KSc and 4KSd processors when the code TLBs have
17911               the Read Inhibit bit set.  It is also useful on processors that
17912               can be configured to have a dual instruction/data SRAM
17913               interface and that, like the M4K, automatically redirect PC-
17914               relative loads to the instruction RAM.
17915
17916           -mcode-readable=no
17917               Instructions must not access executable sections.  This option
17918               can be useful on targets that are configured to have a dual
17919               instruction/data SRAM interface but that (unlike the M4K) do
17920               not automatically redirect PC-relative loads to the instruction
17921               RAM.
17922
17923       -msplit-addresses
17924       -mno-split-addresses
17925           Enable (disable) use of the "%hi()" and "%lo()" assembler
17926           relocation operators.  This option has been superseded by
17927           -mexplicit-relocs but is retained for backwards compatibility.
17928
17929       -mexplicit-relocs
17930       -mno-explicit-relocs
17931           Use (do not use) assembler relocation operators when dealing with
17932           symbolic addresses.  The alternative, selected by
17933           -mno-explicit-relocs, is to use assembler macros instead.
17934
17935           -mexplicit-relocs is the default if GCC was configured to use an
17936           assembler that supports relocation operators.
17937
17938       -mcheck-zero-division
17939       -mno-check-zero-division
17940           Trap (do not trap) on integer division by zero.
17941
17942           The default is -mcheck-zero-division.
17943
17944       -mdivide-traps
17945       -mdivide-breaks
17946           MIPS systems check for division by zero by generating either a
17947           conditional trap or a break instruction.  Using traps results in
17948           smaller code, but is only supported on MIPS II and later.  Also,
17949           some versions of the Linux kernel have a bug that prevents trap
17950           from generating the proper signal ("SIGFPE").  Use -mdivide-traps
17951           to allow conditional traps on architectures that support them and
17952           -mdivide-breaks to force the use of breaks.
17953
17954           The default is usually -mdivide-traps, but this can be overridden
17955           at configure time using --with-divide=breaks.  Divide-by-zero
17956           checks can be completely disabled using -mno-check-zero-division.
17957
17958       -mload-store-pairs
17959       -mno-load-store-pairs
17960           Enable (disable) an optimization that pairs consecutive load or
17961           store instructions to enable load/store bonding.  This option is
17962           enabled by default but only takes effect when the selected
17963           architecture is known to support bonding.
17964
17965       -mmemcpy
17966       -mno-memcpy
17967           Force (do not force) the use of "memcpy" for non-trivial block
17968           moves.  The default is -mno-memcpy, which allows GCC to inline most
17969           constant-sized copies.
17970
17971       -mlong-calls
17972       -mno-long-calls
17973           Disable (do not disable) use of the "jal" instruction.  Calling
17974           functions using "jal" is more efficient but requires the caller and
17975           callee to be in the same 256 megabyte segment.
17976
17977           This option has no effect on abicalls code.  The default is
17978           -mno-long-calls.
17979
17980       -mmad
17981       -mno-mad
17982           Enable (disable) use of the "mad", "madu" and "mul" instructions,
17983           as provided by the R4650 ISA.
17984
17985       -mimadd
17986       -mno-imadd
17987           Enable (disable) use of the "madd" and "msub" integer instructions.
17988           The default is -mimadd on architectures that support "madd" and
17989           "msub" except for the 74k architecture where it was found to
17990           generate slower code.
17991
17992       -mfused-madd
17993       -mno-fused-madd
17994           Enable (disable) use of the floating-point multiply-accumulate
17995           instructions, when they are available.  The default is
17996           -mfused-madd.
17997
17998           On the R8000 CPU when multiply-accumulate instructions are used,
17999           the intermediate product is calculated to infinite precision and is
18000           not subject to the FCSR Flush to Zero bit.  This may be undesirable
18001           in some circumstances.  On other processors the result is
18002           numerically identical to the equivalent computation using separate
18003           multiply, add, subtract and negate instructions.
18004
18005       -nocpp
18006           Tell the MIPS assembler to not run its preprocessor over user
18007           assembler files (with a .s suffix) when assembling them.
18008
18009       -mfix-24k
18010       -mno-fix-24k
18011           Work around the 24K E48 (lost data on stores during refill) errata.
18012           The workarounds are implemented by the assembler rather than by
18013           GCC.
18014
18015       -mfix-r4000
18016       -mno-fix-r4000
18017           Work around certain R4000 CPU errata:
18018
18019           -   A double-word or a variable shift may give an incorrect result
18020               if executed immediately after starting an integer division.
18021
18022           -   A double-word or a variable shift may give an incorrect result
18023               if executed while an integer multiplication is in progress.
18024
18025           -   An integer division may give an incorrect result if started in
18026               a delay slot of a taken branch or a jump.
18027
18028       -mfix-r4400
18029       -mno-fix-r4400
18030           Work around certain R4400 CPU errata:
18031
18032           -   A double-word or a variable shift may give an incorrect result
18033               if executed immediately after starting an integer division.
18034
18035       -mfix-r10000
18036       -mno-fix-r10000
18037           Work around certain R10000 errata:
18038
18039           -   "ll"/"sc" sequences may not behave atomically on revisions
18040               prior to 3.0.  They may deadlock on revisions 2.6 and earlier.
18041
18042           This option can only be used if the target architecture supports
18043           branch-likely instructions.  -mfix-r10000 is the default when
18044           -march=r10000 is used; -mno-fix-r10000 is the default otherwise.
18045
18046       -mfix-rm7000
18047       -mno-fix-rm7000
18048           Work around the RM7000 "dmult"/"dmultu" errata.  The workarounds
18049           are implemented by the assembler rather than by GCC.
18050
18051       -mfix-vr4120
18052       -mno-fix-vr4120
18053           Work around certain VR4120 errata:
18054
18055           -   "dmultu" does not always produce the correct result.
18056
18057           -   "div" and "ddiv" do not always produce the correct result if
18058               one of the operands is negative.
18059
18060           The workarounds for the division errata rely on special functions
18061           in libgcc.a.  At present, these functions are only provided by the
18062           "mips64vr*-elf" configurations.
18063
18064           Other VR4120 errata require a NOP to be inserted between certain
18065           pairs of instructions.  These errata are handled by the assembler,
18066           not by GCC itself.
18067
18068       -mfix-vr4130
18069           Work around the VR4130 "mflo"/"mfhi" errata.  The workarounds are
18070           implemented by the assembler rather than by GCC, although GCC
18071           avoids using "mflo" and "mfhi" if the VR4130 "macc", "macchi",
18072           "dmacc" and "dmacchi" instructions are available instead.
18073
18074       -mfix-sb1
18075       -mno-fix-sb1
18076           Work around certain SB-1 CPU core errata.  (This flag currently
18077           works around the SB-1 revision 2 "F1" and "F2" floating-point
18078           errata.)
18079
18080       -mr10k-cache-barrier=setting
18081           Specify whether GCC should insert cache barriers to avoid the side
18082           effects of speculation on R10K processors.
18083
18084           In common with many processors, the R10K tries to predict the
18085           outcome of a conditional branch and speculatively executes
18086           instructions from the "taken" branch.  It later aborts these
18087           instructions if the predicted outcome is wrong.  However, on the
18088           R10K, even aborted instructions can have side effects.
18089
18090           This problem only affects kernel stores and, depending on the
18091           system, kernel loads.  As an example, a speculatively-executed
18092           store may load the target memory into cache and mark the cache line
18093           as dirty, even if the store itself is later aborted.  If a DMA
18094           operation writes to the same area of memory before the "dirty" line
18095           is flushed, the cached data overwrites the DMA-ed data.  See the
18096           R10K processor manual for a full description, including other
18097           potential problems.
18098
18099           One workaround is to insert cache barrier instructions before every
18100           memory access that might be speculatively executed and that might
18101           have side effects even if aborted.  -mr10k-cache-barrier=setting
18102           controls GCC's implementation of this workaround.  It assumes that
18103           aborted accesses to any byte in the following regions does not have
18104           side effects:
18105
18106           1.  the memory occupied by the current function's stack frame;
18107
18108           2.  the memory occupied by an incoming stack argument;
18109
18110           3.  the memory occupied by an object with a link-time-constant
18111               address.
18112
18113           It is the kernel's responsibility to ensure that speculative
18114           accesses to these regions are indeed safe.
18115
18116           If the input program contains a function declaration such as:
18117
18118                   void foo (void);
18119
18120           then the implementation of "foo" must allow "j foo" and "jal foo"
18121           to be executed speculatively.  GCC honors this restriction for
18122           functions it compiles itself.  It expects non-GCC functions (such
18123           as hand-written assembly code) to do the same.
18124
18125           The option has three forms:
18126
18127           -mr10k-cache-barrier=load-store
18128               Insert a cache barrier before a load or store that might be
18129               speculatively executed and that might have side effects even if
18130               aborted.
18131
18132           -mr10k-cache-barrier=store
18133               Insert a cache barrier before a store that might be
18134               speculatively executed and that might have side effects even if
18135               aborted.
18136
18137           -mr10k-cache-barrier=none
18138               Disable the insertion of cache barriers.  This is the default
18139               setting.
18140
18141       -mflush-func=func
18142       -mno-flush-func
18143           Specifies the function to call to flush the I and D caches, or to
18144           not call any such function.  If called, the function must take the
18145           same arguments as the common "_flush_func", that is, the address of
18146           the memory range for which the cache is being flushed, the size of
18147           the memory range, and the number 3 (to flush both caches).  The
18148           default depends on the target GCC was configured for, but commonly
18149           is either "_flush_func" or "__cpu_flush".
18150
18151       mbranch-cost=num
18152           Set the cost of branches to roughly num "simple" instructions.
18153           This cost is only a heuristic and is not guaranteed to produce
18154           consistent results across releases.  A zero cost redundantly
18155           selects the default, which is based on the -mtune setting.
18156
18157       -mbranch-likely
18158       -mno-branch-likely
18159           Enable or disable use of Branch Likely instructions, regardless of
18160           the default for the selected architecture.  By default, Branch
18161           Likely instructions may be generated if they are supported by the
18162           selected architecture.  An exception is for the MIPS32 and MIPS64
18163           architectures and processors that implement those architectures;
18164           for those, Branch Likely instructions are not be generated by
18165           default because the MIPS32 and MIPS64 architectures specifically
18166           deprecate their use.
18167
18168       -mcompact-branches=never
18169       -mcompact-branches=optimal
18170       -mcompact-branches=always
18171           These options control which form of branches will be generated.
18172           The default is -mcompact-branches=optimal.
18173
18174           The -mcompact-branches=never option ensures that compact branch
18175           instructions will never be generated.
18176
18177           The -mcompact-branches=always option ensures that a compact branch
18178           instruction will be generated if available.  If a compact branch
18179           instruction is not available, a delay slot form of the branch will
18180           be used instead.
18181
18182           This option is supported from MIPS Release 6 onwards.
18183
18184           The -mcompact-branches=optimal option will cause a delay slot
18185           branch to be used if one is available in the current ISA and the
18186           delay slot is successfully filled.  If the delay slot is not
18187           filled, a compact branch will be chosen if one is available.
18188
18189       -mfp-exceptions
18190       -mno-fp-exceptions
18191           Specifies whether FP exceptions are enabled.  This affects how FP
18192           instructions are scheduled for some processors.  The default is
18193           that FP exceptions are enabled.
18194
18195           For instance, on the SB-1, if FP exceptions are disabled, and we
18196           are emitting 64-bit code, then we can use both FP pipes.
18197           Otherwise, we can only use one FP pipe.
18198
18199       -mvr4130-align
18200       -mno-vr4130-align
18201           The VR4130 pipeline is two-way superscalar, but can only issue two
18202           instructions together if the first one is 8-byte aligned.  When
18203           this option is enabled, GCC aligns pairs of instructions that it
18204           thinks should execute in parallel.
18205
18206           This option only has an effect when optimizing for the VR4130.  It
18207           normally makes code faster, but at the expense of making it bigger.
18208           It is enabled by default at optimization level -O3.
18209
18210       -msynci
18211       -mno-synci
18212           Enable (disable) generation of "synci" instructions on
18213           architectures that support it.  The "synci" instructions (if
18214           enabled) are generated when "__builtin___clear_cache" is compiled.
18215
18216           This option defaults to -mno-synci, but the default can be
18217           overridden by configuring GCC with --with-synci.
18218
18219           When compiling code for single processor systems, it is generally
18220           safe to use "synci".  However, on many multi-core (SMP) systems, it
18221           does not invalidate the instruction caches on all cores and may
18222           lead to undefined behavior.
18223
18224       -mrelax-pic-calls
18225       -mno-relax-pic-calls
18226           Try to turn PIC calls that are normally dispatched via register $25
18227           into direct calls.  This is only possible if the linker can resolve
18228           the destination at link time and if the destination is within range
18229           for a direct call.
18230
18231           -mrelax-pic-calls is the default if GCC was configured to use an
18232           assembler and a linker that support the ".reloc" assembly directive
18233           and -mexplicit-relocs is in effect.  With -mno-explicit-relocs,
18234           this optimization can be performed by the assembler and the linker
18235           alone without help from the compiler.
18236
18237       -mmcount-ra-address
18238       -mno-mcount-ra-address
18239           Emit (do not emit) code that allows "_mcount" to modify the calling
18240           function's return address.  When enabled, this option extends the
18241           usual "_mcount" interface with a new ra-address parameter, which
18242           has type "intptr_t *" and is passed in register $12.  "_mcount" can
18243           then modify the return address by doing both of the following:
18244
18245           *   Returning the new address in register $31.
18246
18247           *   Storing the new address in "*ra-address", if ra-address is
18248               nonnull.
18249
18250           The default is -mno-mcount-ra-address.
18251
18252       -mframe-header-opt
18253       -mno-frame-header-opt
18254           Enable (disable) frame header optimization in the o32 ABI.  When
18255           using the o32 ABI, calling functions will allocate 16 bytes on the
18256           stack for the called function to write out register arguments.
18257           When enabled, this optimization will suppress the allocation of the
18258           frame header if it can be determined that it is unused.
18259
18260           This optimization is off by default at all optimization levels.
18261
18262       -mlxc1-sxc1
18263       -mno-lxc1-sxc1
18264           When applicable, enable (disable) the generation of "lwxc1",
18265           "swxc1", "ldxc1", "sdxc1" instructions.  Enabled by default.
18266
18267       -mmadd4
18268       -mno-madd4
18269           When applicable, enable (disable) the generation of 4-operand
18270           "madd.s", "madd.d" and related instructions.  Enabled by default.
18271
18272       MMIX Options
18273
18274       These options are defined for the MMIX:
18275
18276       -mlibfuncs
18277       -mno-libfuncs
18278           Specify that intrinsic library functions are being compiled,
18279           passing all values in registers, no matter the size.
18280
18281       -mepsilon
18282       -mno-epsilon
18283           Generate floating-point comparison instructions that compare with
18284           respect to the "rE" epsilon register.
18285
18286       -mabi=mmixware
18287       -mabi=gnu
18288           Generate code that passes function parameters and return values
18289           that (in the called function) are seen as registers $0 and up, as
18290           opposed to the GNU ABI which uses global registers $231 and up.
18291
18292       -mzero-extend
18293       -mno-zero-extend
18294           When reading data from memory in sizes shorter than 64 bits, use
18295           (do not use) zero-extending load instructions by default, rather
18296           than sign-extending ones.
18297
18298       -mknuthdiv
18299       -mno-knuthdiv
18300           Make the result of a division yielding a remainder have the same
18301           sign as the divisor.  With the default, -mno-knuthdiv, the sign of
18302           the remainder follows the sign of the dividend.  Both methods are
18303           arithmetically valid, the latter being almost exclusively used.
18304
18305       -mtoplevel-symbols
18306       -mno-toplevel-symbols
18307           Prepend (do not prepend) a : to all global symbols, so the assembly
18308           code can be used with the "PREFIX" assembly directive.
18309
18310       -melf
18311           Generate an executable in the ELF format, rather than the default
18312           mmo format used by the mmix simulator.
18313
18314       -mbranch-predict
18315       -mno-branch-predict
18316           Use (do not use) the probable-branch instructions, when static
18317           branch prediction indicates a probable branch.
18318
18319       -mbase-addresses
18320       -mno-base-addresses
18321           Generate (do not generate) code that uses base addresses.  Using a
18322           base address automatically generates a request (handled by the
18323           assembler and the linker) for a constant to be set up in a global
18324           register.  The register is used for one or more base address
18325           requests within the range 0 to 255 from the value held in the
18326           register.  The generally leads to short and fast code, but the
18327           number of different data items that can be addressed is limited.
18328           This means that a program that uses lots of static data may require
18329           -mno-base-addresses.
18330
18331       -msingle-exit
18332       -mno-single-exit
18333           Force (do not force) generated code to have a single exit point in
18334           each function.
18335
18336       MN10300 Options
18337
18338       These -m options are defined for Matsushita MN10300 architectures:
18339
18340       -mmult-bug
18341           Generate code to avoid bugs in the multiply instructions for the
18342           MN10300 processors.  This is the default.
18343
18344       -mno-mult-bug
18345           Do not generate code to avoid bugs in the multiply instructions for
18346           the MN10300 processors.
18347
18348       -mam33
18349           Generate code using features specific to the AM33 processor.
18350
18351       -mno-am33
18352           Do not generate code using features specific to the AM33 processor.
18353           This is the default.
18354
18355       -mam33-2
18356           Generate code using features specific to the AM33/2.0 processor.
18357
18358       -mam34
18359           Generate code using features specific to the AM34 processor.
18360
18361       -mtune=cpu-type
18362           Use the timing characteristics of the indicated CPU type when
18363           scheduling instructions.  This does not change the targeted
18364           processor type.  The CPU type must be one of mn10300, am33, am33-2
18365           or am34.
18366
18367       -mreturn-pointer-on-d0
18368           When generating a function that returns a pointer, return the
18369           pointer in both "a0" and "d0".  Otherwise, the pointer is returned
18370           only in "a0", and attempts to call such functions without a
18371           prototype result in errors.  Note that this option is on by
18372           default; use -mno-return-pointer-on-d0 to disable it.
18373
18374       -mno-crt0
18375           Do not link in the C run-time initialization object file.
18376
18377       -mrelax
18378           Indicate to the linker that it should perform a relaxation
18379           optimization pass to shorten branches, calls and absolute memory
18380           addresses.  This option only has an effect when used on the command
18381           line for the final link step.
18382
18383           This option makes symbolic debugging impossible.
18384
18385       -mliw
18386           Allow the compiler to generate Long Instruction Word instructions
18387           if the target is the AM33 or later.  This is the default.  This
18388           option defines the preprocessor macro "__LIW__".
18389
18390       -mnoliw
18391           Do not allow the compiler to generate Long Instruction Word
18392           instructions.  This option defines the preprocessor macro
18393           "__NO_LIW__".
18394
18395       -msetlb
18396           Allow the compiler to generate the SETLB and Lcc instructions if
18397           the target is the AM33 or later.  This is the default.  This option
18398           defines the preprocessor macro "__SETLB__".
18399
18400       -mnosetlb
18401           Do not allow the compiler to generate SETLB or Lcc instructions.
18402           This option defines the preprocessor macro "__NO_SETLB__".
18403
18404       Moxie Options
18405
18406       -meb
18407           Generate big-endian code.  This is the default for moxie-*-*
18408           configurations.
18409
18410       -mel
18411           Generate little-endian code.
18412
18413       -mmul.x
18414           Generate mul.x and umul.x instructions.  This is the default for
18415           moxiebox-*-* configurations.
18416
18417       -mno-crt0
18418           Do not link in the C run-time initialization object file.
18419
18420       MSP430 Options
18421
18422       These options are defined for the MSP430:
18423
18424       -masm-hex
18425           Force assembly output to always use hex constants.  Normally such
18426           constants are signed decimals, but this option is available for
18427           testsuite and/or aesthetic purposes.
18428
18429       -mmcu=
18430           Select the MCU to target.  This is used to create a C preprocessor
18431           symbol based upon the MCU name, converted to upper case and pre-
18432           and post-fixed with __.  This in turn is used by the msp430.h
18433           header file to select an MCU-specific supplementary header file.
18434
18435           The option also sets the ISA to use.  If the MCU name is one that
18436           is known to only support the 430 ISA then that is selected,
18437           otherwise the 430X ISA is selected.  A generic MCU name of msp430
18438           can also be used to select the 430 ISA.  Similarly the generic
18439           msp430x MCU name selects the 430X ISA.
18440
18441           In addition an MCU-specific linker script is added to the linker
18442           command line.  The script's name is the name of the MCU with .ld
18443           appended.  Thus specifying -mmcu=xxx on the gcc command line
18444           defines the C preprocessor symbol "__XXX__" and cause the linker to
18445           search for a script called xxx.ld.
18446
18447           This option is also passed on to the assembler.
18448
18449       -mwarn-mcu
18450       -mno-warn-mcu
18451           This option enables or disables warnings about conflicts between
18452           the MCU name specified by the -mmcu option and the ISA set by the
18453           -mcpu option and/or the hardware multiply support set by the
18454           -mhwmult option.  It also toggles warnings about unrecognized MCU
18455           names.  This option is on by default.
18456
18457       -mcpu=
18458           Specifies the ISA to use.  Accepted values are msp430, msp430x and
18459           msp430xv2.  This option is deprecated.  The -mmcu= option should be
18460           used to select the ISA.
18461
18462       -msim
18463           Link to the simulator runtime libraries and linker script.
18464           Overrides any scripts that would be selected by the -mmcu= option.
18465
18466       -mlarge
18467           Use large-model addressing (20-bit pointers, 32-bit "size_t").
18468
18469       -msmall
18470           Use small-model addressing (16-bit pointers, 16-bit "size_t").
18471
18472       -mrelax
18473           This option is passed to the assembler and linker, and allows the
18474           linker to perform certain optimizations that cannot be done until
18475           the final link.
18476
18477       mhwmult=
18478           Describes the type of hardware multiply supported by the target.
18479           Accepted values are none for no hardware multiply, 16bit for the
18480           original 16-bit-only multiply supported by early MCUs.  32bit for
18481           the 16/32-bit multiply supported by later MCUs and f5series for the
18482           16/32-bit multiply supported by F5-series MCUs.  A value of auto
18483           can also be given.  This tells GCC to deduce the hardware multiply
18484           support based upon the MCU name provided by the -mmcu option.  If
18485           no -mmcu option is specified or if the MCU name is not recognized
18486           then no hardware multiply support is assumed.  "auto" is the
18487           default setting.
18488
18489           Hardware multiplies are normally performed by calling a library
18490           routine.  This saves space in the generated code.  When compiling
18491           at -O3 or higher however the hardware multiplier is invoked inline.
18492           This makes for bigger, but faster code.
18493
18494           The hardware multiply routines disable interrupts whilst running
18495           and restore the previous interrupt state when they finish.  This
18496           makes them safe to use inside interrupt handlers as well as in
18497           normal code.
18498
18499       -minrt
18500           Enable the use of a minimum runtime environment - no static
18501           initializers or constructors.  This is intended for memory-
18502           constrained devices.  The compiler includes special symbols in some
18503           objects that tell the linker and runtime which code fragments are
18504           required.
18505
18506       -mcode-region=
18507       -mdata-region=
18508           These options tell the compiler where to place functions and data
18509           that do not have one of the "lower", "upper", "either" or "section"
18510           attributes.  Possible values are "lower", "upper", "either" or
18511           "any".  The first three behave like the corresponding attribute.
18512           The fourth possible value - "any" - is the default.  It leaves
18513           placement entirely up to the linker script and how it assigns the
18514           standard sections (".text", ".data", etc) to the memory regions.
18515
18516       -msilicon-errata=
18517           This option passes on a request to assembler to enable the fixes
18518           for the named silicon errata.
18519
18520       -msilicon-errata-warn=
18521           This option passes on a request to the assembler to enable warning
18522           messages when a silicon errata might need to be applied.
18523
18524       NDS32 Options
18525
18526       These options are defined for NDS32 implementations:
18527
18528       -mbig-endian
18529           Generate code in big-endian mode.
18530
18531       -mlittle-endian
18532           Generate code in little-endian mode.
18533
18534       -mreduced-regs
18535           Use reduced-set registers for register allocation.
18536
18537       -mfull-regs
18538           Use full-set registers for register allocation.
18539
18540       -mcmov
18541           Generate conditional move instructions.
18542
18543       -mno-cmov
18544           Do not generate conditional move instructions.
18545
18546       -mext-perf
18547           Generate performance extension instructions.
18548
18549       -mno-ext-perf
18550           Do not generate performance extension instructions.
18551
18552       -mext-perf2
18553           Generate performance extension 2 instructions.
18554
18555       -mno-ext-perf2
18556           Do not generate performance extension 2 instructions.
18557
18558       -mext-string
18559           Generate string extension instructions.
18560
18561       -mno-ext-string
18562           Do not generate string extension instructions.
18563
18564       -mv3push
18565           Generate v3 push25/pop25 instructions.
18566
18567       -mno-v3push
18568           Do not generate v3 push25/pop25 instructions.
18569
18570       -m16-bit
18571           Generate 16-bit instructions.
18572
18573       -mno-16-bit
18574           Do not generate 16-bit instructions.
18575
18576       -misr-vector-size=num
18577           Specify the size of each interrupt vector, which must be 4 or 16.
18578
18579       -mcache-block-size=num
18580           Specify the size of each cache block, which must be a power of 2
18581           between 4 and 512.
18582
18583       -march=arch
18584           Specify the name of the target architecture.
18585
18586       -mcmodel=code-model
18587           Set the code model to one of
18588
18589           small
18590               All the data and read-only data segments must be within 512KB
18591               addressing space.  The text segment must be within 16MB
18592               addressing space.
18593
18594           medium
18595               The data segment must be within 512KB while the read-only data
18596               segment can be within 4GB addressing space.  The text segment
18597               should be still within 16MB addressing space.
18598
18599           large
18600               All the text and data segments can be within 4GB addressing
18601               space.
18602
18603       -mctor-dtor
18604           Enable constructor/destructor feature.
18605
18606       -mrelax
18607           Guide linker to relax instructions.
18608
18609       Nios II Options
18610
18611       These are the options defined for the Altera Nios II processor.
18612
18613       -G num
18614           Put global and static objects less than or equal to num bytes into
18615           the small data or BSS sections instead of the normal data or BSS
18616           sections.  The default value of num is 8.
18617
18618       -mgpopt=option
18619       -mgpopt
18620       -mno-gpopt
18621           Generate (do not generate) GP-relative accesses.  The following
18622           option names are recognized:
18623
18624           none
18625               Do not generate GP-relative accesses.
18626
18627           local
18628               Generate GP-relative accesses for small data objects that are
18629               not external, weak, or uninitialized common symbols.  Also use
18630               GP-relative addressing for objects that have been explicitly
18631               placed in a small data section via a "section" attribute.
18632
18633           global
18634               As for local, but also generate GP-relative accesses for small
18635               data objects that are external, weak, or common.  If you use
18636               this option, you must ensure that all parts of your program
18637               (including libraries) are compiled with the same -G setting.
18638
18639           data
18640               Generate GP-relative accesses for all data objects in the
18641               program.  If you use this option, the entire data and BSS
18642               segments of your program must fit in 64K of memory and you must
18643               use an appropriate linker script to allocate them within the
18644               addressable range of the global pointer.
18645
18646           all Generate GP-relative addresses for function pointers as well as
18647               data pointers.  If you use this option, the entire text, data,
18648               and BSS segments of your program must fit in 64K of memory and
18649               you must use an appropriate linker script to allocate them
18650               within the addressable range of the global pointer.
18651
18652           -mgpopt is equivalent to -mgpopt=local, and -mno-gpopt is
18653           equivalent to -mgpopt=none.
18654
18655           The default is -mgpopt except when -fpic or -fPIC is specified to
18656           generate position-independent code.  Note that the Nios II ABI does
18657           not permit GP-relative accesses from shared libraries.
18658
18659           You may need to specify -mno-gpopt explicitly when building
18660           programs that include large amounts of small data, including large
18661           GOT data sections.  In this case, the 16-bit offset for GP-relative
18662           addressing may not be large enough to allow access to the entire
18663           small data section.
18664
18665       -mgprel-sec=regexp
18666           This option specifies additional section names that can be accessed
18667           via GP-relative addressing.  It is most useful in conjunction with
18668           "section" attributes on variable declarations and a custom linker
18669           script.  The regexp is a POSIX Extended Regular Expression.
18670
18671           This option does not affect the behavior of the -G option, and the
18672           specified sections are in addition to the standard ".sdata" and
18673           ".sbss" small-data sections that are recognized by -mgpopt.
18674
18675       -mr0rel-sec=regexp
18676           This option specifies names of sections that can be accessed via a
18677           16-bit offset from "r0"; that is, in the low 32K or high 32K of the
18678           32-bit address space.  It is most useful in conjunction with
18679           "section" attributes on variable declarations and a custom linker
18680           script.  The regexp is a POSIX Extended Regular Expression.
18681
18682           In contrast to the use of GP-relative addressing for small data,
18683           zero-based addressing is never generated by default and there are
18684           no conventional section names used in standard linker scripts for
18685           sections in the low or high areas of memory.
18686
18687       -mel
18688       -meb
18689           Generate little-endian (default) or big-endian (experimental) code,
18690           respectively.
18691
18692       -march=arch
18693           This specifies the name of the target Nios II architecture.  GCC
18694           uses this name to determine what kind of instructions it can emit
18695           when generating assembly code.  Permissible names are: r1, r2.
18696
18697           The preprocessor macro "__nios2_arch__" is available to programs,
18698           with value 1 or 2, indicating the targeted ISA level.
18699
18700       -mbypass-cache
18701       -mno-bypass-cache
18702           Force all load and store instructions to always bypass cache by
18703           using I/O variants of the instructions. The default is not to
18704           bypass the cache.
18705
18706       -mno-cache-volatile
18707       -mcache-volatile
18708           Volatile memory access bypass the cache using the I/O variants of
18709           the load and store instructions. The default is not to bypass the
18710           cache.
18711
18712       -mno-fast-sw-div
18713       -mfast-sw-div
18714           Do not use table-based fast divide for small numbers. The default
18715           is to use the fast divide at -O3 and above.
18716
18717       -mno-hw-mul
18718       -mhw-mul
18719       -mno-hw-mulx
18720       -mhw-mulx
18721       -mno-hw-div
18722       -mhw-div
18723           Enable or disable emitting "mul", "mulx" and "div" family of
18724           instructions by the compiler. The default is to emit "mul" and not
18725           emit "div" and "mulx".
18726
18727       -mbmx
18728       -mno-bmx
18729       -mcdx
18730       -mno-cdx
18731           Enable or disable generation of Nios II R2 BMX (bit manipulation)
18732           and CDX (code density) instructions.  Enabling these instructions
18733           also requires -march=r2.  Since these instructions are optional
18734           extensions to the R2 architecture, the default is not to emit them.
18735
18736       -mcustom-insn=N
18737       -mno-custom-insn
18738           Each -mcustom-insn=N option enables use of a custom instruction
18739           with encoding N when generating code that uses insn.  For example,
18740           -mcustom-fadds=253 generates custom instruction 253 for single-
18741           precision floating-point add operations instead of the default
18742           behavior of using a library call.
18743
18744           The following values of insn are supported.  Except as otherwise
18745           noted, floating-point operations are expected to be implemented
18746           with normal IEEE 754 semantics and correspond directly to the C
18747           operators or the equivalent GCC built-in functions.
18748
18749           Single-precision floating point:
18750
18751           fadds, fsubs, fdivs, fmuls
18752               Binary arithmetic operations.
18753
18754           fnegs
18755               Unary negation.
18756
18757           fabss
18758               Unary absolute value.
18759
18760           fcmpeqs, fcmpges, fcmpgts, fcmples, fcmplts, fcmpnes
18761               Comparison operations.
18762
18763           fmins, fmaxs
18764               Floating-point minimum and maximum.  These instructions are
18765               only generated if -ffinite-math-only is specified.
18766
18767           fsqrts
18768               Unary square root operation.
18769
18770           fcoss, fsins, ftans, fatans, fexps, flogs
18771               Floating-point trigonometric and exponential functions.  These
18772               instructions are only generated if -funsafe-math-optimizations
18773               is also specified.
18774
18775           Double-precision floating point:
18776
18777           faddd, fsubd, fdivd, fmuld
18778               Binary arithmetic operations.
18779
18780           fnegd
18781               Unary negation.
18782
18783           fabsd
18784               Unary absolute value.
18785
18786           fcmpeqd, fcmpged, fcmpgtd, fcmpled, fcmpltd, fcmpned
18787               Comparison operations.
18788
18789           fmind, fmaxd
18790               Double-precision minimum and maximum.  These instructions are
18791               only generated if -ffinite-math-only is specified.
18792
18793           fsqrtd
18794               Unary square root operation.
18795
18796           fcosd, fsind, ftand, fatand, fexpd, flogd
18797               Double-precision trigonometric and exponential functions.
18798               These instructions are only generated if
18799               -funsafe-math-optimizations is also specified.
18800
18801           Conversions:
18802
18803           fextsd
18804               Conversion from single precision to double precision.
18805
18806           ftruncds
18807               Conversion from double precision to single precision.
18808
18809           fixsi, fixsu, fixdi, fixdu
18810               Conversion from floating point to signed or unsigned integer
18811               types, with truncation towards zero.
18812
18813           round
18814               Conversion from single-precision floating point to signed
18815               integer, rounding to the nearest integer and ties away from
18816               zero.  This corresponds to the "__builtin_lroundf" function
18817               when -fno-math-errno is used.
18818
18819           floatis, floatus, floatid, floatud
18820               Conversion from signed or unsigned integer types to floating-
18821               point types.
18822
18823           In addition, all of the following transfer instructions for
18824           internal registers X and Y must be provided to use any of the
18825           double-precision floating-point instructions.  Custom instructions
18826           taking two double-precision source operands expect the first
18827           operand in the 64-bit register X.  The other operand (or only
18828           operand of a unary operation) is given to the custom arithmetic
18829           instruction with the least significant half in source register src1
18830           and the most significant half in src2.  A custom instruction that
18831           returns a double-precision result returns the most significant 32
18832           bits in the destination register and the other half in 32-bit
18833           register Y.  GCC automatically generates the necessary code
18834           sequences to write register X and/or read register Y when double-
18835           precision floating-point instructions are used.
18836
18837           fwrx
18838               Write src1 into the least significant half of X and src2 into
18839               the most significant half of X.
18840
18841           fwry
18842               Write src1 into Y.
18843
18844           frdxhi, frdxlo
18845               Read the most or least (respectively) significant half of X and
18846               store it in dest.
18847
18848           frdy
18849               Read the value of Y and store it into dest.
18850
18851           Note that you can gain more local control over generation of Nios
18852           II custom instructions by using the "target("custom-insn=N")" and
18853           "target("no-custom-insn")" function attributes or pragmas.
18854
18855       -mcustom-fpu-cfg=name
18856           This option enables a predefined, named set of custom instruction
18857           encodings (see -mcustom-insn above).  Currently, the following sets
18858           are defined:
18859
18860           -mcustom-fpu-cfg=60-1 is equivalent to: -mcustom-fmuls=252
18861           -mcustom-fadds=253 -mcustom-fsubs=254 -fsingle-precision-constant
18862
18863           -mcustom-fpu-cfg=60-2 is equivalent to: -mcustom-fmuls=252
18864           -mcustom-fadds=253 -mcustom-fsubs=254 -mcustom-fdivs=255
18865           -fsingle-precision-constant
18866
18867           -mcustom-fpu-cfg=72-3 is equivalent to: -mcustom-floatus=243
18868           -mcustom-fixsi=244 -mcustom-floatis=245 -mcustom-fcmpgts=246
18869           -mcustom-fcmples=249 -mcustom-fcmpeqs=250 -mcustom-fcmpnes=251
18870           -mcustom-fmuls=252 -mcustom-fadds=253 -mcustom-fsubs=254
18871           -mcustom-fdivs=255 -fsingle-precision-constant
18872
18873           Custom instruction assignments given by individual -mcustom-insn=
18874           options override those given by -mcustom-fpu-cfg=, regardless of
18875           the order of the options on the command line.
18876
18877           Note that you can gain more local control over selection of a FPU
18878           configuration by using the "target("custom-fpu-cfg=name")" function
18879           attribute or pragma.
18880
18881       These additional -m options are available for the Altera Nios II ELF
18882       (bare-metal) target:
18883
18884       -mhal
18885           Link with HAL BSP.  This suppresses linking with the GCC-provided C
18886           runtime startup and termination code, and is typically used in
18887           conjunction with -msys-crt0= to specify the location of the
18888           alternate startup code provided by the HAL BSP.
18889
18890       -msmallc
18891           Link with a limited version of the C library, -lsmallc, rather than
18892           Newlib.
18893
18894       -msys-crt0=startfile
18895           startfile is the file name of the startfile (crt0) to use when
18896           linking.  This option is only useful in conjunction with -mhal.
18897
18898       -msys-lib=systemlib
18899           systemlib is the library name of the library that provides low-
18900           level system calls required by the C library, e.g. "read" and
18901           "write".  This option is typically used to link with a library
18902           provided by a HAL BSP.
18903
18904       Nvidia PTX Options
18905
18906       These options are defined for Nvidia PTX:
18907
18908       -m32
18909       -m64
18910           Generate code for 32-bit or 64-bit ABI.
18911
18912       -mmainkernel
18913           Link in code for a __main kernel.  This is for stand-alone instead
18914           of offloading execution.
18915
18916       -moptimize
18917           Apply partitioned execution optimizations.  This is the default
18918           when any level of optimization is selected.
18919
18920       -msoft-stack
18921           Generate code that does not use ".local" memory directly for stack
18922           storage. Instead, a per-warp stack pointer is maintained
18923           explicitly. This enables variable-length stack allocation (with
18924           variable-length arrays or "alloca"), and when global memory is used
18925           for underlying storage, makes it possible to access automatic
18926           variables from other threads, or with atomic instructions. This
18927           code generation variant is used for OpenMP offloading, but the
18928           option is exposed on its own for the purpose of testing the
18929           compiler; to generate code suitable for linking into programs using
18930           OpenMP offloading, use option -mgomp.
18931
18932       -muniform-simt
18933           Switch to code generation variant that allows to execute all
18934           threads in each warp, while maintaining memory state and side
18935           effects as if only one thread in each warp was active outside of
18936           OpenMP SIMD regions.  All atomic operations and calls to runtime
18937           (malloc, free, vprintf) are conditionally executed (iff current
18938           lane index equals the master lane index), and the register being
18939           assigned is copied via a shuffle instruction from the master lane.
18940           Outside of SIMD regions lane 0 is the master; inside, each thread
18941           sees itself as the master.  Shared memory array "int __nvptx_uni[]"
18942           stores all-zeros or all-ones bitmasks for each warp, indicating
18943           current mode (0 outside of SIMD regions).  Each thread can bitwise-
18944           and the bitmask at position "tid.y" with current lane index to
18945           compute the master lane index.
18946
18947       -mgomp
18948           Generate code for use in OpenMP offloading: enables -msoft-stack
18949           and -muniform-simt options, and selects corresponding multilib
18950           variant.
18951
18952       PDP-11 Options
18953
18954       These options are defined for the PDP-11:
18955
18956       -mfpu
18957           Use hardware FPP floating point.  This is the default.  (FIS
18958           floating point on the PDP-11/40 is not supported.)
18959
18960       -msoft-float
18961           Do not use hardware floating point.
18962
18963       -mac0
18964           Return floating-point results in ac0 (fr0 in Unix assembler
18965           syntax).
18966
18967       -mno-ac0
18968           Return floating-point results in memory.  This is the default.
18969
18970       -m40
18971           Generate code for a PDP-11/40.
18972
18973       -m45
18974           Generate code for a PDP-11/45.  This is the default.
18975
18976       -m10
18977           Generate code for a PDP-11/10.
18978
18979       -mbcopy-builtin
18980           Use inline "movmemhi" patterns for copying memory.  This is the
18981           default.
18982
18983       -mbcopy
18984           Do not use inline "movmemhi" patterns for copying memory.
18985
18986       -mint16
18987       -mno-int32
18988           Use 16-bit "int".  This is the default.
18989
18990       -mint32
18991       -mno-int16
18992           Use 32-bit "int".
18993
18994       -mfloat64
18995       -mno-float32
18996           Use 64-bit "float".  This is the default.
18997
18998       -mfloat32
18999       -mno-float64
19000           Use 32-bit "float".
19001
19002       -mabshi
19003           Use "abshi2" pattern.  This is the default.
19004
19005       -mno-abshi
19006           Do not use "abshi2" pattern.
19007
19008       -mbranch-expensive
19009           Pretend that branches are expensive.  This is for experimenting
19010           with code generation only.
19011
19012       -mbranch-cheap
19013           Do not pretend that branches are expensive.  This is the default.
19014
19015       -munix-asm
19016           Use Unix assembler syntax.  This is the default when configured for
19017           pdp11-*-bsd.
19018
19019       -mdec-asm
19020           Use DEC assembler syntax.  This is the default when configured for
19021           any PDP-11 target other than pdp11-*-bsd.
19022
19023       picoChip Options
19024
19025       These -m options are defined for picoChip implementations:
19026
19027       -mae=ae_type
19028           Set the instruction set, register set, and instruction scheduling
19029           parameters for array element type ae_type.  Supported values for
19030           ae_type are ANY, MUL, and MAC.
19031
19032           -mae=ANY selects a completely generic AE type.  Code generated with
19033           this option runs on any of the other AE types.  The code is not as
19034           efficient as it would be if compiled for a specific AE type, and
19035           some types of operation (e.g., multiplication) do not work properly
19036           on all types of AE.
19037
19038           -mae=MUL selects a MUL AE type.  This is the most useful AE type
19039           for compiled code, and is the default.
19040
19041           -mae=MAC selects a DSP-style MAC AE.  Code compiled with this
19042           option may suffer from poor performance of byte (char)
19043           manipulation, since the DSP AE does not provide hardware support
19044           for byte load/stores.
19045
19046       -msymbol-as-address
19047           Enable the compiler to directly use a symbol name as an address in
19048           a load/store instruction, without first loading it into a register.
19049           Typically, the use of this option generates larger programs, which
19050           run faster than when the option isn't used.  However, the results
19051           vary from program to program, so it is left as a user option,
19052           rather than being permanently enabled.
19053
19054       -mno-inefficient-warnings
19055           Disables warnings about the generation of inefficient code.  These
19056           warnings can be generated, for example, when compiling code that
19057           performs byte-level memory operations on the MAC AE type.  The MAC
19058           AE has no hardware support for byte-level memory operations, so all
19059           byte load/stores must be synthesized from word load/store
19060           operations.  This is inefficient and a warning is generated to
19061           indicate that you should rewrite the code to avoid byte operations,
19062           or to target an AE type that has the necessary hardware support.
19063           This option disables these warnings.
19064
19065       PowerPC Options
19066
19067       These are listed under
19068
19069       PowerPC SPE Options
19070
19071       These -m options are defined for PowerPC SPE:
19072
19073       -mmfcrf
19074       -mno-mfcrf
19075       -mpopcntb
19076       -mno-popcntb
19077           You use these options to specify which instructions are available
19078           on the processor you are using.  The default value of these options
19079           is determined when configuring GCC.  Specifying the -mcpu=cpu_type
19080           overrides the specification of these options.  We recommend you use
19081           the -mcpu=cpu_type option rather than the options listed above.
19082
19083           The -mmfcrf option allows GCC to generate the move from condition
19084           register field instruction implemented on the POWER4 processor and
19085           other processors that support the PowerPC V2.01 architecture.  The
19086           -mpopcntb option allows GCC to generate the popcount and double-
19087           precision FP reciprocal estimate instruction implemented on the
19088           POWER5 processor and other processors that support the PowerPC
19089           V2.02 architecture.
19090
19091       -mcpu=cpu_type
19092           Set architecture type, register usage, and instruction scheduling
19093           parameters for machine type cpu_type.  Supported values for
19094           cpu_type are 8540, 8548, and native.
19095
19096           -mcpu=powerpc specifies pure 32-bit PowerPC (either endian), with
19097           an appropriate, generic processor model assumed for scheduling
19098           purposes.
19099
19100           Specifying native as cpu type detects and selects the architecture
19101           option that corresponds to the host processor of the system
19102           performing the compilation.  -mcpu=native has no effect if GCC does
19103           not recognize the processor.
19104
19105           The other options specify a specific processor.  Code generated
19106           under those options runs best on that processor, and may not run at
19107           all on others.
19108
19109           The -mcpu options automatically enable or disable the following
19110           options:
19111
19112           -mhard-float  -mmfcrf  -mmultiple -mpopcntb -mpopcntd
19113           -msingle-float -mdouble-float -mfloat128
19114
19115           The particular options set for any particular CPU varies between
19116           compiler versions, depending on what setting seems to produce
19117           optimal code for that CPU; it doesn't necessarily reflect the
19118           actual hardware's capabilities.  If you wish to set an individual
19119           option to a particular value, you may specify it after the -mcpu
19120           option, like -mcpu=8548.
19121
19122       -mtune=cpu_type
19123           Set the instruction scheduling parameters for machine type
19124           cpu_type, but do not set the architecture type or register usage,
19125           as -mcpu=cpu_type does.  The same values for cpu_type are used for
19126           -mtune as for -mcpu.  If both are specified, the code generated
19127           uses the architecture and registers set by -mcpu, but the
19128           scheduling parameters set by -mtune.
19129
19130       -msecure-plt
19131           Generate code that allows ld and ld.so to build executables and
19132           shared libraries with non-executable ".plt" and ".got" sections.
19133           This is a PowerPC 32-bit SYSV ABI option.
19134
19135       -mbss-plt
19136           Generate code that uses a BSS ".plt" section that ld.so fills in,
19137           and requires ".plt" and ".got" sections that are both writable and
19138           executable.  This is a PowerPC 32-bit SYSV ABI option.
19139
19140       -misel
19141       -mno-isel
19142           This switch enables or disables the generation of ISEL
19143           instructions.
19144
19145       -misel=yes/no
19146           This switch has been deprecated.  Use -misel and -mno-isel instead.
19147
19148       -mspe
19149       -mno-spe
19150           This switch enables or disables the generation of SPE simd
19151           instructions.
19152
19153       -mspe=yes/no
19154           This option has been deprecated.  Use -mspe and -mno-spe instead.
19155
19156       -mfloat128
19157       -mno-float128
19158           Enable/disable the __float128 keyword for IEEE 128-bit floating
19159           point and use either software emulation for IEEE 128-bit floating
19160           point or hardware instructions.
19161
19162       -mfloat-gprs=yes/single/double/no
19163       -mfloat-gprs
19164           This switch enables or disables the generation of floating-point
19165           operations on the general-purpose registers for architectures that
19166           support it.
19167
19168           The argument yes or single enables the use of single-precision
19169           floating-point operations.
19170
19171           The argument double enables the use of single and double-precision
19172           floating-point operations.
19173
19174           The argument no disables floating-point operations on the general-
19175           purpose registers.
19176
19177           This option is currently only available on the MPC854x.
19178
19179       -mfull-toc
19180       -mno-fp-in-toc
19181       -mno-sum-in-toc
19182       -mminimal-toc
19183           Modify generation of the TOC (Table Of Contents), which is created
19184           for every executable file.  The -mfull-toc option is selected by
19185           default.  In that case, GCC allocates at least one TOC entry for
19186           each unique non-automatic variable reference in your program.  GCC
19187           also places floating-point constants in the TOC.  However, only
19188           16,384 entries are available in the TOC.
19189
19190           If you receive a linker error message that saying you have
19191           overflowed the available TOC space, you can reduce the amount of
19192           TOC space used with the -mno-fp-in-toc and -mno-sum-in-toc options.
19193           -mno-fp-in-toc prevents GCC from putting floating-point constants
19194           in the TOC and -mno-sum-in-toc forces GCC to generate code to
19195           calculate the sum of an address and a constant at run time instead
19196           of putting that sum into the TOC.  You may specify one or both of
19197           these options.  Each causes GCC to produce very slightly slower and
19198           larger code at the expense of conserving TOC space.
19199
19200           If you still run out of space in the TOC even when you specify both
19201           of these options, specify -mminimal-toc instead.  This option
19202           causes GCC to make only one TOC entry for every file.  When you
19203           specify this option, GCC produces code that is slower and larger
19204           but which uses extremely little TOC space.  You may wish to use
19205           this option only on files that contain less frequently-executed
19206           code.
19207
19208       -maix32
19209           Disables the 64-bit ABI.  GCC defaults to -maix32.
19210
19211       -mxl-compat
19212       -mno-xl-compat
19213           Produce code that conforms more closely to IBM XL compiler
19214           semantics when using AIX-compatible ABI.  Pass floating-point
19215           arguments to prototyped functions beyond the register save area
19216           (RSA) on the stack in addition to argument FPRs.  Do not assume
19217           that most significant double in 128-bit long double value is
19218           properly rounded when comparing values and converting to double.
19219           Use XL symbol names for long double support routines.
19220
19221           The AIX calling convention was extended but not initially
19222           documented to handle an obscure K&R C case of calling a function
19223           that takes the address of its arguments with fewer arguments than
19224           declared.  IBM XL compilers access floating-point arguments that do
19225           not fit in the RSA from the stack when a subroutine is compiled
19226           without optimization.  Because always storing floating-point
19227           arguments on the stack is inefficient and rarely needed, this
19228           option is not enabled by default and only is necessary when calling
19229           subroutines compiled by IBM XL compilers without optimization.
19230
19231       -malign-natural
19232       -malign-power
19233           On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
19234           -malign-natural overrides the ABI-defined alignment of larger
19235           types, such as floating-point doubles, on their natural size-based
19236           boundary.  The option -malign-power instructs GCC to follow the
19237           ABI-specified alignment rules.  GCC defaults to the standard
19238           alignment defined in the ABI.
19239
19240           On 64-bit Darwin, natural alignment is the default, and
19241           -malign-power is not supported.
19242
19243       -msoft-float
19244       -mhard-float
19245           Generate code that does not use (uses) the floating-point register
19246           set.  Software floating-point emulation is provided if you use the
19247           -msoft-float option, and pass the option to GCC when linking.
19248
19249       -msingle-float
19250       -mdouble-float
19251           Generate code for single- or double-precision floating-point
19252           operations.  -mdouble-float implies -msingle-float.
19253
19254       -mmultiple
19255       -mno-multiple
19256           Generate code that uses (does not use) the load multiple word
19257           instructions and the store multiple word instructions.  These
19258           instructions are generated by default on POWER systems, and not
19259           generated on PowerPC systems.  Do not use -mmultiple on little-
19260           endian PowerPC systems, since those instructions do not work when
19261           the processor is in little-endian mode.  The exceptions are PPC740
19262           and PPC750 which permit these instructions in little-endian mode.
19263
19264       -mupdate
19265       -mno-update
19266           Generate code that uses (does not use) the load or store
19267           instructions that update the base register to the address of the
19268           calculated memory location.  These instructions are generated by
19269           default.  If you use -mno-update, there is a small window between
19270           the time that the stack pointer is updated and the address of the
19271           previous frame is stored, which means code that walks the stack
19272           frame across interrupts or signals may get corrupted data.
19273
19274       -mavoid-indexed-addresses
19275       -mno-avoid-indexed-addresses
19276           Generate code that tries to avoid (not avoid) the use of indexed
19277           load or store instructions. These instructions can incur a
19278           performance penalty on Power6 processors in certain situations,
19279           such as when stepping through large arrays that cross a 16M
19280           boundary.  This option is enabled by default when targeting Power6
19281           and disabled otherwise.
19282
19283       -mfused-madd
19284       -mno-fused-madd
19285           Generate code that uses (does not use) the floating-point multiply
19286           and accumulate instructions.  These instructions are generated by
19287           default if hardware floating point is used.  The machine-dependent
19288           -mfused-madd option is now mapped to the machine-independent
19289           -ffp-contract=fast option, and -mno-fused-madd is mapped to
19290           -ffp-contract=off.
19291
19292       -mno-strict-align
19293       -mstrict-align
19294           On System V.4 and embedded PowerPC systems do not (do) assume that
19295           unaligned memory references are handled by the system.
19296
19297       -mrelocatable
19298       -mno-relocatable
19299           Generate code that allows (does not allow) a static executable to
19300           be relocated to a different address at run time.  A simple embedded
19301           PowerPC system loader should relocate the entire contents of
19302           ".got2" and 4-byte locations listed in the ".fixup" section, a
19303           table of 32-bit addresses generated by this option.  For this to
19304           work, all objects linked together must be compiled with
19305           -mrelocatable or -mrelocatable-lib.  -mrelocatable code aligns the
19306           stack to an 8-byte boundary.
19307
19308       -mrelocatable-lib
19309       -mno-relocatable-lib
19310           Like -mrelocatable, -mrelocatable-lib generates a ".fixup" section
19311           to allow static executables to be relocated at run time, but
19312           -mrelocatable-lib does not use the smaller stack alignment of
19313           -mrelocatable.  Objects compiled with -mrelocatable-lib may be
19314           linked with objects compiled with any combination of the
19315           -mrelocatable options.
19316
19317       -mno-toc
19318       -mtoc
19319           On System V.4 and embedded PowerPC systems do not (do) assume that
19320           register 2 contains a pointer to a global area pointing to the
19321           addresses used in the program.
19322
19323       -mlittle
19324       -mlittle-endian
19325           On System V.4 and embedded PowerPC systems compile code for the
19326           processor in little-endian mode.  The -mlittle-endian option is the
19327           same as -mlittle.
19328
19329       -mbig
19330       -mbig-endian
19331           On System V.4 and embedded PowerPC systems compile code for the
19332           processor in big-endian mode.  The -mbig-endian option is the same
19333           as -mbig.
19334
19335       -mdynamic-no-pic
19336           On Darwin and Mac OS X systems, compile code so that it is not
19337           relocatable, but that its external references are relocatable.  The
19338           resulting code is suitable for applications, but not shared
19339           libraries.
19340
19341       -msingle-pic-base
19342           Treat the register used for PIC addressing as read-only, rather
19343           than loading it in the prologue for each function.  The runtime
19344           system is responsible for initializing this register with an
19345           appropriate value before execution begins.
19346
19347       -mprioritize-restricted-insns=priority
19348           This option controls the priority that is assigned to dispatch-slot
19349           restricted instructions during the second scheduling pass.  The
19350           argument priority takes the value 0, 1, or 2 to assign no, highest,
19351           or second-highest (respectively) priority to dispatch-slot
19352           restricted instructions.
19353
19354       -msched-costly-dep=dependence_type
19355           This option controls which dependences are considered costly by the
19356           target during instruction scheduling.  The argument dependence_type
19357           takes one of the following values:
19358
19359           no  No dependence is costly.
19360
19361           all All dependences are costly.
19362
19363           true_store_to_load
19364               A true dependence from store to load is costly.
19365
19366           store_to_load
19367               Any dependence from store to load is costly.
19368
19369           number
19370               Any dependence for which the latency is greater than or equal
19371               to number is costly.
19372
19373       -minsert-sched-nops=scheme
19374           This option controls which NOP insertion scheme is used during the
19375           second scheduling pass.  The argument scheme takes one of the
19376           following values:
19377
19378           no  Don't insert NOPs.
19379
19380           pad Pad with NOPs any dispatch group that has vacant issue slots,
19381               according to the scheduler's grouping.
19382
19383           regroup_exact
19384               Insert NOPs to force costly dependent insns into separate
19385               groups.  Insert exactly as many NOPs as needed to force an insn
19386               to a new group, according to the estimated processor grouping.
19387
19388           number
19389               Insert NOPs to force costly dependent insns into separate
19390               groups.  Insert number NOPs to force an insn to a new group.
19391
19392       -mcall-sysv
19393           On System V.4 and embedded PowerPC systems compile code using
19394           calling conventions that adhere to the March 1995 draft of the
19395           System V Application Binary Interface, PowerPC processor
19396           supplement.  This is the default unless you configured GCC using
19397           powerpc-*-eabiaix.
19398
19399       -mcall-sysv-eabi
19400       -mcall-eabi
19401           Specify both -mcall-sysv and -meabi options.
19402
19403       -mcall-sysv-noeabi
19404           Specify both -mcall-sysv and -mno-eabi options.
19405
19406       -mcall-aixdesc
19407           On System V.4 and embedded PowerPC systems compile code for the AIX
19408           operating system.
19409
19410       -mcall-linux
19411           On System V.4 and embedded PowerPC systems compile code for the
19412           Linux-based GNU system.
19413
19414       -mcall-freebsd
19415           On System V.4 and embedded PowerPC systems compile code for the
19416           FreeBSD operating system.
19417
19418       -mcall-netbsd
19419           On System V.4 and embedded PowerPC systems compile code for the
19420           NetBSD operating system.
19421
19422       -mcall-openbsd
19423           On System V.4 and embedded PowerPC systems compile code for the
19424           OpenBSD operating system.
19425
19426       -maix-struct-return
19427           Return all structures in memory (as specified by the AIX ABI).
19428
19429       -msvr4-struct-return
19430           Return structures smaller than 8 bytes in registers (as specified
19431           by the SVR4 ABI).
19432
19433       -mabi=abi-type
19434           Extend the current ABI with a particular extension, or remove such
19435           extension.  Valid values are altivec, no-altivec, spe, no-spe,
19436           ibmlongdouble, ieeelongdouble, elfv1, elfv2.
19437
19438       -mabi=spe
19439           Extend the current ABI with SPE ABI extensions.  This does not
19440           change the default ABI, instead it adds the SPE ABI extensions to
19441           the current ABI.
19442
19443       -mabi=no-spe
19444           Disable Book-E SPE ABI extensions for the current ABI.
19445
19446       -mabi=ibmlongdouble
19447           Change the current ABI to use IBM extended-precision long double.
19448           This is not likely to work if your system defaults to using IEEE
19449           extended-precision long double.  If you change the long double type
19450           from IEEE extended-precision, the compiler will issue a warning
19451           unless you use the -Wno-psabi option.  Requires -mlong-double-128
19452           to be enabled.
19453
19454       -mabi=ieeelongdouble
19455           Change the current ABI to use IEEE extended-precision long double.
19456           This is not likely to work if your system defaults to using IBM
19457           extended-precision long double.  If you change the long double type
19458           from IBM extended-precision, the compiler will issue a warning
19459           unless you use the -Wno-psabi option.  Requires -mlong-double-128
19460           to be enabled.
19461
19462       -mabi=elfv1
19463           Change the current ABI to use the ELFv1 ABI.  This is the default
19464           ABI for big-endian PowerPC 64-bit Linux.  Overriding the default
19465           ABI requires special system support and is likely to fail in
19466           spectacular ways.
19467
19468       -mabi=elfv2
19469           Change the current ABI to use the ELFv2 ABI.  This is the default
19470           ABI for little-endian PowerPC 64-bit Linux.  Overriding the default
19471           ABI requires special system support and is likely to fail in
19472           spectacular ways.
19473
19474       -mgnu-attribute
19475       -mno-gnu-attribute
19476           Emit .gnu_attribute assembly directives to set tag/value pairs in a
19477           .gnu.attributes section that specify ABI variations in function
19478           parameters or return values.
19479
19480       -mprototype
19481       -mno-prototype
19482           On System V.4 and embedded PowerPC systems assume that all calls to
19483           variable argument functions are properly prototyped.  Otherwise,
19484           the compiler must insert an instruction before every non-prototyped
19485           call to set or clear bit 6 of the condition code register ("CR") to
19486           indicate whether floating-point values are passed in the floating-
19487           point registers in case the function takes variable arguments.
19488           With -mprototype, only calls to prototyped variable argument
19489           functions set or clear the bit.
19490
19491       -msim
19492           On embedded PowerPC systems, assume that the startup module is
19493           called sim-crt0.o and that the standard C libraries are libsim.a
19494           and libc.a.  This is the default for powerpc-*-eabisim
19495           configurations.
19496
19497       -mmvme
19498           On embedded PowerPC systems, assume that the startup module is
19499           called crt0.o and the standard C libraries are libmvme.a and
19500           libc.a.
19501
19502       -mads
19503           On embedded PowerPC systems, assume that the startup module is
19504           called crt0.o and the standard C libraries are libads.a and libc.a.
19505
19506       -myellowknife
19507           On embedded PowerPC systems, assume that the startup module is
19508           called crt0.o and the standard C libraries are libyk.a and libc.a.
19509
19510       -mvxworks
19511           On System V.4 and embedded PowerPC systems, specify that you are
19512           compiling for a VxWorks system.
19513
19514       -memb
19515           On embedded PowerPC systems, set the "PPC_EMB" bit in the ELF flags
19516           header to indicate that eabi extended relocations are used.
19517
19518       -meabi
19519       -mno-eabi
19520           On System V.4 and embedded PowerPC systems do (do not) adhere to
19521           the Embedded Applications Binary Interface (EABI), which is a set
19522           of modifications to the System V.4 specifications.  Selecting
19523           -meabi means that the stack is aligned to an 8-byte boundary, a
19524           function "__eabi" is called from "main" to set up the EABI
19525           environment, and the -msdata option can use both "r2" and "r13" to
19526           point to two separate small data areas.  Selecting -mno-eabi means
19527           that the stack is aligned to a 16-byte boundary, no EABI
19528           initialization function is called from "main", and the -msdata
19529           option only uses "r13" to point to a single small data area.  The
19530           -meabi option is on by default if you configured GCC using one of
19531           the powerpc*-*-eabi* options.
19532
19533       -msdata=eabi
19534           On System V.4 and embedded PowerPC systems, put small initialized
19535           "const" global and static data in the ".sdata2" section, which is
19536           pointed to by register "r2".  Put small initialized non-"const"
19537           global and static data in the ".sdata" section, which is pointed to
19538           by register "r13".  Put small uninitialized global and static data
19539           in the ".sbss" section, which is adjacent to the ".sdata" section.
19540           The -msdata=eabi option is incompatible with the -mrelocatable
19541           option.  The -msdata=eabi option also sets the -memb option.
19542
19543       -msdata=sysv
19544           On System V.4 and embedded PowerPC systems, put small global and
19545           static data in the ".sdata" section, which is pointed to by
19546           register "r13".  Put small uninitialized global and static data in
19547           the ".sbss" section, which is adjacent to the ".sdata" section.
19548           The -msdata=sysv option is incompatible with the -mrelocatable
19549           option.
19550
19551       -msdata=default
19552       -msdata
19553           On System V.4 and embedded PowerPC systems, if -meabi is used,
19554           compile code the same as -msdata=eabi, otherwise compile code the
19555           same as -msdata=sysv.
19556
19557       -msdata=data
19558           On System V.4 and embedded PowerPC systems, put small global data
19559           in the ".sdata" section.  Put small uninitialized global data in
19560           the ".sbss" section.  Do not use register "r13" to address small
19561           data however.  This is the default behavior unless other -msdata
19562           options are used.
19563
19564       -msdata=none
19565       -mno-sdata
19566           On embedded PowerPC systems, put all initialized global and static
19567           data in the ".data" section, and all uninitialized data in the
19568           ".bss" section.
19569
19570       -mblock-move-inline-limit=num
19571           Inline all block moves (such as calls to "memcpy" or structure
19572           copies) less than or equal to num bytes.  The minimum value for num
19573           is 32 bytes on 32-bit targets and 64 bytes on 64-bit targets.  The
19574           default value is target-specific.
19575
19576       -G num
19577           On embedded PowerPC systems, put global and static items less than
19578           or equal to num bytes into the small data or BSS sections instead
19579           of the normal data or BSS section.  By default, num is 8.  The -G
19580           num switch is also passed to the linker.  All modules should be
19581           compiled with the same -G num value.
19582
19583       -mregnames
19584       -mno-regnames
19585           On System V.4 and embedded PowerPC systems do (do not) emit
19586           register names in the assembly language output using symbolic
19587           forms.
19588
19589       -mlongcall
19590       -mno-longcall
19591           By default assume that all calls are far away so that a longer and
19592           more expensive calling sequence is required.  This is required for
19593           calls farther than 32 megabytes (33,554,432 bytes) from the current
19594           location.  A short call is generated if the compiler knows the call
19595           cannot be that far away.  This setting can be overridden by the
19596           "shortcall" function attribute, or by "#pragma longcall(0)".
19597
19598           Some linkers are capable of detecting out-of-range calls and
19599           generating glue code on the fly.  On these systems, long calls are
19600           unnecessary and generate slower code.  As of this writing, the AIX
19601           linker can do this, as can the GNU linker for PowerPC/64.  It is
19602           planned to add this feature to the GNU linker for 32-bit PowerPC
19603           systems as well.
19604
19605           In the future, GCC may ignore all longcall specifications when the
19606           linker is known to generate glue.
19607
19608       -mtls-markers
19609       -mno-tls-markers
19610           Mark (do not mark) calls to "__tls_get_addr" with a relocation
19611           specifying the function argument.  The relocation allows the linker
19612           to reliably associate function call with argument setup
19613           instructions for TLS optimization, which in turn allows GCC to
19614           better schedule the sequence.
19615
19616       -mrecip
19617       -mno-recip
19618           This option enables use of the reciprocal estimate and reciprocal
19619           square root estimate instructions with additional Newton-Raphson
19620           steps to increase precision instead of doing a divide or square
19621           root and divide for floating-point arguments.  You should use the
19622           -ffast-math option when using -mrecip (or at least
19623           -funsafe-math-optimizations, -ffinite-math-only, -freciprocal-math
19624           and -fno-trapping-math).  Note that while the throughput of the
19625           sequence is generally higher than the throughput of the non-
19626           reciprocal instruction, the precision of the sequence can be
19627           decreased by up to 2 ulp (i.e. the inverse of 1.0 equals
19628           0.99999994) for reciprocal square roots.
19629
19630       -mrecip=opt
19631           This option controls which reciprocal estimate instructions may be
19632           used.  opt is a comma-separated list of options, which may be
19633           preceded by a "!" to invert the option:
19634
19635           all Enable all estimate instructions.
19636
19637           default
19638               Enable the default instructions, equivalent to -mrecip.
19639
19640           none
19641               Disable all estimate instructions, equivalent to -mno-recip.
19642
19643           div Enable the reciprocal approximation instructions for both
19644               single and double precision.
19645
19646           divf
19647               Enable the single-precision reciprocal approximation
19648               instructions.
19649
19650           divd
19651               Enable the double-precision reciprocal approximation
19652               instructions.
19653
19654           rsqrt
19655               Enable the reciprocal square root approximation instructions
19656               for both single and double precision.
19657
19658           rsqrtf
19659               Enable the single-precision reciprocal square root
19660               approximation instructions.
19661
19662           rsqrtd
19663               Enable the double-precision reciprocal square root
19664               approximation instructions.
19665
19666           So, for example, -mrecip=all,!rsqrtd enables all of the reciprocal
19667           estimate instructions, except for the "FRSQRTE", "XSRSQRTEDP", and
19668           "XVRSQRTEDP" instructions which handle the double-precision
19669           reciprocal square root calculations.
19670
19671       -mrecip-precision
19672       -mno-recip-precision
19673           Assume (do not assume) that the reciprocal estimate instructions
19674           provide higher-precision estimates than is mandated by the PowerPC
19675           ABI.  Selecting -mcpu=power6, -mcpu=power7 or -mcpu=power8
19676           automatically selects -mrecip-precision.  The double-precision
19677           square root estimate instructions are not generated by default on
19678           low-precision machines, since they do not provide an estimate that
19679           converges after three steps.
19680
19681       -mpointers-to-nested-functions
19682       -mno-pointers-to-nested-functions
19683           Generate (do not generate) code to load up the static chain
19684           register ("r11") when calling through a pointer on AIX and 64-bit
19685           Linux systems where a function pointer points to a 3-word
19686           descriptor giving the function address, TOC value to be loaded in
19687           register "r2", and static chain value to be loaded in register
19688           "r11".  The -mpointers-to-nested-functions is on by default.  You
19689           cannot call through pointers to nested functions or pointers to
19690           functions compiled in other languages that use the static chain if
19691           you use -mno-pointers-to-nested-functions.
19692
19693       -msave-toc-indirect
19694       -mno-save-toc-indirect
19695           Generate (do not generate) code to save the TOC value in the
19696           reserved stack location in the function prologue if the function
19697           calls through a pointer on AIX and 64-bit Linux systems.  If the
19698           TOC value is not saved in the prologue, it is saved just before the
19699           call through the pointer.  The -mno-save-toc-indirect option is the
19700           default.
19701
19702       -mcompat-align-parm
19703       -mno-compat-align-parm
19704           Generate (do not generate) code to pass structure parameters with a
19705           maximum alignment of 64 bits, for compatibility with older versions
19706           of GCC.
19707
19708           Older versions of GCC (prior to 4.9.0) incorrectly did not align a
19709           structure parameter on a 128-bit boundary when that structure
19710           contained a member requiring 128-bit alignment.  This is corrected
19711           in more recent versions of GCC.  This option may be used to
19712           generate code that is compatible with functions compiled with older
19713           versions of GCC.
19714
19715           The -mno-compat-align-parm option is the default.
19716
19717       -mstack-protector-guard=guard
19718       -mstack-protector-guard-reg=reg
19719       -mstack-protector-guard-offset=offset
19720       -mstack-protector-guard-symbol=symbol
19721           Generate stack protection code using canary at guard.  Supported
19722           locations are global for global canary or tls for per-thread canary
19723           in the TLS block (the default with GNU libc version 2.4 or later).
19724
19725           With the latter choice the options -mstack-protector-guard-reg=reg
19726           and -mstack-protector-guard-offset=offset furthermore specify which
19727           register to use as base register for reading the canary, and from
19728           what offset from that base register. The default for those is as
19729           specified in the relevant ABI.
19730           -mstack-protector-guard-symbol=symbol overrides the offset with a
19731           symbol reference to a canary in the TLS block.
19732
19733       RISC-V Options
19734
19735       These command-line options are defined for RISC-V targets:
19736
19737       -mbranch-cost=n
19738           Set the cost of branches to roughly n instructions.
19739
19740       -mplt
19741       -mno-plt
19742           When generating PIC code, do or don't allow the use of PLTs.
19743           Ignored for non-PIC.  The default is -mplt.
19744
19745       -mabi=ABI-string
19746           Specify integer and floating-point calling convention.  ABI-string
19747           contains two parts: the size of integer types and the registers
19748           used for floating-point types.  For example -march=rv64ifd
19749           -mabi=lp64d means that long and pointers are 64-bit (implicitly
19750           defining int to be 32-bit), and that floating-point values up to 64
19751           bits wide are passed in F registers.  Contrast this with
19752           -march=rv64ifd -mabi=lp64f, which still allows the compiler to
19753           generate code that uses the F and D extensions but only allows
19754           floating-point values up to 32 bits long to be passed in registers;
19755           or -march=rv64ifd -mabi=lp64, in which no floating-point arguments
19756           will be passed in registers.
19757
19758           The default for this argument is system dependent, users who want a
19759           specific calling convention should specify one explicitly.  The
19760           valid calling conventions are: ilp32, ilp32f, ilp32d, lp64, lp64f,
19761           and lp64d.  Some calling conventions are impossible to implement on
19762           some ISAs: for example, -march=rv32if -mabi=ilp32d is invalid
19763           because the ABI requires 64-bit values be passed in F registers,
19764           but F registers are only 32 bits wide.
19765
19766       -mfdiv
19767       -mno-fdiv
19768           Do or don't use hardware floating-point divide and square root
19769           instructions.  This requires the F or D extensions for floating-
19770           point registers.  The default is to use them if the specified
19771           architecture has these instructions.
19772
19773       -mdiv
19774       -mno-div
19775           Do or don't use hardware instructions for integer division.  This
19776           requires the M extension.  The default is to use them if the
19777           specified architecture has these instructions.
19778
19779       -march=ISA-string
19780           Generate code for given RISC-V ISA (e.g. rv64im).  ISA strings must
19781           be lower-case.  Examples include rv64i, rv32g, and rv32imaf.
19782
19783       -mtune=processor-string
19784           Optimize the output for the given processor, specified by
19785           microarchitecture name.
19786
19787       -mpreferred-stack-boundary=num
19788           Attempt to keep the stack boundary aligned to a 2 raised to num
19789           byte boundary.  If -mpreferred-stack-boundary is not specified, the
19790           default is 4 (16 bytes or 128-bits).
19791
19792           Warning: If you use this switch, then you must build all modules
19793           with the same value, including any libraries.  This includes the
19794           system libraries and startup modules.
19795
19796       -msmall-data-limit=n
19797           Put global and static data smaller than n bytes into a special
19798           section (on some targets).
19799
19800       -msave-restore
19801       -mno-save-restore
19802           Do or don't use smaller but slower prologue and epilogue code that
19803           uses library function calls.  The default is to use fast inline
19804           prologues and epilogues.
19805
19806       -mstrict-align
19807       -mno-strict-align
19808           Do not or do generate unaligned memory accesses.  The default is
19809           set depending on whether the processor we are optimizing for
19810           supports fast unaligned access or not.
19811
19812       -mcmodel=medlow
19813           Generate code for the medium-low code model. The program and its
19814           statically defined symbols must lie within a single 2 GiB address
19815           range and must lie between absolute addresses -2 GiB and +2 GiB.
19816           Programs can be statically or dynamically linked. This is the
19817           default code model.
19818
19819       -mcmodel=medany
19820           Generate code for the medium-any code model. The program and its
19821           statically defined symbols must be within any single 2 GiB address
19822           range. Programs can be statically or dynamically linked.
19823
19824       -mexplicit-relocs
19825       -mno-exlicit-relocs
19826           Use or do not use assembler relocation operators when dealing with
19827           symbolic addresses.  The alternative is to use assembler macros
19828           instead, which may limit optimization.
19829
19830       -mrelax
19831       -mno-relax
19832           Take advantage of linker relaxations to reduce the number of
19833           instructions required to materialize symbol addresses. The default
19834           is to take advantage of linker relaxations.
19835
19836       RL78 Options
19837
19838       -msim
19839           Links in additional target libraries to support operation within a
19840           simulator.
19841
19842       -mmul=none
19843       -mmul=g10
19844       -mmul=g13
19845       -mmul=g14
19846       -mmul=rl78
19847           Specifies the type of hardware multiplication and division support
19848           to be used.  The simplest is "none", which uses software for both
19849           multiplication and division.  This is the default.  The "g13" value
19850           is for the hardware multiply/divide peripheral found on the
19851           RL78/G13 (S2 core) targets.  The "g14" value selects the use of the
19852           multiplication and division instructions supported by the RL78/G14
19853           (S3 core) parts.  The value "rl78" is an alias for "g14" and the
19854           value "mg10" is an alias for "none".
19855
19856           In addition a C preprocessor macro is defined, based upon the
19857           setting of this option.  Possible values are: "__RL78_MUL_NONE__",
19858           "__RL78_MUL_G13__" or "__RL78_MUL_G14__".
19859
19860       -mcpu=g10
19861       -mcpu=g13
19862       -mcpu=g14
19863       -mcpu=rl78
19864           Specifies the RL78 core to target.  The default is the G14 core,
19865           also known as an S3 core or just RL78.  The G13 or S2 core does not
19866           have multiply or divide instructions, instead it uses a hardware
19867           peripheral for these operations.  The G10 or S1 core does not have
19868           register banks, so it uses a different calling convention.
19869
19870           If this option is set it also selects the type of hardware multiply
19871           support to use, unless this is overridden by an explicit -mmul=none
19872           option on the command line.  Thus specifying -mcpu=g13 enables the
19873           use of the G13 hardware multiply peripheral and specifying
19874           -mcpu=g10 disables the use of hardware multiplications altogether.
19875
19876           Note, although the RL78/G14 core is the default target, specifying
19877           -mcpu=g14 or -mcpu=rl78 on the command line does change the
19878           behavior of the toolchain since it also enables G14 hardware
19879           multiply support.  If these options are not specified on the
19880           command line then software multiplication routines will be used
19881           even though the code targets the RL78 core.  This is for backwards
19882           compatibility with older toolchains which did not have hardware
19883           multiply and divide support.
19884
19885           In addition a C preprocessor macro is defined, based upon the
19886           setting of this option.  Possible values are: "__RL78_G10__",
19887           "__RL78_G13__" or "__RL78_G14__".
19888
19889       -mg10
19890       -mg13
19891       -mg14
19892       -mrl78
19893           These are aliases for the corresponding -mcpu= option.  They are
19894           provided for backwards compatibility.
19895
19896       -mallregs
19897           Allow the compiler to use all of the available registers.  By
19898           default registers "r24..r31" are reserved for use in interrupt
19899           handlers.  With this option enabled these registers can be used in
19900           ordinary functions as well.
19901
19902       -m64bit-doubles
19903       -m32bit-doubles
19904           Make the "double" data type be 64 bits (-m64bit-doubles) or 32 bits
19905           (-m32bit-doubles) in size.  The default is -m32bit-doubles.
19906
19907       -msave-mduc-in-interrupts
19908       -mno-save-mduc-in-interrupts
19909           Specifies that interrupt handler functions should preserve the MDUC
19910           registers.  This is only necessary if normal code might use the
19911           MDUC registers, for example because it performs multiplication and
19912           division operations.  The default is to ignore the MDUC registers
19913           as this makes the interrupt handlers faster.  The target option
19914           -mg13 needs to be passed for this to work as this feature is only
19915           available on the G13 target (S2 core).  The MDUC registers will
19916           only be saved if the interrupt handler performs a multiplication or
19917           division operation or it calls another function.
19918
19919       IBM RS/6000 and PowerPC Options
19920
19921       These -m options are defined for the IBM RS/6000 and PowerPC:
19922
19923       -mpowerpc-gpopt
19924       -mno-powerpc-gpopt
19925       -mpowerpc-gfxopt
19926       -mno-powerpc-gfxopt
19927       -mpowerpc64
19928       -mno-powerpc64
19929       -mmfcrf
19930       -mno-mfcrf
19931       -mpopcntb
19932       -mno-popcntb
19933       -mpopcntd
19934       -mno-popcntd
19935       -mfprnd
19936       -mno-fprnd
19937       -mcmpb
19938       -mno-cmpb
19939       -mmfpgpr
19940       -mno-mfpgpr
19941       -mhard-dfp
19942       -mno-hard-dfp
19943           You use these options to specify which instructions are available
19944           on the processor you are using.  The default value of these options
19945           is determined when configuring GCC.  Specifying the -mcpu=cpu_type
19946           overrides the specification of these options.  We recommend you use
19947           the -mcpu=cpu_type option rather than the options listed above.
19948
19949           Specifying -mpowerpc-gpopt allows GCC to use the optional PowerPC
19950           architecture instructions in the General Purpose group, including
19951           floating-point square root.  Specifying -mpowerpc-gfxopt allows GCC
19952           to use the optional PowerPC architecture instructions in the
19953           Graphics group, including floating-point select.
19954
19955           The -mmfcrf option allows GCC to generate the move from condition
19956           register field instruction implemented on the POWER4 processor and
19957           other processors that support the PowerPC V2.01 architecture.  The
19958           -mpopcntb option allows GCC to generate the popcount and double-
19959           precision FP reciprocal estimate instruction implemented on the
19960           POWER5 processor and other processors that support the PowerPC
19961           V2.02 architecture.  The -mpopcntd option allows GCC to generate
19962           the popcount instruction implemented on the POWER7 processor and
19963           other processors that support the PowerPC V2.06 architecture.  The
19964           -mfprnd option allows GCC to generate the FP round to integer
19965           instructions implemented on the POWER5+ processor and other
19966           processors that support the PowerPC V2.03 architecture.  The -mcmpb
19967           option allows GCC to generate the compare bytes instruction
19968           implemented on the POWER6 processor and other processors that
19969           support the PowerPC V2.05 architecture.  The -mmfpgpr option allows
19970           GCC to generate the FP move to/from general-purpose register
19971           instructions implemented on the POWER6X processor and other
19972           processors that support the extended PowerPC V2.05 architecture.
19973           The -mhard-dfp option allows GCC to generate the decimal floating-
19974           point instructions implemented on some POWER processors.
19975
19976           The -mpowerpc64 option allows GCC to generate the additional 64-bit
19977           instructions that are found in the full PowerPC64 architecture and
19978           to treat GPRs as 64-bit, doubleword quantities.  GCC defaults to
19979           -mno-powerpc64.
19980
19981       -mcpu=cpu_type
19982           Set architecture type, register usage, and instruction scheduling
19983           parameters for machine type cpu_type.  Supported values for
19984           cpu_type are 401, 403, 405, 405fp, 440, 440fp, 464, 464fp, 476,
19985           476fp, 505, 601, 602, 603, 603e, 604, 604e, 620, 630, 740, 7400,
19986           7450, 750, 801, 821, 823, 860, 970, 8540, a2, e300c2, e300c3,
19987           e500mc, e500mc64, e5500, e6500, ec603e, G3, G4, G5, titan, power3,
19988           power4, power5, power5+, power6, power6x, power7, power8, power9,
19989           powerpc, powerpc64, powerpc64le, rs64, and native.
19990
19991           -mcpu=powerpc, -mcpu=powerpc64, and -mcpu=powerpc64le specify pure
19992           32-bit PowerPC (either endian), 64-bit big endian PowerPC and
19993           64-bit little endian PowerPC architecture machine types, with an
19994           appropriate, generic processor model assumed for scheduling
19995           purposes.
19996
19997           Specifying native as cpu type detects and selects the architecture
19998           option that corresponds to the host processor of the system
19999           performing the compilation.  -mcpu=native has no effect if GCC does
20000           not recognize the processor.
20001
20002           The other options specify a specific processor.  Code generated
20003           under those options runs best on that processor, and may not run at
20004           all on others.
20005
20006           The -mcpu options automatically enable or disable the following
20007           options:
20008
20009           -maltivec  -mfprnd  -mhard-float  -mmfcrf  -mmultiple -mpopcntb
20010           -mpopcntd  -mpowerpc64 -mpowerpc-gpopt  -mpowerpc-gfxopt
20011           -msingle-float -mdouble-float -msimple-fpu  -mmulhw  -mdlmzb
20012           -mmfpgpr -mvsx -mcrypto -mhtm -mpower8-fusion -mpower8-vector
20013           -mquad-memory -mquad-memory-atomic -mfloat128 -mfloat128-hardware
20014
20015           The particular options set for any particular CPU varies between
20016           compiler versions, depending on what setting seems to produce
20017           optimal code for that CPU; it doesn't necessarily reflect the
20018           actual hardware's capabilities.  If you wish to set an individual
20019           option to a particular value, you may specify it after the -mcpu
20020           option, like -mcpu=970 -mno-altivec.
20021
20022           On AIX, the -maltivec and -mpowerpc64 options are not enabled or
20023           disabled by the -mcpu option at present because AIX does not have
20024           full support for these options.  You may still enable or disable
20025           them individually if you're sure it'll work in your environment.
20026
20027       -mtune=cpu_type
20028           Set the instruction scheduling parameters for machine type
20029           cpu_type, but do not set the architecture type or register usage,
20030           as -mcpu=cpu_type does.  The same values for cpu_type are used for
20031           -mtune as for -mcpu.  If both are specified, the code generated
20032           uses the architecture and registers set by -mcpu, but the
20033           scheduling parameters set by -mtune.
20034
20035       -mcmodel=small
20036           Generate PowerPC64 code for the small model: The TOC is limited to
20037           64k.
20038
20039       -mcmodel=medium
20040           Generate PowerPC64 code for the medium model: The TOC and other
20041           static data may be up to a total of 4G in size.  This is the
20042           default for 64-bit Linux.
20043
20044       -mcmodel=large
20045           Generate PowerPC64 code for the large model: The TOC may be up to
20046           4G in size.  Other data and code is only limited by the 64-bit
20047           address space.
20048
20049       -maltivec
20050       -mno-altivec
20051           Generate code that uses (does not use) AltiVec instructions, and
20052           also enable the use of built-in functions that allow more direct
20053           access to the AltiVec instruction set.  You may also need to set
20054           -mabi=altivec to adjust the current ABI with AltiVec ABI
20055           enhancements.
20056
20057           When -maltivec is used, rather than -maltivec=le or -maltivec=be,
20058           the element order for AltiVec intrinsics such as "vec_splat",
20059           "vec_extract", and "vec_insert" match array element order
20060           corresponding to the endianness of the target.  That is, element
20061           zero identifies the leftmost element in a vector register when
20062           targeting a big-endian platform, and identifies the rightmost
20063           element in a vector register when targeting a little-endian
20064           platform.
20065
20066       -maltivec=be
20067           Generate AltiVec instructions using big-endian element order,
20068           regardless of whether the target is big- or little-endian.  This is
20069           the default when targeting a big-endian platform.  Using this
20070           option is currently deprecated.  Support for this feature will be
20071           removed in GCC 9.
20072
20073           The element order is used to interpret element numbers in AltiVec
20074           intrinsics such as "vec_splat", "vec_extract", and "vec_insert".
20075           By default, these match array element order corresponding to the
20076           endianness for the target.
20077
20078       -maltivec=le
20079           Generate AltiVec instructions using little-endian element order,
20080           regardless of whether the target is big- or little-endian.  This is
20081           the default when targeting a little-endian platform.  This option
20082           is currently ignored when targeting a big-endian platform.
20083
20084           The element order is used to interpret element numbers in AltiVec
20085           intrinsics such as "vec_splat", "vec_extract", and "vec_insert".
20086           By default, these match array element order corresponding to the
20087           endianness for the target.
20088
20089       -mvrsave
20090       -mno-vrsave
20091           Generate VRSAVE instructions when generating AltiVec code.
20092
20093       -msecure-plt
20094           Generate code that allows ld and ld.so to build executables and
20095           shared libraries with non-executable ".plt" and ".got" sections.
20096           This is a PowerPC 32-bit SYSV ABI option.
20097
20098       -mbss-plt
20099           Generate code that uses a BSS ".plt" section that ld.so fills in,
20100           and requires ".plt" and ".got" sections that are both writable and
20101           executable.  This is a PowerPC 32-bit SYSV ABI option.
20102
20103       -misel
20104       -mno-isel
20105           This switch enables or disables the generation of ISEL
20106           instructions.
20107
20108       -misel=yes/no
20109           This switch has been deprecated.  Use -misel and -mno-isel instead.
20110
20111       -mpaired
20112       -mno-paired
20113           This switch enables or disables the generation of PAIRED simd
20114           instructions.
20115
20116       -mvsx
20117       -mno-vsx
20118           Generate code that uses (does not use) vector/scalar (VSX)
20119           instructions, and also enable the use of built-in functions that
20120           allow more direct access to the VSX instruction set.
20121
20122       -mcrypto
20123       -mno-crypto
20124           Enable the use (disable) of the built-in functions that allow
20125           direct access to the cryptographic instructions that were added in
20126           version 2.07 of the PowerPC ISA.
20127
20128       -mhtm
20129       -mno-htm
20130           Enable (disable) the use of the built-in functions that allow
20131           direct access to the Hardware Transactional Memory (HTM)
20132           instructions that were added in version 2.07 of the PowerPC ISA.
20133
20134       -mpower8-fusion
20135       -mno-power8-fusion
20136           Generate code that keeps (does not keeps) some integer operations
20137           adjacent so that the instructions can be fused together on power8
20138           and later processors.
20139
20140       -mpower8-vector
20141       -mno-power8-vector
20142           Generate code that uses (does not use) the vector and scalar
20143           instructions that were added in version 2.07 of the PowerPC ISA.
20144           Also enable the use of built-in functions that allow more direct
20145           access to the vector instructions.
20146
20147       -mquad-memory
20148       -mno-quad-memory
20149           Generate code that uses (does not use) the non-atomic quad word
20150           memory instructions.  The -mquad-memory option requires use of
20151           64-bit mode.
20152
20153       -mquad-memory-atomic
20154       -mno-quad-memory-atomic
20155           Generate code that uses (does not use) the atomic quad word memory
20156           instructions.  The -mquad-memory-atomic option requires use of
20157           64-bit mode.
20158
20159       -mfloat128
20160       -mno-float128
20161           Enable/disable the __float128 keyword for IEEE 128-bit floating
20162           point and use either software emulation for IEEE 128-bit floating
20163           point or hardware instructions.
20164
20165           The VSX instruction set (-mvsx, -mcpu=power7, -mcpu=power8), or
20166           -mcpu=power9 must be enabled to use the IEEE 128-bit floating point
20167           support.  The IEEE 128-bit floating point support only works on
20168           PowerPC Linux systems.
20169
20170           The default for -mfloat128 is enabled on PowerPC Linux systems
20171           using the VSX instruction set, and disabled on other systems.
20172
20173           If you use the ISA 3.0 instruction set (-mpower9-vector or
20174           -mcpu=power9) on a 64-bit system, the IEEE 128-bit floating point
20175           support will also enable the generation of ISA 3.0 IEEE 128-bit
20176           floating point instructions.  Otherwise, if you do not specify to
20177           generate ISA 3.0 instructions or you are targeting a 32-bit big
20178           endian system, IEEE 128-bit floating point will be done with
20179           software emulation.
20180
20181       -mfloat128-hardware
20182       -mno-float128-hardware
20183           Enable/disable using ISA 3.0 hardware instructions to support the
20184           __float128 data type.
20185
20186           The default for -mfloat128-hardware is enabled on PowerPC Linux
20187           systems using the ISA 3.0 instruction set, and disabled on other
20188           systems.
20189
20190       -m32
20191       -m64
20192           Generate code for 32-bit or 64-bit environments of Darwin and SVR4
20193           targets (including GNU/Linux).  The 32-bit environment sets int,
20194           long and pointer to 32 bits and generates code that runs on any
20195           PowerPC variant.  The 64-bit environment sets int to 32 bits and
20196           long and pointer to 64 bits, and generates code for PowerPC64, as
20197           for -mpowerpc64.
20198
20199       -mfull-toc
20200       -mno-fp-in-toc
20201       -mno-sum-in-toc
20202       -mminimal-toc
20203           Modify generation of the TOC (Table Of Contents), which is created
20204           for every executable file.  The -mfull-toc option is selected by
20205           default.  In that case, GCC allocates at least one TOC entry for
20206           each unique non-automatic variable reference in your program.  GCC
20207           also places floating-point constants in the TOC.  However, only
20208           16,384 entries are available in the TOC.
20209
20210           If you receive a linker error message that saying you have
20211           overflowed the available TOC space, you can reduce the amount of
20212           TOC space used with the -mno-fp-in-toc and -mno-sum-in-toc options.
20213           -mno-fp-in-toc prevents GCC from putting floating-point constants
20214           in the TOC and -mno-sum-in-toc forces GCC to generate code to
20215           calculate the sum of an address and a constant at run time instead
20216           of putting that sum into the TOC.  You may specify one or both of
20217           these options.  Each causes GCC to produce very slightly slower and
20218           larger code at the expense of conserving TOC space.
20219
20220           If you still run out of space in the TOC even when you specify both
20221           of these options, specify -mminimal-toc instead.  This option
20222           causes GCC to make only one TOC entry for every file.  When you
20223           specify this option, GCC produces code that is slower and larger
20224           but which uses extremely little TOC space.  You may wish to use
20225           this option only on files that contain less frequently-executed
20226           code.
20227
20228       -maix64
20229       -maix32
20230           Enable 64-bit AIX ABI and calling convention: 64-bit pointers,
20231           64-bit "long" type, and the infrastructure needed to support them.
20232           Specifying -maix64 implies -mpowerpc64, while -maix32 disables the
20233           64-bit ABI and implies -mno-powerpc64.  GCC defaults to -maix32.
20234
20235       -mxl-compat
20236       -mno-xl-compat
20237           Produce code that conforms more closely to IBM XL compiler
20238           semantics when using AIX-compatible ABI.  Pass floating-point
20239           arguments to prototyped functions beyond the register save area
20240           (RSA) on the stack in addition to argument FPRs.  Do not assume
20241           that most significant double in 128-bit long double value is
20242           properly rounded when comparing values and converting to double.
20243           Use XL symbol names for long double support routines.
20244
20245           The AIX calling convention was extended but not initially
20246           documented to handle an obscure K&R C case of calling a function
20247           that takes the address of its arguments with fewer arguments than
20248           declared.  IBM XL compilers access floating-point arguments that do
20249           not fit in the RSA from the stack when a subroutine is compiled
20250           without optimization.  Because always storing floating-point
20251           arguments on the stack is inefficient and rarely needed, this
20252           option is not enabled by default and only is necessary when calling
20253           subroutines compiled by IBM XL compilers without optimization.
20254
20255       -mpe
20256           Support IBM RS/6000 SP Parallel Environment (PE).  Link an
20257           application written to use message passing with special startup
20258           code to enable the application to run.  The system must have PE
20259           installed in the standard location (/usr/lpp/ppe.poe/), or the
20260           specs file must be overridden with the -specs= option to specify
20261           the appropriate directory location.  The Parallel Environment does
20262           not support threads, so the -mpe option and the -pthread option are
20263           incompatible.
20264
20265       -malign-natural
20266       -malign-power
20267           On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
20268           -malign-natural overrides the ABI-defined alignment of larger
20269           types, such as floating-point doubles, on their natural size-based
20270           boundary.  The option -malign-power instructs GCC to follow the
20271           ABI-specified alignment rules.  GCC defaults to the standard
20272           alignment defined in the ABI.
20273
20274           On 64-bit Darwin, natural alignment is the default, and
20275           -malign-power is not supported.
20276
20277       -msoft-float
20278       -mhard-float
20279           Generate code that does not use (uses) the floating-point register
20280           set.  Software floating-point emulation is provided if you use the
20281           -msoft-float option, and pass the option to GCC when linking.
20282
20283       -msingle-float
20284       -mdouble-float
20285           Generate code for single- or double-precision floating-point
20286           operations.  -mdouble-float implies -msingle-float.
20287
20288       -msimple-fpu
20289           Do not generate "sqrt" and "div" instructions for hardware
20290           floating-point unit.
20291
20292       -mfpu=name
20293           Specify type of floating-point unit.  Valid values for name are
20294           sp_lite (equivalent to -msingle-float -msimple-fpu), dp_lite
20295           (equivalent to -mdouble-float -msimple-fpu), sp_full (equivalent to
20296           -msingle-float), and dp_full (equivalent to -mdouble-float).
20297
20298       -mxilinx-fpu
20299           Perform optimizations for the floating-point unit on Xilinx PPC
20300           405/440.
20301
20302       -mmultiple
20303       -mno-multiple
20304           Generate code that uses (does not use) the load multiple word
20305           instructions and the store multiple word instructions.  These
20306           instructions are generated by default on POWER systems, and not
20307           generated on PowerPC systems.  Do not use -mmultiple on little-
20308           endian PowerPC systems, since those instructions do not work when
20309           the processor is in little-endian mode.  The exceptions are PPC740
20310           and PPC750 which permit these instructions in little-endian mode.
20311
20312       -mupdate
20313       -mno-update
20314           Generate code that uses (does not use) the load or store
20315           instructions that update the base register to the address of the
20316           calculated memory location.  These instructions are generated by
20317           default.  If you use -mno-update, there is a small window between
20318           the time that the stack pointer is updated and the address of the
20319           previous frame is stored, which means code that walks the stack
20320           frame across interrupts or signals may get corrupted data.
20321
20322       -mavoid-indexed-addresses
20323       -mno-avoid-indexed-addresses
20324           Generate code that tries to avoid (not avoid) the use of indexed
20325           load or store instructions. These instructions can incur a
20326           performance penalty on Power6 processors in certain situations,
20327           such as when stepping through large arrays that cross a 16M
20328           boundary.  This option is enabled by default when targeting Power6
20329           and disabled otherwise.
20330
20331       -mfused-madd
20332       -mno-fused-madd
20333           Generate code that uses (does not use) the floating-point multiply
20334           and accumulate instructions.  These instructions are generated by
20335           default if hardware floating point is used.  The machine-dependent
20336           -mfused-madd option is now mapped to the machine-independent
20337           -ffp-contract=fast option, and -mno-fused-madd is mapped to
20338           -ffp-contract=off.
20339
20340       -mmulhw
20341       -mno-mulhw
20342           Generate code that uses (does not use) the half-word multiply and
20343           multiply-accumulate instructions on the IBM 405, 440, 464 and 476
20344           processors.  These instructions are generated by default when
20345           targeting those processors.
20346
20347       -mdlmzb
20348       -mno-dlmzb
20349           Generate code that uses (does not use) the string-search dlmzb
20350           instruction on the IBM 405, 440, 464 and 476 processors.  This
20351           instruction is generated by default when targeting those
20352           processors.
20353
20354       -mno-bit-align
20355       -mbit-align
20356           On System V.4 and embedded PowerPC systems do not (do) force
20357           structures and unions that contain bit-fields to be aligned to the
20358           base type of the bit-field.
20359
20360           For example, by default a structure containing nothing but 8
20361           "unsigned" bit-fields of length 1 is aligned to a 4-byte boundary
20362           and has a size of 4 bytes.  By using -mno-bit-align, the structure
20363           is aligned to a 1-byte boundary and is 1 byte in size.
20364
20365       -mno-strict-align
20366       -mstrict-align
20367           On System V.4 and embedded PowerPC systems do not (do) assume that
20368           unaligned memory references are handled by the system.
20369
20370       -mrelocatable
20371       -mno-relocatable
20372           Generate code that allows (does not allow) a static executable to
20373           be relocated to a different address at run time.  A simple embedded
20374           PowerPC system loader should relocate the entire contents of
20375           ".got2" and 4-byte locations listed in the ".fixup" section, a
20376           table of 32-bit addresses generated by this option.  For this to
20377           work, all objects linked together must be compiled with
20378           -mrelocatable or -mrelocatable-lib.  -mrelocatable code aligns the
20379           stack to an 8-byte boundary.
20380
20381       -mrelocatable-lib
20382       -mno-relocatable-lib
20383           Like -mrelocatable, -mrelocatable-lib generates a ".fixup" section
20384           to allow static executables to be relocated at run time, but
20385           -mrelocatable-lib does not use the smaller stack alignment of
20386           -mrelocatable.  Objects compiled with -mrelocatable-lib may be
20387           linked with objects compiled with any combination of the
20388           -mrelocatable options.
20389
20390       -mno-toc
20391       -mtoc
20392           On System V.4 and embedded PowerPC systems do not (do) assume that
20393           register 2 contains a pointer to a global area pointing to the
20394           addresses used in the program.
20395
20396       -mlittle
20397       -mlittle-endian
20398           On System V.4 and embedded PowerPC systems compile code for the
20399           processor in little-endian mode.  The -mlittle-endian option is the
20400           same as -mlittle.
20401
20402       -mbig
20403       -mbig-endian
20404           On System V.4 and embedded PowerPC systems compile code for the
20405           processor in big-endian mode.  The -mbig-endian option is the same
20406           as -mbig.
20407
20408       -mdynamic-no-pic
20409           On Darwin and Mac OS X systems, compile code so that it is not
20410           relocatable, but that its external references are relocatable.  The
20411           resulting code is suitable for applications, but not shared
20412           libraries.
20413
20414       -msingle-pic-base
20415           Treat the register used for PIC addressing as read-only, rather
20416           than loading it in the prologue for each function.  The runtime
20417           system is responsible for initializing this register with an
20418           appropriate value before execution begins.
20419
20420       -mprioritize-restricted-insns=priority
20421           This option controls the priority that is assigned to dispatch-slot
20422           restricted instructions during the second scheduling pass.  The
20423           argument priority takes the value 0, 1, or 2 to assign no, highest,
20424           or second-highest (respectively) priority to dispatch-slot
20425           restricted instructions.
20426
20427       -msched-costly-dep=dependence_type
20428           This option controls which dependences are considered costly by the
20429           target during instruction scheduling.  The argument dependence_type
20430           takes one of the following values:
20431
20432           no  No dependence is costly.
20433
20434           all All dependences are costly.
20435
20436           true_store_to_load
20437               A true dependence from store to load is costly.
20438
20439           store_to_load
20440               Any dependence from store to load is costly.
20441
20442           number
20443               Any dependence for which the latency is greater than or equal
20444               to number is costly.
20445
20446       -minsert-sched-nops=scheme
20447           This option controls which NOP insertion scheme is used during the
20448           second scheduling pass.  The argument scheme takes one of the
20449           following values:
20450
20451           no  Don't insert NOPs.
20452
20453           pad Pad with NOPs any dispatch group that has vacant issue slots,
20454               according to the scheduler's grouping.
20455
20456           regroup_exact
20457               Insert NOPs to force costly dependent insns into separate
20458               groups.  Insert exactly as many NOPs as needed to force an insn
20459               to a new group, according to the estimated processor grouping.
20460
20461           number
20462               Insert NOPs to force costly dependent insns into separate
20463               groups.  Insert number NOPs to force an insn to a new group.
20464
20465       -mcall-sysv
20466           On System V.4 and embedded PowerPC systems compile code using
20467           calling conventions that adhere to the March 1995 draft of the
20468           System V Application Binary Interface, PowerPC processor
20469           supplement.  This is the default unless you configured GCC using
20470           powerpc-*-eabiaix.
20471
20472       -mcall-sysv-eabi
20473       -mcall-eabi
20474           Specify both -mcall-sysv and -meabi options.
20475
20476       -mcall-sysv-noeabi
20477           Specify both -mcall-sysv and -mno-eabi options.
20478
20479       -mcall-aixdesc
20480           On System V.4 and embedded PowerPC systems compile code for the AIX
20481           operating system.
20482
20483       -mcall-linux
20484           On System V.4 and embedded PowerPC systems compile code for the
20485           Linux-based GNU system.
20486
20487       -mcall-freebsd
20488           On System V.4 and embedded PowerPC systems compile code for the
20489           FreeBSD operating system.
20490
20491       -mcall-netbsd
20492           On System V.4 and embedded PowerPC systems compile code for the
20493           NetBSD operating system.
20494
20495       -mcall-openbsd
20496           On System V.4 and embedded PowerPC systems compile code for the
20497           OpenBSD operating system.
20498
20499       -mtraceback=traceback_type
20500           Select the type of traceback table. Valid values for traceback_type
20501           are full, part, and no.
20502
20503       -maix-struct-return
20504           Return all structures in memory (as specified by the AIX ABI).
20505
20506       -msvr4-struct-return
20507           Return structures smaller than 8 bytes in registers (as specified
20508           by the SVR4 ABI).
20509
20510       -mabi=abi-type
20511           Extend the current ABI with a particular extension, or remove such
20512           extension.  Valid values are altivec, no-altivec, spe, no-spe,
20513           ibmlongdouble, ieeelongdouble, elfv1, elfv2.
20514
20515       -mabi=ibmlongdouble
20516           Change the current ABI to use IBM extended-precision long double.
20517           This is not likely to work if your system defaults to using IEEE
20518           extended-precision long double.  If you change the long double type
20519           from IEEE extended-precision, the compiler will issue a warning
20520           unless you use the -Wno-psabi option.  Requires -mlong-double-128
20521           to be enabled.
20522
20523       -mabi=ieeelongdouble
20524           Change the current ABI to use IEEE extended-precision long double.
20525           This is not likely to work if your system defaults to using IBM
20526           extended-precision long double.  If you change the long double type
20527           from IBM extended-precision, the compiler will issue a warning
20528           unless you use the -Wno-psabi option.  Requires -mlong-double-128
20529           to be enabled.
20530
20531       -mabi=elfv1
20532           Change the current ABI to use the ELFv1 ABI.  This is the default
20533           ABI for big-endian PowerPC 64-bit Linux.  Overriding the default
20534           ABI requires special system support and is likely to fail in
20535           spectacular ways.
20536
20537       -mabi=elfv2
20538           Change the current ABI to use the ELFv2 ABI.  This is the default
20539           ABI for little-endian PowerPC 64-bit Linux.  Overriding the default
20540           ABI requires special system support and is likely to fail in
20541           spectacular ways.
20542
20543       -mgnu-attribute
20544       -mno-gnu-attribute
20545           Emit .gnu_attribute assembly directives to set tag/value pairs in a
20546           .gnu.attributes section that specify ABI variations in function
20547           parameters or return values.
20548
20549       -mprototype
20550       -mno-prototype
20551           On System V.4 and embedded PowerPC systems assume that all calls to
20552           variable argument functions are properly prototyped.  Otherwise,
20553           the compiler must insert an instruction before every non-prototyped
20554           call to set or clear bit 6 of the condition code register ("CR") to
20555           indicate whether floating-point values are passed in the floating-
20556           point registers in case the function takes variable arguments.
20557           With -mprototype, only calls to prototyped variable argument
20558           functions set or clear the bit.
20559
20560       -msim
20561           On embedded PowerPC systems, assume that the startup module is
20562           called sim-crt0.o and that the standard C libraries are libsim.a
20563           and libc.a.  This is the default for powerpc-*-eabisim
20564           configurations.
20565
20566       -mmvme
20567           On embedded PowerPC systems, assume that the startup module is
20568           called crt0.o and the standard C libraries are libmvme.a and
20569           libc.a.
20570
20571       -mads
20572           On embedded PowerPC systems, assume that the startup module is
20573           called crt0.o and the standard C libraries are libads.a and libc.a.
20574
20575       -myellowknife
20576           On embedded PowerPC systems, assume that the startup module is
20577           called crt0.o and the standard C libraries are libyk.a and libc.a.
20578
20579       -mvxworks
20580           On System V.4 and embedded PowerPC systems, specify that you are
20581           compiling for a VxWorks system.
20582
20583       -memb
20584           On embedded PowerPC systems, set the "PPC_EMB" bit in the ELF flags
20585           header to indicate that eabi extended relocations are used.
20586
20587       -meabi
20588       -mno-eabi
20589           On System V.4 and embedded PowerPC systems do (do not) adhere to
20590           the Embedded Applications Binary Interface (EABI), which is a set
20591           of modifications to the System V.4 specifications.  Selecting
20592           -meabi means that the stack is aligned to an 8-byte boundary, a
20593           function "__eabi" is called from "main" to set up the EABI
20594           environment, and the -msdata option can use both "r2" and "r13" to
20595           point to two separate small data areas.  Selecting -mno-eabi means
20596           that the stack is aligned to a 16-byte boundary, no EABI
20597           initialization function is called from "main", and the -msdata
20598           option only uses "r13" to point to a single small data area.  The
20599           -meabi option is on by default if you configured GCC using one of
20600           the powerpc*-*-eabi* options.
20601
20602       -msdata=eabi
20603           On System V.4 and embedded PowerPC systems, put small initialized
20604           "const" global and static data in the ".sdata2" section, which is
20605           pointed to by register "r2".  Put small initialized non-"const"
20606           global and static data in the ".sdata" section, which is pointed to
20607           by register "r13".  Put small uninitialized global and static data
20608           in the ".sbss" section, which is adjacent to the ".sdata" section.
20609           The -msdata=eabi option is incompatible with the -mrelocatable
20610           option.  The -msdata=eabi option also sets the -memb option.
20611
20612       -msdata=sysv
20613           On System V.4 and embedded PowerPC systems, put small global and
20614           static data in the ".sdata" section, which is pointed to by
20615           register "r13".  Put small uninitialized global and static data in
20616           the ".sbss" section, which is adjacent to the ".sdata" section.
20617           The -msdata=sysv option is incompatible with the -mrelocatable
20618           option.
20619
20620       -msdata=default
20621       -msdata
20622           On System V.4 and embedded PowerPC systems, if -meabi is used,
20623           compile code the same as -msdata=eabi, otherwise compile code the
20624           same as -msdata=sysv.
20625
20626       -msdata=data
20627           On System V.4 and embedded PowerPC systems, put small global data
20628           in the ".sdata" section.  Put small uninitialized global data in
20629           the ".sbss" section.  Do not use register "r13" to address small
20630           data however.  This is the default behavior unless other -msdata
20631           options are used.
20632
20633       -msdata=none
20634       -mno-sdata
20635           On embedded PowerPC systems, put all initialized global and static
20636           data in the ".data" section, and all uninitialized data in the
20637           ".bss" section.
20638
20639       -mreadonly-in-sdata
20640       -mreadonly-in-sdata
20641           Put read-only objects in the ".sdata" section as well.  This is the
20642           default.
20643
20644       -mblock-move-inline-limit=num
20645           Inline all block moves (such as calls to "memcpy" or structure
20646           copies) less than or equal to num bytes.  The minimum value for num
20647           is 32 bytes on 32-bit targets and 64 bytes on 64-bit targets.  The
20648           default value is target-specific.
20649
20650       -mblock-compare-inline-limit=num
20651           Generate non-looping inline code for all block compares (such as
20652           calls to "memcmp" or structure compares) less than or equal to num
20653           bytes. If num is 0, all inline expansion (non-loop and loop) of
20654           block compare is disabled. The default value is target-specific.
20655
20656       -mblock-compare-inline-loop-limit=num
20657           Generate an inline expansion using loop code for all block compares
20658           that are less than or equal to num bytes, but greater than the
20659           limit for non-loop inline block compare expansion. If the block
20660           length is not constant, at most num bytes will be compared before
20661           "memcmp" is called to compare the remainder of the block. The
20662           default value is target-specific.
20663
20664       -mstring-compare-inline-limit=num
20665           Generate at most num pairs of load instructions to compare the
20666           string inline. If the difference or end of string is not found at
20667           the end of the inline compare a call to "strcmp" or "strncmp" will
20668           take care of the rest of the comparison. The default is 8 pairs of
20669           loads, which will compare 64 bytes on a 64-bit target and 32 bytes
20670           on a 32-bit target.
20671
20672       -G num
20673           On embedded PowerPC systems, put global and static items less than
20674           or equal to num bytes into the small data or BSS sections instead
20675           of the normal data or BSS section.  By default, num is 8.  The -G
20676           num switch is also passed to the linker.  All modules should be
20677           compiled with the same -G num value.
20678
20679       -mregnames
20680       -mno-regnames
20681           On System V.4 and embedded PowerPC systems do (do not) emit
20682           register names in the assembly language output using symbolic
20683           forms.
20684
20685       -mlongcall
20686       -mno-longcall
20687           By default assume that all calls are far away so that a longer and
20688           more expensive calling sequence is required.  This is required for
20689           calls farther than 32 megabytes (33,554,432 bytes) from the current
20690           location.  A short call is generated if the compiler knows the call
20691           cannot be that far away.  This setting can be overridden by the
20692           "shortcall" function attribute, or by "#pragma longcall(0)".
20693
20694           Some linkers are capable of detecting out-of-range calls and
20695           generating glue code on the fly.  On these systems, long calls are
20696           unnecessary and generate slower code.  As of this writing, the AIX
20697           linker can do this, as can the GNU linker for PowerPC/64.  It is
20698           planned to add this feature to the GNU linker for 32-bit PowerPC
20699           systems as well.
20700
20701           On Darwin/PPC systems, "#pragma longcall" generates "jbsr callee,
20702           L42", plus a branch island (glue code).  The two target addresses
20703           represent the callee and the branch island.  The Darwin/PPC linker
20704           prefers the first address and generates a "bl callee" if the PPC
20705           "bl" instruction reaches the callee directly; otherwise, the linker
20706           generates "bl L42" to call the branch island.  The branch island is
20707           appended to the body of the calling function; it computes the full
20708           32-bit address of the callee and jumps to it.
20709
20710           On Mach-O (Darwin) systems, this option directs the compiler emit
20711           to the glue for every direct call, and the Darwin linker decides
20712           whether to use or discard it.
20713
20714           In the future, GCC may ignore all longcall specifications when the
20715           linker is known to generate glue.
20716
20717       -mtls-markers
20718       -mno-tls-markers
20719           Mark (do not mark) calls to "__tls_get_addr" with a relocation
20720           specifying the function argument.  The relocation allows the linker
20721           to reliably associate function call with argument setup
20722           instructions for TLS optimization, which in turn allows GCC to
20723           better schedule the sequence.
20724
20725       -mrecip
20726       -mno-recip
20727           This option enables use of the reciprocal estimate and reciprocal
20728           square root estimate instructions with additional Newton-Raphson
20729           steps to increase precision instead of doing a divide or square
20730           root and divide for floating-point arguments.  You should use the
20731           -ffast-math option when using -mrecip (or at least
20732           -funsafe-math-optimizations, -ffinite-math-only, -freciprocal-math
20733           and -fno-trapping-math).  Note that while the throughput of the
20734           sequence is generally higher than the throughput of the non-
20735           reciprocal instruction, the precision of the sequence can be
20736           decreased by up to 2 ulp (i.e. the inverse of 1.0 equals
20737           0.99999994) for reciprocal square roots.
20738
20739       -mrecip=opt
20740           This option controls which reciprocal estimate instructions may be
20741           used.  opt is a comma-separated list of options, which may be
20742           preceded by a "!" to invert the option:
20743
20744           all Enable all estimate instructions.
20745
20746           default
20747               Enable the default instructions, equivalent to -mrecip.
20748
20749           none
20750               Disable all estimate instructions, equivalent to -mno-recip.
20751
20752           div Enable the reciprocal approximation instructions for both
20753               single and double precision.
20754
20755           divf
20756               Enable the single-precision reciprocal approximation
20757               instructions.
20758
20759           divd
20760               Enable the double-precision reciprocal approximation
20761               instructions.
20762
20763           rsqrt
20764               Enable the reciprocal square root approximation instructions
20765               for both single and double precision.
20766
20767           rsqrtf
20768               Enable the single-precision reciprocal square root
20769               approximation instructions.
20770
20771           rsqrtd
20772               Enable the double-precision reciprocal square root
20773               approximation instructions.
20774
20775           So, for example, -mrecip=all,!rsqrtd enables all of the reciprocal
20776           estimate instructions, except for the "FRSQRTE", "XSRSQRTEDP", and
20777           "XVRSQRTEDP" instructions which handle the double-precision
20778           reciprocal square root calculations.
20779
20780       -mrecip-precision
20781       -mno-recip-precision
20782           Assume (do not assume) that the reciprocal estimate instructions
20783           provide higher-precision estimates than is mandated by the PowerPC
20784           ABI.  Selecting -mcpu=power6, -mcpu=power7 or -mcpu=power8
20785           automatically selects -mrecip-precision.  The double-precision
20786           square root estimate instructions are not generated by default on
20787           low-precision machines, since they do not provide an estimate that
20788           converges after three steps.
20789
20790       -mveclibabi=type
20791           Specifies the ABI type to use for vectorizing intrinsics using an
20792           external library.  The only type supported at present is mass,
20793           which specifies to use IBM's Mathematical Acceleration Subsystem
20794           (MASS) libraries for vectorizing intrinsics using external
20795           libraries.  GCC currently emits calls to "acosd2", "acosf4",
20796           "acoshd2", "acoshf4", "asind2", "asinf4", "asinhd2", "asinhf4",
20797           "atan2d2", "atan2f4", "atand2", "atanf4", "atanhd2", "atanhf4",
20798           "cbrtd2", "cbrtf4", "cosd2", "cosf4", "coshd2", "coshf4", "erfcd2",
20799           "erfcf4", "erfd2", "erff4", "exp2d2", "exp2f4", "expd2", "expf4",
20800           "expm1d2", "expm1f4", "hypotd2", "hypotf4", "lgammad2", "lgammaf4",
20801           "log10d2", "log10f4", "log1pd2", "log1pf4", "log2d2", "log2f4",
20802           "logd2", "logf4", "powd2", "powf4", "sind2", "sinf4", "sinhd2",
20803           "sinhf4", "sqrtd2", "sqrtf4", "tand2", "tanf4", "tanhd2", and
20804           "tanhf4" when generating code for power7.  Both -ftree-vectorize
20805           and -funsafe-math-optimizations must also be enabled.  The MASS
20806           libraries must be specified at link time.
20807
20808       -mfriz
20809       -mno-friz
20810           Generate (do not generate) the "friz" instruction when the
20811           -funsafe-math-optimizations option is used to optimize rounding of
20812           floating-point values to 64-bit integer and back to floating point.
20813           The "friz" instruction does not return the same value if the
20814           floating-point number is too large to fit in an integer.
20815
20816       -mpointers-to-nested-functions
20817       -mno-pointers-to-nested-functions
20818           Generate (do not generate) code to load up the static chain
20819           register ("r11") when calling through a pointer on AIX and 64-bit
20820           Linux systems where a function pointer points to a 3-word
20821           descriptor giving the function address, TOC value to be loaded in
20822           register "r2", and static chain value to be loaded in register
20823           "r11".  The -mpointers-to-nested-functions is on by default.  You
20824           cannot call through pointers to nested functions or pointers to
20825           functions compiled in other languages that use the static chain if
20826           you use -mno-pointers-to-nested-functions.
20827
20828       -msave-toc-indirect
20829       -mno-save-toc-indirect
20830           Generate (do not generate) code to save the TOC value in the
20831           reserved stack location in the function prologue if the function
20832           calls through a pointer on AIX and 64-bit Linux systems.  If the
20833           TOC value is not saved in the prologue, it is saved just before the
20834           call through the pointer.  The -mno-save-toc-indirect option is the
20835           default.
20836
20837       -mcompat-align-parm
20838       -mno-compat-align-parm
20839           Generate (do not generate) code to pass structure parameters with a
20840           maximum alignment of 64 bits, for compatibility with older versions
20841           of GCC.
20842
20843           Older versions of GCC (prior to 4.9.0) incorrectly did not align a
20844           structure parameter on a 128-bit boundary when that structure
20845           contained a member requiring 128-bit alignment.  This is corrected
20846           in more recent versions of GCC.  This option may be used to
20847           generate code that is compatible with functions compiled with older
20848           versions of GCC.
20849
20850           The -mno-compat-align-parm option is the default.
20851
20852       -mstack-protector-guard=guard
20853       -mstack-protector-guard-reg=reg
20854       -mstack-protector-guard-offset=offset
20855       -mstack-protector-guard-symbol=symbol
20856           Generate stack protection code using canary at guard.  Supported
20857           locations are global for global canary or tls for per-thread canary
20858           in the TLS block (the default with GNU libc version 2.4 or later).
20859
20860           With the latter choice the options -mstack-protector-guard-reg=reg
20861           and -mstack-protector-guard-offset=offset furthermore specify which
20862           register to use as base register for reading the canary, and from
20863           what offset from that base register. The default for those is as
20864           specified in the relevant ABI.
20865           -mstack-protector-guard-symbol=symbol overrides the offset with a
20866           symbol reference to a canary in the TLS block.
20867
20868       RX Options
20869
20870       These command-line options are defined for RX targets:
20871
20872       -m64bit-doubles
20873       -m32bit-doubles
20874           Make the "double" data type be 64 bits (-m64bit-doubles) or 32 bits
20875           (-m32bit-doubles) in size.  The default is -m32bit-doubles.  Note
20876           RX floating-point hardware only works on 32-bit values, which is
20877           why the default is -m32bit-doubles.
20878
20879       -fpu
20880       -nofpu
20881           Enables (-fpu) or disables (-nofpu) the use of RX floating-point
20882           hardware.  The default is enabled for the RX600 series and disabled
20883           for the RX200 series.
20884
20885           Floating-point instructions are only generated for 32-bit floating-
20886           point values, however, so the FPU hardware is not used for doubles
20887           if the -m64bit-doubles option is used.
20888
20889           Note If the -fpu option is enabled then -funsafe-math-optimizations
20890           is also enabled automatically.  This is because the RX FPU
20891           instructions are themselves unsafe.
20892
20893       -mcpu=name
20894           Selects the type of RX CPU to be targeted.  Currently three types
20895           are supported, the generic RX600 and RX200 series hardware and the
20896           specific RX610 CPU.  The default is RX600.
20897
20898           The only difference between RX600 and RX610 is that the RX610 does
20899           not support the "MVTIPL" instruction.
20900
20901           The RX200 series does not have a hardware floating-point unit and
20902           so -nofpu is enabled by default when this type is selected.
20903
20904       -mbig-endian-data
20905       -mlittle-endian-data
20906           Store data (but not code) in the big-endian format.  The default is
20907           -mlittle-endian-data, i.e. to store data in the little-endian
20908           format.
20909
20910       -msmall-data-limit=N
20911           Specifies the maximum size in bytes of global and static variables
20912           which can be placed into the small data area.  Using the small data
20913           area can lead to smaller and faster code, but the size of area is
20914           limited and it is up to the programmer to ensure that the area does
20915           not overflow.  Also when the small data area is used one of the
20916           RX's registers (usually "r13") is reserved for use pointing to this
20917           area, so it is no longer available for use by the compiler.  This
20918           could result in slower and/or larger code if variables are pushed
20919           onto the stack instead of being held in this register.
20920
20921           Note, common variables (variables that have not been initialized)
20922           and constants are not placed into the small data area as they are
20923           assigned to other sections in the output executable.
20924
20925           The default value is zero, which disables this feature.  Note, this
20926           feature is not enabled by default with higher optimization levels
20927           (-O2 etc) because of the potentially detrimental effects of
20928           reserving a register.  It is up to the programmer to experiment and
20929           discover whether this feature is of benefit to their program.  See
20930           the description of the -mpid option for a description of how the
20931           actual register to hold the small data area pointer is chosen.
20932
20933       -msim
20934       -mno-sim
20935           Use the simulator runtime.  The default is to use the libgloss
20936           board-specific runtime.
20937
20938       -mas100-syntax
20939       -mno-as100-syntax
20940           When generating assembler output use a syntax that is compatible
20941           with Renesas's AS100 assembler.  This syntax can also be handled by
20942           the GAS assembler, but it has some restrictions so it is not
20943           generated by default.
20944
20945       -mmax-constant-size=N
20946           Specifies the maximum size, in bytes, of a constant that can be
20947           used as an operand in a RX instruction.  Although the RX
20948           instruction set does allow constants of up to 4 bytes in length to
20949           be used in instructions, a longer value equates to a longer
20950           instruction.  Thus in some circumstances it can be beneficial to
20951           restrict the size of constants that are used in instructions.
20952           Constants that are too big are instead placed into a constant pool
20953           and referenced via register indirection.
20954
20955           The value N can be between 0 and 4.  A value of 0 (the default) or
20956           4 means that constants of any size are allowed.
20957
20958       -mrelax
20959           Enable linker relaxation.  Linker relaxation is a process whereby
20960           the linker attempts to reduce the size of a program by finding
20961           shorter versions of various instructions.  Disabled by default.
20962
20963       -mint-register=N
20964           Specify the number of registers to reserve for fast interrupt
20965           handler functions.  The value N can be between 0 and 4.  A value of
20966           1 means that register "r13" is reserved for the exclusive use of
20967           fast interrupt handlers.  A value of 2 reserves "r13" and "r12".  A
20968           value of 3 reserves "r13", "r12" and "r11", and a value of 4
20969           reserves "r13" through "r10".  A value of 0, the default, does not
20970           reserve any registers.
20971
20972       -msave-acc-in-interrupts
20973           Specifies that interrupt handler functions should preserve the
20974           accumulator register.  This is only necessary if normal code might
20975           use the accumulator register, for example because it performs
20976           64-bit multiplications.  The default is to ignore the accumulator
20977           as this makes the interrupt handlers faster.
20978
20979       -mpid
20980       -mno-pid
20981           Enables the generation of position independent data.  When enabled
20982           any access to constant data is done via an offset from a base
20983           address held in a register.  This allows the location of constant
20984           data to be determined at run time without requiring the executable
20985           to be relocated, which is a benefit to embedded applications with
20986           tight memory constraints.  Data that can be modified is not
20987           affected by this option.
20988
20989           Note, using this feature reserves a register, usually "r13", for
20990           the constant data base address.  This can result in slower and/or
20991           larger code, especially in complicated functions.
20992
20993           The actual register chosen to hold the constant data base address
20994           depends upon whether the -msmall-data-limit and/or the
20995           -mint-register command-line options are enabled.  Starting with
20996           register "r13" and proceeding downwards, registers are allocated
20997           first to satisfy the requirements of -mint-register, then -mpid and
20998           finally -msmall-data-limit.  Thus it is possible for the small data
20999           area register to be "r8" if both -mint-register=4 and -mpid are
21000           specified on the command line.
21001
21002           By default this feature is not enabled.  The default can be
21003           restored via the -mno-pid command-line option.
21004
21005       -mno-warn-multiple-fast-interrupts
21006       -mwarn-multiple-fast-interrupts
21007           Prevents GCC from issuing a warning message if it finds more than
21008           one fast interrupt handler when it is compiling a file.  The
21009           default is to issue a warning for each extra fast interrupt handler
21010           found, as the RX only supports one such interrupt.
21011
21012       -mallow-string-insns
21013       -mno-allow-string-insns
21014           Enables or disables the use of the string manipulation instructions
21015           "SMOVF", "SCMPU", "SMOVB", "SMOVU", "SUNTIL" "SWHILE" and also the
21016           "RMPA" instruction.  These instructions may prefetch data, which is
21017           not safe to do if accessing an I/O register.  (See section 12.2.7
21018           of the RX62N Group User's Manual for more information).
21019
21020           The default is to allow these instructions, but it is not possible
21021           for GCC to reliably detect all circumstances where a string
21022           instruction might be used to access an I/O register, so their use
21023           cannot be disabled automatically.  Instead it is reliant upon the
21024           programmer to use the -mno-allow-string-insns option if their
21025           program accesses I/O space.
21026
21027           When the instructions are enabled GCC defines the C preprocessor
21028           symbol "__RX_ALLOW_STRING_INSNS__", otherwise it defines the symbol
21029           "__RX_DISALLOW_STRING_INSNS__".
21030
21031       -mjsr
21032       -mno-jsr
21033           Use only (or not only) "JSR" instructions to access functions.
21034           This option can be used when code size exceeds the range of "BSR"
21035           instructions.  Note that -mno-jsr does not mean to not use "JSR"
21036           but instead means that any type of branch may be used.
21037
21038       Note: The generic GCC command-line option -ffixed-reg has special
21039       significance to the RX port when used with the "interrupt" function
21040       attribute.  This attribute indicates a function intended to process
21041       fast interrupts.  GCC ensures that it only uses the registers "r10",
21042       "r11", "r12" and/or "r13" and only provided that the normal use of the
21043       corresponding registers have been restricted via the -ffixed-reg or
21044       -mint-register command-line options.
21045
21046       S/390 and zSeries Options
21047
21048       These are the -m options defined for the S/390 and zSeries
21049       architecture.
21050
21051       -mhard-float
21052       -msoft-float
21053           Use (do not use) the hardware floating-point instructions and
21054           registers for floating-point operations.  When -msoft-float is
21055           specified, functions in libgcc.a are used to perform floating-point
21056           operations.  When -mhard-float is specified, the compiler generates
21057           IEEE floating-point instructions.  This is the default.
21058
21059       -mhard-dfp
21060       -mno-hard-dfp
21061           Use (do not use) the hardware decimal-floating-point instructions
21062           for decimal-floating-point operations.  When -mno-hard-dfp is
21063           specified, functions in libgcc.a are used to perform decimal-
21064           floating-point operations.  When -mhard-dfp is specified, the
21065           compiler generates decimal-floating-point hardware instructions.
21066           This is the default for -march=z9-ec or higher.
21067
21068       -mlong-double-64
21069       -mlong-double-128
21070           These switches control the size of "long double" type. A size of 64
21071           bits makes the "long double" type equivalent to the "double" type.
21072           This is the default.
21073
21074       -mbackchain
21075       -mno-backchain
21076           Store (do not store) the address of the caller's frame as backchain
21077           pointer into the callee's stack frame.  A backchain may be needed
21078           to allow debugging using tools that do not understand DWARF call
21079           frame information.  When -mno-packed-stack is in effect, the
21080           backchain pointer is stored at the bottom of the stack frame; when
21081           -mpacked-stack is in effect, the backchain is placed into the
21082           topmost word of the 96/160 byte register save area.
21083
21084           In general, code compiled with -mbackchain is call-compatible with
21085           code compiled with -mmo-backchain; however, use of the backchain
21086           for debugging purposes usually requires that the whole binary is
21087           built with -mbackchain.  Note that the combination of -mbackchain,
21088           -mpacked-stack and -mhard-float is not supported.  In order to
21089           build a linux kernel use -msoft-float.
21090
21091           The default is to not maintain the backchain.
21092
21093       -mpacked-stack
21094       -mno-packed-stack
21095           Use (do not use) the packed stack layout.  When -mno-packed-stack
21096           is specified, the compiler uses the all fields of the 96/160 byte
21097           register save area only for their default purpose; unused fields
21098           still take up stack space.  When -mpacked-stack is specified,
21099           register save slots are densely packed at the top of the register
21100           save area; unused space is reused for other purposes, allowing for
21101           more efficient use of the available stack space.  However, when
21102           -mbackchain is also in effect, the topmost word of the save area is
21103           always used to store the backchain, and the return address register
21104           is always saved two words below the backchain.
21105
21106           As long as the stack frame backchain is not used, code generated
21107           with -mpacked-stack is call-compatible with code generated with
21108           -mno-packed-stack.  Note that some non-FSF releases of GCC 2.95 for
21109           S/390 or zSeries generated code that uses the stack frame backchain
21110           at run time, not just for debugging purposes.  Such code is not
21111           call-compatible with code compiled with -mpacked-stack.  Also, note
21112           that the combination of -mbackchain, -mpacked-stack and
21113           -mhard-float is not supported.  In order to build a linux kernel
21114           use -msoft-float.
21115
21116           The default is to not use the packed stack layout.
21117
21118       -msmall-exec
21119       -mno-small-exec
21120           Generate (or do not generate) code using the "bras" instruction to
21121           do subroutine calls.  This only works reliably if the total
21122           executable size does not exceed 64k.  The default is to use the
21123           "basr" instruction instead, which does not have this limitation.
21124
21125       -m64
21126       -m31
21127           When -m31 is specified, generate code compliant to the GNU/Linux
21128           for S/390 ABI.  When -m64 is specified, generate code compliant to
21129           the GNU/Linux for zSeries ABI.  This allows GCC in particular to
21130           generate 64-bit instructions.  For the s390 targets, the default is
21131           -m31, while the s390x targets default to -m64.
21132
21133       -mzarch
21134       -mesa
21135           When -mzarch is specified, generate code using the instructions
21136           available on z/Architecture.  When -mesa is specified, generate
21137           code using the instructions available on ESA/390.  Note that -mesa
21138           is not possible with -m64.  When generating code compliant to the
21139           GNU/Linux for S/390 ABI, the default is -mesa.  When generating
21140           code compliant to the GNU/Linux for zSeries ABI, the default is
21141           -mzarch.
21142
21143       -mhtm
21144       -mno-htm
21145           The -mhtm option enables a set of builtins making use of
21146           instructions available with the transactional execution facility
21147           introduced with the IBM zEnterprise EC12 machine generation S/390
21148           System z Built-in Functions.  -mhtm is enabled by default when
21149           using -march=zEC12.
21150
21151       -mvx
21152       -mno-vx
21153           When -mvx is specified, generate code using the instructions
21154           available with the vector extension facility introduced with the
21155           IBM z13 machine generation.  This option changes the ABI for some
21156           vector type values with regard to alignment and calling
21157           conventions.  In case vector type values are being used in an ABI-
21158           relevant context a GAS .gnu_attribute command will be added to mark
21159           the resulting binary with the ABI used.  -mvx is enabled by default
21160           when using -march=z13.
21161
21162       -mzvector
21163       -mno-zvector
21164           The -mzvector option enables vector language extensions and
21165           builtins using instructions available with the vector extension
21166           facility introduced with the IBM z13 machine generation.  This
21167           option adds support for vector to be used as a keyword to define
21168           vector type variables and arguments.  vector is only available when
21169           GNU extensions are enabled.  It will not be expanded when
21170           requesting strict standard compliance e.g. with -std=c99.  In
21171           addition to the GCC low-level builtins -mzvector enables a set of
21172           builtins added for compatibility with AltiVec-style implementations
21173           like Power and Cell.  In order to make use of these builtins the
21174           header file vecintrin.h needs to be included.  -mzvector is
21175           disabled by default.
21176
21177       -mmvcle
21178       -mno-mvcle
21179           Generate (or do not generate) code using the "mvcle" instruction to
21180           perform block moves.  When -mno-mvcle is specified, use a "mvc"
21181           loop instead.  This is the default unless optimizing for size.
21182
21183       -mdebug
21184       -mno-debug
21185           Print (or do not print) additional debug information when
21186           compiling.  The default is to not print debug information.
21187
21188       -march=cpu-type
21189           Generate code that runs on cpu-type, which is the name of a system
21190           representing a certain processor type.  Possible values for cpu-
21191           type are z900/arch5, z990/arch6, z9-109, z9-ec/arch7, z10/arch8,
21192           z196/arch9, zEC12, z13/arch11, z14/arch12, and native.
21193
21194           The default is -march=z900.  g5/arch3 and g6 are deprecated and
21195           will be removed with future releases.
21196
21197           Specifying native as cpu type can be used to select the best
21198           architecture option for the host processor.  -march=native has no
21199           effect if GCC does not recognize the processor.
21200
21201       -mtune=cpu-type
21202           Tune to cpu-type everything applicable about the generated code,
21203           except for the ABI and the set of available instructions.  The list
21204           of cpu-type values is the same as for -march.  The default is the
21205           value used for -march.
21206
21207       -mtpf-trace
21208       -mno-tpf-trace
21209           Generate code that adds (does not add) in TPF OS specific branches
21210           to trace routines in the operating system.  This option is off by
21211           default, even when compiling for the TPF OS.
21212
21213       -mfused-madd
21214       -mno-fused-madd
21215           Generate code that uses (does not use) the floating-point multiply
21216           and accumulate instructions.  These instructions are generated by
21217           default if hardware floating point is used.
21218
21219       -mwarn-framesize=framesize
21220           Emit a warning if the current function exceeds the given frame
21221           size.  Because this is a compile-time check it doesn't need to be a
21222           real problem when the program runs.  It is intended to identify
21223           functions that most probably cause a stack overflow.  It is useful
21224           to be used in an environment with limited stack size e.g. the linux
21225           kernel.
21226
21227       -mwarn-dynamicstack
21228           Emit a warning if the function calls "alloca" or uses dynamically-
21229           sized arrays.  This is generally a bad idea with a limited stack
21230           size.
21231
21232       -mstack-guard=stack-guard
21233       -mstack-size=stack-size
21234           If these options are provided the S/390 back end emits additional
21235           instructions in the function prologue that trigger a trap if the
21236           stack size is stack-guard bytes above the stack-size (remember that
21237           the stack on S/390 grows downward).  If the stack-guard option is
21238           omitted the smallest power of 2 larger than the frame size of the
21239           compiled function is chosen.  These options are intended to be used
21240           to help debugging stack overflow problems.  The additionally
21241           emitted code causes only little overhead and hence can also be used
21242           in production-like systems without greater performance degradation.
21243           The given values have to be exact powers of 2 and stack-size has to
21244           be greater than stack-guard without exceeding 64k.  In order to be
21245           efficient the extra code makes the assumption that the stack starts
21246           at an address aligned to the value given by stack-size.  The stack-
21247           guard option can only be used in conjunction with stack-size.
21248
21249       -mhotpatch=pre-halfwords,post-halfwords
21250           If the hotpatch option is enabled, a "hot-patching" function
21251           prologue is generated for all functions in the compilation unit.
21252           The funtion label is prepended with the given number of two-byte
21253           NOP instructions (pre-halfwords, maximum 1000000).  After the
21254           label, 2 * post-halfwords bytes are appended, using the largest NOP
21255           like instructions the architecture allows (maximum 1000000).
21256
21257           If both arguments are zero, hotpatching is disabled.
21258
21259           This option can be overridden for individual functions with the
21260           "hotpatch" attribute.
21261
21262       Score Options
21263
21264       These options are defined for Score implementations:
21265
21266       -meb
21267           Compile code for big-endian mode.  This is the default.
21268
21269       -mel
21270           Compile code for little-endian mode.
21271
21272       -mnhwloop
21273           Disable generation of "bcnz" instructions.
21274
21275       -muls
21276           Enable generation of unaligned load and store instructions.
21277
21278       -mmac
21279           Enable the use of multiply-accumulate instructions. Disabled by
21280           default.
21281
21282       -mscore5
21283           Specify the SCORE5 as the target architecture.
21284
21285       -mscore5u
21286           Specify the SCORE5U of the target architecture.
21287
21288       -mscore7
21289           Specify the SCORE7 as the target architecture. This is the default.
21290
21291       -mscore7d
21292           Specify the SCORE7D as the target architecture.
21293
21294       SH Options
21295
21296       These -m options are defined for the SH implementations:
21297
21298       -m1 Generate code for the SH1.
21299
21300       -m2 Generate code for the SH2.
21301
21302       -m2e
21303           Generate code for the SH2e.
21304
21305       -m2a-nofpu
21306           Generate code for the SH2a without FPU, or for a SH2a-FPU in such a
21307           way that the floating-point unit is not used.
21308
21309       -m2a-single-only
21310           Generate code for the SH2a-FPU, in such a way that no double-
21311           precision floating-point operations are used.
21312
21313       -m2a-single
21314           Generate code for the SH2a-FPU assuming the floating-point unit is
21315           in single-precision mode by default.
21316
21317       -m2a
21318           Generate code for the SH2a-FPU assuming the floating-point unit is
21319           in double-precision mode by default.
21320
21321       -m3 Generate code for the SH3.
21322
21323       -m3e
21324           Generate code for the SH3e.
21325
21326       -m4-nofpu
21327           Generate code for the SH4 without a floating-point unit.
21328
21329       -m4-single-only
21330           Generate code for the SH4 with a floating-point unit that only
21331           supports single-precision arithmetic.
21332
21333       -m4-single
21334           Generate code for the SH4 assuming the floating-point unit is in
21335           single-precision mode by default.
21336
21337       -m4 Generate code for the SH4.
21338
21339       -m4-100
21340           Generate code for SH4-100.
21341
21342       -m4-100-nofpu
21343           Generate code for SH4-100 in such a way that the floating-point
21344           unit is not used.
21345
21346       -m4-100-single
21347           Generate code for SH4-100 assuming the floating-point unit is in
21348           single-precision mode by default.
21349
21350       -m4-100-single-only
21351           Generate code for SH4-100 in such a way that no double-precision
21352           floating-point operations are used.
21353
21354       -m4-200
21355           Generate code for SH4-200.
21356
21357       -m4-200-nofpu
21358           Generate code for SH4-200 without in such a way that the floating-
21359           point unit is not used.
21360
21361       -m4-200-single
21362           Generate code for SH4-200 assuming the floating-point unit is in
21363           single-precision mode by default.
21364
21365       -m4-200-single-only
21366           Generate code for SH4-200 in such a way that no double-precision
21367           floating-point operations are used.
21368
21369       -m4-300
21370           Generate code for SH4-300.
21371
21372       -m4-300-nofpu
21373           Generate code for SH4-300 without in such a way that the floating-
21374           point unit is not used.
21375
21376       -m4-300-single
21377           Generate code for SH4-300 in such a way that no double-precision
21378           floating-point operations are used.
21379
21380       -m4-300-single-only
21381           Generate code for SH4-300 in such a way that no double-precision
21382           floating-point operations are used.
21383
21384       -m4-340
21385           Generate code for SH4-340 (no MMU, no FPU).
21386
21387       -m4-500
21388           Generate code for SH4-500 (no FPU).  Passes -isa=sh4-nofpu to the
21389           assembler.
21390
21391       -m4a-nofpu
21392           Generate code for the SH4al-dsp, or for a SH4a in such a way that
21393           the floating-point unit is not used.
21394
21395       -m4a-single-only
21396           Generate code for the SH4a, in such a way that no double-precision
21397           floating-point operations are used.
21398
21399       -m4a-single
21400           Generate code for the SH4a assuming the floating-point unit is in
21401           single-precision mode by default.
21402
21403       -m4a
21404           Generate code for the SH4a.
21405
21406       -m4al
21407           Same as -m4a-nofpu, except that it implicitly passes -dsp to the
21408           assembler.  GCC doesn't generate any DSP instructions at the
21409           moment.
21410
21411       -mb Compile code for the processor in big-endian mode.
21412
21413       -ml Compile code for the processor in little-endian mode.
21414
21415       -mdalign
21416           Align doubles at 64-bit boundaries.  Note that this changes the
21417           calling conventions, and thus some functions from the standard C
21418           library do not work unless you recompile it first with -mdalign.
21419
21420       -mrelax
21421           Shorten some address references at link time, when possible; uses
21422           the linker option -relax.
21423
21424       -mbigtable
21425           Use 32-bit offsets in "switch" tables.  The default is to use
21426           16-bit offsets.
21427
21428       -mbitops
21429           Enable the use of bit manipulation instructions on SH2A.
21430
21431       -mfmovd
21432           Enable the use of the instruction "fmovd".  Check -mdalign for
21433           alignment constraints.
21434
21435       -mrenesas
21436           Comply with the calling conventions defined by Renesas.
21437
21438       -mno-renesas
21439           Comply with the calling conventions defined for GCC before the
21440           Renesas conventions were available.  This option is the default for
21441           all targets of the SH toolchain.
21442
21443       -mnomacsave
21444           Mark the "MAC" register as call-clobbered, even if -mrenesas is
21445           given.
21446
21447       -mieee
21448       -mno-ieee
21449           Control the IEEE compliance of floating-point comparisons, which
21450           affects the handling of cases where the result of a comparison is
21451           unordered.  By default -mieee is implicitly enabled.  If
21452           -ffinite-math-only is enabled -mno-ieee is implicitly set, which
21453           results in faster floating-point greater-equal and less-equal
21454           comparisons.  The implicit settings can be overridden by specifying
21455           either -mieee or -mno-ieee.
21456
21457       -minline-ic_invalidate
21458           Inline code to invalidate instruction cache entries after setting
21459           up nested function trampolines.  This option has no effect if
21460           -musermode is in effect and the selected code generation option
21461           (e.g. -m4) does not allow the use of the "icbi" instruction.  If
21462           the selected code generation option does not allow the use of the
21463           "icbi" instruction, and -musermode is not in effect, the inlined
21464           code manipulates the instruction cache address array directly with
21465           an associative write.  This not only requires privileged mode at
21466           run time, but it also fails if the cache line had been mapped via
21467           the TLB and has become unmapped.
21468
21469       -misize
21470           Dump instruction size and location in the assembly code.
21471
21472       -mpadstruct
21473           This option is deprecated.  It pads structures to multiple of 4
21474           bytes, which is incompatible with the SH ABI.
21475
21476       -matomic-model=model
21477           Sets the model of atomic operations and additional parameters as a
21478           comma separated list.  For details on the atomic built-in functions
21479           see __atomic Builtins.  The following models and parameters are
21480           supported:
21481
21482           none
21483               Disable compiler generated atomic sequences and emit library
21484               calls for atomic operations.  This is the default if the target
21485               is not "sh*-*-linux*".
21486
21487           soft-gusa
21488               Generate GNU/Linux compatible gUSA software atomic sequences
21489               for the atomic built-in functions.  The generated atomic
21490               sequences require additional support from the
21491               interrupt/exception handling code of the system and are only
21492               suitable for SH3* and SH4* single-core systems.  This option is
21493               enabled by default when the target is "sh*-*-linux*" and SH3*
21494               or SH4*.  When the target is SH4A, this option also partially
21495               utilizes the hardware atomic instructions "movli.l" and
21496               "movco.l" to create more efficient code, unless strict is
21497               specified.
21498
21499           soft-tcb
21500               Generate software atomic sequences that use a variable in the
21501               thread control block.  This is a variation of the gUSA
21502               sequences which can also be used on SH1* and SH2* targets.  The
21503               generated atomic sequences require additional support from the
21504               interrupt/exception handling code of the system and are only
21505               suitable for single-core systems.  When using this model, the
21506               gbr-offset= parameter has to be specified as well.
21507
21508           soft-imask
21509               Generate software atomic sequences that temporarily disable
21510               interrupts by setting "SR.IMASK = 1111".  This model works only
21511               when the program runs in privileged mode and is only suitable
21512               for single-core systems.  Additional support from the
21513               interrupt/exception handling code of the system is not
21514               required.  This model is enabled by default when the target is
21515               "sh*-*-linux*" and SH1* or SH2*.
21516
21517           hard-llcs
21518               Generate hardware atomic sequences using the "movli.l" and
21519               "movco.l" instructions only.  This is only available on SH4A
21520               and is suitable for multi-core systems.  Since the hardware
21521               instructions support only 32 bit atomic variables access to 8
21522               or 16 bit variables is emulated with 32 bit accesses.  Code
21523               compiled with this option is also compatible with other
21524               software atomic model interrupt/exception handling systems if
21525               executed on an SH4A system.  Additional support from the
21526               interrupt/exception handling code of the system is not required
21527               for this model.
21528
21529           gbr-offset=
21530               This parameter specifies the offset in bytes of the variable in
21531               the thread control block structure that should be used by the
21532               generated atomic sequences when the soft-tcb model has been
21533               selected.  For other models this parameter is ignored.  The
21534               specified value must be an integer multiple of four and in the
21535               range 0-1020.
21536
21537           strict
21538               This parameter prevents mixed usage of multiple atomic models,
21539               even if they are compatible, and makes the compiler generate
21540               atomic sequences of the specified model only.
21541
21542       -mtas
21543           Generate the "tas.b" opcode for "__atomic_test_and_set".  Notice
21544           that depending on the particular hardware and software
21545           configuration this can degrade overall performance due to the
21546           operand cache line flushes that are implied by the "tas.b"
21547           instruction.  On multi-core SH4A processors the "tas.b" instruction
21548           must be used with caution since it can result in data corruption
21549           for certain cache configurations.
21550
21551       -mprefergot
21552           When generating position-independent code, emit function calls
21553           using the Global Offset Table instead of the Procedure Linkage
21554           Table.
21555
21556       -musermode
21557       -mno-usermode
21558           Don't allow (allow) the compiler generating privileged mode code.
21559           Specifying -musermode also implies -mno-inline-ic_invalidate if the
21560           inlined code would not work in user mode.  -musermode is the
21561           default when the target is "sh*-*-linux*".  If the target is SH1*
21562           or SH2* -musermode has no effect, since there is no user mode.
21563
21564       -multcost=number
21565           Set the cost to assume for a multiply insn.
21566
21567       -mdiv=strategy
21568           Set the division strategy to be used for integer division
21569           operations.  strategy can be one of:
21570
21571           call-div1
21572               Calls a library function that uses the single-step division
21573               instruction "div1" to perform the operation.  Division by zero
21574               calculates an unspecified result and does not trap.  This is
21575               the default except for SH4, SH2A and SHcompact.
21576
21577           call-fp
21578               Calls a library function that performs the operation in double
21579               precision floating point.  Division by zero causes a floating-
21580               point exception.  This is the default for SHcompact with FPU.
21581               Specifying this for targets that do not have a double precision
21582               FPU defaults to "call-div1".
21583
21584           call-table
21585               Calls a library function that uses a lookup table for small
21586               divisors and the "div1" instruction with case distinction for
21587               larger divisors.  Division by zero calculates an unspecified
21588               result and does not trap.  This is the default for SH4.
21589               Specifying this for targets that do not have dynamic shift
21590               instructions defaults to "call-div1".
21591
21592           When a division strategy has not been specified the default
21593           strategy is selected based on the current target.  For SH2A the
21594           default strategy is to use the "divs" and "divu" instructions
21595           instead of library function calls.
21596
21597       -maccumulate-outgoing-args
21598           Reserve space once for outgoing arguments in the function prologue
21599           rather than around each call.  Generally beneficial for performance
21600           and size.  Also needed for unwinding to avoid changing the stack
21601           frame around conditional code.
21602
21603       -mdivsi3_libfunc=name
21604           Set the name of the library function used for 32-bit signed
21605           division to name.  This only affects the name used in the call
21606           division strategies, and the compiler still expects the same sets
21607           of input/output/clobbered registers as if this option were not
21608           present.
21609
21610       -mfixed-range=register-range
21611           Generate code treating the given register range as fixed registers.
21612           A fixed register is one that the register allocator can not use.
21613           This is useful when compiling kernel code.  A register range is
21614           specified as two registers separated by a dash.  Multiple register
21615           ranges can be specified separated by a comma.
21616
21617       -mbranch-cost=num
21618           Assume num to be the cost for a branch instruction.  Higher numbers
21619           make the compiler try to generate more branch-free code if
21620           possible.  If not specified the value is selected depending on the
21621           processor type that is being compiled for.
21622
21623       -mzdcbranch
21624       -mno-zdcbranch
21625           Assume (do not assume) that zero displacement conditional branch
21626           instructions "bt" and "bf" are fast.  If -mzdcbranch is specified,
21627           the compiler prefers zero displacement branch code sequences.  This
21628           is enabled by default when generating code for SH4 and SH4A.  It
21629           can be explicitly disabled by specifying -mno-zdcbranch.
21630
21631       -mcbranch-force-delay-slot
21632           Force the usage of delay slots for conditional branches, which
21633           stuffs the delay slot with a "nop" if a suitable instruction cannot
21634           be found.  By default this option is disabled.  It can be enabled
21635           to work around hardware bugs as found in the original SH7055.
21636
21637       -mfused-madd
21638       -mno-fused-madd
21639           Generate code that uses (does not use) the floating-point multiply
21640           and accumulate instructions.  These instructions are generated by
21641           default if hardware floating point is used.  The machine-dependent
21642           -mfused-madd option is now mapped to the machine-independent
21643           -ffp-contract=fast option, and -mno-fused-madd is mapped to
21644           -ffp-contract=off.
21645
21646       -mfsca
21647       -mno-fsca
21648           Allow or disallow the compiler to emit the "fsca" instruction for
21649           sine and cosine approximations.  The option -mfsca must be used in
21650           combination with -funsafe-math-optimizations.  It is enabled by
21651           default when generating code for SH4A.  Using -mno-fsca disables
21652           sine and cosine approximations even if -funsafe-math-optimizations
21653           is in effect.
21654
21655       -mfsrra
21656       -mno-fsrra
21657           Allow or disallow the compiler to emit the "fsrra" instruction for
21658           reciprocal square root approximations.  The option -mfsrra must be
21659           used in combination with -funsafe-math-optimizations and
21660           -ffinite-math-only.  It is enabled by default when generating code
21661           for SH4A.  Using -mno-fsrra disables reciprocal square root
21662           approximations even if -funsafe-math-optimizations and
21663           -ffinite-math-only are in effect.
21664
21665       -mpretend-cmove
21666           Prefer zero-displacement conditional branches for conditional move
21667           instruction patterns.  This can result in faster code on the SH4
21668           processor.
21669
21670       -mfdpic
21671           Generate code using the FDPIC ABI.
21672
21673       Solaris 2 Options
21674
21675       These -m options are supported on Solaris 2:
21676
21677       -mclear-hwcap
21678           -mclear-hwcap tells the compiler to remove the hardware
21679           capabilities generated by the Solaris assembler.  This is only
21680           necessary when object files use ISA extensions not supported by the
21681           current machine, but check at runtime whether or not to use them.
21682
21683       -mimpure-text
21684           -mimpure-text, used in addition to -shared, tells the compiler to
21685           not pass -z text to the linker when linking a shared object.  Using
21686           this option, you can link position-dependent code into a shared
21687           object.
21688
21689           -mimpure-text suppresses the "relocations remain against
21690           allocatable but non-writable sections" linker error message.
21691           However, the necessary relocations trigger copy-on-write, and the
21692           shared object is not actually shared across processes.  Instead of
21693           using -mimpure-text, you should compile all source code with -fpic
21694           or -fPIC.
21695
21696       These switches are supported in addition to the above on Solaris 2:
21697
21698       -pthreads
21699           This is a synonym for -pthread.
21700
21701       SPARC Options
21702
21703       These -m options are supported on the SPARC:
21704
21705       -mno-app-regs
21706       -mapp-regs
21707           Specify -mapp-regs to generate output using the global registers 2
21708           through 4, which the SPARC SVR4 ABI reserves for applications.
21709           Like the global register 1, each global register 2 through 4 is
21710           then treated as an allocable register that is clobbered by function
21711           calls.  This is the default.
21712
21713           To be fully SVR4 ABI-compliant at the cost of some performance
21714           loss, specify -mno-app-regs.  You should compile libraries and
21715           system software with this option.
21716
21717       -mflat
21718       -mno-flat
21719           With -mflat, the compiler does not generate save/restore
21720           instructions and uses a "flat" or single register window model.
21721           This model is compatible with the regular register window model.
21722           The local registers and the input registers (0--5) are still
21723           treated as "call-saved" registers and are saved on the stack as
21724           needed.
21725
21726           With -mno-flat (the default), the compiler generates save/restore
21727           instructions (except for leaf functions).  This is the normal
21728           operating mode.
21729
21730       -mfpu
21731       -mhard-float
21732           Generate output containing floating-point instructions.  This is
21733           the default.
21734
21735       -mno-fpu
21736       -msoft-float
21737           Generate output containing library calls for floating point.
21738           Warning: the requisite libraries are not available for all SPARC
21739           targets.  Normally the facilities of the machine's usual C compiler
21740           are used, but this cannot be done directly in cross-compilation.
21741           You must make your own arrangements to provide suitable library
21742           functions for cross-compilation.  The embedded targets sparc-*-aout
21743           and sparclite-*-* do provide software floating-point support.
21744
21745           -msoft-float changes the calling convention in the output file;
21746           therefore, it is only useful if you compile all of a program with
21747           this option.  In particular, you need to compile libgcc.a, the
21748           library that comes with GCC, with -msoft-float in order for this to
21749           work.
21750
21751       -mhard-quad-float
21752           Generate output containing quad-word (long double) floating-point
21753           instructions.
21754
21755       -msoft-quad-float
21756           Generate output containing library calls for quad-word (long
21757           double) floating-point instructions.  The functions called are
21758           those specified in the SPARC ABI.  This is the default.
21759
21760           As of this writing, there are no SPARC implementations that have
21761           hardware support for the quad-word floating-point instructions.
21762           They all invoke a trap handler for one of these instructions, and
21763           then the trap handler emulates the effect of the instruction.
21764           Because of the trap handler overhead, this is much slower than
21765           calling the ABI library routines.  Thus the -msoft-quad-float
21766           option is the default.
21767
21768       -mno-unaligned-doubles
21769       -munaligned-doubles
21770           Assume that doubles have 8-byte alignment.  This is the default.
21771
21772           With -munaligned-doubles, GCC assumes that doubles have 8-byte
21773           alignment only if they are contained in another type, or if they
21774           have an absolute address.  Otherwise, it assumes they have 4-byte
21775           alignment.  Specifying this option avoids some rare compatibility
21776           problems with code generated by other compilers.  It is not the
21777           default because it results in a performance loss, especially for
21778           floating-point code.
21779
21780       -muser-mode
21781       -mno-user-mode
21782           Do not generate code that can only run in supervisor mode.  This is
21783           relevant only for the "casa" instruction emitted for the LEON3
21784           processor.  This is the default.
21785
21786       -mfaster-structs
21787       -mno-faster-structs
21788           With -mfaster-structs, the compiler assumes that structures should
21789           have 8-byte alignment.  This enables the use of pairs of "ldd" and
21790           "std" instructions for copies in structure assignment, in place of
21791           twice as many "ld" and "st" pairs.  However, the use of this
21792           changed alignment directly violates the SPARC ABI.  Thus, it's
21793           intended only for use on targets where the developer acknowledges
21794           that their resulting code is not directly in line with the rules of
21795           the ABI.
21796
21797       -mstd-struct-return
21798       -mno-std-struct-return
21799           With -mstd-struct-return, the compiler generates checking code in
21800           functions returning structures or unions to detect size mismatches
21801           between the two sides of function calls, as per the 32-bit ABI.
21802
21803           The default is -mno-std-struct-return.  This option has no effect
21804           in 64-bit mode.
21805
21806       -mlra
21807       -mno-lra
21808           Enable Local Register Allocation.  This is the default for SPARC
21809           since GCC 7 so -mno-lra needs to be passed to get old Reload.
21810
21811       -mcpu=cpu_type
21812           Set the instruction set, register set, and instruction scheduling
21813           parameters for machine type cpu_type.  Supported values for
21814           cpu_type are v7, cypress, v8, supersparc, hypersparc, leon, leon3,
21815           leon3v7, sparclite, f930, f934, sparclite86x, sparclet, tsc701, v9,
21816           ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4,
21817           niagara7 and m8.
21818
21819           Native Solaris and GNU/Linux toolchains also support the value
21820           native, which selects the best architecture option for the host
21821           processor.  -mcpu=native has no effect if GCC does not recognize
21822           the processor.
21823
21824           Default instruction scheduling parameters are used for values that
21825           select an architecture and not an implementation.  These are v7,
21826           v8, sparclite, sparclet, v9.
21827
21828           Here is a list of each supported architecture and their supported
21829           implementations.
21830
21831           v7  cypress, leon3v7
21832
21833           v8  supersparc, hypersparc, leon, leon3
21834
21835           sparclite
21836               f930, f934, sparclite86x
21837
21838           sparclet
21839               tsc701
21840
21841           v9  ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4,
21842               niagara7, m8
21843
21844           By default (unless configured otherwise), GCC generates code for
21845           the V7 variant of the SPARC architecture.  With -mcpu=cypress, the
21846           compiler additionally optimizes it for the Cypress CY7C602 chip, as
21847           used in the SPARCStation/SPARCServer 3xx series.  This is also
21848           appropriate for the older SPARCStation 1, 2, IPX etc.
21849
21850           With -mcpu=v8, GCC generates code for the V8 variant of the SPARC
21851           architecture.  The only difference from V7 code is that the
21852           compiler emits the integer multiply and integer divide instructions
21853           which exist in SPARC-V8 but not in SPARC-V7.  With
21854           -mcpu=supersparc, the compiler additionally optimizes it for the
21855           SuperSPARC chip, as used in the SPARCStation 10, 1000 and 2000
21856           series.
21857
21858           With -mcpu=sparclite, GCC generates code for the SPARClite variant
21859           of the SPARC architecture.  This adds the integer multiply, integer
21860           divide step and scan ("ffs") instructions which exist in SPARClite
21861           but not in SPARC-V7.  With -mcpu=f930, the compiler additionally
21862           optimizes it for the Fujitsu MB86930 chip, which is the original
21863           SPARClite, with no FPU.  With -mcpu=f934, the compiler additionally
21864           optimizes it for the Fujitsu MB86934 chip, which is the more recent
21865           SPARClite with FPU.
21866
21867           With -mcpu=sparclet, GCC generates code for the SPARClet variant of
21868           the SPARC architecture.  This adds the integer multiply,
21869           multiply/accumulate, integer divide step and scan ("ffs")
21870           instructions which exist in SPARClet but not in SPARC-V7.  With
21871           -mcpu=tsc701, the compiler additionally optimizes it for the TEMIC
21872           SPARClet chip.
21873
21874           With -mcpu=v9, GCC generates code for the V9 variant of the SPARC
21875           architecture.  This adds 64-bit integer and floating-point move
21876           instructions, 3 additional floating-point condition code registers
21877           and conditional move instructions.  With -mcpu=ultrasparc, the
21878           compiler additionally optimizes it for the Sun UltraSPARC I/II/IIi
21879           chips.  With -mcpu=ultrasparc3, the compiler additionally optimizes
21880           it for the Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+ chips.  With
21881           -mcpu=niagara, the compiler additionally optimizes it for Sun
21882           UltraSPARC T1 chips.  With -mcpu=niagara2, the compiler
21883           additionally optimizes it for Sun UltraSPARC T2 chips. With
21884           -mcpu=niagara3, the compiler additionally optimizes it for Sun
21885           UltraSPARC T3 chips.  With -mcpu=niagara4, the compiler
21886           additionally optimizes it for Sun UltraSPARC T4 chips.  With
21887           -mcpu=niagara7, the compiler additionally optimizes it for Oracle
21888           SPARC M7 chips.  With -mcpu=m8, the compiler additionally optimizes
21889           it for Oracle M8 chips.
21890
21891       -mtune=cpu_type
21892           Set the instruction scheduling parameters for machine type
21893           cpu_type, but do not set the instruction set or register set that
21894           the option -mcpu=cpu_type does.
21895
21896           The same values for -mcpu=cpu_type can be used for -mtune=cpu_type,
21897           but the only useful values are those that select a particular CPU
21898           implementation.  Those are cypress, supersparc, hypersparc, leon,
21899           leon3, leon3v7, f930, f934, sparclite86x, tsc701, ultrasparc,
21900           ultrasparc3, niagara, niagara2, niagara3, niagara4, niagara7 and
21901           m8.  With native Solaris and GNU/Linux toolchains, native can also
21902           be used.
21903
21904       -mv8plus
21905       -mno-v8plus
21906           With -mv8plus, GCC generates code for the SPARC-V8+ ABI.  The
21907           difference from the V8 ABI is that the global and out registers are
21908           considered 64 bits wide.  This is enabled by default on Solaris in
21909           32-bit mode for all SPARC-V9 processors.
21910
21911       -mvis
21912       -mno-vis
21913           With -mvis, GCC generates code that takes advantage of the
21914           UltraSPARC Visual Instruction Set extensions.  The default is
21915           -mno-vis.
21916
21917       -mvis2
21918       -mno-vis2
21919           With -mvis2, GCC generates code that takes advantage of version 2.0
21920           of the UltraSPARC Visual Instruction Set extensions.  The default
21921           is -mvis2 when targeting a cpu that supports such instructions,
21922           such as UltraSPARC-III and later.  Setting -mvis2 also sets -mvis.
21923
21924       -mvis3
21925       -mno-vis3
21926           With -mvis3, GCC generates code that takes advantage of version 3.0
21927           of the UltraSPARC Visual Instruction Set extensions.  The default
21928           is -mvis3 when targeting a cpu that supports such instructions,
21929           such as niagara-3 and later.  Setting -mvis3 also sets -mvis2 and
21930           -mvis.
21931
21932       -mvis4
21933       -mno-vis4
21934           With -mvis4, GCC generates code that takes advantage of version 4.0
21935           of the UltraSPARC Visual Instruction Set extensions.  The default
21936           is -mvis4 when targeting a cpu that supports such instructions,
21937           such as niagara-7 and later.  Setting -mvis4 also sets -mvis3,
21938           -mvis2 and -mvis.
21939
21940       -mvis4b
21941       -mno-vis4b
21942           With -mvis4b, GCC generates code that takes advantage of version
21943           4.0 of the UltraSPARC Visual Instruction Set extensions, plus the
21944           additional VIS instructions introduced in the Oracle SPARC
21945           Architecture 2017.  The default is -mvis4b when targeting a cpu
21946           that supports such instructions, such as m8 and later.  Setting
21947           -mvis4b also sets -mvis4, -mvis3, -mvis2 and -mvis.
21948
21949       -mcbcond
21950       -mno-cbcond
21951           With -mcbcond, GCC generates code that takes advantage of the
21952           UltraSPARC Compare-and-Branch-on-Condition instructions.  The
21953           default is -mcbcond when targeting a CPU that supports such
21954           instructions, such as Niagara-4 and later.
21955
21956       -mfmaf
21957       -mno-fmaf
21958           With -mfmaf, GCC generates code that takes advantage of the
21959           UltraSPARC Fused Multiply-Add Floating-point instructions.  The
21960           default is -mfmaf when targeting a CPU that supports such
21961           instructions, such as Niagara-3 and later.
21962
21963       -mfsmuld
21964       -mno-fsmuld
21965           With -mfsmuld, GCC generates code that takes advantage of the
21966           Floating-point Multiply Single to Double (FsMULd) instruction.  The
21967           default is -mfsmuld when targeting a CPU supporting the
21968           architecture versions V8 or V9 with FPU except -mcpu=leon.
21969
21970       -mpopc
21971       -mno-popc
21972           With -mpopc, GCC generates code that takes advantage of the
21973           UltraSPARC Population Count instruction.  The default is -mpopc
21974           when targeting a CPU that supports such an instruction, such as
21975           Niagara-2 and later.
21976
21977       -msubxc
21978       -mno-subxc
21979           With -msubxc, GCC generates code that takes advantage of the
21980           UltraSPARC Subtract-Extended-with-Carry instruction.  The default
21981           is -msubxc when targeting a CPU that supports such an instruction,
21982           such as Niagara-7 and later.
21983
21984       -mfix-at697f
21985           Enable the documented workaround for the single erratum of the
21986           Atmel AT697F processor (which corresponds to erratum #13 of the
21987           AT697E processor).
21988
21989       -mfix-ut699
21990           Enable the documented workarounds for the floating-point errata and
21991           the data cache nullify errata of the UT699 processor.
21992
21993       -mfix-ut700
21994           Enable the documented workaround for the back-to-back store errata
21995           of the UT699E/UT700 processor.
21996
21997       -mfix-gr712rc
21998           Enable the documented workaround for the back-to-back store errata
21999           of the GR712RC processor.
22000
22001       These -m options are supported in addition to the above on SPARC-V9
22002       processors in 64-bit environments:
22003
22004       -m32
22005       -m64
22006           Generate code for a 32-bit or 64-bit environment.  The 32-bit
22007           environment sets int, long and pointer to 32 bits.  The 64-bit
22008           environment sets int to 32 bits and long and pointer to 64 bits.
22009
22010       -mcmodel=which
22011           Set the code model to one of
22012
22013           medlow
22014               The Medium/Low code model: 64-bit addresses, programs must be
22015               linked in the low 32 bits of memory.  Programs can be
22016               statically or dynamically linked.
22017
22018           medmid
22019               The Medium/Middle code model: 64-bit addresses, programs must
22020               be linked in the low 44 bits of memory, the text and data
22021               segments must be less than 2GB in size and the data segment
22022               must be located within 2GB of the text segment.
22023
22024           medany
22025               The Medium/Anywhere code model: 64-bit addresses, programs may
22026               be linked anywhere in memory, the text and data segments must
22027               be less than 2GB in size and the data segment must be located
22028               within 2GB of the text segment.
22029
22030           embmedany
22031               The Medium/Anywhere code model for embedded systems: 64-bit
22032               addresses, the text and data segments must be less than 2GB in
22033               size, both starting anywhere in memory (determined at link
22034               time).  The global register %g4 points to the base of the data
22035               segment.  Programs are statically linked and PIC is not
22036               supported.
22037
22038       -mmemory-model=mem-model
22039           Set the memory model in force on the processor to one of
22040
22041           default
22042               The default memory model for the processor and operating
22043               system.
22044
22045           rmo Relaxed Memory Order
22046
22047           pso Partial Store Order
22048
22049           tso Total Store Order
22050
22051           sc  Sequential Consistency
22052
22053           These memory models are formally defined in Appendix D of the
22054           SPARC-V9 architecture manual, as set in the processor's "PSTATE.MM"
22055           field.
22056
22057       -mstack-bias
22058       -mno-stack-bias
22059           With -mstack-bias, GCC assumes that the stack pointer, and frame
22060           pointer if present, are offset by -2047 which must be added back
22061           when making stack frame references.  This is the default in 64-bit
22062           mode.  Otherwise, assume no such offset is present.
22063
22064       SPU Options
22065
22066       These -m options are supported on the SPU:
22067
22068       -mwarn-reloc
22069       -merror-reloc
22070           The loader for SPU does not handle dynamic relocations.  By
22071           default, GCC gives an error when it generates code that requires a
22072           dynamic relocation.  -mno-error-reloc disables the error,
22073           -mwarn-reloc generates a warning instead.
22074
22075       -msafe-dma
22076       -munsafe-dma
22077           Instructions that initiate or test completion of DMA must not be
22078           reordered with respect to loads and stores of the memory that is
22079           being accessed.  With -munsafe-dma you must use the "volatile"
22080           keyword to protect memory accesses, but that can lead to
22081           inefficient code in places where the memory is known to not change.
22082           Rather than mark the memory as volatile, you can use -msafe-dma to
22083           tell the compiler to treat the DMA instructions as potentially
22084           affecting all memory.
22085
22086       -mbranch-hints
22087           By default, GCC generates a branch hint instruction to avoid
22088           pipeline stalls for always-taken or probably-taken branches.  A
22089           hint is not generated closer than 8 instructions away from its
22090           branch.  There is little reason to disable them, except for
22091           debugging purposes, or to make an object a little bit smaller.
22092
22093       -msmall-mem
22094       -mlarge-mem
22095           By default, GCC generates code assuming that addresses are never
22096           larger than 18 bits.  With -mlarge-mem code is generated that
22097           assumes a full 32-bit address.
22098
22099       -mstdmain
22100           By default, GCC links against startup code that assumes the SPU-
22101           style main function interface (which has an unconventional
22102           parameter list).  With -mstdmain, GCC links your program against
22103           startup code that assumes a C99-style interface to "main",
22104           including a local copy of "argv" strings.
22105
22106       -mfixed-range=register-range
22107           Generate code treating the given register range as fixed registers.
22108           A fixed register is one that the register allocator cannot use.
22109           This is useful when compiling kernel code.  A register range is
22110           specified as two registers separated by a dash.  Multiple register
22111           ranges can be specified separated by a comma.
22112
22113       -mea32
22114       -mea64
22115           Compile code assuming that pointers to the PPU address space
22116           accessed via the "__ea" named address space qualifier are either 32
22117           or 64 bits wide.  The default is 32 bits.  As this is an ABI-
22118           changing option, all object code in an executable must be compiled
22119           with the same setting.
22120
22121       -maddress-space-conversion
22122       -mno-address-space-conversion
22123           Allow/disallow treating the "__ea" address space as superset of the
22124           generic address space.  This enables explicit type casts between
22125           "__ea" and generic pointer as well as implicit conversions of
22126           generic pointers to "__ea" pointers.  The default is to allow
22127           address space pointer conversions.
22128
22129       -mcache-size=cache-size
22130           This option controls the version of libgcc that the compiler links
22131           to an executable and selects a software-managed cache for accessing
22132           variables in the "__ea" address space with a particular cache size.
22133           Possible options for cache-size are 8, 16, 32, 64 and 128.  The
22134           default cache size is 64KB.
22135
22136       -matomic-updates
22137       -mno-atomic-updates
22138           This option controls the version of libgcc that the compiler links
22139           to an executable and selects whether atomic updates to the
22140           software-managed cache of PPU-side variables are used.  If you use
22141           atomic updates, changes to a PPU variable from SPU code using the
22142           "__ea" named address space qualifier do not interfere with changes
22143           to other PPU variables residing in the same cache line from PPU
22144           code.  If you do not use atomic updates, such interference may
22145           occur; however, writing back cache lines is more efficient.  The
22146           default behavior is to use atomic updates.
22147
22148       -mdual-nops
22149       -mdual-nops=n
22150           By default, GCC inserts NOPs to increase dual issue when it expects
22151           it to increase performance.  n can be a value from 0 to 10.  A
22152           smaller n inserts fewer NOPs.  10 is the default, 0 is the same as
22153           -mno-dual-nops.  Disabled with -Os.
22154
22155       -mhint-max-nops=n
22156           Maximum number of NOPs to insert for a branch hint.  A branch hint
22157           must be at least 8 instructions away from the branch it is
22158           affecting.  GCC inserts up to n NOPs to enforce this, otherwise it
22159           does not generate the branch hint.
22160
22161       -mhint-max-distance=n
22162           The encoding of the branch hint instruction limits the hint to be
22163           within 256 instructions of the branch it is affecting.  By default,
22164           GCC makes sure it is within 125.
22165
22166       -msafe-hints
22167           Work around a hardware bug that causes the SPU to stall
22168           indefinitely.  By default, GCC inserts the "hbrp" instruction to
22169           make sure this stall won't happen.
22170
22171       Options for System V
22172
22173       These additional options are available on System V Release 4 for
22174       compatibility with other compilers on those systems:
22175
22176       -G  Create a shared object.  It is recommended that -symbolic or
22177           -shared be used instead.
22178
22179       -Qy Identify the versions of each tool used by the compiler, in a
22180           ".ident" assembler directive in the output.
22181
22182       -Qn Refrain from adding ".ident" directives to the output file (this is
22183           the default).
22184
22185       -YP,dirs
22186           Search the directories dirs, and no others, for libraries specified
22187           with -l.
22188
22189       -Ym,dir
22190           Look in the directory dir to find the M4 preprocessor.  The
22191           assembler uses this option.
22192
22193       TILE-Gx Options
22194
22195       These -m options are supported on the TILE-Gx:
22196
22197       -mcmodel=small
22198           Generate code for the small model.  The distance for direct calls
22199           is limited to 500M in either direction.  PC-relative addresses are
22200           32 bits.  Absolute addresses support the full address range.
22201
22202       -mcmodel=large
22203           Generate code for the large model.  There is no limitation on call
22204           distance, pc-relative addresses, or absolute addresses.
22205
22206       -mcpu=name
22207           Selects the type of CPU to be targeted.  Currently the only
22208           supported type is tilegx.
22209
22210       -m32
22211       -m64
22212           Generate code for a 32-bit or 64-bit environment.  The 32-bit
22213           environment sets int, long, and pointer to 32 bits.  The 64-bit
22214           environment sets int to 32 bits and long and pointer to 64 bits.
22215
22216       -mbig-endian
22217       -mlittle-endian
22218           Generate code in big/little endian mode, respectively.
22219
22220       TILEPro Options
22221
22222       These -m options are supported on the TILEPro:
22223
22224       -mcpu=name
22225           Selects the type of CPU to be targeted.  Currently the only
22226           supported type is tilepro.
22227
22228       -m32
22229           Generate code for a 32-bit environment, which sets int, long, and
22230           pointer to 32 bits.  This is the only supported behavior so the
22231           flag is essentially ignored.
22232
22233       V850 Options
22234
22235       These -m options are defined for V850 implementations:
22236
22237       -mlong-calls
22238       -mno-long-calls
22239           Treat all calls as being far away (near).  If calls are assumed to
22240           be far away, the compiler always loads the function's address into
22241           a register, and calls indirect through the pointer.
22242
22243       -mno-ep
22244       -mep
22245           Do not optimize (do optimize) basic blocks that use the same index
22246           pointer 4 or more times to copy pointer into the "ep" register, and
22247           use the shorter "sld" and "sst" instructions.  The -mep option is
22248           on by default if you optimize.
22249
22250       -mno-prolog-function
22251       -mprolog-function
22252           Do not use (do use) external functions to save and restore
22253           registers at the prologue and epilogue of a function.  The external
22254           functions are slower, but use less code space if more than one
22255           function saves the same number of registers.  The -mprolog-function
22256           option is on by default if you optimize.
22257
22258       -mspace
22259           Try to make the code as small as possible.  At present, this just
22260           turns on the -mep and -mprolog-function options.
22261
22262       -mtda=n
22263           Put static or global variables whose size is n bytes or less into
22264           the tiny data area that register "ep" points to.  The tiny data
22265           area can hold up to 256 bytes in total (128 bytes for byte
22266           references).
22267
22268       -msda=n
22269           Put static or global variables whose size is n bytes or less into
22270           the small data area that register "gp" points to.  The small data
22271           area can hold up to 64 kilobytes.
22272
22273       -mzda=n
22274           Put static or global variables whose size is n bytes or less into
22275           the first 32 kilobytes of memory.
22276
22277       -mv850
22278           Specify that the target processor is the V850.
22279
22280       -mv850e3v5
22281           Specify that the target processor is the V850E3V5.  The
22282           preprocessor constant "__v850e3v5__" is defined if this option is
22283           used.
22284
22285       -mv850e2v4
22286           Specify that the target processor is the V850E3V5.  This is an
22287           alias for the -mv850e3v5 option.
22288
22289       -mv850e2v3
22290           Specify that the target processor is the V850E2V3.  The
22291           preprocessor constant "__v850e2v3__" is defined if this option is
22292           used.
22293
22294       -mv850e2
22295           Specify that the target processor is the V850E2.  The preprocessor
22296           constant "__v850e2__" is defined if this option is used.
22297
22298       -mv850e1
22299           Specify that the target processor is the V850E1.  The preprocessor
22300           constants "__v850e1__" and "__v850e__" are defined if this option
22301           is used.
22302
22303       -mv850es
22304           Specify that the target processor is the V850ES.  This is an alias
22305           for the -mv850e1 option.
22306
22307       -mv850e
22308           Specify that the target processor is the V850E.  The preprocessor
22309           constant "__v850e__" is defined if this option is used.
22310
22311           If neither -mv850 nor -mv850e nor -mv850e1 nor -mv850e2 nor
22312           -mv850e2v3 nor -mv850e3v5 are defined then a default target
22313           processor is chosen and the relevant __v850*__ preprocessor
22314           constant is defined.
22315
22316           The preprocessor constants "__v850" and "__v851__" are always
22317           defined, regardless of which processor variant is the target.
22318
22319       -mdisable-callt
22320       -mno-disable-callt
22321           This option suppresses generation of the "CALLT" instruction for
22322           the v850e, v850e1, v850e2, v850e2v3 and v850e3v5 flavors of the
22323           v850 architecture.
22324
22325           This option is enabled by default when the RH850 ABI is in use (see
22326           -mrh850-abi), and disabled by default when the GCC ABI is in use.
22327           If "CALLT" instructions are being generated then the C preprocessor
22328           symbol "__V850_CALLT__" is defined.
22329
22330       -mrelax
22331       -mno-relax
22332           Pass on (or do not pass on) the -mrelax command-line option to the
22333           assembler.
22334
22335       -mlong-jumps
22336       -mno-long-jumps
22337           Disable (or re-enable) the generation of PC-relative jump
22338           instructions.
22339
22340       -msoft-float
22341       -mhard-float
22342           Disable (or re-enable) the generation of hardware floating point
22343           instructions.  This option is only significant when the target
22344           architecture is V850E2V3 or higher.  If hardware floating point
22345           instructions are being generated then the C preprocessor symbol
22346           "__FPU_OK__" is defined, otherwise the symbol "__NO_FPU__" is
22347           defined.
22348
22349       -mloop
22350           Enables the use of the e3v5 LOOP instruction.  The use of this
22351           instruction is not enabled by default when the e3v5 architecture is
22352           selected because its use is still experimental.
22353
22354       -mrh850-abi
22355       -mghs
22356           Enables support for the RH850 version of the V850 ABI.  This is the
22357           default.  With this version of the ABI the following rules apply:
22358
22359           *   Integer sized structures and unions are returned via a memory
22360               pointer rather than a register.
22361
22362           *   Large structures and unions (more than 8 bytes in size) are
22363               passed by value.
22364
22365           *   Functions are aligned to 16-bit boundaries.
22366
22367           *   The -m8byte-align command-line option is supported.
22368
22369           *   The -mdisable-callt command-line option is enabled by default.
22370               The -mno-disable-callt command-line option is not supported.
22371
22372           When this version of the ABI is enabled the C preprocessor symbol
22373           "__V850_RH850_ABI__" is defined.
22374
22375       -mgcc-abi
22376           Enables support for the old GCC version of the V850 ABI.  With this
22377           version of the ABI the following rules apply:
22378
22379           *   Integer sized structures and unions are returned in register
22380               "r10".
22381
22382           *   Large structures and unions (more than 8 bytes in size) are
22383               passed by reference.
22384
22385           *   Functions are aligned to 32-bit boundaries, unless optimizing
22386               for size.
22387
22388           *   The -m8byte-align command-line option is not supported.
22389
22390           *   The -mdisable-callt command-line option is supported but not
22391               enabled by default.
22392
22393           When this version of the ABI is enabled the C preprocessor symbol
22394           "__V850_GCC_ABI__" is defined.
22395
22396       -m8byte-align
22397       -mno-8byte-align
22398           Enables support for "double" and "long long" types to be aligned on
22399           8-byte boundaries.  The default is to restrict the alignment of all
22400           objects to at most 4-bytes.  When -m8byte-align is in effect the C
22401           preprocessor symbol "__V850_8BYTE_ALIGN__" is defined.
22402
22403       -mbig-switch
22404           Generate code suitable for big switch tables.  Use this option only
22405           if the assembler/linker complain about out of range branches within
22406           a switch table.
22407
22408       -mapp-regs
22409           This option causes r2 and r5 to be used in the code generated by
22410           the compiler.  This setting is the default.
22411
22412       -mno-app-regs
22413           This option causes r2 and r5 to be treated as fixed registers.
22414
22415       VAX Options
22416
22417       These -m options are defined for the VAX:
22418
22419       -munix
22420           Do not output certain jump instructions ("aobleq" and so on) that
22421           the Unix assembler for the VAX cannot handle across long ranges.
22422
22423       -mgnu
22424           Do output those jump instructions, on the assumption that the GNU
22425           assembler is being used.
22426
22427       -mg Output code for G-format floating-point numbers instead of
22428           D-format.
22429
22430       Visium Options
22431
22432       -mdebug
22433           A program which performs file I/O and is destined to run on an MCM
22434           target should be linked with this option.  It causes the libraries
22435           libc.a and libdebug.a to be linked.  The program should be run on
22436           the target under the control of the GDB remote debugging stub.
22437
22438       -msim
22439           A program which performs file I/O and is destined to run on the
22440           simulator should be linked with option.  This causes libraries
22441           libc.a and libsim.a to be linked.
22442
22443       -mfpu
22444       -mhard-float
22445           Generate code containing floating-point instructions.  This is the
22446           default.
22447
22448       -mno-fpu
22449       -msoft-float
22450           Generate code containing library calls for floating-point.
22451
22452           -msoft-float changes the calling convention in the output file;
22453           therefore, it is only useful if you compile all of a program with
22454           this option.  In particular, you need to compile libgcc.a, the
22455           library that comes with GCC, with -msoft-float in order for this to
22456           work.
22457
22458       -mcpu=cpu_type
22459           Set the instruction set, register set, and instruction scheduling
22460           parameters for machine type cpu_type.  Supported values for
22461           cpu_type are mcm, gr5 and gr6.
22462
22463           mcm is a synonym of gr5 present for backward compatibility.
22464
22465           By default (unless configured otherwise), GCC generates code for
22466           the GR5 variant of the Visium architecture.
22467
22468           With -mcpu=gr6, GCC generates code for the GR6 variant of the
22469           Visium architecture.  The only difference from GR5 code is that the
22470           compiler will generate block move instructions.
22471
22472       -mtune=cpu_type
22473           Set the instruction scheduling parameters for machine type
22474           cpu_type, but do not set the instruction set or register set that
22475           the option -mcpu=cpu_type would.
22476
22477       -msv-mode
22478           Generate code for the supervisor mode, where there are no
22479           restrictions on the access to general registers.  This is the
22480           default.
22481
22482       -muser-mode
22483           Generate code for the user mode, where the access to some general
22484           registers is forbidden: on the GR5, registers r24 to r31 cannot be
22485           accessed in this mode; on the GR6, only registers r29 to r31 are
22486           affected.
22487
22488       VMS Options
22489
22490       These -m options are defined for the VMS implementations:
22491
22492       -mvms-return-codes
22493           Return VMS condition codes from "main". The default is to return
22494           POSIX-style condition (e.g. error) codes.
22495
22496       -mdebug-main=prefix
22497           Flag the first routine whose name starts with prefix as the main
22498           routine for the debugger.
22499
22500       -mmalloc64
22501           Default to 64-bit memory allocation routines.
22502
22503       -mpointer-size=size
22504           Set the default size of pointers. Possible options for size are 32
22505           or short for 32 bit pointers, 64 or long for 64 bit pointers, and
22506           no for supporting only 32 bit pointers.  The later option disables
22507           "pragma pointer_size".
22508
22509       VxWorks Options
22510
22511       The options in this section are defined for all VxWorks targets.
22512       Options specific to the target hardware are listed with the other
22513       options for that target.
22514
22515       -mrtp
22516           GCC can generate code for both VxWorks kernels and real time
22517           processes (RTPs).  This option switches from the former to the
22518           latter.  It also defines the preprocessor macro "__RTP__".
22519
22520       -non-static
22521           Link an RTP executable against shared libraries rather than static
22522           libraries.  The options -static and -shared can also be used for
22523           RTPs; -static is the default.
22524
22525       -Bstatic
22526       -Bdynamic
22527           These options are passed down to the linker.  They are defined for
22528           compatibility with Diab.
22529
22530       -Xbind-lazy
22531           Enable lazy binding of function calls.  This option is equivalent
22532           to -Wl,-z,now and is defined for compatibility with Diab.
22533
22534       -Xbind-now
22535           Disable lazy binding of function calls.  This option is the default
22536           and is defined for compatibility with Diab.
22537
22538       x86 Options
22539
22540       These -m options are defined for the x86 family of computers.
22541
22542       -march=cpu-type
22543           Generate instructions for the machine type cpu-type.  In contrast
22544           to -mtune=cpu-type, which merely tunes the generated code for the
22545           specified cpu-type, -march=cpu-type allows GCC to generate code
22546           that may not run at all on processors other than the one indicated.
22547           Specifying -march=cpu-type implies -mtune=cpu-type.
22548
22549           The choices for cpu-type are:
22550
22551           native
22552               This selects the CPU to generate code for at compilation time
22553               by determining the processor type of the compiling machine.
22554               Using -march=native enables all instruction subsets supported
22555               by the local machine (hence the result might not run on
22556               different machines).  Using -mtune=native produces code
22557               optimized for the local machine under the constraints of the
22558               selected instruction set.
22559
22560           x86-64
22561               A generic CPU with 64-bit extensions.
22562
22563           i386
22564               Original Intel i386 CPU.
22565
22566           i486
22567               Intel i486 CPU.  (No scheduling is implemented for this chip.)
22568
22569           i586
22570           pentium
22571               Intel Pentium CPU with no MMX support.
22572
22573           lakemont
22574               Intel Lakemont MCU, based on Intel Pentium CPU.
22575
22576           pentium-mmx
22577               Intel Pentium MMX CPU, based on Pentium core with MMX
22578               instruction set support.
22579
22580           pentiumpro
22581               Intel Pentium Pro CPU.
22582
22583           i686
22584               When used with -march, the Pentium Pro instruction set is used,
22585               so the code runs on all i686 family chips.  When used with
22586               -mtune, it has the same meaning as generic.
22587
22588           pentium2
22589               Intel Pentium II CPU, based on Pentium Pro core with MMX
22590               instruction set support.
22591
22592           pentium3
22593           pentium3m
22594               Intel Pentium III CPU, based on Pentium Pro core with MMX and
22595               SSE instruction set support.
22596
22597           pentium-m
22598               Intel Pentium M; low-power version of Intel Pentium III CPU
22599               with MMX, SSE and SSE2 instruction set support.  Used by
22600               Centrino notebooks.
22601
22602           pentium4
22603           pentium4m
22604               Intel Pentium 4 CPU with MMX, SSE and SSE2 instruction set
22605               support.
22606
22607           prescott
22608               Improved version of Intel Pentium 4 CPU with MMX, SSE, SSE2 and
22609               SSE3 instruction set support.
22610
22611           nocona
22612               Improved version of Intel Pentium 4 CPU with 64-bit extensions,
22613               MMX, SSE, SSE2 and SSE3 instruction set support.
22614
22615           core2
22616               Intel Core 2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3
22617               and SSSE3 instruction set support.
22618
22619           nehalem
22620               Intel Nehalem CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3,
22621               SSSE3, SSE4.1, SSE4.2 and POPCNT instruction set support.
22622
22623           westmere
22624               Intel Westmere CPU with 64-bit extensions, MMX, SSE, SSE2,
22625               SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES and PCLMUL instruction
22626               set support.
22627
22628           sandybridge
22629               Intel Sandy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2,
22630               SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AES and PCLMUL
22631               instruction set support.
22632
22633           ivybridge
22634               Intel Ivy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2,
22635               SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AES, PCLMUL,
22636               FSGSBASE, RDRND and F16C instruction set support.
22637
22638           haswell
22639               Intel Haswell CPU with 64-bit extensions, MOVBE, MMX, SSE,
22640               SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES,
22641               PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2 and F16C instruction
22642               set support.
22643
22644           broadwell
22645               Intel Broadwell CPU with 64-bit extensions, MOVBE, MMX, SSE,
22646               SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES,
22647               PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX and
22648               PREFETCHW instruction set support.
22649
22650           skylake
22651               Intel Skylake CPU with 64-bit extensions, MOVBE, MMX, SSE,
22652               SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES,
22653               PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX,
22654               PREFETCHW, CLFLUSHOPT, XSAVEC and XSAVES instruction set
22655               support.
22656
22657           bonnell
22658               Intel Bonnell CPU with 64-bit extensions, MOVBE, MMX, SSE,
22659               SSE2, SSE3 and SSSE3 instruction set support.
22660
22661           silvermont
22662               Intel Silvermont CPU with 64-bit extensions, MOVBE, MMX, SSE,
22663               SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PCLMUL and
22664               RDRND instruction set support.
22665
22666           knl Intel Knight's Landing CPU with 64-bit extensions, MOVBE, MMX,
22667               SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES,
22668               PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX,
22669               PREFETCHW, AVX512F, AVX512PF, AVX512ER and AVX512CD instruction
22670               set support.
22671
22672           knm Intel Knights Mill CPU with 64-bit extensions, MOVBE, MMX, SSE,
22673               SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES,
22674               PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX,
22675               PREFETCHW, AVX512F, AVX512PF, AVX512ER, AVX512CD, AVX5124VNNIW,
22676               AVX5124FMAPS and AVX512VPOPCNTDQ instruction set support.
22677
22678           skylake-avx512
22679               Intel Skylake Server CPU with 64-bit extensions, MOVBE, MMX,
22680               SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2,
22681               AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED,
22682               ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, CLWB,
22683               AVX512VL, AVX512BW, AVX512DQ and AVX512CD instruction set
22684               support.
22685
22686           cannonlake
22687               Intel Cannonlake Server CPU with 64-bit extensions, MOVBE, MMX,
22688               SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2,
22689               AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED,
22690               ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, AVX512VL,
22691               AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI, AVX512IFMA, SHA and
22692               UMIP instruction set support.
22693
22694           icelake-client
22695               Intel Icelake Client CPU with 64-bit extensions, MOVBE, MMX,
22696               SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2,
22697               AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED,
22698               ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, AVX512VL,
22699               AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI, AVX512IFMA, SHA,
22700               CLWB, UMIP, RDPID, GFNI, AVX512VBMI2, AVX512VPOPCNTDQ,
22701               AVX512BITALG, AVX512VNNI, VPCLMULQDQ, VAES instruction set
22702               support.
22703
22704           icelake-server
22705               Intel Icelake Server CPU with 64-bit extensions, MOVBE, MMX,
22706               SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2,
22707               AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED,
22708               ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, AVX512VL,
22709               AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI, AVX512IFMA, SHA,
22710               CLWB, UMIP, RDPID, GFNI, AVX512VBMI2, AVX512VPOPCNTDQ,
22711               AVX512BITALG, AVX512VNNI, VPCLMULQDQ, VAES, PCONFIG and
22712               WBNOINVD instruction set support.
22713
22714           k6  AMD K6 CPU with MMX instruction set support.
22715
22716           k6-2
22717           k6-3
22718               Improved versions of AMD K6 CPU with MMX and 3DNow! instruction
22719               set support.
22720
22721           athlon
22722           athlon-tbird
22723               AMD Athlon CPU with MMX, 3dNOW!, enhanced 3DNow! and SSE
22724               prefetch instructions support.
22725
22726           athlon-4
22727           athlon-xp
22728           athlon-mp
22729               Improved AMD Athlon CPU with MMX, 3DNow!, enhanced 3DNow! and
22730               full SSE instruction set support.
22731
22732           k8
22733           opteron
22734           athlon64
22735           athlon-fx
22736               Processors based on the AMD K8 core with x86-64 instruction set
22737               support, including the AMD Opteron, Athlon 64, and Athlon 64 FX
22738               processors.  (This supersets MMX, SSE, SSE2, 3DNow!, enhanced
22739               3DNow! and 64-bit instruction set extensions.)
22740
22741           k8-sse3
22742           opteron-sse3
22743           athlon64-sse3
22744               Improved versions of AMD K8 cores with SSE3 instruction set
22745               support.
22746
22747           amdfam10
22748           barcelona
22749               CPUs based on AMD Family 10h cores with x86-64 instruction set
22750               support.  (This supersets MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!,
22751               enhanced 3DNow!, ABM and 64-bit instruction set extensions.)
22752
22753           bdver1
22754               CPUs based on AMD Family 15h cores with x86-64 instruction set
22755               support.  (This supersets FMA4, AVX, XOP, LWP, AES, PCL_MUL,
22756               CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM
22757               and 64-bit instruction set extensions.)
22758
22759           bdver2
22760               AMD Family 15h core based CPUs with x86-64 instruction set
22761               support.  (This supersets BMI, TBM, F16C, FMA, FMA4, AVX, XOP,
22762               LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3,
22763               SSE4.1, SSE4.2, ABM and 64-bit instruction set extensions.)
22764
22765           bdver3
22766               AMD Family 15h core based CPUs with x86-64 instruction set
22767               support.  (This supersets BMI, TBM, F16C, FMA, FMA4, FSGSBASE,
22768               AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A,
22769               SSSE3, SSE4.1, SSE4.2, ABM and 64-bit instruction set
22770               extensions.
22771
22772           bdver4
22773               AMD Family 15h core based CPUs with x86-64 instruction set
22774               support.  (This supersets BMI, BMI2, TBM, F16C, FMA, FMA4,
22775               FSGSBASE, AVX, AVX2, XOP, LWP, AES, PCL_MUL, CX16, MOVBE, MMX,
22776               SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and 64-bit
22777               instruction set extensions.
22778
22779           znver1
22780               AMD Family 17h core based CPUs with x86-64 instruction set
22781               support.  (This supersets BMI, BMI2, F16C, FMA, FSGSBASE, AVX,
22782               AVX2, ADCX, RDSEED, MWAITX, SHA, CLZERO, AES, PCL_MUL, CX16,
22783               MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM,
22784               XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, and 64-bit instruction set
22785               extensions.
22786
22787           btver1
22788               CPUs based on AMD Family 14h cores with x86-64 instruction set
22789               support.  (This supersets MMX, SSE, SSE2, SSE3, SSSE3, SSE4A,
22790               CX16, ABM and 64-bit instruction set extensions.)
22791
22792           btver2
22793               CPUs based on AMD Family 16h cores with x86-64 instruction set
22794               support. This includes MOVBE, F16C, BMI, AVX, PCL_MUL, AES,
22795               SSE4.2, SSE4.1, CX16, ABM, SSE4A, SSSE3, SSE3, SSE2, SSE, MMX
22796               and 64-bit instruction set extensions.
22797
22798           winchip-c6
22799               IDT WinChip C6 CPU, dealt in same way as i486 with additional
22800               MMX instruction set support.
22801
22802           winchip2
22803               IDT WinChip 2 CPU, dealt in same way as i486 with additional
22804               MMX and 3DNow!  instruction set support.
22805
22806           c3  VIA C3 CPU with MMX and 3DNow! instruction set support.  (No
22807               scheduling is implemented for this chip.)
22808
22809           c3-2
22810               VIA C3-2 (Nehemiah/C5XL) CPU with MMX and SSE instruction set
22811               support.  (No scheduling is implemented for this chip.)
22812
22813           c7  VIA C7 (Esther) CPU with MMX, SSE, SSE2 and SSE3 instruction
22814               set support.  (No scheduling is implemented for this chip.)
22815
22816           samuel-2
22817               VIA Eden Samuel 2 CPU with MMX and 3DNow! instruction set
22818               support.  (No scheduling is implemented for this chip.)
22819
22820           nehemiah
22821               VIA Eden Nehemiah CPU with MMX and SSE instruction set support.
22822               (No scheduling is implemented for this chip.)
22823
22824           esther
22825               VIA Eden Esther CPU with MMX, SSE, SSE2 and SSE3 instruction
22826               set support.  (No scheduling is implemented for this chip.)
22827
22828           eden-x2
22829               VIA Eden X2 CPU with x86-64, MMX, SSE, SSE2 and SSE3
22830               instruction set support.  (No scheduling is implemented for
22831               this chip.)
22832
22833           eden-x4
22834               VIA Eden X4 CPU with x86-64, MMX, SSE, SSE2, SSE3, SSSE3,
22835               SSE4.1, SSE4.2, AVX and AVX2 instruction set support.  (No
22836               scheduling is implemented for this chip.)
22837
22838           nano
22839               Generic VIA Nano CPU with x86-64, MMX, SSE, SSE2, SSE3 and
22840               SSSE3 instruction set support.  (No scheduling is implemented
22841               for this chip.)
22842
22843           nano-1000
22844               VIA Nano 1xxx CPU with x86-64, MMX, SSE, SSE2, SSE3 and SSSE3
22845               instruction set support.  (No scheduling is implemented for
22846               this chip.)
22847
22848           nano-2000
22849               VIA Nano 2xxx CPU with x86-64, MMX, SSE, SSE2, SSE3 and SSSE3
22850               instruction set support.  (No scheduling is implemented for
22851               this chip.)
22852
22853           nano-3000
22854               VIA Nano 3xxx CPU with x86-64, MMX, SSE, SSE2, SSE3, SSSE3 and
22855               SSE4.1 instruction set support.  (No scheduling is implemented
22856               for this chip.)
22857
22858           nano-x2
22859               VIA Nano Dual Core CPU with x86-64, MMX, SSE, SSE2, SSE3, SSSE3
22860               and SSE4.1 instruction set support.  (No scheduling is
22861               implemented for this chip.)
22862
22863           nano-x4
22864               VIA Nano Quad Core CPU with x86-64, MMX, SSE, SSE2, SSE3, SSSE3
22865               and SSE4.1 instruction set support.  (No scheduling is
22866               implemented for this chip.)
22867
22868           geode
22869               AMD Geode embedded processor with MMX and 3DNow! instruction
22870               set support.
22871
22872       -mtune=cpu-type
22873           Tune to cpu-type everything applicable about the generated code,
22874           except for the ABI and the set of available instructions.  While
22875           picking a specific cpu-type schedules things appropriately for that
22876           particular chip, the compiler does not generate any code that
22877           cannot run on the default machine type unless you use a -march=cpu-
22878           type option.  For example, if GCC is configured for
22879           i686-pc-linux-gnu then -mtune=pentium4 generates code that is tuned
22880           for Pentium 4 but still runs on i686 machines.
22881
22882           The choices for cpu-type are the same as for -march.  In addition,
22883           -mtune supports 2 extra choices for cpu-type:
22884
22885           generic
22886               Produce code optimized for the most common IA32/AMD64/EM64T
22887               processors.  If you know the CPU on which your code will run,
22888               then you should use the corresponding -mtune or -march option
22889               instead of -mtune=generic.  But, if you do not know exactly
22890               what CPU users of your application will have, then you should
22891               use this option.
22892
22893               As new processors are deployed in the marketplace, the behavior
22894               of this option will change.  Therefore, if you upgrade to a
22895               newer version of GCC, code generation controlled by this option
22896               will change to reflect the processors that are most common at
22897               the time that version of GCC is released.
22898
22899               There is no -march=generic option because -march indicates the
22900               instruction set the compiler can use, and there is no generic
22901               instruction set applicable to all processors.  In contrast,
22902               -mtune indicates the processor (or, in this case, collection of
22903               processors) for which the code is optimized.
22904
22905           intel
22906               Produce code optimized for the most current Intel processors,
22907               which are Haswell and Silvermont for this version of GCC.  If
22908               you know the CPU on which your code will run, then you should
22909               use the corresponding -mtune or -march option instead of
22910               -mtune=intel.  But, if you want your application performs
22911               better on both Haswell and Silvermont, then you should use this
22912               option.
22913
22914               As new Intel processors are deployed in the marketplace, the
22915               behavior of this option will change.  Therefore, if you upgrade
22916               to a newer version of GCC, code generation controlled by this
22917               option will change to reflect the most current Intel processors
22918               at the time that version of GCC is released.
22919
22920               There is no -march=intel option because -march indicates the
22921               instruction set the compiler can use, and there is no common
22922               instruction set applicable to all processors.  In contrast,
22923               -mtune indicates the processor (or, in this case, collection of
22924               processors) for which the code is optimized.
22925
22926       -mcpu=cpu-type
22927           A deprecated synonym for -mtune.
22928
22929       -mfpmath=unit
22930           Generate floating-point arithmetic for selected unit unit.  The
22931           choices for unit are:
22932
22933           387 Use the standard 387 floating-point coprocessor present on the
22934               majority of chips and emulated otherwise.  Code compiled with
22935               this option runs almost everywhere.  The temporary results are
22936               computed in 80-bit precision instead of the precision specified
22937               by the type, resulting in slightly different results compared
22938               to most of other chips.  See -ffloat-store for more detailed
22939               description.
22940
22941               This is the default choice for non-Darwin x86-32 targets.
22942
22943           sse Use scalar floating-point instructions present in the SSE
22944               instruction set.  This instruction set is supported by Pentium
22945               III and newer chips, and in the AMD line by Athlon-4, Athlon XP
22946               and Athlon MP chips.  The earlier version of the SSE
22947               instruction set supports only single-precision arithmetic, thus
22948               the double and extended-precision arithmetic are still done
22949               using 387.  A later version, present only in Pentium 4 and AMD
22950               x86-64 chips, supports double-precision arithmetic too.
22951
22952               For the x86-32 compiler, you must use -march=cpu-type, -msse or
22953               -msse2 switches to enable SSE extensions and make this option
22954               effective.  For the x86-64 compiler, these extensions are
22955               enabled by default.
22956
22957               The resulting code should be considerably faster in the
22958               majority of cases and avoid the numerical instability problems
22959               of 387 code, but may break some existing code that expects
22960               temporaries to be 80 bits.
22961
22962               This is the default choice for the x86-64 compiler, Darwin
22963               x86-32 targets, and the default choice for x86-32 targets with
22964               the SSE2 instruction set when -ffast-math is enabled.
22965
22966           sse,387
22967           sse+387
22968           both
22969               Attempt to utilize both instruction sets at once.  This
22970               effectively doubles the amount of available registers, and on
22971               chips with separate execution units for 387 and SSE the
22972               execution resources too.  Use this option with care, as it is
22973               still experimental, because the GCC register allocator does not
22974               model separate functional units well, resulting in unstable
22975               performance.
22976
22977       -masm=dialect
22978           Output assembly instructions using selected dialect.  Also affects
22979           which dialect is used for basic "asm" and extended "asm". Supported
22980           choices (in dialect order) are att or intel. The default is att.
22981           Darwin does not support intel.
22982
22983       -mieee-fp
22984       -mno-ieee-fp
22985           Control whether or not the compiler uses IEEE floating-point
22986           comparisons.  These correctly handle the case where the result of a
22987           comparison is unordered.
22988
22989       -m80387
22990       -mhard-float
22991           Generate output containing 80387 instructions for floating point.
22992
22993       -mno-80387
22994       -msoft-float
22995           Generate output containing library calls for floating point.
22996
22997           Warning: the requisite libraries are not part of GCC.  Normally the
22998           facilities of the machine's usual C compiler are used, but this
22999           cannot be done directly in cross-compilation.  You must make your
23000           own arrangements to provide suitable library functions for cross-
23001           compilation.
23002
23003           On machines where a function returns floating-point results in the
23004           80387 register stack, some floating-point opcodes may be emitted
23005           even if -msoft-float is used.
23006
23007       -mno-fp-ret-in-387
23008           Do not use the FPU registers for return values of functions.
23009
23010           The usual calling convention has functions return values of types
23011           "float" and "double" in an FPU register, even if there is no FPU.
23012           The idea is that the operating system should emulate an FPU.
23013
23014           The option -mno-fp-ret-in-387 causes such values to be returned in
23015           ordinary CPU registers instead.
23016
23017       -mno-fancy-math-387
23018           Some 387 emulators do not support the "sin", "cos" and "sqrt"
23019           instructions for the 387.  Specify this option to avoid generating
23020           those instructions.  This option is the default on OpenBSD and
23021           NetBSD.  This option is overridden when -march indicates that the
23022           target CPU always has an FPU and so the instruction does not need
23023           emulation.  These instructions are not generated unless you also
23024           use the -funsafe-math-optimizations switch.
23025
23026       -malign-double
23027       -mno-align-double
23028           Control whether GCC aligns "double", "long double", and "long long"
23029           variables on a two-word boundary or a one-word boundary.  Aligning
23030           "double" variables on a two-word boundary produces code that runs
23031           somewhat faster on a Pentium at the expense of more memory.
23032
23033           On x86-64, -malign-double is enabled by default.
23034
23035           Warning: if you use the -malign-double switch, structures
23036           containing the above types are aligned differently than the
23037           published application binary interface specifications for the
23038           x86-32 and are not binary compatible with structures in code
23039           compiled without that switch.
23040
23041       -m96bit-long-double
23042       -m128bit-long-double
23043           These switches control the size of "long double" type.  The x86-32
23044           application binary interface specifies the size to be 96 bits, so
23045           -m96bit-long-double is the default in 32-bit mode.
23046
23047           Modern architectures (Pentium and newer) prefer "long double" to be
23048           aligned to an 8- or 16-byte boundary.  In arrays or structures
23049           conforming to the ABI, this is not possible.  So specifying
23050           -m128bit-long-double aligns "long double" to a 16-byte boundary by
23051           padding the "long double" with an additional 32-bit zero.
23052
23053           In the x86-64 compiler, -m128bit-long-double is the default choice
23054           as its ABI specifies that "long double" is aligned on 16-byte
23055           boundary.
23056
23057           Notice that neither of these options enable any extra precision
23058           over the x87 standard of 80 bits for a "long double".
23059
23060           Warning: if you override the default value for your target ABI,
23061           this changes the size of structures and arrays containing "long
23062           double" variables, as well as modifying the function calling
23063           convention for functions taking "long double".  Hence they are not
23064           binary-compatible with code compiled without that switch.
23065
23066       -mlong-double-64
23067       -mlong-double-80
23068       -mlong-double-128
23069           These switches control the size of "long double" type. A size of 64
23070           bits makes the "long double" type equivalent to the "double" type.
23071           This is the default for 32-bit Bionic C library.  A size of 128
23072           bits makes the "long double" type equivalent to the "__float128"
23073           type. This is the default for 64-bit Bionic C library.
23074
23075           Warning: if you override the default value for your target ABI,
23076           this changes the size of structures and arrays containing "long
23077           double" variables, as well as modifying the function calling
23078           convention for functions taking "long double".  Hence they are not
23079           binary-compatible with code compiled without that switch.
23080
23081       -malign-data=type
23082           Control how GCC aligns variables.  Supported values for type are
23083           compat uses increased alignment value compatible uses GCC 4.8 and
23084           earlier, abi uses alignment value as specified by the psABI, and
23085           cacheline uses increased alignment value to match the cache line
23086           size.  compat is the default.
23087
23088       -mlarge-data-threshold=threshold
23089           When -mcmodel=medium is specified, data objects larger than
23090           threshold are placed in the large data section.  This value must be
23091           the same across all objects linked into the binary, and defaults to
23092           65535.
23093
23094       -mrtd
23095           Use a different function-calling convention, in which functions
23096           that take a fixed number of arguments return with the "ret num"
23097           instruction, which pops their arguments while returning.  This
23098           saves one instruction in the caller since there is no need to pop
23099           the arguments there.
23100
23101           You can specify that an individual function is called with this
23102           calling sequence with the function attribute "stdcall".  You can
23103           also override the -mrtd option by using the function attribute
23104           "cdecl".
23105
23106           Warning: this calling convention is incompatible with the one
23107           normally used on Unix, so you cannot use it if you need to call
23108           libraries compiled with the Unix compiler.
23109
23110           Also, you must provide function prototypes for all functions that
23111           take variable numbers of arguments (including "printf"); otherwise
23112           incorrect code is generated for calls to those functions.
23113
23114           In addition, seriously incorrect code results if you call a
23115           function with too many arguments.  (Normally, extra arguments are
23116           harmlessly ignored.)
23117
23118       -mregparm=num
23119           Control how many registers are used to pass integer arguments.  By
23120           default, no registers are used to pass arguments, and at most 3
23121           registers can be used.  You can control this behavior for a
23122           specific function by using the function attribute "regparm".
23123
23124           Warning: if you use this switch, and num is nonzero, then you must
23125           build all modules with the same value, including any libraries.
23126           This includes the system libraries and startup modules.
23127
23128       -msseregparm
23129           Use SSE register passing conventions for float and double arguments
23130           and return values.  You can control this behavior for a specific
23131           function by using the function attribute "sseregparm".
23132
23133           Warning: if you use this switch then you must build all modules
23134           with the same value, including any libraries.  This includes the
23135           system libraries and startup modules.
23136
23137       -mvect8-ret-in-mem
23138           Return 8-byte vectors in memory instead of MMX registers.  This is
23139           the default on Solaris@tie{}8 and 9 and VxWorks to match the ABI of
23140           the Sun Studio compilers until version 12.  Later compiler versions
23141           (starting with Studio 12 Update@tie{}1) follow the ABI used by
23142           other x86 targets, which is the default on Solaris@tie{}10 and
23143           later.  Only use this option if you need to remain compatible with
23144           existing code produced by those previous compiler versions or older
23145           versions of GCC.
23146
23147       -mpc32
23148       -mpc64
23149       -mpc80
23150           Set 80387 floating-point precision to 32, 64 or 80 bits.  When
23151           -mpc32 is specified, the significands of results of floating-point
23152           operations are rounded to 24 bits (single precision); -mpc64 rounds
23153           the significands of results of floating-point operations to 53 bits
23154           (double precision) and -mpc80 rounds the significands of results of
23155           floating-point operations to 64 bits (extended double precision),
23156           which is the default.  When this option is used, floating-point
23157           operations in higher precisions are not available to the programmer
23158           without setting the FPU control word explicitly.
23159
23160           Setting the rounding of floating-point operations to less than the
23161           default 80 bits can speed some programs by 2% or more.  Note that
23162           some mathematical libraries assume that extended-precision (80-bit)
23163           floating-point operations are enabled by default; routines in such
23164           libraries could suffer significant loss of accuracy, typically
23165           through so-called "catastrophic cancellation", when this option is
23166           used to set the precision to less than extended precision.
23167
23168       -mstackrealign
23169           Realign the stack at entry.  On the x86, the -mstackrealign option
23170           generates an alternate prologue and epilogue that realigns the run-
23171           time stack if necessary.  This supports mixing legacy codes that
23172           keep 4-byte stack alignment with modern codes that keep 16-byte
23173           stack alignment for SSE compatibility.  See also the attribute
23174           "force_align_arg_pointer", applicable to individual functions.
23175
23176       -mpreferred-stack-boundary=num
23177           Attempt to keep the stack boundary aligned to a 2 raised to num
23178           byte boundary.  If -mpreferred-stack-boundary is not specified, the
23179           default is 4 (16 bytes or 128 bits).
23180
23181           Warning: When generating code for the x86-64 architecture with SSE
23182           extensions disabled, -mpreferred-stack-boundary=3 can be used to
23183           keep the stack boundary aligned to 8 byte boundary.  Since x86-64
23184           ABI require 16 byte stack alignment, this is ABI incompatible and
23185           intended to be used in controlled environment where stack space is
23186           important limitation.  This option leads to wrong code when
23187           functions compiled with 16 byte stack alignment (such as functions
23188           from a standard library) are called with misaligned stack.  In this
23189           case, SSE instructions may lead to misaligned memory access traps.
23190           In addition, variable arguments are handled incorrectly for 16 byte
23191           aligned objects (including x87 long double and __int128), leading
23192           to wrong results.  You must build all modules with
23193           -mpreferred-stack-boundary=3, including any libraries.  This
23194           includes the system libraries and startup modules.
23195
23196       -mincoming-stack-boundary=num
23197           Assume the incoming stack is aligned to a 2 raised to num byte
23198           boundary.  If -mincoming-stack-boundary is not specified, the one
23199           specified by -mpreferred-stack-boundary is used.
23200
23201           On Pentium and Pentium Pro, "double" and "long double" values
23202           should be aligned to an 8-byte boundary (see -malign-double) or
23203           suffer significant run time performance penalties.  On Pentium III,
23204           the Streaming SIMD Extension (SSE) data type "__m128" may not work
23205           properly if it is not 16-byte aligned.
23206
23207           To ensure proper alignment of this values on the stack, the stack
23208           boundary must be as aligned as that required by any value stored on
23209           the stack.  Further, every function must be generated such that it
23210           keeps the stack aligned.  Thus calling a function compiled with a
23211           higher preferred stack boundary from a function compiled with a
23212           lower preferred stack boundary most likely misaligns the stack.  It
23213           is recommended that libraries that use callbacks always use the
23214           default setting.
23215
23216           This extra alignment does consume extra stack space, and generally
23217           increases code size.  Code that is sensitive to stack space usage,
23218           such as embedded systems and operating system kernels, may want to
23219           reduce the preferred alignment to -mpreferred-stack-boundary=2.
23220
23221       -mmmx
23222       -msse
23223       -msse2
23224       -msse3
23225       -mssse3
23226       -msse4
23227       -msse4a
23228       -msse4.1
23229       -msse4.2
23230       -mavx
23231       -mavx2
23232       -mavx512f
23233       -mavx512pf
23234       -mavx512er
23235       -mavx512cd
23236       -mavx512vl
23237       -mavx512bw
23238       -mavx512dq
23239       -mavx512ifma
23240       -mavx512vbmi
23241       -msha
23242       -maes
23243       -mpclmul
23244       -mclflushopt
23245       -mclwb
23246       -mfsgsbase
23247       -mrdrnd
23248       -mf16c
23249       -mfma
23250       -mpconfig
23251       -mwbnoinvd
23252       -mfma4
23253       -mprfchw
23254       -mrdpid
23255       -mprefetchwt1
23256       -mrdseed
23257       -msgx
23258       -mxop
23259       -mlwp
23260       -m3dnow
23261       -m3dnowa
23262       -mpopcnt
23263       -mabm
23264       -madx
23265       -mbmi
23266       -mbmi2
23267       -mlzcnt
23268       -mfxsr
23269       -mxsave
23270       -mxsaveopt
23271       -mxsavec
23272       -mxsaves
23273       -mrtm
23274       -mhle
23275       -mtbm
23276       -mmpx
23277       -mmwaitx
23278       -mclzero
23279       -mpku
23280       -mavx512vbmi2
23281       -mgfni
23282       -mvaes
23283       -mvpclmulqdq
23284       -mavx512bitalg
23285       -mmovdiri
23286       -mmovdir64b
23287       -mavx512vpopcntdq
23288       -mavx5124fmaps
23289       -mavx512vnni
23290       -mavx5124vnniw
23291           These switches enable the use of instructions in the MMX, SSE,
23292           SSE2, SSE3, SSSE3, SSE4, SSE4A, SSE4.1, SSE4.2, AVX, AVX2, AVX512F,
23293           AVX512PF, AVX512ER, AVX512CD, AVX512VL, AVX512BW, AVX512DQ,
23294           AVX512IFMA, AVX512VBMI, SHA, AES, PCLMUL, CLFLUSHOPT, CLWB,
23295           FSGSBASE, RDRND, F16C, FMA, PCONFIG, WBNOINVD, FMA4, PREFETCHW,
23296           RDPID, PREFETCHWT1, RDSEED, SGX, XOP, LWP, 3DNow!, enhanced 3DNow!,
23297           POPCNT, ABM, ADX, BMI, BMI2, LZCNT, FXSR, XSAVE, XSAVEOPT, XSAVEC,
23298           XSAVES, RTM, HLE, TBM, MPX, MWAITX, CLZERO, PKU, AVX512VBMI2, GFNI,
23299           VAES, VPCLMULQDQ, AVX512BITALG, MOVDIRI, MOVDIR64B,
23300           AVX512VPOPCNTDQ, AVX5124FMAPS, AVX512VNNI, or AVX5124VNNIW extended
23301           instruction sets.  Each has a corresponding -mno- option to disable
23302           use of these instructions.
23303
23304           These extensions are also available as built-in functions: see x86
23305           Built-in Functions, for details of the functions enabled and
23306           disabled by these switches.
23307
23308           To generate SSE/SSE2 instructions automatically from floating-point
23309           code (as opposed to 387 instructions), see -mfpmath=sse.
23310
23311           GCC depresses SSEx instructions when -mavx is used. Instead, it
23312           generates new AVX instructions or AVX equivalence for all SSEx
23313           instructions when needed.
23314
23315           These options enable GCC to use these extended instructions in
23316           generated code, even without -mfpmath=sse.  Applications that
23317           perform run-time CPU detection must compile separate files for each
23318           supported architecture, using the appropriate flags.  In
23319           particular, the file containing the CPU detection code should be
23320           compiled without these options.
23321
23322       -mdump-tune-features
23323           This option instructs GCC to dump the names of the x86 performance
23324           tuning features and default settings. The names can be used in
23325           -mtune-ctrl=feature-list.
23326
23327       -mtune-ctrl=feature-list
23328           This option is used to do fine grain control of x86 code generation
23329           features.  feature-list is a comma separated list of feature names.
23330           See also -mdump-tune-features. When specified, the feature is
23331           turned on if it is not preceded with ^, otherwise, it is turned
23332           off.  -mtune-ctrl=feature-list is intended to be used by GCC
23333           developers. Using it may lead to code paths not covered by testing
23334           and can potentially result in compiler ICEs or runtime errors.
23335
23336       -mno-default
23337           This option instructs GCC to turn off all tunable features. See
23338           also -mtune-ctrl=feature-list and -mdump-tune-features.
23339
23340       -mcld
23341           This option instructs GCC to emit a "cld" instruction in the
23342           prologue of functions that use string instructions.  String
23343           instructions depend on the DF flag to select between autoincrement
23344           or autodecrement mode.  While the ABI specifies the DF flag to be
23345           cleared on function entry, some operating systems violate this
23346           specification by not clearing the DF flag in their exception
23347           dispatchers.  The exception handler can be invoked with the DF flag
23348           set, which leads to wrong direction mode when string instructions
23349           are used.  This option can be enabled by default on 32-bit x86
23350           targets by configuring GCC with the --enable-cld configure option.
23351           Generation of "cld" instructions can be suppressed with the
23352           -mno-cld compiler option in this case.
23353
23354       -mvzeroupper
23355           This option instructs GCC to emit a "vzeroupper" instruction before
23356           a transfer of control flow out of the function to minimize the AVX
23357           to SSE transition penalty as well as remove unnecessary "zeroupper"
23358           intrinsics.
23359
23360       -mprefer-avx128
23361           This option instructs GCC to use 128-bit AVX instructions instead
23362           of 256-bit AVX instructions in the auto-vectorizer.
23363
23364       -mprefer-vector-width=opt
23365           This option instructs GCC to use opt-bit vector width in
23366           instructions instead of default on the selected platform.
23367
23368           none
23369               No extra limitations applied to GCC other than defined by the
23370               selected platform.
23371
23372           128 Prefer 128-bit vector width for instructions.
23373
23374           256 Prefer 256-bit vector width for instructions.
23375
23376           512 Prefer 512-bit vector width for instructions.
23377
23378       -mcx16
23379           This option enables GCC to generate "CMPXCHG16B" instructions in
23380           64-bit code to implement compare-and-exchange operations on 16-byte
23381           aligned 128-bit objects.  This is useful for atomic updates of data
23382           structures exceeding one machine word in size.  The compiler uses
23383           this instruction to implement __sync Builtins.  However, for
23384           __atomic Builtins operating on 128-bit integers, a library call is
23385           always used.
23386
23387       -msahf
23388           This option enables generation of "SAHF" instructions in 64-bit
23389           code.  Early Intel Pentium 4 CPUs with Intel 64 support, prior to
23390           the introduction of Pentium 4 G1 step in December 2005, lacked the
23391           "LAHF" and "SAHF" instructions which are supported by AMD64.  These
23392           are load and store instructions, respectively, for certain status
23393           flags.  In 64-bit mode, the "SAHF" instruction is used to optimize
23394           "fmod", "drem", and "remainder" built-in functions; see Other
23395           Builtins for details.
23396
23397       -mmovbe
23398           This option enables use of the "movbe" instruction to implement
23399           "__builtin_bswap32" and "__builtin_bswap64".
23400
23401       -mshstk
23402           The -mshstk option enables shadow stack built-in functions from x86
23403           Control-flow Enforcement Technology (CET).
23404
23405       -mcrc32
23406           This option enables built-in functions "__builtin_ia32_crc32qi",
23407           "__builtin_ia32_crc32hi", "__builtin_ia32_crc32si" and
23408           "__builtin_ia32_crc32di" to generate the "crc32" machine
23409           instruction.
23410
23411       -mrecip
23412           This option enables use of "RCPSS" and "RSQRTSS" instructions (and
23413           their vectorized variants "RCPPS" and "RSQRTPS") with an additional
23414           Newton-Raphson step to increase precision instead of "DIVSS" and
23415           "SQRTSS" (and their vectorized variants) for single-precision
23416           floating-point arguments.  These instructions are generated only
23417           when -funsafe-math-optimizations is enabled together with
23418           -ffinite-math-only and -fno-trapping-math.  Note that while the
23419           throughput of the sequence is higher than the throughput of the
23420           non-reciprocal instruction, the precision of the sequence can be
23421           decreased by up to 2 ulp (i.e. the inverse of 1.0 equals
23422           0.99999994).
23423
23424           Note that GCC implements "1.0f/sqrtf(x)" in terms of "RSQRTSS" (or
23425           "RSQRTPS") already with -ffast-math (or the above option
23426           combination), and doesn't need -mrecip.
23427
23428           Also note that GCC emits the above sequence with additional Newton-
23429           Raphson step for vectorized single-float division and vectorized
23430           "sqrtf(x)" already with -ffast-math (or the above option
23431           combination), and doesn't need -mrecip.
23432
23433       -mrecip=opt
23434           This option controls which reciprocal estimate instructions may be
23435           used.  opt is a comma-separated list of options, which may be
23436           preceded by a ! to invert the option:
23437
23438           all Enable all estimate instructions.
23439
23440           default
23441               Enable the default instructions, equivalent to -mrecip.
23442
23443           none
23444               Disable all estimate instructions, equivalent to -mno-recip.
23445
23446           div Enable the approximation for scalar division.
23447
23448           vec-div
23449               Enable the approximation for vectorized division.
23450
23451           sqrt
23452               Enable the approximation for scalar square root.
23453
23454           vec-sqrt
23455               Enable the approximation for vectorized square root.
23456
23457           So, for example, -mrecip=all,!sqrt enables all of the reciprocal
23458           approximations, except for square root.
23459
23460       -mveclibabi=type
23461           Specifies the ABI type to use for vectorizing intrinsics using an
23462           external library.  Supported values for type are svml for the Intel
23463           short vector math library and acml for the AMD math core library.
23464           To use this option, both -ftree-vectorize and
23465           -funsafe-math-optimizations have to be enabled, and an SVML or ACML
23466           ABI-compatible library must be specified at link time.
23467
23468           GCC currently emits calls to "vmldExp2", "vmldLn2", "vmldLog102",
23469           "vmldPow2", "vmldTanh2", "vmldTan2", "vmldAtan2", "vmldAtanh2",
23470           "vmldCbrt2", "vmldSinh2", "vmldSin2", "vmldAsinh2", "vmldAsin2",
23471           "vmldCosh2", "vmldCos2", "vmldAcosh2", "vmldAcos2", "vmlsExp4",
23472           "vmlsLn4", "vmlsLog104", "vmlsPow4", "vmlsTanh4", "vmlsTan4",
23473           "vmlsAtan4", "vmlsAtanh4", "vmlsCbrt4", "vmlsSinh4", "vmlsSin4",
23474           "vmlsAsinh4", "vmlsAsin4", "vmlsCosh4", "vmlsCos4", "vmlsAcosh4"
23475           and "vmlsAcos4" for corresponding function type when
23476           -mveclibabi=svml is used, and "__vrd2_sin", "__vrd2_cos",
23477           "__vrd2_exp", "__vrd2_log", "__vrd2_log2", "__vrd2_log10",
23478           "__vrs4_sinf", "__vrs4_cosf", "__vrs4_expf", "__vrs4_logf",
23479           "__vrs4_log2f", "__vrs4_log10f" and "__vrs4_powf" for the
23480           corresponding function type when -mveclibabi=acml is used.
23481
23482       -mabi=name
23483           Generate code for the specified calling convention.  Permissible
23484           values are sysv for the ABI used on GNU/Linux and other systems,
23485           and ms for the Microsoft ABI.  The default is to use the Microsoft
23486           ABI when targeting Microsoft Windows and the SysV ABI on all other
23487           systems.  You can control this behavior for specific functions by
23488           using the function attributes "ms_abi" and "sysv_abi".
23489
23490       -mforce-indirect-call
23491           Force all calls to functions to be indirect. This is useful when
23492           using Intel Processor Trace where it generates more precise timing
23493           information for function calls.
23494
23495       -mcall-ms2sysv-xlogues
23496           Due to differences in 64-bit ABIs, any Microsoft ABI function that
23497           calls a System V ABI function must consider RSI, RDI and XMM6-15 as
23498           clobbered.  By default, the code for saving and restoring these
23499           registers is emitted inline, resulting in fairly lengthy prologues
23500           and epilogues.  Using -mcall-ms2sysv-xlogues emits prologues and
23501           epilogues that use stubs in the static portion of libgcc to perform
23502           these saves and restores, thus reducing function size at the cost
23503           of a few extra instructions.
23504
23505       -mtls-dialect=type
23506           Generate code to access thread-local storage using the gnu or gnu2
23507           conventions.  gnu is the conservative default; gnu2 is more
23508           efficient, but it may add compile- and run-time requirements that
23509           cannot be satisfied on all systems.
23510
23511       -mpush-args
23512       -mno-push-args
23513           Use PUSH operations to store outgoing parameters.  This method is
23514           shorter and usually equally fast as method using SUB/MOV operations
23515           and is enabled by default.  In some cases disabling it may improve
23516           performance because of improved scheduling and reduced
23517           dependencies.
23518
23519       -maccumulate-outgoing-args
23520           If enabled, the maximum amount of space required for outgoing
23521           arguments is computed in the function prologue.  This is faster on
23522           most modern CPUs because of reduced dependencies, improved
23523           scheduling and reduced stack usage when the preferred stack
23524           boundary is not equal to 2.  The drawback is a notable increase in
23525           code size.  This switch implies -mno-push-args.
23526
23527       -mthreads
23528           Support thread-safe exception handling on MinGW.  Programs that
23529           rely on thread-safe exception handling must compile and link all
23530           code with the -mthreads option.  When compiling, -mthreads defines
23531           -D_MT; when linking, it links in a special thread helper library
23532           -lmingwthrd which cleans up per-thread exception-handling data.
23533
23534       -mms-bitfields
23535       -mno-ms-bitfields
23536           Enable/disable bit-field layout compatible with the native
23537           Microsoft Windows compiler.
23538
23539           If "packed" is used on a structure, or if bit-fields are used, it
23540           may be that the Microsoft ABI lays out the structure differently
23541           than the way GCC normally does.  Particularly when moving packed
23542           data between functions compiled with GCC and the native Microsoft
23543           compiler (either via function call or as data in a file), it may be
23544           necessary to access either format.
23545
23546           This option is enabled by default for Microsoft Windows targets.
23547           This behavior can also be controlled locally by use of variable or
23548           type attributes.  For more information, see x86 Variable Attributes
23549           and x86 Type Attributes.
23550
23551           The Microsoft structure layout algorithm is fairly simple with the
23552           exception of the bit-field packing.  The padding and alignment of
23553           members of structures and whether a bit-field can straddle a
23554           storage-unit boundary are determine by these rules:
23555
23556           1. Structure members are stored sequentially in the order in which
23557           they are
23558               declared: the first member has the lowest memory address and
23559               the last member the highest.
23560
23561           2. Every data object has an alignment requirement.  The alignment
23562           requirement
23563               for all data except structures, unions, and arrays is either
23564               the size of the object or the current packing size (specified
23565               with either the "aligned" attribute or the "pack" pragma),
23566               whichever is less.  For structures, unions, and arrays, the
23567               alignment requirement is the largest alignment requirement of
23568               its members.  Every object is allocated an offset so that:
23569
23570                       offset % alignment_requirement == 0
23571
23572           3. Adjacent bit-fields are packed into the same 1-, 2-, or 4-byte
23573           allocation
23574               unit if the integral types are the same size and if the next
23575               bit-field fits into the current allocation unit without
23576               crossing the boundary imposed by the common alignment
23577               requirements of the bit-fields.
23578
23579           MSVC interprets zero-length bit-fields in the following ways:
23580
23581           1. If a zero-length bit-field is inserted between two bit-fields
23582           that
23583               are normally coalesced, the bit-fields are not coalesced.
23584
23585               For example:
23586
23587                       struct
23588                        {
23589                          unsigned long bf_1 : 12;
23590                          unsigned long : 0;
23591                          unsigned long bf_2 : 12;
23592                        } t1;
23593
23594               The size of "t1" is 8 bytes with the zero-length bit-field.  If
23595               the zero-length bit-field were removed, "t1"'s size would be 4
23596               bytes.
23597
23598           2. If a zero-length bit-field is inserted after a bit-field, "foo",
23599           and the
23600               alignment of the zero-length bit-field is greater than the
23601               member that follows it, "bar", "bar" is aligned as the type of
23602               the zero-length bit-field.
23603
23604               For example:
23605
23606                       struct
23607                        {
23608                          char foo : 4;
23609                          short : 0;
23610                          char bar;
23611                        } t2;
23612
23613                       struct
23614                        {
23615                          char foo : 4;
23616                          short : 0;
23617                          double bar;
23618                        } t3;
23619
23620               For "t2", "bar" is placed at offset 2, rather than offset 1.
23621               Accordingly, the size of "t2" is 4.  For "t3", the zero-length
23622               bit-field does not affect the alignment of "bar" or, as a
23623               result, the size of the structure.
23624
23625               Taking this into account, it is important to note the
23626               following:
23627
23628               1. If a zero-length bit-field follows a normal bit-field, the
23629               type of the
23630                   zero-length bit-field may affect the alignment of the
23631                   structure as whole. For example, "t2" has a size of 4
23632                   bytes, since the zero-length bit-field follows a normal
23633                   bit-field, and is of type short.
23634
23635               2. Even if a zero-length bit-field is not followed by a normal
23636               bit-field, it may
23637                   still affect the alignment of the structure:
23638
23639                           struct
23640                            {
23641                              char foo : 6;
23642                              long : 0;
23643                            } t4;
23644
23645                   Here, "t4" takes up 4 bytes.
23646
23647           3. Zero-length bit-fields following non-bit-field members are
23648           ignored:
23649                       struct
23650                        {
23651                          char foo;
23652                          long : 0;
23653                          char bar;
23654                        } t5;
23655
23656               Here, "t5" takes up 2 bytes.
23657
23658       -mno-align-stringops
23659           Do not align the destination of inlined string operations.  This
23660           switch reduces code size and improves performance in case the
23661           destination is already aligned, but GCC doesn't know about it.
23662
23663       -minline-all-stringops
23664           By default GCC inlines string operations only when the destination
23665           is known to be aligned to least a 4-byte boundary.  This enables
23666           more inlining and increases code size, but may improve performance
23667           of code that depends on fast "memcpy", "strlen", and "memset" for
23668           short lengths.
23669
23670       -minline-stringops-dynamically
23671           For string operations of unknown size, use run-time checks with
23672           inline code for small blocks and a library call for large blocks.
23673
23674       -mstringop-strategy=alg
23675           Override the internal decision heuristic for the particular
23676           algorithm to use for inlining string operations.  The allowed
23677           values for alg are:
23678
23679           rep_byte
23680           rep_4byte
23681           rep_8byte
23682               Expand using i386 "rep" prefix of the specified size.
23683
23684           byte_loop
23685           loop
23686           unrolled_loop
23687               Expand into an inline loop.
23688
23689           libcall
23690               Always use a library call.
23691
23692       -mmemcpy-strategy=strategy
23693           Override the internal decision heuristic to decide if
23694           "__builtin_memcpy" should be inlined and what inline algorithm to
23695           use when the expected size of the copy operation is known. strategy
23696           is a comma-separated list of alg:max_size:dest_align triplets.  alg
23697           is specified in -mstringop-strategy, max_size specifies the max
23698           byte size with which inline algorithm alg is allowed.  For the last
23699           triplet, the max_size must be "-1". The max_size of the triplets in
23700           the list must be specified in increasing order.  The minimal byte
23701           size for alg is 0 for the first triplet and "max_size + 1" of the
23702           preceding range.
23703
23704       -mmemset-strategy=strategy
23705           The option is similar to -mmemcpy-strategy= except that it is to
23706           control "__builtin_memset" expansion.
23707
23708       -momit-leaf-frame-pointer
23709           Don't keep the frame pointer in a register for leaf functions.
23710           This avoids the instructions to save, set up, and restore frame
23711           pointers and makes an extra register available in leaf functions.
23712           The option -fomit-leaf-frame-pointer removes the frame pointer for
23713           leaf functions, which might make debugging harder.
23714
23715       -mtls-direct-seg-refs
23716       -mno-tls-direct-seg-refs
23717           Controls whether TLS variables may be accessed with offsets from
23718           the TLS segment register (%gs for 32-bit, %fs for 64-bit), or
23719           whether the thread base pointer must be added.  Whether or not this
23720           is valid depends on the operating system, and whether it maps the
23721           segment to cover the entire TLS area.
23722
23723           For systems that use the GNU C Library, the default is on.
23724
23725       -msse2avx
23726       -mno-sse2avx
23727           Specify that the assembler should encode SSE instructions with VEX
23728           prefix.  The option -mavx turns this on by default.
23729
23730       -mfentry
23731       -mno-fentry
23732           If profiling is active (-pg), put the profiling counter call before
23733           the prologue.  Note: On x86 architectures the attribute
23734           "ms_hook_prologue" isn't possible at the moment for -mfentry and
23735           -pg.
23736
23737       -mrecord-mcount
23738       -mno-record-mcount
23739           If profiling is active (-pg), generate a __mcount_loc section that
23740           contains pointers to each profiling call. This is useful for
23741           automatically patching and out calls.
23742
23743       -mnop-mcount
23744       -mno-nop-mcount
23745           If profiling is active (-pg), generate the calls to the profiling
23746           functions as NOPs. This is useful when they should be patched in
23747           later dynamically. This is likely only useful together with
23748           -mrecord-mcount.
23749
23750       -mskip-rax-setup
23751       -mno-skip-rax-setup
23752           When generating code for the x86-64 architecture with SSE
23753           extensions disabled, -mskip-rax-setup can be used to skip setting
23754           up RAX register when there are no variable arguments passed in
23755           vector registers.
23756
23757           Warning: Since RAX register is used to avoid unnecessarily saving
23758           vector registers on stack when passing variable arguments, the
23759           impacts of this option are callees may waste some stack space,
23760           misbehave or jump to a random location.  GCC 4.4 or newer don't
23761           have those issues, regardless the RAX register value.
23762
23763       -m8bit-idiv
23764       -mno-8bit-idiv
23765           On some processors, like Intel Atom, 8-bit unsigned integer divide
23766           is much faster than 32-bit/64-bit integer divide.  This option
23767           generates a run-time check.  If both dividend and divisor are
23768           within range of 0 to 255, 8-bit unsigned integer divide is used
23769           instead of 32-bit/64-bit integer divide.
23770
23771       -mavx256-split-unaligned-load
23772       -mavx256-split-unaligned-store
23773           Split 32-byte AVX unaligned load and store.
23774
23775       -mstack-protector-guard=guard
23776       -mstack-protector-guard-reg=reg
23777       -mstack-protector-guard-offset=offset
23778           Generate stack protection code using canary at guard.  Supported
23779           locations are global for global canary or tls for per-thread canary
23780           in the TLS block (the default).  This option has effect only when
23781           -fstack-protector or -fstack-protector-all is specified.
23782
23783           With the latter choice the options -mstack-protector-guard-reg=reg
23784           and -mstack-protector-guard-offset=offset furthermore specify which
23785           segment register (%fs or %gs) to use as base register for reading
23786           the canary, and from what offset from that base register.  The
23787           default for those is as specified in the relevant ABI.
23788
23789       -mmitigate-rop
23790           Try to avoid generating code sequences that contain unintended
23791           return opcodes, to mitigate against certain forms of attack. At the
23792           moment, this option is limited in what it can do and should not be
23793           relied on to provide serious protection.
23794
23795       -mgeneral-regs-only
23796           Generate code that uses only the general-purpose registers.  This
23797           prevents the compiler from using floating-point, vector, mask and
23798           bound registers.
23799
23800       -mindirect-branch=choice
23801           Convert indirect call and jump with choice.  The default is keep,
23802           which keeps indirect call and jump unmodified.  thunk converts
23803           indirect call and jump to call and return thunk.  thunk-inline
23804           converts indirect call and jump to inlined call and return thunk.
23805           thunk-extern converts indirect call and jump to external call and
23806           return thunk provided in a separate object file.  You can control
23807           this behavior for a specific function by using the function
23808           attribute "indirect_branch".
23809
23810           Note that -mcmodel=large is incompatible with
23811           -mindirect-branch=thunk and -mindirect-branch=thunk-extern since
23812           the thunk function may not be reachable in the large code model.
23813
23814           Note that -mindirect-branch=thunk-extern is incompatible with
23815           -fcf-protection=branch and -fcheck-pointer-bounds since the
23816           external thunk can not be modified to disable control-flow check.
23817
23818       -mfunction-return=choice
23819           Convert function return with choice.  The default is keep, which
23820           keeps function return unmodified.  thunk converts function return
23821           to call and return thunk.  thunk-inline converts function return to
23822           inlined call and return thunk.  thunk-extern converts function
23823           return to external call and return thunk provided in a separate
23824           object file.  You can control this behavior for a specific function
23825           by using the function attribute "function_return".
23826
23827           Note that -mcmodel=large is incompatible with
23828           -mfunction-return=thunk and -mfunction-return=thunk-extern since
23829           the thunk function may not be reachable in the large code model.
23830
23831       -mindirect-branch-register
23832           Force indirect call and jump via register.
23833
23834       These -m switches are supported in addition to the above on x86-64
23835       processors in 64-bit environments.
23836
23837       -m32
23838       -m64
23839       -mx32
23840       -m16
23841       -miamcu
23842           Generate code for a 16-bit, 32-bit or 64-bit environment.  The -m32
23843           option sets "int", "long", and pointer types to 32 bits, and
23844           generates code that runs on any i386 system.
23845
23846           The -m64 option sets "int" to 32 bits and "long" and pointer types
23847           to 64 bits, and generates code for the x86-64 architecture.  For
23848           Darwin only the -m64 option also turns off the -fno-pic and
23849           -mdynamic-no-pic options.
23850
23851           The -mx32 option sets "int", "long", and pointer types to 32 bits,
23852           and generates code for the x86-64 architecture.
23853
23854           The -m16 option is the same as -m32, except for that it outputs the
23855           ".code16gcc" assembly directive at the beginning of the assembly
23856           output so that the binary can run in 16-bit mode.
23857
23858           The -miamcu option generates code which conforms to Intel MCU
23859           psABI.  It requires the -m32 option to be turned on.
23860
23861       -mno-red-zone
23862           Do not use a so-called "red zone" for x86-64 code.  The red zone is
23863           mandated by the x86-64 ABI; it is a 128-byte area beyond the
23864           location of the stack pointer that is not modified by signal or
23865           interrupt handlers and therefore can be used for temporary data
23866           without adjusting the stack pointer.  The flag -mno-red-zone
23867           disables this red zone.
23868
23869       -mcmodel=small
23870           Generate code for the small code model: the program and its symbols
23871           must be linked in the lower 2 GB of the address space.  Pointers
23872           are 64 bits.  Programs can be statically or dynamically linked.
23873           This is the default code model.
23874
23875       -mcmodel=kernel
23876           Generate code for the kernel code model.  The kernel runs in the
23877           negative 2 GB of the address space.  This model has to be used for
23878           Linux kernel code.
23879
23880       -mcmodel=medium
23881           Generate code for the medium model: the program is linked in the
23882           lower 2 GB of the address space.  Small symbols are also placed
23883           there.  Symbols with sizes larger than -mlarge-data-threshold are
23884           put into large data or BSS sections and can be located above 2GB.
23885           Programs can be statically or dynamically linked.
23886
23887       -mcmodel=large
23888           Generate code for the large model.  This model makes no assumptions
23889           about addresses and sizes of sections.
23890
23891       -maddress-mode=long
23892           Generate code for long address mode.  This is only supported for
23893           64-bit and x32 environments.  It is the default address mode for
23894           64-bit environments.
23895
23896       -maddress-mode=short
23897           Generate code for short address mode.  This is only supported for
23898           32-bit and x32 environments.  It is the default address mode for
23899           32-bit and x32 environments.
23900
23901       x86 Windows Options
23902
23903       These additional options are available for Microsoft Windows targets:
23904
23905       -mconsole
23906           This option specifies that a console application is to be
23907           generated, by instructing the linker to set the PE header subsystem
23908           type required for console applications.  This option is available
23909           for Cygwin and MinGW targets and is enabled by default on those
23910           targets.
23911
23912       -mdll
23913           This option is available for Cygwin and MinGW targets.  It
23914           specifies that a DLL---a dynamic link library---is to be generated,
23915           enabling the selection of the required runtime startup object and
23916           entry point.
23917
23918       -mnop-fun-dllimport
23919           This option is available for Cygwin and MinGW targets.  It
23920           specifies that the "dllimport" attribute should be ignored.
23921
23922       -mthread
23923           This option is available for MinGW targets. It specifies that
23924           MinGW-specific thread support is to be used.
23925
23926       -municode
23927           This option is available for MinGW-w64 targets.  It causes the
23928           "UNICODE" preprocessor macro to be predefined, and chooses Unicode-
23929           capable runtime startup code.
23930
23931       -mwin32
23932           This option is available for Cygwin and MinGW targets.  It
23933           specifies that the typical Microsoft Windows predefined macros are
23934           to be set in the pre-processor, but does not influence the choice
23935           of runtime library/startup code.
23936
23937       -mwindows
23938           This option is available for Cygwin and MinGW targets.  It
23939           specifies that a GUI application is to be generated by instructing
23940           the linker to set the PE header subsystem type appropriately.
23941
23942       -fno-set-stack-executable
23943           This option is available for MinGW targets. It specifies that the
23944           executable flag for the stack used by nested functions isn't set.
23945           This is necessary for binaries running in kernel mode of Microsoft
23946           Windows, as there the User32 API, which is used to set executable
23947           privileges, isn't available.
23948
23949       -fwritable-relocated-rdata
23950           This option is available for MinGW and Cygwin targets.  It
23951           specifies that relocated-data in read-only section is put into the
23952           ".data" section.  This is a necessary for older runtimes not
23953           supporting modification of ".rdata" sections for pseudo-relocation.
23954
23955       -mpe-aligned-commons
23956           This option is available for Cygwin and MinGW targets.  It
23957           specifies that the GNU extension to the PE file format that permits
23958           the correct alignment of COMMON variables should be used when
23959           generating code.  It is enabled by default if GCC detects that the
23960           target assembler found during configuration supports the feature.
23961
23962       See also under x86 Options for standard options.
23963
23964       Xstormy16 Options
23965
23966       These options are defined for Xstormy16:
23967
23968       -msim
23969           Choose startup files and linker script suitable for the simulator.
23970
23971       Xtensa Options
23972
23973       These options are supported for Xtensa targets:
23974
23975       -mconst16
23976       -mno-const16
23977           Enable or disable use of "CONST16" instructions for loading
23978           constant values.  The "CONST16" instruction is currently not a
23979           standard option from Tensilica.  When enabled, "CONST16"
23980           instructions are always used in place of the standard "L32R"
23981           instructions.  The use of "CONST16" is enabled by default only if
23982           the "L32R" instruction is not available.
23983
23984       -mfused-madd
23985       -mno-fused-madd
23986           Enable or disable use of fused multiply/add and multiply/subtract
23987           instructions in the floating-point option.  This has no effect if
23988           the floating-point option is not also enabled.  Disabling fused
23989           multiply/add and multiply/subtract instructions forces the compiler
23990           to use separate instructions for the multiply and add/subtract
23991           operations.  This may be desirable in some cases where strict IEEE
23992           754-compliant results are required: the fused multiply add/subtract
23993           instructions do not round the intermediate result, thereby
23994           producing results with more bits of precision than specified by the
23995           IEEE standard.  Disabling fused multiply add/subtract instructions
23996           also ensures that the program output is not sensitive to the
23997           compiler's ability to combine multiply and add/subtract operations.
23998
23999       -mserialize-volatile
24000       -mno-serialize-volatile
24001           When this option is enabled, GCC inserts "MEMW" instructions before
24002           "volatile" memory references to guarantee sequential consistency.
24003           The default is -mserialize-volatile.  Use -mno-serialize-volatile
24004           to omit the "MEMW" instructions.
24005
24006       -mforce-no-pic
24007           For targets, like GNU/Linux, where all user-mode Xtensa code must
24008           be position-independent code (PIC), this option disables PIC for
24009           compiling kernel code.
24010
24011       -mtext-section-literals
24012       -mno-text-section-literals
24013           These options control the treatment of literal pools.  The default
24014           is -mno-text-section-literals, which places literals in a separate
24015           section in the output file.  This allows the literal pool to be
24016           placed in a data RAM/ROM, and it also allows the linker to combine
24017           literal pools from separate object files to remove redundant
24018           literals and improve code size.  With -mtext-section-literals, the
24019           literals are interspersed in the text section in order to keep them
24020           as close as possible to their references.  This may be necessary
24021           for large assembly files.  Literals for each function are placed
24022           right before that function.
24023
24024       -mauto-litpools
24025       -mno-auto-litpools
24026           These options control the treatment of literal pools.  The default
24027           is -mno-auto-litpools, which places literals in a separate section
24028           in the output file unless -mtext-section-literals is used.  With
24029           -mauto-litpools the literals are interspersed in the text section
24030           by the assembler.  Compiler does not produce explicit ".literal"
24031           directives and loads literals into registers with "MOVI"
24032           instructions instead of "L32R" to let the assembler do relaxation
24033           and place literals as necessary.  This option allows assembler to
24034           create several literal pools per function and assemble very big
24035           functions, which may not be possible with -mtext-section-literals.
24036
24037       -mtarget-align
24038       -mno-target-align
24039           When this option is enabled, GCC instructs the assembler to
24040           automatically align instructions to reduce branch penalties at the
24041           expense of some code density.  The assembler attempts to widen
24042           density instructions to align branch targets and the instructions
24043           following call instructions.  If there are not enough preceding
24044           safe density instructions to align a target, no widening is
24045           performed.  The default is -mtarget-align.  These options do not
24046           affect the treatment of auto-aligned instructions like "LOOP",
24047           which the assembler always aligns, either by widening density
24048           instructions or by inserting NOP instructions.
24049
24050       -mlongcalls
24051       -mno-longcalls
24052           When this option is enabled, GCC instructs the assembler to
24053           translate direct calls to indirect calls unless it can determine
24054           that the target of a direct call is in the range allowed by the
24055           call instruction.  This translation typically occurs for calls to
24056           functions in other source files.  Specifically, the assembler
24057           translates a direct "CALL" instruction into an "L32R" followed by a
24058           "CALLX" instruction.  The default is -mno-longcalls.  This option
24059           should be used in programs where the call target can potentially be
24060           out of range.  This option is implemented in the assembler, not the
24061           compiler, so the assembly code generated by GCC still shows direct
24062           call instructions---look at the disassembled object code to see the
24063           actual instructions.  Note that the assembler uses an indirect call
24064           for every cross-file call, not just those that really are out of
24065           range.
24066
24067       zSeries Options
24068
24069       These are listed under
24070

ENVIRONMENT

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

BUGS

24257       For instructions on reporting bugs, see
24258       <http://bugzilla.redhat.com/bugzilla>.
24259

FOOTNOTES

24261       1.  On some systems, gcc -shared needs to build supplementary stub code
24262           for constructors to work.  On multi-libbed systems, gcc -shared
24263           must select the correct support libraries to link against.  Failing
24264           to supply the correct flags may lead to subtle defects.  Supplying
24265           them in cases where they are not necessary is innocuous.
24266

SEE ALSO

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

AUTHOR

24272       See the Info entry for gcc, or
24273       <http://gcc.gnu.org/onlinedocs/gcc/Contributors.html>, for contributors
24274       to GCC.
24275
24277       Copyright (c) 1988-2018 Free Software Foundation, Inc.
24278
24279       Permission is granted to copy, distribute and/or modify this document
24280       under the terms of the GNU Free Documentation License, Version 1.3 or
24281       any later version published by the Free Software Foundation; with the
24282       Invariant Sections being "GNU General Public License" and "Funding Free
24283       Software", the Front-Cover texts being (a) (see below), and with the
24284       Back-Cover Texts being (b) (see below).  A copy of the license is
24285       included in the gfdl(7) man page.
24286
24287       (a) The FSF's Front-Cover Text is:
24288
24289            A GNU Manual
24290
24291       (b) The FSF's Back-Cover Text is:
24292
24293            You have freedom to copy and modify this GNU Manual, like GNU
24294            software.  Copies published by the Free Software Foundation raise
24295            funds for GNU development.
24296
24297
24298
24299gcc-8.3.0                         2019-02-22                            GCC(1)
Impressum