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...] [-pedantic]
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 would be
51       -fno-foo.  This manual documents only one of these two forms, whichever
52       one is not 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  -combine  -pipe  -pass-exit-codes -x language
61           -v  -###  --help[=class[,...]]  --target-help --version
62           -wrapper@file
63
64       C Language Options
65           -ansi  -std=standard  -fgnu89-inline -aux-info filename -fno-asm
66           -fno-builtin  -fno-builtin-function -fhosted  -ffreestanding
67           -fopenmp -fms-extensions -trigraphs  -no-integrated-cpp
68           -traditional  -traditional-cpp -fallow-single-precision
69           -fcond-mismatch -flax-vector-conversions -fsigned-bitfields
70           -fsigned-char -funsigned-bitfields  -funsigned-char
71
72       C++ Language Options
73           -fabi-version=n  -fno-access-control  -fcheck-new -fconserve-space
74           -ffriend-injection -fno-elide-constructors -fno-enforce-eh-specs
75           -ffor-scope  -fno-for-scope  -fno-gnu-keywords
76           -fno-implicit-templates -fno-implicit-inline-templates
77           -fno-implement-inlines  -fms-extensions -fno-nonansi-builtins
78           -fno-operator-names -fno-optional-diags  -fpermissive -frepo
79           -fno-rtti  -fstats  -ftemplate-depth-n -fno-threadsafe-statics
80           -fuse-cxa-atexit  -fno-weak  -nostdinc++ -fno-default-inline
81           -fvisibility-inlines-hidden -fvisibility-ms-compat -Wabi
82           -Wctor-dtor-privacy -Wnon-virtual-dtor  -Wreorder -Weffc++
83           -Wstrict-null-sentinel -Wno-non-template-friend  -Wold-style-cast
84           -Woverloaded-virtual  -Wno-pmf-conversions -Wsign-promo
85
86       Objective-C and Objective-C++ Language Options
87           -fconstant-string-class=class-name -fgnu-runtime  -fnext-runtime
88           -fno-nil-receivers -fobjc-call-cxx-cdtors -fobjc-direct-dispatch
89           -fobjc-exceptions -fobjc-gc -freplace-objc-classes -fzero-link
90           -gen-decls -Wassign-intercept -Wno-protocol  -Wselector
91           -Wstrict-selector-match -Wundeclared-selector
92
93       Language Independent Options
94           -fmessage-length=n -fdiagnostics-show-location=[once|every-line]
95           -fdiagnostics-show-option
96
97       Warning Options
98           -fsyntax-only  -pedantic  -pedantic-errors -w  -Wextra  -Wall
99           -Waddress  -Waggregate-return  -Warray-bounds -Wno-attributes
100           -Wno-builtin-macro-redefined -Wc++-compat -Wc++0x-compat
101           -Wcast-align  -Wcast-qual -Wchar-subscripts -Wclobbered  -Wcomment
102           -Wconversion  -Wcoverage-mismatch  -Wno-deprecated
103           -Wno-deprecated-declarations -Wdisabled-optimization
104           -Wno-div-by-zero -Wempty-body  -Wenum-compare -Wno-endif-labels
105           -Werror  -Werror=* -Wfatal-errors  -Wfloat-equal  -Wformat
106           -Wformat=2 -Wno-format-contains-nul -Wno-format-extra-args
107           -Wformat-nonliteral -Wformat-security  -Wformat-y2k
108           -Wframe-larger-than=len -Wignored-qualifiers -Wimplicit
109           -Wimplicit-function-declaration  -Wimplicit-int -Winit-self
110           -Winline -Wno-int-to-pointer-cast -Wno-invalid-offsetof
111           -Winvalid-pch -Wlarger-than=len  -Wunsafe-loop-optimizations
112           -Wlogical-op -Wlong-long -Wmain  -Wmissing-braces
113           -Wmissing-field-initializers -Wmissing-format-attribute
114           -Wmissing-include-dirs -Wmissing-noreturn  -Wno-mudflap
115           -Wno-multichar  -Wnonnull  -Wno-overflow -Woverlength-strings
116           -Wpacked  -Wpacked-bitfield-compat  -Wpadded -Wparentheses
117           -Wpedantic-ms-format -Wno-pedantic-ms-format -Wpointer-arith
118           -Wno-pointer-to-int-cast -Wredundant-decls -Wreturn-type
119           -Wsequence-point  -Wshadow -Wsign-compare  -Wsign-conversion
120           -Wstack-protector -Wstrict-aliasing -Wstrict-aliasing=n
121           -Wstrict-overflow -Wstrict-overflow=n -Wswitch  -Wswitch-default
122           -Wswitch-enum -Wsync-nand -Wsystem-headers  -Wtrigraphs
123           -Wtype-limits  -Wundef  -Wuninitialized -Wunknown-pragmas
124           -Wno-pragmas -Wunreachable-code -Wunused  -Wunused-function
125           -Wunused-label  -Wunused-parameter -Wunused-value
126           -Wunused-variable -Wunused-but-set-parameter
127           -Wunused-but-set-variable -Wvariadic-macros -Wvla
128           -Wvolatile-register-var  -Wwrite-strings
129
130       C and Objective-C-only Warning Options
131           -Wbad-function-cast  -Wmissing-declarations
132           -Wmissing-parameter-type  -Wmissing-prototypes  -Wnested-externs
133           -Wold-style-declaration  -Wold-style-definition -Wstrict-prototypes
134           -Wtraditional  -Wtraditional-conversion
135           -Wdeclaration-after-statement -Wpointer-sign
136
137       Debugging Options
138           -dletters  -dumpspecs  -dumpmachine  -dumpversion -fdbg-cnt-list
139           -fdbg-cnt=counter-value-list -fdump-noaddr -fdump-unnumbered
140           -fdump-unnumbered-links -fdump-translation-unit[-n]
141           -fdump-class-hierarchy[-n] -fdump-ipa-all -fdump-ipa-cgraph
142           -fdump-ipa-inline -fdump-statistics -fdump-tree-all
143           -fdump-tree-original[-n] -fdump-tree-optimized[-n] -fdump-tree-cfg
144           -fdump-tree-vcg -fdump-tree-alias -fdump-tree-ch
145           -fdump-tree-ssa[-n] -fdump-tree-pre[-n] -fdump-tree-ccp[-n]
146           -fdump-tree-dce[-n] -fdump-tree-gimple[-raw]
147           -fdump-tree-mudflap[-n] -fdump-tree-dom[-n] -fdump-tree-dse[-n]
148           -fdump-tree-phiopt[-n] -fdump-tree-forwprop[-n]
149           -fdump-tree-copyrename[-n] -fdump-tree-nrv -fdump-tree-vect
150           -fdump-tree-sink -fdump-tree-sra[-n] -fdump-tree-fre[-n]
151           -fdump-tree-vrp[-n] -ftree-vectorizer-verbose=n
152           -fdump-tree-storeccp[-n] -fdump-final-insns=file
153           -fcompare-debug[=opts]  -fcompare-debug-second
154           -feliminate-dwarf2-dups -feliminate-unused-debug-types
155           -feliminate-unused-debug-symbols -femit-class-debug-always
156           -fmem-report -fpre-ipa-mem-report -fpost-ipa-mem-report
157           -fprofile-arcs -frandom-seed=string -fsched-verbose=n
158           -fsel-sched-verbose -fsel-sched-dump-cfg
159           -fsel-sched-pipelining-verbose -ftest-coverage  -ftime-report
160           -fvar-tracking -fvar-tracking-assignments
161           -fvar-tracking-assignments-toggle -g  -glevel  -gtoggle  -gcoff
162           -gdwarf-version -ggdb  -gstabs  -gstabs+  -gstrict-dwarf
163           -gno-strict-dwarf -gvms  -gxcoff  -gxcoff+ -fno-merge-debug-strings
164           -fno-dwarf2-cfi-asm -fdebug-prefix-map=old=new
165           -femit-struct-debug-baseonly -femit-struct-debug-reduced
166           -femit-struct-debug-detailed[=spec-list] -p  -pg
167           -print-file-name=library  -print-libgcc-file-name
168           -print-multi-directory  -print-multi-lib  -print-multi-os-directory
169           -print-prog-name=program  -print-search-dirs  -Q -print-sysroot
170           -print-sysroot-headers-suffix -save-temps  -time[=file]
171
172       Optimization Options
173           -falign-functions[=n] -falign-jumps[=n] -falign-labels[=n]
174           -falign-loops[=n] -fassociative-math -fauto-inc-dec
175           -fbranch-probabilities -fbranch-target-load-optimize
176           -fbranch-target-load-optimize2 -fbtr-bb-exclusive -fcaller-saves
177           -fcheck-data-deps -fconserve-stack -fcprop-registers -fcrossjumping
178           -fcse-follow-jumps -fcse-skip-blocks -fcx-fortran-rules
179           -fcx-limited-range -fdata-sections -fdce -fdce -fdelayed-branch
180           -fdelete-null-pointer-checks -fdse -fdse -fearly-inlining
181           -fexpensive-optimizations -ffast-math -ffinite-math-only
182           -ffloat-store -fforward-propagate -ffunction-sections -fgcse
183           -fgcse-after-reload -fgcse-las -fgcse-lm -fgcse-sm -fif-conversion
184           -fif-conversion2 -findirect-inlining -finline-functions
185           -finline-functions-called-once -finline-limit=n
186           -finline-small-functions -fipa-cp -fipa-cp-clone -fipa-matrix-reorg
187           -fipa-pta -fipa-pure-const -fipa-reference -fipa-struct-reorg
188           -fipa-type-escape -fira-algorithm=algorithm -fira-region=region
189           -fira-coalesce -fno-ira-share-save-slots -fno-ira-share-spill-slots
190           -fira-verbose=n -fivopts -fkeep-inline-functions
191           -fkeep-static-consts -floop-block -floop-interchange
192           -floop-strip-mine -fmerge-all-constants -fmerge-constants
193           -fmodulo-sched -fmodulo-sched-allow-regmoves -fmove-loop-invariants
194           -fmudflap -fmudflapir -fmudflapth -fno-branch-count-reg
195           -fno-default-inline -fno-defer-pop -fno-function-cse
196           -fno-guess-branch-probability -fno-inline -fno-math-errno
197           -fno-peephole -fno-peephole2 -fno-sched-interblock -fno-sched-spec
198           -fno-signed-zeros -fno-toplevel-reorder -fno-trapping-math
199           -fno-zero-initialized-in-bss -fomit-frame-pointer
200           -foptimize-register-move -foptimize-sibling-calls -fpeel-loops
201           -fpredictive-commoning -fprefetch-loop-arrays -fprofile-correction
202           -fprofile-dir=path -fprofile-generate -fprofile-generate=path
203           -fprofile-use -fprofile-use=path -fprofile-values -freciprocal-math
204           -fregmove -frename-registers -freorder-blocks
205           -freorder-blocks-and-partition -freorder-functions
206           -frerun-cse-after-loop -freschedule-modulo-scheduled-loops
207           -frounding-math -frtl-abstract-sequences -fsched2-use-superblocks
208           -fsched2-use-traces -fsched-spec-load -fsched-spec-load-dangerous
209           -fsched-stalled-insns-dep[=n] -fsched-stalled-insns[=n]
210           -fschedule-insns -fschedule-insns2 -fsection-anchors -fsee
211           -fselective-scheduling -fselective-scheduling2
212           -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops
213           -fsignaling-nans -fsingle-precision-constant
214           -fsplit-ivs-in-unroller -fsplit-wide-types -fstack-protector
215           -fstack-protector-all -fstrict-aliasing -fstrict-overflow
216           -fthread-jumps -ftracer -ftree-builtin-call-dce -ftree-ccp
217           -ftree-ch -ftree-coalesce-inline-vars -ftree-coalesce-vars
218           -ftree-copy-prop -ftree-copyrename -ftree-dce -ftree-dominator-opts
219           -ftree-dse -ftree-fre -ftree-loop-im -ftree-loop-distribution
220           -ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize
221           -ftree-parallelize-loops=n -ftree-pre -ftree-reassoc -ftree-sink
222           -ftree-sra -ftree-switch-conversion -ftree-ter
223           -ftree-vect-loop-version -ftree-vectorize -ftree-vrp
224           -funit-at-a-time -funroll-all-loops -funroll-loops
225           -funsafe-loop-optimizations -funsafe-math-optimizations
226           -funswitch-loops -fvariable-expansion-in-unroller -fvect-cost-model
227           -fvpt -fweb -fwhole-program --param name=value -O  -O0  -O1  -O2
228           -O3  -Os
229
230       Preprocessor Options
231           -Aquestion=answer -A-question[=answer] -C  -dD  -dI  -dM  -dN
232           -Dmacro[=defn]  -E  -H -idirafter dir -include file  -imacros file
233           -iprefix file  -iwithprefix dir -iwithprefixbefore dir  -isystem
234           dir -imultilib dir -isysroot dir -M  -MM  -MF  -MG  -MP  -MQ  -MT
235           -nostdinc -P  -fworking-directory  -remap -trigraphs  -undef
236           -Umacro  -Wp,option -Xpreprocessor option
237
238       Assembler Option
239           -Wa,option  -Xassembler option
240
241       Linker Options
242           object-file-name  -llibrary -nostartfiles  -nodefaultlibs
243           -nostdlib -pie -rdynamic -s  -static  -static-libgcc  -shared
244           -shared-libgcc  -symbolic -T script  -Wl,option  -Xlinker option -u
245           symbol
246
247       Directory Options
248           -Bprefix  -Idir  -iquotedir  -Ldir -specs=file  -I- --sysroot=dir
249
250       Target Options
251           -V version  -b machine
252
253       Machine Dependent Options
254           ARC Options -EB  -EL -mmangle-cpu  -mcpu=cpu  -mtext=text-section
255           -mdata=data-section  -mrodata=readonly-data-section
256
257           ARM Options -mapcs-frame  -mno-apcs-frame -mabi=name
258           -mapcs-stack-check  -mno-apcs-stack-check -mapcs-float
259           -mno-apcs-float -mapcs-reentrant  -mno-apcs-reentrant
260           -msched-prolog  -mno-sched-prolog -mlittle-endian  -mbig-endian
261           -mwords-little-endian -mfloat-abi=name  -msoft-float  -mhard-float
262           -mfpe -mthumb-interwork  -mno-thumb-interwork -mcpu=name
263           -march=name  -mfpu=name -mstructure-size-boundary=n
264           -mabort-on-noreturn -mlong-calls  -mno-long-calls -msingle-pic-base
265           -mno-single-pic-base -mpic-register=reg -mnop-fun-dllimport
266           -mcirrus-fix-invalid-insns -mno-cirrus-fix-invalid-insns
267           -mpoke-function-name -mthumb  -marm -mtpcs-frame  -mtpcs-leaf-frame
268           -mcaller-super-interworking  -mcallee-super-interworking -mtp=name
269           -mword-relocations -mfix-cortex-m3-ldrd
270
271           AVR Options -mmcu=mcu  -msize  -mno-interrupts -mcall-prologues
272           -mno-tablejump  -mtiny-stack  -mint8
273
274           Blackfin Options -mcpu=cpu[-sirevision] -msim
275           -momit-leaf-frame-pointer  -mno-omit-leaf-frame-pointer
276           -mspecld-anomaly  -mno-specld-anomaly  -mcsync-anomaly
277           -mno-csync-anomaly -mlow-64k -mno-low64k  -mstack-check-l1
278           -mid-shared-library -mno-id-shared-library  -mshared-library-id=n
279           -mleaf-id-shared-library  -mno-leaf-id-shared-library -msep-data
280           -mno-sep-data  -mlong-calls  -mno-long-calls -mfast-fp -minline-plt
281           -mmulticore  -mcorea  -mcoreb  -msdram -micplb
282
283           CRIS Options -mcpu=cpu  -march=cpu  -mtune=cpu -mmax-stack-frame=n
284           -melinux-stacksize=n -metrax4  -metrax100  -mpdebug  -mcc-init
285           -mno-side-effects -mstack-align  -mdata-align  -mconst-align
286           -m32-bit  -m16-bit  -m8-bit  -mno-prologue-epilogue  -mno-gotplt
287           -melf  -maout  -melinux  -mlinux  -sim  -sim2 -mmul-bug-workaround
288           -mno-mul-bug-workaround
289
290           CRX Options -mmac -mpush-args
291
292           Darwin Options -all_load  -allowable_client  -arch
293           -arch_errors_fatal -arch_only  -bind_at_load  -bundle
294           -bundle_loader -client_name  -compatibility_version
295           -current_version -dead_strip -dependency-file  -dylib_file
296           -dylinker_install_name -dynamic  -dynamiclib
297           -exported_symbols_list -filelist  -flat_namespace
298           -force_cpusubtype_ALL -force_flat_namespace
299           -headerpad_max_install_names -iframework -image_base  -init
300           -install_name  -keep_private_externs -multi_module
301           -multiply_defined  -multiply_defined_unused -noall_load
302           -no_dead_strip_inits_and_terms -nofixprebinding -nomultidefs
303           -noprebind  -noseglinkedit -pagezero_size  -prebind
304           -prebind_all_twolevel_modules -private_bundle  -read_only_relocs
305           -sectalign -sectobjectsymbols  -whyload  -seg1addr -sectcreate
306           -sectobjectsymbols  -sectorder -segaddr -segs_read_only_addr
307           -segs_read_write_addr -seg_addr_table  -seg_addr_table_filename
308           -seglinkedit -segprot  -segs_read_only_addr  -segs_read_write_addr
309           -single_module  -static  -sub_library  -sub_umbrella
310           -twolevel_namespace  -umbrella  -undefined -unexported_symbols_list
311           -weak_reference_mismatches -whatsloaded -F -gused -gfull
312           -mmacosx-version-min=version -mkernel -mone-byte-bool
313
314           DEC Alpha Options -mno-fp-regs  -msoft-float  -malpha-as  -mgas
315           -mieee  -mieee-with-inexact  -mieee-conformant -mfp-trap-mode=mode
316           -mfp-rounding-mode=mode -mtrap-precision=mode  -mbuild-constants
317           -mcpu=cpu-type  -mtune=cpu-type -mbwx  -mmax  -mfix  -mcix
318           -mfloat-vax  -mfloat-ieee -mexplicit-relocs  -msmall-data
319           -mlarge-data -msmall-text  -mlarge-text -mmemory-latency=time
320
321           DEC Alpha/VMS Options -mvms-return-codes
322
323           FR30 Options -msmall-model -mno-lsim
324
325           FRV Options -mgpr-32  -mgpr-64  -mfpr-32  -mfpr-64 -mhard-float
326           -msoft-float -malloc-cc  -mfixed-cc  -mdword  -mno-dword -mdouble
327           -mno-double -mmedia  -mno-media  -mmuladd  -mno-muladd -mfdpic
328           -minline-plt -mgprel-ro  -multilib-library-pic -mlinked-fp
329           -mlong-calls  -malign-labels -mlibrary-pic  -macc-4  -macc-8 -mpack
330           -mno-pack  -mno-eflags  -mcond-move  -mno-cond-move
331           -moptimize-membar -mno-optimize-membar -mscc  -mno-scc  -mcond-exec
332           -mno-cond-exec -mvliw-branch  -mno-vliw-branch -mmulti-cond-exec
333           -mno-multi-cond-exec  -mnested-cond-exec -mno-nested-cond-exec
334           -mtomcat-stats -mTLS -mtls -mcpu=cpu
335
336           GNU/Linux Options -muclibc
337
338           H8/300 Options -mrelax  -mh  -ms  -mn  -mint32  -malign-300
339
340           HPPA Options -march=architecture-type -mbig-switch
341           -mdisable-fpregs  -mdisable-indexing -mfast-indirect-calls  -mgas
342           -mgnu-ld   -mhp-ld -mfixed-range=register-range -mjump-in-delay
343           -mlinker-opt -mlong-calls -mlong-load-store  -mno-big-switch
344           -mno-disable-fpregs -mno-disable-indexing  -mno-fast-indirect-calls
345           -mno-gas -mno-jump-in-delay  -mno-long-load-store
346           -mno-portable-runtime  -mno-soft-float -mno-space-regs
347           -msoft-float  -mpa-risc-1-0 -mpa-risc-1-1  -mpa-risc-2-0
348           -mportable-runtime -mschedule=cpu-type  -mspace-regs  -msio  -mwsio
349           -munix=unix-std  -nolibdld  -static  -threads
350
351           i386 and x86-64 Options -mtune=cpu-type  -march=cpu-type
352           -mfpmath=unit -masm=dialect  -mno-fancy-math-387 -mno-fp-ret-in-387
353           -msoft-float -mno-wide-multiply  -mrtd  -malign-double
354           -mpreferred-stack-boundary=num -mincoming-stack-boundary=num -mcld
355           -mcx16 -msahf -mmovbe -mcrc32 -mrecip -mmmx  -msse  -msse2 -msse3
356           -mssse3 -msse4.1 -msse4.2 -msse4 -mavx -maes -mpclmul -mfsgsbase
357           -mrdrnd -mf16c -mfused-madd -msse4a -m3dnow -mpopcnt -mabm -mbmi
358           -mtbm -mfma4 -mxop -mlwp -mthreads  -mno-align-stringops
359           -minline-all-stringops -minline-stringops-dynamically
360           -mstringop-strategy=alg -mpush-args  -maccumulate-outgoing-args
361           -m128bit-long-double -m96bit-long-double  -mregparm=num
362           -msseregparm -mveclibabi=type -mpc32 -mpc64 -mpc80 -mstackrealign
363           -momit-leaf-frame-pointer  -mno-red-zone -mno-tls-direct-seg-refs
364           -mcmodel=code-model -m32  -m64 -mlarge-data-threshold=num -msse2avx
365
366           i386 and x86-64 Windows Options -mconsole -mcygwin -mno-cygwin
367           -mdll -mnop-fun-dllimport -mthread -mwin32 -mwindows
368
369           IA-64 Options -mbig-endian  -mlittle-endian  -mgnu-as  -mgnu-ld
370           -mno-pic -mvolatile-asm-stop  -mregister-names  -mno-sdata
371           -mconstant-gp  -mauto-pic  -minline-float-divide-min-latency
372           -minline-float-divide-max-throughput
373           -minline-int-divide-min-latency -minline-int-divide-max-throughput
374           -minline-sqrt-min-latency -minline-sqrt-max-throughput
375           -mno-dwarf2-asm -mearly-stop-bits -mfixed-range=register-range
376           -mtls-size=tls-size -mtune=cpu-type -mt -pthread -milp32 -mlp64
377           -mno-sched-br-data-spec -msched-ar-data-spec
378           -mno-sched-control-spec -msched-br-in-data-spec
379           -msched-ar-in-data-spec -msched-in-control-spec -msched-ldc
380           -mno-sched-control-ldc -mno-sched-spec-verbose
381           -mno-sched-prefer-non-data-spec-insns
382           -mno-sched-prefer-non-control-spec-insns
383           -mno-sched-count-spec-in-critical-path
384
385           M32R/D Options -m32r2 -m32rx -m32r -mdebug -malign-loops
386           -mno-align-loops -missue-rate=number -mbranch-cost=number
387           -mmodel=code-size-model-type -msdata=sdata-type -mno-flush-func
388           -mflush-func=name -mno-flush-trap -mflush-trap=number -G num
389
390           M32C Options -mcpu=cpu -msim -memregs=number
391
392           M680x0 Options -march=arch  -mcpu=cpu  -mtune=tune -m68000  -m68020
393           -m68020-40  -m68020-60  -m68030  -m68040 -m68060  -mcpu32  -m5200
394           -m5206e  -m528x  -m5307  -m5407 -mcfv4e  -mbitfield  -mno-bitfield
395           -mc68000  -mc68020 -mnobitfield  -mrtd  -mno-rtd  -mdiv  -mno-div
396           -mshort -mno-short  -mhard-float  -m68881  -msoft-float  -mpcrel
397           -malign-int  -mstrict-align  -msep-data  -mno-sep-data
398           -mshared-library-id=n  -mid-shared-library  -mno-id-shared-library
399           -mxgot -mno-xgot
400
401           M68hc1x Options -m6811  -m6812  -m68hc11  -m68hc12   -m68hcs12
402           -mauto-incdec  -minmax  -mlong-calls  -mshort
403           -msoft-reg-count=count
404
405           MCore Options -mhardlit  -mno-hardlit  -mdiv  -mno-div
406           -mrelax-immediates -mno-relax-immediates  -mwide-bitfields
407           -mno-wide-bitfields -m4byte-functions  -mno-4byte-functions
408           -mcallgraph-data -mno-callgraph-data  -mslow-bytes  -mno-slow-bytes
409           -mno-lsim -mlittle-endian  -mbig-endian  -m210  -m340
410           -mstack-increment
411
412           MIPS Options -EL  -EB  -march=arch  -mtune=arch -mips1  -mips2
413           -mips3  -mips4  -mips32  -mips32r2 -mips64  -mips64r2 -mips16
414           -mno-mips16  -mflip-mips16 -minterlink-mips16
415           -mno-interlink-mips16 -mabi=abi  -mabicalls  -mno-abicalls -mshared
416           -mno-shared  -mplt  -mno-plt  -mxgot  -mno-xgot -mgp32  -mgp64
417           -mfp32  -mfp64  -mhard-float  -msoft-float -msingle-float
418           -mdouble-float  -mdsp  -mno-dsp  -mdspr2  -mno-dspr2 -mfpu=fpu-type
419           -msmartmips  -mno-smartmips -mpaired-single  -mno-paired-single
420           -mdmx  -mno-mdmx -mips3d  -mno-mips3d  -mmt  -mno-mt  -mllsc
421           -mno-llsc -mlong64  -mlong32  -msym32  -mno-sym32 -Gnum
422           -mlocal-sdata  -mno-local-sdata -mextern-sdata  -mno-extern-sdata
423           -mgpopt  -mno-gopt -membedded-data  -mno-embedded-data
424           -muninit-const-in-rodata  -mno-uninit-const-in-rodata
425           -mcode-readable=setting -msplit-addresses  -mno-split-addresses
426           -mexplicit-relocs  -mno-explicit-relocs -mcheck-zero-division
427           -mno-check-zero-division -mdivide-traps  -mdivide-breaks -mmemcpy
428           -mno-memcpy  -mlong-calls  -mno-long-calls -mmad  -mno-mad
429           -mfused-madd  -mno-fused-madd  -nocpp -mfix-r4000  -mno-fix-r4000
430           -mfix-r4400  -mno-fix-r4400 -mfix-r10000 -mno-fix-r10000
431           -mfix-vr4120  -mno-fix-vr4120 -mfix-vr4130  -mno-fix-vr4130
432           -mfix-sb1  -mno-fix-sb1 -mflush-func=func  -mno-flush-func
433           -mbranch-cost=num  -mbranch-likely  -mno-branch-likely
434           -mfp-exceptions -mno-fp-exceptions -mvr4130-align -mno-vr4130-align
435
436           MMIX Options -mlibfuncs  -mno-libfuncs  -mepsilon  -mno-epsilon
437           -mabi=gnu -mabi=mmixware  -mzero-extend  -mknuthdiv
438           -mtoplevel-symbols -melf  -mbranch-predict  -mno-branch-predict
439           -mbase-addresses -mno-base-addresses  -msingle-exit
440           -mno-single-exit
441
442           MN10300 Options -mmult-bug  -mno-mult-bug -mam33  -mno-am33
443           -mam33-2  -mno-am33-2 -mreturn-pointer-on-d0 -mno-crt0  -mrelax
444
445           PDP-11 Options -mfpu  -msoft-float  -mac0  -mno-ac0  -m40  -m45
446           -m10 -mbcopy  -mbcopy-builtin  -mint32  -mno-int16 -mint16
447           -mno-int32  -mfloat32  -mno-float64 -mfloat64  -mno-float32
448           -mabshi  -mno-abshi -mbranch-expensive  -mbranch-cheap -msplit
449           -mno-split  -munix-asm  -mdec-asm
450
451           picoChip Options -mae=ae_type -mvliw-lookahead=N
452           -msymbol-as-address -mno-inefficient-warnings
453
454           PowerPC Options See RS/6000 and PowerPC Options.
455
456           RS/6000 and PowerPC Options -mcpu=cpu-type -mtune=cpu-type
457           -mcmodel=code-model -mpower  -mno-power  -mpower2  -mno-power2
458           -mpowerpc  -mpowerpc64  -mno-powerpc -maltivec  -mno-altivec
459           -mpowerpc-gpopt  -mno-powerpc-gpopt -mpowerpc-gfxopt
460           -mno-powerpc-gfxopt -mmfcrf  -mno-mfcrf  -mpopcntb  -mno-popcntb
461           -mpopcntd -mno-popcntd -mfprnd  -mno-fprnd -mcmpb -mno-cmpb
462           -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-hard-dfp -mnew-mnemonics
463           -mold-mnemonics -mfull-toc   -mminimal-toc  -mno-fp-in-toc
464           -mno-sum-in-toc -m64  -m32  -mxl-compat  -mno-xl-compat  -mpe
465           -malign-power  -malign-natural -msoft-float  -mhard-float
466           -mmultiple  -mno-multiple -msingle-float -mdouble-float
467           -msimple-fpu -mstring  -mno-string  -mupdate  -mno-update
468           -mavoid-indexed-addresses  -mno-avoid-indexed-addresses
469           -mfused-madd  -mno-fused-madd  -mbit-align  -mno-bit-align
470           -mstrict-align  -mno-strict-align  -mrelocatable -mno-relocatable
471           -mrelocatable-lib  -mno-relocatable-lib -mtoc  -mno-toc  -mlittle
472           -mlittle-endian  -mbig  -mbig-endian -mdynamic-no-pic  -maltivec
473           -mswdiv -mprioritize-restricted-insns=priority
474           -msched-costly-dep=dependence_type -minsert-sched-nops=scheme
475           -mcall-sysv  -mcall-netbsd -maix-struct-return
476           -msvr4-struct-return -mabi=abi-type -msecure-plt -mbss-plt -misel
477           -mno-isel -misel=yes  -misel=no -mspe -mno-spe -mspe=yes  -mspe=no
478           -mpaired -mgen-cell-microcode -mwarn-cell-microcode -mvrsave
479           -mno-vrsave -mmulhw -mno-mulhw -mdlmzb -mno-dlmzb -mfloat-gprs=yes
480           -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double -mprototype
481           -mno-prototype -msim  -mmvme  -mads  -myellowknife  -memb  -msdata
482           -msdata=opt  -mvxworks  -G num  -pthread
483
484           S/390 and zSeries Options -mtune=cpu-type  -march=cpu-type
485           -mhard-float  -msoft-float  -mhard-dfp -mno-hard-dfp
486           -mlong-double-64 -mlong-double-128 -mbackchain  -mno-backchain
487           -mpacked-stack  -mno-packed-stack -msmall-exec  -mno-small-exec
488           -mmvcle -mno-mvcle -m64  -m31  -mdebug  -mno-debug  -mesa  -mzarch
489           -mtpf-trace -mno-tpf-trace  -mfused-madd  -mno-fused-madd
490           -mwarn-framesize  -mwarn-dynamicstack  -mstack-size -mstack-guard
491
492           Score Options -meb -mel -mnhwloop -muls -mmac -mscore5 -mscore5u
493           -mscore7 -mscore7d
494
495           SH Options -m1  -m2  -m2e  -m3  -m3e -m4-nofpu  -m4-single-only
496           -m4-single  -m4 -m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al
497           -m5-64media  -m5-64media-nofpu -m5-32media  -m5-32media-nofpu
498           -m5-compact  -m5-compact-nofpu -mb  -ml  -mdalign  -mrelax
499           -mbigtable  -mfmovd  -mhitachi -mrenesas -mno-renesas -mnomacsave
500           -mieee  -mbitops  -misize  -minline-ic_invalidate -mpadstruct
501           -mspace -mprefergot  -musermode -multcost=number -mdiv=strategy
502           -mdivsi3_libfunc=name -mfixed-range=register-range -madjust-unroll
503           -mindexed-addressing -mgettrcost=number -mpt-fixed
504           -minvalid-symbols
505
506           SPARC Options -mcpu=cpu-type -mtune=cpu-type -mcmodel=code-model
507           -m32  -m64  -mapp-regs  -mno-app-regs -mfaster-structs
508           -mno-faster-structs -mfpu  -mno-fpu  -mhard-float  -msoft-float
509           -mhard-quad-float  -msoft-quad-float -mimpure-text
510           -mno-impure-text  -mlittle-endian -mstack-bias  -mno-stack-bias
511           -munaligned-doubles  -mno-unaligned-doubles -mv8plus  -mno-v8plus
512           -mvis  -mno-vis -threads -pthreads -pthread
513
514           SPU Options -mwarn-reloc -merror-reloc -msafe-dma -munsafe-dma
515           -mbranch-hints -msmall-mem -mlarge-mem -mstdmain
516           -mfixed-range=register-range
517
518           System V Options -Qy  -Qn  -YP,paths  -Ym,dir
519
520           V850 Options -mlong-calls  -mno-long-calls  -mep  -mno-ep
521           -mprolog-function  -mno-prolog-function  -mspace -mtda=n  -msda=n
522           -mzda=n -mapp-regs  -mno-app-regs -mdisable-callt
523           -mno-disable-callt -mv850e1 -mv850e -mv850  -mbig-switch
524
525           VAX Options -mg  -mgnu  -munix
526
527           VxWorks Options -mrtp  -non-static  -Bstatic  -Bdynamic -Xbind-lazy
528           -Xbind-now
529
530           x86-64 Options See i386 and x86-64 Options.
531
532           Xstormy16 Options -msim
533
534           Xtensa Options -mconst16 -mno-const16 -mfused-madd  -mno-fused-madd
535           -mserialize-volatile  -mno-serialize-volatile
536           -mtext-section-literals  -mno-text-section-literals -mtarget-align
537           -mno-target-align -mlongcalls  -mno-longcalls
538
539           zSeries Options See S/390 and zSeries Options.
540
541       Code Generation Options
542           -fcall-saved-reg  -fcall-used-reg -ffixed-reg  -fexceptions
543           -fnon-call-exceptions  -funwind-tables -fasynchronous-unwind-tables
544           -finhibit-size-directive  -finstrument-functions
545           -finstrument-functions-exclude-function-list=sym,sym,...
546           -finstrument-functions-exclude-file-list=file,file,...  -fno-common
547           -fno-ident -fpcc-struct-return  -fpic  -fPIC -fpie -fPIE
548           -fno-jump-tables -frecord-gcc-switches -freg-struct-return
549           -fshort-enums -fshort-double  -fshort-wchar -fverbose-asm
550           -fpack-struct[=n]  -fstack-check -fstack-limit-register=reg
551           -fstack-limit-symbol=sym -fno-stack-limit  -fargument-alias
552           -fargument-noalias -fargument-noalias-global
553           -fargument-noalias-anything -fleading-underscore  -ftls-model=model
554           -ftrapv  -fwrapv  -fbounds-check -fvisibility
555
556   Options Controlling the Kind of Output
557       Compilation can involve up to four stages: preprocessing, compilation
558       proper, assembly and linking, always in that order.  GCC is capable of
559       preprocessing and compiling several files either into several assembler
560       input files, or into one assembler input file; then each assembler
561       input file produces an object file, and linking combines all the object
562       files (those newly compiled, and those specified as input) into an
563       executable file.
564
565       For any given input file, the file name suffix determines what kind of
566       compilation is done:
567
568       file.c
569           C source code which must be preprocessed.
570
571       file.i
572           C source code which should not be preprocessed.
573
574       file.ii
575           C++ source code which should not be preprocessed.
576
577       file.m
578           Objective-C source code.  Note that you must link with the libobjc
579           library to make an Objective-C program work.
580
581       file.mi
582           Objective-C source code which should not be preprocessed.
583
584       file.mm
585       file.M
586           Objective-C++ source code.  Note that you must link with the
587           libobjc library to make an Objective-C++ program work.  Note that
588           .M refers to a literal capital M.
589
590       file.mii
591           Objective-C++ source code which should not be preprocessed.
592
593       file.h
594           C, C++, Objective-C or Objective-C++ header file to be turned into
595           a precompiled header.
596
597       file.cc
598       file.cp
599       file.cxx
600       file.cpp
601       file.CPP
602       file.c++
603       file.C
604           C++ source code which must be preprocessed.  Note that in .cxx, the
605           last two letters must both be literally x.  Likewise, .C refers to
606           a literal capital C.
607
608       file.mm
609       file.M
610           Objective-C++ source code which must be preprocessed.
611
612       file.mii
613           Objective-C++ source code which should not be preprocessed.
614
615       file.hh
616       file.H
617       file.hp
618       file.hxx
619       file.hpp
620       file.HPP
621       file.h++
622       file.tcc
623           C++ header file to be turned into a precompiled header.
624
625       file.f
626       file.for
627       file.ftn
628           Fixed form Fortran source code which should not be preprocessed.
629
630       file.F
631       file.FOR
632       file.fpp
633       file.FPP
634       file.FTN
635           Fixed form Fortran source code which must be preprocessed (with the
636           traditional preprocessor).
637
638       file.f90
639       file.f95
640       file.f03
641       file.f08
642           Free form Fortran source code which should not be preprocessed.
643
644       file.F90
645       file.F95
646       file.F03
647       file.F08
648           Free form Fortran source code which must be preprocessed (with the
649           traditional preprocessor).
650
651       file.ads
652           Ada source code file which contains a library unit declaration (a
653           declaration of a package, subprogram, or generic, or a generic
654           instantiation), or a library unit renaming declaration (a package,
655           generic, or subprogram renaming declaration).  Such files are also
656           called specs.
657
658       file.adb
659           Ada source code file containing a library unit body (a subprogram
660           or package body).  Such files are also called bodies.
661
662       file.s
663           Assembler code.
664
665       file.S
666       file.sx
667           Assembler code which must be preprocessed.
668
669       other
670           An object file to be fed straight into linking.  Any file name with
671           no recognized suffix is treated this way.
672
673       You can specify the input language explicitly with the -x option:
674
675       -x language
676           Specify explicitly the language for the following input files
677           (rather than letting the compiler choose a default based on the
678           file name suffix).  This option applies to all following input
679           files until the next -x option.  Possible values for language are:
680
681                   c  c-header  c-cpp-output
682                   c++  c++-header  c++-cpp-output
683                   objective-c  objective-c-header  objective-c-cpp-output
684                   objective-c++ objective-c++-header objective-c++-cpp-output
685                   assembler  assembler-with-cpp
686                   ada
687                   f77  f77-cpp-input f95  f95-cpp-input
688                   java
689
690       -x none
691           Turn off any specification of a language, so that subsequent files
692           are handled according to their file name suffixes (as they are if
693           -x has not been used at all).
694
695       -pass-exit-codes
696           Normally the gcc program will exit with the code of 1 if any phase
697           of the compiler returns a non-success return code.  If you specify
698           -pass-exit-codes, the gcc program will instead return with
699           numerically highest error produced by any phase that returned an
700           error indication.  The C, C++, and Fortran frontends return 4, if
701           an internal compiler error is encountered.
702
703       If you only want some of the stages of compilation, you can use -x (or
704       filename suffixes) to tell gcc where to start, and one of the options
705       -c, -S, or -E to say where gcc is to stop.  Note that some combinations
706       (for example, -x cpp-output -E) instruct gcc to do nothing at all.
707
708       -c  Compile or assemble the source files, but do not link.  The linking
709           stage simply is not done.  The ultimate output is in the form of an
710           object file for each source file.
711
712           By default, the object file name for a source file is made by
713           replacing the suffix .c, .i, .s, etc., with .o.
714
715           Unrecognized input files, not requiring compilation or assembly,
716           are ignored.
717
718       -S  Stop after the stage of compilation proper; do not assemble.  The
719           output is in the form of an assembler code file for each non-
720           assembler input file specified.
721
722           By default, the assembler file name for a source file is made by
723           replacing the suffix .c, .i, etc., with .s.
724
725           Input files that don't require compilation are ignored.
726
727       -E  Stop after the preprocessing stage; do not run the compiler proper.
728           The output is in the form of preprocessed source code, which is
729           sent to the standard output.
730
731           Input files which don't require preprocessing are ignored.
732
733       -o file
734           Place output in file file.  This applies regardless to whatever
735           sort of output is being produced, whether it be an executable file,
736           an object file, an assembler file or preprocessed C code.
737
738           If -o is not specified, the default is to put an executable file in
739           a.out, the object file for source.suffix in source.o, its assembler
740           file in source.s, a precompiled header file in source.suffix.gch,
741           and all preprocessed C source on standard output.
742
743       -v  Print (on standard error output) the commands executed to run the
744           stages of compilation.  Also print the version number of the
745           compiler driver program and of the preprocessor and the compiler
746           proper.
747
748       -###
749           Like -v except the commands are not executed and all command
750           arguments are quoted.  This is useful for shell scripts to capture
751           the driver-generated command lines.
752
753       -pipe
754           Use pipes rather than temporary files for communication between the
755           various stages of compilation.  This fails to work on some systems
756           where the assembler is unable to read from a pipe; but the GNU
757           assembler has no trouble.
758
759       -combine
760           If you are compiling multiple source files, this option tells the
761           driver to pass all the source files to the compiler at once (for
762           those languages for which the compiler can handle this).  This will
763           allow intermodule analysis (IMA) to be performed by the compiler.
764           Currently the only language for which this is supported is C.  If
765           you pass source files for multiple languages to the driver, using
766           this option, the driver will invoke the compiler(s) that support
767           IMA once each, passing each compiler all the source files
768           appropriate for it.  For those languages that do not support IMA
769           this option will be ignored, and the compiler will be invoked once
770           for each source file in that language.  If you use this option in
771           conjunction with -save-temps, the compiler will generate multiple
772           pre-processed files (one for each source file), but only one
773           (combined) .o or .s file.
774
775       --help
776           Print (on the standard output) a description of the command line
777           options understood by gcc.  If the -v option is also specified then
778           --help will also be passed on to the various processes invoked by
779           gcc, so that they can display the command line options they accept.
780           If the -Wextra option has also been specified (prior to the --help
781           option), then command line options which have no documentation
782           associated with them will also be displayed.
783
784       --target-help
785           Print (on the standard output) a description of target-specific
786           command line options for each tool.  For some targets extra target-
787           specific information may also be printed.
788
789       --help={class|[^]qualifier}[,...]
790           Print (on the standard output) a description of the command line
791           options understood by the compiler that fit into all specified
792           classes and qualifiers.  These are the supported classes:
793
794           optimizers
795               This will display all of the optimization options supported by
796               the compiler.
797
798           warnings
799               This will display all of the options controlling warning
800               messages produced by the compiler.
801
802           target
803               This will display target-specific options.  Unlike the
804               --target-help option however, target-specific options of the
805               linker and assembler will not be displayed.  This is because
806               those tools do not currently support the extended --help=
807               syntax.
808
809           params
810               This will display the values recognized by the --param option.
811
812           language
813               This will display the options supported for language, where
814               language is the name of one of the languages supported in this
815               version of GCC.
816
817           common
818               This will display the options that are common to all languages.
819
820           These are the supported qualifiers:
821
822           undocumented
823               Display only those options which are undocumented.
824
825           joined
826               Display options which take an argument that appears after an
827               equal sign in the same continuous piece of text, such as:
828               --help=target.
829
830           separate
831               Display options which take an argument that appears as a
832               separate word following the original option, such as: -o
833               output-file.
834
835           Thus for example to display all the undocumented target-specific
836           switches supported by the compiler the following can be used:
837
838                   --help=target,undocumented
839
840           The sense of a qualifier can be inverted by prefixing it with the ^
841           character, so for example to display all binary warning options
842           (i.e., ones that are either on or off and that do not take an
843           argument), which have a description the following can be used:
844
845                   --help=warnings,^joined,^undocumented
846
847           The argument to --help= should not consist solely of inverted
848           qualifiers.
849
850           Combining several classes is possible, although this usually
851           restricts the output by so much that there is nothing to display.
852           One case where it does work however is when one of the classes is
853           target.  So for example to display all the target-specific
854           optimization options the following can be used:
855
856                   --help=target,optimizers
857
858           The --help= option can be repeated on the command line.  Each
859           successive use will display its requested class of options,
860           skipping those that have already been displayed.
861
862           If the -Q option appears on the command line before the --help=
863           option, then the descriptive text displayed by --help= is changed.
864           Instead of describing the displayed options, an indication is given
865           as to whether the option is enabled, disabled or set to a specific
866           value (assuming that the compiler knows this at the point where the
867           --help= option is used).
868
869           Here is a truncated example from the ARM port of gcc:
870
871                     % gcc -Q -mabi=2 --help=target -c
872                     The following options are target specific:
873                     -mabi=                                2
874                     -mabort-on-noreturn                   [disabled]
875                     -mapcs                                [disabled]
876
877           The output is sensitive to the effects of previous command line
878           options, so for example it is possible to find out which
879           optimizations are enabled at -O2 by using:
880
881                   -Q -O2 --help=optimizers
882
883           Alternatively you can discover which binary optimizations are
884           enabled by -O3 by using:
885
886                   gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
887                   gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
888                   diff /tmp/O2-opts /tmp/O3-opts | grep enabled
889
890       --version
891           Display the version number and copyrights of the invoked GCC.
892
893       -wrapper
894           Invoke all subcommands under a wrapper program. It takes a single
895           comma separated list as an argument, which will be used to invoke
896           the wrapper:
897
898                   gcc -c t.c -wrapper gdb,--args
899
900           This will invoke all subprograms of gcc under "gdb --args", thus
901           cc1 invocation will be "gdb --args cc1 ...".
902
903       @file
904           Read command-line options from file.  The options read are inserted
905           in place of the original @file option.  If file does not exist, or
906           cannot be read, then the option will be treated literally, and not
907           removed.
908
909           Options in file are separated by whitespace.  A whitespace
910           character may be included in an option by surrounding the entire
911           option in either single or double quotes.  Any character (including
912           a backslash) may be included by prefixing the character to be
913           included with a backslash.  The file may itself contain additional
914           @file options; any such options will be processed recursively.
915
916   Compiling C++ Programs
917       C++ source files conventionally use one of the suffixes .C, .cc, .cpp,
918       .CPP, .c++, .cp, or .cxx; C++ header files often use .hh, .hpp, .H, or
919       (for shared template code) .tcc; and preprocessed C++ files use the
920       suffix .ii.  GCC recognizes files with these names and compiles them as
921       C++ programs even if you call the compiler the same way as for
922       compiling C programs (usually with the name gcc).
923
924       However, the use of gcc does not add the C++ library.  g++ is a program
925       that calls GCC and treats .c, .h and .i files as C++ source files
926       instead of C source files unless -x is used, and automatically
927       specifies linking against the C++ library.  This program is also useful
928       when precompiling a C header file with a .h extension for use in C++
929       compilations.  On many systems, g++ is also installed with the name
930       c++.
931
932       When you compile C++ programs, you may specify many of the same
933       command-line options that you use for compiling programs in any
934       language; or command-line options meaningful for C and related
935       languages; or options that are meaningful only for C++ programs.
936
937   Options Controlling C Dialect
938       The following options control the dialect of C (or languages derived
939       from C, such as C++, Objective-C and Objective-C++) that the compiler
940       accepts:
941
942       -ansi
943           In C mode, this is equivalent to -std=c89. In C++ mode, it is
944           equivalent to -std=c++98.
945
946           This turns off certain features of GCC that are incompatible with
947           ISO C90 (when compiling C code), or of standard C++ (when compiling
948           C++ code), such as the "asm" and "typeof" keywords, and predefined
949           macros such as "unix" and "vax" that identify the type of system
950           you are using.  It also enables the undesirable and rarely used ISO
951           trigraph feature.  For the C compiler, it disables recognition of
952           C++ style // comments as well as the "inline" keyword.
953
954           The alternate keywords "__asm__", "__extension__", "__inline__" and
955           "__typeof__" continue to work despite -ansi.  You would not want to
956           use them in an ISO C program, of course, but it is useful to put
957           them in header files that might be included in compilations done
958           with -ansi.  Alternate predefined macros such as "__unix__" and
959           "__vax__" are also available, with or without -ansi.
960
961           The -ansi option does not cause non-ISO programs to be rejected
962           gratuitously.  For that, -pedantic is required in addition to
963           -ansi.
964
965           The macro "__STRICT_ANSI__" is predefined when the -ansi option is
966           used.  Some header files may notice this macro and refrain from
967           declaring certain functions or defining certain macros that the ISO
968           standard doesn't call for; this is to avoid interfering with any
969           programs that might use these names for other things.
970
971           Functions that would normally be built in but do not have semantics
972           defined by ISO C (such as "alloca" and "ffs") are not built-in
973           functions when -ansi is used.
974
975       -std=
976           Determine the language standard.   This option is currently only
977           supported when compiling C or C++.
978
979           The compiler can accept several base standards, such as c89 or
980           c++98, and GNU dialects of those standards, such as gnu89 or
981           gnu++98.  By specifying a base standard, the compiler will accept
982           all programs following that standard and those using GNU extensions
983           that do not contradict it.  For example, -std=c89 turns off certain
984           features of GCC that are incompatible with ISO C90, such as the
985           "asm" and "typeof" keywords, but not other GNU extensions that do
986           not have a meaning in ISO C90, such as omitting the middle term of
987           a "?:" expression. On the other hand, by specifying a GNU dialect
988           of a standard, all features the compiler support are enabled, even
989           when those features change the meaning of the base standard and
990           some strict-conforming programs may be rejected.  The particular
991           standard is used by -pedantic to identify which features are GNU
992           extensions given that version of the standard. For example
993           -std=gnu89 -pedantic would warn about C++ style // comments, while
994           -std=gnu99 -pedantic would not.
995
996           A value for this option must be provided; possible values are
997
998           c89
999           iso9899:1990
1000               Support all ISO C90 programs (certain GNU extensions that
1001               conflict with ISO C90 are disabled). Same as -ansi for C code.
1002
1003           iso9899:199409
1004               ISO C90 as modified in amendment 1.
1005
1006           c99
1007           c9x
1008           iso9899:1999
1009           iso9899:199x
1010               ISO C99.  Note that this standard is not yet fully supported;
1011               see <http://gcc.gnu.org/gcc-4.4/c99status.html> for more
1012               information.  The names c9x and iso9899:199x are deprecated.
1013
1014           gnu89
1015               GNU dialect of ISO C90 (including some C99 features). This is
1016               the default for C code.
1017
1018           gnu99
1019           gnu9x
1020               GNU dialect of ISO C99.  When ISO C99 is fully implemented in
1021               GCC, this will become the default.  The name gnu9x is
1022               deprecated.
1023
1024           c++98
1025               The 1998 ISO C++ standard plus amendments. Same as -ansi for
1026               C++ code.
1027
1028           gnu++98
1029               GNU dialect of -std=c++98.  This is the default for C++ code.
1030
1031           c++0x
1032               The working draft of the upcoming ISO C++0x standard. This
1033               option enables experimental features that are likely to be
1034               included in C++0x. The working draft is constantly changing,
1035               and any feature that is enabled by this flag may be removed
1036               from future versions of GCC if it is not part of the C++0x
1037               standard.
1038
1039           gnu++0x
1040               GNU dialect of -std=c++0x. This option enables experimental
1041               features that may be removed in future versions of GCC.
1042
1043       -fgnu89-inline
1044           The option -fgnu89-inline tells GCC to use the traditional GNU
1045           semantics for "inline" functions when in C99 mode.
1046             This option is accepted and ignored by GCC versions 4.1.3 up to
1047           but not including 4.3.  In GCC versions 4.3 and later it changes
1048           the behavior of GCC in C99 mode.  Using this option is roughly
1049           equivalent to adding the "gnu_inline" function attribute to all
1050           inline functions.
1051
1052           The option -fno-gnu89-inline explicitly tells GCC to use the C99
1053           semantics for "inline" when in C99 or gnu99 mode (i.e., it
1054           specifies the default behavior).  This option was first supported
1055           in GCC 4.3.  This option is not supported in C89 or gnu89 mode.
1056
1057           The preprocessor macros "__GNUC_GNU_INLINE__" and
1058           "__GNUC_STDC_INLINE__" may be used to check which semantics are in
1059           effect for "inline" functions.
1060
1061       -aux-info filename
1062           Output to the given filename prototyped declarations for all
1063           functions declared and/or defined in a translation unit, including
1064           those in header files.  This option is silently ignored in any
1065           language other than C.
1066
1067           Besides declarations, the file indicates, in comments, the origin
1068           of each declaration (source file and line), whether the declaration
1069           was implicit, prototyped or unprototyped (I, N for new or O for
1070           old, respectively, in the first character after the line number and
1071           the colon), and whether it came from a declaration or a definition
1072           (C or F, respectively, in the following character).  In the case of
1073           function definitions, a K&R-style list of arguments followed by
1074           their declarations is also provided, inside comments, after the
1075           declaration.
1076
1077       -fno-asm
1078           Do not recognize "asm", "inline" or "typeof" as a keyword, so that
1079           code can use these words as identifiers.  You can use the keywords
1080           "__asm__", "__inline__" and "__typeof__" instead.  -ansi implies
1081           -fno-asm.
1082
1083           In C++, this switch only affects the "typeof" keyword, since "asm"
1084           and "inline" are standard keywords.  You may want to use the
1085           -fno-gnu-keywords flag instead, which has the same effect.  In C99
1086           mode (-std=c99 or -std=gnu99), this switch only affects the "asm"
1087           and "typeof" keywords, since "inline" is a standard keyword in ISO
1088           C99.
1089
1090       -fno-builtin
1091       -fno-builtin-function
1092           Don't recognize built-in functions that do not begin with
1093           __builtin_ as prefix.
1094
1095           GCC normally generates special code to handle certain built-in
1096           functions more efficiently; for instance, calls to "alloca" may
1097           become single instructions that adjust the stack directly, and
1098           calls to "memcpy" may become inline copy loops.  The resulting code
1099           is often both smaller and faster, but since the function calls no
1100           longer appear as such, you cannot set a breakpoint on those calls,
1101           nor can you change the behavior of the functions by linking with a
1102           different library.  In addition, when a function is recognized as a
1103           built-in function, GCC may use information about that function to
1104           warn about problems with calls to that function, or to generate
1105           more efficient code, even if the resulting code still contains
1106           calls to that function.  For example, warnings are given with
1107           -Wformat for bad calls to "printf", when "printf" is built in, and
1108           "strlen" is known not to modify global memory.
1109
1110           With the -fno-builtin-function option only the built-in function
1111           function is disabled.  function must not begin with __builtin_.  If
1112           a function is named that is not built-in in this version of GCC,
1113           this option is ignored.  There is no corresponding
1114           -fbuiltin-function option; if you wish to enable built-in functions
1115           selectively when using -fno-builtin or -ffreestanding, you may
1116           define macros such as:
1117
1118                   #define abs(n)          __builtin_abs ((n))
1119                   #define strcpy(d, s)    __builtin_strcpy ((d), (s))
1120
1121       -fhosted
1122           Assert that compilation takes place in a hosted environment.  This
1123           implies -fbuiltin.  A hosted environment is one in which the entire
1124           standard library is available, and in which "main" has a return
1125           type of "int".  Examples are nearly everything except a kernel.
1126           This is equivalent to -fno-freestanding.
1127
1128       -ffreestanding
1129           Assert that compilation takes place in a freestanding environment.
1130           This implies -fno-builtin.  A freestanding environment is one in
1131           which the standard library may not exist, and program startup may
1132           not necessarily be at "main".  The most obvious example is an OS
1133           kernel.  This is equivalent to -fno-hosted.
1134
1135       -fopenmp
1136           Enable handling of OpenMP directives "#pragma omp" in C/C++ and
1137           "!$omp" in Fortran.  When -fopenmp is specified, the compiler
1138           generates parallel code according to the OpenMP Application Program
1139           Interface v2.5 <http://www.openmp.org/>.  This option implies
1140           -pthread, and thus is only supported on targets that have support
1141           for -pthread.
1142
1143       -fms-extensions
1144           Accept some non-standard constructs used in Microsoft header files.
1145
1146           Some cases of unnamed fields in structures and unions are only
1147           accepted with this option.
1148
1149       -trigraphs
1150           Support ISO C trigraphs.  The -ansi option (and -std options for
1151           strict ISO C conformance) implies -trigraphs.
1152
1153       -no-integrated-cpp
1154           Performs a compilation in two passes: preprocessing and compiling.
1155           This option allows a user supplied "cc1", "cc1plus", or "cc1obj"
1156           via the -B option.  The user supplied compilation step can then add
1157           in an additional preprocessing step after normal preprocessing but
1158           before compiling.  The default is to use the integrated cpp
1159           (internal cpp)
1160
1161           The semantics of this option will change if "cc1", "cc1plus", and
1162           "cc1obj" are merged.
1163
1164       -traditional
1165       -traditional-cpp
1166           Formerly, these options caused GCC to attempt to emulate a pre-
1167           standard C compiler.  They are now only supported with the -E
1168           switch.  The preprocessor continues to support a pre-standard mode.
1169           See the GNU CPP manual for details.
1170
1171       -fcond-mismatch
1172           Allow conditional expressions with mismatched types in the second
1173           and third arguments.  The value of such an expression is void.
1174           This option is not supported for C++.
1175
1176       -flax-vector-conversions
1177           Allow implicit conversions between vectors with differing numbers
1178           of elements and/or incompatible element types.  This option should
1179           not be used for new code.
1180
1181       -funsigned-char
1182           Let the type "char" be unsigned, like "unsigned char".
1183
1184           Each kind of machine has a default for what "char" should be.  It
1185           is either like "unsigned char" by default or like "signed char" by
1186           default.
1187
1188           Ideally, a portable program should always use "signed char" or
1189           "unsigned char" when it depends on the signedness of an object.
1190           But many programs have been written to use plain "char" and expect
1191           it to be signed, or expect it to be unsigned, depending on the
1192           machines they were written for.  This option, and its inverse, let
1193           you make such a program work with the opposite default.
1194
1195           The type "char" is always a distinct type from each of "signed
1196           char" or "unsigned char", even though its behavior is always just
1197           like one of those two.
1198
1199       -fsigned-char
1200           Let the type "char" be signed, like "signed char".
1201
1202           Note that this is equivalent to -fno-unsigned-char, which is the
1203           negative form of -funsigned-char.  Likewise, the option
1204           -fno-signed-char is equivalent to -funsigned-char.
1205
1206       -fsigned-bitfields
1207       -funsigned-bitfields
1208       -fno-signed-bitfields
1209       -fno-unsigned-bitfields
1210           These options control whether a bit-field is signed or unsigned,
1211           when the declaration does not use either "signed" or "unsigned".
1212           By default, such a bit-field is signed, because this is consistent:
1213           the basic integer types such as "int" are signed types.
1214
1215   Options Controlling C++ Dialect
1216       This section describes the command-line options that are only
1217       meaningful for C++ programs; but you can also use most of the GNU
1218       compiler options regardless of what language your program is in.  For
1219       example, you might compile a file "firstClass.C" like this:
1220
1221               g++ -g -frepo -O -c firstClass.C
1222
1223       In this example, only -frepo is an option meant only for C++ programs;
1224       you can use the other options with any language supported by GCC.
1225
1226       Here is a list of options that are only for compiling C++ programs:
1227
1228       -fabi-version=n
1229           Use version n of the C++ ABI.  Version 2 is the version of the C++
1230           ABI that first appeared in G++ 3.4.  Version 1 is the version of
1231           the C++ ABI that first appeared in G++ 3.2.  Version 0 will always
1232           be the version that conforms most closely to the C++ ABI
1233           specification.  Therefore, the ABI obtained using version 0 will
1234           change as ABI bugs are fixed.
1235
1236           The default is version 2.
1237
1238       -fno-access-control
1239           Turn off all access checking.  This switch is mainly useful for
1240           working around bugs in the access control code.
1241
1242       -fcheck-new
1243           Check that the pointer returned by "operator new" is non-null
1244           before attempting to modify the storage allocated.  This check is
1245           normally unnecessary because the C++ standard specifies that
1246           "operator new" will only return 0 if it is declared throw(), in
1247           which case the compiler will always check the return value even
1248           without this option.  In all other cases, when "operator new" has a
1249           non-empty exception specification, memory exhaustion is signalled
1250           by throwing "std::bad_alloc".  See also new (nothrow).
1251
1252       -fconserve-space
1253           Put uninitialized or runtime-initialized global variables into the
1254           common segment, as C does.  This saves space in the executable at
1255           the cost of not diagnosing duplicate definitions.  If you compile
1256           with this flag and your program mysteriously crashes after "main()"
1257           has completed, you may have an object that is being destroyed twice
1258           because two definitions were merged.
1259
1260           This option is no longer useful on most targets, now that support
1261           has been added for putting variables into BSS without making them
1262           common.
1263
1264       -fno-deduce-init-list
1265           Disable deduction of a template type parameter as
1266           std::initializer_list from a brace-enclosed initializer list, i.e.
1267
1268                   template <class T> auto forward(T t) -> decltype (realfn (t))
1269                   {
1270                     return realfn (t);
1271                   }
1272
1273                   void f()
1274                   {
1275                     forward({1,2}); // call forward<std::initializer_list<int>>
1276                   }
1277
1278           This option is present because this deduction is an extension to
1279           the current specification in the C++0x working draft, and there was
1280           some concern about potential overload resolution problems.
1281
1282       -ffriend-injection
1283           Inject friend functions into the enclosing namespace, so that they
1284           are visible outside the scope of the class in which they are
1285           declared.  Friend functions were documented to work this way in the
1286           old Annotated C++ Reference Manual, and versions of G++ before 4.1
1287           always worked that way.  However, in ISO C++ a friend function
1288           which is not declared in an enclosing scope can only be found using
1289           argument dependent lookup.  This option causes friends to be
1290           injected as they were in earlier releases.
1291
1292           This option is for compatibility, and may be removed in a future
1293           release of G++.
1294
1295       -fno-elide-constructors
1296           The C++ standard allows an implementation to omit creating a
1297           temporary which is only used to initialize another object of the
1298           same type.  Specifying this option disables that optimization, and
1299           forces G++ to call the copy constructor in all cases.
1300
1301       -fno-enforce-eh-specs
1302           Don't generate code to check for violation of exception
1303           specifications at runtime.  This option violates the C++ standard,
1304           but may be useful for reducing code size in production builds, much
1305           like defining NDEBUG.  This does not give user code permission to
1306           throw exceptions in violation of the exception specifications; the
1307           compiler will still optimize based on the specifications, so
1308           throwing an unexpected exception will result in undefined behavior.
1309
1310       -ffor-scope
1311       -fno-for-scope
1312           If -ffor-scope is specified, the scope of variables declared in a
1313           for-init-statement is limited to the for loop itself, as specified
1314           by the C++ standard.  If -fno-for-scope is specified, the scope of
1315           variables declared in a for-init-statement extends to the end of
1316           the enclosing scope, as was the case in old versions of G++, and
1317           other (traditional) implementations of C++.
1318
1319           The default if neither flag is given to follow the standard, but to
1320           allow and give a warning for old-style code that would otherwise be
1321           invalid, or have different behavior.
1322
1323       -fno-gnu-keywords
1324           Do not recognize "typeof" as a keyword, so that code can use this
1325           word as an identifier.  You can use the keyword "__typeof__"
1326           instead.  -ansi implies -fno-gnu-keywords.
1327
1328       -fno-implicit-templates
1329           Never emit code for non-inline templates which are instantiated
1330           implicitly (i.e. by use); only emit code for explicit
1331           instantiations.
1332
1333       -fno-implicit-inline-templates
1334           Don't emit code for implicit instantiations of inline templates,
1335           either.  The default is to handle inlines differently so that
1336           compiles with and without optimization will need the same set of
1337           explicit instantiations.
1338
1339       -fno-implement-inlines
1340           To save space, do not emit out-of-line copies of inline functions
1341           controlled by #pragma implementation.  This will cause linker
1342           errors if these functions are not inlined everywhere they are
1343           called.
1344
1345       -fms-extensions
1346           Disable pedantic warnings about constructs used in MFC, such as
1347           implicit int and getting a pointer to member function via non-
1348           standard syntax.
1349
1350       -fno-nonansi-builtins
1351           Disable built-in declarations of functions that are not mandated by
1352           ANSI/ISO C.  These include "ffs", "alloca", "_exit", "index",
1353           "bzero", "conjf", and other related functions.
1354
1355       -fno-operator-names
1356           Do not treat the operator name keywords "and", "bitand", "bitor",
1357           "compl", "not", "or" and "xor" as synonyms as keywords.
1358
1359       -fno-optional-diags
1360           Disable diagnostics that the standard says a compiler does not need
1361           to issue.  Currently, the only such diagnostic issued by G++ is the
1362           one for a name having multiple meanings within a class.
1363
1364       -fpermissive
1365           Downgrade some diagnostics about nonconformant code from errors to
1366           warnings.  Thus, using -fpermissive will allow some nonconforming
1367           code to compile.
1368
1369       -frepo
1370           Enable automatic template instantiation at link time.  This option
1371           also implies -fno-implicit-templates.
1372
1373       -fno-rtti
1374           Disable generation of information about every class with virtual
1375           functions for use by the C++ runtime type identification features
1376           (dynamic_cast and typeid).  If you don't use those parts of the
1377           language, you can save some space by using this flag.  Note that
1378           exception handling uses the same information, but it will generate
1379           it as needed. The dynamic_cast operator can still be used for casts
1380           that do not require runtime type information, i.e. casts to "void
1381           *" or to unambiguous base classes.
1382
1383       -fstats
1384           Emit statistics about front-end processing at the end of the
1385           compilation.  This information is generally only useful to the G++
1386           development team.
1387
1388       -fstrict-enums
1389           Allow the compiler to optimize using the assumption that a value of
1390           enumeration type can only be one of the values of the enumeration
1391           (as defined in the C++ standard; basically, a value which can be
1392           represented in the minimum number of bits needed to represent all
1393           the enumerators).  This assumption may not be valid if the program
1394           uses a cast to convert an arbitrary integer value to the
1395           enumeration type.
1396
1397       -ftemplate-depth-n
1398           Set the maximum instantiation depth for template classes to n.  A
1399           limit on the template instantiation depth is needed to detect
1400           endless recursions during template class instantiation.  ANSI/ISO
1401           C++ conforming programs must not rely on a maximum depth greater
1402           than 17.
1403
1404       -fno-threadsafe-statics
1405           Do not emit the extra code to use the routines specified in the C++
1406           ABI for thread-safe initialization of local statics.  You can use
1407           this option to reduce code size slightly in code that doesn't need
1408           to be thread-safe.
1409
1410       -fuse-cxa-atexit
1411           Register destructors for objects with static storage duration with
1412           the "__cxa_atexit" function rather than the "atexit" function.
1413           This option is required for fully standards-compliant handling of
1414           static destructors, but will only work if your C library supports
1415           "__cxa_atexit".
1416
1417       -fno-use-cxa-get-exception-ptr
1418           Don't use the "__cxa_get_exception_ptr" runtime routine.  This will
1419           cause "std::uncaught_exception" to be incorrect, but is necessary
1420           if the runtime routine is not available.
1421
1422       -fvisibility-inlines-hidden
1423           This switch declares that the user does not attempt to compare
1424           pointers to inline methods where the addresses of the two functions
1425           were taken in different shared objects.
1426
1427           The effect of this is that GCC may, effectively, mark inline
1428           methods with "__attribute__ ((visibility ("hidden")))" so that they
1429           do not appear in the export table of a DSO and do not require a PLT
1430           indirection when used within the DSO.  Enabling this option can
1431           have a dramatic effect on load and link times of a DSO as it
1432           massively reduces the size of the dynamic export table when the
1433           library makes heavy use of templates.
1434
1435           The behavior of this switch is not quite the same as marking the
1436           methods as hidden directly, because it does not affect static
1437           variables local to the function or cause the compiler to deduce
1438           that the function is defined in only one shared object.
1439
1440           You may mark a method as having a visibility explicitly to negate
1441           the effect of the switch for that method.  For example, if you do
1442           want to compare pointers to a particular inline method, you might
1443           mark it as having default visibility.  Marking the enclosing class
1444           with explicit visibility will have no effect.
1445
1446           Explicitly instantiated inline methods are unaffected by this
1447           option as their linkage might otherwise cross a shared library
1448           boundary.
1449
1450       -fvisibility-ms-compat
1451           This flag attempts to use visibility settings to make GCC's C++
1452           linkage model compatible with that of Microsoft Visual Studio.
1453
1454           The flag makes these changes to GCC's linkage model:
1455
1456           1.  It sets the default visibility to "hidden", like
1457               -fvisibility=hidden.
1458
1459           2.  Types, but not their members, are not hidden by default.
1460
1461           3.  The One Definition Rule is relaxed for types without explicit
1462               visibility specifications which are defined in more than one
1463               different shared object: those declarations are permitted if
1464               they would have been permitted when this option was not used.
1465
1466           In new code it is better to use -fvisibility=hidden and export
1467           those classes which are intended to be externally visible.
1468           Unfortunately it is possible for code to rely, perhaps
1469           accidentally, on the Visual Studio behavior.
1470
1471           Among the consequences of these changes are that static data
1472           members of the same type with the same name but defined in
1473           different shared objects will be different, so changing one will
1474           not change the other; and that pointers to function members defined
1475           in different shared objects may not compare equal.  When this flag
1476           is given, it is a violation of the ODR to define types with the
1477           same name differently.
1478
1479       -fno-weak
1480           Do not use weak symbol support, even if it is provided by the
1481           linker.  By default, G++ will use weak symbols if they are
1482           available.  This option exists only for testing, and should not be
1483           used by end-users; it will result in inferior code and has no
1484           benefits.  This option may be removed in a future release of G++.
1485
1486       -nostdinc++
1487           Do not search for header files in the standard directories specific
1488           to C++, but do still search the other standard directories.  (This
1489           option is used when building the C++ library.)
1490
1491       In addition, these optimization, warning, and code generation options
1492       have meanings only for C++ programs:
1493
1494       -fno-default-inline
1495           Do not assume inline for functions defined inside a class scope.
1496             Note that these functions will have linkage like inline
1497           functions; they just won't be inlined by default.
1498
1499       -Wabi (C, Objective-C, C++ and Objective-C++ only)
1500           Warn when G++ generates code that is probably not compatible with
1501           the vendor-neutral C++ ABI.  Although an effort has been made to
1502           warn about all such cases, there are probably some cases that are
1503           not warned about, even though G++ is generating incompatible code.
1504           There may also be cases where warnings are emitted even though the
1505           code that is generated will be compatible.
1506
1507           You should rewrite your code to avoid these warnings if you are
1508           concerned about the fact that code generated by G++ may not be
1509           binary compatible with code generated by other compilers.
1510
1511           The known incompatibilities at this point include:
1512
1513           ·   Incorrect handling of tail-padding for bit-fields.  G++ may
1514               attempt to pack data into the same byte as a base class.  For
1515               example:
1516
1517                       struct A { virtual void f(); int f1 : 1; };
1518                       struct B : public A { int f2 : 1; };
1519
1520               In this case, G++ will place "B::f2" into the same byte
1521               as"A::f1"; other compilers will not.  You can avoid this
1522               problem by explicitly padding "A" so that its size is a
1523               multiple of the byte size on your platform; that will cause G++
1524               and other compilers to layout "B" identically.
1525
1526           ·   Incorrect handling of tail-padding for virtual bases.  G++ does
1527               not use tail padding when laying out virtual bases.  For
1528               example:
1529
1530                       struct A { virtual void f(); char c1; };
1531                       struct B { B(); char c2; };
1532                       struct C : public A, public virtual B {};
1533
1534               In this case, G++ will not place "B" into the tail-padding for
1535               "A"; other compilers will.  You can avoid this problem by
1536               explicitly padding "A" so that its size is a multiple of its
1537               alignment (ignoring virtual base classes); that will cause G++
1538               and other compilers to layout "C" identically.
1539
1540           ·   Incorrect handling of bit-fields with declared widths greater
1541               than that of their underlying types, when the bit-fields appear
1542               in a union.  For example:
1543
1544                       union U { int i : 4096; };
1545
1546               Assuming that an "int" does not have 4096 bits, G++ will make
1547               the union too small by the number of bits in an "int".
1548
1549           ·   Empty classes can be placed at incorrect offsets.  For example:
1550
1551                       struct A {};
1552
1553                       struct B {
1554                         A a;
1555                         virtual void f ();
1556                       };
1557
1558                       struct C : public B, public A {};
1559
1560               G++ will place the "A" base class of "C" at a nonzero offset;
1561               it should be placed at offset zero.  G++ mistakenly believes
1562               that the "A" data member of "B" is already at offset zero.
1563
1564           ·   Names of template functions whose types involve "typename" or
1565               template template parameters can be mangled incorrectly.
1566
1567                       template <typename Q>
1568                       void f(typename Q::X) {}
1569
1570                       template <template <typename> class Q>
1571                       void f(typename Q<int>::X) {}
1572
1573               Instantiations of these templates may be mangled incorrectly.
1574
1575           It also warns psABI related changes.  The known psABI changes at
1576           this point include:
1577
1578           ·   For SYSV/x86-64, when passing union with long double, it is
1579               changed to pass in memory as specified in psABI.  For example:
1580
1581                       union U {
1582                         long double ld;
1583                         int i;
1584                       };
1585
1586               "union U" will always be passed in memory.
1587
1588       -Wctor-dtor-privacy (C++ and Objective-C++ only)
1589           Warn when a class seems unusable because all the constructors or
1590           destructors in that class are private, and it has neither friends
1591           nor public static member functions.
1592
1593       -Wnon-virtual-dtor (C++ and Objective-C++ only)
1594           Warn when a class has virtual functions and accessible non-virtual
1595           destructor, in which case it would be possible but unsafe to delete
1596           an instance of a derived class through a pointer to the base class.
1597           This warning is also enabled if -Weffc++ is specified.
1598
1599       -Wreorder (C++ and Objective-C++ only)
1600           Warn when the order of member initializers given in the code does
1601           not match the order in which they must be executed.  For instance:
1602
1603                   struct A {
1604                     int i;
1605                     int j;
1606                     A(): j (0), i (1) { }
1607                   };
1608
1609           The compiler will rearrange the member initializers for i and j to
1610           match the declaration order of the members, emitting a warning to
1611           that effect.  This warning is enabled by -Wall.
1612
1613       The following -W... options are not affected by -Wall.
1614
1615       -Weffc++ (C++ and Objective-C++ only)
1616           Warn about violations of the following style guidelines from Scott
1617           Meyers' Effective C++ book:
1618
1619           ·   Item 11:  Define a copy constructor and an assignment operator
1620               for classes with dynamically allocated memory.
1621
1622           ·   Item 12:  Prefer initialization to assignment in constructors.
1623
1624           ·   Item 14:  Make destructors virtual in base classes.
1625
1626           ·   Item 15:  Have "operator=" return a reference to *this.
1627
1628           ·   Item 23:  Don't try to return a reference when you must return
1629               an object.
1630
1631           Also warn about violations of the following style guidelines from
1632           Scott Meyers' More Effective C++ book:
1633
1634           ·   Item 6:  Distinguish between prefix and postfix forms of
1635               increment and decrement operators.
1636
1637           ·   Item 7:  Never overload "&&", "||", or ",".
1638
1639           When selecting this option, be aware that the standard library
1640           headers do not obey all of these guidelines; use grep -v to filter
1641           out those warnings.
1642
1643       -Wstrict-null-sentinel (C++ and Objective-C++ only)
1644           Warn also about the use of an uncasted "NULL" as sentinel.  When
1645           compiling only with GCC this is a valid sentinel, as "NULL" is
1646           defined to "__null".  Although it is a null pointer constant not a
1647           null pointer, it is guaranteed to be of the same size as a pointer.
1648           But this use is not portable across different compilers.
1649
1650       -Wno-non-template-friend (C++ and Objective-C++ only)
1651           Disable warnings when non-templatized friend functions are declared
1652           within a template.  Since the advent of explicit template
1653           specification support in G++, if the name of the friend is an
1654           unqualified-id (i.e., friend foo(int)), the C++ language
1655           specification demands that the friend declare or define an
1656           ordinary, nontemplate function.  (Section 14.5.3).  Before G++
1657           implemented explicit specification, unqualified-ids could be
1658           interpreted as a particular specialization of a templatized
1659           function.  Because this non-conforming behavior is no longer the
1660           default behavior for G++, -Wnon-template-friend allows the compiler
1661           to check existing code for potential trouble spots and is on by
1662           default.  This new compiler behavior can be turned off with
1663           -Wno-non-template-friend which keeps the conformant compiler code
1664           but disables the helpful warning.
1665
1666       -Wold-style-cast (C++ and Objective-C++ only)
1667           Warn if an old-style (C-style) cast to a non-void type is used
1668           within a C++ program.  The new-style casts (dynamic_cast,
1669           static_cast, reinterpret_cast, and const_cast) are less vulnerable
1670           to unintended effects and much easier to search for.
1671
1672       -Woverloaded-virtual (C++ and Objective-C++ only)
1673           Warn when a function declaration hides virtual functions from a
1674           base class.  For example, in:
1675
1676                   struct A {
1677                     virtual void f();
1678                   };
1679
1680                   struct B: public A {
1681                     void f(int);
1682                   };
1683
1684           the "A" class version of "f" is hidden in "B", and code like:
1685
1686                   B* b;
1687                   b->f();
1688
1689           will fail to compile.
1690
1691       -Wno-pmf-conversions (C++ and Objective-C++ only)
1692           Disable the diagnostic for converting a bound pointer to member
1693           function to a plain pointer.
1694
1695       -Wsign-promo (C++ and Objective-C++ only)
1696           Warn when overload resolution chooses a promotion from unsigned or
1697           enumerated type to a signed type, over a conversion to an unsigned
1698           type of the same size.  Previous versions of G++ would try to
1699           preserve unsignedness, but the standard mandates the current
1700           behavior.
1701
1702                   struct A {
1703                     operator int ();
1704                     A& operator = (int);
1705                   };
1706
1707                   main ()
1708                   {
1709                     A a,b;
1710                     a = b;
1711                   }
1712
1713           In this example, G++ will synthesize a default A& operator = (const
1714           A&);, while cfront will use the user-defined operator =.
1715
1716   Options Controlling Objective-C and Objective-C++ Dialects
1717       (NOTE: This manual does not describe the Objective-C and Objective-C++
1718       languages themselves.  See
1719
1720       This section describes the command-line options that are only
1721       meaningful for Objective-C and Objective-C++ programs, but you can also
1722       use most of the language-independent GNU compiler options.  For
1723       example, you might compile a file "some_class.m" like this:
1724
1725               gcc -g -fgnu-runtime -O -c some_class.m
1726
1727       In this example, -fgnu-runtime is an option meant only for Objective-C
1728       and Objective-C++ programs; you can use the other options with any
1729       language supported by GCC.
1730
1731       Note that since Objective-C is an extension of the C language,
1732       Objective-C compilations may also use options specific to the C front-
1733       end (e.g., -Wtraditional).  Similarly, Objective-C++ compilations may
1734       use C++-specific options (e.g., -Wabi).
1735
1736       Here is a list of options that are only for compiling Objective-C and
1737       Objective-C++ programs:
1738
1739       -fconstant-string-class=class-name
1740           Use class-name as the name of the class to instantiate for each
1741           literal string specified with the syntax "@"..."".  The default
1742           class name is "NXConstantString" if the GNU runtime is being used,
1743           and "NSConstantString" if the NeXT runtime is being used (see
1744           below).  The -fconstant-cfstrings option, if also present, will
1745           override the -fconstant-string-class setting and cause "@"...""
1746           literals to be laid out as constant CoreFoundation strings.
1747
1748       -fgnu-runtime
1749           Generate object code compatible with the standard GNU Objective-C
1750           runtime.  This is the default for most types of systems.
1751
1752       -fnext-runtime
1753           Generate output compatible with the NeXT runtime.  This is the
1754           default for NeXT-based systems, including Darwin and Mac OS X.  The
1755           macro "__NEXT_RUNTIME__" is predefined if (and only if) this option
1756           is used.
1757
1758       -fno-nil-receivers
1759           Assume that all Objective-C message dispatches (e.g., "[receiver
1760           message:arg]") in this translation unit ensure that the receiver is
1761           not "nil".  This allows for more efficient entry points in the
1762           runtime to be used.  Currently, this option is only available in
1763           conjunction with the NeXT runtime on Mac OS X 10.3 and later.
1764
1765       -fobjc-call-cxx-cdtors
1766           For each Objective-C class, check if any of its instance variables
1767           is a C++ object with a non-trivial default constructor.  If so,
1768           synthesize a special "- (id) .cxx_construct" instance method that
1769           will run non-trivial default constructors on any such instance
1770           variables, in order, and then return "self".  Similarly, check if
1771           any instance variable is a C++ object with a non-trivial
1772           destructor, and if so, synthesize a special "- (void)
1773           .cxx_destruct" method that will run all such default destructors,
1774           in reverse order.
1775
1776           The "- (id) .cxx_construct" and/or "- (void) .cxx_destruct" methods
1777           thusly generated will only operate on instance variables declared
1778           in the current Objective-C class, and not those inherited from
1779           superclasses.  It is the responsibility of the Objective-C runtime
1780           to invoke all such methods in an object's inheritance hierarchy.
1781           The "- (id) .cxx_construct" methods will be invoked by the runtime
1782           immediately after a new object instance is allocated; the "- (void)
1783           .cxx_destruct" methods will be invoked immediately before the
1784           runtime deallocates an object instance.
1785
1786           As of this writing, only the NeXT runtime on Mac OS X 10.4 and
1787           later has support for invoking the "- (id) .cxx_construct" and "-
1788           (void) .cxx_destruct" methods.
1789
1790       -fobjc-direct-dispatch
1791           Allow fast jumps to the message dispatcher.  On Darwin this is
1792           accomplished via the comm page.
1793
1794       -fobjc-exceptions
1795           Enable syntactic support for structured exception handling in
1796           Objective-C, similar to what is offered by C++ and Java.  This
1797           option is unavailable in conjunction with the NeXT runtime on Mac
1798           OS X 10.2 and earlier.
1799
1800                     @try {
1801                       ...
1802                          @throw expr;
1803                       ...
1804                     }
1805                     @catch (AnObjCClass *exc) {
1806                       ...
1807                         @throw expr;
1808                       ...
1809                         @throw;
1810                       ...
1811                     }
1812                     @catch (AnotherClass *exc) {
1813                       ...
1814                     }
1815                     @catch (id allOthers) {
1816                       ...
1817                     }
1818                     @finally {
1819                       ...
1820                         @throw expr;
1821                       ...
1822                     }
1823
1824           The @throw statement may appear anywhere in an Objective-C or
1825           Objective-C++ program; when used inside of a @catch block, the
1826           @throw may appear without an argument (as shown above), in which
1827           case the object caught by the @catch will be rethrown.
1828
1829           Note that only (pointers to) Objective-C objects may be thrown and
1830           caught using this scheme.  When an object is thrown, it will be
1831           caught by the nearest @catch clause capable of handling objects of
1832           that type, analogously to how "catch" blocks work in C++ and Java.
1833           A "@catch(id ...)" clause (as shown above) may also be provided to
1834           catch any and all Objective-C exceptions not caught by previous
1835           @catch clauses (if any).
1836
1837           The @finally clause, if present, will be executed upon exit from
1838           the immediately preceding "@try ... @catch" section.  This will
1839           happen regardless of whether any exceptions are thrown, caught or
1840           rethrown inside the "@try ... @catch" section, analogously to the
1841           behavior of the "finally" clause in Java.
1842
1843           There are several caveats to using the new exception mechanism:
1844
1845           ·   Although currently designed to be binary compatible with
1846               "NS_HANDLER"-style idioms provided by the "NSException" class,
1847               the new exceptions can only be used on Mac OS X 10.3 (Panther)
1848               and later systems, due to additional functionality needed in
1849               the (NeXT) Objective-C runtime.
1850
1851           ·   As mentioned above, the new exceptions do not support handling
1852               types other than Objective-C objects.   Furthermore, when used
1853               from Objective-C++, the Objective-C exception model does not
1854               interoperate with C++ exceptions at this time.  This means you
1855               cannot @throw an exception from Objective-C and "catch" it in
1856               C++, or vice versa (i.e., "throw ... @catch").
1857
1858           The -fobjc-exceptions switch also enables the use of
1859           synchronization blocks for thread-safe execution:
1860
1861                     @synchronized (ObjCClass *guard) {
1862                       ...
1863                     }
1864
1865           Upon entering the @synchronized block, a thread of execution shall
1866           first check whether a lock has been placed on the corresponding
1867           "guard" object by another thread.  If it has, the current thread
1868           shall wait until the other thread relinquishes its lock.  Once
1869           "guard" becomes available, the current thread will place its own
1870           lock on it, execute the code contained in the @synchronized block,
1871           and finally relinquish the lock (thereby making "guard" available
1872           to other threads).
1873
1874           Unlike Java, Objective-C does not allow for entire methods to be
1875           marked @synchronized.  Note that throwing exceptions out of
1876           @synchronized blocks is allowed, and will cause the guarding object
1877           to be unlocked properly.
1878
1879       -fobjc-gc
1880           Enable garbage collection (GC) in Objective-C and Objective-C++
1881           programs.
1882
1883       -freplace-objc-classes
1884           Emit a special marker instructing ld(1) not to statically link in
1885           the resulting object file, and allow dyld(1) to load it in at run
1886           time instead.  This is used in conjunction with the Fix-and-
1887           Continue debugging mode, where the object file in question may be
1888           recompiled and dynamically reloaded in the course of program
1889           execution, without the need to restart the program itself.
1890           Currently, Fix-and-Continue functionality is only available in
1891           conjunction with the NeXT runtime on Mac OS X 10.3 and later.
1892
1893       -fzero-link
1894           When compiling for the NeXT runtime, the compiler ordinarily
1895           replaces calls to "objc_getClass("...")" (when the name of the
1896           class is known at compile time) with static class references that
1897           get initialized at load time, which improves run-time performance.
1898           Specifying the -fzero-link flag suppresses this behavior and causes
1899           calls to "objc_getClass("...")"  to be retained.  This is useful in
1900           Zero-Link debugging mode, since it allows for individual class
1901           implementations to be modified during program execution.
1902
1903       -gen-decls
1904           Dump interface declarations for all classes seen in the source file
1905           to a file named sourcename.decl.
1906
1907       -Wassign-intercept (Objective-C and Objective-C++ only)
1908           Warn whenever an Objective-C assignment is being intercepted by the
1909           garbage collector.
1910
1911       -Wno-protocol (Objective-C and Objective-C++ only)
1912           If a class is declared to implement a protocol, a warning is issued
1913           for every method in the protocol that is not implemented by the
1914           class.  The default behavior is to issue a warning for every method
1915           not explicitly implemented in the class, even if a method
1916           implementation is inherited from the superclass.  If you use the
1917           -Wno-protocol option, then methods inherited from the superclass
1918           are considered to be implemented, and no warning is issued for
1919           them.
1920
1921       -Wselector (Objective-C and Objective-C++ only)
1922           Warn if multiple methods of different types for the same selector
1923           are found during compilation.  The check is performed on the list
1924           of methods in the final stage of compilation.  Additionally, a
1925           check is performed for each selector appearing in a
1926           "@selector(...)"  expression, and a corresponding method for that
1927           selector has been found during compilation.  Because these checks
1928           scan the method table only at the end of compilation, these
1929           warnings are not produced if the final stage of compilation is not
1930           reached, for example because an error is found during compilation,
1931           or because the -fsyntax-only option is being used.
1932
1933       -Wstrict-selector-match (Objective-C and Objective-C++ only)
1934           Warn if multiple methods with differing argument and/or return
1935           types are found for a given selector when attempting to send a
1936           message using this selector to a receiver of type "id" or "Class".
1937           When this flag is off (which is the default behavior), the compiler
1938           will omit such warnings if any differences found are confined to
1939           types which share the same size and alignment.
1940
1941       -Wundeclared-selector (Objective-C and Objective-C++ only)
1942           Warn if a "@selector(...)" expression referring to an undeclared
1943           selector is found.  A selector is considered undeclared if no
1944           method with that name has been declared before the "@selector(...)"
1945           expression, either explicitly in an @interface or @protocol
1946           declaration, or implicitly in an @implementation section.  This
1947           option always performs its checks as soon as a "@selector(...)"
1948           expression is found, while -Wselector only performs its checks in
1949           the final stage of compilation.  This also enforces the coding
1950           style convention that methods and selectors must be declared before
1951           being used.
1952
1953       -print-objc-runtime-info
1954           Generate C header describing the largest structure that is passed
1955           by value, if any.
1956
1957   Options to Control Diagnostic Messages Formatting
1958       Traditionally, diagnostic messages have been formatted irrespective of
1959       the output device's aspect (e.g. its width, ...).  The options
1960       described below can be used to control the diagnostic messages
1961       formatting algorithm, e.g. how many characters per line, how often
1962       source location information should be reported.  Right now, only the
1963       C++ front end can honor these options.  However it is expected, in the
1964       near future, that the remaining front ends would be able to digest them
1965       correctly.
1966
1967       -fmessage-length=n
1968           Try to format error messages so that they fit on lines of about n
1969           characters.  The default is 72 characters for g++ and 0 for the
1970           rest of the front ends supported by GCC.  If n is zero, then no
1971           line-wrapping will be done; each error message will appear on a
1972           single line.
1973
1974       -fdiagnostics-show-location=once
1975           Only meaningful in line-wrapping mode.  Instructs the diagnostic
1976           messages reporter to emit once source location information; that
1977           is, in case the message is too long to fit on a single physical
1978           line and has to be wrapped, the source location won't be emitted
1979           (as prefix) again, over and over, in subsequent continuation lines.
1980           This is the default behavior.
1981
1982       -fdiagnostics-show-location=every-line
1983           Only meaningful in line-wrapping mode.  Instructs the diagnostic
1984           messages reporter to emit the same source location information (as
1985           prefix) for physical lines that result from the process of breaking
1986           a message which is too long to fit on a single line.
1987
1988       -fdiagnostics-show-option
1989           This option instructs the diagnostic machinery to add text to each
1990           diagnostic emitted, which indicates which command line option
1991           directly controls that diagnostic, when such an option is known to
1992           the diagnostic machinery.
1993
1994       -Wcoverage-mismatch
1995           Warn if feedback profiles do not match when using the -fprofile-use
1996           option.  If a source file was changed between -fprofile-gen and
1997           -fprofile-use, the files with the profile feedback can fail to
1998           match the source file and GCC can not use the profile feedback
1999           information.  By default, GCC emits an error message in this case.
2000           The option -Wcoverage-mismatch emits a warning instead of an error.
2001           GCC does not use appropriate feedback profiles, so using this
2002           option can result in poorly optimized code.  This option is useful
2003           only in the case of very minor changes such as bug fixes to an
2004           existing code-base.
2005
2006   Options to Request or Suppress Warnings
2007       Warnings are diagnostic messages that report constructions which are
2008       not inherently erroneous but which are risky or suggest there may have
2009       been an error.
2010
2011       The following language-independent options do not enable specific
2012       warnings but control the kinds of diagnostics produced by GCC.
2013
2014       -fsyntax-only
2015           Check the code for syntax errors, but don't do anything beyond
2016           that.
2017
2018       -w  Inhibit all warning messages.
2019
2020       -Werror
2021           Make all warnings into errors.
2022
2023       -Werror=
2024           Make the specified warning into an error.  The specifier for a
2025           warning is appended, for example -Werror=switch turns the warnings
2026           controlled by -Wswitch into errors.  This switch takes a negative
2027           form, to be used to negate -Werror for specific warnings, for
2028           example -Wno-error=switch makes -Wswitch warnings not be errors,
2029           even when -Werror is in effect.  You can use the
2030           -fdiagnostics-show-option option to have each controllable warning
2031           amended with the option which controls it, to determine what to use
2032           with this option.
2033
2034           Note that specifying -Werror=foo automatically implies -Wfoo.
2035           However, -Wno-error=foo does not imply anything.
2036
2037       -Wfatal-errors
2038           This option causes the compiler to abort compilation on the first
2039           error occurred rather than trying to keep going and printing
2040           further error messages.
2041
2042       You can request many specific warnings with options beginning -W, for
2043       example -Wimplicit to request warnings on implicit declarations.  Each
2044       of these specific warning options also has a negative form beginning
2045       -Wno- to turn off warnings; for example, -Wno-implicit.  This manual
2046       lists only one of the two forms, whichever is not the default.  For
2047       further, language-specific options also refer to C++ Dialect Options
2048       and Objective-C and Objective-C++ Dialect Options.
2049
2050       -pedantic
2051           Issue all the warnings demanded by strict ISO C and ISO C++; reject
2052           all programs that use forbidden extensions, and some other programs
2053           that do not follow ISO C and ISO C++.  For ISO C, follows the
2054           version of the ISO C standard specified by any -std option used.
2055
2056           Valid ISO C and ISO C++ programs should compile properly with or
2057           without this option (though a rare few will require -ansi or a -std
2058           option specifying the required version of ISO C).  However, without
2059           this option, certain GNU extensions and traditional C and C++
2060           features are supported as well.  With this option, they are
2061           rejected.
2062
2063           -pedantic does not cause warning messages for use of the alternate
2064           keywords whose names begin and end with __.  Pedantic warnings are
2065           also disabled in the expression that follows "__extension__".
2066           However, only system header files should use these escape routes;
2067           application programs should avoid them.
2068
2069           Some users try to use -pedantic to check programs for strict ISO C
2070           conformance.  They soon find that it does not do quite what they
2071           want: it finds some non-ISO practices, but not all---only those for
2072           which ISO C requires a diagnostic, and some others for which
2073           diagnostics have been added.
2074
2075           A feature to report any failure to conform to ISO C might be useful
2076           in some instances, but would require considerable additional work
2077           and would be quite different from -pedantic.  We don't have plans
2078           to support such a feature in the near future.
2079
2080           Where the standard specified with -std represents a GNU extended
2081           dialect of C, such as gnu89 or gnu99, there is a corresponding base
2082           standard, the version of ISO C on which the GNU extended dialect is
2083           based.  Warnings from -pedantic are given where they are required
2084           by the base standard.  (It would not make sense for such warnings
2085           to be given only for features not in the specified GNU C dialect,
2086           since by definition the GNU dialects of C include all features the
2087           compiler supports with the given option, and there would be nothing
2088           to warn about.)
2089
2090       -pedantic-errors
2091           Like -pedantic, except that errors are produced rather than
2092           warnings.
2093
2094       -Wall
2095           This enables all the warnings about constructions that some users
2096           consider questionable, and that are easy to avoid (or modify to
2097           prevent the warning), even in conjunction with macros.  This also
2098           enables some language-specific warnings described in C++ Dialect
2099           Options and Objective-C and Objective-C++ Dialect Options.
2100
2101           -Wall turns on the following warning flags:
2102
2103           -Waddress -Warray-bounds (only with -O2) -Wc++0x-compat
2104           -Wchar-subscripts -Wimplicit-int -Wimplicit-function-declaration
2105           -Wcomment -Wformat -Wmain (only for C/ObjC and unless
2106           -ffreestanding) -Wmissing-braces -Wnonnull -Wparentheses
2107           -Wpointer-sign -Wreorder -Wreturn-type -Wsequence-point
2108           -Wsign-compare (only in C++) -Wstrict-aliasing -Wstrict-overflow=1
2109           -Wswitch -Wtrigraphs -Wuninitialized -Wunknown-pragmas
2110           -Wunused-function -Wunused-label -Wunused-value -Wunused-variable
2111           -Wvolatile-register-var
2112
2113           Note that some warning flags are not implied by -Wall.  Some of
2114           them warn about constructions that users generally do not consider
2115           questionable, but which occasionally you might wish to check for;
2116           others warn about constructions that are necessary or hard to avoid
2117           in some cases, and there is no simple way to modify the code to
2118           suppress the warning. Some of them are enabled by -Wextra but many
2119           of them must be enabled individually.
2120
2121       -Wextra
2122           This enables some extra warning flags that are not enabled by
2123           -Wall. (This option used to be called -W.  The older name is still
2124           supported, but the newer name is more descriptive.)
2125
2126           -Wclobbered -Wempty-body -Wignored-qualifiers
2127           -Wmissing-field-initializers -Wmissing-parameter-type (C only)
2128           -Wold-style-declaration (C only) -Woverride-init -Wsign-compare
2129           -Wtype-limits -Wuninitialized -Wunused-parameter (only with
2130           -Wunused or -Wall)
2131
2132           The option -Wextra also prints warning messages for the following
2133           cases:
2134
2135           ·   A pointer is compared against integer zero with <, <=, >, or
2136               >=.
2137
2138           ·   (C++ only) An enumerator and a non-enumerator both appear in a
2139               conditional expression.
2140
2141           ·   (C++ only) Ambiguous virtual bases.
2142
2143           ·   (C++ only) Subscripting an array which has been declared
2144               register.
2145
2146           ·   (C++ only) Taking the address of a variable which has been
2147               declared register.
2148
2149           ·   (C++ only) A base class is not initialized in a derived class'
2150               copy constructor.
2151
2152       -Wchar-subscripts
2153           Warn if an array subscript has type "char".  This is a common cause
2154           of error, as programmers often forget that this type is signed on
2155           some machines.  This warning is enabled by -Wall.
2156
2157       -Wcomment
2158           Warn whenever a comment-start sequence /* appears in a /* comment,
2159           or whenever a Backslash-Newline appears in a // comment.  This
2160           warning is enabled by -Wall.
2161
2162       -Wformat
2163           Check calls to "printf" and "scanf", etc., to make sure that the
2164           arguments supplied have types appropriate to the format string
2165           specified, and that the conversions specified in the format string
2166           make sense.  This includes standard functions, and others specified
2167           by format attributes, in the "printf", "scanf", "strftime" and
2168           "strfmon" (an X/Open extension, not in the C standard) families (or
2169           other target-specific families).  Which functions are checked
2170           without format attributes having been specified depends on the
2171           standard version selected, and such checks of functions without the
2172           attribute specified are disabled by -ffreestanding or -fno-builtin.
2173
2174           The formats are checked against the format features supported by
2175           GNU libc version 2.2.  These include all ISO C90 and C99 features,
2176           as well as features from the Single Unix Specification and some BSD
2177           and GNU extensions.  Other library implementations may not support
2178           all these features; GCC does not support warning about features
2179           that go beyond a particular library's limitations.  However, if
2180           -pedantic is used with -Wformat, warnings will be given about
2181           format features not in the selected standard version (but not for
2182           "strfmon" formats, since those are not in any version of the C
2183           standard).
2184
2185           Since -Wformat also checks for null format arguments for several
2186           functions, -Wformat also implies -Wnonnull.
2187
2188           -Wformat is included in -Wall.  For more control over some aspects
2189           of format checking, the options -Wformat-y2k,
2190           -Wno-format-extra-args, -Wno-format-zero-length,
2191           -Wformat-nonliteral, -Wformat-security, and -Wformat=2 are
2192           available, but are not included in -Wall.
2193
2194       -Wformat-y2k
2195           If -Wformat is specified, also warn about "strftime" formats which
2196           may yield only a two-digit year.
2197
2198       -Wno-format-contains-nul
2199           If -Wformat is specified, do not warn about format strings that
2200           contain NUL bytes.
2201
2202       -Wno-format-extra-args
2203           If -Wformat is specified, do not warn about excess arguments to a
2204           "printf" or "scanf" format function.  The C standard specifies that
2205           such arguments are ignored.
2206
2207           Where the unused arguments lie between used arguments that are
2208           specified with $ operand number specifications, normally warnings
2209           are still given, since the implementation could not know what type
2210           to pass to "va_arg" to skip the unused arguments.  However, in the
2211           case of "scanf" formats, this option will suppress the warning if
2212           the unused arguments are all pointers, since the Single Unix
2213           Specification says that such unused arguments are allowed.
2214
2215       -Wno-format-zero-length (C and Objective-C only)
2216           If -Wformat is specified, do not warn about zero-length formats.
2217           The C standard specifies that zero-length formats are allowed.
2218
2219       -Wformat-nonliteral
2220           If -Wformat is specified, also warn if the format string is not a
2221           string literal and so cannot be checked, unless the format function
2222           takes its format arguments as a "va_list".
2223
2224       -Wformat-security
2225           If -Wformat is specified, also warn about uses of format functions
2226           that represent possible security problems.  At present, this warns
2227           about calls to "printf" and "scanf" functions where the format
2228           string is not a string literal and there are no format arguments,
2229           as in "printf (foo);".  This may be a security hole if the format
2230           string came from untrusted input and contains %n.  (This is
2231           currently a subset of what -Wformat-nonliteral warns about, but in
2232           future warnings may be added to -Wformat-security that are not
2233           included in -Wformat-nonliteral.)
2234
2235       -Wformat=2
2236           Enable -Wformat plus format checks not included in -Wformat.
2237           Currently equivalent to -Wformat -Wformat-nonliteral
2238           -Wformat-security -Wformat-y2k.
2239
2240       -Wnonnull (C and Objective-C only)
2241           Warn about passing a null pointer for arguments marked as requiring
2242           a non-null value by the "nonnull" function attribute.
2243
2244           -Wnonnull is included in -Wall and -Wformat.  It can be disabled
2245           with the -Wno-nonnull option.
2246
2247       -Winit-self (C, C++, Objective-C and Objective-C++ only)
2248           Warn about uninitialized variables which are initialized with
2249           themselves.  Note this option can only be used with the
2250           -Wuninitialized option.
2251
2252           For example, GCC will warn about "i" being uninitialized in the
2253           following snippet only when -Winit-self has been specified:
2254
2255                   int f()
2256                   {
2257                     int i = i;
2258                     return i;
2259                   }
2260
2261       -Wimplicit-int (C and Objective-C only)
2262           Warn when a declaration does not specify a type.  This warning is
2263           enabled by -Wall.
2264
2265       -Wimplicit-function-declaration (C and Objective-C only)
2266           Give a warning whenever a function is used before being declared.
2267           In C99 mode (-std=c99 or -std=gnu99), this warning is enabled by
2268           default and it is made into an error by -pedantic-errors. This
2269           warning is also enabled by -Wall.
2270
2271       -Wimplicit
2272           Same as -Wimplicit-int and -Wimplicit-function-declaration.  This
2273           warning is enabled by -Wall.
2274
2275       -Wignored-qualifiers (C and C++ only)
2276           Warn if the return type of a function has a type qualifier such as
2277           "const".  For ISO C such a type qualifier has no effect, since the
2278           value returned by a function is not an lvalue.  For C++, the
2279           warning is only emitted for scalar types or "void".  ISO C
2280           prohibits qualified "void" return types on function definitions, so
2281           such return types always receive a warning even without this
2282           option.
2283
2284           This warning is also enabled by -Wextra.
2285
2286       -Wmain
2287           Warn if the type of main is suspicious.  main should be a function
2288           with external linkage, returning int, taking either zero arguments,
2289           two, or three arguments of appropriate types.  This warning is
2290           enabled by default in C++ and is enabled by either -Wall or
2291           -pedantic.
2292
2293       -Wmissing-braces
2294           Warn if an aggregate or union initializer is not fully bracketed.
2295           In the following example, the initializer for a is not fully
2296           bracketed, but that for b is fully bracketed.
2297
2298                   int a[2][2] = { 0, 1, 2, 3 };
2299                   int b[2][2] = { { 0, 1 }, { 2, 3 } };
2300
2301           This warning is enabled by -Wall.
2302
2303       -Wmissing-include-dirs (C, C++, Objective-C and Objective-C++ only)
2304           Warn if a user-supplied include directory does not exist.
2305
2306       -Wparentheses
2307           Warn if parentheses are omitted in certain contexts, such as when
2308           there is an assignment in a context where a truth value is
2309           expected, or when operators are nested whose precedence people
2310           often get confused about.
2311
2312           Also warn if a comparison like x<=y<=z appears; this is equivalent
2313           to (x<=y ? 1 : 0) <= z, which is a different interpretation from
2314           that of ordinary mathematical notation.
2315
2316           Also warn about constructions where there may be confusion to which
2317           "if" statement an "else" branch belongs.  Here is an example of
2318           such a case:
2319
2320                   {
2321                     if (a)
2322                       if (b)
2323                         foo ();
2324                     else
2325                       bar ();
2326                   }
2327
2328           In C/C++, every "else" branch belongs to the innermost possible
2329           "if" statement, which in this example is "if (b)".  This is often
2330           not what the programmer expected, as illustrated in the above
2331           example by indentation the programmer chose.  When there is the
2332           potential for this confusion, GCC will issue a warning when this
2333           flag is specified.  To eliminate the warning, add explicit braces
2334           around the innermost "if" statement so there is no way the "else"
2335           could belong to the enclosing "if".  The resulting code would look
2336           like this:
2337
2338                   {
2339                     if (a)
2340                       {
2341                         if (b)
2342                           foo ();
2343                         else
2344                           bar ();
2345                       }
2346                   }
2347
2348           This warning is enabled by -Wall.
2349
2350       -Wsequence-point
2351           Warn about code that may have undefined semantics because of
2352           violations of sequence point rules in the C and C++ standards.
2353
2354           The C and C++ standards defines the order in which expressions in a
2355           C/C++ program are evaluated in terms of sequence points, which
2356           represent a partial ordering between the execution of parts of the
2357           program: those executed before the sequence point, and those
2358           executed after it.  These occur after the evaluation of a full
2359           expression (one which is not part of a larger expression), after
2360           the evaluation of the first operand of a "&&", "||", "? :" or ","
2361           (comma) operator, before a function is called (but after the
2362           evaluation of its arguments and the expression denoting the called
2363           function), and in certain other places.  Other than as expressed by
2364           the sequence point rules, the order of evaluation of subexpressions
2365           of an expression is not specified.  All these rules describe only a
2366           partial order rather than a total order, since, for example, if two
2367           functions are called within one expression with no sequence point
2368           between them, the order in which the functions are called is not
2369           specified.  However, the standards committee have ruled that
2370           function calls do not overlap.
2371
2372           It is not specified when between sequence points modifications to
2373           the values of objects take effect.  Programs whose behavior depends
2374           on this have undefined behavior; the C and C++ standards specify
2375           that "Between the previous and next sequence point an object shall
2376           have its stored value modified at most once by the evaluation of an
2377           expression.  Furthermore, the prior value shall be read only to
2378           determine the value to be stored.".  If a program breaks these
2379           rules, the results on any particular implementation are entirely
2380           unpredictable.
2381
2382           Examples of code with undefined behavior are "a = a++;", "a[n] =
2383           b[n++]" and "a[i++] = i;".  Some more complicated cases are not
2384           diagnosed by this option, and it may give an occasional false
2385           positive result, but in general it has been found fairly effective
2386           at detecting this sort of problem in programs.
2387
2388           The standard is worded confusingly, therefore there is some debate
2389           over the precise meaning of the sequence point rules in subtle
2390           cases.  Links to discussions of the problem, including proposed
2391           formal definitions, may be found on the GCC readings page, at
2392           <http://gcc.gnu.org/readings.html>.
2393
2394           This warning is enabled by -Wall for C and C++.
2395
2396       -Wreturn-type
2397           Warn whenever a function is defined with a return-type that
2398           defaults to "int".  Also warn about any "return" statement with no
2399           return-value in a function whose return-type is not "void" (falling
2400           off the end of the function body is considered returning without a
2401           value), and about a "return" statement with a expression in a
2402           function whose return-type is "void".
2403
2404           For C++, a function without return type always produces a
2405           diagnostic message, even when -Wno-return-type is specified.  The
2406           only exceptions are main and functions defined in system headers.
2407
2408           This warning is enabled by -Wall.
2409
2410       -Wswitch
2411           Warn whenever a "switch" statement has an index of enumerated type
2412           and lacks a "case" for one or more of the named codes of that
2413           enumeration.  (The presence of a "default" label prevents this
2414           warning.)  "case" labels outside the enumeration range also provoke
2415           warnings when this option is used.  This warning is enabled by
2416           -Wall.
2417
2418       -Wswitch-default
2419           Warn whenever a "switch" statement does not have a "default" case.
2420
2421       -Wswitch-enum
2422           Warn whenever a "switch" statement has an index of enumerated type
2423           and lacks a "case" for one or more of the named codes of that
2424           enumeration.  "case" labels outside the enumeration range also
2425           provoke warnings when this option is used.
2426
2427       -Wsync-nand (C and C++ only)
2428           Warn when "__sync_fetch_and_nand" and "__sync_nand_and_fetch"
2429           built-in functions are used.  These functions changed semantics in
2430           GCC 4.4.
2431
2432       -Wtrigraphs
2433           Warn if any trigraphs are encountered that might change the meaning
2434           of the program (trigraphs within comments are not warned about).
2435           This warning is enabled by -Wall.
2436
2437       -Wunused-but-set-parameter
2438           Warn whenever a function parameter is assigned to, but otherwise
2439           unused (aside from its declaration).
2440
2441           To suppress this warning use the unused attribute.
2442
2443       -Wunused-but-set-variable
2444           Warn whenever a local variable is assigned to, but otherwise unused
2445           (aside from its declaration).
2446
2447           To suppress this warning use the unused attribute.
2448
2449       -Wunused-function
2450           Warn whenever a static function is declared but not defined or a
2451           non-inline static function is unused.  This warning is enabled by
2452           -Wall.
2453
2454       -Wunused-label
2455           Warn whenever a label is declared but not used.  This warning is
2456           enabled by -Wall.
2457
2458           To suppress this warning use the unused attribute.
2459
2460       -Wunused-parameter
2461           Warn whenever a function parameter is unused aside from its
2462           declaration.
2463
2464           To suppress this warning use the unused attribute.
2465
2466       -Wunused-variable
2467           Warn whenever a local variable or non-constant static variable is
2468           unused aside from its declaration.  This warning is enabled by
2469           -Wall.
2470
2471           To suppress this warning use the unused attribute.
2472
2473       -Wunused-value
2474           Warn whenever a statement computes a result that is explicitly not
2475           used. To suppress this warning cast the unused expression to void.
2476           This includes an expression-statement or the left-hand side of a
2477           comma expression that contains no side effects. For example, an
2478           expression such as x[i,j] will cause a warning, while x[(void)i,j]
2479           will not.
2480
2481           This warning is enabled by -Wall.
2482
2483       -Wunused
2484           All the above -Wunused options combined.
2485
2486           In order to get a warning about an unused function parameter, you
2487           must either specify -Wextra -Wunused (note that -Wall implies
2488           -Wunused), or separately specify -Wunused-parameter.
2489
2490       -Wuninitialized
2491           Warn if an automatic variable is used without first being
2492           initialized or if a variable may be clobbered by a "setjmp" call.
2493           In C++, warn if a non-static reference or non-static const member
2494           appears in a class without constructors.
2495
2496           If you want to warn about code which uses the uninitialized value
2497           of the variable in its own initializer, use the -Winit-self option.
2498
2499           These warnings occur for individual uninitialized or clobbered
2500           elements of structure, union or array variables as well as for
2501           variables which are uninitialized or clobbered as a whole.  They do
2502           not occur for variables or elements declared "volatile".  Because
2503           these warnings depend on optimization, the exact variables or
2504           elements for which there are warnings will depend on the precise
2505           optimization options and version of GCC used.
2506
2507           Note that there may be no warning about a variable that is used
2508           only to compute a value that itself is never used, because such
2509           computations may be deleted by data flow analysis before the
2510           warnings are printed.
2511
2512           These warnings are made optional because GCC is not smart enough to
2513           see all the reasons why the code might be correct despite appearing
2514           to have an error.  Here is one example of how this can happen:
2515
2516                   {
2517                     int x;
2518                     switch (y)
2519                       {
2520                       case 1: x = 1;
2521                         break;
2522                       case 2: x = 4;
2523                         break;
2524                       case 3: x = 5;
2525                       }
2526                     foo (x);
2527                   }
2528
2529           If the value of "y" is always 1, 2 or 3, then "x" is always
2530           initialized, but GCC doesn't know this.  Here is another common
2531           case:
2532
2533                   {
2534                     int save_y;
2535                     if (change_y) save_y = y, y = new_y;
2536                     ...
2537                     if (change_y) y = save_y;
2538                   }
2539
2540           This has no bug because "save_y" is used only if it is set.
2541
2542           This option also warns when a non-volatile automatic variable might
2543           be changed by a call to "longjmp".  These warnings as well are
2544           possible only in optimizing compilation.
2545
2546           The compiler sees only the calls to "setjmp".  It cannot know where
2547           "longjmp" will be called; in fact, a signal handler could call it
2548           at any point in the code.  As a result, you may get a warning even
2549           when there is in fact no problem because "longjmp" cannot in fact
2550           be called at the place which would cause a problem.
2551
2552           Some spurious warnings can be avoided if you declare all the
2553           functions you use that never return as "noreturn".
2554
2555           This warning is enabled by -Wall or -Wextra.
2556
2557       -Wunknown-pragmas
2558           Warn when a #pragma directive is encountered which is not
2559           understood by GCC.  If this command line option is used, warnings
2560           will even be issued for unknown pragmas in system header files.
2561           This is not the case if the warnings were only enabled by the -Wall
2562           command line option.
2563
2564       -Wno-pragmas
2565           Do not warn about misuses of pragmas, such as incorrect parameters,
2566           invalid syntax, or conflicts between pragmas.  See also
2567           -Wunknown-pragmas.
2568
2569       -Wstrict-aliasing
2570           This option is only active when -fstrict-aliasing is active.  It
2571           warns about code which might break the strict aliasing rules that
2572           the compiler is using for optimization.  The warning does not catch
2573           all cases, but does attempt to catch the more common pitfalls.  It
2574           is included in -Wall.  It is equivalent to -Wstrict-aliasing=3
2575
2576       -Wstrict-aliasing=n
2577           This option is only active when -fstrict-aliasing is active.  It
2578           warns about code which might break the strict aliasing rules that
2579           the compiler is using for optimization.  Higher levels correspond
2580           to higher accuracy (fewer false positives).  Higher levels also
2581           correspond to more effort, similar to the way -O works.
2582           -Wstrict-aliasing is equivalent to -Wstrict-aliasing=n, with n=3.
2583
2584           Level 1: Most aggressive, quick, least accurate.  Possibly useful
2585           when higher levels do not warn but -fstrict-aliasing still breaks
2586           the code, as it has very few false negatives.  However, it has many
2587           false positives.  Warns for all pointer conversions between
2588           possibly incompatible types, even if never dereferenced.  Runs in
2589           the frontend only.
2590
2591           Level 2: Aggressive, quick, not too precise.  May still have many
2592           false positives (not as many as level 1 though), and few false
2593           negatives (but possibly more than level 1).  Unlike level 1, it
2594           only warns when an address is taken.  Warns about incomplete types.
2595           Runs in the frontend only.
2596
2597           Level 3 (default for -Wstrict-aliasing): Should have very few false
2598           positives and few false negatives.  Slightly slower than levels 1
2599           or 2 when optimization is enabled.  Takes care of the common
2600           punn+dereference pattern in the frontend: "*(int*)&some_float".  If
2601           optimization is enabled, it also runs in the backend, where it
2602           deals with multiple statement cases using flow-sensitive points-to
2603           information.  Only warns when the converted pointer is
2604           dereferenced.  Does not warn about incomplete types.
2605
2606       -Wstrict-overflow
2607       -Wstrict-overflow=n
2608           This option is only active when -fstrict-overflow is active.  It
2609           warns about cases where the compiler optimizes based on the
2610           assumption that signed overflow does not occur.  Note that it does
2611           not warn about all cases where the code might overflow: it only
2612           warns about cases where the compiler implements some optimization.
2613           Thus this warning depends on the optimization level.
2614
2615           An optimization which assumes that signed overflow does not occur
2616           is perfectly safe if the values of the variables involved are such
2617           that overflow never does, in fact, occur.  Therefore this warning
2618           can easily give a false positive: a warning about code which is not
2619           actually a problem.  To help focus on important issues, several
2620           warning levels are defined.  No warnings are issued for the use of
2621           undefined signed overflow when estimating how many iterations a
2622           loop will require, in particular when determining whether a loop
2623           will be executed at all.
2624
2625           -Wstrict-overflow=1
2626               Warn about cases which are both questionable and easy to avoid.
2627               For example: "x + 1 > x"; with -fstrict-overflow, the compiler
2628               will simplify this to 1.  This level of -Wstrict-overflow is
2629               enabled by -Wall; higher levels are not, and must be explicitly
2630               requested.
2631
2632           -Wstrict-overflow=2
2633               Also warn about other cases where a comparison is simplified to
2634               a constant.  For example: "abs (x) >= 0".  This can only be
2635               simplified when -fstrict-overflow is in effect, because "abs
2636               (INT_MIN)" overflows to "INT_MIN", which is less than zero.
2637               -Wstrict-overflow (with no level) is the same as
2638               -Wstrict-overflow=2.
2639
2640           -Wstrict-overflow=3
2641               Also warn about other cases where a comparison is simplified.
2642               For example: "x + 1 > 1" will be simplified to "x > 0".
2643
2644           -Wstrict-overflow=4
2645               Also warn about other simplifications not covered by the above
2646               cases.  For example: "(x * 10) / 5" will be simplified to "x *
2647               2".
2648
2649           -Wstrict-overflow=5
2650               Also warn about cases where the compiler reduces the magnitude
2651               of a constant involved in a comparison.  For example: "x + 2 >
2652               y" will be simplified to "x + 1 >= y".  This is reported only
2653               at the highest warning level because this simplification
2654               applies to many comparisons, so this warning level will give a
2655               very large number of false positives.
2656
2657       -Warray-bounds
2658           This option is only active when -ftree-vrp is active (default for
2659           -O2 and above). It warns about subscripts to arrays that are always
2660           out of bounds. This warning is enabled by -Wall.
2661
2662       -Wno-div-by-zero
2663           Do not warn about compile-time integer division by zero.  Floating
2664           point division by zero is not warned about, as it can be a
2665           legitimate way of obtaining infinities and NaNs.
2666
2667       -Wsystem-headers
2668           Print warning messages for constructs found in system header files.
2669           Warnings from system headers are normally suppressed, on the
2670           assumption that they usually do not indicate real problems and
2671           would only make the compiler output harder to read.  Using this
2672           command line option tells GCC to emit warnings from system headers
2673           as if they occurred in user code.  However, note that using -Wall
2674           in conjunction with this option will not warn about unknown pragmas
2675           in system headers---for that, -Wunknown-pragmas must also be used.
2676
2677       -Wfloat-equal
2678           Warn if floating point values are used in equality comparisons.
2679
2680           The idea behind this is that sometimes it is convenient (for the
2681           programmer) to consider floating-point values as approximations to
2682           infinitely precise real numbers.  If you are doing this, then you
2683           need to compute (by analyzing the code, or in some other way) the
2684           maximum or likely maximum error that the computation introduces,
2685           and allow for it when performing comparisons (and when producing
2686           output, but that's a different problem).  In particular, instead of
2687           testing for equality, you would check to see whether the two values
2688           have ranges that overlap; and this is done with the relational
2689           operators, so equality comparisons are probably mistaken.
2690
2691       -Wtraditional (C and Objective-C only)
2692           Warn about certain constructs that behave differently in
2693           traditional and ISO C.  Also warn about ISO C constructs that have
2694           no traditional C equivalent, and/or problematic constructs which
2695           should be avoided.
2696
2697           ·   Macro parameters that appear within string literals in the
2698               macro body.  In traditional C macro replacement takes place
2699               within string literals, but does not in ISO C.
2700
2701           ·   In traditional C, some preprocessor directives did not exist.
2702               Traditional preprocessors would only consider a line to be a
2703               directive if the # appeared in column 1 on the line.  Therefore
2704               -Wtraditional warns about directives that traditional C
2705               understands but would ignore because the # does not appear as
2706               the first character on the line.  It also suggests you hide
2707               directives like #pragma not understood by traditional C by
2708               indenting them.  Some traditional implementations would not
2709               recognize #elif, so it suggests avoiding it altogether.
2710
2711           ·   A function-like macro that appears without arguments.
2712
2713           ·   The unary plus operator.
2714
2715           ·   The U integer constant suffix, or the F or L floating point
2716               constant suffixes.  (Traditional C does support the L suffix on
2717               integer constants.)  Note, these suffixes appear in macros
2718               defined in the system headers of most modern systems, e.g. the
2719               _MIN/_MAX macros in "<limits.h>".  Use of these macros in user
2720               code might normally lead to spurious warnings, however GCC's
2721               integrated preprocessor has enough context to avoid warning in
2722               these cases.
2723
2724           ·   A function declared external in one block and then used after
2725               the end of the block.
2726
2727           ·   A "switch" statement has an operand of type "long".
2728
2729           ·   A non-"static" function declaration follows a "static" one.
2730               This construct is not accepted by some traditional C compilers.
2731
2732           ·   The ISO type of an integer constant has a different width or
2733               signedness from its traditional type.  This warning is only
2734               issued if the base of the constant is ten.  I.e. hexadecimal or
2735               octal values, which typically represent bit patterns, are not
2736               warned about.
2737
2738           ·   Usage of ISO string concatenation is detected.
2739
2740           ·   Initialization of automatic aggregates.
2741
2742           ·   Identifier conflicts with labels.  Traditional C lacks a
2743               separate namespace for labels.
2744
2745           ·   Initialization of unions.  If the initializer is zero, the
2746               warning is omitted.  This is done under the assumption that the
2747               zero initializer in user code appears conditioned on e.g.
2748               "__STDC__" to avoid missing initializer warnings and relies on
2749               default initialization to zero in the traditional C case.
2750
2751           ·   Conversions by prototypes between fixed/floating point values
2752               and vice versa.  The absence of these prototypes when compiling
2753               with traditional C would cause serious problems.  This is a
2754               subset of the possible conversion warnings, for the full set
2755               use -Wtraditional-conversion.
2756
2757           ·   Use of ISO C style function definitions.  This warning
2758               intentionally is not issued for prototype declarations or
2759               variadic functions because these ISO C features will appear in
2760               your code when using libiberty's traditional C compatibility
2761               macros, "PARAMS" and "VPARAMS".  This warning is also bypassed
2762               for nested functions because that feature is already a GCC
2763               extension and thus not relevant to traditional C compatibility.
2764
2765       -Wtraditional-conversion (C and Objective-C only)
2766           Warn if a prototype causes a type conversion that is different from
2767           what would happen to the same argument in the absence of a
2768           prototype.  This includes conversions of fixed point to floating
2769           and vice versa, and conversions changing the width or signedness of
2770           a fixed point argument except when the same as the default
2771           promotion.
2772
2773       -Wdeclaration-after-statement (C and Objective-C only)
2774           Warn when a declaration is found after a statement in a block.
2775           This construct, known from C++, was introduced with ISO C99 and is
2776           by default allowed in GCC.  It is not supported by ISO C90 and was
2777           not supported by GCC versions before GCC 3.0.
2778
2779       -Wundef
2780           Warn if an undefined identifier is evaluated in an #if directive.
2781
2782       -Wno-endif-labels
2783           Do not warn whenever an #else or an #endif are followed by text.
2784
2785       -Wshadow
2786           Warn whenever a local variable shadows another local variable,
2787           parameter or global variable or whenever a built-in function is
2788           shadowed.
2789
2790       -Wlarger-than=len
2791           Warn whenever an object of larger than len bytes is defined.
2792
2793       -Wframe-larger-than=len
2794           Warn if the size of a function frame is larger than len bytes.  The
2795           computation done to determine the stack frame size is approximate
2796           and not conservative.  The actual requirements may be somewhat
2797           greater than len even if you do not get a warning.  In addition,
2798           any space allocated via "alloca", variable-length arrays, or
2799           related constructs is not included by the compiler when determining
2800           whether or not to issue a warning.
2801
2802       -Wunsafe-loop-optimizations
2803           Warn if the loop cannot be optimized because the compiler could not
2804           assume anything on the bounds of the loop indices.  With
2805           -funsafe-loop-optimizations warn if the compiler made such
2806           assumptions.
2807
2808       -Wno-pedantic-ms-format (MinGW targets only)
2809           Disables the warnings about non-ISO "printf" / "scanf" format width
2810           specifiers "I32", "I64", and "I" used on Windows targets depending
2811           on the MS runtime, when you are using the options -Wformat and
2812           -pedantic without gnu-extensions.
2813
2814       -Wpointer-arith
2815           Warn about anything that depends on the "size of" a function type
2816           or of "void".  GNU C assigns these types a size of 1, for
2817           convenience in calculations with "void *" pointers and pointers to
2818           functions.  In C++, warn also when an arithmetic operation involves
2819           "NULL".  This warning is also enabled by -pedantic.
2820
2821       -Wtype-limits
2822           Warn if a comparison is always true or always false due to the
2823           limited range of the data type, but do not warn for constant
2824           expressions.  For example, warn if an unsigned variable is compared
2825           against zero with < or >=.  This warning is also enabled by
2826           -Wextra.
2827
2828       -Wbad-function-cast (C and Objective-C only)
2829           Warn whenever a function call is cast to a non-matching type.  For
2830           example, warn if "int malloc()" is cast to "anything *".
2831
2832       -Wc++-compat (C and Objective-C only)
2833           Warn about ISO C constructs that are outside of the common subset
2834           of ISO C and ISO C++, e.g. request for implicit conversion from
2835           "void *" to a pointer to non-"void" type.
2836
2837       -Wc++0x-compat (C++ and Objective-C++ only)
2838           Warn about C++ constructs whose meaning differs between ISO C++
2839           1998 and ISO C++ 200x, e.g., identifiers in ISO C++ 1998 that will
2840           become keywords in ISO C++ 200x.  This warning is enabled by -Wall.
2841
2842       -Wcast-qual
2843           Warn whenever a pointer is cast so as to remove a type qualifier
2844           from the target type.  For example, warn if a "const char *" is
2845           cast to an ordinary "char *".
2846
2847       -Wcast-align
2848           Warn whenever a pointer is cast such that the required alignment of
2849           the target is increased.  For example, warn if a "char *" is cast
2850           to an "int *" on machines where integers can only be accessed at
2851           two- or four-byte boundaries.
2852
2853       -Wwrite-strings
2854           When compiling C, give string constants the type "const
2855           char[length]" so that copying the address of one into a non-"const"
2856           "char *" pointer will get a warning.  These warnings will help you
2857           find at compile time code that can try to write into a string
2858           constant, but only if you have been very careful about using
2859           "const" in declarations and prototypes.  Otherwise, it will just be
2860           a nuisance. This is why we did not make -Wall request these
2861           warnings.
2862
2863           When compiling C++, warn about the deprecated conversion from
2864           string literals to "char *".  This warning is enabled by default
2865           for C++ programs.
2866
2867       -Wclobbered
2868           Warn for variables that might be changed by longjmp or vfork.  This
2869           warning is also enabled by -Wextra.
2870
2871       -Wconversion
2872           Warn for implicit conversions that may alter a value. This includes
2873           conversions between real and integer, like "abs (x)" when "x" is
2874           "double"; conversions between signed and unsigned, like "unsigned
2875           ui = -1"; and conversions to smaller types, like "sqrtf (M_PI)". Do
2876           not warn for explicit casts like "abs ((int) x)" and "ui =
2877           (unsigned) -1", or if the value is not changed by the conversion
2878           like in "abs (2.0)".  Warnings about conversions between signed and
2879           unsigned integers can be disabled by using -Wno-sign-conversion.
2880
2881           For C++, also warn for conversions between "NULL" and non-pointer
2882           types; confusing overload resolution for user-defined conversions;
2883           and conversions that will never use a type conversion operator:
2884           conversions to "void", the same type, a base class or a reference
2885           to them. Warnings about conversions between signed and unsigned
2886           integers are disabled by default in C++ unless -Wsign-conversion is
2887           explicitly enabled.
2888
2889       -Wempty-body
2890           Warn if an empty body occurs in an if, else or do while statement.
2891           This warning is also enabled by -Wextra.
2892
2893       -Wenum-compare (C++ and Objective-C++ only)
2894           Warn about a comparison between values of different enum types.
2895           This warning is enabled by default.
2896
2897       -Wsign-compare
2898           Warn when a comparison between signed and unsigned values could
2899           produce an incorrect result when the signed value is converted to
2900           unsigned.  This warning is also enabled by -Wextra; to get the
2901           other warnings of -Wextra without this warning, use -Wextra
2902           -Wno-sign-compare.
2903
2904       -Wsign-conversion
2905           Warn for implicit conversions that may change the sign of an
2906           integer value, like assigning a signed integer expression to an
2907           unsigned integer variable. An explicit cast silences the warning.
2908           In C, this option is enabled also by -Wconversion.
2909
2910       -Waddress
2911           Warn about suspicious uses of memory addresses. These include using
2912           the address of a function in a conditional expression, such as
2913           "void func(void); if (func)", and comparisons against the memory
2914           address of a string literal, such as "if (x == "abc")".  Such uses
2915           typically indicate a programmer error: the address of a function
2916           always evaluates to true, so their use in a conditional usually
2917           indicate that the programmer forgot the parentheses in a function
2918           call; and comparisons against string literals result in unspecified
2919           behavior and are not portable in C, so they usually indicate that
2920           the programmer intended to use "strcmp".  This warning is enabled
2921           by -Wall.
2922
2923       -Wlogical-op
2924           Warn about suspicious uses of logical operators in expressions.
2925           This includes using logical operators in contexts where a bit-wise
2926           operator is likely to be expected.
2927
2928       -Waggregate-return
2929           Warn if any functions that return structures or unions are defined
2930           or called.  (In languages where you can return an array, this also
2931           elicits a warning.)
2932
2933       -Wno-attributes
2934           Do not warn if an unexpected "__attribute__" is used, such as
2935           unrecognized attributes, function attributes applied to variables,
2936           etc.  This will not stop errors for incorrect use of supported
2937           attributes.
2938
2939       -Wno-builtin-macro-redefined
2940           Do not warn if certain built-in macros are redefined.  This
2941           suppresses warnings for redefinition of "__TIMESTAMP__",
2942           "__TIME__", "__DATE__", "__FILE__", and "__BASE_FILE__".
2943
2944       -Wstrict-prototypes (C and Objective-C only)
2945           Warn if a function is declared or defined without specifying the
2946           argument types.  (An old-style function definition is permitted
2947           without a warning if preceded by a declaration which specifies the
2948           argument types.)
2949
2950       -Wold-style-declaration (C and Objective-C only)
2951           Warn for obsolescent usages, according to the C Standard, in a
2952           declaration. For example, warn if storage-class specifiers like
2953           "static" are not the first things in a declaration.  This warning
2954           is also enabled by -Wextra.
2955
2956       -Wold-style-definition (C and Objective-C only)
2957           Warn if an old-style function definition is used.  A warning is
2958           given even if there is a previous prototype.
2959
2960       -Wmissing-parameter-type (C and Objective-C only)
2961           A function parameter is declared without a type specifier in
2962           K&R-style functions:
2963
2964                   void foo(bar) { }
2965
2966           This warning is also enabled by -Wextra.
2967
2968       -Wmissing-prototypes (C and Objective-C only)
2969           Warn if a global function is defined without a previous prototype
2970           declaration.  This warning is issued even if the definition itself
2971           provides a prototype.  The aim is to detect global functions that
2972           fail to be declared in header files.
2973
2974       -Wmissing-declarations
2975           Warn if a global function is defined without a previous
2976           declaration.  Do so even if the definition itself provides a
2977           prototype.  Use this option to detect global functions that are not
2978           declared in header files.  In C++, no warnings are issued for
2979           function templates, or for inline functions, or for functions in
2980           anonymous namespaces.
2981
2982       -Wmissing-field-initializers
2983           Warn if a structure's initializer has some fields missing.  For
2984           example, the following code would cause such a warning, because
2985           "x.h" is implicitly zero:
2986
2987                   struct s { int f, g, h; };
2988                   struct s x = { 3, 4 };
2989
2990           This option does not warn about designated initializers, so the
2991           following modification would not trigger a warning:
2992
2993                   struct s { int f, g, h; };
2994                   struct s x = { .f = 3, .g = 4 };
2995
2996           This warning is included in -Wextra.  To get other -Wextra warnings
2997           without this one, use -Wextra -Wno-missing-field-initializers.
2998
2999       -Wmissing-noreturn
3000           Warn about functions which might be candidates for attribute
3001           "noreturn".  Note these are only possible candidates, not absolute
3002           ones.  Care should be taken to manually verify functions actually
3003           do not ever return before adding the "noreturn" attribute,
3004           otherwise subtle code generation bugs could be introduced.  You
3005           will not get a warning for "main" in hosted C environments.
3006
3007       -Wmissing-format-attribute
3008           Warn about function pointers which might be candidates for "format"
3009           attributes.  Note these are only possible candidates, not absolute
3010           ones.  GCC will guess that function pointers with "format"
3011           attributes that are used in assignment, initialization, parameter
3012           passing or return statements should have a corresponding "format"
3013           attribute in the resulting type.  I.e. the left-hand side of the
3014           assignment or initialization, the type of the parameter variable,
3015           or the return type of the containing function respectively should
3016           also have a "format" attribute to avoid the warning.
3017
3018           GCC will also warn about function definitions which might be
3019           candidates for "format" attributes.  Again, these are only possible
3020           candidates.  GCC will guess that "format" attributes might be
3021           appropriate for any function that calls a function like "vprintf"
3022           or "vscanf", but this might not always be the case, and some
3023           functions for which "format" attributes are appropriate may not be
3024           detected.
3025
3026       -Wno-multichar
3027           Do not warn if a multicharacter constant ('FOOF') is used.  Usually
3028           they indicate a typo in the user's code, as they have
3029           implementation-defined values, and should not be used in portable
3030           code.
3031
3032       -Wnormalized=<none|id|nfc|nfkc>
3033           In ISO C and ISO C++, two identifiers are different if they are
3034           different sequences of characters.  However, sometimes when
3035           characters outside the basic ASCII character set are used, you can
3036           have two different character sequences that look the same.  To
3037           avoid confusion, the ISO 10646 standard sets out some normalization
3038           rules which when applied ensure that two sequences that look the
3039           same are turned into the same sequence.  GCC can warn you if you
3040           are using identifiers which have not been normalized; this option
3041           controls that warning.
3042
3043           There are four levels of warning that GCC supports.  The default is
3044           -Wnormalized=nfc, which warns about any identifier which is not in
3045           the ISO 10646 "C" normalized form, NFC.  NFC is the recommended
3046           form for most uses.
3047
3048           Unfortunately, there are some characters which ISO C and ISO C++
3049           allow in identifiers that when turned into NFC aren't allowable as
3050           identifiers.  That is, there's no way to use these symbols in
3051           portable ISO C or C++ and have all your identifiers in NFC.
3052           -Wnormalized=id suppresses the warning for these characters.  It is
3053           hoped that future versions of the standards involved will correct
3054           this, which is why this option is not the default.
3055
3056           You can switch the warning off for all characters by writing
3057           -Wnormalized=none.  You would only want to do this if you were
3058           using some other normalization scheme (like "D"), because otherwise
3059           you can easily create bugs that are literally impossible to see.
3060
3061           Some characters in ISO 10646 have distinct meanings but look
3062           identical in some fonts or display methodologies, especially once
3063           formatting has been applied.  For instance "\u207F", "SUPERSCRIPT
3064           LATIN SMALL LETTER N", will display just like a regular "n" which
3065           has been placed in a superscript.  ISO 10646 defines the NFKC
3066           normalization scheme to convert all these into a standard form as
3067           well, and GCC will warn if your code is not in NFKC if you use
3068           -Wnormalized=nfkc.  This warning is comparable to warning about
3069           every identifier that contains the letter O because it might be
3070           confused with the digit 0, and so is not the default, but may be
3071           useful as a local coding convention if the programming environment
3072           is unable to be fixed to display these characters distinctly.
3073
3074       -Wno-deprecated
3075           Do not warn about usage of deprecated features.
3076
3077       -Wno-deprecated-declarations
3078           Do not warn about uses of functions, variables, and types marked as
3079           deprecated by using the "deprecated" attribute.
3080
3081       -Wno-overflow
3082           Do not warn about compile-time overflow in constant expressions.
3083
3084       -Woverride-init (C and Objective-C only)
3085           Warn if an initialized field without side effects is overridden
3086           when using designated initializers.
3087
3088           This warning is included in -Wextra.  To get other -Wextra warnings
3089           without this one, use -Wextra -Wno-override-init.
3090
3091       -Wpacked
3092           Warn if a structure is given the packed attribute, but the packed
3093           attribute has no effect on the layout or size of the structure.
3094           Such structures may be mis-aligned for little benefit.  For
3095           instance, in this code, the variable "f.x" in "struct bar" will be
3096           misaligned even though "struct bar" does not itself have the packed
3097           attribute:
3098
3099                   struct foo {
3100                     int x;
3101                     char a, b, c, d;
3102                   } __attribute__((packed));
3103                   struct bar {
3104                     char z;
3105                     struct foo f;
3106                   };
3107
3108       -Wpacked-bitfield-compat
3109           The 4.1, 4.2 and 4.3 series of GCC ignore the "packed" attribute on
3110           bit-fields of type "char".  This has been fixed in GCC 4.4 but the
3111           change can lead to differences in the structure layout.  GCC
3112           informs you when the offset of such a field has changed in GCC 4.4.
3113           For example there is no longer a 4-bit padding between field "a"
3114           and "b" in this structure:
3115
3116                   struct foo
3117                   {
3118                     char a:4;
3119                     char b:8;
3120                   } __attribute__ ((packed));
3121
3122           This warning is enabled by default.  Use
3123           -Wno-packed-bitfield-compat to disable this warning.
3124
3125       -Wpadded
3126           Warn if padding is included in a structure, either to align an
3127           element of the structure or to align the whole structure.
3128           Sometimes when this happens it is possible to rearrange the fields
3129           of the structure to reduce the padding and so make the structure
3130           smaller.
3131
3132       -Wredundant-decls
3133           Warn if anything is declared more than once in the same scope, even
3134           in cases where multiple declaration is valid and changes nothing.
3135
3136       -Wnested-externs (C and Objective-C only)
3137           Warn if an "extern" declaration is encountered within a function.
3138
3139       -Wunreachable-code
3140           Warn if the compiler detects that code will never be executed.
3141
3142           This option is intended to warn when the compiler detects that at
3143           least a whole line of source code will never be executed, because
3144           some condition is never satisfied or because it is after a
3145           procedure that never returns.
3146
3147           It is possible for this option to produce a warning even though
3148           there are circumstances under which part of the affected line can
3149           be executed, so care should be taken when removing apparently-
3150           unreachable code.
3151
3152           For instance, when a function is inlined, a warning may mean that
3153           the line is unreachable in only one inlined copy of the function.
3154
3155           This option is not made part of -Wall because in a debugging
3156           version of a program there is often substantial code which checks
3157           correct functioning of the program and is, hopefully, unreachable
3158           because the program does work.  Another common use of unreachable
3159           code is to provide behavior which is selectable at compile-time.
3160
3161       -Winline
3162           Warn if a function can not be inlined and it was declared as
3163           inline.  Even with this option, the compiler will not warn about
3164           failures to inline functions declared in system headers.
3165
3166           The compiler uses a variety of heuristics to determine whether or
3167           not to inline a function.  For example, the compiler takes into
3168           account the size of the function being inlined and the amount of
3169           inlining that has already been done in the current function.
3170           Therefore, seemingly insignificant changes in the source program
3171           can cause the warnings produced by -Winline to appear or disappear.
3172
3173       -Wno-invalid-offsetof (C++ and Objective-C++ only)
3174           Suppress warnings from applying the offsetof macro to a non-POD
3175           type.  According to the 1998 ISO C++ standard, applying offsetof to
3176           a non-POD type is undefined.  In existing C++ implementations,
3177           however, offsetof typically gives meaningful results even when
3178           applied to certain kinds of non-POD types. (Such as a simple struct
3179           that fails to be a POD type only by virtue of having a
3180           constructor.)  This flag is for users who are aware that they are
3181           writing nonportable code and who have deliberately chosen to ignore
3182           the warning about it.
3183
3184           The restrictions on offsetof may be relaxed in a future version of
3185           the C++ standard.
3186
3187       -Wno-int-to-pointer-cast (C and Objective-C only)
3188           Suppress warnings from casts to pointer type of an integer of a
3189           different size.
3190
3191       -Wno-pointer-to-int-cast (C and Objective-C only)
3192           Suppress warnings from casts from a pointer to an integer type of a
3193           different size.
3194
3195       -Winvalid-pch
3196           Warn if a precompiled header is found in the search path but can't
3197           be used.
3198
3199       -Wlong-long
3200           Warn if long long type is used.  This is default.  To inhibit the
3201           warning messages, use -Wno-long-long.  Flags -Wlong-long and
3202           -Wno-long-long are taken into account only when -pedantic flag is
3203           used.
3204
3205       -Wvariadic-macros
3206           Warn if variadic macros are used in pedantic ISO C90 mode, or the
3207           GNU alternate syntax when in pedantic ISO C99 mode.  This is
3208           default.  To inhibit the warning messages, use
3209           -Wno-variadic-macros.
3210
3211       -Wvla
3212           Warn if variable length array is used in the code.  -Wno-vla will
3213           prevent the -pedantic warning of the variable length array.
3214
3215       -Wvolatile-register-var
3216           Warn if a register variable is declared volatile.  The volatile
3217           modifier does not inhibit all optimizations that may eliminate
3218           reads and/or writes to register variables.  This warning is enabled
3219           by -Wall.
3220
3221       -Wdisabled-optimization
3222           Warn if a requested optimization pass is disabled.  This warning
3223           does not generally indicate that there is anything wrong with your
3224           code; it merely indicates that GCC's optimizers were unable to
3225           handle the code effectively.  Often, the problem is that your code
3226           is too big or too complex; GCC will refuse to optimize programs
3227           when the optimization itself is likely to take inordinate amounts
3228           of time.
3229
3230       -Wpointer-sign (C and Objective-C only)
3231           Warn for pointer argument passing or assignment with different
3232           signedness.  This option is only supported for C and Objective-C.
3233           It is implied by -Wall and by -pedantic, which can be disabled with
3234           -Wno-pointer-sign.
3235
3236       -Wstack-protector
3237           This option is only active when -fstack-protector is active.  It
3238           warns about functions that will not be protected against stack
3239           smashing.
3240
3241       -Wno-mudflap
3242           Suppress warnings about constructs that cannot be instrumented by
3243           -fmudflap.
3244
3245       -Woverlength-strings
3246           Warn about string constants which are longer than the "minimum
3247           maximum" length specified in the C standard.  Modern compilers
3248           generally allow string constants which are much longer than the
3249           standard's minimum limit, but very portable programs should avoid
3250           using longer strings.
3251
3252           The limit applies after string constant concatenation, and does not
3253           count the trailing NUL.  In C89, the limit was 509 characters; in
3254           C99, it was raised to 4095.  C++98 does not specify a normative
3255           minimum maximum, so we do not diagnose overlength strings in C++.
3256
3257           This option is implied by -pedantic, and can be disabled with
3258           -Wno-overlength-strings.
3259
3260   Options for Debugging Your Program or GCC
3261       GCC has various special options that are used for debugging either your
3262       program or GCC:
3263
3264       -g  Produce debugging information in the operating system's native
3265           format (stabs, COFF, XCOFF, or DWARF 2).  GDB can work with this
3266           debugging information.
3267
3268           On most systems that use stabs format, -g enables use of extra
3269           debugging information that only GDB can use; this extra information
3270           makes debugging work better in GDB but will probably make other
3271           debuggers crash or refuse to read the program.  If you want to
3272           control for certain whether to generate the extra information, use
3273           -gstabs+, -gstabs, -gxcoff+, -gxcoff, or -gvms (see below).
3274
3275           GCC allows you to use -g with -O.  The shortcuts taken by optimized
3276           code may occasionally produce surprising results: some variables
3277           you declared may not exist at all; flow of control may briefly move
3278           where you did not expect it; some statements may not be executed
3279           because they compute constant results or their values were already
3280           at hand; some statements may execute in different places because
3281           they were moved out of loops.
3282
3283           Nevertheless it proves possible to debug optimized output.  This
3284           makes it reasonable to use the optimizer for programs that might
3285           have bugs.
3286
3287           The following options are useful when GCC is generated with the
3288           capability for more than one debugging format.
3289
3290       -ggdb
3291           Produce debugging information for use by GDB.  This means to use
3292           the most expressive format available (DWARF 2, stabs, or the native
3293           format if neither of those are supported), including GDB extensions
3294           if at all possible.
3295
3296       -gstabs
3297           Produce debugging information in stabs format (if that is
3298           supported), without GDB extensions.  This is the format used by DBX
3299           on most BSD systems.  On MIPS, Alpha and System V Release 4 systems
3300           this option produces stabs debugging output which is not understood
3301           by DBX or SDB.  On System V Release 4 systems this option requires
3302           the GNU assembler.
3303
3304       -feliminate-unused-debug-symbols
3305           Produce debugging information in stabs format (if that is
3306           supported), for only symbols that are actually used.
3307
3308       -femit-class-debug-always
3309           Instead of emitting debugging information for a C++ class in only
3310           one object file, emit it in all object files using the class.  This
3311           option should be used only with debuggers that are unable to handle
3312           the way GCC normally emits debugging information for classes
3313           because using this option will increase the size of debugging
3314           information by as much as a factor of two.
3315
3316       -gstabs+
3317           Produce debugging information in stabs format (if that is
3318           supported), using GNU extensions understood only by the GNU
3319           debugger (GDB).  The use of these extensions is likely to make
3320           other debuggers crash or refuse to read the program.
3321
3322       -gcoff
3323           Produce debugging information in COFF format (if that is
3324           supported).  This is the format used by SDB on most System V
3325           systems prior to System V Release 4.
3326
3327       -gxcoff
3328           Produce debugging information in XCOFF format (if that is
3329           supported).  This is the format used by the DBX debugger on IBM
3330           RS/6000 systems.
3331
3332       -gxcoff+
3333           Produce debugging information in XCOFF format (if that is
3334           supported), using GNU extensions understood only by the GNU
3335           debugger (GDB).  The use of these extensions is likely to make
3336           other debuggers crash or refuse to read the program, and may cause
3337           assemblers other than the GNU assembler (GAS) to fail with an
3338           error.
3339
3340       -gdwarf-version
3341           Produce debugging information in DWARF format (if that is
3342           supported).  This is the format used by DBX on IRIX 6.  The value
3343           of version may be either 2 or 3; the default version is 3.
3344
3345           Note that with DWARF version 2 some ports require, and will always
3346           use, some non-conflicting DWARF 3 extensions in the unwind tables.
3347
3348       -gstrict-dwarf
3349           Disallow using extensions of later DWARF standard version than
3350           selected with -gdwarf-version.  On most targets using non-
3351           conflicting DWARF extensions from later standard versions is
3352           allowed.
3353
3354       -gno-strict-dwarf
3355           Allow using extensions of later DWARF standard version than
3356           selected with -gdwarf-version.
3357
3358       -gvms
3359           Produce debugging information in VMS debug format (if that is
3360           supported).  This is the format used by DEBUG on VMS systems.
3361
3362       -glevel
3363       -ggdblevel
3364       -gstabslevel
3365       -gcofflevel
3366       -gxcofflevel
3367       -gvmslevel
3368           Request debugging information and also use level to specify how
3369           much information.  The default level is 2.
3370
3371           Level 0 produces no debug information at all.  Thus, -g0 negates
3372           -g.
3373
3374           Level 1 produces minimal information, enough for making backtraces
3375           in parts of the program that you don't plan to debug.  This
3376           includes descriptions of functions and external variables, but no
3377           information about local variables and no line numbers.
3378
3379           Level 3 includes extra information, such as all the macro
3380           definitions present in the program.  Some debuggers support macro
3381           expansion when you use -g3.
3382
3383           -gdwarf-2 does not accept a concatenated debug level, because GCC
3384           used to support an option -gdwarf that meant to generate debug
3385           information in version 1 of the DWARF format (which is very
3386           different from version 2), and it would have been too confusing.
3387           That debug format is long obsolete, but the option cannot be
3388           changed now.  Instead use an additional -glevel option to change
3389           the debug level for DWARF.
3390
3391       -gtoggle
3392           Turn off generation of debug info, if leaving out this option would
3393           have generated it, or turn it on at level 2 otherwise.  The
3394           position of this argument in the command line does not matter, it
3395           takes effect after all other options are processed, and it does so
3396           only once, no matter how many times it is given.  This is mainly
3397           intended to be used with -fcompare-debug.
3398
3399       -fdump-final-insns[=file]
3400           Dump the final internal representation (RTL) to file.  If the
3401           optional argument is omitted (or if file is "."), the name of the
3402           dump file will be determined by appending ".gkd" to the compilation
3403           output file name.
3404
3405       -fcompare-debug[=opts]
3406           If no error occurs during compilation, run the compiler a second
3407           time, adding opts and -fcompare-debug-second to the arguments
3408           passed to the second compilation.  Dump the final internal
3409           representation in both compilations, and print an error if they
3410           differ.
3411
3412           If the equal sign is omitted, the default -gtoggle is used.
3413
3414           The environment variable GCC_COMPARE_DEBUG, if defined, non-empty
3415           and nonzero, implicitly enables -fcompare-debug.  If
3416           GCC_COMPARE_DEBUG is defined to a string starting with a dash, then
3417           it is used for opts, otherwise the default -gtoggle is used.
3418
3419           -fcompare-debug=, with the equal sign but without opts, is
3420           equivalent to -fno-compare-debug, which disables the dumping of the
3421           final representation and the second compilation, preventing even
3422           GCC_COMPARE_DEBUG from taking effect.
3423
3424           To verify full coverage during -fcompare-debug testing, set
3425           GCC_COMPARE_DEBUG to say -fcompare-debug-not-overridden, which GCC
3426           will reject as an invalid option in any actual compilation (rather
3427           than preprocessing, assembly or linking).  To get just a warning,
3428           setting GCC_COMPARE_DEBUG to -w%n-fcompare-debug not overridden
3429           will do.
3430
3431       -fcompare-debug-second
3432           This option is implicitly passed to the compiler for the second
3433           compilation requested by -fcompare-debug, along with options to
3434           silence warnings, and omitting other options that would cause side-
3435           effect compiler outputs to files or to the standard output.  Dump
3436           files and preserved temporary files are renamed so as to contain
3437           the ".gk" additional extension during the second compilation, to
3438           avoid overwriting those generated by the first.
3439
3440           When this option is passed to the compiler driver, it causes the
3441           first compilation to be skipped, which makes it useful for little
3442           other than debugging the compiler proper.
3443
3444       -feliminate-dwarf2-dups
3445           Compress DWARF2 debugging information by eliminating duplicated
3446           information about each symbol.  This option only makes sense when
3447           generating DWARF2 debugging information with -gdwarf-2.
3448
3449       -femit-struct-debug-baseonly
3450           Emit debug information for struct-like types only when the base
3451           name of the compilation source file matches the base name of file
3452           in which the struct was defined.
3453
3454           This option substantially reduces the size of debugging
3455           information, but at significant potential loss in type information
3456           to the debugger.  See -femit-struct-debug-reduced for a less
3457           aggressive option.  See -femit-struct-debug-detailed for more
3458           detailed control.
3459
3460           This option works only with DWARF 2.
3461
3462       -femit-struct-debug-reduced
3463           Emit debug information for struct-like types only when the base
3464           name of the compilation source file matches the base name of file
3465           in which the type was defined, unless the struct is a template or
3466           defined in a system header.
3467
3468           This option significantly reduces the size of debugging
3469           information, with some potential loss in type information to the
3470           debugger.  See -femit-struct-debug-baseonly for a more aggressive
3471           option.  See -femit-struct-debug-detailed for more detailed
3472           control.
3473
3474           This option works only with DWARF 2.
3475
3476       -femit-struct-debug-detailed[=spec-list]
3477           Specify the struct-like types for which the compiler will generate
3478           debug information.  The intent is to reduce duplicate struct debug
3479           information between different object files within the same program.
3480
3481           This option is a detailed version of -femit-struct-debug-reduced
3482           and -femit-struct-debug-baseonly, which will serve for most needs.
3483
3484           A specification has the syntax
3485           [dir:|ind:][ord:|gen:](any|sys|base|none)
3486
3487           The optional first word limits the specification to structs that
3488           are used directly (dir:) or used indirectly (ind:).  A struct type
3489           is used directly when it is the type of a variable, member.
3490           Indirect uses arise through pointers to structs.  That is, when use
3491           of an incomplete struct would be legal, the use is indirect.  An
3492           example is struct one direct; struct two * indirect;.
3493
3494           The optional second word limits the specification to ordinary
3495           structs (ord:) or generic structs (gen:).  Generic structs are a
3496           bit complicated to explain.  For C++, these are non-explicit
3497           specializations of template classes, or non-template classes within
3498           the above.  Other programming languages have generics, but
3499           -femit-struct-debug-detailed does not yet implement them.
3500
3501           The third word specifies the source files for those structs for
3502           which the compiler will emit debug information.  The values none
3503           and any have the normal meaning.  The value base means that the
3504           base of name of the file in which the type declaration appears must
3505           match the base of the name of the main compilation file.  In
3506           practice, this means that types declared in foo.c and foo.h will
3507           have debug information, but types declared in other header will
3508           not.  The value sys means those types satisfying base or declared
3509           in system or compiler headers.
3510
3511           You may need to experiment to determine the best settings for your
3512           application.
3513
3514           The default is -femit-struct-debug-detailed=all.
3515
3516           This option works only with DWARF 2.
3517
3518       -fno-merge-debug-strings
3519           Direct the linker to not merge together strings in the debugging
3520           information which are identical in different object files.  Merging
3521           is not supported by all assemblers or linkers.  Merging decreases
3522           the size of the debug information in the output file at the cost of
3523           increasing link processing time.  Merging is enabled by default.
3524
3525       -fdebug-prefix-map=old=new
3526           When compiling files in directory old, record debugging information
3527           describing them as in new instead.
3528
3529       -fno-dwarf2-cfi-asm
3530           Emit DWARF 2 unwind info as compiler generated ".eh_frame" section
3531           instead of using GAS ".cfi_*" directives.
3532
3533       -p  Generate extra code to write profile information suitable for the
3534           analysis program prof.  You must use this option when compiling the
3535           source files you want data about, and you must also use it when
3536           linking.
3537
3538       -pg Generate extra code to write profile information suitable for the
3539           analysis program gprof.  You must use this option when compiling
3540           the source files you want data about, and you must also use it when
3541           linking.
3542
3543       -Q  Makes the compiler print out each function name as it is compiled,
3544           and print some statistics about each pass when it finishes.
3545
3546       -ftime-report
3547           Makes the compiler print some statistics about the time consumed by
3548           each pass when it finishes.
3549
3550       -fmem-report
3551           Makes the compiler print some statistics about permanent memory
3552           allocation when it finishes.
3553
3554       -fpre-ipa-mem-report
3555       -fpost-ipa-mem-report
3556           Makes the compiler print some statistics about permanent memory
3557           allocation before or after interprocedural optimization.
3558
3559       -fprofile-arcs
3560           Add code so that program flow arcs are instrumented.  During
3561           execution the program records how many times each branch and call
3562           is executed and how many times it is taken or returns.  When the
3563           compiled program exits it saves this data to a file called
3564           auxname.gcda for each source file.  The data may be used for
3565           profile-directed optimizations (-fbranch-probabilities), or for
3566           test coverage analysis (-ftest-coverage).  Each object file's
3567           auxname is generated from the name of the output file, if
3568           explicitly specified and it is not the final executable, otherwise
3569           it is the basename of the source file.  In both cases any suffix is
3570           removed (e.g. foo.gcda for input file dir/foo.c, or dir/foo.gcda
3571           for output file specified as -o dir/foo.o).
3572
3573       --coverage
3574           This option is used to compile and link code instrumented for
3575           coverage analysis.  The option is a synonym for -fprofile-arcs
3576           -ftest-coverage (when compiling) and -lgcov (when linking).  See
3577           the documentation for those options for more details.
3578
3579           ·   Compile the source files with -fprofile-arcs plus optimization
3580               and code generation options.  For test coverage analysis, use
3581               the additional -ftest-coverage option.  You do not need to
3582               profile every source file in a program.
3583
3584           ·   Link your object files with -lgcov or -fprofile-arcs (the
3585               latter implies the former).
3586
3587           ·   Run the program on a representative workload to generate the
3588               arc profile information.  This may be repeated any number of
3589               times.  You can run concurrent instances of your program, and
3590               provided that the file system supports locking, the data files
3591               will be correctly updated.  Also "fork" calls are detected and
3592               correctly handled (double counting will not happen).
3593
3594           ·   For profile-directed optimizations, compile the source files
3595               again with the same optimization and code generation options
3596               plus -fbranch-probabilities.
3597
3598           ·   For test coverage analysis, use gcov to produce human readable
3599               information from the .gcno and .gcda files.  Refer to the gcov
3600               documentation for further information.
3601
3602           With -fprofile-arcs, for each function of your program GCC creates
3603           a program flow graph, then finds a spanning tree for the graph.
3604           Only arcs that are not on the spanning tree have to be
3605           instrumented: the compiler adds code to count the number of times
3606           that these arcs are executed.  When an arc is the only exit or only
3607           entrance to a block, the instrumentation code can be added to the
3608           block; otherwise, a new basic block must be created to hold the
3609           instrumentation code.
3610
3611       -ftest-coverage
3612           Produce a notes file that the gcov code-coverage utility can use to
3613           show program coverage.  Each source file's note file is called
3614           auxname.gcno.  Refer to the -fprofile-arcs option above for a
3615           description of auxname and instructions on how to generate test
3616           coverage data.  Coverage data will match the source files more
3617           closely, if you do not optimize.
3618
3619       -fdbg-cnt-list
3620           Print the name and the counter upperbound for all debug counters.
3621
3622       -fdbg-cnt=counter-value-list
3623           Set the internal debug counter upperbound. counter-value-list is a
3624           comma-separated list of name:value pairs which sets the upperbound
3625           of each debug counter name to value.  All debug counters have the
3626           initial upperbound of UINT_MAX, thus dbg_cnt() returns true always
3627           unless the upperbound is set by this option.  e.g. With
3628           -fdbg-cnt=dce:10,tail_call:0 dbg_cnt(dce) will return true only for
3629           first 10 invocations and dbg_cnt(tail_call) will return false
3630           always.
3631
3632       -dletters
3633       -fdump-rtl-pass
3634           Says to make debugging dumps during compilation at times specified
3635           by letters.    This is used for debugging the RTL-based passes of
3636           the compiler.  The file names for most of the dumps are made by
3637           appending a pass number and a word to the dumpname.  dumpname is
3638           generated from the name of the output file, if explicitly specified
3639           and it is not an executable, otherwise it is the basename of the
3640           source file. These switches may have different effects when -E is
3641           used for preprocessing.
3642
3643           Debug dumps can be enabled with a -fdump-rtl switch or some -d
3644           option letters.  Here are the possible letters for use in pass and
3645           letters, and their meanings:
3646
3647           -fdump-rtl-alignments
3648               Dump after branch alignments have been computed.
3649
3650           -fdump-rtl-asmcons
3651               Dump after fixing rtl statements that have unsatisfied in/out
3652               constraints.
3653
3654           -fdump-rtl-auto_inc_dec
3655               Dump after auto-inc-dec discovery.  This pass is only run on
3656               architectures that have auto inc or auto dec instructions.
3657
3658           -fdump-rtl-barriers
3659               Dump after cleaning up the barrier instructions.
3660
3661           -fdump-rtl-bbpart
3662               Dump after partitioning hot and cold basic blocks.
3663
3664           -fdump-rtl-bbro
3665               Dump after block reordering.
3666
3667           -fdump-rtl-btl1
3668           -fdump-rtl-btl2
3669               -fdump-rtl-btl1 and -fdump-rtl-btl2 enable dumping after the
3670               two branch target load optimization passes.
3671
3672           -fdump-rtl-bypass
3673               Dump after jump bypassing and control flow optimizations.
3674
3675           -fdump-rtl-combine
3676               Dump after the RTL instruction combination pass.
3677
3678           -fdump-rtl-compgotos
3679               Dump after duplicating the computed gotos.
3680
3681           -fdump-rtl-ce1
3682           -fdump-rtl-ce2
3683           -fdump-rtl-ce3
3684               -fdump-rtl-ce1, -fdump-rtl-ce2, and -fdump-rtl-ce3 enable
3685               dumping after the three if conversion passes.
3686
3687           -fdump-rtl-cprop_hardreg
3688               Dump after hard register copy propagation.
3689
3690           -fdump-rtl-csa
3691               Dump after combining stack adjustments.
3692
3693           -fdump-rtl-cse1
3694           -fdump-rtl-cse2
3695               -fdump-rtl-cse1 and -fdump-rtl-cse2 enable dumping after the
3696               two common sub-expression elimination passes.
3697
3698           -fdump-rtl-dce
3699               Dump after the standalone dead code elimination passes.
3700
3701           -fdump-rtl-dbr
3702               Dump after delayed branch scheduling.
3703
3704           -fdump-rtl-dce1
3705           -fdump-rtl-dce2
3706               -fdump-rtl-dce1 and -fdump-rtl-dce2 enable dumping after the
3707               two dead store elimination passes.
3708
3709           -fdump-rtl-eh
3710               Dump after finalization of EH handling code.
3711
3712           -fdump-rtl-eh_ranges
3713               Dump after conversion of EH handling range regions.
3714
3715           -fdump-rtl-expand
3716               Dump after RTL generation.
3717
3718           -fdump-rtl-fwprop1
3719           -fdump-rtl-fwprop2
3720               -fdump-rtl-fwprop1 and -fdump-rtl-fwprop2 enable dumping after
3721               the two forward propagation passes.
3722
3723           -fdump-rtl-gcse1
3724           -fdump-rtl-gcse2
3725               -fdump-rtl-gcse1 and -fdump-rtl-gcse2 enable dumping after
3726               global common subexpression elimination.
3727
3728           -fdump-rtl-init-regs
3729               Dump after the initialization of the registers.
3730
3731           -fdump-rtl-initvals
3732               Dump after the computation of the initial value sets.
3733
3734           -fdump-rtl-into_cfglayout
3735               Dump after converting to cfglayout mode.
3736
3737           -fdump-rtl-ira
3738               Dump after iterated register allocation.
3739
3740           -fdump-rtl-jump
3741               Dump after the second jump optimization.
3742
3743           -fdump-rtl-loop2
3744               -fdump-rtl-loop2 enables dumping after the rtl loop
3745               optimization passes.
3746
3747           -fdump-rtl-mach
3748               Dump after performing the machine dependent reorganization
3749               pass, if that pass exists.
3750
3751           -fdump-rtl-mode_sw
3752               Dump after removing redundant mode switches.
3753
3754           -fdump-rtl-rnreg
3755               Dump after register renumbering.
3756
3757           -fdump-rtl-outof_cfglayout
3758               Dump after converting from cfglayout mode.
3759
3760           -fdump-rtl-peephole2
3761               Dump after the peephole pass.
3762
3763           -fdump-rtl-postreload
3764               Dump after post-reload optimizations.
3765
3766           -fdump-rtl-pro_and_epilogue
3767               Dump after generating the function pro and epilogues.
3768
3769           -fdump-rtl-regmove
3770               Dump after the register move pass.
3771
3772           -fdump-rtl-sched1
3773           -fdump-rtl-sched2
3774               -fdump-rtl-sched1 and -fdump-rtl-sched2 enable dumping after
3775               the basic block scheduling passes.
3776
3777           -fdump-rtl-see
3778               Dump after sign extension elimination.
3779
3780           -fdump-rtl-seqabstr
3781               Dump after common sequence discovery.
3782
3783           -fdump-rtl-shorten
3784               Dump after shortening branches.
3785
3786           -fdump-rtl-sibling
3787               Dump after sibling call optimizations.
3788
3789           -fdump-rtl-split1
3790           -fdump-rtl-split2
3791           -fdump-rtl-split3
3792           -fdump-rtl-split4
3793           -fdump-rtl-split5
3794               -fdump-rtl-split1, -fdump-rtl-split2, -fdump-rtl-split3,
3795               -fdump-rtl-split4 and -fdump-rtl-split5 enable dumping after
3796               five rounds of instruction splitting.
3797
3798           -fdump-rtl-sms
3799               Dump after modulo scheduling.  This pass is only run on some
3800               architectures.
3801
3802           -fdump-rtl-stack
3803               Dump after conversion from GCC's "flat register file" registers
3804               to the x87's stack-like registers.  This pass is only run on
3805               x86 variants.
3806
3807           -fdump-rtl-subreg1
3808           -fdump-rtl-subreg2
3809               -fdump-rtl-subreg1 and -fdump-rtl-subreg2 enable dumping after
3810               the two subreg expansion passes.
3811
3812           -fdump-rtl-unshare
3813               Dump after all rtl has been unshared.
3814
3815           -fdump-rtl-vartrack
3816               Dump after variable tracking.
3817
3818           -fdump-rtl-vregs
3819               Dump after converting virtual registers to hard registers.
3820
3821           -fdump-rtl-web
3822               Dump after live range splitting.
3823
3824           -fdump-rtl-regclass
3825           -fdump-rtl-subregs_of_mode_init
3826           -fdump-rtl-subregs_of_mode_finish
3827           -fdump-rtl-dfinit
3828           -fdump-rtl-dfinish
3829               These dumps are defined but always produce empty files.
3830
3831           -fdump-rtl-all
3832               Produce all the dumps listed above.
3833
3834           -dA Annotate the assembler output with miscellaneous debugging
3835               information.
3836
3837           -dD Dump all macro definitions, at the end of preprocessing, in
3838               addition to normal output.
3839
3840           -dH Produce a core dump whenever an error occurs.
3841
3842           -dm Print statistics on memory usage, at the end of the run, to
3843               standard error.
3844
3845           -dp Annotate the assembler output with a comment indicating which
3846               pattern and alternative was used.  The length of each
3847               instruction is also printed.
3848
3849           -dP Dump the RTL in the assembler output as a comment before each
3850               instruction.  Also turns on -dp annotation.
3851
3852           -dv For each of the other indicated dump files (-fdump-rtl-pass),
3853               dump a representation of the control flow graph suitable for
3854               viewing with VCG to file.pass.vcg.
3855
3856           -dx Just generate RTL for a function instead of compiling it.
3857               Usually used with -fdump-rtl-expand.
3858
3859           -dy Dump debugging information during parsing, to standard error.
3860
3861       -fdump-noaddr
3862           When doing debugging dumps, suppress address output.  This makes it
3863           more feasible to use diff on debugging dumps for compiler
3864           invocations with different compiler binaries and/or different text
3865           / bss / data / heap / stack / dso start locations.
3866
3867       -fdump-unnumbered
3868           When doing debugging dumps, suppress instruction numbers and
3869           address output.  This makes it more feasible to use diff on
3870           debugging dumps for compiler invocations with different options, in
3871           particular with and without -g.
3872
3873       -fdump-unnumbered-links
3874           When doing debugging dumps (see -d option above), suppress
3875           instruction numbers for the links to the previous and next
3876           instructions in a sequence.
3877
3878       -fdump-translation-unit (C++ only)
3879       -fdump-translation-unit-options (C++ only)
3880           Dump a representation of the tree structure for the entire
3881           translation unit to a file.  The file name is made by appending .tu
3882           to the source file name.  If the -options form is used, options
3883           controls the details of the dump as described for the -fdump-tree
3884           options.
3885
3886       -fdump-class-hierarchy (C++ only)
3887       -fdump-class-hierarchy-options (C++ only)
3888           Dump a representation of each class's hierarchy and virtual
3889           function table layout to a file.  The file name is made by
3890           appending .class to the source file name.  If the -options form is
3891           used, options controls the details of the dump as described for the
3892           -fdump-tree options.
3893
3894       -fdump-ipa-switch
3895           Control the dumping at various stages of inter-procedural analysis
3896           language tree to a file.  The file name is generated by appending a
3897           switch specific suffix to the source file name.  The following
3898           dumps are possible:
3899
3900           all Enables all inter-procedural analysis dumps.
3901
3902           cgraph
3903               Dumps information about call-graph optimization, unused
3904               function removal, and inlining decisions.
3905
3906           inline
3907               Dump after function inlining.
3908
3909       -fdump-statistics-option
3910           Enable and control dumping of pass statistics in a separate file.
3911           The file name is generated by appending a suffix ending in
3912           .statistics to the source file name.  If the -option form is used,
3913           -stats will cause counters to be summed over the whole compilation
3914           unit while -details will dump every event as the passes generate
3915           them.  The default with no option is to sum counters for each
3916           function compiled.
3917
3918       -fdump-tree-switch
3919       -fdump-tree-switch-options
3920           Control the dumping at various stages of processing the
3921           intermediate language tree to a file.  The file name is generated
3922           by appending a switch specific suffix to the source file name.  If
3923           the -options form is used, options is a list of - separated options
3924           that control the details of the dump.  Not all options are
3925           applicable to all dumps, those which are not meaningful will be
3926           ignored.  The following options are available
3927
3928           address
3929               Print the address of each node.  Usually this is not meaningful
3930               as it changes according to the environment and source file.
3931               Its primary use is for tying up a dump file with a debug
3932               environment.
3933
3934           slim
3935               Inhibit dumping of members of a scope or body of a function
3936               merely because that scope has been reached.  Only dump such
3937               items when they are directly reachable by some other path.
3938               When dumping pretty-printed trees, this option inhibits dumping
3939               the bodies of control structures.
3940
3941           raw Print a raw representation of the tree.  By default, trees are
3942               pretty-printed into a C-like representation.
3943
3944           details
3945               Enable more detailed dumps (not honored by every dump option).
3946
3947           stats
3948               Enable dumping various statistics about the pass (not honored
3949               by every dump option).
3950
3951           blocks
3952               Enable showing basic block boundaries (disabled in raw dumps).
3953
3954           vops
3955               Enable showing virtual operands for every statement.
3956
3957           lineno
3958               Enable showing line numbers for statements.
3959
3960           uid Enable showing the unique ID ("DECL_UID") for each variable.
3961
3962           verbose
3963               Enable showing the tree dump for each statement.
3964
3965           all Turn on all options, except raw, slim, verbose and lineno.
3966
3967           The following tree dumps are possible:
3968
3969           original
3970               Dump before any tree based optimization, to file.original.
3971
3972           optimized
3973               Dump after all tree based optimization, to file.optimized.
3974
3975           gimple
3976               Dump each function before and after the gimplification pass to
3977               a file.  The file name is made by appending .gimple to the
3978               source file name.
3979
3980           cfg Dump the control flow graph of each function to a file.  The
3981               file name is made by appending .cfg to the source file name.
3982
3983           vcg Dump the control flow graph of each function to a file in VCG
3984               format.  The file name is made by appending .vcg to the source
3985               file name.  Note that if the file contains more than one
3986               function, the generated file cannot be used directly by VCG.
3987               You will need to cut and paste each function's graph into its
3988               own separate file first.
3989
3990           ch  Dump each function after copying loop headers.  The file name
3991               is made by appending .ch to the source file name.
3992
3993           ssa Dump SSA related information to a file.  The file name is made
3994               by appending .ssa to the source file name.
3995
3996           alias
3997               Dump aliasing information for each function.  The file name is
3998               made by appending .alias to the source file name.
3999
4000           ccp Dump each function after CCP.  The file name is made by
4001               appending .ccp to the source file name.
4002
4003           storeccp
4004               Dump each function after STORE-CCP.  The file name is made by
4005               appending .storeccp to the source file name.
4006
4007           pre Dump trees after partial redundancy elimination.  The file name
4008               is made by appending .pre to the source file name.
4009
4010           fre Dump trees after full redundancy elimination.  The file name is
4011               made by appending .fre to the source file name.
4012
4013           copyprop
4014               Dump trees after copy propagation.  The file name is made by
4015               appending .copyprop to the source file name.
4016
4017           store_copyprop
4018               Dump trees after store copy-propagation.  The file name is made
4019               by appending .store_copyprop to the source file name.
4020
4021           dce Dump each function after dead code elimination.  The file name
4022               is made by appending .dce to the source file name.
4023
4024           mudflap
4025               Dump each function after adding mudflap instrumentation.  The
4026               file name is made by appending .mudflap to the source file
4027               name.
4028
4029           sra Dump each function after performing scalar replacement of
4030               aggregates.  The file name is made by appending .sra to the
4031               source file name.
4032
4033           sink
4034               Dump each function after performing code sinking.  The file
4035               name is made by appending .sink to the source file name.
4036
4037           dom Dump each function after applying dominator tree optimizations.
4038               The file name is made by appending .dom to the source file
4039               name.
4040
4041           dse Dump each function after applying dead store elimination.  The
4042               file name is made by appending .dse to the source file name.
4043
4044           phiopt
4045               Dump each function after optimizing PHI nodes into straightline
4046               code.  The file name is made by appending .phiopt to the source
4047               file name.
4048
4049           forwprop
4050               Dump each function after forward propagating single use
4051               variables.  The file name is made by appending .forwprop to the
4052               source file name.
4053
4054           copyrename
4055               Dump each function after applying the copy rename optimization.
4056               The file name is made by appending .copyrename to the source
4057               file name.
4058
4059           nrv Dump each function after applying the named return value
4060               optimization on generic trees.  The file name is made by
4061               appending .nrv to the source file name.
4062
4063           vect
4064               Dump each function after applying vectorization of loops.  The
4065               file name is made by appending .vect to the source file name.
4066
4067           vrp Dump each function after Value Range Propagation (VRP).  The
4068               file name is made by appending .vrp to the source file name.
4069
4070           all Enable all the available tree dumps with the flags provided in
4071               this option.
4072
4073       -ftree-vectorizer-verbose=n
4074           This option controls the amount of debugging output the vectorizer
4075           prints.  This information is written to standard error, unless
4076           -fdump-tree-all or -fdump-tree-vect is specified, in which case it
4077           is output to the usual dump listing file, .vect.  For n=0 no
4078           diagnostic information is reported.  If n=1 the vectorizer reports
4079           each loop that got vectorized, and the total number of loops that
4080           got vectorized.  If n=2 the vectorizer also reports non-vectorized
4081           loops that passed the first analysis phase (vect_analyze_loop_form)
4082           - i.e. countable, inner-most, single-bb, single-entry/exit loops.
4083           This is the same verbosity level that -fdump-tree-vect-stats uses.
4084           Higher verbosity levels mean either more information dumped for
4085           each reported loop, or same amount of information reported for more
4086           loops: If n=3, alignment related information is added to the
4087           reports.  If n=4, data-references related information (e.g. memory
4088           dependences, memory access-patterns) is added to the reports.  If
4089           n=5, the vectorizer reports also non-vectorized inner-most loops
4090           that did not pass the first analysis phase (i.e., may not be
4091           countable, or may have complicated control-flow).  If n=6, the
4092           vectorizer reports also non-vectorized nested loops.  For n=7, all
4093           the information the vectorizer generates during its analysis and
4094           transformation is reported.  This is the same verbosity level that
4095           -fdump-tree-vect-details uses.
4096
4097       -frandom-seed=string
4098           This option provides a seed that GCC uses when it would otherwise
4099           use random numbers.  It is used to generate certain symbol names
4100           that have to be different in every compiled file.  It is also used
4101           to place unique stamps in coverage data files and the object files
4102           that produce them.  You can use the -frandom-seed option to produce
4103           reproducibly identical object files.
4104
4105           The string should be different for every file you compile.
4106
4107       -fsched-verbose=n
4108           On targets that use instruction scheduling, this option controls
4109           the amount of debugging output the scheduler prints.  This
4110           information is written to standard error, unless -fdump-rtl-sched1
4111           or -fdump-rtl-sched2 is specified, in which case it is output to
4112           the usual dump listing file, .sched or .sched2 respectively.
4113           However for n greater than nine, the output is always printed to
4114           standard error.
4115
4116           For n greater than zero, -fsched-verbose outputs the same
4117           information as -fdump-rtl-sched1 and -fdump-rtl-sched2.  For n
4118           greater than one, it also output basic block probabilities,
4119           detailed ready list information and unit/insn info.  For n greater
4120           than two, it includes RTL at abort point, control-flow and regions
4121           info.  And for n over four, -fsched-verbose also includes
4122           dependence info.
4123
4124       -save-temps
4125           Store the usual "temporary" intermediate files permanently; place
4126           them in the current directory and name them based on the source
4127           file.  Thus, compiling foo.c with -c -save-temps would produce
4128           files foo.i and foo.s, as well as foo.o.  This creates a
4129           preprocessed foo.i output file even though the compiler now
4130           normally uses an integrated preprocessor.
4131
4132           When used in combination with the -x command line option,
4133           -save-temps is sensible enough to avoid over writing an input
4134           source file with the same extension as an intermediate file.  The
4135           corresponding intermediate file may be obtained by renaming the
4136           source file before using -save-temps.
4137
4138       -time[=file]
4139           Report the CPU time taken by each subprocess in the compilation
4140           sequence.  For C source files, this is the compiler proper and
4141           assembler (plus the linker if linking is done).
4142
4143           Without the specification of an output file, the output looks like
4144           this:
4145
4146                   # cc1 0.12 0.01
4147                   # as 0.00 0.01
4148
4149           The first number on each line is the "user time", that is time
4150           spent executing the program itself.  The second number is "system
4151           time", time spent executing operating system routines on behalf of
4152           the program.  Both numbers are in seconds.
4153
4154           With the specification of an output file, the output is appended to
4155           the named file, and it looks like this:
4156
4157                   0.12 0.01 cc1 <options>
4158                   0.00 0.01 as <options>
4159
4160           The "user time" and the "system time" are moved before the program
4161           name, and the options passed to the program are displayed, so that
4162           one can later tell what file was being compiled, and with which
4163           options.
4164
4165       -fvar-tracking
4166           Run variable tracking pass.  It computes where variables are stored
4167           at each position in code.  Better debugging information is then
4168           generated (if the debugging information format supports this
4169           information).
4170
4171           It is enabled by default when compiling with optimization (-Os, -O,
4172           -O2, ...), debugging information (-g) and the debug info format
4173           supports it.
4174
4175       -fvar-tracking-assignments
4176           Annotate assignments to user variables early in the compilation and
4177           attempt to carry the annotations over throughout the compilation
4178           all the way to the end, in an attempt to improve debug information
4179           while optimizing.
4180
4181           It can be enabled even if var-tracking is disabled, in which case
4182           annotations will be created and maintained, but discarded at the
4183           end.
4184
4185       -fvar-tracking-assignments-toggle
4186           Toggle -fvar-tracking-assignments, in the same way that -gtoggle
4187           toggles -g.
4188
4189       -print-file-name=library
4190           Print the full absolute name of the library file library that would
4191           be used when linking---and don't do anything else.  With this
4192           option, GCC does not compile or link anything; it just prints the
4193           file name.
4194
4195       -print-multi-directory
4196           Print the directory name corresponding to the multilib selected by
4197           any other switches present in the command line.  This directory is
4198           supposed to exist in GCC_EXEC_PREFIX.
4199
4200       -print-multi-lib
4201           Print the mapping from multilib directory names to compiler
4202           switches that enable them.  The directory name is separated from
4203           the switches by ;, and each switch starts with an @} instead of the
4204           @samp{-, without spaces between multiple switches.  This is
4205           supposed to ease shell-processing.
4206
4207       -print-multi-os-directory
4208           Print the path to OS libraries for the selected multilib, relative
4209           to some lib subdirectory.  If OS libraries are present in the lib
4210           subdirectory and no multilibs are used, this is usually just ., if
4211           OS libraries are present in libsuffix sibling directories this
4212           prints e.g. ../lib64, ../lib or ../lib32, or if OS libraries are
4213           present in lib/subdir subdirectories it prints e.g. amd64, sparcv9
4214           or ev6.
4215
4216       -print-prog-name=program
4217           Like -print-file-name, but searches for a program such as cpp.
4218
4219       -print-libgcc-file-name
4220           Same as -print-file-name=libgcc.a.
4221
4222           This is useful when you use -nostdlib or -nodefaultlibs but you do
4223           want to link with libgcc.a.  You can do
4224
4225                   gcc -nostdlib <files>... `gcc -print-libgcc-file-name`
4226
4227       -print-search-dirs
4228           Print the name of the configured installation directory and a list
4229           of program and library directories gcc will search---and don't do
4230           anything else.
4231
4232           This is useful when gcc prints the error message installation
4233           problem, cannot exec cpp0: No such file or directory.  To resolve
4234           this you either need to put cpp0 and the other compiler components
4235           where gcc expects to find them, or you can set the environment
4236           variable GCC_EXEC_PREFIX to the directory where you installed them.
4237           Don't forget the trailing /.
4238
4239       -print-sysroot
4240           Print the target sysroot directory that will be used during
4241           compilation.  This is the target sysroot specified either at
4242           configure time or using the --sysroot option, possibly with an
4243           extra suffix that depends on compilation options.  If no target
4244           sysroot is specified, the option prints nothing.
4245
4246       -print-sysroot-headers-suffix
4247           Print the suffix added to the target sysroot when searching for
4248           headers, or give an error if the compiler is not configured with
4249           such a suffix---and don't do anything else.
4250
4251       -dumpmachine
4252           Print the compiler's target machine (for example,
4253           i686-pc-linux-gnu)---and don't do anything else.
4254
4255       -dumpversion
4256           Print the compiler version (for example, 3.0)---and don't do
4257           anything else.
4258
4259       -dumpspecs
4260           Print the compiler's built-in specs---and don't do anything else.
4261           (This is used when GCC itself is being built.)
4262
4263       -feliminate-unused-debug-types
4264           Normally, when producing DWARF2 output, GCC will emit debugging
4265           information for all types declared in a compilation unit,
4266           regardless of whether or not they are actually used in that
4267           compilation unit.  Sometimes this is useful, such as if, in the
4268           debugger, you want to cast a value to a type that is not actually
4269           used in your program (but is declared).  More often, however, this
4270           results in a significant amount of wasted space.  With this option,
4271           GCC will avoid producing debug symbol output for types that are
4272           nowhere used in the source file being compiled.
4273
4274   Options That Control Optimization
4275       These options control various sorts of optimizations.
4276
4277       Without any optimization option, the compiler's goal is to reduce the
4278       cost of compilation and to make debugging produce the expected results.
4279       Statements are independent: if you stop the program with a breakpoint
4280       between statements, you can then assign a new value to any variable or
4281       change the program counter to any other statement in the function and
4282       get exactly the results you would expect from the source code.
4283
4284       Turning on optimization flags makes the compiler attempt to improve the
4285       performance and/or code size at the expense of compilation time and
4286       possibly the ability to debug the program.
4287
4288       The compiler performs optimization based on the knowledge it has of the
4289       program.  Compiling multiple files at once to a single output file mode
4290       allows the compiler to use information gained from all of the files
4291       when compiling each of them.
4292
4293       Not all optimizations are controlled directly by a flag.  Only
4294       optimizations that have a flag are listed.
4295
4296       -O
4297       -O1 Optimize.  Optimizing compilation takes somewhat more time, and a
4298           lot more memory for a large function.
4299
4300           With -O, the compiler tries to reduce code size and execution time,
4301           without performing any optimizations that take a great deal of
4302           compilation time.
4303
4304           -O turns on the following optimization flags:
4305
4306           -fauto-inc-dec -fcprop-registers -fdce -fdefer-pop -fdelayed-branch
4307           -fdse -fguess-branch-probability -fif-conversion2 -fif-conversion
4308           -finline-small-functions -fipa-pure-const -fipa-reference
4309           -fmerge-constants -fsplit-wide-types -ftree-builtin-call-dce
4310           -ftree-ccp -ftree-ch -ftree-copyrename -ftree-dce
4311           -ftree-dominator-opts -ftree-dse -ftree-fre -ftree-sra -ftree-ter
4312           -funit-at-a-time
4313
4314           -O also turns on -fomit-frame-pointer on machines where doing so
4315           does not interfere with debugging.
4316
4317       -O2 Optimize even more.  GCC performs nearly all supported
4318           optimizations that do not involve a space-speed tradeoff.  As
4319           compared to -O, this option increases both compilation time and the
4320           performance of the generated code.
4321
4322           -O2 turns on all optimization flags specified by -O.  It also turns
4323           on the following optimization flags: -fthread-jumps
4324           -falign-functions  -falign-jumps -falign-loops  -falign-labels
4325           -fcaller-saves -fcrossjumping -fcse-follow-jumps  -fcse-skip-blocks
4326           -fdelete-null-pointer-checks -fexpensive-optimizations -fgcse
4327           -fgcse-lm -findirect-inlining -foptimize-sibling-calls -fpeephole2
4328           -fregmove -freorder-blocks  -freorder-functions
4329           -frerun-cse-after-loop -fsched-interblock  -fsched-spec
4330           -fschedule-insns  -fschedule-insns2 -fstrict-aliasing
4331           -fstrict-overflow -ftree-switch-conversion -ftree-pre -ftree-vrp
4332
4333           Please note the warning under -fgcse about invoking -O2 on programs
4334           that use computed gotos.
4335
4336       -O3 Optimize yet more.  -O3 turns on all optimizations specified by -O2
4337           and also turns on the -finline-functions, -funswitch-loops,
4338           -fpredictive-commoning, -fgcse-after-reload, -ftree-vectorize and
4339           -fipa-cp-clone options.
4340
4341       -O0 Reduce compilation time and make debugging produce the expected
4342           results.  This is the default.
4343
4344       -Os Optimize for size.  -Os enables all -O2 optimizations that do not
4345           typically increase code size.  It also performs further
4346           optimizations designed to reduce code size.
4347
4348           -Os disables the following optimization flags: -falign-functions
4349           -falign-jumps  -falign-loops -falign-labels  -freorder-blocks
4350           -freorder-blocks-and-partition -fprefetch-loop-arrays
4351           -ftree-vect-loop-version
4352
4353           If you use multiple -O options, with or without level numbers, the
4354           last such option is the one that is effective.
4355
4356       Options of the form -fflag specify machine-independent flags.  Most
4357       flags have both positive and negative forms; the negative form of -ffoo
4358       would be -fno-foo.  In the table below, only one of the forms is
4359       listed---the one you typically will use.  You can figure out the other
4360       form by either removing no- or adding it.
4361
4362       The following options control specific optimizations.  They are either
4363       activated by -O options or are related to ones that are.  You can use
4364       the following flags in the rare cases when "fine-tuning" of
4365       optimizations to be performed is desired.
4366
4367       -fno-default-inline
4368           Do not make member functions inline by default merely because they
4369           are defined inside the class scope (C++ only).  Otherwise, when you
4370           specify -O, member functions defined inside class scope are
4371           compiled inline by default; i.e., you don't need to add inline in
4372           front of the member function name.
4373
4374       -fno-defer-pop
4375           Always pop the arguments to each function call as soon as that
4376           function returns.  For machines which must pop arguments after a
4377           function call, the compiler normally lets arguments accumulate on
4378           the stack for several function calls and pops them all at once.
4379
4380           Disabled at levels -O, -O2, -O3, -Os.
4381
4382       -fforward-propagate
4383           Perform a forward propagation pass on RTL.  The pass tries to
4384           combine two instructions and checks if the result can be
4385           simplified.  If loop unrolling is active, two passes are performed
4386           and the second is scheduled after loop unrolling.
4387
4388           This option is enabled by default at optimization levels -O2, -O3,
4389           -Os.
4390
4391       -fomit-frame-pointer
4392           Don't keep the frame pointer in a register for functions that don't
4393           need one.  This avoids the instructions to save, set up and restore
4394           frame pointers; it also makes an extra register available in many
4395           functions.  It also makes debugging impossible on some machines.
4396
4397           On some machines, such as the VAX, this flag has no effect, because
4398           the standard calling sequence automatically handles the frame
4399           pointer and nothing is saved by pretending it doesn't exist.  The
4400           machine-description macro "FRAME_POINTER_REQUIRED" controls whether
4401           a target machine supports this flag.
4402
4403           Enabled at levels -O, -O2, -O3, -Os.
4404
4405       -foptimize-sibling-calls
4406           Optimize sibling and tail recursive calls.
4407
4408           Enabled at levels -O2, -O3, -Os.
4409
4410       -fno-inline
4411           Don't pay attention to the "inline" keyword.  Normally this option
4412           is used to keep the compiler from expanding any functions inline.
4413           Note that if you are not optimizing, no functions can be expanded
4414           inline.
4415
4416       -finline-small-functions
4417           Integrate functions into their callers when their body is smaller
4418           than expected function call code (so overall size of program gets
4419           smaller).  The compiler heuristically decides which functions are
4420           simple enough to be worth integrating in this way.
4421
4422           Enabled at level -O2.
4423
4424       -findirect-inlining
4425           Inline also indirect calls that are discovered to be known at
4426           compile time thanks to previous inlining.  This option has any
4427           effect only when inlining itself is turned on by the
4428           -finline-functions or -finline-small-functions options.
4429
4430           Enabled at level -O2.
4431
4432       -finline-functions
4433           Integrate all simple functions into their callers.  The compiler
4434           heuristically decides which functions are simple enough to be worth
4435           integrating in this way.
4436
4437           If all calls to a given function are integrated, and the function
4438           is declared "static", then the function is normally not output as
4439           assembler code in its own right.
4440
4441           Enabled at level -O3.
4442
4443       -finline-functions-called-once
4444           Consider all "static" functions called once for inlining into their
4445           caller even if they are not marked "inline".  If a call to a given
4446           function is integrated, then the function is not output as
4447           assembler code in its own right.
4448
4449           Enabled at levels -O1, -O2, -O3 and -Os.
4450
4451       -fearly-inlining
4452           Inline functions marked by "always_inline" and functions whose body
4453           seems smaller than the function call overhead early before doing
4454           -fprofile-generate instrumentation and real inlining pass.  Doing
4455           so makes profiling significantly cheaper and usually inlining
4456           faster on programs having large chains of nested wrapper functions.
4457
4458           Enabled by default.
4459
4460       -finline-limit=n
4461           By default, GCC limits the size of functions that can be inlined.
4462           This flag allows coarse control of this limit.  n is the size of
4463           functions that can be inlined in number of pseudo instructions.
4464
4465           Inlining is actually controlled by a number of parameters, which
4466           may be specified individually by using --param name=value.  The
4467           -finline-limit=n option sets some of these parameters as follows:
4468
4469           max-inline-insns-single
4470               is set to n/2.
4471
4472           max-inline-insns-auto
4473               is set to n/2.
4474
4475           See below for a documentation of the individual parameters
4476           controlling inlining and for the defaults of these parameters.
4477
4478           Note: there may be no value to -finline-limit that results in
4479           default behavior.
4480
4481           Note: pseudo instruction represents, in this particular context, an
4482           abstract measurement of function's size.  In no way does it
4483           represent a count of assembly instructions and as such its exact
4484           meaning might change from one release to an another.
4485
4486       -fkeep-inline-functions
4487           In C, emit "static" functions that are declared "inline" into the
4488           object file, even if the function has been inlined into all of its
4489           callers.  This switch does not affect functions using the "extern
4490           inline" extension in GNU C89.  In C++, emit any and all inline
4491           functions into the object file.
4492
4493       -fkeep-static-consts
4494           Emit variables declared "static const" when optimization isn't
4495           turned on, even if the variables aren't referenced.
4496
4497           GCC enables this option by default.  If you want to force the
4498           compiler to check if the variable was referenced, regardless of
4499           whether or not optimization is turned on, use the
4500           -fno-keep-static-consts option.
4501
4502       -fmerge-constants
4503           Attempt to merge identical constants (string constants and floating
4504           point constants) across compilation units.
4505
4506           This option is the default for optimized compilation if the
4507           assembler and linker support it.  Use -fno-merge-constants to
4508           inhibit this behavior.
4509
4510           Enabled at levels -O, -O2, -O3, -Os.
4511
4512       -fmerge-all-constants
4513           Attempt to merge identical constants and identical variables.
4514
4515           This option implies -fmerge-constants.  In addition to
4516           -fmerge-constants this considers e.g. even constant initialized
4517           arrays or initialized constant variables with integral or floating
4518           point types.  Languages like C or C++ require each variable,
4519           including multiple instances of the same variable in recursive
4520           calls, to have distinct locations, so using this option will result
4521           in non-conforming behavior.
4522
4523       -fmodulo-sched
4524           Perform swing modulo scheduling immediately before the first
4525           scheduling pass.  This pass looks at innermost loops and reorders
4526           their instructions by overlapping different iterations.
4527
4528       -fmodulo-sched-allow-regmoves
4529           Perform more aggressive SMS based modulo scheduling with register
4530           moves allowed.  By setting this flag certain anti-dependences edges
4531           will be deleted which will trigger the generation of reg-moves
4532           based on the life-range analysis.  This option is effective only
4533           with -fmodulo-sched enabled.
4534
4535       -fno-branch-count-reg
4536           Do not use "decrement and branch" instructions on a count register,
4537           but instead generate a sequence of instructions that decrement a
4538           register, compare it against zero, then branch based upon the
4539           result.  This option is only meaningful on architectures that
4540           support such instructions, which include x86, PowerPC, IA-64 and
4541           S/390.
4542
4543           The default is -fbranch-count-reg.
4544
4545       -fno-function-cse
4546           Do not put function addresses in registers; make each instruction
4547           that calls a constant function contain the function's address
4548           explicitly.
4549
4550           This option results in less efficient code, but some strange hacks
4551           that alter the assembler output may be confused by the
4552           optimizations performed when this option is not used.
4553
4554           The default is -ffunction-cse
4555
4556       -fno-zero-initialized-in-bss
4557           If the target supports a BSS section, GCC by default puts variables
4558           that are initialized to zero into BSS.  This can save space in the
4559           resulting code.
4560
4561           This option turns off this behavior because some programs
4562           explicitly rely on variables going to the data section.  E.g., so
4563           that the resulting executable can find the beginning of that
4564           section and/or make assumptions based on that.
4565
4566           The default is -fzero-initialized-in-bss.
4567
4568       -fmudflap -fmudflapth -fmudflapir
4569           For front-ends that support it (C and C++), instrument all risky
4570           pointer/array dereferencing operations, some standard library
4571           string/heap functions, and some other associated constructs with
4572           range/validity tests.  Modules so instrumented should be immune to
4573           buffer overflows, invalid heap use, and some other classes of C/C++
4574           programming errors.  The instrumentation relies on a separate
4575           runtime library (libmudflap), which will be linked into a program
4576           if -fmudflap is given at link time.  Run-time behavior of the
4577           instrumented program is controlled by the MUDFLAP_OPTIONS
4578           environment variable.  See "env MUDFLAP_OPTIONS=-help a.out" for
4579           its options.
4580
4581           Use -fmudflapth instead of -fmudflap to compile and to link if your
4582           program is multi-threaded.  Use -fmudflapir, in addition to
4583           -fmudflap or -fmudflapth, if instrumentation should ignore pointer
4584           reads.  This produces less instrumentation (and therefore faster
4585           execution) and still provides some protection against outright
4586           memory corrupting writes, but allows erroneously read data to
4587           propagate within a program.
4588
4589       -fthread-jumps
4590           Perform optimizations where we check to see if a jump branches to a
4591           location where another comparison subsumed by the first is found.
4592           If so, the first branch is redirected to either the destination of
4593           the second branch or a point immediately following it, depending on
4594           whether the condition is known to be true or false.
4595
4596           Enabled at levels -O2, -O3, -Os.
4597
4598       -fsplit-wide-types
4599           When using a type that occupies multiple registers, such as "long
4600           long" on a 32-bit system, split the registers apart and allocate
4601           them independently.  This normally generates better code for those
4602           types, but may make debugging more difficult.
4603
4604           Enabled at levels -O, -O2, -O3, -Os.
4605
4606       -fcse-follow-jumps
4607           In common subexpression elimination (CSE), scan through jump
4608           instructions when the target of the jump is not reached by any
4609           other path.  For example, when CSE encounters an "if" statement
4610           with an "else" clause, CSE will follow the jump when the condition
4611           tested is false.
4612
4613           Enabled at levels -O2, -O3, -Os.
4614
4615       -fcse-skip-blocks
4616           This is similar to -fcse-follow-jumps, but causes CSE to follow
4617           jumps which conditionally skip over blocks.  When CSE encounters a
4618           simple "if" statement with no else clause, -fcse-skip-blocks causes
4619           CSE to follow the jump around the body of the "if".
4620
4621           Enabled at levels -O2, -O3, -Os.
4622
4623       -frerun-cse-after-loop
4624           Re-run common subexpression elimination after loop optimizations
4625           has been performed.
4626
4627           Enabled at levels -O2, -O3, -Os.
4628
4629       -fgcse
4630           Perform a global common subexpression elimination pass.  This pass
4631           also performs global constant and copy propagation.
4632
4633           Note: When compiling a program using computed gotos, a GCC
4634           extension, you may get better runtime performance if you disable
4635           the global common subexpression elimination pass by adding
4636           -fno-gcse to the command line.
4637
4638           Enabled at levels -O2, -O3, -Os.
4639
4640       -fgcse-lm
4641           When -fgcse-lm is enabled, global common subexpression elimination
4642           will attempt to move loads which are only killed by stores into
4643           themselves.  This allows a loop containing a load/store sequence to
4644           be changed to a load outside the loop, and a copy/store within the
4645           loop.
4646
4647           Enabled by default when gcse is enabled.
4648
4649       -fgcse-sm
4650           When -fgcse-sm is enabled, a store motion pass is run after global
4651           common subexpression elimination.  This pass will attempt to move
4652           stores out of loops.  When used in conjunction with -fgcse-lm,
4653           loops containing a load/store sequence can be changed to a load
4654           before the loop and a store after the loop.
4655
4656           Not enabled at any optimization level.
4657
4658       -fgcse-las
4659           When -fgcse-las is enabled, the global common subexpression
4660           elimination pass eliminates redundant loads that come after stores
4661           to the same memory location (both partial and full redundancies).
4662
4663           Not enabled at any optimization level.
4664
4665       -fgcse-after-reload
4666           When -fgcse-after-reload is enabled, a redundant load elimination
4667           pass is performed after reload.  The purpose of this pass is to
4668           cleanup redundant spilling.
4669
4670       -funsafe-loop-optimizations
4671           If given, the loop optimizer will assume that loop indices do not
4672           overflow, and that the loops with nontrivial exit condition are not
4673           infinite.  This enables a wider range of loop optimizations even if
4674           the loop optimizer itself cannot prove that these assumptions are
4675           valid.  Using -Wunsafe-loop-optimizations, the compiler will warn
4676           you if it finds this kind of loop.
4677
4678       -fcrossjumping
4679           Perform cross-jumping transformation.  This transformation unifies
4680           equivalent code and save code size.  The resulting code may or may
4681           not perform better than without cross-jumping.
4682
4683           Enabled at levels -O2, -O3, -Os.
4684
4685       -fauto-inc-dec
4686           Combine increments or decrements of addresses with memory accesses.
4687           This pass is always skipped on architectures that do not have
4688           instructions to support this.  Enabled by default at -O and higher
4689           on architectures that support this.
4690
4691       -fdce
4692           Perform dead code elimination (DCE) on RTL.  Enabled by default at
4693           -O and higher.
4694
4695       -fdse
4696           Perform dead store elimination (DSE) on RTL.  Enabled by default at
4697           -O and higher.
4698
4699       -fif-conversion
4700           Attempt to transform conditional jumps into branch-less
4701           equivalents.  This include use of conditional moves, min, max, set
4702           flags and abs instructions, and some tricks doable by standard
4703           arithmetics.  The use of conditional execution on chips where it is
4704           available is controlled by "if-conversion2".
4705
4706           Enabled at levels -O, -O2, -O3, -Os.
4707
4708       -fif-conversion2
4709           Use conditional execution (where available) to transform
4710           conditional jumps into branch-less equivalents.
4711
4712           Enabled at levels -O, -O2, -O3, -Os.
4713
4714       -fdelete-null-pointer-checks
4715           Use global dataflow analysis to identify and eliminate useless
4716           checks for null pointers.  The compiler assumes that dereferencing
4717           a null pointer would have halted the program.  If a pointer is
4718           checked after it has already been dereferenced, it cannot be null.
4719
4720           In some environments, this assumption is not true, and programs can
4721           safely dereference null pointers.  Use
4722           -fno-delete-null-pointer-checks to disable this optimization for
4723           programs which depend on that behavior.
4724
4725           Enabled at levels -O2, -O3, -Os.
4726
4727       -fexpensive-optimizations
4728           Perform a number of minor optimizations that are relatively
4729           expensive.
4730
4731           Enabled at levels -O2, -O3, -Os.
4732
4733       -foptimize-register-move
4734       -fregmove
4735           Attempt to reassign register numbers in move instructions and as
4736           operands of other simple instructions in order to maximize the
4737           amount of register tying.  This is especially helpful on machines
4738           with two-operand instructions.
4739
4740           Note -fregmove and -foptimize-register-move are the same
4741           optimization.
4742
4743           Enabled at levels -O2, -O3, -Os.
4744
4745       -fira-algorithm=algorithm
4746           Use specified coloring algorithm for the integrated register
4747           allocator.  The algorithm argument should be "priority" or "CB".
4748           The first algorithm specifies Chow's priority coloring, the second
4749           one specifies Chaitin-Briggs coloring.  The second algorithm can be
4750           unimplemented for some architectures.  If it is implemented, it is
4751           the default because Chaitin-Briggs coloring as a rule generates a
4752           better code.
4753
4754       -fira-region=region
4755           Use specified regions for the integrated register allocator.  The
4756           region argument should be one of "all", "mixed", or "one".  The
4757           first value means using all loops as register allocation regions,
4758           the second value which is the default means using all loops except
4759           for loops with small register pressure as the regions, and third
4760           one means using all function as a single region.  The first value
4761           can give best result for machines with small size and irregular
4762           register set, the third one results in faster and generates decent
4763           code and the smallest size code, and the default value usually give
4764           the best results in most cases and for most architectures.
4765
4766       -fira-coalesce
4767           Do optimistic register coalescing.  This option might be profitable
4768           for architectures with big regular register files.
4769
4770       -fno-ira-share-save-slots
4771           Switch off sharing stack slots used for saving call used hard
4772           registers living through a call.  Each hard register will get a
4773           separate stack slot and as a result function stack frame will be
4774           bigger.
4775
4776       -fno-ira-share-spill-slots
4777           Switch off sharing stack slots allocated for pseudo-registers.
4778           Each pseudo-register which did not get a hard register will get a
4779           separate stack slot and as a result function stack frame will be
4780           bigger.
4781
4782       -fira-verbose=n
4783           Set up how verbose dump file for the integrated register allocator
4784           will be.  Default value is 5.  If the value is greater or equal to
4785           10, the dump file will be stderr as if the value were n minus 10.
4786
4787       -fdelayed-branch
4788           If supported for the target machine, attempt to reorder
4789           instructions to exploit instruction slots available after delayed
4790           branch instructions.
4791
4792           Enabled at levels -O, -O2, -O3, -Os.
4793
4794       -fschedule-insns
4795           If supported for the target machine, attempt to reorder
4796           instructions to eliminate execution stalls due to required data
4797           being unavailable.  This helps machines that have slow floating
4798           point or memory load instructions by allowing other instructions to
4799           be issued until the result of the load or floating point
4800           instruction is required.
4801
4802           Enabled at levels -O2, -O3, -Os.
4803
4804       -fschedule-insns2
4805           Similar to -fschedule-insns, but requests an additional pass of
4806           instruction scheduling after register allocation has been done.
4807           This is especially useful on machines with a relatively small
4808           number of registers and where memory load instructions take more
4809           than one cycle.
4810
4811           Enabled at levels -O2, -O3, -Os.
4812
4813       -fno-sched-interblock
4814           Don't schedule instructions across basic blocks.  This is normally
4815           enabled by default when scheduling before register allocation, i.e.
4816           with -fschedule-insns or at -O2 or higher.
4817
4818       -fno-sched-spec
4819           Don't allow speculative motion of non-load instructions.  This is
4820           normally enabled by default when scheduling before register
4821           allocation, i.e.  with -fschedule-insns or at -O2 or higher.
4822
4823       -fsched-spec-load
4824           Allow speculative motion of some load instructions.  This only
4825           makes sense when scheduling before register allocation, i.e. with
4826           -fschedule-insns or at -O2 or higher.
4827
4828       -fsched-spec-load-dangerous
4829           Allow speculative motion of more load instructions.  This only
4830           makes sense when scheduling before register allocation, i.e. with
4831           -fschedule-insns or at -O2 or higher.
4832
4833       -fsched-stalled-insns
4834       -fsched-stalled-insns=n
4835           Define how many insns (if any) can be moved prematurely from the
4836           queue of stalled insns into the ready list, during the second
4837           scheduling pass.  -fno-sched-stalled-insns means that no insns will
4838           be moved prematurely, -fsched-stalled-insns=0 means there is no
4839           limit on how many queued insns can be moved prematurely.
4840           -fsched-stalled-insns without a value is equivalent to
4841           -fsched-stalled-insns=1.
4842
4843       -fsched-stalled-insns-dep
4844       -fsched-stalled-insns-dep=n
4845           Define how many insn groups (cycles) will be examined for a
4846           dependency on a stalled insn that is candidate for premature
4847           removal from the queue of stalled insns.  This has an effect only
4848           during the second scheduling pass, and only if
4849           -fsched-stalled-insns is used.  -fno-sched-stalled-insns-dep is
4850           equivalent to -fsched-stalled-insns-dep=0.
4851           -fsched-stalled-insns-dep without a value is equivalent to
4852           -fsched-stalled-insns-dep=1.
4853
4854       -fsched2-use-superblocks
4855           When scheduling after register allocation, do use superblock
4856           scheduling algorithm.  Superblock scheduling allows motion across
4857           basic block boundaries resulting on faster schedules.  This option
4858           is experimental, as not all machine descriptions used by GCC model
4859           the CPU closely enough to avoid unreliable results from the
4860           algorithm.
4861
4862           This only makes sense when scheduling after register allocation,
4863           i.e. with -fschedule-insns2 or at -O2 or higher.
4864
4865       -fsched2-use-traces
4866           Use -fsched2-use-superblocks algorithm when scheduling after
4867           register allocation and additionally perform code duplication in
4868           order to increase the size of superblocks using tracer pass.  See
4869           -ftracer for details on trace formation.
4870
4871           This mode should produce faster but significantly longer programs.
4872           Also without -fbranch-probabilities the traces constructed may not
4873           match the reality and hurt the performance.  This only makes sense
4874           when scheduling after register allocation, i.e. with
4875           -fschedule-insns2 or at -O2 or higher.
4876
4877       -fsee
4878           Eliminate redundant sign extension instructions and move the non-
4879           redundant ones to optimal placement using lazy code motion (LCM).
4880
4881       -freschedule-modulo-scheduled-loops
4882           The modulo scheduling comes before the traditional scheduling, if a
4883           loop was modulo scheduled we may want to prevent the later
4884           scheduling passes from changing its schedule, we use this option to
4885           control that.
4886
4887       -fselective-scheduling
4888           Schedule instructions using selective scheduling algorithm.
4889           Selective scheduling runs instead of the first scheduler pass.
4890
4891       -fselective-scheduling2
4892           Schedule instructions using selective scheduling algorithm.
4893           Selective scheduling runs instead of the second scheduler pass.
4894
4895       -fsel-sched-pipelining
4896           Enable software pipelining of innermost loops during selective
4897           scheduling.  This option has no effect until one of
4898           -fselective-scheduling or -fselective-scheduling2 is turned on.
4899
4900       -fsel-sched-pipelining-outer-loops
4901           When pipelining loops during selective scheduling, also pipeline
4902           outer loops.  This option has no effect until
4903           -fsel-sched-pipelining is turned on.
4904
4905       -fcaller-saves
4906           Enable values to be allocated in registers that will be clobbered
4907           by function calls, by emitting extra instructions to save and
4908           restore the registers around such calls.  Such allocation is done
4909           only when it seems to result in better code than would otherwise be
4910           produced.
4911
4912           This option is always enabled by default on certain machines,
4913           usually those which have no call-preserved registers to use
4914           instead.
4915
4916           Enabled at levels -O2, -O3, -Os.
4917
4918       -fconserve-stack
4919           Attempt to minimize stack usage.  The compiler will attempt to use
4920           less stack space, even if that makes the program slower.  This
4921           option implies setting the large-stack-frame parameter to 100 and
4922           the large-stack-frame-growth parameter to 400.
4923
4924       -ftree-reassoc
4925           Perform reassociation on trees.  This flag is enabled by default at
4926           -O and higher.
4927
4928       -ftree-pre
4929           Perform partial redundancy elimination (PRE) on trees.  This flag
4930           is enabled by default at -O2 and -O3.
4931
4932       -ftree-fre
4933           Perform full redundancy elimination (FRE) on trees.  The difference
4934           between FRE and PRE is that FRE only considers expressions that are
4935           computed on all paths leading to the redundant computation.  This
4936           analysis is faster than PRE, though it exposes fewer redundancies.
4937           This flag is enabled by default at -O and higher.
4938
4939       -ftree-copy-prop
4940           Perform copy propagation on trees.  This pass eliminates
4941           unnecessary copy operations.  This flag is enabled by default at -O
4942           and higher.
4943
4944       -fipa-pure-const
4945           Discover which functions are pure or constant.  Enabled by default
4946           at -O and higher.
4947
4948       -fipa-reference
4949           Discover which static variables do not escape cannot escape the
4950           compilation unit.  Enabled by default at -O and higher.
4951
4952       -fipa-struct-reorg
4953           Perform structure reorganization optimization, that change C-like
4954           structures layout in order to better utilize spatial locality.
4955           This transformation is effective for programs containing arrays of
4956           structures.  Available in two compilation modes: profile-based
4957           (enabled with -fprofile-generate) or static (which uses built-in
4958           heuristics).  Require -fipa-type-escape to provide the safety of
4959           this transformation.  It works only in whole program mode, so it
4960           requires -fwhole-program and -combine to be enabled.  Structures
4961           considered cold by this transformation are not affected (see
4962           --param struct-reorg-cold-struct-ratio=value).
4963
4964           With this flag, the program debug info reflects a new structure
4965           layout.
4966
4967       -fipa-pta
4968           Perform interprocedural pointer analysis.  This option is
4969           experimental and does not affect generated code.
4970
4971       -fipa-cp
4972           Perform interprocedural constant propagation.  This optimization
4973           analyzes the program to determine when values passed to functions
4974           are constants and then optimizes accordingly.  This optimization
4975           can substantially increase performance if the application has
4976           constants passed to functions.  This flag is enabled by default at
4977           -O2, -Os and -O3.
4978
4979       -fipa-cp-clone
4980           Perform function cloning to make interprocedural constant
4981           propagation stronger.  When enabled, interprocedural constant
4982           propagation will perform function cloning when externally visible
4983           function can be called with constant arguments.  Because this
4984           optimization can create multiple copies of functions, it may
4985           significantly increase code size (see --param
4986           ipcp-unit-growth=value).  This flag is enabled by default at -O3.
4987
4988       -fipa-matrix-reorg
4989           Perform matrix flattening and transposing.  Matrix flattening tries
4990           to replace a m-dimensional matrix with its equivalent n-dimensional
4991           matrix, where n < m.  This reduces the level of indirection needed
4992           for accessing the elements of the matrix. The second optimization
4993           is matrix transposing that attempts to change the order of the
4994           matrix's dimensions in order to improve cache locality.  Both
4995           optimizations need the -fwhole-program flag.  Transposing is
4996           enabled only if profiling information is available.
4997
4998       -ftree-sink
4999           Perform forward store motion  on trees.  This flag is enabled by
5000           default at -O and higher.
5001
5002       -ftree-ccp
5003           Perform sparse conditional constant propagation (CCP) on trees.
5004           This pass only operates on local scalar variables and is enabled by
5005           default at -O and higher.
5006
5007       -ftree-switch-conversion
5008           Perform conversion of simple initializations in a switch to
5009           initializations from a scalar array.  This flag is enabled by
5010           default at -O2 and higher.
5011
5012       -ftree-dce
5013           Perform dead code elimination (DCE) on trees.  This flag is enabled
5014           by default at -O and higher.
5015
5016       -ftree-builtin-call-dce
5017           Perform conditional dead code elimination (DCE) for calls to
5018           builtin functions that may set "errno" but are otherwise side-
5019           effect free.  This flag is enabled by default at -O2 and higher if
5020           -Os is not also specified.
5021
5022       -ftree-dominator-opts
5023           Perform a variety of simple scalar cleanups (constant/copy
5024           propagation, redundancy elimination, range propagation and
5025           expression simplification) based on a dominator tree traversal.
5026           This also performs jump threading (to reduce jumps to jumps). This
5027           flag is enabled by default at -O and higher.
5028
5029       -ftree-dse
5030           Perform dead store elimination (DSE) on trees.  A dead store is a
5031           store into a memory location which will later be overwritten by
5032           another store without any intervening loads.  In this case the
5033           earlier store can be deleted.  This flag is enabled by default at
5034           -O and higher.
5035
5036       -ftree-ch
5037           Perform loop header copying on trees.  This is beneficial since it
5038           increases effectiveness of code motion optimizations.  It also
5039           saves one jump.  This flag is enabled by default at -O and higher.
5040           It is not enabled for -Os, since it usually increases code size.
5041
5042       -ftree-loop-optimize
5043           Perform loop optimizations on trees.  This flag is enabled by
5044           default at -O and higher.
5045
5046       -ftree-loop-linear
5047           Perform linear loop transformations on tree.  This flag can improve
5048           cache performance and allow further loop optimizations to take
5049           place.
5050
5051       -floop-interchange
5052           Perform loop interchange transformations on loops.  Interchanging
5053           two nested loops switches the inner and outer loops.  For example,
5054           given a loop like:
5055
5056                   DO J = 1, M
5057                     DO I = 1, N
5058                       A(J, I) = A(J, I) * C
5059                     ENDDO
5060                   ENDDO
5061
5062           loop interchange will transform the loop as if the user had
5063           written:
5064
5065                   DO I = 1, N
5066                     DO J = 1, M
5067                       A(J, I) = A(J, I) * C
5068                     ENDDO
5069                   ENDDO
5070
5071           which can be beneficial when "N" is larger than the caches, because
5072           in Fortran, the elements of an array are stored in memory
5073           contiguously by column, and the original loop iterates over rows,
5074           potentially creating at each access a cache miss.  This
5075           optimization applies to all the languages supported by GCC and is
5076           not limited to Fortran.  To use this code transformation, GCC has
5077           to be configured with --with-ppl and --with-cloog to enable the
5078           Graphite loop transformation infrastructure.
5079
5080       -floop-strip-mine
5081           Perform loop strip mining transformations on loops.  Strip mining
5082           splits a loop into two nested loops.  The outer loop has strides
5083           equal to the strip size and the inner loop has strides of the
5084           original loop within a strip.  For example, given a loop like:
5085
5086                   DO I = 1, N
5087                     A(I) = A(I) + C
5088                   ENDDO
5089
5090           loop strip mining will transform the loop as if the user had
5091           written:
5092
5093                   DO II = 1, N, 4
5094                     DO I = II, min (II + 3, N)
5095                       A(I) = A(I) + C
5096                     ENDDO
5097                   ENDDO
5098
5099           This optimization applies to all the languages supported by GCC and
5100           is not limited to Fortran.  To use this code transformation, GCC
5101           has to be configured with --with-ppl and --with-cloog to enable the
5102           Graphite loop transformation infrastructure.
5103
5104       -floop-block
5105           Perform loop blocking transformations on loops.  Blocking strip
5106           mines each loop in the loop nest such that the memory accesses of
5107           the element loops fit inside caches.  For example, given a loop
5108           like:
5109
5110                   DO I = 1, N
5111                     DO J = 1, M
5112                       A(J, I) = B(I) + C(J)
5113                     ENDDO
5114                   ENDDO
5115
5116           loop blocking will transform the loop as if the user had written:
5117
5118                   DO II = 1, N, 64
5119                     DO JJ = 1, M, 64
5120                       DO I = II, min (II + 63, N)
5121                         DO J = JJ, min (JJ + 63, M)
5122                           A(J, I) = B(I) + C(J)
5123                         ENDDO
5124                       ENDDO
5125                     ENDDO
5126                   ENDDO
5127
5128           which can be beneficial when "M" is larger than the caches, because
5129           the innermost loop will iterate over a smaller amount of data that
5130           can be kept in the caches.  This optimization applies to all the
5131           languages supported by GCC and is not limited to Fortran.  To use
5132           this code transformation, GCC has to be configured with --with-ppl
5133           and --with-cloog to enable the Graphite loop transformation
5134           infrastructure.
5135
5136       -fcheck-data-deps
5137           Compare the results of several data dependence analyzers.  This
5138           option is used for debugging the data dependence analyzers.
5139
5140       -ftree-loop-distribution
5141           Perform loop distribution.  This flag can improve cache performance
5142           on big loop bodies and allow further loop optimizations, like
5143           parallelization or vectorization, to take place.  For example, the
5144           loop
5145
5146                   DO I = 1, N
5147                     A(I) = B(I) + C
5148                     D(I) = E(I) * F
5149                   ENDDO
5150
5151           is transformed to
5152
5153                   DO I = 1, N
5154                      A(I) = B(I) + C
5155                   ENDDO
5156                   DO I = 1, N
5157                      D(I) = E(I) * F
5158                   ENDDO
5159
5160       -ftree-loop-im
5161           Perform loop invariant motion on trees.  This pass moves only
5162           invariants that would be hard to handle at RTL level (function
5163           calls, operations that expand to nontrivial sequences of insns).
5164           With -funswitch-loops it also moves operands of conditions that are
5165           invariant out of the loop, so that we can use just trivial
5166           invariantness analysis in loop unswitching.  The pass also includes
5167           store motion.
5168
5169       -ftree-loop-ivcanon
5170           Create a canonical counter for number of iterations in the loop for
5171           that determining number of iterations requires complicated
5172           analysis.  Later optimizations then may determine the number
5173           easily.  Useful especially in connection with unrolling.
5174
5175       -fivopts
5176           Perform induction variable optimizations (strength reduction,
5177           induction variable merging and induction variable elimination) on
5178           trees.
5179
5180       -ftree-parallelize-loops=n
5181           Parallelize loops, i.e., split their iteration space to run in n
5182           threads.  This is only possible for loops whose iterations are
5183           independent and can be arbitrarily reordered.  The optimization is
5184           only profitable on multiprocessor machines, for loops that are CPU-
5185           intensive, rather than constrained e.g. by memory bandwidth.  This
5186           option implies -pthread, and thus is only supported on targets that
5187           have support for -pthread.
5188
5189       -ftree-sra
5190           Perform scalar replacement of aggregates.  This pass replaces
5191           structure references with scalars to prevent committing structures
5192           to memory too early.  This flag is enabled by default at -O and
5193           higher.
5194
5195       -ftree-copyrename
5196           Perform copy renaming on trees.  This pass attempts to rename
5197           compiler temporaries to other variables at copy locations, usually
5198           resulting in variable names which more closely resemble the
5199           original variables.  This flag is enabled by default at -O and
5200           higher.
5201
5202       -ftree-coalesce-inlined-vars
5203           Permit the copyrename pass to subject inlined variables to
5204           coalescing into other variables.  This may harm debug information
5205           of such inlined variables, but it will keep variables of the main
5206           function apart from each other, such that they are more likely to
5207           contain the expected values in a debugging session.
5208
5209       -ftree-coalesce-vars
5210           Permit the copyrename pass to subject all variables to SSA
5211           coalescing.  This may severely limit the ability to debug an
5212           optimized program compiled without -fvar-tracking-assignments.  In
5213           the negated form, this flag prevents SSA coalescing of user
5214           variables, including inlined ones.
5215
5216       -ftree-ter
5217           Perform temporary expression replacement during the SSA->normal
5218           phase.  Single use/single def temporaries are replaced at their use
5219           location with their defining expression.  This results in non-
5220           GIMPLE code, but gives the expanders much more complex trees to
5221           work on resulting in better RTL generation.  This is enabled by
5222           default at -O and higher.
5223
5224       -ftree-vectorize
5225           Perform loop vectorization on trees. This flag is enabled by
5226           default at -O3.
5227
5228       -ftree-vect-loop-version
5229           Perform loop versioning when doing loop vectorization on trees.
5230           When a loop appears to be vectorizable except that data alignment
5231           or data dependence cannot be determined at compile time then
5232           vectorized and non-vectorized versions of the loop are generated
5233           along with runtime checks for alignment or dependence to control
5234           which version is executed.  This option is enabled by default
5235           except at level -Os where it is disabled.
5236
5237       -fvect-cost-model
5238           Enable cost model for vectorization.
5239
5240       -ftree-vrp
5241           Perform Value Range Propagation on trees.  This is similar to the
5242           constant propagation pass, but instead of values, ranges of values
5243           are propagated.  This allows the optimizers to remove unnecessary
5244           range checks like array bound checks and null pointer checks.  This
5245           is enabled by default at -O2 and higher.  Null pointer check
5246           elimination is only done if -fdelete-null-pointer-checks is
5247           enabled.
5248
5249       -ftracer
5250           Perform tail duplication to enlarge superblock size.  This
5251           transformation simplifies the control flow of the function allowing
5252           other optimizations to do better job.
5253
5254       -funroll-loops
5255           Unroll loops whose number of iterations can be determined at
5256           compile time or upon entry to the loop.  -funroll-loops implies
5257           -frerun-cse-after-loop.  This option makes code larger, and may or
5258           may not make it run faster.
5259
5260       -funroll-all-loops
5261           Unroll all loops, even if their number of iterations is uncertain
5262           when the loop is entered.  This usually makes programs run more
5263           slowly.  -funroll-all-loops implies the same options as
5264           -funroll-loops,
5265
5266       -fsplit-ivs-in-unroller
5267           Enables expressing of values of induction variables in later
5268           iterations of the unrolled loop using the value in the first
5269           iteration.  This breaks long dependency chains, thus improving
5270           efficiency of the scheduling passes.
5271
5272           Combination of -fweb and CSE is often sufficient to obtain the same
5273           effect.  However in cases the loop body is more complicated than a
5274           single basic block, this is not reliable.  It also does not work at
5275           all on some of the architectures due to restrictions in the CSE
5276           pass.
5277
5278           This optimization is enabled by default.
5279
5280       -fvariable-expansion-in-unroller
5281           With this option, the compiler will create multiple copies of some
5282           local variables when unrolling a loop which can result in superior
5283           code.
5284
5285       -fpredictive-commoning
5286           Perform predictive commoning optimization, i.e., reusing
5287           computations (especially memory loads and stores) performed in
5288           previous iterations of loops.
5289
5290           This option is enabled at level -O3.
5291
5292       -fprefetch-loop-arrays
5293           If supported by the target machine, generate instructions to
5294           prefetch memory to improve the performance of loops that access
5295           large arrays.
5296
5297           This option may generate better or worse code; results are highly
5298           dependent on the structure of loops within the source code.
5299
5300           Disabled at level -Os.
5301
5302       -fno-peephole
5303       -fno-peephole2
5304           Disable any machine-specific peephole optimizations.  The
5305           difference between -fno-peephole and -fno-peephole2 is in how they
5306           are implemented in the compiler; some targets use one, some use the
5307           other, a few use both.
5308
5309           -fpeephole is enabled by default.  -fpeephole2 enabled at levels
5310           -O2, -O3, -Os.
5311
5312       -fno-guess-branch-probability
5313           Do not guess branch probabilities using heuristics.
5314
5315           GCC will use heuristics to guess branch probabilities if they are
5316           not provided by profiling feedback (-fprofile-arcs).  These
5317           heuristics are based on the control flow graph.  If some branch
5318           probabilities are specified by __builtin_expect, then the
5319           heuristics will be used to guess branch probabilities for the rest
5320           of the control flow graph, taking the __builtin_expect info into
5321           account.  The interactions between the heuristics and
5322           __builtin_expect can be complex, and in some cases, it may be
5323           useful to disable the heuristics so that the effects of
5324           __builtin_expect are easier to understand.
5325
5326           The default is -fguess-branch-probability at levels -O, -O2, -O3,
5327           -Os.
5328
5329       -freorder-blocks
5330           Reorder basic blocks in the compiled function in order to reduce
5331           number of taken branches and improve code locality.
5332
5333           Enabled at levels -O2, -O3.
5334
5335       -freorder-blocks-and-partition
5336           In addition to reordering basic blocks in the compiled function, in
5337           order to reduce number of taken branches, partitions hot and cold
5338           basic blocks into separate sections of the assembly and .o files,
5339           to improve paging and cache locality performance.
5340
5341           This optimization is automatically turned off in the presence of
5342           exception handling, for linkonce sections, for functions with a
5343           user-defined section attribute and on any architecture that does
5344           not support named sections.
5345
5346       -freorder-functions
5347           Reorder functions in the object file in order to improve code
5348           locality.  This is implemented by using special subsections
5349           ".text.hot" for most frequently executed functions and
5350           ".text.unlikely" for unlikely executed functions.  Reordering is
5351           done by the linker so object file format must support named
5352           sections and linker must place them in a reasonable way.
5353
5354           Also profile feedback must be available in to make this option
5355           effective.  See -fprofile-arcs for details.
5356
5357           Enabled at levels -O2, -O3, -Os.
5358
5359       -fstrict-aliasing
5360           Allow the compiler to assume the strictest aliasing rules
5361           applicable to the language being compiled.  For C (and C++), this
5362           activates optimizations based on the type of expressions.  In
5363           particular, an object of one type is assumed never to reside at the
5364           same address as an object of a different type, unless the types are
5365           almost the same.  For example, an "unsigned int" can alias an
5366           "int", but not a "void*" or a "double".  A character type may alias
5367           any other type.
5368
5369           Pay special attention to code like this:
5370
5371                   union a_union {
5372                     int i;
5373                     double d;
5374                   };
5375
5376                   int f() {
5377                     union a_union t;
5378                     t.d = 3.0;
5379                     return t.i;
5380                   }
5381
5382           The practice of reading from a different union member than the one
5383           most recently written to (called "type-punning") is common.  Even
5384           with -fstrict-aliasing, type-punning is allowed, provided the
5385           memory is accessed through the union type.  So, the code above will
5386           work as expected.    However, this code might not:
5387
5388                   int f() {
5389                     union a_union t;
5390                     int* ip;
5391                     t.d = 3.0;
5392                     ip = &t.i;
5393                     return *ip;
5394                   }
5395
5396           Similarly, access by taking the address, casting the resulting
5397           pointer and dereferencing the result has undefined behavior, even
5398           if the cast uses a union type, e.g.:
5399
5400                   int f() {
5401                     double d = 3.0;
5402                     return ((union a_union *) &d)->i;
5403                   }
5404
5405           The -fstrict-aliasing option is enabled at levels -O2, -O3, -Os.
5406
5407       -fstrict-overflow
5408           Allow the compiler to assume strict signed overflow rules,
5409           depending on the language being compiled.  For C (and C++) this
5410           means that overflow when doing arithmetic with signed numbers is
5411           undefined, which means that the compiler may assume that it will
5412           not happen.  This permits various optimizations.  For example, the
5413           compiler will assume that an expression like "i + 10 > i" will
5414           always be true for signed "i".  This assumption is only valid if
5415           signed overflow is undefined, as the expression is false if "i +
5416           10" overflows when using twos complement arithmetic.  When this
5417           option is in effect any attempt to determine whether an operation
5418           on signed numbers will overflow must be written carefully to not
5419           actually involve overflow.
5420
5421           This option also allows the compiler to assume strict pointer
5422           semantics: given a pointer to an object, if adding an offset to
5423           that pointer does not produce a pointer to the same object, the
5424           addition is undefined.  This permits the compiler to conclude that
5425           "p + u > p" is always true for a pointer "p" and unsigned integer
5426           "u".  This assumption is only valid because pointer wraparound is
5427           undefined, as the expression is false if "p + u" overflows using
5428           twos complement arithmetic.
5429
5430           See also the -fwrapv option.  Using -fwrapv means that integer
5431           signed overflow is fully defined: it wraps.  When -fwrapv is used,
5432           there is no difference between -fstrict-overflow and
5433           -fno-strict-overflow for integers.  With -fwrapv certain types of
5434           overflow are permitted.  For example, if the compiler gets an
5435           overflow when doing arithmetic on constants, the overflowed value
5436           can still be used with -fwrapv, but not otherwise.
5437
5438           The -fstrict-overflow option is enabled at levels -O2, -O3, -Os.
5439
5440       -falign-functions
5441       -falign-functions=n
5442           Align the start of functions to the next power-of-two greater than
5443           n, skipping up to n bytes.  For instance, -falign-functions=32
5444           aligns functions to the next 32-byte boundary, but
5445           -falign-functions=24 would align to the next 32-byte boundary only
5446           if this can be done by skipping 23 bytes or less.
5447
5448           -fno-align-functions and -falign-functions=1 are equivalent and
5449           mean that functions will not be aligned.
5450
5451           Some assemblers only support this flag when n is a power of two; in
5452           that case, it is rounded up.
5453
5454           If n is not specified or is zero, use a machine-dependent default.
5455
5456           Enabled at levels -O2, -O3.
5457
5458       -falign-labels
5459       -falign-labels=n
5460           Align all branch targets to a power-of-two boundary, skipping up to
5461           n bytes like -falign-functions.  This option can easily make code
5462           slower, because it must insert dummy operations for when the branch
5463           target is reached in the usual flow of the code.
5464
5465           -fno-align-labels and -falign-labels=1 are equivalent and mean that
5466           labels will not be aligned.
5467
5468           If -falign-loops or -falign-jumps are applicable and are greater
5469           than this value, then their values are used instead.
5470
5471           If n is not specified or is zero, use a machine-dependent default
5472           which is very likely to be 1, meaning no alignment.
5473
5474           Enabled at levels -O2, -O3.
5475
5476       -falign-loops
5477       -falign-loops=n
5478           Align loops to a power-of-two boundary, skipping up to n bytes like
5479           -falign-functions.  The hope is that the loop will be executed many
5480           times, which will make up for any execution of the dummy
5481           operations.
5482
5483           -fno-align-loops and -falign-loops=1 are equivalent and mean that
5484           loops will not be aligned.
5485
5486           If n is not specified or is zero, use a machine-dependent default.
5487
5488           Enabled at levels -O2, -O3.
5489
5490       -falign-jumps
5491       -falign-jumps=n
5492           Align branch targets to a power-of-two boundary, for branch targets
5493           where the targets can only be reached by jumping, skipping up to n
5494           bytes like -falign-functions.  In this case, no dummy operations
5495           need be executed.
5496
5497           -fno-align-jumps and -falign-jumps=1 are equivalent and mean that
5498           loops will not be aligned.
5499
5500           If n is not specified or is zero, use a machine-dependent default.
5501
5502           Enabled at levels -O2, -O3.
5503
5504       -funit-at-a-time
5505           This option is left for compatibility reasons. -funit-at-a-time has
5506           no effect, while -fno-unit-at-a-time implies -fno-toplevel-reorder
5507           and -fno-section-anchors.
5508
5509           Enabled by default.
5510
5511       -fno-toplevel-reorder
5512           Do not reorder top-level functions, variables, and "asm"
5513           statements.  Output them in the same order that they appear in the
5514           input file.  When this option is used, unreferenced static
5515           variables will not be removed.  This option is intended to support
5516           existing code which relies on a particular ordering.  For new code,
5517           it is better to use attributes.
5518
5519           Enabled at level -O0.  When disabled explicitly, it also imply
5520           -fno-section-anchors that is otherwise enabled at -O0 on some
5521           targets.
5522
5523       -fweb
5524           Constructs webs as commonly used for register allocation purposes
5525           and assign each web individual pseudo register.  This allows the
5526           register allocation pass to operate on pseudos directly, but also
5527           strengthens several other optimization passes, such as CSE, loop
5528           optimizer and trivial dead code remover.  It can, however, make
5529           debugging impossible, since variables will no longer stay in a
5530           "home register".
5531
5532           Enabled by default with -funroll-loops.
5533
5534       -fwhole-program
5535           Assume that the current compilation unit represents whole program
5536           being compiled.  All public functions and variables with the
5537           exception of "main" and those merged by attribute
5538           "externally_visible" become static functions and in a affect gets
5539           more aggressively optimized by interprocedural optimizers.  While
5540           this option is equivalent to proper use of "static" keyword for
5541           programs consisting of single file, in combination with option
5542           --combine this flag can be used to compile most of smaller scale C
5543           programs since the functions and variables become local for the
5544           whole combined compilation unit, not for the single source file
5545           itself.
5546
5547           This option is not supported for Fortran programs.
5548
5549       -fcprop-registers
5550           After register allocation and post-register allocation instruction
5551           splitting, we perform a copy-propagation pass to try to reduce
5552           scheduling dependencies and occasionally eliminate the copy.
5553
5554           Enabled at levels -O, -O2, -O3, -Os.
5555
5556       -fprofile-correction
5557           Profiles collected using an instrumented binary for multi-threaded
5558           programs may be inconsistent due to missed counter updates. When
5559           this option is specified, GCC will use heuristics to correct or
5560           smooth out such inconsistencies. By default, GCC will emit an error
5561           message when an inconsistent profile is detected.
5562
5563       -fprofile-dir=path
5564           Set the directory to search the profile data files in to path.
5565           This option affects only the profile data generated by
5566           -fprofile-generate, -ftest-coverage, -fprofile-arcs and used by
5567           -fprofile-use and -fbranch-probabilities and its related options.
5568           By default, GCC will use the current directory as path thus the
5569           profile data file will appear in the same directory as the object
5570           file.
5571
5572       -fprofile-generate
5573       -fprofile-generate=path
5574           Enable options usually used for instrumenting application to
5575           produce profile useful for later recompilation with profile
5576           feedback based optimization.  You must use -fprofile-generate both
5577           when compiling and when linking your program.
5578
5579           The following options are enabled: "-fprofile-arcs",
5580           "-fprofile-values", "-fvpt".
5581
5582           If path is specified, GCC will look at the path to find the profile
5583           feedback data files. See -fprofile-dir.
5584
5585       -fprofile-use
5586       -fprofile-use=path
5587           Enable profile feedback directed optimizations, and optimizations
5588           generally profitable only with profile feedback available.
5589
5590           The following options are enabled: "-fbranch-probabilities",
5591           "-fvpt", "-funroll-loops", "-fpeel-loops", "-ftracer"
5592
5593           By default, GCC emits an error message if the feedback profiles do
5594           not match the source code.  This error can be turned into a warning
5595           by using -Wcoverage-mismatch.  Note this may result in poorly
5596           optimized code.
5597
5598           If path is specified, GCC will look at the path to find the profile
5599           feedback data files. See -fprofile-dir.
5600
5601       The following options control compiler behavior regarding floating
5602       point arithmetic.  These options trade off between speed and
5603       correctness.  All must be specifically enabled.
5604
5605       -ffloat-store
5606           Do not store floating point variables in registers, and inhibit
5607           other options that might change whether a floating point value is
5608           taken from a register or memory.
5609
5610           This option prevents undesirable excess precision on machines such
5611           as the 68000 where the floating registers (of the 68881) keep more
5612           precision than a "double" is supposed to have.  Similarly for the
5613           x86 architecture.  For most programs, the excess precision does
5614           only good, but a few programs rely on the precise definition of
5615           IEEE floating point.  Use -ffloat-store for such programs, after
5616           modifying them to store all pertinent intermediate computations
5617           into variables.
5618
5619       -ffast-math
5620           Sets -fno-math-errno, -funsafe-math-optimizations,
5621           -ffinite-math-only, -fno-rounding-math, -fno-signaling-nans and
5622           -fcx-limited-range.
5623
5624           This option causes the preprocessor macro "__FAST_MATH__" to be
5625           defined.
5626
5627           This option is not turned on by any -O option since it can result
5628           in incorrect output for programs which depend on an exact
5629           implementation of IEEE or ISO rules/specifications for math
5630           functions. It may, however, yield faster code for programs that do
5631           not require the guarantees of these specifications.
5632
5633       -fno-math-errno
5634           Do not set ERRNO after calling math functions that are executed
5635           with a single instruction, e.g., sqrt.  A program that relies on
5636           IEEE exceptions for math error handling may want to use this flag
5637           for speed while maintaining IEEE arithmetic compatibility.
5638
5639           This option is not turned on by any -O option since it can result
5640           in incorrect output for programs which depend on an exact
5641           implementation of IEEE or ISO rules/specifications for math
5642           functions. It may, however, yield faster code for programs that do
5643           not require the guarantees of these specifications.
5644
5645           The default is -fmath-errno.
5646
5647           On Darwin systems, the math library never sets "errno".  There is
5648           therefore no reason for the compiler to consider the possibility
5649           that it might, and -fno-math-errno is the default.
5650
5651       -funsafe-math-optimizations
5652           Allow optimizations for floating-point arithmetic that (a) assume
5653           that arguments and results are valid and (b) may violate IEEE or
5654           ANSI standards.  When used at link-time, it may include libraries
5655           or startup files that change the default FPU control word or other
5656           similar optimizations.
5657
5658           This option is not turned on by any -O option since it can result
5659           in incorrect output for programs which depend on an exact
5660           implementation of IEEE or ISO rules/specifications for math
5661           functions. It may, however, yield faster code for programs that do
5662           not require the guarantees of these specifications.  Enables
5663           -fno-signed-zeros, -fno-trapping-math, -fassociative-math and
5664           -freciprocal-math.
5665
5666           The default is -fno-unsafe-math-optimizations.
5667
5668       -fassociative-math
5669           Allow re-association of operands in series of floating-point
5670           operations.  This violates the ISO C and C++ language standard by
5671           possibly changing computation result.  NOTE: re-ordering may change
5672           the sign of zero as well as ignore NaNs and inhibit or create
5673           underflow or overflow (and thus cannot be used on a code which
5674           relies on rounding behavior like "(x + 2**52) - 2**52)".  May also
5675           reorder floating-point comparisons and thus may not be used when
5676           ordered comparisons are required.  This option requires that both
5677           -fno-signed-zeros and -fno-trapping-math be in effect.  Moreover,
5678           it doesn't make much sense with -frounding-math.
5679
5680           The default is -fno-associative-math.
5681
5682       -freciprocal-math
5683           Allow the reciprocal of a value to be used instead of dividing by
5684           the value if this enables optimizations.  For example "x / y" can
5685           be replaced with "x * (1/y)" which is useful if "(1/y)" is subject
5686           to common subexpression elimination.  Note that this loses
5687           precision and increases the number of flops operating on the value.
5688
5689           The default is -fno-reciprocal-math.
5690
5691       -ffinite-math-only
5692           Allow optimizations for floating-point arithmetic that assume that
5693           arguments and results are not NaNs or +-Infs.
5694
5695           This option is not turned on by any -O option since it can result
5696           in incorrect output for programs which depend on an exact
5697           implementation of IEEE or ISO rules/specifications for math
5698           functions. It may, however, yield faster code for programs that do
5699           not require the guarantees of these specifications.
5700
5701           The default is -fno-finite-math-only.
5702
5703       -fno-signed-zeros
5704           Allow optimizations for floating point arithmetic that ignore the
5705           signedness of zero.  IEEE arithmetic specifies the behavior of
5706           distinct +0.0 and -0.0 values, which then prohibits simplification
5707           of expressions such as x+0.0 or 0.0*x (even with
5708           -ffinite-math-only).  This option implies that the sign of a zero
5709           result isn't significant.
5710
5711           The default is -fsigned-zeros.
5712
5713       -fno-trapping-math
5714           Compile code assuming that floating-point operations cannot
5715           generate user-visible traps.  These traps include division by zero,
5716           overflow, underflow, inexact result and invalid operation.  This
5717           option requires that -fno-signaling-nans be in effect.  Setting
5718           this option may allow faster code if one relies on "non-stop" IEEE
5719           arithmetic, for example.
5720
5721           This option should never be turned on by any -O option since it can
5722           result in incorrect output for programs which depend on an exact
5723           implementation of IEEE or ISO rules/specifications for math
5724           functions.
5725
5726           The default is -ftrapping-math.
5727
5728       -frounding-math
5729           Disable transformations and optimizations that assume default
5730           floating point rounding behavior.  This is round-to-zero for all
5731           floating point to integer conversions, and round-to-nearest for all
5732           other arithmetic truncations.  This option should be specified for
5733           programs that change the FP rounding mode dynamically, or that may
5734           be executed with a non-default rounding mode.  This option disables
5735           constant folding of floating point expressions at compile-time
5736           (which may be affected by rounding mode) and arithmetic
5737           transformations that are unsafe in the presence of sign-dependent
5738           rounding modes.
5739
5740           The default is -fno-rounding-math.
5741
5742           This option is experimental and does not currently guarantee to
5743           disable all GCC optimizations that are affected by rounding mode.
5744           Future versions of GCC may provide finer control of this setting
5745           using C99's "FENV_ACCESS" pragma.  This command line option will be
5746           used to specify the default state for "FENV_ACCESS".
5747
5748       -frtl-abstract-sequences
5749           It is a size optimization method. This option is to find identical
5750           sequences of code, which can be turned into pseudo-procedures  and
5751           then  replace  all  occurrences with  calls to  the  newly created
5752           subroutine. It is kind of an opposite of -finline-functions.  This
5753           optimization runs at RTL level.
5754
5755       -fsignaling-nans
5756           Compile code assuming that IEEE signaling NaNs may generate user-
5757           visible traps during floating-point operations.  Setting this
5758           option disables optimizations that may change the number of
5759           exceptions visible with signaling NaNs.  This option implies
5760           -ftrapping-math.
5761
5762           This option causes the preprocessor macro "__SUPPORT_SNAN__" to be
5763           defined.
5764
5765           The default is -fno-signaling-nans.
5766
5767           This option is experimental and does not currently guarantee to
5768           disable all GCC optimizations that affect signaling NaN behavior.
5769
5770       -fsingle-precision-constant
5771           Treat floating point constant as single precision constant instead
5772           of implicitly converting it to double precision constant.
5773
5774       -fcx-limited-range
5775           When enabled, this option states that a range reduction step is not
5776           needed when performing complex division.  Also, there is no
5777           checking whether the result of a complex multiplication or division
5778           is "NaN + I*NaN", with an attempt to rescue the situation in that
5779           case.  The default is -fno-cx-limited-range, but is enabled by
5780           -ffast-math.
5781
5782           This option controls the default setting of the ISO C99
5783           "CX_LIMITED_RANGE" pragma.  Nevertheless, the option applies to all
5784           languages.
5785
5786       -fcx-fortran-rules
5787           Complex multiplication and division follow Fortran rules.  Range
5788           reduction is done as part of complex division, but there is no
5789           checking whether the result of a complex multiplication or division
5790           is "NaN + I*NaN", with an attempt to rescue the situation in that
5791           case.
5792
5793           The default is -fno-cx-fortran-rules.
5794
5795       The following options control optimizations that may improve
5796       performance, but are not enabled by any -O options.  This section
5797       includes experimental options that may produce broken code.
5798
5799       -fbranch-probabilities
5800           After running a program compiled with -fprofile-arcs, you can
5801           compile it a second time using -fbranch-probabilities, to improve
5802           optimizations based on the number of times each branch was taken.
5803           When the program compiled with -fprofile-arcs exits it saves arc
5804           execution counts to a file called sourcename.gcda for each source
5805           file.  The information in this data file is very dependent on the
5806           structure of the generated code, so you must use the same source
5807           code and the same optimization options for both compilations.
5808
5809           With -fbranch-probabilities, GCC puts a REG_BR_PROB note on each
5810           JUMP_INSN and CALL_INSN.  These can be used to improve
5811           optimization.  Currently, they are only used in one place: in
5812           reorg.c, instead of guessing which path a branch is mostly to take,
5813           the REG_BR_PROB values are used to exactly determine which path is
5814           taken more often.
5815
5816       -fprofile-values
5817           If combined with -fprofile-arcs, it adds code so that some data
5818           about values of expressions in the program is gathered.
5819
5820           With -fbranch-probabilities, it reads back the data gathered from
5821           profiling values of expressions and adds REG_VALUE_PROFILE notes to
5822           instructions for their later usage in optimizations.
5823
5824           Enabled with -fprofile-generate and -fprofile-use.
5825
5826       -fvpt
5827           If combined with -fprofile-arcs, it instructs the compiler to add a
5828           code to gather information about values of expressions.
5829
5830           With -fbranch-probabilities, it reads back the data gathered and
5831           actually performs the optimizations based on them.  Currently the
5832           optimizations include specialization of division operation using
5833           the knowledge about the value of the denominator.
5834
5835       -frename-registers
5836           Attempt to avoid false dependencies in scheduled code by making use
5837           of registers left over after register allocation.  This
5838           optimization will most benefit processors with lots of registers.
5839           Depending on the debug information format adopted by the target,
5840           however, it can make debugging impossible, since variables will no
5841           longer stay in a "home register".
5842
5843           Enabled by default with -funroll-loops.
5844
5845       -ftracer
5846           Perform tail duplication to enlarge superblock size.  This
5847           transformation simplifies the control flow of the function allowing
5848           other optimizations to do better job.
5849
5850           Enabled with -fprofile-use.
5851
5852       -funroll-loops
5853           Unroll loops whose number of iterations can be determined at
5854           compile time or upon entry to the loop.  -funroll-loops implies
5855           -frerun-cse-after-loop, -fweb and -frename-registers.  It also
5856           turns on complete loop peeling (i.e. complete removal of loops with
5857           small constant number of iterations).  This option makes code
5858           larger, and may or may not make it run faster.
5859
5860           Enabled with -fprofile-use.
5861
5862       -funroll-all-loops
5863           Unroll all loops, even if their number of iterations is uncertain
5864           when the loop is entered.  This usually makes programs run more
5865           slowly.  -funroll-all-loops implies the same options as
5866           -funroll-loops.
5867
5868       -fpeel-loops
5869           Peels the loops for that there is enough information that they do
5870           not roll much (from profile feedback).  It also turns on complete
5871           loop peeling (i.e. complete removal of loops with small constant
5872           number of iterations).
5873
5874           Enabled with -fprofile-use.
5875
5876       -fmove-loop-invariants
5877           Enables the loop invariant motion pass in the RTL loop optimizer.
5878           Enabled at level -O1
5879
5880       -funswitch-loops
5881           Move branches with loop invariant conditions out of the loop, with
5882           duplicates of the loop on both branches (modified according to
5883           result of the condition).
5884
5885       -ffunction-sections
5886       -fdata-sections
5887           Place each function or data item into its own section in the output
5888           file if the target supports arbitrary sections.  The name of the
5889           function or the name of the data item determines the section's name
5890           in the output file.
5891
5892           Use these options on systems where the linker can perform
5893           optimizations to improve locality of reference in the instruction
5894           space.  Most systems using the ELF object format and SPARC
5895           processors running Solaris 2 have linkers with such optimizations.
5896           AIX may have these optimizations in the future.
5897
5898           Only use these options when there are significant benefits from
5899           doing so.  When you specify these options, the assembler and linker
5900           will create larger object and executable files and will also be
5901           slower.  You will not be able to use "gprof" on all systems if you
5902           specify this option and you may have problems with debugging if you
5903           specify both this option and -g.
5904
5905       -fbranch-target-load-optimize
5906           Perform branch target register load optimization before prologue /
5907           epilogue threading.  The use of target registers can typically be
5908           exposed only during reload, thus hoisting loads out of loops and
5909           doing inter-block scheduling needs a separate optimization pass.
5910
5911       -fbranch-target-load-optimize2
5912           Perform branch target register load optimization after prologue /
5913           epilogue threading.
5914
5915       -fbtr-bb-exclusive
5916           When performing branch target register load optimization, don't
5917           reuse branch target registers in within any basic block.
5918
5919       -fstack-protector
5920           Emit extra code to check for buffer overflows, such as stack
5921           smashing attacks.  This is done by adding a guard variable to
5922           functions with vulnerable objects.  This includes functions that
5923           call alloca, and functions with buffers larger than 8 bytes.  The
5924           guards are initialized when a function is entered and then checked
5925           when the function exits.  If a guard check fails, an error message
5926           is printed and the program exits.
5927
5928       -fstack-protector-all
5929           Like -fstack-protector except that all functions are protected.
5930
5931       -fsection-anchors
5932           Try to reduce the number of symbolic address calculations by using
5933           shared "anchor" symbols to address nearby objects.  This
5934           transformation can help to reduce the number of GOT entries and GOT
5935           accesses on some targets.
5936
5937           For example, the implementation of the following function "foo":
5938
5939                   static int a, b, c;
5940                   int foo (void) { return a + b + c; }
5941
5942           would usually calculate the addresses of all three variables, but
5943           if you compile it with -fsection-anchors, it will access the
5944           variables from a common anchor point instead.  The effect is
5945           similar to the following pseudocode (which isn't valid C):
5946
5947                   int foo (void)
5948                   {
5949                     register int *xr = &x;
5950                     return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
5951                   }
5952
5953           Not all targets support this option.
5954
5955       --param name=value
5956           In some places, GCC uses various constants to control the amount of
5957           optimization that is done.  For example, GCC will not inline
5958           functions that contain more that a certain number of instructions.
5959           You can control some of these constants on the command-line using
5960           the --param option.
5961
5962           The names of specific parameters, and the meaning of the values,
5963           are tied to the internals of the compiler, and are subject to
5964           change without notice in future releases.
5965
5966           In each case, the value is an integer.  The allowable choices for
5967           name are given in the following table:
5968
5969           sra-max-structure-size
5970               The maximum structure size, in bytes, at which the scalar
5971               replacement of aggregates (SRA) optimization will perform block
5972               copies.  The default value, 0, implies that GCC will select the
5973               most appropriate size itself.
5974
5975           sra-field-structure-ratio
5976               The threshold ratio (as a percentage) between instantiated
5977               fields and the complete structure size.  We say that if the
5978               ratio of the number of bytes in instantiated fields to the
5979               number of bytes in the complete structure exceeds this
5980               parameter, then block copies are not used.  The default is 75.
5981
5982           struct-reorg-cold-struct-ratio
5983               The threshold ratio (as a percentage) between a structure
5984               frequency and the frequency of the hottest structure in the
5985               program.  This parameter is used by struct-reorg optimization
5986               enabled by -fipa-struct-reorg.  We say that if the ratio of a
5987               structure frequency, calculated by profiling, to the hottest
5988               structure frequency in the program is less than this parameter,
5989               then structure reorganization is not applied to this structure.
5990               The default is 10.
5991
5992           predictable-branch-cost-outcome
5993               When branch is predicted to be taken with probability lower
5994               than this threshold (in percent), then it is considered well
5995               predictable. The default is 10.
5996
5997           max-crossjump-edges
5998               The maximum number of incoming edges to consider for
5999               crossjumping.  The algorithm used by -fcrossjumping is O(N^2)
6000               in the number of edges incoming to each block.  Increasing
6001               values mean more aggressive optimization, making the compile
6002               time increase with probably small improvement in executable
6003               size.
6004
6005           min-crossjump-insns
6006               The minimum number of instructions which must be matched at the
6007               end of two blocks before crossjumping will be performed on
6008               them.  This value is ignored in the case where all instructions
6009               in the block being crossjumped from are matched.  The default
6010               value is 5.
6011
6012           max-grow-copy-bb-insns
6013               The maximum code size expansion factor when copying basic
6014               blocks instead of jumping.  The expansion is relative to a jump
6015               instruction.  The default value is 8.
6016
6017           max-goto-duplication-insns
6018               The maximum number of instructions to duplicate to a block that
6019               jumps to a computed goto.  To avoid O(N^2) behavior in a number
6020               of passes, GCC factors computed gotos early in the compilation
6021               process, and unfactors them as late as possible.  Only computed
6022               jumps at the end of a basic blocks with no more than max-goto-
6023               duplication-insns are unfactored.  The default value is 8.
6024
6025           max-delay-slot-insn-search
6026               The maximum number of instructions to consider when looking for
6027               an instruction to fill a delay slot.  If more than this
6028               arbitrary number of instructions is searched, the time savings
6029               from filling the delay slot will be minimal so stop searching.
6030               Increasing values mean more aggressive optimization, making the
6031               compile time increase with probably small improvement in
6032               executable run time.
6033
6034           max-delay-slot-live-search
6035               When trying to fill delay slots, the maximum number of
6036               instructions to consider when searching for a block with valid
6037               live register information.  Increasing this arbitrarily chosen
6038               value means more aggressive optimization, increasing the
6039               compile time.  This parameter should be removed when the delay
6040               slot code is rewritten to maintain the control-flow graph.
6041
6042           max-gcse-memory
6043               The approximate maximum amount of memory that will be allocated
6044               in order to perform the global common subexpression elimination
6045               optimization.  If more memory than specified is required, the
6046               optimization will not be done.
6047
6048           max-gcse-passes
6049               The maximum number of passes of GCSE to run.  The default is 1.
6050
6051           max-pending-list-length
6052               The maximum number of pending dependencies scheduling will
6053               allow before flushing the current state and starting over.
6054               Large functions with few branches or calls can create
6055               excessively large lists which needlessly consume memory and
6056               resources.
6057
6058           max-inline-insns-single
6059               Several parameters control the tree inliner used in gcc.  This
6060               number sets the maximum number of instructions (counted in
6061               GCC's internal representation) in a single function that the
6062               tree inliner will consider for inlining.  This only affects
6063               functions declared inline and methods implemented in a class
6064               declaration (C++).  The default value is 450.
6065
6066           max-inline-insns-auto
6067               When you use -finline-functions (included in -O3), a lot of
6068               functions that would otherwise not be considered for inlining
6069               by the compiler will be investigated.  To those functions, a
6070               different (more restrictive) limit compared to functions
6071               declared inline can be applied.  The default value is 90.
6072
6073           large-function-insns
6074               The limit specifying really large functions.  For functions
6075               larger than this limit after inlining, inlining is constrained
6076               by --param large-function-growth.  This parameter is useful
6077               primarily to avoid extreme compilation time caused by non-
6078               linear algorithms used by the backend.  The default value is
6079               2700.
6080
6081           large-function-growth
6082               Specifies maximal growth of large function caused by inlining
6083               in percents.  The default value is 100 which limits large
6084               function growth to 2.0 times the original size.
6085
6086           large-unit-insns
6087               The limit specifying large translation unit.  Growth caused by
6088               inlining of units larger than this limit is limited by --param
6089               inline-unit-growth.  For small units this might be too tight
6090               (consider unit consisting of function A that is inline and B
6091               that just calls A three time.  If B is small relative to A, the
6092               growth of unit is 300\% and yet such inlining is very sane.
6093               For very large units consisting of small inlineable functions
6094               however the overall unit growth limit is needed to avoid
6095               exponential explosion of code size.  Thus for smaller units,
6096               the size is increased to --param large-unit-insns before
6097               applying --param inline-unit-growth.  The default is 10000
6098
6099           inline-unit-growth
6100               Specifies maximal overall growth of the compilation unit caused
6101               by inlining.  The default value is 30 which limits unit growth
6102               to 1.3 times the original size.
6103
6104           ipcp-unit-growth
6105               Specifies maximal overall growth of the compilation unit caused
6106               by interprocedural constant propagation.  The default value is
6107               10 which limits unit growth to 1.1 times the original size.
6108
6109           large-stack-frame
6110               The limit specifying large stack frames.  While inlining the
6111               algorithm is trying to not grow past this limit too much.
6112               Default value is 256 bytes.
6113
6114           large-stack-frame-growth
6115               Specifies maximal growth of large stack frames caused by
6116               inlining in percents.  The default value is 1000 which limits
6117               large stack frame growth to 11 times the original size.
6118
6119           max-inline-insns-recursive
6120           max-inline-insns-recursive-auto
6121               Specifies maximum number of instructions out-of-line copy of
6122               self recursive inline function can grow into by performing
6123               recursive inlining.
6124
6125               For functions declared inline --param max-inline-insns-
6126               recursive is taken into account.  For function not declared
6127               inline, recursive inlining happens only when -finline-functions
6128               (included in -O3) is enabled and --param max-inline-insns-
6129               recursive-auto is used.  The default value is 450.
6130
6131           max-inline-recursive-depth
6132           max-inline-recursive-depth-auto
6133               Specifies maximum recursion depth used by the recursive
6134               inlining.
6135
6136               For functions declared inline --param max-inline-recursive-
6137               depth is taken into account.  For function not declared inline,
6138               recursive inlining happens only when -finline-functions
6139               (included in -O3) is enabled and --param max-inline-recursive-
6140               depth-auto is used.  The default value is 8.
6141
6142           min-inline-recursive-probability
6143               Recursive inlining is profitable only for function having deep
6144               recursion in average and can hurt for function having little
6145               recursion depth by increasing the prologue size or complexity
6146               of function body to other optimizers.
6147
6148               When profile feedback is available (see -fprofile-generate) the
6149               actual recursion depth can be guessed from probability that
6150               function will recurse via given call expression.  This
6151               parameter limits inlining only to call expression whose
6152               probability exceeds given threshold (in percents).  The default
6153               value is 10.
6154
6155           inline-call-cost
6156               Specify cost of call instruction relative to simple arithmetics
6157               operations (having cost of 1).  Increasing this cost
6158               disqualifies inlining of non-leaf functions and at the same
6159               time increases size of leaf function that is believed to reduce
6160               function size by being inlined.  In effect it increases amount
6161               of inlining for code having large abstraction penalty (many
6162               functions that just pass the arguments to other functions) and
6163               decrease inlining for code with low abstraction penalty.  The
6164               default value is 12.
6165
6166           min-vect-loop-bound
6167               The minimum number of iterations under which a loop will not
6168               get vectorized when -ftree-vectorize is used.  The number of
6169               iterations after vectorization needs to be greater than the
6170               value specified by this option to allow vectorization.  The
6171               default value is 0.
6172
6173           max-unrolled-insns
6174               The maximum number of instructions that a loop should have if
6175               that loop is unrolled, and if the loop is unrolled, it
6176               determines how many times the loop code is unrolled.
6177
6178           max-average-unrolled-insns
6179               The maximum number of instructions biased by probabilities of
6180               their execution that a loop should have if that loop is
6181               unrolled, and if the loop is unrolled, it determines how many
6182               times the loop code is unrolled.
6183
6184           max-unroll-times
6185               The maximum number of unrollings of a single loop.
6186
6187           max-peeled-insns
6188               The maximum number of instructions that a loop should have if
6189               that loop is peeled, and if the loop is peeled, it determines
6190               how many times the loop code is peeled.
6191
6192           max-peel-times
6193               The maximum number of peelings of a single loop.
6194
6195           max-completely-peeled-insns
6196               The maximum number of insns of a completely peeled loop.
6197
6198           max-completely-peel-times
6199               The maximum number of iterations of a loop to be suitable for
6200               complete peeling.
6201
6202           max-completely-peel-loop-nest-depth
6203               The maximum depth of a loop nest suitable for complete peeling.
6204
6205           max-unswitch-insns
6206               The maximum number of insns of an unswitched loop.
6207
6208           max-unswitch-level
6209               The maximum number of branches unswitched in a single loop.
6210
6211           lim-expensive
6212               The minimum cost of an expensive expression in the loop
6213               invariant motion.
6214
6215           iv-consider-all-candidates-bound
6216               Bound on number of candidates for induction variables below
6217               that all candidates are considered for each use in induction
6218               variable optimizations.  Only the most relevant candidates are
6219               considered if there are more candidates, to avoid quadratic
6220               time complexity.
6221
6222           iv-max-considered-uses
6223               The induction variable optimizations give up on loops that
6224               contain more induction variable uses.
6225
6226           iv-always-prune-cand-set-bound
6227               If number of candidates in the set is smaller than this value,
6228               we always try to remove unnecessary ivs from the set during its
6229               optimization when a new iv is added to the set.
6230
6231           scev-max-expr-size
6232               Bound on size of expressions used in the scalar evolutions
6233               analyzer.  Large expressions slow the analyzer.
6234
6235           omega-max-vars
6236               The maximum number of variables in an Omega constraint system.
6237               The default value is 128.
6238
6239           omega-max-geqs
6240               The maximum number of inequalities in an Omega constraint
6241               system.  The default value is 256.
6242
6243           omega-max-eqs
6244               The maximum number of equalities in an Omega constraint system.
6245               The default value is 128.
6246
6247           omega-max-wild-cards
6248               The maximum number of wildcard variables that the Omega solver
6249               will be able to insert.  The default value is 18.
6250
6251           omega-hash-table-size
6252               The size of the hash table in the Omega solver.  The default
6253               value is 550.
6254
6255           omega-max-keys
6256               The maximal number of keys used by the Omega solver.  The
6257               default value is 500.
6258
6259           omega-eliminate-redundant-constraints
6260               When set to 1, use expensive methods to eliminate all redundant
6261               constraints.  The default value is 0.
6262
6263           vect-max-version-for-alignment-checks
6264               The maximum number of runtime checks that can be performed when
6265               doing loop versioning for alignment in the vectorizer.  See
6266               option ftree-vect-loop-version for more information.
6267
6268           vect-max-version-for-alias-checks
6269               The maximum number of runtime checks that can be performed when
6270               doing loop versioning for alias in the vectorizer.  See option
6271               ftree-vect-loop-version for more information.
6272
6273           max-iterations-to-track
6274               The maximum number of iterations of a loop the brute force
6275               algorithm for analysis of # of iterations of the loop tries to
6276               evaluate.
6277
6278           hot-bb-count-fraction
6279               Select fraction of the maximal count of repetitions of basic
6280               block in program given basic block needs to have to be
6281               considered hot.
6282
6283           hot-bb-frequency-fraction
6284               Select fraction of the maximal frequency of executions of basic
6285               block in function given basic block needs to have to be
6286               considered hot
6287
6288           max-predicted-iterations
6289               The maximum number of loop iterations we predict statically.
6290               This is useful in cases where function contain single loop with
6291               known bound and other loop with unknown.  We predict the known
6292               number of iterations correctly, while the unknown number of
6293               iterations average to roughly 10.  This means that the loop
6294               without bounds would appear artificially cold relative to the
6295               other one.
6296
6297           align-threshold
6298               Select fraction of the maximal frequency of executions of basic
6299               block in function given basic block will get aligned.
6300
6301           align-loop-iterations
6302               A loop expected to iterate at lest the selected number of
6303               iterations will get aligned.
6304
6305           tracer-dynamic-coverage
6306           tracer-dynamic-coverage-feedback
6307               This value is used to limit superblock formation once the given
6308               percentage of executed instructions is covered.  This limits
6309               unnecessary code size expansion.
6310
6311               The tracer-dynamic-coverage-feedback is used only when profile
6312               feedback is available.  The real profiles (as opposed to
6313               statically estimated ones) are much less balanced allowing the
6314               threshold to be larger value.
6315
6316           tracer-max-code-growth
6317               Stop tail duplication once code growth has reached given
6318               percentage.  This is rather hokey argument, as most of the
6319               duplicates will be eliminated later in cross jumping, so it may
6320               be set to much higher values than is the desired code growth.
6321
6322           tracer-min-branch-ratio
6323               Stop reverse growth when the reverse probability of best edge
6324               is less than this threshold (in percent).
6325
6326           tracer-min-branch-ratio
6327           tracer-min-branch-ratio-feedback
6328               Stop forward growth if the best edge do have probability lower
6329               than this threshold.
6330
6331               Similarly to tracer-dynamic-coverage two values are present,
6332               one for compilation for profile feedback and one for
6333               compilation without.  The value for compilation with profile
6334               feedback needs to be more conservative (higher) in order to
6335               make tracer effective.
6336
6337           max-cse-path-length
6338               Maximum number of basic blocks on path that cse considers.  The
6339               default is 10.
6340
6341           max-cse-insns
6342               The maximum instructions CSE process before flushing. The
6343               default is 1000.
6344
6345           max-aliased-vops
6346               Maximum number of virtual operands per function allowed to
6347               represent aliases before triggering the alias partitioning
6348               heuristic.  Alias partitioning reduces compile times and memory
6349               consumption needed for aliasing at the expense of precision
6350               loss in alias information.  The default value for this
6351               parameter is 100 for -O1, 500 for -O2 and 1000 for -O3.
6352
6353               Notice that if a function contains more memory statements than
6354               the value of this parameter, it is not really possible to
6355               achieve this reduction.  In this case, the compiler will use
6356               the number of memory statements as the value for max-aliased-
6357               vops.
6358
6359           avg-aliased-vops
6360               Average number of virtual operands per statement allowed to
6361               represent aliases before triggering the alias partitioning
6362               heuristic.  This works in conjunction with max-aliased-vops.
6363               If a function contains more than max-aliased-vops virtual
6364               operators, then memory symbols will be grouped into memory
6365               partitions until either the total number of virtual operators
6366               is below max-aliased-vops or the average number of virtual
6367               operators per memory statement is below avg-aliased-vops.  The
6368               default value for this parameter is 1 for -O1 and -O2, and 3
6369               for -O3.
6370
6371           ggc-min-expand
6372               GCC uses a garbage collector to manage its own memory
6373               allocation.  This parameter specifies the minimum percentage by
6374               which the garbage collector's heap should be allowed to expand
6375               between collections.  Tuning this may improve compilation
6376               speed; it has no effect on code generation.
6377
6378               The default is 30% + 70% * (RAM/1GB) with an upper bound of
6379               100% when RAM >= 1GB.  If "getrlimit" is available, the notion
6380               of "RAM" is the smallest of actual RAM and "RLIMIT_DATA" or
6381               "RLIMIT_AS".  If GCC is not able to calculate RAM on a
6382               particular platform, the lower bound of 30% is used.  Setting
6383               this parameter and ggc-min-heapsize to zero causes a full
6384               collection to occur at every opportunity.  This is extremely
6385               slow, but can be useful for debugging.
6386
6387           ggc-min-heapsize
6388               Minimum size of the garbage collector's heap before it begins
6389               bothering to collect garbage.  The first collection occurs
6390               after the heap expands by ggc-min-expand% beyond ggc-min-
6391               heapsize.  Again, tuning this may improve compilation speed,
6392               and has no effect on code generation.
6393
6394               The default is the smaller of RAM/8, RLIMIT_RSS, or a limit
6395               which tries to ensure that RLIMIT_DATA or RLIMIT_AS are not
6396               exceeded, but with a lower bound of 4096 (four megabytes) and
6397               an upper bound of 131072 (128 megabytes).  If GCC is not able
6398               to calculate RAM on a particular platform, the lower bound is
6399               used.  Setting this parameter very large effectively disables
6400               garbage collection.  Setting this parameter and ggc-min-expand
6401               to zero causes a full collection to occur at every opportunity.
6402
6403           max-reload-search-insns
6404               The maximum number of instruction reload should look backward
6405               for equivalent register.  Increasing values mean more
6406               aggressive optimization, making the compile time increase with
6407               probably slightly better performance.  The default value is
6408               100.
6409
6410           max-cselib-memory-locations
6411               The maximum number of memory locations cselib should take into
6412               account.  Increasing values mean more aggressive optimization,
6413               making the compile time increase with probably slightly better
6414               performance.  The default value is 500.
6415
6416           reorder-blocks-duplicate
6417           reorder-blocks-duplicate-feedback
6418               Used by basic block reordering pass to decide whether to use
6419               unconditional branch or duplicate the code on its destination.
6420               Code is duplicated when its estimated size is smaller than this
6421               value multiplied by the estimated size of unconditional jump in
6422               the hot spots of the program.
6423
6424               The reorder-block-duplicate-feedback is used only when profile
6425               feedback is available and may be set to higher values than
6426               reorder-block-duplicate since information about the hot spots
6427               is more accurate.
6428
6429           max-sched-ready-insns
6430               The maximum number of instructions ready to be issued the
6431               scheduler should consider at any given time during the first
6432               scheduling pass.  Increasing values mean more thorough
6433               searches, making the compilation time increase with probably
6434               little benefit.  The default value is 100.
6435
6436           max-sched-region-blocks
6437               The maximum number of blocks in a region to be considered for
6438               interblock scheduling.  The default value is 10.
6439
6440           max-pipeline-region-blocks
6441               The maximum number of blocks in a region to be considered for
6442               pipelining in the selective scheduler.  The default value is
6443               15.
6444
6445           max-sched-region-insns
6446               The maximum number of insns in a region to be considered for
6447               interblock scheduling.  The default value is 100.
6448
6449           max-pipeline-region-insns
6450               The maximum number of insns in a region to be considered for
6451               pipelining in the selective scheduler.  The default value is
6452               200.
6453
6454           min-spec-prob
6455               The minimum probability (in percents) of reaching a source
6456               block for interblock speculative scheduling.  The default value
6457               is 40.
6458
6459           max-sched-extend-regions-iters
6460               The maximum number of iterations through CFG to extend regions.
6461               0 - disable region extension, N - do at most N iterations.  The
6462               default value is 0.
6463
6464           max-sched-insn-conflict-delay
6465               The maximum conflict delay for an insn to be considered for
6466               speculative motion.  The default value is 3.
6467
6468           sched-spec-prob-cutoff
6469               The minimal probability of speculation success (in percents),
6470               so that speculative insn will be scheduled.  The default value
6471               is 40.
6472
6473           sched-mem-true-dep-cost
6474               Minimal distance (in CPU cycles) between store and load
6475               targeting same memory locations.  The default value is 1.
6476
6477           selsched-max-lookahead
6478               The maximum size of the lookahead window of selective
6479               scheduling.  It is a depth of search for available
6480               instructions.  The default value is 50.
6481
6482           selsched-max-sched-times
6483               The maximum number of times that an instruction will be
6484               scheduled during selective scheduling.  This is the limit on
6485               the number of iterations through which the instruction may be
6486               pipelined.  The default value is 2.
6487
6488           selsched-max-insns-to-rename
6489               The maximum number of best instructions in the ready list that
6490               are considered for renaming in the selective scheduler.  The
6491               default value is 2.
6492
6493           max-last-value-rtl
6494               The maximum size measured as number of RTLs that can be
6495               recorded in an expression in combiner for a pseudo register as
6496               last known value of that register.  The default is 10000.
6497
6498           integer-share-limit
6499               Small integer constants can use a shared data structure,
6500               reducing the compiler's memory usage and increasing its speed.
6501               This sets the maximum value of a shared integer constant.  The
6502               default value is 256.
6503
6504           min-virtual-mappings
6505               Specifies the minimum number of virtual mappings in the
6506               incremental SSA updater that should be registered to trigger
6507               the virtual mappings heuristic defined by virtual-mappings-
6508               ratio.  The default value is 100.
6509
6510           virtual-mappings-ratio
6511               If the number of virtual mappings is virtual-mappings-ratio
6512               bigger than the number of virtual symbols to be updated, then
6513               the incremental SSA updater switches to a full update for those
6514               symbols.  The default ratio is 3.
6515
6516           ssp-buffer-size
6517               The minimum size of buffers (i.e. arrays) that will receive
6518               stack smashing protection when -fstack-protection is used.
6519
6520           max-jump-thread-duplication-stmts
6521               Maximum number of statements allowed in a block that needs to
6522               be duplicated when threading jumps.
6523
6524           max-fields-for-field-sensitive
6525               Maximum number of fields in a structure we will treat in a
6526               field sensitive manner during pointer analysis.  The default is
6527               zero for -O0, and -O1 and 100 for -Os, -O2, and -O3.
6528
6529           prefetch-latency
6530               Estimate on average number of instructions that are executed
6531               before prefetch finishes.  The distance we prefetch ahead is
6532               proportional to this constant.  Increasing this number may also
6533               lead to less streams being prefetched (see simultaneous-
6534               prefetches).
6535
6536           simultaneous-prefetches
6537               Maximum number of prefetches that can run at the same time.
6538
6539           l1-cache-line-size
6540               The size of cache line in L1 cache, in bytes.
6541
6542           l1-cache-size
6543               The size of L1 cache, in kilobytes.
6544
6545           l2-cache-size
6546               The size of L2 cache, in kilobytes.
6547
6548           use-canonical-types
6549               Whether the compiler should use the "canonical" type system.
6550               By default, this should always be 1, which uses a more
6551               efficient internal mechanism for comparing types in C++ and
6552               Objective-C++.  However, if bugs in the canonical type system
6553               are causing compilation failures, set this value to 0 to
6554               disable canonical types.
6555
6556           switch-conversion-max-branch-ratio
6557               Switch initialization conversion will refuse to create arrays
6558               that are bigger than switch-conversion-max-branch-ratio times
6559               the number of branches in the switch.
6560
6561           max-partial-antic-length
6562               Maximum length of the partial antic set computed during the
6563               tree partial redundancy elimination optimization (-ftree-pre)
6564               when optimizing at -O3 and above.  For some sorts of source
6565               code the enhanced partial redundancy elimination optimization
6566               can run away, consuming all of the memory available on the host
6567               machine.  This parameter sets a limit on the length of the sets
6568               that are computed, which prevents the runaway behavior.
6569               Setting a value of 0 for this parameter will allow an unlimited
6570               set length.
6571
6572           sccvn-max-scc-size
6573               Maximum size of a strongly connected component (SCC) during
6574               SCCVN processing.  If this limit is hit, SCCVN processing for
6575               the whole function will not be done and optimizations depending
6576               on it will be disabled.  The default maximum SCC size is 10000.
6577
6578           ira-max-loops-num
6579               IRA uses a regional register allocation by default.  If a
6580               function contains loops more than number given by the
6581               parameter, only at most given number of the most frequently
6582               executed loops will form regions for the regional register
6583               allocation.  The default value of the parameter is 100.
6584
6585           ira-max-conflict-table-size
6586               Although IRA uses a sophisticated algorithm of compression
6587               conflict table, the table can be still big for huge functions.
6588               If the conflict table for a function could be more than size in
6589               MB given by the parameter, the conflict table is not built and
6590               faster, simpler, and lower quality register allocation
6591               algorithm will be used.  The algorithm do not use pseudo-
6592               register conflicts.  The default value of the parameter is
6593               2000.
6594
6595           loop-invariant-max-bbs-in-loop
6596               Loop invariant motion can be very expensive, both in compile
6597               time and in amount of needed compile time memory, with very
6598               large loops.  Loops with more basic blocks than this parameter
6599               won't have loop invariant motion optimization performed on
6600               them.  The default value of the parameter is 1000 for -O1 and
6601               10000 for -O2 and above.
6602
6603           max-vartrack-size
6604               Sets a maximum number of hash table slots to use during
6605               variable tracking dataflow analysis of any function.  If this
6606               limit is exceeded with variable tracking at assignments
6607               enabled, analysis for that function is retried without it,
6608               after removing all debug insns from the function.  If the limit
6609               is exceeded even without debug insns, var tracking analysis is
6610               completely disabled for the function.  Setting the parameter to
6611               zero makes it unlimited.
6612
6613           min-nondebug-insn-uid
6614               Use uids starting at this parameter for nondebug insns.  The
6615               range below the parameter is reserved exclusively for debug
6616               insns created by -fvar-tracking-assignments, but debug insns
6617               may get (non-overlapping) uids above it if the reserved range
6618               is exhausted.
6619
6620   Options Controlling the Preprocessor
6621       These options control the C preprocessor, which is run on each C source
6622       file before actual compilation.
6623
6624       If you use the -E option, nothing is done except preprocessing.  Some
6625       of these options make sense only together with -E because they cause
6626       the preprocessor output to be unsuitable for actual compilation.
6627
6628       -Wp,option
6629           You can use -Wp,option to bypass the compiler driver and pass
6630           option directly through to the preprocessor.  If option contains
6631           commas, it is split into multiple options at the commas.  However,
6632           many options are modified, translated or interpreted by the
6633           compiler driver before being passed to the preprocessor, and -Wp
6634           forcibly bypasses this phase.  The preprocessor's direct interface
6635           is undocumented and subject to change, so whenever possible you
6636           should avoid using -Wp and let the driver handle the options
6637           instead.
6638
6639       -Xpreprocessor option
6640           Pass option as an option to the preprocessor.  You can use this to
6641           supply system-specific preprocessor options which GCC does not know
6642           how to recognize.
6643
6644           If you want to pass an option that takes an argument, you must use
6645           -Xpreprocessor twice, once for the option and once for the
6646           argument.
6647
6648       -D name
6649           Predefine name as a macro, with definition 1.
6650
6651       -D name=definition
6652           The contents of definition are tokenized and processed as if they
6653           appeared during translation phase three in a #define directive.  In
6654           particular, the definition will be truncated by embedded newline
6655           characters.
6656
6657           If you are invoking the preprocessor from a shell or shell-like
6658           program you may need to use the shell's quoting syntax to protect
6659           characters such as spaces that have a meaning in the shell syntax.
6660
6661           If you wish to define a function-like macro on the command line,
6662           write its argument list with surrounding parentheses before the
6663           equals sign (if any).  Parentheses are meaningful to most shells,
6664           so you will need to quote the option.  With sh and csh,
6665           -D'name(args...)=definition' works.
6666
6667           -D and -U options are processed in the order they are given on the
6668           command line.  All -imacros file and -include file options are
6669           processed after all -D and -U options.
6670
6671       -U name
6672           Cancel any previous definition of name, either built in or provided
6673           with a -D option.
6674
6675       -undef
6676           Do not predefine any system-specific or GCC-specific macros.  The
6677           standard predefined macros remain defined.
6678
6679       -I dir
6680           Add the directory dir to the list of directories to be searched for
6681           header files.  Directories named by -I are searched before the
6682           standard system include directories.  If the directory dir is a
6683           standard system include directory, the option is ignored to ensure
6684           that the default search order for system directories and the
6685           special treatment of system headers are not defeated .  If dir
6686           begins with "=", then the "=" will be replaced by the sysroot
6687           prefix; see --sysroot and -isysroot.
6688
6689       -o file
6690           Write output to file.  This is the same as specifying file as the
6691           second non-option argument to cpp.  gcc has a different
6692           interpretation of a second non-option argument, so you must use -o
6693           to specify the output file.
6694
6695       -Wall
6696           Turns on all optional warnings which are desirable for normal code.
6697           At present this is -Wcomment, -Wtrigraphs, -Wmultichar and a
6698           warning about integer promotion causing a change of sign in "#if"
6699           expressions.  Note that many of the preprocessor's warnings are on
6700           by default and have no options to control them.
6701
6702       -Wcomment
6703       -Wcomments
6704           Warn whenever a comment-start sequence /* appears in a /* comment,
6705           or whenever a backslash-newline appears in a // comment.  (Both
6706           forms have the same effect.)
6707
6708       -Wtrigraphs
6709           Most trigraphs in comments cannot affect the meaning of the
6710           program.  However, a trigraph that would form an escaped newline
6711           (??/ at the end of a line) can, by changing where the comment
6712           begins or ends.  Therefore, only trigraphs that would form escaped
6713           newlines produce warnings inside a comment.
6714
6715           This option is implied by -Wall.  If -Wall is not given, this
6716           option is still enabled unless trigraphs are enabled.  To get
6717           trigraph conversion without warnings, but get the other -Wall
6718           warnings, use -trigraphs -Wall -Wno-trigraphs.
6719
6720       -Wtraditional
6721           Warn about certain constructs that behave differently in
6722           traditional and ISO C.  Also warn about ISO C constructs that have
6723           no traditional C equivalent, and problematic constructs which
6724           should be avoided.
6725
6726       -Wundef
6727           Warn whenever an identifier which is not a macro is encountered in
6728           an #if directive, outside of defined.  Such identifiers are
6729           replaced with zero.
6730
6731       -Wunused-macros
6732           Warn about macros defined in the main file that are unused.  A
6733           macro is used if it is expanded or tested for existence at least
6734           once.  The preprocessor will also warn if the macro has not been
6735           used at the time it is redefined or undefined.
6736
6737           Built-in macros, macros defined on the command line, and macros
6738           defined in include files are not warned about.
6739
6740           Note: If a macro is actually used, but only used in skipped
6741           conditional blocks, then CPP will report it as unused.  To avoid
6742           the warning in such a case, you might improve the scope of the
6743           macro's definition by, for example, moving it into the first
6744           skipped block.  Alternatively, you could provide a dummy use with
6745           something like:
6746
6747                   #if defined the_macro_causing_the_warning
6748                   #endif
6749
6750       -Wendif-labels
6751           Warn whenever an #else or an #endif are followed by text.  This
6752           usually happens in code of the form
6753
6754                   #if FOO
6755                   ...
6756                   #else FOO
6757                   ...
6758                   #endif FOO
6759
6760           The second and third "FOO" should be in comments, but often are not
6761           in older programs.  This warning is on by default.
6762
6763       -Werror
6764           Make all warnings into hard errors.  Source code which triggers
6765           warnings will be rejected.
6766
6767       -Wsystem-headers
6768           Issue warnings for code in system headers.  These are normally
6769           unhelpful in finding bugs in your own code, therefore suppressed.
6770           If you are responsible for the system library, you may want to see
6771           them.
6772
6773       -w  Suppress all warnings, including those which GNU CPP issues by
6774           default.
6775
6776       -pedantic
6777           Issue all the mandatory diagnostics listed in the C standard.  Some
6778           of them are left out by default, since they trigger frequently on
6779           harmless code.
6780
6781       -pedantic-errors
6782           Issue all the mandatory diagnostics, and make all mandatory
6783           diagnostics into errors.  This includes mandatory diagnostics that
6784           GCC issues without -pedantic but treats as warnings.
6785
6786       -M  Instead of outputting the result of preprocessing, output a rule
6787           suitable for make describing the dependencies of the main source
6788           file.  The preprocessor outputs one make rule containing the object
6789           file name for that source file, a colon, and the names of all the
6790           included files, including those coming from -include or -imacros
6791           command line options.
6792
6793           Unless specified explicitly (with -MT or -MQ), the object file name
6794           consists of the name of the source file with any suffix replaced
6795           with object file suffix and with any leading directory parts
6796           removed.  If there are many included files then the rule is split
6797           into several lines using \-newline.  The rule has no commands.
6798
6799           This option does not suppress the preprocessor's debug output, such
6800           as -dM.  To avoid mixing such debug output with the dependency
6801           rules you should explicitly specify the dependency output file with
6802           -MF, or use an environment variable like DEPENDENCIES_OUTPUT.
6803           Debug output will still be sent to the regular output stream as
6804           normal.
6805
6806           Passing -M to the driver implies -E, and suppresses warnings with
6807           an implicit -w.
6808
6809       -MM Like -M but do not mention header files that are found in system
6810           header directories, nor header files that are included, directly or
6811           indirectly, from such a header.
6812
6813           This implies that the choice of angle brackets or double quotes in
6814           an #include directive does not in itself determine whether that
6815           header will appear in -MM dependency output.  This is a slight
6816           change in semantics from GCC versions 3.0 and earlier.
6817
6818       -MF file
6819           When used with -M or -MM, specifies a file to write the
6820           dependencies to.  If no -MF switch is given the preprocessor sends
6821           the rules to the same place it would have sent preprocessed output.
6822
6823           When used with the driver options -MD or -MMD, -MF overrides the
6824           default dependency output file.
6825
6826       -MG In conjunction with an option such as -M requesting dependency
6827           generation, -MG assumes missing header files are generated files
6828           and adds them to the dependency list without raising an error.  The
6829           dependency filename is taken directly from the "#include" directive
6830           without prepending any path.  -MG also suppresses preprocessed
6831           output, as a missing header file renders this useless.
6832
6833           This feature is used in automatic updating of makefiles.
6834
6835       -MP This option instructs CPP to add a phony target for each dependency
6836           other than the main file, causing each to depend on nothing.  These
6837           dummy rules work around errors make gives if you remove header
6838           files without updating the Makefile to match.
6839
6840           This is typical output:
6841
6842                   test.o: test.c test.h
6843
6844                   test.h:
6845
6846       -MT target
6847           Change the target of the rule emitted by dependency generation.  By
6848           default CPP takes the name of the main input file, deletes any
6849           directory components and any file suffix such as .c, and appends
6850           the platform's usual object suffix.  The result is the target.
6851
6852           An -MT option will set the target to be exactly the string you
6853           specify.  If you want multiple targets, you can specify them as a
6854           single argument to -MT, or use multiple -MT options.
6855
6856           For example, -MT '$(objpfx)foo.o' might give
6857
6858                   $(objpfx)foo.o: foo.c
6859
6860       -MQ target
6861           Same as -MT, but it quotes any characters which are special to
6862           Make.  -MQ '$(objpfx)foo.o' gives
6863
6864                   $$(objpfx)foo.o: foo.c
6865
6866           The default target is automatically quoted, as if it were given
6867           with -MQ.
6868
6869       -MD -MD is equivalent to -M -MF file, except that -E is not implied.
6870           The driver determines file based on whether an -o option is given.
6871           If it is, the driver uses its argument but with a suffix of .d,
6872           otherwise it takes the name of the input file, removes any
6873           directory components and suffix, and applies a .d suffix.
6874
6875           If -MD is used in conjunction with -E, any -o switch is understood
6876           to specify the dependency output file, but if used without -E, each
6877           -o is understood to specify a target object file.
6878
6879           Since -E is not implied, -MD can be used to generate a dependency
6880           output file as a side-effect of the compilation process.
6881
6882       -MMD
6883           Like -MD except mention only user header files, not system header
6884           files.
6885
6886       -fpch-deps
6887           When using precompiled headers, this flag will cause the
6888           dependency-output flags to also list the files from the precompiled
6889           header's dependencies.  If not specified only the precompiled
6890           header would be listed and not the files that were used to create
6891           it because those files are not consulted when a precompiled header
6892           is used.
6893
6894       -fpch-preprocess
6895           This option allows use of a precompiled header together with -E.
6896           It inserts a special "#pragma", "#pragma GCC pch_preprocess
6897           "<filename>"" in the output to mark the place where the precompiled
6898           header was found, and its filename.  When -fpreprocessed is in use,
6899           GCC recognizes this "#pragma" and loads the PCH.
6900
6901           This option is off by default, because the resulting preprocessed
6902           output is only really suitable as input to GCC.  It is switched on
6903           by -save-temps.
6904
6905           You should not write this "#pragma" in your own code, but it is
6906           safe to edit the filename if the PCH file is available in a
6907           different location.  The filename may be absolute or it may be
6908           relative to GCC's current directory.
6909
6910       -x c
6911       -x c++
6912       -x objective-c
6913       -x assembler-with-cpp
6914           Specify the source language: C, C++, Objective-C, or assembly.
6915           This has nothing to do with standards conformance or extensions; it
6916           merely selects which base syntax to expect.  If you give none of
6917           these options, cpp will deduce the language from the extension of
6918           the source file: .c, .cc, .m, or .S.  Some other common extensions
6919           for C++ and assembly are also recognized.  If cpp does not
6920           recognize the extension, it will treat the file as C; this is the
6921           most generic mode.
6922
6923           Note: Previous versions of cpp accepted a -lang option which
6924           selected both the language and the standards conformance level.
6925           This option has been removed, because it conflicts with the -l
6926           option.
6927
6928       -std=standard
6929       -ansi
6930           Specify the standard to which the code should conform.  Currently
6931           CPP knows about C and C++ standards; others may be added in the
6932           future.
6933
6934           standard may be one of:
6935
6936           "iso9899:1990"
6937           "c89"
6938               The ISO C standard from 1990.  c89 is the customary shorthand
6939               for this version of the standard.
6940
6941               The -ansi option is equivalent to -std=c89.
6942
6943           "iso9899:199409"
6944               The 1990 C standard, as amended in 1994.
6945
6946           "iso9899:1999"
6947           "c99"
6948           "iso9899:199x"
6949           "c9x"
6950               The revised ISO C standard, published in December 1999.  Before
6951               publication, this was known as C9X.
6952
6953           "gnu89"
6954               The 1990 C standard plus GNU extensions.  This is the default.
6955
6956           "gnu99"
6957           "gnu9x"
6958               The 1999 C standard plus GNU extensions.
6959
6960           "c++98"
6961               The 1998 ISO C++ standard plus amendments.
6962
6963           "gnu++98"
6964               The same as -std=c++98 plus GNU extensions.  This is the
6965               default for C++ code.
6966
6967       -I- Split the include path.  Any directories specified with -I options
6968           before -I- are searched only for headers requested with
6969           "#include "file""; they are not searched for "#include <file>".  If
6970           additional directories are specified with -I options after the -I-,
6971           those directories are searched for all #include directives.
6972
6973           In addition, -I- inhibits the use of the directory of the current
6974           file directory as the first search directory for "#include "file"".
6975           This option has been deprecated.
6976
6977       -nostdinc
6978           Do not search the standard system directories for header files.
6979           Only the directories you have specified with -I options (and the
6980           directory of the current file, if appropriate) are searched.
6981
6982       -nostdinc++
6983           Do not search for header files in the C++-specific standard
6984           directories, but do still search the other standard directories.
6985           (This option is used when building the C++ library.)
6986
6987       -include file
6988           Process file as if "#include "file"" appeared as the first line of
6989           the primary source file.  However, the first directory searched for
6990           file is the preprocessor's working directory instead of the
6991           directory containing the main source file.  If not found there, it
6992           is searched for in the remainder of the "#include "..."" search
6993           chain as normal.
6994
6995           If multiple -include options are given, the files are included in
6996           the order they appear on the command line.
6997
6998       -imacros file
6999           Exactly like -include, except that any output produced by scanning
7000           file is thrown away.  Macros it defines remain defined.  This
7001           allows you to acquire all the macros from a header without also
7002           processing its declarations.
7003
7004           All files specified by -imacros are processed before all files
7005           specified by -include.
7006
7007       -idirafter dir
7008           Search dir for header files, but do it after all directories
7009           specified with -I and the standard system directories have been
7010           exhausted.  dir is treated as a system include directory.  If dir
7011           begins with "=", then the "=" will be replaced by the sysroot
7012           prefix; see --sysroot and -isysroot.
7013
7014       -iprefix prefix
7015           Specify prefix as the prefix for subsequent -iwithprefix options.
7016           If the prefix represents a directory, you should include the final
7017           /.
7018
7019       -iwithprefix dir
7020       -iwithprefixbefore dir
7021           Append dir to the prefix specified previously with -iprefix, and
7022           add the resulting directory to the include search path.
7023           -iwithprefixbefore puts it in the same place -I would; -iwithprefix
7024           puts it where -idirafter would.
7025
7026       -isysroot dir
7027           This option is like the --sysroot option, but applies only to
7028           header files.  See the --sysroot option for more information.
7029
7030       -imultilib dir
7031           Use dir as a subdirectory of the directory containing target-
7032           specific C++ headers.
7033
7034       -isystem dir
7035           Search dir for header files, after all directories specified by -I
7036           but before the standard system directories.  Mark it as a system
7037           directory, so that it gets the same special treatment as is applied
7038           to the standard system directories.  If dir begins with "=", then
7039           the "=" will be replaced by the sysroot prefix; see --sysroot and
7040           -isysroot.
7041
7042       -iquote dir
7043           Search dir only for header files requested with "#include "file"";
7044           they are not searched for "#include <file>", before all directories
7045           specified by -I and before the standard system directories.  If dir
7046           begins with "=", then the "=" will be replaced by the sysroot
7047           prefix; see --sysroot and -isysroot.
7048
7049       -fdirectives-only
7050           When preprocessing, handle directives, but do not expand macros.
7051
7052           The option's behavior depends on the -E and -fpreprocessed options.
7053
7054           With -E, preprocessing is limited to the handling of directives
7055           such as "#define", "#ifdef", and "#error".  Other preprocessor
7056           operations, such as macro expansion and trigraph conversion are not
7057           performed.  In addition, the -dD option is implicitly enabled.
7058
7059           With -fpreprocessed, predefinition of command line and most builtin
7060           macros is disabled.  Macros such as "__LINE__", which are
7061           contextually dependent, are handled normally.  This enables
7062           compilation of files previously preprocessed with "-E
7063           -fdirectives-only".
7064
7065           With both -E and -fpreprocessed, the rules for -fpreprocessed take
7066           precedence.  This enables full preprocessing of files previously
7067           preprocessed with "-E -fdirectives-only".
7068
7069       -fdollars-in-identifiers
7070           Accept $ in identifiers.
7071
7072       -fextended-identifiers
7073           Accept universal character names in identifiers.  This option is
7074           experimental; in a future version of GCC, it will be enabled by
7075           default for C99 and C++.
7076
7077       -fpreprocessed
7078           Indicate to the preprocessor that the input file has already been
7079           preprocessed.  This suppresses things like macro expansion,
7080           trigraph conversion, escaped newline splicing, and processing of
7081           most directives.  The preprocessor still recognizes and removes
7082           comments, so that you can pass a file preprocessed with -C to the
7083           compiler without problems.  In this mode the integrated
7084           preprocessor is little more than a tokenizer for the front ends.
7085
7086           -fpreprocessed is implicit if the input file has one of the
7087           extensions .i, .ii or .mi.  These are the extensions that GCC uses
7088           for preprocessed files created by -save-temps.
7089
7090       -ftabstop=width
7091           Set the distance between tab stops.  This helps the preprocessor
7092           report correct column numbers in warnings or errors, even if tabs
7093           appear on the line.  If the value is less than 1 or greater than
7094           100, the option is ignored.  The default is 8.
7095
7096       -fexec-charset=charset
7097           Set the execution character set, used for string and character
7098           constants.  The default is UTF-8.  charset can be any encoding
7099           supported by the system's "iconv" library routine.
7100
7101       -fwide-exec-charset=charset
7102           Set the wide execution character set, used for wide string and
7103           character constants.  The default is UTF-32 or UTF-16, whichever
7104           corresponds to the width of "wchar_t".  As with -fexec-charset,
7105           charset can be any encoding supported by the system's "iconv"
7106           library routine; however, you will have problems with encodings
7107           that do not fit exactly in "wchar_t".
7108
7109       -finput-charset=charset
7110           Set the input character set, used for translation from the
7111           character set of the input file to the source character set used by
7112           GCC.  If the locale does not specify, or GCC cannot get this
7113           information from the locale, the default is UTF-8.  This can be
7114           overridden by either the locale or this command line option.
7115           Currently the command line option takes precedence if there's a
7116           conflict.  charset can be any encoding supported by the system's
7117           "iconv" library routine.
7118
7119       -fworking-directory
7120           Enable generation of linemarkers in the preprocessor output that
7121           will let the compiler know the current working directory at the
7122           time of preprocessing.  When this option is enabled, the
7123           preprocessor will emit, after the initial linemarker, a second
7124           linemarker with the current working directory followed by two
7125           slashes.  GCC will use this directory, when it's present in the
7126           preprocessed input, as the directory emitted as the current working
7127           directory in some debugging information formats.  This option is
7128           implicitly enabled if debugging information is enabled, but this
7129           can be inhibited with the negated form -fno-working-directory.  If
7130           the -P flag is present in the command line, this option has no
7131           effect, since no "#line" directives are emitted whatsoever.
7132
7133       -fno-show-column
7134           Do not print column numbers in diagnostics.  This may be necessary
7135           if diagnostics are being scanned by a program that does not
7136           understand the column numbers, such as dejagnu.
7137
7138       -A predicate=answer
7139           Make an assertion with the predicate predicate and answer answer.
7140           This form is preferred to the older form -A predicate(answer),
7141           which is still supported, because it does not use shell special
7142           characters.
7143
7144       -A -predicate=answer
7145           Cancel an assertion with the predicate predicate and answer answer.
7146
7147       -dCHARS
7148           CHARS is a sequence of one or more of the following characters, and
7149           must not be preceded by a space.  Other characters are interpreted
7150           by the compiler proper, or reserved for future versions of GCC, and
7151           so are silently ignored.  If you specify characters whose behavior
7152           conflicts, the result is undefined.
7153
7154           M   Instead of the normal output, generate a list of #define
7155               directives for all the macros defined during the execution of
7156               the preprocessor, including predefined macros.  This gives you
7157               a way of finding out what is predefined in your version of the
7158               preprocessor.  Assuming you have no file foo.h, the command
7159
7160                       touch foo.h; cpp -dM foo.h
7161
7162               will show all the predefined macros.
7163
7164               If you use -dM without the -E option, -dM is interpreted as a
7165               synonym for -fdump-rtl-mach.
7166
7167           D   Like M except in two respects: it does not include the
7168               predefined macros, and it outputs both the #define directives
7169               and the result of preprocessing.  Both kinds of output go to
7170               the standard output file.
7171
7172           N   Like D, but emit only the macro names, not their expansions.
7173
7174           I   Output #include directives in addition to the result of
7175               preprocessing.
7176
7177           U   Like D except that only macros that are expanded, or whose
7178               definedness is tested in preprocessor directives, are output;
7179               the output is delayed until the use or test of the macro; and
7180               #undef directives are also output for macros tested but
7181               undefined at the time.
7182
7183       -P  Inhibit generation of linemarkers in the output from the
7184           preprocessor.  This might be useful when running the preprocessor
7185           on something that is not C code, and will be sent to a program
7186           which might be confused by the linemarkers.
7187
7188       -C  Do not discard comments.  All comments are passed through to the
7189           output file, except for comments in processed directives, which are
7190           deleted along with the directive.
7191
7192           You should be prepared for side effects when using -C; it causes
7193           the preprocessor to treat comments as tokens in their own right.
7194           For example, comments appearing at the start of what would be a
7195           directive line have the effect of turning that line into an
7196           ordinary source line, since the first token on the line is no
7197           longer a #.
7198
7199       -CC Do not discard comments, including during macro expansion.  This is
7200           like -C, except that comments contained within macros are also
7201           passed through to the output file where the macro is expanded.
7202
7203           In addition to the side-effects of the -C option, the -CC option
7204           causes all C++-style comments inside a macro to be converted to
7205           C-style comments.  This is to prevent later use of that macro from
7206           inadvertently commenting out the remainder of the source line.
7207
7208           The -CC option is generally used to support lint comments.
7209
7210       -traditional-cpp
7211           Try to imitate the behavior of old-fashioned C preprocessors, as
7212           opposed to ISO C preprocessors.
7213
7214       -trigraphs
7215           Process trigraph sequences.  These are three-character sequences,
7216           all starting with ??, that are defined by ISO C to stand for single
7217           characters.  For example, ??/ stands for \, so '??/n' is a
7218           character constant for a newline.  By default, GCC ignores
7219           trigraphs, but in standard-conforming modes it converts them.  See
7220           the -std and -ansi options.
7221
7222           The nine trigraphs and their replacements are
7223
7224                   Trigraph:       ??(  ??)  ??<  ??>  ??=  ??/  ??'  ??!  ??-
7225                   Replacement:      [    ]    {    }    #    \    ^    |    ~
7226
7227       -remap
7228           Enable special code to work around file systems which only permit
7229           very short file names, such as MS-DOS.
7230
7231       --help
7232       --target-help
7233           Print text describing all the command line options instead of
7234           preprocessing anything.
7235
7236       -v  Verbose mode.  Print out GNU CPP's version number at the beginning
7237           of execution, and report the final form of the include path.
7238
7239       -H  Print the name of each header file used, in addition to other
7240           normal activities.  Each name is indented to show how deep in the
7241           #include stack it is.  Precompiled header files are also printed,
7242           even if they are found to be invalid; an invalid precompiled header
7243           file is printed with ...x and a valid one with ...! .
7244
7245       -version
7246       --version
7247           Print out GNU CPP's version number.  With one dash, proceed to
7248           preprocess as normal.  With two dashes, exit immediately.
7249
7250   Passing Options to the Assembler
7251       You can pass options to the assembler.
7252
7253       -Wa,option
7254           Pass option as an option to the assembler.  If option contains
7255           commas, it is split into multiple options at the commas.
7256
7257       -Xassembler option
7258           Pass option as an option to the assembler.  You can use this to
7259           supply system-specific assembler options which GCC does not know
7260           how to recognize.
7261
7262           If you want to pass an option that takes an argument, you must use
7263           -Xassembler twice, once for the option and once for the argument.
7264
7265   Options for Linking
7266       These options come into play when the compiler links object files into
7267       an executable output file.  They are meaningless if the compiler is not
7268       doing a link step.
7269
7270       object-file-name
7271           A file name that does not end in a special recognized suffix is
7272           considered to name an object file or library.  (Object files are
7273           distinguished from libraries by the linker according to the file
7274           contents.)  If linking is done, these object files are used as
7275           input to the linker.
7276
7277       -c
7278       -S
7279       -E  If any of these options is used, then the linker is not run, and
7280           object file names should not be used as arguments.
7281
7282       -llibrary
7283       -l library
7284           Search the library named library when linking.  (The second
7285           alternative with the library as a separate argument is only for
7286           POSIX compliance and is not recommended.)
7287
7288           It makes a difference where in the command you write this option;
7289           the linker searches and processes libraries and object files in the
7290           order they are specified.  Thus, foo.o -lz bar.o searches library z
7291           after file foo.o but before bar.o.  If bar.o refers to functions in
7292           z, those functions may not be loaded.
7293
7294           The linker searches a standard list of directories for the library,
7295           which is actually a file named liblibrary.a.  The linker then uses
7296           this file as if it had been specified precisely by name.
7297
7298           The directories searched include several standard system
7299           directories plus any that you specify with -L.
7300
7301           Normally the files found this way are library files---archive files
7302           whose members are object files.  The linker handles an archive file
7303           by scanning through it for members which define symbols that have
7304           so far been referenced but not defined.  But if the file that is
7305           found is an ordinary object file, it is linked in the usual
7306           fashion.  The only difference between using an -l option and
7307           specifying a file name is that -l surrounds library with lib and .a
7308           and searches several directories.
7309
7310       -lobjc
7311           You need this special case of the -l option in order to link an
7312           Objective-C or Objective-C++ program.
7313
7314       -nostartfiles
7315           Do not use the standard system startup files when linking.  The
7316           standard system libraries are used normally, unless -nostdlib or
7317           -nodefaultlibs is used.
7318
7319       -nodefaultlibs
7320           Do not use the standard system libraries when linking.  Only the
7321           libraries you specify will be passed to the linker.  The standard
7322           startup files are used normally, unless -nostartfiles is used.  The
7323           compiler may generate calls to "memcmp", "memset", "memcpy" and
7324           "memmove".  These entries are usually resolved by entries in libc.
7325           These entry points should be supplied through some other mechanism
7326           when this option is specified.
7327
7328       -nostdlib
7329           Do not use the standard system startup files or libraries when
7330           linking.  No startup files and only the libraries you specify will
7331           be passed to the linker.  The compiler may generate calls to
7332           "memcmp", "memset", "memcpy" and "memmove".  These entries are
7333           usually resolved by entries in libc.  These entry points should be
7334           supplied through some other mechanism when this option is
7335           specified.
7336
7337           One of the standard libraries bypassed by -nostdlib and
7338           -nodefaultlibs is libgcc.a, a library of internal subroutines that
7339           GCC uses to overcome shortcomings of particular machines, or
7340           special needs for some languages.
7341
7342           In most cases, you need libgcc.a even when you want to avoid other
7343           standard libraries.  In other words, when you specify -nostdlib or
7344           -nodefaultlibs you should usually specify -lgcc as well.  This
7345           ensures that you have no unresolved references to internal GCC
7346           library subroutines.  (For example, __main, used to ensure C++
7347           constructors will be called.)
7348
7349       -pie
7350           Produce a position independent executable on targets which support
7351           it.  For predictable results, you must also specify the same set of
7352           options that were used to generate code (-fpie, -fPIE, or model
7353           suboptions) when you specify this option.
7354
7355       -rdynamic
7356           Pass the flag -export-dynamic to the ELF linker, on targets that
7357           support it. This instructs the linker to add all symbols, not only
7358           used ones, to the dynamic symbol table. This option is needed for
7359           some uses of "dlopen" or to allow obtaining backtraces from within
7360           a program.
7361
7362       -s  Remove all symbol table and relocation information from the
7363           executable.
7364
7365       -static
7366           On systems that support dynamic linking, this prevents linking with
7367           the shared libraries.  On other systems, this option has no effect.
7368
7369       -shared
7370           Produce a shared object which can then be linked with other objects
7371           to form an executable.  Not all systems support this option.  For
7372           predictable results, you must also specify the same set of options
7373           that were used to generate code (-fpic, -fPIC, or model suboptions)
7374           when you specify this option.[1]
7375
7376       -shared-libgcc
7377       -static-libgcc
7378           On systems that provide libgcc as a shared library, these options
7379           force the use of either the shared or static version respectively.
7380           If no shared version of libgcc was built when the compiler was
7381           configured, these options have no effect.
7382
7383           There are several situations in which an application should use the
7384           shared libgcc instead of the static version.  The most common of
7385           these is when the application wishes to throw and catch exceptions
7386           across different shared libraries.  In that case, each of the
7387           libraries as well as the application itself should use the shared
7388           libgcc.
7389
7390           Therefore, the G++ and GCJ drivers automatically add -shared-libgcc
7391           whenever you build a shared library or a main executable, because
7392           C++ and Java programs typically use exceptions, so this is the
7393           right thing to do.
7394
7395           If, instead, you use the GCC driver to create shared libraries, you
7396           may find that they will not always be linked with the shared
7397           libgcc.  If GCC finds, at its configuration time, that you have a
7398           non-GNU linker or a GNU linker that does not support option
7399           --eh-frame-hdr, it will link the shared version of libgcc into
7400           shared libraries by default.  Otherwise, it will take advantage of
7401           the linker and optimize away the linking with the shared version of
7402           libgcc, linking with the static version of libgcc by default.  This
7403           allows exceptions to propagate through such shared libraries,
7404           without incurring relocation costs at library load time.
7405
7406           However, if a library or main executable is supposed to throw or
7407           catch exceptions, you must link it using the G++ or GCJ driver, as
7408           appropriate for the languages used in the program, or using the
7409           option -shared-libgcc, such that it is linked with the shared
7410           libgcc.
7411
7412       -symbolic
7413           Bind references to global symbols when building a shared object.
7414           Warn about any unresolved references (unless overridden by the link
7415           editor option -Xlinker -z -Xlinker defs).  Only a few systems
7416           support this option.
7417
7418       -T script
7419           Use script as the linker script.  This option is supported by most
7420           systems using the GNU linker.  On some targets, such as bare-board
7421           targets without an operating system, the -T option may be required
7422           when linking to avoid references to undefined symbols.
7423
7424       -Xlinker option
7425           Pass option as an option to the linker.  You can use this to supply
7426           system-specific linker options which GCC does not know how to
7427           recognize.
7428
7429           If you want to pass an option that takes a separate argument, you
7430           must use -Xlinker twice, once for the option and once for the
7431           argument.  For example, to pass -assert definitions, you must write
7432           -Xlinker -assert -Xlinker definitions.  It does not work to write
7433           -Xlinker "-assert definitions", because this passes the entire
7434           string as a single argument, which is not what the linker expects.
7435
7436           When using the GNU linker, it is usually more convenient to pass
7437           arguments to linker options using the option=value syntax than as
7438           separate arguments.  For example, you can specify -Xlinker
7439           -Map=output.map rather than -Xlinker -Map -Xlinker output.map.
7440           Other linkers may not support this syntax for command-line options.
7441
7442       -Wl,option
7443           Pass option as an option to the linker.  If option contains commas,
7444           it is split into multiple options at the commas.  You can use this
7445           syntax to pass an argument to the option.  For example,
7446           -Wl,-Map,output.map passes -Map output.map to the linker.  When
7447           using the GNU linker, you can also get the same effect with
7448           -Wl,-Map=output.map.
7449
7450       -u symbol
7451           Pretend the symbol symbol is undefined, to force linking of library
7452           modules to define it.  You can use -u multiple times with different
7453           symbols to force loading of additional library modules.
7454
7455   Options for Directory Search
7456       These options specify directories to search for header files, for
7457       libraries and for parts of the compiler:
7458
7459       -Idir
7460           Add the directory dir to the head of the list of directories to be
7461           searched for header files.  This can be used to override a system
7462           header file, substituting your own version, since these directories
7463           are searched before the system header file directories.  However,
7464           you should not use this option to add directories that contain
7465           vendor-supplied system header files (use -isystem for that).  If
7466           you use more than one -I option, the directories are scanned in
7467           left-to-right order; the standard system directories come after.
7468
7469           If a standard system include directory, or a directory specified
7470           with -isystem, is also specified with -I, the -I option will be
7471           ignored.  The directory will still be searched but as a system
7472           directory at its normal position in the system include chain.  This
7473           is to ensure that GCC's procedure to fix buggy system headers and
7474           the ordering for the include_next directive are not inadvertently
7475           changed.  If you really need to change the search order for system
7476           directories, use the -nostdinc and/or -isystem options.
7477
7478       -iquotedir
7479           Add the directory dir to the head of the list of directories to be
7480           searched for header files only for the case of #include "file";
7481           they are not searched for #include <file>, otherwise just like -I.
7482
7483       -Ldir
7484           Add directory dir to the list of directories to be searched for -l.
7485
7486       -Bprefix
7487           This option specifies where to find the executables, libraries,
7488           include files, and data files of the compiler itself.
7489
7490           The compiler driver program runs one or more of the subprograms
7491           cpp, cc1, as and ld.  It tries prefix as a prefix for each program
7492           it tries to run, both with and without machine/version/.
7493
7494           For each subprogram to be run, the compiler driver first tries the
7495           -B prefix, if any.  If that name is not found, or if -B was not
7496           specified, the driver tries two standard prefixes, which are
7497           /usr/lib/gcc/ and /usr/local/lib/gcc/.  If neither of those results
7498           in a file name that is found, the unmodified program name is
7499           searched for using the directories specified in your PATH
7500           environment variable.
7501
7502           The compiler will check to see if the path provided by the -B
7503           refers to a directory, and if necessary it will add a directory
7504           separator character at the end of the path.
7505
7506           -B prefixes that effectively specify directory names also apply to
7507           libraries in the linker, because the compiler translates these
7508           options into -L options for the linker.  They also apply to
7509           includes files in the preprocessor, because the compiler translates
7510           these options into -isystem options for the preprocessor.  In this
7511           case, the compiler appends include to the prefix.
7512
7513           The run-time support file libgcc.a can also be searched for using
7514           the -B prefix, if needed.  If it is not found there, the two
7515           standard prefixes above are tried, and that is all.  The file is
7516           left out of the link if it is not found by those means.
7517
7518           Another way to specify a prefix much like the -B prefix is to use
7519           the environment variable GCC_EXEC_PREFIX.
7520
7521           As a special kludge, if the path provided by -B is [dir/]stageN/,
7522           where N is a number in the range 0 to 9, then it will be replaced
7523           by [dir/]include.  This is to help with boot-strapping the
7524           compiler.
7525
7526       -specs=file
7527           Process file after the compiler reads in the standard specs file,
7528           in order to override the defaults that the gcc driver program uses
7529           when determining what switches to pass to cc1, cc1plus, as, ld,
7530           etc.  More than one -specs=file can be specified on the command
7531           line, and they are processed in order, from left to right.
7532
7533       --sysroot=dir
7534           Use dir as the logical root directory for headers and libraries.
7535           For example, if the compiler would normally search for headers in
7536           /usr/include and libraries in /usr/lib, it will instead search
7537           dir/usr/include and dir/usr/lib.
7538
7539           If you use both this option and the -isysroot option, then the
7540           --sysroot option will apply to libraries, but the -isysroot option
7541           will apply to header files.
7542
7543           The GNU linker (beginning with version 2.16) has the necessary
7544           support for this option.  If your linker does not support this
7545           option, the header file aspect of --sysroot will still work, but
7546           the library aspect will not.
7547
7548       -I- This option has been deprecated.  Please use -iquote instead for -I
7549           directories before the -I- and remove the -I-.  Any directories you
7550           specify with -I options before the -I- option are searched only for
7551           the case of #include "file"; they are not searched for #include
7552           <file>.
7553
7554           If additional directories are specified with -I options after the
7555           -I-, these directories are searched for all #include directives.
7556           (Ordinarily all -I directories are used this way.)
7557
7558           In addition, the -I- option inhibits the use of the current
7559           directory (where the current input file came from) as the first
7560           search directory for #include "file".  There is no way to override
7561           this effect of -I-.  With -I. you can specify searching the
7562           directory which was current when the compiler was invoked.  That is
7563           not exactly the same as what the preprocessor does by default, but
7564           it is often satisfactory.
7565
7566           -I- does not inhibit the use of the standard system directories for
7567           header files.  Thus, -I- and -nostdinc are independent.
7568
7569   Specifying Target Machine and Compiler Version
7570       The usual way to run GCC is to run the executable called gcc, or
7571       <machine>-gcc when cross-compiling, or <machine>-gcc-<version> to run a
7572       version other than the one that was installed last.  Sometimes this is
7573       inconvenient, so GCC provides options that will switch to another
7574       cross-compiler or version.
7575
7576       -b machine
7577           The argument machine specifies the target machine for compilation.
7578
7579           The value to use for machine is the same as was specified as the
7580           machine type when configuring GCC as a cross-compiler.  For
7581           example, if a cross-compiler was configured with configure arm-elf,
7582           meaning to compile for an arm processor with elf binaries, then you
7583           would specify -b arm-elf to run that cross compiler.  Because there
7584           are other options beginning with -b, the configuration must contain
7585           a hyphen, or -b alone should be one argument followed by the
7586           configuration in the next argument.
7587
7588       -V version
7589           The argument version specifies which version of GCC to run.  This
7590           is useful when multiple versions are installed.  For example,
7591           version might be 4.0, meaning to run GCC version 4.0.
7592
7593       The -V and -b options work by running the <machine>-gcc-<version>
7594       executable, so there's no real reason to use them if you can just run
7595       that directly.
7596
7597   Hardware Models and Configurations
7598       Earlier we discussed the standard option -b which chooses among
7599       different installed compilers for completely different target machines,
7600       such as VAX vs. 68000 vs. 80386.
7601
7602       In addition, each of these target machine types can have its own
7603       special options, starting with -m, to choose among various hardware
7604       models or configurations---for example, 68010 vs 68020, floating
7605       coprocessor or none.  A single installed version of the compiler can
7606       compile for any model or configuration, according to the options
7607       specified.
7608
7609       Some configurations of the compiler also support additional special
7610       options, usually for compatibility with other compilers on the same
7611       platform.
7612
7613   ARC Options
7614       These options are defined for ARC implementations:
7615
7616       -EL Compile code for little endian mode.  This is the default.
7617
7618       -EB Compile code for big endian mode.
7619
7620       -mmangle-cpu
7621           Prepend the name of the cpu to all public symbol names.  In
7622           multiple-processor systems, there are many ARC variants with
7623           different instruction and register set characteristics.  This flag
7624           prevents code compiled for one cpu to be linked with code compiled
7625           for another.  No facility exists for handling variants that are
7626           "almost identical".  This is an all or nothing option.
7627
7628       -mcpu=cpu
7629           Compile code for ARC variant cpu.  Which variants are supported
7630           depend on the configuration.  All variants support -mcpu=base, this
7631           is the default.
7632
7633       -mtext=text-section
7634       -mdata=data-section
7635       -mrodata=readonly-data-section
7636           Put functions, data, and readonly data in text-section, data-
7637           section, and readonly-data-section respectively by default.  This
7638           can be overridden with the "section" attribute.
7639
7640       -mfix-cortex-m3-ldrd
7641           Some Cortex-M3 cores can cause data corruption when "ldrd"
7642           instructions with overlapping destination and base registers are
7643           used.  This option avoids generating these instructions.  This
7644           option is enabled by default when -mcpu=cortex-m3 is specified.
7645
7646   ARM Options
7647       These -m options are defined for Advanced RISC Machines (ARM)
7648       architectures:
7649
7650       -mabi=name
7651           Generate code for the specified ABI.  Permissible values are: apcs-
7652           gnu, atpcs, aapcs, aapcs-linux and iwmmxt.
7653
7654       -mapcs-frame
7655           Generate a stack frame that is compliant with the ARM Procedure
7656           Call Standard for all functions, even if this is not strictly
7657           necessary for correct execution of the code.  Specifying
7658           -fomit-frame-pointer with this option will cause the stack frames
7659           not to be generated for leaf functions.  The default is
7660           -mno-apcs-frame.
7661
7662       -mapcs
7663           This is a synonym for -mapcs-frame.
7664
7665       -mthumb-interwork
7666           Generate code which supports calling between the ARM and Thumb
7667           instruction sets.  Without this option the two instruction sets
7668           cannot be reliably used inside one program.  The default is
7669           -mno-thumb-interwork, since slightly larger code is generated when
7670           -mthumb-interwork is specified.
7671
7672       -mno-sched-prolog
7673           Prevent the reordering of instructions in the function prolog, or
7674           the merging of those instruction with the instructions in the
7675           function's body.  This means that all functions will start with a
7676           recognizable set of instructions (or in fact one of a choice from a
7677           small set of different function prologues), and this information
7678           can be used to locate the start if functions inside an executable
7679           piece of code.  The default is -msched-prolog.
7680
7681       -mfloat-abi=name
7682           Specifies which floating-point ABI to use.  Permissible values are:
7683           soft, softfp and hard.
7684
7685           Specifying soft causes GCC to generate output containing library
7686           calls for floating-point operations.  softfp allows the generation
7687           of code using hardware floating-point instructions, but still uses
7688           the soft-float calling conventions.  hard allows generation of
7689           floating-point instructions and uses FPU-specific calling
7690           conventions.
7691
7692           Using -mfloat-abi=hard with VFP coprocessors is not supported.  Use
7693           -mfloat-abi=softfp with the appropriate -mfpu option to allow the
7694           compiler to generate code that makes use of the hardware floating-
7695           point capabilities for these CPUs.
7696
7697           The default depends on the specific target configuration.  Note
7698           that the hard-float and soft-float ABIs are not link-compatible;
7699           you must compile your entire program with the same ABI, and link
7700           with a compatible set of libraries.
7701
7702       -mhard-float
7703           Equivalent to -mfloat-abi=hard.
7704
7705       -msoft-float
7706           Equivalent to -mfloat-abi=soft.
7707
7708       -mlittle-endian
7709           Generate code for a processor running in little-endian mode.  This
7710           is the default for all standard configurations.
7711
7712       -mbig-endian
7713           Generate code for a processor running in big-endian mode; the
7714           default is to compile code for a little-endian processor.
7715
7716       -mwords-little-endian
7717           This option only applies when generating code for big-endian
7718           processors.  Generate code for a little-endian word order but a
7719           big-endian byte order.  That is, a byte order of the form 32107654.
7720           Note: this option should only be used if you require compatibility
7721           with code for big-endian ARM processors generated by versions of
7722           the compiler prior to 2.8.
7723
7724       -mcpu=name
7725           This specifies the name of the target ARM processor.  GCC uses this
7726           name to determine what kind of instructions it can emit when
7727           generating assembly code.  Permissible names are: arm2, arm250,
7728           arm3, arm6, arm60, arm600, arm610, arm620, arm7, arm7m, arm7d,
7729           arm7dm, arm7di, arm7dmi, arm70, arm700, arm700i, arm710, arm710c,
7730           arm7100, arm720, arm7500, arm7500fe, arm7tdmi, arm7tdmi-s, arm710t,
7731           arm720t, arm740t, strongarm, strongarm110, strongarm1100,
7732           strongarm1110, arm8, arm810, arm9, arm9e, arm920, arm920t, arm922t,
7733           arm946e-s, arm966e-s, arm968e-s, arm926ej-s, arm940t, arm9tdmi,
7734           arm10tdmi, arm1020t, arm1026ej-s, arm10e, arm1020e, arm1022e,
7735           arm1136j-s, arm1136jf-s, mpcore, mpcorenovfp, arm1156t2-s,
7736           arm1176jz-s, arm1176jzf-s, cortex-a8, cortex-a9, cortex-r4,
7737           cortex-r4f, cortex-m3, cortex-m1, xscale, iwmmxt, iwmmxt2, ep9312.
7738
7739       -mtune=name
7740           This option is very similar to the -mcpu= option, except that
7741           instead of specifying the actual target processor type, and hence
7742           restricting which instructions can be used, it specifies that GCC
7743           should tune the performance of the code as if the target were of
7744           the type specified in this option, but still choosing the
7745           instructions that it will generate based on the cpu specified by a
7746           -mcpu= option.  For some ARM implementations better performance can
7747           be obtained by using this option.
7748
7749       -march=name
7750           This specifies the name of the target ARM architecture.  GCC uses
7751           this name to determine what kind of instructions it can emit when
7752           generating assembly code.  This option can be used in conjunction
7753           with or instead of the -mcpu= option.  Permissible names are:
7754           armv2, armv2a, armv3, armv3m, armv4, armv4t, armv5, armv5t, armv5e,
7755           armv5te, armv6, armv6j, armv6t2, armv6z, armv6zk, armv6-m, armv7,
7756           armv7-a, armv7-r, armv7-m, iwmmxt, iwmmxt2, ep9312.
7757
7758       -mfpu=name
7759       -mfpe=number
7760       -mfp=number
7761           This specifies what floating point hardware (or hardware emulation)
7762           is available on the target.  Permissible names are: fpa, fpe2,
7763           fpe3, maverick, vfp, vfpv3, vfpv3-d16 and neon.  -mfp and -mfpe are
7764           synonyms for -mfpu=fpenumber, for compatibility with older versions
7765           of GCC.
7766
7767           If -msoft-float is specified this specifies the format of floating
7768           point values.
7769
7770       -mstructure-size-boundary=n
7771           The size of all structures and unions will be rounded up to a
7772           multiple of the number of bits set by this option.  Permissible
7773           values are 8, 32 and 64.  The default value varies for different
7774           toolchains.  For the COFF targeted toolchain the default value is
7775           8.  A value of 64 is only allowed if the underlying ABI supports
7776           it.
7777
7778           Specifying the larger number can produce faster, more efficient
7779           code, but can also increase the size of the program.  Different
7780           values are potentially incompatible.  Code compiled with one value
7781           cannot necessarily expect to work with code or libraries compiled
7782           with another value, if they exchange information using structures
7783           or unions.
7784
7785       -mabort-on-noreturn
7786           Generate a call to the function "abort" at the end of a "noreturn"
7787           function.  It will be executed if the function tries to return.
7788
7789       -mlong-calls
7790       -mno-long-calls
7791           Tells the compiler to perform function calls by first loading the
7792           address of the function into a register and then performing a
7793           subroutine call on this register.  This switch is needed if the
7794           target function will lie outside of the 64 megabyte addressing
7795           range of the offset based version of subroutine call instruction.
7796
7797           Even if this switch is enabled, not all function calls will be
7798           turned into long calls.  The heuristic is that static functions,
7799           functions which have the short-call attribute, functions that are
7800           inside the scope of a #pragma no_long_calls directive and functions
7801           whose definitions have already been compiled within the current
7802           compilation unit, will not be turned into long calls.  The
7803           exception to this rule is that weak function definitions, functions
7804           with the long-call attribute or the section attribute, and
7805           functions that are within the scope of a #pragma long_calls
7806           directive, will always be turned into long calls.
7807
7808           This feature is not enabled by default.  Specifying -mno-long-calls
7809           will restore the default behavior, as will placing the function
7810           calls within the scope of a #pragma long_calls_off directive.  Note
7811           these switches have no effect on how the compiler generates code to
7812           handle function calls via function pointers.
7813
7814       -msingle-pic-base
7815           Treat the register used for PIC addressing as read-only, rather
7816           than loading it in the prologue for each function.  The run-time
7817           system is responsible for initializing this register with an
7818           appropriate value before execution begins.
7819
7820       -mpic-register=reg
7821           Specify the register to be used for PIC addressing.  The default is
7822           R10 unless stack-checking is enabled, when R9 is used.
7823
7824       -mcirrus-fix-invalid-insns
7825           Insert NOPs into the instruction stream to in order to work around
7826           problems with invalid Maverick instruction combinations.  This
7827           option is only valid if the -mcpu=ep9312 option has been used to
7828           enable generation of instructions for the Cirrus Maverick floating
7829           point co-processor.  This option is not enabled by default, since
7830           the problem is only present in older Maverick implementations.  The
7831           default can be re-enabled by use of the
7832           -mno-cirrus-fix-invalid-insns switch.
7833
7834       -mpoke-function-name
7835           Write the name of each function into the text section, directly
7836           preceding the function prologue.  The generated code is similar to
7837           this:
7838
7839                        t0
7840                            .ascii "arm_poke_function_name", 0
7841                            .align
7842                        t1
7843                            .word 0xff000000 + (t1 - t0)
7844                        arm_poke_function_name
7845                            mov     ip, sp
7846                            stmfd   sp!, {fp, ip, lr, pc}
7847                            sub     fp, ip, #4
7848
7849           When performing a stack backtrace, code can inspect the value of
7850           "pc" stored at "fp + 0".  If the trace function then looks at
7851           location "pc - 12" and the top 8 bits are set, then we know that
7852           there is a function name embedded immediately preceding this
7853           location and has length "((pc[-3]) & 0xff000000)".
7854
7855       -mthumb
7856           Generate code for the Thumb instruction set.  The default is to use
7857           the 32-bit ARM instruction set.  This option automatically enables
7858           either 16-bit Thumb-1 or mixed 16/32-bit Thumb-2 instructions based
7859           on the -mcpu=name and -march=name options.
7860
7861       -mtpcs-frame
7862           Generate a stack frame that is compliant with the Thumb Procedure
7863           Call Standard for all non-leaf functions.  (A leaf function is one
7864           that does not call any other functions.)  The default is
7865           -mno-tpcs-frame.
7866
7867       -mtpcs-leaf-frame
7868           Generate a stack frame that is compliant with the Thumb Procedure
7869           Call Standard for all leaf functions.  (A leaf function is one that
7870           does not call any other functions.)  The default is
7871           -mno-apcs-leaf-frame.
7872
7873       -mcallee-super-interworking
7874           Gives all externally visible functions in the file being compiled
7875           an ARM instruction set header which switches to Thumb mode before
7876           executing the rest of the function.  This allows these functions to
7877           be called from non-interworking code.
7878
7879       -mcaller-super-interworking
7880           Allows calls via function pointers (including virtual functions) to
7881           execute correctly regardless of whether the target code has been
7882           compiled for interworking or not.  There is a small overhead in the
7883           cost of executing a function pointer if this option is enabled.
7884
7885       -mtp=name
7886           Specify the access model for the thread local storage pointer.  The
7887           valid models are soft, which generates calls to "__aeabi_read_tp",
7888           cp15, which fetches the thread pointer from "cp15" directly
7889           (supported in the arm6k architecture), and auto, which uses the
7890           best available method for the selected processor.  The default
7891           setting is auto.
7892
7893       -mword-relocations
7894           Only generate absolute relocations on word sized values (i.e.
7895           R_ARM_ABS32).  This is enabled by default on targets (uClinux,
7896           SymbianOS) where the runtime loader imposes this restriction, and
7897           when -fpic or -fPIC is specified.
7898
7899   AVR Options
7900       These options are defined for AVR implementations:
7901
7902       -mmcu=mcu
7903           Specify ATMEL AVR instruction set or MCU type.
7904
7905           Instruction set avr1 is for the minimal AVR core, not supported by
7906           the C compiler, only for assembler programs (MCU types: at90s1200,
7907           attiny10, attiny11, attiny12, attiny15, attiny28).
7908
7909           Instruction set avr2 (default) is for the classic AVR core with up
7910           to 8K program memory space (MCU types: at90s2313, at90s2323,
7911           attiny22, at90s2333, at90s2343, at90s4414, at90s4433, at90s4434,
7912           at90s8515, at90c8534, at90s8535).
7913
7914           Instruction set avr3 is for the classic AVR core with up to 128K
7915           program memory space (MCU types: atmega103, atmega603, at43usb320,
7916           at76c711).
7917
7918           Instruction set avr4 is for the enhanced AVR core with up to 8K
7919           program memory space (MCU types: atmega8, atmega83, atmega85).
7920
7921           Instruction set avr5 is for the enhanced AVR core with up to 128K
7922           program memory space (MCU types: atmega16, atmega161, atmega163,
7923           atmega32, atmega323, atmega64, atmega128, at43usb355, at94k).
7924
7925       -msize
7926           Output instruction sizes to the asm file.
7927
7928       -mno-interrupts
7929           Generated code is not compatible with hardware interrupts.  Code
7930           size will be smaller.
7931
7932       -mcall-prologues
7933           Functions prologues/epilogues expanded as call to appropriate
7934           subroutines.  Code size will be smaller.
7935
7936       -mno-tablejump
7937           Do not generate tablejump insns which sometimes increase code size.
7938           The option is now deprecated in favor of the equivalent
7939           -fno-jump-tables
7940
7941       -mtiny-stack
7942           Change only the low 8 bits of the stack pointer.
7943
7944       -mint8
7945           Assume int to be 8 bit integer.  This affects the sizes of all
7946           types: A char will be 1 byte, an int will be 1 byte, an long will
7947           be 2 bytes and long long will be 4 bytes.  Please note that this
7948           option does not comply to the C standards, but it will provide you
7949           with smaller code size.
7950
7951   Blackfin Options
7952       -mcpu=cpu[-sirevision]
7953           Specifies the name of the target Blackfin processor.  Currently,
7954           cpu can be one of bf512, bf514, bf516, bf518, bf522, bf523, bf524,
7955           bf525, bf526, bf527, bf531, bf532, bf533, bf534, bf536, bf537,
7956           bf538, bf539, bf542, bf544, bf547, bf548, bf549, bf561.  The
7957           optional sirevision specifies the silicon revision of the target
7958           Blackfin processor.  Any workarounds available for the targeted
7959           silicon revision will be enabled.  If sirevision is none, no
7960           workarounds are enabled.  If sirevision is any, all workarounds for
7961           the targeted processor will be enabled.  The "__SILICON_REVISION__"
7962           macro is defined to two hexadecimal digits representing the major
7963           and minor numbers in the silicon revision.  If sirevision is none,
7964           the "__SILICON_REVISION__" is not defined.  If sirevision is any,
7965           the "__SILICON_REVISION__" is defined to be 0xffff.  If this
7966           optional sirevision is not used, GCC assumes the latest known
7967           silicon revision of the targeted Blackfin processor.
7968
7969           Support for bf561 is incomplete.  For bf561, Only the processor
7970           macro is defined.  Without this option, bf532 is used as the
7971           processor by default.  The corresponding predefined processor
7972           macros for cpu is to be defined.  And for bfin-elf toolchain, this
7973           causes the hardware BSP provided by libgloss to be linked in if
7974           -msim is not given.
7975
7976       -msim
7977           Specifies that the program will be run on the simulator.  This
7978           causes the simulator BSP provided by libgloss to be linked in.
7979           This option has effect only for bfin-elf toolchain.  Certain other
7980           options, such as -mid-shared-library and -mfdpic, imply -msim.
7981
7982       -momit-leaf-frame-pointer
7983           Don't keep the frame pointer in a register for leaf functions.
7984           This avoids the instructions to save, set up and restore frame
7985           pointers and makes an extra register available in leaf functions.
7986           The option -fomit-frame-pointer removes the frame pointer for all
7987           functions which might make debugging harder.
7988
7989       -mspecld-anomaly
7990           When enabled, the compiler will ensure that the generated code does
7991           not contain speculative loads after jump instructions. If this
7992           option is used, "__WORKAROUND_SPECULATIVE_LOADS" is defined.
7993
7994       -mno-specld-anomaly
7995           Don't generate extra code to prevent speculative loads from
7996           occurring.
7997
7998       -mcsync-anomaly
7999           When enabled, the compiler will ensure that the generated code does
8000           not contain CSYNC or SSYNC instructions too soon after conditional
8001           branches.  If this option is used, "__WORKAROUND_SPECULATIVE_SYNCS"
8002           is defined.
8003
8004       -mno-csync-anomaly
8005           Don't generate extra code to prevent CSYNC or SSYNC instructions
8006           from occurring too soon after a conditional branch.
8007
8008       -mlow-64k
8009           When enabled, the compiler is free to take advantage of the
8010           knowledge that the entire program fits into the low 64k of memory.
8011
8012       -mno-low-64k
8013           Assume that the program is arbitrarily large.  This is the default.
8014
8015       -mstack-check-l1
8016           Do stack checking using information placed into L1 scratchpad
8017           memory by the uClinux kernel.
8018
8019       -mid-shared-library
8020           Generate code that supports shared libraries via the library ID
8021           method.  This allows for execute in place and shared libraries in
8022           an environment without virtual memory management.  This option
8023           implies -fPIC.  With a bfin-elf target, this option implies -msim.
8024
8025       -mno-id-shared-library
8026           Generate code that doesn't assume ID based shared libraries are
8027           being used.  This is the default.
8028
8029       -mleaf-id-shared-library
8030           Generate code that supports shared libraries via the library ID
8031           method, but assumes that this library or executable won't link
8032           against any other ID shared libraries.  That allows the compiler to
8033           use faster code for jumps and calls.
8034
8035       -mno-leaf-id-shared-library
8036           Do not assume that the code being compiled won't link against any
8037           ID shared libraries.  Slower code will be generated for jump and
8038           call insns.
8039
8040       -mshared-library-id=n
8041           Specified the identification number of the ID based shared library
8042           being compiled.  Specifying a value of 0 will generate more compact
8043           code, specifying other values will force the allocation of that
8044           number to the current library but is no more space or time
8045           efficient than omitting this option.
8046
8047       -msep-data
8048           Generate code that allows the data segment to be located in a
8049           different area of memory from the text segment.  This allows for
8050           execute in place in an environment without virtual memory
8051           management by eliminating relocations against the text section.
8052
8053       -mno-sep-data
8054           Generate code that assumes that the data segment follows the text
8055           segment.  This is the default.
8056
8057       -mlong-calls
8058       -mno-long-calls
8059           Tells the compiler to perform function calls by first loading the
8060           address of the function into a register and then performing a
8061           subroutine call on this register.  This switch is needed if the
8062           target function will lie outside of the 24 bit addressing range of
8063           the offset based version of subroutine call instruction.
8064
8065           This feature is not enabled by default.  Specifying -mno-long-calls
8066           will restore the default behavior.  Note these switches have no
8067           effect on how the compiler generates code to handle function calls
8068           via function pointers.
8069
8070       -mfast-fp
8071           Link with the fast floating-point library. This library relaxes
8072           some of the IEEE floating-point standard's rules for checking
8073           inputs against Not-a-Number (NAN), in the interest of performance.
8074
8075       -minline-plt
8076           Enable inlining of PLT entries in function calls to functions that
8077           are not known to bind locally.  It has no effect without -mfdpic.
8078
8079       -mmulticore
8080           Build standalone application for multicore Blackfin processor.
8081           Proper start files and link scripts will be used to support
8082           multicore.  This option defines "__BFIN_MULTICORE". It can only be
8083           used with -mcpu=bf561[-sirevision]. It can be used with -mcorea or
8084           -mcoreb. If it's used without -mcorea or -mcoreb, single
8085           application/dual core programming model is used. In this model, the
8086           main function of Core B should be named as coreb_main. If it's used
8087           with -mcorea or -mcoreb, one application per core programming model
8088           is used.  If this option is not used, single core application
8089           programming model is used.
8090
8091       -mcorea
8092           Build standalone application for Core A of BF561 when using one
8093           application per core programming model. Proper start files and link
8094           scripts will be used to support Core A. This option defines
8095           "__BFIN_COREA". It must be used with -mmulticore.
8096
8097       -mcoreb
8098           Build standalone application for Core B of BF561 when using one
8099           application per core programming model. Proper start files and link
8100           scripts will be used to support Core B. This option defines
8101           "__BFIN_COREB". When this option is used, coreb_main should be used
8102           instead of main. It must be used with -mmulticore.
8103
8104       -msdram
8105           Build standalone application for SDRAM. Proper start files and link
8106           scripts will be used to put the application into SDRAM.  Loader
8107           should initialize SDRAM before loading the application into SDRAM.
8108           This option defines "__BFIN_SDRAM".
8109
8110       -micplb
8111           Assume that ICPLBs are enabled at runtime.  This has an effect on
8112           certain anomaly workarounds.  For Linux targets, the default is to
8113           assume ICPLBs are enabled; for standalone applications the default
8114           is off.
8115
8116   CRIS Options
8117       These options are defined specifically for the CRIS ports.
8118
8119       -march=architecture-type
8120       -mcpu=architecture-type
8121           Generate code for the specified architecture.  The choices for
8122           architecture-type are v3, v8 and v10 for respectively ETRAX 4,
8123           ETRAX 100, and ETRAX 100 LX.  Default is v0 except for cris-axis-
8124           linux-gnu, where the default is v10.
8125
8126       -mtune=architecture-type
8127           Tune to architecture-type everything applicable about the generated
8128           code, except for the ABI and the set of available instructions.
8129           The choices for architecture-type are the same as for
8130           -march=architecture-type.
8131
8132       -mmax-stack-frame=n
8133           Warn when the stack frame of a function exceeds n bytes.
8134
8135       -metrax4
8136       -metrax100
8137           The options -metrax4 and -metrax100 are synonyms for -march=v3 and
8138           -march=v8 respectively.
8139
8140       -mmul-bug-workaround
8141       -mno-mul-bug-workaround
8142           Work around a bug in the "muls" and "mulu" instructions for CPU
8143           models where it applies.  This option is active by default.
8144
8145       -mpdebug
8146           Enable CRIS-specific verbose debug-related information in the
8147           assembly code.  This option also has the effect to turn off the
8148           #NO_APP formatted-code indicator to the assembler at the beginning
8149           of the assembly file.
8150
8151       -mcc-init
8152           Do not use condition-code results from previous instruction; always
8153           emit compare and test instructions before use of condition codes.
8154
8155       -mno-side-effects
8156           Do not emit instructions with side-effects in addressing modes
8157           other than post-increment.
8158
8159       -mstack-align
8160       -mno-stack-align
8161       -mdata-align
8162       -mno-data-align
8163       -mconst-align
8164       -mno-const-align
8165           These options (no-options) arranges (eliminate arrangements) for
8166           the stack-frame, individual data and constants to be aligned for
8167           the maximum single data access size for the chosen CPU model.  The
8168           default is to arrange for 32-bit alignment.  ABI details such as
8169           structure layout are not affected by these options.
8170
8171       -m32-bit
8172       -m16-bit
8173       -m8-bit
8174           Similar to the stack- data- and const-align options above, these
8175           options arrange for stack-frame, writable data and constants to all
8176           be 32-bit, 16-bit or 8-bit aligned.  The default is 32-bit
8177           alignment.
8178
8179       -mno-prologue-epilogue
8180       -mprologue-epilogue
8181           With -mno-prologue-epilogue, the normal function prologue and
8182           epilogue that sets up the stack-frame are omitted and no return
8183           instructions or return sequences are generated in the code.  Use
8184           this option only together with visual inspection of the compiled
8185           code: no warnings or errors are generated when call-saved registers
8186           must be saved, or storage for local variable needs to be allocated.
8187
8188       -mno-gotplt
8189       -mgotplt
8190           With -fpic and -fPIC, don't generate (do generate) instruction
8191           sequences that load addresses for functions from the PLT part of
8192           the GOT rather than (traditional on other architectures) calls to
8193           the PLT.  The default is -mgotplt.
8194
8195       -melf
8196           Legacy no-op option only recognized with the cris-axis-elf and
8197           cris-axis-linux-gnu targets.
8198
8199       -mlinux
8200           Legacy no-op option only recognized with the cris-axis-linux-gnu
8201           target.
8202
8203       -sim
8204           This option, recognized for the cris-axis-elf arranges to link with
8205           input-output functions from a simulator library.  Code, initialized
8206           data and zero-initialized data are allocated consecutively.
8207
8208       -sim2
8209           Like -sim, but pass linker options to locate initialized data at
8210           0x40000000 and zero-initialized data at 0x80000000.
8211
8212   CRX Options
8213       These options are defined specifically for the CRX ports.
8214
8215       -mmac
8216           Enable the use of multiply-accumulate instructions. Disabled by
8217           default.
8218
8219       -mpush-args
8220           Push instructions will be used to pass outgoing arguments when
8221           functions are called. Enabled by default.
8222
8223   Darwin Options
8224       These options are defined for all architectures running the Darwin
8225       operating system.
8226
8227       FSF GCC on Darwin does not create "fat" object files; it will create an
8228       object file for the single architecture that it was built to target.
8229       Apple's GCC on Darwin does create "fat" files if multiple -arch options
8230       are used; it does so by running the compiler or linker multiple times
8231       and joining the results together with lipo.
8232
8233       The subtype of the file created (like ppc7400 or ppc970 or i686) is
8234       determined by the flags that specify the ISA that GCC is targetting,
8235       like -mcpu or -march.  The -force_cpusubtype_ALL option can be used to
8236       override this.
8237
8238       The Darwin tools vary in their behavior when presented with an ISA
8239       mismatch.  The assembler, as, will only permit instructions to be used
8240       that are valid for the subtype of the file it is generating, so you
8241       cannot put 64-bit instructions in an ppc750 object file.  The linker
8242       for shared libraries, /usr/bin/libtool, will fail and print an error if
8243       asked to create a shared library with a less restrictive subtype than
8244       its input files (for instance, trying to put a ppc970 object file in a
8245       ppc7400 library).  The linker for executables, ld, will quietly give
8246       the executable the most restrictive subtype of any of its input files.
8247
8248       -Fdir
8249           Add the framework directory dir to the head of the list of
8250           directories to be searched for header files.  These directories are
8251           interleaved with those specified by -I options and are scanned in a
8252           left-to-right order.
8253
8254           A framework directory is a directory with frameworks in it.  A
8255           framework is a directory with a "Headers" and/or "PrivateHeaders"
8256           directory contained directly in it that ends in ".framework".  The
8257           name of a framework is the name of this directory excluding the
8258           ".framework".  Headers associated with the framework are found in
8259           one of those two directories, with "Headers" being searched first.
8260           A subframework is a framework directory that is in a framework's
8261           "Frameworks" directory.  Includes of subframework headers can only
8262           appear in a header of a framework that contains the subframework,
8263           or in a sibling subframework header.  Two subframeworks are
8264           siblings if they occur in the same framework.  A subframework
8265           should not have the same name as a framework, a warning will be
8266           issued if this is violated.  Currently a subframework cannot have
8267           subframeworks, in the future, the mechanism may be extended to
8268           support this.  The standard frameworks can be found in
8269           "/System/Library/Frameworks" and "/Library/Frameworks".  An example
8270           include looks like "#include <Framework/header.h>", where Framework
8271           denotes the name of the framework and header.h is found in the
8272           "PrivateHeaders" or "Headers" directory.
8273
8274       -iframeworkdir
8275           Like -F except the directory is a treated as a system directory.
8276           The main difference between this -iframework and -F is that with
8277           -iframework the compiler does not warn about constructs contained
8278           within header files found via dir.  This option is valid only for
8279           the C family of languages.
8280
8281       -gused
8282           Emit debugging information for symbols that are used.  For STABS
8283           debugging format, this enables -feliminate-unused-debug-symbols.
8284           This is by default ON.
8285
8286       -gfull
8287           Emit debugging information for all symbols and types.
8288
8289       -mmacosx-version-min=version
8290           The earliest version of MacOS X that this executable will run on is
8291           version.  Typical values of version include 10.1, 10.2, and 10.3.9.
8292
8293           If the compiler was built to use the system's headers by default,
8294           then the default for this option is the system version on which the
8295           compiler is running, otherwise the default is to make choices which
8296           are compatible with as many systems and code bases as possible.
8297
8298       -mkernel
8299           Enable kernel development mode.  The -mkernel option sets -static,
8300           -fno-common, -fno-cxa-atexit, -fno-exceptions,
8301           -fno-non-call-exceptions, -fapple-kext, -fno-weak and -fno-rtti
8302           where applicable.  This mode also sets -mno-altivec, -msoft-float,
8303           -fno-builtin and -mlong-branch for PowerPC targets.
8304
8305       -mone-byte-bool
8306           Override the defaults for bool so that sizeof(bool)==1.  By default
8307           sizeof(bool) is 4 when compiling for Darwin/PowerPC and 1 when
8308           compiling for Darwin/x86, so this option has no effect on x86.
8309
8310           Warning: The -mone-byte-bool switch causes GCC to generate code
8311           that is not binary compatible with code generated without that
8312           switch.  Using this switch may require recompiling all other
8313           modules in a program, including system libraries.  Use this switch
8314           to conform to a non-default data model.
8315
8316       -mfix-and-continue
8317       -ffix-and-continue
8318       -findirect-data
8319           Generate code suitable for fast turn around development.  Needed to
8320           enable gdb to dynamically load ".o" files into already running
8321           programs.  -findirect-data and -ffix-and-continue are provided for
8322           backwards compatibility.
8323
8324       -all_load
8325           Loads all members of static archive libraries.  See man ld(1) for
8326           more information.
8327
8328       -arch_errors_fatal
8329           Cause the errors having to do with files that have the wrong
8330           architecture to be fatal.
8331
8332       -bind_at_load
8333           Causes the output file to be marked such that the dynamic linker
8334           will bind all undefined references when the file is loaded or
8335           launched.
8336
8337       -bundle
8338           Produce a Mach-o bundle format file.  See man ld(1) for more
8339           information.
8340
8341       -bundle_loader executable
8342           This option specifies the executable that will be loading the build
8343           output file being linked.  See man ld(1) for more information.
8344
8345       -dynamiclib
8346           When passed this option, GCC will produce a dynamic library instead
8347           of an executable when linking, using the Darwin libtool command.
8348
8349       -force_cpusubtype_ALL
8350           This causes GCC's output file to have the ALL subtype, instead of
8351           one controlled by the -mcpu or -march option.
8352
8353       -allowable_client  client_name
8354       -client_name
8355       -compatibility_version
8356       -current_version
8357       -dead_strip
8358       -dependency-file
8359       -dylib_file
8360       -dylinker_install_name
8361       -dynamic
8362       -exported_symbols_list
8363       -filelist
8364       -flat_namespace
8365       -force_flat_namespace
8366       -headerpad_max_install_names
8367       -image_base
8368       -init
8369       -install_name
8370       -keep_private_externs
8371       -multi_module
8372       -multiply_defined
8373       -multiply_defined_unused
8374       -noall_load
8375       -no_dead_strip_inits_and_terms
8376       -nofixprebinding
8377       -nomultidefs
8378       -noprebind
8379       -noseglinkedit
8380       -pagezero_size
8381       -prebind
8382       -prebind_all_twolevel_modules
8383       -private_bundle
8384       -read_only_relocs
8385       -sectalign
8386       -sectobjectsymbols
8387       -whyload
8388       -seg1addr
8389       -sectcreate
8390       -sectobjectsymbols
8391       -sectorder
8392       -segaddr
8393       -segs_read_only_addr
8394       -segs_read_write_addr
8395       -seg_addr_table
8396       -seg_addr_table_filename
8397       -seglinkedit
8398       -segprot
8399       -segs_read_only_addr
8400       -segs_read_write_addr
8401       -single_module
8402       -static
8403       -sub_library
8404       -sub_umbrella
8405       -twolevel_namespace
8406       -umbrella
8407       -undefined
8408       -unexported_symbols_list
8409       -weak_reference_mismatches
8410       -whatsloaded
8411           These options are passed to the Darwin linker.  The Darwin linker
8412           man page describes them in detail.
8413
8414   DEC Alpha Options
8415       These -m options are defined for the DEC Alpha implementations:
8416
8417       -mno-soft-float
8418       -msoft-float
8419           Use (do not use) the hardware floating-point instructions for
8420           floating-point operations.  When -msoft-float is specified,
8421           functions in libgcc.a will be used to perform floating-point
8422           operations.  Unless they are replaced by routines that emulate the
8423           floating-point operations, or compiled in such a way as to call
8424           such emulations routines, these routines will issue floating-point
8425           operations.   If you are compiling for an Alpha without floating-
8426           point operations, you must ensure that the library is built so as
8427           not to call them.
8428
8429           Note that Alpha implementations without floating-point operations
8430           are required to have floating-point registers.
8431
8432       -mfp-reg
8433       -mno-fp-regs
8434           Generate code that uses (does not use) the floating-point register
8435           set.  -mno-fp-regs implies -msoft-float.  If the floating-point
8436           register set is not used, floating point operands are passed in
8437           integer registers as if they were integers and floating-point
8438           results are passed in $0 instead of $f0.  This is a non-standard
8439           calling sequence, so any function with a floating-point argument or
8440           return value called by code compiled with -mno-fp-regs must also be
8441           compiled with that option.
8442
8443           A typical use of this option is building a kernel that does not
8444           use, and hence need not save and restore, any floating-point
8445           registers.
8446
8447       -mieee
8448           The Alpha architecture implements floating-point hardware optimized
8449           for maximum performance.  It is mostly compliant with the IEEE
8450           floating point standard.  However, for full compliance, software
8451           assistance is required.  This option generates code fully IEEE
8452           compliant code except that the inexact-flag is not maintained (see
8453           below).  If this option is turned on, the preprocessor macro
8454           "_IEEE_FP" is defined during compilation.  The resulting code is
8455           less efficient but is able to correctly support denormalized
8456           numbers and exceptional IEEE values such as not-a-number and
8457           plus/minus infinity.  Other Alpha compilers call this option
8458           -ieee_with_no_inexact.
8459
8460       -mieee-with-inexact
8461           This is like -mieee except the generated code also maintains the
8462           IEEE inexact-flag.  Turning on this option causes the generated
8463           code to implement fully-compliant IEEE math.  In addition to
8464           "_IEEE_FP", "_IEEE_FP_EXACT" is defined as a preprocessor macro.
8465           On some Alpha implementations the resulting code may execute
8466           significantly slower than the code generated by default.  Since
8467           there is very little code that depends on the inexact-flag, you
8468           should normally not specify this option.  Other Alpha compilers
8469           call this option -ieee_with_inexact.
8470
8471       -mfp-trap-mode=trap-mode
8472           This option controls what floating-point related traps are enabled.
8473           Other Alpha compilers call this option -fptm trap-mode.  The trap
8474           mode can be set to one of four values:
8475
8476           n   This is the default (normal) setting.  The only traps that are
8477               enabled are the ones that cannot be disabled in software (e.g.,
8478               division by zero trap).
8479
8480           u   In addition to the traps enabled by n, underflow traps are
8481               enabled as well.
8482
8483           su  Like u, but the instructions are marked to be safe for software
8484               completion (see Alpha architecture manual for details).
8485
8486           sui Like su, but inexact traps are enabled as well.
8487
8488       -mfp-rounding-mode=rounding-mode
8489           Selects the IEEE rounding mode.  Other Alpha compilers call this
8490           option -fprm rounding-mode.  The rounding-mode can be one of:
8491
8492           n   Normal IEEE rounding mode.  Floating point numbers are rounded
8493               towards the nearest machine number or towards the even machine
8494               number in case of a tie.
8495
8496           m   Round towards minus infinity.
8497
8498           c   Chopped rounding mode.  Floating point numbers are rounded
8499               towards zero.
8500
8501           d   Dynamic rounding mode.  A field in the floating point control
8502               register (fpcr, see Alpha architecture reference manual)
8503               controls the rounding mode in effect.  The C library
8504               initializes this register for rounding towards plus infinity.
8505               Thus, unless your program modifies the fpcr, d corresponds to
8506               round towards plus infinity.
8507
8508       -mtrap-precision=trap-precision
8509           In the Alpha architecture, floating point traps are imprecise.
8510           This means without software assistance it is impossible to recover
8511           from a floating trap and program execution normally needs to be
8512           terminated.  GCC can generate code that can assist operating system
8513           trap handlers in determining the exact location that caused a
8514           floating point trap.  Depending on the requirements of an
8515           application, different levels of precisions can be selected:
8516
8517           p   Program precision.  This option is the default and means a trap
8518               handler can only identify which program caused a floating point
8519               exception.
8520
8521           f   Function precision.  The trap handler can determine the
8522               function that caused a floating point exception.
8523
8524           i   Instruction precision.  The trap handler can determine the
8525               exact instruction that caused a floating point exception.
8526
8527           Other Alpha compilers provide the equivalent options called
8528           -scope_safe and -resumption_safe.
8529
8530       -mieee-conformant
8531           This option marks the generated code as IEEE conformant.  You must
8532           not use this option unless you also specify -mtrap-precision=i and
8533           either -mfp-trap-mode=su or -mfp-trap-mode=sui.  Its only effect is
8534           to emit the line .eflag 48 in the function prologue of the
8535           generated assembly file.  Under DEC Unix, this has the effect that
8536           IEEE-conformant math library routines will be linked in.
8537
8538       -mbuild-constants
8539           Normally GCC examines a 32- or 64-bit integer constant to see if it
8540           can construct it from smaller constants in two or three
8541           instructions.  If it cannot, it will output the constant as a
8542           literal and generate code to load it from the data segment at
8543           runtime.
8544
8545           Use this option to require GCC to construct all integer constants
8546           using code, even if it takes more instructions (the maximum is
8547           six).
8548
8549           You would typically use this option to build a shared library
8550           dynamic loader.  Itself a shared library, it must relocate itself
8551           in memory before it can find the variables and constants in its own
8552           data segment.
8553
8554       -malpha-as
8555       -mgas
8556           Select whether to generate code to be assembled by the vendor-
8557           supplied assembler (-malpha-as) or by the GNU assembler -mgas.
8558
8559       -mbwx
8560       -mno-bwx
8561       -mcix
8562       -mno-cix
8563       -mfix
8564       -mno-fix
8565       -mmax
8566       -mno-max
8567           Indicate whether GCC should generate code to use the optional BWX,
8568           CIX, FIX and MAX instruction sets.  The default is to use the
8569           instruction sets supported by the CPU type specified via -mcpu=
8570           option or that of the CPU on which GCC was built if none was
8571           specified.
8572
8573       -mfloat-vax
8574       -mfloat-ieee
8575           Generate code that uses (does not use) VAX F and G floating point
8576           arithmetic instead of IEEE single and double precision.
8577
8578       -mexplicit-relocs
8579       -mno-explicit-relocs
8580           Older Alpha assemblers provided no way to generate symbol
8581           relocations except via assembler macros.  Use of these macros does
8582           not allow optimal instruction scheduling.  GNU binutils as of
8583           version 2.12 supports a new syntax that allows the compiler to
8584           explicitly mark which relocations should apply to which
8585           instructions.  This option is mostly useful for debugging, as GCC
8586           detects the capabilities of the assembler when it is built and sets
8587           the default accordingly.
8588
8589       -msmall-data
8590       -mlarge-data
8591           When -mexplicit-relocs is in effect, static data is accessed via
8592           gp-relative relocations.  When -msmall-data is used, objects 8
8593           bytes long or smaller are placed in a small data area (the ".sdata"
8594           and ".sbss" sections) and are accessed via 16-bit relocations off
8595           of the $gp register.  This limits the size of the small data area
8596           to 64KB, but allows the variables to be directly accessed via a
8597           single instruction.
8598
8599           The default is -mlarge-data.  With this option the data area is
8600           limited to just below 2GB.  Programs that require more than 2GB of
8601           data must use "malloc" or "mmap" to allocate the data in the heap
8602           instead of in the program's data segment.
8603
8604           When generating code for shared libraries, -fpic implies
8605           -msmall-data and -fPIC implies -mlarge-data.
8606
8607       -msmall-text
8608       -mlarge-text
8609           When -msmall-text is used, the compiler assumes that the code of
8610           the entire program (or shared library) fits in 4MB, and is thus
8611           reachable with a branch instruction.  When -msmall-data is used,
8612           the compiler can assume that all local symbols share the same $gp
8613           value, and thus reduce the number of instructions required for a
8614           function call from 4 to 1.
8615
8616           The default is -mlarge-text.
8617
8618       -mcpu=cpu_type
8619           Set the instruction set and instruction scheduling parameters for
8620           machine type cpu_type.  You can specify either the EV style name or
8621           the corresponding chip number.  GCC supports scheduling parameters
8622           for the EV4, EV5 and EV6 family of processors and will choose the
8623           default values for the instruction set from the processor you
8624           specify.  If you do not specify a processor type, GCC will default
8625           to the processor on which the compiler was built.
8626
8627           Supported values for cpu_type are
8628
8629           ev4
8630           ev45
8631           21064
8632               Schedules as an EV4 and has no instruction set extensions.
8633
8634           ev5
8635           21164
8636               Schedules as an EV5 and has no instruction set extensions.
8637
8638           ev56
8639           21164a
8640               Schedules as an EV5 and supports the BWX extension.
8641
8642           pca56
8643           21164pc
8644           21164PC
8645               Schedules as an EV5 and supports the BWX and MAX extensions.
8646
8647           ev6
8648           21264
8649               Schedules as an EV6 and supports the BWX, FIX, and MAX
8650               extensions.
8651
8652           ev67
8653           21264a
8654               Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX
8655               extensions.
8656
8657           Native Linux/GNU toolchains also support the value native, which
8658           selects the best architecture option for the host processor.
8659           -mcpu=native has no effect if GCC does not recognize the processor.
8660
8661       -mtune=cpu_type
8662           Set only the instruction scheduling parameters for machine type
8663           cpu_type.  The instruction set is not changed.
8664
8665           Native Linux/GNU toolchains also support the value native, which
8666           selects the best architecture option for the host processor.
8667           -mtune=native has no effect if GCC does not recognize the
8668           processor.
8669
8670       -mmemory-latency=time
8671           Sets the latency the scheduler should assume for typical memory
8672           references as seen by the application.  This number is highly
8673           dependent on the memory access patterns used by the application and
8674           the size of the external cache on the machine.
8675
8676           Valid options for time are
8677
8678           number
8679               A decimal number representing clock cycles.
8680
8681           L1
8682           L2
8683           L3
8684           main
8685               The compiler contains estimates of the number of clock cycles
8686               for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches
8687               (also called Dcache, Scache, and Bcache), as well as to main
8688               memory.  Note that L3 is only valid for EV5.
8689
8690   DEC Alpha/VMS Options
8691       These -m options are defined for the DEC Alpha/VMS implementations:
8692
8693       -mvms-return-codes
8694           Return VMS condition codes from main.  The default is to return
8695           POSIX style condition (e.g. error) codes.
8696
8697   FR30 Options
8698       These options are defined specifically for the FR30 port.
8699
8700       -msmall-model
8701           Use the small address space model.  This can produce smaller code,
8702           but it does assume that all symbolic values and addresses will fit
8703           into a 20-bit range.
8704
8705       -mno-lsim
8706           Assume that run-time support has been provided and so there is no
8707           need to include the simulator library (libsim.a) on the linker
8708           command line.
8709
8710   FRV Options
8711       -mgpr-32
8712           Only use the first 32 general purpose registers.
8713
8714       -mgpr-64
8715           Use all 64 general purpose registers.
8716
8717       -mfpr-32
8718           Use only the first 32 floating point registers.
8719
8720       -mfpr-64
8721           Use all 64 floating point registers
8722
8723       -mhard-float
8724           Use hardware instructions for floating point operations.
8725
8726       -msoft-float
8727           Use library routines for floating point operations.
8728
8729       -malloc-cc
8730           Dynamically allocate condition code registers.
8731
8732       -mfixed-cc
8733           Do not try to dynamically allocate condition code registers, only
8734           use "icc0" and "fcc0".
8735
8736       -mdword
8737           Change ABI to use double word insns.
8738
8739       -mno-dword
8740           Do not use double word instructions.
8741
8742       -mdouble
8743           Use floating point double instructions.
8744
8745       -mno-double
8746           Do not use floating point double instructions.
8747
8748       -mmedia
8749           Use media instructions.
8750
8751       -mno-media
8752           Do not use media instructions.
8753
8754       -mmuladd
8755           Use multiply and add/subtract instructions.
8756
8757       -mno-muladd
8758           Do not use multiply and add/subtract instructions.
8759
8760       -mfdpic
8761           Select the FDPIC ABI, that uses function descriptors to represent
8762           pointers to functions.  Without any PIC/PIE-related options, it
8763           implies -fPIE.  With -fpic or -fpie, it assumes GOT entries and
8764           small data are within a 12-bit range from the GOT base address;
8765           with -fPIC or -fPIE, GOT offsets are computed with 32 bits.  With a
8766           bfin-elf target, this option implies -msim.
8767
8768       -minline-plt
8769           Enable inlining of PLT entries in function calls to functions that
8770           are not known to bind locally.  It has no effect without -mfdpic.
8771           It's enabled by default if optimizing for speed and compiling for
8772           shared libraries (i.e., -fPIC or -fpic), or when an optimization
8773           option such as -O3 or above is present in the command line.
8774
8775       -mTLS
8776           Assume a large TLS segment when generating thread-local code.
8777
8778       -mtls
8779           Do not assume a large TLS segment when generating thread-local
8780           code.
8781
8782       -mgprel-ro
8783           Enable the use of "GPREL" relocations in the FDPIC ABI for data
8784           that is known to be in read-only sections.  It's enabled by
8785           default, except for -fpic or -fpie: even though it may help make
8786           the global offset table smaller, it trades 1 instruction for 4.
8787           With -fPIC or -fPIE, it trades 3 instructions for 4, one of which
8788           may be shared by multiple symbols, and it avoids the need for a GOT
8789           entry for the referenced symbol, so it's more likely to be a win.
8790           If it is not, -mno-gprel-ro can be used to disable it.
8791
8792       -multilib-library-pic
8793           Link with the (library, not FD) pic libraries.  It's implied by
8794           -mlibrary-pic, as well as by -fPIC and -fpic without -mfdpic.  You
8795           should never have to use it explicitly.
8796
8797       -mlinked-fp
8798           Follow the EABI requirement of always creating a frame pointer
8799           whenever a stack frame is allocated.  This option is enabled by
8800           default and can be disabled with -mno-linked-fp.
8801
8802       -mlong-calls
8803           Use indirect addressing to call functions outside the current
8804           compilation unit.  This allows the functions to be placed anywhere
8805           within the 32-bit address space.
8806
8807       -malign-labels
8808           Try to align labels to an 8-byte boundary by inserting nops into
8809           the previous packet.  This option only has an effect when VLIW
8810           packing is enabled.  It doesn't create new packets; it merely adds
8811           nops to existing ones.
8812
8813       -mlibrary-pic
8814           Generate position-independent EABI code.
8815
8816       -macc-4
8817           Use only the first four media accumulator registers.
8818
8819       -macc-8
8820           Use all eight media accumulator registers.
8821
8822       -mpack
8823           Pack VLIW instructions.
8824
8825       -mno-pack
8826           Do not pack VLIW instructions.
8827
8828       -mno-eflags
8829           Do not mark ABI switches in e_flags.
8830
8831       -mcond-move
8832           Enable the use of conditional-move instructions (default).
8833
8834           This switch is mainly for debugging the compiler and will likely be
8835           removed in a future version.
8836
8837       -mno-cond-move
8838           Disable the use of conditional-move instructions.
8839
8840           This switch is mainly for debugging the compiler and will likely be
8841           removed in a future version.
8842
8843       -mscc
8844           Enable the use of conditional set instructions (default).
8845
8846           This switch is mainly for debugging the compiler and will likely be
8847           removed in a future version.
8848
8849       -mno-scc
8850           Disable the use of conditional set instructions.
8851
8852           This switch is mainly for debugging the compiler and will likely be
8853           removed in a future version.
8854
8855       -mcond-exec
8856           Enable the use of conditional execution (default).
8857
8858           This switch is mainly for debugging the compiler and will likely be
8859           removed in a future version.
8860
8861       -mno-cond-exec
8862           Disable the use of conditional execution.
8863
8864           This switch is mainly for debugging the compiler and will likely be
8865           removed in a future version.
8866
8867       -mvliw-branch
8868           Run a pass to pack branches into VLIW instructions (default).
8869
8870           This switch is mainly for debugging the compiler and will likely be
8871           removed in a future version.
8872
8873       -mno-vliw-branch
8874           Do not run a pass to pack branches into VLIW instructions.
8875
8876           This switch is mainly for debugging the compiler and will likely be
8877           removed in a future version.
8878
8879       -mmulti-cond-exec
8880           Enable optimization of "&&" and "||" in conditional execution
8881           (default).
8882
8883           This switch is mainly for debugging the compiler and will likely be
8884           removed in a future version.
8885
8886       -mno-multi-cond-exec
8887           Disable optimization of "&&" and "||" in conditional execution.
8888
8889           This switch is mainly for debugging the compiler and will likely be
8890           removed in a future version.
8891
8892       -mnested-cond-exec
8893           Enable nested conditional execution optimizations (default).
8894
8895           This switch is mainly for debugging the compiler and will likely be
8896           removed in a future version.
8897
8898       -mno-nested-cond-exec
8899           Disable nested conditional execution optimizations.
8900
8901           This switch is mainly for debugging the compiler and will likely be
8902           removed in a future version.
8903
8904       -moptimize-membar
8905           This switch removes redundant "membar" instructions from the
8906           compiler generated code.  It is enabled by default.
8907
8908       -mno-optimize-membar
8909           This switch disables the automatic removal of redundant "membar"
8910           instructions from the generated code.
8911
8912       -mtomcat-stats
8913           Cause gas to print out tomcat statistics.
8914
8915       -mcpu=cpu
8916           Select the processor type for which to generate code.  Possible
8917           values are frv, fr550, tomcat, fr500, fr450, fr405, fr400, fr300
8918           and simple.
8919
8920   GNU/Linux Options
8921       These -m options are defined for GNU/Linux targets:
8922
8923       -mglibc
8924           Use the GNU C library instead of uClibc.  This is the default
8925           except on *-*-linux-*uclibc* targets.
8926
8927       -muclibc
8928           Use uClibc instead of the GNU C library.  This is the default on
8929           *-*-linux-*uclibc* targets.
8930
8931   H8/300 Options
8932       These -m options are defined for the H8/300 implementations:
8933
8934       -mrelax
8935           Shorten some address references at link time, when possible; uses
8936           the linker option -relax.
8937
8938       -mh Generate code for the H8/300H.
8939
8940       -ms Generate code for the H8S.
8941
8942       -mn Generate code for the H8S and H8/300H in the normal mode.  This
8943           switch must be used either with -mh or -ms.
8944
8945       -ms2600
8946           Generate code for the H8S/2600.  This switch must be used with -ms.
8947
8948       -mint32
8949           Make "int" data 32 bits by default.
8950
8951       -malign-300
8952           On the H8/300H and H8S, use the same alignment rules as for the
8953           H8/300.  The default for the H8/300H and H8S is to align longs and
8954           floats on 4 byte boundaries.  -malign-300 causes them to be aligned
8955           on 2 byte boundaries.  This option has no effect on the H8/300.
8956
8957   HPPA Options
8958       These -m options are defined for the HPPA family of computers:
8959
8960       -march=architecture-type
8961           Generate code for the specified architecture.  The choices for
8962           architecture-type are 1.0 for PA 1.0, 1.1 for PA 1.1, and 2.0 for
8963           PA 2.0 processors.  Refer to /usr/lib/sched.models on an HP-UX
8964           system to determine the proper architecture option for your
8965           machine.  Code compiled for lower numbered architectures will run
8966           on higher numbered architectures, but not the other way around.
8967
8968       -mpa-risc-1-0
8969       -mpa-risc-1-1
8970       -mpa-risc-2-0
8971           Synonyms for -march=1.0, -march=1.1, and -march=2.0 respectively.
8972
8973       -mbig-switch
8974           Generate code suitable for big switch tables.  Use this option only
8975           if the assembler/linker complain about out of range branches within
8976           a switch table.
8977
8978       -mjump-in-delay
8979           Fill delay slots of function calls with unconditional jump
8980           instructions by modifying the return pointer for the function call
8981           to be the target of the conditional jump.
8982
8983       -mdisable-fpregs
8984           Prevent floating point registers from being used in any manner.
8985           This is necessary for compiling kernels which perform lazy context
8986           switching of floating point registers.  If you use this option and
8987           attempt to perform floating point operations, the compiler will
8988           abort.
8989
8990       -mdisable-indexing
8991           Prevent the compiler from using indexing address modes.  This
8992           avoids some rather obscure problems when compiling MIG generated
8993           code under MACH.
8994
8995       -mno-space-regs
8996           Generate code that assumes the target has no space registers.  This
8997           allows GCC to generate faster indirect calls and use unscaled index
8998           address modes.
8999
9000           Such code is suitable for level 0 PA systems and kernels.
9001
9002       -mfast-indirect-calls
9003           Generate code that assumes calls never cross space boundaries.
9004           This allows GCC to emit code which performs faster indirect calls.
9005
9006           This option will not work in the presence of shared libraries or
9007           nested functions.
9008
9009       -mfixed-range=register-range
9010           Generate code treating the given register range as fixed registers.
9011           A fixed register is one that the register allocator can not use.
9012           This is useful when compiling kernel code.  A register range is
9013           specified as two registers separated by a dash.  Multiple register
9014           ranges can be specified separated by a comma.
9015
9016       -mlong-load-store
9017           Generate 3-instruction load and store sequences as sometimes
9018           required by the HP-UX 10 linker.  This is equivalent to the +k
9019           option to the HP compilers.
9020
9021       -mportable-runtime
9022           Use the portable calling conventions proposed by HP for ELF
9023           systems.
9024
9025       -mgas
9026           Enable the use of assembler directives only GAS understands.
9027
9028       -mschedule=cpu-type
9029           Schedule code according to the constraints for the machine type
9030           cpu-type.  The choices for cpu-type are 700 7100, 7100LC, 7200,
9031           7300 and 8000.  Refer to /usr/lib/sched.models on an HP-UX system
9032           to determine the proper scheduling option for your machine.  The
9033           default scheduling is 8000.
9034
9035       -mlinker-opt
9036           Enable the optimization pass in the HP-UX linker.  Note this makes
9037           symbolic debugging impossible.  It also triggers a bug in the HP-UX
9038           8 and HP-UX 9 linkers in which they give bogus error messages when
9039           linking some programs.
9040
9041       -msoft-float
9042           Generate output containing library calls for floating point.
9043           Warning: the requisite libraries are not available for all HPPA
9044           targets.  Normally the facilities of the machine's usual C compiler
9045           are used, but this cannot be done directly in cross-compilation.
9046           You must make your own arrangements to provide suitable library
9047           functions for cross-compilation.
9048
9049           -msoft-float changes the calling convention in the output file;
9050           therefore, it is only useful if you compile all of a program with
9051           this option.  In particular, you need to compile libgcc.a, the
9052           library that comes with GCC, with -msoft-float in order for this to
9053           work.
9054
9055       -msio
9056           Generate the predefine, "_SIO", for server IO.  The default is
9057           -mwsio.  This generates the predefines, "__hp9000s700",
9058           "__hp9000s700__" and "_WSIO", for workstation IO.  These options
9059           are available under HP-UX and HI-UX.
9060
9061       -mgnu-ld
9062           Use GNU ld specific options.  This passes -shared to ld when
9063           building a shared library.  It is the default when GCC is
9064           configured, explicitly or implicitly, with the GNU linker.  This
9065           option does not have any affect on which ld is called, it only
9066           changes what parameters are passed to that ld.  The ld that is
9067           called is determined by the --with-ld configure option, GCC's
9068           program search path, and finally by the user's PATH.  The linker
9069           used by GCC can be printed using which `gcc -print-prog-name=ld`.
9070           This option is only available on the 64 bit HP-UX GCC, i.e.
9071           configured with hppa*64*-*-hpux*.
9072
9073       -mhp-ld
9074           Use HP ld specific options.  This passes -b to ld when building a
9075           shared library and passes +Accept TypeMismatch to ld on all links.
9076           It is the default when GCC is configured, explicitly or implicitly,
9077           with the HP linker.  This option does not have any affect on which
9078           ld is called, it only changes what parameters are passed to that
9079           ld.  The ld that is called is determined by the --with-ld configure
9080           option, GCC's program search path, and finally by the user's PATH.
9081           The linker used by GCC can be printed using which `gcc
9082           -print-prog-name=ld`.  This option is only available on the 64 bit
9083           HP-UX GCC, i.e. configured with hppa*64*-*-hpux*.
9084
9085       -mlong-calls
9086           Generate code that uses long call sequences.  This ensures that a
9087           call is always able to reach linker generated stubs.  The default
9088           is to generate long calls only when the distance from the call site
9089           to the beginning of the function or translation unit, as the case
9090           may be, exceeds a predefined limit set by the branch type being
9091           used.  The limits for normal calls are 7,600,000 and 240,000 bytes,
9092           respectively for the PA 2.0 and PA 1.X architectures.  Sibcalls are
9093           always limited at 240,000 bytes.
9094
9095           Distances are measured from the beginning of functions when using
9096           the -ffunction-sections option, or when using the -mgas and
9097           -mno-portable-runtime options together under HP-UX with the SOM
9098           linker.
9099
9100           It is normally not desirable to use this option as it will degrade
9101           performance.  However, it may be useful in large applications,
9102           particularly when partial linking is used to build the application.
9103
9104           The types of long calls used depends on the capabilities of the
9105           assembler and linker, and the type of code being generated.  The
9106           impact on systems that support long absolute calls, and long pic
9107           symbol-difference or pc-relative calls should be relatively small.
9108           However, an indirect call is used on 32-bit ELF systems in pic code
9109           and it is quite long.
9110
9111       -munix=unix-std
9112           Generate compiler predefines and select a startfile for the
9113           specified UNIX standard.  The choices for unix-std are 93, 95 and
9114           98.  93 is supported on all HP-UX versions.  95 is available on HP-
9115           UX 10.10 and later.  98 is available on HP-UX 11.11 and later.  The
9116           default values are 93 for HP-UX 10.00, 95 for HP-UX 10.10 though to
9117           11.00, and 98 for HP-UX 11.11 and later.
9118
9119           -munix=93 provides the same predefines as GCC 3.3 and 3.4.
9120           -munix=95 provides additional predefines for "XOPEN_UNIX" and
9121           "_XOPEN_SOURCE_EXTENDED", and the startfile unix95.o.  -munix=98
9122           provides additional predefines for "_XOPEN_UNIX",
9123           "_XOPEN_SOURCE_EXTENDED", "_INCLUDE__STDC_A1_SOURCE" and
9124           "_INCLUDE_XOPEN_SOURCE_500", and the startfile unix98.o.
9125
9126           It is important to note that this option changes the interfaces for
9127           various library routines.  It also affects the operational behavior
9128           of the C library.  Thus, extreme care is needed in using this
9129           option.
9130
9131           Library code that is intended to operate with more than one UNIX
9132           standard must test, set and restore the variable
9133           __xpg4_extended_mask as appropriate.  Most GNU software doesn't
9134           provide this capability.
9135
9136       -nolibdld
9137           Suppress the generation of link options to search libdld.sl when
9138           the -static option is specified on HP-UX 10 and later.
9139
9140       -static
9141           The HP-UX implementation of setlocale in libc has a dependency on
9142           libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
9143           when the -static option is specified, special link options are
9144           needed to resolve this dependency.
9145
9146           On HP-UX 10 and later, the GCC driver adds the necessary options to
9147           link with libdld.sl when the -static option is specified.  This
9148           causes the resulting binary to be dynamic.  On the 64-bit port, the
9149           linkers generate dynamic binaries by default in any case.  The
9150           -nolibdld option can be used to prevent the GCC driver from adding
9151           these link options.
9152
9153       -threads
9154           Add support for multithreading with the dce thread library under
9155           HP-UX.  This option sets flags for both the preprocessor and
9156           linker.
9157
9158   Intel 386 and AMD x86-64 Options
9159       These -m options are defined for the i386 and x86-64 family of
9160       computers:
9161
9162       -mtune=cpu-type
9163           Tune to cpu-type everything applicable about the generated code,
9164           except for the ABI and the set of available instructions.  The
9165           choices for cpu-type are:
9166
9167           generic
9168               Produce code optimized for the most common IA32/AMD64/EM64T
9169               processors.  If you know the CPU on which your code will run,
9170               then you should use the corresponding -mtune option instead of
9171               -mtune=generic.  But, if you do not know exactly what CPU users
9172               of your application will have, then you should use this option.
9173
9174               As new processors are deployed in the marketplace, the behavior
9175               of this option will change.  Therefore, if you upgrade to a
9176               newer version of GCC, the code generated option will change to
9177               reflect the processors that were most common when that version
9178               of GCC was released.
9179
9180               There is no -march=generic option because -march indicates the
9181               instruction set the compiler can use, and there is no generic
9182               instruction set applicable to all processors.  In contrast,
9183               -mtune indicates the processor (or, in this case, collection of
9184               processors) for which the code is optimized.
9185
9186           native
9187               This selects the CPU to tune for at compilation time by
9188               determining the processor type of the compiling machine.  Using
9189               -mtune=native will produce code optimized for the local machine
9190               under the constraints of the selected instruction set.  Using
9191               -march=native will enable all instruction subsets supported by
9192               the local machine (hence the result might not run on different
9193               machines).
9194
9195           i386
9196               Original Intel's i386 CPU.
9197
9198           i486
9199               Intel's i486 CPU.  (No scheduling is implemented for this
9200               chip.)
9201
9202           i586, pentium
9203               Intel Pentium CPU with no MMX support.
9204
9205           pentium-mmx
9206               Intel PentiumMMX CPU based on Pentium core with MMX instruction
9207               set support.
9208
9209           pentiumpro
9210               Intel PentiumPro CPU.
9211
9212           i686
9213               Same as "generic", but when used as "march" option, PentiumPro
9214               instruction set will be used, so the code will run on all i686
9215               family chips.
9216
9217           pentium2
9218               Intel Pentium2 CPU based on PentiumPro core with MMX
9219               instruction set support.
9220
9221           pentium3, pentium3m
9222               Intel Pentium3 CPU based on PentiumPro core with MMX and SSE
9223               instruction set support.
9224
9225           pentium-m
9226               Low power version of Intel Pentium3 CPU with MMX, SSE and SSE2
9227               instruction set support.  Used by Centrino notebooks.
9228
9229           pentium4, pentium4m
9230               Intel Pentium4 CPU with MMX, SSE and SSE2 instruction set
9231               support.
9232
9233           prescott
9234               Improved version of Intel Pentium4 CPU with MMX, SSE, SSE2 and
9235               SSE3 instruction set support.
9236
9237           nocona
9238               Improved version of Intel Pentium4 CPU with 64-bit extensions,
9239               MMX, SSE, SSE2 and SSE3 instruction set support.
9240
9241           core2
9242               Intel Core2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3
9243               and SSSE3 instruction set support.
9244
9245           k6  AMD K6 CPU with MMX instruction set support.
9246
9247           k6-2, k6-3
9248               Improved versions of AMD K6 CPU with MMX and 3dNOW! instruction
9249               set support.
9250
9251           athlon, athlon-tbird
9252               AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and SSE
9253               prefetch instructions support.
9254
9255           athlon-4, athlon-xp, athlon-mp
9256               Improved AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and
9257               full SSE instruction set support.
9258
9259           k8, opteron, athlon64, athlon-fx
9260               AMD K8 core based CPUs with x86-64 instruction set support.
9261               (This supersets MMX, SSE, SSE2, 3dNOW!, enhanced 3dNOW! and
9262               64-bit instruction set extensions.)
9263
9264           k8-sse3, opteron-sse3, athlon64-sse3
9265               Improved versions of k8, opteron and athlon64 with SSE3
9266               instruction set support.
9267
9268           amdfam10, barcelona
9269               AMD Family 10h core based CPUs with x86-64 instruction set
9270               support.  (This supersets MMX, SSE, SSE2, SSE3, SSE4A, 3dNOW!,
9271               enhanced 3dNOW!, ABM and 64-bit instruction set extensions.)
9272
9273           winchip-c6
9274               IDT Winchip C6 CPU, dealt in same way as i486 with additional
9275               MMX instruction set support.
9276
9277           winchip2
9278               IDT Winchip2 CPU, dealt in same way as i486 with additional MMX
9279               and 3dNOW!  instruction set support.
9280
9281           c3  Via C3 CPU with MMX and 3dNOW! instruction set support.  (No
9282               scheduling is implemented for this chip.)
9283
9284           c3-2
9285               Via C3-2 CPU with MMX and SSE instruction set support.  (No
9286               scheduling is implemented for this chip.)
9287
9288           geode
9289               Embedded AMD CPU with MMX and 3dNOW! instruction set support.
9290
9291           While picking a specific cpu-type will schedule things
9292           appropriately for that particular chip, the compiler will not
9293           generate any code that does not run on the i386 without the
9294           -march=cpu-type option being used.
9295
9296       -march=cpu-type
9297           Generate instructions for the machine type cpu-type.  The choices
9298           for cpu-type are the same as for -mtune.  Moreover, specifying
9299           -march=cpu-type implies -mtune=cpu-type.
9300
9301       -mcpu=cpu-type
9302           A deprecated synonym for -mtune.
9303
9304       -mfpmath=unit
9305           Generate floating point arithmetics for selected unit unit.  The
9306           choices for unit are:
9307
9308           387 Use the standard 387 floating point coprocessor present
9309               majority of chips and emulated otherwise.  Code compiled with
9310               this option will run almost everywhere.  The temporary results
9311               are computed in 80bit precision instead of precision specified
9312               by the type resulting in slightly different results compared to
9313               most of other chips.  See -ffloat-store for more detailed
9314               description.
9315
9316               This is the default choice for i386 compiler.
9317
9318           sse Use scalar floating point instructions present in the SSE
9319               instruction set.  This instruction set is supported by Pentium3
9320               and newer chips, in the AMD line by Athlon-4, Athlon-xp and
9321               Athlon-mp chips.  The earlier version of SSE instruction set
9322               supports only single precision arithmetics, thus the double and
9323               extended precision arithmetics is still done using 387.  Later
9324               version, present only in Pentium4 and the future AMD x86-64
9325               chips supports double precision arithmetics too.
9326
9327               For the i386 compiler, you need to use -march=cpu-type, -msse
9328               or -msse2 switches to enable SSE extensions and make this
9329               option effective.  For the x86-64 compiler, these extensions
9330               are enabled by default.
9331
9332               The resulting code should be considerably faster in the
9333               majority of cases and avoid the numerical instability problems
9334               of 387 code, but may break some existing code that expects
9335               temporaries to be 80bit.
9336
9337               This is the default choice for the x86-64 compiler.
9338
9339           sse,387
9340           sse+387
9341           both
9342               Attempt to utilize both instruction sets at once.  This
9343               effectively double the amount of available registers and on
9344               chips with separate execution units for 387 and SSE the
9345               execution resources too.  Use this option with care, as it is
9346               still experimental, because the GCC register allocator does not
9347               model separate functional units well resulting in instable
9348               performance.
9349
9350       -masm=dialect
9351           Output asm instructions using selected dialect.  Supported choices
9352           are intel or att (the default one).  Darwin does not support intel.
9353
9354       -mieee-fp
9355       -mno-ieee-fp
9356           Control whether or not the compiler uses IEEE floating point
9357           comparisons.  These handle correctly the case where the result of a
9358           comparison is unordered.
9359
9360       -msoft-float
9361           Generate output containing library calls for floating point.
9362           Warning: the requisite libraries are not part of GCC.  Normally the
9363           facilities of the machine's usual C compiler are used, but this
9364           can't be done directly in cross-compilation.  You must make your
9365           own arrangements to provide suitable library functions for cross-
9366           compilation.
9367
9368           On machines where a function returns floating point results in the
9369           80387 register stack, some floating point opcodes may be emitted
9370           even if -msoft-float is used.
9371
9372       -mno-fp-ret-in-387
9373           Do not use the FPU registers for return values of functions.
9374
9375           The usual calling convention has functions return values of types
9376           "float" and "double" in an FPU register, even if there is no FPU.
9377           The idea is that the operating system should emulate an FPU.
9378
9379           The option -mno-fp-ret-in-387 causes such values to be returned in
9380           ordinary CPU registers instead.
9381
9382       -mno-fancy-math-387
9383           Some 387 emulators do not support the "sin", "cos" and "sqrt"
9384           instructions for the 387.  Specify this option to avoid generating
9385           those instructions.  This option is the default on FreeBSD, OpenBSD
9386           and NetBSD.  This option is overridden when -march indicates that
9387           the target cpu will always have an FPU and so the instruction will
9388           not need emulation.  As of revision 2.6.1, these instructions are
9389           not generated unless you also use the -funsafe-math-optimizations
9390           switch.
9391
9392       -malign-double
9393       -mno-align-double
9394           Control whether GCC aligns "double", "long double", and "long long"
9395           variables on a two word boundary or a one word boundary.  Aligning
9396           "double" variables on a two word boundary will produce code that
9397           runs somewhat faster on a Pentium at the expense of more memory.
9398
9399           On x86-64, -malign-double is enabled by default.
9400
9401           Warning: if you use the -malign-double switch, structures
9402           containing the above types will be aligned differently than the
9403           published application binary interface specifications for the 386
9404           and will not be binary compatible with structures in code compiled
9405           without that switch.
9406
9407       -m96bit-long-double
9408       -m128bit-long-double
9409           These switches control the size of "long double" type.  The i386
9410           application binary interface specifies the size to be 96 bits, so
9411           -m96bit-long-double is the default in 32 bit mode.
9412
9413           Modern architectures (Pentium and newer) would prefer "long double"
9414           to be aligned to an 8 or 16 byte boundary.  In arrays or structures
9415           conforming to the ABI, this would not be possible.  So specifying a
9416           -m128bit-long-double will align "long double" to a 16 byte boundary
9417           by padding the "long double" with an additional 32 bit zero.
9418
9419           In the x86-64 compiler, -m128bit-long-double is the default choice
9420           as its ABI specifies that "long double" is to be aligned on 16 byte
9421           boundary.
9422
9423           Notice that neither of these options enable any extra precision
9424           over the x87 standard of 80 bits for a "long double".
9425
9426           Warning: if you override the default value for your target ABI, the
9427           structures and arrays containing "long double" variables will
9428           change their size as well as function calling convention for
9429           function taking "long double" will be modified.  Hence they will
9430           not be binary compatible with arrays or structures in code compiled
9431           without that switch.
9432
9433       -mlarge-data-threshold=number
9434           When -mcmodel=medium is specified, the data greater than threshold
9435           are placed in large data section.  This value must be the same
9436           across all object linked into the binary and defaults to 65535.
9437
9438       -mrtd
9439           Use a different function-calling convention, in which functions
9440           that take a fixed number of arguments return with the "ret" num
9441           instruction, which pops their arguments while returning.  This
9442           saves one instruction in the caller since there is no need to pop
9443           the arguments there.
9444
9445           You can specify that an individual function is called with this
9446           calling sequence with the function attribute stdcall.  You can also
9447           override the -mrtd option by using the function attribute cdecl.
9448
9449           Warning: this calling convention is incompatible with the one
9450           normally used on Unix, so you cannot use it if you need to call
9451           libraries compiled with the Unix compiler.
9452
9453           Also, you must provide function prototypes for all functions that
9454           take variable numbers of arguments (including "printf"); otherwise
9455           incorrect code will be generated for calls to those functions.
9456
9457           In addition, seriously incorrect code will result if you call a
9458           function with too many arguments.  (Normally, extra arguments are
9459           harmlessly ignored.)
9460
9461       -mregparm=num
9462           Control how many registers are used to pass integer arguments.  By
9463           default, no registers are used to pass arguments, and at most 3
9464           registers can be used.  You can control this behavior for a
9465           specific function by using the function attribute regparm.
9466
9467           Warning: if you use this switch, and num is nonzero, then you must
9468           build all modules with the same value, including any libraries.
9469           This includes the system libraries and startup modules.
9470
9471       -msseregparm
9472           Use SSE register passing conventions for float and double arguments
9473           and return values.  You can control this behavior for a specific
9474           function by using the function attribute sseregparm.
9475
9476           Warning: if you use this switch then you must build all modules
9477           with the same value, including any libraries.  This includes the
9478           system libraries and startup modules.
9479
9480       -mpc32
9481       -mpc64
9482       -mpc80
9483           Set 80387 floating-point precision to 32, 64 or 80 bits.  When
9484           -mpc32 is specified, the significands of results of floating-point
9485           operations are rounded to 24 bits (single precision); -mpc64 rounds
9486           the significands of results of floating-point operations to 53 bits
9487           (double precision) and -mpc80 rounds the significands of results of
9488           floating-point operations to 64 bits (extended double precision),
9489           which is the default.  When this option is used, floating-point
9490           operations in higher precisions are not available to the programmer
9491           without setting the FPU control word explicitly.
9492
9493           Setting the rounding of floating-point operations to less than the
9494           default 80 bits can speed some programs by 2% or more.  Note that
9495           some mathematical libraries assume that extended precision (80 bit)
9496           floating-point operations are enabled by default; routines in such
9497           libraries could suffer significant loss of accuracy, typically
9498           through so-called "catastrophic cancellation", when this option is
9499           used to set the precision to less than extended precision.
9500
9501       -mstackrealign
9502           Realign the stack at entry.  On the Intel x86, the -mstackrealign
9503           option will generate an alternate prologue and epilogue that
9504           realigns the runtime stack if necessary.  This supports mixing
9505           legacy codes that keep a 4-byte aligned stack with modern codes
9506           that keep a 16-byte stack for SSE compatibility.  See also the
9507           attribute "force_align_arg_pointer", applicable to individual
9508           functions.
9509
9510       -mpreferred-stack-boundary=num
9511           Attempt to keep the stack boundary aligned to a 2 raised to num
9512           byte boundary.  If -mpreferred-stack-boundary is not specified, the
9513           default is 4 (16 bytes or 128 bits).
9514
9515       -mincoming-stack-boundary=num
9516           Assume the incoming stack is aligned to a 2 raised to num byte
9517           boundary.  If -mincoming-stack-boundary is not specified, the one
9518           specified by -mpreferred-stack-boundary will be used.
9519
9520           On Pentium and PentiumPro, "double" and "long double" values should
9521           be aligned to an 8 byte boundary (see -malign-double) or suffer
9522           significant run time performance penalties.  On Pentium III, the
9523           Streaming SIMD Extension (SSE) data type "__m128" may not work
9524           properly if it is not 16 byte aligned.
9525
9526           To ensure proper alignment of this values on the stack, the stack
9527           boundary must be as aligned as that required by any value stored on
9528           the stack.  Further, every function must be generated such that it
9529           keeps the stack aligned.  Thus calling a function compiled with a
9530           higher preferred stack boundary from a function compiled with a
9531           lower preferred stack boundary will most likely misalign the stack.
9532           It is recommended that libraries that use callbacks always use the
9533           default setting.
9534
9535           This extra alignment does consume extra stack space, and generally
9536           increases code size.  Code that is sensitive to stack space usage,
9537           such as embedded systems and operating system kernels, may want to
9538           reduce the preferred alignment to -mpreferred-stack-boundary=2.
9539
9540       -mmmx
9541       -mno-mmx
9542       -msse
9543       -mno-sse
9544       -msse2
9545       -mno-sse2
9546       -msse3
9547       -mno-sse3
9548       -mssse3
9549       -mno-ssse3
9550       -msse4.1
9551       -mno-sse4.1
9552       -msse4.2
9553       -mno-sse4.2
9554       -msse4
9555       -mno-sse4
9556       -mavx
9557       -mno-avx
9558       -maes
9559       -mno-aes
9560       -mpclmul
9561       -mno-pclmul
9562       -mfsgsbase
9563       -mno-fsgsbase
9564       -mrdrnd
9565       -mno-rdrnd
9566       -mf16c
9567       -mno-f16c
9568       -msse4a
9569       -mno-sse4a
9570       -mfma4
9571       -mno-fma4
9572       -mxop
9573       -mno-xop
9574       -mlwp
9575       -mno-lwp
9576       -m3dnow
9577       -mno-3dnow
9578       -mpopcnt
9579       -mno-popcnt
9580       -mabm
9581       -mno-abm
9582       -mbmi
9583       -mno-bmi
9584       -mtbm
9585       -mno-tbm
9586           These switches enable or disable the use of instructions in the
9587           MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, AVX, AES, PCLMUL, FSGSBASE,
9588           RDRND, F16C, SSE4A, FMA4, XOP, LWP, ABM, BMI, or 3DNow! extended
9589           instruction sets.  These extensions are also available as built-in
9590           functions: see X86 Built-in Functions, for details of the functions
9591           enabled and disabled by these switches.
9592
9593           To have SSE/SSE2 instructions generated automatically from
9594           floating-point code (as opposed to 387 instructions), see
9595           -mfpmath=sse.
9596
9597           GCC depresses SSEx instructions when -mavx is used. Instead, it
9598           generates new AVX instructions or AVX equivalence for all SSEx
9599           instructions when needed.
9600
9601           These options will enable GCC to use these extended instructions in
9602           generated code, even without -mfpmath=sse.  Applications which
9603           perform runtime CPU detection must compile separate files for each
9604           supported architecture, using the appropriate flags.  In
9605           particular, the file containing the CPU detection code should be
9606           compiled without these options.
9607
9608       -mfused-madd
9609       -mno-fused-madd
9610           Do (don't) generate code that uses the fused multiply/add or
9611           multiply/subtract instructions.  The default is to use these
9612           instructions.
9613
9614       -mcld
9615           This option instructs GCC to emit a "cld" instruction in the
9616           prologue of functions that use string instructions.  String
9617           instructions depend on the DF flag to select between autoincrement
9618           or autodecrement mode.  While the ABI specifies the DF flag to be
9619           cleared on function entry, some operating systems violate this
9620           specification by not clearing the DF flag in their exception
9621           dispatchers.  The exception handler can be invoked with the DF flag
9622           set which leads to wrong direction mode, when string instructions
9623           are used.  This option can be enabled by default on 32-bit x86
9624           targets by configuring GCC with the --enable-cld configure option.
9625           Generation of "cld" instructions can be suppressed with the
9626           -mno-cld compiler option in this case.
9627
9628       -mcx16
9629           This option will enable GCC to use CMPXCHG16B instruction in
9630           generated code.  CMPXCHG16B allows for atomic operations on 128-bit
9631           double quadword (or oword) data types.  This is useful for high
9632           resolution counters that could be updated by multiple processors
9633           (or cores).  This instruction is generated as part of atomic built-
9634           in functions: see Atomic Builtins for details.
9635
9636       -msahf
9637           This option will enable GCC to use SAHF instruction in generated
9638           64-bit code.  Early Intel CPUs with Intel 64 lacked LAHF and SAHF
9639           instructions supported by AMD64 until introduction of Pentium 4 G1
9640           step in December 2005.  LAHF and SAHF are load and store
9641           instructions, respectively, for certain status flags.  In 64-bit
9642           mode, SAHF instruction is used to optimize "fmod", "drem" or
9643           "remainder" built-in functions: see Other Builtins for details.
9644
9645       -mmovbe
9646           This option will enable GCC to use movbe instruction to implement
9647           "__builtin_bswap32" and "__builtin_bswap64".
9648
9649       -mcrc32
9650           This option will enable built-in functions,
9651           "__builtin_ia32_crc32qi", "__builtin_ia32_crc32hi".
9652           "__builtin_ia32_crc32si" and "__builtin_ia32_crc32di" to generate
9653           the crc32 machine instruction.
9654
9655       -mrecip
9656           This option will enable GCC to use RCPSS and RSQRTSS instructions
9657           (and their vectorized variants RCPPS and RSQRTPS) with an
9658           additional Newton-Raphson step to increase precision instead of
9659           DIVSS and SQRTSS (and their vectorized variants) for single
9660           precision floating point arguments.  These instructions are
9661           generated only when -funsafe-math-optimizations is enabled together
9662           with -finite-math-only and -fno-trapping-math.  Note that while the
9663           throughput of the sequence is higher than the throughput of the
9664           non-reciprocal instruction, the precision of the sequence can be
9665           decreased by up to 2 ulp (i.e. the inverse of 1.0 equals
9666           0.99999994).
9667
9668       -mveclibabi=type
9669           Specifies the ABI type to use for vectorizing intrinsics using an
9670           external library.  Supported types are "svml" for the Intel short
9671           vector math library and "acml" for the AMD math core library style
9672           of interfacing.  GCC will currently emit calls to "vmldExp2",
9673           "vmldLn2", "vmldLog102", "vmldLog102", "vmldPow2", "vmldTanh2",
9674           "vmldTan2", "vmldAtan2", "vmldAtanh2", "vmldCbrt2", "vmldSinh2",
9675           "vmldSin2", "vmldAsinh2", "vmldAsin2", "vmldCosh2", "vmldCos2",
9676           "vmldAcosh2", "vmldAcos2", "vmlsExp4", "vmlsLn4", "vmlsLog104",
9677           "vmlsLog104", "vmlsPow4", "vmlsTanh4", "vmlsTan4", "vmlsAtan4",
9678           "vmlsAtanh4", "vmlsCbrt4", "vmlsSinh4", "vmlsSin4", "vmlsAsinh4",
9679           "vmlsAsin4", "vmlsCosh4", "vmlsCos4", "vmlsAcosh4" and "vmlsAcos4"
9680           for corresponding function type when -mveclibabi=svml is used and
9681           "__vrd2_sin", "__vrd2_cos", "__vrd2_exp", "__vrd2_log",
9682           "__vrd2_log2", "__vrd2_log10", "__vrs4_sinf", "__vrs4_cosf",
9683           "__vrs4_expf", "__vrs4_logf", "__vrs4_log2f", "__vrs4_log10f" and
9684           "__vrs4_powf" for corresponding function type when -mveclibabi=acml
9685           is used. Both -ftree-vectorize and -funsafe-math-optimizations have
9686           to be enabled. A SVML or ACML ABI compatible library will have to
9687           be specified at link time.
9688
9689       -mpush-args
9690       -mno-push-args
9691           Use PUSH operations to store outgoing parameters.  This method is
9692           shorter and usually equally fast as method using SUB/MOV operations
9693           and is enabled by default.  In some cases disabling it may improve
9694           performance because of improved scheduling and reduced
9695           dependencies.
9696
9697       -maccumulate-outgoing-args
9698           If enabled, the maximum amount of space required for outgoing
9699           arguments will be computed in the function prologue.  This is
9700           faster on most modern CPUs because of reduced dependencies,
9701           improved scheduling and reduced stack usage when preferred stack
9702           boundary is not equal to 2.  The drawback is a notable increase in
9703           code size.  This switch implies -mno-push-args.
9704
9705       -mthreads
9706           Support thread-safe exception handling on Mingw32.  Code that
9707           relies on thread-safe exception handling must compile and link all
9708           code with the -mthreads option.  When compiling, -mthreads defines
9709           -D_MT; when linking, it links in a special thread helper library
9710           -lmingwthrd which cleans up per thread exception handling data.
9711
9712       -mno-align-stringops
9713           Do not align destination of inlined string operations.  This switch
9714           reduces code size and improves performance in case the destination
9715           is already aligned, but GCC doesn't know about it.
9716
9717       -minline-all-stringops
9718           By default GCC inlines string operations only when destination is
9719           known to be aligned at least to 4 byte boundary.  This enables more
9720           inlining, increase code size, but may improve performance of code
9721           that depends on fast memcpy, strlen and memset for short lengths.
9722
9723       -minline-stringops-dynamically
9724           For string operation of unknown size, inline runtime checks so for
9725           small blocks inline code is used, while for large blocks library
9726           call is used.
9727
9728       -mstringop-strategy=alg
9729           Overwrite internal decision heuristic about particular algorithm to
9730           inline string operation with.  The allowed values are "rep_byte",
9731           "rep_4byte", "rep_8byte" for expanding using i386 "rep" prefix of
9732           specified size, "byte_loop", "loop", "unrolled_loop" for expanding
9733           inline loop, "libcall" for always expanding library call.
9734
9735       -momit-leaf-frame-pointer
9736           Don't keep the frame pointer in a register for leaf functions.
9737           This avoids the instructions to save, set up and restore frame
9738           pointers and makes an extra register available in leaf functions.
9739           The option -fomit-frame-pointer removes the frame pointer for all
9740           functions which might make debugging harder.
9741
9742       -mtls-direct-seg-refs
9743       -mno-tls-direct-seg-refs
9744           Controls whether TLS variables may be accessed with offsets from
9745           the TLS segment register (%gs for 32-bit, %fs for 64-bit), or
9746           whether the thread base pointer must be added.  Whether or not this
9747           is legal depends on the operating system, and whether it maps the
9748           segment to cover the entire TLS area.
9749
9750           For systems that use GNU libc, the default is on.
9751
9752       -msse2avx
9753       -mno-sse2avx
9754           Specify that the assembler should encode SSE instructions with VEX
9755           prefix.  The option -mavx turns this on by default.
9756
9757       These -m switches are supported in addition to the above on AMD x86-64
9758       processors in 64-bit environments.
9759
9760       -m32
9761       -m64
9762           Generate code for a 32-bit or 64-bit environment.  The 32-bit
9763           environment sets int, long and pointer to 32 bits and generates
9764           code that runs on any i386 system.  The 64-bit environment sets int
9765           to 32 bits and long and pointer to 64 bits and generates code for
9766           AMD's x86-64 architecture. For darwin only the -m64 option turns
9767           off the -fno-pic and -mdynamic-no-pic options.
9768
9769       -mno-red-zone
9770           Do not use a so called red zone for x86-64 code.  The red zone is
9771           mandated by the x86-64 ABI, it is a 128-byte area beyond the
9772           location of the stack pointer that will not be modified by signal
9773           or interrupt handlers and therefore can be used for temporary data
9774           without adjusting the stack pointer.  The flag -mno-red-zone
9775           disables this red zone.
9776
9777       -mcmodel=small
9778           Generate code for the small code model: the program and its symbols
9779           must be linked in the lower 2 GB of the address space.  Pointers
9780           are 64 bits.  Programs can be statically or dynamically linked.
9781           This is the default code model.
9782
9783       -mcmodel=kernel
9784           Generate code for the kernel code model.  The kernel runs in the
9785           negative 2 GB of the address space.  This model has to be used for
9786           Linux kernel code.
9787
9788       -mcmodel=medium
9789           Generate code for the medium model: The program is linked in the
9790           lower 2 GB of the address space.  Small symbols are also placed
9791           there.  Symbols with sizes larger than -mlarge-data-threshold are
9792           put into large data or bss sections and can be located above 2GB.
9793           Programs can be statically or dynamically linked.
9794
9795       -mcmodel=large
9796           Generate code for the large model: This model makes no assumptions
9797           about addresses and sizes of sections.
9798
9799   i386 and x86-64 Windows Options
9800       These additional options are available for Windows targets:
9801
9802       -mconsole
9803           This option is available for Cygwin and MinGW targets.  It
9804           specifies that a console application is to be generated, by
9805           instructing the linker to set the PE header subsystem type required
9806           for console applications.  This is the default behaviour for Cygwin
9807           and MinGW targets.
9808
9809       -mcygwin
9810           This option is available for Cygwin targets.  It specifies that the
9811           Cygwin internal interface is to be used for predefined preprocessor
9812           macros, C runtime libraries and related linker paths and options.
9813           For Cygwin targets this is the default behaviour.  This option is
9814           deprecated and will be removed in a future release.
9815
9816       -mno-cygwin
9817           This option is available for Cygwin targets.  It specifies that the
9818           MinGW internal interface is to be used instead of Cygwin's, by
9819           setting MinGW-related predefined macros and linker paths and
9820           default library options.  This option is deprecated and will be
9821           removed in a future release.
9822
9823       -mdll
9824           This option is available for Cygwin and MinGW targets.  It
9825           specifies that a DLL - a dynamic link library - is to be generated,
9826           enabling the selection of the required runtime startup object and
9827           entry point.
9828
9829       -mnop-fun-dllimport
9830           This option is available for Cygwin and MinGW targets.  It
9831           specifies that the dllimport attribute should be ignored.
9832
9833       -mthread
9834           This option is available for MinGW targets. It specifies that
9835           MinGW-specific thread support is to be used.
9836
9837       -mwin32
9838           This option is available for Cygwin and MinGW targets.  It
9839           specifies that the typical Windows pre-defined macros are to be set
9840           in the pre-processor, but does not influence the choice of runtime
9841           library/startup code.
9842
9843       -mwindows
9844           This option is available for Cygwin and MinGW targets.  It
9845           specifies that a GUI application is to be generated by instructing
9846           the linker to set the PE header subsystem type appropriately.
9847
9848       See also under i386 and x86-64 Options for standard options.
9849
9850   IA-64 Options
9851       These are the -m options defined for the Intel IA-64 architecture.
9852
9853       -mbig-endian
9854           Generate code for a big endian target.  This is the default for HP-
9855           UX.
9856
9857       -mlittle-endian
9858           Generate code for a little endian target.  This is the default for
9859           AIX5 and GNU/Linux.
9860
9861       -mgnu-as
9862       -mno-gnu-as
9863           Generate (or don't) code for the GNU assembler.  This is the
9864           default.
9865
9866       -mgnu-ld
9867       -mno-gnu-ld
9868           Generate (or don't) code for the GNU linker.  This is the default.
9869
9870       -mno-pic
9871           Generate code that does not use a global pointer register.  The
9872           result is not position independent code, and violates the IA-64
9873           ABI.
9874
9875       -mvolatile-asm-stop
9876       -mno-volatile-asm-stop
9877           Generate (or don't) a stop bit immediately before and after
9878           volatile asm statements.
9879
9880       -mregister-names
9881       -mno-register-names
9882           Generate (or don't) in, loc, and out register names for the stacked
9883           registers.  This may make assembler output more readable.
9884
9885       -mno-sdata
9886       -msdata
9887           Disable (or enable) optimizations that use the small data section.
9888           This may be useful for working around optimizer bugs.
9889
9890       -mconstant-gp
9891           Generate code that uses a single constant global pointer value.
9892           This is useful when compiling kernel code.
9893
9894       -mauto-pic
9895           Generate code that is self-relocatable.  This implies
9896           -mconstant-gp.  This is useful when compiling firmware code.
9897
9898       -minline-float-divide-min-latency
9899           Generate code for inline divides of floating point values using the
9900           minimum latency algorithm.
9901
9902       -minline-float-divide-max-throughput
9903           Generate code for inline divides of floating point values using the
9904           maximum throughput algorithm.
9905
9906       -minline-int-divide-min-latency
9907           Generate code for inline divides of integer values using the
9908           minimum latency algorithm.
9909
9910       -minline-int-divide-max-throughput
9911           Generate code for inline divides of integer values using the
9912           maximum throughput algorithm.
9913
9914       -minline-sqrt-min-latency
9915           Generate code for inline square roots using the minimum latency
9916           algorithm.
9917
9918       -minline-sqrt-max-throughput
9919           Generate code for inline square roots using the maximum throughput
9920           algorithm.
9921
9922       -mno-dwarf2-asm
9923       -mdwarf2-asm
9924           Don't (or do) generate assembler code for the DWARF2 line number
9925           debugging info.  This may be useful when not using the GNU
9926           assembler.
9927
9928       -mearly-stop-bits
9929       -mno-early-stop-bits
9930           Allow stop bits to be placed earlier than immediately preceding the
9931           instruction that triggered the stop bit.  This can improve
9932           instruction scheduling, but does not always do so.
9933
9934       -mfixed-range=register-range
9935           Generate code treating the given register range as fixed registers.
9936           A fixed register is one that the register allocator can not use.
9937           This is useful when compiling kernel code.  A register range is
9938           specified as two registers separated by a dash.  Multiple register
9939           ranges can be specified separated by a comma.
9940
9941       -mtls-size=tls-size
9942           Specify bit size of immediate TLS offsets.  Valid values are 14,
9943           22, and 64.
9944
9945       -mtune=cpu-type
9946           Tune the instruction scheduling for a particular CPU, Valid values
9947           are itanium, itanium1, merced, itanium2, and mckinley.
9948
9949       -mt
9950       -pthread
9951           Add support for multithreading using the POSIX threads library.
9952           This option sets flags for both the preprocessor and linker.  It
9953           does not affect the thread safety of object code produced by the
9954           compiler or that of libraries supplied with it.  These are HP-UX
9955           specific flags.
9956
9957       -milp32
9958       -mlp64
9959           Generate code for a 32-bit or 64-bit environment.  The 32-bit
9960           environment sets int, long and pointer to 32 bits.  The 64-bit
9961           environment sets int to 32 bits and long and pointer to 64 bits.
9962           These are HP-UX specific flags.
9963
9964       -mno-sched-br-data-spec
9965       -msched-br-data-spec
9966           (Dis/En)able data speculative scheduling before reload.  This will
9967           result in generation of the ld.a instructions and the corresponding
9968           check instructions (ld.c / chk.a).  The default is 'disable'.
9969
9970       -msched-ar-data-spec
9971       -mno-sched-ar-data-spec
9972           (En/Dis)able data speculative scheduling after reload.  This will
9973           result in generation of the ld.a instructions and the corresponding
9974           check instructions (ld.c / chk.a).  The default is 'enable'.
9975
9976       -mno-sched-control-spec
9977       -msched-control-spec
9978           (Dis/En)able control speculative scheduling.  This feature is
9979           available only during region scheduling (i.e. before reload).  This
9980           will result in generation of the ld.s instructions and the
9981           corresponding check instructions chk.s .  The default is 'disable'.
9982
9983       -msched-br-in-data-spec
9984       -mno-sched-br-in-data-spec
9985           (En/Dis)able speculative scheduling of the instructions that are
9986           dependent on the data speculative loads before reload.  This is
9987           effective only with -msched-br-data-spec enabled.  The default is
9988           'enable'.
9989
9990       -msched-ar-in-data-spec
9991       -mno-sched-ar-in-data-spec
9992           (En/Dis)able speculative scheduling of the instructions that are
9993           dependent on the data speculative loads after reload.  This is
9994           effective only with -msched-ar-data-spec enabled.  The default is
9995           'enable'.
9996
9997       -msched-in-control-spec
9998       -mno-sched-in-control-spec
9999           (En/Dis)able speculative scheduling of the instructions that are
10000           dependent on the control speculative loads.  This is effective only
10001           with -msched-control-spec enabled.  The default is 'enable'.
10002
10003       -msched-ldc
10004       -mno-sched-ldc
10005           (En/Dis)able use of simple data speculation checks ld.c .  If
10006           disabled, only chk.a instructions will be emitted to check data
10007           speculative loads.  The default is 'enable'.
10008
10009       -mno-sched-control-ldc
10010       -msched-control-ldc
10011           (Dis/En)able use of ld.c instructions to check control speculative
10012           loads.  If enabled, in case of control speculative load with no
10013           speculatively scheduled dependent instructions this load will be
10014           emitted as ld.sa and ld.c will be used to check it.  The default is
10015           'disable'.
10016
10017       -mno-sched-spec-verbose
10018       -msched-spec-verbose
10019           (Dis/En)able printing of the information about speculative motions.
10020
10021       -mno-sched-prefer-non-data-spec-insns
10022       -msched-prefer-non-data-spec-insns
10023           If enabled, data speculative instructions will be chosen for
10024           schedule only if there are no other choices at the moment.  This
10025           will make the use of the data speculation much more conservative.
10026           The default is 'disable'.
10027
10028       -mno-sched-prefer-non-control-spec-insns
10029       -msched-prefer-non-control-spec-insns
10030           If enabled, control speculative instructions will be chosen for
10031           schedule only if there are no other choices at the moment.  This
10032           will make the use of the control speculation much more
10033           conservative.  The default is 'disable'.
10034
10035       -mno-sched-count-spec-in-critical-path
10036       -msched-count-spec-in-critical-path
10037           If enabled, speculative dependencies will be considered during
10038           computation of the instructions priorities.  This will make the use
10039           of the speculation a bit more conservative.  The default is
10040           'disable'.
10041
10042   M32C Options
10043       -mcpu=name
10044           Select the CPU for which code is generated.  name may be one of r8c
10045           for the R8C/Tiny series, m16c for the M16C (up to /60) series,
10046           m32cm for the M16C/80 series, or m32c for the M32C/80 series.
10047
10048       -msim
10049           Specifies that the program will be run on the simulator.  This
10050           causes an alternate runtime library to be linked in which supports,
10051           for example, file I/O.  You must not use this option when
10052           generating programs that will run on real hardware; you must
10053           provide your own runtime library for whatever I/O functions are
10054           needed.
10055
10056       -memregs=number
10057           Specifies the number of memory-based pseudo-registers GCC will use
10058           during code generation.  These pseudo-registers will be used like
10059           real registers, so there is a tradeoff between GCC's ability to fit
10060           the code into available registers, and the performance penalty of
10061           using memory instead of registers.  Note that all modules in a
10062           program must be compiled with the same value for this option.
10063           Because of that, you must not use this option with the default
10064           runtime libraries gcc builds.
10065
10066   M32R/D Options
10067       These -m options are defined for Renesas M32R/D architectures:
10068
10069       -m32r2
10070           Generate code for the M32R/2.
10071
10072       -m32rx
10073           Generate code for the M32R/X.
10074
10075       -m32r
10076           Generate code for the M32R.  This is the default.
10077
10078       -mmodel=small
10079           Assume all objects live in the lower 16MB of memory (so that their
10080           addresses can be loaded with the "ld24" instruction), and assume
10081           all subroutines are reachable with the "bl" instruction.  This is
10082           the default.
10083
10084           The addressability of a particular object can be set with the
10085           "model" attribute.
10086
10087       -mmodel=medium
10088           Assume objects may be anywhere in the 32-bit address space (the
10089           compiler will generate "seth/add3" instructions to load their
10090           addresses), and assume all subroutines are reachable with the "bl"
10091           instruction.
10092
10093       -mmodel=large
10094           Assume objects may be anywhere in the 32-bit address space (the
10095           compiler will generate "seth/add3" instructions to load their
10096           addresses), and assume subroutines may not be reachable with the
10097           "bl" instruction (the compiler will generate the much slower
10098           "seth/add3/jl" instruction sequence).
10099
10100       -msdata=none
10101           Disable use of the small data area.  Variables will be put into one
10102           of .data, bss, or .rodata (unless the "section" attribute has been
10103           specified).  This is the default.
10104
10105           The small data area consists of sections .sdata and .sbss.  Objects
10106           may be explicitly put in the small data area with the "section"
10107           attribute using one of these sections.
10108
10109       -msdata=sdata
10110           Put small global and static data in the small data area, but do not
10111           generate special code to reference them.
10112
10113       -msdata=use
10114           Put small global and static data in the small data area, and
10115           generate special instructions to reference them.
10116
10117       -G num
10118           Put global and static objects less than or equal to num bytes into
10119           the small data or bss sections instead of the normal data or bss
10120           sections.  The default value of num is 8.  The -msdata option must
10121           be set to one of sdata or use for this option to have any effect.
10122
10123           All modules should be compiled with the same -G num value.
10124           Compiling with different values of num may or may not work; if it
10125           doesn't the linker will give an error message---incorrect code will
10126           not be generated.
10127
10128       -mdebug
10129           Makes the M32R specific code in the compiler display some
10130           statistics that might help in debugging programs.
10131
10132       -malign-loops
10133           Align all loops to a 32-byte boundary.
10134
10135       -mno-align-loops
10136           Do not enforce a 32-byte alignment for loops.  This is the default.
10137
10138       -missue-rate=number
10139           Issue number instructions per cycle.  number can only be 1 or 2.
10140
10141       -mbranch-cost=number
10142           number can only be 1 or 2.  If it is 1 then branches will be
10143           preferred over conditional code, if it is 2, then the opposite will
10144           apply.
10145
10146       -mflush-trap=number
10147           Specifies the trap number to use to flush the cache.  The default
10148           is 12.  Valid numbers are between 0 and 15 inclusive.
10149
10150       -mno-flush-trap
10151           Specifies that the cache cannot be flushed by using a trap.
10152
10153       -mflush-func=name
10154           Specifies the name of the operating system function to call to
10155           flush the cache.  The default is _flush_cache, but a function call
10156           will only be used if a trap is not available.
10157
10158       -mno-flush-func
10159           Indicates that there is no OS function for flushing the cache.
10160
10161   M680x0 Options
10162       These are the -m options defined for M680x0 and ColdFire processors.
10163       The default settings depend on which architecture was selected when the
10164       compiler was configured; the defaults for the most common choices are
10165       given below.
10166
10167       -march=arch
10168           Generate code for a specific M680x0 or ColdFire instruction set
10169           architecture.  Permissible values of arch for M680x0 architectures
10170           are: 68000, 68010, 68020, 68030, 68040, 68060 and cpu32.  ColdFire
10171           architectures are selected according to Freescale's ISA
10172           classification and the permissible values are: isaa, isaaplus, isab
10173           and isac.
10174
10175           gcc defines a macro __mcfarch__ whenever it is generating code for
10176           a ColdFire target.  The arch in this macro is one of the -march
10177           arguments given above.
10178
10179           When used together, -march and -mtune select code that runs on a
10180           family of similar processors but that is optimized for a particular
10181           microarchitecture.
10182
10183       -mcpu=cpu
10184           Generate code for a specific M680x0 or ColdFire processor.  The
10185           M680x0 cpus are: 68000, 68010, 68020, 68030, 68040, 68060, 68302,
10186           68332 and cpu32.  The ColdFire cpus are given by the table below,
10187           which also classifies the CPUs into families:
10188
10189           Family : -mcpu arguments
10190           51qe : 51qe
10191           5206 : 5202 5204 5206
10192           5206e : 5206e
10193           5208 : 5207 5208
10194           5211a : 5210a 5211a
10195           5213 : 5211 5212 5213
10196           5216 : 5214 5216
10197           52235 : 52230 52231 52232 52233 52234 52235
10198           5225 : 5224 5225
10199           5235 : 5232 5233 5234 5235 523x
10200           5249 : 5249
10201           5250 : 5250
10202           5271 : 5270 5271
10203           5272 : 5272
10204           5275 : 5274 5275
10205           5282 : 5280 5281 5282 528x
10206           5307 : 5307
10207           5329 : 5327 5328 5329 532x
10208           5373 : 5372 5373 537x
10209           5407 : 5407
10210           5475 : 5470 5471 5472 5473 5474 5475 547x 5480 5481 5482 5483 5484
10211           5485
10212
10213           -mcpu=cpu overrides -march=arch if arch is compatible with cpu.
10214           Other combinations of -mcpu and -march are rejected.
10215
10216           gcc defines the macro __mcf_cpu_cpu when ColdFire target cpu is
10217           selected.  It also defines __mcf_family_family, where the value of
10218           family is given by the table above.
10219
10220       -mtune=tune
10221           Tune the code for a particular microarchitecture, within the
10222           constraints set by -march and -mcpu.  The M680x0 microarchitectures
10223           are: 68000, 68010, 68020, 68030, 68040, 68060 and cpu32.  The
10224           ColdFire microarchitectures are: cfv1, cfv2, cfv3, cfv4 and cfv4e.
10225
10226           You can also use -mtune=68020-40 for code that needs to run
10227           relatively well on 68020, 68030 and 68040 targets.  -mtune=68020-60
10228           is similar but includes 68060 targets as well.  These two options
10229           select the same tuning decisions as -m68020-40 and -m68020-60
10230           respectively.
10231
10232           gcc defines the macros __mcarch and __mcarch__ when tuning for
10233           680x0 architecture arch.  It also defines mcarch unless either
10234           -ansi or a non-GNU -std option is used.  If gcc is tuning for a
10235           range of architectures, as selected by -mtune=68020-40 or
10236           -mtune=68020-60, it defines the macros for every architecture in
10237           the range.
10238
10239           gcc also defines the macro __muarch__ when tuning for ColdFire
10240           microarchitecture uarch, where uarch is one of the arguments given
10241           above.
10242
10243       -m68000
10244       -mc68000
10245           Generate output for a 68000.  This is the default when the compiler
10246           is configured for 68000-based systems.  It is equivalent to
10247           -march=68000.
10248
10249           Use this option for microcontrollers with a 68000 or EC000 core,
10250           including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
10251
10252       -m68010
10253           Generate output for a 68010.  This is the default when the compiler
10254           is configured for 68010-based systems.  It is equivalent to
10255           -march=68010.
10256
10257       -m68020
10258       -mc68020
10259           Generate output for a 68020.  This is the default when the compiler
10260           is configured for 68020-based systems.  It is equivalent to
10261           -march=68020.
10262
10263       -m68030
10264           Generate output for a 68030.  This is the default when the compiler
10265           is configured for 68030-based systems.  It is equivalent to
10266           -march=68030.
10267
10268       -m68040
10269           Generate output for a 68040.  This is the default when the compiler
10270           is configured for 68040-based systems.  It is equivalent to
10271           -march=68040.
10272
10273           This option inhibits the use of 68881/68882 instructions that have
10274           to be emulated by software on the 68040.  Use this option if your
10275           68040 does not have code to emulate those instructions.
10276
10277       -m68060
10278           Generate output for a 68060.  This is the default when the compiler
10279           is configured for 68060-based systems.  It is equivalent to
10280           -march=68060.
10281
10282           This option inhibits the use of 68020 and 68881/68882 instructions
10283           that have to be emulated by software on the 68060.  Use this option
10284           if your 68060 does not have code to emulate those instructions.
10285
10286       -mcpu32
10287           Generate output for a CPU32.  This is the default when the compiler
10288           is configured for CPU32-based systems.  It is equivalent to
10289           -march=cpu32.
10290
10291           Use this option for microcontrollers with a CPU32 or CPU32+ core,
10292           including the 68330, 68331, 68332, 68333, 68334, 68336, 68340,
10293           68341, 68349 and 68360.
10294
10295       -m5200
10296           Generate output for a 520X ColdFire CPU.  This is the default when
10297           the compiler is configured for 520X-based systems.  It is
10298           equivalent to -mcpu=5206, and is now deprecated in favor of that
10299           option.
10300
10301           Use this option for microcontroller with a 5200 core, including the
10302           MCF5202, MCF5203, MCF5204 and MCF5206.
10303
10304       -m5206e
10305           Generate output for a 5206e ColdFire CPU.  The option is now
10306           deprecated in favor of the equivalent -mcpu=5206e.
10307
10308       -m528x
10309           Generate output for a member of the ColdFire 528X family.  The
10310           option is now deprecated in favor of the equivalent -mcpu=528x.
10311
10312       -m5307
10313           Generate output for a ColdFire 5307 CPU.  The option is now
10314           deprecated in favor of the equivalent -mcpu=5307.
10315
10316       -m5407
10317           Generate output for a ColdFire 5407 CPU.  The option is now
10318           deprecated in favor of the equivalent -mcpu=5407.
10319
10320       -mcfv4e
10321           Generate output for a ColdFire V4e family CPU (e.g. 547x/548x).
10322           This includes use of hardware floating point instructions.  The
10323           option is equivalent to -mcpu=547x, and is now deprecated in favor
10324           of that option.
10325
10326       -m68020-40
10327           Generate output for a 68040, without using any of the new
10328           instructions.  This results in code which can run relatively
10329           efficiently on either a 68020/68881 or a 68030 or a 68040.  The
10330           generated code does use the 68881 instructions that are emulated on
10331           the 68040.
10332
10333           The option is equivalent to -march=68020 -mtune=68020-40.
10334
10335       -m68020-60
10336           Generate output for a 68060, without using any of the new
10337           instructions.  This results in code which can run relatively
10338           efficiently on either a 68020/68881 or a 68030 or a 68040.  The
10339           generated code does use the 68881 instructions that are emulated on
10340           the 68060.
10341
10342           The option is equivalent to -march=68020 -mtune=68020-60.
10343
10344       -mhard-float
10345       -m68881
10346           Generate floating-point instructions.  This is the default for
10347           68020 and above, and for ColdFire devices that have an FPU.  It
10348           defines the macro __HAVE_68881__ on M680x0 targets and __mcffpu__
10349           on ColdFire targets.
10350
10351       -msoft-float
10352           Do not generate floating-point instructions; use library calls
10353           instead.  This is the default for 68000, 68010, and 68832 targets.
10354           It is also the default for ColdFire devices that have no FPU.
10355
10356       -mdiv
10357       -mno-div
10358           Generate (do not generate) ColdFire hardware divide and remainder
10359           instructions.  If -march is used without -mcpu, the default is "on"
10360           for ColdFire architectures and "off" for M680x0 architectures.
10361           Otherwise, the default is taken from the target CPU (either the
10362           default CPU, or the one specified by -mcpu).  For example, the
10363           default is "off" for -mcpu=5206 and "on" for -mcpu=5206e.
10364
10365           gcc defines the macro __mcfhwdiv__ when this option is enabled.
10366
10367       -mshort
10368           Consider type "int" to be 16 bits wide, like "short int".
10369           Additionally, parameters passed on the stack are also aligned to a
10370           16-bit boundary even on targets whose API mandates promotion to
10371           32-bit.
10372
10373       -mno-short
10374           Do not consider type "int" to be 16 bits wide.  This is the
10375           default.
10376
10377       -mnobitfield
10378       -mno-bitfield
10379           Do not use the bit-field instructions.  The -m68000, -mcpu32 and
10380           -m5200 options imply -mnobitfield.
10381
10382       -mbitfield
10383           Do use the bit-field instructions.  The -m68020 option implies
10384           -mbitfield.  This is the default if you use a configuration
10385           designed for a 68020.
10386
10387       -mrtd
10388           Use a different function-calling convention, in which functions
10389           that take a fixed number of arguments return with the "rtd"
10390           instruction, which pops their arguments while returning.  This
10391           saves one instruction in the caller since there is no need to pop
10392           the arguments there.
10393
10394           This calling convention is incompatible with the one normally used
10395           on Unix, so you cannot use it if you need to call libraries
10396           compiled with the Unix compiler.
10397
10398           Also, you must provide function prototypes for all functions that
10399           take variable numbers of arguments (including "printf"); otherwise
10400           incorrect code will be generated for calls to those functions.
10401
10402           In addition, seriously incorrect code will result if you call a
10403           function with too many arguments.  (Normally, extra arguments are
10404           harmlessly ignored.)
10405
10406           The "rtd" instruction is supported by the 68010, 68020, 68030,
10407           68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
10408
10409       -mno-rtd
10410           Do not use the calling conventions selected by -mrtd.  This is the
10411           default.
10412
10413       -malign-int
10414       -mno-align-int
10415           Control whether GCC aligns "int", "long", "long long", "float",
10416           "double", and "long double" variables on a 32-bit boundary
10417           (-malign-int) or a 16-bit boundary (-mno-align-int).  Aligning
10418           variables on 32-bit boundaries produces code that runs somewhat
10419           faster on processors with 32-bit busses at the expense of more
10420           memory.
10421
10422           Warning: if you use the -malign-int switch, GCC will align
10423           structures containing the above types  differently than most
10424           published application binary interface specifications for the m68k.
10425
10426       -mpcrel
10427           Use the pc-relative addressing mode of the 68000 directly, instead
10428           of using a global offset table.  At present, this option implies
10429           -fpic, allowing at most a 16-bit offset for pc-relative addressing.
10430           -fPIC is not presently supported with -mpcrel, though this could be
10431           supported for 68020 and higher processors.
10432
10433       -mno-strict-align
10434       -mstrict-align
10435           Do not (do) assume that unaligned memory references will be handled
10436           by the system.
10437
10438       -msep-data
10439           Generate code that allows the data segment to be located in a
10440           different area of memory from the text segment.  This allows for
10441           execute in place in an environment without virtual memory
10442           management.  This option implies -fPIC.
10443
10444       -mno-sep-data
10445           Generate code that assumes that the data segment follows the text
10446           segment.  This is the default.
10447
10448       -mid-shared-library
10449           Generate code that supports shared libraries via the library ID
10450           method.  This allows for execute in place and shared libraries in
10451           an environment without virtual memory management.  This option
10452           implies -fPIC.
10453
10454       -mno-id-shared-library
10455           Generate code that doesn't assume ID based shared libraries are
10456           being used.  This is the default.
10457
10458       -mshared-library-id=n
10459           Specified the identification number of the ID based shared library
10460           being compiled.  Specifying a value of 0 will generate more compact
10461           code, specifying other values will force the allocation of that
10462           number to the current library but is no more space or time
10463           efficient than omitting this option.
10464
10465       -mxgot
10466       -mno-xgot
10467           When generating position-independent code for ColdFire, generate
10468           code that works if the GOT has more than 8192 entries.  This code
10469           is larger and slower than code generated without this option.  On
10470           M680x0 processors, this option is not needed; -fPIC suffices.
10471
10472           GCC normally uses a single instruction to load values from the GOT.
10473           While this is relatively efficient, it only works if the GOT is
10474           smaller than about 64k.  Anything larger causes the linker to
10475           report an error such as:
10476
10477                   relocation truncated to fit: R_68K_GOT16O foobar
10478
10479           If this happens, you should recompile your code with -mxgot.  It
10480           should then work with very large GOTs.  However, code generated
10481           with -mxgot is less efficient, since it takes 4 instructions to
10482           fetch the value of a global symbol.
10483
10484           Note that some linkers, including newer versions of the GNU linker,
10485           can create multiple GOTs and sort GOT entries.  If you have such a
10486           linker, you should only need to use -mxgot when compiling a single
10487           object file that accesses more than 8192 GOT entries.  Very few do.
10488
10489           These options have no effect unless GCC is generating position-
10490           independent code.
10491
10492   M68hc1x Options
10493       These are the -m options defined for the 68hc11 and 68hc12
10494       microcontrollers.  The default values for these options depends on
10495       which style of microcontroller was selected when the compiler was
10496       configured; the defaults for the most common choices are given below.
10497
10498       -m6811
10499       -m68hc11
10500           Generate output for a 68HC11.  This is the default when the
10501           compiler is configured for 68HC11-based systems.
10502
10503       -m6812
10504       -m68hc12
10505           Generate output for a 68HC12.  This is the default when the
10506           compiler is configured for 68HC12-based systems.
10507
10508       -m68S12
10509       -m68hcs12
10510           Generate output for a 68HCS12.
10511
10512       -mauto-incdec
10513           Enable the use of 68HC12 pre and post auto-increment and auto-
10514           decrement addressing modes.
10515
10516       -minmax
10517       -nominmax
10518           Enable the use of 68HC12 min and max instructions.
10519
10520       -mlong-calls
10521       -mno-long-calls
10522           Treat all calls as being far away (near).  If calls are assumed to
10523           be far away, the compiler will use the "call" instruction to call a
10524           function and the "rtc" instruction for returning.
10525
10526       -mshort
10527           Consider type "int" to be 16 bits wide, like "short int".
10528
10529       -msoft-reg-count=count
10530           Specify the number of pseudo-soft registers which are used for the
10531           code generation.  The maximum number is 32.  Using more pseudo-soft
10532           register may or may not result in better code depending on the
10533           program.  The default is 4 for 68HC11 and 2 for 68HC12.
10534
10535   MCore Options
10536       These are the -m options defined for the Motorola M*Core processors.
10537
10538       -mhardlit
10539       -mno-hardlit
10540           Inline constants into the code stream if it can be done in two
10541           instructions or less.
10542
10543       -mdiv
10544       -mno-div
10545           Use the divide instruction.  (Enabled by default).
10546
10547       -mrelax-immediate
10548       -mno-relax-immediate
10549           Allow arbitrary sized immediates in bit operations.
10550
10551       -mwide-bitfields
10552       -mno-wide-bitfields
10553           Always treat bit-fields as int-sized.
10554
10555       -m4byte-functions
10556       -mno-4byte-functions
10557           Force all functions to be aligned to a four byte boundary.
10558
10559       -mcallgraph-data
10560       -mno-callgraph-data
10561           Emit callgraph information.
10562
10563       -mslow-bytes
10564       -mno-slow-bytes
10565           Prefer word access when reading byte quantities.
10566
10567       -mlittle-endian
10568       -mbig-endian
10569           Generate code for a little endian target.
10570
10571       -m210
10572       -m340
10573           Generate code for the 210 processor.
10574
10575       -mno-lsim
10576           Assume that run-time support has been provided and so omit the
10577           simulator library (libsim.a) from the linker command line.
10578
10579       -mstack-increment=size
10580           Set the maximum amount for a single stack increment operation.
10581           Large values can increase the speed of programs which contain
10582           functions that need a large amount of stack space, but they can
10583           also trigger a segmentation fault if the stack is extended too
10584           much.  The default value is 0x1000.
10585
10586   MIPS Options
10587       -EB Generate big-endian code.
10588
10589       -EL Generate little-endian code.  This is the default for mips*el-*-*
10590           configurations.
10591
10592       -march=arch
10593           Generate code that will run on arch, which can be the name of a
10594           generic MIPS ISA, or the name of a particular processor.  The ISA
10595           names are: mips1, mips2, mips3, mips4, mips32, mips32r2, mips64 and
10596           mips64r2.  The processor names are: 4kc, 4km, 4kp, 4ksc, 4kec,
10597           4kem, 4kep, 4ksd, 5kc, 5kf, 20kc, 24kc, 24kf2_1, 24kf1_1, 24kec,
10598           24kef2_1, 24kef1_1, 34kc, 34kf2_1, 34kf1_1, 74kc, 74kf2_1, 74kf1_1,
10599           74kf3_2, loongson2e, loongson2f, m4k, octeon, orion, r2000, r3000,
10600           r3900, r4000, r4400, r4600, r4650, r6000, r8000, rm7000, rm9000,
10601           r10000, r12000, r14000, r16000, sb1, sr71000, vr4100, vr4111,
10602           vr4120, vr4130, vr4300, vr5000, vr5400, vr5500 and xlr.  The
10603           special value from-abi selects the most compatible architecture for
10604           the selected ABI (that is, mips1 for 32-bit ABIs and mips3 for
10605           64-bit ABIs).
10606
10607           Native Linux/GNU toolchains also support the value native, which
10608           selects the best architecture option for the host processor.
10609           -march=native has no effect if GCC does not recognize the
10610           processor.
10611
10612           In processor names, a final 000 can be abbreviated as k (for
10613           example, -march=r2k).  Prefixes are optional, and vr may be written
10614           r.
10615
10616           Names of the form nf2_1 refer to processors with FPUs clocked at
10617           half the rate of the core, names of the form nf1_1 refer to
10618           processors with FPUs clocked at the same rate as the core, and
10619           names of the form nf3_2 refer to processors with FPUs clocked a
10620           ratio of 3:2 with respect to the core.  For compatibility reasons,
10621           nf is accepted as a synonym for nf2_1 while nx and bfx are accepted
10622           as synonyms for nf1_1.
10623
10624           GCC defines two macros based on the value of this option.  The
10625           first is _MIPS_ARCH, which gives the name of target architecture,
10626           as a string.  The second has the form _MIPS_ARCH_foo, where foo is
10627           the capitalized value of _MIPS_ARCH.  For example, -march=r2000
10628           will set _MIPS_ARCH to "r2000" and define the macro
10629           _MIPS_ARCH_R2000.
10630
10631           Note that the _MIPS_ARCH macro uses the processor names given
10632           above.  In other words, it will have the full prefix and will not
10633           abbreviate 000 as k.  In the case of from-abi, the macro names the
10634           resolved architecture (either "mips1" or "mips3").  It names the
10635           default architecture when no -march option is given.
10636
10637       -mtune=arch
10638           Optimize for arch.  Among other things, this option controls the
10639           way instructions are scheduled, and the perceived cost of
10640           arithmetic operations.  The list of arch values is the same as for
10641           -march.
10642
10643           When this option is not used, GCC will optimize for the processor
10644           specified by -march.  By using -march and -mtune together, it is
10645           possible to generate code that will run on a family of processors,
10646           but optimize the code for one particular member of that family.
10647
10648           -mtune defines the macros _MIPS_TUNE and _MIPS_TUNE_foo, which work
10649           in the same way as the -march ones described above.
10650
10651       -mips1
10652           Equivalent to -march=mips1.
10653
10654       -mips2
10655           Equivalent to -march=mips2.
10656
10657       -mips3
10658           Equivalent to -march=mips3.
10659
10660       -mips4
10661           Equivalent to -march=mips4.
10662
10663       -mips32
10664           Equivalent to -march=mips32.
10665
10666       -mips32r2
10667           Equivalent to -march=mips32r2.
10668
10669       -mips64
10670           Equivalent to -march=mips64.
10671
10672       -mips64r2
10673           Equivalent to -march=mips64r2.
10674
10675       -mips16
10676       -mno-mips16
10677           Generate (do not generate) MIPS16 code.  If GCC is targetting a
10678           MIPS32 or MIPS64 architecture, it will make use of the MIPS16e ASE.
10679
10680           MIPS16 code generation can also be controlled on a per-function
10681           basis by means of "mips16" and "nomips16" attributes.
10682
10683       -mflip-mips16
10684           Generate MIPS16 code on alternating functions.  This option is
10685           provided for regression testing of mixed MIPS16/non-MIPS16 code
10686           generation, and is not intended for ordinary use in compiling user
10687           code.
10688
10689       -minterlink-mips16
10690       -mno-interlink-mips16
10691           Require (do not require) that non-MIPS16 code be link-compatible
10692           with MIPS16 code.
10693
10694           For example, non-MIPS16 code cannot jump directly to MIPS16 code;
10695           it must either use a call or an indirect jump.  -minterlink-mips16
10696           therefore disables direct jumps unless GCC knows that the target of
10697           the jump is not MIPS16.
10698
10699       -mabi=32
10700       -mabi=o64
10701       -mabi=n32
10702       -mabi=64
10703       -mabi=eabi
10704           Generate code for the given ABI.
10705
10706           Note that the EABI has a 32-bit and a 64-bit variant.  GCC normally
10707           generates 64-bit code when you select a 64-bit architecture, but
10708           you can use -mgp32 to get 32-bit code instead.
10709
10710           For information about the O64 ABI, see
10711           <http://gcc.gnu.org/projects/mipso64-abi.html>.
10712
10713           GCC supports a variant of the o32 ABI in which floating-point
10714           registers are 64 rather than 32 bits wide.  You can select this
10715           combination with -mabi=32 -mfp64.  This ABI relies on the mthc1 and
10716           mfhc1 instructions and is therefore only supported for MIPS32R2
10717           processors.
10718
10719           The register assignments for arguments and return values remain the
10720           same, but each scalar value is passed in a single 64-bit register
10721           rather than a pair of 32-bit registers.  For example, scalar
10722           floating-point values are returned in $f0 only, not a $f0/$f1 pair.
10723           The set of call-saved registers also remains the same, but all 64
10724           bits are saved.
10725
10726       -mabicalls
10727       -mno-abicalls
10728           Generate (do not generate) code that is suitable for SVR4-style
10729           dynamic objects.  -mabicalls is the default for SVR4-based systems.
10730
10731       -mshared
10732       -mno-shared
10733           Generate (do not generate) code that is fully position-independent,
10734           and that can therefore be linked into shared libraries.  This
10735           option only affects -mabicalls.
10736
10737           All -mabicalls code has traditionally been position-independent,
10738           regardless of options like -fPIC and -fpic.  However, as an
10739           extension, the GNU toolchain allows executables to use absolute
10740           accesses for locally-binding symbols.  It can also use shorter GP
10741           initialization sequences and generate direct calls to locally-
10742           defined functions.  This mode is selected by -mno-shared.
10743
10744           -mno-shared depends on binutils 2.16 or higher and generates
10745           objects that can only be linked by the GNU linker.  However, the
10746           option does not affect the ABI of the final executable; it only
10747           affects the ABI of relocatable objects.  Using -mno-shared will
10748           generally make executables both smaller and quicker.
10749
10750           -mshared is the default.
10751
10752       -mplt
10753       -mno-plt
10754           Assume (do not assume) that the static and dynamic linkers support
10755           PLTs and copy relocations.  This option only affects -mno-shared
10756           -mabicalls.  For the n64 ABI, this option has no effect without
10757           -msym32.
10758
10759           You can make -mplt the default by configuring GCC with
10760           --with-mips-plt.  The default is -mno-plt otherwise.
10761
10762       -mxgot
10763       -mno-xgot
10764           Lift (do not lift) the usual restrictions on the size of the global
10765           offset table.
10766
10767           GCC normally uses a single instruction to load values from the GOT.
10768           While this is relatively efficient, it will only work if the GOT is
10769           smaller than about 64k.  Anything larger will cause the linker to
10770           report an error such as:
10771
10772                   relocation truncated to fit: R_MIPS_GOT16 foobar
10773
10774           If this happens, you should recompile your code with -mxgot.  It
10775           should then work with very large GOTs, although it will also be
10776           less efficient, since it will take three instructions to fetch the
10777           value of a global symbol.
10778
10779           Note that some linkers can create multiple GOTs.  If you have such
10780           a linker, you should only need to use -mxgot when a single object
10781           file accesses more than 64k's worth of GOT entries.  Very few do.
10782
10783           These options have no effect unless GCC is generating position
10784           independent code.
10785
10786       -mgp32
10787           Assume that general-purpose registers are 32 bits wide.
10788
10789       -mgp64
10790           Assume that general-purpose registers are 64 bits wide.
10791
10792       -mfp32
10793           Assume that floating-point registers are 32 bits wide.
10794
10795       -mfp64
10796           Assume that floating-point registers are 64 bits wide.
10797
10798       -mhard-float
10799           Use floating-point coprocessor instructions.
10800
10801       -msoft-float
10802           Do not use floating-point coprocessor instructions.  Implement
10803           floating-point calculations using library calls instead.
10804
10805       -msingle-float
10806           Assume that the floating-point coprocessor only supports single-
10807           precision operations.
10808
10809       -mdouble-float
10810           Assume that the floating-point coprocessor supports double-
10811           precision operations.  This is the default.
10812
10813       -mllsc
10814       -mno-llsc
10815           Use (do not use) ll, sc, and sync instructions to implement atomic
10816           memory built-in functions.  When neither option is specified, GCC
10817           will use the instructions if the target architecture supports them.
10818
10819           -mllsc is useful if the runtime environment can emulate the
10820           instructions and -mno-llsc can be useful when compiling for
10821           nonstandard ISAs.  You can make either option the default by
10822           configuring GCC with --with-llsc and --without-llsc respectively.
10823           --with-llsc is the default for some configurations; see the
10824           installation documentation for details.
10825
10826       -mdsp
10827       -mno-dsp
10828           Use (do not use) revision 1 of the MIPS DSP ASE.
10829             This option defines the preprocessor macro __mips_dsp.  It also
10830           defines __mips_dsp_rev to 1.
10831
10832       -mdspr2
10833       -mno-dspr2
10834           Use (do not use) revision 2 of the MIPS DSP ASE.
10835             This option defines the preprocessor macros __mips_dsp and
10836           __mips_dspr2.  It also defines __mips_dsp_rev to 2.
10837
10838       -msmartmips
10839       -mno-smartmips
10840           Use (do not use) the MIPS SmartMIPS ASE.
10841
10842       -mpaired-single
10843       -mno-paired-single
10844           Use (do not use) paired-single floating-point instructions.
10845             This option requires hardware floating-point support to be
10846           enabled.
10847
10848       -mdmx
10849       -mno-mdmx
10850           Use (do not use) MIPS Digital Media Extension instructions.  This
10851           option can only be used when generating 64-bit code and requires
10852           hardware floating-point support to be enabled.
10853
10854       -mips3d
10855       -mno-mips3d
10856           Use (do not use) the MIPS-3D ASE.  The option -mips3d implies
10857           -mpaired-single.
10858
10859       -mmt
10860       -mno-mt
10861           Use (do not use) MT Multithreading instructions.
10862
10863       -mlong64
10864           Force "long" types to be 64 bits wide.  See -mlong32 for an
10865           explanation of the default and the way that the pointer size is
10866           determined.
10867
10868       -mlong32
10869           Force "long", "int", and pointer types to be 32 bits wide.
10870
10871           The default size of "int"s, "long"s and pointers depends on the
10872           ABI.  All the supported ABIs use 32-bit "int"s.  The n64 ABI uses
10873           64-bit "long"s, as does the 64-bit EABI; the others use 32-bit
10874           "long"s.  Pointers are the same size as "long"s, or the same size
10875           as integer registers, whichever is smaller.
10876
10877       -msym32
10878       -mno-sym32
10879           Assume (do not assume) that all symbols have 32-bit values,
10880           regardless of the selected ABI.  This option is useful in
10881           combination with -mabi=64 and -mno-abicalls because it allows GCC
10882           to generate shorter and faster references to symbolic addresses.
10883
10884       -G num
10885           Put definitions of externally-visible data in a small data section
10886           if that data is no bigger than num bytes.  GCC can then access the
10887           data more efficiently; see -mgpopt for details.
10888
10889           The default -G option depends on the configuration.
10890
10891       -mlocal-sdata
10892       -mno-local-sdata
10893           Extend (do not extend) the -G behavior to local data too, such as
10894           to static variables in C.  -mlocal-sdata is the default for all
10895           configurations.
10896
10897           If the linker complains that an application is using too much small
10898           data, you might want to try rebuilding the less performance-
10899           critical parts with -mno-local-sdata.  You might also want to build
10900           large libraries with -mno-local-sdata, so that the libraries leave
10901           more room for the main program.
10902
10903       -mextern-sdata
10904       -mno-extern-sdata
10905           Assume (do not assume) that externally-defined data will be in a
10906           small data section if that data is within the -G limit.
10907           -mextern-sdata is the default for all configurations.
10908
10909           If you compile a module Mod with -mextern-sdata -G num -mgpopt, and
10910           Mod references a variable Var that is no bigger than num bytes, you
10911           must make sure that Var is placed in a small data section.  If Var
10912           is defined by another module, you must either compile that module
10913           with a high-enough -G setting or attach a "section" attribute to
10914           Var's definition.  If Var is common, you must link the application
10915           with a high-enough -G setting.
10916
10917           The easiest way of satisfying these restrictions is to compile and
10918           link every module with the same -G option.  However, you may wish
10919           to build a library that supports several different small data
10920           limits.  You can do this by compiling the library with the highest
10921           supported -G setting and additionally using -mno-extern-sdata to
10922           stop the library from making assumptions about externally-defined
10923           data.
10924
10925       -mgpopt
10926       -mno-gpopt
10927           Use (do not use) GP-relative accesses for symbols that are known to
10928           be in a small data section; see -G, -mlocal-sdata and
10929           -mextern-sdata.  -mgpopt is the default for all configurations.
10930
10931           -mno-gpopt is useful for cases where the $gp register might not
10932           hold the value of "_gp".  For example, if the code is part of a
10933           library that might be used in a boot monitor, programs that call
10934           boot monitor routines will pass an unknown value in $gp.  (In such
10935           situations, the boot monitor itself would usually be compiled with
10936           -G0.)
10937
10938           -mno-gpopt implies -mno-local-sdata and -mno-extern-sdata.
10939
10940       -membedded-data
10941       -mno-embedded-data
10942           Allocate variables to the read-only data section first if possible,
10943           then next in the small data section if possible, otherwise in data.
10944           This gives slightly slower code than the default, but reduces the
10945           amount of RAM required when executing, and thus may be preferred
10946           for some embedded systems.
10947
10948       -muninit-const-in-rodata
10949       -mno-uninit-const-in-rodata
10950           Put uninitialized "const" variables in the read-only data section.
10951           This option is only meaningful in conjunction with -membedded-data.
10952
10953       -mcode-readable=setting
10954           Specify whether GCC may generate code that reads from executable
10955           sections.  There are three possible settings:
10956
10957           -mcode-readable=yes
10958               Instructions may freely access executable sections.  This is
10959               the default setting.
10960
10961           -mcode-readable=pcrel
10962               MIPS16 PC-relative load instructions can access executable
10963               sections, but other instructions must not do so.  This option
10964               is useful on 4KSc and 4KSd processors when the code TLBs have
10965               the Read Inhibit bit set.  It is also useful on processors that
10966               can be configured to have a dual instruction/data SRAM
10967               interface and that, like the M4K, automatically redirect PC-
10968               relative loads to the instruction RAM.
10969
10970           -mcode-readable=no
10971               Instructions must not access executable sections.  This option
10972               can be useful on targets that are configured to have a dual
10973               instruction/data SRAM interface but that (unlike the M4K) do
10974               not automatically redirect PC-relative loads to the instruction
10975               RAM.
10976
10977       -msplit-addresses
10978       -mno-split-addresses
10979           Enable (disable) use of the "%hi()" and "%lo()" assembler
10980           relocation operators.  This option has been superseded by
10981           -mexplicit-relocs but is retained for backwards compatibility.
10982
10983       -mexplicit-relocs
10984       -mno-explicit-relocs
10985           Use (do not use) assembler relocation operators when dealing with
10986           symbolic addresses.  The alternative, selected by
10987           -mno-explicit-relocs, is to use assembler macros instead.
10988
10989           -mexplicit-relocs is the default if GCC was configured to use an
10990           assembler that supports relocation operators.
10991
10992       -mcheck-zero-division
10993       -mno-check-zero-division
10994           Trap (do not trap) on integer division by zero.
10995
10996           The default is -mcheck-zero-division.
10997
10998       -mdivide-traps
10999       -mdivide-breaks
11000           MIPS systems check for division by zero by generating either a
11001           conditional trap or a break instruction.  Using traps results in
11002           smaller code, but is only supported on MIPS II and later.  Also,
11003           some versions of the Linux kernel have a bug that prevents trap
11004           from generating the proper signal ("SIGFPE").  Use -mdivide-traps
11005           to allow conditional traps on architectures that support them and
11006           -mdivide-breaks to force the use of breaks.
11007
11008           The default is usually -mdivide-traps, but this can be overridden
11009           at configure time using --with-divide=breaks.  Divide-by-zero
11010           checks can be completely disabled using -mno-check-zero-division.
11011
11012       -mmemcpy
11013       -mno-memcpy
11014           Force (do not force) the use of "memcpy()" for non-trivial block
11015           moves.  The default is -mno-memcpy, which allows GCC to inline most
11016           constant-sized copies.
11017
11018       -mlong-calls
11019       -mno-long-calls
11020           Disable (do not disable) use of the "jal" instruction.  Calling
11021           functions using "jal" is more efficient but requires the caller and
11022           callee to be in the same 256 megabyte segment.
11023
11024           This option has no effect on abicalls code.  The default is
11025           -mno-long-calls.
11026
11027       -mmad
11028       -mno-mad
11029           Enable (disable) use of the "mad", "madu" and "mul" instructions,
11030           as provided by the R4650 ISA.
11031
11032       -mfused-madd
11033       -mno-fused-madd
11034           Enable (disable) use of the floating point multiply-accumulate
11035           instructions, when they are available.  The default is
11036           -mfused-madd.
11037
11038           When multiply-accumulate instructions are used, the intermediate
11039           product is calculated to infinite precision and is not subject to
11040           the FCSR Flush to Zero bit.  This may be undesirable in some
11041           circumstances.
11042
11043       -nocpp
11044           Tell the MIPS assembler to not run its preprocessor over user
11045           assembler files (with a .s suffix) when assembling them.
11046
11047       -mfix-r4000
11048       -mno-fix-r4000
11049           Work around certain R4000 CPU errata:
11050
11051           -   A double-word or a variable shift may give an incorrect result
11052               if executed immediately after starting an integer division.
11053
11054           -   A double-word or a variable shift may give an incorrect result
11055               if executed while an integer multiplication is in progress.
11056
11057           -   An integer division may give an incorrect result if started in
11058               a delay slot of a taken branch or a jump.
11059
11060       -mfix-r4400
11061       -mno-fix-r4400
11062           Work around certain R4400 CPU errata:
11063
11064           -   A double-word or a variable shift may give an incorrect result
11065               if executed immediately after starting an integer division.
11066
11067       -mfix-r10000
11068       -mno-fix-r10000
11069           Work around certain R10000 errata:
11070
11071           -   "ll"/"sc" sequences may not behave atomically on revisions
11072               prior to 3.0.  They may deadlock on revisions 2.6 and earlier.
11073
11074           This option can only be used if the target architecture supports
11075           branch-likely instructions.  -mfix-r10000 is the default when
11076           -march=r10000 is used; -mno-fix-r10000 is the default otherwise.
11077
11078       -mfix-vr4120
11079       -mno-fix-vr4120
11080           Work around certain VR4120 errata:
11081
11082           -   "dmultu" does not always produce the correct result.
11083
11084           -   "div" and "ddiv" do not always produce the correct result if
11085               one of the operands is negative.
11086
11087           The workarounds for the division errata rely on special functions
11088           in libgcc.a.  At present, these functions are only provided by the
11089           "mips64vr*-elf" configurations.
11090
11091           Other VR4120 errata require a nop to be inserted between certain
11092           pairs of instructions.  These errata are handled by the assembler,
11093           not by GCC itself.
11094
11095       -mfix-vr4130
11096           Work around the VR4130 "mflo"/"mfhi" errata.  The workarounds are
11097           implemented by the assembler rather than by GCC, although GCC will
11098           avoid using "mflo" and "mfhi" if the VR4130 "macc", "macchi",
11099           "dmacc" and "dmacchi" instructions are available instead.
11100
11101       -mfix-sb1
11102       -mno-fix-sb1
11103           Work around certain SB-1 CPU core errata.  (This flag currently
11104           works around the SB-1 revision 2 "F1" and "F2" floating point
11105           errata.)
11106
11107       -mr10k-cache-barrier=setting
11108           Specify whether GCC should insert cache barriers to avoid the side-
11109           effects of speculation on R10K processors.
11110
11111           In common with many processors, the R10K tries to predict the
11112           outcome of a conditional branch and speculatively executes
11113           instructions from the "taken" branch.  It later aborts these
11114           instructions if the predicted outcome was wrong.  However, on the
11115           R10K, even aborted instructions can have side effects.
11116
11117           This problem only affects kernel stores and, depending on the
11118           system, kernel loads.  As an example, a speculatively-executed
11119           store may load the target memory into cache and mark the cache line
11120           as dirty, even if the store itself is later aborted.  If a DMA
11121           operation writes to the same area of memory before the "dirty" line
11122           is flushed, the cached data will overwrite the DMA-ed data.  See
11123           the R10K processor manual for a full description, including other
11124           potential problems.
11125
11126           One workaround is to insert cache barrier instructions before every
11127           memory access that might be speculatively executed and that might
11128           have side effects even if aborted.  -mr10k-cache-barrier=setting
11129           controls GCC's implementation of this workaround.  It assumes that
11130           aborted accesses to any byte in the following regions will not have
11131           side effects:
11132
11133           1.  the memory occupied by the current function's stack frame;
11134
11135           2.  the memory occupied by an incoming stack argument;
11136
11137           3.  the memory occupied by an object with a link-time-constant
11138               address.
11139
11140           It is the kernel's responsibility to ensure that speculative
11141           accesses to these regions are indeed safe.
11142
11143           If the input program contains a function declaration such as:
11144
11145                   void foo (void);
11146
11147           then the implementation of "foo" must allow "j foo" and "jal foo"
11148           to be executed speculatively.  GCC honors this restriction for
11149           functions it compiles itself.  It expects non-GCC functions (such
11150           as hand-written assembly code) to do the same.
11151
11152           The option has three forms:
11153
11154           -mr10k-cache-barrier=load-store
11155               Insert a cache barrier before a load or store that might be
11156               speculatively executed and that might have side effects even if
11157               aborted.
11158
11159           -mr10k-cache-barrier=store
11160               Insert a cache barrier before a store that might be
11161               speculatively executed and that might have side effects even if
11162               aborted.
11163
11164           -mr10k-cache-barrier=none
11165               Disable the insertion of cache barriers.  This is the default
11166               setting.
11167
11168       -mflush-func=func
11169       -mno-flush-func
11170           Specifies the function to call to flush the I and D caches, or to
11171           not call any such function.  If called, the function must take the
11172           same arguments as the common "_flush_func()", that is, the address
11173           of the memory range for which the cache is being flushed, the size
11174           of the memory range, and the number 3 (to flush both caches).  The
11175           default depends on the target GCC was configured for, but commonly
11176           is either _flush_func or __cpu_flush.
11177
11178       mbranch-cost=num
11179           Set the cost of branches to roughly num "simple" instructions.
11180           This cost is only a heuristic and is not guaranteed to produce
11181           consistent results across releases.  A zero cost redundantly
11182           selects the default, which is based on the -mtune setting.
11183
11184       -mbranch-likely
11185       -mno-branch-likely
11186           Enable or disable use of Branch Likely instructions, regardless of
11187           the default for the selected architecture.  By default, Branch
11188           Likely instructions may be generated if they are supported by the
11189           selected architecture.  An exception is for the MIPS32 and MIPS64
11190           architectures and processors which implement those architectures;
11191           for those, Branch Likely instructions will not be generated by
11192           default because the MIPS32 and MIPS64 architectures specifically
11193           deprecate their use.
11194
11195       -mfp-exceptions
11196       -mno-fp-exceptions
11197           Specifies whether FP exceptions are enabled.  This affects how we
11198           schedule FP instructions for some processors.  The default is that
11199           FP exceptions are enabled.
11200
11201           For instance, on the SB-1, if FP exceptions are disabled, and we
11202           are emitting 64-bit code, then we can use both FP pipes.
11203           Otherwise, we can only use one FP pipe.
11204
11205       -mvr4130-align
11206       -mno-vr4130-align
11207           The VR4130 pipeline is two-way superscalar, but can only issue two
11208           instructions together if the first one is 8-byte aligned.  When
11209           this option is enabled, GCC will align pairs of instructions that
11210           it thinks should execute in parallel.
11211
11212           This option only has an effect when optimizing for the VR4130.  It
11213           normally makes code faster, but at the expense of making it bigger.
11214           It is enabled by default at optimization level -O3.
11215
11216   MMIX Options
11217       These options are defined for the MMIX:
11218
11219       -mlibfuncs
11220       -mno-libfuncs
11221           Specify that intrinsic library functions are being compiled,
11222           passing all values in registers, no matter the size.
11223
11224       -mepsilon
11225       -mno-epsilon
11226           Generate floating-point comparison instructions that compare with
11227           respect to the "rE" epsilon register.
11228
11229       -mabi=mmixware
11230       -mabi=gnu
11231           Generate code that passes function parameters and return values
11232           that (in the called function) are seen as registers $0 and up, as
11233           opposed to the GNU ABI which uses global registers $231 and up.
11234
11235       -mzero-extend
11236       -mno-zero-extend
11237           When reading data from memory in sizes shorter than 64 bits, use
11238           (do not use) zero-extending load instructions by default, rather
11239           than sign-extending ones.
11240
11241       -mknuthdiv
11242       -mno-knuthdiv
11243           Make the result of a division yielding a remainder have the same
11244           sign as the divisor.  With the default, -mno-knuthdiv, the sign of
11245           the remainder follows the sign of the dividend.  Both methods are
11246           arithmetically valid, the latter being almost exclusively used.
11247
11248       -mtoplevel-symbols
11249       -mno-toplevel-symbols
11250           Prepend (do not prepend) a : to all global symbols, so the assembly
11251           code can be used with the "PREFIX" assembly directive.
11252
11253       -melf
11254           Generate an executable in the ELF format, rather than the default
11255           mmo format used by the mmix simulator.
11256
11257       -mbranch-predict
11258       -mno-branch-predict
11259           Use (do not use) the probable-branch instructions, when static
11260           branch prediction indicates a probable branch.
11261
11262       -mbase-addresses
11263       -mno-base-addresses
11264           Generate (do not generate) code that uses base addresses.  Using a
11265           base address automatically generates a request (handled by the
11266           assembler and the linker) for a constant to be set up in a global
11267           register.  The register is used for one or more base address
11268           requests within the range 0 to 255 from the value held in the
11269           register.  The generally leads to short and fast code, but the
11270           number of different data items that can be addressed is limited.
11271           This means that a program that uses lots of static data may require
11272           -mno-base-addresses.
11273
11274       -msingle-exit
11275       -mno-single-exit
11276           Force (do not force) generated code to have a single exit point in
11277           each function.
11278
11279   MN10300 Options
11280       These -m options are defined for Matsushita MN10300 architectures:
11281
11282       -mmult-bug
11283           Generate code to avoid bugs in the multiply instructions for the
11284           MN10300 processors.  This is the default.
11285
11286       -mno-mult-bug
11287           Do not generate code to avoid bugs in the multiply instructions for
11288           the MN10300 processors.
11289
11290       -mam33
11291           Generate code which uses features specific to the AM33 processor.
11292
11293       -mno-am33
11294           Do not generate code which uses features specific to the AM33
11295           processor.  This is the default.
11296
11297       -mreturn-pointer-on-d0
11298           When generating a function which returns a pointer, return the
11299           pointer in both "a0" and "d0".  Otherwise, the pointer is returned
11300           only in a0, and attempts to call such functions without a prototype
11301           would result in errors.  Note that this option is on by default;
11302           use -mno-return-pointer-on-d0 to disable it.
11303
11304       -mno-crt0
11305           Do not link in the C run-time initialization object file.
11306
11307       -mrelax
11308           Indicate to the linker that it should perform a relaxation
11309           optimization pass to shorten branches, calls and absolute memory
11310           addresses.  This option only has an effect when used on the command
11311           line for the final link step.
11312
11313           This option makes symbolic debugging impossible.
11314
11315   PDP-11 Options
11316       These options are defined for the PDP-11:
11317
11318       -mfpu
11319           Use hardware FPP floating point.  This is the default.  (FIS
11320           floating point on the PDP-11/40 is not supported.)
11321
11322       -msoft-float
11323           Do not use hardware floating point.
11324
11325       -mac0
11326           Return floating-point results in ac0 (fr0 in Unix assembler
11327           syntax).
11328
11329       -mno-ac0
11330           Return floating-point results in memory.  This is the default.
11331
11332       -m40
11333           Generate code for a PDP-11/40.
11334
11335       -m45
11336           Generate code for a PDP-11/45.  This is the default.
11337
11338       -m10
11339           Generate code for a PDP-11/10.
11340
11341       -mbcopy-builtin
11342           Use inline "movmemhi" patterns for copying memory.  This is the
11343           default.
11344
11345       -mbcopy
11346           Do not use inline "movmemhi" patterns for copying memory.
11347
11348       -mint16
11349       -mno-int32
11350           Use 16-bit "int".  This is the default.
11351
11352       -mint32
11353       -mno-int16
11354           Use 32-bit "int".
11355
11356       -mfloat64
11357       -mno-float32
11358           Use 64-bit "float".  This is the default.
11359
11360       -mfloat32
11361       -mno-float64
11362           Use 32-bit "float".
11363
11364       -mabshi
11365           Use "abshi2" pattern.  This is the default.
11366
11367       -mno-abshi
11368           Do not use "abshi2" pattern.
11369
11370       -mbranch-expensive
11371           Pretend that branches are expensive.  This is for experimenting
11372           with code generation only.
11373
11374       -mbranch-cheap
11375           Do not pretend that branches are expensive.  This is the default.
11376
11377       -msplit
11378           Generate code for a system with split I&D.
11379
11380       -mno-split
11381           Generate code for a system without split I&D.  This is the default.
11382
11383       -munix-asm
11384           Use Unix assembler syntax.  This is the default when configured for
11385           pdp11-*-bsd.
11386
11387       -mdec-asm
11388           Use DEC assembler syntax.  This is the default when configured for
11389           any PDP-11 target other than pdp11-*-bsd.
11390
11391   picoChip Options
11392       These -m options are defined for picoChip implementations:
11393
11394       -mae=ae_type
11395           Set the instruction set, register set, and instruction scheduling
11396           parameters for array element type ae_type.  Supported values for
11397           ae_type are ANY, MUL, and MAC.
11398
11399           -mae=ANY selects a completely generic AE type.  Code generated with
11400           this option will run on any of the other AE types.  The code will
11401           not be as efficient as it would be if compiled for a specific AE
11402           type, and some types of operation (e.g., multiplication) will not
11403           work properly on all types of AE.
11404
11405           -mae=MUL selects a MUL AE type.  This is the most useful AE type
11406           for compiled code, and is the default.
11407
11408           -mae=MAC selects a DSP-style MAC AE.  Code compiled with this
11409           option may suffer from poor performance of byte (char)
11410           manipulation, since the DSP AE does not provide hardware support
11411           for byte load/stores.
11412
11413       -msymbol-as-address
11414           Enable the compiler to directly use a symbol name as an address in
11415           a load/store instruction, without first loading it into a register.
11416           Typically, the use of this option will generate larger programs,
11417           which run faster than when the option isn't used.  However, the
11418           results vary from program to program, so it is left as a user
11419           option, rather than being permanently enabled.
11420
11421       -mno-inefficient-warnings
11422           Disables warnings about the generation of inefficient code.  These
11423           warnings can be generated, for example, when compiling code which
11424           performs byte-level memory operations on the MAC AE type.  The MAC
11425           AE has no hardware support for byte-level memory operations, so all
11426           byte load/stores must be synthesized from word load/store
11427           operations.  This is inefficient and a warning will be generated
11428           indicating to the programmer that they should rewrite the code to
11429           avoid byte operations, or to target an AE type which has the
11430           necessary hardware support.  This option enables the warning to be
11431           turned off.
11432
11433   PowerPC Options
11434       These are listed under
11435
11436   IBM RS/6000 and PowerPC Options
11437       These -m options are defined for the IBM RS/6000 and PowerPC:
11438
11439       -mpower
11440       -mno-power
11441       -mpower2
11442       -mno-power2
11443       -mpowerpc
11444       -mno-powerpc
11445       -mpowerpc-gpopt
11446       -mno-powerpc-gpopt
11447       -mpowerpc-gfxopt
11448       -mno-powerpc-gfxopt
11449       -mpowerpc64
11450       -mno-powerpc64
11451       -mmfcrf
11452       -mno-mfcrf
11453       -mpopcntb
11454       -mno-popcntb
11455       -mpopcntd
11456       -mno-popcntd
11457       -mfprnd
11458       -mno-fprnd
11459       -mcmpb
11460       -mno-cmpb
11461       -mmfpgpr
11462       -mno-mfpgpr
11463       -mhard-dfp
11464       -mno-hard-dfp
11465           GCC supports two related instruction set architectures for the
11466           RS/6000 and PowerPC.  The POWER instruction set are those
11467           instructions supported by the rios chip set used in the original
11468           RS/6000 systems and the PowerPC instruction set is the architecture
11469           of the Freescale MPC5xx, MPC6xx, MPC8xx microprocessors, and the
11470           IBM 4xx, 6xx, and follow-on microprocessors.
11471
11472           Neither architecture is a subset of the other.  However there is a
11473           large common subset of instructions supported by both.  An MQ
11474           register is included in processors supporting the POWER
11475           architecture.
11476
11477           You use these options to specify which instructions are available
11478           on the processor you are using.  The default value of these options
11479           is determined when configuring GCC.  Specifying the -mcpu=cpu_type
11480           overrides the specification of these options.  We recommend you use
11481           the -mcpu=cpu_type option rather than the options listed above.
11482
11483           The -mpower option allows GCC to generate instructions that are
11484           found only in the POWER architecture and to use the MQ register.
11485           Specifying -mpower2 implies -power and also allows GCC to generate
11486           instructions that are present in the POWER2 architecture but not
11487           the original POWER architecture.
11488
11489           The -mpowerpc option allows GCC to generate instructions that are
11490           found only in the 32-bit subset of the PowerPC architecture.
11491           Specifying -mpowerpc-gpopt implies -mpowerpc and also allows GCC to
11492           use the optional PowerPC architecture instructions in the General
11493           Purpose group, including floating-point square root.  Specifying
11494           -mpowerpc-gfxopt implies -mpowerpc and also allows GCC to use the
11495           optional PowerPC architecture instructions in the Graphics group,
11496           including floating-point select.
11497
11498           The -mmfcrf option allows GCC to generate the move from condition
11499           register field instruction implemented on the POWER4 processor and
11500           other processors that support the PowerPC V2.01 architecture.  The
11501           -mpopcntb option allows GCC to generate the popcount and double
11502           precision FP reciprocal estimate instruction implemented on the
11503           POWER5 processor and other processors that support the PowerPC
11504           V2.02 architecture.  The -mpopcntd option allows GCC to generate
11505           the popcount instruction implemented on the POWER7 processor and
11506           other processors that support the PowerPC V2.06 architecture.  The
11507           -mfprnd option allows GCC to generate the FP round to integer
11508           instructions implemented on the POWER5+ processor and other
11509           processors that support the PowerPC V2.03 architecture.  The -mcmpb
11510           option allows GCC to generate the compare bytes instruction
11511           implemented on the POWER6 processor and other processors that
11512           support the PowerPC V2.05 architecture.  The -mmfpgpr option allows
11513           GCC to generate the FP move to/from general purpose register
11514           instructions implemented on the POWER6X processor and other
11515           processors that support the extended PowerPC V2.05 architecture.
11516           The -mhard-dfp option allows GCC to generate the decimal floating
11517           point instructions implemented on some POWER processors.
11518
11519           The -mpowerpc64 option allows GCC to generate the additional 64-bit
11520           instructions that are found in the full PowerPC64 architecture and
11521           to treat GPRs as 64-bit, doubleword quantities.  GCC defaults to
11522           -mno-powerpc64.
11523
11524           If you specify both -mno-power and -mno-powerpc, GCC will use only
11525           the instructions in the common subset of both architectures plus
11526           some special AIX common-mode calls, and will not use the MQ
11527           register.  Specifying both -mpower and -mpowerpc permits GCC to use
11528           any instruction from either architecture and to allow use of the MQ
11529           register; specify this for the Motorola MPC601.
11530
11531       -mnew-mnemonics
11532       -mold-mnemonics
11533           Select which mnemonics to use in the generated assembler code.
11534           With -mnew-mnemonics, GCC uses the assembler mnemonics defined for
11535           the PowerPC architecture.  With -mold-mnemonics it uses the
11536           assembler mnemonics defined for the POWER architecture.
11537           Instructions defined in only one architecture have only one
11538           mnemonic; GCC uses that mnemonic irrespective of which of these
11539           options is specified.
11540
11541           GCC defaults to the mnemonics appropriate for the architecture in
11542           use.  Specifying -mcpu=cpu_type sometimes overrides the value of
11543           these option.  Unless you are building a cross-compiler, you should
11544           normally not specify either -mnew-mnemonics or -mold-mnemonics, but
11545           should instead accept the default.
11546
11547       -mcpu=cpu_type
11548           Set architecture type, register usage, choice of mnemonics, and
11549           instruction scheduling parameters for machine type cpu_type.
11550           Supported values for cpu_type are 401, 403, 405, 405fp, 440, 440fp,
11551           464, 464fp, 505, 601, 602, 603, 603e, 604, 604e, 620, 630, 740,
11552           7400, 7450, 750, 801, 821, 823, 860, 970, 8540, e300c2, e300c3,
11553           e500mc, ec603e, G3, G4, G5, power, power2, power3, power4, power5,
11554           power5+, power6, power6x, power7, common, powerpc, powerpc64, rios,
11555           rios1, rios2, rsc, and rs64.
11556
11557           -mcpu=common selects a completely generic processor.  Code
11558           generated under this option will run on any POWER or PowerPC
11559           processor.  GCC will use only the instructions in the common subset
11560           of both architectures, and will not use the MQ register.  GCC
11561           assumes a generic processor model for scheduling purposes.
11562
11563           -mcpu=power, -mcpu=power2, -mcpu=powerpc, and -mcpu=powerpc64
11564           specify generic POWER, POWER2, pure 32-bit PowerPC (i.e., not
11565           MPC601), and 64-bit PowerPC architecture machine types, with an
11566           appropriate, generic processor model assumed for scheduling
11567           purposes.
11568
11569           The other options specify a specific processor.  Code generated
11570           under those options will run best on that processor, and may not
11571           run at all on others.
11572
11573           The -mcpu options automatically enable or disable the following
11574           options:
11575
11576           -maltivec  -mfprnd  -mhard-float  -mmfcrf  -mmultiple
11577           -mnew-mnemonics  -mpopcntb -mpopcntd  -mpower  -mpower2
11578           -mpowerpc64 -mpowerpc-gpopt  -mpowerpc-gfxopt  -msingle-float
11579           -mdouble-float -msimple-fpu -mstring  -mmulhw  -mdlmzb  -mmfpgpr
11580           -mvsx
11581
11582           The particular options set for any particular CPU will vary between
11583           compiler versions, depending on what setting seems to produce
11584           optimal code for that CPU; it doesn't necessarily reflect the
11585           actual hardware's capabilities.  If you wish to set an individual
11586           option to a particular value, you may specify it after the -mcpu
11587           option, like -mcpu=970 -mno-altivec.
11588
11589           On AIX, the -maltivec and -mpowerpc64 options are not enabled or
11590           disabled by the -mcpu option at present because AIX does not have
11591           full support for these options.  You may still enable or disable
11592           them individually if you're sure it'll work in your environment.
11593
11594       -mtune=cpu_type
11595           Set the instruction scheduling parameters for machine type
11596           cpu_type, but do not set the architecture type, register usage, or
11597           choice of mnemonics, as -mcpu=cpu_type would.  The same values for
11598           cpu_type are used for -mtune as for -mcpu.  If both are specified,
11599           the code generated will use the architecture, registers, and
11600           mnemonics set by -mcpu, but the scheduling parameters set by
11601           -mtune.
11602
11603       -mcmodel=small
11604           Generate PowerPC64 code for the small model: The TOC is limited to
11605           64k.
11606
11607       -mcmodel=medium
11608           Generate PowerPC64 code for the medium model: The TOC and other
11609           static data may be up to a total of 4G in size.
11610
11611       -mcmodel=large
11612           Generate PowerPC64 code for the large model: The TOC may be up to
11613           4G in size.  Other data and code is only limited by the 64-bit
11614           address space.
11615
11616       -mswdiv
11617       -mno-swdiv
11618           Generate code to compute division as reciprocal estimate and
11619           iterative refinement, creating opportunities for increased
11620           throughput.  This feature requires: optional PowerPC Graphics
11621           instruction set for single precision and FRE instruction for double
11622           precision, assuming divides cannot generate user-visible traps, and
11623           the domain values not include Infinities, denormals or zero
11624           denominator.
11625
11626       -maltivec
11627       -mno-altivec
11628           Generate code that uses (does not use) AltiVec instructions, and
11629           also enable the use of built-in functions that allow more direct
11630           access to the AltiVec instruction set.  You may also need to set
11631           -mabi=altivec to adjust the current ABI with AltiVec ABI
11632           enhancements.
11633
11634       -mvrsave
11635       -mno-vrsave
11636           Generate VRSAVE instructions when generating AltiVec code.
11637
11638       -mgen-cell-microcode
11639           Generate Cell microcode instructions
11640
11641       -mwarn-cell-microcode
11642           Warning when a Cell microcode instruction is going to emitted.  An
11643           example of a Cell microcode instruction is a variable shift.
11644
11645       -msecure-plt
11646           Generate code that allows ld and ld.so to build executables and
11647           shared libraries with non-exec .plt and .got sections.  This is a
11648           PowerPC 32-bit SYSV ABI option.
11649
11650       -mbss-plt
11651           Generate code that uses a BSS .plt section that ld.so fills in, and
11652           requires .plt and .got sections that are both writable and
11653           executable.  This is a PowerPC 32-bit SYSV ABI option.
11654
11655       -misel
11656       -mno-isel
11657           This switch enables or disables the generation of ISEL
11658           instructions.
11659
11660       -misel=yes/no
11661           This switch has been deprecated.  Use -misel and -mno-isel instead.
11662
11663       -mspe
11664       -mno-spe
11665           This switch enables or disables the generation of SPE simd
11666           instructions.
11667
11668       -mpaired
11669       -mno-paired
11670           This switch enables or disables the generation of PAIRED simd
11671           instructions.
11672
11673       -mspe=yes/no
11674           This option has been deprecated.  Use -mspe and -mno-spe instead.
11675
11676       -mvsx
11677       -mno-vsx
11678           Generate code that uses (does not use) vector/scalar (VSX)
11679           instructions, and also enable the use of built-in functions that
11680           allow more direct access to the VSX instruction set.
11681
11682       -mfloat-gprs=yes/single/double/no
11683       -mfloat-gprs
11684           This switch enables or disables the generation of floating point
11685           operations on the general purpose registers for architectures that
11686           support it.
11687
11688           The argument yes or single enables the use of single-precision
11689           floating point operations.
11690
11691           The argument double enables the use of single and double-precision
11692           floating point operations.
11693
11694           The argument no disables floating point operations on the general
11695           purpose registers.
11696
11697           This option is currently only available on the MPC854x.
11698
11699       -m32
11700       -m64
11701           Generate code for 32-bit or 64-bit environments of Darwin and SVR4
11702           targets (including GNU/Linux).  The 32-bit environment sets int,
11703           long and pointer to 32 bits and generates code that runs on any
11704           PowerPC variant.  The 64-bit environment sets int to 32 bits and
11705           long and pointer to 64 bits, and generates code for PowerPC64, as
11706           for -mpowerpc64.
11707
11708       -mfull-toc
11709       -mno-fp-in-toc
11710       -mno-sum-in-toc
11711       -mminimal-toc
11712           Modify generation of the TOC (Table Of Contents), which is created
11713           for every executable file.  The -mfull-toc option is selected by
11714           default.  In that case, GCC will allocate at least one TOC entry
11715           for each unique non-automatic variable reference in your program.
11716           GCC will also place floating-point constants in the TOC.  However,
11717           only 16,384 entries are available in the TOC.
11718
11719           If you receive a linker error message that saying you have
11720           overflowed the available TOC space, you can reduce the amount of
11721           TOC space used with the -mno-fp-in-toc and -mno-sum-in-toc options.
11722           -mno-fp-in-toc prevents GCC from putting floating-point constants
11723           in the TOC and -mno-sum-in-toc forces GCC to generate code to
11724           calculate the sum of an address and a constant at run-time instead
11725           of putting that sum into the TOC.  You may specify one or both of
11726           these options.  Each causes GCC to produce very slightly slower and
11727           larger code at the expense of conserving TOC space.
11728
11729           If you still run out of space in the TOC even when you specify both
11730           of these options, specify -mminimal-toc instead.  This option
11731           causes GCC to make only one TOC entry for every file.  When you
11732           specify this option, GCC will produce code that is slower and
11733           larger but which uses extremely little TOC space.  You may wish to
11734           use this option only on files that contain less frequently executed
11735           code.
11736
11737       -maix64
11738       -maix32
11739           Enable 64-bit AIX ABI and calling convention: 64-bit pointers,
11740           64-bit "long" type, and the infrastructure needed to support them.
11741           Specifying -maix64 implies -mpowerpc64 and -mpowerpc, while -maix32
11742           disables the 64-bit ABI and implies -mno-powerpc64.  GCC defaults
11743           to -maix32.
11744
11745       -mxl-compat
11746       -mno-xl-compat
11747           Produce code that conforms more closely to IBM XL compiler
11748           semantics when using AIX-compatible ABI.  Pass floating-point
11749           arguments to prototyped functions beyond the register save area
11750           (RSA) on the stack in addition to argument FPRs.  Do not assume
11751           that most significant double in 128-bit long double value is
11752           properly rounded when comparing values and converting to double.
11753           Use XL symbol names for long double support routines.
11754
11755           The AIX calling convention was extended but not initially
11756           documented to handle an obscure K&R C case of calling a function
11757           that takes the address of its arguments with fewer arguments than
11758           declared.  IBM XL compilers access floating point arguments which
11759           do not fit in the RSA from the stack when a subroutine is compiled
11760           without optimization.  Because always storing floating-point
11761           arguments on the stack is inefficient and rarely needed, this
11762           option is not enabled by default and only is necessary when calling
11763           subroutines compiled by IBM XL compilers without optimization.
11764
11765       -mpe
11766           Support IBM RS/6000 SP Parallel Environment (PE).  Link an
11767           application written to use message passing with special startup
11768           code to enable the application to run.  The system must have PE
11769           installed in the standard location (/usr/lpp/ppe.poe/), or the
11770           specs file must be overridden with the -specs= option to specify
11771           the appropriate directory location.  The Parallel Environment does
11772           not support threads, so the -mpe option and the -pthread option are
11773           incompatible.
11774
11775       -malign-natural
11776       -malign-power
11777           On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
11778           -malign-natural overrides the ABI-defined alignment of larger
11779           types, such as floating-point doubles, on their natural size-based
11780           boundary.  The option -malign-power instructs GCC to follow the
11781           ABI-specified alignment rules.  GCC defaults to the standard
11782           alignment defined in the ABI.
11783
11784           On 64-bit Darwin, natural alignment is the default, and
11785           -malign-power is not supported.
11786
11787       -msoft-float
11788       -mhard-float
11789           Generate code that does not use (uses) the floating-point register
11790           set.  Software floating point emulation is provided if you use the
11791           -msoft-float option, and pass the option to GCC when linking.
11792
11793       -msingle-float
11794       -mdouble-float
11795           Generate code for single or double-precision floating point
11796           operations.  -mdouble-float implies -msingle-float.
11797
11798       -msimple-fpu
11799           Do not generate sqrt and div instructions for hardware floating
11800           point unit.
11801
11802       -mfpu
11803           Specify type of floating point unit.  Valid values are sp_lite
11804           (equivalent to -msingle-float -msimple-fpu), dp_lite (equivalent to
11805           -mdouble-float -msimple-fpu), sp_full (equivalent to
11806           -msingle-float), and dp_full (equivalent to -mdouble-float).
11807
11808       -mxilinx-fpu
11809           Perform optimizations for floating point unit on Xilinx PPC
11810           405/440.
11811
11812       -mmultiple
11813       -mno-multiple
11814           Generate code that uses (does not use) the load multiple word
11815           instructions and the store multiple word instructions.  These
11816           instructions are generated by default on POWER systems, and not
11817           generated on PowerPC systems.  Do not use -mmultiple on little
11818           endian PowerPC systems, since those instructions do not work when
11819           the processor is in little endian mode.  The exceptions are PPC740
11820           and PPC750 which permit the instructions usage in little endian
11821           mode.
11822
11823       -mstring
11824       -mno-string
11825           Generate code that uses (does not use) the load string instructions
11826           and the store string word instructions to save multiple registers
11827           and do small block moves.  These instructions are generated by
11828           default on POWER systems, and not generated on PowerPC systems.  Do
11829           not use -mstring on little endian PowerPC systems, since those
11830           instructions do not work when the processor is in little endian
11831           mode.  The exceptions are PPC740 and PPC750 which permit the
11832           instructions usage in little endian mode.
11833
11834       -mupdate
11835       -mno-update
11836           Generate code that uses (does not use) the load or store
11837           instructions that update the base register to the address of the
11838           calculated memory location.  These instructions are generated by
11839           default.  If you use -mno-update, there is a small window between
11840           the time that the stack pointer is updated and the address of the
11841           previous frame is stored, which means code that walks the stack
11842           frame across interrupts or signals may get corrupted data.
11843
11844       -mavoid-indexed-addresses
11845       -mno-avoid-indexed-addresses
11846           Generate code that tries to avoid (not avoid) the use of indexed
11847           load or store instructions. These instructions can incur a
11848           performance penalty on Power6 processors in certain situations,
11849           such as when stepping through large arrays that cross a 16M
11850           boundary.  This option is enabled by default when targetting Power6
11851           and disabled otherwise.
11852
11853       -mfused-madd
11854       -mno-fused-madd
11855           Generate code that uses (does not use) the floating point multiply
11856           and accumulate instructions.  These instructions are generated by
11857           default if hardware floating is used.
11858
11859       -mmulhw
11860       -mno-mulhw
11861           Generate code that uses (does not use) the half-word multiply and
11862           multiply-accumulate instructions on the IBM 405, 440 and 464
11863           processors.  These instructions are generated by default when
11864           targetting those processors.
11865
11866       -mdlmzb
11867       -mno-dlmzb
11868           Generate code that uses (does not use) the string-search dlmzb
11869           instruction on the IBM 405, 440 and 464 processors.  This
11870           instruction is generated by default when targetting those
11871           processors.
11872
11873       -mno-bit-align
11874       -mbit-align
11875           On System V.4 and embedded PowerPC systems do not (do) force
11876           structures and unions that contain bit-fields to be aligned to the
11877           base type of the bit-field.
11878
11879           For example, by default a structure containing nothing but 8
11880           "unsigned" bit-fields of length 1 would be aligned to a 4 byte
11881           boundary and have a size of 4 bytes.  By using -mno-bit-align, the
11882           structure would be aligned to a 1 byte boundary and be one byte in
11883           size.
11884
11885       -mno-strict-align
11886       -mstrict-align
11887           On System V.4 and embedded PowerPC systems do not (do) assume that
11888           unaligned memory references will be handled by the system.
11889
11890       -mrelocatable
11891       -mno-relocatable
11892           On embedded PowerPC systems generate code that allows (does not
11893           allow) the program to be relocated to a different address at
11894           runtime.  If you use -mrelocatable on any module, all objects
11895           linked together must be compiled with -mrelocatable or
11896           -mrelocatable-lib.
11897
11898       -mrelocatable-lib
11899       -mno-relocatable-lib
11900           On embedded PowerPC systems generate code that allows (does not
11901           allow) the program to be relocated to a different address at
11902           runtime.  Modules compiled with -mrelocatable-lib can be linked
11903           with either modules compiled without -mrelocatable and
11904           -mrelocatable-lib or with modules compiled with the -mrelocatable
11905           options.
11906
11907       -mno-toc
11908       -mtoc
11909           On System V.4 and embedded PowerPC systems do not (do) assume that
11910           register 2 contains a pointer to a global area pointing to the
11911           addresses used in the program.
11912
11913       -mlittle
11914       -mlittle-endian
11915           On System V.4 and embedded PowerPC systems compile code for the
11916           processor in little endian mode.  The -mlittle-endian option is the
11917           same as -mlittle.
11918
11919       -mbig
11920       -mbig-endian
11921           On System V.4 and embedded PowerPC systems compile code for the
11922           processor in big endian mode.  The -mbig-endian option is the same
11923           as -mbig.
11924
11925       -mdynamic-no-pic
11926           On Darwin and Mac OS X systems, compile code so that it is not
11927           relocatable, but that its external references are relocatable.  The
11928           resulting code is suitable for applications, but not shared
11929           libraries.
11930
11931       -mprioritize-restricted-insns=priority
11932           This option controls the priority that is assigned to dispatch-slot
11933           restricted instructions during the second scheduling pass.  The
11934           argument priority takes the value 0/1/2 to assign
11935           no/highest/second-highest priority to dispatch slot restricted
11936           instructions.
11937
11938       -msched-costly-dep=dependence_type
11939           This option controls which dependences are considered costly by the
11940           target during instruction scheduling.  The argument dependence_type
11941           takes one of the following values: no: no dependence is costly,
11942           all: all dependences are costly, true_store_to_load: a true
11943           dependence from store to load is costly, store_to_load: any
11944           dependence from store to load is costly, number: any dependence
11945           which latency >= number is costly.
11946
11947       -minsert-sched-nops=scheme
11948           This option controls which nop insertion scheme will be used during
11949           the second scheduling pass.  The argument scheme takes one of the
11950           following values: no: Don't insert nops.  pad: Pad with nops any
11951           dispatch group which has vacant issue slots, according to the
11952           scheduler's grouping.  regroup_exact: Insert nops to force costly
11953           dependent insns into separate groups.  Insert exactly as many nops
11954           as needed to force an insn to a new group, according to the
11955           estimated processor grouping.  number: Insert nops to force costly
11956           dependent insns into separate groups.  Insert number nops to force
11957           an insn to a new group.
11958
11959       -mcall-sysv
11960           On System V.4 and embedded PowerPC systems compile code using
11961           calling conventions that adheres to the March 1995 draft of the
11962           System V Application Binary Interface, PowerPC processor
11963           supplement.  This is the default unless you configured GCC using
11964           powerpc-*-eabiaix.
11965
11966       -mcall-sysv-eabi
11967           Specify both -mcall-sysv and -meabi options.
11968
11969       -mcall-sysv-noeabi
11970           Specify both -mcall-sysv and -mno-eabi options.
11971
11972       -mcall-solaris
11973           On System V.4 and embedded PowerPC systems compile code for the
11974           Solaris operating system.
11975
11976       -mcall-linux
11977           On System V.4 and embedded PowerPC systems compile code for the
11978           Linux-based GNU system.
11979
11980       -mcall-gnu
11981           On System V.4 and embedded PowerPC systems compile code for the
11982           Hurd-based GNU system.
11983
11984       -mcall-netbsd
11985           On System V.4 and embedded PowerPC systems compile code for the
11986           NetBSD operating system.
11987
11988       -maix-struct-return
11989           Return all structures in memory (as specified by the AIX ABI).
11990
11991       -msvr4-struct-return
11992           Return structures smaller than 8 bytes in registers (as specified
11993           by the SVR4 ABI).
11994
11995       -mabi=abi-type
11996           Extend the current ABI with a particular extension, or remove such
11997           extension.  Valid values are altivec, no-altivec, spe, no-spe,
11998           ibmlongdouble, ieeelongdouble.
11999
12000       -mabi=spe
12001           Extend the current ABI with SPE ABI extensions.  This does not
12002           change the default ABI, instead it adds the SPE ABI extensions to
12003           the current ABI.
12004
12005       -mabi=no-spe
12006           Disable Booke SPE ABI extensions for the current ABI.
12007
12008       -mabi=ibmlongdouble
12009           Change the current ABI to use IBM extended precision long double.
12010           This is a PowerPC 32-bit SYSV ABI option.
12011
12012       -mabi=ieeelongdouble
12013           Change the current ABI to use IEEE extended precision long double.
12014           This is a PowerPC 32-bit Linux ABI option.
12015
12016       -mprototype
12017       -mno-prototype
12018           On System V.4 and embedded PowerPC systems assume that all calls to
12019           variable argument functions are properly prototyped.  Otherwise,
12020           the compiler must insert an instruction before every non prototyped
12021           call to set or clear bit 6 of the condition code register (CR) to
12022           indicate whether floating point values were passed in the floating
12023           point registers in case the function takes a variable arguments.
12024           With -mprototype, only calls to prototyped variable argument
12025           functions will set or clear the bit.
12026
12027       -msim
12028           On embedded PowerPC systems, assume that the startup module is
12029           called sim-crt0.o and that the standard C libraries are libsim.a
12030           and libc.a.  This is the default for powerpc-*-eabisim
12031           configurations.
12032
12033       -mmvme
12034           On embedded PowerPC systems, assume that the startup module is
12035           called crt0.o and the standard C libraries are libmvme.a and
12036           libc.a.
12037
12038       -mads
12039           On embedded PowerPC systems, assume that the startup module is
12040           called crt0.o and the standard C libraries are libads.a and libc.a.
12041
12042       -myellowknife
12043           On embedded PowerPC systems, assume that the startup module is
12044           called crt0.o and the standard C libraries are libyk.a and libc.a.
12045
12046       -mvxworks
12047           On System V.4 and embedded PowerPC systems, specify that you are
12048           compiling for a VxWorks system.
12049
12050       -memb
12051           On embedded PowerPC systems, set the PPC_EMB bit in the ELF flags
12052           header to indicate that eabi extended relocations are used.
12053
12054       -meabi
12055       -mno-eabi
12056           On System V.4 and embedded PowerPC systems do (do not) adhere to
12057           the Embedded Applications Binary Interface (eabi) which is a set of
12058           modifications to the System V.4 specifications.  Selecting -meabi
12059           means that the stack is aligned to an 8 byte boundary, a function
12060           "__eabi" is called to from "main" to set up the eabi environment,
12061           and the -msdata option can use both "r2" and "r13" to point to two
12062           separate small data areas.  Selecting -mno-eabi means that the
12063           stack is aligned to a 16 byte boundary, do not call an
12064           initialization function from "main", and the -msdata option will
12065           only use "r13" to point to a single small data area.  The -meabi
12066           option is on by default if you configured GCC using one of the
12067           powerpc*-*-eabi* options.
12068
12069       -msdata=eabi
12070           On System V.4 and embedded PowerPC systems, put small initialized
12071           "const" global and static data in the .sdata2 section, which is
12072           pointed to by register "r2".  Put small initialized non-"const"
12073           global and static data in the .sdata section, which is pointed to
12074           by register "r13".  Put small uninitialized global and static data
12075           in the .sbss section, which is adjacent to the .sdata section.  The
12076           -msdata=eabi option is incompatible with the -mrelocatable option.
12077           The -msdata=eabi option also sets the -memb option.
12078
12079       -msdata=sysv
12080           On System V.4 and embedded PowerPC systems, put small global and
12081           static data in the .sdata section, which is pointed to by register
12082           "r13".  Put small uninitialized global and static data in the .sbss
12083           section, which is adjacent to the .sdata section.  The -msdata=sysv
12084           option is incompatible with the -mrelocatable option.
12085
12086       -msdata=default
12087       -msdata
12088           On System V.4 and embedded PowerPC systems, if -meabi is used,
12089           compile code the same as -msdata=eabi, otherwise compile code the
12090           same as -msdata=sysv.
12091
12092       -msdata=data
12093           On System V.4 and embedded PowerPC systems, put small global data
12094           in the .sdata section.  Put small uninitialized global data in the
12095           .sbss section.  Do not use register "r13" to address small data
12096           however.  This is the default behavior unless other -msdata options
12097           are used.
12098
12099       -msdata=none
12100       -mno-sdata
12101           On embedded PowerPC systems, put all initialized global and static
12102           data in the .data section, and all uninitialized data in the .bss
12103           section.
12104
12105       -G num
12106           On embedded PowerPC systems, put global and static items less than
12107           or equal to num bytes into the small data or bss sections instead
12108           of the normal data or bss section.  By default, num is 8.  The -G
12109           num switch is also passed to the linker.  All modules should be
12110           compiled with the same -G num value.
12111
12112       -mregnames
12113       -mno-regnames
12114           On System V.4 and embedded PowerPC systems do (do not) emit
12115           register names in the assembly language output using symbolic
12116           forms.
12117
12118       -mlongcall
12119       -mno-longcall
12120           By default assume that all calls are far away so that a longer more
12121           expensive calling sequence is required.  This is required for calls
12122           further than 32 megabytes (33,554,432 bytes) from the current
12123           location.  A short call will be generated if the compiler knows the
12124           call cannot be that far away.  This setting can be overridden by
12125           the "shortcall" function attribute, or by "#pragma longcall(0)".
12126
12127           Some linkers are capable of detecting out-of-range calls and
12128           generating glue code on the fly.  On these systems, long calls are
12129           unnecessary and generate slower code.  As of this writing, the AIX
12130           linker can do this, as can the GNU linker for PowerPC/64.  It is
12131           planned to add this feature to the GNU linker for 32-bit PowerPC
12132           systems as well.
12133
12134           On Darwin/PPC systems, "#pragma longcall" will generate "jbsr
12135           callee, L42", plus a "branch island" (glue code).  The two target
12136           addresses represent the callee and the "branch island".  The
12137           Darwin/PPC linker will prefer the first address and generate a "bl
12138           callee" if the PPC "bl" instruction will reach the callee directly;
12139           otherwise, the linker will generate "bl L42" to call the "branch
12140           island".  The "branch island" is appended to the body of the
12141           calling function; it computes the full 32-bit address of the callee
12142           and jumps to it.
12143
12144           On Mach-O (Darwin) systems, this option directs the compiler emit
12145           to the glue for every direct call, and the Darwin linker decides
12146           whether to use or discard it.
12147
12148           In the future, we may cause GCC to ignore all longcall
12149           specifications when the linker is known to generate glue.
12150
12151       -pthread
12152           Adds support for multithreading with the pthreads library.  This
12153           option sets flags for both the preprocessor and linker.
12154
12155   S/390 and zSeries Options
12156       These are the -m options defined for the S/390 and zSeries
12157       architecture.
12158
12159       -mhard-float
12160       -msoft-float
12161           Use (do not use) the hardware floating-point instructions and
12162           registers for floating-point operations.  When -msoft-float is
12163           specified, functions in libgcc.a will be used to perform floating-
12164           point operations.  When -mhard-float is specified, the compiler
12165           generates IEEE floating-point instructions.  This is the default.
12166
12167       -mhard-dfp
12168       -mno-hard-dfp
12169           Use (do not use) the hardware decimal-floating-point instructions
12170           for decimal-floating-point operations.  When -mno-hard-dfp is
12171           specified, functions in libgcc.a will be used to perform decimal-
12172           floating-point operations.  When -mhard-dfp is specified, the
12173           compiler generates decimal-floating-point hardware instructions.
12174           This is the default for -march=z9-ec or higher.
12175
12176       -mlong-double-64
12177       -mlong-double-128
12178           These switches control the size of "long double" type. A size of
12179           64bit makes the "long double" type equivalent to the "double" type.
12180           This is the default.
12181
12182       -mbackchain
12183       -mno-backchain
12184           Store (do not store) the address of the caller's frame as backchain
12185           pointer into the callee's stack frame.  A backchain may be needed
12186           to allow debugging using tools that do not understand DWARF-2 call
12187           frame information.  When -mno-packed-stack is in effect, the
12188           backchain pointer is stored at the bottom of the stack frame; when
12189           -mpacked-stack is in effect, the backchain is placed into the
12190           topmost word of the 96/160 byte register save area.
12191
12192           In general, code compiled with -mbackchain is call-compatible with
12193           code compiled with -mmo-backchain; however, use of the backchain
12194           for debugging purposes usually requires that the whole binary is
12195           built with -mbackchain.  Note that the combination of -mbackchain,
12196           -mpacked-stack and -mhard-float is not supported.  In order to
12197           build a linux kernel use -msoft-float.
12198
12199           The default is to not maintain the backchain.
12200
12201       -mpacked-stack
12202       -mno-packed-stack
12203           Use (do not use) the packed stack layout.  When -mno-packed-stack
12204           is specified, the compiler uses the all fields of the 96/160 byte
12205           register save area only for their default purpose; unused fields
12206           still take up stack space.  When -mpacked-stack is specified,
12207           register save slots are densely packed at the top of the register
12208           save area; unused space is reused for other purposes, allowing for
12209           more efficient use of the available stack space.  However, when
12210           -mbackchain is also in effect, the topmost word of the save area is
12211           always used to store the backchain, and the return address register
12212           is always saved two words below the backchain.
12213
12214           As long as the stack frame backchain is not used, code generated
12215           with -mpacked-stack is call-compatible with code generated with
12216           -mno-packed-stack.  Note that some non-FSF releases of GCC 2.95 for
12217           S/390 or zSeries generated code that uses the stack frame backchain
12218           at run time, not just for debugging purposes.  Such code is not
12219           call-compatible with code compiled with -mpacked-stack.  Also, note
12220           that the combination of -mbackchain, -mpacked-stack and
12221           -mhard-float is not supported.  In order to build a linux kernel
12222           use -msoft-float.
12223
12224           The default is to not use the packed stack layout.
12225
12226       -msmall-exec
12227       -mno-small-exec
12228           Generate (or do not generate) code using the "bras" instruction to
12229           do subroutine calls.  This only works reliably if the total
12230           executable size does not exceed 64k.  The default is to use the
12231           "basr" instruction instead, which does not have this limitation.
12232
12233       -m64
12234       -m31
12235           When -m31 is specified, generate code compliant to the GNU/Linux
12236           for S/390 ABI.  When -m64 is specified, generate code compliant to
12237           the GNU/Linux for zSeries ABI.  This allows GCC in particular to
12238           generate 64-bit instructions.  For the s390 targets, the default is
12239           -m31, while the s390x targets default to -m64.
12240
12241       -mzarch
12242       -mesa
12243           When -mzarch is specified, generate code using the instructions
12244           available on z/Architecture.  When -mesa is specified, generate
12245           code using the instructions available on ESA/390.  Note that -mesa
12246           is not possible with -m64.  When generating code compliant to the
12247           GNU/Linux for S/390 ABI, the default is -mesa.  When generating
12248           code compliant to the GNU/Linux for zSeries ABI, the default is
12249           -mzarch.
12250
12251       -mmvcle
12252       -mno-mvcle
12253           Generate (or do not generate) code using the "mvcle" instruction to
12254           perform block moves.  When -mno-mvcle is specified, use a "mvc"
12255           loop instead.  This is the default unless optimizing for size.
12256
12257       -mdebug
12258       -mno-debug
12259           Print (or do not print) additional debug information when
12260           compiling.  The default is to not print debug information.
12261
12262       -march=cpu-type
12263           Generate code that will run on cpu-type, which is the name of a
12264           system representing a certain processor type.  Possible values for
12265           cpu-type are g5, g6, z900, z990, z9-109, z9-ec and z10.  When
12266           generating code using the instructions available on z/Architecture,
12267           the default is -march=z900.  Otherwise, the default is -march=g5.
12268
12269       -mtune=cpu-type
12270           Tune to cpu-type everything applicable about the generated code,
12271           except for the ABI and the set of available instructions.  The list
12272           of cpu-type values is the same as for -march.  The default is the
12273           value used for -march.
12274
12275       -mtpf-trace
12276       -mno-tpf-trace
12277           Generate code that adds (does not add) in TPF OS specific branches
12278           to trace routines in the operating system.  This option is off by
12279           default, even when compiling for the TPF OS.
12280
12281       -mfused-madd
12282       -mno-fused-madd
12283           Generate code that uses (does not use) the floating point multiply
12284           and accumulate instructions.  These instructions are generated by
12285           default if hardware floating point is used.
12286
12287       -mwarn-framesize=framesize
12288           Emit a warning if the current function exceeds the given frame
12289           size.  Because this is a compile time check it doesn't need to be a
12290           real problem when the program runs.  It is intended to identify
12291           functions which most probably cause a stack overflow.  It is useful
12292           to be used in an environment with limited stack size e.g. the linux
12293           kernel.
12294
12295       -mwarn-dynamicstack
12296           Emit a warning if the function calls alloca or uses dynamically
12297           sized arrays.  This is generally a bad idea with a limited stack
12298           size.
12299
12300       -mstack-guard=stack-guard
12301       -mstack-size=stack-size
12302           If these options are provided the s390 back end emits additional
12303           instructions in the function prologue which trigger a trap if the
12304           stack size is stack-guard bytes above the stack-size (remember that
12305           the stack on s390 grows downward).  If the stack-guard option is
12306           omitted the smallest power of 2 larger than the frame size of the
12307           compiled function is chosen.  These options are intended to be used
12308           to help debugging stack overflow problems.  The additionally
12309           emitted code causes only little overhead and hence can also be used
12310           in production like systems without greater performance degradation.
12311           The given values have to be exact powers of 2 and stack-size has to
12312           be greater than stack-guard without exceeding 64k.  In order to be
12313           efficient the extra code makes the assumption that the stack starts
12314           at an address aligned to the value given by stack-size.  The stack-
12315           guard option can only be used in conjunction with stack-size.
12316
12317   Score Options
12318       These options are defined for Score implementations:
12319
12320       -meb
12321           Compile code for big endian mode.  This is the default.
12322
12323       -mel
12324           Compile code for little endian mode.
12325
12326       -mnhwloop
12327           Disable generate bcnz instruction.
12328
12329       -muls
12330           Enable generate unaligned load and store instruction.
12331
12332       -mmac
12333           Enable the use of multiply-accumulate instructions. Disabled by
12334           default.
12335
12336       -mscore5
12337           Specify the SCORE5 as the target architecture.
12338
12339       -mscore5u
12340           Specify the SCORE5U of the target architecture.
12341
12342       -mscore7
12343           Specify the SCORE7 as the target architecture. This is the default.
12344
12345       -mscore7d
12346           Specify the SCORE7D as the target architecture.
12347
12348   SH Options
12349       These -m options are defined for the SH implementations:
12350
12351       -m1 Generate code for the SH1.
12352
12353       -m2 Generate code for the SH2.
12354
12355       -m2e
12356           Generate code for the SH2e.
12357
12358       -m3 Generate code for the SH3.
12359
12360       -m3e
12361           Generate code for the SH3e.
12362
12363       -m4-nofpu
12364           Generate code for the SH4 without a floating-point unit.
12365
12366       -m4-single-only
12367           Generate code for the SH4 with a floating-point unit that only
12368           supports single-precision arithmetic.
12369
12370       -m4-single
12371           Generate code for the SH4 assuming the floating-point unit is in
12372           single-precision mode by default.
12373
12374       -m4 Generate code for the SH4.
12375
12376       -m4a-nofpu
12377           Generate code for the SH4al-dsp, or for a SH4a in such a way that
12378           the floating-point unit is not used.
12379
12380       -m4a-single-only
12381           Generate code for the SH4a, in such a way that no double-precision
12382           floating point operations are used.
12383
12384       -m4a-single
12385           Generate code for the SH4a assuming the floating-point unit is in
12386           single-precision mode by default.
12387
12388       -m4a
12389           Generate code for the SH4a.
12390
12391       -m4al
12392           Same as -m4a-nofpu, except that it implicitly passes -dsp to the
12393           assembler.  GCC doesn't generate any DSP instructions at the
12394           moment.
12395
12396       -mb Compile code for the processor in big endian mode.
12397
12398       -ml Compile code for the processor in little endian mode.
12399
12400       -mdalign
12401           Align doubles at 64-bit boundaries.  Note that this changes the
12402           calling conventions, and thus some functions from the standard C
12403           library will not work unless you recompile it first with -mdalign.
12404
12405       -mrelax
12406           Shorten some address references at link time, when possible; uses
12407           the linker option -relax.
12408
12409       -mbigtable
12410           Use 32-bit offsets in "switch" tables.  The default is to use
12411           16-bit offsets.
12412
12413       -mbitops
12414           Enable the use of bit manipulation instructions on SH2A.
12415
12416       -mfmovd
12417           Enable the use of the instruction "fmovd".
12418
12419       -mhitachi
12420           Comply with the calling conventions defined by Renesas.
12421
12422       -mrenesas
12423           Comply with the calling conventions defined by Renesas.
12424
12425       -mno-renesas
12426           Comply with the calling conventions defined for GCC before the
12427           Renesas conventions were available.  This option is the default for
12428           all targets of the SH toolchain except for sh-symbianelf.
12429
12430       -mnomacsave
12431           Mark the "MAC" register as call-clobbered, even if -mhitachi is
12432           given.
12433
12434       -mieee
12435           Increase IEEE-compliance of floating-point code.  At the moment,
12436           this is equivalent to -fno-finite-math-only.  When generating 16
12437           bit SH opcodes, getting IEEE-conforming results for comparisons of
12438           NANs / infinities incurs extra overhead in every floating point
12439           comparison, therefore the default is set to -ffinite-math-only.
12440
12441       -minline-ic_invalidate
12442           Inline code to invalidate instruction cache entries after setting
12443           up nested function trampolines.  This option has no effect if
12444           -musermode is in effect and the selected code generation option
12445           (e.g. -m4) does not allow the use of the icbi instruction.  If the
12446           selected code generation option does not allow the use of the icbi
12447           instruction, and -musermode is not in effect, the inlined code will
12448           manipulate the instruction cache address array directly with an
12449           associative write.  This not only requires privileged mode, but it
12450           will also fail if the cache line had been mapped via the TLB and
12451           has become unmapped.
12452
12453       -misize
12454           Dump instruction size and location in the assembly code.
12455
12456       -mpadstruct
12457           This option is deprecated.  It pads structures to multiple of 4
12458           bytes, which is incompatible with the SH ABI.
12459
12460       -mspace
12461           Optimize for space instead of speed.  Implied by -Os.
12462
12463       -mprefergot
12464           When generating position-independent code, emit function calls
12465           using the Global Offset Table instead of the Procedure Linkage
12466           Table.
12467
12468       -musermode
12469           Don't generate privileged mode only code; implies
12470           -mno-inline-ic_invalidate if the inlined code would not work in
12471           user mode.  This is the default when the target is "sh-*-linux*".
12472
12473       -multcost=number
12474           Set the cost to assume for a multiply insn.
12475
12476       -mdiv=strategy
12477           Set the division strategy to use for SHmedia code.  strategy must
12478           be one of: call, call2, fp, inv, inv:minlat, inv20u, inv20l,
12479           inv:call, inv:call2, inv:fp .  "fp" performs the operation in
12480           floating point.  This has a very high latency, but needs only a few
12481           instructions, so it might be a good choice if your code has enough
12482           easily exploitable ILP to allow the compiler to schedule the
12483           floating point instructions together with other instructions.
12484           Division by zero causes a floating point exception.  "inv" uses
12485           integer operations to calculate the inverse of the divisor, and
12486           then multiplies the dividend with the inverse.  This strategy
12487           allows cse and hoisting of the inverse calculation.  Division by
12488           zero calculates an unspecified result, but does not trap.
12489           "inv:minlat" is a variant of "inv" where if no cse / hoisting
12490           opportunities have been found, or if the entire operation has been
12491           hoisted to the same place, the last stages of the inverse
12492           calculation are intertwined with the final multiply to reduce the
12493           overall latency, at the expense of using a few more instructions,
12494           and thus offering fewer scheduling opportunities with other code.
12495           "call" calls a library function that usually implements the
12496           inv:minlat strategy.  This gives high code density for
12497           m5-*media-nofpu compilations.  "call2" uses a different entry point
12498           of the same library function, where it assumes that a pointer to a
12499           lookup table has already been set up, which exposes the pointer
12500           load to cse / code hoisting optimizations.  "inv:call", "inv:call2"
12501           and "inv:fp" all use the "inv" algorithm for initial code
12502           generation, but if the code stays unoptimized, revert to the
12503           "call", "call2", or "fp" strategies, respectively.  Note that the
12504           potentially-trapping side effect of division by zero is carried by
12505           a separate instruction, so it is possible that all the integer
12506           instructions are hoisted out, but the marker for the side effect
12507           stays where it is.  A recombination to fp operations or a call is
12508           not possible in that case.  "inv20u" and "inv20l" are variants of
12509           the "inv:minlat" strategy.  In the case that the inverse
12510           calculation was nor separated from the multiply, they speed up
12511           division where the dividend fits into 20 bits (plus sign where
12512           applicable), by inserting a test to skip a number of operations in
12513           this case; this test slows down the case of larger dividends.
12514           inv20u assumes the case of a such a small dividend to be unlikely,
12515           and inv20l assumes it to be likely.
12516
12517       -mdivsi3_libfunc=name
12518           Set the name of the library function used for 32 bit signed
12519           division to name.  This only affect the name used in the call and
12520           inv:call division strategies, and the compiler will still expect
12521           the same sets of input/output/clobbered registers as if this option
12522           was not present.
12523
12524       -mfixed-range=register-range
12525           Generate code treating the given register range as fixed registers.
12526           A fixed register is one that the register allocator can not use.
12527           This is useful when compiling kernel code.  A register range is
12528           specified as two registers separated by a dash.  Multiple register
12529           ranges can be specified separated by a comma.
12530
12531       -madjust-unroll
12532           Throttle unrolling to avoid thrashing target registers.  This
12533           option only has an effect if the gcc code base supports the
12534           TARGET_ADJUST_UNROLL_MAX target hook.
12535
12536       -mindexed-addressing
12537           Enable the use of the indexed addressing mode for
12538           SHmedia32/SHcompact.  This is only safe if the hardware and/or OS
12539           implement 32 bit wrap-around semantics for the indexed addressing
12540           mode.  The architecture allows the implementation of processors
12541           with 64 bit MMU, which the OS could use to get 32 bit addressing,
12542           but since no current hardware implementation supports this or any
12543           other way to make the indexed addressing mode safe to use in the 32
12544           bit ABI, the default is -mno-indexed-addressing.
12545
12546       -mgettrcost=number
12547           Set the cost assumed for the gettr instruction to number.  The
12548           default is 2 if -mpt-fixed is in effect, 100 otherwise.
12549
12550       -mpt-fixed
12551           Assume pt* instructions won't trap.  This will generally generate
12552           better scheduled code, but is unsafe on current hardware.  The
12553           current architecture definition says that ptabs and ptrel trap when
12554           the target anded with 3 is 3.  This has the unintentional effect of
12555           making it unsafe to schedule ptabs / ptrel before a branch, or
12556           hoist it out of a loop.  For example, __do_global_ctors, a part of
12557           libgcc that runs constructors at program startup, calls functions
12558           in a list which is delimited by -1.  With the -mpt-fixed option,
12559           the ptabs will be done before testing against -1.  That means that
12560           all the constructors will be run a bit quicker, but when the loop
12561           comes to the end of the list, the program crashes because ptabs
12562           loads -1 into a target register.  Since this option is unsafe for
12563           any hardware implementing the current architecture specification,
12564           the default is -mno-pt-fixed.  Unless the user specifies a specific
12565           cost with -mgettrcost, -mno-pt-fixed also implies -mgettrcost=100;
12566           this deters register allocation using target registers for storing
12567           ordinary integers.
12568
12569       -minvalid-symbols
12570           Assume symbols might be invalid.  Ordinary function symbols
12571           generated by the compiler will always be valid to load with
12572           movi/shori/ptabs or movi/shori/ptrel, but with assembler and/or
12573           linker tricks it is possible to generate symbols that will cause
12574           ptabs / ptrel to trap.  This option is only meaningful when
12575           -mno-pt-fixed is in effect.  It will then prevent cross-basic-block
12576           cse, hoisting and most scheduling of symbol loads.  The default is
12577           -mno-invalid-symbols.
12578
12579   SPARC Options
12580       These -m options are supported on the SPARC:
12581
12582       -mno-app-regs
12583       -mapp-regs
12584           Specify -mapp-regs to generate output using the global registers 2
12585           through 4, which the SPARC SVR4 ABI reserves for applications.
12586           This is the default.
12587
12588           To be fully SVR4 ABI compliant at the cost of some performance
12589           loss, specify -mno-app-regs.  You should compile libraries and
12590           system software with this option.
12591
12592       -mfpu
12593       -mhard-float
12594           Generate output containing floating point instructions.  This is
12595           the default.
12596
12597       -mno-fpu
12598       -msoft-float
12599           Generate output containing library calls for floating point.
12600           Warning: the requisite libraries are not available for all SPARC
12601           targets.  Normally the facilities of the machine's usual C compiler
12602           are used, but this cannot be done directly in cross-compilation.
12603           You must make your own arrangements to provide suitable library
12604           functions for cross-compilation.  The embedded targets sparc-*-aout
12605           and sparclite-*-* do provide software floating point support.
12606
12607           -msoft-float changes the calling convention in the output file;
12608           therefore, it is only useful if you compile all of a program with
12609           this option.  In particular, you need to compile libgcc.a, the
12610           library that comes with GCC, with -msoft-float in order for this to
12611           work.
12612
12613       -mhard-quad-float
12614           Generate output containing quad-word (long double) floating point
12615           instructions.
12616
12617       -msoft-quad-float
12618           Generate output containing library calls for quad-word (long
12619           double) floating point instructions.  The functions called are
12620           those specified in the SPARC ABI.  This is the default.
12621
12622           As of this writing, there are no SPARC implementations that have
12623           hardware support for the quad-word floating point instructions.
12624           They all invoke a trap handler for one of these instructions, and
12625           then the trap handler emulates the effect of the instruction.
12626           Because of the trap handler overhead, this is much slower than
12627           calling the ABI library routines.  Thus the -msoft-quad-float
12628           option is the default.
12629
12630       -mno-unaligned-doubles
12631       -munaligned-doubles
12632           Assume that doubles have 8 byte alignment.  This is the default.
12633
12634           With -munaligned-doubles, GCC assumes that doubles have 8 byte
12635           alignment only if they are contained in another type, or if they
12636           have an absolute address.  Otherwise, it assumes they have 4 byte
12637           alignment.  Specifying this option avoids some rare compatibility
12638           problems with code generated by other compilers.  It is not the
12639           default because it results in a performance loss, especially for
12640           floating point code.
12641
12642       -mno-faster-structs
12643       -mfaster-structs
12644           With -mfaster-structs, the compiler assumes that structures should
12645           have 8 byte alignment.  This enables the use of pairs of "ldd" and
12646           "std" instructions for copies in structure assignment, in place of
12647           twice as many "ld" and "st" pairs.  However, the use of this
12648           changed alignment directly violates the SPARC ABI.  Thus, it's
12649           intended only for use on targets where the developer acknowledges
12650           that their resulting code will not be directly in line with the
12651           rules of the ABI.
12652
12653       -mimpure-text
12654           -mimpure-text, used in addition to -shared, tells the compiler to
12655           not pass -z text to the linker when linking a shared object.  Using
12656           this option, you can link position-dependent code into a shared
12657           object.
12658
12659           -mimpure-text suppresses the "relocations remain against
12660           allocatable but non-writable sections" linker error message.
12661           However, the necessary relocations will trigger copy-on-write, and
12662           the shared object is not actually shared across processes.  Instead
12663           of using -mimpure-text, you should compile all source code with
12664           -fpic or -fPIC.
12665
12666           This option is only available on SunOS and Solaris.
12667
12668       -mcpu=cpu_type
12669           Set the instruction set, register set, and instruction scheduling
12670           parameters for machine type cpu_type.  Supported values for
12671           cpu_type are v7, cypress, v8, supersparc, sparclite, f930, f934,
12672           hypersparc, sparclite86x, sparclet, tsc701, v9, ultrasparc,
12673           ultrasparc3, niagara and niagara2.
12674
12675           Default instruction scheduling parameters are used for values that
12676           select an architecture and not an implementation.  These are v7,
12677           v8, sparclite, sparclet, v9.
12678
12679           Here is a list of each supported architecture and their supported
12680           implementations.
12681
12682                       v7:             cypress
12683                       v8:             supersparc, hypersparc
12684                       sparclite:      f930, f934, sparclite86x
12685                       sparclet:       tsc701
12686                       v9:             ultrasparc, ultrasparc3, niagara, niagara2
12687
12688           By default (unless configured otherwise), GCC generates code for
12689           the V7 variant of the SPARC architecture.  With -mcpu=cypress, the
12690           compiler additionally optimizes it for the Cypress CY7C602 chip, as
12691           used in the SPARCStation/SPARCServer 3xx series.  This is also
12692           appropriate for the older SPARCStation 1, 2, IPX etc.
12693
12694           With -mcpu=v8, GCC generates code for the V8 variant of the SPARC
12695           architecture.  The only difference from V7 code is that the
12696           compiler emits the integer multiply and integer divide instructions
12697           which exist in SPARC-V8 but not in SPARC-V7.  With
12698           -mcpu=supersparc, the compiler additionally optimizes it for the
12699           SuperSPARC chip, as used in the SPARCStation 10, 1000 and 2000
12700           series.
12701
12702           With -mcpu=sparclite, GCC generates code for the SPARClite variant
12703           of the SPARC architecture.  This adds the integer multiply, integer
12704           divide step and scan ("ffs") instructions which exist in SPARClite
12705           but not in SPARC-V7.  With -mcpu=f930, the compiler additionally
12706           optimizes it for the Fujitsu MB86930 chip, which is the original
12707           SPARClite, with no FPU.  With -mcpu=f934, the compiler additionally
12708           optimizes it for the Fujitsu MB86934 chip, which is the more recent
12709           SPARClite with FPU.
12710
12711           With -mcpu=sparclet, GCC generates code for the SPARClet variant of
12712           the SPARC architecture.  This adds the integer multiply,
12713           multiply/accumulate, integer divide step and scan ("ffs")
12714           instructions which exist in SPARClet but not in SPARC-V7.  With
12715           -mcpu=tsc701, the compiler additionally optimizes it for the TEMIC
12716           SPARClet chip.
12717
12718           With -mcpu=v9, GCC generates code for the V9 variant of the SPARC
12719           architecture.  This adds 64-bit integer and floating-point move
12720           instructions, 3 additional floating-point condition code registers
12721           and conditional move instructions.  With -mcpu=ultrasparc, the
12722           compiler additionally optimizes it for the Sun UltraSPARC I/II/IIi
12723           chips.  With -mcpu=ultrasparc3, the compiler additionally optimizes
12724           it for the Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+ chips.  With
12725           -mcpu=niagara, the compiler additionally optimizes it for Sun
12726           UltraSPARC T1 chips.  With -mcpu=niagara2, the compiler
12727           additionally optimizes it for Sun UltraSPARC T2 chips.
12728
12729       -mtune=cpu_type
12730           Set the instruction scheduling parameters for machine type
12731           cpu_type, but do not set the instruction set or register set that
12732           the option -mcpu=cpu_type would.
12733
12734           The same values for -mcpu=cpu_type can be used for -mtune=cpu_type,
12735           but the only useful values are those that select a particular cpu
12736           implementation.  Those are cypress, supersparc, hypersparc, f930,
12737           f934, sparclite86x, tsc701, ultrasparc, ultrasparc3, niagara, and
12738           niagara2.
12739
12740       -mv8plus
12741       -mno-v8plus
12742           With -mv8plus, GCC generates code for the SPARC-V8+ ABI.  The
12743           difference from the V8 ABI is that the global and out registers are
12744           considered 64-bit wide.  This is enabled by default on Solaris in
12745           32-bit mode for all SPARC-V9 processors.
12746
12747       -mvis
12748       -mno-vis
12749           With -mvis, GCC generates code that takes advantage of the
12750           UltraSPARC Visual Instruction Set extensions.  The default is
12751           -mno-vis.
12752
12753       These -m options are supported in addition to the above on SPARC-V9
12754       processors in 64-bit environments:
12755
12756       -mlittle-endian
12757           Generate code for a processor running in little-endian mode.  It is
12758           only available for a few configurations and most notably not on
12759           Solaris and Linux.
12760
12761       -m32
12762       -m64
12763           Generate code for a 32-bit or 64-bit environment.  The 32-bit
12764           environment sets int, long and pointer to 32 bits.  The 64-bit
12765           environment sets int to 32 bits and long and pointer to 64 bits.
12766
12767       -mcmodel=medlow
12768           Generate code for the Medium/Low code model: 64-bit addresses,
12769           programs must be linked in the low 32 bits of memory.  Programs can
12770           be statically or dynamically linked.
12771
12772       -mcmodel=medmid
12773           Generate code for the Medium/Middle code model: 64-bit addresses,
12774           programs must be linked in the low 44 bits of memory, the text and
12775           data segments must be less than 2GB in size and the data segment
12776           must be located within 2GB of the text segment.
12777
12778       -mcmodel=medany
12779           Generate code for the Medium/Anywhere code model: 64-bit addresses,
12780           programs may be linked anywhere in memory, the text and data
12781           segments must be less than 2GB in size and the data segment must be
12782           located within 2GB of the text segment.
12783
12784       -mcmodel=embmedany
12785           Generate code for the Medium/Anywhere code model for embedded
12786           systems: 64-bit addresses, the text and data segments must be less
12787           than 2GB in size, both starting anywhere in memory (determined at
12788           link time).  The global register %g4 points to the base of the data
12789           segment.  Programs are statically linked and PIC is not supported.
12790
12791       -mstack-bias
12792       -mno-stack-bias
12793           With -mstack-bias, GCC assumes that the stack pointer, and frame
12794           pointer if present, are offset by -2047 which must be added back
12795           when making stack frame references.  This is the default in 64-bit
12796           mode.  Otherwise, assume no such offset is present.
12797
12798       These switches are supported in addition to the above on Solaris:
12799
12800       -threads
12801           Add support for multithreading using the Solaris threads library.
12802           This option sets flags for both the preprocessor and linker.  This
12803           option does not affect the thread safety of object code produced by
12804           the compiler or that of libraries supplied with it.
12805
12806       -pthreads
12807           Add support for multithreading using the POSIX threads library.
12808           This option sets flags for both the preprocessor and linker.  This
12809           option does not affect the thread safety of object code produced
12810           by the compiler or that of libraries supplied with it.
12811
12812       -pthread
12813           This is a synonym for -pthreads.
12814
12815   SPU Options
12816       These -m options are supported on the SPU:
12817
12818       -mwarn-reloc
12819       -merror-reloc
12820           The loader for SPU does not handle dynamic relocations.  By
12821           default, GCC will give an error when it generates code that
12822           requires a dynamic relocation.  -mno-error-reloc disables the
12823           error, -mwarn-reloc will generate a warning instead.
12824
12825       -msafe-dma
12826       -munsafe-dma
12827           Instructions which initiate or test completion of DMA must not be
12828           reordered with respect to loads and stores of the memory which is
12829           being accessed.  Users typically address this problem using the
12830           volatile keyword, but that can lead to inefficient code in places
12831           where the memory is known to not change.  Rather than mark the
12832           memory as volatile we treat the DMA instructions as potentially
12833           effecting all memory.  With -munsafe-dma users must use the
12834           volatile keyword to protect memory accesses.
12835
12836       -mbranch-hints
12837           By default, GCC will generate a branch hint instruction to avoid
12838           pipeline stalls for always taken or probably taken branches.  A
12839           hint will not be generated closer than 8 instructions away from its
12840           branch.  There is little reason to disable them, except for
12841           debugging purposes, or to make an object a little bit smaller.
12842
12843       -msmall-mem
12844       -mlarge-mem
12845           By default, GCC generates code assuming that addresses are never
12846           larger than 18 bits.  With -mlarge-mem code is generated that
12847           assumes a full 32 bit address.
12848
12849       -mstdmain
12850           By default, GCC links against startup code that assumes the SPU-
12851           style main function interface (which has an unconventional
12852           parameter list).  With -mstdmain, GCC will link your program
12853           against startup code that assumes a C99-style interface to "main",
12854           including a local copy of "argv" strings.
12855
12856       -mfixed-range=register-range
12857           Generate code treating the given register range as fixed registers.
12858           A fixed register is one that the register allocator can not use.
12859           This is useful when compiling kernel code.  A register range is
12860           specified as two registers separated by a dash.  Multiple register
12861           ranges can be specified separated by a comma.
12862
12863       -mdual-nops
12864       -mdual-nops=n
12865           By default, GCC will insert nops to increase dual issue when it
12866           expects it to increase performance.  n can be a value from 0 to 10.
12867           A smaller n will insert fewer nops.  10 is the default, 0 is the
12868           same as -mno-dual-nops.  Disabled with -Os.
12869
12870       -mhint-max-nops=n
12871           Maximum number of nops to insert for a branch hint.  A branch hint
12872           must be at least 8 instructions away from the branch it is
12873           effecting.  GCC will insert up to n nops to enforce this, otherwise
12874           it will not generate the branch hint.
12875
12876       -mhint-max-distance=n
12877           The encoding of the branch hint instruction limits the hint to be
12878           within 256 instructions of the branch it is effecting.  By default,
12879           GCC makes sure it is within 125.
12880
12881       -msafe-hints
12882           Work around a hardware bug which causes the SPU to stall
12883           indefinitely.  By default, GCC will insert the "hbrp" instruction
12884           to make sure this stall won't happen.
12885
12886   Options for System V
12887       These additional options are available on System V Release 4 for
12888       compatibility with other compilers on those systems:
12889
12890       -G  Create a shared object.  It is recommended that -symbolic or
12891           -shared be used instead.
12892
12893       -Qy Identify the versions of each tool used by the compiler, in a
12894           ".ident" assembler directive in the output.
12895
12896       -Qn Refrain from adding ".ident" directives to the output file (this is
12897           the default).
12898
12899       -YP,dirs
12900           Search the directories dirs, and no others, for libraries specified
12901           with -l.
12902
12903       -Ym,dir
12904           Look in the directory dir to find the M4 preprocessor.  The
12905           assembler uses this option.
12906
12907   V850 Options
12908       These -m options are defined for V850 implementations:
12909
12910       -mlong-calls
12911       -mno-long-calls
12912           Treat all calls as being far away (near).  If calls are assumed to
12913           be far away, the compiler will always load the functions address up
12914           into a register, and call indirect through the pointer.
12915
12916       -mno-ep
12917       -mep
12918           Do not optimize (do optimize) basic blocks that use the same index
12919           pointer 4 or more times to copy pointer into the "ep" register, and
12920           use the shorter "sld" and "sst" instructions.  The -mep option is
12921           on by default if you optimize.
12922
12923       -mno-prolog-function
12924       -mprolog-function
12925           Do not use (do use) external functions to save and restore
12926           registers at the prologue and epilogue of a function.  The external
12927           functions are slower, but use less code space if more than one
12928           function saves the same number of registers.  The -mprolog-function
12929           option is on by default if you optimize.
12930
12931       -mspace
12932           Try to make the code as small as possible.  At present, this just
12933           turns on the -mep and -mprolog-function options.
12934
12935       -mtda=n
12936           Put static or global variables whose size is n bytes or less into
12937           the tiny data area that register "ep" points to.  The tiny data
12938           area can hold up to 256 bytes in total (128 bytes for byte
12939           references).
12940
12941       -msda=n
12942           Put static or global variables whose size is n bytes or less into
12943           the small data area that register "gp" points to.  The small data
12944           area can hold up to 64 kilobytes.
12945
12946       -mzda=n
12947           Put static or global variables whose size is n bytes or less into
12948           the first 32 kilobytes of memory.
12949
12950       -mv850
12951           Specify that the target processor is the V850.
12952
12953       -mbig-switch
12954           Generate code suitable for big switch tables.  Use this option only
12955           if the assembler/linker complain about out of range branches within
12956           a switch table.
12957
12958       -mapp-regs
12959           This option will cause r2 and r5 to be used in the code generated
12960           by the compiler.  This setting is the default.
12961
12962       -mno-app-regs
12963           This option will cause r2 and r5 to be treated as fixed registers.
12964
12965       -mv850e1
12966           Specify that the target processor is the V850E1.  The preprocessor
12967           constants __v850e1__ and __v850e__ will be defined if this option
12968           is used.
12969
12970       -mv850e
12971           Specify that the target processor is the V850E.  The preprocessor
12972           constant __v850e__ will be defined if this option is used.
12973
12974           If neither -mv850 nor -mv850e nor -mv850e1 are defined then a
12975           default target processor will be chosen and the relevant __v850*__
12976           preprocessor constant will be defined.
12977
12978           The preprocessor constants __v850 and __v851__ are always defined,
12979           regardless of which processor variant is the target.
12980
12981       -mdisable-callt
12982           This option will suppress generation of the CALLT instruction for
12983           the v850e and v850e1 flavors of the v850 architecture.  The default
12984           is -mno-disable-callt which allows the CALLT instruction to be
12985           used.
12986
12987   VAX Options
12988       These -m options are defined for the VAX:
12989
12990       -munix
12991           Do not output certain jump instructions ("aobleq" and so on) that
12992           the Unix assembler for the VAX cannot handle across long ranges.
12993
12994       -mgnu
12995           Do output those jump instructions, on the assumption that you will
12996           assemble with the GNU assembler.
12997
12998       -mg Output code for g-format floating point numbers instead of
12999           d-format.
13000
13001   VxWorks Options
13002       The options in this section are defined for all VxWorks targets.
13003       Options specific to the target hardware are listed with the other
13004       options for that target.
13005
13006       -mrtp
13007           GCC can generate code for both VxWorks kernels and real time
13008           processes (RTPs).  This option switches from the former to the
13009           latter.  It also defines the preprocessor macro "__RTP__".
13010
13011       -non-static
13012           Link an RTP executable against shared libraries rather than static
13013           libraries.  The options -static and -shared can also be used for
13014           RTPs; -static is the default.
13015
13016       -Bstatic
13017       -Bdynamic
13018           These options are passed down to the linker.  They are defined for
13019           compatibility with Diab.
13020
13021       -Xbind-lazy
13022           Enable lazy binding of function calls.  This option is equivalent
13023           to -Wl,-z,now and is defined for compatibility with Diab.
13024
13025       -Xbind-now
13026           Disable lazy binding of function calls.  This option is the default
13027           and is defined for compatibility with Diab.
13028
13029   x86-64 Options
13030       These are listed under
13031
13032   Xstormy16 Options
13033       These options are defined for Xstormy16:
13034
13035       -msim
13036           Choose startup files and linker script suitable for the simulator.
13037
13038   Xtensa Options
13039       These options are supported for Xtensa targets:
13040
13041       -mconst16
13042       -mno-const16
13043           Enable or disable use of "CONST16" instructions for loading
13044           constant values.  The "CONST16" instruction is currently not a
13045           standard option from Tensilica.  When enabled, "CONST16"
13046           instructions are always used in place of the standard "L32R"
13047           instructions.  The use of "CONST16" is enabled by default only if
13048           the "L32R" instruction is not available.
13049
13050       -mfused-madd
13051       -mno-fused-madd
13052           Enable or disable use of fused multiply/add and multiply/subtract
13053           instructions in the floating-point option.  This has no effect if
13054           the floating-point option is not also enabled.  Disabling fused
13055           multiply/add and multiply/subtract instructions forces the compiler
13056           to use separate instructions for the multiply and add/subtract
13057           operations.  This may be desirable in some cases where strict IEEE
13058           754-compliant results are required: the fused multiply add/subtract
13059           instructions do not round the intermediate result, thereby
13060           producing results with more bits of precision than specified by the
13061           IEEE standard.  Disabling fused multiply add/subtract instructions
13062           also ensures that the program output is not sensitive to the
13063           compiler's ability to combine multiply and add/subtract operations.
13064
13065       -mserialize-volatile
13066       -mno-serialize-volatile
13067           When this option is enabled, GCC inserts "MEMW" instructions before
13068           "volatile" memory references to guarantee sequential consistency.
13069           The default is -mserialize-volatile.  Use -mno-serialize-volatile
13070           to omit the "MEMW" instructions.
13071
13072       -mtext-section-literals
13073       -mno-text-section-literals
13074           Control the treatment of literal pools.  The default is
13075           -mno-text-section-literals, which places literals in a separate
13076           section in the output file.  This allows the literal pool to be
13077           placed in a data RAM/ROM, and it also allows the linker to combine
13078           literal pools from separate object files to remove redundant
13079           literals and improve code size.  With -mtext-section-literals, the
13080           literals are interspersed in the text section in order to keep them
13081           as close as possible to their references.  This may be necessary
13082           for large assembly files.
13083
13084       -mtarget-align
13085       -mno-target-align
13086           When this option is enabled, GCC instructs the assembler to
13087           automatically align instructions to reduce branch penalties at the
13088           expense of some code density.  The assembler attempts to widen
13089           density instructions to align branch targets and the instructions
13090           following call instructions.  If there are not enough preceding
13091           safe density instructions to align a target, no widening will be
13092           performed.  The default is -mtarget-align.  These options do not
13093           affect the treatment of auto-aligned instructions like "LOOP",
13094           which the assembler will always align, either by widening density
13095           instructions or by inserting no-op instructions.
13096
13097       -mlongcalls
13098       -mno-longcalls
13099           When this option is enabled, GCC instructs the assembler to
13100           translate direct calls to indirect calls unless it can determine
13101           that the target of a direct call is in the range allowed by the
13102           call instruction.  This translation typically occurs for calls to
13103           functions in other source files.  Specifically, the assembler
13104           translates a direct "CALL" instruction into an "L32R" followed by a
13105           "CALLX" instruction.  The default is -mno-longcalls.  This option
13106           should be used in programs where the call target can potentially be
13107           out of range.  This option is implemented in the assembler, not the
13108           compiler, so the assembly code generated by GCC will still show
13109           direct call instructions---look at the disassembled object code to
13110           see the actual instructions.  Note that the assembler will use an
13111           indirect call for every cross-file call, not just those that really
13112           will be out of range.
13113
13114   zSeries Options
13115       These are listed under
13116
13117   Options for Code Generation Conventions
13118       These machine-independent options control the interface conventions
13119       used in code generation.
13120
13121       Most of them have both positive and negative forms; the negative form
13122       of -ffoo would be -fno-foo.  In the table below, only one of the forms
13123       is listed---the one which is not the default.  You can figure out the
13124       other form by either removing no- or adding it.
13125
13126       -fbounds-check
13127           For front-ends that support it, generate additional code to check
13128           that indices used to access arrays are within the declared range.
13129           This is currently only supported by the Java and Fortran front-
13130           ends, where this option defaults to true and false respectively.
13131
13132       -ftrapv
13133           This option generates traps for signed overflow on addition,
13134           subtraction, multiplication operations.
13135
13136       -fwrapv
13137           This option instructs the compiler to assume that signed arithmetic
13138           overflow of addition, subtraction and multiplication wraps around
13139           using twos-complement representation.  This flag enables some
13140           optimizations and disables others.  This option is enabled by
13141           default for the Java front-end, as required by the Java language
13142           specification.
13143
13144       -fexceptions
13145           Enable exception handling.  Generates extra code needed to
13146           propagate exceptions.  For some targets, this implies GCC will
13147           generate frame unwind information for all functions, which can
13148           produce significant data size overhead, although it does not affect
13149           execution.  If you do not specify this option, GCC will enable it
13150           by default for languages like C++ which normally require exception
13151           handling, and disable it for languages like C that do not normally
13152           require it.  However, you may need to enable this option when
13153           compiling C code that needs to interoperate properly with exception
13154           handlers written in C++.  You may also wish to disable this option
13155           if you are compiling older C++ programs that don't use exception
13156           handling.
13157
13158       -fnon-call-exceptions
13159           Generate code that allows trapping instructions to throw
13160           exceptions.  Note that this requires platform-specific runtime
13161           support that does not exist everywhere.  Moreover, it only allows
13162           trapping instructions to throw exceptions, i.e. memory references
13163           or floating point instructions.  It does not allow exceptions to be
13164           thrown from arbitrary signal handlers such as "SIGALRM".
13165
13166       -funwind-tables
13167           Similar to -fexceptions, except that it will just generate any
13168           needed static data, but will not affect the generated code in any
13169           other way.  You will normally not enable this option; instead, a
13170           language processor that needs this handling would enable it on your
13171           behalf.
13172
13173       -fasynchronous-unwind-tables
13174           Generate unwind table in dwarf2 format, if supported by target
13175           machine.  The table is exact at each instruction boundary, so it
13176           can be used for stack unwinding from asynchronous events (such as
13177           debugger or garbage collector).
13178
13179       -fpcc-struct-return
13180           Return "short" "struct" and "union" values in memory like longer
13181           ones, rather than in registers.  This convention is less efficient,
13182           but it has the advantage of allowing intercallability between GCC-
13183           compiled files and files compiled with other compilers,
13184           particularly the Portable C Compiler (pcc).
13185
13186           The precise convention for returning structures in memory depends
13187           on the target configuration macros.
13188
13189           Short structures and unions are those whose size and alignment
13190           match that of some integer type.
13191
13192           Warning: code compiled with the -fpcc-struct-return switch is not
13193           binary compatible with code compiled with the -freg-struct-return
13194           switch.  Use it to conform to a non-default application binary
13195           interface.
13196
13197       -freg-struct-return
13198           Return "struct" and "union" values in registers when possible.
13199           This is more efficient for small structures than
13200           -fpcc-struct-return.
13201
13202           If you specify neither -fpcc-struct-return nor -freg-struct-return,
13203           GCC defaults to whichever convention is standard for the target.
13204           If there is no standard convention, GCC defaults to
13205           -fpcc-struct-return, except on targets where GCC is the principal
13206           compiler.  In those cases, we can choose the standard, and we chose
13207           the more efficient register return alternative.
13208
13209           Warning: code compiled with the -freg-struct-return switch is not
13210           binary compatible with code compiled with the -fpcc-struct-return
13211           switch.  Use it to conform to a non-default application binary
13212           interface.
13213
13214       -fshort-enums
13215           Allocate to an "enum" type only as many bytes as it needs for the
13216           declared range of possible values.  Specifically, the "enum" type
13217           will be equivalent to the smallest integer type which has enough
13218           room.
13219
13220           Warning: the -fshort-enums switch causes GCC to generate code that
13221           is not binary compatible with code generated without that switch.
13222           Use it to conform to a non-default application binary interface.
13223
13224       -fshort-double
13225           Use the same size for "double" as for "float".
13226
13227           Warning: the -fshort-double switch causes GCC to generate code that
13228           is not binary compatible with code generated without that switch.
13229           Use it to conform to a non-default application binary interface.
13230
13231       -fshort-wchar
13232           Override the underlying type for wchar_t to be short unsigned int
13233           instead of the default for the target.  This option is useful for
13234           building programs to run under WINE.
13235
13236           Warning: the -fshort-wchar switch causes GCC to generate code that
13237           is not binary compatible with code generated without that switch.
13238           Use it to conform to a non-default application binary interface.
13239
13240       -fno-common
13241           In C code, controls the placement of uninitialized global
13242           variables.  Unix C compilers have traditionally permitted multiple
13243           definitions of such variables in different compilation units by
13244           placing the variables in a common block.  This is the behavior
13245           specified by -fcommon, and is the default for GCC on most targets.
13246           On the other hand, this behavior is not required by ISO C, and on
13247           some targets may carry a speed or code size penalty on variable
13248           references.  The -fno-common option specifies that the compiler
13249           should place uninitialized global variables in the data section of
13250           the object file, rather than generating them as common blocks.
13251           This has the effect that if the same variable is declared (without
13252           "extern") in two different compilations, you will get a multiple-
13253           definition error when you link them.  In this case, you must
13254           compile with -fcommon instead.  Compiling with -fno-common is
13255           useful on targets for which it provides better performance, or if
13256           you wish to verify that the program will work on other systems
13257           which always treat uninitialized variable declarations this way.
13258
13259       -fno-ident
13260           Ignore the #ident directive.
13261
13262       -finhibit-size-directive
13263           Don't output a ".size" assembler directive, or anything else that
13264           would cause trouble if the function is split in the middle, and the
13265           two halves are placed at locations far apart in memory.  This
13266           option is used when compiling crtstuff.c; you should not need to
13267           use it for anything else.
13268
13269       -fverbose-asm
13270           Put extra commentary information in the generated assembly code to
13271           make it more readable.  This option is generally only of use to
13272           those who actually need to read the generated assembly code
13273           (perhaps while debugging the compiler itself).
13274
13275           -fno-verbose-asm, the default, causes the extra information to be
13276           omitted and is useful when comparing two assembler files.
13277
13278       -frecord-gcc-switches
13279           This switch causes the command line that was used to invoke the
13280           compiler to be recorded into the object file that is being created.
13281           This switch is only implemented on some targets and the exact
13282           format of the recording is target and binary file format dependent,
13283           but it usually takes the form of a section containing ASCII text.
13284           This switch is related to the -fverbose-asm switch, but that switch
13285           only records information in the assembler output file as comments,
13286           so it never reaches the object file.
13287
13288       -fpic
13289           Generate position-independent code (PIC) suitable for use in a
13290           shared library, if supported for the target machine.  Such code
13291           accesses all constant addresses through a global offset table
13292           (GOT).  The dynamic loader resolves the GOT entries when the
13293           program starts (the dynamic loader is not part of GCC; it is part
13294           of the operating system).  If the GOT size for the linked
13295           executable exceeds a machine-specific maximum size, you get an
13296           error message from the linker indicating that -fpic does not work;
13297           in that case, recompile with -fPIC instead.  (These maximums are 8k
13298           on the SPARC and 32k on the m68k and RS/6000.  The 386 has no such
13299           limit.)
13300
13301           Position-independent code requires special support, and therefore
13302           works only on certain machines.  For the 386, GCC supports PIC for
13303           System V but not for the Sun 386i.  Code generated for the IBM
13304           RS/6000 is always position-independent.
13305
13306           When this flag is set, the macros "__pic__" and "__PIC__" are
13307           defined to 1.
13308
13309       -fPIC
13310           If supported for the target machine, emit position-independent
13311           code, suitable for dynamic linking and avoiding any limit on the
13312           size of the global offset table.  This option makes a difference on
13313           the m68k, PowerPC and SPARC.
13314
13315           Position-independent code requires special support, and therefore
13316           works only on certain machines.
13317
13318           When this flag is set, the macros "__pic__" and "__PIC__" are
13319           defined to 2.
13320
13321       -fpie
13322       -fPIE
13323           These options are similar to -fpic and -fPIC, but generated
13324           position independent code can be only linked into executables.
13325           Usually these options are used when -pie GCC option will be used
13326           during linking.
13327
13328           -fpie and -fPIE both define the macros "__pie__" and "__PIE__".
13329           The macros have the value 1 for -fpie and 2 for -fPIE.
13330
13331       -fno-jump-tables
13332           Do not use jump tables for switch statements even where it would be
13333           more efficient than other code generation strategies.  This option
13334           is of use in conjunction with -fpic or -fPIC for building code
13335           which forms part of a dynamic linker and cannot reference the
13336           address of a jump table.  On some targets, jump tables do not
13337           require a GOT and this option is not needed.
13338
13339       -ffixed-reg
13340           Treat the register named reg as a fixed register; generated code
13341           should never refer to it (except perhaps as a stack pointer, frame
13342           pointer or in some other fixed role).
13343
13344           reg must be the name of a register.  The register names accepted
13345           are machine-specific and are defined in the "REGISTER_NAMES" macro
13346           in the machine description macro file.
13347
13348           This flag does not have a negative form, because it specifies a
13349           three-way choice.
13350
13351       -fcall-used-reg
13352           Treat the register named reg as an allocable register that is
13353           clobbered by function calls.  It may be allocated for temporaries
13354           or variables that do not live across a call.  Functions compiled
13355           this way will not save and restore the register reg.
13356
13357           It is an error to used this flag with the frame pointer or stack
13358           pointer.  Use of this flag for other registers that have fixed
13359           pervasive roles in the machine's execution model will produce
13360           disastrous results.
13361
13362           This flag does not have a negative form, because it specifies a
13363           three-way choice.
13364
13365       -fcall-saved-reg
13366           Treat the register named reg as an allocable register saved by
13367           functions.  It may be allocated even for temporaries or variables
13368           that live across a call.  Functions compiled this way will save and
13369           restore the register reg if they use it.
13370
13371           It is an error to used this flag with the frame pointer or stack
13372           pointer.  Use of this flag for other registers that have fixed
13373           pervasive roles in the machine's execution model will produce
13374           disastrous results.
13375
13376           A different sort of disaster will result from the use of this flag
13377           for a register in which function values may be returned.
13378
13379           This flag does not have a negative form, because it specifies a
13380           three-way choice.
13381
13382       -fpack-struct[=n]
13383           Without a value specified, pack all structure members together
13384           without holes.  When a value is specified (which must be a small
13385           power of two), pack structure members according to this value,
13386           representing the maximum alignment (that is, objects with default
13387           alignment requirements larger than this will be output potentially
13388           unaligned at the next fitting location.
13389
13390           Warning: the -fpack-struct switch causes GCC to generate code that
13391           is not binary compatible with code generated without that switch.
13392           Additionally, it makes the code suboptimal.  Use it to conform to a
13393           non-default application binary interface.
13394
13395       -finstrument-functions
13396           Generate instrumentation calls for entry and exit to functions.
13397           Just after function entry and just before function exit, the
13398           following profiling functions will be called with the address of
13399           the current function and its call site.  (On some platforms,
13400           "__builtin_return_address" does not work beyond the current
13401           function, so the call site information may not be available to the
13402           profiling functions otherwise.)
13403
13404                   void __cyg_profile_func_enter (void *this_fn,
13405                                                  void *call_site);
13406                   void __cyg_profile_func_exit  (void *this_fn,
13407                                                  void *call_site);
13408
13409           The first argument is the address of the start of the current
13410           function, which may be looked up exactly in the symbol table.
13411
13412           This instrumentation is also done for functions expanded inline in
13413           other functions.  The profiling calls will indicate where,
13414           conceptually, the inline function is entered and exited.  This
13415           means that addressable versions of such functions must be
13416           available.  If all your uses of a function are expanded inline,
13417           this may mean an additional expansion of code size.  If you use
13418           extern inline in your C code, an addressable version of such
13419           functions must be provided.  (This is normally the case anyways,
13420           but if you get lucky and the optimizer always expands the functions
13421           inline, you might have gotten away without providing static
13422           copies.)
13423
13424           A function may be given the attribute "no_instrument_function", in
13425           which case this instrumentation will not be done.  This can be
13426           used, for example, for the profiling functions listed above, high-
13427           priority interrupt routines, and any functions from which the
13428           profiling functions cannot safely be called (perhaps signal
13429           handlers, if the profiling routines generate output or allocate
13430           memory).
13431
13432       -finstrument-functions-exclude-file-list=file,file,...
13433           Set the list of functions that are excluded from instrumentation
13434           (see the description of "-finstrument-functions").  If the file
13435           that contains a function definition matches with one of file, then
13436           that function is not instrumented.  The match is done on
13437           substrings: if the file parameter is a substring of the file name,
13438           it is considered to be a match.
13439
13440           For example,
13441           "-finstrument-functions-exclude-file-list=/bits/stl,include/sys"
13442           will exclude any inline function defined in files whose pathnames
13443           contain "/bits/stl" or "include/sys".
13444
13445           If, for some reason, you want to include letter ',' in one of sym,
13446           write ','. For example,
13447           "-finstrument-functions-exclude-file-list=',,tmp'" (note the single
13448           quote surrounding the option).
13449
13450       -finstrument-functions-exclude-function-list=sym,sym,...
13451           This is similar to "-finstrument-functions-exclude-file-list", but
13452           this option sets the list of function names to be excluded from
13453           instrumentation.  The function name to be matched is its user-
13454           visible name, such as "vector<int> blah(const vector<int> &)", not
13455           the internal mangled name (e.g., "_Z4blahRSt6vectorIiSaIiEE").  The
13456           match is done on substrings: if the sym parameter is a substring of
13457           the function name, it is considered to be a match.
13458
13459       -fstack-check
13460           Generate code to verify that you do not go beyond the boundary of
13461           the stack.  You should specify this flag if you are running in an
13462           environment with multiple threads, but only rarely need to specify
13463           it in a single-threaded environment since stack overflow is
13464           automatically detected on nearly all systems if there is only one
13465           stack.
13466
13467           Note that this switch does not actually cause checking to be done;
13468           the operating system or the language runtime must do that.  The
13469           switch causes generation of code to ensure that they see the stack
13470           being extended.
13471
13472           You can additionally specify a string parameter: "no" means no
13473           checking, "generic" means force the use of old-style checking,
13474           "specific" means use the best checking method and is equivalent to
13475           bare -fstack-check.
13476
13477           Old-style checking is a generic mechanism that requires no specific
13478           target support in the compiler but comes with the following
13479           drawbacks:
13480
13481           1.  Modified allocation strategy for large objects: they will
13482               always be allocated dynamically if their size exceeds a fixed
13483               threshold.
13484
13485           2.  Fixed limit on the size of the static frame of functions: when
13486               it is topped by a particular function, stack checking is not
13487               reliable and a warning is issued by the compiler.
13488
13489           3.  Inefficiency: because of both the modified allocation strategy
13490               and the generic implementation, the performances of the code
13491               are hampered.
13492
13493           Note that old-style stack checking is also the fallback method for
13494           "specific" if no target support has been added in the compiler.
13495
13496       -fstack-limit-register=reg
13497       -fstack-limit-symbol=sym
13498       -fno-stack-limit
13499           Generate code to ensure that the stack does not grow beyond a
13500           certain value, either the value of a register or the address of a
13501           symbol.  If the stack would grow beyond the value, a signal is
13502           raised.  For most targets, the signal is raised before the stack
13503           overruns the boundary, so it is possible to catch the signal
13504           without taking special precautions.
13505
13506           For instance, if the stack starts at absolute address 0x80000000
13507           and grows downwards, you can use the flags
13508           -fstack-limit-symbol=__stack_limit and
13509           -Wl,--defsym,__stack_limit=0x7ffe0000 to enforce a stack limit of
13510           128KB.  Note that this may only work with the GNU linker.
13511
13512       -fargument-alias
13513       -fargument-noalias
13514       -fargument-noalias-global
13515       -fargument-noalias-anything
13516           Specify the possible relationships among parameters and between
13517           parameters and global data.
13518
13519           -fargument-alias specifies that arguments (parameters) may alias
13520           each other and may alias global storage.-fargument-noalias
13521           specifies that arguments do not alias each other, but may alias
13522           global storage.-fargument-noalias-global specifies that arguments
13523           do not alias each other and do not alias global storage.
13524           -fargument-noalias-anything specifies that arguments do not alias
13525           any other storage.
13526
13527           Each language will automatically use whatever option is required by
13528           the language standard.  You should not need to use these options
13529           yourself.
13530
13531       -fleading-underscore
13532           This option and its counterpart, -fno-leading-underscore, forcibly
13533           change the way C symbols are represented in the object file.  One
13534           use is to help link with legacy assembly code.
13535
13536           Warning: the -fleading-underscore switch causes GCC to generate
13537           code that is not binary compatible with code generated without that
13538           switch.  Use it to conform to a non-default application binary
13539           interface.  Not all targets provide complete support for this
13540           switch.
13541
13542       -ftls-model=model
13543           Alter the thread-local storage model to be used.  The model
13544           argument should be one of "global-dynamic", "local-dynamic",
13545           "initial-exec" or "local-exec".
13546
13547           The default without -fpic is "initial-exec"; with -fpic the default
13548           is "global-dynamic".
13549
13550       -fvisibility=default|internal|hidden|protected
13551           Set the default ELF image symbol visibility to the specified
13552           option---all symbols will be marked with this unless overridden
13553           within the code.  Using this feature can very substantially improve
13554           linking and load times of shared object libraries, produce more
13555           optimized code, provide near-perfect API export and prevent symbol
13556           clashes.  It is strongly recommended that you use this in any
13557           shared objects you distribute.
13558
13559           Despite the nomenclature, "default" always means public ie;
13560           available to be linked against from outside the shared object.
13561           "protected" and "internal" are pretty useless in real-world usage
13562           so the only other commonly used option will be "hidden".  The
13563           default if -fvisibility isn't specified is "default", i.e., make
13564           every symbol public---this causes the same behavior as previous
13565           versions of GCC.
13566
13567           A good explanation of the benefits offered by ensuring ELF symbols
13568           have the correct visibility is given by "How To Write Shared
13569           Libraries" by Ulrich Drepper (which can be found at
13570           <http://people.redhat.com/~drepper/>)---however a superior solution
13571           made possible by this option to marking things hidden when the
13572           default is public is to make the default hidden and mark things
13573           public.  This is the norm with DLL's on Windows and with
13574           -fvisibility=hidden and "__attribute__ ((visibility("default")))"
13575           instead of "__declspec(dllexport)" you get almost identical
13576           semantics with identical syntax.  This is a great boon to those
13577           working with cross-platform projects.
13578
13579           For those adding visibility support to existing code, you may find
13580           #pragma GCC visibility of use.  This works by you enclosing the
13581           declarations you wish to set visibility for with (for example)
13582           #pragma GCC visibility push(hidden) and #pragma GCC visibility pop.
13583           Bear in mind that symbol visibility should be viewed as part of the
13584           API interface contract and thus all new code should always specify
13585           visibility when it is not the default ie; declarations only for use
13586           within the local DSO should always be marked explicitly as hidden
13587           as so to avoid PLT indirection overheads---making this abundantly
13588           clear also aids readability and self-documentation of the code.
13589           Note that due to ISO C++ specification requirements, operator new
13590           and operator delete must always be of default visibility.
13591
13592           Be aware that headers from outside your project, in particular
13593           system headers and headers from any other library you use, may not
13594           be expecting to be compiled with visibility other than the default.
13595           You may need to explicitly say #pragma GCC visibility push(default)
13596           before including any such headers.
13597
13598           extern declarations are not affected by -fvisibility, so a lot of
13599           code can be recompiled with -fvisibility=hidden with no
13600           modifications.  However, this means that calls to extern functions
13601           with no explicit visibility will use the PLT, so it is more
13602           effective to use __attribute ((visibility)) and/or #pragma GCC
13603           visibility to tell the compiler which extern declarations should be
13604           treated as hidden.
13605
13606           Note that -fvisibility does affect C++ vague linkage entities. This
13607           means that, for instance, an exception class that will be thrown
13608           between DSOs must be explicitly marked with default visibility so
13609           that the type_info nodes will be unified between the DSOs.
13610
13611           An overview of these techniques, their benefits and how to use them
13612           is at <http://gcc.gnu.org/wiki/Visibility>.
13613

ENVIRONMENT

13615       This section describes several environment variables that affect how
13616       GCC operates.  Some of them work by specifying directories or prefixes
13617       to use when searching for various kinds of files.  Some are used to
13618       specify other aspects of the compilation environment.
13619
13620       Note that you can also specify places to search using options such as
13621       -B, -I and -L.  These take precedence over places specified using
13622       environment variables, which in turn take precedence over those
13623       specified by the configuration of GCC.
13624
13625       LANG
13626       LC_CTYPE
13627       LC_MESSAGES
13628       LC_ALL
13629           These environment variables control the way that GCC uses
13630           localization information that allow GCC to work with different
13631           national conventions.  GCC inspects the locale categories LC_CTYPE
13632           and LC_MESSAGES if it has been configured to do so.  These locale
13633           categories can be set to any value supported by your installation.
13634           A typical value is en_GB.UTF-8 for English in the United Kingdom
13635           encoded in UTF-8.
13636
13637           The LC_CTYPE environment variable specifies character
13638           classification.  GCC uses it to determine the character boundaries
13639           in a string; this is needed for some multibyte encodings that
13640           contain quote and escape characters that would otherwise be
13641           interpreted as a string end or escape.
13642
13643           The LC_MESSAGES environment variable specifies the language to use
13644           in diagnostic messages.
13645
13646           If the LC_ALL environment variable is set, it overrides the value
13647           of LC_CTYPE and LC_MESSAGES; otherwise, LC_CTYPE and LC_MESSAGES
13648           default to the value of the LANG environment variable.  If none of
13649           these variables are set, GCC defaults to traditional C English
13650           behavior.
13651
13652       TMPDIR
13653           If TMPDIR is set, it specifies the directory to use for temporary
13654           files.  GCC uses temporary files to hold the output of one stage of
13655           compilation which is to be used as input to the next stage: for
13656           example, the output of the preprocessor, which is the input to the
13657           compiler proper.
13658
13659       GCC_EXEC_PREFIX
13660           If GCC_EXEC_PREFIX is set, it specifies a prefix to use in the
13661           names of the subprograms executed by the compiler.  No slash is
13662           added when this prefix is combined with the name of a subprogram,
13663           but you can specify a prefix that ends with a slash if you wish.
13664
13665           If GCC_EXEC_PREFIX is not set, GCC will attempt to figure out an
13666           appropriate prefix to use based on the pathname it was invoked
13667           with.
13668
13669           If GCC cannot find the subprogram using the specified prefix, it
13670           tries looking in the usual places for the subprogram.
13671
13672           The default value of GCC_EXEC_PREFIX is prefix/lib/gcc/ where
13673           prefix is the prefix to the installed compiler. In many cases
13674           prefix is the value of "prefix" when you ran the configure script.
13675
13676           Other prefixes specified with -B take precedence over this prefix.
13677
13678           This prefix is also used for finding files such as crt0.o that are
13679           used for linking.
13680
13681           In addition, the prefix is used in an unusual way in finding the
13682           directories to search for header files.  For each of the standard
13683           directories whose name normally begins with /usr/local/lib/gcc
13684           (more precisely, with the value of GCC_INCLUDE_DIR), GCC tries
13685           replacing that beginning with the specified prefix to produce an
13686           alternate directory name.  Thus, with -Bfoo/, GCC will search
13687           foo/bar where it would normally search /usr/local/lib/bar.  These
13688           alternate directories are searched first; the standard directories
13689           come next. If a standard directory begins with the configured
13690           prefix then the value of prefix is replaced by GCC_EXEC_PREFIX when
13691           looking for header files.
13692
13693       COMPILER_PATH
13694           The value of COMPILER_PATH is a colon-separated list of
13695           directories, much like PATH.  GCC tries the directories thus
13696           specified when searching for subprograms, if it can't find the
13697           subprograms using GCC_EXEC_PREFIX.
13698
13699       LIBRARY_PATH
13700           The value of LIBRARY_PATH is a colon-separated list of directories,
13701           much like PATH.  When configured as a native compiler, GCC tries
13702           the directories thus specified when searching for special linker
13703           files, if it can't find them using GCC_EXEC_PREFIX.  Linking using
13704           GCC also uses these directories when searching for ordinary
13705           libraries for the -l option (but directories specified with -L come
13706           first).
13707
13708       LANG
13709           This variable is used to pass locale information to the compiler.
13710           One way in which this information is used is to determine the
13711           character set to be used when character literals, string literals
13712           and comments are parsed in C and C++.  When the compiler is
13713           configured to allow multibyte characters, the following values for
13714           LANG are recognized:
13715
13716           C-JIS
13717               Recognize JIS characters.
13718
13719           C-SJIS
13720               Recognize SJIS characters.
13721
13722           C-EUCJP
13723               Recognize EUCJP characters.
13724
13725           If LANG is not defined, or if it has some other value, then the
13726           compiler will use mblen and mbtowc as defined by the default locale
13727           to recognize and translate multibyte characters.
13728
13729       Some additional environments variables affect the behavior of the
13730       preprocessor.
13731
13732       CPATH
13733       C_INCLUDE_PATH
13734       CPLUS_INCLUDE_PATH
13735       OBJC_INCLUDE_PATH
13736           Each variable's value is a list of directories separated by a
13737           special character, much like PATH, in which to look for header
13738           files.  The special character, "PATH_SEPARATOR", is target-
13739           dependent and determined at GCC build time.  For Microsoft Windows-
13740           based targets it is a semicolon, and for almost all other targets
13741           it is a colon.
13742
13743           CPATH specifies a list of directories to be searched as if
13744           specified with -I, but after any paths given with -I options on the
13745           command line.  This environment variable is used regardless of
13746           which language is being preprocessed.
13747
13748           The remaining environment variables apply only when preprocessing
13749           the particular language indicated.  Each specifies a list of
13750           directories to be searched as if specified with -isystem, but after
13751           any paths given with -isystem options on the command line.
13752
13753           In all these variables, an empty element instructs the compiler to
13754           search its current working directory.  Empty elements can appear at
13755           the beginning or end of a path.  For instance, if the value of
13756           CPATH is ":/special/include", that has the same effect as
13757           -I. -I/special/include.
13758
13759       DEPENDENCIES_OUTPUT
13760           If this variable is set, its value specifies how to output
13761           dependencies for Make based on the non-system header files
13762           processed by the compiler.  System header files are ignored in the
13763           dependency output.
13764
13765           The value of DEPENDENCIES_OUTPUT can be just a file name, in which
13766           case the Make rules are written to that file, guessing the target
13767           name from the source file name.  Or the value can have the form
13768           file target, in which case the rules are written to file file using
13769           target as the target name.
13770
13771           In other words, this environment variable is equivalent to
13772           combining the options -MM and -MF, with an optional -MT switch too.
13773
13774       SUNPRO_DEPENDENCIES
13775           This variable is the same as DEPENDENCIES_OUTPUT (see above),
13776           except that system header files are not ignored, so it implies -M
13777           rather than -MM.  However, the dependence on the main input file is
13778           omitted.
13779

BUGS

13781       For instructions on reporting bugs, see
13782       <http://bugzilla.redhat.com/bugzilla>.
13783

FOOTNOTES

13785       1.  On some systems, gcc -shared needs to build supplementary stub code
13786           for constructors to work.  On multi-libbed systems, gcc -shared
13787           must select the correct support libraries to link against.  Failing
13788           to supply the correct flags may lead to subtle defects.  Supplying
13789           them in cases where they are not necessary is innocuous.
13790

SEE ALSO

13792       gpl(7), gfdl(7), fsf-funding(7), cpp(1), gcov(1), as(1), ld(1), gdb(1),
13793       adb(1), dbx(1), sdb(1) and the Info entries for gcc, cpp, as, ld,
13794       binutils and gdb.
13795

AUTHOR

13797       See the Info entry for gcc, or
13798       <http://gcc.gnu.org/onlinedocs/gcc/Contributors.html>, for contributors
13799       to GCC.
13800
13802       Copyright (c) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
13803       1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free
13804       Software Foundation, Inc.
13805
13806       Permission is granted to copy, distribute and/or modify this document
13807       under the terms of the GNU Free Documentation License, Version 1.2 or
13808       any later version published by the Free Software Foundation; with the
13809       Invariant Sections being "GNU General Public License" and "Funding Free
13810       Software", the Front-Cover texts being (a) (see below), and with the
13811       Back-Cover Texts being (b) (see below).  A copy of the license is
13812       included in the gfdl(7) man page.
13813
13814       (a) The FSF's Front-Cover Text is:
13815
13816            A GNU Manual
13817
13818       (b) The FSF's Back-Cover Text is:
13819
13820            You have freedom to copy and modify this GNU Manual, like GNU
13821            software.  Copies published by the Free Software Foundation raise
13822            funds for GNU development.
13823
13824
13825
13826gcc-4.4.7                         2012-03-13                            GCC(1)
Impressum