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 stage of processing.  Some options
28       control the preprocessor and others the compiler itself.  Yet other
29       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 gcc program accepts options and file names as operands.  Many
39       options have multi-letter names; therefore multiple single-letter
40       options may not be grouped: -dv is very different from -d -v.
41
42       You can mix options and other arguments.  For the most part, the order
43       you use doesn't matter.  Order does matter when you use several options
44       of the same kind; for example, if you specify -L more than once, the
45       directories are searched in the order specified.  Also, the placement
46       of the -l option is significant.
47
48       Many options have long names starting with -f or with -W---for example,
49       -fmove-loop-invariants, -Wformat and so on.  Most of these have both
50       positive and negative forms; the negative form of -ffoo is -fno-foo.
51       This manual documents only one of these two forms, whichever one is not
52       the default.
53

OPTIONS

55   Option Summary
56       Here is a summary of all the options, grouped by type.  Explanations
57       are in the following sections.
58
59       Overall Options
60           -c  -S  -E  -o file  -no-canonical-prefixes -pipe  -pass-exit-codes
61           -x language  -v  -###  --help[=class[,...]]  --target-help
62           --version -wrapper @file -fplugin=file -fplugin-arg-name=arg
63           -fdump-ada-spec[-slim] -fada-spec-parent=unit -fdump-go-spec=file
64
65       C Language Options
66           -ansi  -std=standard  -fgnu89-inline -aux-info filename
67           -fallow-parameterless-variadic-functions -fno-asm  -fno-builtin
68           -fno-builtin-function -fhosted  -ffreestanding -fopenmp
69           -fms-extensions -fplan9-extensions -trigraphs  -traditional
70           -traditional-cpp -fallow-single-precision  -fcond-mismatch
71           -flax-vector-conversions -fsigned-bitfields  -fsigned-char
72           -funsigned-bitfields  -funsigned-char
73
74       C++ Language Options
75           -fabi-version=n  -fno-access-control  -fcheck-new
76           -fconstexpr-depth=n  -ffriend-injection -fno-elide-constructors
77           -fno-enforce-eh-specs -ffor-scope  -fno-for-scope
78           -fno-gnu-keywords -fno-implicit-templates
79           -fno-implicit-inline-templates -fno-implement-inlines
80           -fms-extensions -fno-nonansi-builtins  -fnothrow-opt
81           -fno-operator-names -fno-optional-diags  -fpermissive
82           -fno-pretty-templates -frepo  -fno-rtti  -fstats
83           -ftemplate-backtrace-limit=n -ftemplate-depth=n
84           -fno-threadsafe-statics -fuse-cxa-atexit  -fno-weak  -nostdinc++
85           -fno-default-inline  -fvisibility-inlines-hidden
86           -fvisibility-ms-compat -fext-numeric-literals -Wabi
87           -Wconversion-null  -Wctor-dtor-privacy -Wdelete-non-virtual-dtor
88           -Wliteral-suffix -Wnarrowing -Wnoexcept -Wnon-virtual-dtor
89           -Wreorder -Weffc++  -Wstrict-null-sentinel -Wno-non-template-friend
90           -Wold-style-cast -Woverloaded-virtual  -Wno-pmf-conversions
91           -Wsign-promo
92
93       Objective-C and Objective-C++ Language Options
94           -fconstant-string-class=class-name -fgnu-runtime  -fnext-runtime
95           -fno-nil-receivers -fobjc-abi-version=n -fobjc-call-cxx-cdtors
96           -fobjc-direct-dispatch -fobjc-exceptions -fobjc-gc -fobjc-nilcheck
97           -fobjc-std=objc1 -freplace-objc-classes -fzero-link -gen-decls
98           -Wassign-intercept -Wno-protocol  -Wselector
99           -Wstrict-selector-match -Wundeclared-selector
100
101       Language Independent Options
102           -fmessage-length=n -fdiagnostics-show-location=[once|every-line]
103           -fdiagnostics-color=[auto|never|always]
104           -fno-diagnostics-show-option -fno-diagnostics-show-caret
105
106       Warning Options
107           -fsyntax-only  -fmax-errors=n  -Wpedantic -pedantic-errors -w
108           -Wextra  -Wall  -Waddress  -Waggregate-return
109           -Waggressive-loop-optimizations -Warray-bounds -Wno-attributes
110           -Wno-builtin-macro-redefined -Wc++-compat -Wc++11-compat
111           -Wcast-align  -Wcast-qual -Wchar-subscripts -Wclobbered  -Wcomment
112           -Wconversion  -Wcoverage-mismatch  -Wno-cpp  -Wno-deprecated
113           -Wno-deprecated-declarations -Wdisabled-optimization
114           -Wno-div-by-zero -Wdouble-promotion -Wempty-body  -Wenum-compare
115           -Wno-endif-labels -Werror  -Werror=* -Wfatal-errors  -Wfloat-equal
116           -Wformat  -Wformat=2 -Wno-format-contains-nul
117           -Wno-format-extra-args -Wformat-nonliteral -Wformat-security
118           -Wformat-y2k -Wframe-larger-than=len -Wno-free-nonheap-object
119           -Wjump-misses-init -Wignored-qualifiers -Wimplicit
120           -Wimplicit-function-declaration  -Wimplicit-int -Winit-self
121           -Winline -Wmaybe-uninitialized -Wno-int-to-pointer-cast
122           -Wno-invalid-offsetof -Winvalid-pch -Wlarger-than=len
123           -Wunsafe-loop-optimizations -Wlogical-op -Wlong-long -Wmain
124           -Wmaybe-uninitialized -Wmissing-braces
125           -Wmissing-field-initializers -Wmissing-include-dirs -Wno-mudflap
126           -Wno-multichar  -Wnonnull  -Wno-overflow -Woverlength-strings
127           -Wpacked  -Wpacked-bitfield-compat  -Wpadded -Wparentheses
128           -Wpedantic-ms-format -Wno-pedantic-ms-format -Wpointer-arith
129           -Wno-pointer-to-int-cast -Wredundant-decls  -Wno-return-local-addr
130           -Wreturn-type  -Wsequence-point  -Wshadow -Wsign-compare
131           -Wsign-conversion  -Wsizeof-pointer-memaccess -Wstack-protector
132           -Wstack-usage=len -Wstrict-aliasing -Wstrict-aliasing=n
133           -Wstrict-overflow -Wstrict-overflow=n
134           -Wsuggest-attribute=[pure|const|noreturn|format]
135           -Wmissing-format-attribute -Wswitch  -Wswitch-default
136           -Wswitch-enum -Wsync-nand -Wsystem-headers  -Wtrampolines
137           -Wtrigraphs  -Wtype-limits  -Wundef -Wuninitialized
138           -Wunknown-pragmas  -Wno-pragmas -Wunsuffixed-float-constants
139           -Wunused  -Wunused-function -Wunused-label  -Wunused-local-typedefs
140           -Wunused-parameter -Wno-unused-result -Wunused-value
141           -Wunused-variable -Wunused-but-set-parameter
142           -Wunused-but-set-variable -Wuseless-cast -Wvariadic-macros
143           -Wvector-operation-performance -Wvla -Wvolatile-register-var
144           -Wwrite-strings -Wzero-as-null-pointer-constant
145
146       C and Objective-C-only Warning Options
147           -Wbad-function-cast  -Wmissing-declarations
148           -Wmissing-parameter-type  -Wmissing-prototypes  -Wnested-externs
149           -Wold-style-declaration  -Wold-style-definition -Wstrict-prototypes
150           -Wtraditional  -Wtraditional-conversion
151           -Wdeclaration-after-statement -Wpointer-sign
152
153       Debugging Options
154           -dletters  -dumpspecs  -dumpmachine  -dumpversion -fsanitize=style
155           -fdbg-cnt-list -fdbg-cnt=counter-value-list -fdisable-ipa-pass_name
156           -fdisable-rtl-pass_name -fdisable-rtl-pass-name=range-list
157           -fdisable-tree-pass_name -fdisable-tree-pass-name=range-list
158           -fdump-noaddr -fdump-unnumbered -fdump-unnumbered-links
159           -fdump-translation-unit[-n] -fdump-class-hierarchy[-n]
160           -fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-inline -fdump-passes
161           -fdump-statistics -fdump-tree-all -fdump-tree-original[-n]
162           -fdump-tree-optimized[-n] -fdump-tree-cfg -fdump-tree-alias
163           -fdump-tree-ch -fdump-tree-ssa[-n] -fdump-tree-pre[-n]
164           -fdump-tree-ccp[-n] -fdump-tree-dce[-n] -fdump-tree-gimple[-raw]
165           -fdump-tree-mudflap[-n] -fdump-tree-dom[-n] -fdump-tree-dse[-n]
166           -fdump-tree-phiprop[-n] -fdump-tree-phiopt[-n]
167           -fdump-tree-forwprop[-n] -fdump-tree-copyrename[-n] -fdump-tree-nrv
168           -fdump-tree-vect -fdump-tree-sink -fdump-tree-sra[-n]
169           -fdump-tree-forwprop[-n] -fdump-tree-fre[-n] -fdump-tree-vrp[-n]
170           -ftree-vectorizer-verbose=n -fdump-tree-storeccp[-n]
171           -fdump-final-insns=file -fcompare-debug[=opts]
172           -fcompare-debug-second -feliminate-dwarf2-dups
173           -fno-eliminate-unused-debug-types -feliminate-unused-debug-symbols
174           -femit-class-debug-always -fenable-kind-pass
175           -fenable-kind-pass=range-list -fdebug-types-section
176           -fmem-report-wpa -fmem-report -fpre-ipa-mem-report
177           -fpost-ipa-mem-report -fprofile-arcs -fopt-info
178           -fopt-info-options[=file] -frandom-seed=string -fsched-verbose=n
179           -fsel-sched-verbose -fsel-sched-dump-cfg
180           -fsel-sched-pipelining-verbose -fstack-usage  -ftest-coverage
181           -ftime-report -fvar-tracking -fvar-tracking-assignments
182           -fvar-tracking-assignments-toggle -g  -glevel  -gtoggle  -gcoff
183           -gdwarf-version -ggdb  -grecord-gcc-switches
184           -gno-record-gcc-switches -gstabs  -gstabs+  -gstrict-dwarf
185           -gno-strict-dwarf -gvms  -gxcoff  -gxcoff+ -fno-merge-debug-strings
186           -fno-dwarf2-cfi-asm -fdebug-prefix-map=old=new
187           -femit-struct-debug-baseonly -femit-struct-debug-reduced
188           -femit-struct-debug-detailed[=spec-list] -p  -pg
189           -print-file-name=library  -print-libgcc-file-name
190           -print-multi-directory  -print-multi-lib  -print-multi-os-directory
191           -print-prog-name=program  -print-search-dirs  -Q -print-sysroot
192           -print-sysroot-headers-suffix -save-temps -save-temps=cwd
193           -save-temps=obj -time[=file]
194
195       Optimization Options
196           -faggressive-loop-optimizations -falign-functions[=n]
197           -falign-jumps[=n] -falign-labels[=n] -falign-loops[=n]
198           -fassociative-math -fauto-inc-dec -fbranch-probabilities
199           -fbranch-target-load-optimize -fbranch-target-load-optimize2
200           -fbtr-bb-exclusive -fcaller-saves -fcheck-data-deps
201           -fcombine-stack-adjustments -fconserve-stack -fcompare-elim
202           -fcprop-registers -fcrossjumping -fcse-follow-jumps
203           -fcse-skip-blocks -fcx-fortran-rules -fcx-limited-range
204           -fdata-sections -fdce -fdelayed-branch -fdelete-null-pointer-checks
205           -fdevirtualize -fdse -fearly-inlining -fipa-sra
206           -fexpensive-optimizations -ffat-lto-objects -ffast-math
207           -ffinite-math-only -ffloat-store -fexcess-precision=style
208           -fforward-propagate -ffp-contract=style -ffunction-sections -fgcse
209           -fgcse-after-reload -fgcse-las -fgcse-lm -fgraphite-identity
210           -fgcse-sm -fhoist-adjacent-loads -fif-conversion -fif-conversion2
211           -findirect-inlining -finline-functions
212           -finline-functions-called-once -finline-limit=n
213           -finline-small-functions -fipa-cp -fipa-cp-clone -fipa-pta
214           -fipa-profile -fipa-pure-const -fipa-reference
215           -fira-algorithm=algorithm -fira-region=region -fira-hoist-pressure
216           -fira-loop-pressure -fno-ira-share-save-slots
217           -fno-ira-share-spill-slots -fira-verbose=n -fivopts
218           -fkeep-inline-functions -fkeep-static-consts -floop-block
219           -floop-interchange -floop-strip-mine -floop-nest-optimize
220           -floop-parallelize-all -flto -flto-compression-level
221           -flto-partition=alg -flto-report -fmerge-all-constants
222           -fmerge-constants -fmodulo-sched -fmodulo-sched-allow-regmoves
223           -fmove-loop-invariants fmudflap -fmudflapir -fmudflapth
224           -fno-branch-count-reg -fno-default-inline -fno-defer-pop
225           -fno-function-cse -fno-guess-branch-probability -fno-inline
226           -fno-math-errno -fno-peephole -fno-peephole2 -fno-sched-interblock
227           -fno-sched-spec -fno-signed-zeros -fno-toplevel-reorder
228           -fno-trapping-math -fno-zero-initialized-in-bss
229           -fomit-frame-pointer -foptimize-register-move
230           -foptimize-sibling-calls -fpartial-inlining -fpeel-loops
231           -fpredictive-commoning -fprefetch-loop-arrays -fprofile-report
232           -fprofile-correction -fprofile-dir=path -fprofile-generate
233           -fprofile-generate=path -fprofile-use -fprofile-use=path
234           -fprofile-values -freciprocal-math -free -fregmove
235           -frename-registers -freorder-blocks -freorder-blocks-and-partition
236           -freorder-functions -frerun-cse-after-loop
237           -freschedule-modulo-scheduled-loops -frounding-math
238           -fsched2-use-superblocks -fsched-pressure -fsched-spec-load
239           -fsched-spec-load-dangerous -fsched-stalled-insns-dep[=n]
240           -fsched-stalled-insns[=n] -fsched-group-heuristic
241           -fsched-critical-path-heuristic -fsched-spec-insn-heuristic
242           -fsched-rank-heuristic -fsched-last-insn-heuristic
243           -fsched-dep-count-heuristic -fschedule-insns -fschedule-insns2
244           -fsection-anchors -fselective-scheduling -fselective-scheduling2
245           -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops
246           -fshrink-wrap -fsignaling-nans -fsingle-precision-constant
247           -fsplit-ivs-in-unroller -fsplit-wide-types -fstack-protector
248           -fstack-protector-all -fstack-protector-strong -fstrict-aliasing
249           -fstrict-overflow -fthread-jumps -ftracer -ftree-bit-ccp
250           -ftree-builtin-call-dce -ftree-ccp -ftree-ch
251           -ftree-coalesce-inline-vars -ftree-coalesce-vars -ftree-copy-prop
252           -ftree-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse
253           -ftree-forwprop -ftree-fre -ftree-loop-if-convert
254           -ftree-loop-if-convert-stores -ftree-loop-im -ftree-phiprop
255           -ftree-loop-distribution -ftree-loop-distribute-patterns
256           -ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize
257           -ftree-parallelize-loops=n -ftree-pre -ftree-partial-pre -ftree-pta
258           -ftree-reassoc -ftree-sink -ftree-slsr -ftree-sra
259           -ftree-switch-conversion -ftree-tail-merge -ftree-ter
260           -ftree-vect-loop-version -ftree-vectorize -ftree-vrp
261           -funit-at-a-time -funroll-all-loops -funroll-loops
262           -funsafe-loop-optimizations -funsafe-math-optimizations
263           -funswitch-loops -fvariable-expansion-in-unroller -fvect-cost-model
264           -fvpt -fweb -fwhole-program -fwpa -fuse-ld=linker
265           -fuse-linker-plugin --param name=value -O  -O0  -O1  -O2  -O3  -Os
266           -Ofast -Og
267
268       Preprocessor Options
269           -Aquestion=answer -A-question[=answer] -C  -dD  -dI  -dM  -dN
270           -Dmacro[=defn]  -E  -H -idirafter dir -include file  -imacros file
271           -iprefix file  -iwithprefix dir -iwithprefixbefore dir  -isystem
272           dir -imultilib dir -isysroot dir -M  -MM  -MF  -MG  -MP  -MQ  -MT
273           -nostdinc -P  -fdebug-cpp -ftrack-macro-expansion
274           -fworking-directory -remap -trigraphs  -undef  -Umacro -Wp,option
275           -Xpreprocessor option -no-integrated-cpp
276
277       Assembler Option
278           -Wa,option  -Xassembler option
279
280       Linker Options
281           object-file-name  -llibrary -nostartfiles  -nodefaultlibs
282           -nostdlib -pie -rdynamic -s  -static -static-libgcc
283           -static-libstdc++ -static-libasan -static-libtsan -shared
284           -shared-libgcc  -symbolic -T script  -Wl,option  -Xlinker option -u
285           symbol
286
287       Directory Options
288           -Bprefix -Idir -iplugindir=dir -iquotedir -Ldir -specs=file -I-
289           --sysroot=dir --no-sysroot-suffix
290
291       Machine Dependent Options
292           AArch64 Options -mbig-endian  -mlittle-endian -mgeneral-regs-only
293           -mcmodel=tiny  -mcmodel=small  -mcmodel=large -mstrict-align
294           -momit-leaf-frame-pointer  -mno-omit-leaf-frame-pointer
295           -mtls-dialect=desc  -mtls-dialect=traditional
296           -mfix-cortex-a53-835769  -mno-fix-cortex-a53-835769 -march=name
297           -mcpu=name  -mtune=name
298
299           Adapteva Epiphany Options -mhalf-reg-file -mprefer-short-insn-regs
300           -mbranch-cost=num -mcmove -mnops=num -msoft-cmpsf -msplit-lohi
301           -mpost-inc -mpost-modify -mstack-offset=num -mround-nearest
302           -mlong-calls -mshort-calls -msmall16 -mfp-mode=mode -mvect-double
303           -max-vect-align=num -msplit-vecmove-early -m1reg-reg
304
305           ARM Options -mapcs-frame  -mno-apcs-frame -mabi=name
306           -mapcs-stack-check  -mno-apcs-stack-check -mapcs-float
307           -mno-apcs-float -mapcs-reentrant  -mno-apcs-reentrant
308           -msched-prolog  -mno-sched-prolog -mlittle-endian  -mbig-endian
309           -mwords-little-endian -mfloat-abi=name -mfp16-format=name
310           -mthumb-interwork  -mno-thumb-interwork -mcpu=name  -march=name
311           -mfpu=name -mstructure-size-boundary=n -mabort-on-noreturn
312           -mlong-calls  -mno-long-calls -msingle-pic-base
313           -mno-single-pic-base -mpic-register=reg -mnop-fun-dllimport
314           -mpoke-function-name -mthumb  -marm -mtpcs-frame  -mtpcs-leaf-frame
315           -mcaller-super-interworking  -mcallee-super-interworking -mtp=name
316           -mtls-dialect=dialect -mword-relocations -mfix-cortex-m3-ldrd
317           -munaligned-access
318
319           AVR Options -mmcu=mcu -maccumulate-args -mbranch-cost=cost
320           -mcall-prologues -mint8 -mno-interrupts -mrelax -mstrict-X
321           -mtiny-stack -Waddr-space-convert
322
323           Blackfin Options -mcpu=cpu[-sirevision] -msim
324           -momit-leaf-frame-pointer  -mno-omit-leaf-frame-pointer
325           -mspecld-anomaly  -mno-specld-anomaly  -mcsync-anomaly
326           -mno-csync-anomaly -mlow-64k -mno-low64k  -mstack-check-l1
327           -mid-shared-library -mno-id-shared-library  -mshared-library-id=n
328           -mleaf-id-shared-library  -mno-leaf-id-shared-library -msep-data
329           -mno-sep-data  -mlong-calls  -mno-long-calls -mfast-fp -minline-plt
330           -mmulticore  -mcorea  -mcoreb  -msdram -micplb
331
332           C6X Options -mbig-endian  -mlittle-endian -march=cpu -msim
333           -msdata=sdata-type
334
335           CRIS Options -mcpu=cpu  -march=cpu  -mtune=cpu -mmax-stack-frame=n
336           -melinux-stacksize=n -metrax4  -metrax100  -mpdebug  -mcc-init
337           -mno-side-effects -mstack-align  -mdata-align  -mconst-align
338           -m32-bit  -m16-bit  -m8-bit  -mno-prologue-epilogue  -mno-gotplt
339           -melf  -maout  -melinux  -mlinux  -sim  -sim2 -mmul-bug-workaround
340           -mno-mul-bug-workaround
341
342           CR16 Options -mmac -mcr16cplus -mcr16c -msim -mint32 -mbit-ops
343           -mdata-model=model
344
345           Darwin Options -all_load  -allowable_client  -arch
346           -arch_errors_fatal -arch_only  -bind_at_load  -bundle
347           -bundle_loader -client_name  -compatibility_version
348           -current_version -dead_strip -dependency-file  -dylib_file
349           -dylinker_install_name -dynamic  -dynamiclib
350           -exported_symbols_list -filelist  -flat_namespace
351           -force_cpusubtype_ALL -force_flat_namespace
352           -headerpad_max_install_names -iframework -image_base  -init
353           -install_name  -keep_private_externs -multi_module
354           -multiply_defined  -multiply_defined_unused -noall_load
355           -no_dead_strip_inits_and_terms -nofixprebinding -nomultidefs
356           -noprebind  -noseglinkedit -pagezero_size  -prebind
357           -prebind_all_twolevel_modules -private_bundle  -read_only_relocs
358           -sectalign -sectobjectsymbols  -whyload  -seg1addr -sectcreate
359           -sectobjectsymbols  -sectorder -segaddr -segs_read_only_addr
360           -segs_read_write_addr -seg_addr_table  -seg_addr_table_filename
361           -seglinkedit -segprot  -segs_read_only_addr  -segs_read_write_addr
362           -single_module  -static  -sub_library  -sub_umbrella
363           -twolevel_namespace  -umbrella  -undefined -unexported_symbols_list
364           -weak_reference_mismatches -whatsloaded -F -gused -gfull
365           -mmacosx-version-min=version -mkernel -mone-byte-bool
366
367           DEC Alpha Options -mno-fp-regs  -msoft-float -mieee
368           -mieee-with-inexact  -mieee-conformant -mfp-trap-mode=mode
369           -mfp-rounding-mode=mode -mtrap-precision=mode  -mbuild-constants
370           -mcpu=cpu-type  -mtune=cpu-type -mbwx  -mmax  -mfix  -mcix
371           -mfloat-vax  -mfloat-ieee -mexplicit-relocs  -msmall-data
372           -mlarge-data -msmall-text  -mlarge-text -mmemory-latency=time
373
374           FR30 Options -msmall-model -mno-lsim
375
376           FRV Options -mgpr-32  -mgpr-64  -mfpr-32  -mfpr-64 -mhard-float
377           -msoft-float -malloc-cc  -mfixed-cc  -mdword  -mno-dword -mdouble
378           -mno-double -mmedia  -mno-media  -mmuladd  -mno-muladd -mfdpic
379           -minline-plt -mgprel-ro  -multilib-library-pic -mlinked-fp
380           -mlong-calls  -malign-labels -mlibrary-pic  -macc-4  -macc-8 -mpack
381           -mno-pack  -mno-eflags  -mcond-move  -mno-cond-move
382           -moptimize-membar -mno-optimize-membar -mscc  -mno-scc  -mcond-exec
383           -mno-cond-exec -mvliw-branch  -mno-vliw-branch -mmulti-cond-exec
384           -mno-multi-cond-exec  -mnested-cond-exec -mno-nested-cond-exec
385           -mtomcat-stats -mTLS -mtls -mcpu=cpu
386
387           GNU/Linux Options -mglibc -muclibc -mbionic -mandroid
388           -tno-android-cc -tno-android-ld
389
390           H8/300 Options -mrelax  -mh  -ms  -mn  -mexr -mno-exr  -mint32
391           -malign-300
392
393           HPPA Options -march=architecture-type -mbig-switch
394           -mdisable-fpregs  -mdisable-indexing -mfast-indirect-calls  -mgas
395           -mgnu-ld   -mhp-ld -mfixed-range=register-range -mjump-in-delay
396           -mlinker-opt -mlong-calls -mlong-load-store  -mno-big-switch
397           -mno-disable-fpregs -mno-disable-indexing  -mno-fast-indirect-calls
398           -mno-gas -mno-jump-in-delay  -mno-long-load-store
399           -mno-portable-runtime  -mno-soft-float -mno-space-regs
400           -msoft-float  -mpa-risc-1-0 -mpa-risc-1-1  -mpa-risc-2-0
401           -mportable-runtime -mschedule=cpu-type  -mspace-regs  -msio  -mwsio
402           -munix=unix-std  -nolibdld  -static  -threads
403
404           i386 and x86-64 Options -mtune=cpu-type  -march=cpu-type
405           -mfpmath=unit -masm=dialect  -mno-fancy-math-387 -mno-fp-ret-in-387
406           -msoft-float -mno-wide-multiply  -mrtd  -malign-double
407           -mpreferred-stack-boundary=num -mincoming-stack-boundary=num -mcld
408           -mcx16 -msahf -mmovbe -mcrc32 -mrecip -mrecip=opt -mvzeroupper
409           -mprefer-avx128 -mmmx  -msse  -msse2 -msse3 -mssse3 -msse4.1
410           -msse4.2 -msse4 -mavx -mavx2 -maes -mpclmul -mfsgsbase -mrdrnd
411           -mf16c -mfma -msse4a -m3dnow -mpopcnt -mabm -mbmi -mtbm -mfma4
412           -mxop -mlzcnt -mbmi2 -mrtm -mlwp -mpku -mthreads
413           -mno-align-stringops  -minline-all-stringops
414           -minline-stringops-dynamically -mstringop-strategy=alg -mpush-args
415           -maccumulate-outgoing-args  -m128bit-long-double
416           -m96bit-long-double -mlong-double-64 -mlong-double-80 -mregparm=num
417           -msseregparm -mveclibabi=type -mvect8-ret-in-mem -mpc32 -mpc64
418           -mpc80 -mstackrealign -momit-leaf-frame-pointer  -mno-red-zone
419           -mno-tls-direct-seg-refs -mcmodel=code-model -mabi=name
420           -maddress-mode=mode -m32 -m64 -mx32 -mlarge-data-threshold=num
421           -msse2avx -mfentry -m8bit-idiv -mavx256-split-unaligned-load
422           -mavx256-split-unaligned-store -mindirect-branch=choice
423           -mfunction-return==choice -mindirect-branch-register
424
425           i386 and x86-64 Windows Options -mconsole -mcygwin -mno-cygwin
426           -mdll -mnop-fun-dllimport -mthread -municode -mwin32 -mwindows
427           -fno-set-stack-executable
428
429           IA-64 Options -mbig-endian  -mlittle-endian  -mgnu-as  -mgnu-ld
430           -mno-pic -mvolatile-asm-stop  -mregister-names  -msdata -mno-sdata
431           -mconstant-gp  -mauto-pic  -mfused-madd
432           -minline-float-divide-min-latency
433           -minline-float-divide-max-throughput -mno-inline-float-divide
434           -minline-int-divide-min-latency -minline-int-divide-max-throughput
435           -mno-inline-int-divide -minline-sqrt-min-latency
436           -minline-sqrt-max-throughput -mno-inline-sqrt -mdwarf2-asm
437           -mearly-stop-bits -mfixed-range=register-range -mtls-size=tls-size
438           -mtune=cpu-type -milp32 -mlp64 -msched-br-data-spec
439           -msched-ar-data-spec -msched-control-spec -msched-br-in-data-spec
440           -msched-ar-in-data-spec -msched-in-control-spec -msched-spec-ldc
441           -msched-spec-control-ldc -msched-prefer-non-data-spec-insns
442           -msched-prefer-non-control-spec-insns
443           -msched-stop-bits-after-every-cycle
444           -msched-count-spec-in-critical-path
445           -msel-sched-dont-check-control-spec -msched-fp-mem-deps-zero-cost
446           -msched-max-memory-insns-hard-limit -msched-max-memory-insns=max-
447           insns
448
449           LM32 Options -mbarrel-shift-enabled -mdivide-enabled
450           -mmultiply-enabled -msign-extend-enabled -muser-enabled
451
452           M32R/D Options -m32r2 -m32rx -m32r -mdebug -malign-loops
453           -mno-align-loops -missue-rate=number -mbranch-cost=number
454           -mmodel=code-size-model-type -msdata=sdata-type -mno-flush-func
455           -mflush-func=name -mno-flush-trap -mflush-trap=number -G num
456
457           M32C Options -mcpu=cpu -msim -memregs=number
458
459           M680x0 Options -march=arch  -mcpu=cpu  -mtune=tune -m68000  -m68020
460           -m68020-40  -m68020-60  -m68030  -m68040 -m68060  -mcpu32  -m5200
461           -m5206e  -m528x  -m5307  -m5407 -mcfv4e  -mbitfield  -mno-bitfield
462           -mc68000  -mc68020 -mnobitfield  -mrtd  -mno-rtd  -mdiv  -mno-div
463           -mshort -mno-short  -mhard-float  -m68881  -msoft-float  -mpcrel
464           -malign-int  -mstrict-align  -msep-data  -mno-sep-data
465           -mshared-library-id=n  -mid-shared-library  -mno-id-shared-library
466           -mxgot -mno-xgot
467
468           MCore Options -mhardlit  -mno-hardlit  -mdiv  -mno-div
469           -mrelax-immediates -mno-relax-immediates  -mwide-bitfields
470           -mno-wide-bitfields -m4byte-functions  -mno-4byte-functions
471           -mcallgraph-data -mno-callgraph-data  -mslow-bytes  -mno-slow-bytes
472           -mno-lsim -mlittle-endian  -mbig-endian  -m210  -m340
473           -mstack-increment
474
475           MeP Options -mabsdiff -mall-opts -maverage -mbased=n -mbitops -mc=n
476           -mclip -mconfig=name -mcop -mcop32 -mcop64 -mivc2 -mdc -mdiv -meb
477           -mel -mio-volatile -ml -mleadz -mm -mminmax -mmult -mno-opts
478           -mrepeat -ms -msatur -msdram -msim -msimnovec -mtf -mtiny=n
479
480           MicroBlaze Options -msoft-float -mhard-float -msmall-divides
481           -mcpu=cpu -mmemcpy -mxl-soft-mul -mxl-soft-div -mxl-barrel-shift
482           -mxl-pattern-compare -mxl-stack-check -mxl-gp-opt -mno-clearbss
483           -mxl-multiply-high -mxl-float-convert -mxl-float-sqrt -mbig-endian
484           -mlittle-endian -mxl-reorder -mxl-mode-app-model
485
486           MIPS Options -EL  -EB  -march=arch  -mtune=arch -mips1  -mips2
487           -mips3  -mips4  -mips32  -mips32r2 -mips64  -mips64r2 -mips16
488           -mno-mips16  -mflip-mips16 -minterlink-mips16
489           -mno-interlink-mips16 -mabi=abi  -mabicalls  -mno-abicalls -mshared
490           -mno-shared  -mplt  -mno-plt  -mxgot  -mno-xgot -mgp32  -mgp64
491           -mfp32  -mfp64  -mhard-float  -msoft-float -mno-float
492           -msingle-float  -mdouble-float -mdsp  -mno-dsp  -mdspr2  -mno-dspr2
493           -mmcu -mmno-mcu -mfpu=fpu-type -msmartmips  -mno-smartmips
494           -mpaired-single  -mno-paired-single  -mdmx  -mno-mdmx -mips3d
495           -mno-mips3d  -mmt  -mno-mt  -mllsc  -mno-llsc -mlong64  -mlong32
496           -msym32  -mno-sym32 -Gnum  -mlocal-sdata  -mno-local-sdata
497           -mextern-sdata  -mno-extern-sdata  -mgpopt  -mno-gopt
498           -membedded-data  -mno-embedded-data -muninit-const-in-rodata
499           -mno-uninit-const-in-rodata -mcode-readable=setting
500           -msplit-addresses  -mno-split-addresses -mexplicit-relocs
501           -mno-explicit-relocs -mcheck-zero-division
502           -mno-check-zero-division -mdivide-traps  -mdivide-breaks -mmemcpy
503           -mno-memcpy  -mlong-calls  -mno-long-calls -mmad  -mno-mad
504           -mfused-madd  -mno-fused-madd  -nocpp -mfix-24k -mno-fix-24k
505           -mfix-r4000  -mno-fix-r4000  -mfix-r4400  -mno-fix-r4400
506           -mfix-r10000 -mno-fix-r10000  -mfix-vr4120  -mno-fix-vr4120
507           -mfix-vr4130  -mno-fix-vr4130  -mfix-sb1  -mno-fix-sb1
508           -mflush-func=func  -mno-flush-func -mbranch-cost=num
509           -mbranch-likely  -mno-branch-likely -mfp-exceptions
510           -mno-fp-exceptions -mvr4130-align -mno-vr4130-align -msynci
511           -mno-synci -mrelax-pic-calls -mno-relax-pic-calls
512           -mmcount-ra-address
513
514           MMIX Options -mlibfuncs  -mno-libfuncs  -mepsilon  -mno-epsilon
515           -mabi=gnu -mabi=mmixware  -mzero-extend  -mknuthdiv
516           -mtoplevel-symbols -melf  -mbranch-predict  -mno-branch-predict
517           -mbase-addresses -mno-base-addresses  -msingle-exit
518           -mno-single-exit
519
520           MN10300 Options -mmult-bug  -mno-mult-bug -mno-am33 -mam33 -mam33-2
521           -mam34 -mtune=cpu-type -mreturn-pointer-on-d0 -mno-crt0  -mrelax
522           -mliw -msetlb
523
524           Moxie Options -meb -mel -mno-crt0
525
526           PDP-11 Options -mfpu  -msoft-float  -mac0  -mno-ac0  -m40  -m45
527           -m10 -mbcopy  -mbcopy-builtin  -mint32  -mno-int16 -mint16
528           -mno-int32  -mfloat32  -mno-float64 -mfloat64  -mno-float32
529           -mabshi  -mno-abshi -mbranch-expensive  -mbranch-cheap -munix-asm
530           -mdec-asm
531
532           picoChip Options -mae=ae_type -mvliw-lookahead=N
533           -msymbol-as-address -mno-inefficient-warnings
534
535           PowerPC Options See RS/6000 and PowerPC Options.
536
537           RL78 Options -msim -mmul=none -mmul=g13 -mmul=rl78
538
539           RS/6000 and PowerPC Options -mcpu=cpu-type -mtune=cpu-type
540           -mcmodel=code-model -mpowerpc64 -maltivec  -mno-altivec
541           -mpowerpc-gpopt  -mno-powerpc-gpopt -mpowerpc-gfxopt
542           -mno-powerpc-gfxopt -mmfcrf  -mno-mfcrf  -mpopcntb  -mno-popcntb
543           -mpopcntd -mno-popcntd -mfprnd  -mno-fprnd -mcmpb -mno-cmpb
544           -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-hard-dfp -mfull-toc
545           -mminimal-toc  -mno-fp-in-toc  -mno-sum-in-toc -m64  -m32
546           -mxl-compat  -mno-xl-compat  -mpe -malign-power  -malign-natural
547           -msoft-float  -mhard-float  -mmultiple  -mno-multiple
548           -msingle-float -mdouble-float -msimple-fpu -mstring  -mno-string
549           -mupdate  -mno-update -mavoid-indexed-addresses
550           -mno-avoid-indexed-addresses -mfused-madd  -mno-fused-madd
551           -mbit-align  -mno-bit-align -mstrict-align  -mno-strict-align
552           -mrelocatable -mno-relocatable  -mrelocatable-lib
553           -mno-relocatable-lib -mtoc  -mno-toc  -mlittle  -mlittle-endian
554           -mbig  -mbig-endian -mdynamic-no-pic  -maltivec -mswdiv
555           -msingle-pic-base -mprioritize-restricted-insns=priority
556           -msched-costly-dep=dependence_type -minsert-sched-nops=scheme
557           -mcall-sysv  -mcall-netbsd -maix-struct-return
558           -msvr4-struct-return -mabi=abi-type -msecure-plt -mbss-plt
559           -mblock-move-inline-limit=num -misel -mno-isel -misel=yes
560           -misel=no -mspe -mno-spe -mspe=yes  -mspe=no -mpaired
561           -mgen-cell-microcode -mwarn-cell-microcode -mvrsave -mno-vrsave
562           -mmulhw -mno-mulhw -mdlmzb -mno-dlmzb -mfloat-gprs=yes
563           -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double -mprototype
564           -mno-prototype -msim  -mmvme  -mads  -myellowknife  -memb  -msdata
565           -msdata=opt  -mvxworks  -G num  -pthread -mrecip -mrecip=opt
566           -mno-recip -mrecip-precision -mno-recip-precision -mveclibabi=type
567           -mfriz -mno-friz -mpointers-to-nested-functions
568           -mno-pointers-to-nested-functions -msave-toc-indirect
569           -mno-save-toc-indirect -mpower8-fusion -mno-mpower8-fusion
570           -mpower8-vector -mno-power8-vector -mcrypto -mno-crypto
571           -mdirect-move -mno-direct-move -mquad-memory -mno-quad-memory
572           -mquad-memory-atomic -mno-quad-memory-atomic -mcompat-align-parm
573           -mno-compat-align-parm -mstack-protector-guard=guard
574           -mstack-protector-guard-reg=reg
575           -mstack-protector-guard-offset=offset
576
577           RX Options -m64bit-doubles  -m32bit-doubles  -fpu  -nofpu -mcpu=
578           -mbig-endian-data -mlittle-endian-data -msmall-data -msim  -mno-sim
579           -mas100-syntax -mno-as100-syntax -mrelax -mmax-constant-size=
580           -mint-register= -mpid -mno-warn-multiple-fast-interrupts
581           -msave-acc-in-interrupts
582
583           S/390 and zSeries Options -mtune=cpu-type  -march=cpu-type
584           -mhard-float  -msoft-float  -mhard-dfp -mno-hard-dfp
585           -mlong-double-64 -mlong-double-128 -mbackchain  -mno-backchain
586           -mpacked-stack  -mno-packed-stack -msmall-exec  -mno-small-exec
587           -mmvcle -mno-mvcle -m64  -m31  -mdebug  -mno-debug  -mesa  -mzarch
588           -mhtm -mvx -mzvector -mtpf-trace -mno-tpf-trace  -mfused-madd
589           -mno-fused-madd -mwarn-framesize  -mwarn-dynamicstack  -mstack-size
590           -mstack-guard -mhotpatch=halfwords,halfwords
591
592           Score Options -meb -mel -mnhwloop -muls -mmac -mscore5 -mscore5u
593           -mscore7 -mscore7d
594
595           SH Options -m1  -m2  -m2e -m2a-nofpu -m2a-single-only -m2a-single
596           -m2a -m3  -m3e -m4-nofpu  -m4-single-only  -m4-single  -m4
597           -m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al -m5-64media
598           -m5-64media-nofpu -m5-32media  -m5-32media-nofpu -m5-compact
599           -m5-compact-nofpu -mb  -ml  -mdalign  -mrelax -mbigtable -mfmovd
600           -mhitachi -mrenesas -mno-renesas -mnomacsave -mieee -mno-ieee
601           -mbitops  -misize  -minline-ic_invalidate -mpadstruct -mspace
602           -mprefergot  -musermode -multcost=number -mdiv=strategy
603           -mdivsi3_libfunc=name -mfixed-range=register-range
604           -mindexed-addressing -mgettrcost=number -mpt-fixed
605           -maccumulate-outgoing-args -minvalid-symbols -matomic-model=atomic-
606           model -mbranch-cost=num -mzdcbranch -mno-zdcbranch -mcbranchdi
607           -mcmpeqdi -mfused-madd -mno-fused-madd -mfsca -mno-fsca -mfsrra
608           -mno-fsrra -mpretend-cmove -mtas
609
610           Solaris 2 Options -mimpure-text  -mno-impure-text -pthreads
611           -pthread
612
613           SPARC Options -mcpu=cpu-type -mtune=cpu-type -mcmodel=code-model
614           -mmemory-model=mem-model -m32  -m64  -mapp-regs  -mno-app-regs
615           -mfaster-structs  -mno-faster-structs  -mflat  -mno-flat -mfpu
616           -mno-fpu  -mhard-float  -msoft-float -mhard-quad-float
617           -msoft-quad-float -mstack-bias  -mno-stack-bias -munaligned-doubles
618           -mno-unaligned-doubles -muser-mode  -mno-user-mode -mv8plus
619           -mno-v8plus  -mvis  -mno-vis -mvis2  -mno-vis2  -mvis3  -mno-vis3
620           -mcbcond -mno-cbcond -mfmaf  -mno-fmaf  -mpopc  -mno-popc
621           -mfix-at697f -mfix-ut699
622
623           SPU Options -mwarn-reloc -merror-reloc -msafe-dma -munsafe-dma
624           -mbranch-hints -msmall-mem -mlarge-mem -mstdmain
625           -mfixed-range=register-range -mea32 -mea64
626           -maddress-space-conversion -mno-address-space-conversion
627           -mcache-size=cache-size -matomic-updates -mno-atomic-updates
628
629           System V Options -Qy  -Qn  -YP,paths  -Ym,dir
630
631           TILE-Gx Options -mcpu=cpu -m32 -m64 -mcmodel=code-model
632
633           TILEPro Options -mcpu=cpu -m32
634
635           V850 Options -mlong-calls  -mno-long-calls  -mep  -mno-ep
636           -mprolog-function  -mno-prolog-function  -mspace -mtda=n  -msda=n
637           -mzda=n -mapp-regs  -mno-app-regs -mdisable-callt
638           -mno-disable-callt -mv850e2v3 -mv850e2 -mv850e1 -mv850es -mv850e
639           -mv850 -mv850e3v5 -mloop -mrelax -mlong-jumps -msoft-float
640           -mhard-float -mgcc-abi -mrh850-abi -mbig-switch
641
642           VAX Options -mg  -mgnu  -munix
643
644           VMS Options -mvms-return-codes -mdebug-main=prefix -mmalloc64
645           -mpointer-size=size
646
647           VxWorks Options -mrtp  -non-static  -Bstatic  -Bdynamic -Xbind-lazy
648           -Xbind-now
649
650           x86-64 Options See i386 and x86-64 Options.
651
652           Xstormy16 Options -msim
653
654           Xtensa Options -mconst16 -mno-const16 -mfused-madd  -mno-fused-madd
655           -mforce-no-pic -mserialize-volatile  -mno-serialize-volatile
656           -mtext-section-literals  -mno-text-section-literals -mtarget-align
657           -mno-target-align -mlongcalls  -mno-longcalls
658
659           zSeries Options See S/390 and zSeries Options.
660
661       Code Generation Options
662           -fcall-saved-reg  -fcall-used-reg -ffixed-reg  -fexceptions
663           -fnon-call-exceptions  -fdelete-dead-exceptions  -funwind-tables
664           -fasynchronous-unwind-tables -fno-gnu-unique
665           -finhibit-size-directive  -finstrument-functions
666           -finstrument-functions-exclude-function-list=sym,sym,...
667           -finstrument-functions-exclude-file-list=file,file,...  -fno-common
668           -fno-ident -fpcc-struct-return  -fpic  -fPIC -fpie -fPIE
669           -fno-jump-tables -frecord-gcc-switches -freg-struct-return
670           -fshort-enums -fshort-double  -fshort-wchar -fverbose-asm
671           -fpack-struct[=n]  -fstack-check -fstack-limit-register=reg
672           -fstack-limit-symbol=sym -fno-stack-limit -fsplit-stack
673           -fleading-underscore  -ftls-model=model -fstack-reuse=reuse_level
674           -ftrapv  -fwrapv  -fbounds-check -fvisibility
675           -fstrict-volatile-bitfields -fsync-libcalls
676
677   Options Controlling the Kind of Output
678       Compilation can involve up to four stages: preprocessing, compilation
679       proper, assembly and linking, always in that order.  GCC is capable of
680       preprocessing and compiling several files either into several assembler
681       input files, or into one assembler input file; then each assembler
682       input file produces an object file, and linking combines all the object
683       files (those newly compiled, and those specified as input) into an
684       executable file.
685
686       For any given input file, the file name suffix determines what kind of
687       compilation is done:
688
689       file.c
690           C source code that must be preprocessed.
691
692       file.i
693           C source code that should not be preprocessed.
694
695       file.ii
696           C++ source code that should not be preprocessed.
697
698       file.m
699           Objective-C source code.  Note that you must link with the libobjc
700           library to make an Objective-C program work.
701
702       file.mi
703           Objective-C source code that should not be preprocessed.
704
705       file.mm
706       file.M
707           Objective-C++ source code.  Note that you must link with the
708           libobjc library to make an Objective-C++ program work.  Note that
709           .M refers to a literal capital M.
710
711       file.mii
712           Objective-C++ source code that should not be preprocessed.
713
714       file.h
715           C, C++, Objective-C or Objective-C++ header file to be turned into
716           a precompiled header (default), or C, C++ header file to be turned
717           into an Ada spec (via the -fdump-ada-spec switch).
718
719       file.cc
720       file.cp
721       file.cxx
722       file.cpp
723       file.CPP
724       file.c++
725       file.C
726           C++ source code that must be preprocessed.  Note that in .cxx, the
727           last two letters must both be literally x.  Likewise, .C refers to
728           a literal capital C.
729
730       file.mm
731       file.M
732           Objective-C++ source code that must be preprocessed.
733
734       file.mii
735           Objective-C++ source code that should not be preprocessed.
736
737       file.hh
738       file.H
739       file.hp
740       file.hxx
741       file.hpp
742       file.HPP
743       file.h++
744       file.tcc
745           C++ header file to be turned into a precompiled header or Ada spec.
746
747       file.f
748       file.for
749       file.ftn
750           Fixed form Fortran source code that should not be preprocessed.
751
752       file.F
753       file.FOR
754       file.fpp
755       file.FPP
756       file.FTN
757           Fixed form Fortran source code that must be preprocessed (with the
758           traditional preprocessor).
759
760       file.f90
761       file.f95
762       file.f03
763       file.f08
764           Free form Fortran source code that should not be preprocessed.
765
766       file.F90
767       file.F95
768       file.F03
769       file.F08
770           Free form Fortran source code that must be preprocessed (with the
771           traditional preprocessor).
772
773       file.go
774           Go source code.
775
776       file.ads
777           Ada source code file that contains a library unit declaration (a
778           declaration of a package, subprogram, or generic, or a generic
779           instantiation), or a library unit renaming declaration (a package,
780           generic, or subprogram renaming declaration).  Such files are also
781           called specs.
782
783       file.adb
784           Ada source code file containing a library unit body (a subprogram
785           or package body).  Such files are also called bodies.
786
787       file.s
788           Assembler code.
789
790       file.S
791       file.sx
792           Assembler code that must be preprocessed.
793
794       other
795           An object file to be fed straight into linking.  Any file name with
796           no recognized suffix is treated this way.
797
798       You can specify the input language explicitly with the -x option:
799
800       -x language
801           Specify explicitly the language for the following input files
802           (rather than letting the compiler choose a default based on the
803           file name suffix).  This option applies to all following input
804           files until the next -x option.  Possible values for language are:
805
806                   c  c-header  cpp-output
807                   c++  c++-header  c++-cpp-output
808                   objective-c  objective-c-header  objective-c-cpp-output
809                   objective-c++ objective-c++-header objective-c++-cpp-output
810                   assembler  assembler-with-cpp
811                   ada
812                   f77  f77-cpp-input f95  f95-cpp-input
813                   go
814                   java
815
816       -x none
817           Turn off any specification of a language, so that subsequent files
818           are handled according to their file name suffixes (as they are if
819           -x has not been used at all).
820
821       -pass-exit-codes
822           Normally the gcc program exits with the code of 1 if any phase of
823           the compiler returns a non-success return code.  If you specify
824           -pass-exit-codes, the gcc program instead returns with the
825           numerically highest error produced by any phase returning an error
826           indication.  The C, C++, and Fortran front ends return 4 if an
827           internal compiler error is encountered.
828
829       If you only want some of the stages of compilation, you can use -x (or
830       filename suffixes) to tell gcc where to start, and one of the options
831       -c, -S, or -E to say where gcc is to stop.  Note that some combinations
832       (for example, -x cpp-output -E) instruct gcc to do nothing at all.
833
834       -c  Compile or assemble the source files, but do not link.  The linking
835           stage simply is not done.  The ultimate output is in the form of an
836           object file for each source file.
837
838           By default, the object file name for a source file is made by
839           replacing the suffix .c, .i, .s, etc., with .o.
840
841           Unrecognized input files, not requiring compilation or assembly,
842           are ignored.
843
844       -S  Stop after the stage of compilation proper; do not assemble.  The
845           output is in the form of an assembler code file for each non-
846           assembler input file specified.
847
848           By default, the assembler file name for a source file is made by
849           replacing the suffix .c, .i, etc., with .s.
850
851           Input files that don't require compilation are ignored.
852
853       -E  Stop after the preprocessing stage; do not run the compiler proper.
854           The output is in the form of preprocessed source code, which is
855           sent to the standard output.
856
857           Input files that don't require preprocessing are ignored.
858
859       -o file
860           Place output in file file.  This applies to whatever sort of output
861           is being produced, whether it be an executable file, an object
862           file, an assembler file or preprocessed C code.
863
864           If -o is not specified, the default is to put an executable file in
865           a.out, the object file for source.suffix in source.o, its assembler
866           file in source.s, a precompiled header file in source.suffix.gch,
867           and all preprocessed C source on standard output.
868
869       -v  Print (on standard error output) the commands executed to run the
870           stages of compilation.  Also print the version number of the
871           compiler driver program and of the preprocessor and the compiler
872           proper.
873
874       -###
875           Like -v except the commands are not executed and arguments are
876           quoted unless they contain only alphanumeric characters or "./-_".
877           This is useful for shell scripts to capture the driver-generated
878           command lines.
879
880       -pipe
881           Use pipes rather than temporary files for communication between the
882           various stages of compilation.  This fails to work on some systems
883           where the assembler is unable to read from a pipe; but the GNU
884           assembler has no trouble.
885
886       --help
887           Print (on the standard output) a description of the command-line
888           options understood by gcc.  If the -v option is also specified then
889           --help is also passed on to the various processes invoked by gcc,
890           so that they can display the command-line options they accept.  If
891           the -Wextra option has also been specified (prior to the --help
892           option), then command-line options that have no documentation
893           associated with them are also displayed.
894
895       --target-help
896           Print (on the standard output) a description of target-specific
897           command-line options for each tool.  For some targets extra target-
898           specific information may also be printed.
899
900       --help={class|[^]qualifier}[,...]
901           Print (on the standard output) a description of the command-line
902           options understood by the compiler that fit into all specified
903           classes and qualifiers.  These are the supported classes:
904
905           optimizers
906               Display all of the optimization options supported by the
907               compiler.
908
909           warnings
910               Display all of the options controlling warning messages
911               produced by the compiler.
912
913           target
914               Display target-specific options.  Unlike the --target-help
915               option however, target-specific options of the linker and
916               assembler are not displayed.  This is because those tools do
917               not currently support the extended --help= syntax.
918
919           params
920               Display the values recognized by the --param option.
921
922           language
923               Display the options supported for language, where language is
924               the name of one of the languages supported in this version of
925               GCC.
926
927           common
928               Display the options that are common to all languages.
929
930           These are the supported qualifiers:
931
932           undocumented
933               Display only those options that are undocumented.
934
935           joined
936               Display options taking an argument that appears after an equal
937               sign in the same continuous piece of text, such as:
938               --help=target.
939
940           separate
941               Display options taking an argument that appears as a separate
942               word following the original option, such as: -o output-file.
943
944           Thus for example to display all the undocumented target-specific
945           switches supported by the compiler, use:
946
947                   --help=target,undocumented
948
949           The sense of a qualifier can be inverted by prefixing it with the ^
950           character, so for example to display all binary warning options
951           (i.e., ones that are either on or off and that do not take an
952           argument) that have a description, use:
953
954                   --help=warnings,^joined,^undocumented
955
956           The argument to --help= should not consist solely of inverted
957           qualifiers.
958
959           Combining several classes is possible, although this usually
960           restricts the output so much that there is nothing to display.  One
961           case where it does work, however, is when one of the classes is
962           target.  For example, to display all the target-specific
963           optimization options, use:
964
965                   --help=target,optimizers
966
967           The --help= option can be repeated on the command line.  Each
968           successive use displays its requested class of options, skipping
969           those that have already been displayed.
970
971           If the -Q option appears on the command line before the --help=
972           option, then the descriptive text displayed by --help= is changed.
973           Instead of describing the displayed options, an indication is given
974           as to whether the option is enabled, disabled or set to a specific
975           value (assuming that the compiler knows this at the point where the
976           --help= option is used).
977
978           Here is a truncated example from the ARM port of gcc:
979
980                     % gcc -Q -mabi=2 --help=target -c
981                     The following options are target specific:
982                     -mabi=                                2
983                     -mabort-on-noreturn                   [disabled]
984                     -mapcs                                [disabled]
985
986           The output is sensitive to the effects of previous command-line
987           options, so for example it is possible to find out which
988           optimizations are enabled at -O2 by using:
989
990                   -Q -O2 --help=optimizers
991
992           Alternatively you can discover which binary optimizations are
993           enabled by -O3 by using:
994
995                   gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
996                   gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
997                   diff /tmp/O2-opts /tmp/O3-opts | grep enabled
998
999       -no-canonical-prefixes
1000           Do not expand any symbolic links, resolve references to /../ or
1001           /./, or make the path absolute when generating a relative prefix.
1002
1003       --version
1004           Display the version number and copyrights of the invoked GCC.
1005
1006       -wrapper
1007           Invoke all subcommands under a wrapper program.  The name of the
1008           wrapper program and its parameters are passed as a comma separated
1009           list.
1010
1011                   gcc -c t.c -wrapper gdb,--args
1012
1013           This invokes all subprograms of gcc under gdb --args, thus the
1014           invocation of cc1 is gdb --args cc1 ....
1015
1016       -fplugin=name.so
1017           Load the plugin code in file name.so, assumed to be a shared object
1018           to be dlopen'd by the compiler.  The base name of the shared object
1019           file is used to identify the plugin for the purposes of argument
1020           parsing (See -fplugin-arg-name-key=value below).  Each plugin
1021           should define the callback functions specified in the Plugins API.
1022
1023       -fplugin-arg-name-key=value
1024           Define an argument called key with a value of value for the plugin
1025           called name.
1026
1027       -fdump-ada-spec[-slim]
1028           For C and C++ source and include files, generate corresponding Ada
1029           specs.
1030
1031       -fada-spec-parent=unit
1032           In conjunction with -fdump-ada-spec[-slim] above, generate Ada
1033           specs as child units of parent unit.
1034
1035       -fdump-go-spec=file
1036           For input files in any language, generate corresponding Go
1037           declarations in file.  This generates Go "const", "type", "var",
1038           and "func" declarations which may be a useful way to start writing
1039           a Go interface to code written in some other language.
1040
1041       @file
1042           Read command-line options from file.  The options read are inserted
1043           in place of the original @file option.  If file does not exist, or
1044           cannot be read, then the option will be treated literally, and not
1045           removed.
1046
1047           Options in file are separated by whitespace.  A whitespace
1048           character may be included in an option by surrounding the entire
1049           option in either single or double quotes.  Any character (including
1050           a backslash) may be included by prefixing the character to be
1051           included with a backslash.  The file may itself contain additional
1052           @file options; any such options will be processed recursively.
1053
1054   Compiling C++ Programs
1055       C++ source files conventionally use one of the suffixes .C, .cc, .cpp,
1056       .CPP, .c++, .cp, or .cxx; C++ header files often use .hh, .hpp, .H, or
1057       (for shared template code) .tcc; and preprocessed C++ files use the
1058       suffix .ii.  GCC recognizes files with these names and compiles them as
1059       C++ programs even if you call the compiler the same way as for
1060       compiling C programs (usually with the name gcc).
1061
1062       However, the use of gcc does not add the C++ library.  g++ is a program
1063       that calls GCC and automatically specifies linking against the C++
1064       library.  It treats .c, .h and .i files as C++ source files instead of
1065       C source files unless -x is used.  This program is also useful when
1066       precompiling a C header file with a .h extension for use in C++
1067       compilations.  On many systems, g++ is also installed with the name
1068       c++.
1069
1070       When you compile C++ programs, you may specify many of the same
1071       command-line options that you use for compiling programs in any
1072       language; or command-line options meaningful for C and related
1073       languages; or options that are meaningful only for C++ programs.
1074
1075   Options Controlling C Dialect
1076       The following options control the dialect of C (or languages derived
1077       from C, such as C++, Objective-C and Objective-C++) that the compiler
1078       accepts:
1079
1080       -ansi
1081           In C mode, this is equivalent to -std=c90. In C++ mode, it is
1082           equivalent to -std=c++98.
1083
1084           This turns off certain features of GCC that are incompatible with
1085           ISO C90 (when compiling C code), or of standard C++ (when compiling
1086           C++ code), such as the "asm" and "typeof" keywords, and predefined
1087           macros such as "unix" and "vax" that identify the type of system
1088           you are using.  It also enables the undesirable and rarely used ISO
1089           trigraph feature.  For the C compiler, it disables recognition of
1090           C++ style // comments as well as the "inline" keyword.
1091
1092           The alternate keywords "__asm__", "__extension__", "__inline__" and
1093           "__typeof__" continue to work despite -ansi.  You would not want to
1094           use them in an ISO C program, of course, but it is useful to put
1095           them in header files that might be included in compilations done
1096           with -ansi.  Alternate predefined macros such as "__unix__" and
1097           "__vax__" are also available, with or without -ansi.
1098
1099           The -ansi option does not cause non-ISO programs to be rejected
1100           gratuitously.  For that, -Wpedantic is required in addition to
1101           -ansi.
1102
1103           The macro "__STRICT_ANSI__" is predefined when the -ansi option is
1104           used.  Some header files may notice this macro and refrain from
1105           declaring certain functions or defining certain macros that the ISO
1106           standard doesn't call for; this is to avoid interfering with any
1107           programs that might use these names for other things.
1108
1109           Functions that are normally built in but do not have semantics
1110           defined by ISO C (such as "alloca" and "ffs") are not built-in
1111           functions when -ansi is used.
1112
1113       -std=
1114           Determine the language standard.   This option is currently only
1115           supported when compiling C or C++.
1116
1117           The compiler can accept several base standards, such as c90 or
1118           c++98, and GNU dialects of those standards, such as gnu90 or
1119           gnu++98.  When a base standard is specified, the compiler accepts
1120           all programs following that standard plus those using GNU
1121           extensions that do not contradict it.  For example, -std=c90 turns
1122           off certain features of GCC that are incompatible with ISO C90,
1123           such as the "asm" and "typeof" keywords, but not other GNU
1124           extensions that do not have a meaning in ISO C90, such as omitting
1125           the middle term of a "?:" expression. On the other hand, when a GNU
1126           dialect of a standard is specified, all features supported by the
1127           compiler are enabled, even when those features change the meaning
1128           of the base standard.  As a result, some strict-conforming programs
1129           may be rejected.  The particular standard is used by -Wpedantic to
1130           identify which features are GNU extensions given that version of
1131           the standard. For example -std=gnu90 -Wpedantic warns about C++
1132           style // comments, while -std=gnu99 -Wpedantic does not.
1133
1134           A value for this option must be provided; possible values are
1135
1136           c90
1137           c89
1138           iso9899:1990
1139               Support all ISO C90 programs (certain GNU extensions that
1140               conflict with ISO C90 are disabled). Same as -ansi for C code.
1141
1142           iso9899:199409
1143               ISO C90 as modified in amendment 1.
1144
1145           c99
1146           c9x
1147           iso9899:1999
1148           iso9899:199x
1149               ISO C99.  Note that this standard is not yet fully supported;
1150               see <http://gcc.gnu.org/c99status.html> for more information.
1151               The names c9x and iso9899:199x are deprecated.
1152
1153           c11
1154           c1x
1155           iso9899:2011
1156               ISO C11, the 2011 revision of the ISO C standard.  Support is
1157               incomplete and experimental.  The name c1x is deprecated.
1158
1159           gnu90
1160           gnu89
1161               GNU dialect of ISO C90 (including some C99 features). This is
1162               the default for C code.
1163
1164           gnu99
1165           gnu9x
1166               GNU dialect of ISO C99.  When ISO C99 is fully implemented in
1167               GCC, this will become the default.  The name gnu9x is
1168               deprecated.
1169
1170           gnu11
1171           gnu1x
1172               GNU dialect of ISO C11.  Support is incomplete and
1173               experimental.  The name gnu1x is deprecated.
1174
1175           c++98
1176           c++03
1177               The 1998 ISO C++ standard plus the 2003 technical corrigendum
1178               and some additional defect reports. Same as -ansi for C++ code.
1179
1180           gnu++98
1181           gnu++03
1182               GNU dialect of -std=c++98.  This is the default for C++ code.
1183
1184           c++11
1185           c++0x
1186               The 2011 ISO C++ standard plus amendments.  Support for C++11
1187               is still experimental, and may change in incompatible ways in
1188               future releases.  The name c++0x is deprecated.
1189
1190           gnu++11
1191           gnu++0x
1192               GNU dialect of -std=c++11. Support for C++11 is still
1193               experimental, and may change in incompatible ways in future
1194               releases.  The name gnu++0x is deprecated.
1195
1196           c++1y
1197               The next revision of the ISO C++ standard, tentatively planned
1198               for 2017.  Support is highly experimental, and will almost
1199               certainly change in incompatible ways in future releases.
1200
1201           gnu++1y
1202               GNU dialect of -std=c++1y.  Support is highly experimental, and
1203               will almost certainly change in incompatible ways in future
1204               releases.
1205
1206       -fgnu89-inline
1207           The option -fgnu89-inline tells GCC to use the traditional GNU
1208           semantics for "inline" functions when in C99 mode.
1209             This option is accepted and ignored by GCC versions 4.1.3 up to
1210           but not including 4.3.  In GCC versions 4.3 and later it changes
1211           the behavior of GCC in C99 mode.  Using this option is roughly
1212           equivalent to adding the "gnu_inline" function attribute to all
1213           inline functions.
1214
1215           The option -fno-gnu89-inline explicitly tells GCC to use the C99
1216           semantics for "inline" when in C99 or gnu99 mode (i.e., it
1217           specifies the default behavior).  This option was first supported
1218           in GCC 4.3.  This option is not supported in -std=c90 or -std=gnu90
1219           mode.
1220
1221           The preprocessor macros "__GNUC_GNU_INLINE__" and
1222           "__GNUC_STDC_INLINE__" may be used to check which semantics are in
1223           effect for "inline" functions.
1224
1225       -aux-info filename
1226           Output to the given filename prototyped declarations for all
1227           functions declared and/or defined in a translation unit, including
1228           those in header files.  This option is silently ignored in any
1229           language other than C.
1230
1231           Besides declarations, the file indicates, in comments, the origin
1232           of each declaration (source file and line), whether the declaration
1233           was implicit, prototyped or unprototyped (I, N for new or O for
1234           old, respectively, in the first character after the line number and
1235           the colon), and whether it came from a declaration or a definition
1236           (C or F, respectively, in the following character).  In the case of
1237           function definitions, a K&R-style list of arguments followed by
1238           their declarations is also provided, inside comments, after the
1239           declaration.
1240
1241       -fallow-parameterless-variadic-functions
1242           Accept variadic functions without named parameters.
1243
1244           Although it is possible to define such a function, this is not very
1245           useful as it is not possible to read the arguments.  This is only
1246           supported for C as this construct is allowed by C++.
1247
1248       -fno-asm
1249           Do not recognize "asm", "inline" or "typeof" as a keyword, so that
1250           code can use these words as identifiers.  You can use the keywords
1251           "__asm__", "__inline__" and "__typeof__" instead.  -ansi implies
1252           -fno-asm.
1253
1254           In C++, this switch only affects the "typeof" keyword, since "asm"
1255           and "inline" are standard keywords.  You may want to use the
1256           -fno-gnu-keywords flag instead, which has the same effect.  In C99
1257           mode (-std=c99 or -std=gnu99), this switch only affects the "asm"
1258           and "typeof" keywords, since "inline" is a standard keyword in ISO
1259           C99.
1260
1261       -fno-builtin
1262       -fno-builtin-function
1263           Don't recognize built-in functions that do not begin with
1264           __builtin_ as prefix.
1265
1266           GCC normally generates special code to handle certain built-in
1267           functions more efficiently; for instance, calls to "alloca" may
1268           become single instructions which adjust the stack directly, and
1269           calls to "memcpy" may become inline copy loops.  The resulting code
1270           is often both smaller and faster, but since the function calls no
1271           longer appear as such, you cannot set a breakpoint on those calls,
1272           nor can you change the behavior of the functions by linking with a
1273           different library.  In addition, when a function is recognized as a
1274           built-in function, GCC may use information about that function to
1275           warn about problems with calls to that function, or to generate
1276           more efficient code, even if the resulting code still contains
1277           calls to that function.  For example, warnings are given with
1278           -Wformat for bad calls to "printf" when "printf" is built in and
1279           "strlen" is known not to modify global memory.
1280
1281           With the -fno-builtin-function option only the built-in function
1282           function is disabled.  function must not begin with __builtin_.  If
1283           a function is named that is not built-in in this version of GCC,
1284           this option is ignored.  There is no corresponding
1285           -fbuiltin-function option; if you wish to enable built-in functions
1286           selectively when using -fno-builtin or -ffreestanding, you may
1287           define macros such as:
1288
1289                   #define abs(n)          __builtin_abs ((n))
1290                   #define strcpy(d, s)    __builtin_strcpy ((d), (s))
1291
1292       -fhosted
1293           Assert that compilation targets a hosted environment.  This implies
1294           -fbuiltin.  A hosted environment is one in which the entire
1295           standard library is available, and in which "main" has a return
1296           type of "int".  Examples are nearly everything except a kernel.
1297           This is equivalent to -fno-freestanding.
1298
1299       -ffreestanding
1300           Assert that compilation targets a freestanding environment.  This
1301           implies -fno-builtin.  A freestanding environment is one in which
1302           the standard library may not exist, and program startup may not
1303           necessarily be at "main".  The most obvious example is an OS
1304           kernel.  This is equivalent to -fno-hosted.
1305
1306       -fopenmp
1307           Enable handling of OpenMP directives "#pragma omp" in C/C++ and
1308           "!$omp" in Fortran.  When -fopenmp is specified, the compiler
1309           generates parallel code according to the OpenMP Application Program
1310           Interface v3.0 <http://www.openmp.org/>.  This option implies
1311           -pthread, and thus is only supported on targets that have support
1312           for -pthread.
1313
1314       -fgnu-tm
1315           When the option -fgnu-tm is specified, the compiler generates code
1316           for the Linux variant of Intel's current Transactional Memory ABI
1317           specification document (Revision 1.1, May 6 2009).  This is an
1318           experimental feature whose interface may change in future versions
1319           of GCC, as the official specification changes.  Please note that
1320           not all architectures are supported for this feature.
1321
1322           For more information on GCC's support for transactional memory,
1323
1324           Note that the transactional memory feature is not supported with
1325           non-call exceptions (-fnon-call-exceptions).
1326
1327       -fms-extensions
1328           Accept some non-standard constructs used in Microsoft header files.
1329
1330           In C++ code, this allows member names in structures to be similar
1331           to previous types declarations.
1332
1333                   typedef int UOW;
1334                   struct ABC {
1335                     UOW UOW;
1336                   };
1337
1338           Some cases of unnamed fields in structures and unions are only
1339           accepted with this option.
1340
1341       -fplan9-extensions
1342           Accept some non-standard constructs used in Plan 9 code.
1343
1344           This enables -fms-extensions, permits passing pointers to
1345           structures with anonymous fields to functions that expect pointers
1346           to elements of the type of the field, and permits referring to
1347           anonymous fields declared using a typedef.    This is only
1348           supported for C, not C++.
1349
1350       -trigraphs
1351           Support ISO C trigraphs.  The -ansi option (and -std options for
1352           strict ISO C conformance) implies -trigraphs.
1353
1354       -traditional
1355       -traditional-cpp
1356           Formerly, these options caused GCC to attempt to emulate a pre-
1357           standard C compiler.  They are now only supported with the -E
1358           switch.  The preprocessor continues to support a pre-standard mode.
1359           See the GNU CPP manual for details.
1360
1361       -fcond-mismatch
1362           Allow conditional expressions with mismatched types in the second
1363           and third arguments.  The value of such an expression is void.
1364           This option is not supported for C++.
1365
1366       -flax-vector-conversions
1367           Allow implicit conversions between vectors with differing numbers
1368           of elements and/or incompatible element types.  This option should
1369           not be used for new code.
1370
1371       -funsigned-char
1372           Let the type "char" be unsigned, like "unsigned char".
1373
1374           Each kind of machine has a default for what "char" should be.  It
1375           is either like "unsigned char" by default or like "signed char" by
1376           default.
1377
1378           Ideally, a portable program should always use "signed char" or
1379           "unsigned char" when it depends on the signedness of an object.
1380           But many programs have been written to use plain "char" and expect
1381           it to be signed, or expect it to be unsigned, depending on the
1382           machines they were written for.  This option, and its inverse, let
1383           you make such a program work with the opposite default.
1384
1385           The type "char" is always a distinct type from each of "signed
1386           char" or "unsigned char", even though its behavior is always just
1387           like one of those two.
1388
1389       -fsigned-char
1390           Let the type "char" be signed, like "signed char".
1391
1392           Note that this is equivalent to -fno-unsigned-char, which is the
1393           negative form of -funsigned-char.  Likewise, the option
1394           -fno-signed-char is equivalent to -funsigned-char.
1395
1396       -fsigned-bitfields
1397       -funsigned-bitfields
1398       -fno-signed-bitfields
1399       -fno-unsigned-bitfields
1400           These options control whether a bit-field is signed or unsigned,
1401           when the declaration does not use either "signed" or "unsigned".
1402           By default, such a bit-field is signed, because this is consistent:
1403           the basic integer types such as "int" are signed types.
1404
1405   Options Controlling C++ Dialect
1406       This section describes the command-line options that are only
1407       meaningful for C++ programs.  You can also use most of the GNU compiler
1408       options regardless of what language your program is in.  For example,
1409       you might compile a file "firstClass.C" like this:
1410
1411               g++ -g -frepo -O -c firstClass.C
1412
1413       In this example, only -frepo is an option meant only for C++ programs;
1414       you can use the other options with any language supported by GCC.
1415
1416       Here is a list of options that are only for compiling C++ programs:
1417
1418       -fabi-version=n
1419           Use version n of the C++ ABI.  The default is version 2.
1420
1421           Version 0 refers to the version conforming most closely to the C++
1422           ABI specification.  Therefore, the ABI obtained using version 0
1423           will change in different versions of G++ as ABI bugs are fixed.
1424
1425           Version 1 is the version of the C++ ABI that first appeared in G++
1426           3.2.
1427
1428           Version 2 is the version of the C++ ABI that first appeared in G++
1429           3.4.
1430
1431           Version 3 corrects an error in mangling a constant address as a
1432           template argument.
1433
1434           Version 4, which first appeared in G++ 4.5, implements a standard
1435           mangling for vector types.
1436
1437           Version 5, which first appeared in G++ 4.6, corrects the mangling
1438           of attribute const/volatile on function pointer types, decltype of
1439           a plain decl, and use of a function parameter in the declaration of
1440           another parameter.
1441
1442           Version 6, which first appeared in G++ 4.7, corrects the promotion
1443           behavior of C++11 scoped enums and the mangling of template
1444           argument packs, const/static_cast, prefix ++ and --, and a class
1445           scope function used as a template argument.
1446
1447           See also -Wabi.
1448
1449       -fno-access-control
1450           Turn off all access checking.  This switch is mainly useful for
1451           working around bugs in the access control code.
1452
1453       -fcheck-new
1454           Check that the pointer returned by "operator new" is non-null
1455           before attempting to modify the storage allocated.  This check is
1456           normally unnecessary because the C++ standard specifies that
1457           "operator new" only returns 0 if it is declared throw(), in which
1458           case the compiler always checks the return value even without this
1459           option.  In all other cases, when "operator new" has a non-empty
1460           exception specification, memory exhaustion is signalled by throwing
1461           "std::bad_alloc".  See also new (nothrow).
1462
1463       -fconstexpr-depth=n
1464           Set the maximum nested evaluation depth for C++11 constexpr
1465           functions to n.  A limit is needed to detect endless recursion
1466           during constant expression evaluation.  The minimum specified by
1467           the standard is 512.
1468
1469       -fdeduce-init-list
1470           Enable deduction of a template type parameter as
1471           "std::initializer_list" from a brace-enclosed initializer list,
1472           i.e.
1473
1474                   template <class T> auto forward(T t) -> decltype (realfn (t))
1475                   {
1476                     return realfn (t);
1477                   }
1478
1479                   void f()
1480                   {
1481                     forward({1,2}); // call forward<std::initializer_list<int>>
1482                   }
1483
1484           This deduction was implemented as a possible extension to the
1485           originally proposed semantics for the C++11 standard, but was not
1486           part of the final standard, so it is disabled by default.  This
1487           option is deprecated, and may be removed in a future version of
1488           G++.
1489
1490       -ffriend-injection
1491           Inject friend functions into the enclosing namespace, so that they
1492           are visible outside the scope of the class in which they are
1493           declared.  Friend functions were documented to work this way in the
1494           old Annotated C++ Reference Manual, and versions of G++ before 4.1
1495           always worked that way.  However, in ISO C++ a friend function that
1496           is not declared in an enclosing scope can only be found using
1497           argument dependent lookup.  This option causes friends to be
1498           injected as they were in earlier releases.
1499
1500           This option is for compatibility, and may be removed in a future
1501           release of G++.
1502
1503       -fno-elide-constructors
1504           The C++ standard allows an implementation to omit creating a
1505           temporary that is only used to initialize another object of the
1506           same type.  Specifying this option disables that optimization, and
1507           forces G++ to call the copy constructor in all cases.
1508
1509       -fno-enforce-eh-specs
1510           Don't generate code to check for violation of exception
1511           specifications at run time.  This option violates the C++ standard,
1512           but may be useful for reducing code size in production builds, much
1513           like defining NDEBUG.  This does not give user code permission to
1514           throw exceptions in violation of the exception specifications; the
1515           compiler still optimizes based on the specifications, so throwing
1516           an unexpected exception results in undefined behavior at run time.
1517
1518       -fextern-tls-init
1519       -fno-extern-tls-init
1520           The C++11 and OpenMP standards allow thread_local and threadprivate
1521           variables to have dynamic (runtime) initialization.  To support
1522           this, any use of such a variable goes through a wrapper function
1523           that performs any necessary initialization.  When the use and
1524           definition of the variable are in the same translation unit, this
1525           overhead can be optimized away, but when the use is in a different
1526           translation unit there is significant overhead even if the variable
1527           doesn't actually need dynamic initialization.  If the programmer
1528           can be sure that no use of the variable in a non-defining TU needs
1529           to trigger dynamic initialization (either because the variable is
1530           statically initialized, or a use of the variable in the defining TU
1531           will be executed before any uses in another TU), they can avoid
1532           this overhead with the -fno-extern-tls-init option.
1533
1534           On targets that support symbol aliases, the default is
1535           -fextern-tls-init.  On targets that do not support symbol aliases,
1536           the default is -fno-extern-tls-init.
1537
1538       -ffor-scope
1539       -fno-for-scope
1540           If -ffor-scope is specified, the scope of variables declared in a
1541           for-init-statement is limited to the for loop itself, as specified
1542           by the C++ standard.  If -fno-for-scope is specified, the scope of
1543           variables declared in a for-init-statement extends to the end of
1544           the enclosing scope, as was the case in old versions of G++, and
1545           other (traditional) implementations of C++.
1546
1547           If neither flag is given, the default is to follow the standard,
1548           but to allow and give a warning for old-style code that would
1549           otherwise be invalid, or have different behavior.
1550
1551       -fno-gnu-keywords
1552           Do not recognize "typeof" as a keyword, so that code can use this
1553           word as an identifier.  You can use the keyword "__typeof__"
1554           instead.  -ansi implies -fno-gnu-keywords.
1555
1556       -fno-implicit-templates
1557           Never emit code for non-inline templates that are instantiated
1558           implicitly (i.e. by use); only emit code for explicit
1559           instantiations.
1560
1561       -fno-implicit-inline-templates
1562           Don't emit code for implicit instantiations of inline templates,
1563           either.  The default is to handle inlines differently so that
1564           compiles with and without optimization need the same set of
1565           explicit instantiations.
1566
1567       -fno-implement-inlines
1568           To save space, do not emit out-of-line copies of inline functions
1569           controlled by #pragma implementation.  This causes linker errors if
1570           these functions are not inlined everywhere they are called.
1571
1572       -fms-extensions
1573           Disable Wpedantic warnings about constructs used in MFC, such as
1574           implicit int and getting a pointer to member function via non-
1575           standard syntax.
1576
1577       -fno-nonansi-builtins
1578           Disable built-in declarations of functions that are not mandated by
1579           ANSI/ISO C.  These include "ffs", "alloca", "_exit", "index",
1580           "bzero", "conjf", and other related functions.
1581
1582       -fnothrow-opt
1583           Treat a "throw()" exception specification as if it were a
1584           "noexcept" specification to reduce or eliminate the text size
1585           overhead relative to a function with no exception specification.
1586           If the function has local variables of types with non-trivial
1587           destructors, the exception specification actually makes the
1588           function smaller because the EH cleanups for those variables can be
1589           optimized away.  The semantic effect is that an exception thrown
1590           out of a function with such an exception specification results in a
1591           call to "terminate" rather than "unexpected".
1592
1593       -fno-operator-names
1594           Do not treat the operator name keywords "and", "bitand", "bitor",
1595           "compl", "not", "or" and "xor" as synonyms as keywords.
1596
1597       -fno-optional-diags
1598           Disable diagnostics that the standard says a compiler does not need
1599           to issue.  Currently, the only such diagnostic issued by G++ is the
1600           one for a name having multiple meanings within a class.
1601
1602       -fpermissive
1603           Downgrade some diagnostics about nonconformant code from errors to
1604           warnings.  Thus, using -fpermissive allows some nonconforming code
1605           to compile.
1606
1607       -fno-pretty-templates
1608           When an error message refers to a specialization of a function
1609           template, the compiler normally prints the signature of the
1610           template followed by the template arguments and any typedefs or
1611           typenames in the signature (e.g. "void f(T) [with T = int]" rather
1612           than "void f(int)") so that it's clear which template is involved.
1613           When an error message refers to a specialization of a class
1614           template, the compiler omits any template arguments that match the
1615           default template arguments for that template.  If either of these
1616           behaviors make it harder to understand the error message rather
1617           than easier, you can use -fno-pretty-templates to disable them.
1618
1619       -frepo
1620           Enable automatic template instantiation at link time.  This option
1621           also implies -fno-implicit-templates.
1622
1623       -fno-rtti
1624           Disable generation of information about every class with virtual
1625           functions for use by the C++ run-time type identification features
1626           (dynamic_cast and typeid).  If you don't use those parts of the
1627           language, you can save some space by using this flag.  Note that
1628           exception handling uses the same information, but G++ generates it
1629           as needed. The dynamic_cast operator can still be used for casts
1630           that do not require run-time type information, i.e. casts to "void
1631           *" or to unambiguous base classes.
1632
1633       -fstats
1634           Emit statistics about front-end processing at the end of the
1635           compilation.  This information is generally only useful to the G++
1636           development team.
1637
1638       -fstrict-enums
1639           Allow the compiler to optimize using the assumption that a value of
1640           enumerated type can only be one of the values of the enumeration
1641           (as defined in the C++ standard; basically, a value that can be
1642           represented in the minimum number of bits needed to represent all
1643           the enumerators).  This assumption may not be valid if the program
1644           uses a cast to convert an arbitrary integer value to the enumerated
1645           type.
1646
1647       -ftemplate-backtrace-limit=n
1648           Set the maximum number of template instantiation notes for a single
1649           warning or error to n.  The default value is 10.
1650
1651       -ftemplate-depth=n
1652           Set the maximum instantiation depth for template classes to n.  A
1653           limit on the template instantiation depth is needed to detect
1654           endless recursions during template class instantiation.  ANSI/ISO
1655           C++ conforming programs must not rely on a maximum depth greater
1656           than 17 (changed to 1024 in C++11).  The default value is 900, as
1657           the compiler can run out of stack space before hitting 1024 in some
1658           situations.
1659
1660       -fno-threadsafe-statics
1661           Do not emit the extra code to use the routines specified in the C++
1662           ABI for thread-safe initialization of local statics.  You can use
1663           this option to reduce code size slightly in code that doesn't need
1664           to be thread-safe.
1665
1666       -fuse-cxa-atexit
1667           Register destructors for objects with static storage duration with
1668           the "__cxa_atexit" function rather than the "atexit" function.
1669           This option is required for fully standards-compliant handling of
1670           static destructors, but only works if your C library supports
1671           "__cxa_atexit".
1672
1673       -fno-use-cxa-get-exception-ptr
1674           Don't use the "__cxa_get_exception_ptr" runtime routine.  This
1675           causes "std::uncaught_exception" to be incorrect, but is necessary
1676           if the runtime routine is not available.
1677
1678       -fvisibility-inlines-hidden
1679           This switch declares that the user does not attempt to compare
1680           pointers to inline functions or methods where the addresses of the
1681           two functions are taken in different shared objects.
1682
1683           The effect of this is that GCC may, effectively, mark inline
1684           methods with "__attribute__ ((visibility ("hidden")))" so that they
1685           do not appear in the export table of a DSO and do not require a PLT
1686           indirection when used within the DSO.  Enabling this option can
1687           have a dramatic effect on load and link times of a DSO as it
1688           massively reduces the size of the dynamic export table when the
1689           library makes heavy use of templates.
1690
1691           The behavior of this switch is not quite the same as marking the
1692           methods as hidden directly, because it does not affect static
1693           variables local to the function or cause the compiler to deduce
1694           that the function is defined in only one shared object.
1695
1696           You may mark a method as having a visibility explicitly to negate
1697           the effect of the switch for that method.  For example, if you do
1698           want to compare pointers to a particular inline method, you might
1699           mark it as having default visibility.  Marking the enclosing class
1700           with explicit visibility has no effect.
1701
1702           Explicitly instantiated inline methods are unaffected by this
1703           option as their linkage might otherwise cross a shared library
1704           boundary.
1705
1706       -fvisibility-ms-compat
1707           This flag attempts to use visibility settings to make GCC's C++
1708           linkage model compatible with that of Microsoft Visual Studio.
1709
1710           The flag makes these changes to GCC's linkage model:
1711
1712           1.  It sets the default visibility to "hidden", like
1713               -fvisibility=hidden.
1714
1715           2.  Types, but not their members, are not hidden by default.
1716
1717           3.  The One Definition Rule is relaxed for types without explicit
1718               visibility specifications that are defined in more than one
1719               shared object: those declarations are permitted if they are
1720               permitted when this option is not used.
1721
1722           In new code it is better to use -fvisibility=hidden and export
1723           those classes that are intended to be externally visible.
1724           Unfortunately it is possible for code to rely, perhaps
1725           accidentally, on the Visual Studio behavior.
1726
1727           Among the consequences of these changes are that static data
1728           members of the same type with the same name but defined in
1729           different shared objects are different, so changing one does not
1730           change the other; and that pointers to function members defined in
1731           different shared objects may not compare equal.  When this flag is
1732           given, it is a violation of the ODR to define types with the same
1733           name differently.
1734
1735       -fno-weak
1736           Do not use weak symbol support, even if it is provided by the
1737           linker.  By default, G++ uses weak symbols if they are available.
1738           This option exists only for testing, and should not be used by end-
1739           users; it results in inferior code and has no benefits.  This
1740           option may be removed in a future release of G++.
1741
1742       -nostdinc++
1743           Do not search for header files in the standard directories specific
1744           to C++, but do still search the other standard directories.  (This
1745           option is used when building the C++ library.)
1746
1747       In addition, these optimization, warning, and code generation options
1748       have meanings only for C++ programs:
1749
1750       -fno-default-inline
1751           Do not assume inline for functions defined inside a class scope.
1752             Note that these functions have linkage like inline functions;
1753           they just aren't inlined by default.
1754
1755       -Wabi (C, Objective-C, C++ and Objective-C++ only)
1756           Warn when G++ generates code that is probably not compatible with
1757           the vendor-neutral C++ ABI.  Although an effort has been made to
1758           warn about all such cases, there are probably some cases that are
1759           not warned about, even though G++ is generating incompatible code.
1760           There may also be cases where warnings are emitted even though the
1761           code that is generated is compatible.
1762
1763           You should rewrite your code to avoid these warnings if you are
1764           concerned about the fact that code generated by G++ may not be
1765           binary compatible with code generated by other compilers.
1766
1767           The known incompatibilities in -fabi-version=2 (the default)
1768           include:
1769
1770           ·   A template with a non-type template parameter of reference type
1771               is mangled incorrectly:
1772
1773                       extern int N;
1774                       template <int &> struct S {};
1775                       void n (S<N>) {2}
1776
1777               This is fixed in -fabi-version=3.
1778
1779           ·   SIMD vector types declared using "__attribute ((vector_size))"
1780               are mangled in a non-standard way that does not allow for
1781               overloading of functions taking vectors of different sizes.
1782
1783               The mangling is changed in -fabi-version=4.
1784
1785           The known incompatibilities in -fabi-version=1 include:
1786
1787           ·   Incorrect handling of tail-padding for bit-fields.  G++ may
1788               attempt to pack data into the same byte as a base class.  For
1789               example:
1790
1791                       struct A { virtual void f(); int f1 : 1; };
1792                       struct B : public A { int f2 : 1; };
1793
1794               In this case, G++ places "B::f2" into the same byte as "A::f1";
1795               other compilers do not.  You can avoid this problem by
1796               explicitly padding "A" so that its size is a multiple of the
1797               byte size on your platform; that causes G++ and other compilers
1798               to lay out "B" identically.
1799
1800           ·   Incorrect handling of tail-padding for virtual bases.  G++ does
1801               not use tail padding when laying out virtual bases.  For
1802               example:
1803
1804                       struct A { virtual void f(); char c1; };
1805                       struct B { B(); char c2; };
1806                       struct C : public A, public virtual B {};
1807
1808               In this case, G++ does not place "B" into the tail-padding for
1809               "A"; other compilers do.  You can avoid this problem by
1810               explicitly padding "A" so that its size is a multiple of its
1811               alignment (ignoring virtual base classes); that causes G++ and
1812               other compilers to lay out "C" identically.
1813
1814           ·   Incorrect handling of bit-fields with declared widths greater
1815               than that of their underlying types, when the bit-fields appear
1816               in a union.  For example:
1817
1818                       union U { int i : 4096; };
1819
1820               Assuming that an "int" does not have 4096 bits, G++ makes the
1821               union too small by the number of bits in an "int".
1822
1823           ·   Empty classes can be placed at incorrect offsets.  For example:
1824
1825                       struct A {};
1826
1827                       struct B {
1828                         A a;
1829                         virtual void f ();
1830                       };
1831
1832                       struct C : public B, public A {};
1833
1834               G++ places the "A" base class of "C" at a nonzero offset; it
1835               should be placed at offset zero.  G++ mistakenly believes that
1836               the "A" data member of "B" is already at offset zero.
1837
1838           ·   Names of template functions whose types involve "typename" or
1839               template template parameters can be mangled incorrectly.
1840
1841                       template <typename Q>
1842                       void f(typename Q::X) {}
1843
1844                       template <template <typename> class Q>
1845                       void f(typename Q<int>::X) {}
1846
1847               Instantiations of these templates may be mangled incorrectly.
1848
1849           It also warns about psABI-related changes.  The known psABI changes
1850           at this point include:
1851
1852           ·   For SysV/x86-64, unions with "long double" members are passed
1853               in memory as specified in psABI.  For example:
1854
1855                       union U {
1856                         long double ld;
1857                         int i;
1858                       };
1859
1860               "union U" is always passed in memory.
1861
1862       -Wctor-dtor-privacy (C++ and Objective-C++ only)
1863           Warn when a class seems unusable because all the constructors or
1864           destructors in that class are private, and it has neither friends
1865           nor public static member functions.  Also warn if there are no non-
1866           private methods, and there's at least one private member function
1867           that isn't a constructor or destructor.
1868
1869       -Wdelete-non-virtual-dtor (C++ and Objective-C++ only)
1870           Warn when delete is used to destroy an instance of a class that has
1871           virtual functions and non-virtual destructor. It is unsafe to
1872           delete an instance of a derived class through a pointer to a base
1873           class if the base class does not have a virtual destructor.  This
1874           warning is enabled by -Wall.
1875
1876       -Wliteral-suffix (C++ and Objective-C++ only)
1877           Warn when a string or character literal is followed by a ud-suffix
1878           which does not begin with an underscore.  As a conforming
1879           extension, GCC treats such suffixes as separate preprocessing
1880           tokens in order to maintain backwards compatibility with code that
1881           uses formatting macros from "<inttypes.h>".  For example:
1882
1883                   #define __STDC_FORMAT_MACROS
1884                   #include <inttypes.h>
1885                   #include <stdio.h>
1886
1887                   int main() {
1888                     int64_t i64 = 123;
1889                     printf("My int64: %"PRId64"\n", i64);
1890                   }
1891
1892           In this case, "PRId64" is treated as a separate preprocessing
1893           token.
1894
1895           This warning is enabled by default.
1896
1897       -Wnarrowing (C++ and Objective-C++ only)
1898           Warn when a narrowing conversion prohibited by C++11 occurs within
1899           { }, e.g.
1900
1901                   int i = { 2.2 }; // error: narrowing from double to int
1902
1903           This flag is included in -Wall and -Wc++11-compat.
1904
1905           With -std=c++11, -Wno-narrowing suppresses the diagnostic required
1906           by the standard.  Note that this does not affect the meaning of
1907           well-formed code; narrowing conversions are still considered ill-
1908           formed in SFINAE context.
1909
1910       -Wnoexcept (C++ and Objective-C++ only)
1911           Warn when a noexcept-expression evaluates to false because of a
1912           call to a function that does not have a non-throwing exception
1913           specification (i.e. throw() or noexcept) but is known by the
1914           compiler to never throw an exception.
1915
1916       -Wnon-virtual-dtor (C++ and Objective-C++ only)
1917           Warn when a class has virtual functions and an accessible non-
1918           virtual destructor, in which case it is possible but unsafe to
1919           delete an instance of a derived class through a pointer to the base
1920           class.  This warning is also enabled if -Weffc++ is specified.
1921
1922       -Wreorder (C++ and Objective-C++ only)
1923           Warn when the order of member initializers given in the code does
1924           not match the order in which they must be executed.  For instance:
1925
1926                   struct A {
1927                     int i;
1928                     int j;
1929                     A(): j (0), i (1) { }
1930                   };
1931
1932           The compiler rearranges the member initializers for i and j to
1933           match the declaration order of the members, emitting a warning to
1934           that effect.  This warning is enabled by -Wall.
1935
1936       -fext-numeric-literals (C++ and Objective-C++ only)
1937           Accept imaginary, fixed-point, or machine-defined literal number
1938           suffixes as GNU extensions.  When this option is turned off these
1939           suffixes are treated as C++11 user-defined literal numeric
1940           suffixes.  This is on by default for all pre-C++11 dialects and all
1941           GNU dialects: -std=c++98, -std=gnu++98, -std=gnu++11, -std=gnu++1y.
1942           This option is off by default for ISO C++11 onwards (-std=c++11,
1943           ...).
1944
1945       The following -W... options are not affected by -Wall.
1946
1947       -Weffc++ (C++ and Objective-C++ only)
1948           Warn about violations of the following style guidelines from Scott
1949           Meyers' Effective C++, Second Edition book:
1950
1951           ·   Item 11:  Define a copy constructor and an assignment operator
1952               for classes with dynamically-allocated memory.
1953
1954           ·   Item 12:  Prefer initialization to assignment in constructors.
1955
1956           ·   Item 14:  Make destructors virtual in base classes.
1957
1958           ·   Item 15:  Have "operator=" return a reference to *this.
1959
1960           ·   Item 23:  Don't try to return a reference when you must return
1961               an object.
1962
1963           Also warn about violations of the following style guidelines from
1964           Scott Meyers' More Effective C++ book:
1965
1966           ·   Item 6:  Distinguish between prefix and postfix forms of
1967               increment and decrement operators.
1968
1969           ·   Item 7:  Never overload "&&", "||", or ",".
1970
1971           When selecting this option, be aware that the standard library
1972           headers do not obey all of these guidelines; use grep -v to filter
1973           out those warnings.
1974
1975       -Wstrict-null-sentinel (C++ and Objective-C++ only)
1976           Warn about the use of an uncasted "NULL" as sentinel.  When
1977           compiling only with GCC this is a valid sentinel, as "NULL" is
1978           defined to "__null".  Although it is a null pointer constant rather
1979           than a null pointer, it is guaranteed to be of the same size as a
1980           pointer.  But this use is not portable across different compilers.
1981
1982       -Wno-non-template-friend (C++ and Objective-C++ only)
1983           Disable warnings when non-templatized friend functions are declared
1984           within a template.  Since the advent of explicit template
1985           specification support in G++, if the name of the friend is an
1986           unqualified-id (i.e., friend foo(int)), the C++ language
1987           specification demands that the friend declare or define an
1988           ordinary, nontemplate function.  (Section 14.5.3).  Before G++
1989           implemented explicit specification, unqualified-ids could be
1990           interpreted as a particular specialization of a templatized
1991           function.  Because this non-conforming behavior is no longer the
1992           default behavior for G++, -Wnon-template-friend allows the compiler
1993           to check existing code for potential trouble spots and is on by
1994           default.  This new compiler behavior can be turned off with
1995           -Wno-non-template-friend, which keeps the conformant compiler code
1996           but disables the helpful warning.
1997
1998       -Wold-style-cast (C++ and Objective-C++ only)
1999           Warn if an old-style (C-style) cast to a non-void type is used
2000           within a C++ program.  The new-style casts (dynamic_cast,
2001           static_cast, reinterpret_cast, and const_cast) are less vulnerable
2002           to unintended effects and much easier to search for.
2003
2004       -Woverloaded-virtual (C++ and Objective-C++ only)
2005           Warn when a function declaration hides virtual functions from a
2006           base class.  For example, in:
2007
2008                   struct A {
2009                     virtual void f();
2010                   };
2011
2012                   struct B: public A {
2013                     void f(int);
2014                   };
2015
2016           the "A" class version of "f" is hidden in "B", and code like:
2017
2018                   B* b;
2019                   b->f();
2020
2021           fails to compile.
2022
2023       -Wno-pmf-conversions (C++ and Objective-C++ only)
2024           Disable the diagnostic for converting a bound pointer to member
2025           function to a plain pointer.
2026
2027       -Wsign-promo (C++ and Objective-C++ only)
2028           Warn when overload resolution chooses a promotion from unsigned or
2029           enumerated type to a signed type, over a conversion to an unsigned
2030           type of the same size.  Previous versions of G++ tried to preserve
2031           unsignedness, but the standard mandates the current behavior.
2032
2033   Options Controlling Objective-C and Objective-C++ Dialects
2034       (NOTE: This manual does not describe the Objective-C and Objective-C++
2035       languages themselves.
2036
2037       This section describes the command-line options that are only
2038       meaningful for Objective-C and Objective-C++ programs.  You can also
2039       use most of the language-independent GNU compiler options.  For
2040       example, you might compile a file "some_class.m" like this:
2041
2042               gcc -g -fgnu-runtime -O -c some_class.m
2043
2044       In this example, -fgnu-runtime is an option meant only for Objective-C
2045       and Objective-C++ programs; you can use the other options with any
2046       language supported by GCC.
2047
2048       Note that since Objective-C is an extension of the C language,
2049       Objective-C compilations may also use options specific to the C front-
2050       end (e.g., -Wtraditional).  Similarly, Objective-C++ compilations may
2051       use C++-specific options (e.g., -Wabi).
2052
2053       Here is a list of options that are only for compiling Objective-C and
2054       Objective-C++ programs:
2055
2056       -fconstant-string-class=class-name
2057           Use class-name as the name of the class to instantiate for each
2058           literal string specified with the syntax "@"..."".  The default
2059           class name is "NXConstantString" if the GNU runtime is being used,
2060           and "NSConstantString" if the NeXT runtime is being used (see
2061           below).  The -fconstant-cfstrings option, if also present,
2062           overrides the -fconstant-string-class setting and cause "@"...""
2063           literals to be laid out as constant CoreFoundation strings.
2064
2065       -fgnu-runtime
2066           Generate object code compatible with the standard GNU Objective-C
2067           runtime.  This is the default for most types of systems.
2068
2069       -fnext-runtime
2070           Generate output compatible with the NeXT runtime.  This is the
2071           default for NeXT-based systems, including Darwin and Mac OS X.  The
2072           macro "__NEXT_RUNTIME__" is predefined if (and only if) this option
2073           is used.
2074
2075       -fno-nil-receivers
2076           Assume that all Objective-C message dispatches ("[receiver
2077           message:arg]") in this translation unit ensure that the receiver is
2078           not "nil".  This allows for more efficient entry points in the
2079           runtime to be used.  This option is only available in conjunction
2080           with the NeXT runtime and ABI version 0 or 1.
2081
2082       -fobjc-abi-version=n
2083           Use version n of the Objective-C ABI for the selected runtime.
2084           This option is currently supported only for the NeXT runtime.  In
2085           that case, Version 0 is the traditional (32-bit) ABI without
2086           support for properties and other Objective-C 2.0 additions.
2087           Version 1 is the traditional (32-bit) ABI with support for
2088           properties and other Objective-C 2.0 additions.  Version 2 is the
2089           modern (64-bit) ABI.  If nothing is specified, the default is
2090           Version 0 on 32-bit target machines, and Version 2 on 64-bit target
2091           machines.
2092
2093       -fobjc-call-cxx-cdtors
2094           For each Objective-C class, check if any of its instance variables
2095           is a C++ object with a non-trivial default constructor.  If so,
2096           synthesize a special "- (id) .cxx_construct" instance method which
2097           runs non-trivial default constructors on any such instance
2098           variables, in order, and then return "self".  Similarly, check if
2099           any instance variable is a C++ object with a non-trivial
2100           destructor, and if so, synthesize a special "- (void)
2101           .cxx_destruct" method which runs all such default destructors, in
2102           reverse order.
2103
2104           The "- (id) .cxx_construct" and "- (void) .cxx_destruct" methods
2105           thusly generated only operate on instance variables declared in the
2106           current Objective-C class, and not those inherited from
2107           superclasses.  It is the responsibility of the Objective-C runtime
2108           to invoke all such methods in an object's inheritance hierarchy.
2109           The "- (id) .cxx_construct" methods are invoked by the runtime
2110           immediately after a new object instance is allocated; the "- (void)
2111           .cxx_destruct" methods are invoked immediately before the runtime
2112           deallocates an object instance.
2113
2114           As of this writing, only the NeXT runtime on Mac OS X 10.4 and
2115           later has support for invoking the "- (id) .cxx_construct" and "-
2116           (void) .cxx_destruct" methods.
2117
2118       -fobjc-direct-dispatch
2119           Allow fast jumps to the message dispatcher.  On Darwin this is
2120           accomplished via the comm page.
2121
2122       -fobjc-exceptions
2123           Enable syntactic support for structured exception handling in
2124           Objective-C, similar to what is offered by C++ and Java.  This
2125           option is required to use the Objective-C keywords @try, @throw,
2126           @catch, @finally and @synchronized.  This option is available with
2127           both the GNU runtime and the NeXT runtime (but not available in
2128           conjunction with the NeXT runtime on Mac OS X 10.2 and earlier).
2129
2130       -fobjc-gc
2131           Enable garbage collection (GC) in Objective-C and Objective-C++
2132           programs.  This option is only available with the NeXT runtime; the
2133           GNU runtime has a different garbage collection implementation that
2134           does not require special compiler flags.
2135
2136       -fobjc-nilcheck
2137           For the NeXT runtime with version 2 of the ABI, check for a nil
2138           receiver in method invocations before doing the actual method call.
2139           This is the default and can be disabled using -fno-objc-nilcheck.
2140           Class methods and super calls are never checked for nil in this way
2141           no matter what this flag is set to.  Currently this flag does
2142           nothing when the GNU runtime, or an older version of the NeXT
2143           runtime ABI, is used.
2144
2145       -fobjc-std=objc1
2146           Conform to the language syntax of Objective-C 1.0, the language
2147           recognized by GCC 4.0.  This only affects the Objective-C additions
2148           to the C/C++ language; it does not affect conformance to C/C++
2149           standards, which is controlled by the separate C/C++ dialect option
2150           flags.  When this option is used with the Objective-C or
2151           Objective-C++ compiler, any Objective-C syntax that is not
2152           recognized by GCC 4.0 is rejected.  This is useful if you need to
2153           make sure that your Objective-C code can be compiled with older
2154           versions of GCC.
2155
2156       -freplace-objc-classes
2157           Emit a special marker instructing ld(1) not to statically link in
2158           the resulting object file, and allow dyld(1) to load it in at run
2159           time instead.  This is used in conjunction with the Fix-and-
2160           Continue debugging mode, where the object file in question may be
2161           recompiled and dynamically reloaded in the course of program
2162           execution, without the need to restart the program itself.
2163           Currently, Fix-and-Continue functionality is only available in
2164           conjunction with the NeXT runtime on Mac OS X 10.3 and later.
2165
2166       -fzero-link
2167           When compiling for the NeXT runtime, the compiler ordinarily
2168           replaces calls to "objc_getClass("...")" (when the name of the
2169           class is known at compile time) with static class references that
2170           get initialized at load time, which improves run-time performance.
2171           Specifying the -fzero-link flag suppresses this behavior and causes
2172           calls to "objc_getClass("...")"  to be retained.  This is useful in
2173           Zero-Link debugging mode, since it allows for individual class
2174           implementations to be modified during program execution.  The GNU
2175           runtime currently always retains calls to "objc_get_class("...")"
2176           regardless of command-line options.
2177
2178       -gen-decls
2179           Dump interface declarations for all classes seen in the source file
2180           to a file named sourcename.decl.
2181
2182       -Wassign-intercept (Objective-C and Objective-C++ only)
2183           Warn whenever an Objective-C assignment is being intercepted by the
2184           garbage collector.
2185
2186       -Wno-protocol (Objective-C and Objective-C++ only)
2187           If a class is declared to implement a protocol, a warning is issued
2188           for every method in the protocol that is not implemented by the
2189           class.  The default behavior is to issue a warning for every method
2190           not explicitly implemented in the class, even if a method
2191           implementation is inherited from the superclass.  If you use the
2192           -Wno-protocol option, then methods inherited from the superclass
2193           are considered to be implemented, and no warning is issued for
2194           them.
2195
2196       -Wselector (Objective-C and Objective-C++ only)
2197           Warn if multiple methods of different types for the same selector
2198           are found during compilation.  The check is performed on the list
2199           of methods in the final stage of compilation.  Additionally, a
2200           check is performed for each selector appearing in a
2201           "@selector(...)"  expression, and a corresponding method for that
2202           selector has been found during compilation.  Because these checks
2203           scan the method table only at the end of compilation, these
2204           warnings are not produced if the final stage of compilation is not
2205           reached, for example because an error is found during compilation,
2206           or because the -fsyntax-only option is being used.
2207
2208       -Wstrict-selector-match (Objective-C and Objective-C++ only)
2209           Warn if multiple methods with differing argument and/or return
2210           types are found for a given selector when attempting to send a
2211           message using this selector to a receiver of type "id" or "Class".
2212           When this flag is off (which is the default behavior), the compiler
2213           omits such warnings if any differences found are confined to types
2214           that share the same size and alignment.
2215
2216       -Wundeclared-selector (Objective-C and Objective-C++ only)
2217           Warn if a "@selector(...)" expression referring to an undeclared
2218           selector is found.  A selector is considered undeclared if no
2219           method with that name has been declared before the "@selector(...)"
2220           expression, either explicitly in an @interface or @protocol
2221           declaration, or implicitly in an @implementation section.  This
2222           option always performs its checks as soon as a "@selector(...)"
2223           expression is found, while -Wselector only performs its checks in
2224           the final stage of compilation.  This also enforces the coding
2225           style convention that methods and selectors must be declared before
2226           being used.
2227
2228       -print-objc-runtime-info
2229           Generate C header describing the largest structure that is passed
2230           by value, if any.
2231
2232   Options to Control Diagnostic Messages Formatting
2233       Traditionally, diagnostic messages have been formatted irrespective of
2234       the output device's aspect (e.g. its width, ...).  You can use the
2235       options described below to control the formatting algorithm for
2236       diagnostic messages, e.g. how many characters per line, how often
2237       source location information should be reported.  Note that some
2238       language front ends may not honor these options.
2239
2240       -fmessage-length=n
2241           Try to format error messages so that they fit on lines of about n
2242           characters.  The default is 72 characters for g++ and 0 for the
2243           rest of the front ends supported by GCC.  If n is zero, then no
2244           line-wrapping is done; each error message appears on a single line.
2245
2246       -fdiagnostics-show-location=once
2247           Only meaningful in line-wrapping mode.  Instructs the diagnostic
2248           messages reporter to emit source location information once; that
2249           is, in case the message is too long to fit on a single physical
2250           line and has to be wrapped, the source location won't be emitted
2251           (as prefix) again, over and over, in subsequent continuation lines.
2252           This is the default behavior.
2253
2254       -fdiagnostics-show-location=every-line
2255           Only meaningful in line-wrapping mode.  Instructs the diagnostic
2256           messages reporter to emit the same source location information (as
2257           prefix) for physical lines that result from the process of breaking
2258           a message which is too long to fit on a single line.
2259
2260       -fdiagnostics-color[=WHEN]
2261       -fno-diagnostics-color
2262           Use color in diagnostics.  WHEN is never, always, or auto.  The
2263           default is auto.  auto means to use color only when the standard
2264           error is a terminal.  The forms -fdiagnostics-color and
2265           -fno-diagnostics-color are aliases for -fdiagnostics-color=always
2266           and -fdiagnostics-color=never, respectively.
2267
2268           The colors are defined by the environment variable GCC_COLORS.  Its
2269           value is a colon-separated list of capabilities and Select Graphic
2270           Rendition (SGR) substrings. SGR commands are interpreted by the
2271           terminal or terminal emulator.  (See the section in the
2272           documentation of your text terminal for permitted values and their
2273           meanings as character attributes.)  These substring values are
2274           integers in decimal representation and can be concatenated with
2275           semicolons.  Common values to concatenate include 1 for bold, 4 for
2276           underline, 5 for blink, 7 for inverse, 39 for default foreground
2277           color, 30 to 37 for foreground colors, 90 to 97 for 16-color mode
2278           foreground colors, 38;5;0 to 38;5;255 for 88-color and 256-color
2279           modes foreground colors, 49 for default background color, 40 to 47
2280           for background colors, 100 to 107 for 16-color mode background
2281           colors, and 48;5;0 to 48;5;255 for 88-color and 256-color modes
2282           background colors.
2283
2284           The default GCC_COLORS is
2285           error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01
2286           where 01;31 is bold red, 01;35 is bold magenta, 01;36 is bold cyan,
2287           01;32 is bold green and 01 is bold. Setting GCC_COLORS to the empty
2288           string disables colors.  Supported capabilities are as follows.
2289
2290           "error="
2291               SGR substring for error: markers.
2292
2293           "warning="
2294               SGR substring for warning: markers.
2295
2296           "note="
2297               SGR substring for note: markers.
2298
2299           "caret="
2300               SGR substring for caret line.
2301
2302           "locus="
2303               SGR substring for location information, file:line or
2304               file:line:column etc.
2305
2306           "quote="
2307               SGR substring for information printed within quotes.
2308
2309       -fno-diagnostics-show-option
2310           By default, each diagnostic emitted includes text indicating the
2311           command-line option that directly controls the diagnostic (if such
2312           an option is known to the diagnostic machinery).  Specifying the
2313           -fno-diagnostics-show-option flag suppresses that behavior.
2314
2315       -fno-diagnostics-show-caret
2316           By default, each diagnostic emitted includes the original source
2317           line and a caret '^' indicating the column.  This option suppresses
2318           this information.
2319
2320   Options to Request or Suppress Warnings
2321       Warnings are diagnostic messages that report constructions that are not
2322       inherently erroneous but that are risky or suggest there may have been
2323       an error.
2324
2325       The following language-independent options do not enable specific
2326       warnings but control the kinds of diagnostics produced by GCC.
2327
2328       -fsyntax-only
2329           Check the code for syntax errors, but don't do anything beyond
2330           that.
2331
2332       -fmax-errors=n
2333           Limits the maximum number of error messages to n, at which point
2334           GCC bails out rather than attempting to continue processing the
2335           source code.  If n is 0 (the default), there is no limit on the
2336           number of error messages produced.  If -Wfatal-errors is also
2337           specified, then -Wfatal-errors takes precedence over this option.
2338
2339       -w  Inhibit all warning messages.
2340
2341       -Werror
2342           Make all warnings into errors.
2343
2344       -Werror=
2345           Make the specified warning into an error.  The specifier for a
2346           warning is appended; for example -Werror=switch turns the warnings
2347           controlled by -Wswitch into errors.  This switch takes a negative
2348           form, to be used to negate -Werror for specific warnings; for
2349           example -Wno-error=switch makes -Wswitch warnings not be errors,
2350           even when -Werror is in effect.
2351
2352           The warning message for each controllable warning includes the
2353           option that controls the warning.  That option can then be used
2354           with -Werror= and -Wno-error= as described above.  (Printing of the
2355           option in the warning message can be disabled using the
2356           -fno-diagnostics-show-option flag.)
2357
2358           Note that specifying -Werror=foo automatically implies -Wfoo.
2359           However, -Wno-error=foo does not imply anything.
2360
2361       -Wfatal-errors
2362           This option causes the compiler to abort compilation on the first
2363           error occurred rather than trying to keep going and printing
2364           further error messages.
2365
2366       You can request many specific warnings with options beginning with -W,
2367       for example -Wimplicit to request warnings on implicit declarations.
2368       Each of these specific warning options also has a negative form
2369       beginning -Wno- to turn off warnings; for example, -Wno-implicit.  This
2370       manual lists only one of the two forms, whichever is not the default.
2371       For further language-specific options also refer to C++ Dialect Options
2372       and Objective-C and Objective-C++ Dialect Options.
2373
2374       When an unrecognized warning option is requested (e.g.,
2375       -Wunknown-warning), GCC emits a diagnostic stating that the option is
2376       not recognized.  However, if the -Wno- form is used, the behavior is
2377       slightly different: no diagnostic is produced for -Wno-unknown-warning
2378       unless other diagnostics are being produced.  This allows the use of
2379       new -Wno- options with old compilers, but if something goes wrong, the
2380       compiler warns that an unrecognized option is present.
2381
2382       -Wpedantic
2383       -pedantic
2384           Issue all the warnings demanded by strict ISO C and ISO C++; reject
2385           all programs that use forbidden extensions, and some other programs
2386           that do not follow ISO C and ISO C++.  For ISO C, follows the
2387           version of the ISO C standard specified by any -std option used.
2388
2389           Valid ISO C and ISO C++ programs should compile properly with or
2390           without this option (though a rare few require -ansi or a -std
2391           option specifying the required version of ISO C).  However, without
2392           this option, certain GNU extensions and traditional C and C++
2393           features are supported as well.  With this option, they are
2394           rejected.
2395
2396           -Wpedantic does not cause warning messages for use of the alternate
2397           keywords whose names begin and end with __.  Pedantic warnings are
2398           also disabled in the expression that follows "__extension__".
2399           However, only system header files should use these escape routes;
2400           application programs should avoid them.
2401
2402           Some users try to use -Wpedantic to check programs for strict ISO C
2403           conformance.  They soon find that it does not do quite what they
2404           want: it finds some non-ISO practices, but not all---only those for
2405           which ISO C requires a diagnostic, and some others for which
2406           diagnostics have been added.
2407
2408           A feature to report any failure to conform to ISO C might be useful
2409           in some instances, but would require considerable additional work
2410           and would be quite different from -Wpedantic.  We don't have plans
2411           to support such a feature in the near future.
2412
2413           Where the standard specified with -std represents a GNU extended
2414           dialect of C, such as gnu90 or gnu99, there is a corresponding base
2415           standard, the version of ISO C on which the GNU extended dialect is
2416           based.  Warnings from -Wpedantic are given where they are required
2417           by the base standard.  (It does not make sense for such warnings to
2418           be given only for features not in the specified GNU C dialect,
2419           since by definition the GNU dialects of C include all features the
2420           compiler supports with the given option, and there would be nothing
2421           to warn about.)
2422
2423       -pedantic-errors
2424           Like -Wpedantic, except that errors are produced rather than
2425           warnings.
2426
2427       -Wall
2428           This enables all the warnings about constructions that some users
2429           consider questionable, and that are easy to avoid (or modify to
2430           prevent the warning), even in conjunction with macros.  This also
2431           enables some language-specific warnings described in C++ Dialect
2432           Options and Objective-C and Objective-C++ Dialect Options.
2433
2434           -Wall turns on the following warning flags:
2435
2436           -Waddress -Warray-bounds (only with -O2) -Wc++11-compat
2437           -Wchar-subscripts -Wenum-compare (in C/ObjC; this is on by default
2438           in C++) -Wimplicit-int (C and Objective-C only)
2439           -Wimplicit-function-declaration (C and Objective-C only) -Wcomment
2440           -Wformat -Wmain (only for C/ObjC and unless -ffreestanding)
2441           -Wmaybe-uninitialized -Wmissing-braces (only for C/ObjC) -Wnonnull
2442           -Wparentheses -Wpointer-sign -Wreorder -Wreturn-type
2443           -Wsequence-point -Wsign-compare (only in C++) -Wstrict-aliasing
2444           -Wstrict-overflow=1 -Wswitch -Wtrigraphs -Wuninitialized
2445           -Wunknown-pragmas -Wunused-function -Wunused-label -Wunused-value
2446           -Wunused-variable -Wvolatile-register-var
2447
2448           Note that some warning flags are not implied by -Wall.  Some of
2449           them warn about constructions that users generally do not consider
2450           questionable, but which occasionally you might wish to check for;
2451           others warn about constructions that are necessary or hard to avoid
2452           in some cases, and there is no simple way to modify the code to
2453           suppress the warning. Some of them are enabled by -Wextra but many
2454           of them must be enabled individually.
2455
2456       -Wextra
2457           This enables some extra warning flags that are not enabled by
2458           -Wall. (This option used to be called -W.  The older name is still
2459           supported, but the newer name is more descriptive.)
2460
2461           -Wclobbered -Wempty-body -Wignored-qualifiers
2462           -Wmissing-field-initializers -Wmissing-parameter-type (C only)
2463           -Wold-style-declaration (C only) -Woverride-init -Wsign-compare
2464           -Wtype-limits -Wuninitialized -Wunused-parameter (only with
2465           -Wunused or -Wall) -Wunused-but-set-parameter (only with -Wunused
2466           or -Wall)
2467
2468           The option -Wextra also prints warning messages for the following
2469           cases:
2470
2471           ·   A pointer is compared against integer zero with <, <=, >, or
2472               >=.
2473
2474           ·   (C++ only) An enumerator and a non-enumerator both appear in a
2475               conditional expression.
2476
2477           ·   (C++ only) Ambiguous virtual bases.
2478
2479           ·   (C++ only) Subscripting an array that has been declared
2480               register.
2481
2482           ·   (C++ only) Taking the address of a variable that has been
2483               declared register.
2484
2485           ·   (C++ only) A base class is not initialized in a derived class's
2486               copy constructor.
2487
2488       -Wchar-subscripts
2489           Warn if an array subscript has type "char".  This is a common cause
2490           of error, as programmers often forget that this type is signed on
2491           some machines.  This warning is enabled by -Wall.
2492
2493       -Wcomment
2494           Warn whenever a comment-start sequence /* appears in a /* comment,
2495           or whenever a Backslash-Newline appears in a // comment.  This
2496           warning is enabled by -Wall.
2497
2498       -Wno-coverage-mismatch
2499           Warn if feedback profiles do not match when using the -fprofile-use
2500           option.  If a source file is changed between compiling with
2501           -fprofile-gen and with -fprofile-use, the files with the profile
2502           feedback can fail to match the source file and GCC cannot use the
2503           profile feedback information.  By default, this warning is enabled
2504           and is treated as an error.  -Wno-coverage-mismatch can be used to
2505           disable the warning or -Wno-error=coverage-mismatch can be used to
2506           disable the error.  Disabling the error for this warning can result
2507           in poorly optimized code and is useful only in the case of very
2508           minor changes such as bug fixes to an existing code-base.
2509           Completely disabling the warning is not recommended.
2510
2511       -Wno-cpp
2512           (C, Objective-C, C++, Objective-C++ and Fortran only)
2513
2514           Suppress warning messages emitted by "#warning" directives.
2515
2516       -Wdouble-promotion (C, C++, Objective-C and Objective-C++ only)
2517           Give a warning when a value of type "float" is implicitly promoted
2518           to "double".  CPUs with a 32-bit "single-precision" floating-point
2519           unit implement "float" in hardware, but emulate "double" in
2520           software.  On such a machine, doing computations using "double"
2521           values is much more expensive because of the overhead required for
2522           software emulation.
2523
2524           It is easy to accidentally do computations with "double" because
2525           floating-point literals are implicitly of type "double".  For
2526           example, in:
2527
2528                   float area(float radius)
2529                   {
2530                      return 3.14159 * radius * radius;
2531                   }
2532
2533           the compiler performs the entire computation with "double" because
2534           the floating-point literal is a "double".
2535
2536       -Wformat
2537       -Wformat=n
2538           Check calls to "printf" and "scanf", etc., to make sure that the
2539           arguments supplied have types appropriate to the format string
2540           specified, and that the conversions specified in the format string
2541           make sense.  This includes standard functions, and others specified
2542           by format attributes, in the "printf", "scanf", "strftime" and
2543           "strfmon" (an X/Open extension, not in the C standard) families (or
2544           other target-specific families).  Which functions are checked
2545           without format attributes having been specified depends on the
2546           standard version selected, and such checks of functions without the
2547           attribute specified are disabled by -ffreestanding or -fno-builtin.
2548
2549           The formats are checked against the format features supported by
2550           GNU libc version 2.2.  These include all ISO C90 and C99 features,
2551           as well as features from the Single Unix Specification and some BSD
2552           and GNU extensions.  Other library implementations may not support
2553           all these features; GCC does not support warning about features
2554           that go beyond a particular library's limitations.  However, if
2555           -Wpedantic is used with -Wformat, warnings are given about format
2556           features not in the selected standard version (but not for
2557           "strfmon" formats, since those are not in any version of the C
2558           standard).
2559
2560           -Wformat=1
2561           -Wformat
2562               Option -Wformat is equivalent to -Wformat=1, and -Wno-format is
2563               equivalent to -Wformat=0.  Since -Wformat also checks for null
2564               format arguments for several functions, -Wformat also implies
2565               -Wnonnull.  Some aspects of this level of format checking can
2566               be disabled by the options: -Wno-format-contains-nul,
2567               -Wno-format-extra-args, and -Wno-format-zero-length.  -Wformat
2568               is enabled by -Wall.
2569
2570           -Wno-format-contains-nul
2571               If -Wformat is specified, do not warn about format strings that
2572               contain NUL bytes.
2573
2574           -Wno-format-extra-args
2575               If -Wformat is specified, do not warn about excess arguments to
2576               a "printf" or "scanf" format function.  The C standard
2577               specifies that such arguments are ignored.
2578
2579               Where the unused arguments lie between used arguments that are
2580               specified with $ operand number specifications, normally
2581               warnings are still given, since the implementation could not
2582               know what type to pass to "va_arg" to skip the unused
2583               arguments.  However, in the case of "scanf" formats, this
2584               option suppresses the warning if the unused arguments are all
2585               pointers, since the Single Unix Specification says that such
2586               unused arguments are allowed.
2587
2588           -Wno-format-zero-length
2589               If -Wformat is specified, do not warn about zero-length
2590               formats.  The C standard specifies that zero-length formats are
2591               allowed.
2592
2593           -Wformat=2
2594               Enable -Wformat plus additional format checks.  Currently
2595               equivalent to -Wformat -Wformat-nonliteral -Wformat-security
2596               -Wformat-y2k.
2597
2598           -Wformat-nonliteral
2599               If -Wformat is specified, also warn if the format string is not
2600               a string literal and so cannot be checked, unless the format
2601               function takes its format arguments as a "va_list".
2602
2603           -Wformat-security
2604               If -Wformat is specified, also warn about uses of format
2605               functions that represent possible security problems.  At
2606               present, this warns about calls to "printf" and "scanf"
2607               functions where the format string is not a string literal and
2608               there are no format arguments, as in "printf (foo);".  This may
2609               be a security hole if the format string came from untrusted
2610               input and contains %n.  (This is currently a subset of what
2611               -Wformat-nonliteral warns about, but in future warnings may be
2612               added to -Wformat-security that are not included in
2613               -Wformat-nonliteral.)
2614
2615           -Wformat-y2k
2616               If -Wformat is specified, also warn about "strftime" formats
2617               that may yield only a two-digit year.
2618
2619       -Wnonnull
2620           Warn about passing a null pointer for arguments marked as requiring
2621           a non-null value by the "nonnull" function attribute.
2622
2623           -Wnonnull is included in -Wall and -Wformat.  It can be disabled
2624           with the -Wno-nonnull option.
2625
2626       -Winit-self (C, C++, Objective-C and Objective-C++ only)
2627           Warn about uninitialized variables that are initialized with
2628           themselves.  Note this option can only be used with the
2629           -Wuninitialized option.
2630
2631           For example, GCC warns about "i" being uninitialized in the
2632           following snippet only when -Winit-self has been specified:
2633
2634                   int f()
2635                   {
2636                     int i = i;
2637                     return i;
2638                   }
2639
2640           This warning is enabled by -Wall in C++.
2641
2642       -Wimplicit-int (C and Objective-C only)
2643           Warn when a declaration does not specify a type.  This warning is
2644           enabled by -Wall.
2645
2646       -Wimplicit-function-declaration (C and Objective-C only)
2647           Give a warning whenever a function is used before being declared.
2648           In C99 mode (-std=c99 or -std=gnu99), this warning is enabled by
2649           default and it is made into an error by -pedantic-errors. This
2650           warning is also enabled by -Wall.
2651
2652       -Wimplicit (C and Objective-C only)
2653           Same as -Wimplicit-int and -Wimplicit-function-declaration.  This
2654           warning is enabled by -Wall.
2655
2656       -Wignored-qualifiers (C and C++ only)
2657           Warn if the return type of a function has a type qualifier such as
2658           "const".  For ISO C such a type qualifier has no effect, since the
2659           value returned by a function is not an lvalue.  For C++, the
2660           warning is only emitted for scalar types or "void".  ISO C
2661           prohibits qualified "void" return types on function definitions, so
2662           such return types always receive a warning even without this
2663           option.
2664
2665           This warning is also enabled by -Wextra.
2666
2667       -Wmain
2668           Warn if the type of main is suspicious.  main should be a function
2669           with external linkage, returning int, taking either zero arguments,
2670           two, or three arguments of appropriate types.  This warning is
2671           enabled by default in C++ and is enabled by either -Wall or
2672           -Wpedantic.
2673
2674       -Wmissing-braces
2675           Warn if an aggregate or union initializer is not fully bracketed.
2676           In the following example, the initializer for a is not fully
2677           bracketed, but that for b is fully bracketed.  This warning is
2678           enabled by -Wall in C.
2679
2680                   int a[2][2] = { 0, 1, 2, 3 };
2681                   int b[2][2] = { { 0, 1 }, { 2, 3 } };
2682
2683           This warning is enabled by -Wall.
2684
2685       -Wmissing-include-dirs (C, C++, Objective-C and Objective-C++ only)
2686           Warn if a user-supplied include directory does not exist.
2687
2688       -Wparentheses
2689           Warn if parentheses are omitted in certain contexts, such as when
2690           there is an assignment in a context where a truth value is
2691           expected, or when operators are nested whose precedence people
2692           often get confused about.
2693
2694           Also warn if a comparison like x<=y<=z appears; this is equivalent
2695           to (x<=y ? 1 : 0) <= z, which is a different interpretation from
2696           that of ordinary mathematical notation.
2697
2698           Also warn about constructions where there may be confusion to which
2699           "if" statement an "else" branch belongs.  Here is an example of
2700           such a case:
2701
2702                   {
2703                     if (a)
2704                       if (b)
2705                         foo ();
2706                     else
2707                       bar ();
2708                   }
2709
2710           In C/C++, every "else" branch belongs to the innermost possible
2711           "if" statement, which in this example is "if (b)".  This is often
2712           not what the programmer expected, as illustrated in the above
2713           example by indentation the programmer chose.  When there is the
2714           potential for this confusion, GCC issues a warning when this flag
2715           is specified.  To eliminate the warning, add explicit braces around
2716           the innermost "if" statement so there is no way the "else" can
2717           belong to the enclosing "if".  The resulting code looks like this:
2718
2719                   {
2720                     if (a)
2721                       {
2722                         if (b)
2723                           foo ();
2724                         else
2725                           bar ();
2726                       }
2727                   }
2728
2729           Also warn for dangerous uses of the GNU extension to "?:" with
2730           omitted middle operand. When the condition in the "?": operator is
2731           a boolean expression, the omitted value is always 1.  Often
2732           programmers expect it to be a value computed inside the conditional
2733           expression instead.
2734
2735           This warning is enabled by -Wall.
2736
2737       -Wsequence-point
2738           Warn about code that may have undefined semantics because of
2739           violations of sequence point rules in the C and C++ standards.
2740
2741           The C and C++ standards define the order in which expressions in a
2742           C/C++ program are evaluated in terms of sequence points, which
2743           represent a partial ordering between the execution of parts of the
2744           program: those executed before the sequence point, and those
2745           executed after it.  These occur after the evaluation of a full
2746           expression (one which is not part of a larger expression), after
2747           the evaluation of the first operand of a "&&", "||", "? :" or ","
2748           (comma) operator, before a function is called (but after the
2749           evaluation of its arguments and the expression denoting the called
2750           function), and in certain other places.  Other than as expressed by
2751           the sequence point rules, the order of evaluation of subexpressions
2752           of an expression is not specified.  All these rules describe only a
2753           partial order rather than a total order, since, for example, if two
2754           functions are called within one expression with no sequence point
2755           between them, the order in which the functions are called is not
2756           specified.  However, the standards committee have ruled that
2757           function calls do not overlap.
2758
2759           It is not specified when between sequence points modifications to
2760           the values of objects take effect.  Programs whose behavior depends
2761           on this have undefined behavior; the C and C++ standards specify
2762           that "Between the previous and next sequence point an object shall
2763           have its stored value modified at most once by the evaluation of an
2764           expression.  Furthermore, the prior value shall be read only to
2765           determine the value to be stored.".  If a program breaks these
2766           rules, the results on any particular implementation are entirely
2767           unpredictable.
2768
2769           Examples of code with undefined behavior are "a = a++;", "a[n] =
2770           b[n++]" and "a[i++] = i;".  Some more complicated cases are not
2771           diagnosed by this option, and it may give an occasional false
2772           positive result, but in general it has been found fairly effective
2773           at detecting this sort of problem in programs.
2774
2775           The standard is worded confusingly, therefore there is some debate
2776           over the precise meaning of the sequence point rules in subtle
2777           cases.  Links to discussions of the problem, including proposed
2778           formal definitions, may be found on the GCC readings page, at
2779           <http://gcc.gnu.org/readings.html>.
2780
2781           This warning is enabled by -Wall for C and C++.
2782
2783       -Wno-return-local-addr
2784           Do not warn about returning a pointer (or in C++, a reference) to a
2785           variable that goes out of scope after the function returns.
2786
2787       -Wreturn-type
2788           Warn whenever a function is defined with a return type that
2789           defaults to "int".  Also warn about any "return" statement with no
2790           return value in a function whose return type is not "void" (falling
2791           off the end of the function body is considered returning without a
2792           value), and about a "return" statement with an expression in a
2793           function whose return type is "void".
2794
2795           For C++, a function without return type always produces a
2796           diagnostic message, even when -Wno-return-type is specified.  The
2797           only exceptions are main and functions defined in system headers.
2798
2799           This warning is enabled by -Wall.
2800
2801       -Wswitch
2802           Warn whenever a "switch" statement has an index of enumerated type
2803           and lacks a "case" for one or more of the named codes of that
2804           enumeration.  (The presence of a "default" label prevents this
2805           warning.)  "case" labels outside the enumeration range also provoke
2806           warnings when this option is used (even if there is a "default"
2807           label).  This warning is enabled by -Wall.
2808
2809       -Wswitch-default
2810           Warn whenever a "switch" statement does not have a "default" case.
2811
2812       -Wswitch-enum
2813           Warn whenever a "switch" statement has an index of enumerated type
2814           and lacks a "case" for one or more of the named codes of that
2815           enumeration.  "case" labels outside the enumeration range also
2816           provoke warnings when this option is used.  The only difference
2817           between -Wswitch and this option is that this option gives a
2818           warning about an omitted enumeration code even if there is a
2819           "default" label.
2820
2821       -Wsync-nand (C and C++ only)
2822           Warn when "__sync_fetch_and_nand" and "__sync_nand_and_fetch"
2823           built-in functions are used.  These functions changed semantics in
2824           GCC 4.4.
2825
2826       -Wtrigraphs
2827           Warn if any trigraphs are encountered that might change the meaning
2828           of the program (trigraphs within comments are not warned about).
2829           This warning is enabled by -Wall.
2830
2831       -Wunused-but-set-parameter
2832           Warn whenever a function parameter is assigned to, but otherwise
2833           unused (aside from its declaration).
2834
2835           To suppress this warning use the unused attribute.
2836
2837           This warning is also enabled by -Wunused together with -Wextra.
2838
2839       -Wunused-but-set-variable
2840           Warn whenever a local variable is assigned to, but otherwise unused
2841           (aside from its declaration).  This warning is enabled by -Wall.
2842
2843           To suppress this warning use the unused attribute.
2844
2845           This warning is also enabled by -Wunused, which is enabled by
2846           -Wall.
2847
2848       -Wunused-function
2849           Warn whenever a static function is declared but not defined or a
2850           non-inline static function is unused.  This warning is enabled by
2851           -Wall.
2852
2853       -Wunused-label
2854           Warn whenever a label is declared but not used.  This warning is
2855           enabled by -Wall.
2856
2857           To suppress this warning use the unused attribute.
2858
2859       -Wunused-local-typedefs (C, Objective-C, C++ and Objective-C++ only)
2860           Warn when a typedef locally defined in a function is not used.
2861           This warning is enabled by -Wall.
2862
2863       -Wunused-parameter
2864           Warn whenever a function parameter is unused aside from its
2865           declaration.
2866
2867           To suppress this warning use the unused attribute.
2868
2869       -Wno-unused-result
2870           Do not warn if a caller of a function marked with attribute
2871           "warn_unused_result" does not use its return value. The default is
2872           -Wunused-result.
2873
2874       -Wunused-variable
2875           Warn whenever a local variable or non-constant static variable is
2876           unused aside from its declaration.  This warning is enabled by
2877           -Wall.
2878
2879           To suppress this warning use the unused attribute.
2880
2881       -Wunused-value
2882           Warn whenever a statement computes a result that is explicitly not
2883           used. To suppress this warning cast the unused expression to void.
2884           This includes an expression-statement or the left-hand side of a
2885           comma expression that contains no side effects. For example, an
2886           expression such as x[i,j] causes a warning, while x[(void)i,j] does
2887           not.
2888
2889           This warning is enabled by -Wall.
2890
2891       -Wunused
2892           All the above -Wunused options combined.
2893
2894           In order to get a warning about an unused function parameter, you
2895           must either specify -Wextra -Wunused (note that -Wall implies
2896           -Wunused), or separately specify -Wunused-parameter.
2897
2898       -Wuninitialized
2899           Warn if an automatic variable is used without first being
2900           initialized or if a variable may be clobbered by a "setjmp" call.
2901           In C++, warn if a non-static reference or non-static const member
2902           appears in a class without constructors.
2903
2904           If you want to warn about code that uses the uninitialized value of
2905           the variable in its own initializer, use the -Winit-self option.
2906
2907           These warnings occur for individual uninitialized or clobbered
2908           elements of structure, union or array variables as well as for
2909           variables that are uninitialized or clobbered as a whole.  They do
2910           not occur for variables or elements declared "volatile".  Because
2911           these warnings depend on optimization, the exact variables or
2912           elements for which there are warnings depends on the precise
2913           optimization options and version of GCC used.
2914
2915           Note that there may be no warning about a variable that is used
2916           only to compute a value that itself is never used, because such
2917           computations may be deleted by data flow analysis before the
2918           warnings are printed.
2919
2920       -Wmaybe-uninitialized
2921           For an automatic variable, if there exists a path from the function
2922           entry to a use of the variable that is initialized, but there exist
2923           some other paths for which the variable is not initialized, the
2924           compiler emits a warning if it cannot prove the uninitialized paths
2925           are not executed at run time. These warnings are made optional
2926           because GCC is not smart enough to see all the reasons why the code
2927           might be correct in spite of appearing to have an error.  Here is
2928           one example of how this can happen:
2929
2930                   {
2931                     int x;
2932                     switch (y)
2933                       {
2934                       case 1: x = 1;
2935                         break;
2936                       case 2: x = 4;
2937                         break;
2938                       case 3: x = 5;
2939                       }
2940                     foo (x);
2941                   }
2942
2943           If the value of "y" is always 1, 2 or 3, then "x" is always
2944           initialized, but GCC doesn't know this. To suppress the warning,
2945           you need to provide a default case with assert(0) or similar code.
2946
2947           This option also warns when a non-volatile automatic variable might
2948           be changed by a call to "longjmp".  These warnings as well are
2949           possible only in optimizing compilation.
2950
2951           The compiler sees only the calls to "setjmp".  It cannot know where
2952           "longjmp" will be called; in fact, a signal handler could call it
2953           at any point in the code.  As a result, you may get a warning even
2954           when there is in fact no problem because "longjmp" cannot in fact
2955           be called at the place that would cause a problem.
2956
2957           Some spurious warnings can be avoided if you declare all the
2958           functions you use that never return as "noreturn".
2959
2960           This warning is enabled by -Wall or -Wextra.
2961
2962       -Wunknown-pragmas
2963           Warn when a "#pragma" directive is encountered that is not
2964           understood by GCC.  If this command-line option is used, warnings
2965           are even issued for unknown pragmas in system header files.  This
2966           is not the case if the warnings are only enabled by the -Wall
2967           command-line option.
2968
2969       -Wno-pragmas
2970           Do not warn about misuses of pragmas, such as incorrect parameters,
2971           invalid syntax, or conflicts between pragmas.  See also
2972           -Wunknown-pragmas.
2973
2974       -Wstrict-aliasing
2975           This option is only active when -fstrict-aliasing is active.  It
2976           warns about code that might break the strict aliasing rules that
2977           the compiler is using for optimization.  The warning does not catch
2978           all cases, but does attempt to catch the more common pitfalls.  It
2979           is included in -Wall.  It is equivalent to -Wstrict-aliasing=3
2980
2981       -Wstrict-aliasing=n
2982           This option is only active when -fstrict-aliasing is active.  It
2983           warns about code that might break the strict aliasing rules that
2984           the compiler is using for optimization.  Higher levels correspond
2985           to higher accuracy (fewer false positives).  Higher levels also
2986           correspond to more effort, similar to the way -O works.
2987           -Wstrict-aliasing is equivalent to -Wstrict-aliasing=3.
2988
2989           Level 1: Most aggressive, quick, least accurate.  Possibly useful
2990           when higher levels do not warn but -fstrict-aliasing still breaks
2991           the code, as it has very few false negatives.  However, it has many
2992           false positives.  Warns for all pointer conversions between
2993           possibly incompatible types, even if never dereferenced.  Runs in
2994           the front end only.
2995
2996           Level 2: Aggressive, quick, not too precise.  May still have many
2997           false positives (not as many as level 1 though), and few false
2998           negatives (but possibly more than level 1).  Unlike level 1, it
2999           only warns when an address is taken.  Warns about incomplete types.
3000           Runs in the front end only.
3001
3002           Level 3 (default for -Wstrict-aliasing): Should have very few false
3003           positives and few false negatives.  Slightly slower than levels 1
3004           or 2 when optimization is enabled.  Takes care of the common
3005           pun+dereference pattern in the front end: "*(int*)&some_float".  If
3006           optimization is enabled, it also runs in the back end, where it
3007           deals with multiple statement cases using flow-sensitive points-to
3008           information.  Only warns when the converted pointer is
3009           dereferenced.  Does not warn about incomplete types.
3010
3011       -Wstrict-overflow
3012       -Wstrict-overflow=n
3013           This option is only active when -fstrict-overflow is active.  It
3014           warns about cases where the compiler optimizes based on the
3015           assumption that signed overflow does not occur.  Note that it does
3016           not warn about all cases where the code might overflow: it only
3017           warns about cases where the compiler implements some optimization.
3018           Thus this warning depends on the optimization level.
3019
3020           An optimization that assumes that signed overflow does not occur is
3021           perfectly safe if the values of the variables involved are such
3022           that overflow never does, in fact, occur.  Therefore this warning
3023           can easily give a false positive: a warning about code that is not
3024           actually a problem.  To help focus on important issues, several
3025           warning levels are defined.  No warnings are issued for the use of
3026           undefined signed overflow when estimating how many iterations a
3027           loop requires, in particular when determining whether a loop will
3028           be executed at all.
3029
3030           -Wstrict-overflow=1
3031               Warn about cases that are both questionable and easy to avoid.
3032               For example,  with -fstrict-overflow, the compiler simplifies
3033               "x + 1 > x" to 1.  This level of -Wstrict-overflow is enabled
3034               by -Wall; higher levels are not, and must be explicitly
3035               requested.
3036
3037           -Wstrict-overflow=2
3038               Also warn about other cases where a comparison is simplified to
3039               a constant.  For example: "abs (x) >= 0".  This can only be
3040               simplified when -fstrict-overflow is in effect, because "abs
3041               (INT_MIN)" overflows to "INT_MIN", which is less than zero.
3042               -Wstrict-overflow (with no level) is the same as
3043               -Wstrict-overflow=2.
3044
3045           -Wstrict-overflow=3
3046               Also warn about other cases where a comparison is simplified.
3047               For example: "x + 1 > 1" is simplified to "x > 0".
3048
3049           -Wstrict-overflow=4
3050               Also warn about other simplifications not covered by the above
3051               cases.  For example: "(x * 10) / 5" is simplified to "x * 2".
3052
3053           -Wstrict-overflow=5
3054               Also warn about cases where the compiler reduces the magnitude
3055               of a constant involved in a comparison.  For example: "x + 2 >
3056               y" is simplified to "x + 1 >= y".  This is reported only at the
3057               highest warning level because this simplification applies to
3058               many comparisons, so this warning level gives a very large
3059               number of false positives.
3060
3061       -Wsuggest-attribute=[pure|const|noreturn|format]
3062           Warn for cases where adding an attribute may be beneficial. The
3063           attributes currently supported are listed below.
3064
3065           -Wsuggest-attribute=pure
3066           -Wsuggest-attribute=const
3067           -Wsuggest-attribute=noreturn
3068               Warn about functions that might be candidates for attributes
3069               "pure", "const" or "noreturn".  The compiler only warns for
3070               functions visible in other compilation units or (in the case of
3071               "pure" and "const") if it cannot prove that the function
3072               returns normally. A function returns normally if it doesn't
3073               contain an infinite loop or return abnormally by throwing,
3074               calling "abort()" or trapping.  This analysis requires option
3075               -fipa-pure-const, which is enabled by default at -O and higher.
3076               Higher optimization levels improve the accuracy of the
3077               analysis.
3078
3079           -Wsuggest-attribute=format
3080           -Wmissing-format-attribute
3081               Warn about function pointers that might be candidates for
3082               "format" attributes.  Note these are only possible candidates,
3083               not absolute ones.  GCC guesses that function pointers with
3084               "format" attributes that are used in assignment,
3085               initialization, parameter passing or return statements should
3086               have a corresponding "format" attribute in the resulting type.
3087               I.e. the left-hand side of the assignment or initialization,
3088               the type of the parameter variable, or the return type of the
3089               containing function respectively should also have a "format"
3090               attribute to avoid the warning.
3091
3092               GCC also warns about function definitions that might be
3093               candidates for "format" attributes.  Again, these are only
3094               possible candidates.  GCC guesses that "format" attributes
3095               might be appropriate for any function that calls a function
3096               like "vprintf" or "vscanf", but this might not always be the
3097               case, and some functions for which "format" attributes are
3098               appropriate may not be detected.
3099
3100       -Warray-bounds
3101           This option is only active when -ftree-vrp is active (default for
3102           -O2 and above). It warns about subscripts to arrays that are always
3103           out of bounds. This warning is enabled by -Wall.
3104
3105       -Wno-div-by-zero
3106           Do not warn about compile-time integer division by zero.  Floating-
3107           point division by zero is not warned about, as it can be a
3108           legitimate way of obtaining infinities and NaNs.
3109
3110       -Wsystem-headers
3111           Print warning messages for constructs found in system header files.
3112           Warnings from system headers are normally suppressed, on the
3113           assumption that they usually do not indicate real problems and
3114           would only make the compiler output harder to read.  Using this
3115           command-line option tells GCC to emit warnings from system headers
3116           as if they occurred in user code.  However, note that using -Wall
3117           in conjunction with this option does not warn about unknown pragmas
3118           in system headers---for that, -Wunknown-pragmas must also be used.
3119
3120       -Wtrampolines
3121            Warn about trampolines generated for pointers to nested functions.
3122
3123            A trampoline is a small piece of data or code that is created at run
3124            time on the stack when the address of a nested function is taken, and
3125            is used to call the nested function indirectly.  For some targets, it
3126            is made up of data only and thus requires no special treatment.  But,
3127            for most targets, it is made up of code and thus requires the stack
3128            to be made executable in order for the program to work properly.
3129
3130       -Wfloat-equal
3131           Warn if floating-point values are used in equality comparisons.
3132
3133           The idea behind this is that sometimes it is convenient (for the
3134           programmer) to consider floating-point values as approximations to
3135           infinitely precise real numbers.  If you are doing this, then you
3136           need to compute (by analyzing the code, or in some other way) the
3137           maximum or likely maximum error that the computation introduces,
3138           and allow for it when performing comparisons (and when producing
3139           output, but that's a different problem).  In particular, instead of
3140           testing for equality, you should check to see whether the two
3141           values have ranges that overlap; and this is done with the
3142           relational operators, so equality comparisons are probably
3143           mistaken.
3144
3145       -Wtraditional (C and Objective-C only)
3146           Warn about certain constructs that behave differently in
3147           traditional and ISO C.  Also warn about ISO C constructs that have
3148           no traditional C equivalent, and/or problematic constructs that
3149           should be avoided.
3150
3151           ·   Macro parameters that appear within string literals in the
3152               macro body.  In traditional C macro replacement takes place
3153               within string literals, but in ISO C it does not.
3154
3155           ·   In traditional C, some preprocessor directives did not exist.
3156               Traditional preprocessors only considered a line to be a
3157               directive if the # appeared in column 1 on the line.  Therefore
3158               -Wtraditional warns about directives that traditional C
3159               understands but ignores because the # does not appear as the
3160               first character on the line.  It also suggests you hide
3161               directives like #pragma not understood by traditional C by
3162               indenting them.  Some traditional implementations do not
3163               recognize #elif, so this option suggests avoiding it
3164               altogether.
3165
3166           ·   A function-like macro that appears without arguments.
3167
3168           ·   The unary plus operator.
3169
3170           ·   The U integer constant suffix, or the F or L floating-point
3171               constant suffixes.  (Traditional C does support the L suffix on
3172               integer constants.)  Note, these suffixes appear in macros
3173               defined in the system headers of most modern systems, e.g. the
3174               _MIN/_MAX macros in "<limits.h>".  Use of these macros in user
3175               code might normally lead to spurious warnings, however GCC's
3176               integrated preprocessor has enough context to avoid warning in
3177               these cases.
3178
3179           ·   A function declared external in one block and then used after
3180               the end of the block.
3181
3182           ·   A "switch" statement has an operand of type "long".
3183
3184           ·   A non-"static" function declaration follows a "static" one.
3185               This construct is not accepted by some traditional C compilers.
3186
3187           ·   The ISO type of an integer constant has a different width or
3188               signedness from its traditional type.  This warning is only
3189               issued if the base of the constant is ten.  I.e. hexadecimal or
3190               octal values, which typically represent bit patterns, are not
3191               warned about.
3192
3193           ·   Usage of ISO string concatenation is detected.
3194
3195           ·   Initialization of automatic aggregates.
3196
3197           ·   Identifier conflicts with labels.  Traditional C lacks a
3198               separate namespace for labels.
3199
3200           ·   Initialization of unions.  If the initializer is zero, the
3201               warning is omitted.  This is done under the assumption that the
3202               zero initializer in user code appears conditioned on e.g.
3203               "__STDC__" to avoid missing initializer warnings and relies on
3204               default initialization to zero in the traditional C case.
3205
3206           ·   Conversions by prototypes between fixed/floating-point values
3207               and vice versa.  The absence of these prototypes when compiling
3208               with traditional C causes serious problems.  This is a subset
3209               of the possible conversion warnings; for the full set use
3210               -Wtraditional-conversion.
3211
3212           ·   Use of ISO C style function definitions.  This warning
3213               intentionally is not issued for prototype declarations or
3214               variadic functions because these ISO C features appear in your
3215               code when using libiberty's traditional C compatibility macros,
3216               "PARAMS" and "VPARAMS".  This warning is also bypassed for
3217               nested functions because that feature is already a GCC
3218               extension and thus not relevant to traditional C compatibility.
3219
3220       -Wtraditional-conversion (C and Objective-C only)
3221           Warn if a prototype causes a type conversion that is different from
3222           what would happen to the same argument in the absence of a
3223           prototype.  This includes conversions of fixed point to floating
3224           and vice versa, and conversions changing the width or signedness of
3225           a fixed-point argument except when the same as the default
3226           promotion.
3227
3228       -Wdeclaration-after-statement (C and Objective-C only)
3229           Warn when a declaration is found after a statement in a block.
3230           This construct, known from C++, was introduced with ISO C99 and is
3231           by default allowed in GCC.  It is not supported by ISO C90 and was
3232           not supported by GCC versions before GCC 3.0.
3233
3234       -Wundef
3235           Warn if an undefined identifier is evaluated in an #if directive.
3236
3237       -Wno-endif-labels
3238           Do not warn whenever an #else or an #endif are followed by text.
3239
3240       -Wshadow
3241           Warn whenever a local variable or type declaration shadows another
3242           variable, parameter, type, or class member (in C++), or whenever a
3243           built-in function is shadowed. Note that in C++, the compiler warns
3244           if a local variable shadows an explicit typedef, but not if it
3245           shadows a struct/class/enum.
3246
3247       -Wlarger-than=len
3248           Warn whenever an object of larger than len bytes is defined.
3249
3250       -Wframe-larger-than=len
3251           Warn if the size of a function frame is larger than len bytes.  The
3252           computation done to determine the stack frame size is approximate
3253           and not conservative.  The actual requirements may be somewhat
3254           greater than len even if you do not get a warning.  In addition,
3255           any space allocated via "alloca", variable-length arrays, or
3256           related constructs is not included by the compiler when determining
3257           whether or not to issue a warning.
3258
3259       -Wno-free-nonheap-object
3260           Do not warn when attempting to free an object that was not
3261           allocated on the heap.
3262
3263       -Wstack-usage=len
3264           Warn if the stack usage of a function might be larger than len
3265           bytes.  The computation done to determine the stack usage is
3266           conservative.  Any space allocated via "alloca", variable-length
3267           arrays, or related constructs is included by the compiler when
3268           determining whether or not to issue a warning.
3269
3270           The message is in keeping with the output of -fstack-usage.
3271
3272           ·   If the stack usage is fully static but exceeds the specified
3273               amount, it's:
3274
3275                         warning: stack usage is 1120 bytes
3276
3277           ·   If the stack usage is (partly) dynamic but bounded, it's:
3278
3279                         warning: stack usage might be 1648 bytes
3280
3281           ·   If the stack usage is (partly) dynamic and not bounded, it's:
3282
3283                         warning: stack usage might be unbounded
3284
3285       -Wunsafe-loop-optimizations
3286           Warn if the loop cannot be optimized because the compiler cannot
3287           assume anything on the bounds of the loop indices.  With
3288           -funsafe-loop-optimizations warn if the compiler makes such
3289           assumptions.
3290
3291       -Wno-pedantic-ms-format (MinGW targets only)
3292           When used in combination with -Wformat and -pedantic without GNU
3293           extensions, this option disables the warnings about non-ISO
3294           "printf" / "scanf" format width specifiers "I32", "I64", and "I"
3295           used on Windows targets, which depend on the MS runtime.
3296
3297       -Wpointer-arith
3298           Warn about anything that depends on the "size of" a function type
3299           or of "void".  GNU C assigns these types a size of 1, for
3300           convenience in calculations with "void *" pointers and pointers to
3301           functions.  In C++, warn also when an arithmetic operation involves
3302           "NULL".  This warning is also enabled by -Wpedantic.
3303
3304       -Wtype-limits
3305           Warn if a comparison is always true or always false due to the
3306           limited range of the data type, but do not warn for constant
3307           expressions.  For example, warn if an unsigned variable is compared
3308           against zero with < or >=.  This warning is also enabled by
3309           -Wextra.
3310
3311       -Wbad-function-cast (C and Objective-C only)
3312           Warn whenever a function call is cast to a non-matching type.  For
3313           example, warn if "int malloc()" is cast to "anything *".
3314
3315       -Wc++-compat (C and Objective-C only)
3316           Warn about ISO C constructs that are outside of the common subset
3317           of ISO C and ISO C++, e.g. request for implicit conversion from
3318           "void *" to a pointer to non-"void" type.
3319
3320       -Wc++11-compat (C++ and Objective-C++ only)
3321           Warn about C++ constructs whose meaning differs between ISO C++
3322           1998 and ISO C++ 2011, e.g., identifiers in ISO C++ 1998 that are
3323           keywords in ISO C++ 2011.  This warning turns on -Wnarrowing and is
3324           enabled by -Wall.
3325
3326       -Wcast-qual
3327           Warn whenever a pointer is cast so as to remove a type qualifier
3328           from the target type.  For example, warn if a "const char *" is
3329           cast to an ordinary "char *".
3330
3331           Also warn when making a cast that introduces a type qualifier in an
3332           unsafe way.  For example, casting "char **" to "const char **" is
3333           unsafe, as in this example:
3334
3335                     /* p is char ** value.  */
3336                     const char **q = (const char **) p;
3337                     /* Assignment of readonly string to const char * is OK.  */
3338                     *q = "string";
3339                     /* Now char** pointer points to read-only memory.  */
3340                     **p = 'b';
3341
3342       -Wcast-align
3343           Warn whenever a pointer is cast such that the required alignment of
3344           the target is increased.  For example, warn if a "char *" is cast
3345           to an "int *" on machines where integers can only be accessed at
3346           two- or four-byte boundaries.
3347
3348       -Wwrite-strings
3349           When compiling C, give string constants the type "const
3350           char[length]" so that copying the address of one into a non-"const"
3351           "char *" pointer produces a warning.  These warnings help you find
3352           at compile time code that can try to write into a string constant,
3353           but only if you have been very careful about using "const" in
3354           declarations and prototypes.  Otherwise, it is just a nuisance.
3355           This is why we did not make -Wall request these warnings.
3356
3357           When compiling C++, warn about the deprecated conversion from
3358           string literals to "char *".  This warning is enabled by default
3359           for C++ programs.
3360
3361       -Wclobbered
3362           Warn for variables that might be changed by longjmp or vfork.  This
3363           warning is also enabled by -Wextra.
3364
3365       -Wconversion
3366           Warn for implicit conversions that may alter a value. This includes
3367           conversions between real and integer, like "abs (x)" when "x" is
3368           "double"; conversions between signed and unsigned, like "unsigned
3369           ui = -1"; and conversions to smaller types, like "sqrtf (M_PI)". Do
3370           not warn for explicit casts like "abs ((int) x)" and "ui =
3371           (unsigned) -1", or if the value is not changed by the conversion
3372           like in "abs (2.0)".  Warnings about conversions between signed and
3373           unsigned integers can be disabled by using -Wno-sign-conversion.
3374
3375           For C++, also warn for confusing overload resolution for user-
3376           defined conversions; and conversions that never use a type
3377           conversion operator: conversions to "void", the same type, a base
3378           class or a reference to them. Warnings about conversions between
3379           signed and unsigned integers are disabled by default in C++ unless
3380           -Wsign-conversion is explicitly enabled.
3381
3382       -Wno-conversion-null (C++ and Objective-C++ only)
3383           Do not warn for conversions between "NULL" and non-pointer types.
3384           -Wconversion-null is enabled by default.
3385
3386       -Wzero-as-null-pointer-constant (C++ and Objective-C++ only)
3387           Warn when a literal '0' is used as null pointer constant.  This can
3388           be useful to facilitate the conversion to "nullptr" in C++11.
3389
3390       -Wuseless-cast (C++ and Objective-C++ only)
3391           Warn when an expression is casted to its own type.
3392
3393       -Wempty-body
3394           Warn if an empty body occurs in an if, else or do while statement.
3395           This warning is also enabled by -Wextra.
3396
3397       -Wenum-compare
3398           Warn about a comparison between values of different enumerated
3399           types.  In C++ enumeral mismatches in conditional expressions are
3400           also diagnosed and the warning is enabled by default.  In C this
3401           warning is enabled by -Wall.
3402
3403       -Wjump-misses-init (C, Objective-C only)
3404           Warn if a "goto" statement or a "switch" statement jumps forward
3405           across the initialization of a variable, or jumps backward to a
3406           label after the variable has been initialized.  This only warns
3407           about variables that are initialized when they are declared.  This
3408           warning is only supported for C and Objective-C; in C++ this sort
3409           of branch is an error in any case.
3410
3411           -Wjump-misses-init is included in -Wc++-compat.  It can be disabled
3412           with the -Wno-jump-misses-init option.
3413
3414       -Wsign-compare
3415           Warn when a comparison between signed and unsigned values could
3416           produce an incorrect result when the signed value is converted to
3417           unsigned.  This warning is also enabled by -Wextra; to get the
3418           other warnings of -Wextra without this warning, use -Wextra
3419           -Wno-sign-compare.
3420
3421       -Wsign-conversion
3422           Warn for implicit conversions that may change the sign of an
3423           integer value, like assigning a signed integer expression to an
3424           unsigned integer variable. An explicit cast silences the warning.
3425           In C, this option is enabled also by -Wconversion.
3426
3427       -Wsizeof-pointer-memaccess
3428           Warn for suspicious length parameters to certain string and memory
3429           built-in functions if the argument uses "sizeof".  This warning
3430           warns e.g.  about "memset (ptr, 0, sizeof (ptr));" if "ptr" is not
3431           an array, but a pointer, and suggests a possible fix, or about
3432           "memcpy (&foo, ptr, sizeof (&foo));".  This warning is enabled by
3433           -Wall.
3434
3435       -Waddress
3436           Warn about suspicious uses of memory addresses. These include using
3437           the address of a function in a conditional expression, such as
3438           "void func(void); if (func)", and comparisons against the memory
3439           address of a string literal, such as "if (x == "abc")".  Such uses
3440           typically indicate a programmer error: the address of a function
3441           always evaluates to true, so their use in a conditional usually
3442           indicate that the programmer forgot the parentheses in a function
3443           call; and comparisons against string literals result in unspecified
3444           behavior and are not portable in C, so they usually indicate that
3445           the programmer intended to use "strcmp".  This warning is enabled
3446           by -Wall.
3447
3448       -Wlogical-op
3449           Warn about suspicious uses of logical operators in expressions.
3450           This includes using logical operators in contexts where a bit-wise
3451           operator is likely to be expected.
3452
3453       -Waggregate-return
3454           Warn if any functions that return structures or unions are defined
3455           or called.  (In languages where you can return an array, this also
3456           elicits a warning.)
3457
3458       -Wno-aggressive-loop-optimizations
3459           Warn if in a loop with constant number of iterations the compiler
3460           detects undefined behavior in some statement during one or more of
3461           the iterations.
3462
3463       -Wno-attributes
3464           Do not warn if an unexpected "__attribute__" is used, such as
3465           unrecognized attributes, function attributes applied to variables,
3466           etc.  This does not stop errors for incorrect use of supported
3467           attributes.
3468
3469       -Wno-builtin-macro-redefined
3470           Do not warn if certain built-in macros are redefined.  This
3471           suppresses warnings for redefinition of "__TIMESTAMP__",
3472           "__TIME__", "__DATE__", "__FILE__", and "__BASE_FILE__".
3473
3474       -Wstrict-prototypes (C and Objective-C only)
3475           Warn if a function is declared or defined without specifying the
3476           argument types.  (An old-style function definition is permitted
3477           without a warning if preceded by a declaration that specifies the
3478           argument types.)
3479
3480       -Wold-style-declaration (C and Objective-C only)
3481           Warn for obsolescent usages, according to the C Standard, in a
3482           declaration. For example, warn if storage-class specifiers like
3483           "static" are not the first things in a declaration.  This warning
3484           is also enabled by -Wextra.
3485
3486       -Wold-style-definition (C and Objective-C only)
3487           Warn if an old-style function definition is used.  A warning is
3488           given even if there is a previous prototype.
3489
3490       -Wmissing-parameter-type (C and Objective-C only)
3491           A function parameter is declared without a type specifier in
3492           K&R-style functions:
3493
3494                   void foo(bar) { }
3495
3496           This warning is also enabled by -Wextra.
3497
3498       -Wmissing-prototypes (C and Objective-C only)
3499           Warn if a global function is defined without a previous prototype
3500           declaration.  This warning is issued even if the definition itself
3501           provides a prototype.  Use this option to detect global functions
3502           that do not have a matching prototype declaration in a header file.
3503           This option is not valid for C++ because all function declarations
3504           provide prototypes and a non-matching declaration will declare an
3505           overload rather than conflict with an earlier declaration.  Use
3506           -Wmissing-declarations to detect missing declarations in C++.
3507
3508       -Wmissing-declarations
3509           Warn if a global function is defined without a previous
3510           declaration.  Do so even if the definition itself provides a
3511           prototype.  Use this option to detect global functions that are not
3512           declared in header files.  In C, no warnings are issued for
3513           functions with previous non-prototype declarations; use
3514           -Wmissing-prototype to detect missing prototypes.  In C++, no
3515           warnings are issued for function templates, or for inline
3516           functions, or for functions in anonymous namespaces.
3517
3518       -Wmissing-field-initializers
3519           Warn if a structure's initializer has some fields missing.  For
3520           example, the following code causes such a warning, because "x.h" is
3521           implicitly zero:
3522
3523                   struct s { int f, g, h; };
3524                   struct s x = { 3, 4 };
3525
3526           This option does not warn about designated initializers, so the
3527           following modification does not trigger a warning:
3528
3529                   struct s { int f, g, h; };
3530                   struct s x = { .f = 3, .g = 4 };
3531
3532           This warning is included in -Wextra.  To get other -Wextra warnings
3533           without this one, use -Wextra -Wno-missing-field-initializers.
3534
3535       -Wno-multichar
3536           Do not warn if a multicharacter constant ('FOOF') is used.  Usually
3537           they indicate a typo in the user's code, as they have
3538           implementation-defined values, and should not be used in portable
3539           code.
3540
3541       -Wnormalized=<none|id|nfc|nfkc>
3542           In ISO C and ISO C++, two identifiers are different if they are
3543           different sequences of characters.  However, sometimes when
3544           characters outside the basic ASCII character set are used, you can
3545           have two different character sequences that look the same.  To
3546           avoid confusion, the ISO 10646 standard sets out some normalization
3547           rules which when applied ensure that two sequences that look the
3548           same are turned into the same sequence.  GCC can warn you if you
3549           are using identifiers that have not been normalized; this option
3550           controls that warning.
3551
3552           There are four levels of warning supported by GCC.  The default is
3553           -Wnormalized=nfc, which warns about any identifier that is not in
3554           the ISO 10646 "C" normalized form, NFC.  NFC is the recommended
3555           form for most uses.
3556
3557           Unfortunately, there are some characters allowed in identifiers by
3558           ISO C and ISO C++ that, when turned into NFC, are not allowed in
3559           identifiers.  That is, there's no way to use these symbols in
3560           portable ISO C or C++ and have all your identifiers in NFC.
3561           -Wnormalized=id suppresses the warning for these characters.  It is
3562           hoped that future versions of the standards involved will correct
3563           this, which is why this option is not the default.
3564
3565           You can switch the warning off for all characters by writing
3566           -Wnormalized=none.  You should only do this if you are using some
3567           other normalization scheme (like "D"), because otherwise you can
3568           easily create bugs that are literally impossible to see.
3569
3570           Some characters in ISO 10646 have distinct meanings but look
3571           identical in some fonts or display methodologies, especially once
3572           formatting has been applied.  For instance "\u207F", "SUPERSCRIPT
3573           LATIN SMALL LETTER N", displays just like a regular "n" that has
3574           been placed in a superscript.  ISO 10646 defines the NFKC
3575           normalization scheme to convert all these into a standard form as
3576           well, and GCC warns if your code is not in NFKC if you use
3577           -Wnormalized=nfkc.  This warning is comparable to warning about
3578           every identifier that contains the letter O because it might be
3579           confused with the digit 0, and so is not the default, but may be
3580           useful as a local coding convention if the programming environment
3581           cannot be fixed to display these characters distinctly.
3582
3583       -Wno-deprecated
3584           Do not warn about usage of deprecated features.
3585
3586       -Wno-deprecated-declarations
3587           Do not warn about uses of functions, variables, and types marked as
3588           deprecated by using the "deprecated" attribute.
3589
3590       -Wno-overflow
3591           Do not warn about compile-time overflow in constant expressions.
3592
3593       -Woverride-init (C and Objective-C only)
3594           Warn if an initialized field without side effects is overridden
3595           when using designated initializers.
3596
3597           This warning is included in -Wextra.  To get other -Wextra warnings
3598           without this one, use -Wextra -Wno-override-init.
3599
3600       -Wpacked
3601           Warn if a structure is given the packed attribute, but the packed
3602           attribute has no effect on the layout or size of the structure.
3603           Such structures may be mis-aligned for little benefit.  For
3604           instance, in this code, the variable "f.x" in "struct bar" is
3605           misaligned even though "struct bar" does not itself have the packed
3606           attribute:
3607
3608                   struct foo {
3609                     int x;
3610                     char a, b, c, d;
3611                   } __attribute__((packed));
3612                   struct bar {
3613                     char z;
3614                     struct foo f;
3615                   };
3616
3617       -Wpacked-bitfield-compat
3618           The 4.1, 4.2 and 4.3 series of GCC ignore the "packed" attribute on
3619           bit-fields of type "char".  This has been fixed in GCC 4.4 but the
3620           change can lead to differences in the structure layout.  GCC
3621           informs you when the offset of such a field has changed in GCC 4.4.
3622           For example there is no longer a 4-bit padding between field "a"
3623           and "b" in this structure:
3624
3625                   struct foo
3626                   {
3627                     char a:4;
3628                     char b:8;
3629                   } __attribute__ ((packed));
3630
3631           This warning is enabled by default.  Use
3632           -Wno-packed-bitfield-compat to disable this warning.
3633
3634       -Wpadded
3635           Warn if padding is included in a structure, either to align an
3636           element of the structure or to align the whole structure.
3637           Sometimes when this happens it is possible to rearrange the fields
3638           of the structure to reduce the padding and so make the structure
3639           smaller.
3640
3641       -Wredundant-decls
3642           Warn if anything is declared more than once in the same scope, even
3643           in cases where multiple declaration is valid and changes nothing.
3644
3645       -Wnested-externs (C and Objective-C only)
3646           Warn if an "extern" declaration is encountered within a function.
3647
3648       -Wno-inherited-variadic-ctor
3649           Suppress warnings about use of C++11 inheriting constructors when
3650           the base class inherited from has a C variadic constructor; the
3651           warning is on by default because the ellipsis is not inherited.
3652
3653       -Winline
3654           Warn if a function that is declared as inline cannot be inlined.
3655           Even with this option, the compiler does not warn about failures to
3656           inline functions declared in system headers.
3657
3658           The compiler uses a variety of heuristics to determine whether or
3659           not to inline a function.  For example, the compiler takes into
3660           account the size of the function being inlined and the amount of
3661           inlining that has already been done in the current function.
3662           Therefore, seemingly insignificant changes in the source program
3663           can cause the warnings produced by -Winline to appear or disappear.
3664
3665       -Wno-invalid-offsetof (C++ and Objective-C++ only)
3666           Suppress warnings from applying the offsetof macro to a non-POD
3667           type.  According to the 1998 ISO C++ standard, applying offsetof to
3668           a non-POD type is undefined.  In existing C++ implementations,
3669           however, offsetof typically gives meaningful results even when
3670           applied to certain kinds of non-POD types (such as a simple struct
3671           that fails to be a POD type only by virtue of having a
3672           constructor).  This flag is for users who are aware that they are
3673           writing nonportable code and who have deliberately chosen to ignore
3674           the warning about it.
3675
3676           The restrictions on offsetof may be relaxed in a future version of
3677           the C++ standard.
3678
3679       -Wno-int-to-pointer-cast
3680           Suppress warnings from casts to pointer type of an integer of a
3681           different size. In C++, casting to a pointer type of smaller size
3682           is an error. Wint-to-pointer-cast is enabled by default.
3683
3684       -Wno-pointer-to-int-cast (C and Objective-C only)
3685           Suppress warnings from casts from a pointer to an integer type of a
3686           different size.
3687
3688       -Winvalid-pch
3689           Warn if a precompiled header is found in the search path but can't
3690           be used.
3691
3692       -Wlong-long
3693           Warn if long long type is used.  This is enabled by either
3694           -Wpedantic or -Wtraditional in ISO C90 and C++98 modes.  To inhibit
3695           the warning messages, use -Wno-long-long.
3696
3697       -Wvariadic-macros
3698           Warn if variadic macros are used in pedantic ISO C90 mode, or the
3699           GNU alternate syntax when in pedantic ISO C99 mode.  This is
3700           default.  To inhibit the warning messages, use
3701           -Wno-variadic-macros.
3702
3703       -Wvarargs
3704           Warn upon questionable usage of the macros used to handle variable
3705           arguments like va_start.  This is default.  To inhibit the warning
3706           messages, use -Wno-varargs.
3707
3708       -Wvector-operation-performance
3709           Warn if vector operation is not implemented via SIMD capabilities
3710           of the architecture.  Mainly useful for the performance tuning.
3711           Vector operation can be implemented "piecewise", which means that
3712           the scalar operation is performed on every vector element; "in
3713           parallel", which means that the vector operation is implemented
3714           using scalars of wider type, which normally is more performance
3715           efficient; and "as a single scalar", which means that vector fits
3716           into a scalar type.
3717
3718       -Wno-virtual-move-assign
3719           Suppress warnings about inheriting from a virtual base with a non-
3720           trivial C++11 move assignment operator.  This is dangerous because
3721           if the virtual base is reachable along more than one path, it will
3722           be moved multiple times, which can mean both objects end up in the
3723           moved-from state.  If the move assignment operator is written to
3724           avoid moving from a moved-from object, this warning can be
3725           disabled.
3726
3727       -Wvla
3728           Warn if variable length array is used in the code.  -Wno-vla
3729           prevents the -Wpedantic warning of the variable length array.
3730
3731       -Wvolatile-register-var
3732           Warn if a register variable is declared volatile.  The volatile
3733           modifier does not inhibit all optimizations that may eliminate
3734           reads and/or writes to register variables.  This warning is enabled
3735           by -Wall.
3736
3737       -Wdisabled-optimization
3738           Warn if a requested optimization pass is disabled.  This warning
3739           does not generally indicate that there is anything wrong with your
3740           code; it merely indicates that GCC's optimizers are unable to
3741           handle the code effectively.  Often, the problem is that your code
3742           is too big or too complex; GCC refuses to optimize programs when
3743           the optimization itself is likely to take inordinate amounts of
3744           time.
3745
3746       -Wpointer-sign (C and Objective-C only)
3747           Warn for pointer argument passing or assignment with different
3748           signedness.  This option is only supported for C and Objective-C.
3749           It is implied by -Wall and by -Wpedantic, which can be disabled
3750           with -Wno-pointer-sign.
3751
3752       -Wstack-protector
3753           This option is only active when -fstack-protector is active.  It
3754           warns about functions that are not protected against stack
3755           smashing.
3756
3757       -Wno-mudflap
3758           Suppress warnings about constructs that cannot be instrumented by
3759           -fmudflap.
3760
3761       -Woverlength-strings
3762           Warn about string constants that are longer than the "minimum
3763           maximum" length specified in the C standard.  Modern compilers
3764           generally allow string constants that are much longer than the
3765           standard's minimum limit, but very portable programs should avoid
3766           using longer strings.
3767
3768           The limit applies after string constant concatenation, and does not
3769           count the trailing NUL.  In C90, the limit was 509 characters; in
3770           C99, it was raised to 4095.  C++98 does not specify a normative
3771           minimum maximum, so we do not diagnose overlength strings in C++.
3772
3773           This option is implied by -Wpedantic, and can be disabled with
3774           -Wno-overlength-strings.
3775
3776       -Wunsuffixed-float-constants (C and Objective-C only)
3777           Issue a warning for any floating constant that does not have a
3778           suffix.  When used together with -Wsystem-headers it warns about
3779           such constants in system header files.  This can be useful when
3780           preparing code to use with the "FLOAT_CONST_DECIMAL64" pragma from
3781           the decimal floating-point extension to C99.
3782
3783   Options for Debugging Your Program or GCC
3784       GCC has various special options that are used for debugging either your
3785       program or GCC:
3786
3787       -g  Produce debugging information in the operating system's native
3788           format (stabs, COFF, XCOFF, or DWARF 2).  GDB can work with this
3789           debugging information.
3790
3791           On most systems that use stabs format, -g enables use of extra
3792           debugging information that only GDB can use; this extra information
3793           makes debugging work better in GDB but probably makes other
3794           debuggers crash or refuse to read the program.  If you want to
3795           control for certain whether to generate the extra information, use
3796           -gstabs+, -gstabs, -gxcoff+, -gxcoff, or -gvms (see below).
3797
3798           GCC allows you to use -g with -O.  The shortcuts taken by optimized
3799           code may occasionally produce surprising results: some variables
3800           you declared may not exist at all; flow of control may briefly move
3801           where you did not expect it; some statements may not be executed
3802           because they compute constant results or their values are already
3803           at hand; some statements may execute in different places because
3804           they have been moved out of loops.
3805
3806           Nevertheless it proves possible to debug optimized output.  This
3807           makes it reasonable to use the optimizer for programs that might
3808           have bugs.
3809
3810           The following options are useful when GCC is generated with the
3811           capability for more than one debugging format.
3812
3813       -gsplit-dwarf
3814           Separate as much dwarf debugging information as possible into a
3815           separate output file with the extension .dwo.  This option allows
3816           the build system to avoid linking files with debug information.  To
3817           be useful, this option requires a debugger capable of reading .dwo
3818           files.
3819
3820       -ggdb
3821           Produce debugging information for use by GDB.  This means to use
3822           the most expressive format available (DWARF 2, stabs, or the native
3823           format if neither of those are supported), including GDB extensions
3824           if at all possible.
3825
3826       -gpubnames
3827           Generate dwarf .debug_pubnames and .debug_pubtypes sections.
3828
3829       -gstabs
3830           Produce debugging information in stabs format (if that is
3831           supported), without GDB extensions.  This is the format used by DBX
3832           on most BSD systems.  On MIPS, Alpha and System V Release 4 systems
3833           this option produces stabs debugging output that is not understood
3834           by DBX or SDB.  On System V Release 4 systems this option requires
3835           the GNU assembler.
3836
3837       -feliminate-unused-debug-symbols
3838           Produce debugging information in stabs format (if that is
3839           supported), for only symbols that are actually used.
3840
3841       -femit-class-debug-always
3842           Instead of emitting debugging information for a C++ class in only
3843           one object file, emit it in all object files using the class.  This
3844           option should be used only with debuggers that are unable to handle
3845           the way GCC normally emits debugging information for classes
3846           because using this option increases the size of debugging
3847           information by as much as a factor of two.
3848
3849       -fdebug-types-section
3850           When using DWARF Version 4 or higher, type DIEs can be put into
3851           their own ".debug_types" section instead of making them part of the
3852           ".debug_info" section.  It is more efficient to put them in a
3853           separate comdat sections since the linker can then remove
3854           duplicates.  But not all DWARF consumers support ".debug_types"
3855           sections yet and on some objects ".debug_types" produces larger
3856           instead of smaller debugging information.
3857
3858       -gstabs+
3859           Produce debugging information in stabs format (if that is
3860           supported), using GNU extensions understood only by the GNU
3861           debugger (GDB).  The use of these extensions is likely to make
3862           other debuggers crash or refuse to read the program.
3863
3864       -gcoff
3865           Produce debugging information in COFF format (if that is
3866           supported).  This is the format used by SDB on most System V
3867           systems prior to System V Release 4.
3868
3869       -gxcoff
3870           Produce debugging information in XCOFF format (if that is
3871           supported).  This is the format used by the DBX debugger on IBM
3872           RS/6000 systems.
3873
3874       -gxcoff+
3875           Produce debugging information in XCOFF format (if that is
3876           supported), using GNU extensions understood only by the GNU
3877           debugger (GDB).  The use of these extensions is likely to make
3878           other debuggers crash or refuse to read the program, and may cause
3879           assemblers other than the GNU assembler (GAS) to fail with an
3880           error.
3881
3882       -gdwarf-version
3883           Produce debugging information in DWARF format (if that is
3884           supported).  The value of version may be either 2, 3 or 4; the
3885           default version for most targets is 4.
3886
3887           Note that with DWARF Version 2, some ports require and always use
3888           some non-conflicting DWARF 3 extensions in the unwind tables.
3889
3890           Version 4 may require GDB 7.0 and -fvar-tracking-assignments for
3891           maximum benefit.
3892
3893       -grecord-gcc-switches
3894           This switch causes the command-line options used to invoke the
3895           compiler that may affect code generation to be appended to the
3896           DW_AT_producer attribute in DWARF debugging information.  The
3897           options are concatenated with spaces separating them from each
3898           other and from the compiler version.  See also
3899           -frecord-gcc-switches for another way of storing compiler options
3900           into the object file.  This is the default.
3901
3902       -gno-record-gcc-switches
3903           Disallow appending command-line options to the DW_AT_producer
3904           attribute in DWARF debugging information.
3905
3906       -gstrict-dwarf
3907           Disallow using extensions of later DWARF standard version than
3908           selected with -gdwarf-version.  On most targets using non-
3909           conflicting DWARF extensions from later standard versions is
3910           allowed.
3911
3912       -gno-strict-dwarf
3913           Allow using extensions of later DWARF standard version than
3914           selected with -gdwarf-version.
3915
3916       -gvms
3917           Produce debugging information in Alpha/VMS debug format (if that is
3918           supported).  This is the format used by DEBUG on Alpha/VMS systems.
3919
3920       -glevel
3921       -ggdblevel
3922       -gstabslevel
3923       -gcofflevel
3924       -gxcofflevel
3925       -gvmslevel
3926           Request debugging information and also use level to specify how
3927           much information.  The default level is 2.
3928
3929           Level 0 produces no debug information at all.  Thus, -g0 negates
3930           -g.
3931
3932           Level 1 produces minimal information, enough for making backtraces
3933           in parts of the program that you don't plan to debug.  This
3934           includes descriptions of functions and external variables, but no
3935           information about local variables and no line numbers.
3936
3937           Level 3 includes extra information, such as all the macro
3938           definitions present in the program.  Some debuggers support macro
3939           expansion when you use -g3.
3940
3941           -gdwarf-2 does not accept a concatenated debug level, because GCC
3942           used to support an option -gdwarf that meant to generate debug
3943           information in version 1 of the DWARF format (which is very
3944           different from version 2), and it would have been too confusing.
3945           That debug format is long obsolete, but the option cannot be
3946           changed now.  Instead use an additional -glevel option to change
3947           the debug level for DWARF.
3948
3949       -gtoggle
3950           Turn off generation of debug info, if leaving out this option
3951           generates it, or turn it on at level 2 otherwise.  The position of
3952           this argument in the command line does not matter; it takes effect
3953           after all other options are processed, and it does so only once, no
3954           matter how many times it is given.  This is mainly intended to be
3955           used with -fcompare-debug.
3956
3957       -fsanitize=address
3958           Enable AddressSanitizer, a fast memory error detector.  Memory
3959           access instructions will be instrumented to detect out-of-bounds
3960           and use-after-free bugs.  See
3961           <http://code.google.com/p/address-sanitizer/> for more details.
3962
3963       -fsanitize=thread
3964           Enable ThreadSanitizer, a fast data race detector.  Memory access
3965           instructions will be instrumented to detect data race bugs.  See
3966           <http://code.google.com/p/data-race-test/wiki/ThreadSanitizer> for
3967           more details.
3968
3969       -fdump-final-insns[=file]
3970           Dump the final internal representation (RTL) to file.  If the
3971           optional argument is omitted (or if file is "."), the name of the
3972           dump file is determined by appending ".gkd" to the compilation
3973           output file name.
3974
3975       -fcompare-debug[=opts]
3976           If no error occurs during compilation, run the compiler a second
3977           time, adding opts and -fcompare-debug-second to the arguments
3978           passed to the second compilation.  Dump the final internal
3979           representation in both compilations, and print an error if they
3980           differ.
3981
3982           If the equal sign is omitted, the default -gtoggle is used.
3983
3984           The environment variable GCC_COMPARE_DEBUG, if defined, non-empty
3985           and nonzero, implicitly enables -fcompare-debug.  If
3986           GCC_COMPARE_DEBUG is defined to a string starting with a dash, then
3987           it is used for opts, otherwise the default -gtoggle is used.
3988
3989           -fcompare-debug=, with the equal sign but without opts, is
3990           equivalent to -fno-compare-debug, which disables the dumping of the
3991           final representation and the second compilation, preventing even
3992           GCC_COMPARE_DEBUG from taking effect.
3993
3994           To verify full coverage during -fcompare-debug testing, set
3995           GCC_COMPARE_DEBUG to say -fcompare-debug-not-overridden, which GCC
3996           rejects as an invalid option in any actual compilation (rather than
3997           preprocessing, assembly or linking).  To get just a warning,
3998           setting GCC_COMPARE_DEBUG to -w%n-fcompare-debug not overridden
3999           will do.
4000
4001       -fcompare-debug-second
4002           This option is implicitly passed to the compiler for the second
4003           compilation requested by -fcompare-debug, along with options to
4004           silence warnings, and omitting other options that would cause side-
4005           effect compiler outputs to files or to the standard output.  Dump
4006           files and preserved temporary files are renamed so as to contain
4007           the ".gk" additional extension during the second compilation, to
4008           avoid overwriting those generated by the first.
4009
4010           When this option is passed to the compiler driver, it causes the
4011           first compilation to be skipped, which makes it useful for little
4012           other than debugging the compiler proper.
4013
4014       -feliminate-dwarf2-dups
4015           Compress DWARF 2 debugging information by eliminating duplicated
4016           information about each symbol.  This option only makes sense when
4017           generating DWARF 2 debugging information with -gdwarf-2.
4018
4019       -femit-struct-debug-baseonly
4020           Emit debug information for struct-like types only when the base
4021           name of the compilation source file matches the base name of file
4022           in which the struct is defined.
4023
4024           This option substantially reduces the size of debugging
4025           information, but at significant potential loss in type information
4026           to the debugger.  See -femit-struct-debug-reduced for a less
4027           aggressive option.  See -femit-struct-debug-detailed for more
4028           detailed control.
4029
4030           This option works only with DWARF 2.
4031
4032       -femit-struct-debug-reduced
4033           Emit debug information for struct-like types only when the base
4034           name of the compilation source file matches the base name of file
4035           in which the type is defined, unless the struct is a template or
4036           defined in a system header.
4037
4038           This option significantly reduces the size of debugging
4039           information, with some potential loss in type information to the
4040           debugger.  See -femit-struct-debug-baseonly for a more aggressive
4041           option.  See -femit-struct-debug-detailed for more detailed
4042           control.
4043
4044           This option works only with DWARF 2.
4045
4046       -femit-struct-debug-detailed[=spec-list]
4047           Specify the struct-like types for which the compiler generates
4048           debug information.  The intent is to reduce duplicate struct debug
4049           information between different object files within the same program.
4050
4051           This option is a detailed version of -femit-struct-debug-reduced
4052           and -femit-struct-debug-baseonly, which serves for most needs.
4053
4054           A specification has the
4055           syntax[dir:|ind:][ord:|gen:](any|sys|base|none)
4056
4057           The optional first word limits the specification to structs that
4058           are used directly (dir:) or used indirectly (ind:).  A struct type
4059           is used directly when it is the type of a variable, member.
4060           Indirect uses arise through pointers to structs.  That is, when use
4061           of an incomplete struct is valid, the use is indirect.  An example
4062           is struct one direct; struct two * indirect;.
4063
4064           The optional second word limits the specification to ordinary
4065           structs (ord:) or generic structs (gen:).  Generic structs are a
4066           bit complicated to explain.  For C++, these are non-explicit
4067           specializations of template classes, or non-template classes within
4068           the above.  Other programming languages have generics, but
4069           -femit-struct-debug-detailed does not yet implement them.
4070
4071           The third word specifies the source files for those structs for
4072           which the compiler should emit debug information.  The values none
4073           and any have the normal meaning.  The value base means that the
4074           base of name of the file in which the type declaration appears must
4075           match the base of the name of the main compilation file.  In
4076           practice, this means that when compiling foo.c, debug information
4077           is generated for types declared in that file and foo.h, but not
4078           other header files.  The value sys means those types satisfying
4079           base or declared in system or compiler headers.
4080
4081           You may need to experiment to determine the best settings for your
4082           application.
4083
4084           The default is -femit-struct-debug-detailed=all.
4085
4086           This option works only with DWARF 2.
4087
4088       -fno-merge-debug-strings
4089           Direct the linker to not merge together strings in the debugging
4090           information that are identical in different object files.  Merging
4091           is not supported by all assemblers or linkers.  Merging decreases
4092           the size of the debug information in the output file at the cost of
4093           increasing link processing time.  Merging is enabled by default.
4094
4095       -fdebug-prefix-map=old=new
4096           When compiling files in directory old, record debugging information
4097           describing them as in new instead.
4098
4099       -fno-dwarf2-cfi-asm
4100           Emit DWARF 2 unwind info as compiler generated ".eh_frame" section
4101           instead of using GAS ".cfi_*" directives.
4102
4103       -p  Generate extra code to write profile information suitable for the
4104           analysis program prof.  You must use this option when compiling the
4105           source files you want data about, and you must also use it when
4106           linking.
4107
4108       -pg Generate extra code to write profile information suitable for the
4109           analysis program gprof.  You must use this option when compiling
4110           the source files you want data about, and you must also use it when
4111           linking.
4112
4113       -Q  Makes the compiler print out each function name as it is compiled,
4114           and print some statistics about each pass when it finishes.
4115
4116       -ftime-report
4117           Makes the compiler print some statistics about the time consumed by
4118           each pass when it finishes.
4119
4120       -fmem-report
4121           Makes the compiler print some statistics about permanent memory
4122           allocation when it finishes.
4123
4124       -fmem-report-wpa
4125           Makes the compiler print some statistics about permanent memory
4126           allocation for the WPA phase only.
4127
4128       -fpre-ipa-mem-report
4129       -fpost-ipa-mem-report
4130           Makes the compiler print some statistics about permanent memory
4131           allocation before or after interprocedural optimization.
4132
4133       -fprofile-report
4134           Makes the compiler print some statistics about consistency of the
4135           (estimated) profile and effect of individual passes.
4136
4137       -fstack-usage
4138           Makes the compiler output stack usage information for the program,
4139           on a per-function basis.  The filename for the dump is made by
4140           appending .su to the auxname.  auxname is generated from the name
4141           of the output file, if explicitly specified and it is not an
4142           executable, otherwise it is the basename of the source file.  An
4143           entry is made up of three fields:
4144
4145           ·   The name of the function.
4146
4147           ·   A number of bytes.
4148
4149           ·   One or more qualifiers: "static", "dynamic", "bounded".
4150
4151           The qualifier "static" means that the function manipulates the
4152           stack statically: a fixed number of bytes are allocated for the
4153           frame on function entry and released on function exit; no stack
4154           adjustments are otherwise made in the function.  The second field
4155           is this fixed number of bytes.
4156
4157           The qualifier "dynamic" means that the function manipulates the
4158           stack dynamically: in addition to the static allocation described
4159           above, stack adjustments are made in the body of the function, for
4160           example to push/pop arguments around function calls.  If the
4161           qualifier "bounded" is also present, the amount of these
4162           adjustments is bounded at compile time and the second field is an
4163           upper bound of the total amount of stack used by the function.  If
4164           it is not present, the amount of these adjustments is not bounded
4165           at compile time and the second field only represents the bounded
4166           part.
4167
4168       -fprofile-arcs
4169           Add code so that program flow arcs are instrumented.  During
4170           execution the program records how many times each branch and call
4171           is executed and how many times it is taken or returns.  When the
4172           compiled program exits it saves this data to a file called
4173           auxname.gcda for each source file.  The data may be used for
4174           profile-directed optimizations (-fbranch-probabilities), or for
4175           test coverage analysis (-ftest-coverage).  Each object file's
4176           auxname is generated from the name of the output file, if
4177           explicitly specified and it is not the final executable, otherwise
4178           it is the basename of the source file.  In both cases any suffix is
4179           removed (e.g. foo.gcda for input file dir/foo.c, or dir/foo.gcda
4180           for output file specified as -o dir/foo.o).
4181
4182       --coverage
4183           This option is used to compile and link code instrumented for
4184           coverage analysis.  The option is a synonym for -fprofile-arcs
4185           -ftest-coverage (when compiling) and -lgcov (when linking).  See
4186           the documentation for those options for more details.
4187
4188           ·   Compile the source files with -fprofile-arcs plus optimization
4189               and code generation options.  For test coverage analysis, use
4190               the additional -ftest-coverage option.  You do not need to
4191               profile every source file in a program.
4192
4193           ·   Link your object files with -lgcov or -fprofile-arcs (the
4194               latter implies the former).
4195
4196           ·   Run the program on a representative workload to generate the
4197               arc profile information.  This may be repeated any number of
4198               times.  You can run concurrent instances of your program, and
4199               provided that the file system supports locking, the data files
4200               will be correctly updated.  Also "fork" calls are detected and
4201               correctly handled (double counting will not happen).
4202
4203           ·   For profile-directed optimizations, compile the source files
4204               again with the same optimization and code generation options
4205               plus -fbranch-probabilities.
4206
4207           ·   For test coverage analysis, use gcov to produce human readable
4208               information from the .gcno and .gcda files.  Refer to the gcov
4209               documentation for further information.
4210
4211           With -fprofile-arcs, for each function of your program GCC creates
4212           a program flow graph, then finds a spanning tree for the graph.
4213           Only arcs that are not on the spanning tree have to be
4214           instrumented: the compiler adds code to count the number of times
4215           that these arcs are executed.  When an arc is the only exit or only
4216           entrance to a block, the instrumentation code can be added to the
4217           block; otherwise, a new basic block must be created to hold the
4218           instrumentation code.
4219
4220       -ftest-coverage
4221           Produce a notes file that the gcov code-coverage utility can use to
4222           show program coverage.  Each source file's note file is called
4223           auxname.gcno.  Refer to the -fprofile-arcs option above for a
4224           description of auxname and instructions on how to generate test
4225           coverage data.  Coverage data matches the source files more closely
4226           if you do not optimize.
4227
4228       -fdbg-cnt-list
4229           Print the name and the counter upper bound for all debug counters.
4230
4231       -fdbg-cnt=counter-value-list
4232           Set the internal debug counter upper bound.  counter-value-list is
4233           a comma-separated list of name:value pairs which sets the upper
4234           bound of each debug counter name to value.  All debug counters have
4235           the initial upper bound of "UINT_MAX"; thus "dbg_cnt()" returns
4236           true always unless the upper bound is set by this option.  For
4237           example, with -fdbg-cnt=dce:10,tail_call:0, "dbg_cnt(dce)" returns
4238           true only for first 10 invocations.
4239
4240       -fenable-kind-pass
4241       -fdisable-kind-pass=range-list
4242           This is a set of options that are used to explicitly disable/enable
4243           optimization passes.  These options are intended for use for
4244           debugging GCC.  Compiler users should use regular options for
4245           enabling/disabling passes instead.
4246
4247           -fdisable-ipa-pass
4248               Disable IPA pass pass. pass is the pass name.  If the same pass
4249               is statically invoked in the compiler multiple times, the pass
4250               name should be appended with a sequential number starting from
4251               1.
4252
4253           -fdisable-rtl-pass
4254           -fdisable-rtl-pass=range-list
4255               Disable RTL pass pass.  pass is the pass name.  If the same
4256               pass is statically invoked in the compiler multiple times, the
4257               pass name should be appended with a sequential number starting
4258               from 1.  range-list is a comma-separated list of function
4259               ranges or assembler names.  Each range is a number pair
4260               separated by a colon.  The range is inclusive in both ends.  If
4261               the range is trivial, the number pair can be simplified as a
4262               single number.  If the function's call graph node's uid falls
4263               within one of the specified ranges, the pass is disabled for
4264               that function.  The uid is shown in the function header of a
4265               dump file, and the pass names can be dumped by using option
4266               -fdump-passes.
4267
4268           -fdisable-tree-pass
4269           -fdisable-tree-pass=range-list
4270               Disable tree pass pass.  See -fdisable-rtl for the description
4271               of option arguments.
4272
4273           -fenable-ipa-pass
4274               Enable IPA pass pass.  pass is the pass name.  If the same pass
4275               is statically invoked in the compiler multiple times, the pass
4276               name should be appended with a sequential number starting from
4277               1.
4278
4279           -fenable-rtl-pass
4280           -fenable-rtl-pass=range-list
4281               Enable RTL pass pass.  See -fdisable-rtl for option argument
4282               description and examples.
4283
4284           -fenable-tree-pass
4285           -fenable-tree-pass=range-list
4286               Enable tree pass pass.  See -fdisable-rtl for the description
4287               of option arguments.
4288
4289           Here are some examples showing uses of these options.
4290
4291                   # disable ccp1 for all functions
4292                      -fdisable-tree-ccp1
4293                   # disable complete unroll for function whose cgraph node uid is 1
4294                      -fenable-tree-cunroll=1
4295                   # disable gcse2 for functions at the following ranges [1,1],
4296                   # [300,400], and [400,1000]
4297                   # disable gcse2 for functions foo and foo2
4298                      -fdisable-rtl-gcse2=foo,foo2
4299                   # disable early inlining
4300                      -fdisable-tree-einline
4301                   # disable ipa inlining
4302                      -fdisable-ipa-inline
4303                   # enable tree full unroll
4304                      -fenable-tree-unroll
4305
4306       -dletters
4307       -fdump-rtl-pass
4308       -fdump-rtl-pass=filename
4309           Says to make debugging dumps during compilation at times specified
4310           by letters.  This is used for debugging the RTL-based passes of the
4311           compiler.  The file names for most of the dumps are made by
4312           appending a pass number and a word to the dumpname, and the files
4313           are created in the directory of the output file. In case of
4314           =filename option, the dump is output on the given file instead of
4315           the pass numbered dump files. Note that the pass number is computed
4316           statically as passes get registered into the pass manager.  Thus
4317           the numbering is not related to the dynamic order of execution of
4318           passes.  In particular, a pass installed by a plugin could have a
4319           number over 200 even if it executed quite early.  dumpname is
4320           generated from the name of the output file, if explicitly specified
4321           and it is not an executable, otherwise it is the basename of the
4322           source file. These switches may have different effects when -E is
4323           used for preprocessing.
4324
4325           Debug dumps can be enabled with a -fdump-rtl switch or some -d
4326           option letters.  Here are the possible letters for use in pass and
4327           letters, and their meanings:
4328
4329           -fdump-rtl-alignments
4330               Dump after branch alignments have been computed.
4331
4332           -fdump-rtl-asmcons
4333               Dump after fixing rtl statements that have unsatisfied in/out
4334               constraints.
4335
4336           -fdump-rtl-auto_inc_dec
4337               Dump after auto-inc-dec discovery.  This pass is only run on
4338               architectures that have auto inc or auto dec instructions.
4339
4340           -fdump-rtl-barriers
4341               Dump after cleaning up the barrier instructions.
4342
4343           -fdump-rtl-bbpart
4344               Dump after partitioning hot and cold basic blocks.
4345
4346           -fdump-rtl-bbro
4347               Dump after block reordering.
4348
4349           -fdump-rtl-btl1
4350           -fdump-rtl-btl2
4351               -fdump-rtl-btl1 and -fdump-rtl-btl2 enable dumping after the
4352               two branch target load optimization passes.
4353
4354           -fdump-rtl-bypass
4355               Dump after jump bypassing and control flow optimizations.
4356
4357           -fdump-rtl-combine
4358               Dump after the RTL instruction combination pass.
4359
4360           -fdump-rtl-compgotos
4361               Dump after duplicating the computed gotos.
4362
4363           -fdump-rtl-ce1
4364           -fdump-rtl-ce2
4365           -fdump-rtl-ce3
4366               -fdump-rtl-ce1, -fdump-rtl-ce2, and -fdump-rtl-ce3 enable
4367               dumping after the three if conversion passes.
4368
4369           -fdump-rtl-cprop_hardreg
4370               Dump after hard register copy propagation.
4371
4372           -fdump-rtl-csa
4373               Dump after combining stack adjustments.
4374
4375           -fdump-rtl-cse1
4376           -fdump-rtl-cse2
4377               -fdump-rtl-cse1 and -fdump-rtl-cse2 enable dumping after the
4378               two common subexpression elimination passes.
4379
4380           -fdump-rtl-dce
4381               Dump after the standalone dead code elimination passes.
4382
4383           -fdump-rtl-dbr
4384               Dump after delayed branch scheduling.
4385
4386           -fdump-rtl-dce1
4387           -fdump-rtl-dce2
4388               -fdump-rtl-dce1 and -fdump-rtl-dce2 enable dumping after the
4389               two dead store elimination passes.
4390
4391           -fdump-rtl-eh
4392               Dump after finalization of EH handling code.
4393
4394           -fdump-rtl-eh_ranges
4395               Dump after conversion of EH handling range regions.
4396
4397           -fdump-rtl-expand
4398               Dump after RTL generation.
4399
4400           -fdump-rtl-fwprop1
4401           -fdump-rtl-fwprop2
4402               -fdump-rtl-fwprop1 and -fdump-rtl-fwprop2 enable dumping after
4403               the two forward propagation passes.
4404
4405           -fdump-rtl-gcse1
4406           -fdump-rtl-gcse2
4407               -fdump-rtl-gcse1 and -fdump-rtl-gcse2 enable dumping after
4408               global common subexpression elimination.
4409
4410           -fdump-rtl-init-regs
4411               Dump after the initialization of the registers.
4412
4413           -fdump-rtl-initvals
4414               Dump after the computation of the initial value sets.
4415
4416           -fdump-rtl-into_cfglayout
4417               Dump after converting to cfglayout mode.
4418
4419           -fdump-rtl-ira
4420               Dump after iterated register allocation.
4421
4422           -fdump-rtl-jump
4423               Dump after the second jump optimization.
4424
4425           -fdump-rtl-loop2
4426               -fdump-rtl-loop2 enables dumping after the rtl loop
4427               optimization passes.
4428
4429           -fdump-rtl-mach
4430               Dump after performing the machine dependent reorganization
4431               pass, if that pass exists.
4432
4433           -fdump-rtl-mode_sw
4434               Dump after removing redundant mode switches.
4435
4436           -fdump-rtl-rnreg
4437               Dump after register renumbering.
4438
4439           -fdump-rtl-outof_cfglayout
4440               Dump after converting from cfglayout mode.
4441
4442           -fdump-rtl-peephole2
4443               Dump after the peephole pass.
4444
4445           -fdump-rtl-postreload
4446               Dump after post-reload optimizations.
4447
4448           -fdump-rtl-pro_and_epilogue
4449               Dump after generating the function prologues and epilogues.
4450
4451           -fdump-rtl-regmove
4452               Dump after the register move pass.
4453
4454           -fdump-rtl-sched1
4455           -fdump-rtl-sched2
4456               -fdump-rtl-sched1 and -fdump-rtl-sched2 enable dumping after
4457               the basic block scheduling passes.
4458
4459           -fdump-rtl-see
4460               Dump after sign extension elimination.
4461
4462           -fdump-rtl-seqabstr
4463               Dump after common sequence discovery.
4464
4465           -fdump-rtl-shorten
4466               Dump after shortening branches.
4467
4468           -fdump-rtl-sibling
4469               Dump after sibling call optimizations.
4470
4471           -fdump-rtl-split1
4472           -fdump-rtl-split2
4473           -fdump-rtl-split3
4474           -fdump-rtl-split4
4475           -fdump-rtl-split5
4476               -fdump-rtl-split1, -fdump-rtl-split2, -fdump-rtl-split3,
4477               -fdump-rtl-split4 and -fdump-rtl-split5 enable dumping after
4478               five rounds of instruction splitting.
4479
4480           -fdump-rtl-sms
4481               Dump after modulo scheduling.  This pass is only run on some
4482               architectures.
4483
4484           -fdump-rtl-stack
4485               Dump after conversion from GCC's "flat register file" registers
4486               to the x87's stack-like registers.  This pass is only run on
4487               x86 variants.
4488
4489           -fdump-rtl-subreg1
4490           -fdump-rtl-subreg2
4491               -fdump-rtl-subreg1 and -fdump-rtl-subreg2 enable dumping after
4492               the two subreg expansion passes.
4493
4494           -fdump-rtl-unshare
4495               Dump after all rtl has been unshared.
4496
4497           -fdump-rtl-vartrack
4498               Dump after variable tracking.
4499
4500           -fdump-rtl-vregs
4501               Dump after converting virtual registers to hard registers.
4502
4503           -fdump-rtl-web
4504               Dump after live range splitting.
4505
4506           -fdump-rtl-regclass
4507           -fdump-rtl-subregs_of_mode_init
4508           -fdump-rtl-subregs_of_mode_finish
4509           -fdump-rtl-dfinit
4510           -fdump-rtl-dfinish
4511               These dumps are defined but always produce empty files.
4512
4513           -da
4514           -fdump-rtl-all
4515               Produce all the dumps listed above.
4516
4517           -dA Annotate the assembler output with miscellaneous debugging
4518               information.
4519
4520           -dD Dump all macro definitions, at the end of preprocessing, in
4521               addition to normal output.
4522
4523           -dH Produce a core dump whenever an error occurs.
4524
4525           -dp Annotate the assembler output with a comment indicating which
4526               pattern and alternative is used.  The length of each
4527               instruction is also printed.
4528
4529           -dP Dump the RTL in the assembler output as a comment before each
4530               instruction.  Also turns on -dp annotation.
4531
4532           -dx Just generate RTL for a function instead of compiling it.
4533               Usually used with -fdump-rtl-expand.
4534
4535       -fdump-noaddr
4536           When doing debugging dumps, suppress address output.  This makes it
4537           more feasible to use diff on debugging dumps for compiler
4538           invocations with different compiler binaries and/or different text
4539           / bss / data / heap / stack / dso start locations.
4540
4541       -fdump-unnumbered
4542           When doing debugging dumps, suppress instruction numbers and
4543           address output.  This makes it more feasible to use diff on
4544           debugging dumps for compiler invocations with different options, in
4545           particular with and without -g.
4546
4547       -fdump-unnumbered-links
4548           When doing debugging dumps (see -d option above), suppress
4549           instruction numbers for the links to the previous and next
4550           instructions in a sequence.
4551
4552       -fdump-translation-unit (C++ only)
4553       -fdump-translation-unit-options (C++ only)
4554           Dump a representation of the tree structure for the entire
4555           translation unit to a file.  The file name is made by appending .tu
4556           to the source file name, and the file is created in the same
4557           directory as the output file.  If the -options form is used,
4558           options controls the details of the dump as described for the
4559           -fdump-tree options.
4560
4561       -fdump-class-hierarchy (C++ only)
4562       -fdump-class-hierarchy-options (C++ only)
4563           Dump a representation of each class's hierarchy and virtual
4564           function table layout to a file.  The file name is made by
4565           appending .class to the source file name, and the file is created
4566           in the same directory as the output file.  If the -options form is
4567           used, options controls the details of the dump as described for the
4568           -fdump-tree options.
4569
4570       -fdump-ipa-switch
4571           Control the dumping at various stages of inter-procedural analysis
4572           language tree to a file.  The file name is generated by appending a
4573           switch specific suffix to the source file name, and the file is
4574           created in the same directory as the output file.  The following
4575           dumps are possible:
4576
4577           all Enables all inter-procedural analysis dumps.
4578
4579           cgraph
4580               Dumps information about call-graph optimization, unused
4581               function removal, and inlining decisions.
4582
4583           inline
4584               Dump after function inlining.
4585
4586       -fdump-passes
4587           Dump the list of optimization passes that are turned on and off by
4588           the current command-line options.
4589
4590       -fdump-statistics-option
4591           Enable and control dumping of pass statistics in a separate file.
4592           The file name is generated by appending a suffix ending in
4593           .statistics to the source file name, and the file is created in the
4594           same directory as the output file.  If the -option form is used,
4595           -stats causes counters to be summed over the whole compilation unit
4596           while -details dumps every event as the passes generate them.  The
4597           default with no option is to sum counters for each function
4598           compiled.
4599
4600       -fdump-tree-switch
4601       -fdump-tree-switch-options
4602       -fdump-tree-switch-options=filename
4603           Control the dumping at various stages of processing the
4604           intermediate language tree to a file.  The file name is generated
4605           by appending a switch-specific suffix to the source file name, and
4606           the file is created in the same directory as the output file. In
4607           case of =filename option, the dump is output on the given file
4608           instead of the auto named dump files.  If the -options form is
4609           used, options is a list of - separated options which control the
4610           details of the dump.  Not all options are applicable to all dumps;
4611           those that are not meaningful are ignored.  The following options
4612           are available
4613
4614           address
4615               Print the address of each node.  Usually this is not meaningful
4616               as it changes according to the environment and source file.
4617               Its primary use is for tying up a dump file with a debug
4618               environment.
4619
4620           asmname
4621               If "DECL_ASSEMBLER_NAME" has been set for a given decl, use
4622               that in the dump instead of "DECL_NAME".  Its primary use is
4623               ease of use working backward from mangled names in the assembly
4624               file.
4625
4626           slim
4627               When dumping front-end intermediate representations, inhibit
4628               dumping of members of a scope or body of a function merely
4629               because that scope has been reached.  Only dump such items when
4630               they are directly reachable by some other path.
4631
4632               When dumping pretty-printed trees, this option inhibits dumping
4633               the bodies of control structures.
4634
4635               When dumping RTL, print the RTL in slim (condensed) form
4636               instead of the default LISP-like representation.
4637
4638           raw Print a raw representation of the tree.  By default, trees are
4639               pretty-printed into a C-like representation.
4640
4641           details
4642               Enable more detailed dumps (not honored by every dump option).
4643               Also include information from the optimization passes.
4644
4645           stats
4646               Enable dumping various statistics about the pass (not honored
4647               by every dump option).
4648
4649           blocks
4650               Enable showing basic block boundaries (disabled in raw dumps).
4651
4652           graph
4653               For each of the other indicated dump files (-fdump-rtl-pass),
4654               dump a representation of the control flow graph suitable for
4655               viewing with GraphViz to file.passid.pass.dot.  Each function
4656               in the file is pretty-printed as a subgraph, so that GraphViz
4657               can render them all in a single plot.
4658
4659               This option currently only works for RTL dumps, and the RTL is
4660               always dumped in slim form.
4661
4662           vops
4663               Enable showing virtual operands for every statement.
4664
4665           lineno
4666               Enable showing line numbers for statements.
4667
4668           uid Enable showing the unique ID ("DECL_UID") for each variable.
4669
4670           verbose
4671               Enable showing the tree dump for each statement.
4672
4673           eh  Enable showing the EH region number holding each statement.
4674
4675           scev
4676               Enable showing scalar evolution analysis details.
4677
4678           optimized
4679               Enable showing optimization information (only available in
4680               certain passes).
4681
4682           missed
4683               Enable showing missed optimization information (only available
4684               in certain passes).
4685
4686           notes
4687               Enable other detailed optimization information (only available
4688               in certain passes).
4689
4690           =filename
4691               Instead of an auto named dump file, output into the given file
4692               name. The file names stdout and stderr are treated specially
4693               and are considered already open standard streams. For example,
4694
4695                       gcc -O2 -ftree-vectorize -fdump-tree-vect-blocks=foo.dump
4696                            -fdump-tree-pre=stderr file.c
4697
4698               outputs vectorizer dump into foo.dump, while the PRE dump is
4699               output on to stderr. If two conflicting dump filenames are
4700               given for the same pass, then the latter option overrides the
4701               earlier one.
4702
4703           all Turn on all options, except raw, slim, verbose and lineno.
4704
4705           optall
4706               Turn on all optimization options, i.e., optimized, missed, and
4707               note.
4708
4709           The following tree dumps are possible:
4710
4711           original
4712               Dump before any tree based optimization, to file.original.
4713
4714           optimized
4715               Dump after all tree based optimization, to file.optimized.
4716
4717           gimple
4718               Dump each function before and after the gimplification pass to
4719               a file.  The file name is made by appending .gimple to the
4720               source file name.
4721
4722           cfg Dump the control flow graph of each function to a file.  The
4723               file name is made by appending .cfg to the source file name.
4724
4725           ch  Dump each function after copying loop headers.  The file name
4726               is made by appending .ch to the source file name.
4727
4728           ssa Dump SSA related information to a file.  The file name is made
4729               by appending .ssa to the source file name.
4730
4731           alias
4732               Dump aliasing information for each function.  The file name is
4733               made by appending .alias to the source file name.
4734
4735           ccp Dump each function after CCP.  The file name is made by
4736               appending .ccp to the source file name.
4737
4738           storeccp
4739               Dump each function after STORE-CCP.  The file name is made by
4740               appending .storeccp to the source file name.
4741
4742           pre Dump trees after partial redundancy elimination.  The file name
4743               is made by appending .pre to the source file name.
4744
4745           fre Dump trees after full redundancy elimination.  The file name is
4746               made by appending .fre to the source file name.
4747
4748           copyprop
4749               Dump trees after copy propagation.  The file name is made by
4750               appending .copyprop to the source file name.
4751
4752           store_copyprop
4753               Dump trees after store copy-propagation.  The file name is made
4754               by appending .store_copyprop to the source file name.
4755
4756           dce Dump each function after dead code elimination.  The file name
4757               is made by appending .dce to the source file name.
4758
4759           mudflap
4760               Dump each function after adding mudflap instrumentation.  The
4761               file name is made by appending .mudflap to the source file
4762               name.
4763
4764           sra Dump each function after performing scalar replacement of
4765               aggregates.  The file name is made by appending .sra to the
4766               source file name.
4767
4768           sink
4769               Dump each function after performing code sinking.  The file
4770               name is made by appending .sink to the source file name.
4771
4772           dom Dump each function after applying dominator tree optimizations.
4773               The file name is made by appending .dom to the source file
4774               name.
4775
4776           dse Dump each function after applying dead store elimination.  The
4777               file name is made by appending .dse to the source file name.
4778
4779           phiopt
4780               Dump each function after optimizing PHI nodes into straightline
4781               code.  The file name is made by appending .phiopt to the source
4782               file name.
4783
4784           forwprop
4785               Dump each function after forward propagating single use
4786               variables.  The file name is made by appending .forwprop to the
4787               source file name.
4788
4789           copyrename
4790               Dump each function after applying the copy rename optimization.
4791               The file name is made by appending .copyrename to the source
4792               file name.
4793
4794           nrv Dump each function after applying the named return value
4795               optimization on generic trees.  The file name is made by
4796               appending .nrv to the source file name.
4797
4798           vect
4799               Dump each function after applying vectorization of loops.  The
4800               file name is made by appending .vect to the source file name.
4801
4802           slp Dump each function after applying vectorization of basic
4803               blocks.  The file name is made by appending .slp to the source
4804               file name.
4805
4806           vrp Dump each function after Value Range Propagation (VRP).  The
4807               file name is made by appending .vrp to the source file name.
4808
4809           all Enable all the available tree dumps with the flags provided in
4810               this option.
4811
4812       -fopt-info
4813       -fopt-info-options
4814       -fopt-info-options=filename
4815           Controls optimization dumps from various optimization passes. If
4816           the -options form is used, options is a list of - separated options
4817           to select the dump details and optimizations.  If options is not
4818           specified, it defaults to all for details and optall for
4819           optimization groups. If the filename is not specified, it defaults
4820           to stderr. Note that the output filename will be overwritten in
4821           case of multiple translation units. If a combined output from
4822           multiple translation units is desired, stderr should be used
4823           instead.
4824
4825           The options can be divided into two groups, 1) options describing
4826           the verbosity of the dump, and 2) options describing which
4827           optimizations should be included. The options from both the groups
4828           can be freely mixed as they are non-overlapping. However, in case
4829           of any conflicts, the latter options override the earlier options
4830           on the command line. Though multiple -fopt-info options are
4831           accepted, only one of them can have =filename. If other filenames
4832           are provided then all but the first one are ignored.
4833
4834           The dump verbosity has the following options
4835
4836           optimized
4837               Print information when an optimization is successfully applied.
4838               It is up to a pass to decide which information is relevant. For
4839               example, the vectorizer passes print the source location of
4840               loops which got successfully vectorized.
4841
4842           missed
4843               Print information about missed optimizations. Individual passes
4844               control which information to include in the output. For
4845               example,
4846
4847                       gcc -O2 -ftree-vectorize -fopt-info-vec-missed
4848
4849               will print information about missed optimization opportunities
4850               from vectorization passes on stderr.
4851
4852           note
4853               Print verbose information about optimizations, such as certain
4854               transformations, more detailed messages about decisions etc.
4855
4856           all Print detailed optimization information. This includes
4857               optimized, missed, and note.
4858
4859           The second set of options describes a group of optimizations and
4860           may include one or more of the following.
4861
4862           ipa Enable dumps from all interprocedural optimizations.
4863
4864           loop
4865               Enable dumps from all loop optimizations.
4866
4867           inline
4868               Enable dumps from all inlining optimizations.
4869
4870           vec Enable dumps from all vectorization optimizations.
4871
4872           For example,
4873
4874                   gcc -O3 -fopt-info-missed=missed.all
4875
4876           outputs missed optimization report from all the passes into
4877           missed.all.
4878
4879           As another example,
4880
4881                   gcc -O3 -fopt-info-inline-optimized-missed=inline.txt
4882
4883           will output information about missed optimizations as well as
4884           optimized locations from all the inlining passes into inline.txt.
4885
4886           If the filename is provided, then the dumps from all the applicable
4887           optimizations are concatenated into the filename.  Otherwise the
4888           dump is output onto stderr. If options is omitted, it defaults to
4889           all-optall, which means dump all available optimization info from
4890           all the passes. In the following example, all optimization info is
4891           output on to stderr.
4892
4893                   gcc -O3 -fopt-info
4894
4895           Note that -fopt-info-vec-missed behaves the same as
4896           -fopt-info-missed-vec.
4897
4898           As another example, consider
4899
4900                   gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt
4901
4902           Here the two output filenames vec.miss and loop.opt are in conflict
4903           since only one output file is allowed. In this case, only the first
4904           option takes effect and the subsequent options are ignored. Thus
4905           only the vec.miss is produced which cotaints dumps from the
4906           vectorizer about missed opportunities.
4907
4908       -ftree-vectorizer-verbose=n
4909           This option is deprecated and is implemented in terms of
4910           -fopt-info. Please use -fopt-info-kind form instead, where kind is
4911           one of the valid opt-info options. It prints additional
4912           optimization information.  For n=0 no diagnostic information is
4913           reported.  If n=1 the vectorizer reports each loop that got
4914           vectorized, and the total number of loops that got vectorized.  If
4915           n=2 the vectorizer reports locations which could not be vectorized
4916           and the reasons for those. For any higher verbosity levels all the
4917           analysis and transformation information from the vectorizer is
4918           reported.
4919
4920           Note that the information output by -ftree-vectorizer-verbose
4921           option is sent to stderr. If the equivalent form
4922           -fopt-info-options=filename is used then the output is sent into
4923           filename instead.
4924
4925       -frandom-seed=string
4926           This option provides a seed that GCC uses in place of random
4927           numbers in generating certain symbol names that have to be
4928           different in every compiled file.  It is also used to place unique
4929           stamps in coverage data files and the object files that produce
4930           them.  You can use the -frandom-seed option to produce reproducibly
4931           identical object files.
4932
4933           The string should be different for every file you compile.
4934
4935       -fsched-verbose=n
4936           On targets that use instruction scheduling, this option controls
4937           the amount of debugging output the scheduler prints.  This
4938           information is written to standard error, unless -fdump-rtl-sched1
4939           or -fdump-rtl-sched2 is specified, in which case it is output to
4940           the usual dump listing file, .sched1 or .sched2 respectively.
4941           However for n greater than nine, the output is always printed to
4942           standard error.
4943
4944           For n greater than zero, -fsched-verbose outputs the same
4945           information as -fdump-rtl-sched1 and -fdump-rtl-sched2.  For n
4946           greater than one, it also output basic block probabilities,
4947           detailed ready list information and unit/insn info.  For n greater
4948           than two, it includes RTL at abort point, control-flow and regions
4949           info.  And for n over four, -fsched-verbose also includes
4950           dependence info.
4951
4952       -save-temps
4953       -save-temps=cwd
4954           Store the usual "temporary" intermediate files permanently; place
4955           them in the current directory and name them based on the source
4956           file.  Thus, compiling foo.c with -c -save-temps produces files
4957           foo.i and foo.s, as well as foo.o.  This creates a preprocessed
4958           foo.i output file even though the compiler now normally uses an
4959           integrated preprocessor.
4960
4961           When used in combination with the -x command-line option,
4962           -save-temps is sensible enough to avoid over writing an input
4963           source file with the same extension as an intermediate file.  The
4964           corresponding intermediate file may be obtained by renaming the
4965           source file before using -save-temps.
4966
4967           If you invoke GCC in parallel, compiling several different source
4968           files that share a common base name in different subdirectories or
4969           the same source file compiled for multiple output destinations, it
4970           is likely that the different parallel compilers will interfere with
4971           each other, and overwrite the temporary files.  For instance:
4972
4973                   gcc -save-temps -o outdir1/foo.o indir1/foo.c&
4974                   gcc -save-temps -o outdir2/foo.o indir2/foo.c&
4975
4976           may result in foo.i and foo.o being written to simultaneously by
4977           both compilers.
4978
4979       -save-temps=obj
4980           Store the usual "temporary" intermediate files permanently.  If the
4981           -o option is used, the temporary files are based on the object
4982           file.  If the -o option is not used, the -save-temps=obj switch
4983           behaves like -save-temps.
4984
4985           For example:
4986
4987                   gcc -save-temps=obj -c foo.c
4988                   gcc -save-temps=obj -c bar.c -o dir/xbar.o
4989                   gcc -save-temps=obj foobar.c -o dir2/yfoobar
4990
4991           creates foo.i, foo.s, dir/xbar.i, dir/xbar.s, dir2/yfoobar.i,
4992           dir2/yfoobar.s, and dir2/yfoobar.o.
4993
4994       -time[=file]
4995           Report the CPU time taken by each subprocess in the compilation
4996           sequence.  For C source files, this is the compiler proper and
4997           assembler (plus the linker if linking is done).
4998
4999           Without the specification of an output file, the output looks like
5000           this:
5001
5002                   # cc1 0.12 0.01
5003                   # as 0.00 0.01
5004
5005           The first number on each line is the "user time", that is time
5006           spent executing the program itself.  The second number is "system
5007           time", time spent executing operating system routines on behalf of
5008           the program.  Both numbers are in seconds.
5009
5010           With the specification of an output file, the output is appended to
5011           the named file, and it looks like this:
5012
5013                   0.12 0.01 cc1 <options>
5014                   0.00 0.01 as <options>
5015
5016           The "user time" and the "system time" are moved before the program
5017           name, and the options passed to the program are displayed, so that
5018           one can later tell what file was being compiled, and with which
5019           options.
5020
5021       -fvar-tracking
5022           Run variable tracking pass.  It computes where variables are stored
5023           at each position in code.  Better debugging information is then
5024           generated (if the debugging information format supports this
5025           information).
5026
5027           It is enabled by default when compiling with optimization (-Os, -O,
5028           -O2, ...), debugging information (-g) and the debug info format
5029           supports it.
5030
5031       -fvar-tracking-assignments
5032           Annotate assignments to user variables early in the compilation and
5033           attempt to carry the annotations over throughout the compilation
5034           all the way to the end, in an attempt to improve debug information
5035           while optimizing.  Use of -gdwarf-4 is recommended along with it.
5036
5037           It can be enabled even if var-tracking is disabled, in which case
5038           annotations are created and maintained, but discarded at the end.
5039
5040       -fvar-tracking-assignments-toggle
5041           Toggle -fvar-tracking-assignments, in the same way that -gtoggle
5042           toggles -g.
5043
5044       -print-file-name=library
5045           Print the full absolute name of the library file library that would
5046           be used when linking---and don't do anything else.  With this
5047           option, GCC does not compile or link anything; it just prints the
5048           file name.
5049
5050       -print-multi-directory
5051           Print the directory name corresponding to the multilib selected by
5052           any other switches present in the command line.  This directory is
5053           supposed to exist in GCC_EXEC_PREFIX.
5054
5055       -print-multi-lib
5056           Print the mapping from multilib directory names to compiler
5057           switches that enable them.  The directory name is separated from
5058           the switches by ;, and each switch starts with an @ instead of the
5059           -, without spaces between multiple switches.  This is supposed to
5060           ease shell processing.
5061
5062       -print-multi-os-directory
5063           Print the path to OS libraries for the selected multilib, relative
5064           to some lib subdirectory.  If OS libraries are present in the lib
5065           subdirectory and no multilibs are used, this is usually just ., if
5066           OS libraries are present in libsuffix sibling directories this
5067           prints e.g. ../lib64, ../lib or ../lib32, or if OS libraries are
5068           present in lib/subdir subdirectories it prints e.g. amd64, sparcv9
5069           or ev6.
5070
5071       -print-multiarch
5072           Print the path to OS libraries for the selected multiarch, relative
5073           to some lib subdirectory.
5074
5075       -print-prog-name=program
5076           Like -print-file-name, but searches for a program such as cpp.
5077
5078       -print-libgcc-file-name
5079           Same as -print-file-name=libgcc.a.
5080
5081           This is useful when you use -nostdlib or -nodefaultlibs but you do
5082           want to link with libgcc.a.  You can do:
5083
5084                   gcc -nostdlib <files>... `gcc -print-libgcc-file-name`
5085
5086       -print-search-dirs
5087           Print the name of the configured installation directory and a list
5088           of program and library directories gcc searches---and don't do
5089           anything else.
5090
5091           This is useful when gcc prints the error message installation
5092           problem, cannot exec cpp0: No such file or directory.  To resolve
5093           this you either need to put cpp0 and the other compiler components
5094           where gcc expects to find them, or you can set the environment
5095           variable GCC_EXEC_PREFIX to the directory where you installed them.
5096           Don't forget the trailing /.
5097
5098       -print-sysroot
5099           Print the target sysroot directory that is used during compilation.
5100           This is the target sysroot specified either at configure time or
5101           using the --sysroot option, possibly with an extra suffix that
5102           depends on compilation options.  If no target sysroot is specified,
5103           the option prints nothing.
5104
5105       -print-sysroot-headers-suffix
5106           Print the suffix added to the target sysroot when searching for
5107           headers, or give an error if the compiler is not configured with
5108           such a suffix---and don't do anything else.
5109
5110       -dumpmachine
5111           Print the compiler's target machine (for example,
5112           i686-pc-linux-gnu)---and don't do anything else.
5113
5114       -dumpversion
5115           Print the compiler version (for example, 3.0)---and don't do
5116           anything else.
5117
5118       -dumpspecs
5119           Print the compiler's built-in specs---and don't do anything else.
5120           (This is used when GCC itself is being built.)
5121
5122       -fno-eliminate-unused-debug-types
5123           Normally, when producing DWARF 2 output, GCC avoids producing debug
5124           symbol output for types that are nowhere used in the source file
5125           being compiled.  Sometimes it is useful to have GCC emit debugging
5126           information for all types declared in a compilation unit,
5127           regardless of whether or not they are actually used in that
5128           compilation unit, for example if, in the debugger, you want to cast
5129           a value to a type that is not actually used in your program (but is
5130           declared).  More often, however, this results in a significant
5131           amount of wasted space.
5132
5133   Options That Control Optimization
5134       These options control various sorts of optimizations.
5135
5136       Without any optimization option, the compiler's goal is to reduce the
5137       cost of compilation and to make debugging produce the expected results.
5138       Statements are independent: if you stop the program with a breakpoint
5139       between statements, you can then assign a new value to any variable or
5140       change the program counter to any other statement in the function and
5141       get exactly the results you expect from the source code.
5142
5143       Turning on optimization flags makes the compiler attempt to improve the
5144       performance and/or code size at the expense of compilation time and
5145       possibly the ability to debug the program.
5146
5147       The compiler performs optimization based on the knowledge it has of the
5148       program.  Compiling multiple files at once to a single output file mode
5149       allows the compiler to use information gained from all of the files
5150       when compiling each of them.
5151
5152       Not all optimizations are controlled directly by a flag.  Only
5153       optimizations that have a flag are listed in this section.
5154
5155       Most optimizations are only enabled if an -O level is set on the
5156       command line.  Otherwise they are disabled, even if individual
5157       optimization flags are specified.
5158
5159       Depending on the target and how GCC was configured, a slightly
5160       different set of optimizations may be enabled at each -O level than
5161       those listed here.  You can invoke GCC with -Q --help=optimizers to
5162       find out the exact set of optimizations that are enabled at each level.
5163
5164       -O
5165       -O1 Optimize.  Optimizing compilation takes somewhat more time, and a
5166           lot more memory for a large function.
5167
5168           With -O, the compiler tries to reduce code size and execution time,
5169           without performing any optimizations that take a great deal of
5170           compilation time.
5171
5172           -O turns on the following optimization flags:
5173
5174           -fauto-inc-dec -fcompare-elim -fcprop-registers -fdce -fdefer-pop
5175           -fdelayed-branch -fdse -fguess-branch-probability -fif-conversion2
5176           -fif-conversion -fipa-pure-const -fipa-profile -fipa-reference
5177           -fmerge-constants -fsplit-wide-types -ftree-bit-ccp
5178           -ftree-builtin-call-dce -ftree-ccp -ftree-ch -ftree-copyrename
5179           -ftree-dce -ftree-dominator-opts -ftree-dse -ftree-forwprop
5180           -ftree-fre -ftree-phiprop -ftree-slsr -ftree-sra -ftree-pta
5181           -ftree-ter -funit-at-a-time
5182
5183           -O also turns on -fomit-frame-pointer on machines where doing so
5184           does not interfere with debugging.
5185
5186       -O2 Optimize even more.  GCC performs nearly all supported
5187           optimizations that do not involve a space-speed tradeoff.  As
5188           compared to -O, this option increases both compilation time and the
5189           performance of the generated code.
5190
5191           -O2 turns on all optimization flags specified by -O.  It also turns
5192           on the following optimization flags: -fthread-jumps
5193           -falign-functions  -falign-jumps -falign-loops  -falign-labels
5194           -fcaller-saves -fcrossjumping -fcse-follow-jumps  -fcse-skip-blocks
5195           -fdelete-null-pointer-checks -fdevirtualize
5196           -fexpensive-optimizations -fgcse  -fgcse-lm -fhoist-adjacent-loads
5197           -finline-small-functions -findirect-inlining -fipa-sra
5198           -foptimize-sibling-calls -fpartial-inlining -fpeephole2 -fregmove
5199           -freorder-blocks  -freorder-functions -frerun-cse-after-loop
5200           -fsched-interblock  -fsched-spec -fschedule-insns
5201           -fschedule-insns2 -fstrict-aliasing -fstrict-overflow
5202           -ftree-switch-conversion -ftree-tail-merge -ftree-pre -ftree-vrp
5203
5204           Please note the warning under -fgcse about invoking -O2 on programs
5205           that use computed gotos.
5206
5207       -O3 Optimize yet more.  -O3 turns on all optimizations specified by -O2
5208           and also turns on the -finline-functions, -funswitch-loops,
5209           -fpredictive-commoning, -fgcse-after-reload, -ftree-vectorize,
5210           -fvect-cost-model, -ftree-partial-pre and -fipa-cp-clone options.
5211
5212       -O0 Reduce compilation time and make debugging produce the expected
5213           results.  This is the default.
5214
5215       -Os Optimize for size.  -Os enables all -O2 optimizations that do not
5216           typically increase code size.  It also performs further
5217           optimizations designed to reduce code size.
5218
5219           -Os disables the following optimization flags: -falign-functions
5220           -falign-jumps  -falign-loops -falign-labels  -freorder-blocks
5221           -freorder-blocks-and-partition -fprefetch-loop-arrays
5222           -ftree-vect-loop-version
5223
5224       -Ofast
5225           Disregard strict standards compliance.  -Ofast enables all -O3
5226           optimizations.  It also enables optimizations that are not valid
5227           for all standard-compliant programs.  It turns on -ffast-math and
5228           the Fortran-specific -fno-protect-parens and -fstack-arrays.
5229
5230       -Og Optimize debugging experience.  -Og enables optimizations that do
5231           not interfere with debugging. It should be the optimization level
5232           of choice for the standard edit-compile-debug cycle, offering a
5233           reasonable level of optimization while maintaining fast compilation
5234           and a good debugging experience.
5235
5236           If you use multiple -O options, with or without level numbers, the
5237           last such option is the one that is effective.
5238
5239       Options of the form -fflag specify machine-independent flags.  Most
5240       flags have both positive and negative forms; the negative form of -ffoo
5241       is -fno-foo.  In the table below, only one of the forms is listed---the
5242       one you typically use.  You can figure out the other form by either
5243       removing no- or adding it.
5244
5245       The following options control specific optimizations.  They are either
5246       activated by -O options or are related to ones that are.  You can use
5247       the following flags in the rare cases when "fine-tuning" of
5248       optimizations to be performed is desired.
5249
5250       -fno-default-inline
5251           Do not make member functions inline by default merely because they
5252           are defined inside the class scope (C++ only).  Otherwise, when you
5253           specify -O, member functions defined inside class scope are
5254           compiled inline by default; i.e., you don't need to add inline in
5255           front of the member function name.
5256
5257       -fno-defer-pop
5258           Always pop the arguments to each function call as soon as that
5259           function returns.  For machines that must pop arguments after a
5260           function call, the compiler normally lets arguments accumulate on
5261           the stack for several function calls and pops them all at once.
5262
5263           Disabled at levels -O, -O2, -O3, -Os.
5264
5265       -fforward-propagate
5266           Perform a forward propagation pass on RTL.  The pass tries to
5267           combine two instructions and checks if the result can be
5268           simplified.  If loop unrolling is active, two passes are performed
5269           and the second is scheduled after loop unrolling.
5270
5271           This option is enabled by default at optimization levels -O, -O2,
5272           -O3, -Os.
5273
5274       -ffp-contract=style
5275           -ffp-contract=off disables floating-point expression contraction.
5276           -ffp-contract=fast enables floating-point expression contraction
5277           such as forming of fused multiply-add operations if the target has
5278           native support for them.  -ffp-contract=on enables floating-point
5279           expression contraction if allowed by the language standard.  This
5280           is currently not implemented and treated equal to
5281           -ffp-contract=off.
5282
5283           The default is -ffp-contract=fast.
5284
5285       -fomit-frame-pointer
5286           Don't keep the frame pointer in a register for functions that don't
5287           need one.  This avoids the instructions to save, set up and restore
5288           frame pointers; it also makes an extra register available in many
5289           functions.  It also makes debugging impossible on some machines.
5290
5291           On some machines, such as the VAX, this flag has no effect, because
5292           the standard calling sequence automatically handles the frame
5293           pointer and nothing is saved by pretending it doesn't exist.  The
5294           machine-description macro "FRAME_POINTER_REQUIRED" controls whether
5295           a target machine supports this flag.
5296
5297           Starting with GCC version 4.6, the default setting (when not
5298           optimizing for size) for 32-bit GNU/Linux x86 and 32-bit Darwin x86
5299           targets has been changed to -fomit-frame-pointer.  The default can
5300           be reverted to -fno-omit-frame-pointer by configuring GCC with the
5301           --enable-frame-pointer configure option.
5302
5303           Enabled at levels -O, -O2, -O3, -Os.
5304
5305       -foptimize-sibling-calls
5306           Optimize sibling and tail recursive calls.
5307
5308           Enabled at levels -O2, -O3, -Os.
5309
5310       -fno-inline
5311           Do not expand any functions inline apart from those marked with the
5312           "always_inline" attribute.  This is the default when not
5313           optimizing.
5314
5315           Single functions can be exempted from inlining by marking them with
5316           the "noinline" attribute.
5317
5318       -finline-small-functions
5319           Integrate functions into their callers when their body is smaller
5320           than expected function call code (so overall size of program gets
5321           smaller).  The compiler heuristically decides which functions are
5322           simple enough to be worth integrating in this way.  This inlining
5323           applies to all functions, even those not declared inline.
5324
5325           Enabled at level -O2.
5326
5327       -findirect-inlining
5328           Inline also indirect calls that are discovered to be known at
5329           compile time thanks to previous inlining.  This option has any
5330           effect only when inlining itself is turned on by the
5331           -finline-functions or -finline-small-functions options.
5332
5333           Enabled at level -O2.
5334
5335       -finline-functions
5336           Consider all functions for inlining, even if they are not declared
5337           inline.  The compiler heuristically decides which functions are
5338           worth integrating in this way.
5339
5340           If all calls to a given function are integrated, and the function
5341           is declared "static", then the function is normally not output as
5342           assembler code in its own right.
5343
5344           Enabled at level -O3.
5345
5346       -finline-functions-called-once
5347           Consider all "static" functions called once for inlining into their
5348           caller even if they are not marked "inline".  If a call to a given
5349           function is integrated, then the function is not output as
5350           assembler code in its own right.
5351
5352           Enabled at levels -O1, -O2, -O3 and -Os.
5353
5354       -fearly-inlining
5355           Inline functions marked by "always_inline" and functions whose body
5356           seems smaller than the function call overhead early before doing
5357           -fprofile-generate instrumentation and real inlining pass.  Doing
5358           so makes profiling significantly cheaper and usually inlining
5359           faster on programs having large chains of nested wrapper functions.
5360
5361           Enabled by default.
5362
5363       -fipa-sra
5364           Perform interprocedural scalar replacement of aggregates, removal
5365           of unused parameters and replacement of parameters passed by
5366           reference by parameters passed by value.
5367
5368           Enabled at levels -O2, -O3 and -Os.
5369
5370       -finline-limit=n
5371           By default, GCC limits the size of functions that can be inlined.
5372           This flag allows coarse control of this limit.  n is the size of
5373           functions that can be inlined in number of pseudo instructions.
5374
5375           Inlining is actually controlled by a number of parameters, which
5376           may be specified individually by using --param name=value.  The
5377           -finline-limit=n option sets some of these parameters as follows:
5378
5379           max-inline-insns-single
5380               is set to n/2.
5381
5382           max-inline-insns-auto
5383               is set to n/2.
5384
5385           See below for a documentation of the individual parameters
5386           controlling inlining and for the defaults of these parameters.
5387
5388           Note: there may be no value to -finline-limit that results in
5389           default behavior.
5390
5391           Note: pseudo instruction represents, in this particular context, an
5392           abstract measurement of function's size.  In no way does it
5393           represent a count of assembly instructions and as such its exact
5394           meaning might change from one release to an another.
5395
5396       -fno-keep-inline-dllexport
5397           This is a more fine-grained version of -fkeep-inline-functions,
5398           which applies only to functions that are declared using the
5399           "dllexport" attribute or declspec
5400
5401       -fkeep-inline-functions
5402           In C, emit "static" functions that are declared "inline" into the
5403           object file, even if the function has been inlined into all of its
5404           callers.  This switch does not affect functions using the "extern
5405           inline" extension in GNU C90.  In C++, emit any and all inline
5406           functions into the object file.
5407
5408       -fkeep-static-consts
5409           Emit variables declared "static const" when optimization isn't
5410           turned on, even if the variables aren't referenced.
5411
5412           GCC enables this option by default.  If you want to force the
5413           compiler to check if a variable is referenced, regardless of
5414           whether or not optimization is turned on, use the
5415           -fno-keep-static-consts option.
5416
5417       -fmerge-constants
5418           Attempt to merge identical constants (string constants and
5419           floating-point constants) across compilation units.
5420
5421           This option is the default for optimized compilation if the
5422           assembler and linker support it.  Use -fno-merge-constants to
5423           inhibit this behavior.
5424
5425           Enabled at levels -O, -O2, -O3, -Os.
5426
5427       -fmerge-all-constants
5428           Attempt to merge identical constants and identical variables.
5429
5430           This option implies -fmerge-constants.  In addition to
5431           -fmerge-constants this considers e.g. even constant initialized
5432           arrays or initialized constant variables with integral or floating-
5433           point types.  Languages like C or C++ require each variable,
5434           including multiple instances of the same variable in recursive
5435           calls, to have distinct locations, so using this option results in
5436           non-conforming behavior.
5437
5438       -fmodulo-sched
5439           Perform swing modulo scheduling immediately before the first
5440           scheduling pass.  This pass looks at innermost loops and reorders
5441           their instructions by overlapping different iterations.
5442
5443       -fmodulo-sched-allow-regmoves
5444           Perform more aggressive SMS-based modulo scheduling with register
5445           moves allowed.  By setting this flag certain anti-dependences edges
5446           are deleted, which triggers the generation of reg-moves based on
5447           the life-range analysis.  This option is effective only with
5448           -fmodulo-sched enabled.
5449
5450       -fno-branch-count-reg
5451           Do not use "decrement and branch" instructions on a count register,
5452           but instead generate a sequence of instructions that decrement a
5453           register, compare it against zero, then branch based upon the
5454           result.  This option is only meaningful on architectures that
5455           support such instructions, which include x86, PowerPC, IA-64 and
5456           S/390.
5457
5458           The default is -fbranch-count-reg.
5459
5460       -fno-function-cse
5461           Do not put function addresses in registers; make each instruction
5462           that calls a constant function contain the function's address
5463           explicitly.
5464
5465           This option results in less efficient code, but some strange hacks
5466           that alter the assembler output may be confused by the
5467           optimizations performed when this option is not used.
5468
5469           The default is -ffunction-cse
5470
5471       -fno-zero-initialized-in-bss
5472           If the target supports a BSS section, GCC by default puts variables
5473           that are initialized to zero into BSS.  This can save space in the
5474           resulting code.
5475
5476           This option turns off this behavior because some programs
5477           explicitly rely on variables going to the data section---e.g., so
5478           that the resulting executable can find the beginning of that
5479           section and/or make assumptions based on that.
5480
5481           The default is -fzero-initialized-in-bss.
5482
5483       -fmudflap -fmudflapth -fmudflapir
5484           For front-ends that support it (C and C++), instrument all risky
5485           pointer/array dereferencing operations, some standard library
5486           string/heap functions, and some other associated constructs with
5487           range/validity tests.  Modules so instrumented should be immune to
5488           buffer overflows, invalid heap use, and some other classes of C/C++
5489           programming errors.  The instrumentation relies on a separate
5490           runtime library (libmudflap), which is linked into a program if
5491           -fmudflap is given at link time.  Run-time behavior of the
5492           instrumented program is controlled by the MUDFLAP_OPTIONS
5493           environment variable.  See "env MUDFLAP_OPTIONS=-help a.out" for
5494           its options.
5495
5496           Use -fmudflapth instead of -fmudflap to compile and to link if your
5497           program is multi-threaded.  Use -fmudflapir, in addition to
5498           -fmudflap or -fmudflapth, if instrumentation should ignore pointer
5499           reads.  This produces less instrumentation (and therefore faster
5500           execution) and still provides some protection against outright
5501           memory corrupting writes, but allows erroneously read data to
5502           propagate within a program.
5503
5504       -fthread-jumps
5505           Perform optimizations that check to see if a jump branches to a
5506           location where another comparison subsumed by the first is found.
5507           If so, the first branch is redirected to either the destination of
5508           the second branch or a point immediately following it, depending on
5509           whether the condition is known to be true or false.
5510
5511           Enabled at levels -O2, -O3, -Os.
5512
5513       -fsplit-wide-types
5514           When using a type that occupies multiple registers, such as "long
5515           long" on a 32-bit system, split the registers apart and allocate
5516           them independently.  This normally generates better code for those
5517           types, but may make debugging more difficult.
5518
5519           Enabled at levels -O, -O2, -O3, -Os.
5520
5521       -fcse-follow-jumps
5522           In common subexpression elimination (CSE), scan through jump
5523           instructions when the target of the jump is not reached by any
5524           other path.  For example, when CSE encounters an "if" statement
5525           with an "else" clause, CSE follows the jump when the condition
5526           tested is false.
5527
5528           Enabled at levels -O2, -O3, -Os.
5529
5530       -fcse-skip-blocks
5531           This is similar to -fcse-follow-jumps, but causes CSE to follow
5532           jumps that conditionally skip over blocks.  When CSE encounters a
5533           simple "if" statement with no else clause, -fcse-skip-blocks causes
5534           CSE to follow the jump around the body of the "if".
5535
5536           Enabled at levels -O2, -O3, -Os.
5537
5538       -frerun-cse-after-loop
5539           Re-run common subexpression elimination after loop optimizations
5540           are performed.
5541
5542           Enabled at levels -O2, -O3, -Os.
5543
5544       -fgcse
5545           Perform a global common subexpression elimination pass.  This pass
5546           also performs global constant and copy propagation.
5547
5548           Note: When compiling a program using computed gotos, a GCC
5549           extension, you may get better run-time performance if you disable
5550           the global common subexpression elimination pass by adding
5551           -fno-gcse to the command line.
5552
5553           Enabled at levels -O2, -O3, -Os.
5554
5555       -fgcse-lm
5556           When -fgcse-lm is enabled, global common subexpression elimination
5557           attempts to move loads that are only killed by stores into
5558           themselves.  This allows a loop containing a load/store sequence to
5559           be changed to a load outside the loop, and a copy/store within the
5560           loop.
5561
5562           Enabled by default when -fgcse is enabled.
5563
5564       -fgcse-sm
5565           When -fgcse-sm is enabled, a store motion pass is run after global
5566           common subexpression elimination.  This pass attempts to move
5567           stores out of loops.  When used in conjunction with -fgcse-lm,
5568           loops containing a load/store sequence can be changed to a load
5569           before the loop and a store after the loop.
5570
5571           Not enabled at any optimization level.
5572
5573       -fgcse-las
5574           When -fgcse-las is enabled, the global common subexpression
5575           elimination pass eliminates redundant loads that come after stores
5576           to the same memory location (both partial and full redundancies).
5577
5578           Not enabled at any optimization level.
5579
5580       -fgcse-after-reload
5581           When -fgcse-after-reload is enabled, a redundant load elimination
5582           pass is performed after reload.  The purpose of this pass is to
5583           clean up redundant spilling.
5584
5585       -faggressive-loop-optimizations
5586           This option tells the loop optimizer to use language constraints to
5587           derive bounds for the number of iterations of a loop.  This assumes
5588           that loop code does not invoke undefined behavior by for example
5589           causing signed integer overflows or out-of-bound array accesses.
5590           The bounds for the number of iterations of a loop are used to guide
5591           loop unrolling and peeling and loop exit test optimizations.  This
5592           option is enabled by default.
5593
5594       -funsafe-loop-optimizations
5595           This option tells the loop optimizer to assume that loop indices do
5596           not overflow, and that loops with nontrivial exit condition are not
5597           infinite.  This enables a wider range of loop optimizations even if
5598           the loop optimizer itself cannot prove that these assumptions are
5599           valid.  If you use -Wunsafe-loop-optimizations, the compiler warns
5600           you if it finds this kind of loop.
5601
5602       -fcrossjumping
5603           Perform cross-jumping transformation.  This transformation unifies
5604           equivalent code and saves code size.  The resulting code may or may
5605           not perform better than without cross-jumping.
5606
5607           Enabled at levels -O2, -O3, -Os.
5608
5609       -fauto-inc-dec
5610           Combine increments or decrements of addresses with memory accesses.
5611           This pass is always skipped on architectures that do not have
5612           instructions to support this.  Enabled by default at -O and higher
5613           on architectures that support this.
5614
5615       -fdce
5616           Perform dead code elimination (DCE) on RTL.  Enabled by default at
5617           -O and higher.
5618
5619       -fdse
5620           Perform dead store elimination (DSE) on RTL.  Enabled by default at
5621           -O and higher.
5622
5623       -fif-conversion
5624           Attempt to transform conditional jumps into branch-less
5625           equivalents.  This includes use of conditional moves, min, max, set
5626           flags and abs instructions, and some tricks doable by standard
5627           arithmetics.  The use of conditional execution on chips where it is
5628           available is controlled by "if-conversion2".
5629
5630           Enabled at levels -O, -O2, -O3, -Os.
5631
5632       -fif-conversion2
5633           Use conditional execution (where available) to transform
5634           conditional jumps into branch-less equivalents.
5635
5636           Enabled at levels -O, -O2, -O3, -Os.
5637
5638       -fdelete-null-pointer-checks
5639           Assume that programs cannot safely dereference null pointers, and
5640           that no code or data element resides there.  This enables simple
5641           constant folding optimizations at all optimization levels.  In
5642           addition, other optimization passes in GCC use this flag to control
5643           global dataflow analyses that eliminate useless checks for null
5644           pointers; these assume that if a pointer is checked after it has
5645           already been dereferenced, it cannot be null.
5646
5647           Note however that in some environments this assumption is not true.
5648           Use -fno-delete-null-pointer-checks to disable this optimization
5649           for programs that depend on that behavior.
5650
5651           Some targets, especially embedded ones, disable this option at all
5652           levels.  Otherwise it is enabled at all levels: -O0, -O1, -O2, -O3,
5653           -Os.  Passes that use the information are enabled independently at
5654           different optimization levels.
5655
5656       -fdevirtualize
5657           Attempt to convert calls to virtual functions to direct calls.
5658           This is done both within a procedure and interprocedurally as part
5659           of indirect inlining ("-findirect-inlining") and interprocedural
5660           constant propagation (-fipa-cp).  Enabled at levels -O2, -O3, -Os.
5661
5662       -fexpensive-optimizations
5663           Perform a number of minor optimizations that are relatively
5664           expensive.
5665
5666           Enabled at levels -O2, -O3, -Os.
5667
5668       -free
5669           Attempt to remove redundant extension instructions.  This is
5670           especially helpful for the x86-64 architecture, which implicitly
5671           zero-extends in 64-bit registers after writing to their lower
5672           32-bit half.
5673
5674           Enabled for x86 at levels -O2, -O3.
5675
5676       -foptimize-register-move
5677       -fregmove
5678           Attempt to reassign register numbers in move instructions and as
5679           operands of other simple instructions in order to maximize the
5680           amount of register tying.  This is especially helpful on machines
5681           with two-operand instructions.
5682
5683           Note -fregmove and -foptimize-register-move are the same
5684           optimization.
5685
5686           Enabled at levels -O2, -O3, -Os.
5687
5688       -fira-algorithm=algorithm
5689           Use the specified coloring algorithm for the integrated register
5690           allocator.  The algorithm argument can be priority, which specifies
5691           Chow's priority coloring, or CB, which specifies Chaitin-Briggs
5692           coloring.  Chaitin-Briggs coloring is not implemented for all
5693           architectures, but for those targets that do support it, it is the
5694           default because it generates better code.
5695
5696       -fira-region=region
5697           Use specified regions for the integrated register allocator.  The
5698           region argument should be one of the following:
5699
5700           all Use all loops as register allocation regions.  This can give
5701               the best results for machines with a small and/or irregular
5702               register set.
5703
5704           mixed
5705               Use all loops except for loops with small register pressure as
5706               the regions.  This value usually gives the best results in most
5707               cases and for most architectures, and is enabled by default
5708               when compiling with optimization for speed (-O, -O2, ...).
5709
5710           one Use all functions as a single region.  This typically results
5711               in the smallest code size, and is enabled by default for -Os or
5712               -O0.
5713
5714       -fira-hoist-pressure
5715           Use IRA to evaluate register pressure in the code hoisting pass for
5716           decisions to hoist expressions.  This option usually results in
5717           smaller code, but it can slow the compiler down.
5718
5719           This option is enabled at level -Os for all targets.
5720
5721       -fira-loop-pressure
5722           Use IRA to evaluate register pressure in loops for decisions to
5723           move loop invariants.  This option usually results in generation of
5724           faster and smaller code on machines with large register files (>=
5725           32 registers), but it can slow the compiler down.
5726
5727           This option is enabled at level -O3 for some targets.
5728
5729       -fno-ira-share-save-slots
5730           Disable sharing of stack slots used for saving call-used hard
5731           registers living through a call.  Each hard register gets a
5732           separate stack slot, and as a result function stack frames are
5733           larger.
5734
5735       -fno-ira-share-spill-slots
5736           Disable sharing of stack slots allocated for pseudo-registers.
5737           Each pseudo-register that does not get a hard register gets a
5738           separate stack slot, and as a result function stack frames are
5739           larger.
5740
5741       -fira-verbose=n
5742           Control the verbosity of the dump file for the integrated register
5743           allocator.  The default value is 5.  If the value n is greater or
5744           equal to 10, the dump output is sent to stderr using the same
5745           format as n minus 10.
5746
5747       -fdelayed-branch
5748           If supported for the target machine, attempt to reorder
5749           instructions to exploit instruction slots available after delayed
5750           branch instructions.
5751
5752           Enabled at levels -O, -O2, -O3, -Os.
5753
5754       -fschedule-insns
5755           If supported for the target machine, attempt to reorder
5756           instructions to eliminate execution stalls due to required data
5757           being unavailable.  This helps machines that have slow floating
5758           point or memory load instructions by allowing other instructions to
5759           be issued until the result of the load or floating-point
5760           instruction is required.
5761
5762           Enabled at levels -O2, -O3.
5763
5764       -fschedule-insns2
5765           Similar to -fschedule-insns, but requests an additional pass of
5766           instruction scheduling after register allocation has been done.
5767           This is especially useful on machines with a relatively small
5768           number of registers and where memory load instructions take more
5769           than one cycle.
5770
5771           Enabled at levels -O2, -O3, -Os.
5772
5773       -fno-sched-interblock
5774           Don't schedule instructions across basic blocks.  This is normally
5775           enabled by default when scheduling before register allocation, i.e.
5776           with -fschedule-insns or at -O2 or higher.
5777
5778       -fno-sched-spec
5779           Don't allow speculative motion of non-load instructions.  This is
5780           normally enabled by default when scheduling before register
5781           allocation, i.e.  with -fschedule-insns or at -O2 or higher.
5782
5783       -fsched-pressure
5784           Enable register pressure sensitive insn scheduling before register
5785           allocation.  This only makes sense when scheduling before register
5786           allocation is enabled, i.e. with -fschedule-insns or at -O2 or
5787           higher.  Usage of this option can improve the generated code and
5788           decrease its size by preventing register pressure increase above
5789           the number of available hard registers and subsequent spills in
5790           register allocation.
5791
5792       -fsched-spec-load
5793           Allow speculative motion of some load instructions.  This only
5794           makes sense when scheduling before register allocation, i.e. with
5795           -fschedule-insns or at -O2 or higher.
5796
5797       -fsched-spec-load-dangerous
5798           Allow speculative motion of more load instructions.  This only
5799           makes sense when scheduling before register allocation, i.e. with
5800           -fschedule-insns or at -O2 or higher.
5801
5802       -fsched-stalled-insns
5803       -fsched-stalled-insns=n
5804           Define how many insns (if any) can be moved prematurely from the
5805           queue of stalled insns into the ready list during the second
5806           scheduling pass.  -fno-sched-stalled-insns means that no insns are
5807           moved prematurely, -fsched-stalled-insns=0 means there is no limit
5808           on how many queued insns can be moved prematurely.
5809           -fsched-stalled-insns without a value is equivalent to
5810           -fsched-stalled-insns=1.
5811
5812       -fsched-stalled-insns-dep
5813       -fsched-stalled-insns-dep=n
5814           Define how many insn groups (cycles) are examined for a dependency
5815           on a stalled insn that is a candidate for premature removal from
5816           the queue of stalled insns.  This has an effect only during the
5817           second scheduling pass, and only if -fsched-stalled-insns is used.
5818           -fno-sched-stalled-insns-dep is equivalent to
5819           -fsched-stalled-insns-dep=0.  -fsched-stalled-insns-dep without a
5820           value is equivalent to -fsched-stalled-insns-dep=1.
5821
5822       -fsched2-use-superblocks
5823           When scheduling after register allocation, use superblock
5824           scheduling.  This allows motion across basic block boundaries,
5825           resulting in faster schedules.  This option is experimental, as not
5826           all machine descriptions used by GCC model the CPU closely enough
5827           to avoid unreliable results from the algorithm.
5828
5829           This only makes sense when scheduling after register allocation,
5830           i.e. with -fschedule-insns2 or at -O2 or higher.
5831
5832       -fsched-group-heuristic
5833           Enable the group heuristic in the scheduler.  This heuristic favors
5834           the instruction that belongs to a schedule group.  This is enabled
5835           by default when scheduling is enabled, i.e. with -fschedule-insns
5836           or -fschedule-insns2 or at -O2 or higher.
5837
5838       -fsched-critical-path-heuristic
5839           Enable the critical-path heuristic in the scheduler.  This
5840           heuristic favors instructions on the critical path.  This is
5841           enabled by default when scheduling is enabled, i.e. with
5842           -fschedule-insns or -fschedule-insns2 or at -O2 or higher.
5843
5844       -fsched-spec-insn-heuristic
5845           Enable the speculative instruction heuristic in the scheduler.
5846           This heuristic favors speculative instructions with greater
5847           dependency weakness.  This is enabled by default when scheduling is
5848           enabled, i.e.  with -fschedule-insns or -fschedule-insns2 or at -O2
5849           or higher.
5850
5851       -fsched-rank-heuristic
5852           Enable the rank heuristic in the scheduler.  This heuristic favors
5853           the instruction belonging to a basic block with greater size or
5854           frequency.  This is enabled by default when scheduling is enabled,
5855           i.e.  with -fschedule-insns or -fschedule-insns2 or at -O2 or
5856           higher.
5857
5858       -fsched-last-insn-heuristic
5859           Enable the last-instruction heuristic in the scheduler.  This
5860           heuristic favors the instruction that is less dependent on the last
5861           instruction scheduled.  This is enabled by default when scheduling
5862           is enabled, i.e. with -fschedule-insns or -fschedule-insns2 or at
5863           -O2 or higher.
5864
5865       -fsched-dep-count-heuristic
5866           Enable the dependent-count heuristic in the scheduler.  This
5867           heuristic favors the instruction that has more instructions
5868           depending on it.  This is enabled by default when scheduling is
5869           enabled, i.e.  with -fschedule-insns or -fschedule-insns2 or at -O2
5870           or higher.
5871
5872       -freschedule-modulo-scheduled-loops
5873           Modulo scheduling is performed before traditional scheduling.  If a
5874           loop is modulo scheduled, later scheduling passes may change its
5875           schedule.  Use this option to control that behavior.
5876
5877       -fselective-scheduling
5878           Schedule instructions using selective scheduling algorithm.
5879           Selective scheduling runs instead of the first scheduler pass.
5880
5881       -fselective-scheduling2
5882           Schedule instructions using selective scheduling algorithm.
5883           Selective scheduling runs instead of the second scheduler pass.
5884
5885       -fsel-sched-pipelining
5886           Enable software pipelining of innermost loops during selective
5887           scheduling.  This option has no effect unless one of
5888           -fselective-scheduling or -fselective-scheduling2 is turned on.
5889
5890       -fsel-sched-pipelining-outer-loops
5891           When pipelining loops during selective scheduling, also pipeline
5892           outer loops.  This option has no effect unless
5893           -fsel-sched-pipelining is turned on.
5894
5895       -fshrink-wrap
5896           Emit function prologues only before parts of the function that need
5897           it, rather than at the top of the function.  This flag is enabled
5898           by default at -O and higher.
5899
5900       -fcaller-saves
5901           Enable allocation of values to registers that are clobbered by
5902           function calls, by emitting extra instructions to save and restore
5903           the registers around such calls.  Such allocation is done only when
5904           it seems to result in better code.
5905
5906           This option is always enabled by default on certain machines,
5907           usually those which have no call-preserved registers to use
5908           instead.
5909
5910           Enabled at levels -O2, -O3, -Os.
5911
5912       -fcombine-stack-adjustments
5913           Tracks stack adjustments (pushes and pops) and stack memory
5914           references and then tries to find ways to combine them.
5915
5916           Enabled by default at -O1 and higher.
5917
5918       -fconserve-stack
5919           Attempt to minimize stack usage.  The compiler attempts to use less
5920           stack space, even if that makes the program slower.  This option
5921           implies setting the large-stack-frame parameter to 100 and the
5922           large-stack-frame-growth parameter to 400.
5923
5924       -ftree-reassoc
5925           Perform reassociation on trees.  This flag is enabled by default at
5926           -O and higher.
5927
5928       -ftree-pre
5929           Perform partial redundancy elimination (PRE) on trees.  This flag
5930           is enabled by default at -O2 and -O3.
5931
5932       -ftree-partial-pre
5933           Make partial redundancy elimination (PRE) more aggressive.  This
5934           flag is enabled by default at -O3.
5935
5936       -ftree-forwprop
5937           Perform forward propagation on trees.  This flag is enabled by
5938           default at -O and higher.
5939
5940       -ftree-fre
5941           Perform full redundancy elimination (FRE) on trees.  The difference
5942           between FRE and PRE is that FRE only considers expressions that are
5943           computed on all paths leading to the redundant computation.  This
5944           analysis is faster than PRE, though it exposes fewer redundancies.
5945           This flag is enabled by default at -O and higher.
5946
5947       -ftree-phiprop
5948           Perform hoisting of loads from conditional pointers on trees.  This
5949           pass is enabled by default at -O and higher.
5950
5951       -fhoist-adjacent-loads
5952           Speculatively hoist loads from both branches of an if-then-else if
5953           the loads are from adjacent locations in the same structure and the
5954           target architecture has a conditional move instruction.  This flag
5955           is enabled by default at -O2 and higher.
5956
5957       -ftree-copy-prop
5958           Perform copy propagation on trees.  This pass eliminates
5959           unnecessary copy operations.  This flag is enabled by default at -O
5960           and higher.
5961
5962       -fipa-pure-const
5963           Discover which functions are pure or constant.  Enabled by default
5964           at -O and higher.
5965
5966       -fipa-reference
5967           Discover which static variables do not escape the compilation unit.
5968           Enabled by default at -O and higher.
5969
5970       -fipa-pta
5971           Perform interprocedural pointer analysis and interprocedural
5972           modification and reference analysis.  This option can cause
5973           excessive memory and compile-time usage on large compilation units.
5974           It is not enabled by default at any optimization level.
5975
5976       -fipa-profile
5977           Perform interprocedural profile propagation.  The functions called
5978           only from cold functions are marked as cold. Also functions
5979           executed once (such as "cold", "noreturn", static constructors or
5980           destructors) are identified. Cold functions and loop less parts of
5981           functions executed once are then optimized for size.  Enabled by
5982           default at -O and higher.
5983
5984       -fipa-cp
5985           Perform interprocedural constant propagation.  This optimization
5986           analyzes the program to determine when values passed to functions
5987           are constants and then optimizes accordingly.  This optimization
5988           can substantially increase performance if the application has
5989           constants passed to functions.  This flag is enabled by default at
5990           -O2, -Os and -O3.
5991
5992       -fipa-cp-clone
5993           Perform function cloning to make interprocedural constant
5994           propagation stronger.  When enabled, interprocedural constant
5995           propagation performs function cloning when externally visible
5996           function can be called with constant arguments.  Because this
5997           optimization can create multiple copies of functions, it may
5998           significantly increase code size (see --param
5999           ipcp-unit-growth=value).  This flag is enabled by default at -O3.
6000
6001       -ftree-sink
6002           Perform forward store motion  on trees.  This flag is enabled by
6003           default at -O and higher.
6004
6005       -ftree-bit-ccp
6006           Perform sparse conditional bit constant propagation on trees and
6007           propagate pointer alignment information.  This pass only operates
6008           on local scalar variables and is enabled by default at -O and
6009           higher.  It requires that -ftree-ccp is enabled.
6010
6011       -ftree-ccp
6012           Perform sparse conditional constant propagation (CCP) on trees.
6013           This pass only operates on local scalar variables and is enabled by
6014           default at -O and higher.
6015
6016       -ftree-switch-conversion
6017           Perform conversion of simple initializations in a switch to
6018           initializations from a scalar array.  This flag is enabled by
6019           default at -O2 and higher.
6020
6021       -ftree-tail-merge
6022           Look for identical code sequences.  When found, replace one with a
6023           jump to the other.  This optimization is known as tail merging or
6024           cross jumping.  This flag is enabled by default at -O2 and higher.
6025           The compilation time in this pass can be limited using max-tail-
6026           merge-comparisons parameter and max-tail-merge-iterations
6027           parameter.
6028
6029       -ftree-dce
6030           Perform dead code elimination (DCE) on trees.  This flag is enabled
6031           by default at -O and higher.
6032
6033       -ftree-builtin-call-dce
6034           Perform conditional dead code elimination (DCE) for calls to built-
6035           in functions that may set "errno" but are otherwise side-effect
6036           free.  This flag is enabled by default at -O2 and higher if -Os is
6037           not also specified.
6038
6039       -ftree-dominator-opts
6040           Perform a variety of simple scalar cleanups (constant/copy
6041           propagation, redundancy elimination, range propagation and
6042           expression simplification) based on a dominator tree traversal.
6043           This also performs jump threading (to reduce jumps to jumps). This
6044           flag is enabled by default at -O and higher.
6045
6046       -ftree-dse
6047           Perform dead store elimination (DSE) on trees.  A dead store is a
6048           store into a memory location that is later overwritten by another
6049           store without any intervening loads.  In this case the earlier
6050           store can be deleted.  This flag is enabled by default at -O and
6051           higher.
6052
6053       -ftree-ch
6054           Perform loop header copying on trees.  This is beneficial since it
6055           increases effectiveness of code motion optimizations.  It also
6056           saves one jump.  This flag is enabled by default at -O and higher.
6057           It is not enabled for -Os, since it usually increases code size.
6058
6059       -ftree-loop-optimize
6060           Perform loop optimizations on trees.  This flag is enabled by
6061           default at -O and higher.
6062
6063       -ftree-loop-linear
6064           Perform loop interchange transformations on tree.  Same as
6065           -floop-interchange.  To use this code transformation, GCC has to be
6066           configured with --with-ppl and --with-cloog to enable the Graphite
6067           loop transformation infrastructure.
6068
6069       -floop-interchange
6070           Perform loop interchange transformations on loops.  Interchanging
6071           two nested loops switches the inner and outer loops.  For example,
6072           given a loop like:
6073
6074                   DO J = 1, M
6075                     DO I = 1, N
6076                       A(J, I) = A(J, I) * C
6077                     ENDDO
6078                   ENDDO
6079
6080           loop interchange transforms the loop as if it were written:
6081
6082                   DO I = 1, N
6083                     DO J = 1, M
6084                       A(J, I) = A(J, I) * C
6085                     ENDDO
6086                   ENDDO
6087
6088           which can be beneficial when "N" is larger than the caches, because
6089           in Fortran, the elements of an array are stored in memory
6090           contiguously by column, and the original loop iterates over rows,
6091           potentially creating at each access a cache miss.  This
6092           optimization applies to all the languages supported by GCC and is
6093           not limited to Fortran.  To use this code transformation, GCC has
6094           to be configured with --with-ppl and --with-cloog to enable the
6095           Graphite loop transformation infrastructure.
6096
6097       -floop-strip-mine
6098           Perform loop strip mining transformations on loops.  Strip mining
6099           splits a loop into two nested loops.  The outer loop has strides
6100           equal to the strip size and the inner loop has strides of the
6101           original loop within a strip.  The strip length can be changed
6102           using the loop-block-tile-size parameter.  For example, given a
6103           loop like:
6104
6105                   DO I = 1, N
6106                     A(I) = A(I) + C
6107                   ENDDO
6108
6109           loop strip mining transforms the loop as if it were written:
6110
6111                   DO II = 1, N, 51
6112                     DO I = II, min (II + 50, N)
6113                       A(I) = A(I) + C
6114                     ENDDO
6115                   ENDDO
6116
6117           This optimization applies to all the languages supported by GCC and
6118           is not limited to Fortran.  To use this code transformation, GCC
6119           has to be configured with --with-ppl and --with-cloog to enable the
6120           Graphite loop transformation infrastructure.
6121
6122       -floop-block
6123           Perform loop blocking transformations on loops.  Blocking strip
6124           mines each loop in the loop nest such that the memory accesses of
6125           the element loops fit inside caches.  The strip length can be
6126           changed using the loop-block-tile-size parameter.  For example,
6127           given a loop like:
6128
6129                   DO I = 1, N
6130                     DO J = 1, M
6131                       A(J, I) = B(I) + C(J)
6132                     ENDDO
6133                   ENDDO
6134
6135           loop blocking transforms the loop as if it were written:
6136
6137                   DO II = 1, N, 51
6138                     DO JJ = 1, M, 51
6139                       DO I = II, min (II + 50, N)
6140                         DO J = JJ, min (JJ + 50, M)
6141                           A(J, I) = B(I) + C(J)
6142                         ENDDO
6143                       ENDDO
6144                     ENDDO
6145                   ENDDO
6146
6147           which can be beneficial when "M" is larger than the caches, because
6148           the innermost loop iterates over a smaller amount of data which can
6149           be kept in the caches.  This optimization applies to all the
6150           languages supported by GCC and is not limited to Fortran.  To use
6151           this code transformation, GCC has to be configured with --with-ppl
6152           and --with-cloog to enable the Graphite loop transformation
6153           infrastructure.
6154
6155       -fgraphite-identity
6156           Enable the identity transformation for graphite.  For every SCoP we
6157           generate the polyhedral representation and transform it back to
6158           gimple.  Using -fgraphite-identity we can check the costs or
6159           benefits of the GIMPLE -> GRAPHITE -> GIMPLE transformation.  Some
6160           minimal optimizations are also performed by the code generator
6161           CLooG, like index splitting and dead code elimination in loops.
6162
6163       -floop-nest-optimize
6164           Enable the ISL based loop nest optimizer.  This is a generic loop
6165           nest optimizer based on the Pluto optimization algorithms.  It
6166           calculates a loop structure optimized for data-locality and
6167           parallelism.  This option is experimental.
6168
6169       -floop-parallelize-all
6170           Use the Graphite data dependence analysis to identify loops that
6171           can be parallelized.  Parallelize all the loops that can be
6172           analyzed to not contain loop carried dependences without checking
6173           that it is profitable to parallelize the loops.
6174
6175       -fcheck-data-deps
6176           Compare the results of several data dependence analyzers.  This
6177           option is used for debugging the data dependence analyzers.
6178
6179       -ftree-loop-if-convert
6180           Attempt to transform conditional jumps in the innermost loops to
6181           branch-less equivalents.  The intent is to remove control-flow from
6182           the innermost loops in order to improve the ability of the
6183           vectorization pass to handle these loops.  This is enabled by
6184           default if vectorization is enabled.
6185
6186       -ftree-loop-if-convert-stores
6187           Attempt to also if-convert conditional jumps containing memory
6188           writes.  This transformation can be unsafe for multi-threaded
6189           programs as it transforms conditional memory writes into
6190           unconditional memory writes.  For example,
6191
6192                   for (i = 0; i < N; i++)
6193                     if (cond)
6194                       A[i] = expr;
6195
6196           is transformed to
6197
6198                   for (i = 0; i < N; i++)
6199                     A[i] = cond ? expr : A[i];
6200
6201           potentially producing data races.
6202
6203       -ftree-loop-distribution
6204           Perform loop distribution.  This flag can improve cache performance
6205           on big loop bodies and allow further loop optimizations, like
6206           parallelization or vectorization, to take place.  For example, the
6207           loop
6208
6209                   DO I = 1, N
6210                     A(I) = B(I) + C
6211                     D(I) = E(I) * F
6212                   ENDDO
6213
6214           is transformed to
6215
6216                   DO I = 1, N
6217                      A(I) = B(I) + C
6218                   ENDDO
6219                   DO I = 1, N
6220                      D(I) = E(I) * F
6221                   ENDDO
6222
6223       -ftree-loop-distribute-patterns
6224           Perform loop distribution of patterns that can be code generated
6225           with calls to a library.  This flag is enabled by default at -O3.
6226
6227           This pass distributes the initialization loops and generates a call
6228           to memset zero.  For example, the loop
6229
6230                   DO I = 1, N
6231                     A(I) = 0
6232                     B(I) = A(I) + I
6233                   ENDDO
6234
6235           is transformed to
6236
6237                   DO I = 1, N
6238                      A(I) = 0
6239                   ENDDO
6240                   DO I = 1, N
6241                      B(I) = A(I) + I
6242                   ENDDO
6243
6244           and the initialization loop is transformed into a call to memset
6245           zero.
6246
6247       -ftree-loop-im
6248           Perform loop invariant motion on trees.  This pass moves only
6249           invariants that are hard to handle at RTL level (function calls,
6250           operations that expand to nontrivial sequences of insns).  With
6251           -funswitch-loops it also moves operands of conditions that are
6252           invariant out of the loop, so that we can use just trivial
6253           invariantness analysis in loop unswitching.  The pass also includes
6254           store motion.
6255
6256       -ftree-loop-ivcanon
6257           Create a canonical counter for number of iterations in loops for
6258           which determining number of iterations requires complicated
6259           analysis.  Later optimizations then may determine the number
6260           easily.  Useful especially in connection with unrolling.
6261
6262       -fivopts
6263           Perform induction variable optimizations (strength reduction,
6264           induction variable merging and induction variable elimination) on
6265           trees.
6266
6267       -ftree-parallelize-loops=n
6268           Parallelize loops, i.e., split their iteration space to run in n
6269           threads.  This is only possible for loops whose iterations are
6270           independent and can be arbitrarily reordered.  The optimization is
6271           only profitable on multiprocessor machines, for loops that are CPU-
6272           intensive, rather than constrained e.g. by memory bandwidth.  This
6273           option implies -pthread, and thus is only supported on targets that
6274           have support for -pthread.
6275
6276       -ftree-pta
6277           Perform function-local points-to analysis on trees.  This flag is
6278           enabled by default at -O and higher.
6279
6280       -ftree-sra
6281           Perform scalar replacement of aggregates.  This pass replaces
6282           structure references with scalars to prevent committing structures
6283           to memory too early.  This flag is enabled by default at -O and
6284           higher.
6285
6286       -ftree-copyrename
6287           Perform copy renaming on trees.  This pass attempts to rename
6288           compiler temporaries to other variables at copy locations, usually
6289           resulting in variable names which more closely resemble the
6290           original variables.  This flag is enabled by default at -O and
6291           higher.
6292
6293       -ftree-coalesce-inlined-vars
6294           Tell the copyrename pass (see -ftree-copyrename) to attempt to
6295           combine small user-defined variables too, but only if they were
6296           inlined from other functions.  It is a more limited form of
6297           -ftree-coalesce-vars.  This may harm debug information of such
6298           inlined variables, but it will keep variables of the inlined-into
6299           function apart from each other, such that they are more likely to
6300           contain the expected values in a debugging session.  This was the
6301           default in GCC versions older than 4.7.
6302
6303       -ftree-coalesce-vars
6304           Tell the copyrename pass (see -ftree-copyrename) to attempt to
6305           combine small user-defined variables too, instead of just compiler
6306           temporaries.  This may severely limit the ability to debug an
6307           optimized program compiled with -fno-var-tracking-assignments.  In
6308           the negated form, this flag prevents SSA coalescing of user
6309           variables, including inlined ones.  This option is enabled by
6310           default.
6311
6312       -ftree-ter
6313           Perform temporary expression replacement during the SSA->normal
6314           phase.  Single use/single def temporaries are replaced at their use
6315           location with their defining expression.  This results in non-
6316           GIMPLE code, but gives the expanders much more complex trees to
6317           work on resulting in better RTL generation.  This is enabled by
6318           default at -O and higher.
6319
6320       -ftree-slsr
6321           Perform straight-line strength reduction on trees.  This recognizes
6322           related expressions involving multiplications and replaces them by
6323           less expensive calculations when possible.  This is enabled by
6324           default at -O and higher.
6325
6326       -ftree-vectorize
6327           Perform loop vectorization on trees. This flag is enabled by
6328           default at -O3.
6329
6330       -ftree-slp-vectorize
6331           Perform basic block vectorization on trees. This flag is enabled by
6332           default at -O3 and when -ftree-vectorize is enabled.
6333
6334       -ftree-vect-loop-version
6335           Perform loop versioning when doing loop vectorization on trees.
6336           When a loop appears to be vectorizable except that data alignment
6337           or data dependence cannot be determined at compile time, then
6338           vectorized and non-vectorized versions of the loop are generated
6339           along with run-time checks for alignment or dependence to control
6340           which version is executed.  This option is enabled by default
6341           except at level -Os where it is disabled.
6342
6343       -fvect-cost-model
6344           Enable cost model for vectorization.  This option is enabled by
6345           default at -O3.
6346
6347       -ftree-vrp
6348           Perform Value Range Propagation on trees.  This is similar to the
6349           constant propagation pass, but instead of values, ranges of values
6350           are propagated.  This allows the optimizers to remove unnecessary
6351           range checks like array bound checks and null pointer checks.  This
6352           is enabled by default at -O2 and higher.  Null pointer check
6353           elimination is only done if -fdelete-null-pointer-checks is
6354           enabled.
6355
6356       -ftracer
6357           Perform tail duplication to enlarge superblock size.  This
6358           transformation simplifies the control flow of the function allowing
6359           other optimizations to do a better job.
6360
6361       -funroll-loops
6362           Unroll loops whose number of iterations can be determined at
6363           compile time or upon entry to the loop.  -funroll-loops implies
6364           -frerun-cse-after-loop.  This option makes code larger, and may or
6365           may not make it run faster.
6366
6367       -funroll-all-loops
6368           Unroll all loops, even if their number of iterations is uncertain
6369           when the loop is entered.  This usually makes programs run more
6370           slowly.  -funroll-all-loops implies the same options as
6371           -funroll-loops,
6372
6373       -fsplit-ivs-in-unroller
6374           Enables expression of values of induction variables in later
6375           iterations of the unrolled loop using the value in the first
6376           iteration.  This breaks long dependency chains, thus improving
6377           efficiency of the scheduling passes.
6378
6379           A combination of -fweb and CSE is often sufficient to obtain the
6380           same effect.  However, that is not reliable in cases where the loop
6381           body is more complicated than a single basic block.  It also does
6382           not work at all on some architectures due to restrictions in the
6383           CSE pass.
6384
6385           This optimization is enabled by default.
6386
6387       -fvariable-expansion-in-unroller
6388           With this option, the compiler creates multiple copies of some
6389           local variables when unrolling a loop, which can result in superior
6390           code.
6391
6392       -fpartial-inlining
6393           Inline parts of functions.  This option has any effect only when
6394           inlining itself is turned on by the -finline-functions or
6395           -finline-small-functions options.
6396
6397           Enabled at level -O2.
6398
6399       -fpredictive-commoning
6400           Perform predictive commoning optimization, i.e., reusing
6401           computations (especially memory loads and stores) performed in
6402           previous iterations of loops.
6403
6404           This option is enabled at level -O3.
6405
6406       -fprefetch-loop-arrays
6407           If supported by the target machine, generate instructions to
6408           prefetch memory to improve the performance of loops that access
6409           large arrays.
6410
6411           This option may generate better or worse code; results are highly
6412           dependent on the structure of loops within the source code.
6413
6414           Disabled at level -Os.
6415
6416       -fno-peephole
6417       -fno-peephole2
6418           Disable any machine-specific peephole optimizations.  The
6419           difference between -fno-peephole and -fno-peephole2 is in how they
6420           are implemented in the compiler; some targets use one, some use the
6421           other, a few use both.
6422
6423           -fpeephole is enabled by default.  -fpeephole2 enabled at levels
6424           -O2, -O3, -Os.
6425
6426       -fno-guess-branch-probability
6427           Do not guess branch probabilities using heuristics.
6428
6429           GCC uses heuristics to guess branch probabilities if they are not
6430           provided by profiling feedback (-fprofile-arcs).  These heuristics
6431           are based on the control flow graph.  If some branch probabilities
6432           are specified by __builtin_expect, then the heuristics are used to
6433           guess branch probabilities for the rest of the control flow graph,
6434           taking the __builtin_expect info into account.  The interactions
6435           between the heuristics and __builtin_expect can be complex, and in
6436           some cases, it may be useful to disable the heuristics so that the
6437           effects of __builtin_expect are easier to understand.
6438
6439           The default is -fguess-branch-probability at levels -O, -O2, -O3,
6440           -Os.
6441
6442       -freorder-blocks
6443           Reorder basic blocks in the compiled function in order to reduce
6444           number of taken branches and improve code locality.
6445
6446           Enabled at levels -O2, -O3.
6447
6448       -freorder-blocks-and-partition
6449           In addition to reordering basic blocks in the compiled function, in
6450           order to reduce number of taken branches, partitions hot and cold
6451           basic blocks into separate sections of the assembly and .o files,
6452           to improve paging and cache locality performance.
6453
6454           This optimization is automatically turned off in the presence of
6455           exception handling, for linkonce sections, for functions with a
6456           user-defined section attribute and on any architecture that does
6457           not support named sections.
6458
6459       -freorder-functions
6460           Reorder functions in the object file in order to improve code
6461           locality.  This is implemented by using special subsections
6462           ".text.hot" for most frequently executed functions and
6463           ".text.unlikely" for unlikely executed functions.  Reordering is
6464           done by the linker so object file format must support named
6465           sections and linker must place them in a reasonable way.
6466
6467           Also profile feedback must be available to make this option
6468           effective.  See -fprofile-arcs for details.
6469
6470           Enabled at levels -O2, -O3, -Os.
6471
6472       -fstrict-aliasing
6473           Allow the compiler to assume the strictest aliasing rules
6474           applicable to the language being compiled.  For C (and C++), this
6475           activates optimizations based on the type of expressions.  In
6476           particular, an object of one type is assumed never to reside at the
6477           same address as an object of a different type, unless the types are
6478           almost the same.  For example, an "unsigned int" can alias an
6479           "int", but not a "void*" or a "double".  A character type may alias
6480           any other type.
6481
6482           Pay special attention to code like this:
6483
6484                   union a_union {
6485                     int i;
6486                     double d;
6487                   };
6488
6489                   int f() {
6490                     union a_union t;
6491                     t.d = 3.0;
6492                     return t.i;
6493                   }
6494
6495           The practice of reading from a different union member than the one
6496           most recently written to (called "type-punning") is common.  Even
6497           with -fstrict-aliasing, type-punning is allowed, provided the
6498           memory is accessed through the union type.  So, the code above
6499           works as expected.    However, this code might not:
6500
6501                   int f() {
6502                     union a_union t;
6503                     int* ip;
6504                     t.d = 3.0;
6505                     ip = &t.i;
6506                     return *ip;
6507                   }
6508
6509           Similarly, access by taking the address, casting the resulting
6510           pointer and dereferencing the result has undefined behavior, even
6511           if the cast uses a union type, e.g.:
6512
6513                   int f() {
6514                     double d = 3.0;
6515                     return ((union a_union *) &d)->i;
6516                   }
6517
6518           The -fstrict-aliasing option is enabled at levels -O2, -O3, -Os.
6519
6520       -fstrict-overflow
6521           Allow the compiler to assume strict signed overflow rules,
6522           depending on the language being compiled.  For C (and C++) this
6523           means that overflow when doing arithmetic with signed numbers is
6524           undefined, which means that the compiler may assume that it does
6525           not happen.  This permits various optimizations.  For example, the
6526           compiler assumes that an expression like "i + 10 > i" is always
6527           true for signed "i".  This assumption is only valid if signed
6528           overflow is undefined, as the expression is false if "i + 10"
6529           overflows when using twos complement arithmetic.  When this option
6530           is in effect any attempt to determine whether an operation on
6531           signed numbers overflows must be written carefully to not actually
6532           involve overflow.
6533
6534           This option also allows the compiler to assume strict pointer
6535           semantics: given a pointer to an object, if adding an offset to
6536           that pointer does not produce a pointer to the same object, the
6537           addition is undefined.  This permits the compiler to conclude that
6538           "p + u > p" is always true for a pointer "p" and unsigned integer
6539           "u".  This assumption is only valid because pointer wraparound is
6540           undefined, as the expression is false if "p + u" overflows using
6541           twos complement arithmetic.
6542
6543           See also the -fwrapv option.  Using -fwrapv means that integer
6544           signed overflow is fully defined: it wraps.  When -fwrapv is used,
6545           there is no difference between -fstrict-overflow and
6546           -fno-strict-overflow for integers.  With -fwrapv certain types of
6547           overflow are permitted.  For example, if the compiler gets an
6548           overflow when doing arithmetic on constants, the overflowed value
6549           can still be used with -fwrapv, but not otherwise.
6550
6551           The -fstrict-overflow option is enabled at levels -O2, -O3, -Os.
6552
6553       -falign-functions
6554       -falign-functions=n
6555           Align the start of functions to the next power-of-two greater than
6556           n, skipping up to n bytes.  For instance, -falign-functions=32
6557           aligns functions to the next 32-byte boundary, but
6558           -falign-functions=24 aligns to the next 32-byte boundary only if
6559           this can be done by skipping 23 bytes or less.
6560
6561           -fno-align-functions and -falign-functions=1 are equivalent and
6562           mean that functions are not aligned.
6563
6564           Some assemblers only support this flag when n is a power of two; in
6565           that case, it is rounded up.
6566
6567           If n is not specified or is zero, use a machine-dependent default.
6568
6569           Enabled at levels -O2, -O3.
6570
6571       -falign-labels
6572       -falign-labels=n
6573           Align all branch targets to a power-of-two boundary, skipping up to
6574           n bytes like -falign-functions.  This option can easily make code
6575           slower, because it must insert dummy operations for when the branch
6576           target is reached in the usual flow of the code.
6577
6578           -fno-align-labels and -falign-labels=1 are equivalent and mean that
6579           labels are not aligned.
6580
6581           If -falign-loops or -falign-jumps are applicable and are greater
6582           than this value, then their values are used instead.
6583
6584           If n is not specified or is zero, use a machine-dependent default
6585           which is very likely to be 1, meaning no alignment.
6586
6587           Enabled at levels -O2, -O3.
6588
6589       -falign-loops
6590       -falign-loops=n
6591           Align loops to a power-of-two boundary, skipping up to n bytes like
6592           -falign-functions.  If the loops are executed many times, this
6593           makes up for any execution of the dummy operations.
6594
6595           -fno-align-loops and -falign-loops=1 are equivalent and mean that
6596           loops are not aligned.
6597
6598           If n is not specified or is zero, use a machine-dependent default.
6599
6600           Enabled at levels -O2, -O3.
6601
6602       -falign-jumps
6603       -falign-jumps=n
6604           Align branch targets to a power-of-two boundary, for branch targets
6605           where the targets can only be reached by jumping, skipping up to n
6606           bytes like -falign-functions.  In this case, no dummy operations
6607           need be executed.
6608
6609           -fno-align-jumps and -falign-jumps=1 are equivalent and mean that
6610           loops are not aligned.
6611
6612           If n is not specified or is zero, use a machine-dependent default.
6613
6614           Enabled at levels -O2, -O3.
6615
6616       -funit-at-a-time
6617           This option is left for compatibility reasons. -funit-at-a-time has
6618           no effect, while -fno-unit-at-a-time implies -fno-toplevel-reorder
6619           and -fno-section-anchors.
6620
6621           Enabled by default.
6622
6623       -fno-toplevel-reorder
6624           Do not reorder top-level functions, variables, and "asm"
6625           statements.  Output them in the same order that they appear in the
6626           input file.  When this option is used, unreferenced static
6627           variables are not removed.  This option is intended to support
6628           existing code that relies on a particular ordering.  For new code,
6629           it is better to use attributes.
6630
6631           Enabled at level -O0.  When disabled explicitly, it also implies
6632           -fno-section-anchors, which is otherwise enabled at -O0 on some
6633           targets.
6634
6635       -fweb
6636           Constructs webs as commonly used for register allocation purposes
6637           and assign each web individual pseudo register.  This allows the
6638           register allocation pass to operate on pseudos directly, but also
6639           strengthens several other optimization passes, such as CSE, loop
6640           optimizer and trivial dead code remover.  It can, however, make
6641           debugging impossible, since variables no longer stay in a "home
6642           register".
6643
6644           Enabled by default with -funroll-loops.
6645
6646       -fwhole-program
6647           Assume that the current compilation unit represents the whole
6648           program being compiled.  All public functions and variables with
6649           the exception of "main" and those merged by attribute
6650           "externally_visible" become static functions and in effect are
6651           optimized more aggressively by interprocedural optimizers.
6652
6653           This option should not be used in combination with "-flto".
6654           Instead relying on a linker plugin should provide safer and more
6655           precise information.
6656
6657       -flto[=n]
6658           This option runs the standard link-time optimizer.  When invoked
6659           with source code, it generates GIMPLE (one of GCC's internal
6660           representations) and writes it to special ELF sections in the
6661           object file.  When the object files are linked together, all the
6662           function bodies are read from these ELF sections and instantiated
6663           as if they had been part of the same translation unit.
6664
6665           To use the link-time optimizer, -flto needs to be specified at
6666           compile time and during the final link.  For example:
6667
6668                   gcc -c -O2 -flto foo.c
6669                   gcc -c -O2 -flto bar.c
6670                   gcc -o myprog -flto -O2 foo.o bar.o
6671
6672           The first two invocations to GCC save a bytecode representation of
6673           GIMPLE into special ELF sections inside foo.o and bar.o.  The final
6674           invocation reads the GIMPLE bytecode from foo.o and bar.o, merges
6675           the two files into a single internal image, and compiles the result
6676           as usual.  Since both foo.o and bar.o are merged into a single
6677           image, this causes all the interprocedural analyses and
6678           optimizations in GCC to work across the two files as if they were a
6679           single one.  This means, for example, that the inliner is able to
6680           inline functions in bar.o into functions in foo.o and vice-versa.
6681
6682           Another (simpler) way to enable link-time optimization is:
6683
6684                   gcc -o myprog -flto -O2 foo.c bar.c
6685
6686           The above generates bytecode for foo.c and bar.c, merges them
6687           together into a single GIMPLE representation and optimizes them as
6688           usual to produce myprog.
6689
6690           The only important thing to keep in mind is that to enable link-
6691           time optimizations the -flto flag needs to be passed to both the
6692           compile and the link commands.
6693
6694           To make whole program optimization effective, it is necessary to
6695           make certain whole program assumptions.  The compiler needs to know
6696           what functions and variables can be accessed by libraries and
6697           runtime outside of the link-time optimized unit.  When supported by
6698           the linker, the linker plugin (see -fuse-linker-plugin) passes
6699           information to the compiler about used and externally visible
6700           symbols.  When the linker plugin is not available, -fwhole-program
6701           should be used to allow the compiler to make these assumptions,
6702           which leads to more aggressive optimization decisions.
6703
6704           Note that when a file is compiled with -flto, the generated object
6705           file is larger than a regular object file because it contains
6706           GIMPLE bytecodes and the usual final code.  This means that object
6707           files with LTO information can be linked as normal object files; if
6708           -flto is not passed to the linker, no interprocedural optimizations
6709           are applied.
6710
6711           Additionally, the optimization flags used to compile individual
6712           files are not necessarily related to those used at link time.  For
6713           instance,
6714
6715                   gcc -c -O0 -flto foo.c
6716                   gcc -c -O0 -flto bar.c
6717                   gcc -o myprog -flto -O3 foo.o bar.o
6718
6719           This produces individual object files with unoptimized assembler
6720           code, but the resulting binary myprog is optimized at -O3.  If,
6721           instead, the final binary is generated without -flto, then myprog
6722           is not optimized.
6723
6724           When producing the final binary with -flto, GCC only applies link-
6725           time optimizations to those files that contain bytecode.
6726           Therefore, you can mix and match object files and libraries with
6727           GIMPLE bytecodes and final object code.  GCC automatically selects
6728           which files to optimize in LTO mode and which files to link without
6729           further processing.
6730
6731           There are some code generation flags preserved by GCC when
6732           generating bytecodes, as they need to be used during the final link
6733           stage.  Currently, the following options are saved into the GIMPLE
6734           bytecode files: -fPIC, -fcommon and all the -m target flags.
6735
6736           At link time, these options are read in and reapplied.  Note that
6737           the current implementation makes no attempt to recognize
6738           conflicting values for these options.  If different files have
6739           conflicting option values (e.g., one file is compiled with -fPIC
6740           and another isn't), the compiler simply uses the last value read
6741           from the bytecode files.  It is recommended, then, that you compile
6742           all the files participating in the same link with the same options.
6743
6744           If LTO encounters objects with C linkage declared with incompatible
6745           types in separate translation units to be linked together
6746           (undefined behavior according to ISO C99 6.2.7), a non-fatal
6747           diagnostic may be issued.  The behavior is still undefined at run
6748           time.
6749
6750           Another feature of LTO is that it is possible to apply
6751           interprocedural optimizations on files written in different
6752           languages.  This requires support in the language front end.
6753           Currently, the C, C++ and Fortran front ends are capable of
6754           emitting GIMPLE bytecodes, so something like this should work:
6755
6756                   gcc -c -flto foo.c
6757                   g++ -c -flto bar.cc
6758                   gfortran -c -flto baz.f90
6759                   g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran
6760
6761           Notice that the final link is done with g++ to get the C++ runtime
6762           libraries and -lgfortran is added to get the Fortran runtime
6763           libraries.  In general, when mixing languages in LTO mode, you
6764           should use the same link command options as when mixing languages
6765           in a regular (non-LTO) compilation; all you need to add is -flto to
6766           all the compile and link commands.
6767
6768           If object files containing GIMPLE bytecode are stored in a library
6769           archive, say libfoo.a, it is possible to extract and use them in an
6770           LTO link if you are using a linker with plugin support.  To enable
6771           this feature, use the flag -fuse-linker-plugin at link time:
6772
6773                   gcc -o myprog -O2 -flto -fuse-linker-plugin a.o b.o -lfoo
6774
6775           With the linker plugin enabled, the linker extracts the needed
6776           GIMPLE files from libfoo.a and passes them on to the running GCC to
6777           make them part of the aggregated GIMPLE image to be optimized.
6778
6779           If you are not using a linker with plugin support and/or do not
6780           enable the linker plugin, then the objects inside libfoo.a are
6781           extracted and linked as usual, but they do not participate in the
6782           LTO optimization process.
6783
6784           Link-time optimizations do not require the presence of the whole
6785           program to operate.  If the program does not require any symbols to
6786           be exported, it is possible to combine -flto and -fwhole-program to
6787           allow the interprocedural optimizers to use more aggressive
6788           assumptions which may lead to improved optimization opportunities.
6789           Use of -fwhole-program is not needed when linker plugin is active
6790           (see -fuse-linker-plugin).
6791
6792           The current implementation of LTO makes no attempt to generate
6793           bytecode that is portable between different types of hosts.  The
6794           bytecode files are versioned and there is a strict version check,
6795           so bytecode files generated in one version of GCC will not work
6796           with an older/newer version of GCC.
6797
6798           Link-time optimization does not work well with generation of
6799           debugging information.  Combining -flto with -g is currently
6800           experimental and expected to produce wrong results.
6801
6802           If you specify the optional n, the optimization and code generation
6803           done at link time is executed in parallel using n parallel jobs by
6804           utilizing an installed make program.  The environment variable MAKE
6805           may be used to override the program used.  The default value for n
6806           is 1.
6807
6808           You can also specify -flto=jobserver to use GNU make's job server
6809           mode to determine the number of parallel jobs. This is useful when
6810           the Makefile calling GCC is already executing in parallel.  You
6811           must prepend a + to the command recipe in the parent Makefile for
6812           this to work.  This option likely only works if MAKE is GNU make.
6813
6814           This option is disabled by default.
6815
6816       -flto-partition=alg
6817           Specify the partitioning algorithm used by the link-time optimizer.
6818           The value is either "1to1" to specify a partitioning mirroring the
6819           original source files or "balanced" to specify partitioning into
6820           equally sized chunks (whenever possible) or "max" to create new
6821           partition for every symbol where possible.  Specifying "none" as an
6822           algorithm disables partitioning and streaming completely.  The
6823           default value is "balanced". While "1to1" can be used as an
6824           workaround for various code ordering issues, the "max" partitioning
6825           is intended for internal testing only.
6826
6827       -flto-compression-level=n
6828           This option specifies the level of compression used for
6829           intermediate language written to LTO object files, and is only
6830           meaningful in conjunction with LTO mode (-flto).  Valid values are
6831           0 (no compression) to 9 (maximum compression).  Values outside this
6832           range are clamped to either 0 or 9.  If the option is not given, a
6833           default balanced compression setting is used.
6834
6835       -flto-report
6836           Prints a report with internal details on the workings of the link-
6837           time optimizer.  The contents of this report vary from version to
6838           version.  It is meant to be useful to GCC developers when
6839           processing object files in LTO mode (via -flto).
6840
6841           Disabled by default.
6842
6843       -fuse-linker-plugin
6844           Enables the use of a linker plugin during link-time optimization.
6845           This option relies on plugin support in the linker, which is
6846           available in gold or in GNU ld 2.21 or newer.
6847
6848           This option enables the extraction of object files with GIMPLE
6849           bytecode out of library archives. This improves the quality of
6850           optimization by exposing more code to the link-time optimizer.
6851           This information specifies what symbols can be accessed externally
6852           (by non-LTO object or during dynamic linking).  Resulting code
6853           quality improvements on binaries (and shared libraries that use
6854           hidden visibility) are similar to "-fwhole-program".  See -flto for
6855           a description of the effect of this flag and how to use it.
6856
6857           This option is enabled by default when LTO support in GCC is
6858           enabled and GCC was configured for use with a linker supporting
6859           plugins (GNU ld 2.21 or newer or gold).
6860
6861       -ffat-lto-objects
6862           Fat LTO objects are object files that contain both the intermediate
6863           language and the object code. This makes them usable for both LTO
6864           linking and normal linking. This option is effective only when
6865           compiling with -flto and is ignored at link time.
6866
6867           -fno-fat-lto-objects improves compilation time over plain LTO, but
6868           requires the complete toolchain to be aware of LTO. It requires a
6869           linker with linker plugin support for basic functionality.
6870           Additionally, nm, ar and ranlib need to support linker plugins to
6871           allow a full-featured build environment (capable of building static
6872           libraries etc).  GCC provides the gcc-ar, gcc-nm, gcc-ranlib
6873           wrappers to pass the right options to these tools. With non fat LTO
6874           makefiles need to be modified to use them.
6875
6876           The default is -ffat-lto-objects but this default is intended to
6877           change in future releases when linker plugin enabled environments
6878           become more common.
6879
6880       -fcompare-elim
6881           After register allocation and post-register allocation instruction
6882           splitting, identify arithmetic instructions that compute processor
6883           flags similar to a comparison operation based on that arithmetic.
6884           If possible, eliminate the explicit comparison operation.
6885
6886           This pass only applies to certain targets that cannot explicitly
6887           represent the comparison operation before register allocation is
6888           complete.
6889
6890           Enabled at levels -O, -O2, -O3, -Os.
6891
6892       -fuse-ld=bfd
6893           Use the bfd linker instead of the default linker.
6894
6895       -fuse-ld=gold
6896           Use the gold linker instead of the default linker.
6897
6898       -fcprop-registers
6899           After register allocation and post-register allocation instruction
6900           splitting, perform a copy-propagation pass to try to reduce
6901           scheduling dependencies and occasionally eliminate the copy.
6902
6903           Enabled at levels -O, -O2, -O3, -Os.
6904
6905       -fprofile-correction
6906           Profiles collected using an instrumented binary for multi-threaded
6907           programs may be inconsistent due to missed counter updates. When
6908           this option is specified, GCC uses heuristics to correct or smooth
6909           out such inconsistencies. By default, GCC emits an error message
6910           when an inconsistent profile is detected.
6911
6912       -fprofile-dir=path
6913           Set the directory to search for the profile data files in to path.
6914           This option affects only the profile data generated by
6915           -fprofile-generate, -ftest-coverage, -fprofile-arcs and used by
6916           -fprofile-use and -fbranch-probabilities and its related options.
6917           Both absolute and relative paths can be used.  By default, GCC uses
6918           the current directory as path, thus the profile data file appears
6919           in the same directory as the object file.
6920
6921       -fprofile-generate
6922       -fprofile-generate=path
6923           Enable options usually used for instrumenting application to
6924           produce profile useful for later recompilation with profile
6925           feedback based optimization.  You must use -fprofile-generate both
6926           when compiling and when linking your program.
6927
6928           The following options are enabled: "-fprofile-arcs",
6929           "-fprofile-values", "-fvpt".
6930
6931           If path is specified, GCC looks at the path to find the profile
6932           feedback data files. See -fprofile-dir.
6933
6934       -fprofile-use
6935       -fprofile-use=path
6936           Enable profile feedback directed optimizations, and optimizations
6937           generally profitable only with profile feedback available.
6938
6939           The following options are enabled: "-fbranch-probabilities",
6940           "-fvpt", "-funroll-loops", "-fpeel-loops", "-ftracer",
6941           "-ftree-vectorize", "ftree-loop-distribute-patterns"
6942
6943           By default, GCC emits an error message if the feedback profiles do
6944           not match the source code.  This error can be turned into a warning
6945           by using -Wcoverage-mismatch.  Note this may result in poorly
6946           optimized code.
6947
6948           If path is specified, GCC looks at the path to find the profile
6949           feedback data files. See -fprofile-dir.
6950
6951       The following options control compiler behavior regarding floating-
6952       point arithmetic.  These options trade off between speed and
6953       correctness.  All must be specifically enabled.
6954
6955       -ffloat-store
6956           Do not store floating-point variables in registers, and inhibit
6957           other options that might change whether a floating-point value is
6958           taken from a register or memory.
6959
6960           This option prevents undesirable excess precision on machines such
6961           as the 68000 where the floating registers (of the 68881) keep more
6962           precision than a "double" is supposed to have.  Similarly for the
6963           x86 architecture.  For most programs, the excess precision does
6964           only good, but a few programs rely on the precise definition of
6965           IEEE floating point.  Use -ffloat-store for such programs, after
6966           modifying them to store all pertinent intermediate computations
6967           into variables.
6968
6969       -fexcess-precision=style
6970           This option allows further control over excess precision on
6971           machines where floating-point registers have more precision than
6972           the IEEE "float" and "double" types and the processor does not
6973           support operations rounding to those types.  By default,
6974           -fexcess-precision=fast is in effect; this means that operations
6975           are carried out in the precision of the registers and that it is
6976           unpredictable when rounding to the types specified in the source
6977           code takes place.  When compiling C, if -fexcess-precision=standard
6978           is specified then excess precision follows the rules specified in
6979           ISO C99; in particular, both casts and assignments cause values to
6980           be rounded to their semantic types (whereas -ffloat-store only
6981           affects assignments).  This option is enabled by default for C if a
6982           strict conformance option such as -std=c99 is used.
6983
6984           -fexcess-precision=standard is not implemented for languages other
6985           than C, and has no effect if -funsafe-math-optimizations or
6986           -ffast-math is specified.  On the x86, it also has no effect if
6987           -mfpmath=sse or -mfpmath=sse+387 is specified; in the former case,
6988           IEEE semantics apply without excess precision, and in the latter,
6989           rounding is unpredictable.
6990
6991       -ffast-math
6992           Sets -fno-math-errno, -funsafe-math-optimizations,
6993           -ffinite-math-only, -fno-rounding-math, -fno-signaling-nans and
6994           -fcx-limited-range.
6995
6996           This option causes the preprocessor macro "__FAST_MATH__" to be
6997           defined.
6998
6999           This option is not turned on by any -O option besides -Ofast since
7000           it can result in incorrect output for programs that depend on an
7001           exact implementation of IEEE or ISO rules/specifications for math
7002           functions. It may, however, yield faster code for programs that do
7003           not require the guarantees of these specifications.
7004
7005       -fno-math-errno
7006           Do not set "errno" after calling math functions that are executed
7007           with a single instruction, e.g., "sqrt".  A program that relies on
7008           IEEE exceptions for math error handling may want to use this flag
7009           for speed while maintaining IEEE arithmetic compatibility.
7010
7011           This option is not turned on by any -O option since it can result
7012           in incorrect output for programs that depend on an exact
7013           implementation of IEEE or ISO rules/specifications for math
7014           functions. It may, however, yield faster code for programs that do
7015           not require the guarantees of these specifications.
7016
7017           The default is -fmath-errno.
7018
7019           On Darwin systems, the math library never sets "errno".  There is
7020           therefore no reason for the compiler to consider the possibility
7021           that it might, and -fno-math-errno is the default.
7022
7023       -funsafe-math-optimizations
7024           Allow optimizations for floating-point arithmetic that (a) assume
7025           that arguments and results are valid and (b) may violate IEEE or
7026           ANSI standards.  When used at link-time, it may include libraries
7027           or startup files that change the default FPU control word or other
7028           similar optimizations.
7029
7030           This option is not turned on by any -O option since it can result
7031           in incorrect output for programs that depend on an exact
7032           implementation of IEEE or ISO rules/specifications for math
7033           functions. It may, however, yield faster code for programs that do
7034           not require the guarantees of these specifications.  Enables
7035           -fno-signed-zeros, -fno-trapping-math, -fassociative-math and
7036           -freciprocal-math.
7037
7038           The default is -fno-unsafe-math-optimizations.
7039
7040       -fassociative-math
7041           Allow re-association of operands in series of floating-point
7042           operations.  This violates the ISO C and C++ language standard by
7043           possibly changing computation result.  NOTE: re-ordering may change
7044           the sign of zero as well as ignore NaNs and inhibit or create
7045           underflow or overflow (and thus cannot be used on code that relies
7046           on rounding behavior like "(x + 2**52) - 2**52".  May also reorder
7047           floating-point comparisons and thus may not be used when ordered
7048           comparisons are required.  This option requires that both
7049           -fno-signed-zeros and -fno-trapping-math be in effect.  Moreover,
7050           it doesn't make much sense with -frounding-math. For Fortran the
7051           option is automatically enabled when both -fno-signed-zeros and
7052           -fno-trapping-math are in effect.
7053
7054           The default is -fno-associative-math.
7055
7056       -freciprocal-math
7057           Allow the reciprocal of a value to be used instead of dividing by
7058           the value if this enables optimizations.  For example "x / y" can
7059           be replaced with "x * (1/y)", which is useful if "(1/y)" is subject
7060           to common subexpression elimination.  Note that this loses
7061           precision and increases the number of flops operating on the value.
7062
7063           The default is -fno-reciprocal-math.
7064
7065       -ffinite-math-only
7066           Allow optimizations for floating-point arithmetic that assume that
7067           arguments and results are not NaNs or +-Infs.
7068
7069           This option is not turned on by any -O option since it can result
7070           in incorrect output for programs that depend on an exact
7071           implementation of IEEE or ISO rules/specifications for math
7072           functions. It may, however, yield faster code for programs that do
7073           not require the guarantees of these specifications.
7074
7075           The default is -fno-finite-math-only.
7076
7077       -fno-signed-zeros
7078           Allow optimizations for floating-point arithmetic that ignore the
7079           signedness of zero.  IEEE arithmetic specifies the behavior of
7080           distinct +0.0 and -0.0 values, which then prohibits simplification
7081           of expressions such as x+0.0 or 0.0*x (even with
7082           -ffinite-math-only).  This option implies that the sign of a zero
7083           result isn't significant.
7084
7085           The default is -fsigned-zeros.
7086
7087       -fno-trapping-math
7088           Compile code assuming that floating-point operations cannot
7089           generate user-visible traps.  These traps include division by zero,
7090           overflow, underflow, inexact result and invalid operation.  This
7091           option requires that -fno-signaling-nans be in effect.  Setting
7092           this option may allow faster code if one relies on "non-stop" IEEE
7093           arithmetic, for example.
7094
7095           This option should never be turned on by any -O option since it can
7096           result in incorrect output for programs that depend on an exact
7097           implementation of IEEE or ISO rules/specifications for math
7098           functions.
7099
7100           The default is -ftrapping-math.
7101
7102       -frounding-math
7103           Disable transformations and optimizations that assume default
7104           floating-point rounding behavior.  This is round-to-zero for all
7105           floating point to integer conversions, and round-to-nearest for all
7106           other arithmetic truncations.  This option should be specified for
7107           programs that change the FP rounding mode dynamically, or that may
7108           be executed with a non-default rounding mode.  This option disables
7109           constant folding of floating-point expressions at compile time
7110           (which may be affected by rounding mode) and arithmetic
7111           transformations that are unsafe in the presence of sign-dependent
7112           rounding modes.
7113
7114           The default is -fno-rounding-math.
7115
7116           This option is experimental and does not currently guarantee to
7117           disable all GCC optimizations that are affected by rounding mode.
7118           Future versions of GCC may provide finer control of this setting
7119           using C99's "FENV_ACCESS" pragma.  This command-line option will be
7120           used to specify the default state for "FENV_ACCESS".
7121
7122       -fsignaling-nans
7123           Compile code assuming that IEEE signaling NaNs may generate user-
7124           visible traps during floating-point operations.  Setting this
7125           option disables optimizations that may change the number of
7126           exceptions visible with signaling NaNs.  This option implies
7127           -ftrapping-math.
7128
7129           This option causes the preprocessor macro "__SUPPORT_SNAN__" to be
7130           defined.
7131
7132           The default is -fno-signaling-nans.
7133
7134           This option is experimental and does not currently guarantee to
7135           disable all GCC optimizations that affect signaling NaN behavior.
7136
7137       -fsingle-precision-constant
7138           Treat floating-point constants as single precision instead of
7139           implicitly converting them to double-precision constants.
7140
7141       -fcx-limited-range
7142           When enabled, this option states that a range reduction step is not
7143           needed when performing complex division.  Also, there is no
7144           checking whether the result of a complex multiplication or division
7145           is "NaN + I*NaN", with an attempt to rescue the situation in that
7146           case.  The default is -fno-cx-limited-range, but is enabled by
7147           -ffast-math.
7148
7149           This option controls the default setting of the ISO C99
7150           "CX_LIMITED_RANGE" pragma.  Nevertheless, the option applies to all
7151           languages.
7152
7153       -fcx-fortran-rules
7154           Complex multiplication and division follow Fortran rules.  Range
7155           reduction is done as part of complex division, but there is no
7156           checking whether the result of a complex multiplication or division
7157           is "NaN + I*NaN", with an attempt to rescue the situation in that
7158           case.
7159
7160           The default is -fno-cx-fortran-rules.
7161
7162       The following options control optimizations that may improve
7163       performance, but are not enabled by any -O options.  This section
7164       includes experimental options that may produce broken code.
7165
7166       -fbranch-probabilities
7167           After running a program compiled with -fprofile-arcs, you can
7168           compile it a second time using -fbranch-probabilities, to improve
7169           optimizations based on the number of times each branch was taken.
7170           When a program compiled with -fprofile-arcs exits, it saves arc
7171           execution counts to a file called sourcename.gcda for each source
7172           file.  The information in this data file is very dependent on the
7173           structure of the generated code, so you must use the same source
7174           code and the same optimization options for both compilations.
7175
7176           With -fbranch-probabilities, GCC puts a REG_BR_PROB note on each
7177           JUMP_INSN and CALL_INSN.  These can be used to improve
7178           optimization.  Currently, they are only used in one place: in
7179           reorg.c, instead of guessing which path a branch is most likely to
7180           take, the REG_BR_PROB values are used to exactly determine which
7181           path is taken more often.
7182
7183       -fprofile-values
7184           If combined with -fprofile-arcs, it adds code so that some data
7185           about values of expressions in the program is gathered.
7186
7187           With -fbranch-probabilities, it reads back the data gathered from
7188           profiling values of expressions for usage in optimizations.
7189
7190           Enabled with -fprofile-generate and -fprofile-use.
7191
7192       -fvpt
7193           If combined with -fprofile-arcs, this option instructs the compiler
7194           to add code to gather information about values of expressions.
7195
7196           With -fbranch-probabilities, it reads back the data gathered and
7197           actually performs the optimizations based on them.  Currently the
7198           optimizations include specialization of division operations using
7199           the knowledge about the value of the denominator.
7200
7201       -frename-registers
7202           Attempt to avoid false dependencies in scheduled code by making use
7203           of registers left over after register allocation.  This
7204           optimization most benefits processors with lots of registers.
7205           Depending on the debug information format adopted by the target,
7206           however, it can make debugging impossible, since variables no
7207           longer stay in a "home register".
7208
7209           Enabled by default with -funroll-loops and -fpeel-loops.
7210
7211       -ftracer
7212           Perform tail duplication to enlarge superblock size.  This
7213           transformation simplifies the control flow of the function allowing
7214           other optimizations to do a better job.
7215
7216           Enabled with -fprofile-use.
7217
7218       -funroll-loops
7219           Unroll loops whose number of iterations can be determined at
7220           compile time or upon entry to the loop.  -funroll-loops implies
7221           -frerun-cse-after-loop, -fweb and -frename-registers.  It also
7222           turns on complete loop peeling (i.e. complete removal of loops with
7223           a small constant number of iterations).  This option makes code
7224           larger, and may or may not make it run faster.
7225
7226           Enabled with -fprofile-use.
7227
7228       -funroll-all-loops
7229           Unroll all loops, even if their number of iterations is uncertain
7230           when the loop is entered.  This usually makes programs run more
7231           slowly.  -funroll-all-loops implies the same options as
7232           -funroll-loops.
7233
7234       -fpeel-loops
7235           Peels loops for which there is enough information that they do not
7236           roll much (from profile feedback).  It also turns on complete loop
7237           peeling (i.e. complete removal of loops with small constant number
7238           of iterations).
7239
7240           Enabled with -fprofile-use.
7241
7242       -fmove-loop-invariants
7243           Enables the loop invariant motion pass in the RTL loop optimizer.
7244           Enabled at level -O1
7245
7246       -funswitch-loops
7247           Move branches with loop invariant conditions out of the loop, with
7248           duplicates of the loop on both branches (modified according to
7249           result of the condition).
7250
7251       -ffunction-sections
7252       -fdata-sections
7253           Place each function or data item into its own section in the output
7254           file if the target supports arbitrary sections.  The name of the
7255           function or the name of the data item determines the section's name
7256           in the output file.
7257
7258           Use these options on systems where the linker can perform
7259           optimizations to improve locality of reference in the instruction
7260           space.  Most systems using the ELF object format and SPARC
7261           processors running Solaris 2 have linkers with such optimizations.
7262           AIX may have these optimizations in the future.
7263
7264           Only use these options when there are significant benefits from
7265           doing so.  When you specify these options, the assembler and linker
7266           create larger object and executable files and are also slower.  You
7267           cannot use "gprof" on all systems if you specify this option, and
7268           you may have problems with debugging if you specify both this
7269           option and -g.
7270
7271       -fbranch-target-load-optimize
7272           Perform branch target register load optimization before prologue /
7273           epilogue threading.  The use of target registers can typically be
7274           exposed only during reload, thus hoisting loads out of loops and
7275           doing inter-block scheduling needs a separate optimization pass.
7276
7277       -fbranch-target-load-optimize2
7278           Perform branch target register load optimization after prologue /
7279           epilogue threading.
7280
7281       -fbtr-bb-exclusive
7282           When performing branch target register load optimization, don't
7283           reuse branch target registers within any basic block.
7284
7285       -fstack-protector
7286           Emit extra code to check for buffer overflows, such as stack
7287           smashing attacks.  This is done by adding a guard variable to
7288           functions with vulnerable objects.  This includes functions that
7289           call "alloca", and functions with buffers larger than 8 bytes.  The
7290           guards are initialized when a function is entered and then checked
7291           when the function exits.  If a guard check fails, an error message
7292           is printed and the program exits.
7293
7294       -fstack-protector-all
7295           Like -fstack-protector except that all functions are protected.
7296
7297       -fstack-protector-strong
7298           Like -fstack-protector but includes additional functions to be
7299           protected --- those that have local array definitions, or have
7300           references to local frame addresses.
7301
7302       -fsection-anchors
7303           Try to reduce the number of symbolic address calculations by using
7304           shared "anchor" symbols to address nearby objects.  This
7305           transformation can help to reduce the number of GOT entries and GOT
7306           accesses on some targets.
7307
7308           For example, the implementation of the following function "foo":
7309
7310                   static int a, b, c;
7311                   int foo (void) { return a + b + c; }
7312
7313           usually calculates the addresses of all three variables, but if you
7314           compile it with -fsection-anchors, it accesses the variables from a
7315           common anchor point instead.  The effect is similar to the
7316           following pseudocode (which isn't valid C):
7317
7318                   int foo (void)
7319                   {
7320                     register int *xr = &x;
7321                     return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
7322                   }
7323
7324           Not all targets support this option.
7325
7326       --param name=value
7327           In some places, GCC uses various constants to control the amount of
7328           optimization that is done.  For example, GCC does not inline
7329           functions that contain more than a certain number of instructions.
7330           You can control some of these constants on the command line using
7331           the --param option.
7332
7333           The names of specific parameters, and the meaning of the values,
7334           are tied to the internals of the compiler, and are subject to
7335           change without notice in future releases.
7336
7337           In each case, the value is an integer.  The allowable choices for
7338           name are:
7339
7340           predictable-branch-outcome
7341               When branch is predicted to be taken with probability lower
7342               than this threshold (in percent), then it is considered well
7343               predictable. The default is 10.
7344
7345           max-crossjump-edges
7346               The maximum number of incoming edges to consider for cross-
7347               jumping.  The algorithm used by -fcrossjumping is O(N^2) in the
7348               number of edges incoming to each block.  Increasing values mean
7349               more aggressive optimization, making the compilation time
7350               increase with probably small improvement in executable size.
7351
7352           min-crossjump-insns
7353               The minimum number of instructions that must be matched at the
7354               end of two blocks before cross-jumping is performed on them.
7355               This value is ignored in the case where all instructions in the
7356               block being cross-jumped from are matched.  The default value
7357               is 5.
7358
7359           max-grow-copy-bb-insns
7360               The maximum code size expansion factor when copying basic
7361               blocks instead of jumping.  The expansion is relative to a jump
7362               instruction.  The default value is 8.
7363
7364           max-goto-duplication-insns
7365               The maximum number of instructions to duplicate to a block that
7366               jumps to a computed goto.  To avoid O(N^2) behavior in a number
7367               of passes, GCC factors computed gotos early in the compilation
7368               process, and unfactors them as late as possible.  Only computed
7369               jumps at the end of a basic blocks with no more than max-goto-
7370               duplication-insns are unfactored.  The default value is 8.
7371
7372           max-delay-slot-insn-search
7373               The maximum number of instructions to consider when looking for
7374               an instruction to fill a delay slot.  If more than this
7375               arbitrary number of instructions are searched, the time savings
7376               from filling the delay slot are minimal, so stop searching.
7377               Increasing values mean more aggressive optimization, making the
7378               compilation time increase with probably small improvement in
7379               execution time.
7380
7381           max-delay-slot-live-search
7382               When trying to fill delay slots, the maximum number of
7383               instructions to consider when searching for a block with valid
7384               live register information.  Increasing this arbitrarily chosen
7385               value means more aggressive optimization, increasing the
7386               compilation time.  This parameter should be removed when the
7387               delay slot code is rewritten to maintain the control-flow
7388               graph.
7389
7390           max-gcse-memory
7391               The approximate maximum amount of memory that can be allocated
7392               in order to perform the global common subexpression elimination
7393               optimization.  If more memory than specified is required, the
7394               optimization is not done.
7395
7396           max-gcse-insertion-ratio
7397               If the ratio of expression insertions to deletions is larger
7398               than this value for any expression, then RTL PRE inserts or
7399               removes the expression and thus leaves partially redundant
7400               computations in the instruction stream.  The default value is
7401               20.
7402
7403           max-pending-list-length
7404               The maximum number of pending dependencies scheduling allows
7405               before flushing the current state and starting over.  Large
7406               functions with few branches or calls can create excessively
7407               large lists which needlessly consume memory and resources.
7408
7409           max-modulo-backtrack-attempts
7410               The maximum number of backtrack attempts the scheduler should
7411               make when modulo scheduling a loop.  Larger values can
7412               exponentially increase compilation time.
7413
7414           max-inline-insns-single
7415               Several parameters control the tree inliner used in GCC.  This
7416               number sets the maximum number of instructions (counted in
7417               GCC's internal representation) in a single function that the
7418               tree inliner considers for inlining.  This only affects
7419               functions declared inline and methods implemented in a class
7420               declaration (C++).  The default value is 400.
7421
7422           max-inline-insns-auto
7423               When you use -finline-functions (included in -O3), a lot of
7424               functions that would otherwise not be considered for inlining
7425               by the compiler are investigated.  To those functions, a
7426               different (more restrictive) limit compared to functions
7427               declared inline can be applied.  The default value is 40.
7428
7429           inline-min-speedup
7430               When estimated performance improvement of caller + callee
7431               runtime exceeds this threshold (in precent), the function can
7432               be inlined regardless the limit on --param max-inline-insns-
7433               single and --param max-inline-insns-auto.
7434
7435           large-function-insns
7436               The limit specifying really large functions.  For functions
7437               larger than this limit after inlining, inlining is constrained
7438               by --param large-function-growth.  This parameter is useful
7439               primarily to avoid extreme compilation time caused by non-
7440               linear algorithms used by the back end.  The default value is
7441               2700.
7442
7443           large-function-growth
7444               Specifies maximal growth of large function caused by inlining
7445               in percents.  The default value is 100 which limits large
7446               function growth to 2.0 times the original size.
7447
7448           large-unit-insns
7449               The limit specifying large translation unit.  Growth caused by
7450               inlining of units larger than this limit is limited by --param
7451               inline-unit-growth.  For small units this might be too tight.
7452               For example, consider a unit consisting of function A that is
7453               inline and B that just calls A three times.  If B is small
7454               relative to A, the growth of unit is 300\% and yet such
7455               inlining is very sane.  For very large units consisting of
7456               small inlineable functions, however, the overall unit growth
7457               limit is needed to avoid exponential explosion of code size.
7458               Thus for smaller units, the size is increased to --param large-
7459               unit-insns before applying --param inline-unit-growth.  The
7460               default is 10000.
7461
7462           inline-unit-growth
7463               Specifies maximal overall growth of the compilation unit caused
7464               by inlining.  The default value is 30 which limits unit growth
7465               to 1.3 times the original size.
7466
7467           ipcp-unit-growth
7468               Specifies maximal overall growth of the compilation unit caused
7469               by interprocedural constant propagation.  The default value is
7470               10 which limits unit growth to 1.1 times the original size.
7471
7472           large-stack-frame
7473               The limit specifying large stack frames.  While inlining the
7474               algorithm is trying to not grow past this limit too much.  The
7475               default value is 256 bytes.
7476
7477           large-stack-frame-growth
7478               Specifies maximal growth of large stack frames caused by
7479               inlining in percents.  The default value is 1000 which limits
7480               large stack frame growth to 11 times the original size.
7481
7482           max-inline-insns-recursive
7483           max-inline-insns-recursive-auto
7484               Specifies the maximum number of instructions an out-of-line
7485               copy of a self-recursive inline function can grow into by
7486               performing recursive inlining.
7487
7488               For functions declared inline, --param max-inline-insns-
7489               recursive is taken into account.  For functions not declared
7490               inline, recursive inlining happens only when -finline-functions
7491               (included in -O3) is enabled and --param max-inline-insns-
7492               recursive-auto is used.  The default value is 450.
7493
7494           max-inline-recursive-depth
7495           max-inline-recursive-depth-auto
7496               Specifies the maximum recursion depth used for recursive
7497               inlining.
7498
7499               For functions declared inline, --param max-inline-recursive-
7500               depth is taken into account.  For functions not declared
7501               inline, recursive inlining happens only when -finline-functions
7502               (included in -O3) is enabled and --param max-inline-recursive-
7503               depth-auto is used.  The default value is 8.
7504
7505           min-inline-recursive-probability
7506               Recursive inlining is profitable only for function having deep
7507               recursion in average and can hurt for function having little
7508               recursion depth by increasing the prologue size or complexity
7509               of function body to other optimizers.
7510
7511               When profile feedback is available (see -fprofile-generate) the
7512               actual recursion depth can be guessed from probability that
7513               function recurses via a given call expression.  This parameter
7514               limits inlining only to call expressions whose probability
7515               exceeds the given threshold (in percents).  The default value
7516               is 10.
7517
7518           early-inlining-insns
7519               Specify growth that the early inliner can make.  In effect it
7520               increases the amount of inlining for code having a large
7521               abstraction penalty.  The default value is 10.
7522
7523           max-early-inliner-iterations
7524           max-early-inliner-iterations
7525               Limit of iterations of the early inliner.  This basically
7526               bounds the number of nested indirect calls the early inliner
7527               can resolve.  Deeper chains are still handled by late inlining.
7528
7529           comdat-sharing-probability
7530           comdat-sharing-probability
7531               Probability (in percent) that C++ inline function with comdat
7532               visibility are shared across multiple compilation units.  The
7533               default value is 20.
7534
7535           min-vect-loop-bound
7536               The minimum number of iterations under which loops are not
7537               vectorized when -ftree-vectorize is used.  The number of
7538               iterations after vectorization needs to be greater than the
7539               value specified by this option to allow vectorization.  The
7540               default value is 0.
7541
7542           gcse-cost-distance-ratio
7543               Scaling factor in calculation of maximum distance an expression
7544               can be moved by GCSE optimizations.  This is currently
7545               supported only in the code hoisting pass.  The bigger the
7546               ratio, the more aggressive code hoisting is with simple
7547               expressions, i.e., the expressions that have cost less than
7548               gcse-unrestricted-cost.  Specifying 0 disables hoisting of
7549               simple expressions.  The default value is 10.
7550
7551           gcse-unrestricted-cost
7552               Cost, roughly measured as the cost of a single typical machine
7553               instruction, at which GCSE optimizations do not constrain the
7554               distance an expression can travel.  This is currently supported
7555               only in the code hoisting pass.  The lesser the cost, the more
7556               aggressive code hoisting is.  Specifying 0 allows all
7557               expressions to travel unrestricted distances.  The default
7558               value is 3.
7559
7560           max-hoist-depth
7561               The depth of search in the dominator tree for expressions to
7562               hoist.  This is used to avoid quadratic behavior in hoisting
7563               algorithm.  The value of 0 does not limit on the search, but
7564               may slow down compilation of huge functions.  The default value
7565               is 30.
7566
7567           max-tail-merge-comparisons
7568               The maximum amount of similar bbs to compare a bb with.  This
7569               is used to avoid quadratic behavior in tree tail merging.  The
7570               default value is 10.
7571
7572           max-tail-merge-iterations
7573               The maximum amount of iterations of the pass over the function.
7574               This is used to limit compilation time in tree tail merging.
7575               The default value is 2.
7576
7577           max-unrolled-insns
7578               The maximum number of instructions that a loop may have to be
7579               unrolled.  If a loop is unrolled, this parameter also
7580               determines how many times the loop code is unrolled.
7581
7582           max-average-unrolled-insns
7583               The maximum number of instructions biased by probabilities of
7584               their execution that a loop may have to be unrolled.  If a loop
7585               is unrolled, this parameter also determines how many times the
7586               loop code is unrolled.
7587
7588           max-unroll-times
7589               The maximum number of unrollings of a single loop.
7590
7591           max-peeled-insns
7592               The maximum number of instructions that a loop may have to be
7593               peeled.  If a loop is peeled, this parameter also determines
7594               how many times the loop code is peeled.
7595
7596           max-peel-times
7597               The maximum number of peelings of a single loop.
7598
7599           max-peel-branches
7600               The maximum number of branches on the hot path through the
7601               peeled sequence.
7602
7603           max-completely-peeled-insns
7604               The maximum number of insns of a completely peeled loop.
7605
7606           max-completely-peel-times
7607               The maximum number of iterations of a loop to be suitable for
7608               complete peeling.
7609
7610           max-completely-peel-loop-nest-depth
7611               The maximum depth of a loop nest suitable for complete peeling.
7612
7613           max-unswitch-insns
7614               The maximum number of insns of an unswitched loop.
7615
7616           max-unswitch-level
7617               The maximum number of branches unswitched in a single loop.
7618
7619           lim-expensive
7620               The minimum cost of an expensive expression in the loop
7621               invariant motion.
7622
7623           iv-consider-all-candidates-bound
7624               Bound on number of candidates for induction variables, below
7625               which all candidates are considered for each use in induction
7626               variable optimizations.  If there are more candidates than
7627               this, only the most relevant ones are considered to avoid
7628               quadratic time complexity.
7629
7630           iv-max-considered-uses
7631               The induction variable optimizations give up on loops that
7632               contain more induction variable uses.
7633
7634           iv-always-prune-cand-set-bound
7635               If the number of candidates in the set is smaller than this
7636               value, always try to remove unnecessary ivs from the set when
7637               adding a new one.
7638
7639           scev-max-expr-size
7640               Bound on size of expressions used in the scalar evolutions
7641               analyzer.  Large expressions slow the analyzer.
7642
7643           scev-max-expr-complexity
7644               Bound on the complexity of the expressions in the scalar
7645               evolutions analyzer.  Complex expressions slow the analyzer.
7646
7647           omega-max-vars
7648               The maximum number of variables in an Omega constraint system.
7649               The default value is 128.
7650
7651           omega-max-geqs
7652               The maximum number of inequalities in an Omega constraint
7653               system.  The default value is 256.
7654
7655           omega-max-eqs
7656               The maximum number of equalities in an Omega constraint system.
7657               The default value is 128.
7658
7659           omega-max-wild-cards
7660               The maximum number of wildcard variables that the Omega solver
7661               is able to insert.  The default value is 18.
7662
7663           omega-hash-table-size
7664               The size of the hash table in the Omega solver.  The default
7665               value is 550.
7666
7667           omega-max-keys
7668               The maximal number of keys used by the Omega solver.  The
7669               default value is 500.
7670
7671           omega-eliminate-redundant-constraints
7672               When set to 1, use expensive methods to eliminate all redundant
7673               constraints.  The default value is 0.
7674
7675           vect-max-version-for-alignment-checks
7676               The maximum number of run-time checks that can be performed
7677               when doing loop versioning for alignment in the vectorizer.
7678               See option -ftree-vect-loop-version for more information.
7679
7680           vect-max-version-for-alias-checks
7681               The maximum number of run-time checks that can be performed
7682               when doing loop versioning for alias in the vectorizer.  See
7683               option -ftree-vect-loop-version for more information.
7684
7685           max-iterations-to-track
7686               The maximum number of iterations of a loop the brute-force
7687               algorithm for analysis of the number of iterations of the loop
7688               tries to evaluate.
7689
7690           hot-bb-count-ws-permille
7691               A basic block profile count is considered hot if it contributes
7692               to the given permillage (i.e. 0...1000) of the entire profiled
7693               execution.
7694
7695           hot-bb-frequency-fraction
7696               Select fraction of the entry block frequency of executions of
7697               basic block in function given basic block needs to have to be
7698               considered hot.
7699
7700           max-predicted-iterations
7701               The maximum number of loop iterations we predict statically.
7702               This is useful in cases where a function contains a single loop
7703               with known bound and another loop with unknown bound.  The
7704               known number of iterations is predicted correctly, while the
7705               unknown number of iterations average to roughly 10.  This means
7706               that the loop without bounds appears artificially cold relative
7707               to the other one.
7708
7709           align-threshold
7710               Select fraction of the maximal frequency of executions of a
7711               basic block in a function to align the basic block.
7712
7713           align-loop-iterations
7714               A loop expected to iterate at least the selected number of
7715               iterations is aligned.
7716
7717           tracer-dynamic-coverage
7718           tracer-dynamic-coverage-feedback
7719               This value is used to limit superblock formation once the given
7720               percentage of executed instructions is covered.  This limits
7721               unnecessary code size expansion.
7722
7723               The tracer-dynamic-coverage-feedback is used only when profile
7724               feedback is available.  The real profiles (as opposed to
7725               statically estimated ones) are much less balanced allowing the
7726               threshold to be larger value.
7727
7728           tracer-max-code-growth
7729               Stop tail duplication once code growth has reached given
7730               percentage.  This is a rather artificial limit, as most of the
7731               duplicates are eliminated later in cross jumping, so it may be
7732               set to much higher values than is the desired code growth.
7733
7734           tracer-min-branch-ratio
7735               Stop reverse growth when the reverse probability of best edge
7736               is less than this threshold (in percent).
7737
7738           tracer-min-branch-ratio
7739           tracer-min-branch-ratio-feedback
7740               Stop forward growth if the best edge has probability lower than
7741               this threshold.
7742
7743               Similarly to tracer-dynamic-coverage two values are present,
7744               one for compilation for profile feedback and one for
7745               compilation without.  The value for compilation with profile
7746               feedback needs to be more conservative (higher) in order to
7747               make tracer effective.
7748
7749           stack-clash-protection-guard-size
7750               Specify the size of the operating system provided stack guard
7751               as 2 raised to num bytes.  The default value is 12 (4096
7752               bytes).  Acceptable values are between 12 and 30.  Higher
7753               values may reduce the number of explicit probes, but a value
7754               larger than the operating system provided guard will leave code
7755               vulnerable to stack clash style attacks.
7756
7757           stack-clash-protection-probe-interval
7758               Stack clash protection involves probing stack space as it is
7759               allocated.  This param controls the maximum distance between
7760               probes into the stack as 2 raised to num bytes.  Acceptable
7761               values are between 10 and 16 and defaults to 12.  Higher values
7762               may reduce the number of explicit probes, but a value larger
7763               than the operating system provided guard will leave code
7764               vulnerable to stack clash style attacks.
7765
7766           max-cse-path-length
7767               The maximum number of basic blocks on path that CSE considers.
7768               The default is 10.
7769
7770           max-cse-insns
7771               The maximum number of instructions CSE processes before
7772               flushing.  The default is 1000.
7773
7774           ggc-min-expand
7775               GCC uses a garbage collector to manage its own memory
7776               allocation.  This parameter specifies the minimum percentage by
7777               which the garbage collector's heap should be allowed to expand
7778               between collections.  Tuning this may improve compilation
7779               speed; it has no effect on code generation.
7780
7781               The default is 30% + 70% * (RAM/1GB) with an upper bound of
7782               100% when RAM >= 1GB.  If "getrlimit" is available, the notion
7783               of "RAM" is the smallest of actual RAM and "RLIMIT_DATA" or
7784               "RLIMIT_AS".  If GCC is not able to calculate RAM on a
7785               particular platform, the lower bound of 30% is used.  Setting
7786               this parameter and ggc-min-heapsize to zero causes a full
7787               collection to occur at every opportunity.  This is extremely
7788               slow, but can be useful for debugging.
7789
7790           ggc-min-heapsize
7791               Minimum size of the garbage collector's heap before it begins
7792               bothering to collect garbage.  The first collection occurs
7793               after the heap expands by ggc-min-expand% beyond ggc-min-
7794               heapsize.  Again, tuning this may improve compilation speed,
7795               and has no effect on code generation.
7796
7797               The default is the smaller of RAM/8, RLIMIT_RSS, or a limit
7798               that tries to ensure that RLIMIT_DATA or RLIMIT_AS are not
7799               exceeded, but with a lower bound of 4096 (four megabytes) and
7800               an upper bound of 131072 (128 megabytes).  If GCC is not able
7801               to calculate RAM on a particular platform, the lower bound is
7802               used.  Setting this parameter very large effectively disables
7803               garbage collection.  Setting this parameter and ggc-min-expand
7804               to zero causes a full collection to occur at every opportunity.
7805
7806           max-reload-search-insns
7807               The maximum number of instruction reload should look backward
7808               for equivalent register.  Increasing values mean more
7809               aggressive optimization, making the compilation time increase
7810               with probably slightly better performance.  The default value
7811               is 100.
7812
7813           max-cselib-memory-locations
7814               The maximum number of memory locations cselib should take into
7815               account.  Increasing values mean more aggressive optimization,
7816               making the compilation time increase with probably slightly
7817               better performance.  The default value is 500.
7818
7819           reorder-blocks-duplicate
7820           reorder-blocks-duplicate-feedback
7821               Used by the basic block reordering pass to decide whether to
7822               use unconditional branch or duplicate the code on its
7823               destination.  Code is duplicated when its estimated size is
7824               smaller than this value multiplied by the estimated size of
7825               unconditional jump in the hot spots of the program.
7826
7827               The reorder-block-duplicate-feedback is used only when profile
7828               feedback is available.  It may be set to higher values than
7829               reorder-block-duplicate since information about the hot spots
7830               is more accurate.
7831
7832           max-sched-ready-insns
7833               The maximum number of instructions ready to be issued the
7834               scheduler should consider at any given time during the first
7835               scheduling pass.  Increasing values mean more thorough
7836               searches, making the compilation time increase with probably
7837               little benefit.  The default value is 100.
7838
7839           max-sched-region-blocks
7840               The maximum number of blocks in a region to be considered for
7841               interblock scheduling.  The default value is 10.
7842
7843           max-pipeline-region-blocks
7844               The maximum number of blocks in a region to be considered for
7845               pipelining in the selective scheduler.  The default value is
7846               15.
7847
7848           max-sched-region-insns
7849               The maximum number of insns in a region to be considered for
7850               interblock scheduling.  The default value is 100.
7851
7852           max-pipeline-region-insns
7853               The maximum number of insns in a region to be considered for
7854               pipelining in the selective scheduler.  The default value is
7855               200.
7856
7857           min-spec-prob
7858               The minimum probability (in percents) of reaching a source
7859               block for interblock speculative scheduling.  The default value
7860               is 40.
7861
7862           max-sched-extend-regions-iters
7863               The maximum number of iterations through CFG to extend regions.
7864               A value of 0 (the default) disables region extensions.
7865
7866           max-sched-insn-conflict-delay
7867               The maximum conflict delay for an insn to be considered for
7868               speculative motion.  The default value is 3.
7869
7870           sched-spec-prob-cutoff
7871               The minimal probability of speculation success (in percents),
7872               so that speculative insns are scheduled.  The default value is
7873               40.
7874
7875           sched-spec-state-edge-prob-cutoff
7876               The minimum probability an edge must have for the scheduler to
7877               save its state across it.  The default value is 10.
7878
7879           sched-mem-true-dep-cost
7880               Minimal distance (in CPU cycles) between store and load
7881               targeting same memory locations.  The default value is 1.
7882
7883           selsched-max-lookahead
7884               The maximum size of the lookahead window of selective
7885               scheduling.  It is a depth of search for available
7886               instructions.  The default value is 50.
7887
7888           selsched-max-sched-times
7889               The maximum number of times that an instruction is scheduled
7890               during selective scheduling.  This is the limit on the number
7891               of iterations through which the instruction may be pipelined.
7892               The default value is 2.
7893
7894           selsched-max-insns-to-rename
7895               The maximum number of best instructions in the ready list that
7896               are considered for renaming in the selective scheduler.  The
7897               default value is 2.
7898
7899           sms-min-sc
7900               The minimum value of stage count that swing modulo scheduler
7901               generates.  The default value is 2.
7902
7903           max-last-value-rtl
7904               The maximum size measured as number of RTLs that can be
7905               recorded in an expression in combiner for a pseudo register as
7906               last known value of that register.  The default is 10000.
7907
7908           integer-share-limit
7909               Small integer constants can use a shared data structure,
7910               reducing the compiler's memory usage and increasing its speed.
7911               This sets the maximum value of a shared integer constant.  The
7912               default value is 256.
7913
7914           ssp-buffer-size
7915               The minimum size of buffers (i.e. arrays) that receive stack
7916               smashing protection when -fstack-protection is used.
7917
7918           max-jump-thread-duplication-stmts
7919               Maximum number of statements allowed in a block that needs to
7920               be duplicated when threading jumps.
7921
7922           max-fields-for-field-sensitive
7923               Maximum number of fields in a structure treated in a field
7924               sensitive manner during pointer analysis.  The default is zero
7925               for -O0 and -O1, and 100 for -Os, -O2, and -O3.
7926
7927           prefetch-latency
7928               Estimate on average number of instructions that are executed
7929               before prefetch finishes.  The distance prefetched ahead is
7930               proportional to this constant.  Increasing this number may also
7931               lead to less streams being prefetched (see simultaneous-
7932               prefetches).
7933
7934           simultaneous-prefetches
7935               Maximum number of prefetches that can run at the same time.
7936
7937           l1-cache-line-size
7938               The size of cache line in L1 cache, in bytes.
7939
7940           l1-cache-size
7941               The size of L1 cache, in kilobytes.
7942
7943           l2-cache-size
7944               The size of L2 cache, in kilobytes.
7945
7946           min-insn-to-prefetch-ratio
7947               The minimum ratio between the number of instructions and the
7948               number of prefetches to enable prefetching in a loop.
7949
7950           prefetch-min-insn-to-mem-ratio
7951               The minimum ratio between the number of instructions and the
7952               number of memory references to enable prefetching in a loop.
7953
7954           use-canonical-types
7955               Whether the compiler should use the "canonical" type system.
7956               By default, this should always be 1, which uses a more
7957               efficient internal mechanism for comparing types in C++ and
7958               Objective-C++.  However, if bugs in the canonical type system
7959               are causing compilation failures, set this value to 0 to
7960               disable canonical types.
7961
7962           switch-conversion-max-branch-ratio
7963               Switch initialization conversion refuses to create arrays that
7964               are bigger than switch-conversion-max-branch-ratio times the
7965               number of branches in the switch.
7966
7967           max-partial-antic-length
7968               Maximum length of the partial antic set computed during the
7969               tree partial redundancy elimination optimization (-ftree-pre)
7970               when optimizing at -O3 and above.  For some sorts of source
7971               code the enhanced partial redundancy elimination optimization
7972               can run away, consuming all of the memory available on the host
7973               machine.  This parameter sets a limit on the length of the sets
7974               that are computed, which prevents the runaway behavior.
7975               Setting a value of 0 for this parameter allows an unlimited set
7976               length.
7977
7978           sccvn-max-scc-size
7979               Maximum size of a strongly connected component (SCC) during
7980               SCCVN processing.  If this limit is hit, SCCVN processing for
7981               the whole function is not done and optimizations depending on
7982               it are disabled.  The default maximum SCC size is 10000.
7983
7984           sccvn-max-alias-queries-per-access
7985               Maximum number of alias-oracle queries we perform when looking
7986               for redundancies for loads and stores.  If this limit is hit
7987               the search is aborted and the load or store is not considered
7988               redundant.  The number of queries is algorithmically limited to
7989               the number of stores on all paths from the load to the function
7990               entry.  The default maxmimum number of queries is 1000.
7991
7992           ira-max-loops-num
7993               IRA uses regional register allocation by default.  If a
7994               function contains more loops than the number given by this
7995               parameter, only at most the given number of the most
7996               frequently-executed loops form regions for regional register
7997               allocation.  The default value of the parameter is 100.
7998
7999           ira-max-conflict-table-size
8000               Although IRA uses a sophisticated algorithm to compress the
8001               conflict table, the table can still require excessive amounts
8002               of memory for huge functions.  If the conflict table for a
8003               function could be more than the size in MB given by this
8004               parameter, the register allocator instead uses a faster,
8005               simpler, and lower-quality algorithm that does not require
8006               building a pseudo-register conflict table.  The default value
8007               of the parameter is 2000.
8008
8009           ira-loop-reserved-regs
8010               IRA can be used to evaluate more accurate register pressure in
8011               loops for decisions to move loop invariants (see -O3).  The
8012               number of available registers reserved for some other purposes
8013               is given by this parameter.  The default value of the parameter
8014               is 2, which is the minimal number of registers needed by
8015               typical instructions.  This value is the best found from
8016               numerous experiments.
8017
8018           loop-invariant-max-bbs-in-loop
8019               Loop invariant motion can be very expensive, both in
8020               compilation time and in amount of needed compile-time memory,
8021               with very large loops.  Loops with more basic blocks than this
8022               parameter won't have loop invariant motion optimization
8023               performed on them.  The default value of the parameter is 1000
8024               for -O1 and 10000 for -O2 and above.
8025
8026           loop-max-datarefs-for-datadeps
8027               Building data dapendencies is expensive for very large loops.
8028               This parameter limits the number of data references in loops
8029               that are considered for data dependence analysis.  These large
8030               loops are no handled by the optimizations using loop data
8031               dependencies.  The default value is 1000.
8032
8033           max-vartrack-size
8034               Sets a maximum number of hash table slots to use during
8035               variable tracking dataflow analysis of any function.  If this
8036               limit is exceeded with variable tracking at assignments
8037               enabled, analysis for that function is retried without it,
8038               after removing all debug insns from the function.  If the limit
8039               is exceeded even without debug insns, var tracking analysis is
8040               completely disabled for the function.  Setting the parameter to
8041               zero makes it unlimited.
8042
8043           max-vartrack-expr-depth
8044               Sets a maximum number of recursion levels when attempting to
8045               map variable names or debug temporaries to value expressions.
8046               This trades compilation time for more complete debug
8047               information.  If this is set too low, value expressions that
8048               are available and could be represented in debug information may
8049               end up not being used; setting this higher may enable the
8050               compiler to find more complex debug expressions, but compile
8051               time and memory use may grow.  The default is 12.
8052
8053           min-nondebug-insn-uid
8054               Use uids starting at this parameter for nondebug insns.  The
8055               range below the parameter is reserved exclusively for debug
8056               insns created by -fvar-tracking-assignments, but debug insns
8057               may get (non-overlapping) uids above it if the reserved range
8058               is exhausted.
8059
8060           ipa-sra-ptr-growth-factor
8061               IPA-SRA replaces a pointer to an aggregate with one or more new
8062               parameters only when their cumulative size is less or equal to
8063               ipa-sra-ptr-growth-factor times the size of the original
8064               pointer parameter.
8065
8066           tm-max-aggregate-size
8067               When making copies of thread-local variables in a transaction,
8068               this parameter specifies the size in bytes after which
8069               variables are saved with the logging functions as opposed to
8070               save/restore code sequence pairs.  This option only applies
8071               when using -fgnu-tm.
8072
8073           graphite-max-nb-scop-params
8074               To avoid exponential effects in the Graphite loop transforms,
8075               the number of parameters in a Static Control Part (SCoP) is
8076               bounded.  The default value is 10 parameters.  A variable whose
8077               value is unknown at compilation time and defined outside a SCoP
8078               is a parameter of the SCoP.
8079
8080           graphite-max-bbs-per-function
8081               To avoid exponential effects in the detection of SCoPs, the
8082               size of the functions analyzed by Graphite is bounded.  The
8083               default value is 100 basic blocks.
8084
8085           loop-block-tile-size
8086               Loop blocking or strip mining transforms, enabled with
8087               -floop-block or -floop-strip-mine, strip mine each loop in the
8088               loop nest by a given number of iterations.  The strip length
8089               can be changed using the loop-block-tile-size parameter.  The
8090               default value is 51 iterations.
8091
8092           ipa-cp-value-list-size
8093               IPA-CP attempts to track all possible values and types passed
8094               to a function's parameter in order to propagate them and
8095               perform devirtualization.  ipa-cp-value-list-size is the
8096               maximum number of values and types it stores per one formal
8097               parameter of a function.
8098
8099           lto-partitions
8100               Specify desired number of partitions produced during WHOPR
8101               compilation.  The number of partitions should exceed the number
8102               of CPUs used for compilation.  The default value is 32.
8103
8104           lto-minpartition
8105               Size of minimal partition for WHOPR (in estimated
8106               instructions).  This prevents expenses of splitting very small
8107               programs into too many partitions.
8108
8109           cxx-max-namespaces-for-diagnostic-help
8110               The maximum number of namespaces to consult for suggestions
8111               when C++ name lookup fails for an identifier.  The default is
8112               1000.
8113
8114           sink-frequency-threshold
8115               The maximum relative execution frequency (in percents) of the
8116               target block relative to a statement's original block to allow
8117               statement sinking of a statement.  Larger numbers result in
8118               more aggressive statement sinking.  The default value is 75.  A
8119               small positive adjustment is applied for statements with memory
8120               operands as those are even more profitable so sink.
8121
8122           max-stores-to-sink
8123               The maximum number of conditional stores paires that can be
8124               sunk.  Set to 0 if either vectorization (-ftree-vectorize) or
8125               if-conversion (-ftree-loop-if-convert) is disabled.  The
8126               default is 2.
8127
8128           allow-load-data-races
8129               Allow optimizers to introduce new data races on loads.  Set to
8130               1 to allow, otherwise to 0.  This option is enabled by default
8131               unless implicitly set by the -fmemory-model= option.
8132
8133           allow-store-data-races
8134               Allow optimizers to introduce new data races on stores.  Set to
8135               1 to allow, otherwise to 0.  This option is enabled by default
8136               unless implicitly set by the -fmemory-model= option.
8137
8138           allow-packed-load-data-races
8139               Allow optimizers to introduce new data races on packed data
8140               loads.  Set to 1 to allow, otherwise to 0.  This option is
8141               enabled by default unless implicitly set by the -fmemory-model=
8142               option.
8143
8144           allow-packed-store-data-races
8145               Allow optimizers to introduce new data races on packed data
8146               stores.  Set to 1 to allow, otherwise to 0.  This option is
8147               enabled by default unless implicitly set by the -fmemory-model=
8148               option.
8149
8150           case-values-threshold
8151               The smallest number of different values for which it is best to
8152               use a jump-table instead of a tree of conditional branches.  If
8153               the value is 0, use the default for the machine.  The default
8154               is 0.
8155
8156           tree-reassoc-width
8157               Set the maximum number of instructions executed in parallel in
8158               reassociated tree. This parameter overrides target dependent
8159               heuristics used by default if has non zero value.
8160
8161           sched-pressure-algorithm
8162               Choose between the two available implementations of
8163               -fsched-pressure.  Algorithm 1 is the original implementation
8164               and is the more likely to prevent instructions from being
8165               reordered.  Algorithm 2 was designed to be a compromise between
8166               the relatively conservative approach taken by algorithm 1 and
8167               the rather aggressive approach taken by the default scheduler.
8168               It relies more heavily on having a regular register file and
8169               accurate register pressure classes.  See haifa-sched.c in the
8170               GCC sources for more details.
8171
8172               The default choice depends on the target.
8173
8174           max-slsr-cand-scan
8175               Set the maximum number of existing candidates that will be
8176               considered when seeking a basis for a new straight-line
8177               strength reduction candidate.
8178
8179   Options Controlling the Preprocessor
8180       These options control the C preprocessor, which is run on each C source
8181       file before actual compilation.
8182
8183       If you use the -E option, nothing is done except preprocessing.  Some
8184       of these options make sense only together with -E because they cause
8185       the preprocessor output to be unsuitable for actual compilation.
8186
8187       -Wp,option
8188           You can use -Wp,option to bypass the compiler driver and pass
8189           option directly through to the preprocessor.  If option contains
8190           commas, it is split into multiple options at the commas.  However,
8191           many options are modified, translated or interpreted by the
8192           compiler driver before being passed to the preprocessor, and -Wp
8193           forcibly bypasses this phase.  The preprocessor's direct interface
8194           is undocumented and subject to change, so whenever possible you
8195           should avoid using -Wp and let the driver handle the options
8196           instead.
8197
8198       -Xpreprocessor option
8199           Pass option as an option to the preprocessor.  You can use this to
8200           supply system-specific preprocessor options that GCC does not
8201           recognize.
8202
8203           If you want to pass an option that takes an argument, you must use
8204           -Xpreprocessor twice, once for the option and once for the
8205           argument.
8206
8207       -no-integrated-cpp
8208           Perform preprocessing as a separate pass before compilation.  By
8209           default, GCC performs preprocessing as an integrated part of input
8210           tokenization and parsing.  If this option is provided, the
8211           appropriate language front end (cc1, cc1plus, or cc1obj for C, C++,
8212           and Objective-C, respectively) is instead invoked twice, once for
8213           preprocessing only and once for actual compilation of the
8214           preprocessed input.  This option may be useful in conjunction with
8215           the -B or -wrapper options to specify an alternate preprocessor or
8216           perform additional processing of the program source between normal
8217           preprocessing and compilation.
8218
8219       -D name
8220           Predefine name as a macro, with definition 1.
8221
8222       -D name=definition
8223           The contents of definition are tokenized and processed as if they
8224           appeared during translation phase three in a #define directive.  In
8225           particular, the definition will be truncated by embedded newline
8226           characters.
8227
8228           If you are invoking the preprocessor from a shell or shell-like
8229           program you may need to use the shell's quoting syntax to protect
8230           characters such as spaces that have a meaning in the shell syntax.
8231
8232           If you wish to define a function-like macro on the command line,
8233           write its argument list with surrounding parentheses before the
8234           equals sign (if any).  Parentheses are meaningful to most shells,
8235           so you will need to quote the option.  With sh and csh,
8236           -D'name(args...)=definition' works.
8237
8238           -D and -U options are processed in the order they are given on the
8239           command line.  All -imacros file and -include file options are
8240           processed after all -D and -U options.
8241
8242       -U name
8243           Cancel any previous definition of name, either built in or provided
8244           with a -D option.
8245
8246       -undef
8247           Do not predefine any system-specific or GCC-specific macros.  The
8248           standard predefined macros remain defined.
8249
8250       -I dir
8251           Add the directory dir to the list of directories to be searched for
8252           header files.  Directories named by -I are searched before the
8253           standard system include directories.  If the directory dir is a
8254           standard system include directory, the option is ignored to ensure
8255           that the default search order for system directories and the
8256           special treatment of system headers are not defeated .  If dir
8257           begins with "=", then the "=" will be replaced by the sysroot
8258           prefix; see --sysroot and -isysroot.
8259
8260       -o file
8261           Write output to file.  This is the same as specifying file as the
8262           second non-option argument to cpp.  gcc has a different
8263           interpretation of a second non-option argument, so you must use -o
8264           to specify the output file.
8265
8266       -Wall
8267           Turns on all optional warnings which are desirable for normal code.
8268           At present this is -Wcomment, -Wtrigraphs, -Wmultichar and a
8269           warning about integer promotion causing a change of sign in "#if"
8270           expressions.  Note that many of the preprocessor's warnings are on
8271           by default and have no options to control them.
8272
8273       -Wcomment
8274       -Wcomments
8275           Warn whenever a comment-start sequence /* appears in a /* comment,
8276           or whenever a backslash-newline appears in a // comment.  (Both
8277           forms have the same effect.)
8278
8279       -Wtrigraphs
8280           Most trigraphs in comments cannot affect the meaning of the
8281           program.  However, a trigraph that would form an escaped newline
8282           (??/ at the end of a line) can, by changing where the comment
8283           begins or ends.  Therefore, only trigraphs that would form escaped
8284           newlines produce warnings inside a comment.
8285
8286           This option is implied by -Wall.  If -Wall is not given, this
8287           option is still enabled unless trigraphs are enabled.  To get
8288           trigraph conversion without warnings, but get the other -Wall
8289           warnings, use -trigraphs -Wall -Wno-trigraphs.
8290
8291       -Wtraditional
8292           Warn about certain constructs that behave differently in
8293           traditional and ISO C.  Also warn about ISO C constructs that have
8294           no traditional C equivalent, and problematic constructs which
8295           should be avoided.
8296
8297       -Wundef
8298           Warn whenever an identifier which is not a macro is encountered in
8299           an #if directive, outside of defined.  Such identifiers are
8300           replaced with zero.
8301
8302       -Wunused-macros
8303           Warn about macros defined in the main file that are unused.  A
8304           macro is used if it is expanded or tested for existence at least
8305           once.  The preprocessor will also warn if the macro has not been
8306           used at the time it is redefined or undefined.
8307
8308           Built-in macros, macros defined on the command line, and macros
8309           defined in include files are not warned about.
8310
8311           Note: If a macro is actually used, but only used in skipped
8312           conditional blocks, then CPP will report it as unused.  To avoid
8313           the warning in such a case, you might improve the scope of the
8314           macro's definition by, for example, moving it into the first
8315           skipped block.  Alternatively, you could provide a dummy use with
8316           something like:
8317
8318                   #if defined the_macro_causing_the_warning
8319                   #endif
8320
8321       -Wendif-labels
8322           Warn whenever an #else or an #endif are followed by text.  This
8323           usually happens in code of the form
8324
8325                   #if FOO
8326                   ...
8327                   #else FOO
8328                   ...
8329                   #endif FOO
8330
8331           The second and third "FOO" should be in comments, but often are not
8332           in older programs.  This warning is on by default.
8333
8334       -Werror
8335           Make all warnings into hard errors.  Source code which triggers
8336           warnings will be rejected.
8337
8338       -Wsystem-headers
8339           Issue warnings for code in system headers.  These are normally
8340           unhelpful in finding bugs in your own code, therefore suppressed.
8341           If you are responsible for the system library, you may want to see
8342           them.
8343
8344       -w  Suppress all warnings, including those which GNU CPP issues by
8345           default.
8346
8347       -pedantic
8348           Issue all the mandatory diagnostics listed in the C standard.  Some
8349           of them are left out by default, since they trigger frequently on
8350           harmless code.
8351
8352       -pedantic-errors
8353           Issue all the mandatory diagnostics, and make all mandatory
8354           diagnostics into errors.  This includes mandatory diagnostics that
8355           GCC issues without -pedantic but treats as warnings.
8356
8357       -M  Instead of outputting the result of preprocessing, output a rule
8358           suitable for make describing the dependencies of the main source
8359           file.  The preprocessor outputs one make rule containing the object
8360           file name for that source file, a colon, and the names of all the
8361           included files, including those coming from -include or -imacros
8362           command line options.
8363
8364           Unless specified explicitly (with -MT or -MQ), the object file name
8365           consists of the name of the source file with any suffix replaced
8366           with object file suffix and with any leading directory parts
8367           removed.  If there are many included files then the rule is split
8368           into several lines using \-newline.  The rule has no commands.
8369
8370           This option does not suppress the preprocessor's debug output, such
8371           as -dM.  To avoid mixing such debug output with the dependency
8372           rules you should explicitly specify the dependency output file with
8373           -MF, or use an environment variable like DEPENDENCIES_OUTPUT.
8374           Debug output will still be sent to the regular output stream as
8375           normal.
8376
8377           Passing -M to the driver implies -E, and suppresses warnings with
8378           an implicit -w.
8379
8380       -MM Like -M but do not mention header files that are found in system
8381           header directories, nor header files that are included, directly or
8382           indirectly, from such a header.
8383
8384           This implies that the choice of angle brackets or double quotes in
8385           an #include directive does not in itself determine whether that
8386           header will appear in -MM dependency output.  This is a slight
8387           change in semantics from GCC versions 3.0 and earlier.
8388
8389       -MF file
8390           When used with -M or -MM, specifies a file to write the
8391           dependencies to.  If no -MF switch is given the preprocessor sends
8392           the rules to the same place it would have sent preprocessed output.
8393
8394           When used with the driver options -MD or -MMD, -MF overrides the
8395           default dependency output file.
8396
8397       -MG In conjunction with an option such as -M requesting dependency
8398           generation, -MG assumes missing header files are generated files
8399           and adds them to the dependency list without raising an error.  The
8400           dependency filename is taken directly from the "#include" directive
8401           without prepending any path.  -MG also suppresses preprocessed
8402           output, as a missing header file renders this useless.
8403
8404           This feature is used in automatic updating of makefiles.
8405
8406       -MP This option instructs CPP to add a phony target for each dependency
8407           other than the main file, causing each to depend on nothing.  These
8408           dummy rules work around errors make gives if you remove header
8409           files without updating the Makefile to match.
8410
8411           This is typical output:
8412
8413                   test.o: test.c test.h
8414
8415                   test.h:
8416
8417       -MT target
8418           Change the target of the rule emitted by dependency generation.  By
8419           default CPP takes the name of the main input file, deletes any
8420           directory components and any file suffix such as .c, and appends
8421           the platform's usual object suffix.  The result is the target.
8422
8423           An -MT option will set the target to be exactly the string you
8424           specify.  If you want multiple targets, you can specify them as a
8425           single argument to -MT, or use multiple -MT options.
8426
8427           For example, -MT '$(objpfx)foo.o' might give
8428
8429                   $(objpfx)foo.o: foo.c
8430
8431       -MQ target
8432           Same as -MT, but it quotes any characters which are special to
8433           Make.  -MQ '$(objpfx)foo.o' gives
8434
8435                   $$(objpfx)foo.o: foo.c
8436
8437           The default target is automatically quoted, as if it were given
8438           with -MQ.
8439
8440       -MD -MD is equivalent to -M -MF file, except that -E is not implied.
8441           The driver determines file based on whether an -o option is given.
8442           If it is, the driver uses its argument but with a suffix of .d,
8443           otherwise it takes the name of the input file, removes any
8444           directory components and suffix, and applies a .d suffix.
8445
8446           If -MD is used in conjunction with -E, any -o switch is understood
8447           to specify the dependency output file, but if used without -E, each
8448           -o is understood to specify a target object file.
8449
8450           Since -E is not implied, -MD can be used to generate a dependency
8451           output file as a side-effect of the compilation process.
8452
8453       -MMD
8454           Like -MD except mention only user header files, not system header
8455           files.
8456
8457       -fpch-deps
8458           When using precompiled headers, this flag will cause the
8459           dependency-output flags to also list the files from the precompiled
8460           header's dependencies.  If not specified only the precompiled
8461           header would be listed and not the files that were used to create
8462           it because those files are not consulted when a precompiled header
8463           is used.
8464
8465       -fpch-preprocess
8466           This option allows use of a precompiled header together with -E.
8467           It inserts a special "#pragma", "#pragma GCC pch_preprocess
8468           "filename"" in the output to mark the place where the precompiled
8469           header was found, and its filename.  When -fpreprocessed is in use,
8470           GCC recognizes this "#pragma" and loads the PCH.
8471
8472           This option is off by default, because the resulting preprocessed
8473           output is only really suitable as input to GCC.  It is switched on
8474           by -save-temps.
8475
8476           You should not write this "#pragma" in your own code, but it is
8477           safe to edit the filename if the PCH file is available in a
8478           different location.  The filename may be absolute or it may be
8479           relative to GCC's current directory.
8480
8481       -x c
8482       -x c++
8483       -x objective-c
8484       -x assembler-with-cpp
8485           Specify the source language: C, C++, Objective-C, or assembly.
8486           This has nothing to do with standards conformance or extensions; it
8487           merely selects which base syntax to expect.  If you give none of
8488           these options, cpp will deduce the language from the extension of
8489           the source file: .c, .cc, .m, or .S.  Some other common extensions
8490           for C++ and assembly are also recognized.  If cpp does not
8491           recognize the extension, it will treat the file as C; this is the
8492           most generic mode.
8493
8494           Note: Previous versions of cpp accepted a -lang option which
8495           selected both the language and the standards conformance level.
8496           This option has been removed, because it conflicts with the -l
8497           option.
8498
8499       -std=standard
8500       -ansi
8501           Specify the standard to which the code should conform.  Currently
8502           CPP knows about C and C++ standards; others may be added in the
8503           future.
8504
8505           standard may be one of:
8506
8507           "c90"
8508           "c89"
8509           "iso9899:1990"
8510               The ISO C standard from 1990.  c90 is the customary shorthand
8511               for this version of the standard.
8512
8513               The -ansi option is equivalent to -std=c90.
8514
8515           "iso9899:199409"
8516               The 1990 C standard, as amended in 1994.
8517
8518           "iso9899:1999"
8519           "c99"
8520           "iso9899:199x"
8521           "c9x"
8522               The revised ISO C standard, published in December 1999.  Before
8523               publication, this was known as C9X.
8524
8525           "iso9899:2011"
8526           "c11"
8527           "c1x"
8528               The revised ISO C standard, published in December 2011.  Before
8529               publication, this was known as C1X.
8530
8531           "gnu90"
8532           "gnu89"
8533               The 1990 C standard plus GNU extensions.  This is the default.
8534
8535           "gnu99"
8536           "gnu9x"
8537               The 1999 C standard plus GNU extensions.
8538
8539           "gnu11"
8540           "gnu1x"
8541               The 2011 C standard plus GNU extensions.
8542
8543           "c++98"
8544               The 1998 ISO C++ standard plus amendments.
8545
8546           "gnu++98"
8547               The same as -std=c++98 plus GNU extensions.  This is the
8548               default for C++ code.
8549
8550       -I- Split the include path.  Any directories specified with -I options
8551           before -I- are searched only for headers requested with
8552           "#include "file""; they are not searched for "#include <file>".  If
8553           additional directories are specified with -I options after the -I-,
8554           those directories are searched for all #include directives.
8555
8556           In addition, -I- inhibits the use of the directory of the current
8557           file directory as the first search directory for "#include "file"".
8558           This option has been deprecated.
8559
8560       -nostdinc
8561           Do not search the standard system directories for header files.
8562           Only the directories you have specified with -I options (and the
8563           directory of the current file, if appropriate) are searched.
8564
8565       -nostdinc++
8566           Do not search for header files in the C++-specific standard
8567           directories, but do still search the other standard directories.
8568           (This option is used when building the C++ library.)
8569
8570       -include file
8571           Process file as if "#include "file"" appeared as the first line of
8572           the primary source file.  However, the first directory searched for
8573           file is the preprocessor's working directory instead of the
8574           directory containing the main source file.  If not found there, it
8575           is searched for in the remainder of the "#include "..."" search
8576           chain as normal.
8577
8578           If multiple -include options are given, the files are included in
8579           the order they appear on the command line.
8580
8581       -imacros file
8582           Exactly like -include, except that any output produced by scanning
8583           file is thrown away.  Macros it defines remain defined.  This
8584           allows you to acquire all the macros from a header without also
8585           processing its declarations.
8586
8587           All files specified by -imacros are processed before all files
8588           specified by -include.
8589
8590       -idirafter dir
8591           Search dir for header files, but do it after all directories
8592           specified with -I and the standard system directories have been
8593           exhausted.  dir is treated as a system include directory.  If dir
8594           begins with "=", then the "=" will be replaced by the sysroot
8595           prefix; see --sysroot and -isysroot.
8596
8597       -iprefix prefix
8598           Specify prefix as the prefix for subsequent -iwithprefix options.
8599           If the prefix represents a directory, you should include the final
8600           /.
8601
8602       -iwithprefix dir
8603       -iwithprefixbefore dir
8604           Append dir to the prefix specified previously with -iprefix, and
8605           add the resulting directory to the include search path.
8606           -iwithprefixbefore puts it in the same place -I would; -iwithprefix
8607           puts it where -idirafter would.
8608
8609       -isysroot dir
8610           This option is like the --sysroot option, but applies only to
8611           header files (except for Darwin targets, where it applies to both
8612           header files and libraries).  See the --sysroot option for more
8613           information.
8614
8615       -imultilib dir
8616           Use dir as a subdirectory of the directory containing target-
8617           specific C++ headers.
8618
8619       -isystem dir
8620           Search dir for header files, after all directories specified by -I
8621           but before the standard system directories.  Mark it as a system
8622           directory, so that it gets the same special treatment as is applied
8623           to the standard system directories.  If dir begins with "=", then
8624           the "=" will be replaced by the sysroot prefix; see --sysroot and
8625           -isysroot.
8626
8627       -iquote dir
8628           Search dir only for header files requested with "#include "file"";
8629           they are not searched for "#include <file>", before all directories
8630           specified by -I and before the standard system directories.  If dir
8631           begins with "=", then the "=" will be replaced by the sysroot
8632           prefix; see --sysroot and -isysroot.
8633
8634       -fdirectives-only
8635           When preprocessing, handle directives, but do not expand macros.
8636
8637           The option's behavior depends on the -E and -fpreprocessed options.
8638
8639           With -E, preprocessing is limited to the handling of directives
8640           such as "#define", "#ifdef", and "#error".  Other preprocessor
8641           operations, such as macro expansion and trigraph conversion are not
8642           performed.  In addition, the -dD option is implicitly enabled.
8643
8644           With -fpreprocessed, predefinition of command line and most builtin
8645           macros is disabled.  Macros such as "__LINE__", which are
8646           contextually dependent, are handled normally.  This enables
8647           compilation of files previously preprocessed with "-E
8648           -fdirectives-only".
8649
8650           With both -E and -fpreprocessed, the rules for -fpreprocessed take
8651           precedence.  This enables full preprocessing of files previously
8652           preprocessed with "-E -fdirectives-only".
8653
8654       -fdollars-in-identifiers
8655           Accept $ in identifiers.
8656
8657       -fextended-identifiers
8658           Accept universal character names in identifiers.  This option is
8659           experimental; in a future version of GCC, it will be enabled by
8660           default for C99 and C++.
8661
8662       -fno-canonical-system-headers
8663           When preprocessing, do not shorten system header paths with
8664           canonicalization.
8665
8666       -fpreprocessed
8667           Indicate to the preprocessor that the input file has already been
8668           preprocessed.  This suppresses things like macro expansion,
8669           trigraph conversion, escaped newline splicing, and processing of
8670           most directives.  The preprocessor still recognizes and removes
8671           comments, so that you can pass a file preprocessed with -C to the
8672           compiler without problems.  In this mode the integrated
8673           preprocessor is little more than a tokenizer for the front ends.
8674
8675           -fpreprocessed is implicit if the input file has one of the
8676           extensions .i, .ii or .mi.  These are the extensions that GCC uses
8677           for preprocessed files created by -save-temps.
8678
8679       -ftabstop=width
8680           Set the distance between tab stops.  This helps the preprocessor
8681           report correct column numbers in warnings or errors, even if tabs
8682           appear on the line.  If the value is less than 1 or greater than
8683           100, the option is ignored.  The default is 8.
8684
8685       -fdebug-cpp
8686           This option is only useful for debugging GCC.  When used with -E,
8687           dumps debugging information about location maps.  Every token in
8688           the output is preceded by the dump of the map its location belongs
8689           to.  The dump of the map holding the location of a token would be:
8690
8691                   {"P":F</file/path>;"F":F</includer/path>;"L":<line_num>;"C":<col_num>;"S":<system_header_p>;"M":<map_address>;"E":<macro_expansion_p>,"loc":<location>}
8692
8693           When used without -E, this option has no effect.
8694
8695       -ftrack-macro-expansion[=level]
8696           Track locations of tokens across macro expansions. This allows the
8697           compiler to emit diagnostic about the current macro expansion stack
8698           when a compilation error occurs in a macro expansion. Using this
8699           option makes the preprocessor and the compiler consume more memory.
8700           The level parameter can be used to choose the level of precision of
8701           token location tracking thus decreasing the memory consumption if
8702           necessary. Value 0 of level de-activates this option just as if no
8703           -ftrack-macro-expansion was present on the command line. Value 1
8704           tracks tokens locations in a degraded mode for the sake of minimal
8705           memory overhead. In this mode all tokens resulting from the
8706           expansion of an argument of a function-like macro have the same
8707           location. Value 2 tracks tokens locations completely. This value is
8708           the most memory hungry.  When this option is given no argument, the
8709           default parameter value is 2.
8710
8711           Note that -ftrack-macro-expansion=2 is activated by default.
8712
8713       -fexec-charset=charset
8714           Set the execution character set, used for string and character
8715           constants.  The default is UTF-8.  charset can be any encoding
8716           supported by the system's "iconv" library routine.
8717
8718       -fwide-exec-charset=charset
8719           Set the wide execution character set, used for wide string and
8720           character constants.  The default is UTF-32 or UTF-16, whichever
8721           corresponds to the width of "wchar_t".  As with -fexec-charset,
8722           charset can be any encoding supported by the system's "iconv"
8723           library routine; however, you will have problems with encodings
8724           that do not fit exactly in "wchar_t".
8725
8726       -finput-charset=charset
8727           Set the input character set, used for translation from the
8728           character set of the input file to the source character set used by
8729           GCC.  If the locale does not specify, or GCC cannot get this
8730           information from the locale, the default is UTF-8.  This can be
8731           overridden by either the locale or this command line option.
8732           Currently the command line option takes precedence if there's a
8733           conflict.  charset can be any encoding supported by the system's
8734           "iconv" library routine.
8735
8736       -fworking-directory
8737           Enable generation of linemarkers in the preprocessor output that
8738           will let the compiler know the current working directory at the
8739           time of preprocessing.  When this option is enabled, the
8740           preprocessor will emit, after the initial linemarker, a second
8741           linemarker with the current working directory followed by two
8742           slashes.  GCC will use this directory, when it's present in the
8743           preprocessed input, as the directory emitted as the current working
8744           directory in some debugging information formats.  This option is
8745           implicitly enabled if debugging information is enabled, but this
8746           can be inhibited with the negated form -fno-working-directory.  If
8747           the -P flag is present in the command line, this option has no
8748           effect, since no "#line" directives are emitted whatsoever.
8749
8750       -fno-show-column
8751           Do not print column numbers in diagnostics.  This may be necessary
8752           if diagnostics are being scanned by a program that does not
8753           understand the column numbers, such as dejagnu.
8754
8755       -A predicate=answer
8756           Make an assertion with the predicate predicate and answer answer.
8757           This form is preferred to the older form -A predicate(answer),
8758           which is still supported, because it does not use shell special
8759           characters.
8760
8761       -A -predicate=answer
8762           Cancel an assertion with the predicate predicate and answer answer.
8763
8764       -dCHARS
8765           CHARS is a sequence of one or more of the following characters, and
8766           must not be preceded by a space.  Other characters are interpreted
8767           by the compiler proper, or reserved for future versions of GCC, and
8768           so are silently ignored.  If you specify characters whose behavior
8769           conflicts, the result is undefined.
8770
8771           M   Instead of the normal output, generate a list of #define
8772               directives for all the macros defined during the execution of
8773               the preprocessor, including predefined macros.  This gives you
8774               a way of finding out what is predefined in your version of the
8775               preprocessor.  Assuming you have no file foo.h, the command
8776
8777                       touch foo.h; cpp -dM foo.h
8778
8779               will show all the predefined macros.
8780
8781               If you use -dM without the -E option, -dM is interpreted as a
8782               synonym for -fdump-rtl-mach.
8783
8784           D   Like M except in two respects: it does not include the
8785               predefined macros, and it outputs both the #define directives
8786               and the result of preprocessing.  Both kinds of output go to
8787               the standard output file.
8788
8789           N   Like D, but emit only the macro names, not their expansions.
8790
8791           I   Output #include directives in addition to the result of
8792               preprocessing.
8793
8794           U   Like D except that only macros that are expanded, or whose
8795               definedness is tested in preprocessor directives, are output;
8796               the output is delayed until the use or test of the macro; and
8797               #undef directives are also output for macros tested but
8798               undefined at the time.
8799
8800       -P  Inhibit generation of linemarkers in the output from the
8801           preprocessor.  This might be useful when running the preprocessor
8802           on something that is not C code, and will be sent to a program
8803           which might be confused by the linemarkers.
8804
8805       -C  Do not discard comments.  All comments are passed through to the
8806           output file, except for comments in processed directives, which are
8807           deleted along with the directive.
8808
8809           You should be prepared for side effects when using -C; it causes
8810           the preprocessor to treat comments as tokens in their own right.
8811           For example, comments appearing at the start of what would be a
8812           directive line have the effect of turning that line into an
8813           ordinary source line, since the first token on the line is no
8814           longer a #.
8815
8816       -CC Do not discard comments, including during macro expansion.  This is
8817           like -C, except that comments contained within macros are also
8818           passed through to the output file where the macro is expanded.
8819
8820           In addition to the side-effects of the -C option, the -CC option
8821           causes all C++-style comments inside a macro to be converted to
8822           C-style comments.  This is to prevent later use of that macro from
8823           inadvertently commenting out the remainder of the source line.
8824
8825           The -CC option is generally used to support lint comments.
8826
8827       -traditional-cpp
8828           Try to imitate the behavior of old-fashioned C preprocessors, as
8829           opposed to ISO C preprocessors.
8830
8831       -trigraphs
8832           Process trigraph sequences.  These are three-character sequences,
8833           all starting with ??, that are defined by ISO C to stand for single
8834           characters.  For example, ??/ stands for \, so '??/n' is a
8835           character constant for a newline.  By default, GCC ignores
8836           trigraphs, but in standard-conforming modes it converts them.  See
8837           the -std and -ansi options.
8838
8839           The nine trigraphs and their replacements are
8840
8841                   Trigraph:       ??(  ??)  ??<  ??>  ??=  ??/  ??'  ??!  ??-
8842                   Replacement:      [    ]    {    }    #    \    ^    |    ~
8843
8844       -remap
8845           Enable special code to work around file systems which only permit
8846           very short file names, such as MS-DOS.
8847
8848       --help
8849       --target-help
8850           Print text describing all the command line options instead of
8851           preprocessing anything.
8852
8853       -v  Verbose mode.  Print out GNU CPP's version number at the beginning
8854           of execution, and report the final form of the include path.
8855
8856       -H  Print the name of each header file used, in addition to other
8857           normal activities.  Each name is indented to show how deep in the
8858           #include stack it is.  Precompiled header files are also printed,
8859           even if they are found to be invalid; an invalid precompiled header
8860           file is printed with ...x and a valid one with ...! .
8861
8862       -version
8863       --version
8864           Print out GNU CPP's version number.  With one dash, proceed to
8865           preprocess as normal.  With two dashes, exit immediately.
8866
8867   Passing Options to the Assembler
8868       You can pass options to the assembler.
8869
8870       -Wa,option
8871           Pass option as an option to the assembler.  If option contains
8872           commas, it is split into multiple options at the commas.
8873
8874       -Xassembler option
8875           Pass option as an option to the assembler.  You can use this to
8876           supply system-specific assembler options that GCC does not
8877           recognize.
8878
8879           If you want to pass an option that takes an argument, you must use
8880           -Xassembler twice, once for the option and once for the argument.
8881
8882   Options for Linking
8883       These options come into play when the compiler links object files into
8884       an executable output file.  They are meaningless if the compiler is not
8885       doing a link step.
8886
8887       object-file-name
8888           A file name that does not end in a special recognized suffix is
8889           considered to name an object file or library.  (Object files are
8890           distinguished from libraries by the linker according to the file
8891           contents.)  If linking is done, these object files are used as
8892           input to the linker.
8893
8894       -c
8895       -S
8896       -E  If any of these options is used, then the linker is not run, and
8897           object file names should not be used as arguments.
8898
8899       -llibrary
8900       -l library
8901           Search the library named library when linking.  (The second
8902           alternative with the library as a separate argument is only for
8903           POSIX compliance and is not recommended.)
8904
8905           It makes a difference where in the command you write this option;
8906           the linker searches and processes libraries and object files in the
8907           order they are specified.  Thus, foo.o -lz bar.o searches library z
8908           after file foo.o but before bar.o.  If bar.o refers to functions in
8909           z, those functions may not be loaded.
8910
8911           The linker searches a standard list of directories for the library,
8912           which is actually a file named liblibrary.a.  The linker then uses
8913           this file as if it had been specified precisely by name.
8914
8915           The directories searched include several standard system
8916           directories plus any that you specify with -L.
8917
8918           Normally the files found this way are library files---archive files
8919           whose members are object files.  The linker handles an archive file
8920           by scanning through it for members which define symbols that have
8921           so far been referenced but not defined.  But if the file that is
8922           found is an ordinary object file, it is linked in the usual
8923           fashion.  The only difference between using an -l option and
8924           specifying a file name is that -l surrounds library with lib and .a
8925           and searches several directories.
8926
8927       -lobjc
8928           You need this special case of the -l option in order to link an
8929           Objective-C or Objective-C++ program.
8930
8931       -nostartfiles
8932           Do not use the standard system startup files when linking.  The
8933           standard system libraries are used normally, unless -nostdlib or
8934           -nodefaultlibs is used.
8935
8936       -nodefaultlibs
8937           Do not use the standard system libraries when linking.  Only the
8938           libraries you specify are passed to the linker, and options
8939           specifying linkage of the system libraries, such as
8940           "-static-libgcc" or "-shared-libgcc", are ignored.  The standard
8941           startup files are used normally, unless -nostartfiles is used.
8942
8943           The compiler may generate calls to "memcmp", "memset", "memcpy" and
8944           "memmove".  These entries are usually resolved by entries in libc.
8945           These entry points should be supplied through some other mechanism
8946           when this option is specified.
8947
8948       -nostdlib
8949           Do not use the standard system startup files or libraries when
8950           linking.  No startup files and only the libraries you specify are
8951           passed to the linker, and options specifying linkage of the system
8952           libraries, such as "-static-libgcc" or "-shared-libgcc", are
8953           ignored.
8954
8955           The compiler may generate calls to "memcmp", "memset", "memcpy" and
8956           "memmove".  These entries are usually resolved by entries in libc.
8957           These entry points should be supplied through some other mechanism
8958           when this option is specified.
8959
8960           One of the standard libraries bypassed by -nostdlib and
8961           -nodefaultlibs is libgcc.a, a library of internal subroutines which
8962           GCC uses to overcome shortcomings of particular machines, or
8963           special needs for some languages.
8964
8965           In most cases, you need libgcc.a even when you want to avoid other
8966           standard libraries.  In other words, when you specify -nostdlib or
8967           -nodefaultlibs you should usually specify -lgcc as well.  This
8968           ensures that you have no unresolved references to internal GCC
8969           library subroutines.  (An example of such an internal subroutine is
8970           __main, used to ensure C++ constructors are called.)
8971
8972       -pie
8973           Produce a position independent executable on targets that support
8974           it.  For predictable results, you must also specify the same set of
8975           options used for compilation (-fpie, -fPIE, or model suboptions)
8976           when you specify this linker option.
8977
8978       -rdynamic
8979           Pass the flag -export-dynamic to the ELF linker, on targets that
8980           support it. This instructs the linker to add all symbols, not only
8981           used ones, to the dynamic symbol table. This option is needed for
8982           some uses of "dlopen" or to allow obtaining backtraces from within
8983           a program.
8984
8985       -s  Remove all symbol table and relocation information from the
8986           executable.
8987
8988       -static
8989           On systems that support dynamic linking, this prevents linking with
8990           the shared libraries.  On other systems, this option has no effect.
8991
8992       -shared
8993           Produce a shared object which can then be linked with other objects
8994           to form an executable.  Not all systems support this option.  For
8995           predictable results, you must also specify the same set of options
8996           used for compilation (-fpic, -fPIC, or model suboptions) when you
8997           specify this linker option.[1]
8998
8999       -shared-libgcc
9000       -static-libgcc
9001           On systems that provide libgcc as a shared library, these options
9002           force the use of either the shared or static version, respectively.
9003           If no shared version of libgcc was built when the compiler was
9004           configured, these options have no effect.
9005
9006           There are several situations in which an application should use the
9007           shared libgcc instead of the static version.  The most common of
9008           these is when the application wishes to throw and catch exceptions
9009           across different shared libraries.  In that case, each of the
9010           libraries as well as the application itself should use the shared
9011           libgcc.
9012
9013           Therefore, the G++ and GCJ drivers automatically add -shared-libgcc
9014           whenever you build a shared library or a main executable, because
9015           C++ and Java programs typically use exceptions, so this is the
9016           right thing to do.
9017
9018           If, instead, you use the GCC driver to create shared libraries, you
9019           may find that they are not always linked with the shared libgcc.
9020           If GCC finds, at its configuration time, that you have a non-GNU
9021           linker or a GNU linker that does not support option --eh-frame-hdr,
9022           it links the shared version of libgcc into shared libraries by
9023           default.  Otherwise, it takes advantage of the linker and optimizes
9024           away the linking with the shared version of libgcc, linking with
9025           the static version of libgcc by default.  This allows exceptions to
9026           propagate through such shared libraries, without incurring
9027           relocation costs at library load time.
9028
9029           However, if a library or main executable is supposed to throw or
9030           catch exceptions, you must link it using the G++ or GCJ driver, as
9031           appropriate for the languages used in the program, or using the
9032           option -shared-libgcc, such that it is linked with the shared
9033           libgcc.
9034
9035       -static-libasan
9036           When the -fsanitize=address option is used to link a program, the
9037           GCC driver automatically links against libasan.  If libasan is
9038           available as a shared library, and the -static option is not used,
9039           then this links against the shared version of libasan.  The
9040           -static-libasan option directs the GCC driver to link libasan
9041           statically, without necessarily linking other libraries statically.
9042
9043       -static-libtsan
9044           When the -fsanitize=thread option is used to link a program, the
9045           GCC driver automatically links against libtsan.  If libtsan is
9046           available as a shared library, and the -static option is not used,
9047           then this links against the shared version of libtsan.  The
9048           -static-libtsan option directs the GCC driver to link libtsan
9049           statically, without necessarily linking other libraries statically.
9050
9051       -static-libstdc++
9052           When the g++ program is used to link a C++ program, it normally
9053           automatically links against libstdc++.  If libstdc++ is available
9054           as a shared library, and the -static option is not used, then this
9055           links against the shared version of libstdc++.  That is normally
9056           fine.  However, it is sometimes useful to freeze the version of
9057           libstdc++ used by the program without going all the way to a fully
9058           static link.  The -static-libstdc++ option directs the g++ driver
9059           to link libstdc++ statically, without necessarily linking other
9060           libraries statically.
9061
9062       -symbolic
9063           Bind references to global symbols when building a shared object.
9064           Warn about any unresolved references (unless overridden by the link
9065           editor option -Xlinker -z -Xlinker defs).  Only a few systems
9066           support this option.
9067
9068       -T script
9069           Use script as the linker script.  This option is supported by most
9070           systems using the GNU linker.  On some targets, such as bare-board
9071           targets without an operating system, the -T option may be required
9072           when linking to avoid references to undefined symbols.
9073
9074       -Xlinker option
9075           Pass option as an option to the linker.  You can use this to supply
9076           system-specific linker options that GCC does not recognize.
9077
9078           If you want to pass an option that takes a separate argument, you
9079           must use -Xlinker twice, once for the option and once for the
9080           argument.  For example, to pass -assert definitions, you must write
9081           -Xlinker -assert -Xlinker definitions.  It does not work to write
9082           -Xlinker "-assert definitions", because this passes the entire
9083           string as a single argument, which is not what the linker expects.
9084
9085           When using the GNU linker, it is usually more convenient to pass
9086           arguments to linker options using the option=value syntax than as
9087           separate arguments.  For example, you can specify -Xlinker
9088           -Map=output.map rather than -Xlinker -Map -Xlinker output.map.
9089           Other linkers may not support this syntax for command-line options.
9090
9091       -Wl,option
9092           Pass option as an option to the linker.  If option contains commas,
9093           it is split into multiple options at the commas.  You can use this
9094           syntax to pass an argument to the option.  For example,
9095           -Wl,-Map,output.map passes -Map output.map to the linker.  When
9096           using the GNU linker, you can also get the same effect with
9097           -Wl,-Map=output.map.
9098
9099       -u symbol
9100           Pretend the symbol symbol is undefined, to force linking of library
9101           modules to define it.  You can use -u multiple times with different
9102           symbols to force loading of additional library modules.
9103
9104   Options for Directory Search
9105       These options specify directories to search for header files, for
9106       libraries and for parts of the compiler:
9107
9108       -Idir
9109           Add the directory dir to the head of the list of directories to be
9110           searched for header files.  This can be used to override a system
9111           header file, substituting your own version, since these directories
9112           are searched before the system header file directories.  However,
9113           you should not use this option to add directories that contain
9114           vendor-supplied system header files (use -isystem for that).  If
9115           you use more than one -I option, the directories are scanned in
9116           left-to-right order; the standard system directories come after.
9117
9118           If a standard system include directory, or a directory specified
9119           with -isystem, is also specified with -I, the -I option is ignored.
9120           The directory is still searched but as a system directory at its
9121           normal position in the system include chain.  This is to ensure
9122           that GCC's procedure to fix buggy system headers and the ordering
9123           for the "include_next" directive are not inadvertently changed.  If
9124           you really need to change the search order for system directories,
9125           use the -nostdinc and/or -isystem options.
9126
9127       -iplugindir=dir
9128           Set the directory to search for plugins that are passed by
9129           -fplugin=name instead of -fplugin=path/name.so.  This option is not
9130           meant to be used by the user, but only passed by the driver.
9131
9132       -iquotedir
9133           Add the directory dir to the head of the list of directories to be
9134           searched for header files only for the case of #include "file";
9135           they are not searched for #include <file>, otherwise just like -I.
9136
9137       -Ldir
9138           Add directory dir to the list of directories to be searched for -l.
9139
9140       -Bprefix
9141           This option specifies where to find the executables, libraries,
9142           include files, and data files of the compiler itself.
9143
9144           The compiler driver program runs one or more of the subprograms
9145           cpp, cc1, as and ld.  It tries prefix as a prefix for each program
9146           it tries to run, both with and without machine/version/.
9147
9148           For each subprogram to be run, the compiler driver first tries the
9149           -B prefix, if any.  If that name is not found, or if -B is not
9150           specified, the driver tries two standard prefixes, /usr/lib/gcc/
9151           and /usr/local/lib/gcc/.  If neither of those results in a file
9152           name that is found, the unmodified program name is searched for
9153           using the directories specified in your PATH environment variable.
9154
9155           The compiler checks to see if the path provided by the -B refers to
9156           a directory, and if necessary it adds a directory separator
9157           character at the end of the path.
9158
9159           -B prefixes that effectively specify directory names also apply to
9160           libraries in the linker, because the compiler translates these
9161           options into -L options for the linker.  They also apply to
9162           includes files in the preprocessor, because the compiler translates
9163           these options into -isystem options for the preprocessor.  In this
9164           case, the compiler appends include to the prefix.
9165
9166           The runtime support file libgcc.a can also be searched for using
9167           the -B prefix, if needed.  If it is not found there, the two
9168           standard prefixes above are tried, and that is all.  The file is
9169           left out of the link if it is not found by those means.
9170
9171           Another way to specify a prefix much like the -B prefix is to use
9172           the environment variable GCC_EXEC_PREFIX.
9173
9174           As a special kludge, if the path provided by -B is [dir/]stageN/,
9175           where N is a number in the range 0 to 9, then it is replaced by
9176           [dir/]include.  This is to help with boot-strapping the compiler.
9177
9178       -specs=file
9179           Process file after the compiler reads in the standard specs file,
9180           in order to override the defaults which the gcc driver program uses
9181           when determining what switches to pass to cc1, cc1plus, as, ld,
9182           etc.  More than one -specs=file can be specified on the command
9183           line, and they are processed in order, from left to right.
9184
9185       --sysroot=dir
9186           Use dir as the logical root directory for headers and libraries.
9187           For example, if the compiler normally searches for headers in
9188           /usr/include and libraries in /usr/lib, it instead searches
9189           dir/usr/include and dir/usr/lib.
9190
9191           If you use both this option and the -isysroot option, then the
9192           --sysroot option applies to libraries, but the -isysroot option
9193           applies to header files.
9194
9195           The GNU linker (beginning with version 2.16) has the necessary
9196           support for this option.  If your linker does not support this
9197           option, the header file aspect of --sysroot still works, but the
9198           library aspect does not.
9199
9200       --no-sysroot-suffix
9201           For some targets, a suffix is added to the root directory specified
9202           with --sysroot, depending on the other options used, so that
9203           headers may for example be found in dir/suffix/usr/include instead
9204           of dir/usr/include.  This option disables the addition of such a
9205           suffix.
9206
9207       -I- This option has been deprecated.  Please use -iquote instead for -I
9208           directories before the -I- and remove the -I-.  Any directories you
9209           specify with -I options before the -I- option are searched only for
9210           the case of #include "file"; they are not searched for #include
9211           <file>.
9212
9213           If additional directories are specified with -I options after the
9214           -I-, these directories are searched for all #include directives.
9215           (Ordinarily all -I directories are used this way.)
9216
9217           In addition, the -I- option inhibits the use of the current
9218           directory (where the current input file came from) as the first
9219           search directory for #include "file".  There is no way to override
9220           this effect of -I-.  With -I. you can specify searching the
9221           directory that is current when the compiler is invoked.  That is
9222           not exactly the same as what the preprocessor does by default, but
9223           it is often satisfactory.
9224
9225           -I- does not inhibit the use of the standard system directories for
9226           header files.  Thus, -I- and -nostdinc are independent.
9227
9228   Specifying Target Machine and Compiler Version
9229       The usual way to run GCC is to run the executable called gcc, or
9230       machine-gcc when cross-compiling, or machine-gcc-version to run a
9231       version other than the one that was installed last.
9232
9233   Hardware Models and Configurations
9234       Each target machine types can have its own special options, starting
9235       with -m, to choose among various hardware models or
9236       configurations---for example, 68010 vs 68020, floating coprocessor or
9237       none.  A single installed version of the compiler can compile for any
9238       model or configuration, according to the options specified.
9239
9240       Some configurations of the compiler also support additional special
9241       options, usually for compatibility with other compilers on the same
9242       platform.
9243
9244   AArch64 Options
9245       These options are defined for AArch64 implementations:
9246
9247       -mbig-endian
9248           Generate big-endian code.  This is the default when GCC is
9249           configured for an aarch64_be-*-* target.
9250
9251       -mgeneral-regs-only
9252           Generate code which uses only the general registers.
9253
9254       -mlittle-endian
9255           Generate little-endian code.  This is the default when GCC is
9256           configured for an aarch64-*-* but not an aarch64_be-*-* target.
9257
9258       -mcmodel=tiny
9259           Generate code for the tiny code model.  The program and its
9260           statically defined symbols must be within 1GB of each other.
9261           Pointers are 64 bits.  Programs can be statically or dynamically
9262           linked.  This model is not fully implemented and mostly treated as
9263           small.
9264
9265       -mcmodel=small
9266           Generate code for the small code model.  The program and its
9267           statically defined symbols must be within 4GB of each other.
9268           Pointers are 64 bits.  Programs can be statically or dynamically
9269           linked.  This is the default code model.
9270
9271       -mcmodel=large
9272           Generate code for the large code model.  This makes no assumptions
9273           about addresses and sizes of sections.  Pointers are 64 bits.
9274           Programs can be statically linked only.
9275
9276       -mstrict-align
9277           Do not assume that unaligned memory references will be handled by
9278           the system.
9279
9280       -momit-leaf-frame-pointer
9281       -mno-omit-leaf-frame-pointer
9282           Omit or keep the frame pointer in leaf functions.  The former
9283           behaviour is the default.
9284
9285       -mtls-dialect=desc
9286           Use TLS descriptors as the thread-local storage mechanism for
9287           dynamic accesses of TLS variables.  This is the default.
9288
9289       -mtls-dialect=traditional
9290           Use traditional TLS as the thread-local storage mechanism for
9291           dynamic accesses of TLS variables.
9292
9293       -mfix-cortex-a53-835769
9294       -mno-fix-cortex-a53-835769
9295           Enable or disable the workaround for the ARM Cortex-A53 erratum
9296           number 835769.  This will involve inserting a NOP instruction
9297           between memory instructions and 64-bit integer multiply-accumulate
9298           instructions.
9299
9300       -march=name
9301           Specify the name of the target architecture, optionally suffixed by
9302           one or more feature modifiers.  This option has the form
9303           -march=arch{+[no]feature}*, where the only value for arch is
9304           armv8-a.  The possible values for feature are documented in the
9305           sub-section below.
9306
9307           Where conflicting feature modifiers are specified, the right-most
9308           feature is used.
9309
9310           GCC uses this name to determine what kind of instructions it can
9311           emit when generating assembly code.  This option can be used in
9312           conjunction with or instead of the -mcpu= option.
9313
9314       -mcpu=name
9315           Specify the name of the target processor, optionally suffixed by
9316           one or more feature modifiers.  This option has the form
9317           -mcpu=cpu{+[no]feature}*, where the possible values for cpu are
9318           generic, large.  The possible values for feature are documented in
9319           the sub-section below.
9320
9321           Where conflicting feature modifiers are specified, the right-most
9322           feature is used.
9323
9324           GCC uses this name to determine what kind of instructions it can
9325           emit when generating assembly code.
9326
9327       -mtune=name
9328           Specify the name of the processor to tune the performance for.  The
9329           code will be tuned as if the target processor were of the type
9330           specified in this option, but still using instructions compatible
9331           with the target processor specified by a -mcpu= option.  This
9332           option cannot be suffixed by feature modifiers.
9333
9334       -march and -mcpu feature modifiers
9335
9336       Feature modifiers used with -march and -mcpu can be one the following:
9337
9338       crc Enable CRC extension.
9339
9340       crypto
9341           Enable Crypto extension.  This implies Advanced SIMD is enabled.
9342
9343       fp  Enable floating-point instructions.
9344
9345       simd
9346           Enable Advanced SIMD instructions.  This implies floating-point
9347           instructions are enabled.  This is the default for all current
9348           possible values for options -march and -mcpu=.
9349
9350   Adapteva Epiphany Options
9351       These -m options are defined for Adapteva Epiphany:
9352
9353       -mhalf-reg-file
9354           Don't allocate any register in the range "r32"..."r63".  That
9355           allows code to run on hardware variants that lack these registers.
9356
9357       -mprefer-short-insn-regs
9358           Preferrentially allocate registers that allow short instruction
9359           generation.  This can result in increased instruction count, so
9360           this may either reduce or increase overall code size.
9361
9362       -mbranch-cost=num
9363           Set the cost of branches to roughly num "simple" instructions.
9364           This cost is only a heuristic and is not guaranteed to produce
9365           consistent results across releases.
9366
9367       -mcmove
9368           Enable the generation of conditional moves.
9369
9370       -mnops=num
9371           Emit num NOPs before every other generated instruction.
9372
9373       -mno-soft-cmpsf
9374           For single-precision floating-point comparisons, emit an "fsub"
9375           instruction and test the flags.  This is faster than a software
9376           comparison, but can get incorrect results in the presence of NaNs,
9377           or when two different small numbers are compared such that their
9378           difference is calculated as zero.  The default is -msoft-cmpsf,
9379           which uses slower, but IEEE-compliant, software comparisons.
9380
9381       -mstack-offset=num
9382           Set the offset between the top of the stack and the stack pointer.
9383           E.g., a value of 8 means that the eight bytes in the range
9384           "sp+0...sp+7" can be used by leaf functions without stack
9385           allocation.  Values other than 8 or 16 are untested and unlikely to
9386           work.  Note also that this option changes the ABI; compiling a
9387           program with a different stack offset than the libraries have been
9388           compiled with generally does not work.  This option can be useful
9389           if you want to evaluate if a different stack offset would give you
9390           better code, but to actually use a different stack offset to build
9391           working programs, it is recommended to configure the toolchain with
9392           the appropriate --with-stack-offset=num option.
9393
9394       -mno-round-nearest
9395           Make the scheduler assume that the rounding mode has been set to
9396           truncating.  The default is -mround-nearest.
9397
9398       -mlong-calls
9399           If not otherwise specified by an attribute, assume all calls might
9400           be beyond the offset range of the "b" / "bl" instructions, and
9401           therefore load the function address into a register before
9402           performing a (otherwise direct) call.  This is the default.
9403
9404       -mshort-calls
9405           If not otherwise specified by an attribute, assume all direct calls
9406           are in the range of the "b" / "bl" instructions, so use these
9407           instructions for direct calls.  The default is -mlong-calls.
9408
9409       -msmall16
9410           Assume addresses can be loaded as 16-bit unsigned values.  This
9411           does not apply to function addresses for which -mlong-calls
9412           semantics are in effect.
9413
9414       -mfp-mode=mode
9415           Set the prevailing mode of the floating-point unit.  This
9416           determines the floating-point mode that is provided and expected at
9417           function call and return time.  Making this mode match the mode you
9418           predominantly need at function start can make your programs smaller
9419           and faster by avoiding unnecessary mode switches.
9420
9421           mode can be set to one the following values:
9422
9423           caller
9424               Any mode at function entry is valid, and retained or restored
9425               when the function returns, and when it calls other functions.
9426               This mode is useful for compiling libraries or other
9427               compilation units you might want to incorporate into different
9428               programs with different prevailing FPU modes, and the
9429               convenience of being able to use a single object file outweighs
9430               the size and speed overhead for any extra mode switching that
9431               might be needed, compared with what would be needed with a more
9432               specific choice of prevailing FPU mode.
9433
9434           truncate
9435               This is the mode used for floating-point calculations with
9436               truncating (i.e. round towards zero) rounding mode.  That
9437               includes conversion from floating point to integer.
9438
9439           round-nearest
9440               This is the mode used for floating-point calculations with
9441               round-to-nearest-or-even rounding mode.
9442
9443           int This is the mode used to perform integer calculations in the
9444               FPU, e.g.  integer multiply, or integer multiply-and-
9445               accumulate.
9446
9447           The default is -mfp-mode=caller
9448
9449       -mnosplit-lohi
9450       -mno-postinc
9451       -mno-postmodify
9452           Code generation tweaks that disable, respectively, splitting of
9453           32-bit loads, generation of post-increment addresses, and
9454           generation of post-modify addresses.  The defaults are msplit-lohi,
9455           -mpost-inc, and -mpost-modify.
9456
9457       -mnovect-double
9458           Change the preferred SIMD mode to SImode.  The default is
9459           -mvect-double, which uses DImode as preferred SIMD mode.
9460
9461       -max-vect-align=num
9462           The maximum alignment for SIMD vector mode types.  num may be 4 or
9463           8.  The default is 8.  Note that this is an ABI change, even though
9464           many library function interfaces are unaffected if they don't use
9465           SIMD vector modes in places that affect size and/or alignment of
9466           relevant types.
9467
9468       -msplit-vecmove-early
9469           Split vector moves into single word moves before reload.  In theory
9470           this can give better register allocation, but so far the reverse
9471           seems to be generally the case.
9472
9473       -m1reg-reg
9474           Specify a register to hold the constant -1, which makes loading
9475           small negative constants and certain bitmasks faster.  Allowable
9476           values for reg are r43 and r63, which specify use of that register
9477           as a fixed register, and none, which means that no register is used
9478           for this purpose.  The default is -m1reg-none.
9479
9480   ARM Options
9481       These -m options are defined for Advanced RISC Machines (ARM)
9482       architectures:
9483
9484       -mabi=name
9485           Generate code for the specified ABI.  Permissible values are: apcs-
9486           gnu, atpcs, aapcs, aapcs-linux and iwmmxt.
9487
9488       -mapcs-frame
9489           Generate a stack frame that is compliant with the ARM Procedure
9490           Call Standard for all functions, even if this is not strictly
9491           necessary for correct execution of the code.  Specifying
9492           -fomit-frame-pointer with this option causes the stack frames not
9493           to be generated for leaf functions.  The default is
9494           -mno-apcs-frame.
9495
9496       -mapcs
9497           This is a synonym for -mapcs-frame.
9498
9499       -mthumb-interwork
9500           Generate code that supports calling between the ARM and Thumb
9501           instruction sets.  Without this option, on pre-v5 architectures,
9502           the two instruction sets cannot be reliably used inside one
9503           program.  The default is -mno-thumb-interwork, since slightly
9504           larger code is generated when -mthumb-interwork is specified.  In
9505           AAPCS configurations this option is meaningless.
9506
9507       -mno-sched-prolog
9508           Prevent the reordering of instructions in the function prologue, or
9509           the merging of those instruction with the instructions in the
9510           function's body.  This means that all functions start with a
9511           recognizable set of instructions (or in fact one of a choice from a
9512           small set of different function prologues), and this information
9513           can be used to locate the start of functions inside an executable
9514           piece of code.  The default is -msched-prolog.
9515
9516       -mfloat-abi=name
9517           Specifies which floating-point ABI to use.  Permissible values are:
9518           soft, softfp and hard.
9519
9520           Specifying soft causes GCC to generate output containing library
9521           calls for floating-point operations.  softfp allows the generation
9522           of code using hardware floating-point instructions, but still uses
9523           the soft-float calling conventions.  hard allows generation of
9524           floating-point instructions and uses FPU-specific calling
9525           conventions.
9526
9527           The default depends on the specific target configuration.  Note
9528           that the hard-float and soft-float ABIs are not link-compatible;
9529           you must compile your entire program with the same ABI, and link
9530           with a compatible set of libraries.
9531
9532       -mlittle-endian
9533           Generate code for a processor running in little-endian mode.  This
9534           is the default for all standard configurations.
9535
9536       -mbig-endian
9537           Generate code for a processor running in big-endian mode; the
9538           default is to compile code for a little-endian processor.
9539
9540       -mwords-little-endian
9541           This option only applies when generating code for big-endian
9542           processors.  Generate code for a little-endian word order but a
9543           big-endian byte order.  That is, a byte order of the form 32107654.
9544           Note: this option should only be used if you require compatibility
9545           with code for big-endian ARM processors generated by versions of
9546           the compiler prior to 2.8.  This option is now deprecated.
9547
9548       -march=name
9549           This specifies the name of the target ARM architecture.  GCC uses
9550           this name to determine what kind of instructions it can emit when
9551           generating assembly code.  This option can be used in conjunction
9552           with or instead of the -mcpu= option.  Permissible names are:
9553           armv2, armv2a, armv3, armv3m, armv4, armv4t, armv5, armv5t, armv5e,
9554           armv5te, armv6, armv6j, armv6t2, armv6z, armv6zk, armv6-m, armv7,
9555           armv7-a, armv7-r, armv7-m, armv7e-m armv8-a, iwmmxt, iwmmxt2,
9556           ep9312.
9557
9558           -march=native causes the compiler to auto-detect the architecture
9559           of the build computer.  At present, this feature is only supported
9560           on GNU/Linux, and not all architectures are recognized.  If the
9561           auto-detect is unsuccessful the option has no effect.
9562
9563       -mtune=name
9564           This option specifies the name of the target ARM processor for
9565           which GCC should tune the performance of the code.  For some ARM
9566           implementations better performance can be obtained by using this
9567           option.  Permissible names are: arm2, arm250, arm3, arm6, arm60,
9568           arm600, arm610, arm620, arm7, arm7m, arm7d, arm7dm, arm7di,
9569           arm7dmi, arm70, arm700, arm700i, arm710, arm710c, arm7100, arm720,
9570           arm7500, arm7500fe, arm7tdmi, arm7tdmi-s, arm710t, arm720t,
9571           arm740t, strongarm, strongarm110, strongarm1100, strongarm1110,
9572           arm8, arm810, arm9, arm9e, arm920, arm920t, arm922t, arm946e-s,
9573           arm966e-s, arm968e-s, arm926ej-s, arm940t, arm9tdmi, arm10tdmi,
9574           arm1020t, arm1026ej-s, arm10e, arm1020e, arm1022e, arm1136j-s,
9575           arm1136jf-s, mpcore, mpcorenovfp, arm1156t2-s, arm1156t2f-s,
9576           arm1176jz-s, arm1176jzf-s, cortex-a5, cortex-a7, cortex-a8,
9577           cortex-a9, cortex-a15, cortex-r4, cortex-r4f, cortex-r5, cortex-m4,
9578           cortex-m3, cortex-m1, cortex-m0, cortex-m0plus, marvell-pj4,
9579           xscale, iwmmxt, iwmmxt2, ep9312, fa526, fa626, fa606te, fa626te,
9580           fmp626, fa726te.
9581
9582           -mtune=generic-arch specifies that GCC should tune the performance
9583           for a blend of processors within architecture arch.  The aim is to
9584           generate code that run well on the current most popular processors,
9585           balancing between optimizations that benefit some CPUs in the
9586           range, and avoiding performance pitfalls of other CPUs.  The
9587           effects of this option may change in future GCC versions as CPU
9588           models come and go.
9589
9590           -mtune=native causes the compiler to auto-detect the CPU of the
9591           build computer.  At present, this feature is only supported on
9592           GNU/Linux, and not all architectures are recognized.  If the auto-
9593           detect is unsuccessful the option has no effect.
9594
9595       -mcpu=name
9596           This specifies the name of the target ARM processor.  GCC uses this
9597           name to derive the name of the target ARM architecture (as if
9598           specified by -march) and the ARM processor type for which to tune
9599           for performance (as if specified by -mtune).  Where this option is
9600           used in conjunction with -march or -mtune, those options take
9601           precedence over the appropriate part of this option.
9602
9603           Permissible names for this option are the same as those for -mtune.
9604
9605           -mcpu=generic-arch is also permissible, and is equivalent to
9606           -march=arch -mtune=generic-arch.  See -mtune for more information.
9607
9608           -mcpu=native causes the compiler to auto-detect the CPU of the
9609           build computer.  At present, this feature is only supported on
9610           GNU/Linux, and not all architectures are recognized.  If the auto-
9611           detect is unsuccessful the option has no effect.
9612
9613       -mfpu=name
9614           This specifies what floating-point hardware (or hardware emulation)
9615           is available on the target.  Permissible names are: vfp, vfpv3,
9616           vfpv3-fp16, vfpv3-d16, vfpv3-d16-fp16, vfpv3xd, vfpv3xd-fp16, neon,
9617           neon-fp16, vfpv4, vfpv4-d16, fpv4-sp-d16, neon-vfpv4, fp-armv8,
9618           neon-fp-armv8, and crypto-neon-fp-armv8.
9619
9620           If -msoft-float is specified this specifies the format of floating-
9621           point values.
9622
9623           If the selected floating-point hardware includes the NEON extension
9624           (e.g. -mfpu=neon), note that floating-point operations are not
9625           generated by GCC's auto-vectorization pass unless
9626           -funsafe-math-optimizations is also specified.  This is because
9627           NEON hardware does not fully implement the IEEE 754 standard for
9628           floating-point arithmetic (in particular denormal values are
9629           treated as zero), so the use of NEON instructions may lead to a
9630           loss of precision.
9631
9632       -mfp16-format=name
9633           Specify the format of the "__fp16" half-precision floating-point
9634           type.  Permissible names are none, ieee, and alternative; the
9635           default is none, in which case the "__fp16" type is not defined.
9636
9637       -mstructure-size-boundary=n
9638           The sizes of all structures and unions are rounded up to a multiple
9639           of the number of bits set by this option.  Permissible values are
9640           8, 32 and 64.  The default value varies for different toolchains.
9641           For the COFF targeted toolchain the default value is 8.  A value of
9642           64 is only allowed if the underlying ABI supports it.
9643
9644           Specifying a larger number can produce faster, more efficient code,
9645           but can also increase the size of the program.  Different values
9646           are potentially incompatible.  Code compiled with one value cannot
9647           necessarily expect to work with code or libraries compiled with
9648           another value, if they exchange information using structures or
9649           unions.
9650
9651       -mabort-on-noreturn
9652           Generate a call to the function "abort" at the end of a "noreturn"
9653           function.  It is executed if the function tries to return.
9654
9655       -mlong-calls
9656       -mno-long-calls
9657           Tells the compiler to perform function calls by first loading the
9658           address of the function into a register and then performing a
9659           subroutine call on this register.  This switch is needed if the
9660           target function lies outside of the 64-megabyte addressing range of
9661           the offset-based version of subroutine call instruction.
9662
9663           Even if this switch is enabled, not all function calls are turned
9664           into long calls.  The heuristic is that static functions, functions
9665           that have the short-call attribute, functions that are inside the
9666           scope of a #pragma no_long_calls directive, and functions whose
9667           definitions have already been compiled within the current
9668           compilation unit are not turned into long calls.  The exceptions to
9669           this rule are that weak function definitions, functions with the
9670           long-call attribute or the section attribute, and functions that
9671           are within the scope of a #pragma long_calls directive are always
9672           turned into long calls.
9673
9674           This feature is not enabled by default.  Specifying -mno-long-calls
9675           restores the default behavior, as does placing the function calls
9676           within the scope of a #pragma long_calls_off directive.  Note these
9677           switches have no effect on how the compiler generates code to
9678           handle function calls via function pointers.
9679
9680       -msingle-pic-base
9681           Treat the register used for PIC addressing as read-only, rather
9682           than loading it in the prologue for each function.  The runtime
9683           system is responsible for initializing this register with an
9684           appropriate value before execution begins.
9685
9686       -mpic-register=reg
9687           Specify the register to be used for PIC addressing.  For standard
9688           PIC base case, the default will be any suitable register determined
9689           by compiler.  For single PIC base case, the default is R9 if target
9690           is EABI based or stack-checking is enabled, otherwise the default
9691           is R10.
9692
9693       -mpoke-function-name
9694           Write the name of each function into the text section, directly
9695           preceding the function prologue.  The generated code is similar to
9696           this:
9697
9698                        t0
9699                            .ascii "arm_poke_function_name", 0
9700                            .align
9701                        t1
9702                            .word 0xff000000 + (t1 - t0)
9703                        arm_poke_function_name
9704                            mov     ip, sp
9705                            stmfd   sp!, {fp, ip, lr, pc}
9706                            sub     fp, ip, #4
9707
9708           When performing a stack backtrace, code can inspect the value of
9709           "pc" stored at "fp + 0".  If the trace function then looks at
9710           location "pc - 12" and the top 8 bits are set, then we know that
9711           there is a function name embedded immediately preceding this
9712           location and has length "((pc[-3]) & 0xff000000)".
9713
9714       -mthumb
9715       -marm
9716           Select between generating code that executes in ARM and Thumb
9717           states.  The default for most configurations is to generate code
9718           that executes in ARM state, but the default can be changed by
9719           configuring GCC with the --with-mode=state configure option.
9720
9721       -mtpcs-frame
9722           Generate a stack frame that is compliant with the Thumb Procedure
9723           Call Standard for all non-leaf functions.  (A leaf function is one
9724           that does not call any other functions.)  The default is
9725           -mno-tpcs-frame.
9726
9727       -mtpcs-leaf-frame
9728           Generate a stack frame that is compliant with the Thumb Procedure
9729           Call Standard for all leaf functions.  (A leaf function is one that
9730           does not call any other functions.)  The default is
9731           -mno-apcs-leaf-frame.
9732
9733       -mcallee-super-interworking
9734           Gives all externally visible functions in the file being compiled
9735           an ARM instruction set header which switches to Thumb mode before
9736           executing the rest of the function.  This allows these functions to
9737           be called from non-interworking code.  This option is not valid in
9738           AAPCS configurations because interworking is enabled by default.
9739
9740       -mcaller-super-interworking
9741           Allows calls via function pointers (including virtual functions) to
9742           execute correctly regardless of whether the target code has been
9743           compiled for interworking or not.  There is a small overhead in the
9744           cost of executing a function pointer if this option is enabled.
9745           This option is not valid in AAPCS configurations because
9746           interworking is enabled by default.
9747
9748       -mtp=name
9749           Specify the access model for the thread local storage pointer.  The
9750           valid models are soft, which generates calls to "__aeabi_read_tp",
9751           cp15, which fetches the thread pointer from "cp15" directly
9752           (supported in the arm6k architecture), and auto, which uses the
9753           best available method for the selected processor.  The default
9754           setting is auto.
9755
9756       -mtls-dialect=dialect
9757           Specify the dialect to use for accessing thread local storage.  Two
9758           dialects are supported---gnu and gnu2.  The gnu dialect selects the
9759           original GNU scheme for supporting local and global dynamic TLS
9760           models.  The gnu2 dialect selects the GNU descriptor scheme, which
9761           provides better performance for shared libraries.  The GNU
9762           descriptor scheme is compatible with the original scheme, but does
9763           require new assembler, linker and library support.  Initial and
9764           local exec TLS models are unaffected by this option and always use
9765           the original scheme.
9766
9767       -mword-relocations
9768           Only generate absolute relocations on word-sized values (i.e.
9769           R_ARM_ABS32).  This is enabled by default on targets (uClinux,
9770           SymbianOS) where the runtime loader imposes this restriction, and
9771           when -fpic or -fPIC is specified.
9772
9773       -mfix-cortex-m3-ldrd
9774           Some Cortex-M3 cores can cause data corruption when "ldrd"
9775           instructions with overlapping destination and base registers are
9776           used.  This option avoids generating these instructions.  This
9777           option is enabled by default when -mcpu=cortex-m3 is specified.
9778
9779       -munaligned-access
9780       -mno-unaligned-access
9781           Enables (or disables) reading and writing of 16- and 32- bit values
9782           from addresses that are not 16- or 32- bit aligned.  By default
9783           unaligned access is disabled for all pre-ARMv6 and all ARMv6-M
9784           architectures, and enabled for all other architectures.  If
9785           unaligned access is not enabled then words in packed data
9786           structures will be accessed a byte at a time.
9787
9788           The ARM attribute "Tag_CPU_unaligned_access" will be set in the
9789           generated object file to either true or false, depending upon the
9790           setting of this option.  If unaligned access is enabled then the
9791           preprocessor symbol "__ARM_FEATURE_UNALIGNED" will also be defined.
9792
9793   AVR Options
9794       These options are defined for AVR implementations:
9795
9796       -mmcu=mcu
9797           Specify Atmel AVR instruction set architectures (ISA) or MCU type.
9798
9799           The default for this option is@tie{}"avr2".
9800
9801           GCC supports the following AVR devices and ISAs:
9802
9803           "avr2"
9804               "Classic" devices with up to 8@tie{}KiB of program memory.
9805               mcu@tie{}= "attiny22", "attiny26", "at90c8534", "at90s2313",
9806               "at90s2323", "at90s2333", "at90s2343", "at90s4414",
9807               "at90s4433", "at90s4434", "at90s8515", "at90s8535".
9808
9809           "avr25"
9810               "Classic" devices with up to 8@tie{}KiB of program memory and
9811               with the "MOVW" instruction.  mcu@tie{}= "ata5272", "ata6289",
9812               "attiny13", "attiny13a", "attiny2313", "attiny2313a",
9813               "attiny24", "attiny24a", "attiny25", "attiny261", "attiny261a",
9814               "attiny43u", "attiny4313", "attiny44", "attiny44a", "attiny45",
9815               "attiny461", "attiny461a", "attiny48", "attiny84", "attiny84a",
9816               "attiny85", "attiny861", "attiny861a", "attiny87", "attiny88",
9817               "at86rf401".
9818
9819           "avr3"
9820               "Classic" devices with 16@tie{}KiB up to 64@tie{}KiB of
9821               program memory.  mcu@tie{}= "at43usb355", "at76c711".
9822
9823           "avr31"
9824               "Classic" devices with 128@tie{}KiB of program memory.
9825               mcu@tie{}= "atmega103", "at43usb320".
9826
9827           "avr35"
9828               "Classic" devices with 16@tie{}KiB up to 64@tie{}KiB of program
9829               memory and with the "MOVW" instruction.  mcu@tie{}= "ata5505",
9830               "atmega16u2", "atmega32u2", "atmega8u2", "attiny1634",
9831               "attiny167", "at90usb162", "at90usb82".
9832
9833           "avr4"
9834               "Enhanced" devices with up to 8@tie{}KiB of program memory.
9835               mcu@tie{}= "ata6285", "ata6286", "atmega48", "atmega48a",
9836               "atmega48p", "atmega48pa", "atmega8", "atmega8a", "atmega8hva",
9837               "atmega8515", "atmega8535", "atmega88", "atmega88a",
9838               "atmega88p", "atmega88pa", "at90pwm1", "at90pwm2", "at90pwm2b",
9839               "at90pwm3", "at90pwm3b", "at90pwm81".
9840
9841           "avr5"
9842               "Enhanced" devices with 16@tie{}KiB up to 64@tie{}KiB of
9843               program memory.  mcu@tie{}= "ata5790", "ata5790n", "ata5795",
9844               "atmega16", "atmega16a", "atmega16hva", "atmega16hva2",
9845               "atmega16hvb", "atmega16hvbrevb", "atmega16m1", "atmega16u4",
9846               "atmega161", "atmega162", "atmega163", "atmega164a",
9847               "atmega164p", "atmega164pa", "atmega165", "atmega165a",
9848               "atmega165p", "atmega165pa", "atmega168", "atmega168a",
9849               "atmega168p", "atmega168pa", "atmega169", "atmega169a",
9850               "atmega169p", "atmega169pa", "atmega26hvg", "atmega32",
9851               "atmega32a", "atmega32c1", "atmega32hvb", "atmega32hvbrevb",
9852               "atmega32m1", "atmega32u4", "atmega32u6", "atmega323",
9853               "atmega324a", "atmega324p", "atmega324pa", "atmega325",
9854               "atmega325a", "atmega325p", "atmega3250", "atmega3250a",
9855               "atmega3250p", "atmega3250pa", "atmega328", "atmega328p",
9856               "atmega329", "atmega329a", "atmega329p", "atmega329pa",
9857               "atmega3290", "atmega3290a", "atmega3290p", "atmega3290pa",
9858               "atmega406", "atmega48hvf", "atmega64", "atmega64a",
9859               "atmega64c1", "atmega64hve", "atmega64m1", "atmega64rfa2",
9860               "atmega64rfr2", "atmega640", "atmega644", "atmega644a",
9861               "atmega644p", "atmega644pa", "atmega645", "atmega645a",
9862               "atmega645p", "atmega6450", "atmega6450a", "atmega6450p",
9863               "atmega649", "atmega649a", "atmega649p", "atmega6490",
9864               "atmega6490a", "atmega6490p", "at90can32", "at90can64",
9865               "at90pwm161", "at90pwm216", "at90pwm316", "at90scr100",
9866               "at90usb646", "at90usb647", "at94k", "m3000".
9867
9868           "avr51"
9869               "Enhanced" devices with 128@tie{}KiB of program memory.
9870               mcu@tie{}= "atmega128", "atmega128a", "atmega128rfa1",
9871               "atmega1280", "atmega1281", "atmega1284", "atmega1284p",
9872               "at90can128", "at90usb1286", "at90usb1287".
9873
9874           "avr6"
9875               "Enhanced" devices with 3-byte PC, i.e. with more than
9876               128@tie{}KiB of program memory.  mcu@tie{}= "atmega2560",
9877               "atmega2561".
9878
9879           "avrxmega2"
9880               "XMEGA" devices with more than 8@tie{}KiB and up to 64@tie{}KiB
9881               of program memory.  mcu@tie{}= "atmxt112sl", "atmxt224",
9882               "atmxt224e", "atmxt336s", "atxmega16a4", "atxmega16a4u",
9883               "atxmega16c4", "atxmega16d4", "atxmega16x1", "atxmega32a4",
9884               "atxmega32a4u", "atxmega32c4", "atxmega32d4", "atxmega32e5",
9885               "atxmega32x1".
9886
9887           "avrxmega4"
9888               "XMEGA" devices with more than 64@tie{}KiB and up to
9889               128@tie{}KiB of program memory.  mcu@tie{}= "atxmega64a3",
9890               "atxmega64a3u", "atxmega64a4u", "atxmega64b1", "atxmega64b3",
9891               "atxmega64c3", "atxmega64d3", "atxmega64d4".
9892
9893           "avrxmega5"
9894               "XMEGA" devices with more than 64@tie{}KiB and up to
9895               128@tie{}KiB of program memory and more than 64@tie{}KiB of
9896               RAM.  mcu@tie{}= "atxmega64a1", "atxmega64a1u".
9897
9898           "avrxmega6"
9899               "XMEGA" devices with more than 128@tie{}KiB of program memory.
9900               mcu@tie{}= "atmxt540s", "atmxt540sreva", "atxmega128a3",
9901               "atxmega128a3u", "atxmega128b1", "atxmega128b3",
9902               "atxmega128c3", "atxmega128d3", "atxmega128d4", "atxmega192a3",
9903               "atxmega192a3u", "atxmega192c3", "atxmega192d3",
9904               "atxmega256a3", "atxmega256a3b", "atxmega256a3bu",
9905               "atxmega256a3u", "atxmega256c3", "atxmega256d3",
9906               "atxmega384c3", "atxmega384d3".
9907
9908           "avrxmega7"
9909               "XMEGA" devices with more than 128@tie{}KiB of program memory
9910               and more than 64@tie{}KiB of RAM.  mcu@tie{}= "atxmega128a1",
9911               "atxmega128a1u", "atxmega128a4u".
9912
9913           "avr1"
9914               This ISA is implemented by the minimal AVR core and supported
9915               for assembler only.  mcu@tie{}= "attiny11", "attiny12",
9916               "attiny15", "attiny28", "at90s1200".
9917
9918       -maccumulate-args
9919           Accumulate outgoing function arguments and acquire/release the
9920           needed stack space for outgoing function arguments once in function
9921           prologue/epilogue.  Without this option, outgoing arguments are
9922           pushed before calling a function and popped afterwards.
9923
9924           Popping the arguments after the function call can be expensive on
9925           AVR so that accumulating the stack space might lead to smaller
9926           executables because arguments need not to be removed from the stack
9927           after such a function call.
9928
9929           This option can lead to reduced code size for functions that
9930           perform several calls to functions that get their arguments on the
9931           stack like calls to printf-like functions.
9932
9933       -mbranch-cost=cost
9934           Set the branch costs for conditional branch instructions to cost.
9935           Reasonable values for cost are small, non-negative integers. The
9936           default branch cost is 0.
9937
9938       -mcall-prologues
9939           Functions prologues/epilogues are expanded as calls to appropriate
9940           subroutines.  Code size is smaller.
9941
9942       -mint8
9943           Assume "int" to be 8-bit integer.  This affects the sizes of all
9944           types: a "char" is 1 byte, an "int" is 1 byte, a "long" is 2 bytes,
9945           and "long long" is 4 bytes.  Please note that this option does not
9946           conform to the C standards, but it results in smaller code size.
9947
9948       -mno-interrupts
9949           Generated code is not compatible with hardware interrupts.  Code
9950           size is smaller.
9951
9952       -mrelax
9953           Try to replace "CALL" resp. "JMP" instruction by the shorter
9954           "RCALL" resp. "RJMP" instruction if applicable.  Setting "-mrelax"
9955           just adds the "--relax" option to the linker command line when the
9956           linker is called.
9957
9958           Jump relaxing is performed by the linker because jump offsets are
9959           not known before code is located. Therefore, the assembler code
9960           generated by the compiler is the same, but the instructions in the
9961           executable may differ from instructions in the assembler code.
9962
9963           Relaxing must be turned on if linker stubs are needed, see the
9964           section on "EIND" and linker stubs below.
9965
9966       -msp8
9967           Treat the stack pointer register as an 8-bit register, i.e. assume
9968           the high byte of the stack pointer is zero.  In general, you don't
9969           need to set this option by hand.
9970
9971           This option is used internally by the compiler to select and build
9972           multilibs for architectures "avr2" and "avr25".  These
9973           architectures mix devices with and without "SPH".  For any setting
9974           other than "-mmcu=avr2" or "-mmcu=avr25" the compiler driver will
9975           add or remove this option from the compiler proper's command line,
9976           because the compiler then knows if the device or architecture has
9977           an 8-bit stack pointer and thus no "SPH" register or not.
9978
9979       -mstrict-X
9980           Use address register "X" in a way proposed by the hardware.  This
9981           means that "X" is only used in indirect, post-increment or pre-
9982           decrement addressing.
9983
9984           Without this option, the "X" register may be used in the same way
9985           as "Y" or "Z" which then is emulated by additional instructions.
9986           For example, loading a value with "X+const" addressing with a small
9987           non-negative "const < 64" to a register Rn is performed as
9988
9989                   adiw r26, const   ; X += const
9990                   ld   <Rn>, X        ; <Rn> = *X
9991                   sbiw r26, const   ; X -= const
9992
9993       -mtiny-stack
9994           Only change the lower 8@tie{}bits of the stack pointer.
9995
9996       -Waddr-space-convert
9997           Warn about conversions between address spaces in the case where the
9998           resulting address space is not contained in the incoming address
9999           space.
10000
10001       "EIND" and Devices with more than 128 Ki Bytes of Flash
10002
10003       Pointers in the implementation are 16@tie{}bits wide.  The address of a
10004       function or label is represented as word address so that indirect jumps
10005       and calls can target any code address in the range of 64@tie{}Ki words.
10006
10007       In order to facilitate indirect jump on devices with more than
10008       128@tie{}Ki bytes of program memory space, there is a special function
10009       register called "EIND" that serves as most significant part of the
10010       target address when "EICALL" or "EIJMP" instructions are used.
10011
10012       Indirect jumps and calls on these devices are handled as follows by the
10013       compiler and are subject to some limitations:
10014
10015       ·   The compiler never sets "EIND".
10016
10017       ·   The compiler uses "EIND" implicitely in "EICALL"/"EIJMP"
10018           instructions or might read "EIND" directly in order to emulate an
10019           indirect call/jump by means of a "RET" instruction.
10020
10021       ·   The compiler assumes that "EIND" never changes during the startup
10022           code or during the application. In particular, "EIND" is not
10023           saved/restored in function or interrupt service routine
10024           prologue/epilogue.
10025
10026       ·   For indirect calls to functions and computed goto, the linker
10027           generates stubs. Stubs are jump pads sometimes also called
10028           trampolines. Thus, the indirect call/jump jumps to such a stub.
10029           The stub contains a direct jump to the desired address.
10030
10031       ·   Linker relaxation must be turned on so that the linker will
10032           generate the stubs correctly an all situaltion. See the compiler
10033           option "-mrelax" and the linler option "--relax".  There are corner
10034           cases where the linker is supposed to generate stubs but aborts
10035           without relaxation and without a helpful error message.
10036
10037       ·   The default linker script is arranged for code with "EIND = 0".  If
10038           code is supposed to work for a setup with "EIND != 0", a custom
10039           linker script has to be used in order to place the sections whose
10040           name start with ".trampolines" into the segment where "EIND" points
10041           to.
10042
10043       ·   The startup code from libgcc never sets "EIND".  Notice that
10044           startup code is a blend of code from libgcc and AVR-LibC.  For the
10045           impact of AVR-LibC on "EIND", see the AVR-LibC user manual
10046           ("http://nongnu.org/avr-libc/user-manual/").
10047
10048       ·   It is legitimate for user-specific startup code to set up "EIND"
10049           early, for example by means of initialization code located in
10050           section ".init3". Such code runs prior to general startup code that
10051           initializes RAM and calls constructors, but after the bit of
10052           startup code from AVR-LibC that sets "EIND" to the segment where
10053           the vector table is located.
10054
10055                   #include <avr/io.h>
10056
10057                   static void
10058                   __attribute__((section(".init3"),naked,used,no_instrument_function))
10059                   init3_set_eind (void)
10060                   {
10061                     __asm volatile ("ldi r24,pm_hh8(__trampolines_start)\n\t"
10062                                     "out %i0,r24" :: "n" (&EIND) : "r24","memory");
10063                   }
10064
10065           The "__trampolines_start" symbol is defined in the linker script.
10066
10067       ·   Stubs are generated automatically by the linker if the following
10068           two conditions are met:
10069
10070           -<The address of a label is taken by means of the "gs" modifier>
10071               (short for generate stubs) like so:
10072
10073                       LDI r24, lo8(gs(<func>))
10074                       LDI r25, hi8(gs(<func>))
10075
10076           -<The final location of that label is in a code segment>
10077               outside the segment where the stubs are located.
10078
10079       ·   The compiler emits such "gs" modifiers for code labels in the
10080           following situations:
10081
10082           -<Taking address of a function or code label.>
10083           -<Computed goto.>
10084           -<If prologue-save function is used, see -mcall-prologues>
10085               command-line option.
10086
10087           -<Switch/case dispatch tables. If you do not want such dispatch>
10088               tables you can specify the -fno-jump-tables command-line
10089               option.
10090
10091           -<C and C++ constructors/destructors called during
10092           startup/shutdown.>
10093           -<If the tools hit a "gs()" modifier explained above.>
10094       ·   Jumping to non-symbolic addresses like so is not supported:
10095
10096                   int main (void)
10097                   {
10098                       /* Call function at word address 0x2 */
10099                       return ((int(*)(void)) 0x2)();
10100                   }
10101
10102           Instead, a stub has to be set up, i.e. the function has to be
10103           called through a symbol ("func_4" in the example):
10104
10105                   int main (void)
10106                   {
10107                       extern int func_4 (void);
10108
10109                       /* Call function at byte address 0x4 */
10110                       return func_4();
10111                   }
10112
10113           and the application be linked with "-Wl,--defsym,func_4=0x4".
10114           Alternatively, "func_4" can be defined in the linker script.
10115
10116       Handling of the "RAMPD", "RAMPX", "RAMPY" and "RAMPZ" Special Function
10117       Registers
10118
10119       Some AVR devices support memories larger than the 64@tie{}KiB range
10120       that can be accessed with 16-bit pointers.  To access memory locations
10121       outside this 64@tie{}KiB range, the contentent of a "RAMP" register is
10122       used as high part of the address: The "X", "Y", "Z" address register is
10123       concatenated with the "RAMPX", "RAMPY", "RAMPZ" special function
10124       register, respectively, to get a wide address. Similarly, "RAMPD" is
10125       used together with direct addressing.
10126
10127       ·   The startup code initializes the "RAMP" special function registers
10128           with zero.
10129
10130       ·   If a AVR Named Address Spaces,named address space other than
10131           generic or "__flash" is used, then "RAMPZ" is set as needed before
10132           the operation.
10133
10134       ·   If the device supports RAM larger than 64@tie{KiB} and the compiler
10135           needs to change "RAMPZ" to accomplish an operation, "RAMPZ" is
10136           reset to zero after the operation.
10137
10138       ·   If the device comes with a specific "RAMP" register, the ISR
10139           prologue/epilogue saves/restores that SFR and initializes it with
10140           zero in case the ISR code might (implicitly) use it.
10141
10142       ·   RAM larger than 64@tie{KiB} is not supported by GCC for AVR
10143           targets.  If you use inline assembler to read from locations
10144           outside the 16-bit address range and change one of the "RAMP"
10145           registers, you must reset it to zero after the access.
10146
10147       AVR Built-in Macros
10148
10149       GCC defines several built-in macros so that the user code can test for
10150       the presence or absence of features.  Almost any of the following
10151       built-in macros are deduced from device capabilities and thus triggered
10152       by the "-mmcu=" command-line option.
10153
10154       For even more AVR-specific built-in macros see AVR Named Address Spaces
10155       and AVR Built-in Functions.
10156
10157       "__AVR_ARCH__"
10158           Build-in macro that resolves to a decimal number that identifies
10159           the architecture and depends on the "-mmcu=mcu" option.  Possible
10160           values are:
10161
10162           2, 25, 3, 31, 35, 4, 5, 51, 6, 102, 104, 105, 106, 107
10163
10164           for mcu="avr2", "avr25", "avr3", "avr31", "avr35", "avr4", "avr5",
10165           "avr51", "avr6", "avrxmega2", "avrxmega4", "avrxmega5",
10166           "avrxmega6", "avrxmega7", respectively.  If mcu specifies a device,
10167           this built-in macro is set accordingly. For example, with
10168           "-mmcu=atmega8" the macro will be defined to 4.
10169
10170       "__AVR_Device__"
10171           Setting "-mmcu=device" defines this built-in macro which reflects
10172           the device's name. For example, "-mmcu=atmega8" defines the built-
10173           in macro "__AVR_ATmega8__", "-mmcu=attiny261a" defines
10174           "__AVR_ATtiny261A__", etc.
10175
10176           The built-in macros' names follow the scheme "__AVR_Device__" where
10177           Device is the device name as from the AVR user manual. The
10178           difference between Device in the built-in macro and device in
10179           "-mmcu=device" is that the latter is always lowercase.
10180
10181           If device is not a device but only a core architecture like
10182           "avr51", this macro will not be defined.
10183
10184       "__AVR_XMEGA__"
10185           The device / architecture belongs to the XMEGA family of devices.
10186
10187       "__AVR_HAVE_ELPM__"
10188           The device has the the "ELPM" instruction.
10189
10190       "__AVR_HAVE_ELPMX__"
10191           The device has the "ELPM Rn,Z" and "ELPM Rn,Z+" instructions.
10192
10193       "__AVR_HAVE_MOVW__"
10194           The device has the "MOVW" instruction to perform 16-bit register-
10195           register moves.
10196
10197       "__AVR_HAVE_LPMX__"
10198           The device has the "LPM Rn,Z" and "LPM Rn,Z+" instructions.
10199
10200       "__AVR_HAVE_MUL__"
10201           The device has a hardware multiplier.
10202
10203       "__AVR_HAVE_JMP_CALL__"
10204           The device has the "JMP" and "CALL" instructions.  This is the case
10205           for devices with at least 16@tie{}KiB of program memory.
10206
10207       "__AVR_HAVE_EIJMP_EICALL__"
10208       "__AVR_3_BYTE_PC__"
10209           The device has the "EIJMP" and "EICALL" instructions.  This is the
10210           case for devices with more than 128@tie{}KiB of program memory.
10211           This also means that the program counter (PC) is 3@tie{}bytes wide.
10212
10213       "__AVR_2_BYTE_PC__"
10214           The program counter (PC) is 2@tie{}bytes wide. This is the case for
10215           devices with up to 128@tie{}KiB of program memory.
10216
10217       "__AVR_HAVE_8BIT_SP__"
10218       "__AVR_HAVE_16BIT_SP__"
10219           The stack pointer (SP) register is treated as 8-bit respectively
10220           16-bit register by the compiler.  The definition of these macros is
10221           affected by "-mtiny-stack".
10222
10223       "__AVR_HAVE_SPH__"
10224       "__AVR_SP8__"
10225           The device has the SPH (high part of stack pointer) special
10226           function register or has an 8-bit stack pointer, respectively.  The
10227           definition of these macros is affected by "-mmcu=" and in the cases
10228           of "-mmcu=avr2" and "-mmcu=avr25" also by "-msp8".
10229
10230       "__AVR_HAVE_RAMPD__"
10231       "__AVR_HAVE_RAMPX__"
10232       "__AVR_HAVE_RAMPY__"
10233       "__AVR_HAVE_RAMPZ__"
10234           The device has the "RAMPD", "RAMPX", "RAMPY", "RAMPZ" special
10235           function register, respectively.
10236
10237       "__NO_INTERRUPTS__"
10238           This macro reflects the "-mno-interrupts" command line option.
10239
10240       "__AVR_ERRATA_SKIP__"
10241       "__AVR_ERRATA_SKIP_JMP_CALL__"
10242           Some AVR devices (AT90S8515, ATmega103) must not skip 32-bit
10243           instructions because of a hardware erratum.  Skip instructions are
10244           "SBRS", "SBRC", "SBIS", "SBIC" and "CPSE".  The second macro is
10245           only defined if "__AVR_HAVE_JMP_CALL__" is also set.
10246
10247       "__AVR_SFR_OFFSET__=offset"
10248           Instructions that can address I/O special function registers
10249           directly like "IN", "OUT", "SBI", etc. may use a different address
10250           as if addressed by an instruction to access RAM like "LD" or "STS".
10251           This offset depends on the device architecture and has to be
10252           subtracted from the RAM address in order to get the respective
10253           I/O@tie{}address.
10254
10255       "__WITH_AVRLIBC__"
10256           The compiler is configured to be used together with AVR-Libc.  See
10257           the "--with-avrlibc" configure option.
10258
10259   Blackfin Options
10260       -mcpu=cpu[-sirevision]
10261           Specifies the name of the target Blackfin processor.  Currently,
10262           cpu can be one of bf512, bf514, bf516, bf518, bf522, bf523, bf524,
10263           bf525, bf526, bf527, bf531, bf532, bf533, bf534, bf536, bf537,
10264           bf538, bf539, bf542, bf544, bf547, bf548, bf549, bf542m, bf544m,
10265           bf547m, bf548m, bf549m, bf561, bf592.
10266
10267           The optional sirevision specifies the silicon revision of the
10268           target Blackfin processor.  Any workarounds available for the
10269           targeted silicon revision are enabled.  If sirevision is none, no
10270           workarounds are enabled.  If sirevision is any, all workarounds for
10271           the targeted processor are enabled.  The "__SILICON_REVISION__"
10272           macro is defined to two hexadecimal digits representing the major
10273           and minor numbers in the silicon revision.  If sirevision is none,
10274           the "__SILICON_REVISION__" is not defined.  If sirevision is any,
10275           the "__SILICON_REVISION__" is defined to be 0xffff.  If this
10276           optional sirevision is not used, GCC assumes the latest known
10277           silicon revision of the targeted Blackfin processor.
10278
10279           GCC defines a preprocessor macro for the specified cpu.  For the
10280           bfin-elf toolchain, this option causes the hardware BSP provided by
10281           libgloss to be linked in if -msim is not given.
10282
10283           Without this option, bf532 is used as the processor by default.
10284
10285           Note that support for bf561 is incomplete.  For bf561, only the
10286           preprocessor macro is defined.
10287
10288       -msim
10289           Specifies that the program will be run on the simulator.  This
10290           causes the simulator BSP provided by libgloss to be linked in.
10291           This option has effect only for bfin-elf toolchain.  Certain other
10292           options, such as -mid-shared-library and -mfdpic, imply -msim.
10293
10294       -momit-leaf-frame-pointer
10295           Don't keep the frame pointer in a register for leaf functions.
10296           This avoids the instructions to save, set up and restore frame
10297           pointers and makes an extra register available in leaf functions.
10298           The option -fomit-frame-pointer removes the frame pointer for all
10299           functions, which might make debugging harder.
10300
10301       -mspecld-anomaly
10302           When enabled, the compiler ensures that the generated code does not
10303           contain speculative loads after jump instructions. If this option
10304           is used, "__WORKAROUND_SPECULATIVE_LOADS" is defined.
10305
10306       -mno-specld-anomaly
10307           Don't generate extra code to prevent speculative loads from
10308           occurring.
10309
10310       -mcsync-anomaly
10311           When enabled, the compiler ensures that the generated code does not
10312           contain CSYNC or SSYNC instructions too soon after conditional
10313           branches.  If this option is used, "__WORKAROUND_SPECULATIVE_SYNCS"
10314           is defined.
10315
10316       -mno-csync-anomaly
10317           Don't generate extra code to prevent CSYNC or SSYNC instructions
10318           from occurring too soon after a conditional branch.
10319
10320       -mlow-64k
10321           When enabled, the compiler is free to take advantage of the
10322           knowledge that the entire program fits into the low 64k of memory.
10323
10324       -mno-low-64k
10325           Assume that the program is arbitrarily large.  This is the default.
10326
10327       -mstack-check-l1
10328           Do stack checking using information placed into L1 scratchpad
10329           memory by the uClinux kernel.
10330
10331       -mid-shared-library
10332           Generate code that supports shared libraries via the library ID
10333           method.  This allows for execute in place and shared libraries in
10334           an environment without virtual memory management.  This option
10335           implies -fPIC.  With a bfin-elf target, this option implies -msim.
10336
10337       -mno-id-shared-library
10338           Generate code that doesn't assume ID-based shared libraries are
10339           being used.  This is the default.
10340
10341       -mleaf-id-shared-library
10342           Generate code that supports shared libraries via the library ID
10343           method, but assumes that this library or executable won't link
10344           against any other ID shared libraries.  That allows the compiler to
10345           use faster code for jumps and calls.
10346
10347       -mno-leaf-id-shared-library
10348           Do not assume that the code being compiled won't link against any
10349           ID shared libraries.  Slower code is generated for jump and call
10350           insns.
10351
10352       -mshared-library-id=n
10353           Specifies the identification number of the ID-based shared library
10354           being compiled.  Specifying a value of 0 generates more compact
10355           code; specifying other values forces the allocation of that number
10356           to the current library but is no more space- or time-efficient than
10357           omitting this option.
10358
10359       -msep-data
10360           Generate code that allows the data segment to be located in a
10361           different area of memory from the text segment.  This allows for
10362           execute in place in an environment without virtual memory
10363           management by eliminating relocations against the text section.
10364
10365       -mno-sep-data
10366           Generate code that assumes that the data segment follows the text
10367           segment.  This is the default.
10368
10369       -mlong-calls
10370       -mno-long-calls
10371           Tells the compiler to perform function calls by first loading the
10372           address of the function into a register and then performing a
10373           subroutine call on this register.  This switch is needed if the
10374           target function lies outside of the 24-bit addressing range of the
10375           offset-based version of subroutine call instruction.
10376
10377           This feature is not enabled by default.  Specifying -mno-long-calls
10378           restores the default behavior.  Note these switches have no effect
10379           on how the compiler generates code to handle function calls via
10380           function pointers.
10381
10382       -mfast-fp
10383           Link with the fast floating-point library. This library relaxes
10384           some of the IEEE floating-point standard's rules for checking
10385           inputs against Not-a-Number (NAN), in the interest of performance.
10386
10387       -minline-plt
10388           Enable inlining of PLT entries in function calls to functions that
10389           are not known to bind locally.  It has no effect without -mfdpic.
10390
10391       -mmulticore
10392           Build a standalone application for multicore Blackfin processors.
10393           This option causes proper start files and link scripts supporting
10394           multicore to be used, and defines the macro "__BFIN_MULTICORE".  It
10395           can only be used with -mcpu=bf561[-sirevision].
10396
10397           This option can be used with -mcorea or -mcoreb, which selects the
10398           one-application-per-core programming model.  Without -mcorea or
10399           -mcoreb, the single-application/dual-core programming model is
10400           used. In this model, the main function of Core B should be named as
10401           "coreb_main".
10402
10403           If this option is not used, the single-core application programming
10404           model is used.
10405
10406       -mcorea
10407           Build a standalone application for Core A of BF561 when using the
10408           one-application-per-core programming model. Proper start files and
10409           link scripts are used to support Core A, and the macro
10410           "__BFIN_COREA" is defined.  This option can only be used in
10411           conjunction with -mmulticore.
10412
10413       -mcoreb
10414           Build a standalone application for Core B of BF561 when using the
10415           one-application-per-core programming model. Proper start files and
10416           link scripts are used to support Core B, and the macro
10417           "__BFIN_COREB" is defined. When this option is used, "coreb_main"
10418           should be used instead of "main".  This option can only be used in
10419           conjunction with -mmulticore.
10420
10421       -msdram
10422           Build a standalone application for SDRAM. Proper start files and
10423           link scripts are used to put the application into SDRAM, and the
10424           macro "__BFIN_SDRAM" is defined.  The loader should initialize
10425           SDRAM before loading the application.
10426
10427       -micplb
10428           Assume that ICPLBs are enabled at run time.  This has an effect on
10429           certain anomaly workarounds.  For Linux targets, the default is to
10430           assume ICPLBs are enabled; for standalone applications the default
10431           is off.
10432
10433   C6X Options
10434       -march=name
10435           This specifies the name of the target architecture.  GCC uses this
10436           name to determine what kind of instructions it can emit when
10437           generating assembly code.  Permissible names are: c62x, c64x,
10438           c64x+, c67x, c67x+, c674x.
10439
10440       -mbig-endian
10441           Generate code for a big-endian target.
10442
10443       -mlittle-endian
10444           Generate code for a little-endian target.  This is the default.
10445
10446       -msim
10447           Choose startup files and linker script suitable for the simulator.
10448
10449       -msdata=default
10450           Put small global and static data in the .neardata section, which is
10451           pointed to by register "B14".  Put small uninitialized global and
10452           static data in the .bss section, which is adjacent to the .neardata
10453           section.  Put small read-only data into the .rodata section.  The
10454           corresponding sections used for large pieces of data are .fardata,
10455           .far and .const.
10456
10457       -msdata=all
10458           Put all data, not just small objects, into the sections reserved
10459           for small data, and use addressing relative to the "B14" register
10460           to access them.
10461
10462       -msdata=none
10463           Make no use of the sections reserved for small data, and use
10464           absolute addresses to access all data.  Put all initialized global
10465           and static data in the .fardata section, and all uninitialized data
10466           in the .far section.  Put all constant data into the .const
10467           section.
10468
10469   CRIS Options
10470       These options are defined specifically for the CRIS ports.
10471
10472       -march=architecture-type
10473       -mcpu=architecture-type
10474           Generate code for the specified architecture.  The choices for
10475           architecture-type are v3, v8 and v10 for respectively ETRAX 4,
10476           ETRAX 100, and ETRAX 100 LX.  Default is v0 except for cris-axis-
10477           linux-gnu, where the default is v10.
10478
10479       -mtune=architecture-type
10480           Tune to architecture-type everything applicable about the generated
10481           code, except for the ABI and the set of available instructions.
10482           The choices for architecture-type are the same as for
10483           -march=architecture-type.
10484
10485       -mmax-stack-frame=n
10486           Warn when the stack frame of a function exceeds n bytes.
10487
10488       -metrax4
10489       -metrax100
10490           The options -metrax4 and -metrax100 are synonyms for -march=v3 and
10491           -march=v8 respectively.
10492
10493       -mmul-bug-workaround
10494       -mno-mul-bug-workaround
10495           Work around a bug in the "muls" and "mulu" instructions for CPU
10496           models where it applies.  This option is active by default.
10497
10498       -mpdebug
10499           Enable CRIS-specific verbose debug-related information in the
10500           assembly code.  This option also has the effect of turning off the
10501           #NO_APP formatted-code indicator to the assembler at the beginning
10502           of the assembly file.
10503
10504       -mcc-init
10505           Do not use condition-code results from previous instruction; always
10506           emit compare and test instructions before use of condition codes.
10507
10508       -mno-side-effects
10509           Do not emit instructions with side effects in addressing modes
10510           other than post-increment.
10511
10512       -mstack-align
10513       -mno-stack-align
10514       -mdata-align
10515       -mno-data-align
10516       -mconst-align
10517       -mno-const-align
10518           These options (no- options) arrange (eliminate arrangements) for
10519           the stack frame, individual data and constants to be aligned for
10520           the maximum single data access size for the chosen CPU model.  The
10521           default is to arrange for 32-bit alignment.  ABI details such as
10522           structure layout are not affected by these options.
10523
10524       -m32-bit
10525       -m16-bit
10526       -m8-bit
10527           Similar to the stack- data- and const-align options above, these
10528           options arrange for stack frame, writable data and constants to all
10529           be 32-bit, 16-bit or 8-bit aligned.  The default is 32-bit
10530           alignment.
10531
10532       -mno-prologue-epilogue
10533       -mprologue-epilogue
10534           With -mno-prologue-epilogue, the normal function prologue and
10535           epilogue which set up the stack frame are omitted and no return
10536           instructions or return sequences are generated in the code.  Use
10537           this option only together with visual inspection of the compiled
10538           code: no warnings or errors are generated when call-saved registers
10539           must be saved, or storage for local variables needs to be
10540           allocated.
10541
10542       -mno-gotplt
10543       -mgotplt
10544           With -fpic and -fPIC, don't generate (do generate) instruction
10545           sequences that load addresses for functions from the PLT part of
10546           the GOT rather than (traditional on other architectures) calls to
10547           the PLT.  The default is -mgotplt.
10548
10549       -melf
10550           Legacy no-op option only recognized with the cris-axis-elf and
10551           cris-axis-linux-gnu targets.
10552
10553       -mlinux
10554           Legacy no-op option only recognized with the cris-axis-linux-gnu
10555           target.
10556
10557       -sim
10558           This option, recognized for the cris-axis-elf, arranges to link
10559           with input-output functions from a simulator library.  Code,
10560           initialized data and zero-initialized data are allocated
10561           consecutively.
10562
10563       -sim2
10564           Like -sim, but pass linker options to locate initialized data at
10565           0x40000000 and zero-initialized data at 0x80000000.
10566
10567   CR16 Options
10568       These options are defined specifically for the CR16 ports.
10569
10570       -mmac
10571           Enable the use of multiply-accumulate instructions. Disabled by
10572           default.
10573
10574       -mcr16cplus
10575       -mcr16c
10576           Generate code for CR16C or CR16C+ architecture. CR16C+ architecture
10577           is default.
10578
10579       -msim
10580           Links the library libsim.a which is in compatible with simulator.
10581           Applicable to ELF compiler only.
10582
10583       -mint32
10584           Choose integer type as 32-bit wide.
10585
10586       -mbit-ops
10587           Generates "sbit"/"cbit" instructions for bit manipulations.
10588
10589       -mdata-model=model
10590           Choose a data model. The choices for model are near, far or medium.
10591           medium is default.  However, far is not valid with -mcr16c, as the
10592           CR16C architecture does not support the far data model.
10593
10594   Darwin Options
10595       These options are defined for all architectures running the Darwin
10596       operating system.
10597
10598       FSF GCC on Darwin does not create "fat" object files; it creates an
10599       object file for the single architecture that GCC was built to target.
10600       Apple's GCC on Darwin does create "fat" files if multiple -arch options
10601       are used; it does so by running the compiler or linker multiple times
10602       and joining the results together with lipo.
10603
10604       The subtype of the file created (like ppc7400 or ppc970 or i686) is
10605       determined by the flags that specify the ISA that GCC is targeting,
10606       like -mcpu or -march.  The -force_cpusubtype_ALL option can be used to
10607       override this.
10608
10609       The Darwin tools vary in their behavior when presented with an ISA
10610       mismatch.  The assembler, as, only permits instructions to be used that
10611       are valid for the subtype of the file it is generating, so you cannot
10612       put 64-bit instructions in a ppc750 object file.  The linker for shared
10613       libraries, /usr/bin/libtool, fails and prints an error if asked to
10614       create a shared library with a less restrictive subtype than its input
10615       files (for instance, trying to put a ppc970 object file in a ppc7400
10616       library).  The linker for executables, ld, quietly gives the executable
10617       the most restrictive subtype of any of its input files.
10618
10619       -Fdir
10620           Add the framework directory dir to the head of the list of
10621           directories to be searched for header files.  These directories are
10622           interleaved with those specified by -I options and are scanned in a
10623           left-to-right order.
10624
10625           A framework directory is a directory with frameworks in it.  A
10626           framework is a directory with a Headers and/or PrivateHeaders
10627           directory contained directly in it that ends in .framework.  The
10628           name of a framework is the name of this directory excluding the
10629           .framework.  Headers associated with the framework are found in one
10630           of those two directories, with Headers being searched first.  A
10631           subframework is a framework directory that is in a framework's
10632           Frameworks directory.  Includes of subframework headers can only
10633           appear in a header of a framework that contains the subframework,
10634           or in a sibling subframework header.  Two subframeworks are
10635           siblings if they occur in the same framework.  A subframework
10636           should not have the same name as a framework; a warning is issued
10637           if this is violated.  Currently a subframework cannot have
10638           subframeworks; in the future, the mechanism may be extended to
10639           support this.  The standard frameworks can be found in
10640           /System/Library/Frameworks and /Library/Frameworks.  An example
10641           include looks like "#include <Framework/header.h>", where Framework
10642           denotes the name of the framework and header.h is found in the
10643           PrivateHeaders or Headers directory.
10644
10645       -iframeworkdir
10646           Like -F except the directory is a treated as a system directory.
10647           The main difference between this -iframework and -F is that with
10648           -iframework the compiler does not warn about constructs contained
10649           within header files found via dir.  This option is valid only for
10650           the C family of languages.
10651
10652       -gused
10653           Emit debugging information for symbols that are used.  For stabs
10654           debugging format, this enables -feliminate-unused-debug-symbols.
10655           This is by default ON.
10656
10657       -gfull
10658           Emit debugging information for all symbols and types.
10659
10660       -mmacosx-version-min=version
10661           The earliest version of MacOS X that this executable will run on is
10662           version.  Typical values of version include 10.1, 10.2, and 10.3.9.
10663
10664           If the compiler was built to use the system's headers by default,
10665           then the default for this option is the system version on which the
10666           compiler is running, otherwise the default is to make choices that
10667           are compatible with as many systems and code bases as possible.
10668
10669       -mkernel
10670           Enable kernel development mode.  The -mkernel option sets -static,
10671           -fno-common, -fno-use-cxa-atexit, -fno-exceptions,
10672           -fno-non-call-exceptions, -fapple-kext, -fno-weak and -fno-rtti
10673           where applicable.  This mode also sets -mno-altivec, -msoft-float,
10674           -fno-builtin and -mlong-branch for PowerPC targets.
10675
10676       -mone-byte-bool
10677           Override the defaults for bool so that sizeof(bool)==1.  By default
10678           sizeof(bool) is 4 when compiling for Darwin/PowerPC and 1 when
10679           compiling for Darwin/x86, so this option has no effect on x86.
10680
10681           Warning: The -mone-byte-bool switch causes GCC to generate code
10682           that is not binary compatible with code generated without that
10683           switch.  Using this switch may require recompiling all other
10684           modules in a program, including system libraries.  Use this switch
10685           to conform to a non-default data model.
10686
10687       -mfix-and-continue
10688       -ffix-and-continue
10689       -findirect-data
10690           Generate code suitable for fast turnaround development, such as to
10691           allow GDB to dynamically load ".o" files into already-running
10692           programs.  -findirect-data and -ffix-and-continue are provided for
10693           backwards compatibility.
10694
10695       -all_load
10696           Loads all members of static archive libraries.  See man ld(1) for
10697           more information.
10698
10699       -arch_errors_fatal
10700           Cause the errors having to do with files that have the wrong
10701           architecture to be fatal.
10702
10703       -bind_at_load
10704           Causes the output file to be marked such that the dynamic linker
10705           will bind all undefined references when the file is loaded or
10706           launched.
10707
10708       -bundle
10709           Produce a Mach-o bundle format file.  See man ld(1) for more
10710           information.
10711
10712       -bundle_loader executable
10713           This option specifies the executable that will load the build
10714           output file being linked.  See man ld(1) for more information.
10715
10716       -dynamiclib
10717           When passed this option, GCC produces a dynamic library instead of
10718           an executable when linking, using the Darwin libtool command.
10719
10720       -force_cpusubtype_ALL
10721           This causes GCC's output file to have the ALL subtype, instead of
10722           one controlled by the -mcpu or -march option.
10723
10724       -allowable_client  client_name
10725       -client_name
10726       -compatibility_version
10727       -current_version
10728       -dead_strip
10729       -dependency-file
10730       -dylib_file
10731       -dylinker_install_name
10732       -dynamic
10733       -exported_symbols_list
10734       -filelist
10735       -flat_namespace
10736       -force_flat_namespace
10737       -headerpad_max_install_names
10738       -image_base
10739       -init
10740       -install_name
10741       -keep_private_externs
10742       -multi_module
10743       -multiply_defined
10744       -multiply_defined_unused
10745       -noall_load
10746       -no_dead_strip_inits_and_terms
10747       -nofixprebinding
10748       -nomultidefs
10749       -noprebind
10750       -noseglinkedit
10751       -pagezero_size
10752       -prebind
10753       -prebind_all_twolevel_modules
10754       -private_bundle
10755       -read_only_relocs
10756       -sectalign
10757       -sectobjectsymbols
10758       -whyload
10759       -seg1addr
10760       -sectcreate
10761       -sectobjectsymbols
10762       -sectorder
10763       -segaddr
10764       -segs_read_only_addr
10765       -segs_read_write_addr
10766       -seg_addr_table
10767       -seg_addr_table_filename
10768       -seglinkedit
10769       -segprot
10770       -segs_read_only_addr
10771       -segs_read_write_addr
10772       -single_module
10773       -static
10774       -sub_library
10775       -sub_umbrella
10776       -twolevel_namespace
10777       -umbrella
10778       -undefined
10779       -unexported_symbols_list
10780       -weak_reference_mismatches
10781       -whatsloaded
10782           These options are passed to the Darwin linker.  The Darwin linker
10783           man page describes them in detail.
10784
10785   DEC Alpha Options
10786       These -m options are defined for the DEC Alpha implementations:
10787
10788       -mno-soft-float
10789       -msoft-float
10790           Use (do not use) the hardware floating-point instructions for
10791           floating-point operations.  When -msoft-float is specified,
10792           functions in libgcc.a are used to perform floating-point
10793           operations.  Unless they are replaced by routines that emulate the
10794           floating-point operations, or compiled in such a way as to call
10795           such emulations routines, these routines issue floating-point
10796           operations.   If you are compiling for an Alpha without floating-
10797           point operations, you must ensure that the library is built so as
10798           not to call them.
10799
10800           Note that Alpha implementations without floating-point operations
10801           are required to have floating-point registers.
10802
10803       -mfp-reg
10804       -mno-fp-regs
10805           Generate code that uses (does not use) the floating-point register
10806           set.  -mno-fp-regs implies -msoft-float.  If the floating-point
10807           register set is not used, floating-point operands are passed in
10808           integer registers as if they were integers and floating-point
10809           results are passed in $0 instead of $f0.  This is a non-standard
10810           calling sequence, so any function with a floating-point argument or
10811           return value called by code compiled with -mno-fp-regs must also be
10812           compiled with that option.
10813
10814           A typical use of this option is building a kernel that does not
10815           use, and hence need not save and restore, any floating-point
10816           registers.
10817
10818       -mieee
10819           The Alpha architecture implements floating-point hardware optimized
10820           for maximum performance.  It is mostly compliant with the IEEE
10821           floating-point standard.  However, for full compliance, software
10822           assistance is required.  This option generates code fully IEEE-
10823           compliant code except that the inexact-flag is not maintained (see
10824           below).  If this option is turned on, the preprocessor macro
10825           "_IEEE_FP" is defined during compilation.  The resulting code is
10826           less efficient but is able to correctly support denormalized
10827           numbers and exceptional IEEE values such as not-a-number and
10828           plus/minus infinity.  Other Alpha compilers call this option
10829           -ieee_with_no_inexact.
10830
10831       -mieee-with-inexact
10832           This is like -mieee except the generated code also maintains the
10833           IEEE inexact-flag.  Turning on this option causes the generated
10834           code to implement fully-compliant IEEE math.  In addition to
10835           "_IEEE_FP", "_IEEE_FP_EXACT" is defined as a preprocessor macro.
10836           On some Alpha implementations the resulting code may execute
10837           significantly slower than the code generated by default.  Since
10838           there is very little code that depends on the inexact-flag, you
10839           should normally not specify this option.  Other Alpha compilers
10840           call this option -ieee_with_inexact.
10841
10842       -mfp-trap-mode=trap-mode
10843           This option controls what floating-point related traps are enabled.
10844           Other Alpha compilers call this option -fptm trap-mode.  The trap
10845           mode can be set to one of four values:
10846
10847           n   This is the default (normal) setting.  The only traps that are
10848               enabled are the ones that cannot be disabled in software (e.g.,
10849               division by zero trap).
10850
10851           u   In addition to the traps enabled by n, underflow traps are
10852               enabled as well.
10853
10854           su  Like u, but the instructions are marked to be safe for software
10855               completion (see Alpha architecture manual for details).
10856
10857           sui Like su, but inexact traps are enabled as well.
10858
10859       -mfp-rounding-mode=rounding-mode
10860           Selects the IEEE rounding mode.  Other Alpha compilers call this
10861           option -fprm rounding-mode.  The rounding-mode can be one of:
10862
10863           n   Normal IEEE rounding mode.  Floating-point numbers are rounded
10864               towards the nearest machine number or towards the even machine
10865               number in case of a tie.
10866
10867           m   Round towards minus infinity.
10868
10869           c   Chopped rounding mode.  Floating-point numbers are rounded
10870               towards zero.
10871
10872           d   Dynamic rounding mode.  A field in the floating-point control
10873               register (fpcr, see Alpha architecture reference manual)
10874               controls the rounding mode in effect.  The C library
10875               initializes this register for rounding towards plus infinity.
10876               Thus, unless your program modifies the fpcr, d corresponds to
10877               round towards plus infinity.
10878
10879       -mtrap-precision=trap-precision
10880           In the Alpha architecture, floating-point traps are imprecise.
10881           This means without software assistance it is impossible to recover
10882           from a floating trap and program execution normally needs to be
10883           terminated.  GCC can generate code that can assist operating system
10884           trap handlers in determining the exact location that caused a
10885           floating-point trap.  Depending on the requirements of an
10886           application, different levels of precisions can be selected:
10887
10888           p   Program precision.  This option is the default and means a trap
10889               handler can only identify which program caused a floating-point
10890               exception.
10891
10892           f   Function precision.  The trap handler can determine the
10893               function that caused a floating-point exception.
10894
10895           i   Instruction precision.  The trap handler can determine the
10896               exact instruction that caused a floating-point exception.
10897
10898           Other Alpha compilers provide the equivalent options called
10899           -scope_safe and -resumption_safe.
10900
10901       -mieee-conformant
10902           This option marks the generated code as IEEE conformant.  You must
10903           not use this option unless you also specify -mtrap-precision=i and
10904           either -mfp-trap-mode=su or -mfp-trap-mode=sui.  Its only effect is
10905           to emit the line .eflag 48 in the function prologue of the
10906           generated assembly file.
10907
10908       -mbuild-constants
10909           Normally GCC examines a 32- or 64-bit integer constant to see if it
10910           can construct it from smaller constants in two or three
10911           instructions.  If it cannot, it outputs the constant as a literal
10912           and generates code to load it from the data segment at run time.
10913
10914           Use this option to require GCC to construct all integer constants
10915           using code, even if it takes more instructions (the maximum is
10916           six).
10917
10918           You typically use this option to build a shared library dynamic
10919           loader.  Itself a shared library, it must relocate itself in memory
10920           before it can find the variables and constants in its own data
10921           segment.
10922
10923       -mbwx
10924       -mno-bwx
10925       -mcix
10926       -mno-cix
10927       -mfix
10928       -mno-fix
10929       -mmax
10930       -mno-max
10931           Indicate whether GCC should generate code to use the optional BWX,
10932           CIX, FIX and MAX instruction sets.  The default is to use the
10933           instruction sets supported by the CPU type specified via -mcpu=
10934           option or that of the CPU on which GCC was built if none is
10935           specified.
10936
10937       -mfloat-vax
10938       -mfloat-ieee
10939           Generate code that uses (does not use) VAX F and G floating-point
10940           arithmetic instead of IEEE single and double precision.
10941
10942       -mexplicit-relocs
10943       -mno-explicit-relocs
10944           Older Alpha assemblers provided no way to generate symbol
10945           relocations except via assembler macros.  Use of these macros does
10946           not allow optimal instruction scheduling.  GNU binutils as of
10947           version 2.12 supports a new syntax that allows the compiler to
10948           explicitly mark which relocations should apply to which
10949           instructions.  This option is mostly useful for debugging, as GCC
10950           detects the capabilities of the assembler when it is built and sets
10951           the default accordingly.
10952
10953       -msmall-data
10954       -mlarge-data
10955           When -mexplicit-relocs is in effect, static data is accessed via
10956           gp-relative relocations.  When -msmall-data is used, objects 8
10957           bytes long or smaller are placed in a small data area (the ".sdata"
10958           and ".sbss" sections) and are accessed via 16-bit relocations off
10959           of the $gp register.  This limits the size of the small data area
10960           to 64KB, but allows the variables to be directly accessed via a
10961           single instruction.
10962
10963           The default is -mlarge-data.  With this option the data area is
10964           limited to just below 2GB.  Programs that require more than 2GB of
10965           data must use "malloc" or "mmap" to allocate the data in the heap
10966           instead of in the program's data segment.
10967
10968           When generating code for shared libraries, -fpic implies
10969           -msmall-data and -fPIC implies -mlarge-data.
10970
10971       -msmall-text
10972       -mlarge-text
10973           When -msmall-text is used, the compiler assumes that the code of
10974           the entire program (or shared library) fits in 4MB, and is thus
10975           reachable with a branch instruction.  When -msmall-data is used,
10976           the compiler can assume that all local symbols share the same $gp
10977           value, and thus reduce the number of instructions required for a
10978           function call from 4 to 1.
10979
10980           The default is -mlarge-text.
10981
10982       -mcpu=cpu_type
10983           Set the instruction set and instruction scheduling parameters for
10984           machine type cpu_type.  You can specify either the EV style name or
10985           the corresponding chip number.  GCC supports scheduling parameters
10986           for the EV4, EV5 and EV6 family of processors and chooses the
10987           default values for the instruction set from the processor you
10988           specify.  If you do not specify a processor type, GCC defaults to
10989           the processor on which the compiler was built.
10990
10991           Supported values for cpu_type are
10992
10993           ev4
10994           ev45
10995           21064
10996               Schedules as an EV4 and has no instruction set extensions.
10997
10998           ev5
10999           21164
11000               Schedules as an EV5 and has no instruction set extensions.
11001
11002           ev56
11003           21164a
11004               Schedules as an EV5 and supports the BWX extension.
11005
11006           pca56
11007           21164pc
11008           21164PC
11009               Schedules as an EV5 and supports the BWX and MAX extensions.
11010
11011           ev6
11012           21264
11013               Schedules as an EV6 and supports the BWX, FIX, and MAX
11014               extensions.
11015
11016           ev67
11017           21264a
11018               Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX
11019               extensions.
11020
11021           Native toolchains also support the value native, which selects the
11022           best architecture option for the host processor.  -mcpu=native has
11023           no effect if GCC does not recognize the processor.
11024
11025       -mtune=cpu_type
11026           Set only the instruction scheduling parameters for machine type
11027           cpu_type.  The instruction set is not changed.
11028
11029           Native toolchains also support the value native, which selects the
11030           best architecture option for the host processor.  -mtune=native has
11031           no effect if GCC does not recognize the processor.
11032
11033       -mmemory-latency=time
11034           Sets the latency the scheduler should assume for typical memory
11035           references as seen by the application.  This number is highly
11036           dependent on the memory access patterns used by the application and
11037           the size of the external cache on the machine.
11038
11039           Valid options for time are
11040
11041           number
11042               A decimal number representing clock cycles.
11043
11044           L1
11045           L2
11046           L3
11047           main
11048               The compiler contains estimates of the number of clock cycles
11049               for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches
11050               (also called Dcache, Scache, and Bcache), as well as to main
11051               memory.  Note that L3 is only valid for EV5.
11052
11053   FR30 Options
11054       These options are defined specifically for the FR30 port.
11055
11056       -msmall-model
11057           Use the small address space model.  This can produce smaller code,
11058           but it does assume that all symbolic values and addresses fit into
11059           a 20-bit range.
11060
11061       -mno-lsim
11062           Assume that runtime support has been provided and so there is no
11063           need to include the simulator library (libsim.a) on the linker
11064           command line.
11065
11066   FRV Options
11067       -mgpr-32
11068           Only use the first 32 general-purpose registers.
11069
11070       -mgpr-64
11071           Use all 64 general-purpose registers.
11072
11073       -mfpr-32
11074           Use only the first 32 floating-point registers.
11075
11076       -mfpr-64
11077           Use all 64 floating-point registers.
11078
11079       -mhard-float
11080           Use hardware instructions for floating-point operations.
11081
11082       -msoft-float
11083           Use library routines for floating-point operations.
11084
11085       -malloc-cc
11086           Dynamically allocate condition code registers.
11087
11088       -mfixed-cc
11089           Do not try to dynamically allocate condition code registers, only
11090           use "icc0" and "fcc0".
11091
11092       -mdword
11093           Change ABI to use double word insns.
11094
11095       -mno-dword
11096           Do not use double word instructions.
11097
11098       -mdouble
11099           Use floating-point double instructions.
11100
11101       -mno-double
11102           Do not use floating-point double instructions.
11103
11104       -mmedia
11105           Use media instructions.
11106
11107       -mno-media
11108           Do not use media instructions.
11109
11110       -mmuladd
11111           Use multiply and add/subtract instructions.
11112
11113       -mno-muladd
11114           Do not use multiply and add/subtract instructions.
11115
11116       -mfdpic
11117           Select the FDPIC ABI, which uses function descriptors to represent
11118           pointers to functions.  Without any PIC/PIE-related options, it
11119           implies -fPIE.  With -fpic or -fpie, it assumes GOT entries and
11120           small data are within a 12-bit range from the GOT base address;
11121           with -fPIC or -fPIE, GOT offsets are computed with 32 bits.  With a
11122           bfin-elf target, this option implies -msim.
11123
11124       -minline-plt
11125           Enable inlining of PLT entries in function calls to functions that
11126           are not known to bind locally.  It has no effect without -mfdpic.
11127           It's enabled by default if optimizing for speed and compiling for
11128           shared libraries (i.e., -fPIC or -fpic), or when an optimization
11129           option such as -O3 or above is present in the command line.
11130
11131       -mTLS
11132           Assume a large TLS segment when generating thread-local code.
11133
11134       -mtls
11135           Do not assume a large TLS segment when generating thread-local
11136           code.
11137
11138       -mgprel-ro
11139           Enable the use of "GPREL" relocations in the FDPIC ABI for data
11140           that is known to be in read-only sections.  It's enabled by
11141           default, except for -fpic or -fpie: even though it may help make
11142           the global offset table smaller, it trades 1 instruction for 4.
11143           With -fPIC or -fPIE, it trades 3 instructions for 4, one of which
11144           may be shared by multiple symbols, and it avoids the need for a GOT
11145           entry for the referenced symbol, so it's more likely to be a win.
11146           If it is not, -mno-gprel-ro can be used to disable it.
11147
11148       -multilib-library-pic
11149           Link with the (library, not FD) pic libraries.  It's implied by
11150           -mlibrary-pic, as well as by -fPIC and -fpic without -mfdpic.  You
11151           should never have to use it explicitly.
11152
11153       -mlinked-fp
11154           Follow the EABI requirement of always creating a frame pointer
11155           whenever a stack frame is allocated.  This option is enabled by
11156           default and can be disabled with -mno-linked-fp.
11157
11158       -mlong-calls
11159           Use indirect addressing to call functions outside the current
11160           compilation unit.  This allows the functions to be placed anywhere
11161           within the 32-bit address space.
11162
11163       -malign-labels
11164           Try to align labels to an 8-byte boundary by inserting NOPs into
11165           the previous packet.  This option only has an effect when VLIW
11166           packing is enabled.  It doesn't create new packets; it merely adds
11167           NOPs to existing ones.
11168
11169       -mlibrary-pic
11170           Generate position-independent EABI code.
11171
11172       -macc-4
11173           Use only the first four media accumulator registers.
11174
11175       -macc-8
11176           Use all eight media accumulator registers.
11177
11178       -mpack
11179           Pack VLIW instructions.
11180
11181       -mno-pack
11182           Do not pack VLIW instructions.
11183
11184       -mno-eflags
11185           Do not mark ABI switches in e_flags.
11186
11187       -mcond-move
11188           Enable the use of conditional-move instructions (default).
11189
11190           This switch is mainly for debugging the compiler and will likely be
11191           removed in a future version.
11192
11193       -mno-cond-move
11194           Disable the use of conditional-move instructions.
11195
11196           This switch is mainly for debugging the compiler and will likely be
11197           removed in a future version.
11198
11199       -mscc
11200           Enable the use of conditional set instructions (default).
11201
11202           This switch is mainly for debugging the compiler and will likely be
11203           removed in a future version.
11204
11205       -mno-scc
11206           Disable the use of conditional set instructions.
11207
11208           This switch is mainly for debugging the compiler and will likely be
11209           removed in a future version.
11210
11211       -mcond-exec
11212           Enable the use of conditional execution (default).
11213
11214           This switch is mainly for debugging the compiler and will likely be
11215           removed in a future version.
11216
11217       -mno-cond-exec
11218           Disable the use of conditional execution.
11219
11220           This switch is mainly for debugging the compiler and will likely be
11221           removed in a future version.
11222
11223       -mvliw-branch
11224           Run a pass to pack branches into VLIW instructions (default).
11225
11226           This switch is mainly for debugging the compiler and will likely be
11227           removed in a future version.
11228
11229       -mno-vliw-branch
11230           Do not run a pass to pack branches into VLIW instructions.
11231
11232           This switch is mainly for debugging the compiler and will likely be
11233           removed in a future version.
11234
11235       -mmulti-cond-exec
11236           Enable optimization of "&&" and "||" in conditional execution
11237           (default).
11238
11239           This switch is mainly for debugging the compiler and will likely be
11240           removed in a future version.
11241
11242       -mno-multi-cond-exec
11243           Disable optimization of "&&" and "||" in conditional execution.
11244
11245           This switch is mainly for debugging the compiler and will likely be
11246           removed in a future version.
11247
11248       -mnested-cond-exec
11249           Enable nested conditional execution optimizations (default).
11250
11251           This switch is mainly for debugging the compiler and will likely be
11252           removed in a future version.
11253
11254       -mno-nested-cond-exec
11255           Disable nested conditional execution optimizations.
11256
11257           This switch is mainly for debugging the compiler and will likely be
11258           removed in a future version.
11259
11260       -moptimize-membar
11261           This switch removes redundant "membar" instructions from the
11262           compiler-generated code.  It is enabled by default.
11263
11264       -mno-optimize-membar
11265           This switch disables the automatic removal of redundant "membar"
11266           instructions from the generated code.
11267
11268       -mtomcat-stats
11269           Cause gas to print out tomcat statistics.
11270
11271       -mcpu=cpu
11272           Select the processor type for which to generate code.  Possible
11273           values are frv, fr550, tomcat, fr500, fr450, fr405, fr400, fr300
11274           and simple.
11275
11276   GNU/Linux Options
11277       These -m options are defined for GNU/Linux targets:
11278
11279       -mglibc
11280           Use the GNU C library.  This is the default except on
11281           *-*-linux-*uclibc* and *-*-linux-*android* targets.
11282
11283       -muclibc
11284           Use uClibc C library.  This is the default on *-*-linux-*uclibc*
11285           targets.
11286
11287       -mbionic
11288           Use Bionic C library.  This is the default on *-*-linux-*android*
11289           targets.
11290
11291       -mandroid
11292           Compile code compatible with Android platform.  This is the default
11293           on *-*-linux-*android* targets.
11294
11295           When compiling, this option enables -mbionic, -fPIC,
11296           -fno-exceptions and -fno-rtti by default.  When linking, this
11297           option makes the GCC driver pass Android-specific options to the
11298           linker.  Finally, this option causes the preprocessor macro
11299           "__ANDROID__" to be defined.
11300
11301       -tno-android-cc
11302           Disable compilation effects of -mandroid, i.e., do not enable
11303           -mbionic, -fPIC, -fno-exceptions and -fno-rtti by default.
11304
11305       -tno-android-ld
11306           Disable linking effects of -mandroid, i.e., pass standard Linux
11307           linking options to the linker.
11308
11309   H8/300 Options
11310       These -m options are defined for the H8/300 implementations:
11311
11312       -mrelax
11313           Shorten some address references at link time, when possible; uses
11314           the linker option -relax.
11315
11316       -mh Generate code for the H8/300H.
11317
11318       -ms Generate code for the H8S.
11319
11320       -mn Generate code for the H8S and H8/300H in the normal mode.  This
11321           switch must be used either with -mh or -ms.
11322
11323       -ms2600
11324           Generate code for the H8S/2600.  This switch must be used with -ms.
11325
11326       -mexr
11327           Extended registers are stored on stack before execution of function
11328           with monitor attribute. Default option is -mexr.  This option is
11329           valid only for H8S targets.
11330
11331       -mno-exr
11332           Extended registers are not stored on stack before execution of
11333           function with monitor attribute. Default option is -mno-exr.  This
11334           option is valid only for H8S targets.
11335
11336       -mint32
11337           Make "int" data 32 bits by default.
11338
11339       -malign-300
11340           On the H8/300H and H8S, use the same alignment rules as for the
11341           H8/300.  The default for the H8/300H and H8S is to align longs and
11342           floats on 4-byte boundaries.  -malign-300 causes them to be aligned
11343           on 2-byte boundaries.  This option has no effect on the H8/300.
11344
11345   HPPA Options
11346       These -m options are defined for the HPPA family of computers:
11347
11348       -march=architecture-type
11349           Generate code for the specified architecture.  The choices for
11350           architecture-type are 1.0 for PA 1.0, 1.1 for PA 1.1, and 2.0 for
11351           PA 2.0 processors.  Refer to /usr/lib/sched.models on an HP-UX
11352           system to determine the proper architecture option for your
11353           machine.  Code compiled for lower numbered architectures runs on
11354           higher numbered architectures, but not the other way around.
11355
11356       -mpa-risc-1-0
11357       -mpa-risc-1-1
11358       -mpa-risc-2-0
11359           Synonyms for -march=1.0, -march=1.1, and -march=2.0 respectively.
11360
11361       -mbig-switch
11362           Generate code suitable for big switch tables.  Use this option only
11363           if the assembler/linker complain about out-of-range branches within
11364           a switch table.
11365
11366       -mjump-in-delay
11367           Fill delay slots of function calls with unconditional jump
11368           instructions by modifying the return pointer for the function call
11369           to be the target of the conditional jump.
11370
11371       -mdisable-fpregs
11372           Prevent floating-point registers from being used in any manner.
11373           This is necessary for compiling kernels that perform lazy context
11374           switching of floating-point registers.  If you use this option and
11375           attempt to perform floating-point operations, the compiler aborts.
11376
11377       -mdisable-indexing
11378           Prevent the compiler from using indexing address modes.  This
11379           avoids some rather obscure problems when compiling MIG generated
11380           code under MACH.
11381
11382       -mno-space-regs
11383           Generate code that assumes the target has no space registers.  This
11384           allows GCC to generate faster indirect calls and use unscaled index
11385           address modes.
11386
11387           Such code is suitable for level 0 PA systems and kernels.
11388
11389       -mfast-indirect-calls
11390           Generate code that assumes calls never cross space boundaries.
11391           This allows GCC to emit code that performs faster indirect calls.
11392
11393           This option does not work in the presence of shared libraries or
11394           nested functions.
11395
11396       -mfixed-range=register-range
11397           Generate code treating the given register range as fixed registers.
11398           A fixed register is one that the register allocator cannot use.
11399           This is useful when compiling kernel code.  A register range is
11400           specified as two registers separated by a dash.  Multiple register
11401           ranges can be specified separated by a comma.
11402
11403       -mlong-load-store
11404           Generate 3-instruction load and store sequences as sometimes
11405           required by the HP-UX 10 linker.  This is equivalent to the +k
11406           option to the HP compilers.
11407
11408       -mportable-runtime
11409           Use the portable calling conventions proposed by HP for ELF
11410           systems.
11411
11412       -mgas
11413           Enable the use of assembler directives only GAS understands.
11414
11415       -mschedule=cpu-type
11416           Schedule code according to the constraints for the machine type
11417           cpu-type.  The choices for cpu-type are 700 7100, 7100LC, 7200,
11418           7300 and 8000.  Refer to /usr/lib/sched.models on an HP-UX system
11419           to determine the proper scheduling option for your machine.  The
11420           default scheduling is 8000.
11421
11422       -mlinker-opt
11423           Enable the optimization pass in the HP-UX linker.  Note this makes
11424           symbolic debugging impossible.  It also triggers a bug in the HP-UX
11425           8 and HP-UX 9 linkers in which they give bogus error messages when
11426           linking some programs.
11427
11428       -msoft-float
11429           Generate output containing library calls for floating point.
11430           Warning: the requisite libraries are not available for all HPPA
11431           targets.  Normally the facilities of the machine's usual C compiler
11432           are used, but this cannot be done directly in cross-compilation.
11433           You must make your own arrangements to provide suitable library
11434           functions for cross-compilation.
11435
11436           -msoft-float changes the calling convention in the output file;
11437           therefore, it is only useful if you compile all of a program with
11438           this option.  In particular, you need to compile libgcc.a, the
11439           library that comes with GCC, with -msoft-float in order for this to
11440           work.
11441
11442       -msio
11443           Generate the predefine, "_SIO", for server IO.  The default is
11444           -mwsio.  This generates the predefines, "__hp9000s700",
11445           "__hp9000s700__" and "_WSIO", for workstation IO.  These options
11446           are available under HP-UX and HI-UX.
11447
11448       -mgnu-ld
11449           Use options specific to GNU ld.  This passes -shared to ld when
11450           building a shared library.  It is the default when GCC is
11451           configured, explicitly or implicitly, with the GNU linker.  This
11452           option does not affect which ld is called; it only changes what
11453           parameters are passed to that ld.  The ld that is called is
11454           determined by the --with-ld configure option, GCC's program search
11455           path, and finally by the user's PATH.  The linker used by GCC can
11456           be printed using which `gcc -print-prog-name=ld`.  This option is
11457           only available on the 64-bit HP-UX GCC, i.e. configured with
11458           hppa*64*-*-hpux*.
11459
11460       -mhp-ld
11461           Use options specific to HP ld.  This passes -b to ld when building
11462           a shared library and passes +Accept TypeMismatch to ld on all
11463           links.  It is the default when GCC is configured, explicitly or
11464           implicitly, with the HP linker.  This option does not affect which
11465           ld is called; it only changes what parameters are passed to that
11466           ld.  The ld that is called is determined by the --with-ld configure
11467           option, GCC's program search path, and finally by the user's PATH.
11468           The linker used by GCC can be printed using which `gcc
11469           -print-prog-name=ld`.  This option is only available on the 64-bit
11470           HP-UX GCC, i.e. configured with hppa*64*-*-hpux*.
11471
11472       -mlong-calls
11473           Generate code that uses long call sequences.  This ensures that a
11474           call is always able to reach linker generated stubs.  The default
11475           is to generate long calls only when the distance from the call site
11476           to the beginning of the function or translation unit, as the case
11477           may be, exceeds a predefined limit set by the branch type being
11478           used.  The limits for normal calls are 7,600,000 and 240,000 bytes,
11479           respectively for the PA 2.0 and PA 1.X architectures.  Sibcalls are
11480           always limited at 240,000 bytes.
11481
11482           Distances are measured from the beginning of functions when using
11483           the -ffunction-sections option, or when using the -mgas and
11484           -mno-portable-runtime options together under HP-UX with the SOM
11485           linker.
11486
11487           It is normally not desirable to use this option as it degrades
11488           performance.  However, it may be useful in large applications,
11489           particularly when partial linking is used to build the application.
11490
11491           The types of long calls used depends on the capabilities of the
11492           assembler and linker, and the type of code being generated.  The
11493           impact on systems that support long absolute calls, and long pic
11494           symbol-difference or pc-relative calls should be relatively small.
11495           However, an indirect call is used on 32-bit ELF systems in pic code
11496           and it is quite long.
11497
11498       -munix=unix-std
11499           Generate compiler predefines and select a startfile for the
11500           specified UNIX standard.  The choices for unix-std are 93, 95 and
11501           98.  93 is supported on all HP-UX versions.  95 is available on HP-
11502           UX 10.10 and later.  98 is available on HP-UX 11.11 and later.  The
11503           default values are 93 for HP-UX 10.00, 95 for HP-UX 10.10 though to
11504           11.00, and 98 for HP-UX 11.11 and later.
11505
11506           -munix=93 provides the same predefines as GCC 3.3 and 3.4.
11507           -munix=95 provides additional predefines for "XOPEN_UNIX" and
11508           "_XOPEN_SOURCE_EXTENDED", and the startfile unix95.o.  -munix=98
11509           provides additional predefines for "_XOPEN_UNIX",
11510           "_XOPEN_SOURCE_EXTENDED", "_INCLUDE__STDC_A1_SOURCE" and
11511           "_INCLUDE_XOPEN_SOURCE_500", and the startfile unix98.o.
11512
11513           It is important to note that this option changes the interfaces for
11514           various library routines.  It also affects the operational behavior
11515           of the C library.  Thus, extreme care is needed in using this
11516           option.
11517
11518           Library code that is intended to operate with more than one UNIX
11519           standard must test, set and restore the variable
11520           __xpg4_extended_mask as appropriate.  Most GNU software doesn't
11521           provide this capability.
11522
11523       -nolibdld
11524           Suppress the generation of link options to search libdld.sl when
11525           the -static option is specified on HP-UX 10 and later.
11526
11527       -static
11528           The HP-UX implementation of setlocale in libc has a dependency on
11529           libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
11530           when the -static option is specified, special link options are
11531           needed to resolve this dependency.
11532
11533           On HP-UX 10 and later, the GCC driver adds the necessary options to
11534           link with libdld.sl when the -static option is specified.  This
11535           causes the resulting binary to be dynamic.  On the 64-bit port, the
11536           linkers generate dynamic binaries by default in any case.  The
11537           -nolibdld option can be used to prevent the GCC driver from adding
11538           these link options.
11539
11540       -threads
11541           Add support for multithreading with the dce thread library under
11542           HP-UX.  This option sets flags for both the preprocessor and
11543           linker.
11544
11545   Intel 386 and AMD x86-64 Options
11546       These -m options are defined for the i386 and x86-64 family of
11547       computers:
11548
11549       -march=cpu-type
11550           Generate instructions for the machine type cpu-type.  In contrast
11551           to -mtune=cpu-type, which merely tunes the generated code for the
11552           specified cpu-type, -march=cpu-type allows GCC to generate code
11553           that may not run at all on processors other than the one indicated.
11554           Specifying -march=cpu-type implies -mtune=cpu-type.
11555
11556           The choices for cpu-type are:
11557
11558           native
11559               This selects the CPU to generate code for at compilation time
11560               by determining the processor type of the compiling machine.
11561               Using -march=native enables all instruction subsets supported
11562               by the local machine (hence the result might not run on
11563               different machines).  Using -mtune=native produces code
11564               optimized for the local machine under the constraints of the
11565               selected instruction set.
11566
11567           i386
11568               Original Intel i386 CPU.
11569
11570           i486
11571               Intel i486 CPU.  (No scheduling is implemented for this chip.)
11572
11573           i586
11574           pentium
11575               Intel Pentium CPU with no MMX support.
11576
11577           pentium-mmx
11578               Intel Pentium MMX CPU, based on Pentium core with MMX
11579               instruction set support.
11580
11581           pentiumpro
11582               Intel Pentium Pro CPU.
11583
11584           i686
11585               When used with -march, the Pentium Pro instruction set is used,
11586               so the code runs on all i686 family chips.  When used with
11587               -mtune, it has the same meaning as generic.
11588
11589           pentium2
11590               Intel Pentium II CPU, based on Pentium Pro core with MMX
11591               instruction set support.
11592
11593           pentium3
11594           pentium3m
11595               Intel Pentium III CPU, based on Pentium Pro core with MMX and
11596               SSE instruction set support.
11597
11598           pentium-m
11599               Intel Pentium M; low-power version of Intel Pentium III CPU
11600               with MMX, SSE and SSE2 instruction set support.  Used by
11601               Centrino notebooks.
11602
11603           pentium4
11604           pentium4m
11605               Intel Pentium 4 CPU with MMX, SSE and SSE2 instruction set
11606               support.
11607
11608           prescott
11609               Improved version of Intel Pentium 4 CPU with MMX, SSE, SSE2 and
11610               SSE3 instruction set support.
11611
11612           nocona
11613               Improved version of Intel Pentium 4 CPU with 64-bit extensions,
11614               MMX, SSE, SSE2 and SSE3 instruction set support.
11615
11616           core2
11617               Intel Core 2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3
11618               and SSSE3 instruction set support.
11619
11620           corei7
11621               Intel Core i7 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3,
11622               SSSE3, SSE4.1 and SSE4.2 instruction set support.
11623
11624           corei7-avx
11625               Intel Core i7 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3,
11626               SSSE3, SSE4.1, SSE4.2, AVX, AES and PCLMUL instruction set
11627               support.
11628
11629           core-avx-i
11630               Intel Core CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3,
11631               SSSE3, SSE4.1, SSE4.2, AVX, AES, PCLMUL, FSGSBASE, RDRND and
11632               F16C instruction set support.
11633
11634           core-avx2
11635               Intel Core CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2,
11636               SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, AES, PCLMUL, FSGSBASE,
11637               RDRND, FMA, BMI, BMI2 and F16C instruction set support.
11638
11639           atom
11640               Intel Atom CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2,
11641               SSE3 and SSSE3 instruction set support.
11642
11643           k6  AMD K6 CPU with MMX instruction set support.
11644
11645           k6-2
11646           k6-3
11647               Improved versions of AMD K6 CPU with MMX and 3DNow! instruction
11648               set support.
11649
11650           athlon
11651           athlon-tbird
11652               AMD Athlon CPU with MMX, 3dNOW!, enhanced 3DNow! and SSE
11653               prefetch instructions support.
11654
11655           athlon-4
11656           athlon-xp
11657           athlon-mp
11658               Improved AMD Athlon CPU with MMX, 3DNow!, enhanced 3DNow! and
11659               full SSE instruction set support.
11660
11661           k8
11662           opteron
11663           athlon64
11664           athlon-fx
11665               Processors based on the AMD K8 core with x86-64 instruction set
11666               support, including the AMD Opteron, Athlon 64, and Athlon 64 FX
11667               processors.  (This supersets MMX, SSE, SSE2, 3DNow!, enhanced
11668               3DNow! and 64-bit instruction set extensions.)
11669
11670           k8-sse3
11671           opteron-sse3
11672           athlon64-sse3
11673               Improved versions of AMD K8 cores with SSE3 instruction set
11674               support.
11675
11676           amdfam10
11677           barcelona
11678               CPUs based on AMD Family 10h cores with x86-64 instruction set
11679               support.  (This supersets MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!,
11680               enhanced 3DNow!, ABM and 64-bit instruction set extensions.)
11681
11682           bdver1
11683               CPUs based on AMD Family 15h cores with x86-64 instruction set
11684               support.  (This supersets FMA4, AVX, XOP, LWP, AES, PCL_MUL,
11685               CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM
11686               and 64-bit instruction set extensions.)
11687
11688           bdver2
11689               AMD Family 15h core based CPUs with x86-64 instruction set
11690               support.  (This supersets BMI, TBM, F16C, FMA, AVX, XOP, LWP,
11691               AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1,
11692               SSE4.2, ABM and 64-bit instruction set extensions.)
11693
11694           bdver3
11695               AMD Family 15h core based CPUs with x86-64 instruction set
11696               support.  (This supersets BMI, TBM, F16C, FMA, AVX, XOP, LWP,
11697               AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1,
11698               SSE4.2, ABM and 64-bit instruction set extensions.
11699
11700           btver1
11701               CPUs based on AMD Family 14h cores with x86-64 instruction set
11702               support.  (This supersets MMX, SSE, SSE2, SSE3, SSSE3, SSE4A,
11703               CX16, ABM and 64-bit instruction set extensions.)
11704
11705           btver2
11706               CPUs based on AMD Family 16h cores with x86-64 instruction set
11707               support. This includes MOVBE, F16C, BMI, AVX, PCL_MUL, AES,
11708               SSE4.2, SSE4.1, CX16, ABM, SSE4A, SSSE3, SSE3, SSE2, SSE, MMX
11709               and 64-bit instruction set extensions.
11710
11711           winchip-c6
11712               IDT WinChip C6 CPU, dealt in same way as i486 with additional
11713               MMX instruction set support.
11714
11715           winchip2
11716               IDT WinChip 2 CPU, dealt in same way as i486 with additional
11717               MMX and 3DNow!  instruction set support.
11718
11719           c3  VIA C3 CPU with MMX and 3DNow! instruction set support.  (No
11720               scheduling is implemented for this chip.)
11721
11722           c3-2
11723               VIA C3-2 (Nehemiah/C5XL) CPU with MMX and SSE instruction set
11724               support.  (No scheduling is implemented for this chip.)
11725
11726           geode
11727               AMD Geode embedded processor with MMX and 3DNow! instruction
11728               set support.
11729
11730       -mtune=cpu-type
11731           Tune to cpu-type everything applicable about the generated code,
11732           except for the ABI and the set of available instructions.  While
11733           picking a specific cpu-type schedules things appropriately for that
11734           particular chip, the compiler does not generate any code that
11735           cannot run on the default machine type unless you use a -march=cpu-
11736           type option.  For example, if GCC is configured for
11737           i686-pc-linux-gnu then -mtune=pentium4 generates code that is tuned
11738           for Pentium 4 but still runs on i686 machines.
11739
11740           The choices for cpu-type are the same as for -march.  In addition,
11741           -mtune supports an extra choice for cpu-type:
11742
11743           generic
11744               Produce code optimized for the most common IA32/AMD64/EM64T
11745               processors.  If you know the CPU on which your code will run,
11746               then you should use the corresponding -mtune or -march option
11747               instead of -mtune=generic.  But, if you do not know exactly
11748               what CPU users of your application will have, then you should
11749               use this option.
11750
11751               As new processors are deployed in the marketplace, the behavior
11752               of this option will change.  Therefore, if you upgrade to a
11753               newer version of GCC, code generation controlled by this option
11754               will change to reflect the processors that are most common at
11755               the time that version of GCC is released.
11756
11757               There is no -march=generic option because -march indicates the
11758               instruction set the compiler can use, and there is no generic
11759               instruction set applicable to all processors.  In contrast,
11760               -mtune indicates the processor (or, in this case, collection of
11761               processors) for which the code is optimized.
11762
11763       -mcpu=cpu-type
11764           A deprecated synonym for -mtune.
11765
11766       -mfpmath=unit
11767           Generate floating-point arithmetic for selected unit unit.  The
11768           choices for unit are:
11769
11770           387 Use the standard 387 floating-point coprocessor present on the
11771               majority of chips and emulated otherwise.  Code compiled with
11772               this option runs almost everywhere.  The temporary results are
11773               computed in 80-bit precision instead of the precision specified
11774               by the type, resulting in slightly different results compared
11775               to most of other chips.  See -ffloat-store for more detailed
11776               description.
11777
11778               This is the default choice for i386 compiler.
11779
11780           sse Use scalar floating-point instructions present in the SSE
11781               instruction set.  This instruction set is supported by Pentium
11782               III and newer chips, and in the AMD line by Athlon-4, Athlon XP
11783               and Athlon MP chips.  The earlier version of the SSE
11784               instruction set supports only single-precision arithmetic, thus
11785               the double and extended-precision arithmetic are still done
11786               using 387.  A later version, present only in Pentium 4 and AMD
11787               x86-64 chips, supports double-precision arithmetic too.
11788
11789               For the i386 compiler, you must use -march=cpu-type, -msse or
11790               -msse2 switches to enable SSE extensions and make this option
11791               effective.  For the x86-64 compiler, these extensions are
11792               enabled by default.
11793
11794               The resulting code should be considerably faster in the
11795               majority of cases and avoid the numerical instability problems
11796               of 387 code, but may break some existing code that expects
11797               temporaries to be 80 bits.
11798
11799               This is the default choice for the x86-64 compiler.
11800
11801           sse,387
11802           sse+387
11803           both
11804               Attempt to utilize both instruction sets at once.  This
11805               effectively doubles the amount of available registers, and on
11806               chips with separate execution units for 387 and SSE the
11807               execution resources too.  Use this option with care, as it is
11808               still experimental, because the GCC register allocator does not
11809               model separate functional units well, resulting in unstable
11810               performance.
11811
11812       -masm=dialect
11813           Output assembly instructions using selected dialect.  Supported
11814           choices are intel or att (the default).  Darwin does not support
11815           intel.
11816
11817       -mieee-fp
11818       -mno-ieee-fp
11819           Control whether or not the compiler uses IEEE floating-point
11820           comparisons.  These correctly handle the case where the result of a
11821           comparison is unordered.
11822
11823       -msoft-float
11824           Generate output containing library calls for floating point.
11825
11826           Warning: the requisite libraries are not part of GCC.  Normally the
11827           facilities of the machine's usual C compiler are used, but this
11828           can't be done directly in cross-compilation.  You must make your
11829           own arrangements to provide suitable library functions for cross-
11830           compilation.
11831
11832           On machines where a function returns floating-point results in the
11833           80387 register stack, some floating-point opcodes may be emitted
11834           even if -msoft-float is used.
11835
11836       -mno-fp-ret-in-387
11837           Do not use the FPU registers for return values of functions.
11838
11839           The usual calling convention has functions return values of types
11840           "float" and "double" in an FPU register, even if there is no FPU.
11841           The idea is that the operating system should emulate an FPU.
11842
11843           The option -mno-fp-ret-in-387 causes such values to be returned in
11844           ordinary CPU registers instead.
11845
11846       -mno-fancy-math-387
11847           Some 387 emulators do not support the "sin", "cos" and "sqrt"
11848           instructions for the 387.  Specify this option to avoid generating
11849           those instructions.  This option is the default on FreeBSD, OpenBSD
11850           and NetBSD.  This option is overridden when -march indicates that
11851           the target CPU always has an FPU and so the instruction does not
11852           need emulation.  These instructions are not generated unless you
11853           also use the -funsafe-math-optimizations switch.
11854
11855       -malign-double
11856       -mno-align-double
11857           Control whether GCC aligns "double", "long double", and "long long"
11858           variables on a two-word boundary or a one-word boundary.  Aligning
11859           "double" variables on a two-word boundary produces code that runs
11860           somewhat faster on a Pentium at the expense of more memory.
11861
11862           On x86-64, -malign-double is enabled by default.
11863
11864           Warning: if you use the -malign-double switch, structures
11865           containing the above types are aligned differently than the
11866           published application binary interface specifications for the 386
11867           and are not binary compatible with structures in code compiled
11868           without that switch.
11869
11870       -m96bit-long-double
11871       -m128bit-long-double
11872           These switches control the size of "long double" type.  The i386
11873           application binary interface specifies the size to be 96 bits, so
11874           -m96bit-long-double is the default in 32-bit mode.
11875
11876           Modern architectures (Pentium and newer) prefer "long double" to be
11877           aligned to an 8- or 16-byte boundary.  In arrays or structures
11878           conforming to the ABI, this is not possible.  So specifying
11879           -m128bit-long-double aligns "long double" to a 16-byte boundary by
11880           padding the "long double" with an additional 32-bit zero.
11881
11882           In the x86-64 compiler, -m128bit-long-double is the default choice
11883           as its ABI specifies that "long double" is aligned on 16-byte
11884           boundary.
11885
11886           Notice that neither of these options enable any extra precision
11887           over the x87 standard of 80 bits for a "long double".
11888
11889           Warning: if you override the default value for your target ABI,
11890           this changes the size of structures and arrays containing "long
11891           double" variables, as well as modifying the function calling
11892           convention for functions taking "long double".  Hence they are not
11893           binary-compatible with code compiled without that switch.
11894
11895       -mlong-double-64
11896       -mlong-double-80
11897           These switches control the size of "long double" type. A size of 64
11898           bits makes the "long double" type equivalent to the "double" type.
11899           This is the default for Bionic C library.
11900
11901           Warning: if you override the default value for your target ABI,
11902           this changes the size of structures and arrays containing "long
11903           double" variables, as well as modifying the function calling
11904           convention for functions taking "long double".  Hence they are not
11905           binary-compatible with code compiled without that switch.
11906
11907       -mlarge-data-threshold=threshold
11908           When -mcmodel=medium is specified, data objects larger than
11909           threshold are placed in the large data section.  This value must be
11910           the same across all objects linked into the binary, and defaults to
11911           65535.
11912
11913       -mrtd
11914           Use a different function-calling convention, in which functions
11915           that take a fixed number of arguments return with the "ret num"
11916           instruction, which pops their arguments while returning.  This
11917           saves one instruction in the caller since there is no need to pop
11918           the arguments there.
11919
11920           You can specify that an individual function is called with this
11921           calling sequence with the function attribute stdcall.  You can also
11922           override the -mrtd option by using the function attribute cdecl.
11923
11924           Warning: this calling convention is incompatible with the one
11925           normally used on Unix, so you cannot use it if you need to call
11926           libraries compiled with the Unix compiler.
11927
11928           Also, you must provide function prototypes for all functions that
11929           take variable numbers of arguments (including "printf"); otherwise
11930           incorrect code is generated for calls to those functions.
11931
11932           In addition, seriously incorrect code results if you call a
11933           function with too many arguments.  (Normally, extra arguments are
11934           harmlessly ignored.)
11935
11936       -mregparm=num
11937           Control how many registers are used to pass integer arguments.  By
11938           default, no registers are used to pass arguments, and at most 3
11939           registers can be used.  You can control this behavior for a
11940           specific function by using the function attribute regparm.
11941
11942           Warning: if you use this switch, and num is nonzero, then you must
11943           build all modules with the same value, including any libraries.
11944           This includes the system libraries and startup modules.
11945
11946       -msseregparm
11947           Use SSE register passing conventions for float and double arguments
11948           and return values.  You can control this behavior for a specific
11949           function by using the function attribute sseregparm.
11950
11951           Warning: if you use this switch then you must build all modules
11952           with the same value, including any libraries.  This includes the
11953           system libraries and startup modules.
11954
11955       -mvect8-ret-in-mem
11956           Return 8-byte vectors in memory instead of MMX registers.  This is
11957           the default on Solaris@tie{}8 and 9 and VxWorks to match the ABI of
11958           the Sun Studio compilers until version 12.  Later compiler versions
11959           (starting with Studio 12 Update@tie{}1) follow the ABI used by
11960           other x86 targets, which is the default on Solaris@tie{}10 and
11961           later.  Only use this option if you need to remain compatible with
11962           existing code produced by those previous compiler versions or older
11963           versions of GCC.
11964
11965       -mpc32
11966       -mpc64
11967       -mpc80
11968           Set 80387 floating-point precision to 32, 64 or 80 bits.  When
11969           -mpc32 is specified, the significands of results of floating-point
11970           operations are rounded to 24 bits (single precision); -mpc64 rounds
11971           the significands of results of floating-point operations to 53 bits
11972           (double precision) and -mpc80 rounds the significands of results of
11973           floating-point operations to 64 bits (extended double precision),
11974           which is the default.  When this option is used, floating-point
11975           operations in higher precisions are not available to the programmer
11976           without setting the FPU control word explicitly.
11977
11978           Setting the rounding of floating-point operations to less than the
11979           default 80 bits can speed some programs by 2% or more.  Note that
11980           some mathematical libraries assume that extended-precision (80-bit)
11981           floating-point operations are enabled by default; routines in such
11982           libraries could suffer significant loss of accuracy, typically
11983           through so-called "catastrophic cancellation", when this option is
11984           used to set the precision to less than extended precision.
11985
11986       -mstackrealign
11987           Realign the stack at entry.  On the Intel x86, the -mstackrealign
11988           option generates an alternate prologue and epilogue that realigns
11989           the run-time stack if necessary.  This supports mixing legacy codes
11990           that keep 4-byte stack alignment with modern codes that keep
11991           16-byte stack alignment for SSE compatibility.  See also the
11992           attribute "force_align_arg_pointer", applicable to individual
11993           functions.
11994
11995       -mpreferred-stack-boundary=num
11996           Attempt to keep the stack boundary aligned to a 2 raised to num
11997           byte boundary.  If -mpreferred-stack-boundary is not specified, the
11998           default is 4 (16 bytes or 128 bits).
11999
12000           Warning: When generating code for the x86-64 architecture with SSE
12001           extensions disabled, -mpreferred-stack-boundary=3 can be used to
12002           keep the stack boundary aligned to 8 byte boundary.  Since x86-64
12003           ABI require 16 byte stack alignment, this is ABI incompatible and
12004           intended to be used in controlled environment where stack space is
12005           important limitation.  This option will lead to wrong code when
12006           functions compiled with 16 byte stack alignment (such as functions
12007           from a standard library) are called with misaligned stack.  In this
12008           case, SSE instructions may lead to misaligned memory access traps.
12009           In addition, variable arguments will be handled incorrectly for 16
12010           byte aligned objects (including x87 long double and __int128),
12011           leading to wrong results.  You must build all modules with
12012           -mpreferred-stack-boundary=3, including any libraries.  This
12013           includes the system libraries and startup modules.
12014
12015       -mincoming-stack-boundary=num
12016           Assume the incoming stack is aligned to a 2 raised to num byte
12017           boundary.  If -mincoming-stack-boundary is not specified, the one
12018           specified by -mpreferred-stack-boundary is used.
12019
12020           On Pentium and Pentium Pro, "double" and "long double" values
12021           should be aligned to an 8-byte boundary (see -malign-double) or
12022           suffer significant run time performance penalties.  On Pentium III,
12023           the Streaming SIMD Extension (SSE) data type "__m128" may not work
12024           properly if it is not 16-byte aligned.
12025
12026           To ensure proper alignment of this values on the stack, the stack
12027           boundary must be as aligned as that required by any value stored on
12028           the stack.  Further, every function must be generated such that it
12029           keeps the stack aligned.  Thus calling a function compiled with a
12030           higher preferred stack boundary from a function compiled with a
12031           lower preferred stack boundary most likely misaligns the stack.  It
12032           is recommended that libraries that use callbacks always use the
12033           default setting.
12034
12035           This extra alignment does consume extra stack space, and generally
12036           increases code size.  Code that is sensitive to stack space usage,
12037           such as embedded systems and operating system kernels, may want to
12038           reduce the preferred alignment to -mpreferred-stack-boundary=2.
12039
12040       -mmmx
12041       -mno-mmx
12042       -msse
12043       -mno-sse
12044       -msse2
12045       -mno-sse2
12046       -msse3
12047       -mno-sse3
12048       -mssse3
12049       -mno-ssse3
12050       -msse4.1
12051       -mno-sse4.1
12052       -msse4.2
12053       -mno-sse4.2
12054       -msse4
12055       -mno-sse4
12056       -mavx
12057       -mno-avx
12058       -mavx2
12059       -mno-avx2
12060       -maes
12061       -mno-aes
12062       -mpclmul
12063       -mno-pclmul
12064       -mfsgsbase
12065       -mno-fsgsbase
12066       -mrdrnd
12067       -mno-rdrnd
12068       -mf16c
12069       -mno-f16c
12070       -mfma
12071       -mno-fma
12072       -msse4a
12073       -mno-sse4a
12074       -mfma4
12075       -mno-fma4
12076       -mxop
12077       -mno-xop
12078       -mlwp
12079       -mno-lwp
12080       -m3dnow
12081       -mno-3dnow
12082       -mpopcnt
12083       -mno-popcnt
12084       -mabm
12085       -mno-abm
12086       -mbmi
12087       -mbmi2
12088       -mno-bmi
12089       -mno-bmi2
12090       -mlzcnt
12091       -mno-lzcnt
12092       -mrtm
12093       -mpku
12094       -mno-pku
12095       -mtbm
12096       -mno-tbm
12097           These switches enable or disable the use of instructions in the
12098           MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, AVX, AVX2, AES, PCLMUL,
12099           FSGSBASE, RDRND, F16C, FMA, SSE4A, FMA4, XOP, LWP, ABM, BMI, BMI2,
12100           LZCNT, RTM, PKU or 3DNow!  extended instruction sets.  These
12101           extensions are also available as built-in functions: see X86 Built-
12102           in Functions, for details of the functions enabled and disabled by
12103           these switches.
12104
12105           To generate SSE/SSE2 instructions automatically from floating-point
12106           code (as opposed to 387 instructions), see -mfpmath=sse.
12107
12108           GCC depresses SSEx instructions when -mavx is used. Instead, it
12109           generates new AVX instructions or AVX equivalence for all SSEx
12110           instructions when needed.
12111
12112           These options enable GCC to use these extended instructions in
12113           generated code, even without -mfpmath=sse.  Applications that
12114           perform run-time CPU detection must compile separate files for each
12115           supported architecture, using the appropriate flags.  In
12116           particular, the file containing the CPU detection code should be
12117           compiled without these options.
12118
12119       -mcld
12120           This option instructs GCC to emit a "cld" instruction in the
12121           prologue of functions that use string instructions.  String
12122           instructions depend on the DF flag to select between autoincrement
12123           or autodecrement mode.  While the ABI specifies the DF flag to be
12124           cleared on function entry, some operating systems violate this
12125           specification by not clearing the DF flag in their exception
12126           dispatchers.  The exception handler can be invoked with the DF flag
12127           set, which leads to wrong direction mode when string instructions
12128           are used.  This option can be enabled by default on 32-bit x86
12129           targets by configuring GCC with the --enable-cld configure option.
12130           Generation of "cld" instructions can be suppressed with the
12131           -mno-cld compiler option in this case.
12132
12133       -mvzeroupper
12134           This option instructs GCC to emit a "vzeroupper" instruction before
12135           a transfer of control flow out of the function to minimize the AVX
12136           to SSE transition penalty as well as remove unnecessary "zeroupper"
12137           intrinsics.
12138
12139       -mprefer-avx128
12140           This option instructs GCC to use 128-bit AVX instructions instead
12141           of 256-bit AVX instructions in the auto-vectorizer.
12142
12143       -mcx16
12144           This option enables GCC to generate "CMPXCHG16B" instructions.
12145           "CMPXCHG16B" allows for atomic operations on 128-bit double
12146           quadword (or oword) data types.  This is useful for high-resolution
12147           counters that can be updated by multiple processors (or cores).
12148           This instruction is generated as part of atomic built-in functions:
12149           see __sync Builtins or __atomic Builtins for details.
12150
12151       -msahf
12152           This option enables generation of "SAHF" instructions in 64-bit
12153           code.  Early Intel Pentium 4 CPUs with Intel 64 support, prior to
12154           the introduction of Pentium 4 G1 step in December 2005, lacked the
12155           "LAHF" and "SAHF" instructions which were supported by AMD64.
12156           These are load and store instructions, respectively, for certain
12157           status flags.  In 64-bit mode, the "SAHF" instruction is used to
12158           optimize "fmod", "drem", and "remainder" built-in functions; see
12159           Other Builtins for details.
12160
12161       -mmovbe
12162           This option enables use of the "movbe" instruction to implement
12163           "__builtin_bswap32" and "__builtin_bswap64".
12164
12165       -mcrc32
12166           This option enables built-in functions "__builtin_ia32_crc32qi",
12167           "__builtin_ia32_crc32hi", "__builtin_ia32_crc32si" and
12168           "__builtin_ia32_crc32di" to generate the "crc32" machine
12169           instruction.
12170
12171       -mrecip
12172           This option enables use of "RCPSS" and "RSQRTSS" instructions (and
12173           their vectorized variants "RCPPS" and "RSQRTPS") with an additional
12174           Newton-Raphson step to increase precision instead of "DIVSS" and
12175           "SQRTSS" (and their vectorized variants) for single-precision
12176           floating-point arguments.  These instructions are generated only
12177           when -funsafe-math-optimizations is enabled together with
12178           -finite-math-only and -fno-trapping-math.  Note that while the
12179           throughput of the sequence is higher than the throughput of the
12180           non-reciprocal instruction, the precision of the sequence can be
12181           decreased by up to 2 ulp (i.e. the inverse of 1.0 equals
12182           0.99999994).
12183
12184           Note that GCC implements "1.0f/sqrtf(x)" in terms of "RSQRTSS" (or
12185           "RSQRTPS") already with -ffast-math (or the above option
12186           combination), and doesn't need -mrecip.
12187
12188           Also note that GCC emits the above sequence with additional Newton-
12189           Raphson step for vectorized single-float division and vectorized
12190           "sqrtf(x)" already with -ffast-math (or the above option
12191           combination), and doesn't need -mrecip.
12192
12193       -mrecip=opt
12194           This option controls which reciprocal estimate instructions may be
12195           used.  opt is a comma-separated list of options, which may be
12196           preceded by a ! to invert the option:
12197
12198           all Enable all estimate instructions.
12199
12200           default
12201               Enable the default instructions, equivalent to -mrecip.
12202
12203           none
12204               Disable all estimate instructions, equivalent to -mno-recip.
12205
12206           div Enable the approximation for scalar division.
12207
12208           vec-div
12209               Enable the approximation for vectorized division.
12210
12211           sqrt
12212               Enable the approximation for scalar square root.
12213
12214           vec-sqrt
12215               Enable the approximation for vectorized square root.
12216
12217           So, for example, -mrecip=all,!sqrt enables all of the reciprocal
12218           approximations, except for square root.
12219
12220       -mveclibabi=type
12221           Specifies the ABI type to use for vectorizing intrinsics using an
12222           external library.  Supported values for type are svml for the Intel
12223           short vector math library and acml for the AMD math core library.
12224           To use this option, both -ftree-vectorize and
12225           -funsafe-math-optimizations have to be enabled, and an SVML or ACML
12226           ABI-compatible library must be specified at link time.
12227
12228           GCC currently emits calls to "vmldExp2", "vmldLn2", "vmldLog102",
12229           "vmldLog102", "vmldPow2", "vmldTanh2", "vmldTan2", "vmldAtan2",
12230           "vmldAtanh2", "vmldCbrt2", "vmldSinh2", "vmldSin2", "vmldAsinh2",
12231           "vmldAsin2", "vmldCosh2", "vmldCos2", "vmldAcosh2", "vmldAcos2",
12232           "vmlsExp4", "vmlsLn4", "vmlsLog104", "vmlsLog104", "vmlsPow4",
12233           "vmlsTanh4", "vmlsTan4", "vmlsAtan4", "vmlsAtanh4", "vmlsCbrt4",
12234           "vmlsSinh4", "vmlsSin4", "vmlsAsinh4", "vmlsAsin4", "vmlsCosh4",
12235           "vmlsCos4", "vmlsAcosh4" and "vmlsAcos4" for corresponding function
12236           type when -mveclibabi=svml is used, and "__vrd2_sin", "__vrd2_cos",
12237           "__vrd2_exp", "__vrd2_log", "__vrd2_log2", "__vrd2_log10",
12238           "__vrs4_sinf", "__vrs4_cosf", "__vrs4_expf", "__vrs4_logf",
12239           "__vrs4_log2f", "__vrs4_log10f" and "__vrs4_powf" for the
12240           corresponding function type when -mveclibabi=acml is used.
12241
12242       -mabi=name
12243           Generate code for the specified calling convention.  Permissible
12244           values are sysv for the ABI used on GNU/Linux and other systems,
12245           and ms for the Microsoft ABI.  The default is to use the Microsoft
12246           ABI when targeting Microsoft Windows and the SysV ABI on all other
12247           systems.  You can control this behavior for a specific function by
12248           using the function attribute ms_abi/sysv_abi.
12249
12250       -mtls-dialect=type
12251           Generate code to access thread-local storage using the gnu or gnu2
12252           conventions.  gnu is the conservative default; gnu2 is more
12253           efficient, but it may add compile- and run-time requirements that
12254           cannot be satisfied on all systems.
12255
12256       -mpush-args
12257       -mno-push-args
12258           Use PUSH operations to store outgoing parameters.  This method is
12259           shorter and usually equally fast as method using SUB/MOV operations
12260           and is enabled by default.  In some cases disabling it may improve
12261           performance because of improved scheduling and reduced
12262           dependencies.
12263
12264       -maccumulate-outgoing-args
12265           If enabled, the maximum amount of space required for outgoing
12266           arguments is computed in the function prologue.  This is faster on
12267           most modern CPUs because of reduced dependencies, improved
12268           scheduling and reduced stack usage when the preferred stack
12269           boundary is not equal to 2.  The drawback is a notable increase in
12270           code size.  This switch implies -mno-push-args.
12271
12272       -mthreads
12273           Support thread-safe exception handling on MinGW.  Programs that
12274           rely on thread-safe exception handling must compile and link all
12275           code with the -mthreads option.  When compiling, -mthreads defines
12276           "-D_MT"; when linking, it links in a special thread helper library
12277           -lmingwthrd which cleans up per-thread exception-handling data.
12278
12279       -mno-align-stringops
12280           Do not align the destination of inlined string operations.  This
12281           switch reduces code size and improves performance in case the
12282           destination is already aligned, but GCC doesn't know about it.
12283
12284       -minline-all-stringops
12285           By default GCC inlines string operations only when the destination
12286           is known to be aligned to least a 4-byte boundary.  This enables
12287           more inlining and increases code size, but may improve performance
12288           of code that depends on fast "memcpy", "strlen", and "memset" for
12289           short lengths.
12290
12291       -minline-stringops-dynamically
12292           For string operations of unknown size, use run-time checks with
12293           inline code for small blocks and a library call for large blocks.
12294
12295       -mstringop-strategy=alg
12296           Override the internal decision heuristic for the particular
12297           algorithm to use for inlining string operations.  The allowed
12298           values for alg are:
12299
12300           rep_byte
12301           rep_4byte
12302           rep_8byte
12303               Expand using i386 "rep" prefix of the specified size.
12304
12305           byte_loop
12306           loop
12307           unrolled_loop
12308               Expand into an inline loop.
12309
12310           libcall
12311               Always use a library call.
12312
12313       -momit-leaf-frame-pointer
12314           Don't keep the frame pointer in a register for leaf functions.
12315           This avoids the instructions to save, set up, and restore frame
12316           pointers and makes an extra register available in leaf functions.
12317           The option -fomit-leaf-frame-pointer removes the frame pointer for
12318           leaf functions, which might make debugging harder.
12319
12320       -mtls-direct-seg-refs
12321       -mno-tls-direct-seg-refs
12322           Controls whether TLS variables may be accessed with offsets from
12323           the TLS segment register (%gs for 32-bit, %fs for 64-bit), or
12324           whether the thread base pointer must be added.  Whether or not this
12325           is valid depends on the operating system, and whether it maps the
12326           segment to cover the entire TLS area.
12327
12328           For systems that use the GNU C Library, the default is on.
12329
12330       -msse2avx
12331       -mno-sse2avx
12332           Specify that the assembler should encode SSE instructions with VEX
12333           prefix.  The option -mavx turns this on by default.
12334
12335       -mfentry
12336       -mno-fentry
12337           If profiling is active (-pg), put the profiling counter call before
12338           the prologue.  Note: On x86 architectures the attribute
12339           "ms_hook_prologue" isn't possible at the moment for -mfentry and
12340           -pg.
12341
12342       -m8bit-idiv
12343       -mno-8bit-idiv
12344           On some processors, like Intel Atom, 8-bit unsigned integer divide
12345           is much faster than 32-bit/64-bit integer divide.  This option
12346           generates a run-time check.  If both dividend and divisor are
12347           within range of 0 to 255, 8-bit unsigned integer divide is used
12348           instead of 32-bit/64-bit integer divide.
12349
12350       -mavx256-split-unaligned-load
12351       -mavx256-split-unaligned-store
12352           Split 32-byte AVX unaligned load and store.
12353
12354       -mindirect-branch=choice
12355           Convert indirect call and jump with choice.  The default is keep,
12356           which keeps indirect call and jump unmodified.  thunk converts
12357           indirect call and jump to call and return thunk.  thunk-inline
12358           converts indirect call and jump to inlined call and return thunk.
12359           thunk-extern converts indirect call and jump to external call and
12360           return thunk provided in a separate object file.  You can control
12361           this behavior for a specific function by using the function
12362           attribute "indirect_branch".
12363
12364           Note that -mcmodel=large is incompatible with
12365           -mindirect-branch=thunk nor -mindirect-branch=thunk-extern since
12366           the thunk function may not be reachable in large code model.
12367
12368       -mfunction-return=choice
12369           Convert function return with choice.  The default is keep, which
12370           keeps function return unmodified.  thunk converts function return
12371           to call and return thunk.  thunk-inline converts function return to
12372           inlined call and return thunk.  thunk-extern converts function
12373           return to external call and return thunk provided in a separate
12374           object file.  You can control this behavior for a specific function
12375           by using the function attribute "function_return".
12376
12377           Note that -mcmodel=large is incompatible with
12378           -mfunction-return=thunk nor -mfunction-return=thunk-extern since
12379           the thunk function may not be reachable in large code model.
12380
12381       -mindirect-branch-register
12382           Force indirect call and jump via register.
12383
12384       These -m switches are supported in addition to the above on x86-64
12385       processors in 64-bit environments.
12386
12387       -m32
12388       -m64
12389       -mx32
12390           Generate code for a 32-bit or 64-bit environment.  The -m32 option
12391           sets "int", "long", and pointer types to 32 bits, and generates
12392           code that runs on any i386 system.
12393
12394           The -m64 option sets "int" to 32 bits and "long" and pointer types
12395           to 64 bits, and generates code for the x86-64 architecture.  For
12396           Darwin only the -m64 option also turns off the -fno-pic and
12397           -mdynamic-no-pic options.
12398
12399           The -mx32 option sets "int", "long", and pointer types to 32 bits,
12400           and generates code for the x86-64 architecture.
12401
12402       -mno-red-zone
12403           Do not use a so-called "red zone" for x86-64 code.  The red zone is
12404           mandated by the x86-64 ABI; it is a 128-byte area beyond the
12405           location of the stack pointer that is not modified by signal or
12406           interrupt handlers and therefore can be used for temporary data
12407           without adjusting the stack pointer.  The flag -mno-red-zone
12408           disables this red zone.
12409
12410       -mcmodel=small
12411           Generate code for the small code model: the program and its symbols
12412           must be linked in the lower 2 GB of the address space.  Pointers
12413           are 64 bits.  Programs can be statically or dynamically linked.
12414           This is the default code model.
12415
12416       -mcmodel=kernel
12417           Generate code for the kernel code model.  The kernel runs in the
12418           negative 2 GB of the address space.  This model has to be used for
12419           Linux kernel code.
12420
12421       -mcmodel=medium
12422           Generate code for the medium model: the program is linked in the
12423           lower 2 GB of the address space.  Small symbols are also placed
12424           there.  Symbols with sizes larger than -mlarge-data-threshold are
12425           put into large data or BSS sections and can be located above 2GB.
12426           Programs can be statically or dynamically linked.
12427
12428       -mcmodel=large
12429           Generate code for the large model.  This model makes no assumptions
12430           about addresses and sizes of sections.
12431
12432       -maddress-mode=long
12433           Generate code for long address mode.  This is only supported for
12434           64-bit and x32 environments.  It is the default address mode for
12435           64-bit environments.
12436
12437       -maddress-mode=short
12438           Generate code for short address mode.  This is only supported for
12439           32-bit and x32 environments.  It is the default address mode for
12440           32-bit and x32 environments.
12441
12442   i386 and x86-64 Windows Options
12443       These additional options are available for Microsoft Windows targets:
12444
12445       -mconsole
12446           This option specifies that a console application is to be
12447           generated, by instructing the linker to set the PE header subsystem
12448           type required for console applications.  This option is available
12449           for Cygwin and MinGW targets and is enabled by default on those
12450           targets.
12451
12452       -mdll
12453           This option is available for Cygwin and MinGW targets.  It
12454           specifies that a DLL---a dynamic link library---is to be generated,
12455           enabling the selection of the required runtime startup object and
12456           entry point.
12457
12458       -mnop-fun-dllimport
12459           This option is available for Cygwin and MinGW targets.  It
12460           specifies that the "dllimport" attribute should be ignored.
12461
12462       -mthread
12463           This option is available for MinGW targets. It specifies that
12464           MinGW-specific thread support is to be used.
12465
12466       -municode
12467           This option is available for MinGW-w64 targets.  It causes the
12468           "UNICODE" preprocessor macro to be predefined, and chooses Unicode-
12469           capable runtime startup code.
12470
12471       -mwin32
12472           This option is available for Cygwin and MinGW targets.  It
12473           specifies that the typical Microsoft Windows predefined macros are
12474           to be set in the pre-processor, but does not influence the choice
12475           of runtime library/startup code.
12476
12477       -mwindows
12478           This option is available for Cygwin and MinGW targets.  It
12479           specifies that a GUI application is to be generated by instructing
12480           the linker to set the PE header subsystem type appropriately.
12481
12482       -fno-set-stack-executable
12483           This option is available for MinGW targets. It specifies that the
12484           executable flag for the stack used by nested functions isn't set.
12485           This is necessary for binaries running in kernel mode of Microsoft
12486           Windows, as there the User32 API, which is used to set executable
12487           privileges, isn't available.
12488
12489       -fwritable-relocated-rdata
12490           This option is available for MinGW and Cygwin targets.  It
12491           specifies that relocated-data in read-only section is put into
12492           .data section.  This is a necessary for older runtimes not
12493           supporting modification of .rdata sections for pseudo-relocation.
12494
12495       -mpe-aligned-commons
12496           This option is available for Cygwin and MinGW targets.  It
12497           specifies that the GNU extension to the PE file format that permits
12498           the correct alignment of COMMON variables should be used when
12499           generating code.  It is enabled by default if GCC detects that the
12500           target assembler found during configuration supports the feature.
12501
12502       See also under i386 and x86-64 Options for standard options.
12503
12504   IA-64 Options
12505       These are the -m options defined for the Intel IA-64 architecture.
12506
12507       -mbig-endian
12508           Generate code for a big-endian target.  This is the default for HP-
12509           UX.
12510
12511       -mlittle-endian
12512           Generate code for a little-endian target.  This is the default for
12513           AIX5 and GNU/Linux.
12514
12515       -mgnu-as
12516       -mno-gnu-as
12517           Generate (or don't) code for the GNU assembler.  This is the
12518           default.
12519
12520       -mgnu-ld
12521       -mno-gnu-ld
12522           Generate (or don't) code for the GNU linker.  This is the default.
12523
12524       -mno-pic
12525           Generate code that does not use a global pointer register.  The
12526           result is not position independent code, and violates the IA-64
12527           ABI.
12528
12529       -mvolatile-asm-stop
12530       -mno-volatile-asm-stop
12531           Generate (or don't) a stop bit immediately before and after
12532           volatile asm statements.
12533
12534       -mregister-names
12535       -mno-register-names
12536           Generate (or don't) in, loc, and out register names for the stacked
12537           registers.  This may make assembler output more readable.
12538
12539       -mno-sdata
12540       -msdata
12541           Disable (or enable) optimizations that use the small data section.
12542           This may be useful for working around optimizer bugs.
12543
12544       -mconstant-gp
12545           Generate code that uses a single constant global pointer value.
12546           This is useful when compiling kernel code.
12547
12548       -mauto-pic
12549           Generate code that is self-relocatable.  This implies
12550           -mconstant-gp.  This is useful when compiling firmware code.
12551
12552       -minline-float-divide-min-latency
12553           Generate code for inline divides of floating-point values using the
12554           minimum latency algorithm.
12555
12556       -minline-float-divide-max-throughput
12557           Generate code for inline divides of floating-point values using the
12558           maximum throughput algorithm.
12559
12560       -mno-inline-float-divide
12561           Do not generate inline code for divides of floating-point values.
12562
12563       -minline-int-divide-min-latency
12564           Generate code for inline divides of integer values using the
12565           minimum latency algorithm.
12566
12567       -minline-int-divide-max-throughput
12568           Generate code for inline divides of integer values using the
12569           maximum throughput algorithm.
12570
12571       -mno-inline-int-divide
12572           Do not generate inline code for divides of integer values.
12573
12574       -minline-sqrt-min-latency
12575           Generate code for inline square roots using the minimum latency
12576           algorithm.
12577
12578       -minline-sqrt-max-throughput
12579           Generate code for inline square roots using the maximum throughput
12580           algorithm.
12581
12582       -mno-inline-sqrt
12583           Do not generate inline code for "sqrt".
12584
12585       -mfused-madd
12586       -mno-fused-madd
12587           Do (don't) generate code that uses the fused multiply/add or
12588           multiply/subtract instructions.  The default is to use these
12589           instructions.
12590
12591       -mno-dwarf2-asm
12592       -mdwarf2-asm
12593           Don't (or do) generate assembler code for the DWARF 2 line number
12594           debugging info.  This may be useful when not using the GNU
12595           assembler.
12596
12597       -mearly-stop-bits
12598       -mno-early-stop-bits
12599           Allow stop bits to be placed earlier than immediately preceding the
12600           instruction that triggered the stop bit.  This can improve
12601           instruction scheduling, but does not always do so.
12602
12603       -mfixed-range=register-range
12604           Generate code treating the given register range as fixed registers.
12605           A fixed register is one that the register allocator cannot use.
12606           This is useful when compiling kernel code.  A register range is
12607           specified as two registers separated by a dash.  Multiple register
12608           ranges can be specified separated by a comma.
12609
12610       -mtls-size=tls-size
12611           Specify bit size of immediate TLS offsets.  Valid values are 14,
12612           22, and 64.
12613
12614       -mtune=cpu-type
12615           Tune the instruction scheduling for a particular CPU, Valid values
12616           are itanium, itanium1, merced, itanium2, and mckinley.
12617
12618       -milp32
12619       -mlp64
12620           Generate code for a 32-bit or 64-bit environment.  The 32-bit
12621           environment sets int, long and pointer to 32 bits.  The 64-bit
12622           environment sets int to 32 bits and long and pointer to 64 bits.
12623           These are HP-UX specific flags.
12624
12625       -mno-sched-br-data-spec
12626       -msched-br-data-spec
12627           (Dis/En)able data speculative scheduling before reload.  This
12628           results in generation of "ld.a" instructions and the corresponding
12629           check instructions ("ld.c" / "chk.a").  The default is 'disable'.
12630
12631       -msched-ar-data-spec
12632       -mno-sched-ar-data-spec
12633           (En/Dis)able data speculative scheduling after reload.  This
12634           results in generation of "ld.a" instructions and the corresponding
12635           check instructions ("ld.c" / "chk.a").  The default is 'enable'.
12636
12637       -mno-sched-control-spec
12638       -msched-control-spec
12639           (Dis/En)able control speculative scheduling.  This feature is
12640           available only during region scheduling (i.e. before reload).  This
12641           results in generation of the "ld.s" instructions and the
12642           corresponding check instructions "chk.s".  The default is
12643           'disable'.
12644
12645       -msched-br-in-data-spec
12646       -mno-sched-br-in-data-spec
12647           (En/Dis)able speculative scheduling of the instructions that are
12648           dependent on the data speculative loads before reload.  This is
12649           effective only with -msched-br-data-spec enabled.  The default is
12650           'enable'.
12651
12652       -msched-ar-in-data-spec
12653       -mno-sched-ar-in-data-spec
12654           (En/Dis)able speculative scheduling of the instructions that are
12655           dependent on the data speculative loads after reload.  This is
12656           effective only with -msched-ar-data-spec enabled.  The default is
12657           'enable'.
12658
12659       -msched-in-control-spec
12660       -mno-sched-in-control-spec
12661           (En/Dis)able speculative scheduling of the instructions that are
12662           dependent on the control speculative loads.  This is effective only
12663           with -msched-control-spec enabled.  The default is 'enable'.
12664
12665       -mno-sched-prefer-non-data-spec-insns
12666       -msched-prefer-non-data-spec-insns
12667           If enabled, data-speculative instructions are chosen for schedule
12668           only if there are no other choices at the moment.  This makes the
12669           use of the data speculation much more conservative.  The default is
12670           'disable'.
12671
12672       -mno-sched-prefer-non-control-spec-insns
12673       -msched-prefer-non-control-spec-insns
12674           If enabled, control-speculative instructions are chosen for
12675           schedule only if there are no other choices at the moment.  This
12676           makes the use of the control speculation much more conservative.
12677           The default is 'disable'.
12678
12679       -mno-sched-count-spec-in-critical-path
12680       -msched-count-spec-in-critical-path
12681           If enabled, speculative dependencies are considered during
12682           computation of the instructions priorities.  This makes the use of
12683           the speculation a bit more conservative.  The default is 'disable'.
12684
12685       -msched-spec-ldc
12686           Use a simple data speculation check.  This option is on by default.
12687
12688       -msched-control-spec-ldc
12689           Use a simple check for control speculation.  This option is on by
12690           default.
12691
12692       -msched-stop-bits-after-every-cycle
12693           Place a stop bit after every cycle when scheduling.  This option is
12694           on by default.
12695
12696       -msched-fp-mem-deps-zero-cost
12697           Assume that floating-point stores and loads are not likely to cause
12698           a conflict when placed into the same instruction group.  This
12699           option is disabled by default.
12700
12701       -msel-sched-dont-check-control-spec
12702           Generate checks for control speculation in selective scheduling.
12703           This flag is disabled by default.
12704
12705       -msched-max-memory-insns=max-insns
12706           Limit on the number of memory insns per instruction group, giving
12707           lower priority to subsequent memory insns attempting to schedule in
12708           the same instruction group. Frequently useful to prevent cache bank
12709           conflicts.  The default value is 1.
12710
12711       -msched-max-memory-insns-hard-limit
12712           Makes the limit specified by msched-max-memory-insns a hard limit,
12713           disallowing more than that number in an instruction group.
12714           Otherwise, the limit is "soft", meaning that non-memory operations
12715           are preferred when the limit is reached, but memory operations may
12716           still be scheduled.
12717
12718   LM32 Options
12719       These -m options are defined for the LatticeMico32 architecture:
12720
12721       -mbarrel-shift-enabled
12722           Enable barrel-shift instructions.
12723
12724       -mdivide-enabled
12725           Enable divide and modulus instructions.
12726
12727       -mmultiply-enabled
12728           Enable multiply instructions.
12729
12730       -msign-extend-enabled
12731           Enable sign extend instructions.
12732
12733       -muser-enabled
12734           Enable user-defined instructions.
12735
12736   M32C Options
12737       -mcpu=name
12738           Select the CPU for which code is generated.  name may be one of r8c
12739           for the R8C/Tiny series, m16c for the M16C (up to /60) series,
12740           m32cm for the M16C/80 series, or m32c for the M32C/80 series.
12741
12742       -msim
12743           Specifies that the program will be run on the simulator.  This
12744           causes an alternate runtime library to be linked in which supports,
12745           for example, file I/O.  You must not use this option when
12746           generating programs that will run on real hardware; you must
12747           provide your own runtime library for whatever I/O functions are
12748           needed.
12749
12750       -memregs=number
12751           Specifies the number of memory-based pseudo-registers GCC uses
12752           during code generation.  These pseudo-registers are used like real
12753           registers, so there is a tradeoff between GCC's ability to fit the
12754           code into available registers, and the performance penalty of using
12755           memory instead of registers.  Note that all modules in a program
12756           must be compiled with the same value for this option.  Because of
12757           that, you must not use this option with GCC's default runtime
12758           libraries.
12759
12760   M32R/D Options
12761       These -m options are defined for Renesas M32R/D architectures:
12762
12763       -m32r2
12764           Generate code for the M32R/2.
12765
12766       -m32rx
12767           Generate code for the M32R/X.
12768
12769       -m32r
12770           Generate code for the M32R.  This is the default.
12771
12772       -mmodel=small
12773           Assume all objects live in the lower 16MB of memory (so that their
12774           addresses can be loaded with the "ld24" instruction), and assume
12775           all subroutines are reachable with the "bl" instruction.  This is
12776           the default.
12777
12778           The addressability of a particular object can be set with the
12779           "model" attribute.
12780
12781       -mmodel=medium
12782           Assume objects may be anywhere in the 32-bit address space (the
12783           compiler generates "seth/add3" instructions to load their
12784           addresses), and assume all subroutines are reachable with the "bl"
12785           instruction.
12786
12787       -mmodel=large
12788           Assume objects may be anywhere in the 32-bit address space (the
12789           compiler generates "seth/add3" instructions to load their
12790           addresses), and assume subroutines may not be reachable with the
12791           "bl" instruction (the compiler generates the much slower
12792           "seth/add3/jl" instruction sequence).
12793
12794       -msdata=none
12795           Disable use of the small data area.  Variables are put into one of
12796           .data, .bss, or .rodata (unless the "section" attribute has been
12797           specified).  This is the default.
12798
12799           The small data area consists of sections .sdata and .sbss.  Objects
12800           may be explicitly put in the small data area with the "section"
12801           attribute using one of these sections.
12802
12803       -msdata=sdata
12804           Put small global and static data in the small data area, but do not
12805           generate special code to reference them.
12806
12807       -msdata=use
12808           Put small global and static data in the small data area, and
12809           generate special instructions to reference them.
12810
12811       -G num
12812           Put global and static objects less than or equal to num bytes into
12813           the small data or BSS sections instead of the normal data or BSS
12814           sections.  The default value of num is 8.  The -msdata option must
12815           be set to one of sdata or use for this option to have any effect.
12816
12817           All modules should be compiled with the same -G num value.
12818           Compiling with different values of num may or may not work; if it
12819           doesn't the linker gives an error message---incorrect code is not
12820           generated.
12821
12822       -mdebug
12823           Makes the M32R-specific code in the compiler display some
12824           statistics that might help in debugging programs.
12825
12826       -malign-loops
12827           Align all loops to a 32-byte boundary.
12828
12829       -mno-align-loops
12830           Do not enforce a 32-byte alignment for loops.  This is the default.
12831
12832       -missue-rate=number
12833           Issue number instructions per cycle.  number can only be 1 or 2.
12834
12835       -mbranch-cost=number
12836           number can only be 1 or 2.  If it is 1 then branches are preferred
12837           over conditional code, if it is 2, then the opposite applies.
12838
12839       -mflush-trap=number
12840           Specifies the trap number to use to flush the cache.  The default
12841           is 12.  Valid numbers are between 0 and 15 inclusive.
12842
12843       -mno-flush-trap
12844           Specifies that the cache cannot be flushed by using a trap.
12845
12846       -mflush-func=name
12847           Specifies the name of the operating system function to call to
12848           flush the cache.  The default is _flush_cache, but a function call
12849           is only used if a trap is not available.
12850
12851       -mno-flush-func
12852           Indicates that there is no OS function for flushing the cache.
12853
12854   M680x0 Options
12855       These are the -m options defined for M680x0 and ColdFire processors.
12856       The default settings depend on which architecture was selected when the
12857       compiler was configured; the defaults for the most common choices are
12858       given below.
12859
12860       -march=arch
12861           Generate code for a specific M680x0 or ColdFire instruction set
12862           architecture.  Permissible values of arch for M680x0 architectures
12863           are: 68000, 68010, 68020, 68030, 68040, 68060 and cpu32.  ColdFire
12864           architectures are selected according to Freescale's ISA
12865           classification and the permissible values are: isaa, isaaplus, isab
12866           and isac.
12867
12868           GCC defines a macro __mcfarch__ whenever it is generating code for
12869           a ColdFire target.  The arch in this macro is one of the -march
12870           arguments given above.
12871
12872           When used together, -march and -mtune select code that runs on a
12873           family of similar processors but that is optimized for a particular
12874           microarchitecture.
12875
12876       -mcpu=cpu
12877           Generate code for a specific M680x0 or ColdFire processor.  The
12878           M680x0 cpus are: 68000, 68010, 68020, 68030, 68040, 68060, 68302,
12879           68332 and cpu32.  The ColdFire cpus are given by the table below,
12880           which also classifies the CPUs into families:
12881
12882           Family : -mcpu arguments
12883           51 : 51 51ac 51ag 51cn 51em 51je 51jf 51jg 51jm 51mm 51qe 51qm
12884           5206 : 5202 5204 5206
12885           5206e : 5206e
12886           5208 : 5207 5208
12887           5211a : 5210a 5211a
12888           5213 : 5211 5212 5213
12889           5216 : 5214 5216
12890           52235 : 52230 52231 52232 52233 52234 52235
12891           5225 : 5224 5225
12892           52259 : 52252 52254 52255 52256 52258 52259
12893           5235 : 5232 5233 5234 5235 523x
12894           5249 : 5249
12895           5250 : 5250
12896           5271 : 5270 5271
12897           5272 : 5272
12898           5275 : 5274 5275
12899           5282 : 5280 5281 5282 528x
12900           53017 : 53011 53012 53013 53014 53015 53016 53017
12901           5307 : 5307
12902           5329 : 5327 5328 5329 532x
12903           5373 : 5372 5373 537x
12904           5407 : 5407
12905           5475 : 5470 5471 5472 5473 5474 5475 547x 5480 5481 5482 5483 5484
12906           5485
12907
12908           -mcpu=cpu overrides -march=arch if arch is compatible with cpu.
12909           Other combinations of -mcpu and -march are rejected.
12910
12911           GCC defines the macro __mcf_cpu_cpu when ColdFire target cpu is
12912           selected.  It also defines __mcf_family_family, where the value of
12913           family is given by the table above.
12914
12915       -mtune=tune
12916           Tune the code for a particular microarchitecture within the
12917           constraints set by -march and -mcpu.  The M680x0 microarchitectures
12918           are: 68000, 68010, 68020, 68030, 68040, 68060 and cpu32.  The
12919           ColdFire microarchitectures are: cfv1, cfv2, cfv3, cfv4 and cfv4e.
12920
12921           You can also use -mtune=68020-40 for code that needs to run
12922           relatively well on 68020, 68030 and 68040 targets.  -mtune=68020-60
12923           is similar but includes 68060 targets as well.  These two options
12924           select the same tuning decisions as -m68020-40 and -m68020-60
12925           respectively.
12926
12927           GCC defines the macros __mcarch and __mcarch__ when tuning for
12928           680x0 architecture arch.  It also defines mcarch unless either
12929           -ansi or a non-GNU -std option is used.  If GCC is tuning for a
12930           range of architectures, as selected by -mtune=68020-40 or
12931           -mtune=68020-60, it defines the macros for every architecture in
12932           the range.
12933
12934           GCC also defines the macro __muarch__ when tuning for ColdFire
12935           microarchitecture uarch, where uarch is one of the arguments given
12936           above.
12937
12938       -m68000
12939       -mc68000
12940           Generate output for a 68000.  This is the default when the compiler
12941           is configured for 68000-based systems.  It is equivalent to
12942           -march=68000.
12943
12944           Use this option for microcontrollers with a 68000 or EC000 core,
12945           including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
12946
12947       -m68010
12948           Generate output for a 68010.  This is the default when the compiler
12949           is configured for 68010-based systems.  It is equivalent to
12950           -march=68010.
12951
12952       -m68020
12953       -mc68020
12954           Generate output for a 68020.  This is the default when the compiler
12955           is configured for 68020-based systems.  It is equivalent to
12956           -march=68020.
12957
12958       -m68030
12959           Generate output for a 68030.  This is the default when the compiler
12960           is configured for 68030-based systems.  It is equivalent to
12961           -march=68030.
12962
12963       -m68040
12964           Generate output for a 68040.  This is the default when the compiler
12965           is configured for 68040-based systems.  It is equivalent to
12966           -march=68040.
12967
12968           This option inhibits the use of 68881/68882 instructions that have
12969           to be emulated by software on the 68040.  Use this option if your
12970           68040 does not have code to emulate those instructions.
12971
12972       -m68060
12973           Generate output for a 68060.  This is the default when the compiler
12974           is configured for 68060-based systems.  It is equivalent to
12975           -march=68060.
12976
12977           This option inhibits the use of 68020 and 68881/68882 instructions
12978           that have to be emulated by software on the 68060.  Use this option
12979           if your 68060 does not have code to emulate those instructions.
12980
12981       -mcpu32
12982           Generate output for a CPU32.  This is the default when the compiler
12983           is configured for CPU32-based systems.  It is equivalent to
12984           -march=cpu32.
12985
12986           Use this option for microcontrollers with a CPU32 or CPU32+ core,
12987           including the 68330, 68331, 68332, 68333, 68334, 68336, 68340,
12988           68341, 68349 and 68360.
12989
12990       -m5200
12991           Generate output for a 520X ColdFire CPU.  This is the default when
12992           the compiler is configured for 520X-based systems.  It is
12993           equivalent to -mcpu=5206, and is now deprecated in favor of that
12994           option.
12995
12996           Use this option for microcontroller with a 5200 core, including the
12997           MCF5202, MCF5203, MCF5204 and MCF5206.
12998
12999       -m5206e
13000           Generate output for a 5206e ColdFire CPU.  The option is now
13001           deprecated in favor of the equivalent -mcpu=5206e.
13002
13003       -m528x
13004           Generate output for a member of the ColdFire 528X family.  The
13005           option is now deprecated in favor of the equivalent -mcpu=528x.
13006
13007       -m5307
13008           Generate output for a ColdFire 5307 CPU.  The option is now
13009           deprecated in favor of the equivalent -mcpu=5307.
13010
13011       -m5407
13012           Generate output for a ColdFire 5407 CPU.  The option is now
13013           deprecated in favor of the equivalent -mcpu=5407.
13014
13015       -mcfv4e
13016           Generate output for a ColdFire V4e family CPU (e.g. 547x/548x).
13017           This includes use of hardware floating-point instructions.  The
13018           option is equivalent to -mcpu=547x, and is now deprecated in favor
13019           of that option.
13020
13021       -m68020-40
13022           Generate output for a 68040, without using any of the new
13023           instructions.  This results in code that can run relatively
13024           efficiently on either a 68020/68881 or a 68030 or a 68040.  The
13025           generated code does use the 68881 instructions that are emulated on
13026           the 68040.
13027
13028           The option is equivalent to -march=68020 -mtune=68020-40.
13029
13030       -m68020-60
13031           Generate output for a 68060, without using any of the new
13032           instructions.  This results in code that can run relatively
13033           efficiently on either a 68020/68881 or a 68030 or a 68040.  The
13034           generated code does use the 68881 instructions that are emulated on
13035           the 68060.
13036
13037           The option is equivalent to -march=68020 -mtune=68020-60.
13038
13039       -mhard-float
13040       -m68881
13041           Generate floating-point instructions.  This is the default for
13042           68020 and above, and for ColdFire devices that have an FPU.  It
13043           defines the macro __HAVE_68881__ on M680x0 targets and __mcffpu__
13044           on ColdFire targets.
13045
13046       -msoft-float
13047           Do not generate floating-point instructions; use library calls
13048           instead.  This is the default for 68000, 68010, and 68832 targets.
13049           It is also the default for ColdFire devices that have no FPU.
13050
13051       -mdiv
13052       -mno-div
13053           Generate (do not generate) ColdFire hardware divide and remainder
13054           instructions.  If -march is used without -mcpu, the default is "on"
13055           for ColdFire architectures and "off" for M680x0 architectures.
13056           Otherwise, the default is taken from the target CPU (either the
13057           default CPU, or the one specified by -mcpu).  For example, the
13058           default is "off" for -mcpu=5206 and "on" for -mcpu=5206e.
13059
13060           GCC defines the macro __mcfhwdiv__ when this option is enabled.
13061
13062       -mshort
13063           Consider type "int" to be 16 bits wide, like "short int".
13064           Additionally, parameters passed on the stack are also aligned to a
13065           16-bit boundary even on targets whose API mandates promotion to
13066           32-bit.
13067
13068       -mno-short
13069           Do not consider type "int" to be 16 bits wide.  This is the
13070           default.
13071
13072       -mnobitfield
13073       -mno-bitfield
13074           Do not use the bit-field instructions.  The -m68000, -mcpu32 and
13075           -m5200 options imply -mnobitfield.
13076
13077       -mbitfield
13078           Do use the bit-field instructions.  The -m68020 option implies
13079           -mbitfield.  This is the default if you use a configuration
13080           designed for a 68020.
13081
13082       -mrtd
13083           Use a different function-calling convention, in which functions
13084           that take a fixed number of arguments return with the "rtd"
13085           instruction, which pops their arguments while returning.  This
13086           saves one instruction in the caller since there is no need to pop
13087           the arguments there.
13088
13089           This calling convention is incompatible with the one normally used
13090           on Unix, so you cannot use it if you need to call libraries
13091           compiled with the Unix compiler.
13092
13093           Also, you must provide function prototypes for all functions that
13094           take variable numbers of arguments (including "printf"); otherwise
13095           incorrect code is generated for calls to those functions.
13096
13097           In addition, seriously incorrect code results if you call a
13098           function with too many arguments.  (Normally, extra arguments are
13099           harmlessly ignored.)
13100
13101           The "rtd" instruction is supported by the 68010, 68020, 68030,
13102           68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
13103
13104       -mno-rtd
13105           Do not use the calling conventions selected by -mrtd.  This is the
13106           default.
13107
13108       -malign-int
13109       -mno-align-int
13110           Control whether GCC aligns "int", "long", "long long", "float",
13111           "double", and "long double" variables on a 32-bit boundary
13112           (-malign-int) or a 16-bit boundary (-mno-align-int).  Aligning
13113           variables on 32-bit boundaries produces code that runs somewhat
13114           faster on processors with 32-bit busses at the expense of more
13115           memory.
13116
13117           Warning: if you use the -malign-int switch, GCC aligns structures
13118           containing the above types differently than most published
13119           application binary interface specifications for the m68k.
13120
13121       -mpcrel
13122           Use the pc-relative addressing mode of the 68000 directly, instead
13123           of using a global offset table.  At present, this option implies
13124           -fpic, allowing at most a 16-bit offset for pc-relative addressing.
13125           -fPIC is not presently supported with -mpcrel, though this could be
13126           supported for 68020 and higher processors.
13127
13128       -mno-strict-align
13129       -mstrict-align
13130           Do not (do) assume that unaligned memory references are handled by
13131           the system.
13132
13133       -msep-data
13134           Generate code that allows the data segment to be located in a
13135           different area of memory from the text segment.  This allows for
13136           execute-in-place in an environment without virtual memory
13137           management.  This option implies -fPIC.
13138
13139       -mno-sep-data
13140           Generate code that assumes that the data segment follows the text
13141           segment.  This is the default.
13142
13143       -mid-shared-library
13144           Generate code that supports shared libraries via the library ID
13145           method.  This allows for execute-in-place and shared libraries in
13146           an environment without virtual memory management.  This option
13147           implies -fPIC.
13148
13149       -mno-id-shared-library
13150           Generate code that doesn't assume ID-based shared libraries are
13151           being used.  This is the default.
13152
13153       -mshared-library-id=n
13154           Specifies the identification number of the ID-based shared library
13155           being compiled.  Specifying a value of 0 generates more compact
13156           code; specifying other values forces the allocation of that number
13157           to the current library, but is no more space- or time-efficient
13158           than omitting this option.
13159
13160       -mxgot
13161       -mno-xgot
13162           When generating position-independent code for ColdFire, generate
13163           code that works if the GOT has more than 8192 entries.  This code
13164           is larger and slower than code generated without this option.  On
13165           M680x0 processors, this option is not needed; -fPIC suffices.
13166
13167           GCC normally uses a single instruction to load values from the GOT.
13168           While this is relatively efficient, it only works if the GOT is
13169           smaller than about 64k.  Anything larger causes the linker to
13170           report an error such as:
13171
13172                   relocation truncated to fit: R_68K_GOT16O foobar
13173
13174           If this happens, you should recompile your code with -mxgot.  It
13175           should then work with very large GOTs.  However, code generated
13176           with -mxgot is less efficient, since it takes 4 instructions to
13177           fetch the value of a global symbol.
13178
13179           Note that some linkers, including newer versions of the GNU linker,
13180           can create multiple GOTs and sort GOT entries.  If you have such a
13181           linker, you should only need to use -mxgot when compiling a single
13182           object file that accesses more than 8192 GOT entries.  Very few do.
13183
13184           These options have no effect unless GCC is generating position-
13185           independent code.
13186
13187   MCore Options
13188       These are the -m options defined for the Motorola M*Core processors.
13189
13190       -mhardlit
13191       -mno-hardlit
13192           Inline constants into the code stream if it can be done in two
13193           instructions or less.
13194
13195       -mdiv
13196       -mno-div
13197           Use the divide instruction.  (Enabled by default).
13198
13199       -mrelax-immediate
13200       -mno-relax-immediate
13201           Allow arbitrary-sized immediates in bit operations.
13202
13203       -mwide-bitfields
13204       -mno-wide-bitfields
13205           Always treat bit-fields as "int"-sized.
13206
13207       -m4byte-functions
13208       -mno-4byte-functions
13209           Force all functions to be aligned to a 4-byte boundary.
13210
13211       -mcallgraph-data
13212       -mno-callgraph-data
13213           Emit callgraph information.
13214
13215       -mslow-bytes
13216       -mno-slow-bytes
13217           Prefer word access when reading byte quantities.
13218
13219       -mlittle-endian
13220       -mbig-endian
13221           Generate code for a little-endian target.
13222
13223       -m210
13224       -m340
13225           Generate code for the 210 processor.
13226
13227       -mno-lsim
13228           Assume that runtime support has been provided and so omit the
13229           simulator library (libsim.a) from the linker command line.
13230
13231       -mstack-increment=size
13232           Set the maximum amount for a single stack increment operation.
13233           Large values can increase the speed of programs that contain
13234           functions that need a large amount of stack space, but they can
13235           also trigger a segmentation fault if the stack is extended too
13236           much.  The default value is 0x1000.
13237
13238   MeP Options
13239       -mabsdiff
13240           Enables the "abs" instruction, which is the absolute difference
13241           between two registers.
13242
13243       -mall-opts
13244           Enables all the optional instructions---average, multiply, divide,
13245           bit operations, leading zero, absolute difference, min/max, clip,
13246           and saturation.
13247
13248       -maverage
13249           Enables the "ave" instruction, which computes the average of two
13250           registers.
13251
13252       -mbased=n
13253           Variables of size n bytes or smaller are placed in the ".based"
13254           section by default.  Based variables use the $tp register as a base
13255           register, and there is a 128-byte limit to the ".based" section.
13256
13257       -mbitops
13258           Enables the bit operation instructions---bit test ("btstm"), set
13259           ("bsetm"), clear ("bclrm"), invert ("bnotm"), and test-and-set
13260           ("tas").
13261
13262       -mc=name
13263           Selects which section constant data is placed in.  name may be
13264           "tiny", "near", or "far".
13265
13266       -mclip
13267           Enables the "clip" instruction.  Note that "-mclip" is not useful
13268           unless you also provide "-mminmax".
13269
13270       -mconfig=name
13271           Selects one of the built-in core configurations.  Each MeP chip has
13272           one or more modules in it; each module has a core CPU and a variety
13273           of coprocessors, optional instructions, and peripherals.  The
13274           "MeP-Integrator" tool, not part of GCC, provides these
13275           configurations through this option; using this option is the same
13276           as using all the corresponding command-line options.  The default
13277           configuration is "default".
13278
13279       -mcop
13280           Enables the coprocessor instructions.  By default, this is a 32-bit
13281           coprocessor.  Note that the coprocessor is normally enabled via the
13282           "-mconfig=" option.
13283
13284       -mcop32
13285           Enables the 32-bit coprocessor's instructions.
13286
13287       -mcop64
13288           Enables the 64-bit coprocessor's instructions.
13289
13290       -mivc2
13291           Enables IVC2 scheduling.  IVC2 is a 64-bit VLIW coprocessor.
13292
13293       -mdc
13294           Causes constant variables to be placed in the ".near" section.
13295
13296       -mdiv
13297           Enables the "div" and "divu" instructions.
13298
13299       -meb
13300           Generate big-endian code.
13301
13302       -mel
13303           Generate little-endian code.
13304
13305       -mio-volatile
13306           Tells the compiler that any variable marked with the "io" attribute
13307           is to be considered volatile.
13308
13309       -ml Causes variables to be assigned to the ".far" section by default.
13310
13311       -mleadz
13312           Enables the "leadz" (leading zero) instruction.
13313
13314       -mm Causes variables to be assigned to the ".near" section by default.
13315
13316       -mminmax
13317           Enables the "min" and "max" instructions.
13318
13319       -mmult
13320           Enables the multiplication and multiply-accumulate instructions.
13321
13322       -mno-opts
13323           Disables all the optional instructions enabled by "-mall-opts".
13324
13325       -mrepeat
13326           Enables the "repeat" and "erepeat" instructions, used for low-
13327           overhead looping.
13328
13329       -ms Causes all variables to default to the ".tiny" section.  Note that
13330           there is a 65536-byte limit to this section.  Accesses to these
13331           variables use the %gp base register.
13332
13333       -msatur
13334           Enables the saturation instructions.  Note that the compiler does
13335           not currently generate these itself, but this option is included
13336           for compatibility with other tools, like "as".
13337
13338       -msdram
13339           Link the SDRAM-based runtime instead of the default ROM-based
13340           runtime.
13341
13342       -msim
13343           Link the simulator runtime libraries.
13344
13345       -msimnovec
13346           Link the simulator runtime libraries, excluding built-in support
13347           for reset and exception vectors and tables.
13348
13349       -mtf
13350           Causes all functions to default to the ".far" section.  Without
13351           this option, functions default to the ".near" section.
13352
13353       -mtiny=n
13354           Variables that are n bytes or smaller are allocated to the ".tiny"
13355           section.  These variables use the $gp base register.  The default
13356           for this option is 4, but note that there's a 65536-byte limit to
13357           the ".tiny" section.
13358
13359   MicroBlaze Options
13360       -msoft-float
13361           Use software emulation for floating point (default).
13362
13363       -mhard-float
13364           Use hardware floating-point instructions.
13365
13366       -mmemcpy
13367           Do not optimize block moves, use "memcpy".
13368
13369       -mno-clearbss
13370           This option is deprecated.  Use -fno-zero-initialized-in-bss
13371           instead.
13372
13373       -mcpu=cpu-type
13374           Use features of, and schedule code for, the given CPU.  Supported
13375           values are in the format vX.YY.Z, where X is a major version, YY is
13376           the minor version, and Z is compatibility code.  Example values are
13377           v3.00.a, v4.00.b, v5.00.a, v5.00.b, v5.00.b, v6.00.a.
13378
13379       -mxl-soft-mul
13380           Use software multiply emulation (default).
13381
13382       -mxl-soft-div
13383           Use software emulation for divides (default).
13384
13385       -mxl-barrel-shift
13386           Use the hardware barrel shifter.
13387
13388       -mxl-pattern-compare
13389           Use pattern compare instructions.
13390
13391       -msmall-divides
13392           Use table lookup optimization for small signed integer divisions.
13393
13394       -mxl-stack-check
13395           This option is deprecated.  Use -fstack-check instead.
13396
13397       -mxl-gp-opt
13398           Use GP-relative ".sdata"/".sbss" sections.
13399
13400       -mxl-multiply-high
13401           Use multiply high instructions for high part of 32x32 multiply.
13402
13403       -mxl-float-convert
13404           Use hardware floating-point conversion instructions.
13405
13406       -mxl-float-sqrt
13407           Use hardware floating-point square root instruction.
13408
13409       -mbig-endian
13410           Generate code for a big-endian target.
13411
13412       -mlittle-endian
13413           Generate code for a little-endian target.
13414
13415       -mxl-reorder
13416           Use reorder instructions (swap and byte reversed load/store).
13417
13418       -mxl-mode-app-model
13419           Select application model app-model.  Valid models are
13420
13421           executable
13422               normal executable (default), uses startup code crt0.o.
13423
13424           xmdstub
13425               for use with Xilinx Microprocessor Debugger (XMD) based
13426               software intrusive debug agent called xmdstub. This uses
13427               startup file crt1.o and sets the start address of the program
13428               to 0x800.
13429
13430           bootstrap
13431               for applications that are loaded using a bootloader.  This
13432               model uses startup file crt2.o which does not contain a
13433               processor reset vector handler. This is suitable for
13434               transferring control on a processor reset to the bootloader
13435               rather than the application.
13436
13437           novectors
13438               for applications that do not require any of the MicroBlaze
13439               vectors. This option may be useful for applications running
13440               within a monitoring application. This model uses crt3.o as a
13441               startup file.
13442
13443           Option -xl-mode-app-model is a deprecated alias for -mxl-mode-app-
13444           model.
13445
13446   MIPS Options
13447       -EB Generate big-endian code.
13448
13449       -EL Generate little-endian code.  This is the default for mips*el-*-*
13450           configurations.
13451
13452       -march=arch
13453           Generate code that runs on arch, which can be the name of a generic
13454           MIPS ISA, or the name of a particular processor.  The ISA names
13455           are: mips1, mips2, mips3, mips4, mips32, mips32r2, mips64 and
13456           mips64r2.  The processor names are: 4kc, 4km, 4kp, 4ksc, 4kec,
13457           4kem, 4kep, 4ksd, 5kc, 5kf, 20kc, 24kc, 24kf2_1, 24kf1_1, 24kec,
13458           24kef2_1, 24kef1_1, 34kc, 34kf2_1, 34kf1_1, 34kn, 74kc, 74kf2_1,
13459           74kf1_1, 74kf3_2, 1004kc, 1004kf2_1, 1004kf1_1, loongson2e,
13460           loongson2f, loongson3a, m4k, octeon, octeon+, octeon2, orion,
13461           r2000, r3000, r3900, r4000, r4400, r4600, r4650, r4700, r6000,
13462           r8000, rm7000, rm9000, r10000, r12000, r14000, r16000, sb1,
13463           sr71000, vr4100, vr4111, vr4120, vr4130, vr4300, vr5000, vr5400,
13464           vr5500, xlr and xlp.  The special value from-abi selects the most
13465           compatible architecture for the selected ABI (that is, mips1 for
13466           32-bit ABIs and mips3 for 64-bit ABIs).
13467
13468           The native Linux/GNU toolchain also supports the value native,
13469           which selects the best architecture option for the host processor.
13470           -march=native has no effect if GCC does not recognize the
13471           processor.
13472
13473           In processor names, a final 000 can be abbreviated as k (for
13474           example, -march=r2k).  Prefixes are optional, and vr may be written
13475           r.
13476
13477           Names of the form nf2_1 refer to processors with FPUs clocked at
13478           half the rate of the core, names of the form nf1_1 refer to
13479           processors with FPUs clocked at the same rate as the core, and
13480           names of the form nf3_2 refer to processors with FPUs clocked a
13481           ratio of 3:2 with respect to the core.  For compatibility reasons,
13482           nf is accepted as a synonym for nf2_1 while nx and bfx are accepted
13483           as synonyms for nf1_1.
13484
13485           GCC defines two macros based on the value of this option.  The
13486           first is _MIPS_ARCH, which gives the name of target architecture,
13487           as a string.  The second has the form _MIPS_ARCH_foo, where foo is
13488           the capitalized value of _MIPS_ARCH.  For example, -march=r2000
13489           sets _MIPS_ARCH to "r2000" and defines the macro _MIPS_ARCH_R2000.
13490
13491           Note that the _MIPS_ARCH macro uses the processor names given
13492           above.  In other words, it has the full prefix and does not
13493           abbreviate 000 as k.  In the case of from-abi, the macro names the
13494           resolved architecture (either "mips1" or "mips3").  It names the
13495           default architecture when no -march option is given.
13496
13497       -mtune=arch
13498           Optimize for arch.  Among other things, this option controls the
13499           way instructions are scheduled, and the perceived cost of
13500           arithmetic operations.  The list of arch values is the same as for
13501           -march.
13502
13503           When this option is not used, GCC optimizes for the processor
13504           specified by -march.  By using -march and -mtune together, it is
13505           possible to generate code that runs on a family of processors, but
13506           optimize the code for one particular member of that family.
13507
13508           -mtune defines the macros _MIPS_TUNE and _MIPS_TUNE_foo, which work
13509           in the same way as the -march ones described above.
13510
13511       -mips1
13512           Equivalent to -march=mips1.
13513
13514       -mips2
13515           Equivalent to -march=mips2.
13516
13517       -mips3
13518           Equivalent to -march=mips3.
13519
13520       -mips4
13521           Equivalent to -march=mips4.
13522
13523       -mips32
13524           Equivalent to -march=mips32.
13525
13526       -mips32r2
13527           Equivalent to -march=mips32r2.
13528
13529       -mips64
13530           Equivalent to -march=mips64.
13531
13532       -mips64r2
13533           Equivalent to -march=mips64r2.
13534
13535       -mips16
13536       -mno-mips16
13537           Generate (do not generate) MIPS16 code.  If GCC is targeting a
13538           MIPS32 or MIPS64 architecture, it makes use of the MIPS16e ASE.
13539
13540           MIPS16 code generation can also be controlled on a per-function
13541           basis by means of "mips16" and "nomips16" attributes.
13542
13543       -mflip-mips16
13544           Generate MIPS16 code on alternating functions.  This option is
13545           provided for regression testing of mixed MIPS16/non-MIPS16 code
13546           generation, and is not intended for ordinary use in compiling user
13547           code.
13548
13549       -minterlink-mips16
13550       -mno-interlink-mips16
13551           Require (do not require) that non-MIPS16 code be link-compatible
13552           with MIPS16 code.
13553
13554           For example, non-MIPS16 code cannot jump directly to MIPS16 code;
13555           it must either use a call or an indirect jump.  -minterlink-mips16
13556           therefore disables direct jumps unless GCC knows that the target of
13557           the jump is not MIPS16.
13558
13559       -mabi=32
13560       -mabi=o64
13561       -mabi=n32
13562       -mabi=64
13563       -mabi=eabi
13564           Generate code for the given ABI.
13565
13566           Note that the EABI has a 32-bit and a 64-bit variant.  GCC normally
13567           generates 64-bit code when you select a 64-bit architecture, but
13568           you can use -mgp32 to get 32-bit code instead.
13569
13570           For information about the O64 ABI, see
13571           <http://gcc.gnu.org/projects/mipso64-abi.html>.
13572
13573           GCC supports a variant of the o32 ABI in which floating-point
13574           registers are 64 rather than 32 bits wide.  You can select this
13575           combination with -mabi=32 -mfp64.  This ABI relies on the "mthc1"
13576           and "mfhc1" instructions and is therefore only supported for
13577           MIPS32R2 processors.
13578
13579           The register assignments for arguments and return values remain the
13580           same, but each scalar value is passed in a single 64-bit register
13581           rather than a pair of 32-bit registers.  For example, scalar
13582           floating-point values are returned in $f0 only, not a $f0/$f1 pair.
13583           The set of call-saved registers also remains the same, but all 64
13584           bits are saved.
13585
13586       -mabicalls
13587       -mno-abicalls
13588           Generate (do not generate) code that is suitable for SVR4-style
13589           dynamic objects.  -mabicalls is the default for SVR4-based systems.
13590
13591       -mshared
13592       -mno-shared
13593           Generate (do not generate) code that is fully position-independent,
13594           and that can therefore be linked into shared libraries.  This
13595           option only affects -mabicalls.
13596
13597           All -mabicalls code has traditionally been position-independent,
13598           regardless of options like -fPIC and -fpic.  However, as an
13599           extension, the GNU toolchain allows executables to use absolute
13600           accesses for locally-binding symbols.  It can also use shorter GP
13601           initialization sequences and generate direct calls to locally-
13602           defined functions.  This mode is selected by -mno-shared.
13603
13604           -mno-shared depends on binutils 2.16 or higher and generates
13605           objects that can only be linked by the GNU linker.  However, the
13606           option does not affect the ABI of the final executable; it only
13607           affects the ABI of relocatable objects.  Using -mno-shared
13608           generally makes executables both smaller and quicker.
13609
13610           -mshared is the default.
13611
13612       -mplt
13613       -mno-plt
13614           Assume (do not assume) that the static and dynamic linkers support
13615           PLTs and copy relocations.  This option only affects -mno-shared
13616           -mabicalls.  For the n64 ABI, this option has no effect without
13617           -msym32.
13618
13619           You can make -mplt the default by configuring GCC with
13620           --with-mips-plt.  The default is -mno-plt otherwise.
13621
13622       -mxgot
13623       -mno-xgot
13624           Lift (do not lift) the usual restrictions on the size of the global
13625           offset table.
13626
13627           GCC normally uses a single instruction to load values from the GOT.
13628           While this is relatively efficient, it only works if the GOT is
13629           smaller than about 64k.  Anything larger causes the linker to
13630           report an error such as:
13631
13632                   relocation truncated to fit: R_MIPS_GOT16 foobar
13633
13634           If this happens, you should recompile your code with -mxgot.  This
13635           works with very large GOTs, although the code is also less
13636           efficient, since it takes three instructions to fetch the value of
13637           a global symbol.
13638
13639           Note that some linkers can create multiple GOTs.  If you have such
13640           a linker, you should only need to use -mxgot when a single object
13641           file accesses more than 64k's worth of GOT entries.  Very few do.
13642
13643           These options have no effect unless GCC is generating position
13644           independent code.
13645
13646       -mgp32
13647           Assume that general-purpose registers are 32 bits wide.
13648
13649       -mgp64
13650           Assume that general-purpose registers are 64 bits wide.
13651
13652       -mfp32
13653           Assume that floating-point registers are 32 bits wide.
13654
13655       -mfp64
13656           Assume that floating-point registers are 64 bits wide.
13657
13658       -mhard-float
13659           Use floating-point coprocessor instructions.
13660
13661       -msoft-float
13662           Do not use floating-point coprocessor instructions.  Implement
13663           floating-point calculations using library calls instead.
13664
13665       -mno-float
13666           Equivalent to -msoft-float, but additionally asserts that the
13667           program being compiled does not perform any floating-point
13668           operations.  This option is presently supported only by some bare-
13669           metal MIPS configurations, where it may select a special set of
13670           libraries that lack all floating-point support (including, for
13671           example, the floating-point "printf" formats).  If code compiled
13672           with "-mno-float" accidentally contains floating-point operations,
13673           it is likely to suffer a link-time or run-time failure.
13674
13675       -msingle-float
13676           Assume that the floating-point coprocessor only supports single-
13677           precision operations.
13678
13679       -mdouble-float
13680           Assume that the floating-point coprocessor supports double-
13681           precision operations.  This is the default.
13682
13683       -mllsc
13684       -mno-llsc
13685           Use (do not use) ll, sc, and sync instructions to implement atomic
13686           memory built-in functions.  When neither option is specified, GCC
13687           uses the instructions if the target architecture supports them.
13688
13689           -mllsc is useful if the runtime environment can emulate the
13690           instructions and -mno-llsc can be useful when compiling for
13691           nonstandard ISAs.  You can make either option the default by
13692           configuring GCC with --with-llsc and --without-llsc respectively.
13693           --with-llsc is the default for some configurations; see the
13694           installation documentation for details.
13695
13696       -mdsp
13697       -mno-dsp
13698           Use (do not use) revision 1 of the MIPS DSP ASE.
13699             This option defines the preprocessor macro __mips_dsp.  It also
13700           defines __mips_dsp_rev to 1.
13701
13702       -mdspr2
13703       -mno-dspr2
13704           Use (do not use) revision 2 of the MIPS DSP ASE.
13705             This option defines the preprocessor macros __mips_dsp and
13706           __mips_dspr2.  It also defines __mips_dsp_rev to 2.
13707
13708       -msmartmips
13709       -mno-smartmips
13710           Use (do not use) the MIPS SmartMIPS ASE.
13711
13712       -mpaired-single
13713       -mno-paired-single
13714           Use (do not use) paired-single floating-point instructions.
13715             This option requires hardware floating-point support to be
13716           enabled.
13717
13718       -mdmx
13719       -mno-mdmx
13720           Use (do not use) MIPS Digital Media Extension instructions.  This
13721           option can only be used when generating 64-bit code and requires
13722           hardware floating-point support to be enabled.
13723
13724       -mips3d
13725       -mno-mips3d
13726           Use (do not use) the MIPS-3D ASE.  The option -mips3d implies
13727           -mpaired-single.
13728
13729       -mmt
13730       -mno-mt
13731           Use (do not use) MT Multithreading instructions.
13732
13733       -mmcu
13734       -mno-mcu
13735           Use (do not use) the MIPS MCU ASE instructions.
13736
13737       -mlong64
13738           Force "long" types to be 64 bits wide.  See -mlong32 for an
13739           explanation of the default and the way that the pointer size is
13740           determined.
13741
13742       -mlong32
13743           Force "long", "int", and pointer types to be 32 bits wide.
13744
13745           The default size of "int"s, "long"s and pointers depends on the
13746           ABI.  All the supported ABIs use 32-bit "int"s.  The n64 ABI uses
13747           64-bit "long"s, as does the 64-bit EABI; the others use 32-bit
13748           "long"s.  Pointers are the same size as "long"s, or the same size
13749           as integer registers, whichever is smaller.
13750
13751       -msym32
13752       -mno-sym32
13753           Assume (do not assume) that all symbols have 32-bit values,
13754           regardless of the selected ABI.  This option is useful in
13755           combination with -mabi=64 and -mno-abicalls because it allows GCC
13756           to generate shorter and faster references to symbolic addresses.
13757
13758       -G num
13759           Put definitions of externally-visible data in a small data section
13760           if that data is no bigger than num bytes.  GCC can then generate
13761           more efficient accesses to the data; see -mgpopt for details.
13762
13763           The default -G option depends on the configuration.
13764
13765       -mlocal-sdata
13766       -mno-local-sdata
13767           Extend (do not extend) the -G behavior to local data too, such as
13768           to static variables in C.  -mlocal-sdata is the default for all
13769           configurations.
13770
13771           If the linker complains that an application is using too much small
13772           data, you might want to try rebuilding the less performance-
13773           critical parts with -mno-local-sdata.  You might also want to build
13774           large libraries with -mno-local-sdata, so that the libraries leave
13775           more room for the main program.
13776
13777       -mextern-sdata
13778       -mno-extern-sdata
13779           Assume (do not assume) that externally-defined data is in a small
13780           data section if the size of that data is within the -G limit.
13781           -mextern-sdata is the default for all configurations.
13782
13783           If you compile a module Mod with -mextern-sdata -G num -mgpopt, and
13784           Mod references a variable Var that is no bigger than num bytes, you
13785           must make sure that Var is placed in a small data section.  If Var
13786           is defined by another module, you must either compile that module
13787           with a high-enough -G setting or attach a "section" attribute to
13788           Var's definition.  If Var is common, you must link the application
13789           with a high-enough -G setting.
13790
13791           The easiest way of satisfying these restrictions is to compile and
13792           link every module with the same -G option.  However, you may wish
13793           to build a library that supports several different small data
13794           limits.  You can do this by compiling the library with the highest
13795           supported -G setting and additionally using -mno-extern-sdata to
13796           stop the library from making assumptions about externally-defined
13797           data.
13798
13799       -mgpopt
13800       -mno-gpopt
13801           Use (do not use) GP-relative accesses for symbols that are known to
13802           be in a small data section; see -G, -mlocal-sdata and
13803           -mextern-sdata.  -mgpopt is the default for all configurations.
13804
13805           -mno-gpopt is useful for cases where the $gp register might not
13806           hold the value of "_gp".  For example, if the code is part of a
13807           library that might be used in a boot monitor, programs that call
13808           boot monitor routines pass an unknown value in $gp.  (In such
13809           situations, the boot monitor itself is usually compiled with -G0.)
13810
13811           -mno-gpopt implies -mno-local-sdata and -mno-extern-sdata.
13812
13813       -membedded-data
13814       -mno-embedded-data
13815           Allocate variables to the read-only data section first if possible,
13816           then next in the small data section if possible, otherwise in data.
13817           This gives slightly slower code than the default, but reduces the
13818           amount of RAM required when executing, and thus may be preferred
13819           for some embedded systems.
13820
13821       -muninit-const-in-rodata
13822       -mno-uninit-const-in-rodata
13823           Put uninitialized "const" variables in the read-only data section.
13824           This option is only meaningful in conjunction with -membedded-data.
13825
13826       -mcode-readable=setting
13827           Specify whether GCC may generate code that reads from executable
13828           sections.  There are three possible settings:
13829
13830           -mcode-readable=yes
13831               Instructions may freely access executable sections.  This is
13832               the default setting.
13833
13834           -mcode-readable=pcrel
13835               MIPS16 PC-relative load instructions can access executable
13836               sections, but other instructions must not do so.  This option
13837               is useful on 4KSc and 4KSd processors when the code TLBs have
13838               the Read Inhibit bit set.  It is also useful on processors that
13839               can be configured to have a dual instruction/data SRAM
13840               interface and that, like the M4K, automatically redirect PC-
13841               relative loads to the instruction RAM.
13842
13843           -mcode-readable=no
13844               Instructions must not access executable sections.  This option
13845               can be useful on targets that are configured to have a dual
13846               instruction/data SRAM interface but that (unlike the M4K) do
13847               not automatically redirect PC-relative loads to the instruction
13848               RAM.
13849
13850       -msplit-addresses
13851       -mno-split-addresses
13852           Enable (disable) use of the "%hi()" and "%lo()" assembler
13853           relocation operators.  This option has been superseded by
13854           -mexplicit-relocs but is retained for backwards compatibility.
13855
13856       -mexplicit-relocs
13857       -mno-explicit-relocs
13858           Use (do not use) assembler relocation operators when dealing with
13859           symbolic addresses.  The alternative, selected by
13860           -mno-explicit-relocs, is to use assembler macros instead.
13861
13862           -mexplicit-relocs is the default if GCC was configured to use an
13863           assembler that supports relocation operators.
13864
13865       -mcheck-zero-division
13866       -mno-check-zero-division
13867           Trap (do not trap) on integer division by zero.
13868
13869           The default is -mcheck-zero-division.
13870
13871       -mdivide-traps
13872       -mdivide-breaks
13873           MIPS systems check for division by zero by generating either a
13874           conditional trap or a break instruction.  Using traps results in
13875           smaller code, but is only supported on MIPS II and later.  Also,
13876           some versions of the Linux kernel have a bug that prevents trap
13877           from generating the proper signal ("SIGFPE").  Use -mdivide-traps
13878           to allow conditional traps on architectures that support them and
13879           -mdivide-breaks to force the use of breaks.
13880
13881           The default is usually -mdivide-traps, but this can be overridden
13882           at configure time using --with-divide=breaks.  Divide-by-zero
13883           checks can be completely disabled using -mno-check-zero-division.
13884
13885       -mmemcpy
13886       -mno-memcpy
13887           Force (do not force) the use of "memcpy()" for non-trivial block
13888           moves.  The default is -mno-memcpy, which allows GCC to inline most
13889           constant-sized copies.
13890
13891       -mlong-calls
13892       -mno-long-calls
13893           Disable (do not disable) use of the "jal" instruction.  Calling
13894           functions using "jal" is more efficient but requires the caller and
13895           callee to be in the same 256 megabyte segment.
13896
13897           This option has no effect on abicalls code.  The default is
13898           -mno-long-calls.
13899
13900       -mmad
13901       -mno-mad
13902           Enable (disable) use of the "mad", "madu" and "mul" instructions,
13903           as provided by the R4650 ISA.
13904
13905       -mfused-madd
13906       -mno-fused-madd
13907           Enable (disable) use of the floating-point multiply-accumulate
13908           instructions, when they are available.  The default is
13909           -mfused-madd.
13910
13911           On the R8000 CPU when multiply-accumulate instructions are used,
13912           the intermediate product is calculated to infinite precision and is
13913           not subject to the FCSR Flush to Zero bit.  This may be undesirable
13914           in some circumstances.  On other processors the result is
13915           numerically identical to the equivalent computation using separate
13916           multiply, add, subtract and negate instructions.
13917
13918       -nocpp
13919           Tell the MIPS assembler to not run its preprocessor over user
13920           assembler files (with a .s suffix) when assembling them.
13921
13922       -mfix-24k
13923       -mno-fix-24k
13924           Work around the 24K E48 (lost data on stores during refill) errata.
13925           The workarounds are implemented by the assembler rather than by
13926           GCC.
13927
13928       -mfix-r4000
13929       -mno-fix-r4000
13930           Work around certain R4000 CPU errata:
13931
13932           -   A double-word or a variable shift may give an incorrect result
13933               if executed immediately after starting an integer division.
13934
13935           -   A double-word or a variable shift may give an incorrect result
13936               if executed while an integer multiplication is in progress.
13937
13938           -   An integer division may give an incorrect result if started in
13939               a delay slot of a taken branch or a jump.
13940
13941       -mfix-r4400
13942       -mno-fix-r4400
13943           Work around certain R4400 CPU errata:
13944
13945           -   A double-word or a variable shift may give an incorrect result
13946               if executed immediately after starting an integer division.
13947
13948       -mfix-r10000
13949       -mno-fix-r10000
13950           Work around certain R10000 errata:
13951
13952           -   "ll"/"sc" sequences may not behave atomically on revisions
13953               prior to 3.0.  They may deadlock on revisions 2.6 and earlier.
13954
13955           This option can only be used if the target architecture supports
13956           branch-likely instructions.  -mfix-r10000 is the default when
13957           -march=r10000 is used; -mno-fix-r10000 is the default otherwise.
13958
13959       -mfix-vr4120
13960       -mno-fix-vr4120
13961           Work around certain VR4120 errata:
13962
13963           -   "dmultu" does not always produce the correct result.
13964
13965           -   "div" and "ddiv" do not always produce the correct result if
13966               one of the operands is negative.
13967
13968           The workarounds for the division errata rely on special functions
13969           in libgcc.a.  At present, these functions are only provided by the
13970           "mips64vr*-elf" configurations.
13971
13972           Other VR4120 errata require a NOP to be inserted between certain
13973           pairs of instructions.  These errata are handled by the assembler,
13974           not by GCC itself.
13975
13976       -mfix-vr4130
13977           Work around the VR4130 "mflo"/"mfhi" errata.  The workarounds are
13978           implemented by the assembler rather than by GCC, although GCC
13979           avoids using "mflo" and "mfhi" if the VR4130 "macc", "macchi",
13980           "dmacc" and "dmacchi" instructions are available instead.
13981
13982       -mfix-sb1
13983       -mno-fix-sb1
13984           Work around certain SB-1 CPU core errata.  (This flag currently
13985           works around the SB-1 revision 2 "F1" and "F2" floating-point
13986           errata.)
13987
13988       -mr10k-cache-barrier=setting
13989           Specify whether GCC should insert cache barriers to avoid the side-
13990           effects of speculation on R10K processors.
13991
13992           In common with many processors, the R10K tries to predict the
13993           outcome of a conditional branch and speculatively executes
13994           instructions from the "taken" branch.  It later aborts these
13995           instructions if the predicted outcome is wrong.  However, on the
13996           R10K, even aborted instructions can have side effects.
13997
13998           This problem only affects kernel stores and, depending on the
13999           system, kernel loads.  As an example, a speculatively-executed
14000           store may load the target memory into cache and mark the cache line
14001           as dirty, even if the store itself is later aborted.  If a DMA
14002           operation writes to the same area of memory before the "dirty" line
14003           is flushed, the cached data overwrites the DMA-ed data.  See the
14004           R10K processor manual for a full description, including other
14005           potential problems.
14006
14007           One workaround is to insert cache barrier instructions before every
14008           memory access that might be speculatively executed and that might
14009           have side effects even if aborted.  -mr10k-cache-barrier=setting
14010           controls GCC's implementation of this workaround.  It assumes that
14011           aborted accesses to any byte in the following regions does not have
14012           side effects:
14013
14014           1.  the memory occupied by the current function's stack frame;
14015
14016           2.  the memory occupied by an incoming stack argument;
14017
14018           3.  the memory occupied by an object with a link-time-constant
14019               address.
14020
14021           It is the kernel's responsibility to ensure that speculative
14022           accesses to these regions are indeed safe.
14023
14024           If the input program contains a function declaration such as:
14025
14026                   void foo (void);
14027
14028           then the implementation of "foo" must allow "j foo" and "jal foo"
14029           to be executed speculatively.  GCC honors this restriction for
14030           functions it compiles itself.  It expects non-GCC functions (such
14031           as hand-written assembly code) to do the same.
14032
14033           The option has three forms:
14034
14035           -mr10k-cache-barrier=load-store
14036               Insert a cache barrier before a load or store that might be
14037               speculatively executed and that might have side effects even if
14038               aborted.
14039
14040           -mr10k-cache-barrier=store
14041               Insert a cache barrier before a store that might be
14042               speculatively executed and that might have side effects even if
14043               aborted.
14044
14045           -mr10k-cache-barrier=none
14046               Disable the insertion of cache barriers.  This is the default
14047               setting.
14048
14049       -mflush-func=func
14050       -mno-flush-func
14051           Specifies the function to call to flush the I and D caches, or to
14052           not call any such function.  If called, the function must take the
14053           same arguments as the common "_flush_func()", that is, the address
14054           of the memory range for which the cache is being flushed, the size
14055           of the memory range, and the number 3 (to flush both caches).  The
14056           default depends on the target GCC was configured for, but commonly
14057           is either _flush_func or __cpu_flush.
14058
14059       mbranch-cost=num
14060           Set the cost of branches to roughly num "simple" instructions.
14061           This cost is only a heuristic and is not guaranteed to produce
14062           consistent results across releases.  A zero cost redundantly
14063           selects the default, which is based on the -mtune setting.
14064
14065       -mbranch-likely
14066       -mno-branch-likely
14067           Enable or disable use of Branch Likely instructions, regardless of
14068           the default for the selected architecture.  By default, Branch
14069           Likely instructions may be generated if they are supported by the
14070           selected architecture.  An exception is for the MIPS32 and MIPS64
14071           architectures and processors that implement those architectures;
14072           for those, Branch Likely instructions are not be generated by
14073           default because the MIPS32 and MIPS64 architectures specifically
14074           deprecate their use.
14075
14076       -mfp-exceptions
14077       -mno-fp-exceptions
14078           Specifies whether FP exceptions are enabled.  This affects how FP
14079           instructions are scheduled for some processors.  The default is
14080           that FP exceptions are enabled.
14081
14082           For instance, on the SB-1, if FP exceptions are disabled, and we
14083           are emitting 64-bit code, then we can use both FP pipes.
14084           Otherwise, we can only use one FP pipe.
14085
14086       -mvr4130-align
14087       -mno-vr4130-align
14088           The VR4130 pipeline is two-way superscalar, but can only issue two
14089           instructions together if the first one is 8-byte aligned.  When
14090           this option is enabled, GCC aligns pairs of instructions that it
14091           thinks should execute in parallel.
14092
14093           This option only has an effect when optimizing for the VR4130.  It
14094           normally makes code faster, but at the expense of making it bigger.
14095           It is enabled by default at optimization level -O3.
14096
14097       -msynci
14098       -mno-synci
14099           Enable (disable) generation of "synci" instructions on
14100           architectures that support it.  The "synci" instructions (if
14101           enabled) are generated when "__builtin___clear_cache()" is
14102           compiled.
14103
14104           This option defaults to "-mno-synci", but the default can be
14105           overridden by configuring with "--with-synci".
14106
14107           When compiling code for single processor systems, it is generally
14108           safe to use "synci".  However, on many multi-core (SMP) systems, it
14109           does not invalidate the instruction caches on all cores and may
14110           lead to undefined behavior.
14111
14112       -mrelax-pic-calls
14113       -mno-relax-pic-calls
14114           Try to turn PIC calls that are normally dispatched via register $25
14115           into direct calls.  This is only possible if the linker can resolve
14116           the destination at link-time and if the destination is within range
14117           for a direct call.
14118
14119           -mrelax-pic-calls is the default if GCC was configured to use an
14120           assembler and a linker that support the ".reloc" assembly directive
14121           and "-mexplicit-relocs" is in effect.  With "-mno-explicit-relocs",
14122           this optimization can be performed by the assembler and the linker
14123           alone without help from the compiler.
14124
14125       -mmcount-ra-address
14126       -mno-mcount-ra-address
14127           Emit (do not emit) code that allows "_mcount" to modify the calling
14128           function's return address.  When enabled, this option extends the
14129           usual "_mcount" interface with a new ra-address parameter, which
14130           has type "intptr_t *" and is passed in register $12.  "_mcount" can
14131           then modify the return address by doing both of the following:
14132
14133           ·   Returning the new address in register $31.
14134
14135           ·   Storing the new address in "*ra-address", if ra-address is
14136               nonnull.
14137
14138           The default is -mno-mcount-ra-address.
14139
14140   MMIX Options
14141       These options are defined for the MMIX:
14142
14143       -mlibfuncs
14144       -mno-libfuncs
14145           Specify that intrinsic library functions are being compiled,
14146           passing all values in registers, no matter the size.
14147
14148       -mepsilon
14149       -mno-epsilon
14150           Generate floating-point comparison instructions that compare with
14151           respect to the "rE" epsilon register.
14152
14153       -mabi=mmixware
14154       -mabi=gnu
14155           Generate code that passes function parameters and return values
14156           that (in the called function) are seen as registers $0 and up, as
14157           opposed to the GNU ABI which uses global registers $231 and up.
14158
14159       -mzero-extend
14160       -mno-zero-extend
14161           When reading data from memory in sizes shorter than 64 bits, use
14162           (do not use) zero-extending load instructions by default, rather
14163           than sign-extending ones.
14164
14165       -mknuthdiv
14166       -mno-knuthdiv
14167           Make the result of a division yielding a remainder have the same
14168           sign as the divisor.  With the default, -mno-knuthdiv, the sign of
14169           the remainder follows the sign of the dividend.  Both methods are
14170           arithmetically valid, the latter being almost exclusively used.
14171
14172       -mtoplevel-symbols
14173       -mno-toplevel-symbols
14174           Prepend (do not prepend) a : to all global symbols, so the assembly
14175           code can be used with the "PREFIX" assembly directive.
14176
14177       -melf
14178           Generate an executable in the ELF format, rather than the default
14179           mmo format used by the mmix simulator.
14180
14181       -mbranch-predict
14182       -mno-branch-predict
14183           Use (do not use) the probable-branch instructions, when static
14184           branch prediction indicates a probable branch.
14185
14186       -mbase-addresses
14187       -mno-base-addresses
14188           Generate (do not generate) code that uses base addresses.  Using a
14189           base address automatically generates a request (handled by the
14190           assembler and the linker) for a constant to be set up in a global
14191           register.  The register is used for one or more base address
14192           requests within the range 0 to 255 from the value held in the
14193           register.  The generally leads to short and fast code, but the
14194           number of different data items that can be addressed is limited.
14195           This means that a program that uses lots of static data may require
14196           -mno-base-addresses.
14197
14198       -msingle-exit
14199       -mno-single-exit
14200           Force (do not force) generated code to have a single exit point in
14201           each function.
14202
14203   MN10300 Options
14204       These -m options are defined for Matsushita MN10300 architectures:
14205
14206       -mmult-bug
14207           Generate code to avoid bugs in the multiply instructions for the
14208           MN10300 processors.  This is the default.
14209
14210       -mno-mult-bug
14211           Do not generate code to avoid bugs in the multiply instructions for
14212           the MN10300 processors.
14213
14214       -mam33
14215           Generate code using features specific to the AM33 processor.
14216
14217       -mno-am33
14218           Do not generate code using features specific to the AM33 processor.
14219           This is the default.
14220
14221       -mam33-2
14222           Generate code using features specific to the AM33/2.0 processor.
14223
14224       -mam34
14225           Generate code using features specific to the AM34 processor.
14226
14227       -mtune=cpu-type
14228           Use the timing characteristics of the indicated CPU type when
14229           scheduling instructions.  This does not change the targeted
14230           processor type.  The CPU type must be one of mn10300, am33, am33-2
14231           or am34.
14232
14233       -mreturn-pointer-on-d0
14234           When generating a function that returns a pointer, return the
14235           pointer in both "a0" and "d0".  Otherwise, the pointer is returned
14236           only in "a0", and attempts to call such functions without a
14237           prototype result in errors.  Note that this option is on by
14238           default; use -mno-return-pointer-on-d0 to disable it.
14239
14240       -mno-crt0
14241           Do not link in the C run-time initialization object file.
14242
14243       -mrelax
14244           Indicate to the linker that it should perform a relaxation
14245           optimization pass to shorten branches, calls and absolute memory
14246           addresses.  This option only has an effect when used on the command
14247           line for the final link step.
14248
14249           This option makes symbolic debugging impossible.
14250
14251       -mliw
14252           Allow the compiler to generate Long Instruction Word instructions
14253           if the target is the AM33 or later.  This is the default.  This
14254           option defines the preprocessor macro __LIW__.
14255
14256       -mnoliw
14257           Do not allow the compiler to generate Long Instruction Word
14258           instructions.  This option defines the preprocessor macro
14259           __NO_LIW__.
14260
14261       -msetlb
14262           Allow the compiler to generate the SETLB and Lcc instructions if
14263           the target is the AM33 or later.  This is the default.  This option
14264           defines the preprocessor macro __SETLB__.
14265
14266       -mnosetlb
14267           Do not allow the compiler to generate SETLB or Lcc instructions.
14268           This option defines the preprocessor macro __NO_SETLB__.
14269
14270   Moxie Options
14271       -meb
14272           Generate big-endian code.  This is the default for moxie-*-*
14273           configurations.
14274
14275       -mel
14276           Generate little-endian code.
14277
14278       -mno-crt0
14279           Do not link in the C run-time initialization object file.
14280
14281   PDP-11 Options
14282       These options are defined for the PDP-11:
14283
14284       -mfpu
14285           Use hardware FPP floating point.  This is the default.  (FIS
14286           floating point on the PDP-11/40 is not supported.)
14287
14288       -msoft-float
14289           Do not use hardware floating point.
14290
14291       -mac0
14292           Return floating-point results in ac0 (fr0 in Unix assembler
14293           syntax).
14294
14295       -mno-ac0
14296           Return floating-point results in memory.  This is the default.
14297
14298       -m40
14299           Generate code for a PDP-11/40.
14300
14301       -m45
14302           Generate code for a PDP-11/45.  This is the default.
14303
14304       -m10
14305           Generate code for a PDP-11/10.
14306
14307       -mbcopy-builtin
14308           Use inline "movmemhi" patterns for copying memory.  This is the
14309           default.
14310
14311       -mbcopy
14312           Do not use inline "movmemhi" patterns for copying memory.
14313
14314       -mint16
14315       -mno-int32
14316           Use 16-bit "int".  This is the default.
14317
14318       -mint32
14319       -mno-int16
14320           Use 32-bit "int".
14321
14322       -mfloat64
14323       -mno-float32
14324           Use 64-bit "float".  This is the default.
14325
14326       -mfloat32
14327       -mno-float64
14328           Use 32-bit "float".
14329
14330       -mabshi
14331           Use "abshi2" pattern.  This is the default.
14332
14333       -mno-abshi
14334           Do not use "abshi2" pattern.
14335
14336       -mbranch-expensive
14337           Pretend that branches are expensive.  This is for experimenting
14338           with code generation only.
14339
14340       -mbranch-cheap
14341           Do not pretend that branches are expensive.  This is the default.
14342
14343       -munix-asm
14344           Use Unix assembler syntax.  This is the default when configured for
14345           pdp11-*-bsd.
14346
14347       -mdec-asm
14348           Use DEC assembler syntax.  This is the default when configured for
14349           any PDP-11 target other than pdp11-*-bsd.
14350
14351   picoChip Options
14352       These -m options are defined for picoChip implementations:
14353
14354       -mae=ae_type
14355           Set the instruction set, register set, and instruction scheduling
14356           parameters for array element type ae_type.  Supported values for
14357           ae_type are ANY, MUL, and MAC.
14358
14359           -mae=ANY selects a completely generic AE type.  Code generated with
14360           this option runs on any of the other AE types.  The code is not as
14361           efficient as it would be if compiled for a specific AE type, and
14362           some types of operation (e.g., multiplication) do not work properly
14363           on all types of AE.
14364
14365           -mae=MUL selects a MUL AE type.  This is the most useful AE type
14366           for compiled code, and is the default.
14367
14368           -mae=MAC selects a DSP-style MAC AE.  Code compiled with this
14369           option may suffer from poor performance of byte (char)
14370           manipulation, since the DSP AE does not provide hardware support
14371           for byte load/stores.
14372
14373       -msymbol-as-address
14374           Enable the compiler to directly use a symbol name as an address in
14375           a load/store instruction, without first loading it into a register.
14376           Typically, the use of this option generates larger programs, which
14377           run faster than when the option isn't used.  However, the results
14378           vary from program to program, so it is left as a user option,
14379           rather than being permanently enabled.
14380
14381       -mno-inefficient-warnings
14382           Disables warnings about the generation of inefficient code.  These
14383           warnings can be generated, for example, when compiling code that
14384           performs byte-level memory operations on the MAC AE type.  The MAC
14385           AE has no hardware support for byte-level memory operations, so all
14386           byte load/stores must be synthesized from word load/store
14387           operations.  This is inefficient and a warning is generated to
14388           indicate that you should rewrite the code to avoid byte operations,
14389           or to target an AE type that has the necessary hardware support.
14390           This option disables these warnings.
14391
14392   PowerPC Options
14393       These are listed under
14394
14395   RL78 Options
14396       -msim
14397           Links in additional target libraries to support operation within a
14398           simulator.
14399
14400       -mmul=none
14401       -mmul=g13
14402       -mmul=rl78
14403           Specifies the type of hardware multiplication support to be used.
14404           The default is "none", which uses software multiplication
14405           functions.  The "g13" option is for the hardware multiply/divide
14406           peripheral only on the RL78/G13 targets.  The "rl78" option is for
14407           the standard hardware multiplication defined in the RL78 software
14408           manual.
14409
14410   IBM RS/6000 and PowerPC Options
14411       These -m options are defined for the IBM RS/6000 and PowerPC:
14412
14413       -mpowerpc-gpopt
14414       -mno-powerpc-gpopt
14415       -mpowerpc-gfxopt
14416       -mno-powerpc-gfxopt
14417       -mpowerpc64
14418       -mno-powerpc64
14419       -mmfcrf
14420       -mno-mfcrf
14421       -mpopcntb
14422       -mno-popcntb
14423       -mpopcntd
14424       -mno-popcntd
14425       -mfprnd
14426       -mno-fprnd
14427       -mcmpb
14428       -mno-cmpb
14429       -mmfpgpr
14430       -mno-mfpgpr
14431       -mhard-dfp
14432       -mno-hard-dfp
14433           You use these options to specify which instructions are available
14434           on the processor you are using.  The default value of these options
14435           is determined when configuring GCC.  Specifying the -mcpu=cpu_type
14436           overrides the specification of these options.  We recommend you use
14437           the -mcpu=cpu_type option rather than the options listed above.
14438
14439           Specifying -mpowerpc-gpopt allows GCC to use the optional PowerPC
14440           architecture instructions in the General Purpose group, including
14441           floating-point square root.  Specifying -mpowerpc-gfxopt allows GCC
14442           to use the optional PowerPC architecture instructions in the
14443           Graphics group, including floating-point select.
14444
14445           The -mmfcrf option allows GCC to generate the move from condition
14446           register field instruction implemented on the POWER4 processor and
14447           other processors that support the PowerPC V2.01 architecture.  The
14448           -mpopcntb option allows GCC to generate the popcount and double-
14449           precision FP reciprocal estimate instruction implemented on the
14450           POWER5 processor and other processors that support the PowerPC
14451           V2.02 architecture.  The -mpopcntd option allows GCC to generate
14452           the popcount instruction implemented on the POWER7 processor and
14453           other processors that support the PowerPC V2.06 architecture.  The
14454           -mfprnd option allows GCC to generate the FP round to integer
14455           instructions implemented on the POWER5+ processor and other
14456           processors that support the PowerPC V2.03 architecture.  The -mcmpb
14457           option allows GCC to generate the compare bytes instruction
14458           implemented on the POWER6 processor and other processors that
14459           support the PowerPC V2.05 architecture.  The -mmfpgpr option allows
14460           GCC to generate the FP move to/from general-purpose register
14461           instructions implemented on the POWER6X processor and other
14462           processors that support the extended PowerPC V2.05 architecture.
14463           The -mhard-dfp option allows GCC to generate the decimal floating-
14464           point instructions implemented on some POWER processors.
14465
14466           The -mpowerpc64 option allows GCC to generate the additional 64-bit
14467           instructions that are found in the full PowerPC64 architecture and
14468           to treat GPRs as 64-bit, doubleword quantities.  GCC defaults to
14469           -mno-powerpc64.
14470
14471       -mcpu=cpu_type
14472           Set architecture type, register usage, and instruction scheduling
14473           parameters for machine type cpu_type.  Supported values for
14474           cpu_type are 401, 403, 405, 405fp, 440, 440fp, 464, 464fp, 476,
14475           476fp, 505, 601, 602, 603, 603e, 604, 604e, 620, 630, 740, 7400,
14476           7450, 750, 801, 821, 823, 860, 970, 8540, a2, e300c2, e300c3,
14477           e500mc, e500mc64, e5500, e6500, ec603e, G3, G4, G5, titan, power3,
14478           power4, power5, power5+, power6, power6x, power7, power8, powerpc,
14479           powerpc64, powerpc64le, and rs64.
14480
14481           -mcpu=powerpc, -mcpu=powerpc64, and -mcpu=powerpc64le specify pure
14482           32-bit PowerPC (either endian), 64-bit big endian PowerPC and
14483           64-bit little endian PowerPC architecture machine types, with an
14484           appropriate, generic processor model assumed for scheduling
14485           purposes.
14486
14487           The other options specify a specific processor.  Code generated
14488           under those options runs best on that processor, and may not run at
14489           all on others.
14490
14491           The -mcpu options automatically enable or disable the following
14492           options:
14493
14494           -maltivec  -mfprnd  -mhard-float  -mmfcrf  -mmultiple -mpopcntb
14495           -mpopcntd  -mpowerpc64 -mpowerpc-gpopt  -mpowerpc-gfxopt
14496           -msingle-float -mdouble-float -msimple-fpu -mstring  -mmulhw
14497           -mdlmzb  -mmfpgpr -mvsx -mcrypto -mdirect-move -mpower8-fusion
14498           -mpower8-vector -mquad-memory -mquad-memory-atomic
14499
14500           The particular options set for any particular CPU varies between
14501           compiler versions, depending on what setting seems to produce
14502           optimal code for that CPU; it doesn't necessarily reflect the
14503           actual hardware's capabilities.  If you wish to set an individual
14504           option to a particular value, you may specify it after the -mcpu
14505           option, like -mcpu=970 -mno-altivec.
14506
14507           On AIX, the -maltivec and -mpowerpc64 options are not enabled or
14508           disabled by the -mcpu option at present because AIX does not have
14509           full support for these options.  You may still enable or disable
14510           them individually if you're sure it'll work in your environment.
14511
14512       -mtune=cpu_type
14513           Set the instruction scheduling parameters for machine type
14514           cpu_type, but do not set the architecture type or register usage,
14515           as -mcpu=cpu_type does.  The same values for cpu_type are used for
14516           -mtune as for -mcpu.  If both are specified, the code generated
14517           uses the architecture and registers set by -mcpu, but the
14518           scheduling parameters set by -mtune.
14519
14520       -mcmodel=small
14521           Generate PowerPC64 code for the small model: The TOC is limited to
14522           64k.
14523
14524       -mcmodel=medium
14525           Generate PowerPC64 code for the medium model: The TOC and other
14526           static data may be up to a total of 4G in size.
14527
14528       -mcmodel=large
14529           Generate PowerPC64 code for the large model: The TOC may be up to
14530           4G in size.  Other data and code is only limited by the 64-bit
14531           address space.
14532
14533       -maltivec
14534       -mno-altivec
14535           Generate code that uses (does not use) AltiVec instructions, and
14536           also enable the use of built-in functions that allow more direct
14537           access to the AltiVec instruction set.  You may also need to set
14538           -mabi=altivec to adjust the current ABI with AltiVec ABI
14539           enhancements.
14540
14541           When -maltivec is used, rather than -maltivec=le or -maltivec=be,
14542           the element order for Altivec intrinsics such as "vec_splat",
14543           "vec_extract", and "vec_insert" will match array element order
14544           corresponding to the endianness of the target.  That is, element
14545           zero identifies the leftmost element in a vector register when
14546           targeting a big-endian platform, and identifies the rightmost
14547           element in a vector register when targeting a little-endian
14548           platform.
14549
14550       -maltivec=be
14551           Generate Altivec instructions using big-endian element order,
14552           regardless of whether the target is big- or little-endian.  This is
14553           the default when targeting a big-endian platform.
14554
14555           The element order is used to interpret element numbers in Altivec
14556           intrinsics such as "vec_splat", "vec_extract", and "vec_insert".
14557           By default, these will match array element order corresponding to
14558           the endianness for the target.
14559
14560       -maltivec=le
14561           Generate Altivec instructions using little-endian element order,
14562           regardless of whether the target is big- or little-endian.  This is
14563           the default when targeting a little-endian platform.  This option
14564           is currently ignored when targeting a big-endian platform.
14565
14566           The element order is used to interpret element numbers in Altivec
14567           intrinsics such as "vec_splat", "vec_extract", and "vec_insert".
14568           By default, these will match array element order corresponding to
14569           the endianness for the target.
14570
14571       -mvrsave
14572       -mno-vrsave
14573           Generate VRSAVE instructions when generating AltiVec code.
14574
14575       -mgen-cell-microcode
14576           Generate Cell microcode instructions.
14577
14578       -mwarn-cell-microcode
14579           Warn when a Cell microcode instruction is emitted.  An example of a
14580           Cell microcode instruction is a variable shift.
14581
14582       -msecure-plt
14583           Generate code that allows ld and ld.so to build executables and
14584           shared libraries with non-executable ".plt" and ".got" sections.
14585           This is a PowerPC 32-bit SYSV ABI option.
14586
14587       -mbss-plt
14588           Generate code that uses a BSS ".plt" section that ld.so fills in,
14589           and requires ".plt" and ".got" sections that are both writable and
14590           executable.  This is a PowerPC 32-bit SYSV ABI option.
14591
14592       -misel
14593       -mno-isel
14594           This switch enables or disables the generation of ISEL
14595           instructions.
14596
14597       -misel=yes/no
14598           This switch has been deprecated.  Use -misel and -mno-isel instead.
14599
14600       -mspe
14601       -mno-spe
14602           This switch enables or disables the generation of SPE simd
14603           instructions.
14604
14605       -mpaired
14606       -mno-paired
14607           This switch enables or disables the generation of PAIRED simd
14608           instructions.
14609
14610       -mspe=yes/no
14611           This option has been deprecated.  Use -mspe and -mno-spe instead.
14612
14613       -mvsx
14614       -mno-vsx
14615           Generate code that uses (does not use) vector/scalar (VSX)
14616           instructions, and also enable the use of built-in functions that
14617           allow more direct access to the VSX instruction set.
14618
14619       -mcrypto
14620       -mno-crypto
14621           Enable the use (disable) of the built-in functions that allow
14622           direct access to the cryptographic instructions that were added in
14623           version 2.07 of the PowerPC ISA.
14624
14625       -mdirect-move
14626       -mno-direct-move
14627           Generate code that uses (does not use) the instructions to move
14628           data between the general purpose registers and the vector/scalar
14629           (VSX) registers that were added in version 2.07 of the PowerPC ISA.
14630
14631       -mpower8-fusion
14632       -mno-power8-fusion
14633           Generate code that keeps (does not keeps) some integer operations
14634           adjacent so that the instructions can be fused together on power8
14635           and later processors.
14636
14637       -mpower8-vector
14638       -mno-power8-vector
14639           Generate code that uses (does not use) the vector and scalar
14640           instructions that were added in version 2.07 of the PowerPC ISA.
14641           Also enable the use of built-in functions that allow more direct
14642           access to the vector instructions.
14643
14644       -mquad-memory
14645       -mno-quad-memory
14646           Generate code that uses (does not use) the non-atomic quad word
14647           memory instructions.  The -mquad-memory option requires use of
14648           64-bit mode.
14649
14650       -mquad-memory-atomic
14651       -mno-quad-memory-atomic
14652           Generate code that uses (does not use) the atomic quad word memory
14653           instructions.  The -mquad-memory-atomic option requires use of
14654           64-bit mode.
14655
14656       -mfloat-gprs=yes/single/double/no
14657       -mfloat-gprs
14658           This switch enables or disables the generation of floating-point
14659           operations on the general-purpose registers for architectures that
14660           support it.
14661
14662           The argument yes or single enables the use of single-precision
14663           floating-point operations.
14664
14665           The argument double enables the use of single and double-precision
14666           floating-point operations.
14667
14668           The argument no disables floating-point operations on the general-
14669           purpose registers.
14670
14671           This option is currently only available on the MPC854x.
14672
14673       -m32
14674       -m64
14675           Generate code for 32-bit or 64-bit environments of Darwin and SVR4
14676           targets (including GNU/Linux).  The 32-bit environment sets int,
14677           long and pointer to 32 bits and generates code that runs on any
14678           PowerPC variant.  The 64-bit environment sets int to 32 bits and
14679           long and pointer to 64 bits, and generates code for PowerPC64, as
14680           for -mpowerpc64.
14681
14682       -mfull-toc
14683       -mno-fp-in-toc
14684       -mno-sum-in-toc
14685       -mminimal-toc
14686           Modify generation of the TOC (Table Of Contents), which is created
14687           for every executable file.  The -mfull-toc option is selected by
14688           default.  In that case, GCC allocates at least one TOC entry for
14689           each unique non-automatic variable reference in your program.  GCC
14690           also places floating-point constants in the TOC.  However, only
14691           16,384 entries are available in the TOC.
14692
14693           If you receive a linker error message that saying you have
14694           overflowed the available TOC space, you can reduce the amount of
14695           TOC space used with the -mno-fp-in-toc and -mno-sum-in-toc options.
14696           -mno-fp-in-toc prevents GCC from putting floating-point constants
14697           in the TOC and -mno-sum-in-toc forces GCC to generate code to
14698           calculate the sum of an address and a constant at run time instead
14699           of putting that sum into the TOC.  You may specify one or both of
14700           these options.  Each causes GCC to produce very slightly slower and
14701           larger code at the expense of conserving TOC space.
14702
14703           If you still run out of space in the TOC even when you specify both
14704           of these options, specify -mminimal-toc instead.  This option
14705           causes GCC to make only one TOC entry for every file.  When you
14706           specify this option, GCC produces code that is slower and larger
14707           but which uses extremely little TOC space.  You may wish to use
14708           this option only on files that contain less frequently-executed
14709           code.
14710
14711       -maix64
14712       -maix32
14713           Enable 64-bit AIX ABI and calling convention: 64-bit pointers,
14714           64-bit "long" type, and the infrastructure needed to support them.
14715           Specifying -maix64 implies -mpowerpc64, while -maix32 disables the
14716           64-bit ABI and implies -mno-powerpc64.  GCC defaults to -maix32.
14717
14718       -mxl-compat
14719       -mno-xl-compat
14720           Produce code that conforms more closely to IBM XL compiler
14721           semantics when using AIX-compatible ABI.  Pass floating-point
14722           arguments to prototyped functions beyond the register save area
14723           (RSA) on the stack in addition to argument FPRs.  Do not assume
14724           that most significant double in 128-bit long double value is
14725           properly rounded when comparing values and converting to double.
14726           Use XL symbol names for long double support routines.
14727
14728           The AIX calling convention was extended but not initially
14729           documented to handle an obscure K&R C case of calling a function
14730           that takes the address of its arguments with fewer arguments than
14731           declared.  IBM XL compilers access floating-point arguments that do
14732           not fit in the RSA from the stack when a subroutine is compiled
14733           without optimization.  Because always storing floating-point
14734           arguments on the stack is inefficient and rarely needed, this
14735           option is not enabled by default and only is necessary when calling
14736           subroutines compiled by IBM XL compilers without optimization.
14737
14738       -mpe
14739           Support IBM RS/6000 SP Parallel Environment (PE).  Link an
14740           application written to use message passing with special startup
14741           code to enable the application to run.  The system must have PE
14742           installed in the standard location (/usr/lpp/ppe.poe/), or the
14743           specs file must be overridden with the -specs= option to specify
14744           the appropriate directory location.  The Parallel Environment does
14745           not support threads, so the -mpe option and the -pthread option are
14746           incompatible.
14747
14748       -malign-natural
14749       -malign-power
14750           On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
14751           -malign-natural overrides the ABI-defined alignment of larger
14752           types, such as floating-point doubles, on their natural size-based
14753           boundary.  The option -malign-power instructs GCC to follow the
14754           ABI-specified alignment rules.  GCC defaults to the standard
14755           alignment defined in the ABI.
14756
14757           On 64-bit Darwin, natural alignment is the default, and
14758           -malign-power is not supported.
14759
14760       -msoft-float
14761       -mhard-float
14762           Generate code that does not use (uses) the floating-point register
14763           set.  Software floating-point emulation is provided if you use the
14764           -msoft-float option, and pass the option to GCC when linking.
14765
14766       -msingle-float
14767       -mdouble-float
14768           Generate code for single- or double-precision floating-point
14769           operations.  -mdouble-float implies -msingle-float.
14770
14771       -msimple-fpu
14772           Do not generate "sqrt" and "div" instructions for hardware
14773           floating-point unit.
14774
14775       -mfpu=name
14776           Specify type of floating-point unit.  Valid values for name are
14777           sp_lite (equivalent to -msingle-float -msimple-fpu), dp_lite
14778           (equivalent to -mdouble-float -msimple-fpu), sp_full (equivalent to
14779           -msingle-float), and dp_full (equivalent to -mdouble-float).
14780
14781       -mxilinx-fpu
14782           Perform optimizations for the floating-point unit on Xilinx PPC
14783           405/440.
14784
14785       -mmultiple
14786       -mno-multiple
14787           Generate code that uses (does not use) the load multiple word
14788           instructions and the store multiple word instructions.  These
14789           instructions are generated by default on POWER systems, and not
14790           generated on PowerPC systems.  Do not use -mmultiple on little-
14791           endian PowerPC systems, since those instructions do not work when
14792           the processor is in little-endian mode.  The exceptions are PPC740
14793           and PPC750 which permit these instructions in little-endian mode.
14794
14795       -mstring
14796       -mno-string
14797           Generate code that uses (does not use) the load string instructions
14798           and the store string word instructions to save multiple registers
14799           and do small block moves.  These instructions are generated by
14800           default on POWER systems, and not generated on PowerPC systems.  Do
14801           not use -mstring on little-endian PowerPC systems, since those
14802           instructions do not work when the processor is in little-endian
14803           mode.  The exceptions are PPC740 and PPC750 which permit these
14804           instructions in little-endian mode.
14805
14806       -mupdate
14807       -mno-update
14808           Generate code that uses (does not use) the load or store
14809           instructions that update the base register to the address of the
14810           calculated memory location.  These instructions are generated by
14811           default.  If you use -mno-update, there is a small window between
14812           the time that the stack pointer is updated and the address of the
14813           previous frame is stored, which means code that walks the stack
14814           frame across interrupts or signals may get corrupted data.
14815
14816       -mavoid-indexed-addresses
14817       -mno-avoid-indexed-addresses
14818           Generate code that tries to avoid (not avoid) the use of indexed
14819           load or store instructions. These instructions can incur a
14820           performance penalty on Power6 processors in certain situations,
14821           such as when stepping through large arrays that cross a 16M
14822           boundary.  This option is enabled by default when targeting Power6
14823           and disabled otherwise.
14824
14825       -mfused-madd
14826       -mno-fused-madd
14827           Generate code that uses (does not use) the floating-point multiply
14828           and accumulate instructions.  These instructions are generated by
14829           default if hardware floating point is used.  The machine-dependent
14830           -mfused-madd option is now mapped to the machine-independent
14831           -ffp-contract=fast option, and -mno-fused-madd is mapped to
14832           -ffp-contract=off.
14833
14834       -mmulhw
14835       -mno-mulhw
14836           Generate code that uses (does not use) the half-word multiply and
14837           multiply-accumulate instructions on the IBM 405, 440, 464 and 476
14838           processors.  These instructions are generated by default when
14839           targeting those processors.
14840
14841       -mdlmzb
14842       -mno-dlmzb
14843           Generate code that uses (does not use) the string-search dlmzb
14844           instruction on the IBM 405, 440, 464 and 476 processors.  This
14845           instruction is generated by default when targeting those
14846           processors.
14847
14848       -mno-bit-align
14849       -mbit-align
14850           On System V.4 and embedded PowerPC systems do not (do) force
14851           structures and unions that contain bit-fields to be aligned to the
14852           base type of the bit-field.
14853
14854           For example, by default a structure containing nothing but 8
14855           "unsigned" bit-fields of length 1 is aligned to a 4-byte boundary
14856           and has a size of 4 bytes.  By using -mno-bit-align, the structure
14857           is aligned to a 1-byte boundary and is 1 byte in size.
14858
14859       -mno-strict-align
14860       -mstrict-align
14861           On System V.4 and embedded PowerPC systems do not (do) assume that
14862           unaligned memory references are handled by the system.
14863
14864       -mrelocatable
14865       -mno-relocatable
14866           Generate code that allows (does not allow) a static executable to
14867           be relocated to a different address at run time.  A simple embedded
14868           PowerPC system loader should relocate the entire contents of
14869           ".got2" and 4-byte locations listed in the ".fixup" section, a
14870           table of 32-bit addresses generated by this option.  For this to
14871           work, all objects linked together must be compiled with
14872           -mrelocatable or -mrelocatable-lib.  -mrelocatable code aligns the
14873           stack to an 8-byte boundary.
14874
14875       -mrelocatable-lib
14876       -mno-relocatable-lib
14877           Like -mrelocatable, -mrelocatable-lib generates a ".fixup" section
14878           to allow static executables to be relocated at run time, but
14879           -mrelocatable-lib does not use the smaller stack alignment of
14880           -mrelocatable.  Objects compiled with -mrelocatable-lib may be
14881           linked with objects compiled with any combination of the
14882           -mrelocatable options.
14883
14884       -mno-toc
14885       -mtoc
14886           On System V.4 and embedded PowerPC systems do not (do) assume that
14887           register 2 contains a pointer to a global area pointing to the
14888           addresses used in the program.
14889
14890       -mlittle
14891       -mlittle-endian
14892           On System V.4 and embedded PowerPC systems compile code for the
14893           processor in little-endian mode.  The -mlittle-endian option is the
14894           same as -mlittle.
14895
14896       -mbig
14897       -mbig-endian
14898           On System V.4 and embedded PowerPC systems compile code for the
14899           processor in big-endian mode.  The -mbig-endian option is the same
14900           as -mbig.
14901
14902       -mdynamic-no-pic
14903           On Darwin and Mac OS X systems, compile code so that it is not
14904           relocatable, but that its external references are relocatable.  The
14905           resulting code is suitable for applications, but not shared
14906           libraries.
14907
14908       -msingle-pic-base
14909           Treat the register used for PIC addressing as read-only, rather
14910           than loading it in the prologue for each function.  The runtime
14911           system is responsible for initializing this register with an
14912           appropriate value before execution begins.
14913
14914       -mprioritize-restricted-insns=priority
14915           This option controls the priority that is assigned to dispatch-slot
14916           restricted instructions during the second scheduling pass.  The
14917           argument priority takes the value 0, 1, or 2 to assign no, highest,
14918           or second-highest (respectively) priority to dispatch-slot
14919           restricted instructions.
14920
14921       -msched-costly-dep=dependence_type
14922           This option controls which dependences are considered costly by the
14923           target during instruction scheduling.  The argument dependence_type
14924           takes one of the following values:
14925
14926           no  No dependence is costly.
14927
14928           all All dependences are costly.
14929
14930           true_store_to_load
14931               A true dependence from store to load is costly.
14932
14933           store_to_load
14934               Any dependence from store to load is costly.
14935
14936           number
14937               Any dependence for which the latency is greater than or equal
14938               to number is costly.
14939
14940       -minsert-sched-nops=scheme
14941           This option controls which NOP insertion scheme is used during the
14942           second scheduling pass.  The argument scheme takes one of the
14943           following values:
14944
14945           no  Don't insert NOPs.
14946
14947           pad Pad with NOPs any dispatch group that has vacant issue slots,
14948               according to the scheduler's grouping.
14949
14950           regroup_exact
14951               Insert NOPs to force costly dependent insns into separate
14952               groups.  Insert exactly as many NOPs as needed to force an insn
14953               to a new group, according to the estimated processor grouping.
14954
14955           number
14956               Insert NOPs to force costly dependent insns into separate
14957               groups.  Insert number NOPs to force an insn to a new group.
14958
14959       -mcall-sysv
14960           On System V.4 and embedded PowerPC systems compile code using
14961           calling conventions that adhere to the March 1995 draft of the
14962           System V Application Binary Interface, PowerPC processor
14963           supplement.  This is the default unless you configured GCC using
14964           powerpc-*-eabiaix.
14965
14966       -mcall-sysv-eabi
14967       -mcall-eabi
14968           Specify both -mcall-sysv and -meabi options.
14969
14970       -mcall-sysv-noeabi
14971           Specify both -mcall-sysv and -mno-eabi options.
14972
14973       -mcall-aixdesc
14974           On System V.4 and embedded PowerPC systems compile code for the AIX
14975           operating system.
14976
14977       -mcall-linux
14978           On System V.4 and embedded PowerPC systems compile code for the
14979           Linux-based GNU system.
14980
14981       -mcall-freebsd
14982           On System V.4 and embedded PowerPC systems compile code for the
14983           FreeBSD operating system.
14984
14985       -mcall-netbsd
14986           On System V.4 and embedded PowerPC systems compile code for the
14987           NetBSD operating system.
14988
14989       -mcall-openbsd
14990           On System V.4 and embedded PowerPC systems compile code for the
14991           OpenBSD operating system.
14992
14993       -maix-struct-return
14994           Return all structures in memory (as specified by the AIX ABI).
14995
14996       -msvr4-struct-return
14997           Return structures smaller than 8 bytes in registers (as specified
14998           by the SVR4 ABI).
14999
15000       -mabi=abi-type
15001           Extend the current ABI with a particular extension, or remove such
15002           extension.  Valid values are altivec, no-altivec, spe, no-spe,
15003           ibmlongdouble, ieeelongdouble, elfv1, elfv2.
15004
15005       -mabi=spe
15006           Extend the current ABI with SPE ABI extensions.  This does not
15007           change the default ABI, instead it adds the SPE ABI extensions to
15008           the current ABI.
15009
15010       -mabi=no-spe
15011           Disable Book-E SPE ABI extensions for the current ABI.
15012
15013       -mabi=ibmlongdouble
15014           Change the current ABI to use IBM extended-precision long double.
15015           This is a PowerPC 32-bit SYSV ABI option.
15016
15017       -mabi=ieeelongdouble
15018           Change the current ABI to use IEEE extended-precision long double.
15019           This is a PowerPC 32-bit Linux ABI option.
15020
15021       -mabi=elfv1
15022           Change the current ABI to use the ELFv1 ABI.  This is the default
15023           ABI for big-endian PowerPC 64-bit Linux.  Overriding the default
15024           ABI requires special system support and is likely to fail in
15025           spectacular ways.
15026
15027       -mabi=elfv2
15028           Change the current ABI to use the ELFv2 ABI.  This is the default
15029           ABI for little-endian PowerPC 64-bit Linux.  Overriding the default
15030           ABI requires special system support and is likely to fail in
15031           spectacular ways.
15032
15033       -mprototype
15034       -mno-prototype
15035           On System V.4 and embedded PowerPC systems assume that all calls to
15036           variable argument functions are properly prototyped.  Otherwise,
15037           the compiler must insert an instruction before every non-prototyped
15038           call to set or clear bit 6 of the condition code register (CR) to
15039           indicate whether floating-point values are passed in the floating-
15040           point registers in case the function takes variable arguments.
15041           With -mprototype, only calls to prototyped variable argument
15042           functions set or clear the bit.
15043
15044       -msim
15045           On embedded PowerPC systems, assume that the startup module is
15046           called sim-crt0.o and that the standard C libraries are libsim.a
15047           and libc.a.  This is the default for powerpc-*-eabisim
15048           configurations.
15049
15050       -mmvme
15051           On embedded PowerPC systems, assume that the startup module is
15052           called crt0.o and the standard C libraries are libmvme.a and
15053           libc.a.
15054
15055       -mads
15056           On embedded PowerPC systems, assume that the startup module is
15057           called crt0.o and the standard C libraries are libads.a and libc.a.
15058
15059       -myellowknife
15060           On embedded PowerPC systems, assume that the startup module is
15061           called crt0.o and the standard C libraries are libyk.a and libc.a.
15062
15063       -mvxworks
15064           On System V.4 and embedded PowerPC systems, specify that you are
15065           compiling for a VxWorks system.
15066
15067       -memb
15068           On embedded PowerPC systems, set the PPC_EMB bit in the ELF flags
15069           header to indicate that eabi extended relocations are used.
15070
15071       -meabi
15072       -mno-eabi
15073           On System V.4 and embedded PowerPC systems do (do not) adhere to
15074           the Embedded Applications Binary Interface (EABI), which is a set
15075           of modifications to the System V.4 specifications.  Selecting
15076           -meabi means that the stack is aligned to an 8-byte boundary, a
15077           function "__eabi" is called from "main" to set up the EABI
15078           environment, and the -msdata option can use both "r2" and "r13" to
15079           point to two separate small data areas.  Selecting -mno-eabi means
15080           that the stack is aligned to a 16-byte boundary, no EABI
15081           initialization function is called from "main", and the -msdata
15082           option only uses "r13" to point to a single small data area.  The
15083           -meabi option is on by default if you configured GCC using one of
15084           the powerpc*-*-eabi* options.
15085
15086       -msdata=eabi
15087           On System V.4 and embedded PowerPC systems, put small initialized
15088           "const" global and static data in the .sdata2 section, which is
15089           pointed to by register "r2".  Put small initialized non-"const"
15090           global and static data in the .sdata section, which is pointed to
15091           by register "r13".  Put small uninitialized global and static data
15092           in the .sbss section, which is adjacent to the .sdata section.  The
15093           -msdata=eabi option is incompatible with the -mrelocatable option.
15094           The -msdata=eabi option also sets the -memb option.
15095
15096       -msdata=sysv
15097           On System V.4 and embedded PowerPC systems, put small global and
15098           static data in the .sdata section, which is pointed to by register
15099           "r13".  Put small uninitialized global and static data in the .sbss
15100           section, which is adjacent to the .sdata section.  The -msdata=sysv
15101           option is incompatible with the -mrelocatable option.
15102
15103       -msdata=default
15104       -msdata
15105           On System V.4 and embedded PowerPC systems, if -meabi is used,
15106           compile code the same as -msdata=eabi, otherwise compile code the
15107           same as -msdata=sysv.
15108
15109       -msdata=data
15110           On System V.4 and embedded PowerPC systems, put small global data
15111           in the .sdata section.  Put small uninitialized global data in the
15112           .sbss section.  Do not use register "r13" to address small data
15113           however.  This is the default behavior unless other -msdata options
15114           are used.
15115
15116       -msdata=none
15117       -mno-sdata
15118           On embedded PowerPC systems, put all initialized global and static
15119           data in the .data section, and all uninitialized data in the .bss
15120           section.
15121
15122       -mblock-move-inline-limit=num
15123           Inline all block moves (such as calls to "memcpy" or structure
15124           copies) less than or equal to num bytes.  The minimum value for num
15125           is 32 bytes on 32-bit targets and 64 bytes on 64-bit targets.  The
15126           default value is target-specific.
15127
15128       -G num
15129           On embedded PowerPC systems, put global and static items less than
15130           or equal to num bytes into the small data or BSS sections instead
15131           of the normal data or BSS section.  By default, num is 8.  The -G
15132           num switch is also passed to the linker.  All modules should be
15133           compiled with the same -G num value.
15134
15135       -mregnames
15136       -mno-regnames
15137           On System V.4 and embedded PowerPC systems do (do not) emit
15138           register names in the assembly language output using symbolic
15139           forms.
15140
15141       -mlongcall
15142       -mno-longcall
15143           By default assume that all calls are far away so that a longer and
15144           more expensive calling sequence is required.  This is required for
15145           calls farther than 32 megabytes (33,554,432 bytes) from the current
15146           location.  A short call is generated if the compiler knows the call
15147           cannot be that far away.  This setting can be overridden by the
15148           "shortcall" function attribute, or by "#pragma longcall(0)".
15149
15150           Some linkers are capable of detecting out-of-range calls and
15151           generating glue code on the fly.  On these systems, long calls are
15152           unnecessary and generate slower code.  As of this writing, the AIX
15153           linker can do this, as can the GNU linker for PowerPC/64.  It is
15154           planned to add this feature to the GNU linker for 32-bit PowerPC
15155           systems as well.
15156
15157           On Darwin/PPC systems, "#pragma longcall" generates "jbsr callee,
15158           L42", plus a branch island (glue code).  The two target addresses
15159           represent the callee and the branch island.  The Darwin/PPC linker
15160           prefers the first address and generates a "bl callee" if the PPC
15161           "bl" instruction reaches the callee directly; otherwise, the linker
15162           generates "bl L42" to call the branch island.  The branch island is
15163           appended to the body of the calling function; it computes the full
15164           32-bit address of the callee and jumps to it.
15165
15166           On Mach-O (Darwin) systems, this option directs the compiler emit
15167           to the glue for every direct call, and the Darwin linker decides
15168           whether to use or discard it.
15169
15170           In the future, GCC may ignore all longcall specifications when the
15171           linker is known to generate glue.
15172
15173       -mtls-markers
15174       -mno-tls-markers
15175           Mark (do not mark) calls to "__tls_get_addr" with a relocation
15176           specifying the function argument.  The relocation allows the linker
15177           to reliably associate function call with argument setup
15178           instructions for TLS optimization, which in turn allows GCC to
15179           better schedule the sequence.
15180
15181       -pthread
15182           Adds support for multithreading with the pthreads library.  This
15183           option sets flags for both the preprocessor and linker.
15184
15185       -mrecip
15186       -mno-recip
15187           This option enables use of the reciprocal estimate and reciprocal
15188           square root estimate instructions with additional Newton-Raphson
15189           steps to increase precision instead of doing a divide or square
15190           root and divide for floating-point arguments.  You should use the
15191           -ffast-math option when using -mrecip (or at least
15192           -funsafe-math-optimizations, -finite-math-only, -freciprocal-math
15193           and -fno-trapping-math).  Note that while the throughput of the
15194           sequence is generally higher than the throughput of the non-
15195           reciprocal instruction, the precision of the sequence can be
15196           decreased by up to 2 ulp (i.e. the inverse of 1.0 equals
15197           0.99999994) for reciprocal square roots.
15198
15199       -mrecip=opt
15200           This option controls which reciprocal estimate instructions may be
15201           used.  opt is a comma-separated list of options, which may be
15202           preceded by a "!" to invert the option: "all": enable all estimate
15203           instructions, "default": enable the default instructions,
15204           equivalent to -mrecip, "none": disable all estimate instructions,
15205           equivalent to -mno-recip; "div": enable the reciprocal
15206           approximation instructions for both single and double precision;
15207           "divf": enable the single-precision reciprocal approximation
15208           instructions; "divd": enable the double-precision reciprocal
15209           approximation instructions; "rsqrt": enable the reciprocal square
15210           root approximation instructions for both single and double
15211           precision; "rsqrtf": enable the single-precision reciprocal square
15212           root approximation instructions; "rsqrtd": enable the double-
15213           precision reciprocal square root approximation instructions;
15214
15215           So, for example, -mrecip=all,!rsqrtd enables all of the reciprocal
15216           estimate instructions, except for the "FRSQRTE", "XSRSQRTEDP", and
15217           "XVRSQRTEDP" instructions which handle the double-precision
15218           reciprocal square root calculations.
15219
15220       -mrecip-precision
15221       -mno-recip-precision
15222           Assume (do not assume) that the reciprocal estimate instructions
15223           provide higher-precision estimates than is mandated by the PowerPC
15224           ABI.  Selecting -mcpu=power6, -mcpu=power7 or -mcpu=power8
15225           automatically selects -mrecip-precision.  The double-precision
15226           square root estimate instructions are not generated by default on
15227           low-precision machines, since they do not provide an estimate that
15228           converges after three steps.
15229
15230       -mveclibabi=type
15231           Specifies the ABI type to use for vectorizing intrinsics using an
15232           external library.  The only type supported at present is "mass",
15233           which specifies to use IBM's Mathematical Acceleration Subsystem
15234           (MASS) libraries for vectorizing intrinsics using external
15235           libraries.  GCC currently emits calls to "acosd2", "acosf4",
15236           "acoshd2", "acoshf4", "asind2", "asinf4", "asinhd2", "asinhf4",
15237           "atan2d2", "atan2f4", "atand2", "atanf4", "atanhd2", "atanhf4",
15238           "cbrtd2", "cbrtf4", "cosd2", "cosf4", "coshd2", "coshf4", "erfcd2",
15239           "erfcf4", "erfd2", "erff4", "exp2d2", "exp2f4", "expd2", "expf4",
15240           "expm1d2", "expm1f4", "hypotd2", "hypotf4", "lgammad2", "lgammaf4",
15241           "log10d2", "log10f4", "log1pd2", "log1pf4", "log2d2", "log2f4",
15242           "logd2", "logf4", "powd2", "powf4", "sind2", "sinf4", "sinhd2",
15243           "sinhf4", "sqrtd2", "sqrtf4", "tand2", "tanf4", "tanhd2", and
15244           "tanhf4" when generating code for power7.  Both -ftree-vectorize
15245           and -funsafe-math-optimizations must also be enabled.  The MASS
15246           libraries must be specified at link time.
15247
15248       -mfriz
15249       -mno-friz
15250           Generate (do not generate) the "friz" instruction when the
15251           -funsafe-math-optimizations option is used to optimize rounding of
15252           floating-point values to 64-bit integer and back to floating point.
15253           The "friz" instruction does not return the same value if the
15254           floating-point number is too large to fit in an integer.
15255
15256       -mpointers-to-nested-functions
15257       -mno-pointers-to-nested-functions
15258           Generate (do not generate) code to load up the static chain
15259           register (r11) when calling through a pointer on AIX and 64-bit
15260           Linux systems where a function pointer points to a 3-word
15261           descriptor giving the function address, TOC value to be loaded in
15262           register r2, and static chain value to be loaded in register r11.
15263           The -mpointers-to-nested-functions is on by default.  You cannot
15264           call through pointers to nested functions or pointers to functions
15265           compiled in other languages that use the static chain if you use
15266           the -mno-pointers-to-nested-functions.
15267
15268       -msave-toc-indirect
15269       -mno-save-toc-indirect
15270           Generate (do not generate) code to save the TOC value in the
15271           reserved stack location in the function prologue if the function
15272           calls through a pointer on AIX and 64-bit Linux systems.  If the
15273           TOC value is not saved in the prologue, it is saved just before the
15274           call through the pointer.  The -mno-save-toc-indirect option is the
15275           default.
15276
15277       -mcompat-align-parm
15278       -mno-compat-align-parm
15279           Generate (do not generate) code to pass structure parameters with a
15280           maximum alignment of 64 bits, for compatibility with older versions
15281           of GCC.
15282
15283           Older versions of GCC (prior to 4.9.0) incorrectly did not align a
15284           structure parameter on a 128-bit boundary when that structure
15285           contained a member requiring 128-bit alignment.  This is corrected
15286           in more recent versions of GCC.  This option may be used to
15287           generate code that is compatible with functions compiled with older
15288           versions of GCC.
15289
15290           In this version of the compiler, the -mcompat-align-parm is the
15291           default, except when using the Linux ELFv2 ABI.
15292
15293       -mstack-protector-guard=guard
15294       -mstack-protector-guard-reg=reg
15295       -mstack-protector-guard-offset=offset
15296           Generate stack protection code using canary at guard.  Supported
15297           locations are global for global canary or tls for per-thread canary
15298           in the TLS block (the default with GNU libc version 2.4 or later).
15299
15300           With the latter choice the options -mstack-protector-guard-reg=reg
15301           and -mstack-protector-guard-offset=offset furthermore specify which
15302           register to use as base register for reading the canary, and from
15303           what offset from that base register. The default for those is as
15304           specified in the relevant ABI.
15305
15306   RX Options
15307       These command-line options are defined for RX targets:
15308
15309       -m64bit-doubles
15310       -m32bit-doubles
15311           Make the "double" data type be 64 bits (-m64bit-doubles) or 32 bits
15312           (-m32bit-doubles) in size.  The default is -m32bit-doubles.  Note
15313           RX floating-point hardware only works on 32-bit values, which is
15314           why the default is -m32bit-doubles.
15315
15316       -fpu
15317       -nofpu
15318           Enables (-fpu) or disables (-nofpu) the use of RX floating-point
15319           hardware.  The default is enabled for the RX600 series and disabled
15320           for the RX200 series.
15321
15322           Floating-point instructions are only generated for 32-bit floating-
15323           point values, however, so the FPU hardware is not used for doubles
15324           if the -m64bit-doubles option is used.
15325
15326           Note If the -fpu option is enabled then -funsafe-math-optimizations
15327           is also enabled automatically.  This is because the RX FPU
15328           instructions are themselves unsafe.
15329
15330       -mcpu=name
15331           Selects the type of RX CPU to be targeted.  Currently three types
15332           are supported, the generic RX600 and RX200 series hardware and the
15333           specific RX610 CPU.  The default is RX600.
15334
15335           The only difference between RX600 and RX610 is that the RX610 does
15336           not support the "MVTIPL" instruction.
15337
15338           The RX200 series does not have a hardware floating-point unit and
15339           so -nofpu is enabled by default when this type is selected.
15340
15341       -mbig-endian-data
15342       -mlittle-endian-data
15343           Store data (but not code) in the big-endian format.  The default is
15344           -mlittle-endian-data, i.e. to store data in the little-endian
15345           format.
15346
15347       -msmall-data-limit=N
15348           Specifies the maximum size in bytes of global and static variables
15349           which can be placed into the small data area.  Using the small data
15350           area can lead to smaller and faster code, but the size of area is
15351           limited and it is up to the programmer to ensure that the area does
15352           not overflow.  Also when the small data area is used one of the
15353           RX's registers (usually "r13") is reserved for use pointing to this
15354           area, so it is no longer available for use by the compiler.  This
15355           could result in slower and/or larger code if variables are pushed
15356           onto the stack instead of being held in this register.
15357
15358           Note, common variables (variables that have not been initialized)
15359           and constants are not placed into the small data area as they are
15360           assigned to other sections in the output executable.
15361
15362           The default value is zero, which disables this feature.  Note, this
15363           feature is not enabled by default with higher optimization levels
15364           (-O2 etc) because of the potentially detrimental effects of
15365           reserving a register.  It is up to the programmer to experiment and
15366           discover whether this feature is of benefit to their program.  See
15367           the description of the -mpid option for a description of how the
15368           actual register to hold the small data area pointer is chosen.
15369
15370       -msim
15371       -mno-sim
15372           Use the simulator runtime.  The default is to use the libgloss
15373           board-specific runtime.
15374
15375       -mas100-syntax
15376       -mno-as100-syntax
15377           When generating assembler output use a syntax that is compatible
15378           with Renesas's AS100 assembler.  This syntax can also be handled by
15379           the GAS assembler, but it has some restrictions so it is not
15380           generated by default.
15381
15382       -mmax-constant-size=N
15383           Specifies the maximum size, in bytes, of a constant that can be
15384           used as an operand in a RX instruction.  Although the RX
15385           instruction set does allow constants of up to 4 bytes in length to
15386           be used in instructions, a longer value equates to a longer
15387           instruction.  Thus in some circumstances it can be beneficial to
15388           restrict the size of constants that are used in instructions.
15389           Constants that are too big are instead placed into a constant pool
15390           and referenced via register indirection.
15391
15392           The value N can be between 0 and 4.  A value of 0 (the default) or
15393           4 means that constants of any size are allowed.
15394
15395       -mrelax
15396           Enable linker relaxation.  Linker relaxation is a process whereby
15397           the linker attempts to reduce the size of a program by finding
15398           shorter versions of various instructions.  Disabled by default.
15399
15400       -mint-register=N
15401           Specify the number of registers to reserve for fast interrupt
15402           handler functions.  The value N can be between 0 and 4.  A value of
15403           1 means that register "r13" is reserved for the exclusive use of
15404           fast interrupt handlers.  A value of 2 reserves "r13" and "r12".  A
15405           value of 3 reserves "r13", "r12" and "r11", and a value of 4
15406           reserves "r13" through "r10".  A value of 0, the default, does not
15407           reserve any registers.
15408
15409       -msave-acc-in-interrupts
15410           Specifies that interrupt handler functions should preserve the
15411           accumulator register.  This is only necessary if normal code might
15412           use the accumulator register, for example because it performs
15413           64-bit multiplications.  The default is to ignore the accumulator
15414           as this makes the interrupt handlers faster.
15415
15416       -mpid
15417       -mno-pid
15418           Enables the generation of position independent data.  When enabled
15419           any access to constant data is done via an offset from a base
15420           address held in a register.  This allows the location of constant
15421           data to be determined at run time without requiring the executable
15422           to be relocated, which is a benefit to embedded applications with
15423           tight memory constraints.  Data that can be modified is not
15424           affected by this option.
15425
15426           Note, using this feature reserves a register, usually "r13", for
15427           the constant data base address.  This can result in slower and/or
15428           larger code, especially in complicated functions.
15429
15430           The actual register chosen to hold the constant data base address
15431           depends upon whether the -msmall-data-limit and/or the
15432           -mint-register command-line options are enabled.  Starting with
15433           register "r13" and proceeding downwards, registers are allocated
15434           first to satisfy the requirements of -mint-register, then -mpid and
15435           finally -msmall-data-limit.  Thus it is possible for the small data
15436           area register to be "r8" if both -mint-register=4 and -mpid are
15437           specified on the command line.
15438
15439           By default this feature is not enabled.  The default can be
15440           restored via the -mno-pid command-line option.
15441
15442       -mno-warn-multiple-fast-interrupts
15443       -mwarn-multiple-fast-interrupts
15444           Prevents GCC from issuing a warning message if it finds more than
15445           one fast interrupt handler when it is compiling a file.  The
15446           default is to issue a warning for each extra fast interrupt handler
15447           found, as the RX only supports one such interrupt.
15448
15449       Note: The generic GCC command-line option -ffixed-reg has special
15450       significance to the RX port when used with the "interrupt" function
15451       attribute.  This attribute indicates a function intended to process
15452       fast interrupts.  GCC ensures that it only uses the registers "r10",
15453       "r11", "r12" and/or "r13" and only provided that the normal use of the
15454       corresponding registers have been restricted via the -ffixed-reg or
15455       -mint-register command-line options.
15456
15457   S/390 and zSeries Options
15458       These are the -m options defined for the S/390 and zSeries
15459       architecture.
15460
15461       -mhard-float
15462       -msoft-float
15463           Use (do not use) the hardware floating-point instructions and
15464           registers for floating-point operations.  When -msoft-float is
15465           specified, functions in libgcc.a are used to perform floating-point
15466           operations.  When -mhard-float is specified, the compiler generates
15467           IEEE floating-point instructions.  This is the default.
15468
15469       -mhard-dfp
15470       -mno-hard-dfp
15471           Use (do not use) the hardware decimal-floating-point instructions
15472           for decimal-floating-point operations.  When -mno-hard-dfp is
15473           specified, functions in libgcc.a are used to perform decimal-
15474           floating-point operations.  When -mhard-dfp is specified, the
15475           compiler generates decimal-floating-point hardware instructions.
15476           This is the default for -march=z9-ec or higher.
15477
15478       -mlong-double-64
15479       -mlong-double-128
15480           These switches control the size of "long double" type. A size of 64
15481           bits makes the "long double" type equivalent to the "double" type.
15482           This is the default.
15483
15484       -mbackchain
15485       -mno-backchain
15486           Store (do not store) the address of the caller's frame as backchain
15487           pointer into the callee's stack frame.  A backchain may be needed
15488           to allow debugging using tools that do not understand DWARF 2 call
15489           frame information.  When -mno-packed-stack is in effect, the
15490           backchain pointer is stored at the bottom of the stack frame; when
15491           -mpacked-stack is in effect, the backchain is placed into the
15492           topmost word of the 96/160 byte register save area.
15493
15494           In general, code compiled with -mbackchain is call-compatible with
15495           code compiled with -mmo-backchain; however, use of the backchain
15496           for debugging purposes usually requires that the whole binary is
15497           built with -mbackchain.  Note that the combination of -mbackchain,
15498           -mpacked-stack and -mhard-float is not supported.  In order to
15499           build a linux kernel use -msoft-float.
15500
15501           The default is to not maintain the backchain.
15502
15503       -mpacked-stack
15504       -mno-packed-stack
15505           Use (do not use) the packed stack layout.  When -mno-packed-stack
15506           is specified, the compiler uses the all fields of the 96/160 byte
15507           register save area only for their default purpose; unused fields
15508           still take up stack space.  When -mpacked-stack is specified,
15509           register save slots are densely packed at the top of the register
15510           save area; unused space is reused for other purposes, allowing for
15511           more efficient use of the available stack space.  However, when
15512           -mbackchain is also in effect, the topmost word of the save area is
15513           always used to store the backchain, and the return address register
15514           is always saved two words below the backchain.
15515
15516           As long as the stack frame backchain is not used, code generated
15517           with -mpacked-stack is call-compatible with code generated with
15518           -mno-packed-stack.  Note that some non-FSF releases of GCC 2.95 for
15519           S/390 or zSeries generated code that uses the stack frame backchain
15520           at run time, not just for debugging purposes.  Such code is not
15521           call-compatible with code compiled with -mpacked-stack.  Also, note
15522           that the combination of -mbackchain, -mpacked-stack and
15523           -mhard-float is not supported.  In order to build a linux kernel
15524           use -msoft-float.
15525
15526           The default is to not use the packed stack layout.
15527
15528       -msmall-exec
15529       -mno-small-exec
15530           Generate (or do not generate) code using the "bras" instruction to
15531           do subroutine calls.  This only works reliably if the total
15532           executable size does not exceed 64k.  The default is to use the
15533           "basr" instruction instead, which does not have this limitation.
15534
15535       -m64
15536       -m31
15537           When -m31 is specified, generate code compliant to the GNU/Linux
15538           for S/390 ABI.  When -m64 is specified, generate code compliant to
15539           the GNU/Linux for zSeries ABI.  This allows GCC in particular to
15540           generate 64-bit instructions.  For the s390 targets, the default is
15541           -m31, while the s390x targets default to -m64.
15542
15543       -mzarch
15544       -mesa
15545           When -mzarch is specified, generate code using the instructions
15546           available on z/Architecture.  When -mesa is specified, generate
15547           code using the instructions available on ESA/390.  Note that -mesa
15548           is not possible with -m64.  When generating code compliant to the
15549           GNU/Linux for S/390 ABI, the default is -mesa.  When generating
15550           code compliant to the GNU/Linux for zSeries ABI, the default is
15551           -mzarch.
15552
15553       -mhtm
15554       -mno-htm
15555           The -mhtm option enables a set of builtins making use of
15556           instructions available with the transactional execution facility
15557           introduced with the IBM zEnterprise EC12 machine generation S/390
15558           System z Built-in Functions.  -mhtm is enabled by default when
15559           using -march=zEC12.
15560
15561       -mvx
15562       -mno-vx
15563           When -mvx is specified, generate code using the instructions
15564           available with the vector extension facility introduced with the
15565           IBM z13 machine generation.  This option changes the ABI for some
15566           vector type values with regard to alignment and calling
15567           conventions.  In case vector type values are being used in an ABI-
15568           relevant context a GAS .gnu_attribute command will be added to mark
15569           the resulting binary with the ABI used.  -mvx is enabled by default
15570           when using -march=z13.
15571
15572       -mzvector
15573       -mno-zvector
15574           The -mzvector option enables vector language extensions and
15575           builtins using instructions available with the vector extension
15576           facility introduced with the IBM z13 machine generation.  This
15577           option adds support for vector to be used as a keyword to define
15578           vector type variables and arguments.  vector is only available when
15579           GNU extensions are enabled.  It will not be expanded when
15580           requesting strict standard compliance e.g. with -std=c99.  In
15581           addition to the GCC low-level builtins -mzvector enables a set of
15582           builtins added for compatibility with Altivec-style implementations
15583           like Power and Cell.  In order to make use of these builtins the
15584           header file vecintrin.h needs to be included.  -mzvector is
15585           disabled by default.
15586
15587       -mmvcle
15588       -mno-mvcle
15589           Generate (or do not generate) code using the "mvcle" instruction to
15590           perform block moves.  When -mno-mvcle is specified, use a "mvc"
15591           loop instead.  This is the default unless optimizing for size.
15592
15593       -mdebug
15594       -mno-debug
15595           Print (or do not print) additional debug information when
15596           compiling.  The default is to not print debug information.
15597
15598       -march=cpu-type
15599           Generate code that runs on cpu-type, which is the name of a system
15600           representing a certain processor type.  Possible values for cpu-
15601           type are g5, g6, z900, z990, z9-109, z9-ec, z10, z196, zEC12, and
15602           z13.  When generating code using the instructions available on
15603           z/Architecture, the default is -march=z900.  Otherwise, the default
15604           is -march=g5.
15605
15606       -mtune=cpu-type
15607           Tune to cpu-type everything applicable about the generated code,
15608           except for the ABI and the set of available instructions.  The list
15609           of cpu-type values is the same as for -march.  The default is the
15610           value used for -march.
15611
15612       -mtpf-trace
15613       -mno-tpf-trace
15614           Generate code that adds (does not add) in TPF OS specific branches
15615           to trace routines in the operating system.  This option is off by
15616           default, even when compiling for the TPF OS.
15617
15618       -mfused-madd
15619       -mno-fused-madd
15620           Generate code that uses (does not use) the floating-point multiply
15621           and accumulate instructions.  These instructions are generated by
15622           default if hardware floating point is used.
15623
15624       -mwarn-framesize=framesize
15625           Emit a warning if the current function exceeds the given frame
15626           size.  Because this is a compile-time check it doesn't need to be a
15627           real problem when the program runs.  It is intended to identify
15628           functions that most probably cause a stack overflow.  It is useful
15629           to be used in an environment with limited stack size e.g. the linux
15630           kernel.
15631
15632       -mwarn-dynamicstack
15633           Emit a warning if the function calls "alloca" or uses dynamically-
15634           sized arrays.  This is generally a bad idea with a limited stack
15635           size.
15636
15637       -mstack-guard=stack-guard
15638       -mstack-size=stack-size
15639           If these options are provided the S/390 back end emits additional
15640           instructions in the function prologue that trigger a trap if the
15641           stack size is stack-guard bytes above the stack-size (remember that
15642           the stack on S/390 grows downward).  If the stack-guard option is
15643           omitted the smallest power of 2 larger than the frame size of the
15644           compiled function is chosen.  These options are intended to be used
15645           to help debugging stack overflow problems.  The additionally
15646           emitted code causes only little overhead and hence can also be used
15647           in production-like systems without greater performance degradation.
15648           The given values have to be exact powers of 2 and stack-size has to
15649           be greater than stack-guard without exceeding 64k.  In order to be
15650           efficient the extra code makes the assumption that the stack starts
15651           at an address aligned to the value given by stack-size.  The stack-
15652           guard option can only be used in conjunction with stack-size.
15653
15654       -mhotpatch=pre-halfwords,post-halfwords
15655           If the hotpatch option is enabled, a "hot-patching" function
15656           prologue is generated for all functions in the compilation unit.
15657           The funtion label is prepended with the given number of two-byte
15658           NOP instructions (pre-halfwords, maximum 1000000).  After the
15659           label, 2 * post-halfwords bytes are appended, using the largest NOP
15660           like instructions the architecture allows (maximum 1000000).
15661
15662           If both arguments are zero, hotpatching is disabled.
15663
15664           This option can be overridden for individual functions with the
15665           "hotpatch" attribute.
15666
15667   Score Options
15668       These options are defined for Score implementations:
15669
15670       -meb
15671           Compile code for big-endian mode.  This is the default.
15672
15673       -mel
15674           Compile code for little-endian mode.
15675
15676       -mnhwloop
15677           Disable generation of "bcnz" instructions.
15678
15679       -muls
15680           Enable generation of unaligned load and store instructions.
15681
15682       -mmac
15683           Enable the use of multiply-accumulate instructions. Disabled by
15684           default.
15685
15686       -mscore5
15687           Specify the SCORE5 as the target architecture.
15688
15689       -mscore5u
15690           Specify the SCORE5U of the target architecture.
15691
15692       -mscore7
15693           Specify the SCORE7 as the target architecture. This is the default.
15694
15695       -mscore7d
15696           Specify the SCORE7D as the target architecture.
15697
15698   SH Options
15699       These -m options are defined for the SH implementations:
15700
15701       -m1 Generate code for the SH1.
15702
15703       -m2 Generate code for the SH2.
15704
15705       -m2e
15706           Generate code for the SH2e.
15707
15708       -m2a-nofpu
15709           Generate code for the SH2a without FPU, or for a SH2a-FPU in such a
15710           way that the floating-point unit is not used.
15711
15712       -m2a-single-only
15713           Generate code for the SH2a-FPU, in such a way that no double-
15714           precision floating-point operations are used.
15715
15716       -m2a-single
15717           Generate code for the SH2a-FPU assuming the floating-point unit is
15718           in single-precision mode by default.
15719
15720       -m2a
15721           Generate code for the SH2a-FPU assuming the floating-point unit is
15722           in double-precision mode by default.
15723
15724       -m3 Generate code for the SH3.
15725
15726       -m3e
15727           Generate code for the SH3e.
15728
15729       -m4-nofpu
15730           Generate code for the SH4 without a floating-point unit.
15731
15732       -m4-single-only
15733           Generate code for the SH4 with a floating-point unit that only
15734           supports single-precision arithmetic.
15735
15736       -m4-single
15737           Generate code for the SH4 assuming the floating-point unit is in
15738           single-precision mode by default.
15739
15740       -m4 Generate code for the SH4.
15741
15742       -m4-100
15743           Generate code for SH4-100.
15744
15745       -m4-100-nofpu
15746           Generate code for SH4-100 in such a way that the floating-point
15747           unit is not used.
15748
15749       -m4-100-single
15750           Generate code for SH4-100 assuming the floating-point unit is in
15751           single-precision mode by default.
15752
15753       -m4-100-single-only
15754           Generate code for SH4-100 in such a way that no double-precision
15755           floating-point operations are used.
15756
15757       -m4-200
15758           Generate code for SH4-200.
15759
15760       -m4-200-nofpu
15761           Generate code for SH4-200 without in such a way that the floating-
15762           point unit is not used.
15763
15764       -m4-200-single
15765           Generate code for SH4-200 assuming the floating-point unit is in
15766           single-precision mode by default.
15767
15768       -m4-200-single-only
15769           Generate code for SH4-200 in such a way that no double-precision
15770           floating-point operations are used.
15771
15772       -m4-300
15773           Generate code for SH4-300.
15774
15775       -m4-300-nofpu
15776           Generate code for SH4-300 without in such a way that the floating-
15777           point unit is not used.
15778
15779       -m4-300-single
15780           Generate code for SH4-300 in such a way that no double-precision
15781           floating-point operations are used.
15782
15783       -m4-300-single-only
15784           Generate code for SH4-300 in such a way that no double-precision
15785           floating-point operations are used.
15786
15787       -m4-340
15788           Generate code for SH4-340 (no MMU, no FPU).
15789
15790       -m4-500
15791           Generate code for SH4-500 (no FPU).  Passes -isa=sh4-nofpu to the
15792           assembler.
15793
15794       -m4a-nofpu
15795           Generate code for the SH4al-dsp, or for a SH4a in such a way that
15796           the floating-point unit is not used.
15797
15798       -m4a-single-only
15799           Generate code for the SH4a, in such a way that no double-precision
15800           floating-point operations are used.
15801
15802       -m4a-single
15803           Generate code for the SH4a assuming the floating-point unit is in
15804           single-precision mode by default.
15805
15806       -m4a
15807           Generate code for the SH4a.
15808
15809       -m4al
15810           Same as -m4a-nofpu, except that it implicitly passes -dsp to the
15811           assembler.  GCC doesn't generate any DSP instructions at the
15812           moment.
15813
15814       -m5-32media
15815           Generate 32-bit code for SHmedia.
15816
15817       -m5-32media-nofpu
15818           Generate 32-bit code for SHmedia in such a way that the floating-
15819           point unit is not used.
15820
15821       -m5-64media
15822           Generate 64-bit code for SHmedia.
15823
15824       -m5-64media-nofpu
15825           Generate 64-bit code for SHmedia in such a way that the floating-
15826           point unit is not used.
15827
15828       -m5-compact
15829           Generate code for SHcompact.
15830
15831       -m5-compact-nofpu
15832           Generate code for SHcompact in such a way that the floating-point
15833           unit is not used.
15834
15835       -mb Compile code for the processor in big-endian mode.
15836
15837       -ml Compile code for the processor in little-endian mode.
15838
15839       -mdalign
15840           Align doubles at 64-bit boundaries.  Note that this changes the
15841           calling conventions, and thus some functions from the standard C
15842           library do not work unless you recompile it first with -mdalign.
15843
15844       -mrelax
15845           Shorten some address references at link time, when possible; uses
15846           the linker option -relax.
15847
15848       -mbigtable
15849           Use 32-bit offsets in "switch" tables.  The default is to use
15850           16-bit offsets.
15851
15852       -mbitops
15853           Enable the use of bit manipulation instructions on SH2A.
15854
15855       -mfmovd
15856           Enable the use of the instruction "fmovd".  Check -mdalign for
15857           alignment constraints.
15858
15859       -mrenesas
15860           Comply with the calling conventions defined by Renesas.
15861
15862       -mno-renesas
15863           Comply with the calling conventions defined for GCC before the
15864           Renesas conventions were available.  This option is the default for
15865           all targets of the SH toolchain.
15866
15867       -mnomacsave
15868           Mark the "MAC" register as call-clobbered, even if -mrenesas is
15869           given.
15870
15871       -mieee
15872       -mno-ieee
15873           Control the IEEE compliance of floating-point comparisons, which
15874           affects the handling of cases where the result of a comparison is
15875           unordered.  By default -mieee is implicitly enabled.  If
15876           -ffinite-math-only is enabled -mno-ieee is implicitly set, which
15877           results in faster floating-point greater-equal and less-equal
15878           comparisons.  The implcit settings can be overridden by specifying
15879           either -mieee or -mno-ieee.
15880
15881       -minline-ic_invalidate
15882           Inline code to invalidate instruction cache entries after setting
15883           up nested function trampolines.  This option has no effect if
15884           -musermode is in effect and the selected code generation option
15885           (e.g. -m4) does not allow the use of the "icbi" instruction.  If
15886           the selected code generation option does not allow the use of the
15887           "icbi" instruction, and -musermode is not in effect, the inlined
15888           code manipulates the instruction cache address array directly with
15889           an associative write.  This not only requires privileged mode at
15890           run time, but it also fails if the cache line had been mapped via
15891           the TLB and has become unmapped.
15892
15893       -misize
15894           Dump instruction size and location in the assembly code.
15895
15896       -mpadstruct
15897           This option is deprecated.  It pads structures to multiple of 4
15898           bytes, which is incompatible with the SH ABI.
15899
15900       -matomic-model=model
15901           Sets the model of atomic operations and additional parameters as a
15902           comma separated list.  For details on the atomic built-in functions
15903           see __atomic Builtins.  The following models and parameters are
15904           supported:
15905
15906           none
15907               Disable compiler generated atomic sequences and emit library
15908               calls for atomic operations.  This is the default if the target
15909               is not "sh*-*-linux*".
15910
15911           soft-gusa
15912               Generate GNU/Linux compatible gUSA software atomic sequences
15913               for the atomic built-in functions.  The generated atomic
15914               sequences require additional support from the
15915               interrupt/exception handling code of the system and are only
15916               suitable for SH3* and SH4* single-core systems.  This option is
15917               enabled by default when the target is "sh*-*-linux*" and SH3*
15918               or SH4*.  When the target is SH4A, this option will also
15919               partially utilize the hardware atomic instructions "movli.l"
15920               and "movco.l" to create more efficient code, unless strict is
15921               specified.
15922
15923           soft-tcb
15924               Generate software atomic sequences that use a variable in the
15925               thread control block.  This is a variation of the gUSA
15926               sequences which can also be used on SH1* and SH2* targets.  The
15927               generated atomic sequences require additional support from the
15928               interrupt/exception handling code of the system and are only
15929               suitable for single-core systems.  When using this model, the
15930               gbr-offset= parameter has to be specified as well.
15931
15932           soft-imask
15933               Generate software atomic sequences that temporarily disable
15934               interrupts by setting "SR.IMASK = 1111".  This model works only
15935               when the program runs in privileged mode and is only suitable
15936               for single-core systems.  Additional support from the
15937               interrupt/exception handling code of the system is not
15938               required.  This model is enabled by default when the target is
15939               "sh*-*-linux*" and SH1* or SH2*.
15940
15941           hard-llcs
15942               Generate hardware atomic sequences using the "movli.l" and
15943               "movco.l" instructions only.  This is only available on SH4A
15944               and is suitable for multi-core systems.  Since the hardware
15945               instructions support only 32 bit atomic variables access to 8
15946               or 16 bit variables is emulated with 32 bit accesses.  Code
15947               compiled with this option will also be compatible with other
15948               software atomic model interrupt/exception handling systems if
15949               executed on an SH4A system.  Additional support from the
15950               interrupt/exception handling code of the system is not required
15951               for this model.
15952
15953           gbr-offset=
15954               This parameter specifies the offset in bytes of the variable in
15955               the thread control block structure that should be used by the
15956               generated atomic sequences when the soft-tcb model has been
15957               selected.  For other models this parameter is ignored.  The
15958               specified value must be an integer multiple of four and in the
15959               range 0-1020.
15960
15961           strict
15962               This parameter prevents mixed usage of multiple atomic models,
15963               even though they would be compatible, and will make the
15964               compiler generate atomic sequences of the specified model only.
15965
15966       -mtas
15967           Generate the "tas.b" opcode for "__atomic_test_and_set".  Notice
15968           that depending on the particular hardware and software
15969           configuration this can degrade overall performance due to the
15970           operand cache line flushes that are implied by the "tas.b"
15971           instruction.  On multi-core SH4A processors the "tas.b" instruction
15972           must be used with caution since it can result in data corruption
15973           for certain cache configurations.
15974
15975       -mprefergot
15976           When generating position-independent code, emit function calls
15977           using the Global Offset Table instead of the Procedure Linkage
15978           Table.
15979
15980       -musermode
15981       -mno-usermode
15982           Don't allow (allow) the compiler generating privileged mode code.
15983           Specifying -musermode also implies -mno-inline-ic_invalidate if the
15984           inlined code would not work in user mode.  -musermode is the
15985           default when the target is "sh*-*-linux*".  If the target is SH1*
15986           or SH2* -musermode has no effect, since there is no user mode.
15987
15988       -multcost=number
15989           Set the cost to assume for a multiply insn.
15990
15991       -mdiv=strategy
15992           Set the division strategy to be used for integer division
15993           operations.  For SHmedia strategy can be one of:
15994
15995           fp  Performs the operation in floating point.  This has a very high
15996               latency, but needs only a few instructions, so it might be a
15997               good choice if your code has enough easily-exploitable ILP to
15998               allow the compiler to schedule the floating-point instructions
15999               together with other instructions.  Division by zero causes a
16000               floating-point exception.
16001
16002           inv Uses integer operations to calculate the inverse of the
16003               divisor, and then multiplies the dividend with the inverse.
16004               This strategy allows CSE and hoisting of the inverse
16005               calculation.  Division by zero calculates an unspecified
16006               result, but does not trap.
16007
16008           inv:minlat
16009               A variant of inv where, if no CSE or hoisting opportunities
16010               have been found, or if the entire operation has been hoisted to
16011               the same place, the last stages of the inverse calculation are
16012               intertwined with the final multiply to reduce the overall
16013               latency, at the expense of using a few more instructions, and
16014               thus offering fewer scheduling opportunities with other code.
16015
16016           call
16017               Calls a library function that usually implements the inv:minlat
16018               strategy.  This gives high code density for "m5-*media-nofpu"
16019               compilations.
16020
16021           call2
16022               Uses a different entry point of the same library function,
16023               where it assumes that a pointer to a lookup table has already
16024               been set up, which exposes the pointer load to CSE and code
16025               hoisting optimizations.
16026
16027           inv:call
16028           inv:call2
16029           inv:fp
16030               Use the inv algorithm for initial code generation, but if the
16031               code stays unoptimized, revert to the call, call2, or fp
16032               strategies, respectively.  Note that the potentially-trapping
16033               side effect of division by zero is carried by a separate
16034               instruction, so it is possible that all the integer
16035               instructions are hoisted out, but the marker for the side
16036               effect stays where it is.  A recombination to floating-point
16037               operations or a call is not possible in that case.
16038
16039           inv20u
16040           inv20l
16041               Variants of the inv:minlat strategy.  In the case that the
16042               inverse calculation is not separated from the multiply, they
16043               speed up division where the dividend fits into 20 bits (plus
16044               sign where applicable) by inserting a test to skip a number of
16045               operations in this case; this test slows down the case of
16046               larger dividends.  inv20u assumes the case of a such a small
16047               dividend to be unlikely, and inv20l assumes it to be likely.
16048
16049           For targets other than SHmedia strategy can be one of:
16050
16051           call-div1
16052               Calls a library function that uses the single-step division
16053               instruction "div1" to perform the operation.  Division by zero
16054               calculates an unspecified result and does not trap.  This is
16055               the default except for SH4, SH2A and SHcompact.
16056
16057           call-fp
16058               Calls a library function that performs the operation in double
16059               precision floating point.  Division by zero causes a floating-
16060               point exception.  This is the default for SHcompact with FPU.
16061               Specifying this for targets that do not have a double precision
16062               FPU will default to "call-div1".
16063
16064           call-table
16065               Calls a library function that uses a lookup table for small
16066               divisors and the "div1" instruction with case distinction for
16067               larger divisors.  Division by zero calculates an unspecified
16068               result and does not trap.  This is the default for SH4.
16069               Specifying this for targets that do not have dynamic shift
16070               instructions will default to "call-div1".
16071
16072           When a division strategy has not been specified the default
16073           strategy will be selected based on the current target.  For SH2A
16074           the default strategy is to use the "divs" and "divu" instructions
16075           instead of library function calls.
16076
16077       -maccumulate-outgoing-args
16078           Reserve space once for outgoing arguments in the function prologue
16079           rather than around each call.  Generally beneficial for performance
16080           and size.  Also needed for unwinding to avoid changing the stack
16081           frame around conditional code.
16082
16083       -mdivsi3_libfunc=name
16084           Set the name of the library function used for 32-bit signed
16085           division to name.  This only affects the name used in the call and
16086           inv:call division strategies, and the compiler still expects the
16087           same sets of input/output/clobbered registers as if this option
16088           were not present.
16089
16090       -mfixed-range=register-range
16091           Generate code treating the given register range as fixed registers.
16092           A fixed register is one that the register allocator can not use.
16093           This is useful when compiling kernel code.  A register range is
16094           specified as two registers separated by a dash.  Multiple register
16095           ranges can be specified separated by a comma.
16096
16097       -mindexed-addressing
16098           Enable the use of the indexed addressing mode for
16099           SHmedia32/SHcompact.  This is only safe if the hardware and/or OS
16100           implement 32-bit wrap-around semantics for the indexed addressing
16101           mode.  The architecture allows the implementation of processors
16102           with 64-bit MMU, which the OS could use to get 32-bit addressing,
16103           but since no current hardware implementation supports this or any
16104           other way to make the indexed addressing mode safe to use in the
16105           32-bit ABI, the default is -mno-indexed-addressing.
16106
16107       -mgettrcost=number
16108           Set the cost assumed for the "gettr" instruction to number.  The
16109           default is 2 if -mpt-fixed is in effect, 100 otherwise.
16110
16111       -mpt-fixed
16112           Assume "pt*" instructions won't trap.  This generally generates
16113           better-scheduled code, but is unsafe on current hardware.  The
16114           current architecture definition says that "ptabs" and "ptrel" trap
16115           when the target anded with 3 is 3.  This has the unintentional
16116           effect of making it unsafe to schedule these instructions before a
16117           branch, or hoist them out of a loop.  For example,
16118           "__do_global_ctors", a part of libgcc that runs constructors at
16119           program startup, calls functions in a list which is delimited by
16120           -1.  With the -mpt-fixed option, the "ptabs" is done before testing
16121           against -1.  That means that all the constructors run a bit more
16122           quickly, but when the loop comes to the end of the list, the
16123           program crashes because "ptabs" loads -1 into a target register.
16124
16125           Since this option is unsafe for any hardware implementing the
16126           current architecture specification, the default is -mno-pt-fixed.
16127           Unless specified explicitly with -mgettrcost, -mno-pt-fixed also
16128           implies -mgettrcost=100; this deters register allocation from using
16129           target registers for storing ordinary integers.
16130
16131       -minvalid-symbols
16132           Assume symbols might be invalid.  Ordinary function symbols
16133           generated by the compiler are always valid to load with
16134           "movi"/"shori"/"ptabs" or "movi"/"shori"/"ptrel", but with
16135           assembler and/or linker tricks it is possible to generate symbols
16136           that cause "ptabs" or "ptrel" to trap.  This option is only
16137           meaningful when -mno-pt-fixed is in effect.  It prevents cross-
16138           basic-block CSE, hoisting and most scheduling of symbol loads.  The
16139           default is -mno-invalid-symbols.
16140
16141       -mbranch-cost=num
16142           Assume num to be the cost for a branch instruction.  Higher numbers
16143           make the compiler try to generate more branch-free code if
16144           possible.  If not specified the value is selected depending on the
16145           processor type that is being compiled for.
16146
16147       -mzdcbranch
16148       -mno-zdcbranch
16149           Assume (do not assume) that zero displacement conditional branch
16150           instructions "bt" and "bf" are fast.  If -mzdcbranch is specified,
16151           the compiler will try to prefer zero displacement branch code
16152           sequences.  This is enabled by default when generating code for SH4
16153           and SH4A.  It can be explicitly disabled by specifying
16154           -mno-zdcbranch.
16155
16156       -mcbranchdi
16157           Enable the "cbranchdi4" instruction pattern.
16158
16159       -mcmpeqdi
16160           Emit the "cmpeqdi_t" instruction pattern even when -mcbranchdi is
16161           in effect.
16162
16163       -mfused-madd
16164       -mno-fused-madd
16165           Generate code that uses (does not use) the floating-point multiply
16166           and accumulate instructions.  These instructions are generated by
16167           default if hardware floating point is used.  The machine-dependent
16168           -mfused-madd option is now mapped to the machine-independent
16169           -ffp-contract=fast option, and -mno-fused-madd is mapped to
16170           -ffp-contract=off.
16171
16172       -mfsca
16173       -mno-fsca
16174           Allow or disallow the compiler to emit the "fsca" instruction for
16175           sine and cosine approximations.  The option "-mfsca" must be used
16176           in combination with "-funsafe-math-optimizations".  It is enabled
16177           by default when generating code for SH4A.  Using "-mno-fsca"
16178           disables sine and cosine approximations even if
16179           "-funsafe-math-optimizations" is in effect.
16180
16181       -mfsrra
16182       -mno-fsrra
16183           Allow or disallow the compiler to emit the "fsrra" instruction for
16184           reciprocal square root approximations.  The option "-mfsrra" must
16185           be used in combination with "-funsafe-math-optimizations" and
16186           "-ffinite-math-only".  It is enabled by default when generating
16187           code for SH4A.  Using "-mno-fsrra" disables reciprocal square root
16188           approximations even if "-funsafe-math-optimizations" and
16189           "-ffinite-math-only" are in effect.
16190
16191       -mpretend-cmove
16192           Prefer zero-displacement conditional branches for conditional move
16193           instruction patterns.  This can result in faster code on the SH4
16194           processor.
16195
16196   Solaris 2 Options
16197       These -m options are supported on Solaris 2:
16198
16199       -mimpure-text
16200           -mimpure-text, used in addition to -shared, tells the compiler to
16201           not pass -z text to the linker when linking a shared object.  Using
16202           this option, you can link position-dependent code into a shared
16203           object.
16204
16205           -mimpure-text suppresses the "relocations remain against
16206           allocatable but non-writable sections" linker error message.
16207           However, the necessary relocations trigger copy-on-write, and the
16208           shared object is not actually shared across processes.  Instead of
16209           using -mimpure-text, you should compile all source code with -fpic
16210           or -fPIC.
16211
16212       These switches are supported in addition to the above on Solaris 2:
16213
16214       -pthreads
16215           Add support for multithreading using the POSIX threads library.
16216           This option sets flags for both the preprocessor and linker.  This
16217           option does not affect the thread safety of object code produced
16218           by the compiler or that of libraries supplied with it.
16219
16220       -pthread
16221           This is a synonym for -pthreads.
16222
16223   SPARC Options
16224       These -m options are supported on the SPARC:
16225
16226       -mno-app-regs
16227       -mapp-regs
16228           Specify -mapp-regs to generate output using the global registers 2
16229           through 4, which the SPARC SVR4 ABI reserves for applications.
16230           Like the global register 1, each global register 2 through 4 is
16231           then treated as an allocable register that is clobbered by function
16232           calls.  This is the default.
16233
16234           To be fully SVR4 ABI-compliant at the cost of some performance
16235           loss, specify -mno-app-regs.  You should compile libraries and
16236           system software with this option.
16237
16238       -mflat
16239       -mno-flat
16240           With -mflat, the compiler does not generate save/restore
16241           instructions and uses a "flat" or single register window model.
16242           This model is compatible with the regular register window model.
16243           The local registers and the input registers (0--5) are still
16244           treated as "call-saved" registers and are saved on the stack as
16245           needed.
16246
16247           With -mno-flat (the default), the compiler generates save/restore
16248           instructions (except for leaf functions).  This is the normal
16249           operating mode.
16250
16251       -mfpu
16252       -mhard-float
16253           Generate output containing floating-point instructions.  This is
16254           the default.
16255
16256       -mno-fpu
16257       -msoft-float
16258           Generate output containing library calls for floating point.
16259           Warning: the requisite libraries are not available for all SPARC
16260           targets.  Normally the facilities of the machine's usual C compiler
16261           are used, but this cannot be done directly in cross-compilation.
16262           You must make your own arrangements to provide suitable library
16263           functions for cross-compilation.  The embedded targets sparc-*-aout
16264           and sparclite-*-* do provide software floating-point support.
16265
16266           -msoft-float changes the calling convention in the output file;
16267           therefore, it is only useful if you compile all of a program with
16268           this option.  In particular, you need to compile libgcc.a, the
16269           library that comes with GCC, with -msoft-float in order for this to
16270           work.
16271
16272       -mhard-quad-float
16273           Generate output containing quad-word (long double) floating-point
16274           instructions.
16275
16276       -msoft-quad-float
16277           Generate output containing library calls for quad-word (long
16278           double) floating-point instructions.  The functions called are
16279           those specified in the SPARC ABI.  This is the default.
16280
16281           As of this writing, there are no SPARC implementations that have
16282           hardware support for the quad-word floating-point instructions.
16283           They all invoke a trap handler for one of these instructions, and
16284           then the trap handler emulates the effect of the instruction.
16285           Because of the trap handler overhead, this is much slower than
16286           calling the ABI library routines.  Thus the -msoft-quad-float
16287           option is the default.
16288
16289       -mno-unaligned-doubles
16290       -munaligned-doubles
16291           Assume that doubles have 8-byte alignment.  This is the default.
16292
16293           With -munaligned-doubles, GCC assumes that doubles have 8-byte
16294           alignment only if they are contained in another type, or if they
16295           have an absolute address.  Otherwise, it assumes they have 4-byte
16296           alignment.  Specifying this option avoids some rare compatibility
16297           problems with code generated by other compilers.  It is not the
16298           default because it results in a performance loss, especially for
16299           floating-point code.
16300
16301       -muser-mode
16302       -mno-user-mode
16303           Do not generate code that can only run in supervisor mode.  This is
16304           relevant only for the "casa" instruction emitted for the LEON3
16305           processor.  The default is -mno-user-mode.
16306
16307       -mno-faster-structs
16308       -mfaster-structs
16309           With -mfaster-structs, the compiler assumes that structures should
16310           have 8-byte alignment.  This enables the use of pairs of "ldd" and
16311           "std" instructions for copies in structure assignment, in place of
16312           twice as many "ld" and "st" pairs.  However, the use of this
16313           changed alignment directly violates the SPARC ABI.  Thus, it's
16314           intended only for use on targets where the developer acknowledges
16315           that their resulting code is not directly in line with the rules of
16316           the ABI.
16317
16318       -mcpu=cpu_type
16319           Set the instruction set, register set, and instruction scheduling
16320           parameters for machine type cpu_type.  Supported values for
16321           cpu_type are v7, cypress, v8, supersparc, hypersparc, leon, leon3,
16322           leon3v7, sparclite, f930, f934, sparclite86x, sparclet, tsc701, v9,
16323           ultrasparc, ultrasparc3, niagara, niagara2, niagara3 and niagara4.
16324
16325           Native Solaris and GNU/Linux toolchains also support the value
16326           native, which selects the best architecture option for the host
16327           processor.  -mcpu=native has no effect if GCC does not recognize
16328           the processor.
16329
16330           Default instruction scheduling parameters are used for values that
16331           select an architecture and not an implementation.  These are v7,
16332           v8, sparclite, sparclet, v9.
16333
16334           Here is a list of each supported architecture and their supported
16335           implementations.
16336
16337           v7  cypress, leon3v7
16338
16339           v8  supersparc, hypersparc, leon, leon3
16340
16341           sparclite
16342               f930, f934, sparclite86x
16343
16344           sparclet
16345               tsc701
16346
16347           v9  ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4
16348
16349           By default (unless configured otherwise), GCC generates code for
16350           the V7 variant of the SPARC architecture.  With -mcpu=cypress, the
16351           compiler additionally optimizes it for the Cypress CY7C602 chip, as
16352           used in the SPARCStation/SPARCServer 3xx series.  This is also
16353           appropriate for the older SPARCStation 1, 2, IPX etc.
16354
16355           With -mcpu=v8, GCC generates code for the V8 variant of the SPARC
16356           architecture.  The only difference from V7 code is that the
16357           compiler emits the integer multiply and integer divide instructions
16358           which exist in SPARC-V8 but not in SPARC-V7.  With
16359           -mcpu=supersparc, the compiler additionally optimizes it for the
16360           SuperSPARC chip, as used in the SPARCStation 10, 1000 and 2000
16361           series.
16362
16363           With -mcpu=sparclite, GCC generates code for the SPARClite variant
16364           of the SPARC architecture.  This adds the integer multiply, integer
16365           divide step and scan ("ffs") instructions which exist in SPARClite
16366           but not in SPARC-V7.  With -mcpu=f930, the compiler additionally
16367           optimizes it for the Fujitsu MB86930 chip, which is the original
16368           SPARClite, with no FPU.  With -mcpu=f934, the compiler additionally
16369           optimizes it for the Fujitsu MB86934 chip, which is the more recent
16370           SPARClite with FPU.
16371
16372           With -mcpu=sparclet, GCC generates code for the SPARClet variant of
16373           the SPARC architecture.  This adds the integer multiply,
16374           multiply/accumulate, integer divide step and scan ("ffs")
16375           instructions which exist in SPARClet but not in SPARC-V7.  With
16376           -mcpu=tsc701, the compiler additionally optimizes it for the TEMIC
16377           SPARClet chip.
16378
16379           With -mcpu=v9, GCC generates code for the V9 variant of the SPARC
16380           architecture.  This adds 64-bit integer and floating-point move
16381           instructions, 3 additional floating-point condition code registers
16382           and conditional move instructions.  With -mcpu=ultrasparc, the
16383           compiler additionally optimizes it for the Sun UltraSPARC I/II/IIi
16384           chips.  With -mcpu=ultrasparc3, the compiler additionally optimizes
16385           it for the Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+ chips.  With
16386           -mcpu=niagara, the compiler additionally optimizes it for Sun
16387           UltraSPARC T1 chips.  With -mcpu=niagara2, the compiler
16388           additionally optimizes it for Sun UltraSPARC T2 chips. With
16389           -mcpu=niagara3, the compiler additionally optimizes it for Sun
16390           UltraSPARC T3 chips.  With -mcpu=niagara4, the compiler
16391           additionally optimizes it for Sun UltraSPARC T4 chips.
16392
16393       -mtune=cpu_type
16394           Set the instruction scheduling parameters for machine type
16395           cpu_type, but do not set the instruction set or register set that
16396           the option -mcpu=cpu_type does.
16397
16398           The same values for -mcpu=cpu_type can be used for -mtune=cpu_type,
16399           but the only useful values are those that select a particular CPU
16400           implementation.  Those are cypress, supersparc, hypersparc, leon,
16401           leon3, leon3v7, f930, f934, sparclite86x, tsc701, ultrasparc,
16402           ultrasparc3, niagara, niagara2, niagara3 and niagara4.  With native
16403           Solaris and GNU/Linux toolchains, native can also be used.
16404
16405       -mv8plus
16406       -mno-v8plus
16407           With -mv8plus, GCC generates code for the SPARC-V8+ ABI.  The
16408           difference from the V8 ABI is that the global and out registers are
16409           considered 64 bits wide.  This is enabled by default on Solaris in
16410           32-bit mode for all SPARC-V9 processors.
16411
16412       -mvis
16413       -mno-vis
16414           With -mvis, GCC generates code that takes advantage of the
16415           UltraSPARC Visual Instruction Set extensions.  The default is
16416           -mno-vis.
16417
16418       -mvis2
16419       -mno-vis2
16420           With -mvis2, GCC generates code that takes advantage of version 2.0
16421           of the UltraSPARC Visual Instruction Set extensions.  The default
16422           is -mvis2 when targeting a cpu that supports such instructions,
16423           such as UltraSPARC-III and later.  Setting -mvis2 also sets -mvis.
16424
16425       -mvis3
16426       -mno-vis3
16427           With -mvis3, GCC generates code that takes advantage of version 3.0
16428           of the UltraSPARC Visual Instruction Set extensions.  The default
16429           is -mvis3 when targeting a cpu that supports such instructions,
16430           such as niagara-3 and later.  Setting -mvis3 also sets -mvis2 and
16431           -mvis.
16432
16433       -mcbcond
16434       -mno-cbcond
16435           With -mcbcond, GCC generates code that takes advantage of compare-
16436           and-branch instructions, as defined in the Sparc Architecture 2011.
16437           The default is -mcbcond when targeting a cpu that supports such
16438           instructions, such as niagara-4 and later.
16439
16440       -mpopc
16441       -mno-popc
16442           With -mpopc, GCC generates code that takes advantage of the
16443           UltraSPARC population count instruction.  The default is -mpopc
16444           when targeting a cpu that supports such instructions, such as
16445           Niagara-2 and later.
16446
16447       -mfmaf
16448       -mno-fmaf
16449           With -mfmaf, GCC generates code that takes advantage of the
16450           UltraSPARC Fused Multiply-Add Floating-point extensions.  The
16451           default is -mfmaf when targeting a cpu that supports such
16452           instructions, such as Niagara-3 and later.
16453
16454       -mfix-at697f
16455           Enable the documented workaround for the single erratum of the
16456           Atmel AT697F processor (which corresponds to erratum #13 of the
16457           AT697E processor).
16458
16459       -mfix-ut699
16460           Enable the documented workarounds for the floating-point errata and
16461           the data cache nullify errata of the UT699 processor.
16462
16463       These -m options are supported in addition to the above on SPARC-V9
16464       processors in 64-bit environments:
16465
16466       -m32
16467       -m64
16468           Generate code for a 32-bit or 64-bit environment.  The 32-bit
16469           environment sets int, long and pointer to 32 bits.  The 64-bit
16470           environment sets int to 32 bits and long and pointer to 64 bits.
16471
16472       -mcmodel=which
16473           Set the code model to one of
16474
16475           medlow
16476               The Medium/Low code model: 64-bit addresses, programs must be
16477               linked in the low 32 bits of memory.  Programs can be
16478               statically or dynamically linked.
16479
16480           medmid
16481               The Medium/Middle code model: 64-bit addresses, programs must
16482               be linked in the low 44 bits of memory, the text and data
16483               segments must be less than 2GB in size and the data segment
16484               must be located within 2GB of the text segment.
16485
16486           medany
16487               The Medium/Anywhere code model: 64-bit addresses, programs may
16488               be linked anywhere in memory, the text and data segments must
16489               be less than 2GB in size and the data segment must be located
16490               within 2GB of the text segment.
16491
16492           embmedany
16493               The Medium/Anywhere code model for embedded systems: 64-bit
16494               addresses, the text and data segments must be less than 2GB in
16495               size, both starting anywhere in memory (determined at link
16496               time).  The global register %g4 points to the base of the data
16497               segment.  Programs are statically linked and PIC is not
16498               supported.
16499
16500       -mmemory-model=mem-model
16501           Set the memory model in force on the processor to one of
16502
16503           default
16504               The default memory model for the processor and operating
16505               system.
16506
16507           rmo Relaxed Memory Order
16508
16509           pso Partial Store Order
16510
16511           tso Total Store Order
16512
16513           sc  Sequential Consistency
16514
16515           These memory models are formally defined in Appendix D of the Sparc
16516           V9 architecture manual, as set in the processor's "PSTATE.MM"
16517           field.
16518
16519       -mstack-bias
16520       -mno-stack-bias
16521           With -mstack-bias, GCC assumes that the stack pointer, and frame
16522           pointer if present, are offset by -2047 which must be added back
16523           when making stack frame references.  This is the default in 64-bit
16524           mode.  Otherwise, assume no such offset is present.
16525
16526   SPU Options
16527       These -m options are supported on the SPU:
16528
16529       -mwarn-reloc
16530       -merror-reloc
16531           The loader for SPU does not handle dynamic relocations.  By
16532           default, GCC gives an error when it generates code that requires a
16533           dynamic relocation.  -mno-error-reloc disables the error,
16534           -mwarn-reloc generates a warning instead.
16535
16536       -msafe-dma
16537       -munsafe-dma
16538           Instructions that initiate or test completion of DMA must not be
16539           reordered with respect to loads and stores of the memory that is
16540           being accessed.  With -munsafe-dma you must use the "volatile"
16541           keyword to protect memory accesses, but that can lead to
16542           inefficient code in places where the memory is known to not change.
16543           Rather than mark the memory as volatile, you can use -msafe-dma to
16544           tell the compiler to treat the DMA instructions as potentially
16545           affecting all memory.
16546
16547       -mbranch-hints
16548           By default, GCC generates a branch hint instruction to avoid
16549           pipeline stalls for always-taken or probably-taken branches.  A
16550           hint is not generated closer than 8 instructions away from its
16551           branch.  There is little reason to disable them, except for
16552           debugging purposes, or to make an object a little bit smaller.
16553
16554       -msmall-mem
16555       -mlarge-mem
16556           By default, GCC generates code assuming that addresses are never
16557           larger than 18 bits.  With -mlarge-mem code is generated that
16558           assumes a full 32-bit address.
16559
16560       -mstdmain
16561           By default, GCC links against startup code that assumes the SPU-
16562           style main function interface (which has an unconventional
16563           parameter list).  With -mstdmain, GCC links your program against
16564           startup code that assumes a C99-style interface to "main",
16565           including a local copy of "argv" strings.
16566
16567       -mfixed-range=register-range
16568           Generate code treating the given register range as fixed registers.
16569           A fixed register is one that the register allocator cannot use.
16570           This is useful when compiling kernel code.  A register range is
16571           specified as two registers separated by a dash.  Multiple register
16572           ranges can be specified separated by a comma.
16573
16574       -mea32
16575       -mea64
16576           Compile code assuming that pointers to the PPU address space
16577           accessed via the "__ea" named address space qualifier are either 32
16578           or 64 bits wide.  The default is 32 bits.  As this is an ABI-
16579           changing option, all object code in an executable must be compiled
16580           with the same setting.
16581
16582       -maddress-space-conversion
16583       -mno-address-space-conversion
16584           Allow/disallow treating the "__ea" address space as superset of the
16585           generic address space.  This enables explicit type casts between
16586           "__ea" and generic pointer as well as implicit conversions of
16587           generic pointers to "__ea" pointers.  The default is to allow
16588           address space pointer conversions.
16589
16590       -mcache-size=cache-size
16591           This option controls the version of libgcc that the compiler links
16592           to an executable and selects a software-managed cache for accessing
16593           variables in the "__ea" address space with a particular cache size.
16594           Possible options for cache-size are 8, 16, 32, 64 and 128.  The
16595           default cache size is 64KB.
16596
16597       -matomic-updates
16598       -mno-atomic-updates
16599           This option controls the version of libgcc that the compiler links
16600           to an executable and selects whether atomic updates to the
16601           software-managed cache of PPU-side variables are used.  If you use
16602           atomic updates, changes to a PPU variable from SPU code using the
16603           "__ea" named address space qualifier do not interfere with changes
16604           to other PPU variables residing in the same cache line from PPU
16605           code.  If you do not use atomic updates, such interference may
16606           occur; however, writing back cache lines is more efficient.  The
16607           default behavior is to use atomic updates.
16608
16609       -mdual-nops
16610       -mdual-nops=n
16611           By default, GCC inserts nops to increase dual issue when it expects
16612           it to increase performance.  n can be a value from 0 to 10.  A
16613           smaller n inserts fewer nops.  10 is the default, 0 is the same as
16614           -mno-dual-nops.  Disabled with -Os.
16615
16616       -mhint-max-nops=n
16617           Maximum number of nops to insert for a branch hint.  A branch hint
16618           must be at least 8 instructions away from the branch it is
16619           affecting.  GCC inserts up to n nops to enforce this, otherwise it
16620           does not generate the branch hint.
16621
16622       -mhint-max-distance=n
16623           The encoding of the branch hint instruction limits the hint to be
16624           within 256 instructions of the branch it is affecting.  By default,
16625           GCC makes sure it is within 125.
16626
16627       -msafe-hints
16628           Work around a hardware bug that causes the SPU to stall
16629           indefinitely.  By default, GCC inserts the "hbrp" instruction to
16630           make sure this stall won't happen.
16631
16632   Options for System V
16633       These additional options are available on System V Release 4 for
16634       compatibility with other compilers on those systems:
16635
16636       -G  Create a shared object.  It is recommended that -symbolic or
16637           -shared be used instead.
16638
16639       -Qy Identify the versions of each tool used by the compiler, in a
16640           ".ident" assembler directive in the output.
16641
16642       -Qn Refrain from adding ".ident" directives to the output file (this is
16643           the default).
16644
16645       -YP,dirs
16646           Search the directories dirs, and no others, for libraries specified
16647           with -l.
16648
16649       -Ym,dir
16650           Look in the directory dir to find the M4 preprocessor.  The
16651           assembler uses this option.
16652
16653   TILE-Gx Options
16654       These -m options are supported on the TILE-Gx:
16655
16656       -mcmodel=small
16657           Generate code for the small model.  The distance for direct calls
16658           is limited to 500M in either direction.  PC-relative addresses are
16659           32 bits.  Absolute addresses support the full address range.
16660
16661       -mcmodel=large
16662           Generate code for the large model.  There is no limitation on call
16663           distance, pc-relative addresses, or absolute addresses.
16664
16665       -mcpu=name
16666           Selects the type of CPU to be targeted.  Currently the only
16667           supported type is tilegx.
16668
16669       -m32
16670       -m64
16671           Generate code for a 32-bit or 64-bit environment.  The 32-bit
16672           environment sets int, long, and pointer to 32 bits.  The 64-bit
16673           environment sets int to 32 bits and long and pointer to 64 bits.
16674
16675   TILEPro Options
16676       These -m options are supported on the TILEPro:
16677
16678       -mcpu=name
16679           Selects the type of CPU to be targeted.  Currently the only
16680           supported type is tilepro.
16681
16682       -m32
16683           Generate code for a 32-bit environment, which sets int, long, and
16684           pointer to 32 bits.  This is the only supported behavior so the
16685           flag is essentially ignored.
16686
16687   V850 Options
16688       These -m options are defined for V850 implementations:
16689
16690       -mlong-calls
16691       -mno-long-calls
16692           Treat all calls as being far away (near).  If calls are assumed to
16693           be far away, the compiler always loads the function's address into
16694           a register, and calls indirect through the pointer.
16695
16696       -mno-ep
16697       -mep
16698           Do not optimize (do optimize) basic blocks that use the same index
16699           pointer 4 or more times to copy pointer into the "ep" register, and
16700           use the shorter "sld" and "sst" instructions.  The -mep option is
16701           on by default if you optimize.
16702
16703       -mno-prolog-function
16704       -mprolog-function
16705           Do not use (do use) external functions to save and restore
16706           registers at the prologue and epilogue of a function.  The external
16707           functions are slower, but use less code space if more than one
16708           function saves the same number of registers.  The -mprolog-function
16709           option is on by default if you optimize.
16710
16711       -mspace
16712           Try to make the code as small as possible.  At present, this just
16713           turns on the -mep and -mprolog-function options.
16714
16715       -mtda=n
16716           Put static or global variables whose size is n bytes or less into
16717           the tiny data area that register "ep" points to.  The tiny data
16718           area can hold up to 256 bytes in total (128 bytes for byte
16719           references).
16720
16721       -msda=n
16722           Put static or global variables whose size is n bytes or less into
16723           the small data area that register "gp" points to.  The small data
16724           area can hold up to 64 kilobytes.
16725
16726       -mzda=n
16727           Put static or global variables whose size is n bytes or less into
16728           the first 32 kilobytes of memory.
16729
16730       -mv850
16731           Specify that the target processor is the V850.
16732
16733       -mv850e3v5
16734           Specify that the target processor is the V850E3V5.  The
16735           preprocessor constant __v850e3v5__ is defined if this option is
16736           used.
16737
16738       -mv850e2v4
16739           Specify that the target processor is the V850E3V5.  This is an
16740           alias for the -mv850e3v5 option.
16741
16742       -mv850e2v3
16743           Specify that the target processor is the V850E2V3.  The
16744           preprocessor constant __v850e2v3__ is defined if this option is
16745           used.
16746
16747       -mv850e2
16748           Specify that the target processor is the V850E2.  The preprocessor
16749           constant __v850e2__ is defined if this option is used.
16750
16751       -mv850e1
16752           Specify that the target processor is the V850E1.  The preprocessor
16753           constants __v850e1__ and __v850e__ are defined if this option is
16754           used.
16755
16756       -mv850es
16757           Specify that the target processor is the V850ES.  This is an alias
16758           for the -mv850e1 option.
16759
16760       -mv850e
16761           Specify that the target processor is the V850E.  The preprocessor
16762           constant __v850e__ is defined if this option is used.
16763
16764           If neither -mv850 nor -mv850e nor -mv850e1 nor -mv850e2 nor
16765           -mv850e2v3 nor -mv850e3v5 are defined then a default target
16766           processor is chosen and the relevant __v850*__ preprocessor
16767           constant is defined.
16768
16769           The preprocessor constants __v850 and __v851__ are always defined,
16770           regardless of which processor variant is the target.
16771
16772       -mdisable-callt
16773       -mno-disable-callt
16774           This option suppresses generation of the "CALLT" instruction for
16775           the v850e, v850e1, v850e2, v850e2v3 and v850e3v5 flavors of the
16776           v850 architecture.
16777
16778           This option is enabled by default when the RH850 ABI is in use (see
16779           -mrh850-abi), and disabled by default when the GCC ABI is in use.
16780           If "CALLT" instructions are being generated then the C preprocessor
16781           symbol "__V850_CALLT__" will be defined.
16782
16783       -mrelax
16784       -mno-relax
16785           Pass on (or do not pass on) the -mrelax command line option to the
16786           assembler.
16787
16788       -mlong-jumps
16789       -mno-long-jumps
16790           Disable (or re-enable) the generation of PC-relative jump
16791           instructions.
16792
16793       -msoft-float
16794       -mhard-float
16795           Disable (or re-enable) the generation of hardware floating point
16796           instructions.  This option is only significant when the target
16797           architecture is V850E2V3 or higher.  If hardware floating point
16798           instructions are being generated then the C preprocessor symbol
16799           "__FPU_OK__" will be defined, otherwise the symbol "__NO_FPU__"
16800           will be defined.
16801
16802       -mloop
16803           Enables the use of the e3v5 LOOP instruction.  The use of this
16804           instruction is not enabled by default when the e3v5 architecture is
16805           selected because its use is still experimental.
16806
16807       -mrh850-abi
16808       -mghs
16809           Enables support for the RH850 version of the V850 ABI.  This is the
16810           default.  With this version of the ABI the following rules apply:
16811
16812           ·   Integer sized structures and unions are returned via a memory
16813               pointer rather than a register.
16814
16815           ·   Large structures and unions (more than 8 bytes in size) are
16816               passed by value.
16817
16818           ·   Functions are aligned to 16-bit boundaries.
16819
16820           ·   The -m8byte-align command line option is supported.
16821
16822           ·   The -mdisable-callt command line option is enabled by default.
16823               The -mno-disable-callt command line option is not supported.
16824
16825           When this version of the ABI is enabled the C preprocessor symbol
16826           "__V850_RH850_ABI__" is defined.
16827
16828       -mgcc-abi
16829           Enables support for the old GCC version of the V850 ABI.  With this
16830           version of the ABI the following rules apply:
16831
16832           ·   Integer sized structures and unions are returned in register
16833               "r10".
16834
16835           ·   Large structures and unions (more than 8 bytes in size) are
16836               passed by reference.
16837
16838           ·   Functions are aligned to 32-bit boundaries, unless optimizing
16839               for size.
16840
16841           ·   The -m8byte-align command line option is not supported.
16842
16843           ·   The -mdisable-callt command line option is supported but not
16844               enabled by default.
16845
16846           When this version of the ABI is enabled the C preprocessor symbol
16847           "__V850_GCC_ABI__" is defined.
16848
16849       -m8byte-align
16850       -mno-8byte-align
16851           Enables support for "doubles" and "long long" types to be aligned
16852           on 8-byte boundaries.  The default is to restrict the alignment of
16853           all objects to at most 4-bytes.  When -m8byte-align is in effect
16854           the C preprocessor symbol "__V850_8BYTE_ALIGN__" will be defined.
16855
16856       -mbig-switch
16857           Generate code suitable for big switch tables.  Use this option only
16858           if the assembler/linker complain about out of range branches within
16859           a switch table.
16860
16861       -mapp-regs
16862           This option causes r2 and r5 to be used in the code generated by
16863           the compiler.  This setting is the default.
16864
16865       -mno-app-regs
16866           This option causes r2 and r5 to be treated as fixed registers.
16867
16868   VAX Options
16869       These -m options are defined for the VAX:
16870
16871       -munix
16872           Do not output certain jump instructions ("aobleq" and so on) that
16873           the Unix assembler for the VAX cannot handle across long ranges.
16874
16875       -mgnu
16876           Do output those jump instructions, on the assumption that the GNU
16877           assembler is being used.
16878
16879       -mg Output code for G-format floating-point numbers instead of
16880           D-format.
16881
16882   VMS Options
16883       These -m options are defined for the VMS implementations:
16884
16885       -mvms-return-codes
16886           Return VMS condition codes from "main". The default is to return
16887           POSIX-style condition (e.g. error) codes.
16888
16889       -mdebug-main=prefix
16890           Flag the first routine whose name starts with prefix as the main
16891           routine for the debugger.
16892
16893       -mmalloc64
16894           Default to 64-bit memory allocation routines.
16895
16896       -mpointer-size=size
16897           Set the default size of pointers. Possible options for size are 32
16898           or short for 32 bit pointers, 64 or long for 64 bit pointers, and
16899           no for supporting only 32 bit pointers.  The later option disables
16900           "pragma pointer_size".
16901
16902   VxWorks Options
16903       The options in this section are defined for all VxWorks targets.
16904       Options specific to the target hardware are listed with the other
16905       options for that target.
16906
16907       -mrtp
16908           GCC can generate code for both VxWorks kernels and real time
16909           processes (RTPs).  This option switches from the former to the
16910           latter.  It also defines the preprocessor macro "__RTP__".
16911
16912       -non-static
16913           Link an RTP executable against shared libraries rather than static
16914           libraries.  The options -static and -shared can also be used for
16915           RTPs; -static is the default.
16916
16917       -Bstatic
16918       -Bdynamic
16919           These options are passed down to the linker.  They are defined for
16920           compatibility with Diab.
16921
16922       -Xbind-lazy
16923           Enable lazy binding of function calls.  This option is equivalent
16924           to -Wl,-z,now and is defined for compatibility with Diab.
16925
16926       -Xbind-now
16927           Disable lazy binding of function calls.  This option is the default
16928           and is defined for compatibility with Diab.
16929
16930   x86-64 Options
16931       These are listed under
16932
16933   Xstormy16 Options
16934       These options are defined for Xstormy16:
16935
16936       -msim
16937           Choose startup files and linker script suitable for the simulator.
16938
16939   Xtensa Options
16940       These options are supported for Xtensa targets:
16941
16942       -mconst16
16943       -mno-const16
16944           Enable or disable use of "CONST16" instructions for loading
16945           constant values.  The "CONST16" instruction is currently not a
16946           standard option from Tensilica.  When enabled, "CONST16"
16947           instructions are always used in place of the standard "L32R"
16948           instructions.  The use of "CONST16" is enabled by default only if
16949           the "L32R" instruction is not available.
16950
16951       -mfused-madd
16952       -mno-fused-madd
16953           Enable or disable use of fused multiply/add and multiply/subtract
16954           instructions in the floating-point option.  This has no effect if
16955           the floating-point option is not also enabled.  Disabling fused
16956           multiply/add and multiply/subtract instructions forces the compiler
16957           to use separate instructions for the multiply and add/subtract
16958           operations.  This may be desirable in some cases where strict IEEE
16959           754-compliant results are required: the fused multiply add/subtract
16960           instructions do not round the intermediate result, thereby
16961           producing results with more bits of precision than specified by the
16962           IEEE standard.  Disabling fused multiply add/subtract instructions
16963           also ensures that the program output is not sensitive to the
16964           compiler's ability to combine multiply and add/subtract operations.
16965
16966       -mserialize-volatile
16967       -mno-serialize-volatile
16968           When this option is enabled, GCC inserts "MEMW" instructions before
16969           "volatile" memory references to guarantee sequential consistency.
16970           The default is -mserialize-volatile.  Use -mno-serialize-volatile
16971           to omit the "MEMW" instructions.
16972
16973       -mforce-no-pic
16974           For targets, like GNU/Linux, where all user-mode Xtensa code must
16975           be position-independent code (PIC), this option disables PIC for
16976           compiling kernel code.
16977
16978       -mtext-section-literals
16979       -mno-text-section-literals
16980           Control the treatment of literal pools.  The default is
16981           -mno-text-section-literals, which places literals in a separate
16982           section in the output file.  This allows the literal pool to be
16983           placed in a data RAM/ROM, and it also allows the linker to combine
16984           literal pools from separate object files to remove redundant
16985           literals and improve code size.  With -mtext-section-literals, the
16986           literals are interspersed in the text section in order to keep them
16987           as close as possible to their references.  This may be necessary
16988           for large assembly files.
16989
16990       -mtarget-align
16991       -mno-target-align
16992           When this option is enabled, GCC instructs the assembler to
16993           automatically align instructions to reduce branch penalties at the
16994           expense of some code density.  The assembler attempts to widen
16995           density instructions to align branch targets and the instructions
16996           following call instructions.  If there are not enough preceding
16997           safe density instructions to align a target, no widening is
16998           performed.  The default is -mtarget-align.  These options do not
16999           affect the treatment of auto-aligned instructions like "LOOP",
17000           which the assembler always aligns, either by widening density
17001           instructions or by inserting NOP instructions.
17002
17003       -mlongcalls
17004       -mno-longcalls
17005           When this option is enabled, GCC instructs the assembler to
17006           translate direct calls to indirect calls unless it can determine
17007           that the target of a direct call is in the range allowed by the
17008           call instruction.  This translation typically occurs for calls to
17009           functions in other source files.  Specifically, the assembler
17010           translates a direct "CALL" instruction into an "L32R" followed by a
17011           "CALLX" instruction.  The default is -mno-longcalls.  This option
17012           should be used in programs where the call target can potentially be
17013           out of range.  This option is implemented in the assembler, not the
17014           compiler, so the assembly code generated by GCC still shows direct
17015           call instructions---look at the disassembled object code to see the
17016           actual instructions.  Note that the assembler uses an indirect call
17017           for every cross-file call, not just those that really are out of
17018           range.
17019
17020   zSeries Options
17021       These are listed under
17022
17023   Options for Code Generation Conventions
17024       These machine-independent options control the interface conventions
17025       used in code generation.
17026
17027       Most of them have both positive and negative forms; the negative form
17028       of -ffoo is -fno-foo.  In the table below, only one of the forms is
17029       listed---the one that is not the default.  You can figure out the other
17030       form by either removing no- or adding it.
17031
17032       -fbounds-check
17033           For front ends that support it, generate additional code to check
17034           that indices used to access arrays are within the declared range.
17035           This is currently only supported by the Java and Fortran front
17036           ends, where this option defaults to true and false respectively.
17037
17038       -fstack-reuse=reuse-level
17039           This option controls stack space reuse for user declared local/auto
17040           variables and compiler generated temporaries.  reuse_level can be
17041           all, named_vars, or none. all enables stack reuse for all local
17042           variables and temporaries, named_vars enables the reuse only for
17043           user defined local variables with names, and none disables stack
17044           reuse completely. The default value is all. The option is needed
17045           when the program extends the lifetime of a scoped local variable or
17046           a compiler generated temporary beyond the end point defined by the
17047           language.  When a lifetime of a variable ends, and if the variable
17048           lives in memory, the optimizing compiler has the freedom to reuse
17049           its stack space with other temporaries or scoped local variables
17050           whose live range does not overlap with it. Legacy code extending
17051           local lifetime will likely to break with the stack reuse
17052           optimization.
17053
17054           For example,
17055
17056                      int *p;
17057                      {
17058                        int local1;
17059
17060                        p = &local1;
17061                        local1 = 10;
17062                        ....
17063                      }
17064                      {
17065                         int local2;
17066                         local2 = 20;
17067                         ...
17068                      }
17069
17070                      if (*p == 10)  // out of scope use of local1
17071                        {
17072
17073                        }
17074
17075           Another example:
17076
17077                      struct A
17078                      {
17079                          A(int k) : i(k), j(k) { }
17080                          int i;
17081                          int j;
17082                      };
17083
17084                      A *ap;
17085
17086                      void foo(const A& ar)
17087                      {
17088                         ap = &ar;
17089                      }
17090
17091                      void bar()
17092                      {
17093                         foo(A(10)); // temp object's lifetime ends when foo returns
17094
17095                         {
17096                           A a(20);
17097                           ....
17098                         }
17099                         ap->i+= 10;  // ap references out of scope temp whose space
17100                                      // is reused with a. What is the value of ap->i?
17101                      }
17102
17103           The lifetime of a compiler generated temporary is well defined by
17104           the C++ standard. When a lifetime of a temporary ends, and if the
17105           temporary lives in memory, the optimizing compiler has the freedom
17106           to reuse its stack space with other temporaries or scoped local
17107           variables whose live range does not overlap with it. However some
17108           of the legacy code relies on the behavior of older compilers in
17109           which temporaries' stack space is not reused, the aggressive stack
17110           reuse can lead to runtime errors. This option is used to control
17111           the temporary stack reuse optimization.
17112
17113       -ftrapv
17114           This option generates traps for signed overflow on addition,
17115           subtraction, multiplication operations.
17116
17117       -fwrapv
17118           This option instructs the compiler to assume that signed arithmetic
17119           overflow of addition, subtraction and multiplication wraps around
17120           using twos-complement representation.  This flag enables some
17121           optimizations and disables others.  This option is enabled by
17122           default for the Java front end, as required by the Java language
17123           specification.
17124
17125       -fexceptions
17126           Enable exception handling.  Generates extra code needed to
17127           propagate exceptions.  For some targets, this implies GCC generates
17128           frame unwind information for all functions, which can produce
17129           significant data size overhead, although it does not affect
17130           execution.  If you do not specify this option, GCC enables it by
17131           default for languages like C++ that normally require exception
17132           handling, and disables it for languages like C that do not normally
17133           require it.  However, you may need to enable this option when
17134           compiling C code that needs to interoperate properly with exception
17135           handlers written in C++.  You may also wish to disable this option
17136           if you are compiling older C++ programs that don't use exception
17137           handling.
17138
17139       -fnon-call-exceptions
17140           Generate code that allows trapping instructions to throw
17141           exceptions.  Note that this requires platform-specific runtime
17142           support that does not exist everywhere.  Moreover, it only allows
17143           trapping instructions to throw exceptions, i.e. memory references
17144           or floating-point instructions.  It does not allow exceptions to be
17145           thrown from arbitrary signal handlers such as "SIGALRM".
17146
17147       -fdelete-dead-exceptions
17148           Consider that instructions that may throw exceptions but don't
17149           otherwise contribute to the execution of the program can be
17150           optimized away.  This option is enabled by default for the Ada
17151           front end, as permitted by the Ada language specification.
17152           Optimization passes that cause dead exceptions to be removed are
17153           enabled independently at different optimization levels.
17154
17155       -funwind-tables
17156           Similar to -fexceptions, except that it just generates any needed
17157           static data, but does not affect the generated code in any other
17158           way.  You normally do not need to enable this option; instead, a
17159           language processor that needs this handling enables it on your
17160           behalf.
17161
17162       -fasynchronous-unwind-tables
17163           Generate unwind table in DWARF 2 format, if supported by target
17164           machine.  The table is exact at each instruction boundary, so it
17165           can be used for stack unwinding from asynchronous events (such as
17166           debugger or garbage collector).
17167
17168       -fno-gnu-unique
17169           On systems with recent GNU assembler and C library, the C++
17170           compiler uses the "STB_GNU_UNIQUE" binding to make sure that
17171           definitions of template static data members and static local
17172           variables in inline functions are unique even in the presence of
17173           "RTLD_LOCAL"; this is necessary to avoid problems with a library
17174           used by two different "RTLD_LOCAL" plugins depending on a
17175           definition in one of them and therefore disagreeing with the other
17176           one about the binding of the symbol.  But this causes "dlclose" to
17177           be ignored for affected DSOs; if your program relies on
17178           reinitialization of a DSO via "dlclose" and "dlopen", you can use
17179           -fno-gnu-unique.
17180
17181       -fpcc-struct-return
17182           Return "short" "struct" and "union" values in memory like longer
17183           ones, rather than in registers.  This convention is less efficient,
17184           but it has the advantage of allowing intercallability between GCC-
17185           compiled files and files compiled with other compilers,
17186           particularly the Portable C Compiler (pcc).
17187
17188           The precise convention for returning structures in memory depends
17189           on the target configuration macros.
17190
17191           Short structures and unions are those whose size and alignment
17192           match that of some integer type.
17193
17194           Warning: code compiled with the -fpcc-struct-return switch is not
17195           binary compatible with code compiled with the -freg-struct-return
17196           switch.  Use it to conform to a non-default application binary
17197           interface.
17198
17199       -freg-struct-return
17200           Return "struct" and "union" values in registers when possible.
17201           This is more efficient for small structures than
17202           -fpcc-struct-return.
17203
17204           If you specify neither -fpcc-struct-return nor -freg-struct-return,
17205           GCC defaults to whichever convention is standard for the target.
17206           If there is no standard convention, GCC defaults to
17207           -fpcc-struct-return, except on targets where GCC is the principal
17208           compiler.  In those cases, we can choose the standard, and we chose
17209           the more efficient register return alternative.
17210
17211           Warning: code compiled with the -freg-struct-return switch is not
17212           binary compatible with code compiled with the -fpcc-struct-return
17213           switch.  Use it to conform to a non-default application binary
17214           interface.
17215
17216       -fshort-enums
17217           Allocate to an "enum" type only as many bytes as it needs for the
17218           declared range of possible values.  Specifically, the "enum" type
17219           is equivalent to the smallest integer type that has enough room.
17220
17221           Warning: the -fshort-enums switch causes GCC to generate code that
17222           is not binary compatible with code generated without that switch.
17223           Use it to conform to a non-default application binary interface.
17224
17225       -fshort-double
17226           Use the same size for "double" as for "float".
17227
17228           Warning: the -fshort-double switch causes GCC to generate code that
17229           is not binary compatible with code generated without that switch.
17230           Use it to conform to a non-default application binary interface.
17231
17232       -fshort-wchar
17233           Override the underlying type for wchar_t to be short unsigned int
17234           instead of the default for the target.  This option is useful for
17235           building programs to run under WINE.
17236
17237           Warning: the -fshort-wchar switch causes GCC to generate code that
17238           is not binary compatible with code generated without that switch.
17239           Use it to conform to a non-default application binary interface.
17240
17241       -fno-common
17242           In C code, controls the placement of uninitialized global
17243           variables.  Unix C compilers have traditionally permitted multiple
17244           definitions of such variables in different compilation units by
17245           placing the variables in a common block.  This is the behavior
17246           specified by -fcommon, and is the default for GCC on most targets.
17247           On the other hand, this behavior is not required by ISO C, and on
17248           some targets may carry a speed or code size penalty on variable
17249           references.  The -fno-common option specifies that the compiler
17250           should place uninitialized global variables in the data section of
17251           the object file, rather than generating them as common blocks.
17252           This has the effect that if the same variable is declared (without
17253           "extern") in two different compilations, you get a multiple-
17254           definition error when you link them.  In this case, you must
17255           compile with -fcommon instead.  Compiling with -fno-common is
17256           useful on targets for which it provides better performance, or if
17257           you wish to verify that the program will work on other systems that
17258           always treat uninitialized variable declarations this way.
17259
17260       -fno-ident
17261           Ignore the #ident directive.
17262
17263       -finhibit-size-directive
17264           Don't output a ".size" assembler directive, or anything else that
17265           would cause trouble if the function is split in the middle, and the
17266           two halves are placed at locations far apart in memory.  This
17267           option is used when compiling crtstuff.c; you should not need to
17268           use it for anything else.
17269
17270       -fverbose-asm
17271           Put extra commentary information in the generated assembly code to
17272           make it more readable.  This option is generally only of use to
17273           those who actually need to read the generated assembly code
17274           (perhaps while debugging the compiler itself).
17275
17276           -fno-verbose-asm, the default, causes the extra information to be
17277           omitted and is useful when comparing two assembler files.
17278
17279       -frecord-gcc-switches
17280           This switch causes the command line used to invoke the compiler to
17281           be recorded into the object file that is being created.  This
17282           switch is only implemented on some targets and the exact format of
17283           the recording is target and binary file format dependent, but it
17284           usually takes the form of a section containing ASCII text.  This
17285           switch is related to the -fverbose-asm switch, but that switch only
17286           records information in the assembler output file as comments, so it
17287           never reaches the object file.  See also -grecord-gcc-switches for
17288           another way of storing compiler options into the object file.
17289
17290       -fpic
17291           Generate position-independent code (PIC) suitable for use in a
17292           shared library, if supported for the target machine.  Such code
17293           accesses all constant addresses through a global offset table
17294           (GOT).  The dynamic loader resolves the GOT entries when the
17295           program starts (the dynamic loader is not part of GCC; it is part
17296           of the operating system).  If the GOT size for the linked
17297           executable exceeds a machine-specific maximum size, you get an
17298           error message from the linker indicating that -fpic does not work;
17299           in that case, recompile with -fPIC instead.  (These maximums are 8k
17300           on the SPARC and 32k on the m68k and RS/6000.  The 386 has no such
17301           limit.)
17302
17303           Position-independent code requires special support, and therefore
17304           works only on certain machines.  For the 386, GCC supports PIC for
17305           System V but not for the Sun 386i.  Code generated for the IBM
17306           RS/6000 is always position-independent.
17307
17308           When this flag is set, the macros "__pic__" and "__PIC__" are
17309           defined to 1.
17310
17311       -fPIC
17312           If supported for the target machine, emit position-independent
17313           code, suitable for dynamic linking and avoiding any limit on the
17314           size of the global offset table.  This option makes a difference on
17315           the m68k, PowerPC and SPARC.
17316
17317           Position-independent code requires special support, and therefore
17318           works only on certain machines.
17319
17320           When this flag is set, the macros "__pic__" and "__PIC__" are
17321           defined to 2.
17322
17323       -fpie
17324       -fPIE
17325           These options are similar to -fpic and -fPIC, but generated
17326           position independent code can be only linked into executables.
17327           Usually these options are used when -pie GCC option is used during
17328           linking.
17329
17330           -fpie and -fPIE both define the macros "__pie__" and "__PIE__".
17331           The macros have the value 1 for -fpie and 2 for -fPIE.
17332
17333       -fno-jump-tables
17334           Do not use jump tables for switch statements even where it would be
17335           more efficient than other code generation strategies.  This option
17336           is of use in conjunction with -fpic or -fPIC for building code that
17337           forms part of a dynamic linker and cannot reference the address of
17338           a jump table.  On some targets, jump tables do not require a GOT
17339           and this option is not needed.
17340
17341       -ffixed-reg
17342           Treat the register named reg as a fixed register; generated code
17343           should never refer to it (except perhaps as a stack pointer, frame
17344           pointer or in some other fixed role).
17345
17346           reg must be the name of a register.  The register names accepted
17347           are machine-specific and are defined in the "REGISTER_NAMES" macro
17348           in the machine description macro file.
17349
17350           This flag does not have a negative form, because it specifies a
17351           three-way choice.
17352
17353       -fcall-used-reg
17354           Treat the register named reg as an allocable register that is
17355           clobbered by function calls.  It may be allocated for temporaries
17356           or variables that do not live across a call.  Functions compiled
17357           this way do not save and restore the register reg.
17358
17359           It is an error to use this flag with the frame pointer or stack
17360           pointer.  Use of this flag for other registers that have fixed
17361           pervasive roles in the machine's execution model produces
17362           disastrous results.
17363
17364           This flag does not have a negative form, because it specifies a
17365           three-way choice.
17366
17367       -fcall-saved-reg
17368           Treat the register named reg as an allocable register saved by
17369           functions.  It may be allocated even for temporaries or variables
17370           that live across a call.  Functions compiled this way save and
17371           restore the register reg if they use it.
17372
17373           It is an error to use this flag with the frame pointer or stack
17374           pointer.  Use of this flag for other registers that have fixed
17375           pervasive roles in the machine's execution model produces
17376           disastrous results.
17377
17378           A different sort of disaster results from the use of this flag for
17379           a register in which function values may be returned.
17380
17381           This flag does not have a negative form, because it specifies a
17382           three-way choice.
17383
17384       -fpack-struct[=n]
17385           Without a value specified, pack all structure members together
17386           without holes.  When a value is specified (which must be a small
17387           power of two), pack structure members according to this value,
17388           representing the maximum alignment (that is, objects with default
17389           alignment requirements larger than this are output potentially
17390           unaligned at the next fitting location.
17391
17392           Warning: the -fpack-struct switch causes GCC to generate code that
17393           is not binary compatible with code generated without that switch.
17394           Additionally, it makes the code suboptimal.  Use it to conform to a
17395           non-default application binary interface.
17396
17397       -finstrument-functions
17398           Generate instrumentation calls for entry and exit to functions.
17399           Just after function entry and just before function exit, the
17400           following profiling functions are called with the address of the
17401           current function and its call site.  (On some platforms,
17402           "__builtin_return_address" does not work beyond the current
17403           function, so the call site information may not be available to the
17404           profiling functions otherwise.)
17405
17406                   void __cyg_profile_func_enter (void *this_fn,
17407                                                  void *call_site);
17408                   void __cyg_profile_func_exit  (void *this_fn,
17409                                                  void *call_site);
17410
17411           The first argument is the address of the start of the current
17412           function, which may be looked up exactly in the symbol table.
17413
17414           This instrumentation is also done for functions expanded inline in
17415           other functions.  The profiling calls indicate where, conceptually,
17416           the inline function is entered and exited.  This means that
17417           addressable versions of such functions must be available.  If all
17418           your uses of a function are expanded inline, this may mean an
17419           additional expansion of code size.  If you use extern inline in
17420           your C code, an addressable version of such functions must be
17421           provided.  (This is normally the case anyway, but if you get lucky
17422           and the optimizer always expands the functions inline, you might
17423           have gotten away without providing static copies.)
17424
17425           A function may be given the attribute "no_instrument_function", in
17426           which case this instrumentation is not done.  This can be used, for
17427           example, for the profiling functions listed above, high-priority
17428           interrupt routines, and any functions from which the profiling
17429           functions cannot safely be called (perhaps signal handlers, if the
17430           profiling routines generate output or allocate memory).
17431
17432       -finstrument-functions-exclude-file-list=file,file,...
17433           Set the list of functions that are excluded from instrumentation
17434           (see the description of "-finstrument-functions").  If the file
17435           that contains a function definition matches with one of file, then
17436           that function is not instrumented.  The match is done on
17437           substrings: if the file parameter is a substring of the file name,
17438           it is considered to be a match.
17439
17440           For example:
17441
17442                   -finstrument-functions-exclude-file-list=/bits/stl,include/sys
17443
17444           excludes any inline function defined in files whose pathnames
17445           contain "/bits/stl" or "include/sys".
17446
17447           If, for some reason, you want to include letter ',' in one of sym,
17448           write ','. For example,
17449           "-finstrument-functions-exclude-file-list=',,tmp'" (note the single
17450           quote surrounding the option).
17451
17452       -finstrument-functions-exclude-function-list=sym,sym,...
17453           This is similar to "-finstrument-functions-exclude-file-list", but
17454           this option sets the list of function names to be excluded from
17455           instrumentation.  The function name to be matched is its user-
17456           visible name, such as "vector<int> blah(const vector<int> &)", not
17457           the internal mangled name (e.g., "_Z4blahRSt6vectorIiSaIiEE").  The
17458           match is done on substrings: if the sym parameter is a substring of
17459           the function name, it is considered to be a match.  For C99 and C++
17460           extended identifiers, the function name must be given in UTF-8, not
17461           using universal character names.
17462
17463       -fstack-check
17464           Generate code to verify that you do not go beyond the boundary of
17465           the stack.  You should specify this flag if you are running in an
17466           environment with multiple threads, but you only rarely need to
17467           specify it in a single-threaded environment since stack overflow is
17468           automatically detected on nearly all systems if there is only one
17469           stack.
17470
17471           Note that this switch does not actually cause checking to be done;
17472           the operating system or the language runtime must do that.  The
17473           switch causes generation of code to ensure that they see the stack
17474           being extended.
17475
17476           You can additionally specify a string parameter: "no" means no
17477           checking, "generic" means force the use of old-style checking,
17478           "specific" means use the best checking method and is equivalent to
17479           bare -fstack-check.
17480
17481           Old-style checking is a generic mechanism that requires no specific
17482           target support in the compiler but comes with the following
17483           drawbacks:
17484
17485           1.  Modified allocation strategy for large objects: they are always
17486               allocated dynamically if their size exceeds a fixed threshold.
17487               Note this may change the semantics of some code.
17488
17489           2.  Fixed limit on the size of the static frame of functions: when
17490               it is topped by a particular function, stack checking is not
17491               reliable and a warning is issued by the compiler.
17492
17493           3.  Inefficiency: because of both the modified allocation strategy
17494               and the generic implementation, code performance is hampered.
17495
17496           Note that old-style stack checking is also the fallback method for
17497           "specific" if no target support has been added in the compiler.
17498
17499           -fstack-check= is designed for Ada's needs to detect infinite
17500           recursion and stack overflows.  specific is an excellent choice
17501           when compiling Ada code.  It is not generally sufficient to protect
17502           against stack-clash attacks.  To protect against those you want
17503           -fstack-clash-protection.
17504
17505       -fstack-clash-protection
17506           Generate code to prevent stack clash style attacks.  When this
17507           option is enabled, the compiler will only allocate one page of
17508           stack space at a time and each page is accessed immediately after
17509           allocation.  Thus, it prevents allocations from jumping over any
17510           stack guard page provided by the operating system.
17511
17512           Most targets do not fully support stack clash protection.  However,
17513           on those targets -fstack-clash-protection will protect dynamic
17514           stack allocations.  -fstack-clash-protection may also provide
17515           limited protection for static stack allocations if the target
17516           supports -fstack-check=specific.
17517
17518       -fstack-limit-register=reg
17519       -fstack-limit-symbol=sym
17520       -fno-stack-limit
17521           Generate code to ensure that the stack does not grow beyond a
17522           certain value, either the value of a register or the address of a
17523           symbol.  If a larger stack is required, a signal is raised at run
17524           time.  For most targets, the signal is raised before the stack
17525           overruns the boundary, so it is possible to catch the signal
17526           without taking special precautions.
17527
17528           For instance, if the stack starts at absolute address 0x80000000
17529           and grows downwards, you can use the flags
17530           -fstack-limit-symbol=__stack_limit and
17531           -Wl,--defsym,__stack_limit=0x7ffe0000 to enforce a stack limit of
17532           128KB.  Note that this may only work with the GNU linker.
17533
17534       -fsplit-stack
17535           Generate code to automatically split the stack before it overflows.
17536           The resulting program has a discontiguous stack which can only
17537           overflow if the program is unable to allocate any more memory.
17538           This is most useful when running threaded programs, as it is no
17539           longer necessary to calculate a good stack size to use for each
17540           thread.  This is currently only implemented for the i386 and x86_64
17541           back ends running GNU/Linux.
17542
17543           When code compiled with -fsplit-stack calls code compiled without
17544           -fsplit-stack, there may not be much stack space available for the
17545           latter code to run.  If compiling all code, including library code,
17546           with -fsplit-stack is not an option, then the linker can fix up
17547           these calls so that the code compiled without -fsplit-stack always
17548           has a large stack.  Support for this is implemented in the gold
17549           linker in GNU binutils release 2.21 and later.
17550
17551       -fleading-underscore
17552           This option and its counterpart, -fno-leading-underscore, forcibly
17553           change the way C symbols are represented in the object file.  One
17554           use is to help link with legacy assembly code.
17555
17556           Warning: the -fleading-underscore switch causes GCC to generate
17557           code that is not binary compatible with code generated without that
17558           switch.  Use it to conform to a non-default application binary
17559           interface.  Not all targets provide complete support for this
17560           switch.
17561
17562       -ftls-model=model
17563           Alter the thread-local storage model to be used.  The model
17564           argument should be one of "global-dynamic", "local-dynamic",
17565           "initial-exec" or "local-exec".
17566
17567           The default without -fpic is "initial-exec"; with -fpic the default
17568           is "global-dynamic".
17569
17570       -fvisibility=default|internal|hidden|protected
17571           Set the default ELF image symbol visibility to the specified
17572           option---all symbols are marked with this unless overridden within
17573           the code.  Using this feature can very substantially improve
17574           linking and load times of shared object libraries, produce more
17575           optimized code, provide near-perfect API export and prevent symbol
17576           clashes.  It is strongly recommended that you use this in any
17577           shared objects you distribute.
17578
17579           Despite the nomenclature, "default" always means public; i.e.,
17580           available to be linked against from outside the shared object.
17581           "protected" and "internal" are pretty useless in real-world usage
17582           so the only other commonly used option is "hidden".  The default if
17583           -fvisibility isn't specified is "default", i.e., make every symbol
17584           public---this causes the same behavior as previous versions of GCC.
17585
17586           A good explanation of the benefits offered by ensuring ELF symbols
17587           have the correct visibility is given by "How To Write Shared
17588           Libraries" by Ulrich Drepper (which can be found at
17589           <http://people.redhat.com/~drepper/>)---however a superior solution
17590           made possible by this option to marking things hidden when the
17591           default is public is to make the default hidden and mark things
17592           public.  This is the norm with DLLs on Windows and with
17593           -fvisibility=hidden and "__attribute__ ((visibility("default")))"
17594           instead of "__declspec(dllexport)" you get almost identical
17595           semantics with identical syntax.  This is a great boon to those
17596           working with cross-platform projects.
17597
17598           For those adding visibility support to existing code, you may find
17599           #pragma GCC visibility of use.  This works by you enclosing the
17600           declarations you wish to set visibility for with (for example)
17601           #pragma GCC visibility push(hidden) and #pragma GCC visibility pop.
17602           Bear in mind that symbol visibility should be viewed as part of the
17603           API interface contract and thus all new code should always specify
17604           visibility when it is not the default; i.e., declarations only for
17605           use within the local DSO should always be marked explicitly as
17606           hidden as so to avoid PLT indirection overheads---making this
17607           abundantly clear also aids readability and self-documentation of
17608           the code.  Note that due to ISO C++ specification requirements,
17609           "operator new" and "operator delete" must always be of default
17610           visibility.
17611
17612           Be aware that headers from outside your project, in particular
17613           system headers and headers from any other library you use, may not
17614           be expecting to be compiled with visibility other than the default.
17615           You may need to explicitly say #pragma GCC visibility push(default)
17616           before including any such headers.
17617
17618           extern declarations are not affected by -fvisibility, so a lot of
17619           code can be recompiled with -fvisibility=hidden with no
17620           modifications.  However, this means that calls to "extern"
17621           functions with no explicit visibility use the PLT, so it is more
17622           effective to use "__attribute ((visibility))" and/or "#pragma GCC
17623           visibility" to tell the compiler which "extern" declarations should
17624           be treated as hidden.
17625
17626           Note that -fvisibility does affect C++ vague linkage entities. This
17627           means that, for instance, an exception class that is be thrown
17628           between DSOs must be explicitly marked with default visibility so
17629           that the type_info nodes are unified between the DSOs.
17630
17631           An overview of these techniques, their benefits and how to use them
17632           is at <http://gcc.gnu.org/wiki/Visibility>.
17633
17634       -fstrict-volatile-bitfields
17635           This option should be used if accesses to volatile bit-fields (or
17636           other structure fields, although the compiler usually honors those
17637           types anyway) should use a single access of the width of the
17638           field's type, aligned to a natural alignment if possible.  For
17639           example, targets with memory-mapped peripheral registers might
17640           require all such accesses to be 16 bits wide; with this flag you
17641           can declare all peripheral bit-fields as "unsigned short" (assuming
17642           short is 16 bits on these targets) to force GCC to use 16-bit
17643           accesses instead of, perhaps, a more efficient 32-bit access.
17644
17645           If this option is disabled, the compiler uses the most efficient
17646           instruction.  In the previous example, that might be a 32-bit load
17647           instruction, even though that accesses bytes that do not contain
17648           any portion of the bit-field, or memory-mapped registers unrelated
17649           to the one being updated.
17650
17651           If the target requires strict alignment, and honoring the field
17652           type would require violating this alignment, a warning is issued.
17653           If the field has "packed" attribute, the access is done without
17654           honoring the field type.  If the field doesn't have "packed"
17655           attribute, the access is done honoring the field type.  In both
17656           cases, GCC assumes that the user knows something about the target
17657           hardware that it is unaware of.
17658
17659           The default value of this option is determined by the application
17660           binary interface for the target processor.
17661
17662       -fsync-libcalls
17663           This option controls whether any out-of-line instance of the
17664           "__sync" family of functions may be used to implement the C++11
17665           "__atomic" family of functions.
17666
17667           The default value of this option is enabled, thus the only useful
17668           form of the option is -fno-sync-libcalls.  This option is used in
17669           the implementation of the libatomic runtime library.
17670

ENVIRONMENT

17672       This section describes several environment variables that affect how
17673       GCC operates.  Some of them work by specifying directories or prefixes
17674       to use when searching for various kinds of files.  Some are used to
17675       specify other aspects of the compilation environment.
17676
17677       Note that you can also specify places to search using options such as
17678       -B, -I and -L.  These take precedence over places specified using
17679       environment variables, which in turn take precedence over those
17680       specified by the configuration of GCC.
17681
17682       LANG
17683       LC_CTYPE
17684       LC_MESSAGES
17685       LC_ALL
17686           These environment variables control the way that GCC uses
17687           localization information which allows GCC to work with different
17688           national conventions.  GCC inspects the locale categories LC_CTYPE
17689           and LC_MESSAGES if it has been configured to do so.  These locale
17690           categories can be set to any value supported by your installation.
17691           A typical value is en_GB.UTF-8 for English in the United Kingdom
17692           encoded in UTF-8.
17693
17694           The LC_CTYPE environment variable specifies character
17695           classification.  GCC uses it to determine the character boundaries
17696           in a string; this is needed for some multibyte encodings that
17697           contain quote and escape characters that are otherwise interpreted
17698           as a string end or escape.
17699
17700           The LC_MESSAGES environment variable specifies the language to use
17701           in diagnostic messages.
17702
17703           If the LC_ALL environment variable is set, it overrides the value
17704           of LC_CTYPE and LC_MESSAGES; otherwise, LC_CTYPE and LC_MESSAGES
17705           default to the value of the LANG environment variable.  If none of
17706           these variables are set, GCC defaults to traditional C English
17707           behavior.
17708
17709       TMPDIR
17710           If TMPDIR is set, it specifies the directory to use for temporary
17711           files.  GCC uses temporary files to hold the output of one stage of
17712           compilation which is to be used as input to the next stage: for
17713           example, the output of the preprocessor, which is the input to the
17714           compiler proper.
17715
17716       GCC_COMPARE_DEBUG
17717           Setting GCC_COMPARE_DEBUG is nearly equivalent to passing
17718           -fcompare-debug to the compiler driver.  See the documentation of
17719           this option for more details.
17720
17721       GCC_EXEC_PREFIX
17722           If GCC_EXEC_PREFIX is set, it specifies a prefix to use in the
17723           names of the subprograms executed by the compiler.  No slash is
17724           added when this prefix is combined with the name of a subprogram,
17725           but you can specify a prefix that ends with a slash if you wish.
17726
17727           If GCC_EXEC_PREFIX is not set, GCC attempts to figure out an
17728           appropriate prefix to use based on the pathname it is invoked with.
17729
17730           If GCC cannot find the subprogram using the specified prefix, it
17731           tries looking in the usual places for the subprogram.
17732
17733           The default value of GCC_EXEC_PREFIX is prefix/lib/gcc/ where
17734           prefix is the prefix to the installed compiler. In many cases
17735           prefix is the value of "prefix" when you ran the configure script.
17736
17737           Other prefixes specified with -B take precedence over this prefix.
17738
17739           This prefix is also used for finding files such as crt0.o that are
17740           used for linking.
17741
17742           In addition, the prefix is used in an unusual way in finding the
17743           directories to search for header files.  For each of the standard
17744           directories whose name normally begins with /usr/local/lib/gcc
17745           (more precisely, with the value of GCC_INCLUDE_DIR), GCC tries
17746           replacing that beginning with the specified prefix to produce an
17747           alternate directory name.  Thus, with -Bfoo/, GCC searches foo/bar
17748           just before it searches the standard directory /usr/local/lib/bar.
17749           If a standard directory begins with the configured prefix then the
17750           value of prefix is replaced by GCC_EXEC_PREFIX when looking for
17751           header files.
17752
17753       COMPILER_PATH
17754           The value of COMPILER_PATH is a colon-separated list of
17755           directories, much like PATH.  GCC tries the directories thus
17756           specified when searching for subprograms, if it can't find the
17757           subprograms using GCC_EXEC_PREFIX.
17758
17759       LIBRARY_PATH
17760           The value of LIBRARY_PATH is a colon-separated list of directories,
17761           much like PATH.  When configured as a native compiler, GCC tries
17762           the directories thus specified when searching for special linker
17763           files, if it can't find them using GCC_EXEC_PREFIX.  Linking using
17764           GCC also uses these directories when searching for ordinary
17765           libraries for the -l option (but directories specified with -L come
17766           first).
17767
17768       LANG
17769           This variable is used to pass locale information to the compiler.
17770           One way in which this information is used is to determine the
17771           character set to be used when character literals, string literals
17772           and comments are parsed in C and C++.  When the compiler is
17773           configured to allow multibyte characters, the following values for
17774           LANG are recognized:
17775
17776           C-JIS
17777               Recognize JIS characters.
17778
17779           C-SJIS
17780               Recognize SJIS characters.
17781
17782           C-EUCJP
17783               Recognize EUCJP characters.
17784
17785           If LANG is not defined, or if it has some other value, then the
17786           compiler uses "mblen" and "mbtowc" as defined by the default locale
17787           to recognize and translate multibyte characters.
17788
17789       Some additional environment variables affect the behavior of the
17790       preprocessor.
17791
17792       CPATH
17793       C_INCLUDE_PATH
17794       CPLUS_INCLUDE_PATH
17795       OBJC_INCLUDE_PATH
17796           Each variable's value is a list of directories separated by a
17797           special character, much like PATH, in which to look for header
17798           files.  The special character, "PATH_SEPARATOR", is target-
17799           dependent and determined at GCC build time.  For Microsoft Windows-
17800           based targets it is a semicolon, and for almost all other targets
17801           it is a colon.
17802
17803           CPATH specifies a list of directories to be searched as if
17804           specified with -I, but after any paths given with -I options on the
17805           command line.  This environment variable is used regardless of
17806           which language is being preprocessed.
17807
17808           The remaining environment variables apply only when preprocessing
17809           the particular language indicated.  Each specifies a list of
17810           directories to be searched as if specified with -isystem, but after
17811           any paths given with -isystem options on the command line.
17812
17813           In all these variables, an empty element instructs the compiler to
17814           search its current working directory.  Empty elements can appear at
17815           the beginning or end of a path.  For instance, if the value of
17816           CPATH is ":/special/include", that has the same effect as
17817           -I. -I/special/include.
17818
17819       DEPENDENCIES_OUTPUT
17820           If this variable is set, its value specifies how to output
17821           dependencies for Make based on the non-system header files
17822           processed by the compiler.  System header files are ignored in the
17823           dependency output.
17824
17825           The value of DEPENDENCIES_OUTPUT can be just a file name, in which
17826           case the Make rules are written to that file, guessing the target
17827           name from the source file name.  Or the value can have the form
17828           file target, in which case the rules are written to file file using
17829           target as the target name.
17830
17831           In other words, this environment variable is equivalent to
17832           combining the options -MM and -MF, with an optional -MT switch too.
17833
17834       SUNPRO_DEPENDENCIES
17835           This variable is the same as DEPENDENCIES_OUTPUT (see above),
17836           except that system header files are not ignored, so it implies -M
17837           rather than -MM.  However, the dependence on the main input file is
17838           omitted.
17839

BUGS

17841       For instructions on reporting bugs, see
17842       <http://bugzilla.redhat.com/bugzilla>.
17843

FOOTNOTES

17845       1.  On some systems, gcc -shared needs to build supplementary stub code
17846           for constructors to work.  On multi-libbed systems, gcc -shared
17847           must select the correct support libraries to link against.  Failing
17848           to supply the correct flags may lead to subtle defects.  Supplying
17849           them in cases where they are not necessary is innocuous.
17850

SEE ALSO

17852       gpl(7), gfdl(7), fsf-funding(7), cpp(1), gcov(1), as(1), ld(1), gdb(1),
17853       adb(1), dbx(1), sdb(1) and the Info entries for gcc, cpp, as, ld,
17854       binutils and gdb.
17855

AUTHOR

17857       See the Info entry for gcc, or
17858       <http://gcc.gnu.org/onlinedocs/gcc/Contributors.html>, for contributors
17859       to GCC.
17860
17862       Copyright (c) 1988-2015 Free Software Foundation, Inc.
17863
17864       Permission is granted to copy, distribute and/or modify this document
17865       under the terms of the GNU Free Documentation License, Version 1.3 or
17866       any later version published by the Free Software Foundation; with the
17867       Invariant Sections being "GNU General Public License" and "Funding Free
17868       Software", the Front-Cover texts being (a) (see below), and with the
17869       Back-Cover Texts being (b) (see below).  A copy of the license is
17870       included in the gfdl(7) man page.
17871
17872       (a) The FSF's Front-Cover Text is:
17873
17874            A GNU Manual
17875
17876       (b) The FSF's Back-Cover Text is:
17877
17878            You have freedom to copy and modify this GNU Manual, like GNU
17879            software.  Copies published by the Free Software Foundation raise
17880            funds for GNU development.
17881
17882
17883
17884gcc-4.8.5                         2015-06-23                            GCC(1)
Impressum